:root{color-scheme:dark;--bg:#0b1220;--panel:#142136;--ink:#edf4ff;--muted:#b0c0d4;--amber:#ffc65d;--cyan:#66dcf4;--cell:4.761904%;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% 0,#203754,var(--bg) 65%);color:var(--ink);min-height:100vh}main{max-width:1120px;margin:auto;padding:24px}header,.title-row,.status-bar,.controls{display:flex;align-items:center;justify-content:space-between;gap:16px}header{font-size:.875rem;margin-bottom:24px}a{color:var(--cyan);text-underline-offset:4px}.edition,.label{font-size:.75rem;letter-spacing:.14em;font-weight:800;color:var(--amber)}h1{font-size:clamp(1.5rem,3vw,2.3rem);margin:0 0 6px;letter-spacing:-.035em}p{line-height:1.55}.title-row{margin-bottom:22px}.title-row p{margin:0;color:var(--muted)}button{font:inherit;font-size:.875rem;font-weight:650;min-height:44px;padding:10px 16px;border:1px solid #45617e;background:#22364e;color:var(--ink);border-radius:8px;cursor:pointer;touch-action:none}button:hover:not(:disabled){background:#304e6c;border-color:var(--cyan)}button:focus-visible,a:focus-visible,summary:focus-visible,#board:focus-visible{outline:3px solid var(--cyan);outline-offset:3px}button:disabled{opacity:.5;cursor:default}.primary{background:var(--amber);color:#182235;border-color:var(--amber)}.primary:hover:not(:disabled){background:#ffdc92;color:#182235}.adventure{background:var(--panel);border:1px solid #42566e;border-radius:16px;overflow:hidden;box-shadow:0 24px 70px #0005}.status-bar{padding:16px 20px;font-weight:700;font-size:.875rem;border-bottom:1px solid #40536a}#room{color:var(--amber)}.map-frame{padding:12px 18px 0;background:#0a1421}#board{position:relative;width:100%;aspect-ratio:21/13;overflow:hidden;border:2px solid #57718a;border-radius:6px;background:#132435}#tiles{position:absolute;inset:0;display:grid;grid-template-columns:repeat(var(--columns,21),1fr);grid-template-rows:repeat(var(--rows,13),1fr)}.tile{border:1px solid #ffffff04;background:linear-gradient(135deg,#20344a,#1c2e41)}.tile.wall{background:linear-gradient(#566a7d 0 12%,#33495d 12% 80%,#1e2f40 80%);box-shadow:inset 1px 0 #75839355,inset -2px 0 #0a162966;border:1px solid #142435}.tile:nth-child(odd):not(.wall){background:linear-gradient(135deg,#24394f,#1e3145)}#entities{position:absolute;inset:0}.entity,#player{position:absolute;width:var(--cell);height:var(--row,7.692308%);display:grid;place-items:center;font-size:clamp(12px,2.5vw,28px)}.entity span{width:76%;height:76%;display:grid;place-items:center;border-radius:5px;font-weight:bold}.entity.block span{background:linear-gradient(135deg,#c4cbd1,#647e92);color:#2e4658;border:3px solid #dbe1e6;box-shadow:0 4px 0 #08101d88}.entity.plate span{color:var(--amber);border:2px solid var(--amber);background:#aa701d33;border-radius:50%;height:58%;width:58%}.entity.plate.active span{color:#8dffbd;border-color:#8dffbd;background:#25735077}.entity.door span{height:100%;width:100%;border:3px solid #e4b965;background:repeating-linear-gradient(90deg,#967237 0 4px,#4b361d 4px 9px);color:#ffedb7}.entity.door.open span{border:1px dashed #84dcb1;color:#84dcb1;background:#17352d88}.entity.challenge span{background:#986634;border:3px solid #ffd082;color:#fff1c9}.entity.challenge.done span{background:#344456;color:#9eb2c5;border-color:#67788a}.entity.sign span{color:#eee8ce;background:#4d4133;border:2px solid #a69471;font-size:.65em}.entity.lever span{border:2px solid var(--cyan);color:var(--cyan);background:#173e59}.entity.lever.active span{background:var(--cyan);color:#0b2f42;box-shadow:0 0 18px #66dcf455}.entity.exit span{border:2px dashed #808d9d;color:#8da1b5}.entity.exit.active span{border:2px solid var(--amber);color:var(--amber);box-shadow:0 0 20px #ffc65d55;background:#71512266}#player{z-index:2;transition:left .13s linear,top .13s linear;pointer-events:none}#player span{width:65%;height:74%;display:grid;place-items:center;border-radius:7px 7px 5px 5px;background:linear-gradient(#ffd38c 0 24%,#519feb 24% 78%,#263c65 78%);border:2px solid #abcfff;color:#122e55;font-size:.55em;box-shadow:0 5px 0 #0005}#player[data-facing="down"] span{transform:rotate(180deg)}#player[data-facing="left"] span{transform:rotate(-90deg)}#player[data-facing="right"] span{transform:rotate(90deg)}.map-labels{display:grid;grid-template-columns:7fr 7fr 7fr;text-align:center;padding:10px 0 14px;font-size:.75rem;color:#aabfd6;letter-spacing:.1em}.objective{padding:16px 20px 0;display:flex;align-items:center;gap:16px}.objective p{margin:0;font-size:1rem}#message{margin:8px 20px 14px;color:var(--cyan);min-height:3.1em;font-size:.875rem}.controls{justify-content:flex-start;padding:0 20px;flex-wrap:wrap}.dpad{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px);gap:4px}.dpad button{padding:0}.dpad button[data-dir="up"]{grid-column:2}.dpad button[data-dir="left"]{grid-column:1;grid-row:2}.dpad button[data-dir="down"]{grid-column:2;grid-row:2}.dpad button[data-dir="right"]{grid-column:3;grid-row:2}kbd{font-size:.75rem;padding:2px 5px;border:1px solid currentColor;border-radius:4px;margin-left:8px}.keyboard-help{margin:12px 20px 18px;color:var(--muted);font-size:.875rem}.legend{display:flex;flex-wrap:wrap;gap:20px;padding:18px 4px;font-size:.875rem;color:var(--muted)}.legend i{font-style:normal;margin-right:6px}.block-icon{color:#c4cbd1}.plate-icon,.chest-icon,.exit-icon{color:var(--amber)}.lever-icon{color:var(--cyan)}.classroom{border-top:1px solid #344b63;padding:16px 0;color:var(--muted)}summary{cursor:pointer;color:var(--ink);font-weight:700}dialog{color:var(--ink);background:#16263b;border:1px solid #6483a4;border-radius:16px;width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;box-shadow:0 30px 100px #0008}dialog::backdrop{background:#050d19cc;backdrop-filter:blur(5px)}.dialog-content{padding:28px}h2{font-size:1.65rem;letter-spacing:-.03em;margin:10px 0 16px}#dialog-body p{margin:10px 0}#dialog-body{color:var(--muted)}#answers{display:grid;gap:10px;margin:18px 0}#answers button{text-align:left;font-size:1rem}#answers button.correct{border-color:#8dffbd;background:#214f42}#answers button.wrong{border-color:#ffb3a5;background:#653a3b}#feedback{color:var(--cyan)}#dialog-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}@media(max-width:600px){main{padding:14px 10px}header{margin-bottom:18px;gap:8px}.edition{font-size:.65rem}.status-bar{padding:12px 10px;gap:8px;font-size:.75rem}.map-frame{padding:8px 6px 0}.map-labels{font-size:.6rem;letter-spacing:.03em}.objective{align-items:flex-start;flex-direction:column;gap:4px;padding:12px}.objective p{font-size:.875rem}#message{margin:8px 12px 12px}.controls{padding:0 12px;gap:8px}.controls button{padding:8px 10px}.keyboard-help{margin:12px;font-size:.75rem}.legend{gap:12px}.dialog-content{padding:22px}.title-row{gap:8px}.entity span{border-width:1px!important}}@media(prefers-reduced-motion:reduce){#player{transition:none}dialog::backdrop{backdrop-filter:none}}

/* Room camera keeps unexplored rooms outside the viewport. */
#board{max-width:360px;margin-inline:auto}#world{position:absolute;top:0;height:100%;overflow:hidden}.map-labels{display:block;font-size:.875rem;letter-spacing:.06em}.map-frame{padding-block-start:16px}#world .entity,#world #player{font-size:clamp(18px,4.8vw,28px)}

.entity.tool span{color:#ffe7a9;border:2px solid #ffe7a9;background:#504535}.entity.item span{color:#b8a4ff;border:2px solid #b8a4ff;background:#342852;box-shadow:0 0 18px #b8a4ff44}.entity.door.cracked:not(.open) span{background:#796854;border-color:#b7a285;color:#f4d3a0}.entity.door.cracked:not(.open) span::after{content:'ϟ';position:absolute;color:#241c16;font-size:1.5em}.status-bar{flex-wrap:wrap}#inventory{font-size:.8125rem}

/* The final room shows the lock's state and the three inputs that power it. */
.circuit-panel{max-width:360px;margin:0 auto 12px;padding:12px;background:#142d42;border:1px solid #66dcf4;border-radius:8px}
.circuit-panel[hidden]{display:none}.circuit-panel strong{color:var(--amber);font-size:.8rem;letter-spacing:.08em}.circuit-panel p{margin:5px 0 0;font-weight:750}.circuit-panel .circuit-detail{font-size:.75rem;font-weight:500;color:var(--muted)}
.entity .switch-label,.entity .exit-label{position:absolute;top:87%;font-size:9px;line-height:1.2;color:#edf4ff;background:#0b1220;padding:2px 3px;border-radius:3px;white-space:nowrap;z-index:1}
.entity.exit span{background:#283b4e;border-style:solid}.entity.exit .exit-label{top:102%}
.door-lights{position:absolute;display:flex;gap:3px;bottom:94%;left:50%;transform:translateX(-50%);padding:3px;background:#0b1220;border-radius:4px}
.door-lights b{display:grid;place-items:center;width:12px;height:12px;font-size:9px;line-height:1;background:#27384b;border:1px solid #8da1b5;border-radius:50%;color:#b0c0d4}
.door-lights b.lit{background:var(--cyan);border-color:var(--cyan);color:#0b1220;box-shadow:0 0 6px #66dcf4}
#message[data-tone="wrong"]{color:#ffb3a5}#message[data-tone="correct"]{color:#8dffbd}

.pickup-effect{position:absolute;width:var(--cell);height:var(--row,7.692308%);display:grid;place-items:center;pointer-events:none;z-index:3;color:#ffe7a9;font-size:28px;text-shadow:0 0 12px #ffe7a9;animation:pickup-rise .65s ease-out forwards}
@keyframes pickup-rise{0%{opacity:1;transform:scale(1)}35%{opacity:1;transform:translateY(-25%) scale(1.4)}100%{opacity:0;transform:translateY(-85%) scale(1.6)}}
.pickup-flash{animation:inventory-pickup .7s ease-out}
@keyframes inventory-pickup{0%,45%{color:#ffe7a9;text-shadow:0 0 10px #ffe7a9}100%{text-shadow:none}}
@media(prefers-reduced-motion:reduce){.pickup-effect{animation:none}.pickup-flash{animation:none;color:#ffe7a9}}

.inventory-strip{padding:12px 20px;border-bottom:1px solid #40536a;background:#101d30}
.inventory-strip>.label{display:block;margin-bottom:8px;font-size:.65rem}
#inventory{display:flex;flex-wrap:wrap;gap:8px;font-size:.8125rem;min-height:36px;align-items:center}
.inventory-badge{display:flex;align-items:center;gap:7px;padding:7px 10px;border:1px solid #617895;border-radius:8px;background:#21354d;line-height:1.2}
.inventory-icon{font-size:1.2rem;color:#ffe7a9}.inventory-badge small{font-size:.65rem;color:#8dffbd}
.inventory-badge.used{background:#162438;border-color:#40536a;color:#b0c0d4}.inventory-badge.used small{color:#b0c0d4}.inventory-badge.used .inventory-icon{color:#8498b0}
.inventory-empty{font-size:.75rem;color:var(--muted)}
@media(max-width:600px){.inventory-strip{padding:10px 12px}.inventory-badge{padding:6px 8px;gap:6px}}

/* Room materials and solid scenery make each area recognizable. */
.tile.hall:not(.wall){background:linear-gradient(135deg,#493f32,#39342d);border-color:#b9a27612}
.tile.hall.wall{background:linear-gradient(#9a8b72 0 12%,#625a4b 12% 80%,#38362d 80%);border-color:#2a2c27}
.tile.archive:not(.wall){background:repeating-linear-gradient(0deg,#273e38 0 22%,#20352f 22% 25%,#2c443b 25% 48%,#20352f 48% 50%);border-color:#d3c48b10}
.tile.archive.wall{background:linear-gradient(#877557 0 12%,#564936 12% 80%,#2d3028 80%);border-color:#232b24}
.tile.signals:not(.wall){background:linear-gradient(135deg,#17384a,#102b3d);border-color:#66dcf41a}
.tile.signals.wall{background:linear-gradient(#508395 0 12%,#295266 12% 80%,#142e41 80%);border-color:#0c2231}
#board[data-theme="hall"]{border-color:#b5a17e}#board[data-theme="archive"]{border-color:#9f976e}#board[data-theme="signals"]{border-color:#66dcf4}
.entity.obstacle span{width:86%;height:90%;box-shadow:0 4px 0 #0006}
.entity.column span{border-radius:35%;border:3px solid #d5c6a0;background:linear-gradient(90deg,#645e50,#b4a88a 40%,#716c5c 85%)}
.entity.bookshelf span{border-radius:2px;border:3px solid #a48b5d;background:repeating-linear-gradient(0deg,transparent 0 42%,#aa8e5a 42% 50%),repeating-linear-gradient(90deg,#507b66 0 12%,#b39564 12% 24%,#685064 24% 38%,#4d7189 38% 51%);box-shadow:inset 0 0 5px #0009,0 4px 0 #0006}
.entity.conduit span{border:3px solid #5e9cab;border-radius:6px;background:repeating-linear-gradient(0deg,#1b384b 0 24%,#6396a4 24% 29%);box-shadow:inset 0 0 8px #66dcf433,0 4px 0 #0006}
.entity.treasure span{color:#ffe38a;border-color:#ffe38a;background:#584320;box-shadow:0 0 14px #ffe38a55}

/* Illustrated adventure presentation; graphics do not change collision geometry. */
body{background:radial-gradient(ellipse at 50% 0,#294953,#0a1925 70%)}
.adventure{background:#132b37;border-color:#8e9d88;box-shadow:0 20px 60px #0006,inset 0 1px #f3ddb922}
.title-row h1{font-weight:850;color:#f5e8c6}.status-bar{background:linear-gradient(110deg,#243e48,#172e3e);border-color:#78877a}#room{color:#f0dba0}
.map-frame{background:#0c202a;padding-top:18px}#board{border-width:4px;border-radius:10px;box-shadow:0 8px 24px #0007,inset 0 0 30px #0005;isolation:isolate}
#board::after{content:'';position:absolute;inset:0;z-index:4;pointer-events:none;border-radius:6px;box-shadow:inset 0 0 22px 5px #06111b66}
.tile:not(.wall){box-shadow:inset 0 1px #edf1c80a,inset 1px 0 #edf1c808}
.tile.hall:not(.wall){background:linear-gradient(145deg,#5a665b,#3c4d48);border-color:#a5ae8c16}
.tile.hall.wall{background:linear-gradient(#c6bd9c 0 9%,#8f937d 9% 70%,#525f59 70% 85%,#283c3b 85%);border-color:#394c43;box-shadow:inset 2px 0 #ddd4b044,inset -3px 0 #1f323c55}
.tile.archive:not(.wall){background:repeating-linear-gradient(0deg,#536153 0 22%,#34483f 22% 25%,#455a4c 25% 48%,#34483f 48% 50%);border-color:#b5b89710}
.tile.archive.wall{background:linear-gradient(#c9b782 0 9%,#928767 9% 70%,#5d6554 70% 85%,#2e443c 85%);border-color:#354d41}
.tile.signals:not(.wall){background:radial-gradient(circle at 25% 25%,#365b66,#24434f);border-color:#95c6be20}
.tile.signals.wall{background:linear-gradient(#a5c4b9 0 9%,#729a97 9% 70%,#3a6870 70% 85%,#203f50 85%);border-color:#2e5360}
#world .entity.sprite>span.art{width:100%;height:100%;display:block;border:0!important;border-radius:0;background:none;box-shadow:none;color:inherit;font-size:inherit;transform:none}
#world .entity.sprite>span.art::after{content:none}
.art svg{display:block;width:100%;height:100%;overflow:visible}
#world .entity.sprite{filter:drop-shadow(0 2px 1px #06131c44)}
#world .entity.sprite.item,#world .entity.sprite.tool{padding:3px}
#world .entity.sprite.item>span.art,#world .entity.sprite.tool>span.art{filter:drop-shadow(0 0 5px #d8d1a055)}
#world .entity.sprite.exit.active .portal-core{fill:#86dfc3;filter:drop-shadow(0 0 5px #9ffff0)}
.entity.lever.active .signal-bulb{fill:#bcffee}.entity.lever.active .lever-handle{transform:translate(7px,3px)}
.entity.plate.active .plate-core{fill:#94e7af}
.entity.challenge.done .chest-lid{transform:translateY(-8px) rotate(-8deg);transform-origin:9px 25px}
.entity.challenge.done .art{filter:saturate(.5)}
#world #player{z-index:3;filter:drop-shadow(0 2px 1px #09182155)}
#world #player>span.art{width:100%;height:110%;display:block;border:0;background:none;border-radius:0;box-shadow:none;transform:none;font-size:inherit;position:absolute;bottom:0}
#world #player.walking .hero-body{animation:hero-stride .18s ease-in-out infinite alternate;transform-origin:24px 35px}
#world #player.walking .leg-left{animation:hero-foot .18s ease-in-out infinite alternate}
#world #player.walking .leg-right{animation:hero-foot .18s ease-in-out infinite alternate-reverse}
#world #player.interacting .hero-body{animation:hero-interact .22s ease-out}
@keyframes hero-stride{from{transform:translateY(0) rotate(-2deg)}to{transform:translateY(-1.5px) rotate(2deg)}}
@keyframes hero-foot{from{transform:translateY(-1px)}to{transform:translateY(1px)}}
@keyframes hero-interact{50%{transform:translateY(-2px) scale(1.04)}}
#room-decor,.room-decor{position:absolute;inset:0;pointer-events:none;z-index:1}
.decoration{position:absolute;width:var(--cell);height:var(--row,7.692308%);pointer-events:none}
.decoration.lamp::before{content:'';position:absolute;inset:-75%;background:radial-gradient(circle,#ffe6a428,transparent 65%);pointer-events:none}
.decoration .art{position:absolute;inset:12%;opacity:.9}
.inventory-strip{background:#162e3b;border-color:#708176}
.inventory-badge{background:#2a414b;border-color:#7b918a;box-shadow:inset 0 1px #f2dbab22}
.inventory-icon.art{display:block;width:25px;height:25px;flex:0 0 25px}
.inventory-badge.used .art{filter:grayscale(.8);opacity:.6}
.circuit-panel{background:linear-gradient(135deg,#23454d,#173440);border-color:#90c1b4}
.switch-label,.exit-label{box-shadow:0 1px 4px #0006}
@media(prefers-reduced-motion:reduce){#world #player.walking .hero-body,#world #player.walking .leg,#world #player.interacting .hero-body{animation:none}}

.legend>span{display:inline-flex;align-items:center}.legend .legend-art{display:inline-block;width:25px;height:25px;margin-right:6px}.legend-art svg{width:100%;height:100%}.pickup-effect>.art{display:block;width:100%;height:100%}


.tile.library:not(.wall){background:linear-gradient(135deg,#292e43,#1d2335);border-color:#d2b6ff18}.journal{padding:12px 20px;color:#e0cf9a;font-size:.875rem}.journal[hidden]{display:none}.entity.inscription .art{filter:drop-shadow(0 0 4px #dfc47755)}
.tile.archive.water{background:repeating-linear-gradient(175deg,#12364a 0 14px,#1e5064 15px 17px,#12364a 18px 29px);border-color:#79acb622}.light-paths{position:absolute;inset:0;pointer-events:none;z-index:1}.light-paths svg{width:100%;height:100%;display:block}.light-paths path{fill:none;stroke:#ffe99c;stroke-width:.09;stroke-linecap:round;filter:drop-shadow(0 0 .06px #ffd878)}#entities{z-index:2}.entity.receiver.active .receiver-core{fill:#ffe39c;stroke:#fff5c5;filter:drop-shadow(0 0 4px #ffe9a0)}.entity.mirror .art{filter:drop-shadow(0 0 3px #8ed7db55)}
.tile.garden:not(.wall){background:linear-gradient(135deg,#355148,#243e38);border-color:#bcda8f16}.tile.garden.water{background:repeating-linear-gradient(175deg,#12364a 0 14px,#1e5064 15px 17px,#12364a 18px 29px)}#board[data-theme="garden"]{border-color:#9eb98d;background:#28453d}

/* The active game owns the viewport; controls are available through Help. */
#world #player{left:0;top:0;transition:none;will-change:transform;filter:none}
.report-name{display:grid;gap:8px;margin-bottom:16px;color:var(--ink);font-weight:600}
.report-name input{box-sizing:border-box;width:100%;padding:10px 12px;border:1px solid #6483a4;border-radius:8px;background:#0d1c2f;color:var(--ink);font:inherit}
.report-name input:focus-visible{outline:3px solid var(--amber);outline-offset:2px}
#world .entity.interactable::after{content:'';position:absolute;inset:3%;border:2px solid #ffe5a1;border-radius:9px;pointer-events:none}
#answers button.keyboard-selected:not(:disabled){background:#3b4f53;border-color:#ffe5a1;outline:3px solid #ffe5a1;outline-offset:2px}
#dialog-actions button.keyboard-selected{outline:3px solid #ffe5a1;outline-offset:2px}
body.play-shell{height:100vh;height:100dvh;min-height:0;overflow:hidden}
.play-shell main{height:100%;max-width:none;padding:max(8px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));display:flex;flex-direction:column;gap:8px;overflow:hidden}
.play-shell header{flex:none;min-height:24px;margin:0;font-size:.75rem}
.play-shell .title-row{flex:none;min-height:44px;margin:0;gap:12px}
.play-shell .title-row h1{font-size:clamp(18px,2vw,27px);margin:0;line-height:1.15}
.play-shell .title-row p{display:none}
.title-actions{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:6px;flex-shrink:1}
.title-row>div:first-child{min-width:0}
.title-actions button{padding:6px 12px}
.supplies-button{display:none}
.play-shell .adventure{flex:1;min-height:0;display:flex;flex-direction:column;border-radius:12px}
.play-shell .status-bar{flex:none;min-height:34px;padding:7px 14px;gap:8px;font-size:.8125rem}
.play-layout{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) clamp(260px,24vw,330px)}
.play-shell .map-frame{min-width:0;min-height:0;padding:12px;display:flex;background:radial-gradient(ellipse,#203e42,#0c202a 75%)}
.board-stage{width:100%;height:100%;min-width:0;min-height:0;display:flex;align-items:center;justify-content:center;overflow:hidden}
.play-shell #board{flex:none;max-width:none;max-height:100%;margin:0}
.play-shell .map-labels{display:none}
.play-sidebar{min-width:0;min-height:0;padding:12px;display:flex;flex-direction:column;gap:10px;border-left:1px solid #70817655;overflow:hidden}
.play-shell .inventory-strip{flex:none;padding:0 0 10px;background:none}
.play-shell #inventory{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;min-height:0}
.play-shell .inventory-empty{grid-column:1/-1}
.play-shell .inventory-badge{min-width:0;padding:5px;gap:4px;flex-wrap:wrap;font-size:.7rem}
.play-shell .inventory-badge>span:not(.art){flex:1;min-width:55px}
.play-shell .inventory-badge small{margin-left:auto;font-size:.6rem}
.play-shell .inventory-icon.art{width:20px;height:20px;flex-basis:20px}
.play-shell .journal{padding:8px 0 0;font-size:.75rem;line-height:1.4}
.play-shell .objective{flex:none;display:block;padding:0}
.play-shell .objective>.label{display:block;font-size:.65rem;margin-bottom:4px}
.play-shell .objective p{font-size:.875rem;line-height:1.4}
.feedback-box{flex:1;min-height:42px;display:flex;flex-direction:column;overflow:hidden}
.play-shell #message{flex:1;margin:0;min-height:0;font-size:.8125rem;line-height:1.4;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden;max-height:5.6em}
.message-details{flex:none;text-align:left;min-height:28px;padding:3px 0;border:0;background:none;text-decoration:underline;font-size:.75rem;color:var(--cyan)}
.message-details[hidden]{display:none}
.play-shell .controls{flex:none;display:grid;grid-template-columns:140px minmax(0,1fr);gap:5px;padding:0;align-items:center}
.play-shell .controls .dpad{grid-column:1;grid-row:1/4;align-self:center}
.play-shell .controls>button{grid-column:2;padding:6px;font-size:.75rem;min-width:0}
.play-shell .controls kbd{display:none}
.play-shell .keyboard-help{flex:none;font-size:.7rem;line-height:1.35;margin:0;color:var(--muted)}
.play-shell .circuit-panel{flex:none;max-width:none;margin:0;padding:8px}
.play-shell .circuit-panel p{font-size:.8rem;line-height:1.3}
.play-shell .circuit-panel .circuit-detail{font-size:.7rem}
.play-shell .legend,.play-shell .classroom{display:none}
.play-shell .entity .switch-label,.play-shell .entity .exit-label{font-size:clamp(9px,calc(var(--tile-size,45px)*.2),14px)}
@media(max-height:760px){
 .play-shell .inventory-strip{display:none}.play-shell .supplies-button{display:block}
 .play-sidebar{gap:6px;padding:8px}.play-shell .objective p{font-size:.8rem}
 .play-shell #message{-webkit-line-clamp:3;max-height:4.2em}
 .play-shell .keyboard-help{display:none}
}
@media(max-width:759px) and (orientation:portrait){
 .play-shell main{padding:6px;gap:5px}.play-shell header{min-height:20px;font-size:.65rem}
 .play-shell .title-row{gap:6px}.play-shell .title-row h1{font-size:clamp(15px,4vw,20px)}
 .title-actions{gap:3px}.title-actions button{font-size:.7rem;padding:5px 6px}
 .play-shell .supplies-button{display:block}.play-shell .fullscreen-button{display:none}
 .play-shell .status-bar{padding:6px 8px;font-size:.7rem;min-height:30px}
 .play-layout{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto}
 .play-shell .map-frame{padding:6px}
 .play-sidebar{border-left:0;border-top:1px solid #70817655;padding:7px 8px;gap:5px;overflow:visible}
 .play-shell .inventory-strip,.play-shell .keyboard-help{display:none}
 .play-shell .objective>.label{display:none}.play-shell .objective p{font-size:.75rem;line-height:1.3}
 .play-shell #message{font-size:.7rem;-webkit-line-clamp:2;max-height:2.8em}
 .feedback-box{flex:none}
 .play-shell .controls{grid-template-columns:140px repeat(3,minmax(0,1fr));gap:4px}
 .play-shell .controls .dpad{grid-row:1;grid-column:1}
 .play-shell .controls>button{grid-column:auto;grid-row:1;align-self:stretch;font-size:.7rem;padding:4px}
 .play-shell .circuit-panel{padding:6px}.play-shell .circuit-panel strong{font-size:.65rem}
 .play-shell .circuit-panel p{font-size:.7rem}.play-shell .circuit-panel .circuit-detail{font-size:.65rem}
}
@media(max-width:759px) and (orientation:landscape){
 .play-shell main{padding:5px;gap:3px}.play-shell header{display:none}
 .play-shell .title-row{min-height:36px}.play-shell .title-row h1{font-size:18px}
 .play-layout{grid-template-columns:minmax(0,1fr) 260px}
 .play-shell .map-frame{padding:6px}
 .play-shell .controls{grid-template-columns:140px minmax(0,1fr)}
}
@media(max-height:540px) and (orientation:landscape){
 .play-shell main{padding:5px;gap:3px}.play-shell header{display:none}
 .play-shell .title-row{min-height:44px}.play-shell .title-row h1{font-size:18px}
 .play-layout{grid-template-columns:minmax(0,1fr) 300px}
 .play-shell .map-frame{padding:6px}
 .play-shell .controls{grid-template-columns:140px repeat(3,minmax(0,1fr));gap:4px}
 .play-shell .controls .dpad{grid-row:1;grid-column:1}
 .play-shell .controls>button{grid-column:auto;grid-row:1;align-self:stretch;font-size:.7rem;padding:4px}
 .play-shell .objective>.label{display:none}.play-shell .objective p{font-size:.75rem;line-height:1.3}
 .play-shell #message{font-size:.7rem;-webkit-line-clamp:2;max-height:2.8em}
 .play-shell .circuit-panel{padding:6px}.play-shell .circuit-panel strong{font-size:.65rem}
 .play-shell .circuit-panel p{font-size:.7rem}.play-shell .circuit-panel .circuit-detail{font-size:.65rem}
}

/* Compact HUD: one objective, a full-width stage, and a separate control dock. */
.play-shell .play-layout{display:flex;flex-direction:column;gap:0}
.play-shell .map-frame{flex:1;min-height:0;position:relative;flex-direction:column;padding:10px}
.play-shell .board-stage{flex:1;min-height:0;position:relative;flex-direction:column;gap:8px}
.play-shell .adventure>.objective{padding:8px 14px;background:#172e38;border-bottom:1px solid #78918b33;display:flex;align-items:center;gap:8px}
.play-shell .adventure>.objective>.label{margin:0;font-size:10px;white-space:nowrap}
.play-shell .adventure>.objective p{margin:0;line-height:1.35;font-size:13px}
.play-shell .compact-hud{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;border-left:0;border-top:1px solid #70817655;padding:8px 12px;overflow:visible}
.play-shell .compact-hud .inventory-strip{display:block;padding:0;min-width:0}
.play-shell .compact-hud .inventory-strip>.label{display:none}
.play-shell .compact-hud #inventory{display:flex;gap:5px;flex-wrap:wrap}
.play-shell .compact-hud .inventory-badge{flex-wrap:nowrap;font-size:11px;padding:4px 7px;gap:5px}
.play-shell .compact-hud .inventory-badge>span:not(.art){min-width:0;flex:none}
.play-shell .compact-hud .inventory-badge small{display:none}
.play-shell .compact-hud .inventory-badge.used{opacity:.55}
.play-shell .compact-hud .inventory-empty{font-size:11px;color:var(--muted)}
.play-shell .journal{display:none}
.play-shell .supplies-button{display:block}
.play-shell .compact-hud .controls{display:flex;gap:5px;flex-wrap:nowrap;align-items:center}
.play-shell .compact-hud .controls>button{font-size:11px;min-height:36px;padding:6px 10px}
.play-shell .compact-hud .dpad{display:grid;grid-template-columns:repeat(3,32px);grid-template-rows:repeat(2,28px);gap:3px}
.play-shell .compact-hud .dpad button{min-height:28px;height:28px;font-size:12px}
.play-shell .compact-hud .keyboard-help{display:none}
.play-shell .feedback-box{position:absolute;z-index:8;left:50%;top:10px;transform:translateX(-50%);width:min(540px,calc(100% - 30px));min-height:0;pointer-events:none;align-items:center}
.play-shell #message{flex:none;margin:0;padding:9px 14px;border-radius:9px;background:#0b1d2af2;border:1px solid #7892a366;box-shadow:0 4px 20px #0005;font-size:12px;line-height:1.4;max-height:4.2em;-webkit-line-clamp:3}
.play-shell #message[hidden]{display:none}
.play-shell .message-details{pointer-events:auto;background:#183545;padding:5px 9px;min-height:26px;border-radius:6px}
.play-shell .circuit-panel{flex:none;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:4px 12px;width:100%;padding:5px 10px;background:#172e38;border:1px solid #57788566;border-radius:8px;max-width:640px}
.play-shell .circuit-panel[hidden]{display:none}
.play-shell .circuit-panel strong{font-size:10px;letter-spacing:.06em}
.play-shell .circuit-panel p{margin:0;font-size:12px;line-height:1.3}
.play-shell .circuit-panel .circuit-detail{font-size:10px;color:var(--muted)}
.context-prompt{position:absolute;z-index:9;transform:translate(-50%,-100%);padding:5px 8px;background:#0d2236f0;color:#fff3cd;border:1px solid #e7c88988;border-radius:6px;font-size:clamp(10px,1vw,12px);font-weight:700;white-space:nowrap;pointer-events:none;box-shadow:0 3px 12px #0006}
.context-prompt[hidden]{display:none}
@media(max-width:759px){
 .play-shell .compact-hud{grid-template-columns:minmax(0,1fr);padding:6px 8px;gap:4px}
 .play-shell .compact-hud .inventory-strip{display:block}
 .play-shell .compact-hud .controls{justify-content:center}
 .play-shell .compact-hud .inventory-badge{padding:3px 5px;font-size:10px}
 .play-shell .compact-hud .inventory-icon.art{width:16px;height:16px;flex-basis:16px}
 .play-shell .adventure>.objective{padding:6px 9px}
 .play-shell .adventure>.objective>.label{display:none}
 .play-shell .adventure>.objective p{font-size:11px}
 .play-shell .map-frame{padding:5px}
 .play-shell .circuit-panel{padding:4px 6px;gap:3px 8px}
 .play-shell .circuit-panel p{font-size:10px}
 .play-shell .circuit-panel .circuit-detail{display:none}
 .play-shell .feedback-box{top:6px}
 .play-shell #message{font-size:11px;padding:6px 10px}
}
@media(max-height:480px) and (orientation:landscape){
 .play-shell .compact-hud{grid-template-columns:minmax(0,1fr) auto}
 .play-shell .compact-hud .dpad{grid-template-rows:22px 22px}
 .play-shell .compact-hud .dpad button{height:22px;min-height:22px}
 .play-shell .adventure>.objective{padding:4px 10px}
 .play-shell .adventure>.objective p{font-size:10px}
}
