:root{--mint:#a8e6cd;--amber:#edbc77}.intro{padding-bottom:22px}.eyebrow{font-size:11px;letter-spacing:.18em;color:var(--mint);font-weight:700}.setup{display:flex;align-items:end;gap:18px;flex-wrap:wrap;margin:6px 0 20px}.setup label{display:grid;gap:6px;font-size:11px;color:#9caabc}.setup select{background:#1a202a;border:1px solid #354251;border-radius:8px;padding:10px 32px 10px 12px;color:#f2f1ec;min-height:44px;max-width:100%}.mission{margin-left:auto;display:grid;gap:4px;font-size:10px;letter-spacing:.14em;color:var(--mint)}.mission strong{font-size:15px;letter-spacing:0;color:#f2f1ec}.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:18px;align-items:start}.city-panel{border:1px solid #344151;background:#151e29;border-radius:15px;overflow:hidden}.dashboard{display:grid;grid-template-columns:1fr 1.4fr 1fr;border-bottom:1px solid #344151;padding:20px 22px;gap:16px}.dashboard>div{display:grid;gap:3px}.dashboard span{font-size:11px;color:#9eaec0}.dashboard strong{font-size:32px;line-height:1.3;font-variant-numeric:tabular-nums;font-weight:600}.dashboard small{font-size:12px;margin-left:5px;color:#a8b1c2;font-weight:400}.mint{color:var(--mint)}.amber{color:var(--amber)}.city{position:relative;background:#12212a}.city canvas{width:100%;display:block;aspect-ratio:2/1}.city-footer{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 16px;color:#99aabb;font-size:10px}.dot{display:inline-block;width:6px;height:6px;background:var(--mint);border-radius:50%;margin:0 5px 1px}.warm{background:var(--amber);margin-left:12px}.progress-track{height:3px;background:#263646}#progress{height:100%;background:var(--mint);width:0}#city-cover{position:absolute;inset:0;background:#101c29e8;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:16px;gap:10px}#city-cover strong{font-size:19px}#city-cover>span:last-child{color:#adbac9;font-size:12px}.cover-icon{color:var(--mint);font-size:34px}.control-panel{padding:19px;background:#1a202a;border:1px solid #344151;border-radius:15px}.panel-title{display:flex;justify-content:space-between;gap:8px;align-items:center;margin-bottom:17px}.panel-title h2{font-size:14px;margin:0}.panel-title>span{font-size:10px;color:#9eaec0}.signals{display:grid;gap:9px}.signal{width:100%;display:flex;align-items:center;text-align:left;gap:12px;padding:13px 12px;border-radius:9px;background:#242e39;border:1px solid #476357;min-height:72px}.signal-letter{display:grid;place-items:center;border-radius:6px;background:#344b46;color:var(--mint);height:32px;width:32px;font-size:15px;flex-shrink:0}.signal-body{display:grid;gap:3px;flex:1}.direction{font-size:13px}.queue-label{font-size:10px;color:#b1bac7}.light-pair{display:grid;gap:6px}.light-pair i{width:8px;height:8px;border-radius:50%;background:#9c5a58}.light-pair .horizontal{background:var(--mint);box-shadow:0 0 6px #a8e6cd55}.signal[data-phase="v"] .horizontal,.signal[data-phase="clear"] .horizontal{background:#9c5a58;box-shadow:none}.signal[data-phase="v"] .vertical{background:var(--mint);box-shadow:0 0 6px #a8e6cd55}.signal-note{color:#9eaec0;font-size:10px;margin:13px 0 18px}.game-actions{display:grid;gap:8px}button.primary{color:#112a24;background:var(--mint);border-color:var(--mint);font-weight:700}button{border:1px solid #465365;border-radius:8px;background:#252f3d;padding:10px 16px;min-height:44px}button:disabled{cursor:default}#status{font-size:11px;color:#b5c4d2;margin:12px 0 0;min-height:36px}.tips{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px;margin:28px 0}.tips>div{border-top:1px solid #35414c;padding-top:14px}.tips span{font-size:12px;color:var(--mint)}.tips p{font-size:12px;color:#a8b1c2;line-height:1.8}.fine{color:#8e9bab;font-size:10px;line-height:1.9}.result{margin-top:20px;padding:26px;border:1px solid #557768;border-radius:14px;background:linear-gradient(135deg,#1b302e,#1a202a)}.result h2{font-size:24px;margin:8px 0}.result p{font-size:13px;color:#becdd6}.result-stats{display:flex;gap:26px;flex-wrap:wrap;color:#b4c2ce;font-size:12px}.result-stats strong{color:var(--mint);margin-left:8px}.result-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}#share-fallback{display:grid;gap:6px;margin-top:15px;font-size:12px}#share-url{width:100%;padding:8px;background:#101219;color:#fff;border:1px solid #475365}[hidden],#city-cover[hidden],#share-fallback[hidden]{display:none!important}
@media(min-width:1200px){.city canvas{aspect-ratio:2/1}.city-panel{margin-bottom:0}}
@media(max-width:850px){.game-layout{grid-template-columns:1fr}.control-panel{padding:16px}.signals{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.signal{padding:10px 8px;gap:7px}.signal-letter{width:25px;height:28px}.light-pair{display:none}.signal-body strong{font-size:12px}.queue-label{font-size:9px}.signal-note{margin:10px 0}.game-actions{display:flex;flex-wrap:wrap}.game-actions button{flex:1}#status{min-height:0}.mission{margin-left:0}.tips{gap:16px}}
@media(max-width:480px){.setup{gap:10px}.setup label{flex:1;min-width:0}.setup select{width:100%;font-size:12px;padding-left:8px;padding-right:10px}.mission{width:100%;display:flex;gap:12px;align-items:center}.mission strong{font-size:13px}.dashboard{padding:14px 12px;gap:8px}.dashboard strong{font-size:27px}.dashboard small{font-size:10px}.dashboard span{font-size:10px}.signal{flex-direction:column;align-items:flex-start;gap:5px}.signal-letter{font-size:12px;height:23px;width:23px}.signal-body strong{font-size:11px}.queue-label{font-size:9px}.signal{min-height:90px}.city-footer{font-size:9px;padding:8px 10px}.tips{grid-template-columns:1fr;gap:8px;margin-top:22px}.tips p{margin:6px 0}.result{padding:18px}.result h2{font-size:21px}#city-cover{gap:4px}#city-cover strong{font-size:15px}#city-cover>span:last-child{font-size:10px}.cover-icon{font-size:22px}}
/* lab.css also serves two-column experiment introductions; this game uses a single heading. */
.trylab-app main>.intro{display:block;max-width:none;margin:0 0 10px;padding:0 0 16px}.trylab-app .intro .app-intro-title{margin-top:0}
@media(max-width:850px){body[data-playing="true"] main>.intro,body[data-playing="true"] .setup{display:none}}
