:root{font-family:system-ui,sans-serif;color:#243c3d;background:#eee9de;font-size:16px;--ink:#243c3d;--paper:#fffdf5;--sea:#245e62;--line:#c1b59b;--red:#ad3f37;--blue:#316a98;--yellow:#9a7211;--green:#36714d;--purple:#775482}*{box-sizing:border-box}body{margin:0}main{max-width:1800px;margin:auto;padding:20px 28px 50px}body>header{max-width:1800px;margin:auto;display:flex;justify-content:space-between;gap:12px;padding:18px 28px;border-bottom:1px solid var(--line);font-size:.8rem}h1,h2,h3{font-family:Georgia,serif;font-weight:500}h1{font-size:clamp(1.8rem,3vw,2.7rem);margin:16px 0 10px}h2{font-size:1.3rem;margin:0 0 14px}p{line-height:1.5}a{color:var(--sea)}button,input,select,textarea{font:inherit;color:inherit}button,input,select{min-height:44px}button{padding:9px 12px;cursor:pointer;border:1px solid #a3977e;border-radius:4px;background:var(--paper);text-align:left}button:hover{border-color:var(--sea);background:#eef3e9}button:disabled{opacity:.55;cursor:default}button[aria-pressed=true]{outline:3px solid #b57222;outline-offset:2px}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #1b737d;outline-offset:3px}input,select{padding:7px;border:1px solid #a3977e;background:var(--paper);border-radius:4px}input[type=checkbox]{min-height:20px;min-width:20px}label{display:inline-flex;align-items:center;gap:8px;margin:5px 12px 5px 0}textarea{display:block;width:100%;padding:12px;font:14px/1.5 ui-monospace,monospace;resize:vertical;border:1px solid var(--line);background:var(--paper)}details{border-bottom:1px solid var(--line);padding:12px 0}summary{cursor:pointer;min-height:32px;line-height:1.5}fieldset{border:1px solid var(--line);margin:14px 0;padding:10px}li{line-height:1.5;margin:8px 0}#notice{color:#775023;min-height:24px;margin:12px 0 4px}#summary{font-size:.9rem;margin:8px 0}.table-help{font-size:.85rem;color:#526365;margin:12px 0 22px;max-width:80ch}.eyebrow{font-size:.68rem;letter-spacing:.15em;color:#5c6c65}.fine-print{font-size:.82rem;color:#54615e}.shared-table{display:flex;gap:14px;flex-wrap:wrap;align-items:stretch;padding:18px;background:#d8dfd6;border:1px solid #aebbac;border-radius:8px}.shared-table h2{font-size:1.1rem;margin-bottom:10px}.effort-tray{flex:1 1 280px;min-width:240px}.token-bowl{border:1px solid #97aaa0;border-radius:40px;padding:9px 16px;margin:8px 0;background:#e8ede3}.token-bowl>span{font-size:.72rem;text-transform:uppercase;letter-spacing:.07em}.tokens{display:flex;gap:5px;flex-wrap:wrap;min-height:26px;margin-top:5px}.effort-token{width:23px;height:23px;border-radius:50%;background:#276566;border:2px solid #f2efe0;outline:1px solid #245455;box-shadow:0 2px 0 #123c3b;display:inline-block}.effort-token.spent{background:#71867c;outline-color:#65756c}.effort-token.reserved{outline:3px solid #b77723;transform:translateY(-3px)}.spent-bowl{background:#d0d8cc}.physical-card{background:var(--paper);border:1px solid #ab9f85;border-radius:6px;box-shadow:1px 3px 0 #b0a48c;display:flex;flex-direction:column;gap:10px;padding:14px}.physical-card strong{font-family:Georgia,serif;font-size:1.05rem;font-weight:500}.physical-card small,.physical-card>span{font-size:.74rem;line-height:1.4}.round-card{flex:0 1 230px;justify-content:space-between}.round-track{display:flex;gap:4px;flex-wrap:wrap}.round-space{width:28px;height:34px;position:relative;display:grid;place-items:center;border:1px solid #b2a98f;font-size:.8rem}.round-space.current{font-weight:bold;color:#fff;background:#7b512a}.round-token{position:absolute;left:5px;bottom:-7px;width:16px;height:16px;border-radius:50%;background:#d5a44d;border:2px solid #745128}.round-card button{font-size:.78rem;margin-top:10px}.deck{min-width:115px;flex:0 1 125px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:14px;text-align:center;min-height:170px;box-shadow:3px 3px 0 #d9d1bd,4px 4px 0 #51625d,6px 6px 0 #ddd4c2;border-radius:6px}.card-back{background:repeating-linear-gradient(45deg,#245e62,#245e62 6px,#2b6769 6px,#2b6769 8px);color:#fff8df;border:6px double #f0e4c6}.card-back:hover{background:#1d4c50;color:#fff8df}.card-back strong{font-family:Georgia,serif;font-size:1.05rem}.card-back span{font-size:.72rem;max-width:12ch}.placement-back{background:repeating-linear-gradient(-45deg,#6b5233,#6b5233 6px,#776041 6px,#776041 8px)}.placement-back:hover{background:#60462c}.objective-card{flex:1 1 190px;max-width:270px;border-top:7px solid #967026}.objective-card.completed{background:#d9e5cb;transform:rotate(180deg)}.play-surface{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:24px;align-items:start}.table-components{min-width:0}.world-zone{padding:20px 14px;background:#d4e1df;border:1px solid #9bafaa;border-radius:9px}#map{position:relative}.map-connections{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;overflow:visible}.map-connections line{stroke:#547b79;stroke-width:3;opacity:.65}.map-connections .restricted{stroke-dasharray:5 5}.location-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px 20px;position:relative;z-index:1;align-items:start}.location-zone{min-width:0;padding:9px;background:#dae5df;border:1px dashed #9db3a7;border-radius:9px}.location-card{display:flex;flex-direction:column;gap:8px;width:100%;min-height:85px;background:#f2e7c7;border:2px solid #9e906b;box-shadow:1px 2px 0 #b7a980}.location-card small{font-size:.67rem;letter-spacing:.08em}.location-card strong{font-family:Georgia,serif;font-size:1.05rem;font-weight:500}.reachable>.location-card{border-color:#277265}.reach-cost{font-size:.73rem;color:#226155}.route-links{display:flex;gap:3px;flex-wrap:wrap;padding-top:5px}.route-links button{background:none;border:0;box-shadow:none;font-size:.68rem;padding:4px;min-height:30px;text-decoration:underline;text-decoration-color:#9bb4ac}.pawn-zone{display:flex;gap:4px;flex-wrap:wrap;min-height:18px;padding:8px 0}.pawn{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;padding:5px 7px;border:1px solid transparent;background:none;box-shadow:none;border-radius:7px;font-size:.7rem;min-height:57px}.pawn-shape{position:relative;display:block;background:var(--pawn-color);width:23px;height:24px;border-radius:9px 9px 5px 5px;border:1px solid #514d42;box-shadow:1px 2px 1px #475c4e}.pawn-shape:before{content:'';position:absolute;top:-9px;left:5px;width:11px;height:11px;border-radius:50%;background:var(--pawn-color);border:1px solid #514d42}.red{--pawn-color:var(--red)}.blue{--pawn-color:var(--blue)}.yellow{--pawn-color:var(--yellow)}.green{--pawn-color:var(--green)}.purple{--pawn-color:var(--purple)}.pawn.chosen{border:2px solid #b77723;background:#fff5d6}.local-situations{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-start}.situation-holder{position:relative;flex:0 0 160px;min-height:194px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding-top:4px}.situation-face{width:125px;height:165px;text-align:left;padding:10px;gap:7px;justify-content:space-between;transform-origin:center}.situation-face strong{font-size:.93rem}.situation-face span,.situation-face small{font-size:.7rem}.situation-face b{font-size:.78rem}.situation-face.route-card{border-top:6px solid #b18d37}.situation-face.opportunity{border-top:6px solid #568564}.situation-face.hazard{border-top:6px solid #a34336}.situation-holder.urgent .situation-face{transform:rotate(90deg)}.orientation-label{font-size:.7rem;color:#53645c;text-align:center;margin:10px 0 4px;line-height:1.3}.urgent .orientation-label{color:#943f24;font-weight:600}.ground-assets>small,.team-assets>small{display:block;font-size:.7rem;margin:8px 0}.passenger-slots{display:flex;gap:5px;flex-wrap:wrap}.passenger-slot{flex:1 1 60px;min-height:60px;border:1px dashed #a48d68;border-radius:7px;display:grid;place-items:center;font-size:.65rem;color:#655d48}.slots{display:flex;gap:6px;min-height:80px;flex-wrap:wrap}.slot{flex:1 1 85px;min-width:0;border:1px dashed #b4a58b;border-radius:4px;padding:3px;display:flex}.empty-slot{display:flex;align-items:center;justify-content:center;text-align:center;font-size:.65rem;color:#776e5c;min-height:75px;width:100%;line-height:1.7}.asset-card{width:100%;display:flex;flex-direction:column;gap:7px;padding:9px;min-height:93px;border-radius:4px;border-top:4px solid #b28a3c;box-shadow:1px 2px 0 #b3a58c;overflow-wrap:anywhere}.asset-card small{font-size:.62rem;text-transform:uppercase}.asset-card strong{font-family:Georgia,serif;font-size:.83rem;font-weight:500}.asset-card span{font-size:.67rem}.asset-card.skill{border-top-color:#70517f}.asset-card.team{border-top-color:#577b60}.asset-card.location{border-top-color:#587d86}.ground-assets{display:flex;flex-wrap:wrap;gap:5px}.ground-assets>small{flex-basis:100%}.ground-assets .asset-card{flex:1 1 90px}.team-assets{margin-top:10px;padding-top:4px;border-top:1px solid #a9b8a6}.team-assets .empty-slot{min-height:45px}.crew-zone{margin-top:25px;padding:20px 14px;background:#e3d9c6;border:1px solid #b3a386;border-radius:8px}#crew{display:grid;grid-template-columns:repeat(auto-fit,minmax(235px,1fr));gap:14px}.player-mat{padding:12px;background:#ede6d7;border:1px solid #bcb094;border-radius:6px;min-width:0}.active-mat{border:2px solid #a7732a;padding:11px}.role-holder{height:215px;display:flex;align-items:center;justify-content:center}.role-face{width:155px;height:203px;border-top:8px solid var(--pawn-color);justify-content:space-between}.role-face strong{font-size:1.5rem}.player-mat.impaired .role-face{transform:rotate(90deg)}.player-mat.disabled .role-face{transform:rotate(180deg)}.player-mat.removed{opacity:.55;border-style:dashed}.mat-position{font-size:.75rem;text-align:center;margin:8px 0 18px}.player-mat>small,.skill-zone>small{font-size:.72rem;display:block;margin:10px 0 7px}.skill-zone{margin-top:10px;padding-top:4px;border-top:1px dashed #b1a48b}.skill-zone .asset-card{margin-top:5px}.empty-skill{font-size:.7rem;color:#776e5c}.drop-ready{outline:4px dashed #277466;outline-offset:3px}#component-panel{position:sticky;top:16px;background:#fffdf5;border:1px solid #bcb097;padding:18px;border-radius:7px;max-height:calc(100vh - 32px);overflow:auto;box-shadow:0 3px 12px #293d3314}#component-panel:focus{outline:none}#component-panel h2{font-size:1.45rem;margin-bottom:10px}#component-details p{font-size:.85rem}#component-details fieldset label{display:flex;font-size:.8rem;margin:10px 0}#component-details legend{font-size:.78rem}#actions button{width:100%;display:flex;justify-content:space-between;gap:12px;font-size:.82rem;margin:7px 0}#actions button strong{white-space:nowrap;font-size:.72rem;align-self:center}.capability{display:inline-block;padding:3px 5px;margin:3px 0;border:1px solid #b9c5b4;border-radius:3px;font-size:.75rem}.capability.provided{background:#deebd7}.capability.missing{background:#f0e6d8}.blocked-action{color:#8b4424}.payment-preview{margin-top:16px;padding:12px;background:#ece9d5;border:1px solid #b7b187}.payment-preview p{font-size:.8rem}#commit-action{width:100%;background:#245e62;color:#fff8e5;border-color:#245e62;font-size:.85rem;text-align:center}.text-button{background:none;border:0;text-decoration:underline;font-size:.75rem}.earned-zone,.discard-zone{margin-top:24px;padding:15px;border:1px dashed #a99b7d;border-radius:6px}.earned-cards{display:flex;gap:12px;flex-wrap:wrap}.earned-card{width:125px;min-height:130px;border-top:6px solid #b18d37}.empty-zone{font-size:.82rem;color:#6e715f}.discard-card{display:block;font-size:.8rem;margin:5px 0}.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin:26px 0}.file{border:1px solid var(--line);padding:8px;font-size:.8rem}.file input{max-width:220px}dialog{max-width:580px;width:calc(100% - 28px);max-height:90vh;overflow:auto;background:var(--paper);color:var(--ink);border:1px solid #8c8067;padding:24px;border-radius:9px;box-shadow:0 16px 80px #172c3355}dialog::backdrop{background:#1e323a80}.dialog-actions{display:flex;justify-content:space-between;gap:15px;margin-top:22px}.dialog-actions button:last-child{background:var(--sea);color:white}table{border-collapse:collapse;width:100%;font-size:.82rem}td,th{padding:7px;border-bottom:1px solid var(--line);text-align:left}#lab-results{overflow:auto}#decision-results button{display:block;margin:8px 0;text-align:left}#tabletop-lab button{margin:8px 4px 8px 0}#print-deck{display:none}
@media(max-width:1350px){.location-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.play-surface{grid-template-columns:minmax(0,1fr) 280px;gap:16px}main{padding:16px}.local-situations{justify-content:center}}
@media(max-width:900px){.play-surface{display:flex;flex-direction:column}#component-panel{position:static;max-height:none;order:-1;width:100%}.table-components{width:100%}.location-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#actions{display:flex;flex-wrap:wrap;gap:6px}#actions button{flex:1 1 180px}#component-panel:empty{display:none}.shared-table{gap:12px;padding:12px}.round-card{flex:1 1 200px}.objective-card{max-width:none}}
@media(max-width:560px){main{padding:12px}body>header{padding:12px;font-size:.7rem}.location-grid{grid-template-columns:1fr;gap:24px}.world-zone{padding:14px 10px}.location-zone{padding:12px}.local-situations{justify-content:flex-start}.map-connections{display:none}#crew{grid-template-columns:1fr}.role-holder{height:220px}.deck{flex:1 1 100px;min-height:140px}.shared-table{display:grid;grid-template-columns:1fr 1fr}.effort-tray,.objective-card{grid-column:1/-1;min-width:0}.round-card{grid-column:1/-1}.table-help{font-size:.8rem}.toolbar>*{flex:1 1 auto}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
@media print{body{background:white;font-size:10pt}body>header,main>h1,main>p,.play-surface,.shared-table,.toolbar,#summary,#notice,main>details,dialog{display:none!important}#print-deck{display:block}.print-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:4mm}.print-card{border:1px dashed #555;padding:3mm;min-height:65mm;break-inside:avoid}.print-card h3{margin:2mm 0}.print-rules{break-after:page}.print-card small{display:block}}
/* Locations sit in cells computed by layout.js from map coordinates, so routes do not cross. Phones stack them in ID order. */
.location-grid.placed{grid-template-columns:repeat(3,minmax(0,1fr))}.location-grid.placed.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.placed>[data-r="1"]{grid-row:1}.placed>[data-r="2"]{grid-row:2}.placed>[data-r="3"]{grid-row:3}.placed>[data-c="1"]{grid-column:1}.placed>[data-c="2"]{grid-column:2}.placed>[data-c="3"]{grid-column:3}@media(max-width:1350px){.location-grid.placed,.location-grid.placed.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.placed>[data-r2="1"]{grid-row:1}.placed>[data-r2="2"]{grid-row:2}.placed>[data-r2="3"]{grid-row:3}.placed>[data-r2="4"]{grid-row:4}.placed>[data-r2="5"]{grid-row:5}.placed>[data-c2="1"]{grid-column:1}.placed>[data-c2="2"]{grid-column:2}}@media(max-width:560px){.location-grid.placed,.location-grid.placed.cols-2{grid-template-columns:1fr}.placed>.location-zone{grid-row:auto;grid-column:auto}}
/* Transport: one pawn on the map (hull with a cabin, theme-neutral); its card lies aside and turns with its state like a role card. */
.vehicle-pawn,.vehicle-face{--pawn-color:#6d5234}.vehicle-shape{position:relative;display:block;width:36px;height:24px}.vehicle-shape:before{content:'';position:absolute;left:11px;top:0;width:14px;height:10px;background:var(--pawn-color);border:1px solid #3d2f1f;border-bottom:0;border-radius:3px 3px 0 0}.vehicle-shape:after{content:'';position:absolute;left:0;bottom:0;width:36px;height:14px;background:var(--pawn-color);clip-path:polygon(0 0,100% 0,84% 100%,16% 100%)}.vehicle-mat{background:#e6dcc6}
.knowledge-label{margin:.2rem 0;font-size:.8rem;color:#5b6563}.signal-card,.hidden-card{margin:.25rem 0;padding:.3rem .5rem;border:1px dashed var(--line);border-radius:6px;background:var(--paper);font-size:.85rem}.signal-card.distress{border-color:var(--red)}.signal-card.danger{border-color:var(--yellow)}.signal-card.opportunity{border-color:var(--green)}.signal-card.detailed{border-style:solid}.hidden-card{background:repeating-linear-gradient(45deg,#e4dccb 0 6px,#efe8d8 6px 12px);color:#4a4a3f}
.inspector-table{border-collapse:collapse;font-size:.8rem;margin:.5rem 0}.inspector-table th,.inspector-table td{border:1px solid var(--line);padding:.2rem .4rem;text-align:left}.print-tokens{display:flex;flex-wrap:wrap;gap:4mm}.print-token{width:22mm;height:22mm;border:1px solid #000;border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:8pt;padding:2mm}
.cap{font-weight:600}.cap-navigation{color:#b0392f}.cap-technical{color:#2c65a0}.cap-discovery{color:#8a6d05}.cap-medical{color:#2a7a4d}.cap-social{color:#733a8f}
header{display:flex;flex-wrap:wrap;gap:.5rem 1rem;align-items:center;justify-content:space-between}.header-switches{display:flex;flex-wrap:wrap;gap:.5rem 1rem}.header-switches label{display:flex;gap:.4rem;align-items:center;font-size:.85rem}
.assist{margin:1rem 0;padding:.75rem;border:1px solid var(--line);border-radius:8px;background:var(--paper)}.assist h2{margin:0 0 .25rem;font-size:1.1rem}#controllers{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:.5rem 0}#controllers label{display:flex;gap:.4rem;align-items:center}
#agent-context,#agent-response,#design-input,#sweep-axes{width:100%;font-family:ui-monospace,monospace;font-size:.8rem}.design-errors{color:var(--red)}.design-warnings{color:#6b5a1f}#design-result .print-card{max-width:63mm}
