@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./vendor/fonts/font-0.ttf) format('truetype');
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(./vendor/fonts/font-1.ttf) format('truetype');
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(./vendor/fonts/font-2.ttf) format('truetype');
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./vendor/fonts/font-3.ttf) format('truetype');
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./vendor/fonts/font-4.ttf) format('truetype');
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./vendor/fonts/font-5.ttf) format('truetype');
}
@font-face {
  font-family: 'DM Sans';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(./vendor/fonts/font-6.ttf) format('truetype');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./vendor/fonts/font-7.ttf) format('truetype');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./vendor/fonts/font-8.ttf) format('truetype');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./vendor/fonts/font-9.ttf) format('truetype');
}

:root{--ink:#203c43;--muted:#7b8e84;--paper:#f8f8ef;--line:#dfe5d9;--orange:#f4b65c;--green:#477c65;--mono:'IBM Plex Mono',monospace;--body:'DM Sans',Arial,sans-serif;--display:'Barlow Condensed','Arial Narrow',Impact,sans-serif}*{box-sizing:border-box}body{margin:0;background:#b4c3b5;color:var(--ink);font:14px var(--body);overflow:hidden}button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}button:disabled{cursor:wait;opacity:.6}button:focus-visible,a:focus-visible{outline:3px solid #edb361;outline-offset:3px}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}[hidden]{display:none!important}.topbar{height:72px;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:0 25px;background:#fafaf2;border-bottom:1px solid #d9e0d3;position:relative;z-index:20}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink)}.brand-mark{position:relative;background:var(--ink);color:var(--orange);width:42px;height:38px;border-radius:9px;font:700 26px var(--mono);letter-spacing:-7px;padding:0 0 0 6px;display:flex;align-items:center}.brand-mark span{color:#e9e9d9}.brand-mark i{position:absolute;right:-6px;top:-8px;color:var(--orange);font:22px Arial;letter-spacing:0}.brand-name{font:800 23px/.95 var(--display);letter-spacing:.5px}.brand-name small{display:block;font:500 8px var(--mono);letter-spacing:1.3px;margin-top:7px}.location{font:9px var(--mono);display:flex;gap:11px;align-items:center;letter-spacing:1px}.live-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#70a080;box-shadow:0 0 0 4px #70a08015}.divider{color:#9dac9b}.edition{font-size:7px;letter-spacing:.5px;border:1px solid #d8e1d1;padding:5px;border-radius:3px;color:#80947a}.top-actions{display:flex;align-items:center;gap:10px}.xp-pill{display:flex;align-items:center;gap:5px;font:10px var(--mono);padding-right:10px;border-right:1px solid var(--line)}.xp-pill svg{width:16px;height:16px;color:#b98c43}.icon-button{display:inline-flex;align-items:center;justify-content:center;padding:7px;color:#6a8272;border-radius:5px}.icon-button:hover{background:#dde8d8}.icon-button.muted{opacity:.45}.icon-button.small{padding:4px}.icon-button.small svg{width:14px;height:14px}.game-shell{height:calc(100svh - 72px);display:block}.world{position:relative;width:100%;height:100%;overflow:hidden;background:#a9beb5}#city{display:block;width:100%;height:100%;outline:none;cursor:crosshair;touch-action:none}.world-vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(0deg,#142e4555,transparent 18%)}.world:has(.welcome:not([hidden])) .world-vignette{background:linear-gradient(90deg,#173b47c9 0%,#173b4755 38%,transparent 76%),linear-gradient(0deg,#173b4766,transparent 35%)}.district-tag{position:absolute;left:24px;top:22px;display:flex;align-items:center;gap:10px;font:9px var(--mono);padding:10px 12px;background:#faf9efef;border:1px solid #ffffffe0;border-radius:6px;z-index:3}.district-tag>span{background:#3d6560;color:#fff;font-size:8px;padding:3px 5px;border-radius:2px}.district-tag b{font-weight:500;letter-spacing:.8px}.district-tag i{height:13px;width:1px;background:#c6d4c0}.district-tag small{font-size:7px;color:#7e927b}.welcome{position:absolute;left:6%;top:24%;color:#fff9eb;z-index:4;text-shadow:0 3px 30px #18354266}.welcome-tag{display:flex;gap:10px;align-items:center;font:9px var(--mono);letter-spacing:1.5px;margin-bottom:22px}.welcome-tag .live-dot{background:#f5c17a}.welcome h1{font:800 clamp(65px,6.1vw,105px)/.88 var(--display);margin:0 0 24px}.welcome em{font-style:normal;color:#ffc47a}.welcome p{font-size:15px;line-height:1.9;color:#f8f1df;margin:0 0 26px}.primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:11px;font-weight:700;background:var(--orange);color:#2e4847;border-radius:7px;padding:10px 14px;min-height:37px;transition:background .15s}.primary:hover{background:#ffca7c}.primary.big{font-size:13px;min-height:49px;min-width:190px;justify-content:space-between;padding:14px 22px}.primary svg{height:17px;width:17px}.primary kbd{background:#c48e4140;border-color:transparent;margin-left:3px;font-size:8px}.welcome-meta{display:flex;gap:10px;align-items:center;font:9px var(--mono);color:#f4edda;margin-top:20px}.welcome-meta i{width:3px;height:3px;background:#e9b76a;border-radius:50%}.creator-credit{margin-top:30px;font:9px var(--mono);color:#d2dece}.creator-credit b{font-weight:400;color:#fff8e9}.city-caption{position:absolute;bottom:100px;left:28px;color:#f1eddb;font:7px var(--mono);letter-spacing:1.3px}.city-caption b{display:block;font-size:8px;line-height:1.9;margin-top:8px;font-weight:400}.world-controls{position:absolute;left:0;bottom:0;right:0;height:45px;display:flex;align-items:center;gap:12px;padding:0 23px;background:#1c3a47df;backdrop-filter:blur(12px);color:#d6e4d1;font:9px var(--mono);z-index:12;border-top:1px solid #aac9bb30}.world-controls>span{display:flex;gap:4px;align-items:center}.world-controls>i{width:1px;height:12px;background:#b8cabc33}.world-controls button{font:9px var(--mono);color:#e2e9d5;display:flex;align-items:center;gap:6px;padding:6px}.world-controls button:first-of-type{margin-left:auto}.world-controls svg{height:14px;width:14px}kbd{font:8px var(--mono);border:1px solid #9bb7a94d;padding:3px;border-radius:3px;min-width:16px;display:inline-block;text-align:center}.city-status{position:absolute;bottom:65px;left:26px;display:flex;align-items:center;gap:9px;color:#faf6e8;font:8px var(--mono);letter-spacing:1px;text-shadow:0 1px 5px #122a35}.camera-controls{position:absolute;top:22px;right:24px;display:flex;align-items:center;background:#f8f8eedd;border:1px solid #fff9;border-radius:6px;overflow:hidden;z-index:4}.camera-controls button{font:23px var(--body);height:34px;width:34px;color:#597767}.camera-controls button:hover{background:#e1e9d9}.camera-controls>span{font:7px var(--mono);color:#7a8c72;padding:0 6px}.mission-hud{position:absolute;left:24px;top:81px;width:250px;background:#fafbf1eb;border:1px solid #fff9;border-radius:7px;backdrop-filter:blur(12px);padding:13px 15px 0;z-index:3}.hud-eyebrow{display:flex;align-items:center;justify-content:space-between;font:7px var(--mono);letter-spacing:.8px;color:#819178}.hud-eyebrow button{display:flex;gap:3px;align-items:center;font:7px var(--mono);color:#658162;padding:0}.hud-eyebrow svg{width:11px;height:11px}.mission-hud h2{font:700 27px var(--display);margin:9px 0 4px}.mission-hud p{font-size:10px;line-height:1.6;color:#6c8068;margin:0 0 11px}.mission-track{display:flex;gap:4px;margin:10px 0 12px}.mission-track span{flex:1;height:3px;background:#d6e0cf;border-radius:1px}.mission-track .complete{background:#5a9073}.mission-track .current{background:#e5ae58}.navigation-button{display:flex;align-items:center;gap:6px;width:100%;border-top:1px solid #dfe5d6;padding:10px 0;font-size:9px;color:#51725c}.navigation-button svg{width:13px;height:13px}.navigation-button>span:last-child{margin-left:auto;font:8px var(--mono);color:#7d9174}.minimap{position:absolute;right:24px;bottom:65px;padding:6px;background:#1e414be8;border:1px solid #e5ebd276;border-radius:8px;box-shadow:0 3px 20px #17384430;z-index:3}.minimap canvas{width:146px;height:125px;display:block}.minimap>span{display:flex;gap:6px;align-items:center;color:#d8e5ce;font:8px var(--mono);border-top:1px solid #a5bcaa33;padding:8px 2px 2px}.minimap svg{width:12px;height:12px}.minimap b{font-weight:400;margin-left:auto;border:1px solid #9cb5a457;border-radius:2px;padding:1px 3px}.bubble-tails{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:5;overflow:visible}.bubble-tails #npc-tail{fill:#fbfbf1;stroke:#dce3d2;stroke-width:1}.bubble-tails #player-tail{fill:#fbfbf1;stroke:#e9bf77;stroke-width:1}.speech-bubble{position:absolute;left:50%;top:30%;z-index:7;background:#fbfbf1;border:1px solid #dce3d2;border-radius:18px;box-shadow:0 9px 30px #122f3c2b;will-change:transform;pointer-events:auto}.npc-bubble{width:285px;padding:17px 18px 14px;max-height:min(380px,70%);overflow:auto}.speaker-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font:8px var(--mono);letter-spacing:.3px;color:#54785c}.speaker-dot{height:6px;width:6px;border-radius:50%;background:#77a082}.speaker-line b{font-weight:600}.speaker-line>span:last-child{font-size:6px;color:#97a38d;flex-basis:100%;margin-left:12px;margin-top:1px}.npc-bubble #dialogue{font-size:12px;line-height:1.75;color:#425e4b;margin:11px 0 13px;white-space:pre-wrap}.npc-objective{border-top:1px solid #e1e6d7;padding-top:9px;font-size:10px}.npc-objective summary{font:7px var(--mono);color:#8b9a80;cursor:pointer;display:flex;justify-content:space-between;gap:5px}.npc-objective h3{font:600 21px var(--display);margin:9px 0 5px}.npc-objective p{font-size:10px;line-height:1.6;color:#819176;margin:0 0 10px}.skill{font:6px var(--mono);color:#658360;background:#edf2e4;padding:3px 5px;border-radius:3px}.task{font-size:10px;line-height:1.8;color:#617858;border-left:2px solid #e2b56a;padding-left:8px;margin-top:10px}.task code{font:9px var(--mono);background:#eaf0e1;color:#3e654e;padding:1px 3px;border-radius:2px}.player-bubble{width:370px;border-color:#e9bf77;display:flex;flex-direction:column;max-height:min(550px,calc(100% - 120px));overflow:hidden}.player-bubble-heading{display:flex;align-items:center;justify-content:space-between;padding:10px 13px 8px}.player-bubble-heading>span{display:flex;align-items:center;gap:7px;font:600 9px var(--mono);color:#a87835}.player-bubble-heading i{width:6px;height:6px;background:#dea45c;border-radius:50%}.player-bubble-heading small{font:6px var(--mono);color:#9ca78e;letter-spacing:.8px;margin-left:5px}.player-bubble-heading .icon-button{color:#a0ac95}.editor-toolbar{display:flex;align-items:center;justify-content:space-between;padding:7px 12px;background:#23424b;color:#abc2b7;font:8px var(--mono);flex-shrink:0}.editor-toolbar>span{display:flex;gap:6px;align-items:center}.editor-toolbar b{font-weight:400}.file-dot{width:5px;height:5px;background:#e5b56f;border-radius:50%}.editor-toolbar>div{display:flex;gap:2px}.editor-toolbar .icon-button{color:#789b95}.editor-toolbar .icon-button:hover{background:#395a60}.editor-wrap{display:flex;position:relative;background:#203c46;color:#dbe8d6;min-height:95px;height:var(--editor-height,110px);max-height:190px;flex-shrink:1;padding:10px 0;overflow:hidden}.code-input{position:relative;flex:1;min-width:0;overflow:hidden}#line-numbers{padding:0 11px 0 12px;min-width:33px;text-align:right;font:11px/23px var(--mono);color:#58797e;user-select:none;white-space:pre;overflow:hidden}#code,#highlight{font:12px/23px var(--mono);tab-size:4;white-space:pre;padding:0 13px 15px 0;margin:0;width:100%;min-height:100%;border:0;outline:none;background:transparent;overflow:auto;letter-spacing:0}#code{position:absolute;inset:0;resize:none;color:transparent;caret-color:#ffc478;-webkit-text-fill-color:transparent;z-index:1}#code::selection{background:#7899a066}#highlight{pointer-events:none;height:100%;color:#e1e9d6}.tok-comment{color:#6c9293;font-style:italic}.tok-string{color:#b8d699}.tok-keyword{color:#cba5ce}.tok-number{color:#eac789}.tok-api{color:#92ccd0}.tok-function{color:#f0cb91}.editor-footer{display:flex;align-items:center;justify-content:space-between;background:#203c46;padding:7px 12px 8px;color:#7b9c96;font:7px var(--mono);flex-shrink:0}.editor-footer>span:first-child{display:flex;align-items:center;gap:5px}.editor-footer i{width:4px;height:4px;border-radius:50%;background:#e8b46d}.editor-footer i.ready{background:#9bc294}.editor-footer>span:last-child{font-size:6px;letter-spacing:.8px}.run-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px 8px;flex-shrink:0}.hint-button{display:flex;align-items:center;gap:4px;font-size:9px;color:#7e9372;padding:5px 0}.hint-button svg{height:12px;width:12px;color:#c79951}.console{margin:0 12px 9px;border:1px solid #e0e7d7;border-radius:5px;background:#f1f5e9;min-height:45px;max-height:100px;overflow:auto;flex-shrink:1}.console-heading{display:flex;align-items:center;justify-content:space-between;padding:6px 8px;font:7px var(--mono);color:#87997b;border-bottom:1px solid #e2e8d9}.console-heading>span:first-child{display:flex;align-items:center;gap:4px}.console-heading svg{width:10px;height:10px}.console-heading>span:last-child{font-size:5px;letter-spacing:.7px}#console-output{padding:7px 8px;font:9px/1.7 var(--mono);white-space:pre-wrap;word-break:break-word}#console-output p{margin:0}.console-muted{color:#93a28a}.console-success{color:#46835c}.console-error{color:#a36850}.console-info{color:#5c8484}.hint-box{margin:0 12px 9px;border-left:2px solid #dfb56d;padding:9px 10px;background:#f1eedc;flex-shrink:1;max-height:130px;overflow:auto}.hint-box>span{font:6px var(--mono);letter-spacing:1px;color:#9c9b76}.hint-box p{white-space:pre-wrap;font-size:10px;line-height:1.7;margin:6px 0;color:#758360}.hint-box button{display:flex;gap:5px;align-items:center;font-size:9px;color:#617c53;font-weight:600;padding:7px 0 0}.hint-box svg{width:12px;height:12px}.next-panel{display:flex;align-items:center;gap:8px;margin:0 12px 9px;flex-shrink:0}.success-icon{display:flex;background:#e4eedb;color:#5d8a62;border-radius:50%;padding:4px}.success-icon svg{width:13px;height:13px}.next-panel>div{flex:1}.next-panel b{display:block;font-size:9px}.next-panel small{font:7px var(--mono);color:#849b77;display:block;margin-top:3px}.next-panel .primary{font-size:9px;padding:7px 10px;min-height:30px}.next-panel .primary svg{width:13px;height:13px}.panel-bottom{display:flex;align-items:center;justify-content:space-between;gap:6px;border-top:1px solid #e4e9db;padding:9px 12px;font:6px var(--mono);color:#96a48a;flex-shrink:0}.panel-bottom>span:first-child{display:flex;gap:5px;align-items:center}.save-dot{width:4px;height:4px;background:#a3bb96;border-radius:50%}.panel-bottom>span:last-child{font-size:5px}.panel-bottom button{font-size:8px;color:#a56e4c}.character-tag{position:absolute;z-index:6;pointer-events:none;color:#fff6df;background:#294b4ebd;border:1px solid #f3f0d54d;border-radius:4px;padding:3px 6px;font:600 6px var(--mono);letter-spacing:.5px;white-space:nowrap;transform:translate(-50%,-50%);text-shadow:0 1px 2px #25464a}.player-character-tag{color:#f8d197}.floating-notice{position:absolute;top:24%;left:50%;transform:translateX(-50%);padding:13px 22px;border:1px solid #fff7;border-radius:8px;background:#faf9ecee;box-shadow:0 5px 22px #12373633;color:#517256;font:600 21px var(--display);z-index:16;pointer-events:none;white-space:nowrap}.interact{position:absolute;left:50%;bottom:65px;transform:translateX(-50%);display:flex;align-items:center;gap:8px;padding:8px 12px;background:#23464bd9;color:#eeeeda;font:9px var(--mono);border:1px solid #b3c6ad55;border-radius:6px;z-index:4}.world-error{position:absolute;left:25%;top:40%;max-width:330px;padding:20px;border-radius:9px;background:#faf8e8;z-index:15}.world-error p{font-size:12px;line-height:1.7}#toast{position:fixed;bottom:54px;left:50%;transform:translateX(-50%);z-index:40;background:#2c554d;color:#f5f2da;font-size:11px;padding:11px 18px;border-radius:6px;box-shadow:0 4px 18px #122d3133}dialog{width:min(860px,94vw);max-height:88svh;padding:30px;border:1px solid #dbe3cf;border-radius:15px;background:#fafaf1;color:var(--ink);box-shadow:0 25px 100px #142a3950;overflow:auto}dialog::backdrop{background:#102a3b99;backdrop-filter:blur(5px)}.modal-close{position:absolute;right:15px;top:15px}.modal-eyebrow{font:8px var(--mono);letter-spacing:1.7px;color:#8a9a7c;margin:0 0 10px}dialog h2{font:700 41px/.96 var(--display);margin:0 0 15px}dialog>div>p{font-size:12px;line-height:1.8;color:#7c9070;max-width:660px}.help-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:22px 0}.help-grid>div{border-top:1px solid #dce4d0;padding-top:14px}.help-grid h3{font:600 20px var(--display);margin:0 0 7px}.help-grid p{font-size:11px;line-height:1.8;color:#79906b;margin:0}.modal-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.text-button{font-size:10px;color:#879c76;text-decoration:underline;padding:9px}.log-grid,.district-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:20px 0}.log-mission,.district-card{display:flex;gap:11px;align-items:flex-start;padding:13px;text-align:left;background:#f0f4e7;border:1px solid #dce5cf;border-radius:6px}.log-mission:hover,.district-card:hover{background:#e2edd8}.log-mission>span,.district-card>span{font:500 12px var(--mono);padding:5px;background:#e0e9d5;border-radius:3px;color:#819875}.log-mission b,.district-card b{display:block;font-size:11px;margin-bottom:5px}.log-mission small,.district-card small{font:7px var(--mono);color:#849a76}.log-mission.completed{background:#e5efdb}.log-mission.completed>span{background:#5a8966;color:#fff}.log-mission.current,.district-card.current{border-color:#ceaa67;background:#f2eddc}.log-mission.locked{opacity:.6}.district-card em{font-size:8px;font-style:normal;display:block;color:#839779;margin-top:5px}.map-legend{font:8px var(--mono);letter-spacing:1px;color:#8a9b7b}.final-stats{display:flex;gap:32px;margin:22px 0;padding:20px 0;border-top:1px solid #dee6d1;border-bottom:1px solid #dee6d1}.final-stats b{display:block;font:700 38px var(--display)}.final-stats span{font:8px var(--mono);color:#869c76}.celebrate{color:#c7954e}.confetti{position:absolute;top:-20px;width:7px;height:12px;z-index:18;pointer-events:none;animation:fall 2.8s linear forwards}@keyframes fall{to{transform:translate(var(--dx),100vh) rotate(700deg);opacity:0}}#touch-controls{display:none}@media(max-width:950px){.location{display:none}.mission-hud{width:220px}.minimap canvas{width:115px;height:99px}.camera-controls>span{display:none}.welcome h1{font-size:78px}.player-bubble{width:340px}.npc-bubble{width:265px}.world-controls{gap:8px;padding:0 15px;font-size:8px}.world-controls button{font-size:8px}}@media(max-height:700px){.npc-bubble{padding:12px 14px;width:270px}.npc-bubble #dialogue{font-size:11px;line-height:1.6;margin:8px 0}.npc-objective{padding-top:7px}.task{font-size:9px;line-height:1.6;margin-top:7px}.player-bubble{width:350px;max-height:calc(100% - 65px)}.editor-wrap{min-height:72px;height:95px}.run-row{padding-top:7px;padding-bottom:7px}.mission-hud{top:68px}.mission-hud p{display:none}.minimap canvas{height:84px;width:99px}.welcome{top:21%}.welcome h1{font-size:74px}}@media(max-width:600px){.topbar{height:62px;padding:0 13px;gap:10px}.brand{gap:9px}.brand-mark{height:31px;width:34px;font-size:22px;padding-left:4px}.brand-name{font-size:20px}.brand-name small{font-size:5px;letter-spacing:1.1px}.top-actions{gap:3px}.xp-pill{font-size:8px;padding-right:5px}.xp-pill svg{width:12px;height:12px}.top-actions .icon-button{padding:5px}.top-actions svg{width:16px;height:16px}.game-shell{height:calc(100svh - 62px)}.district-tag{left:12px;top:13px;padding:7px 8px;font-size:7px;gap:6px}.district-tag small{font-size:6px}.camera-controls{right:12px;top:13px}.camera-controls button{height:29px;width:29px;font-size:20px}.mission-hud{top:61px;left:12px;width:205px;padding:10px 12px 0}.mission-hud h2{font-size:24px;margin:7px 0 3px}.mission-hud p{display:none}.hud-eyebrow{font-size:6px}.hud-eyebrow button{font-size:6px}.mission-track{margin:8px 0}.navigation-button{padding:8px 0;font-size:8px}.navigation-button>span:last-child{font-size:7px}.minimap{display:none}.welcome{left:24px;top:24%}.welcome h1{font-size:68px}.welcome-tag{font-size:7px;letter-spacing:1px;margin-bottom:18px}.welcome p{font-size:12px;line-height:1.8}.welcome-meta{font-size:7px;gap:7px}.creator-credit{font-size:8px;margin-top:23px}.city-caption{display:none}.world-controls{height:40px;padding:0 10px;gap:5px}.world-controls>span:nth-of-type(2),.world-controls>span:nth-of-type(3),.world-controls>i,#recenter{display:none}.world-controls>span:first-child{font-size:6px;gap:2px}.world-controls kbd{font-size:6px;min-width:12px;padding:2px}.world-controls button{font-size:7px;gap:4px}.world-controls svg{height:12px;width:12px}.city-status{bottom:51px;left:13px;font-size:6px;gap:6px;letter-spacing:.3px}.city-status .live-dot{width:4px;height:4px}.player-bubble{width:min(305px,calc(100vw - 28px));border-radius:14px;max-height:calc(100% - 140px)}.player-bubble-heading{padding:7px 10px 5px}.player-bubble-heading>span{font-size:8px}.player-bubble-heading small{font-size:5px}.editor-toolbar{padding:5px 10px;font-size:7px}.editor-wrap{min-height:72px;height:var(--editor-height,94px);padding:8px 0;max-height:146px}#code,#highlight{font-size:11px;line-height:21px}#line-numbers{font-size:10px;line-height:21px;min-width:29px;padding:0 9px 0 9px}.editor-footer{font-size:6px;padding:6px 10px}.run-row{padding:7px 10px}.run-row .primary{font-size:10px;padding:8px 10px;min-height:32px}.primary kbd{display:none}.hint-button{font-size:8px}.console{margin:0 10px 7px;min-height:37px;max-height:72px}.console-heading{padding:5px 7px;font-size:6px}#console-output{font-size:8px;line-height:1.6;padding:5px 7px}.panel-bottom{font-size:5px;padding:7px 10px}.panel-bottom>span:last-child{display:none}.next-panel{margin:0 10px 7px;gap:6px}.next-panel b{font-size:8px}.next-panel small{font-size:6px}.npc-bubble{width:235px;border-radius:13px;padding:11px 13px 10px;max-height:240px}.npc-bubble #dialogue{font-size:10px;line-height:1.6;margin:8px 0}.speaker-line{font-size:7px}.speaker-line>span:last-child{font-size:5px}.task{font-size:9px;line-height:1.6;margin-top:8px}.task code{font-size:8px}.npc-objective{padding-top:7px}.npc-objective summary{font-size:6px}.skill{font-size:5px;padding:2px 4px}.character-tag{font-size:5px;padding:2px 4px}.floating-notice{top:22%;font-size:17px;padding:10px 15px}.interact{bottom:84px;font-size:8px;max-width:200px}#touch-controls{display:block;position:absolute;bottom:91px;left:13px;text-align:center;z-index:13;opacity:.85}#touch-controls button{width:32px;height:30px;background:#fbfbedde;border:1px solid #fff8;border-radius:5px;color:#547263;font-size:15px;font-weight:700;margin:2px;touch-action:none}#touch-controls>div{display:flex}#touch-controls button:active{background:#f4bf75}dialog{padding:25px 20px;max-height:90svh;border-radius:12px}dialog h2{font-size:36px}.help-grid,.log-grid,.district-grid{grid-template-columns:1fr;gap:10px}.help-grid{gap:16px}.district-card{padding:11px}.modal-eyebrow{font-size:7px}.final-stats{gap:24px}.final-stats b{font-size:32px}.final-stats span{font-size:6px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition:none!important}}
.target-task{font-size:9px;line-height:1.7;color:#7b8c6e;padding:0 13px 10px;max-height:75px;overflow:auto}.target-task code{font:8px var(--mono);background:#eaf0df;padding:1px 3px;border-radius:2px}.district-actions{display:flex;align-items:center;gap:11px;margin-top:10px}.district-actions button{font-size:9px;font-weight:600;color:#618261;padding:4px 0}.district-actions button:last-child{color:#9d793d;display:flex;align-items:center;gap:4px}.district-actions svg{width:12px;height:12px}.interact:hover{background:#37635e;border-color:#f4c47c}.interact:active{transform:translateX(-50%) scale(.98)}.world:has(.welcome:not([hidden])) .city-status{display:none}@media(max-width:600px){.world.conversing .mission-hud{display:none}.npc-bubble{max-height:215px}.target-task{font-size:8px;max-height:60px;padding:0 10px 7px}.city-status{max-width:170px;line-height:1.7}.interact{bottom:51px;left:auto;right:12px;transform:none;max-width:190px}.interact:active{transform:scale(.98)}}
@media(max-height:700px) and (max-width:600px){.npc-bubble{max-height:118px}.player-bubble{max-height:320px}.console,.panel-bottom{display:none}.editor-wrap{height:82px;min-height:62px}.npc-bubble #dialogue{font-size:10px}.target-task{max-height:40px}}
#highlight{overflow:hidden}#code{scrollbar-width:thin;scrollbar-color:#64877e #203c46}.npc-bubble,.player-bubble,.console{scrollbar-width:thin;scrollbar-color:#bbcab0 transparent}
@media(max-width:600px){.world.conversing #touch-controls{display:block;z-index:24}}
.speech-bubble{transform:translateY(-100%)}

.conversation-prompts{display:flex;flex-wrap:wrap;gap:5px;margin:0 0 8px}.conversation-prompts button{font:9px var(--body);padding:5px 8px;border:1px solid #d4dfc9;border-radius:12px;color:#50735a;background:#eef3e6;min-height:27px}.conversation-prompts button:hover{background:#e2ecd5;border-color:#9bb58b}.conversation-prompts button:active{background:#f7e6c5}.npc-bubble .conversation-note{font:7px var(--mono);color:#839478;margin:0 0 10px}.conversation-note code{font:inherit;color:#53735b}.npc-objective[open]{padding-bottom:3px}@media(max-width:600px){.conversation-prompts{gap:4px}.conversation-prompts button{font-size:8px;padding:4px 6px;min-height:25px}.npc-bubble .conversation-note{font-size:6px;margin-bottom:7px}}

.npc-favor-actions{display:flex;gap:8px;align-items:center}.npc-favor-actions:has(button:not([hidden])){border-top:1px solid #e1e6d7;padding:7px 0 0;margin:0 0 7px}.npc-favor-actions button{font:9px var(--body);color:#8c713e;text-align:left;padding:4px 0;text-decoration:underline;text-underline-offset:3px}.npc-favor-actions button:hover{color:#375f4b}@media(max-width:600px){.npc-favor-actions button{font-size:8px}}
.npc-ai-status{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:8px 0;color:#67816f;font:9px var(--mono);letter-spacing:.02em}
.npc-ai-status [data-mode="offline"]{color:#957746}
.npc-ai-status button{flex-shrink:0;white-space:nowrap;padding:3px 0;border:0;border-bottom:1px solid #b3bea2;background:none;color:#4b6d58;cursor:pointer;font:inherit}
@media(max-width:600px){.npc-ai-status{font-size:8px;gap:6px;margin:6px 0}.npc-bubble{max-height:235px}}
@media(max-height:700px) and (max-width:600px){.npc-bubble{max-height:118px}}

.life-menu{font:9px var(--mono);border:1px solid #cfdbca;border-radius:5px;padding:7px 9px;background:#edf1e6}.cash-pill{font:11px var(--mono);color:#4a775a;white-space:nowrap}.life-stats{display:flex;gap:24px;flex-wrap:wrap;padding:14px 0;color:#72846b;font-size:10px}.life-stats b{display:block;color:#264b45;font:700 27px var(--display)}.life-tabs{display:flex;gap:8px;border-bottom:1px solid var(--line);padding:10px 0 14px;margin-bottom:20px}.life-tabs button{padding:7px 16px;border-radius:18px;font-size:11px}.life-tabs .selected{background:#365d53;color:#fff9e7}.life-cards{display:grid;grid-template-columns:1fr 1fr;gap:14px}.life-cards article,.life-active{padding:18px;border:1px solid #d9e1d0;border-radius:10px;background:#f4f6eb}.life-active{margin-bottom:18px;background:#eaf0df}.life-cards h3,.life-active h3{font:700 25px var(--display);margin:7px 0}.life-cards p,.life-active p{font-size:11px;line-height:1.8}.life-cards small,.life-active small{font:8px var(--mono);color:#6c8468}.life-actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin-top:14px}.life-actions button{font-size:10px;text-align:left}.life-actions button:not(.primary){color:#4a785b;text-decoration:underline;text-underline-offset:3px}.home-progress{display:flex;flex-wrap:wrap;gap:6px}.home-progress span{font:9px var(--mono);border:1px solid #c9d6bc;border-radius:4px;padding:6px}.life-cards code,.life-active code{font-size:10px}@media(max-width:600px){.life-menu{font-size:7px;padding:5px}.cash-pill{font-size:8px}.life-cards{grid-template-columns:1fr}.life-stats{gap:16px}.life-tabs button{padding:6px 12px}.top-actions{gap:3px}}

@media(max-width:420px){.topbar{padding:0 10px;gap:8px}.brand-name{font-size:18px}.xp-pill{display:none}}

.driving-hud{position:absolute;right:25px;bottom:250px;z-index:4;width:155px;padding:12px 15px;border:1px solid #b6cbb466;border-radius:9px;background:#24434ae8;color:#f8f2d7;backdrop-filter:blur(8px)}.driving-hud small{font:8px var(--mono);letter-spacing:1.4px;color:#b8cfb3}.driving-hud b{font:700 43px/.95 var(--display)}.driving-hud span{font:8px var(--mono)}.driving-hud p{font:7px/1.8 var(--mono);margin:8px 0 0;color:#bfd0ba}.contract-feature{border-color:#d5b577;background:#f4edda}.world-controls{gap:9px}.world-controls button{white-space:nowrap}@media(max-width:600px){.driving-hud{right:12px;bottom:120px;width:115px;padding:9px 11px}.driving-hud p{display:none}.driving-hud b{font-size:35px}.world-controls>span:nth-of-type(2){display:none}#contract-open{font-size:8px}#touch-controls>button[data-key=shift],#touch-controls>button[data-key=space]{font:7px var(--mono);width:36px}.world.conversing .driving-hud{display:none}}

.atlas-scale{display:flex;gap:24px;flex-wrap:wrap;padding:15px 0;border-top:1px solid #d2dcc8;border-bottom:1px solid #d2dcc8;margin:16px 0}.atlas-scale span{font:10px var(--mono);color:#67806d}.atlas-scale b{display:block;font:700 30px var(--display);color:#284b46;margin-bottom:4px}.metro-atlas{width:100%;max-height:440px;border-radius:12px;border:1px solid #c3cfb5;margin:8px 0 20px}.map-world-actions{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0 20px}.atlas-places{margin-top:14px}.atlas-places .life-actions{gap:12px}.atlas-places article{scroll-margin-top:15px}@media(max-width:600px){.atlas-scale{gap:16px}.atlas-scale b{font-size:26px}.metro-atlas{max-height:340px}.atlas-places h3{font-size:24px}}

/* Glass speech surfaces leave the characters visible; text stays fully opaque. */
.speech-bubble{backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:0 7px 24px #122f3c20}
.npc-bubble{background:rgb(251 251 241 / 74%);border-color:rgb(235 243 225 / 78%)}
.player-bubble{background:transparent;border-color:rgb(233 191 119 / 80%)}
.player-bubble-heading,.player-bubble .target-task,.player-bubble .run-row,.player-bubble .panel-bottom,.player-bubble .next-panel{background:rgb(251 251 241 / 74%)}
.player-bubble .editor-toolbar,.player-bubble .editor-wrap,.player-bubble .editor-footer{background:rgb(20 38 45 / 76%)}
.player-bubble .console,#hint-box{background:rgb(245 249 234 / 76%)}
.player-bubble .console-heading,.player-bubble #console-output{background:transparent}
.bubble-tails #npc-tail,.bubble-tails #player-tail{fill:rgb(251 251 241 / 74%)}
.player-bubble #highlight{color:#f0f6e8}
.player-bubble .tok-comment{color:#bdd7cf}
.player-bubble .tok-string{color:#c7e8af}
.player-bubble .tok-keyword{color:#e6c3ec}
.player-bubble .tok-number{color:#ffe0aa}
.player-bubble .tok-api{color:#b5edf0}
.player-bubble .tok-function{color:#ffe1b0}
.player-bubble #line-numbers,.player-bubble .editor-footer,.player-bubble .editor-toolbar{color:#c1d9d0}
.player-bubble .editor-toolbar .icon-button{color:#c1d9d0}
.player-bubble .target-task,.player-bubble .panel-bottom,.player-bubble .console-heading,.player-bubble-heading small,.player-bubble-heading .icon-button,.player-bubble .hint-button{color:#304e42}
.npc-bubble #dialogue{color:#24483a}
.npc-bubble .speaker-line,.npc-bubble .speaker-line>span:last-child,.npc-bubble .conversation-note,.npc-bubble .npc-ai-status,.npc-bubble .npc-objective summary,.npc-bubble .npc-objective p{color:#304e42}
.npc-bubble .npc-ai-status [data-mode="offline"]{color:#6a471d}

.transit-nearest{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:17px 19px;margin:20px 0;border:1px solid #b7cdbf;border-radius:11px;background:#edf3e7}
.transit-nearest small{display:block;font:8px var(--mono);letter-spacing:.7px;color:#64806b}
.transit-nearest b{display:block;font:700 28px var(--display);margin:5px 0 0}
.transit-nearest p{font-size:11px;color:#63806b;margin:5px 0 0}
.transit-nearest .primary{flex-shrink:0;font-size:11px;min-height:40px}
.transit-lines{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin:22px 0}
.transit-line{border:1px solid #d1dfcf;border-radius:11px;background:#f3f6ec;overflow:hidden}
.transit-line header{display:flex;align-items:center;gap:11px;padding:16px;border-top:4px solid var(--transit-color);border-bottom:1px solid #dce6d7}
.transit-line-mark{display:grid;place-items:center;flex-shrink:0;width:31px;height:31px;border-radius:7px;background:var(--transit-color,#638d83);color:#fff9e8;font:700 24px var(--display)}
.transit-line h3{font:700 26px/1 var(--display);margin:0 0 5px}
.transit-line header small{font:7px var(--mono);letter-spacing:.6px;color:#6b816d}
.transit-stops{list-style:none;padding:10px 15px 14px;margin:0}
.transit-stops li{position:relative;display:flex;align-items:center;gap:10px;min-height:49px;padding:8px 0}
.transit-stops li:not(:last-child):before{content:"";position:absolute;left:4px;top:24px;bottom:-24px;width:2px;background:var(--transit-color);opacity:.5}
.transit-stop-dot{position:relative;z-index:1;flex-shrink:0;width:10px;height:10px;border:2px solid var(--transit-color);background:#f6f8ee;border-radius:50%}
.transit-stops li.nearest .transit-stop-dot{background:var(--transit-color)}
.transit-stops li>div{flex:1;min-width:0}
.transit-stops b{font-size:11px;font-weight:600;line-height:1.5}
.transit-stops small{display:block;font:6px var(--mono);letter-spacing:.5px;color:#65876c;margin-top:4px}
.transit-stops button{font:9px var(--body);padding:7px 3px;color:#3f725e;flex-shrink:0;text-decoration:underline;text-underline-offset:3px;min-height:34px}
.transit-stops button:hover{color:#915f2d}
.transit-how{border-top:1px solid #d5e0cd;padding:18px 0 8px}
.transit-how h3{font:700 26px var(--display);margin:0 0 12px}
.transit-how ol{padding-left:20px;margin:0;color:#526f57;font-size:11px;line-height:1.9}
.transit-how li+li{margin-top:6px}
.transit-how p{font-size:11px;line-height:1.9;color:#617d65}
.transit-how code{font:10px var(--mono);color:#365f52;background:#e8efe0;border-radius:3px;padding:2px 4px}
.transit-hud{position:absolute;right:25px;bottom:250px;z-index:4;width:227px;padding:13px 15px;border:1px solid #b6cbb477;border-left:3px solid var(--transit-color,#638d83);border-radius:9px;background:rgb(29 61 66 / 87%);color:#f8f2d7;box-shadow:0 5px 16px #14383b18}
.transit-hud-line{display:flex;align-items:center;gap:8px;margin-bottom:15px}
.transit-hud .transit-line-mark{width:23px;height:23px;font-size:19px;border-radius:5px}
.transit-hud-line b{flex:1;font-size:10px;line-height:1.5}
.transit-hud-line button{color:#e0dcc0;font:7px var(--mono);text-decoration:underline;text-underline-offset:3px;padding:5px 0}
.transit-hud>small{display:block;font:7px var(--mono);letter-spacing:1px;color:#bcd5bf;margin-bottom:5px}
.transit-hud>strong{display:block;font:700 25px/1.05 var(--display);overflow-wrap:anywhere}
.transit-ride-bottom{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid #c9d5b928;padding-top:10px;margin-top:12px;font:7px/1.6 var(--mono);color:#d1dfc7}
.transit-ride-bottom span:last-child{text-align:right}
@media(max-width:600px){.transit-lines{grid-template-columns:1fr;gap:14px}.transit-nearest{align-items:flex-start;gap:12px;padding:14px}.transit-nearest b{font-size:25px}.transit-nearest small{font-size:7px}.transit-nearest p{font-size:10px}.transit-nearest .primary{font-size:9px;padding:9px 11px}.transit-line h3{font-size:25px}.transit-stops button{min-height:40px}.transit-hud{right:12px;bottom:106px;width:191px;padding:10px 12px}.transit-hud-line{margin-bottom:10px}.transit-hud>strong{font-size:23px}.transit-ride-bottom{gap:8px;padding-top:8px;margin-top:9px;font-size:6px}.transit-hud-line b{font-size:9px}.transit-hud-line button{font-size:6px}}
@media(max-height:650px){.transit-hud{bottom:157px}.transit-hud-line{margin-bottom:8px}.transit-ride-bottom{margin-top:8px;padding-top:7px}}
@media(max-height:650px) and (max-width:600px){.transit-hud{bottom:96px;width:175px}.transit-hud>strong{font-size:21px}}

.learning-panel{color:var(--ink,#edf5f0);background:#152722;border:1px solid #567268;border-radius:22px;width:min(620px,calc(100vw - 28px));max-height:88dvh;padding:28px;overflow:auto;box-shadow:0 30px 100px #0009}.learning-panel::backdrop{background:#07130fd9}.learning-panel h2{font-size:28px;margin:8px 0 12px}.learning-panel p{line-height:1.55}.learning-panel label{display:block;margin:18px 0 10px}.learning-panel select{background:#233e34;color:#fff;padding:10px;border:1px solid #769486;border-radius:8px;margin-left:12px}.learning-toggle{line-height:1.5}.learning-toggle input{margin-right:8px;accent-color:#b4e6ab}.learning-disclosure{font-size:12px;color:#bbccc3}.learning-panel article{background:#203b30;padding:18px;border-radius:12px;margin:18px 0}.learning-panel article h3{margin:8px 0}.learning-progress{color:#c1e7ae;font-size:13px}.learning-actions{display:flex;flex-wrap:wrap;gap:10px}.learning-actions button{border:1px solid #6a887a;border-radius:8px;padding:10px 14px;color:#fff;background:#2b493c;cursor:pointer}.learning-actions .primary{color:#102219;background:#c1e7ae}.learning-actions button:disabled{opacity:.45;cursor:default}.learning-close{float:right;font-size:26px;border:0;background:none;color:#fff;cursor:pointer}#learning-feedback{white-space:pre-wrap}#learning-open{color:#c1e7ae}
.learning-panel{color:#edf5f0}.learning-panel h2,.learning-panel h3,.learning-panel p,.learning-panel label,.learning-panel small{color:#edf5f0}.learning-panel .learning-disclosure{color:#bbccc3}.learning-panel .modal-eyebrow{color:#c1e7ae}.learning-panel article p{margin-bottom:0}.learning-panel #learning-status{color:#c1e7ae}

/* Adventure passport keeps the original city palette and adds a clear next step. */
.passport-button{border:1px solid #c1ccb7;background:#edf0df;padding:8px 11px;border-radius:18px;color:#355950;font-size:11px;font-weight:700;white-space:nowrap}.welcome-free{display:block;color:#fff5df;margin:14px 0;font-weight:600;font-size:12px;text-decoration:underline;text-underline-offset:4px}.adventure-passport{width:min(740px,calc(100vw - 28px));padding:28px;background:#f7f4e6;color:#264a47;border:1px solid #d8d9c7;border-radius:22px;max-height:88dvh;overflow:auto;box-shadow:0 22px 90px #122e4970}.adventure-passport::backdrop{background:#183e49c9;backdrop-filter:blur(4px)}.adventure-passport h2{font:700 40px/1 var(--display);color:#264a47;margin:9px 0 12px}.adventure-passport>p{font-size:13px;color:#526e60;line-height:1.6}.passport-eyebrow{font:10px var(--mono);letter-spacing:1.5px}.passport-close{float:right;font-size:26px;line-height:24px;color:#33564e}.passport-rank{margin:18px 0;padding:12px 14px;border-radius:10px;background:#e4ebd7;color:#3b6552;font-weight:700;font-size:12px}.passport-path{display:grid;grid-template-columns:1fr 1fr;gap:12px}.passport-card{display:flex;gap:12px;text-align:left;align-items:flex-start;padding:17px 14px;border:1px solid #d7ddca;border-radius:14px;background:#fffdf4;color:#264a47;min-height:144px;transition:transform .15s,border-color .15s}.passport-card:hover{transform:translateY(-2px);border-color:#6d9482}.passport-card.recommended{border:2px solid #b87e34;background:#fff0cf}.passport-card.earned{background:#e9efdf}.passport-icon{flex:0 0 34px;width:34px;height:38px;display:grid;place-items:center;background:#e9bc73;border-radius:50% 50% 42% 42%;font-size:22px;font-weight:bold;color:#365c50}.earned .passport-icon{background:#74977b;color:white}.passport-copy{display:flex;flex-direction:column;gap:7px}.passport-copy small{font:7px var(--mono);letter-spacing:.7px;color:#62806c}.passport-copy b{font-size:15px;line-height:1.2}.passport-copy>span{font-size:11px;line-height:1.5;color:#5e7465}.passport-arrow{margin-left:auto;color:#8b9b7c}.passport-note{font-size:11px!important}.passport-free,.passport-bonus{display:block;padding:10px 0;font-size:12px;color:#416b5d;text-decoration:underline;text-underline-offset:4px}.passport-bonus{font-weight:700}.adventure-scaffold{margin:0 15px 5px;padding:9px 11px;border-radius:9px;background:#f5ecd7;border:1px solid #e6d7b4;color:#355950;max-height:150px;overflow:auto}.scaffold-goal{font-size:11px;line-height:1.5;margin:0 0 7px}.code-builders{display:flex;flex-wrap:wrap;gap:6px}.code-builders button,.code-prediction button{border:1px solid #cbd1ba;background:#fffdf1;color:#355950;border-radius:7px;padding:5px 8px;font-size:10px}.code-builders button:hover,.code-prediction button:hover{background:#dfe8cf}.code-prediction{margin-top:8px;font-size:10px}.code-prediction summary{cursor:pointer;color:#6c7b5d}.code-prediction p{font-size:10px;margin:7px 0;line-height:1.5}.code-prediction>div{display:flex;gap:6px;flex-wrap:wrap}.adventure-celebration{position:absolute;z-index:35;bottom:67px;left:50%;transform:translateX(-50%);width:min(500px,calc(100% - 28px));display:flex;gap:18px;border-radius:19px;border:2px solid #dfba74;background:#fff8de;box-shadow:0 15px 55px #193d4955;padding:20px;color:#2b5149;animation:stamp-arrive .35s ease-out}.stamp-symbol{font-size:42px;flex:0 0 65px;width:65px;height:75px;display:grid;place-items:center;border:2px dashed #ab7c36;border-radius:50% 50% 43% 43%;background:#efcf8d;transform:rotate(-8deg)}.adventure-celebration small{font:8px var(--mono);letter-spacing:1px;color:#846534}.adventure-celebration h3{font:700 24px var(--display);margin:7px 0}.adventure-celebration p{font-size:11px;line-height:1.6;margin:0 0 12px}.stamp-actions{display:flex;gap:8px;flex-wrap:wrap}.stamp-actions button{font-size:10px;padding:8px 10px;border-radius:7px;border:1px solid #b9c9a9}.stamp-next{background:#416e5b;color:#fff}.stamp-look{background:#edf0dc}.player-bubble:has(.adventure-scaffold:not([hidden])){overflow-y:auto}.run-row{flex-wrap:wrap;gap:6px}.adventure-passport button:focus-visible,.code-builders button:focus-visible,.code-prediction button:focus-visible{outline:3px solid #b57830;outline-offset:3px}@keyframes stamp-arrive{from{opacity:0;translate:0 12px}to{opacity:1;translate:0 0}}@media(max-width:600px){.passport-button{font-size:9px;padding:7px 8px}.top-actions{gap:5px}.passport-path{grid-template-columns:1fr}.adventure-passport{padding:22px 18px}.adventure-passport h2{font-size:32px}.passport-card{min-height:110px}.adventure-celebration{bottom:54px;padding:14px;gap:10px}.stamp-symbol{font-size:28px;flex-basis:45px;width:45px;height:55px}.adventure-celebration h3{font-size:21px}.adventure-scaffold{margin:0 10px 5px;padding:7px 8px;max-height:95px}.scaffold-goal{font-size:10px}.top-actions .passport-button+.life-menu{font-size:8px}}@media(prefers-reduced-motion:reduce){.adventure-celebration{animation:none}.passport-card{transition:none}}

/* Keep the free-explore action legible over every part of the 3D scene. */
.welcome-free{display:flex;align-items:center;justify-content:center;gap:8px;width:fit-content;max-width:100%;min-height:44px;margin:12px 0 0;padding:11px 20px;border:2px solid #f7f4e6;border-radius:10px;background:#f7f4e6;color:#203c43;font-size:14px;font-weight:700;line-height:1.4;text-decoration:none;text-shadow:none;box-shadow:0 3px 14px #15374233}.welcome-free:hover{background:#e4ebd7;border-color:#e4ebd7}.welcome-free:focus-visible{outline:3px solid #ffc47a;outline-offset:4px}.world:has(.welcome:not([hidden])) .city-caption{display:none}
@media(max-height:800px){.welcome{top:14%;max-height:calc(86% - 64px);overflow-y:auto;overscroll-behavior:contain;padding:0 8px 16px 0;max-width:calc(100% - 48px)}}

.welcome{scrollbar-width:thin;scrollbar-color:#d9d6bd transparent}.welcome::-webkit-scrollbar{width:4px}.welcome::-webkit-scrollbar-track{background:transparent}.welcome::-webkit-scrollbar-thumb{background:#d9d6bd;border-radius:4px}

/* Third-person exploration and a stable, readable coding workbench. */
.modern-play .district-tag{background:#17343dec;border-color:#6b918080;color:#f5f4df;box-shadow:0 5px 18px #122b3833}.modern-play .district-tag small{color:#c3d5c1}.modern-play .mission-hud{background:#17343dee;border:1px solid #6a8b7480;color:#eef1df;box-shadow:0 5px 20px #122b3833;border-radius:12px}.modern-play .mission-hud h2{color:#fff6de}.modern-play .mission-hud p,.modern-play .hud-eyebrow,.modern-play .hud-eyebrow button{color:#cfddc8}.modern-play .navigation-button{color:#f4cc88;border-color:#829c7d55}.modern-play .minimap{left:20px;right:auto;bottom:74px;box-shadow:0 6px 24px #142c3b44}.modern-play:has(.welcome:not([hidden])) .minimap{display:none}.modern-play .city-status{left:auto;right:20px;bottom:76px;background:#17343dd9;padding:8px 12px;border-radius:8px;max-width:calc(100% - 215px);line-height:1.5}.modern-play .world-controls{height:auto;min-height:46px;max-height:70px;flex-wrap:wrap;justify-content:center;padding:8px 12px;gap:8px;background:#102d36ed;border-top:1px solid #76927e55}.modern-play.conversing .mission-hud,.modern-play.conversing .minimap,.modern-play.conversing .city-status{display:none}.modern-play .npc-bubble #dialogue{color:#f3f4df}.modern-play .npc-bubble .speaker-line,.modern-play .npc-bubble .conversation-note,.modern-play .npc-bubble .speaker-line>span:last-child{color:#c5d9bd}.modern-play .npc-bubble .conversation-prompts button,.modern-play .npc-bubble .npc-favor-actions button{background:#2d504c;color:#f6edcd;border-color:#7c9774}.modern-play .player-bubble-heading{position:sticky;top:0;z-index:7;background:#17343d;color:#f3f4df;border-bottom:1px solid #77927b}.modern-play .player-bubble-heading small{color:#bed5bd}.modern-play .player-bubble-heading button{color:#f3f4df}.modern-play #target-task{display:none!important}.workbench-brief{padding:14px 16px 10px;border-bottom:1px solid #d9dfce;background:#f7f6e9}.workbench-eyebrow{display:flex;align-items:center;justify-content:space-between;gap:8px;font:8px var(--mono);letter-spacing:1px;color:#52766a}.workbench-return{background:#e4ead9;border:1px solid #b5c7ad;border-radius:6px;padding:7px 9px;color:#294e46;font:10px var(--body);letter-spacing:0;font-weight:700}.workbench-brief h3{font:700 28px/1.05 var(--display);margin:12px 0 8px;color:#203c43}.workbench-goal{font-size:12px;line-height:1.6;margin:0;color:#3c5f52}.workbench-steps{list-style:none;display:flex;gap:5px;padding:0;margin:12px 0 7px;counter-reset:step}.workbench-steps li{counter-increment:step;flex:1;padding:7px 5px;background:#e7ebdf;color:#71816b;font-size:9px;border-radius:6px;text-align:center}.workbench-steps li:before{content:counter(step) '. ';font-weight:700}.workbench-steps .current{background:#f4dfad;color:#654e25}.workbench-steps .done{background:#d5e7cc;color:#3a6652}.workbench-state{font-size:10px;line-height:1.5;margin:8px 0;color:#496958}.workbench-manual{font-size:11px;line-height:1.6;color:#456557}.workbench-manual summary{cursor:pointer;font-weight:700}.workbench-manual ul{margin:8px 0;padding-left:18px}.workbench-manual li{margin-bottom:5px}.modern-play .adventure-scaffold{margin:10px 15px 4px;max-height:120px}.modern-play .adventure-scaffold .scaffold-goal{display:none}.modern-play .editor-wrap{min-height:125px;height:var(--editor-height,125px);max-height:260px;background:#17313a}.modern-play #code,.modern-play #highlight{font-size:13px;line-height:24px}.modern-play .run-row{position:sticky;bottom:0;z-index:6;background:#f6f4e5;border-top:1px solid #d3dcc8;padding:10px 14px}.modern-play .console{max-height:160px;min-height:75px}.modern-play #console-output{font-size:11px;line-height:1.6}.modern-play .adventure-celebration{z-index:30;bottom:82px}.modern-play .workbench-return:focus-visible{outline:3px solid #b87d34;outline-offset:3px}@media(max-width:1000px){.modern-play .npc-bubble #dialogue{font-size:12px;margin:8px 0}.modern-play .npc-bubble .speaker-line{font-size:9px}.modern-play .workbench-brief{padding:12px 14px 8px}.modern-play .workbench-brief h3{font-size:25px}.modern-play .editor-wrap{min-height:105px}}@media(max-width:600px){.modern-play .minimap{display:block;width:120px;left:12px;bottom:82px}.modern-play .minimap canvas{width:100%;height:auto}.modern-play .city-status{display:none}.modern-play .world-controls>span:first-child{font-size:8px}.modern-play .world-controls button{font-size:9px}.modern-play .workbench-goal{font-size:11px}.modern-play .workbench-steps li{font-size:8px}.modern-play #code,.modern-play #highlight{font-size:12px}.modern-play .console,.modern-play .panel-bottom{display:block}.modern-play .player-bubble-heading small{font-size:7px}}@media(prefers-reduced-motion:reduce){.modern-play .player-bubble,.modern-play .npc-bubble{transition:none!important}}
.modern-play .city-status{display:none}
.modern-play .workbench-eyebrow{display:none}.modern-play .workbench-brief h3{margin:0 0 7px;font-size:25px}.modern-play .workbench-brief{padding:12px 15px 9px}.modern-play .workbench-steps{margin:9px 0 6px}.modern-play .player-bubble-heading{display:flex;gap:8px}.modern-play .player-bubble-heading .workbench-return{margin-left:auto;font-size:9px;flex-shrink:0;padding:6px 8px;background:#36584f;color:#fff4d7;border-color:#749077}.modern-play .player-bubble-heading #close-code{flex-shrink:0}.modern-play .editor-wrap{flex-shrink:0}.modern-play .adventure-scaffold{max-height:150px;scrollbar-width:thin}@media(max-width:1000px){.modern-play .workbench-goal{font-size:11px}.modern-play .workbench-brief h3{font-size:24px}}
.modern-play .npc-ai-status,.modern-play #ai-status,.modern-play #retry-ai{color:#ceddc4}.modern-play .npc-bubble{scrollbar-width:thin;scrollbar-color:#789682 transparent}

/* The editor stays attached to the avatar; only its contents scroll. */
.modern-play.conversing .player-bubble{display:flex;flex-direction:column;right:auto;bottom:auto;transform:translateY(-100%);width:min(400px,calc(100% - 24px));height:auto;max-height:min(390px,calc(100% - 110px),var(--bubble-height-budget,390px));overflow:hidden;border:1px solid #d5b777;border-radius:17px;background:#f7f6e9;box-shadow:0 8px 26px #102e4538;z-index:22}
.modern-play.conversing .npc-bubble{right:auto;bottom:auto;transform:translateY(-100%);width:min(260px,calc(100% - 24px));max-width:none;max-height:min(180px,28%);overflow-y:auto;background:#17343df2;border:1px solid #76937c;border-radius:16px;color:#f3f4df;z-index:21;padding:12px 14px}
.modern-play #bubble-tails{display:block;z-index:20}.modern-play #player-tail{fill:#f7f6e9;stroke:#d5b777}.modern-play #npc-tail{fill:#17343df2;stroke:#76937c}
.modern-play .character-tag{z-index:23}
.modern-play .coding-bubble-content{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;min-height:0;flex:1 1 auto}
.modern-play .player-bubble-heading{position:static;flex-shrink:0;padding:9px 12px}.modern-play .player-bubble-heading>span{color:#f7ce8d;font-size:10px}.modern-play .player-bubble-heading small{font-size:7px;letter-spacing:0}
.modern-play .workbench-brief{padding:10px 12px 8px}.modern-play .workbench-brief h3{font-size:23px;margin:0 0 5px}.modern-play .workbench-goal{font-size:12px;line-height:1.45}
.modern-play .editor-wrap{min-height:90px;max-height:150px;height:var(--editor-height,110px)}
.modern-play .run-row{position:static;flex-shrink:0;margin:0;padding:8px 12px;background:#f6f4e5;border-top:1px solid #d3dcc8}.modern-play .run-row button{min-height:36px}
.modern-play .workbench-manual{margin:10px 12px}.modern-play .workbench-state{margin:9px 12px}.modern-play .adventure-scaffold{margin:8px 12px;max-height:none;overflow:visible}
.modern-play .console{min-height:50px;max-height:100px}.modern-play .npc-bubble #dialogue{font-size:12px;line-height:1.55;margin:9px 0}
@media(max-width:700px){.modern-play.conversing .player-bubble{max-height:min(320px,48%,var(--bubble-height-budget,320px))}.modern-play.conversing .npc-bubble{width:min(220px,calc(100% - 24px));max-height:100px;padding:9px 12px}.modern-play .player-bubble-heading small{display:none}.modern-play .workbench-brief h3{font-size:21px}.modern-play .workbench-goal{font-size:11px}}

/* Translucent speech keeps the city visible without fading its text. */
.modern-play.conversing .player-bubble{background:rgb(247 246 233 / 64%);box-shadow:0 8px 26px #102e4530}
.modern-play.conversing .npc-bubble{background:rgb(23 52 61 / 70%)}
.modern-play .player-bubble-heading{background:rgb(23 52 61 / 82%)}
.modern-play .workbench-brief{background:transparent}
.modern-play .player-bubble .editor-toolbar,.modern-play .player-bubble .editor-wrap,.modern-play .player-bubble .editor-footer{background:rgb(20 38 45 / 72%)}
.modern-play .player-bubble .run-row,.modern-play .player-bubble .panel-bottom,.modern-play .player-bubble .next-panel{background:rgb(247 246 233 / 50%)}
.modern-play #player-tail{fill:rgb(247 246 233 / 64%)}.modern-play #npc-tail{fill:rgb(23 52 61 / 70%)}

/* A small coach lives inside the existing translucent overhead bubble. */
.mentor-card{margin:5px 12px 10px;padding:10px 11px;border:1px solid #b7c5a9;border-left:3px solid #b7863d;border-radius:10px;background:rgb(250 246 223 / 72%);color:#203f3c}
.mentor-card[hidden]{display:none}.mentor-heading{display:flex;align-items:center;gap:7px}.mentor-heading b{font-size:12px}.mentor-heading small{margin-left:auto;font-size:9px;color:#486453}.mentor-heading>button{font-size:20px;line-height:1;padding:0 3px;color:#365b4b}
.mentor-message{font-size:12px;line-height:1.5;margin:7px 0}.mentor-actions,.mentor-choices{display:flex;flex-wrap:wrap;gap:6px}.mentor-choices p{flex-basis:100%;margin:0 0 3px;font-size:11px}.mentor-actions{margin-top:7px}.mentor-actions button,.mentor-choices button{border:1px solid #8ea88d;background:#f4f5e5;color:#254e43;border-radius:7px;padding:6px 8px;font-size:11px;min-height:30px}.mentor-actions button:first-child{background:#365e50;color:#fff8df}.mentor-card button:focus-visible{outline:3px solid #b27833;outline-offset:2px}.player-bubble:has(.mentor-card:not([hidden])) .adventure-scaffold{display:none}
.landmark-map-cards{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}.landmark-map-cards button{flex:1 1 190px;padding:14px;border:1px solid #91a58c;border-radius:11px;background:#e8ecdc;color:#294b45;text-align:left}.landmark-map-cards b,.landmark-map-cards small,.landmark-map-cards span{display:block}.landmark-map-cards b{font-size:16px}.landmark-map-cards small{font-size:11px;margin:5px 0 12px}.landmark-map-cards span{font-size:12px;font-weight:700}
.mentor-choices summary{font-size:10px;cursor:pointer}.mentor-choices details>button{margin:3px 5px 0 0}.player-bubble:has(.mentor-card:not([hidden])) .workbench-goal{display:none}.player-bubble:has(.mentor-card:not([hidden])) .workbench-brief{padding-bottom:2px}.mentor-card{padding:7px 9px}.mentor-message{margin:5px 0;font-size:11px}.mentor-actions button{min-height:27px;padding:4px 7px;font-size:10px}

.learning-skills{padding:10px 0;color:#d8e7d1;font-size:12px}.learning-skills summary{cursor:pointer;font-weight:700}.learning-skills ul{display:grid;grid-template-columns:1fr 1fr;gap:8px 20px;padding-left:20px;line-height:1.5}.learning-panel #learning-focus{font-size:12px;color:#c1d3c5}.npc-favor-actions{flex-wrap:wrap}#npc-practice{font-weight:700}@media(max-width:600px){.learning-skills ul{grid-template-columns:1fr}}

/* Ongoing conversations share the existing translucent overhead bubble. */
.conversation-composer{padding:2px 0 9px}.conversation-composer[hidden],.conversation-talk[hidden]{display:none}.conversation-mode{display:flex;align-items:center;gap:6px;margin:2px 0 10px}.conversation-mode button{font-family:inherit;font-size:11px;font-weight:600;padding:6px 9px;border:1px solid #c5d5bf70;border-radius:8px;background:#e8efdf18;color:inherit;cursor:pointer}.conversation-mode button[aria-pressed="true"]{background:#f1c472;color:#25464c;border-color:#f1c472}.conversation-mode .conversation-goodbye{margin-left:auto;font-size:10px}.conversation-talk label{display:block;font-size:12px;font-weight:600;margin-bottom:5px}.conversation-talk textarea{width:100%;box-sizing:border-box;resize:vertical;min-height:65px;max-height:125px;border:1px solid #b9ceba99;border-radius:9px;background:#f5f7eaeb;color:#1b4047;padding:10px;font-family:inherit;font-size:14px;line-height:1.45;caret-color:#254c54}.conversation-talk small{display:block;font-size:10px;opacity:.85;margin:6px 0}.conversation-history{border-top:1px solid #bdcfbd55;margin-top:8px;padding-top:7px}.conversation-history summary{cursor:pointer;font-size:11px}.conversation-history ol{list-style:none;padding:0;margin:8px 0 0;max-height:140px;overflow:auto}.conversation-history li{display:flex;flex-direction:column;gap:3px;margin:6px 0;padding:7px 9px;border-radius:8px;background:#213f4922;font-size:12px;line-height:1.5}.conversation-history li b{font-size:10px;letter-spacing:.6px}.conversation-active .workbench-brief,.conversation-active .workbench-manual,.conversation-active #learning-code-coach,.conversation-active .panel-bottom,.conversation-active .workbench-state{display:none!important}.conversation-talk-mode .editor-toolbar,.conversation-talk-mode .editor-wrap,.conversation-talk-mode .editor-footer,.conversation-talk-mode .console,.conversation-talk-mode #hint-box{display:none!important}.conversation-talk-mode .coding-bubble-content{padding-top:8px}.conversation-talk-mode .run-row{justify-content:space-between}.conversation-composer button:focus-visible,.conversation-composer textarea:focus-visible{outline:2px solid #efbd68;outline-offset:2px}

.conversation-composer{padding:8px 12px 10px}.conversation-history ol{overscroll-behavior:contain}

/* Keep the editable code in the first view, even while the beginner coach is open. */
.modern-play .player-bubble:has(.mentor-card:not([hidden])) .workbench-brief{display:none}
.modern-play .player-bubble:has(.mentor-card:not([hidden])) .editor-footer{display:none}
.modern-play .mentor-card{margin:5px 9px 6px;padding:6px 8px}
.modern-play .mentor-heading b{font-size:11px}.modern-play .mentor-heading small{font-size:8px}
.modern-play .mentor-message{font-size:12px;line-height:1.35;margin:5px 0}
.modern-play .mentor-actions{margin-top:5px;gap:5px}.modern-play .mentor-actions button{padding:4px 8px;min-height:27px}
.modern-play .mentor-choices:not(:empty){margin:7px 11px 0}
.modern-play .player-bubble .editor-toolbar{padding:5px 10px}
.modern-play .player-bubble-heading{padding:5px 10px}.modern-play .run-row{padding:5px 10px}
.modern-play .player-bubble:has(.mentor-card:not([hidden])) .editor-wrap{height:100px;min-height:90px}
@media(max-width:700px){.modern-play .player-bubble:has(.mentor-card:not([hidden])) .editor-wrap{height:90px;min-height:90px}.modern-play .player-bubble .editor-toolbar{font-size:7px}}

/* A single earned-stamp card appears after the coding bubble closes. */
.modern-play.conversing .adventure-celebration{display:none}
.modern-play .adventure-celebration{left:auto;right:16px;bottom:88px;transform:none;width:min(330px,calc(100% - 185px));gap:10px;padding:14px;border-width:1px;border-radius:12px;background:#f9f3ddeb;backdrop-filter:blur(8px)}
.modern-play .adventure-celebration .stamp-symbol{font-size:26px;flex-basis:38px;width:38px;height:44px}
.modern-play .adventure-celebration h3{font-size:20px;line-height:1.2;margin:5px 0}
.modern-play .adventure-celebration p{font-size:12px;line-height:1.45;margin:0 0 10px}
.modern-play .stamp-actions button{padding:8px;font-size:11px}
@media(max-width:480px){.modern-play .adventure-celebration{right:10px;bottom:98px;width:calc(100% - 20px)}.modern-play:has(.adventure-celebration:not([hidden])):not(.conversing) .minimap{display:none}}

.modern-play:has(.transit-hud:not([hidden])) .mission-hud{display:none}

/* Earned quests stay available without covering the street during free play. */
.modern-play .mission-hud.quest-finished{width:220px;padding:9px 12px 0}
.modern-play .mission-hud.quest-finished .hud-eyebrow,.modern-play .mission-hud.quest-finished .mission-track,.modern-play .mission-hud.quest-finished p{display:none}
.modern-play .mission-hud.quest-finished h2{font-size:21px;margin:0 0 7px}
.modern-play .mission-hud.quest-finished .navigation-button{padding:8px 0}

/* Touch controls and beginner text remain usable on small screens. */
@media(max-width:600px){
 #touch-controls button,#touch-controls>button[data-key=shift],#touch-controls>button[data-key=space]{width:44px;height:44px;min-width:44px;font-size:20px}
 #touch-controls>button[data-key=shift],#touch-controls>button[data-key=space]{font-size:9px}
 .modern-play .mentor-message{font-size:14px;line-height:1.35}
 .modern-play .mentor-actions button{min-height:36px;font-size:11px}
 .modern-play #code,.modern-play #highlight{font-size:14px}
 .modern-play .npc-bubble #dialogue{font-size:14px;line-height:1.45}
 .modern-play .run-row #run{min-height:44px;font-size:12px}
 .modern-play .run-row{padding:6px 9px}
 .modern-play .camera-controls button{width:44px;height:40px}
}

@media(max-width:600px){.modern-play .minimap{left:auto;right:12px;bottom:148px;width:100px}.modern-play:has(.adventure-celebration:not([hidden])) #touch-controls{visibility:hidden}}
@media(max-width:600px) and (min-height:740px){
 .modern-play.conversing .player-bubble{max-height:min(368px,48%,var(--bubble-height-budget,368px))}
 .modern-play .player-bubble:has(.mentor-card:not([hidden])) .editor-wrap{height:104px;min-height:104px}
}
