.town-voice{margin-top:1rem;color:var(--muted)}.town-voice p{margin:.25rem 0 0}
.modal-layer{position:fixed;inset:0;z-index:20;display:grid;place-items:center;overflow:auto;padding:1rem;background:#090c0bea}.modal-layer .title-card{max-height:90svh;overflow:auto}
.merchant-list{display:grid;gap:.5rem}.item-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.85rem 0;border-top:1px solid var(--line)}.item-row:first-child{border-top:0}.item-row p{margin:.3rem 0;color:var(--muted);font-size:.9rem}.item-row>div:first-child{min-width:0}.item-row>button{flex:0 0 auto}
.rarity{display:inline-block;border:1px solid var(--line);border-radius:999px;padding:.2rem .6rem;font-weight:700;font-size:.82rem}.rarity-common{color:#c9cec4}.rarity-uncommon{color:#a9d49b;border-color:#52704c}.rarity-rare{color:#9fc8ee;border-color:#496b8b}.rarity-strange{color:#e3b6ee;border-color:#825b8c}
.comparison{margin-top:.4rem;color:var(--muted);font-size:.85rem}.comparison small{display:block}.delta{display:inline-block;margin:.2rem .3rem .1rem 0}.positive{color:var(--green)}.negative{color:var(--danger)}
.slot-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.slot{padding:.7rem;background:#171b19;border:1px solid var(--line);border-radius:8px;min-width:0}.slot small{display:block;color:var(--muted);margin-bottom:.25rem}.slot button{margin-top:.5rem;min-height:40px;padding:.4rem .65rem}.item-actions{justify-content:flex-end}
.enemy-panel{border:1px solid #614b44;border-radius:9px;padding:.8rem;margin-top:.8rem;background:#281f1d}.dungeon-exits{margin-top:1rem}.map .stairs-up{background:#bd7552}.map .stairs-down{background:#8e9e70}
.qa form{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,170px),1fr));gap:.6rem;align-items:end}.qa form label{margin:.2rem 0}.qa details{margin-top:1rem}.qa pre,.qa p{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.qa pre{max-height:28rem;overflow:auto}
@media(max-width:440px){.item-row{align-items:flex-start;flex-wrap:wrap}.item-row>button{margin-left:auto}.slot-grid{grid-template-columns:1fr}.dungeon-exits button{flex:1 1 100%}.item-actions{width:100%;justify-content:flex-start}}
.event-panel{max-width:760px;margin:1rem auto;border-color:#756a4d;background:linear-gradient(140deg,#2a2d25,#202421)}.event-panel>p{max-width:62ch}.event-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:.65rem;margin-top:1.2rem}.event-choice{display:grid;gap:.25rem;text-align:left;min-height:68px;background:#30352e}.event-choice small{color:var(--muted);font-weight:400}.cell.landmark{display:grid;place-items:center;color:var(--gold);font-size:.75rem;font-style:normal;font-weight:800;border-color:var(--gold)}.landmark-label{margin:.25rem 0;color:var(--gold);font-size:.88rem}.effect-pill{color:#c6d7a9;border-color:#657453}
.dungeon-layout{grid-template-areas:"main side"}.dungeon-main{grid-area:main;min-width:0}.dungeon-side{grid-area:side;min-width:0;display:flex;flex-direction:column;gap:.6rem}.dungeon-side h2{font-size:1rem;margin:.1rem 0 .4rem}.dungeon-minimap .map{width:min(100%,260px)}.dungeon-hud .stats{gap:.35rem}.dungeon-hud .pill{font-size:.78rem;padding:.22rem .48rem}.room-note{margin:.45rem 0;color:var(--muted);font-size:.85rem}.encounter-note{font-size:.8rem;margin:.4rem 0}.movement-status{text-align:center;margin:.25rem 0;color:var(--muted);font-size:.82rem}.controls button{min-width:0;font-size:1.2rem;font-weight:700}.dungeon-main .log{margin:.35rem 0;min-height:1.5em;font-size:.9rem}.dungeon-main .scene p{margin:.35rem;text-align:center}
@media(max-width:680px){body:has(.dungeon-layout){min-height:100svh}.shell:has(.dungeon-layout){width:100%;padding:6px 9px calc(8px + env(safe-area-inset-bottom))}.shell:has(.dungeon-layout)>.topbar{margin:0 0 .35rem;padding:0 0 .35rem;align-items:center}.shell:has(.dungeon-layout) .brand{font-size:.88rem;max-width:none}.shell:has(.dungeon-layout) .top-actions button{min-height:38px}.dungeon-heading{display:none}.dungeon-layout{grid-template-columns:minmax(0,1fr);grid-template-areas:"side" "main";gap:.35rem}.dungeon-side{display:grid;grid-template-columns:minmax(86px,27vw) minmax(0,1fr);align-items:center;gap:.5rem;padding:.4rem;margin:0;border-radius:9px}.dungeon-side h2,.room-note,.encounter-note,.landmark-label{display:none}.dungeon-minimap .map{width:100%;max-width:108px;gap:2px}.map .cell{border-radius:2px}.dungeon-hud .stats{gap:.25rem}.dungeon-hud .pill{font-size:.78rem;line-height:1.3;padding:.2rem .42rem}.dungeon-main{padding:.5rem;margin:0;border-radius:9px}.scene-backdrop{margin:.5rem 0}.dungeon-main .scene{min-height:clamp(118px,22svh,158px)}.dungeon-main .scene p{font-size:.9rem}.dungeon-main .log{font-size:.84rem;line-height:1.3;min-height:1.3em}.dungeon-main .controls{width:min(100%,228px);margin:.2rem auto;gap:.2rem}.dungeon-main .controls button{min-height:49px;padding:.25rem;font-size:1.15rem}.dungeon-main .movement-status{font-size:.78rem;margin:.15rem 0}.dungeon-main .dungeon-exits{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.35rem}.dungeon-main .dungeon-exits button{flex:1 1 auto;min-height:42px;padding:.4rem .55rem;font-size:.85rem}.dungeon-main .actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:.35rem}.dungeon-main .actions button{min-height:48px;font-size:.9rem}.dungeon-main .enemy-panel{margin-top:.35rem;padding:.5rem}.dungeon-main .enemy-panel p{margin:.25rem 0;font-size:.84rem}.dungeon-main .health{height:8px}}
@media(max-width:360px){.shell:has(.dungeon-layout) .brand{font-size:.66rem;max-width:calc(100vw - 152px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell:has(.dungeon-layout) .top-actions{gap:.25rem;flex:0 0 auto}.shell:has(.dungeon-layout) .top-actions button{min-height:40px;padding:.35rem .4rem;font-size:.75rem}}
.randomize-class{width:100%;min-height:48px}.class-preview{border:1px solid var(--line);border-radius:9px;background:#171b19;padding:.7rem .85rem;margin:.55rem 0 .8rem}.class-preview>b{color:var(--gold)}.class-preview p{margin:.3rem 0;font-variant-numeric:tabular-nums}.class-preview small{color:var(--muted)}#create-form label{margin:.65rem 0}

/* Location-aware dungeon scene: the openings are relative to facing, while the map and controls remain absolute. */
.scene-backdrop{margin:.5rem 0}.dungeon-main .scene{position:relative;display:grid;place-items:center;overflow:hidden;min-height:clamp(170px,25vw,260px);border:1px solid #5a5948;border-radius:9px;background:radial-gradient(ellipse at 50% 24%,#9b7540 0,#514431 24%,#282721 61%,#171a19 100%);isolation:isolate}
.dungeon-main .scene:before,.dungeon-main .scene:after{display:none}
.scene-view{position:relative;width:min(100%,620px);height:auto;aspect-ratio:1672 / 941;min-height:0;overflow:hidden;perspective:650px;background:#171a19}
.scene-image-layer{position:absolute;inset:0;z-index:0;display:block;width:100%;height:100%;object-fit:contain;object-position:var(--scene-focal,50% 50%);transform:scale(var(--scene-scale,1));transform-origin:var(--scene-focal,50% 50%);pointer-events:none;opacity:0;transition:opacity .14s ease;filter:brightness(calc(1 - var(--scene-overlay,.04)));}
.scene-image-layer.is-loaded{opacity:1}
.qa-topology-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:.75rem;margin-block:.75rem}.qa-topology-grid figure{min-width:0;margin:0}.qa-topology-grid img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:.4rem;background:#181818}.qa-topology-grid figcaption{font-size:.78rem;overflow-wrap:anywhere;padding:.25rem 0}
.scene-ceiling,.scene-side,.scene-far,.scene-floor,.scene-light{z-index:1}
@media(max-width:680px){.scene-image-layer{object-position:var(--scene-mobile-focal,var(--scene-focal,50% 50%))}}
.content-art{object-fit:contain;max-width:100%;height:auto;transform:scale(var(--content-art-scale,1))}.item-art-inline{width:1.35em;height:1.35em;vertical-align:middle;object-fit:contain;margin-right:.3em}.npc-portrait{display:inline-block;width:2.5em;height:2.5em;vertical-align:middle;object-fit:contain;margin-right:.45em}.interactive-art-slot{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}.interactive-object-art{width:72%;height:72%;object-fit:contain}
.scene-ceiling{position:absolute;inset:0 11% 38%;background:linear-gradient(180deg,#38372e,#504535 52%,#5a4b37);clip-path:polygon(16% 0,84% 0,100% 100%,0 100%);opacity:.78}
.scene-side{position:absolute;inset:11% auto 20%;width:37%;background:linear-gradient(90deg,#35342c,#746047 52%,#494032);border:1px solid #746146;transition:clip-path .18s ease,opacity .18s ease}
.scene-side--left{left:0;clip-path:polygon(0 0,100% 22%,100% 78%,0 100%)}.scene-side--right{right:0;background:linear-gradient(270deg,#35342c,#746047 52%,#494032);clip-path:polygon(0 22%,100% 0,100% 100%,0 78%)}
.scene-side.is-open{opacity:.18;clip-path:polygon(0 0,45% 22%,45% 78%,0 100%)}.scene-side--right.is-open{clip-path:polygon(55% 22%,100% 0,100% 100%,55% 78%)}
.scene-far{position:absolute;left:37%;right:37%;top:22%;bottom:38%;background:radial-gradient(ellipse at 50% 40%,#b28a4c,#453b2b 48%,#181b19 100%);border:1px solid #8c7149;transition:all .18s ease}
.scene-far.is-wall{left:25%;right:25%;top:13%;bottom:26%;background:linear-gradient(135deg,#6b5a43,#38372f 60%,#66553e);box-shadow:inset 0 0 30px #1118}
.scene-floor{position:absolute;inset:62% 0 0;background:linear-gradient(180deg,#514333,#201f1b 80%);clip-path:polygon(36% 0,64% 0,100% 100%,0 100%)}
.scene-light{position:absolute;left:46%;top:48%;width:8%;aspect-ratio:1;border-radius:50%;background:#e9b64d;filter:blur(15px);opacity:.25}
.scene-figure{position:absolute;z-index:2;left:50%;top:38%;transform:translate(-50%,-50%);display:grid;place-items:center;width:3rem;height:3rem;border-radius:50%;font-size:1.8rem;color:#f1cd80;text-shadow:0 0 16px #f5a438;background:#28251ecc;border:1px solid #ad8651}
.scene-figure--monster{color:#f2926a;border-color:#a9553a;background:#391f1dcc}.scene--flooded-chamber .scene-floor{background:linear-gradient(180deg,#5d8490bb,#202a2acc 82%)}.scene--mushroom-room .scene-light{background:#badf9b;opacity:.32}.scene--warm-wall .scene-light{background:#f07a27;opacity:.52}.scene--stone-face .scene-far{background:radial-gradient(ellipse at 50% 35%,#9a896e,#49463e 48%,#181b19 100%)}.scene--dead-end .scene-floor{filter:brightness(.72)}.scene--wide .scene-side{opacity:.72}.scene--combat .scene-view{filter:saturate(1.15)}
.environment-caption{margin:.45rem 0 0;color:#ded7c8;font-size:.93rem;line-height:1.35}.dungeon-main .log{margin:.35rem 0;min-height:0;padding:.45rem .6rem;border-left:3px solid var(--gold);background:#30271f;color:#f1d49a}
.dungeon-command-bar,.npc-action-bar{z-index:15}.dungeon-command-bar{display:flex;align-items:center;justify-content:center;gap:.7rem;margin:.65rem auto 0}.dungeon-command-bar .controls{width:228px;margin:0;gap:.2rem}.dungeon-command-bar button,.npc-action-bar button{min-height:50px}.dungeon-exits{display:flex;flex-direction:column;gap:.3rem;margin:0}.dungeon-exits button{min-height:42px;padding:.35rem .6rem;font-size:.85rem}.combat-controls{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.4rem}.combat-controls button{min-height:52px}.event-panel .event-choices{margin-top:1.2rem}.qa-scene-diagnostics{display:grid;gap:.2rem;margin-top:.5rem;padding:.5rem;border:1px dashed #a28c55;border-radius:7px;color:#e7d6aa;font: .78rem/1.35 ui-monospace,monospace}.qa-scene-diagnostics>b{font-family:inherit}.npc-action-bar{margin-top:.8rem}
.quest-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;flex-wrap:wrap}.quest-status--ready{color:#f1d184;border-color:#a98744}.quest--ready{border-left:3px solid var(--gold);padding-left:.75rem}.quest-group>h2{margin-top:0}.dungeon-hud .dungeon-inventory-button{min-height:40px;padding:.32rem .6rem;margin:.3rem 0;border-color:#877348;color:#f1d184}
@media(max-width:680px){
  .shell:has(.dungeon-layout){padding-bottom:calc(156px + env(safe-area-inset-bottom,0px))}
  .dungeon-command-bar{position:fixed;left:0;right:0;bottom:0;margin:0;justify-content:space-between;gap:.45rem;padding:8px max(10px,env(safe-area-inset-left,0px)) calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid #565346;background:linear-gradient(180deg,#171a19f5,#101211fa);backdrop-filter:blur(12px)}
  .dungeon-command-bar .controls{flex:0 1 57vw;width:min(57vw,228px);gap:3px}.dungeon-command-bar .controls button{min-height:50px;padding:.2rem;font-size:1.1rem}.dungeon-exits{flex:1;min-width:82px;max-width:108px}.dungeon-exits button{min-height:42px;font-size:.8rem}
  .combat-controls{grid-template-columns:repeat(2,minmax(0,1fr));padding:8px 12px calc(8px + env(safe-area-inset-bottom,0px))}.combat-controls button{min-height:48px;padding:.35rem;font-size:.87rem}
  .scene-backdrop{margin:.5rem 0}.dungeon-main .scene{min-height:clamp(124px,20svh,158px)}.scene-view{min-height:inherit}.environment-caption{font-size:.86rem}.qa-scene-diagnostics{font-size:.7rem}
  .shell:has(.event-panel){padding-bottom:calc(168px + env(safe-area-inset-bottom,0px))}.event-panel .event-choices{position:fixed;z-index:15;left:0;right:0;bottom:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:.4rem;margin:0;padding:8px 10px calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid #565346;background:#151816f5;backdrop-filter:blur(12px)}.event-choice{min-height:52px;padding:.45rem;font-size:.82rem}.event-choice small{font-size:.72rem}
  .shell:has(.npc-action-bar){padding-bottom:calc(76px + env(safe-area-inset-bottom,0px))}.npc-action-bar{position:fixed;left:0;right:0;bottom:0;margin:0;padding:8px 12px calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid #565346;background:#151816f5}.npc-action-bar button{width:100%;min-height:50px}
}
/* Playtest refinement: legible moving automap, scene labels, sprites, and town resources. */
.dungeon-minimap .map{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));aspect-ratio:1;gap:3px}.map .cell{position:relative;display:grid;place-items:center;min-width:0;aspect-ratio:1;color:#f4e8cc;font-style:normal;font-size:.76rem;font-weight:900}.map .known-wall{background:linear-gradient(145deg,#645950,#332e2c);border:1px solid #b8aa91;box-shadow:inset 0 0 0 1px #171515}.map .outside{visibility:hidden}.map .wall-n{border-top:2px solid #f5e8c4}.map .wall-e{border-right:2px solid #f5e8c4}.map .wall-s{border-bottom:2px solid #f5e8c4}.map .wall-w{border-left:2px solid #f5e8c4}.map-legend{margin-top:.45rem;font-size:.75rem}.map-legend summary{cursor:pointer;color:var(--muted)}.map-legend small{display:block;max-width:260px;line-height:1.5;padding:.35rem 0}.scene-room-label{position:absolute;z-index:4;top:7px;left:50%;transform:translateX(-50%);max-width:90%;padding:.18rem .45rem;border-radius:4px;background:#111b;color:#f4e8cc;font-size:.68rem;font-weight:900;letter-spacing:.08em;text-align:center;white-space:nowrap}.enemy-sprite{position:absolute;z-index:3;left:50%;bottom:13%;height:min(76%,150px);width:auto;max-width:52%;object-fit:contain;transform:translateX(-50%) translateY(var(--sprite-y,0px)) scale(var(--sprite-scale,1));filter:drop-shadow(0 5px 5px #0009)}.enemy-sprite--ink{filter:drop-shadow(0 0 2px #f3ead5) drop-shadow(0 0 4px #f3ead5) drop-shadow(0 5px 5px #0009)}.scene--combat .scene-room-label{top:5px}.town-status{position:sticky;top:0;z-index:25;display:flex;justify-content:center;gap:.55rem;padding:.4rem max(.5rem,env(safe-area-inset-left,0px));border:1px solid #655746;border-radius:0 0 9px 9px;background:#191714f2;backdrop-filter:blur(10px);font-size:.84rem;font-weight:800}.town-status span{white-space:nowrap}.transaction-feedback{position:sticky;top:2.25rem;z-index:24;margin:.35rem 0;padding:.5rem .65rem;border:1px solid #718b65;border-radius:7px;background:#20291eeF;color:#e3f0d6}.unavailable-copy{display:block;color:#f1b6a4;font-size:.8rem;margin-top:.2rem}
@media(max-width:680px){.dungeon-minimap .map{max-width:108px}.map .cell{font-size:.68rem}.scene-room-label{font-size:.62rem}.enemy-sprite{height:min(74%,128px)}.town-status{gap:.4rem;font-size:.78rem}.transaction-feedback{top:2.05rem}.dungeon-command-bar{position:fixed;left:0;right:0;bottom:0;margin:0;justify-content:space-between;gap:.45rem;padding:8px max(10px,env(safe-area-inset-left,0px)) calc(8px + env(safe-area-inset-bottom,0px));border-top:1px solid #565346;background:linear-gradient(180deg,#171a19f5,#101211fa);backdrop-filter:blur(12px)}body:has(.dungeon-layout) .shell{padding-bottom:calc(94px + env(safe-area-inset-bottom,0px))}.exploration-controls .dungeon-exits{max-width:125px}.quest-actions{justify-content:flex-start}.quest-actions button{min-height:42px}.combat-controls{grid-template-columns:repeat(4,minmax(0,1fr))}.combat-controls button{min-width:0;padding:.35rem .15rem;font-size:.78rem}}

.shell.text-large{font-size:1.125rem;line-height:1.6}.shell.text-large .pill,.shell.text-large small{font-size:.95rem}.map--high-contrast .cell.seen{background:#d7e5bd;color:#111;border-color:#101510}.map--high-contrast .cell.player{background:#ffe36e;color:#111;box-shadow:inset 0 0 0 2px #111,0 0 0 2px #ffe36e}.map--high-contrast .cell.known-wall{background:#343c37;border-color:#fff;box-shadow:inset 0 0 0 1px #fff}.map--high-contrast .cell.stairs-up,.map--high-contrast .cell.stairs-down{background:#f29a63;color:#111}.map--high-contrast .cell.landmark{background:#75cde0;color:#111}.career-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.45rem}.career-grid>div{display:flex;justify-content:space-between;gap:.5rem;padding:.4rem .55rem;border-bottom:1px solid var(--line)}.ability-menu{position:fixed;z-index:18;left:50%;bottom:calc(72px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);width:min(calc(100vw - 24px),520px);max-height:48vh;overflow:auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:.4rem;padding:.65rem;background:#202521f5;box-shadow:0 8px 30px #0009}.ability-menu>b{grid-column:1/-1}.ability-menu button{display:grid;gap:.2rem;text-align:left;min-height:54px;padding:.4rem .55rem}.ability-menu button small{color:var(--muted);line-height:1.25}.quest .eyebrow{font-size:.65rem;letter-spacing:.08em;margin:0}.defeat-report{border-color:#96634e}.class-insight{padding:.55rem .7rem;border-left:3px solid #91a9bd;background:#212a31;color:#d8e5ed;border-radius:4px}.shell.reduce-motion *,body:has(.shell.reduce-motion) *{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(max-width:680px){.combat-controls{grid-template-columns:repeat(5,minmax(0,1fr));gap:.25rem}.combat-controls button{min-width:0;padding:.3rem .1rem;font-size:.7rem;line-height:1.1}.ability-menu{bottom:calc(76px + env(safe-area-inset-bottom,0px));grid-template-columns:1fr}.ability-menu button{min-height:48px}.career-grid{grid-template-columns:1fr}}

/* Expandable, inspection-only full-floor automap. */
.map-control{display:flex;flex-direction:column;align-items:center;gap:.2rem}.map-control .map{appearance:none;-webkit-appearance:none;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));padding:0;border:0;border-radius:4px;background:transparent;cursor:zoom-in;touch-action:manipulation}.map-hint,.map-expanded-label,.map-expanded-key{color:var(--muted);font-size:.68rem;line-height:1.2;text-align:center}.map-control--expanded{position:fixed;inset:max(8px,env(safe-area-inset-top,0px)) 8px max(8px,env(safe-area-inset-bottom,0px));z-index:80;display:flex;align-items:center;justify-content:center;gap:.45rem;padding:16px;background:#111614f7;border:1px solid #88795f;border-radius:12px;box-shadow:0 0 0 100vmax #050706c9;backdrop-filter:blur(12px)}.map-expanded-label{color:#f2e6c8;font-size:.9rem;font-weight:800}.map-expanded-key{max-width:min(92vw,540px)}.map-control .map-full{grid-template-columns:repeat(var(--map-columns),minmax(0,1fr));width:min(92vw,72svh);max-width:none;aspect-ratio:var(--map-aspect);gap:2px;padding:4px;border:1px solid #82745f;border-radius:8px;background:#090d0c;cursor:zoom-out}.map-full .cell{font-size:clamp(.42rem,2vw,.85rem);border-radius:2px}.map-full .wall-n{border-top:2px solid #fff0c6}.map-full .wall-e{border-right:2px solid #fff0c6}.map-full .wall-s{border-bottom:2px solid #fff0c6}.map-full .wall-w{border-left:2px solid #fff0c6}.map-full .player{z-index:1;background:#e9c659;color:#18130a;box-shadow:0 0 0 2px #fff4c0,0 0 12px #ffdc67}.map-full .stairs-up,.map-full .stairs-down{background:#3b6c55}.map-full .landmark{background:#6b4e8a}
@media(max-width:680px){.map-hint{font-size:.62rem}.map-control--expanded{inset:max(6px,env(safe-area-inset-top,0px)) 6px max(6px,env(safe-area-inset-bottom,0px));padding:10px}.map-control .map-full{width:min(92vw,72svh);gap:1px;padding:3px}.map-full .cell{font-size:clamp(.35rem,2.1vw,.68rem)}}

/* Battle music settings and QA-only playback controls. */
.settings-card input[type="range"]{min-height:36px;padding:0;border:0;background:transparent;accent-color:var(--gold)}
.settings-card output{float:right;color:var(--ink);font-variant-numeric:tabular-nums}
.qa-audio-controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,135px),1fr));gap:.45rem;margin:0 0 1rem;padding:.65rem;border:1px solid #575044;border-radius:8px;background:#171b19}
.qa-audio-controls>b{grid-column:1/-1;color:var(--gold)}
.qa-audio-controls button{min-height:42px;padding:.4rem .55rem;font-size:.85rem}

.enemy-threat{display:inline-block;margin:.1rem 0 .45rem;padding:.16rem .55rem;border:1px solid #82734d;border-radius:999px;color:#e5c77f;font-weight:700;letter-spacing:.035em}.enemy-panel .row{margin-bottom:.1rem}.enemy-panel>small{display:block;margin-top:.25rem}
/* Data-driven room dressing. Geometry stays procedural; these are decorative overlays. */
.scene-room-label{z-index:8}
.room-props{position:absolute;inset:0;z-index:2;pointer-events:none}
.room-prop{position:absolute;display:block;left:var(--prop-x,50%);top:var(--prop-y,50%);width:var(--prop-width,17%);height:var(--prop-height,40%);transform-origin:center bottom;filter:drop-shadow(0 3px 4px #08090999);transform-style:preserve-3d}
.room-prop svg,.room-prop img{display:block;width:100%;height:100%;overflow:visible}
.room-prop img{object-fit:contain}
.room-prop-zone--far_left,.room-prop-zone--far_center,.room-prop-zone--far_right,.room-prop-zone--mid_left,.room-prop-zone--mid_right,.room-prop-zone--foreground_left,.room-prop-zone--foreground_right,.room-prop-zone--floor_center,.room-prop-zone--wall_center{left:var(--prop-x);top:var(--prop-y);width:var(--prop-width);height:var(--prop-height)}
.room-prop--campfire.room-prop-zone--floor_center{width:22%;height:28%}
.room-prop--show-zone{outline:1px dashed #fff5a5;background:#ffe58b22;border-radius:4px}
.scene--mushroom-room .scene-view{background:linear-gradient(#344336,#27352c 68%,#151918)}
.scene--mushroom-room .scene-side{background:linear-gradient(90deg,#28342b,#526349 52%,#343a2c)}
.scene--mushroom-room .scene-floor{background:linear-gradient(180deg,#42533b,#24271e 82%)}
.scene--flooded-chamber .scene-view{background:linear-gradient(#37474a,#283739 63%,#172021)}
.scene--flooded-chamber .scene-floor{background:repeating-linear-gradient(174deg,#6d9ba1aa 0 2px,#38575caa 3px 8px,#233a3dcc 9px 17px)}
.scene--flooded-chamber .scene-light{background:#a9e8e7;opacity:.27}
.scene--shrine .scene-light{background:#f4c76c;opacity:.5}
.scene--storage .scene-side,.scene--records .scene-side{background:linear-gradient(90deg,#35312b,#72583c 54%,#484032)}
.scene--camp .scene-view{background:linear-gradient(#3b403a,#34342c 66%,#181917)}
.scene--market .scene-light{background:#eca64f;opacity:.42}
.scene--library .scene-view{background:linear-gradient(#393b3b,#2b2c2b 70%,#181a19)}
.scene--records .scene-view{background:linear-gradient(#3a3a37,#30302c 70%,#191a18)}
.scene--spoons .scene-floor{background:radial-gradient(ellipse at 50% 28%,#73766f,#373933 72%,#191a17)}
.scene--spoons .scene-light{background:#d8e4dc;opacity:.3}
.scene--ordinary .scene-light{opacity:.16}
.scene-landmark-object,.scene-event-object,.scene-npc-object{position:absolute;z-index:4;left:50%;top:47%;transform:translate(-50%,-50%);pointer-events:none}
.scene-landmark-object--giant-stone-face{width:20%;height:33%;border-radius:48% 48% 30% 30%;background:radial-gradient(ellipse at 50% 30%,#a59a83,#676052 65%,#39362e);box-shadow:inset 0 0 0 3px #b3a58a,0 2px 10px #111}
.scene-landmark-object--giant-stone-face:before{content:"";position:absolute;left:24%;right:24%;top:35%;height:8%;border-top:3px solid #24231e;border-radius:50%}
.scene-landmark-object--warm-wall{width:5px;height:39%;background:#ff9b32;box-shadow:0 0 8px 5px #ff8a2766,0 0 24px 9px #f8681644}
.scene-event-object{width:14%;height:35%;border:3px solid #29241c;border-radius:5px;background:linear-gradient(90deg,#77918b,#d5d2ad 18% 82%,#4d645d);box-shadow:0 3px 10px #08090999}
.scene-event-object--vending-machine{top:55%;width:24%;height:58%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--vending-machine:before{display:none}
.scene-event-object--vending-machine>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-position:center bottom}
.scene-event-object--comfortable-chair{top:63%;width:26%;height:67%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--comfortable-chair:before{display:none}
.scene-event-object--comfortable-chair>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-position:center bottom}
.scene-event-object--the-duck{top:58%;width:48%;height:54%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--the-duck:before{display:none}
.scene-event-object--the-duck>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object--wishing-well{top:56%;width:36%;height:76%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--wishing-well:before{display:none}
.scene-event-object--wishing-well>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object--snack-stand{top:60%;width:82%;height:70%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--snack-stand:before{display:none}
.scene-event-object--snack-stand>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object--talking-statue{top:52%;width:58%;height:92%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--talking-statue:before{display:none}
.scene-event-object--talking-statue:after{display:none}
.scene-event-object--talking-statue>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object:before{content:"";position:absolute;left:16%;right:16%;top:15%;height:31%;border:2px solid #31443b;background:linear-gradient(#d5dfba,#879a7d)}
.scene-event-object:after{content:attr(data-label);position:absolute;top:106%;left:50%;transform:translateX(-50%);width:max-content;max-width:180px;padding:2px 5px;border-radius:4px;background:#181a18dd;color:#f5e8c6;font:600 clamp(7px,1.6vw,10px)/1.2 system-ui;text-align:center}
.scene-event-object--suspicious-chest{top:60%;width:54%;height:64%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--suspicious-chest:before{display:none}
.scene-event-object--suspicious-chest>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object--second-small-door{top:60%;width:12%;height:30%;border:0;border-radius:0;background:transparent;box-shadow:none}
.scene-event-object--second-small-door:before,.scene-event-object--second-small-door:after{display:none}
.scene-event-object--second-small-door>.interactive-art-slot .interactive-object-art{width:100%;height:100%;object-fit:contain;object-position:center bottom}
.scene-event-object--kobold-bake-sale{top:59%;width:29%;height:18%;background:linear-gradient(#bb8348,#65452b);border-radius:2px}
.scene-event-object--kobold-bake-sale:before{left:4%;right:4%;top:-40%;height:33%;background:#eedca8;border-color:#4b3b2c}
.scene-npc-object{width:11%;height:30%;top:58%;border-radius:45% 45% 25% 25%;background:linear-gradient(#d29e65 0 35%,#675246 36%);border:2px solid #201c18}
.scene-npc-object:before{content:"";position:absolute;left:22%;top:17%;width:12%;height:5%;border-radius:50%;background:#211b16;box-shadow:14px 0 #211b16}
.enemy-sprite{z-index:6}
@media(max-width:680px){.room-prop{filter:drop-shadow(0 2px 3px #080909aa)}.scene-event-object:after{max-width:115px}.scene-landmark-object--giant-stone-face{width:24%;height:35%}}
.scene-backdrop{position:relative;display:grid;place-items:center;overflow:hidden;min-height:clamp(170px,25vw,260px);margin:.5rem 0;border:1px solid #5a5948;border-radius:9px;background:radial-gradient(ellipse at 50% 24%,#9b7540 0,#514431 24%,#282721 61%,#171a19);isolation:isolate}
.scene-backdrop .scene-view{min-height:inherit}
@media(max-width:680px){.scene-backdrop{min-height:clamp(124px,20svh,158px)}}
@media(max-width:680px){.shell.text-large .topbar{flex-wrap:wrap;gap:.5rem}.shell.text-large .brand{max-width:100%}.shell.text-large .top-actions{width:100%;justify-content:flex-end;flex-wrap:wrap}}
.achievement-toast{position:relative;margin:.6rem 0;padding:.65rem .8rem;border:1px solid #d7b66d;border-radius:10px;background:#332b1b;color:#f5e6bd;font-weight:700}
@media(max-width:680px){
  .controls-right-handed .exploration-controls{flex-direction:row-reverse}
  .exploration-controls .dungeon-exits button{min-height:44px}
  .combat-controls button[data-action="attack"]{order:1}
  .combat-controls button[data-action="abilities"]{order:2}
  .combat-controls button[data-action="defend"]{order:3}
  .combat-controls button[data-action="tonic"]{order:4}
  .combat-controls button[data-action="escape"]{order:5}
  .controls-right-handed .combat-controls button[data-action="attack"]{order:4}
  .controls-right-handed .combat-controls button[data-action="abilities"]{order:5}
  .controls-right-handed .combat-controls button[data-action="defend"]{order:3}
  .controls-right-handed .combat-controls button[data-action="tonic"]{order:2}
  .controls-right-handed .combat-controls button[data-action="escape"]{order:1}
}

.combat-item-menu{z-index:19}.combat-item-menu button{min-height:48px}@media(max-width:680px){.combat-item-menu{bottom:calc(76px + env(safe-area-inset-bottom,0px))}.combat-item-menu button{min-height:48px}}

/* Compact town hub, persistent service status, and art-ready destination slots. */
.shell:has(.town-hub){padding-top:clamp(.5rem,2vw,1.1rem)}
.shell:has(.town-hub)>.topbar{margin-bottom:0;padding-bottom:0;border:0}
.shell:has(.town-hub)>.topbar .top-actions,.shell:has(.town-status)>.topbar .top-actions{display:none}
.town-status{position:sticky;top:0;z-index:8;display:flex;align-items:center;flex-wrap:wrap;gap:.25rem .65rem;padding:.42rem .6rem;margin:.3rem 0;border:1px solid var(--line);border-radius:8px;background:#171b19f5;backdrop-filter:blur(8px);font-size:.8rem;font-weight:700}
.town-hub{display:grid;gap:.5rem;max-width:780px;margin:0 auto}
.town-hub-heading .eyebrow{margin:0;font-size:.66rem}
.town-hub-heading .section-title{font-size:clamp(1.25rem,4vw,1.8rem);margin:.15rem 0 .35rem}
.town-hub .town-status{position:static;top:auto;justify-content:flex-start;flex-wrap:wrap;border-radius:9px;padding:.35rem .55rem;gap:.3rem .65rem;font-size:.78rem}
.hub-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:minmax(72px,auto);gap:.45rem}
.location{position:relative;min-height:74px;display:grid;grid-template-columns:38px minmax(0,1fr);grid-template-rows:auto auto;align-content:center;align-items:center;column-gap:.55rem;row-gap:.08rem;padding:.45rem .55rem;text-align:left;border-radius:10px;background:linear-gradient(145deg,#292f2a,#202421);overflow:hidden}
.location b{align-self:end;font-size:.82rem;line-height:1.15;letter-spacing:.035em}
.location small{align-self:start;color:var(--muted);font-weight:500;font-size:.7rem;line-height:1.15}
.location-art{grid-row:1/3;grid-column:1;display:grid;place-items:center;width:36px;height:42px;border-radius:8px;background:#131815;color:var(--gold);font:900 1.45rem/1 Georgia,serif}
.location-art>span{display:grid;place-items:center;width:100%;height:100%}
.location-art--illustration img{display:block;width:100%;height:100%;object-fit:contain}
.location-store .location-art{color:#e4c87d}.location-inn .location-art{color:#cf9976}.location-quests .location-art{color:#b5cf9d}.location-character .location-art{color:#9fbfcb}.location-records .location-art,.location-achievements .location-art{color:#cfb181}.location-settings{min-height:56px;background:#202421}.location-settings .location-art{height:32px;color:#aaa}.location-settings b{font-size:.76rem}.location-settings small{font-size:.66rem}
.town-hub-flavor{margin:.1rem 0 0;text-align:center;color:var(--muted);font-size:.78rem}
.town-deepest-note{color:var(--gold);font-weight:800}
.town-service-heading{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;flex-wrap:wrap;margin:.35rem 0 .55rem}
.town-service-heading .eyebrow{margin:0;font-size:.65rem}.town-service-heading .section-title{font-size:clamp(1.25rem,4vw,1.7rem);margin:0}
.market-demand{display:block;font-size:.8rem;font-weight:700}.market-low{color:#e5c06a}.market-normal{color:var(--muted)}.market-high{color:#add39a}
.inn-panel{max-width:620px}.inn-greeting{margin-top:0;color:var(--muted)}.inn-vitals{display:flex;flex-wrap:wrap;gap:.45rem;margin:.5rem 0}.inn-vitals span{flex:1 1 70px;padding:.5rem;border:1px solid var(--line);border-radius:8px;background:#171b19}.inn-effects,.inn-event{padding:.6rem .7rem;margin:.45rem 0;border-left:3px solid var(--gold);background:#171b19;color:var(--muted);font-size:.9rem}.inn-rest-button{width:100%;min-height:52px}.town-status-effect{color:#d8c389}
.settings-group{margin:.5rem 0 .8rem;padding:.45rem .75rem .65rem;border:1px solid var(--line);border-radius:9px}.settings-group legend{padding:0 .35rem;color:var(--gold);font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.settings-card .settings-group label{margin:.55rem 0}
@media(max-width:360px){.shell:has(.town-hub){padding:.45rem .55rem calc(.75rem + env(safe-area-inset-bottom))}.town-hub{gap:.35rem}.hub-grid{gap:.35rem;grid-auto-rows:minmax(68px,auto)}.location{min-height:68px;grid-template-columns:32px minmax(0,1fr);column-gap:.4rem;padding:.38rem}.location-art{width:30px;height:36px;font-size:1.25rem}.location b{font-size:.72rem}.location small{font-size:.65rem}.town-hub-heading .section-title{font-size:1.24rem}.town-hub-flavor{font-size:.69rem}}

/* The four signed destinations are themselves the primary Town controls. */
.location--art-destination{position:relative;isolation:isolate;overflow:hidden;min-width:0;min-height:124px;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:1fr;align-content:stretch;justify-items:stretch;gap:0;padding:0;text-align:center;border:1px solid #73694e;background:linear-gradient(145deg,#302f27,#202421);box-shadow:inset 0 1px #ffffff12,0 2px 7px #0004;transition:transform .12s ease,filter .12s ease,box-shadow .12s ease}
.location--art-destination:not(.location-hole)::after{position:absolute;z-index:1;inset:48% 0 0;content:"";background:linear-gradient(180deg,transparent 0%,#111612bd 55%,#111612f0 100%);pointer-events:none}
.location--art-destination .location-art--illustration{position:absolute;z-index:0;inset:.08rem .12rem 1.35rem;display:block;width:auto;height:auto;min-width:0;max-width:none;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;overflow:visible;pointer-events:none}
.location--art-destination .location-art--illustration img{display:block;width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 2px 2px #0005)}
.location--art-destination>b{position:absolute;z-index:2;inset:auto .3rem .34rem;display:grid;place-items:center;min-height:44px;align-self:end;min-width:0;text-align:center;font-size:.83rem;line-height:1.1;letter-spacing:.06em;text-shadow:0 1px 4px #000,0 0 8px #111612}
.location--art-destination.location-store{background:radial-gradient(ellipse at 50% 30%,#75602c,#433722 68%,#27251f);border-color:#987b43;box-shadow:inset 0 0 0 3px #d3b25a18,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-inn{background:radial-gradient(ellipse at 50% 28%,#67493d,#402f30 68%,#252421);border-color:#8d6257;box-shadow:inset 0 0 0 3px #c9937130,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-quests{background:radial-gradient(ellipse at 50% 28%,#566044,#343a2d 68%,#222620);border-color:#687552;box-shadow:inset 0 0 0 3px #b3c17b24,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-records{background:radial-gradient(ellipse at 50% 28%,#526454,#303c36 68%,#202522);border-color:#708575;box-shadow:inset 0 0 0 3px #b2c9a224,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-achievements{background:radial-gradient(ellipse at 50% 28%,#665337,#403526 68%,#24231f);border-color:#9b7c4a;box-shadow:inset 0 0 0 3px #e3bd6326,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-settings{background:radial-gradient(ellipse at 50% 28%,#4d5861,#30383e 68%,#212629);border-color:#778a91;box-shadow:inset 0 0 0 3px #b9c7c124,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination.location-character{background:radial-gradient(ellipse at 50% 28%,#50505f,#34343d 68%,#232428);border-color:#777688;box-shadow:inset 0 0 0 3px #b7b2c124,inset 0 1px #ffffff20,0 2px 7px #0004}
.location--art-destination:active{transform:translateY(1px) scale(.985);filter:brightness(1.12);box-shadow:inset 0 2px 8px #0005}
.location--art-destination:focus-visible{outline:3px solid #f1d58f;outline-offset:2px;z-index:1}
.location--art-destination:disabled{cursor:not-allowed;filter:grayscale(.75);opacity:.55}
@media(max-width:360px){.location--art-destination{min-height:112px}.location--art-destination .location-art--illustration{inset:.06rem .08rem 1.25rem}.location--art-destination>b{font-size:.72rem}}
@media(prefers-reduced-motion:reduce){.location--art-destination{transition:none}}

/* Town illustrations are the visible controls; the button box is only a generous hit area. */
.town-hub .hub-grid{align-items:start;grid-auto-rows:auto;gap:.5rem}
.town-hub .location--art-destination{position:relative;isolation:isolate;display:grid;grid-template:1fr/minmax(0,1fr);align-items:stretch;justify-items:stretch;grid-column:auto;min-width:0;min-height:92px;height:clamp(92px,29vw,142px);padding:0;overflow:hidden;border:0;border-radius:0;background:transparent;box-shadow:none;text-align:center;transition:transform .12s ease,filter .12s ease;touch-action:manipulation}
.town-hub .location--art-destination::after{display:none;content:none}
.town-hub .location--art-destination .location-art--illustration{position:absolute;z-index:0;inset:0;display:grid;place-items:center;width:auto;height:auto;min-width:0;max-width:none;padding:0;overflow:hidden;border:0;border-radius:0;background:transparent;box-shadow:none;pointer-events:none}
.town-hub .location--art-destination .location-art--illustration img{display:block;width:100%;height:100%;object-fit:contain;filter:none}
.town-hub .location--art-destination .location-art--illustration img.town-art-image--ink{filter:drop-shadow(0 0 1px #eee3c7) drop-shadow(0 0 2px #eee3c788)}
.town-art-fallback{display:none}.town-hub .location--art-destination .town-art-fallback{display:none;place-items:center;width:100%;height:100%;color:var(--gold);font:900 2rem/1 Georgia,serif}
.town-hub .location--art-destination .location-art--illustration.is-missing-art .town-art-fallback{display:grid}
.town-hub .location--art-destination .location-art--illustration img[hidden]{display:none}
.town-hub .location--art-destination.location-hole{grid-column:1/-1;width:100%;height:clamp(150px,43vw,214px);min-height:150px;padding:0;overflow:visible;border:0;border-radius:0;background:transparent;box-shadow:none}
.town-hub .location--art-destination.location-hole .location-art--illustration{inset:0;overflow:visible}
.town-hub .location--art-destination.location-hole .location-art--illustration img{object-fit:contain;object-position:center;filter:none}
.town-hub .location--art-destination:active{transform:scale(.97);filter:brightness(1.13);border:0;background:transparent;box-shadow:none}
.town-hub .location--art-destination.location-hole:hover{border:0;background:transparent;box-shadow:none}
.town-hub .location--art-destination.location-hole:focus-visible{outline:2px dashed #f1d58f;outline-offset:3px}
.town-hub .location--art-destination:focus-visible{outline:2px dashed #f1d58f;outline-offset:2px;z-index:3}
.town-hub .location--art-destination:disabled{opacity:.45;filter:grayscale(.7)}
@media(max-width:360px){.town-hub .location--art-destination{height:92px;min-height:92px}.town-hub .location--art-destination.location-hole{height:148px;min-height:148px}}
@media(prefers-reduced-motion:reduce){.town-hub .location--art-destination{transition:none}}

/* Cartoon title lettering and bright, unframed light fields make town art read at a glance. */
.shell:has(.town-hub)>.topbar{border:3px solid #482a20;border-radius:12px 8px 15px 7px;background:linear-gradient(175deg,#f5cd69,#e9a548 62%,#d97942);box-shadow:inset 0 2px #fff4c77d,inset 0 -4px #8c4c344d,0 4px #482a20,0 7px 15px #0008}
.shell:has(.town-hub)>.topbar::before{height:7px;background:radial-gradient(circle at 6px 3px,#fff3bc 0 2.5px,transparent 3px),radial-gradient(circle at calc(100% - 6px) 3px,#fff3bc 0 2.5px,transparent 3px);opacity:1}
.shell:has(.town-hub)>.topbar .masthead-main{color:#fff7d9;font-family:"Trebuchet MS","Arial Rounded MT Bold",system-ui,sans-serif;font-weight:1000;letter-spacing:.025em;-webkit-text-stroke:.6px #642f22;paint-order:stroke fill;text-shadow:1px 3px #713522,-1px -1px #713522;transform:rotate(-1deg)}
.shell:has(.town-hub)>.topbar .masthead-ribbon{background:#ef6e4e;color:#fff9db;text-shadow:0 1px #713522;box-shadow:0 2px #713522;transform:rotate(1.1deg)}
.shell:has(.town-hub)>.topbar .masthead-office{display:inline-block;margin:.14rem 0 0 .45rem;padding:.14rem .4rem;border:1px solid #fff0b78c;border-radius:999px;background:#285b59;color:#fff1bf;font-size:.52rem;letter-spacing:.1em;box-shadow:0 1px #38291d}
.shell:has(.town-hub)>.topbar .top-actions button{border:2px solid #6e412d;border-radius:9px;background:#fff0c5;color:#432b21;font-weight:900;box-shadow:0 2px #623a2a}
.shell:has(.town-hub)>.topbar .top-actions button:hover{background:#fff8dc;border-color:#5b3326}
.game-masthead--hero{position:relative;gap:.25rem;margin-bottom:1rem;padding:.9rem .35rem 1rem;border:3px solid #613326;border-radius:19px 12px 22px 13px;background:radial-gradient(ellipse at 50% 25%,#fff4c7 0 38%,#f4cb70 72%,#e69b4d 100%);box-shadow:inset 0 3px #fff7dc,0 4px #5a3225,0 8px 0 #c86844,0 12px 22px #0008;transform:rotate(-.6deg)}
.game-masthead--hero .masthead-main{color:#fff9df;font-family:"Trebuchet MS","Arial Rounded MT Bold",system-ui,sans-serif;font-weight:1000;letter-spacing:.005em;-webkit-text-stroke:1px #6b3127;paint-order:stroke fill;text-shadow:2px 4px #a84436,-2px -1px #6b3127;transform:rotate(-1.2deg)}
.game-masthead--hero .masthead-ribbon{padding:.4rem 1rem .36rem;clip-path:polygon(2% 0,97% 4%,100% 50%,97% 96%,1% 100%,4% 52%);background:#ef7050;color:#fff8d8;font-weight:1000;-webkit-text-stroke:.25px #693326;text-shadow:0 2px #803c2a;box-shadow:0 3px #643326;transform:rotate(1.1deg)}
.game-masthead--hero .masthead-office{margin:.34rem 0 0;padding:.2rem .58rem;border:2px solid #295453;border-radius:999px;background:#34716b;color:#fff5d2;font-size:.68rem;font-weight:1000;letter-spacing:.15em;text-shadow:0 1px #23433c;box-shadow:0 2px #2e453b}
.town-hub-heading .eyebrow{display:inline-block;margin:0 0 .3rem;padding:.18rem .6rem;border:2px solid #6b3b2b;border-radius:7px 12px 6px 10px;background:#efbd57;color:#492d20;font-size:.68rem;font-weight:1000;letter-spacing:.12em;transform:rotate(-1deg);box-shadow:0 2px #593326}
.town-hub-heading .section-title{color:#fff1c6;font-family:"Trebuchet MS","Arial Rounded MT Bold",system-ui,sans-serif;font-weight:1000;letter-spacing:-.025em;text-shadow:2px 3px #613a2b,-1px -1px #613a2b}
.town-hub .location--art-destination::before{display:none;content:none}
.town-hub .location--art-destination:not(.location-hole) .location-art--illustration{inset:0}
.town-hub .location--art-destination.location-hole .location-art--illustration{inset:0}
.town-hub .location--art-destination .location-art--illustration img{filter:drop-shadow(0 1px 1px #fff7df) drop-shadow(0 3px 2px #352016a8)}
.town-hub .location--art-destination.location-hole .location-art--illustration img{filter:drop-shadow(0 1px 1px #fff7df) drop-shadow(0 3px 2px #352016a8)}
.town-hub .location--art-destination .location-art--illustration img.town-art-image--ink{filter:drop-shadow(0 0 1px #fff) drop-shadow(0 0 3px #fff8df) drop-shadow(0 3px 2px #352016a8)}
@media(max-width:360px){.town-hub .location--art-destination:not(.location-hole) .location-art--illustration,.town-hub .location--art-destination.location-hole .location-art--illustration{inset:0}}

/* Shared municipal-dungeon identity: quiet doodles stay behind opaque content. */
body{background-color:#171918;background-image:radial-gradient(ellipse at 50% -8%,#51463466 0,transparent 43%),radial-gradient(ellipse at 4% 58%,#34433933 0,transparent 39%),linear-gradient(165deg,#1d241eaa,#171b18b8 54%,#111512c4),url('../assets/images/ui/municipal-doodles.svg');background-repeat:no-repeat,no-repeat,no-repeat,repeat;background-position:center top,left center,center,0 0;background-size:100% 620px,70% 880px,100% 100%,360px 360px}
.topbar{position:relative;isolation:isolate;align-items:center;gap:.45rem;margin-bottom:.85rem;padding:.58rem .68rem;border:2px solid #9b7545;border-radius:8px 5px 10px 6px;background:linear-gradient(180deg,#765637,#5a3f2c 54%,#473424);box-shadow:inset 0 2px #d6b77b55,inset 0 -3px #2d211766,0 3px #281e15,0 6px 14px #0005}
.topbar::before{position:absolute;z-index:0;inset:3px 4px auto;height:5px;content:"";background:radial-gradient(circle at 5px 2px,#dfc08a 0 2px,transparent 2.5px),radial-gradient(circle at calc(100% - 5px) 2px,#dfc08a 0 2px,transparent 2.5px);opacity:.8;pointer-events:none}
.topbar>.brand,.topbar>.top-actions{position:relative;z-index:1}
.topbar .brand{display:block;flex:1 1 auto;min-width:0;max-width:none;color:#f0d493;font-size:clamp(.72rem,2.5vw,.96rem);line-height:1.14;letter-spacing:.045em;text-shadow:1px 1px #392719,-1px 0 #392719;transform:rotate(-.55deg);overflow-wrap:anywhere}
.topbar .top-actions{flex:0 0 auto;gap:.28rem}
.topbar .top-actions button{min-height:40px;padding:.34rem .58rem;border-color:#c09a615c;border-radius:6px;background:#292821b8;color:#f5ebd0;font-size:.8rem;box-shadow:inset 0 1px #fff2}
.topbar .top-actions button:hover{border-color:#f0d493;background:#332d23}
.shell:has(.town-hub)>.topbar{margin-bottom:.45rem;padding:.5rem .65rem;border:2px solid #9b7545;border-radius:8px 5px 10px 6px;background:linear-gradient(180deg,#765637,#5a3f2c 54%,#473424);box-shadow:inset 0 2px #d6b77b55,inset 0 -3px #2d211766,0 3px #281e15,0 6px 14px #0005}
.title-screen .title-card{position:relative;border-color:#88704c;background:linear-gradient(145deg,#242a24f2,#191e1af7);box-shadow:0 24px 90px #0008,inset 0 1px #d7c69a1c}
.title-screen .continue-diagnostics{text-align:left;margin:1rem auto 0;max-width:100%;overflow-wrap:anywhere}.continue-diagnostics pre{max-height:12rem;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font: .72rem/1.4 ui-monospace,monospace}
.title-screen .title-card::before{display:inline-block;margin:0 auto .35rem;padding:.28rem .55rem;border:1px solid #9b754588;border-radius:5px 3px 6px 4px;background:#4a3929;color:#efd397;content:"MIRPWORKS · DELVERS’ OFFICE";font-size:.66rem;font-weight:900;letter-spacing:.11em;transform:rotate(-1deg)}
@media(max-width:680px){.topbar{align-items:center}.topbar .brand{max-width:none;font-size:clamp(.68rem,3.1vw,.86rem)}.topbar .top-actions{gap:.18rem}.topbar .top-actions button{min-height:40px;padding:.3rem .42rem;font-size:.74rem}}
@media(max-width:360px){.topbar{gap:.28rem;padding:.45rem .48rem}.topbar .brand{font-size:.67rem;letter-spacing:.015em}.topbar .top-actions{gap:.12rem}.topbar .top-actions button{padding:.28rem .32rem;font-size:.68rem}}

/* Shared game identity: an office imprint under a crooked docket strip. */
.topbar{display:flex;align-items:center}
.topbar>.brand{position:relative;z-index:1;display:block;flex:1 1 auto;min-width:0;max-width:none;overflow:visible;color:inherit;transform:none;text-shadow:none}
.game-masthead{display:grid;justify-items:start;align-content:center;gap:.08rem;min-width:0;line-height:1}
.masthead-main{display:block;margin:0;color:#f4e5bd;font-family:Georgia,"Times New Roman",serif;font-size:clamp(.82rem,2vw,1.14rem);font-weight:1000;letter-spacing:.035em;line-height:1.02;text-shadow:1px 2px #2c2118,-1px 0 #2c2118;transform:rotate(-.7deg);overflow-wrap:anywhere}
.masthead-ribbon{position:relative;display:inline-block;max-width:100%;margin-left:.42rem;padding:.23rem .55rem .2rem .62rem;clip-path:polygon(1% 0,99% 3%,96% 50%,100% 97%,2% 100%,4% 52%);background:#d3b77c;color:#34291d;font-size:clamp(.56rem,1.35vw,.72rem);font-weight:950;letter-spacing:.08em;line-height:1.1;text-align:center;box-shadow:0 1px #21190f;transform:rotate(.35deg)}
.masthead-office{display:block;margin:.08rem 0 0 .55rem;color:#e2c992;font-size:.53rem;font-weight:850;letter-spacing:.1em;line-height:1.1}
.title-screen .title-card::before{display:none}
.game-masthead--hero{justify-items:center;gap:.18rem;margin:0 auto .9rem;padding:.7rem .35rem .9rem;max-width:100%;text-align:center}
.game-masthead--hero .masthead-main{font-size:clamp(1.35rem,7.6vw,2.85rem);letter-spacing:.015em;line-height:1.05;text-shadow:2px 3px #302318,-1px -1px #302318;transform:rotate(-1deg)}
.game-masthead--hero .masthead-ribbon{margin:0;padding:.38rem .9rem .34rem;font-size:clamp(.72rem,3vw,1.02rem);letter-spacing:.12em;box-shadow:0 3px #342a1f;transform:rotate(.5deg)}
.game-masthead--hero .masthead-office{margin:.2rem 0 0;color:#d5bd8d;font-size:.64rem;letter-spacing:.16em}
.title-screen .game-masthead--hero+.subtle{margin:.35rem 0 1rem;text-align:center}
@media(max-width:680px){.topbar{display:grid;grid-template-columns:minmax(0,1fr);gap:.35rem;align-items:center}.topbar>.brand{width:100%}.topbar .game-masthead{justify-items:center;text-align:center}.topbar .masthead-main{font-size:clamp(.76rem,4.3vw,1rem)}.topbar .masthead-ribbon{font-size:clamp(.53rem,2.4vw,.66rem)}.topbar .masthead-office{font-size:.48rem}.topbar .top-actions{justify-self:end}.game-masthead--hero .masthead-main{font-size:clamp(1.25rem,7.4vw,2.4rem)}}
@media(max-width:360px){.topbar{gap:.28rem}.topbar .masthead-main{font-size:.77rem}.topbar .masthead-ribbon{font-size:.54rem;padding:.2rem .45rem}.topbar .masthead-office{font-size:.45rem}.game-masthead--hero{padding:.45rem .15rem .7rem}.game-masthead--hero .masthead-main{font-size:clamp(1.18rem,7vw,1.42rem)}.game-masthead--hero .masthead-ribbon{font-size:.7rem;padding:.32rem .65rem}}

/* Compact service navigation and one-screen character registration. */
.town-status{position:sticky;top:env(safe-area-inset-top,0px);z-index:12;min-height:44px;flex-wrap:nowrap;gap:.25rem .7rem;margin:0 0 .5rem;padding:.28rem .45rem;border-radius:0 0 8px 8px;background:#171b19f7;backdrop-filter:blur(9px);font-size:.76rem}
.town-return{min-height:44px;padding:.35rem .65rem;font-weight:800;white-space:nowrap}
.town-status>span{white-space:nowrap;font-variant-numeric:tabular-nums}
.town-service{max-width:760px;margin:0 auto}
.town-service-heading{display:grid;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:.4rem .6rem;margin:.15rem 0 .45rem}
.town-service-heading .service-emblem{grid-row:1/3;display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:#171b19;color:var(--gold);font-size:1.15rem}
.town-service-heading:has(.town-service-art){grid-template-columns:58px minmax(0,1fr)}
.town-service-heading .town-service-art{width:54px;height:38px;background:#e7dfca;overflow:hidden;border-radius:5px}
.town-service-art img{display:block;width:100%;height:100%;object-fit:contain}
.town-service-heading .eyebrow{font-size:.62rem;margin:0}
.town-service-heading .section-title{font-size:clamp(1.1rem,3.8vw,1.45rem);margin:0;line-height:1.15}
.town-service-heading>small{grid-column:2;color:var(--muted);font-size:.72rem;line-height:1.25}
.service-tabs{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:.35rem;margin:.45rem 0;padding:3px;border:1px solid var(--line);border-radius:9px;background:#171b19}
.service-tabs button{min-height:44px;margin:0;padding:.3rem .45rem;border:0;background:transparent;font-size:.78rem;font-weight:800}
.service-tabs button.is-selected{background:#4a4938;color:#f5e4b9;border-radius:6px;box-shadow:inset 0 0 0 1px #a18a5d}
.market-cycle-note{margin:.15rem 0 .3rem;color:var(--muted);font-size:.69rem}
.store-stock h2{margin:.4rem 0 .1rem;padding:.28rem 0;border-bottom:1px solid var(--line);font-size:.82rem;text-transform:uppercase;letter-spacing:.07em;color:var(--gold)}
.shop-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.35rem .5rem;padding:.38rem 0;border-bottom:1px solid var(--line)}
.shop-item-name{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:.2rem .4rem;padding:.15rem .25rem;text-align:left;border:0;background:transparent}
.shop-item-name>b,.shop-item-title{font-size:.84rem;line-height:1.15}
.shop-item-name>small{font-size:.7rem;color:var(--muted)}
.shop-item-name .rarity{padding:.05rem .3rem;font-size:.63rem}
.shop-item-title{min-height:36px;padding:.1rem .15rem;border:0;background:transparent;text-align:left;text-decoration:underline;text-decoration-color:#85744f;text-underline-offset:2px}
.shop-buy,.shop-actions button{min-width:74px;min-height:44px;padding:.35rem .55rem;font-size:.76rem}
.shop-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.25rem}
.market-demand{font-size:.72rem}
.juniper-line{font-weight:600}
.compact-empty{margin:.45rem 0;padding:.45rem .25rem;color:var(--muted);font-size:.82rem}
.inn-service{max-width:560px}
.inn-vitals{display:flex;gap:.35rem;margin:.25rem 0 .5rem}
.inn-vitals span{flex:1 1 0;padding:.42rem .5rem;text-align:center;font-size:.79rem}
.inn-effects{margin:.25rem 0;padding:.35rem .5rem;font-size:.78rem}
.inn-rest-button{min-height:48px;margin:.15rem 0;font-size:.9rem}
.inn-event{margin:.35rem 0;padding:.45rem .55rem;font-size:.78rem}
.quest-tabs{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-flow:row;grid-auto-columns:auto}
.quest-tabs button{font-size:.68rem;padding:.25rem .15rem}
.quest-list .quest{gap:.45rem;padding:.48rem .55rem;margin:.35rem 0;border-radius:8px}
.quest-list .quest h3{margin:0;font-size:.9rem}
.quest-list .quest p{margin:.15rem 0;font-size:.75rem;line-height:1.25}
.quest-list .quest small{font-size:.68rem}
.quest-actions{gap:.3rem}
.quest-actions button{min-height:44px;padding:.3rem .55rem;font-size:.75rem}
.character-service .character-content{padding:.1rem 0}
.character-content h2{margin:.35rem 0;font-size:.92rem}
.character-content .character-summary .stats{gap:.25rem}
.character-content .character-summary .pill{padding:.18rem .38rem;font-size:.7rem}
.character-content .slot-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}
.character-content .slot{padding:.4rem}
.character-content .slot button{min-height:44px;margin-top:.25rem}
.character-content .item-row{padding:.35rem 0;gap:.35rem}
.compact-item p,.compact-item small{font-size:.74rem}
.compact-item .provenance{display:block}
.character-stats .career-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.3rem}
.character-stats .career-grid>div{padding:.38rem}
.character-stats .career-grid span,.character-stats .career-grid b{font-size:.72rem}
.settings-sticky{position:sticky;top:-1rem;z-index:3;display:flex;justify-content:space-between;align-items:center;gap:.4rem;margin:-.2rem 0 .35rem;padding:.3rem 0;background:#202421}
.settings-sticky>small{color:var(--muted);font-size:.68rem}
.settings-group{margin:.25rem 0 .4rem;padding:.2rem .55rem .35rem}
.settings-group legend{font-size:.7rem}
.settings-card .settings-group label{display:flex;justify-content:space-between;align-items:center;gap:.4rem;min-height:44px;margin:.05rem 0;font-size:.8rem}
.settings-group select{min-height:40px;max-width:55%;padding:.35rem;font-size:.75rem}
.settings-volume{display:block!important;padding:.25rem 0}
.settings-volume input{display:block;width:100%;min-height:36px}
.settings-card .subtle{display:none}
.character-create{max-width:470px;margin:0 auto;padding:.35rem .65rem .7rem}
.shell:has(.character-create)>.topbar{margin-bottom:.15rem;padding-bottom:.2rem}
.shell:has(.character-create)>.topbar .top-actions{display:none}
.character-create>.eyebrow{margin:.1rem 0;font-size:.64rem}
.character-create>.section-title{margin:.12rem 0 .35rem;font-size:clamp(1.12rem,4vw,1.55rem);line-height:1.1}
.character-create #create-form{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:end;gap:.32rem .45rem}
.character-create label{min-width:0;margin:0!important;font-size:.74rem}
.character-create input,.character-create select{min-height:44px;margin-top:.1rem;padding:.4rem .55rem;font-size:.88rem}
.creation-name,.creation-class,.class-preview,.randomize-character,.start-adventure{grid-column:1/-1}
.class-preview{margin:.08rem 0;padding:.35rem .45rem}
.class-preview p,.class-preview small{display:none}
.creation-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.24rem}
.creation-stats span{padding:.22rem .3rem;border-radius:5px;background:#232824;font-size:.78rem;font-variant-numeric:tabular-nums}
.creation-stats b{color:var(--gold);font-size:.68rem}
.randomize-character{min-height:48px;margin:.05rem 0 0;background:#494532;border-color:#9d8758;text-transform:uppercase;letter-spacing:.04em;font-weight:900}
.reroll-stats{min-height:44px;margin:0;font-size:.78rem}
.start-adventure{min-height:50px;margin:0;font-size:.9rem;text-transform:uppercase;letter-spacing:.04em}
.item-detail-card{width:min(100%,440px);padding:1rem}
@media(max-width:360px){.town-status{gap:.15rem .38rem;padding:.25rem .3rem;font-size:.68rem}.town-return{padding:.25rem .4rem;font-size:.72rem}.town-service-heading{gap:.3rem}.town-service-heading .section-title{font-size:1.12rem}.town-service-heading>small{font-size:.67rem}.shop-row{gap:.25rem}.shop-buy{min-width:66px;padding:.25rem .35rem}.service-tabs button{font-size:.63rem}.quest-tabs button{font-size:.6rem}.character-content .slot-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.character-create{padding:.25rem .4rem .5rem}.character-create>.section-title{font-size:1.12rem}.creation-stats span{font-size:.73rem}}

/* Keep service outcomes inside the mobile column, including long event copy. */
.town-service,.town-service *{min-width:0}
.transaction-feedback,.service-result,.inn-event,.town-service .notice,.town-service .quest p,.town-service .subtle{max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:normal;line-height:1.45}
.transaction-feedback{position:relative;top:auto;z-index:3;margin:.25rem 0 .45rem;padding:.42rem .55rem;font-size:.83rem}
.service-result{display:grid;gap:.18rem;margin:.4rem 0;padding:.48rem .58rem;border:1px solid #55694d;border-left:3px solid #a5bd83;border-radius:7px;background:#20271fdc;color:#e6eadc;font-size:.82rem}
.service-result>b,.service-result>strong{color:#e8d093;font-size:.72rem;letter-spacing:.07em}
.service-result p{margin:0;overflow-wrap:anywhere;line-height:1.4}
.service-result-event{display:grid;gap:.08rem;margin-top:.08rem;padding-top:.3rem;border-top:1px solid #596047}
.service-result-event>strong{color:#f1d184;font-size:.85rem}
.service-result-event>small{color:#d8e5c7;font-weight:700}
.service-result-event>p{color:#c4c9bb;font-size:.78rem}
.inn-service .town-service-heading>small{grid-column:1/-1;margin-top:.05rem;color:#c2c2b5;font-size:.76rem;line-height:1.35;overflow-wrap:anywhere}
.inn-vitals span{min-width:0;overflow-wrap:anywhere}
.inn-effects{overflow-wrap:anywhere;line-height:1.4}
@media(max-width:360px){.transaction-feedback{font-size:.78rem;padding:.38rem .45rem}.service-result{padding:.42rem .48rem}.service-result-event>p{font-size:.74rem}}

/* Exploration has layered stone, damp air, and room-specific light. */
.dungeon-main .scene{background:radial-gradient(ellipse at 50% 20%,#75634c 0,#3e3a32 29%,#252521 67%,#111513 100%),linear-gradient(#302f2a,#151817)}
.scene-view{background:radial-gradient(ellipse at 50% 25%,#605442 0,#34332e 48%,#191b19 100%)}
.scene-ceiling{background:repeating-linear-gradient(90deg,transparent 0 20%,#17191622 20.3% 20.8%,transparent 21% 39%),linear-gradient(180deg,#292b28,#4b463b 65%,#564b39);box-shadow:inset 0 -10px 16px #0e100e99}
.scene-side{background:repeating-linear-gradient(0deg,transparent 0 27%,#17181555 27.3% 28%,transparent 28.3% 54%),repeating-linear-gradient(90deg,#383833 0 31%,#292b28 31.5% 33%,#494439 33.5% 67%,#2d2e29 67.5% 69%,#3a3932 70%),linear-gradient(90deg,#272925,#655642 55%,#33312b);box-shadow:inset 0 0 22px #080a09a8}
.scene-side--right{background:repeating-linear-gradient(0deg,transparent 0 27%,#17181555 27.3% 28%,transparent 28.3% 54%),repeating-linear-gradient(90deg,#383833 0 31%,#292b28 31.5% 33%,#494439 33.5% 67%,#2d2e29 67.5% 69%,#3a3932 70%),linear-gradient(270deg,#272925,#655642 55%,#33312b)}
.scene-side.is-open{box-shadow:none;filter:brightness(.6)}
.scene-far{background:radial-gradient(ellipse at 50% 38%,#514b3d 0,#39372f 50%,#1a1c1a 100%),repeating-linear-gradient(0deg,transparent 0 24%,#17191644 24.5% 25.5%,transparent 26% 50%);box-shadow:inset 0 0 28px #070908aa}
.scene-far.is-wall{background:repeating-linear-gradient(0deg,transparent 0 25%,#211f1b66 25.5% 27%,transparent 27.5% 50%),linear-gradient(135deg,#5e5343,#35342e 60%,#635640)}
.scene-floor{background:repeating-linear-gradient(166deg,transparent 0 22%,#17191644 22.3% 23%,transparent 23.3% 48%),repeating-linear-gradient(93deg,transparent 0 27%,#0e100e3b 27.4% 28.3%,transparent 28.7% 56%),linear-gradient(180deg,#51483a,#272721 78%,#151816)}
.scene-light{background:#e1b572;filter:blur(22px);opacity:.17}
.scene--mushroom-room .scene-view{background:radial-gradient(ellipse at 48% 42%,#42503e,#29322c 57%,#171a18)}
.scene--mushroom-room .scene-side{background:repeating-linear-gradient(0deg,transparent 0 27%,#11191366 27.5% 28.5%,transparent 29% 55%),linear-gradient(90deg,#25312a,#586348 54%,#2e392f)}
.scene--mushroom-room .scene-floor{background:radial-gradient(ellipse at 45% 14%,#66745599,transparent 50%),repeating-linear-gradient(166deg,transparent 0 22%,#18201955 22.5% 24%,transparent 24.5% 48%),linear-gradient(#384638,#1b231e)}
.scene--mushroom-room .scene-light{background:#b7df9b;opacity:.28}
.scene--flooded-chamber .scene-view{background:radial-gradient(ellipse at 50% 32%,#53666a,#303d3d 58%,#161e20)}
.scene--flooded-chamber .scene-floor{background:repeating-linear-gradient(174deg,#7fa9a64d 0 1px,#4d70715c 2px 7px,#1f3436bb 8px 16px),linear-gradient(180deg,#45676c,#19282a)}
.scene--storage .scene-side,.scene--records .scene-side,.scene--library .scene-side{background:repeating-linear-gradient(0deg,transparent 0 18%,#17130eaa 18.5% 20%,transparent 20.5% 39%),repeating-linear-gradient(90deg,#30291f 0 13%,#71583c 13.5% 15%,#403426 15.5% 31%),linear-gradient(90deg,#2b2924,#70543a 55%,#34312a)}
.scene--camp .scene-view{background:radial-gradient(ellipse at 50% 68%,#72533a 0,#38352d 24%,#262925 63%,#171918 100%)}
.scene--camp .scene-light{background:#ed984b;filter:blur(28px);opacity:.37}
.scene--shrine .scene-view{background:radial-gradient(ellipse at 50% 43%,#594e3c 0,#35332d 43%,#171a18 100%)}
.scene--shrine .scene-light{background:#f4c76c;filter:blur(25px);opacity:.42}
.scene--market .scene-view{background:radial-gradient(ellipse at 50% 40%,#554334,#38312a 50%,#171918 100%)}
.scene--market .scene-light{background:#eca64f;opacity:.34}
.scene--spoons .scene-floor{background:radial-gradient(ellipse at 50% 18%,#a3a39166,transparent 46%),repeating-linear-gradient(166deg,transparent 0 22%,#14161466 22.5% 24%,transparent 24.5% 48%),linear-gradient(#55574f,#222520 80%)}
.scene--spoons .scene-light{background:#d8e4dc;opacity:.24}
.scene-view--image{background:transparent}.scene-view--image>.scene-ceiling,.scene-view--image>.scene-side,.scene-view--image>.scene-far,.scene-view--image>.scene-floor,.scene-view--image>.scene-light{display:none}.scene-view--image .room-props,.scene-view--image .scene-landmark-object,.scene-view--image .scene-event-object,.scene-view--image .scene-npc-object{z-index:3}
.scene-landmark-object,.scene-event-object,.scene-npc-object{filter:drop-shadow(0 6px 8px #0008)}

/* Battle uses a clean stage with only a subtle echo of the room's palette. */
.battle-scene{position:relative;isolation:isolate;display:grid;place-items:center;min-height:clamp(170px,25vw,240px);margin:.5rem 0;overflow:hidden;border:1px solid #5a5948;border-radius:9px;background:radial-gradient(ellipse at 50% 67%,#5b4732 0,#322e27 35%,#171a19 78%),linear-gradient(#282b28,#151817);box-shadow:inset 0 0 42px #050706a8}
.battle-scene:before{position:absolute;content:"";inset:9% 13% 14%;border:1px solid #a3916b55;border-bottom:0;border-radius:48% 48% 0 0;box-shadow:inset 0 0 25px #05070699,0 0 22px #05070644;background:linear-gradient(90deg,#171a18aa,transparent 24% 76%,#171a18aa),repeating-linear-gradient(90deg,transparent 0 18%,#15171455 18.3% 19%,transparent 19.3% 37%),linear-gradient(#34342e,#242520 74%,#171918)}
.battle-scene:after{position:absolute;content:"";z-index:1;left:0;right:0;bottom:0;height:31%;background:repeating-linear-gradient(166deg,transparent 0 22%,#11130f55 22.5% 24%,transparent 24.5% 48%),linear-gradient(180deg,#514333,#201f1b 82%);clip-path:polygon(35% 0,65% 0,100% 100%,0 100%)}
.battle-scene>.scene-image-layer{z-index:0}
.battle-room-label{position:absolute;z-index:4;top:7px;left:50%;max-width:90%;padding:.18rem .5rem;transform:translateX(-50%);border:1px solid #c2aa7a55;border-radius:4px;background:#111c;color:#e9dfc7;font-size:.65rem;font-weight:900;letter-spacing:.09em;text-align:center;white-space:nowrap}
.battle-stage{position:absolute;inset:0;z-index:2;overflow:hidden}
.battle-stage .enemy-sprite{z-index:2;left:50%;bottom:7%;height:84%;max-width:62%;filter:drop-shadow(0 9px 7px #000c)}
.battle-stage .enemy-sprite--ink{filter:drop-shadow(0 0 2px #fff0d4) drop-shadow(0 0 5px #fff0d4) drop-shadow(0 9px 7px #000c)}
.battle-scene--flooded-chamber{background:radial-gradient(ellipse at 50% 72%,#4e696c,#2b383a 42%,#151b1c 84%)}
.battle-scene--mushroom-room{background:radial-gradient(ellipse at 50% 68%,#46573f,#29352b 42%,#151a17 84%)}
.battle-scene--camp{background:radial-gradient(ellipse at 50% 75%,#68452e,#34291f 42%,#171918 84%)}
.battle-scene--shrine{background:radial-gradient(ellipse at 50% 50%,#5a503d,#302c26 43%,#171918 84%)}
.battle-scene--storage,.battle-scene--records,.battle-scene--library{background:radial-gradient(ellipse at 50% 68%,#574632,#30291f 42%,#171918 84%)}
.battle-scene--image:before,.battle-scene--image:after{display:none}
@media(max-width:680px){.battle-scene{min-height:clamp(142px,22svh,178px);margin:.35rem 0}.battle-stage .enemy-sprite{height:84%;max-width:68%}.battle-room-label{top:5px;font-size:.6rem}.inn-service .town-service-heading>small{font-size:.73rem}}
.career-panel{margin:.35rem 0;padding:.5rem}.career-panel>h2{margin:.15rem 0 .3rem;font-size:.82rem}.career-panel .career-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.1rem .25rem}.career-panel .career-grid>div{gap:.2rem;padding:.25rem .3rem;font-size:.72rem}.career-panel .career-grid span{font-size:.68rem}.career-panel .quest{gap:.35rem;padding:.35rem .2rem;margin:.15rem 0;border-bottom:1px solid var(--line)}.career-panel .quest h3{margin:0;font-size:.8rem}.career-panel .quest p{margin:.1rem 0;font-size:.7rem;line-height:1.2}.career-panel .quest .pill{font-size:.62rem;padding:.15rem .25rem}
.slot-picker{display:grid;align-content:start;gap:.25rem;min-width:0;min-height:84px;text-align:left;cursor:pointer}.slot-picker b{overflow-wrap:anywhere;font-size:.78rem}.slot-picker small:last-child{color:var(--muted)}.gear-slot-sticky{position:sticky;top:calc(env(safe-area-inset-top,0px) + 46px);z-index:11;display:flex;align-items:center;gap:.55rem;min-height:48px;margin:.1rem 0 .45rem;padding:.2rem .35rem;background:#171b19f7;border-bottom:1px solid var(--line);backdrop-filter:blur(8px)}.gear-slot-sticky>span{font-size:.78rem;color:var(--muted)}.gear-back{min-height:44px;min-width:72px;padding:.3rem .55rem}.gear-current{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.22rem .5rem;align-items:center;margin:.3rem 0 .65rem;padding:.5rem .6rem;border:1px solid var(--line);border-radius:8px;background:#212621}.gear-current>small{grid-column:1/-1;color:var(--gold);font-size:.68rem;font-weight:800;letter-spacing:.08em}.gear-current>b{min-width:0;overflow-wrap:anywhere;font-size:.88rem}.gear-current>span{grid-column:1/-1;color:var(--muted);font-size:.76rem}.gear-current>button,.gear-equip{min-height:44px;padding:.3rem .65rem}.gear-available-heading{margin:.4rem 0 .2rem;font-size:.82rem;text-transform:uppercase;letter-spacing:.06em}.gear-candidate{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.4rem .55rem;align-items:center;padding:.45rem .1rem;border-bottom:1px solid var(--line)}.gear-candidate>div{min-width:0;display:grid;gap:.2rem}.gear-candidate small{overflow-wrap:anywhere;color:var(--muted);font-size:.73rem}.gear-candidate .shop-item-title{justify-self:start;max-width:100%;overflow-wrap:anywhere;text-align:left;font-weight:800}.gear-comparison{display:flex;flex-wrap:wrap;gap:.25rem .45rem;font-size:.73rem}.gear-comparison .delta{white-space:nowrap}.gear-equip{min-width:76px}
.title-screen{position:relative;isolation:isolate;min-height:100svh;overflow:hidden;padding:clamp(.55rem,3vw,1.5rem)}
.title-screen .title-card{width:min(100%,700px);padding:clamp(.8rem,4vw,2rem);border:0;border-radius:0;background:radial-gradient(ellipse at 50% 42%,#111613e0 0,#111613b8 55%,#11161368 78%,transparent 100%);box-shadow:none}
.title-screen .game-masthead--hero{margin-bottom:.55rem}
.title-screen .game-masthead--hero+.subtle{max-width:34rem;margin:.45rem auto 1rem;color:#f2eee3;text-shadow:0 2px 12px #000,0 1px 3px #000}
.title-screen .button-stack{margin-top:1rem}
.title-screen .button-stack button{box-shadow:0 5px 18px #0008,0 1px 0 #fff2 inset}
.title-screen .footer{margin-top:1rem;color:#ded8c9;text-shadow:0 2px 8px #000}
.title-screen .continue-diagnostics{background:#171b19ed}
body:has(.title-screen),body:has(.town-hub){background-color:#171918;background-image:radial-gradient(ellipse at 50% 14%,#725b3838 0,transparent 54%),linear-gradient(180deg,#11151212 0,#11151224 55%,#11151268 100%),url('../assets/images/ui/municipal-doodles.svg'),url('../assets/images/ui/municipal-doodles.svg');background-repeat:no-repeat,no-repeat,repeat,repeat;background-position:center top,center,0 0,180px 140px;background-size:100% 650px,100% 100%,360px 360px,520px 520px}
.shell:has(.town-hub){position:relative;isolation:isolate;min-height:100svh}
.town-hub .town-status{border:0;border-radius:0;background:linear-gradient(90deg,transparent 0,#111613a8 12% 88%,transparent 100%);box-shadow:none;backdrop-filter:none;text-shadow:0 1px 3px #000}
.town-hub-heading .eyebrow{margin:0 0 .2rem;padding:0;border:0;border-radius:0;background:transparent;color:#f2cf78;letter-spacing:.14em;transform:none;box-shadow:none;text-shadow:0 2px 8px #000}
.town-hub-heading .section-title{color:#fff1c6;text-shadow:0 2px 12px #000,0 1px 3px #000}
.town-hub-flavor{width:fit-content;max-width:100%;justify-self:center;padding:.22rem .65rem;border-radius:4px;background:linear-gradient(90deg,transparent,#111613a8 14% 86%,transparent);color:#f0e9d8;text-shadow:0 1px 4px #000}
.contact-link{display:inline-block;margin:.2rem 0 .8rem;color:#f2cf78;text-underline-offset:.18em}.contact-link:hover{color:#fff1c6}.contact-link:focus-visible{outline:3px solid var(--gold);outline-offset:3px;border-radius:3px}
.town-bowser{display:grid;justify-items:center;gap:.05rem;width:fit-content;margin:.12rem auto -.12rem;text-align:center}
.town-bowser-art{display:block;width:auto;height:clamp(78px,25vw,128px);max-width:min(54vw,160px);object-fit:contain;object-position:center bottom;filter:drop-shadow(0 5px 7px #0007)}
.town-bowser figcaption{font-size:.66rem;letter-spacing:.13em;text-transform:uppercase;color:#e8d5a7;text-shadow:0 1px 5px #000}
@media(max-width:680px){.title-screen{padding:calc(.55rem + env(safe-area-inset-top,0px)) .55rem calc(.65rem + env(safe-area-inset-bottom,0px))}.title-screen .title-card{width:100%;padding:.8rem .35rem;background:radial-gradient(ellipse at 50% 40%,#111613dc 0,#111613a8 60%,#1116134d 84%,transparent 100%)}.title-screen .game-masthead--hero{margin-bottom:.5rem}.title-screen .game-masthead--hero+.subtle{max-width:28rem;margin:.38rem auto .75rem;font-size:.9rem}.title-screen .button-stack{margin-top:.7rem}.title-screen .button-stack button{min-height:50px}.town-hub .town-status{background:linear-gradient(90deg,transparent,#111613b8 9% 91%,transparent)}.town-hub-flavor{padding:.24rem .35rem;font-size:.76rem}}
@media(max-width:360px){.title-screen .game-masthead--hero .masthead-main{font-size:clamp(1.15rem,7vw,1.4rem)}.title-screen .game-masthead--hero .masthead-ribbon{font-size:.68rem;padding:.3rem .55rem}.title-screen .button-stack{width:min(100%,320px)}}
@media(prefers-reduced-transparency:reduce){.title-screen .title-card{background:#111613e8}.town-hub .town-status,.town-hub-flavor{background:#111613e8}}
.launch-splash{position:fixed;z-index:10000;inset:0;display:grid;place-items:center;box-sizing:border-box;padding:max(24px,env(safe-area-inset-top)) max(24px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));overflow:hidden;background:#000;opacity:1;pointer-events:auto}
.launch-splash-logo{display:block;width:min(72vw,410px);max-height:min(58dvh,520px);height:auto;object-fit:contain;opacity:0}
.launch-splash-logo.is-entering{animation:launch-splash-enter 750ms ease-out forwards}
.launch-splash.is-fading-to-black .launch-splash-logo{animation:launch-splash-to-black 850ms ease-in-out forwards}
.launch-splash.is-black{background:#000}
.launch-splash.is-revealing-app{animation:launch-splash-reveal 750ms ease-out forwards;pointer-events:none}
#app[data-launch-pending]{visibility:hidden}
#app[data-launch-revealing]{visibility:visible;opacity:0;animation:launch-app-reveal 600ms ease-out forwards}
@keyframes launch-splash-enter{to{opacity:1}}
@keyframes launch-splash-to-black{from{opacity:1}to{opacity:0}}
@keyframes launch-splash-reveal{from{opacity:1}to{opacity:0;visibility:hidden}}
@keyframes launch-app-reveal{to{opacity:1}}
@media(max-width:360px){.launch-splash-logo{width:min(76vw,360px);max-height:52dvh}}
@media(prefers-reduced-motion:reduce){.launch-splash-logo.is-entering{animation:launch-splash-enter-reduced 100ms linear forwards}.launch-splash.is-fading-to-black .launch-splash-logo{animation:launch-splash-to-black-reduced 120ms linear forwards}.launch-splash.is-revealing-app{animation:launch-splash-reveal-reduced 120ms linear forwards}#app[data-launch-revealing]{animation:launch-app-reveal-reduced 100ms linear forwards}@keyframes launch-splash-enter-reduced{to{opacity:1}}@keyframes launch-splash-to-black-reduced{from{opacity:1}to{opacity:0}}@keyframes launch-splash-reveal-reduced{from{opacity:1}to{opacity:0;visibility:hidden}}@keyframes launch-app-reveal-reduced{to{opacity:1}}}
