.play-shell{min-height:100vh;padding:1.5rem clamp(.75rem,3vw,2.5rem) 4rem;background:linear-gradient(rgba(49,92,99,.035) 1px,transparent 1px),var(--paper);background-size:100% 28px}.app-header,.setup-panel,.session-strip,.game-layout,.utility-panel{width:min(1440px,100%);margin-inline:auto}.app-header{display:flex;align-items:end;justify-content:space-between;gap:1.5rem;margin-bottom:1.5rem}.app-title h1{margin:0;color:var(--oxblood-dark);font-size:clamp(2.5rem,6vw,4.5rem);line-height:.9}.app-title>p:last-child{margin:.65rem 0 0;color:var(--ink-soft)}.eyebrow{margin:0 0 .35rem;color:var(--oxblood);font-size:.68rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.rules-link{flex:0 0 auto;color:var(--oxblood);font-size:.84rem;font-weight:750}.setup-panel{display:grid;grid-template-columns:minmax(0,1fr) 350px;gap:1.25rem;align-items:start}.setup-main,.setup-form,.side-panel,.board-panel,.utility-panel{border:1px solid var(--line);border-radius:6px;background:#fffdf8f0;box-shadow:var(--shadow-sm)}.setup-main,.board-panel{padding:clamp(1rem,2.5vw,1.75rem)}.setup-heading{display:flex;align-items:end;justify-content:space-between;gap:2rem;margin-bottom:1rem}.setup-heading h2,.setup-form h2{margin:0;color:var(--oxblood-dark);font-size:2rem}.setup-heading>p{max-width:420px;margin:0;color:var(--ink-soft);font-size:.9rem}.campaign-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.campaign-choice{position:relative;min-height:315px;overflow:hidden;padding:0;text-align:left;border:1px solid var(--line)!important;border-radius:5px!important;background:var(--surface)!important;color:var(--ink)!important;box-shadow:none!important}.campaign-choice:hover{border-color:var(--teal)!important;transform:translateY(-2px)}.campaign-choice.is-selected{border-color:var(--oxblood)!important;box-shadow:inset 0 0 0 2px var(--oxblood)!important}.campaign-choice.is-selected:after{position:absolute;top:.65rem;right:.65rem;display:grid;width:25px;height:25px;place-items:center;border-radius:50%;background:var(--oxblood);color:#fff;content:"✓";font-size:.78rem;font-weight:900}.campaign-choice__image{width:100%;height:128px;-o-object-fit:cover;object-fit:cover}.campaign-choice span{display:block;margin-inline:1rem}.campaign-choice__title{margin-top:.85rem;color:var(--oxblood-dark);font-family:var(--font-display);font-size:1.2rem;font-weight:700;line-height:1.1}.campaign-choice__subtitle{margin-top:.3rem;color:var(--ink-soft);font-family:var(--font-display);font-size:.82rem;font-style:italic}.campaign-choice__meta{margin-top:.65rem;color:var(--teal);font-size:.68rem;font-weight:800;text-transform:uppercase}.campaign-choice__description{margin-top:.55rem;margin-bottom:1rem;color:var(--ink-soft);font-size:.8rem;line-height:1.45}.preview-panel{display:grid;grid-column:1;gap:.75rem;padding:clamp(1rem,2.5vw,1.75rem);border:1px solid var(--line);border-radius:6px;background:#fffdf8f0;box-shadow:var(--shadow-sm)}.setup-form{position:sticky;top:1rem;display:grid;gap:1rem;padding:1.3rem}.form-intro,.save-note,.utility-section>p{margin:.35rem 0 0;color:var(--ink-soft);font-size:.82rem}.setup-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.play-shell label{display:grid;gap:.35rem;color:var(--ink);font-size:.78rem;font-weight:750}.play-shell select,.play-shell textarea{width:100%;border:1px solid #bfb4a4;border-radius:4px;background:#fff;color:var(--ink);padding:.68rem}.play-shell select{min-height:44px}.play-shell textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.76rem}.setup-summary{padding:.85rem;border-left:3px solid var(--brass);background:#f2ede2;font-size:.8rem}.setup-summary ol{display:grid;gap:.2rem;margin:.35rem 0 0;padding-left:1.2rem;color:var(--ink-soft)}.button-stack,.sync-actions{display:flex;flex-wrap:wrap;gap:.55rem}.button-stack{display:grid}.play-shell button{min-height:42px;border:1px solid var(--teal-dark);border-radius:4px;background:var(--teal);color:#fff;cursor:pointer;font-weight:750;padding:.65rem .9rem;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease,transform .15s ease}.play-shell button:hover:not(:disabled){background:var(--teal-dark);transform:translateY(-1px)}.play-shell button.secondary,.play-shell button.text-button{border-color:var(--line);background:transparent;color:var(--ink)}.play-shell button.text-button{min-height:auto;padding:.35rem 0;border:0;color:var(--oxblood);font-size:.75rem;text-decoration:underline}.play-shell button.compact{min-height:34px;padding:.4rem .65rem}.play-shell button:disabled{cursor:not-allowed;opacity:.42}.session-strip{display:grid;grid-template-columns:minmax(220px,1fr) repeat(3,auto) auto;gap:0;align-items:stretch;overflow:hidden;margin-bottom:.75rem;border:1px solid var(--line);border-radius:6px;background:#293438;color:#fff}.session-strip>span{display:grid;gap:.1rem;min-width:100px;padding:.75rem 1rem;border-right:1px solid rgba(255,255,255,.15)}.session-strip small{color:#b9c3c5;font-size:.62rem;font-weight:750;text-transform:uppercase}.session-strip strong{color:#fff;font-size:.88rem}.session-strip button.secondary{align-self:center;margin:0 .75rem;border-color:#ffffff47;color:#fff}.game-layout{display:grid;grid-template-columns:294px minmax(0,1fr);gap:.75rem;align-items:start}.side-panel{position:sticky;top:1rem;overflow:hidden}.side-panel>section,.team-panel{padding:1rem;border-bottom:1px solid var(--line)}.side-panel>:last-child{border-bottom:0}.objective-card{background:#f1e9dd}.act-label{display:inline-flex;margin-bottom:.55rem;border-radius:999px;padding:.2rem .55rem;background:var(--oxblood);color:#fff;font-size:.68rem;font-weight:800;text-transform:uppercase}.objective-card h2{margin:0;color:var(--oxblood-dark);font-size:1.45rem}.progress-block{display:grid;gap:.4rem;margin-top:.85rem;color:var(--ink);font-size:.8rem;font-weight:750}.progress-block small{color:var(--ink-soft);font-size:.68rem;font-weight:500;line-height:1.4}.play-shell meter{width:100%;height:10px}.investigator-card{display:grid}.investigator-card>strong{color:var(--oxblood-dark);font-family:var(--font-display);font-size:1.35rem}.investigator-card>span{color:var(--ink-soft);font-size:.78rem}.resource-grid,.metric-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:.85rem 0 0}.resource-grid div,.metric-grid div{padding:.6rem;border:1px solid var(--line);border-radius:4px;background:#fff}.resource-grid dt,.metric-grid dt{color:var(--ink-soft);font-size:.64rem;font-weight:700;text-transform:uppercase}.resource-grid dd,.metric-grid dd{margin:0;color:var(--teal-dark);font-family:var(--font-display);font-size:1.15rem;font-weight:700}.metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.case-metrics h3,.section-heading h3,.action-dock h3{margin:0;color:var(--oxblood-dark);font-size:1.25rem}.team-panel summary{cursor:pointer;color:var(--ink);font-size:.8rem;font-weight:750}.player-list,.journal-list,.lead-list{display:grid;gap:.45rem;margin:.75rem 0 0;padding:0}.player-row,.journal-list li,.lead-list li{display:grid;gap:.2rem;list-style:none;padding:.65rem;border:1px solid var(--line);border-radius:4px;background:#fff;font-size:.8rem}.player-row.is-current{border-left:3px solid var(--oxblood)}.player-row span:first-child{display:grid}.player-row small,.route-row small,.lead-list span,.lead-list small,.journal-list span,.muted{color:var(--ink-soft);font-size:.74rem}.turn-focus{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1.25rem;align-items:center;padding:1.1rem;border:1px solid #d8c18d;border-radius:5px;background:#f7edda}.turn-focus h2{margin:0;color:var(--oxblood-dark);font-size:1.65rem}.turn-focus__guide>p:last-child{max-width:760px;margin:.35rem 0 0;color:var(--ink-soft);font-size:.85rem}.turn-focus__steps{display:flex;gap:.35rem}.turn-focus__steps span{display:inline-flex;align-items:center;gap:.35rem;border:1px solid var(--line);border-radius:999px;padding:.35rem .55rem;background:#ffffff8c;color:var(--ink-soft);font-size:.68rem;font-weight:750}.turn-focus__steps span.is-current{border-color:var(--oxblood);background:var(--oxblood);color:#fff}.location-panel,.map-panel,.decision-grid,.case-notes{margin-top:1rem}.region-header h2{margin:0;color:var(--oxblood-dark);font-size:2rem}.region-header p:last-child{max-width:800px;margin:.4rem 0 0;color:var(--ink-soft);font-size:.86rem}.action-dock{display:grid;grid-template-columns:minmax(0,1fr) 160px;gap:.65rem;margin-top:1rem;padding-top:1rem;border-top:1px solid var(--line)}.action-dock__heading{grid-column:1 / -1;display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.action-dock__heading small{color:var(--ink-soft);font-size:.72rem}.action-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.action-grid button,.end-turn{display:grid;min-height:80px;align-content:center;gap:.2rem;text-align:left;border-color:var(--line);background:#fff;color:var(--ink)}.action-grid button:hover:not(:disabled){border-color:var(--teal);background:#eef4f2;color:var(--ink)}.action-grid button.is-recommended{border-color:var(--oxblood);box-shadow:inset 0 0 0 1px var(--oxblood)}.action-grid button.is-recommended:before{color:var(--oxblood);content:"Recommended";font-size:.58rem;font-weight:850;text-transform:uppercase}.action-grid button strong,.end-turn strong{font-size:.82rem}.action-grid button span,.end-turn span{color:var(--ink-soft);font-size:.66rem;font-weight:500;line-height:1.3}.end-turn{border-color:var(--teal-dark);background:var(--teal);color:#fff}.end-turn span{color:#d8e3e3}.end-turn.is-recommended{border-color:var(--brass);box-shadow:0 0 0 2px #b8873b47}.resolution-actions{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:.55rem;align-items:center;padding:.75rem;border:1px solid #d8c18d;border-radius:4px;background:#f7edda}.resolution-actions p{margin:0}.resolution-actions .success{border-color:var(--success);background:var(--success)}.resolution-actions .danger{border-color:var(--danger);background:var(--danger)}.decision-grid,.case-notes,.utility-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.scene-panel,.travel-panel,.case-notes>div{min-width:0;padding:1rem;border:1px solid var(--line);border-radius:5px;background:#faf7f0}.section-heading{display:flex;align-items:start;justify-content:space-between;gap:1rem}.scene-test{display:grid;gap:.55rem;margin-top:.75rem;padding:1rem;border:1px solid #d8c18d;border-radius:4px;background:#fffdf7}.scene-test h3,.scene-test p{margin:0}.scene-test h3{color:var(--oxblood-dark);font-size:1.35rem}.scene-test p{color:var(--ink-soft);font-size:.82rem}.scene-test__check{display:flex;flex-wrap:wrap;gap:.5rem;padding-top:.55rem;border-top:1px solid var(--line)}.scene-test__check span{border-radius:999px;padding:.25rem .55rem;background:#e8efed;color:var(--teal-dark);font-size:.68rem;font-weight:800}.route-list{display:grid;gap:.55rem;margin-top:.75rem}.route-row{display:grid;grid-template-columns:minmax(100px,.8fr) minmax(170px,1.4fr) auto;align-items:center;gap:.55rem;padding:.65rem;border:1px solid var(--line);border-radius:4px;background:#fff}.route-row>div{display:grid}.route-row select{min-width:0;font-size:.72rem}.route-row button{font-size:.75rem}.map-panel{display:grid;gap:.75rem}.map-legend{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;color:var(--ink-soft);font-size:.72rem}.map-legend span{display:inline-flex;gap:.35rem;align-items:center}.map-legend i{display:inline-block;width:18px;height:8px;border-radius:999px}.legend-current{background:var(--oxblood)}.legend-visited{background:var(--success)}.legend-route{background:var(--teal)}.map-surface{position:relative;min-height:500px;overflow:hidden;border:1px solid #bdb29f;border-radius:5px;background:radial-gradient(ellipse at 20% 50%,rgba(244,234,207,.9) 0 11%,transparent 12%),radial-gradient(ellipse at 49% 41%,rgba(244,234,207,.9) 0 8%,transparent 9%),radial-gradient(ellipse at 72% 52%,rgba(244,234,207,.9) 0 19%,transparent 20%),radial-gradient(ellipse at 87% 78%,rgba(244,234,207,.82) 0 9%,transparent 10%),linear-gradient(rgba(49,92,99,.09) 1px,transparent 1px),linear-gradient(90deg,rgba(49,92,99,.09) 1px,transparent 1px),#d8e4e3;background-size:auto,auto,auto,auto,48px 48px,48px 48px,auto}.map-surface:after{position:absolute;inset:0;pointer-events:none;border:8px solid rgba(255,253,248,.44);content:""}.map-surface--preview{min-height:360px}.map-board,.map-routes,.region-layer{position:absolute;inset:0}.map-routes{width:100%;height:100%;overflow:visible}.map-route{stroke:#315c63d1;stroke-width:3;stroke-linecap:round;vector-effect:non-scaling-stroke}.map-route--sea{stroke-dasharray:7 6}.map-route--rail{stroke:#7a2638bf;stroke-dasharray:3 4}.map-route--road,.map-route--local{stroke:#b8873be6}.map-route-label{fill:var(--teal-dark);font-size:2.3px;font-weight:800;text-anchor:middle;text-transform:uppercase;paint-order:stroke;stroke:#fffdf8f2;stroke-width:.8}.region-node{position:absolute;left:var(--x);top:var(--y);z-index:2;width:138px;min-height:72px;transform:translate(-50%,-50%);border:1px solid var(--teal-dark);border-radius:5px;padding:.6rem;background:#fffdf8f5;color:var(--ink);box-shadow:0 8px 20px #222a2e26}.region-node.is-current{z-index:3;border:2px solid var(--oxblood);box-shadow:0 0 0 4px #7a263829,0 10px 24px #222a2e2e}.region-node.is-visited:not(.is-current){border:2px solid var(--success)}.region-node strong,.region-node small,.region-node span{display:block}.region-node strong{color:var(--oxblood-dark);font-family:var(--font-display);line-height:1.1}.region-node small,.region-node span{margin-top:.18rem;color:var(--ink-soft);font-size:.66rem}.lead-list,.journal-list{max-height:340px;overflow:auto}.lead-list li{border-left:3px solid var(--brass)}.journal-list li{grid-template-columns:58px minmax(0,1fr)}.utility-panel{margin-top:1rem;padding:1rem}.utility-panel summary{cursor:pointer;list-style:none}.utility-panel summary::-webkit-details-marker{display:none}.utility-panel summary span,.utility-section{display:grid;gap:.3rem}.utility-panel summary small{color:var(--ink-soft);font-size:.76rem}.utility-grid{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--line)}.utility-section{align-content:start}.utility-grid--single{grid-template-columns:minmax(0,720px)}.save-slots{display:grid;gap:.5rem;padding-top:.85rem;border-top:1px solid var(--line)}.save-slots__heading{display:flex;align-items:baseline;justify-content:space-between;gap:.75rem}.save-slots__heading h3{margin:0;color:var(--oxblood-dark);font-size:1.1rem}.save-slots__heading small{color:var(--ink-soft);font-size:.74rem}.save-list{display:grid;gap:.45rem;max-height:360px;margin:0;padding:0;overflow:auto}.save-row{display:grid;gap:.45rem;list-style:none;padding:.65rem;border:1px solid var(--line);border-radius:4px;background:#fff;font-size:.8rem}.save-row__info{display:grid;gap:.1rem}.save-row__info strong{overflow-wrap:anywhere}.save-row__info small{color:var(--ink-soft);font-size:.72rem}.save-row__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .75rem}.utility-section h2{margin:0;color:var(--oxblood-dark);font-size:1.35rem}.toast{position:fixed;top:1rem;right:1rem;z-index:60;max-width:min(360px,calc(100vw - 2rem));margin:0;border-radius:4px;padding:0}.toast[data-kind]{padding:.75rem 1rem;background:var(--teal-dark);color:#fff;box-shadow:var(--shadow-md)}.toast[data-kind=error]{background:var(--danger)}.play-shell [hidden]{display:none!important}@media (max-width: 1120px){.setup-panel,.game-layout{grid-template-columns:1fr}.setup-form,.side-panel{position:static}.side-panel{display:grid;grid-template-columns:1.5fr 1fr 1fr}.side-panel>section,.team-panel{border-right:1px solid var(--line);border-bottom:0}.team-panel{grid-column:1 / -1;border-top:1px solid var(--line)}.action-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 780px){.play-shell{padding-inline:.6rem;padding-top:1rem}.app-header,.setup-heading,.turn-focus,.section-heading{align-items:start}.setup-heading,.decision-grid,.case-notes,.utility-grid{grid-template-columns:1fr}.setup-heading{display:grid;gap:.5rem}.campaign-grid{grid-template-columns:1fr}.campaign-choice{display:grid;grid-template-columns:118px minmax(0,1fr);grid-template-rows:auto auto auto 1fr;min-height:188px}.campaign-choice__image{grid-row:1 / -1;width:118px;height:100%;min-height:188px}.campaign-choice span{margin-inline:.8rem}.campaign-choice__title{margin-top:.8rem}.campaign-choice__description{margin-bottom:.8rem}.session-strip{grid-template-columns:repeat(3,minmax(0,1fr))}.session-campaign{grid-column:1 / -1}.session-strip button{grid-column:1 / -1;margin-block:.55rem}.side-panel{grid-template-columns:1fr}.side-panel>section,.team-panel{border-right:0;border-bottom:1px solid var(--line)}.turn-focus{grid-template-columns:1fr}.turn-focus__steps{width:100%}.turn-focus__steps span{flex:1;justify-content:center}.action-dock{grid-template-columns:1fr}.action-dock__heading,.resolution-actions{grid-column:1}.action-dock__heading{display:grid;gap:.2rem}.resolution-actions{grid-template-columns:1fr 1fr}.resolution-actions>div{grid-column:1 / -1}.map-surface{min-height:580px}.region-node{width:112px;min-height:64px;padding:.45rem}.route-row{grid-template-columns:1fr}.toast{top:auto;right:.75rem;bottom:.75rem}}@media (max-width: 500px){.app-header{display:grid;gap:.5rem}.setup-fields,.action-grid{grid-template-columns:1fr}.action-grid button,.end-turn{min-height:64px}.map-surface{min-height:640px}.region-node{width:98px;font-size:.78rem}.map-legend{gap:.4rem}}
