:root{--bg: #f9f5ee;--pine: #4a6741;--sage: #8fa88b;--gold: #c4883a;--coral: #d4845a;--ink: #3a3830;--cream: #f5f0e6;--panel: #f3eee4;--muted: #888;--shadow: 0 4px 24px rgba(58, 56, 48, .12);--sidebar-players: 340px;--hand-footer-h: 168px;--top-bar-h: 76px;--shell-pad: 8px}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{font-family:Segoe UI,system-ui,sans-serif;background:linear-gradient(180deg,#efe8db 0%,var(--bg) 80px);color:var(--ink)}#app{width:100vw;height:100vh;max-width:1920px;max-height:1080px;margin:0 auto;padding:var(--shell-pad);overflow:hidden;position:relative}#game-mount{width:100%;height:100%}h1,h2,h3{margin:0;font-weight:700}button{font:inherit;cursor:pointer;border:none;border-radius:8px;padding:.45rem .75rem;background:var(--pine);color:var(--cream);transition:transform .1s,opacity .15s;font-size:.82rem}button:hover:not(:disabled){transform:translateY(-1px)}button:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--panel);color:var(--ink);border:2px solid var(--sage)}button.gold{background:var(--gold)}.menu,.game-over{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:1rem}.menu img.logo{max-width:min(420px,40vw);max-height:28vh}.menu .tagline{color:var(--gold);letter-spacing:.06em;text-transform:uppercase;font-size:.8rem}.menu-actions{display:flex;gap:1rem}.menu-actions button{min-width:160px;padding:.75rem 1.25rem;font-size:1rem}.game-over h2{color:var(--gold);font-size:1.8rem}.game-over p{margin:.2rem 0;font-size:.9rem}.game-shell{height:100%;display:grid;grid-template-rows:var(--top-bar-h) 1fr var(--hand-footer-h);gap:var(--shell-pad);overflow:hidden}.top-bar{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.75rem;background:var(--pine);color:var(--cream);border-radius:12px;padding:0 .85rem;box-shadow:var(--shadow)}.top-bar-left{display:flex;align-items:center;gap:.6rem;min-width:0}.top-bar-center{display:flex;justify-content:center;align-items:center;min-width:0}.top-bar-right{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:.15rem;min-width:0;max-width:28%}.player-hud{display:flex;align-items:center;justify-content:center;gap:.85rem}.van-avatar{width:52px;height:52px;border-radius:10px;overflow:hidden;flex-shrink:0;border:2px solid rgba(255,255,255,.35);box-shadow:0 2px 8px #00000040;background:#0003}.van-avatar img{width:100%;height:100%;object-fit:cover;display:block}.hud-title{font-size:1.05rem;white-space:nowrap}.hud-sub{font-size:.72rem;opacity:.9;text-align:right;line-height:1.25;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.stats{display:flex;gap:.4rem}.stats-main{gap:.55rem}.stats-main .stat{background:#ffffff29;border-radius:10px;padding:.35rem .7rem;font-size:1.05rem;font-weight:700;min-width:3.2rem;justify-content:center}.stats-main .stat img{width:30px;height:30px}.stat{background:#ffffff1f;border-radius:8px;padding:.25rem .45rem;display:flex;align-items:center;gap:.25rem;font-size:.82rem}.stat img{width:20px;height:20px}.stat.stat-flash{animation:stat-flash .7s ease}.ai-indicator{font-size:.72rem;white-space:nowrap;padding:.2rem .5rem;background:#ffffff26;border-radius:6px;animation:ai-pulse 1.2s ease-in-out infinite}.day-track{display:flex;gap:.25rem}.day-dot{width:22px;height:22px;border-radius:50%;background:#ffffff26;display:flex;align-items:center;justify-content:center;font-size:.62rem;font-weight:700}.day-dot.done{background:#ffffff59}.day-dot.current{background:var(--gold);color:#fff}.day-dot.day-pulse{animation:day-pulse .8s ease}.game-main{display:grid;grid-template-columns:var(--sidebar-players) 1fr var(--sidebar-players);gap:var(--shell-pad);min-height:0;overflow:hidden}.game-main.game-main-solo{grid-template-columns:var(--sidebar-players) 1fr 220px}.sidebar-self,.sidebar-opponents{display:flex;flex-direction:column;gap:.45rem;min-height:0;min-width:0;overflow:hidden}.sidebar-heading{margin:0;font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:700;flex-shrink:0}.sidebar-self .player-panel{flex:1}.sidebar-self .player-block{flex:1;min-height:0}.sidebar-opponents .player-panel{flex:0 1 auto;max-height:55%}.game-main-solo .sidebar-opponents .log{flex:1}.hand-footer{display:grid;grid-template-columns:1fr 1fr 1fr;gap:var(--shell-pad);min-height:0;overflow:visible;z-index:6;align-items:stretch}.board-center{position:relative;min-width:0;min-height:0;display:flex;align-items:stretch;overflow:visible;z-index:1}.wind-down-cta{position:absolute;top:0;right:0;bottom:0;left:0;z-index:12;display:flex;align-items:center;justify-content:center;pointer-events:none}.wind-down-cta-panel{pointer-events:auto;background:#fffffff7;border:3px solid var(--gold);border-radius:16px;box-shadow:0 12px 40px #00000059,0 0 0 6px #c4883a40;padding:1.25rem 1.75rem 1.35rem;text-align:center;max-width:min(420px,92%);animation:wind-down-pop .35s ease-out}@keyframes wind-down-pop{0%{opacity:0;transform:scale(.92) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}.wind-down-cta-title{margin:0 0 .35rem;font-size:1.05rem;font-weight:700;color:var(--pine);letter-spacing:.02em}.wind-down-cta-hint{margin:0 0 1rem;font-size:.82rem;line-height:1.4;color:var(--muted)}.wind-down-cta-btn{font-size:1.15rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.85rem 2.5rem;min-width:220px;box-shadow:0 4px 14px #c4883a73}.wind-down-cta-btn:hover{filter:brightness(1.06);transform:translateY(-1px)}.hand-section{background:#fff;border-radius:12px;padding:.45rem .55rem;box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:0;overflow:visible}.hand-section h3{color:var(--pine);font-size:.72rem;margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.04em}.hand-count{font-weight:400;color:var(--muted)}.card-row{flex:1;display:flex;gap:.45rem;align-items:flex-end;min-height:0;overflow-x:auto;overflow-y:visible;padding-bottom:2px}.hover-card{position:relative;transition:box-shadow .15s ease,filter .15s ease}.hover-card:hover{z-index:10;box-shadow:0 4px 16px #c4883a59;filter:brightness(1.05)}.game-card{flex:0 0 100px;border-radius:8px;overflow:hidden;cursor:default;border:3px solid transparent;background:#fff}.game-card img{width:100%;display:block;pointer-events:none}.game-card.playable{border-color:var(--gold);cursor:pointer}.game-card.hazard{border-color:var(--coral);position:relative}.time-fix-btn{position:absolute;left:4px;right:4px;bottom:4px;padding:3px 0;font-size:11px;font-weight:700;border:none;border-radius:6px;background:var(--coral);color:#fff;cursor:pointer;opacity:.92}.time-fix-btn:hover{opacity:1}.game-card.matches-van{border-color:var(--gold);box-shadow:0 0 0 1px #c4883a66}.gameboard{position:relative;flex:1;width:100%;height:100%;border-radius:12px;overflow:visible;background-color:#1a1f16;border:3px solid var(--sage)}.gameboard-bg{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:9px;background:url(/style/anchor.png) center / cover no-repeat;opacity:.2;z-index:0;pointer-events:none}.gameboard-overlay{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:9px;background:#080c0680;z-index:0;pointer-events:none}.road-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1}.road-path{fill:none;stroke:#d4c4a0;stroke-width:2.2;stroke-linecap:round;opacity:.9;filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))}.road-main{stroke-width:3.2;stroke:#e8dcc0;opacity:1}.road-branch{stroke-width:1.8;stroke-dasharray:4 3;opacity:.75}.map-tile{position:absolute;width:115px;transform:translate(-50%,-50%);z-index:2;cursor:default}.tile-payout-bonuses{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:3}.tile-upgrade-bonus{position:absolute;transform:translate(18%,-72%);display:inline-flex;align-items:center;gap:1px;padding:1px 4px 1px 2px;border-radius:6px;background:#1a1f16e0;border:1.5px solid var(--gold);box-shadow:0 1px 4px #00000073;color:var(--gold);font-size:.58rem;font-weight:800;line-height:1;white-space:nowrap}.tile-upgrade-bonus img{width:12px;height:12px;display:block;filter:drop-shadow(0 0 1px rgba(0,0,0,.4))}.tile-upgrade-bonus span{letter-spacing:-.02em}.map-tile.multi-occupancy img{border-color:#b4dcfff2}.tile-occupancy{position:absolute;bottom:18px;right:2px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--gold);color:#1a1208;font-size:.58rem;font-weight:800;display:flex;align-items:center;justify-content:center;z-index:4;pointer-events:none;box-shadow:0 1px 3px #00000059}.map-tile.can-visit{cursor:pointer}.map-tile img{width:100%;border-radius:8px;display:block;box-shadow:0 4px 16px #0000008c;border:3px solid rgba(255,255,255,.92);pointer-events:none}.map-tile.can-visit img{border-color:var(--gold);box-shadow:0 0 0 2px #c4883a73,0 3px 12px #00000059}.map-tile.action-pulse{animation:tile-pulse .9s ease}.map-tile.action-pulse img{border-color:var(--cream);box-shadow:0 0 0 4px var(--gold),0 0 24px #c4883ab3}.map-tile.visited img{filter:grayscale(.65) brightness(.75)}.map-tile.exhausted:not(.visited) img{filter:grayscale(.85) brightness(.6)}.map-tile.exhausted:not(.visited) .map-label{opacity:.55}.map-tile.exhausted:not(.visited):after{content:"✕";position:absolute;top:2px;right:2px;background:var(--coral);color:#fff;width:18px;height:18px;border-radius:50%;font-size:.6rem;display:flex;align-items:center;justify-content:center;font-weight:700;z-index:3}.map-tile.visited:after{content:"🚐";position:absolute;top:2px;right:2px;background:#4a9e5ceb;color:#fff;width:20px;height:20px;border-radius:50%;font-size:.62rem;display:flex;align-items:center;justify-content:center;font-weight:700;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}.map-label{display:block;text-align:center;font-size:.68rem;font-weight:700;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.95);margin-top:3px;line-height:1.1;pointer-events:none}.van-token{position:absolute;z-index:10;font-size:1.2rem;transform:translate(-50%,-50%);filter:drop-shadow(0 2px 4px rgba(0,0,0,.5));pointer-events:none;transition:left .55s ease,top .55s ease;line-height:1}.van-token.human{z-index:11;filter:drop-shadow(0 2px 4px rgba(0,0,0,.45)) saturate(1.4) hue-rotate(-35deg) brightness(1.05)}.van-token.ai{filter:drop-shadow(0 2px 4px rgba(0,0,0,.45)) saturate(1.5) hue-rotate(145deg) brightness(.95)}.player-panel{background:#fff;border-radius:12px;padding:.55rem;box-shadow:var(--shadow);flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:.5rem}.player-block{border:2px solid var(--panel);border-radius:10px;padding:.55rem .65rem;background:linear-gradient(180deg,#fff,#faf8f4)}.player-block.player-human{border-color:#c4883a59}.player-block-head{display:flex;gap:.55rem;align-items:center}.player-van-thumb{width:56px;height:56px;border-radius:8px;overflow:hidden;flex-shrink:0;border:2px solid rgba(45,74,62,.2);box-shadow:0 2px 6px #0000001f}.player-van-thumb img{width:100%;height:100%;object-fit:cover;display:block}.player-identity h3{color:var(--pine);font-size:.95rem;line-height:1.15}.player-goal-type{font-size:.62rem;font-weight:700;letter-spacing:.06em;color:var(--gold);margin-top:.1rem}.player-block.active-turn{border-color:var(--gold);background:linear-gradient(180deg,#fffaf2,#fff5e6);box-shadow:0 0 0 2px #c4883a40}.player-block.turn-flash{animation:turn-flash .9s ease}.player-block h3{color:var(--pine);font-size:.95rem}.player-meta{font-size:.72rem;color:var(--muted)}.time-pips{display:flex;align-items:center;gap:.35rem;margin-top:.3rem;font-weight:600}.visit-vans{display:inline-flex;align-items:center;gap:.15rem}.visit-van{display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;font-size:.72rem;line-height:1;border-radius:4px}.visit-van-empty{filter:grayscale(1) opacity(.38)}.visit-van-player{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2)) saturate(1.5) hue-rotate(-40deg) brightness(1.05)}.visit-van-opponent{filter:drop-shadow(0 1px 2px rgba(0,0,0,.2)) saturate(1.6) hue-rotate(140deg) brightness(.95)}.time-pips>span{color:var(--muted);font-size:.68rem;font-weight:500}.player-score{font-size:.82rem;font-weight:600;margin-top:.35rem}.player-score .vp-note{font-weight:400;font-size:.65rem;color:var(--muted)}.player-next-action{margin-top:.45rem;padding:.45rem .5rem;border-radius:8px;background:linear-gradient(180deg,#fff9ee,#fff3dc);border:1px solid rgba(196,136,58,.35);font-size:.72rem;line-height:1.35;color:var(--pine);font-weight:600}.player-block.active-turn .player-next-action{border-color:var(--gold);box-shadow:0 0 0 1px #c4883a33}.player-van-hidden{background:var(--panel);border-style:dashed;opacity:.85}.player-van-hidden img{object-fit:contain;padding:6px}.player-resources{display:flex;flex-wrap:wrap;gap:.28rem;margin-top:.35rem}.player-res-chip{display:inline-flex;align-items:center;gap:.2rem;background:var(--panel);border-radius:8px;padding:.2rem .45rem;font-size:.78rem;font-weight:700;color:var(--ink)}.player-res-chip img{width:18px;height:18px}.endgame-ref{font-size:.65rem;color:var(--muted);margin-top:.2rem;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upgrades{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.25rem}.upgrade-chip{width:32px;height:32px;border-radius:6px;overflow:hidden;background:var(--panel);border:1px solid rgba(0,0,0,.08);flex-shrink:0}.upgrade-chip img{width:100%;height:100%;object-fit:cover;display:block}.actions{display:flex;flex-direction:column;gap:.35rem;flex-shrink:0}.log{flex:1;background:var(--panel);border-radius:10px;padding:.45rem .55rem;font-size:.68rem;line-height:1.35;overflow:hidden;min-height:0}.log p{margin:.1rem 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-visit{color:var(--pine)}.log-goal{color:var(--gold);font-weight:600}.log-hazard{color:var(--coral)}.log-turn{color:#666;font-style:italic}.log-day{color:var(--pine);font-weight:600}.game-shell.game-busy{pointer-events:none;opacity:.92}.game-shell.game-busy .gameboard{filter:saturate(.85)}#modal[hidden]{display:none!important;pointer-events:none!important}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:500;padding:1rem}.modal{background:var(--bg);border-radius:16px;padding:1.25rem;max-width:min(920px,96vw);max-height:min(960px,96vh);overflow:hidden;box-shadow:var(--shadow)}.modal h2{color:var(--pine);margin-bottom:.75rem;font-size:1.2rem}.modal-subtitle{color:var(--muted);margin:-.35rem 0 .75rem;line-height:1.4;font-size:.85rem}.modal-actions{display:flex;gap:.5rem;margin-top:.75rem;justify-content:flex-end}.picker-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.75rem;max-height:min(720px,70vh);overflow-y:auto}.van-picker-grid{display:flex;flex-direction:column;align-items:center;gap:.85rem;max-height:min(780px,78vh)}.van-picker-row{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:.75rem;width:100%;max-width:720px}.van-picker-row-bottom{display:flex;justify-content:center;gap:.75rem}.van-picker-row-bottom .van-pick{width:min(200px,calc((100% - 1.5rem) / 3));flex:0 0 auto}.picker-card{border:3px solid transparent;border-radius:10px;overflow:hidden;cursor:pointer;background:#fff;box-shadow:var(--shadow);transition:border-color .15s;padding:0;font:inherit;text-align:left;width:100%}button.picker-card{display:block}.picker-card:hover,.picker-card.selected{border-color:var(--gold)}.picker-card img{width:100%;display:block}.van-pick-caption{font-size:.7rem;text-align:center;padding:.3rem .2rem 0;line-height:1.3}.van-pick-caption strong{color:var(--pine)}.resource-picks{display:flex;gap:.5rem;flex-wrap:wrap}.resource-picks button.selected{outline:3px solid var(--gold)}#card-preview,.card-preview{position:fixed;z-index:2000;pointer-events:none;background:var(--bg);border-radius:14px;padding:10px;box-shadow:0 20px 60px #000000a6;border:4px solid var(--gold)}.card-preview img{width:320px;display:block;border-radius:10px}.preview-media{position:relative;display:inline-block}.preview-media-location{width:360px}.preview-media-location img{width:100%}.card-preview.preview-location img{width:360px}.card-preview.preview-location .preview-media-location img{width:100%}.feedback-layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:300;overflow:hidden}.phase-banner{position:absolute;top:18%;left:50%;transform:translate(-50%,-20px) scale(.92);background:#4a6741f0;color:var(--cream);padding:1rem 2rem;border-radius:14px;text-align:center;box-shadow:0 12px 40px #00000073;opacity:0;transition:opacity .35s ease,transform .35s ease;border:2px solid rgba(255,255,255,.25)}.phase-banner strong{display:block;font-size:1.5rem;margin-bottom:.25rem}.phase-banner span{font-size:.85rem;opacity:.9}.phase-banner.show{opacity:1;transform:translate(-50%) scale(1)}.toast-stack{position:absolute;bottom:12%;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:.4rem;align-items:center;width:min(520px,90%)}.action-toast{display:flex;align-items:center;gap:.6rem;background:#fffffff5;border-radius:10px;padding:.45rem .85rem;box-shadow:0 6px 24px #00000040;border-left:4px solid var(--pine);opacity:0;transform:translateY(12px);transition:opacity .3s ease,transform .3s ease}.action-toast.show{opacity:1;transform:translateY(0)}.action-toast.toast-ai{border-left-color:#6b8cce}.action-toast.toast-human{border-left-color:var(--gold)}.action-toast.toast-hazard{border-left-color:var(--coral)}.toast-badge{font-size:.75rem;font-weight:700;min-width:2rem;text-align:center}.toast-msg{font-size:.82rem}.float-layer{position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:400}.resource-float{position:fixed;transform:translate(-50%);display:flex;align-items:center;gap:.35rem;background:#4a6741eb;color:#fff;padding:.35rem .65rem;border-radius:8px;font-size:.85rem;font-weight:700;opacity:0;box-shadow:0 4px 16px #0000004d;transition:opacity .25s ease,transform .25s ease}.resource-float img{width:22px;height:22px}.resource-float.show{opacity:1;transform:translate(-50%,-36px)}.resource-float.res-vp{background:#c4883af2}@keyframes stat-flash{0%,to{background:#ffffff1f;transform:scale(1)}50%{background:#c4883a8c;transform:scale(1.12)}}@keyframes tile-pulse{0%{transform:translate(-50%,-50%) scale(1)}40%{transform:translate(-50%,-50%) scale(1.15)}to{transform:translate(-50%,-50%) scale(1)}}@keyframes turn-flash{0%,to{box-shadow:none}50%{box-shadow:0 0 0 3px #c4883a99}}@keyframes day-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.35)}}@keyframes ai-pulse{0%,to{opacity:.7}50%{opacity:1}}
