/* Neon archive: restrained material and clear reading surfaces. */
.entry-page .mode-grid{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto auto auto;row-gap:0}
.entry-page .mode-card{display:grid;grid-template-rows:auto minmax(244px,1fr) auto}
@supports(grid-template-rows:subgrid){.entry-page .mode-card{grid-row:span 3;grid-template-rows:subgrid;row-gap:0}}
.entry-page .studio-preview{height:auto;min-height:244px}
.entry-page .reading-preview{height:auto;min-height:244px;padding-bottom:26px}
.entry-page .preview-tags{flex-wrap:wrap}
.entry-page .reading-preview strong{overflow-wrap:anywhere}
.entry-page .reading-preview p{flex-wrap:wrap}
.entry-page .preview-path{background:linear-gradient(155deg,#526f82,#345568)}
.entry-page .preview-path canvas{display:block;width:100%;height:100%}
.entry-page .preview-path .paving-tile{display:none}
.entry-page .preview-divider{display:none}
.game-page .viewport{--movement-button-size:48px;--movement-pad-width:152px;--movement-pad-height:100px;--movement-controls-inset:12px;background:#18232e;border-color:#314b60;border-radius:12px}
.game-page[data-scene=journey] .viewport{height:600px}
#render-surface{position:absolute;inset:0;pointer-events:none}
#render-surface canvas{display:block;width:100%;height:100%}
.pixi-ready .scene-backdrop,.pixi-ready .journey-path,.pixi-ready .journey-divider{visibility:hidden}
.game-page .journey-path{background:linear-gradient(125deg,transparent 20%,#c6dce51c 46%,transparent 64%),repeating-linear-gradient(0deg,transparent 0 40px,#233d4e 41px 42px),repeating-linear-gradient(90deg,#405d70 0 82px,#233d4e 83px 84px)}
.game-page .journey-path .paving-tile{display:none}
#perspective-floor-fallback{position:absolute;top:0;pointer-events:none}
.game-page[data-scene=journey] .journey-path{overflow:visible}
.game-page[data-scene=journey] .scene-bay{position:relative}
/* Keep a CSS divider inside its room layer. The foreground visitor can overlap
   the room edge with a hat/head and must never be painted behind that divider. */
.game-page[data-scene=journey] .scene-backdrop{z-index:0}
.game-page[data-scene=journey] .visitor{z-index:2}
/* The art is registered to 1200 x 680, exactly 2x the 600 x 340 world bay.
   CSS and Pixi therefore preserve the same furniture proportions and crop. */
.game-page[data-scene=journey] .scene-bay{background-size:600px 340px;background-position:0 0}
.game-page[data-scene=journey] .scene-school{background-image:url('assets/room-school-v14.webp')}
.game-page[data-scene=journey] .scene-university{background-image:url('assets/room-university-v14.webp')}
.game-page[data-scene=journey] .scene-military{background-image:url('assets/room-military-v14.webp')}
.game-page[data-scene=journey] .scene-office{background-image:url('assets/room-office-v14.webp')}
.game-page[data-scene=journey] .scene-lab{background-image:url('assets/room-lab-v14.webp')}
.game-page[data-scene=journey]:not(.pixi-ready) .scene-bay::before{content:'';position:absolute;inset:0;background:#14263629;pointer-events:none}
/* Approved E, identical to the four Pixi rectangles: 2px + 1px translucent
   joint, then a 6 x 7px floor contact with a 1px highlight. No upright post. */
.game-page[data-scene=journey]:not(.pixi-ready) .scene-bay:not(:last-child)::after{content:'';position:absolute;z-index:1;right:-3px;top:0;width:6px;height:340px;background:linear-gradient(rgb(209 219 214 / .48),rgb(209 219 214 / .48)) 0 333px/6px 1px no-repeat,linear-gradient(rgb(140 165 175 / .55),rgb(140 165 175 / .55)) 0 333px/6px 7px no-repeat,linear-gradient(rgb(177 192 190 / .5),rgb(177 192 190 / .5)) 2px 0/2px 340px no-repeat,linear-gradient(rgb(110 138 148 / .28),rgb(110 138 148 / .28)) 4px 0/1px 340px no-repeat;box-shadow:none}
.game-page .journey-divider{display:none!important}
.game-page .scene-corner{inset:12px 14px auto;pointer-events:none;z-index:3}
.game-page .scene-corner span{color:#d9e8f2;border-color:#8aa7b644;background:#0e1b2ae8;font-size:11px;letter-spacing:.5px}
.game-page[data-scene=journey] .exhibit{top:42px;width:340px}
.game-page[data-scene=journey] .exhibit-info{min-height:158px;max-height:188px;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:16px 20px;background:#fffffff2;border:1px solid #d9e6ed;border-radius:8px;box-shadow:0 10px 24px #08132326}
.game-page[data-scene=journey] .exhibit-info h2{font-size:18px;line-height:1.5}
.game-page[data-scene=journey] .exhibit-info p{font-size:14px;line-height:1.6;margin-bottom:8px}
.game-page[data-scene=journey] .exhibit-info .overline{font-size:12px;letter-spacing:.2px}
/* Feet, not transparent cell bounds, define the shared room-floor contact.
   Exhibit top 42 + height 310 - bottom 42 = world y 310. Stage alpha padding
   is compensated inside the box; the preserved identity atlas stays intact. */
.game-page[data-scene=journey] .npc-display{top:auto;bottom:42px;width:128px;height:128px;isolation:isolate}
.game-page[data-scene=journey] .npc-display::before{content:'';position:absolute;left:50%;bottom:-2px;width:36px;height:6px;transform:translateX(-50%);border-radius:50%;background:#172a3329;z-index:-1}
.game-page[data-scene=journey] .npc-display .pixel-sprite{width:128px;height:128px;transform:translateY(var(--npc-foot-inset,6.25px))}
.game-page[data-scene=journey] .npc-display .schoolboy,.game-page[data-scene=journey] .npc-display .soldier-cook{--npc-foot-inset:3px}
.game-page[data-scene=journey] .npc-display .student{--npc-foot-inset:2.5px}
.visitor-reflection{display:none;pointer-events:none}
.game-page[data-scene=journey]:not(.pixi-ready) .visitor-reflection{display:block;transform:scaleY(-1);opacity:.09;filter:saturate(.45)}
.game-page[data-scene=journey]:not(.pixi-ready) .visitor::before{content:'';position:absolute;left:50%;top:77px;width:42px;height:7px;transform:translateX(-50%);border-radius:50%;background:#1934432e}
.game-page[data-scene=journey] .scenic-exhibit .exhibit-info{min-height:0;padding:12px 20px}
.game-page .visitor.walking{animation:none}
.game-page .actor-name{background:#0c192be8;color:#e2eff7;border:1px solid #7997ac66;font-size:11px;padding:1px 7px}
.game-page .visitor .actor-name{display:none}
/* Real projects use the same terminal system as their supporting exhibits. */
.game-page .gallery-exhibit{width:330px;height:306px}
.game-page .gallery-exhibit .station-info{position:relative;top:0;left:0;transform:none;width:100%;height:286px;padding:22px 24px;text-align:left;color:#dbe8f0;border:1px solid #547481;background:linear-gradient(135deg,#142738,#0e1d2e);border-radius:9px;box-shadow:0 14px 28px #040d1840;display:flex;flex-direction:column;gap:6px}
.game-page .gallery-exhibit.current .station-info{border-color:#89deec;box-shadow:0 0 0 1px #89deec22,0 14px 28px #040d1840}
.game-page .station-info .overline{font-size:11px;letter-spacing:1px;color:#9eb8c9;margin:0;display:flex;justify-content:space-between}
.game-page .station-info h2{font-size:23px;font-weight:700;line-height:1.4;letter-spacing:-.6px;color:#f2f8fc;margin:0}
.game-page .station-result{font-size:14px;font-weight:500;line-height:1.6;color:#b6d0de;margin:0}
.station-summary{color:#a8bcca;font-size:13px;line-height:1.55;margin:0}
.station-visual{display:flex;align-items:center;gap:8px;min-height:32px;color:#a7dce6;font-size:12px}
.station-visual strong{font-size:24px;letter-spacing:-1px;color:#98e2eb;font-weight:600}
.station-visual span{border:1px solid #547c8b6e;border-radius:4px;padding:4px 8px}
.station-visual i{font-style:normal;color:#658695}
.game-page .station-info button{margin-top:auto;align-self:flex-start;min-height:38px;padding:7px 12px;border:1px solid #87b3c455;background:#244559;color:#e0f3f8;border-radius:5px;font-size:13px}
.game-page .gallery-exhibit.current .station-info button{background:#93ddeb;color:#112a37;border-color:#93ddeb}
.station-support .station-info h2{font-size:21px}
/* A compact, native-size T-pad reserves two rows rather than three. Rendering
   and movement read its actual bounds; it is never scaled with the world. */
.game-page .viewport .direction-pad{position:absolute;inset:auto auto var(--movement-controls-inset) var(--movement-controls-inset);z-index:5;display:grid;grid-template-columns:repeat(3,var(--movement-button-size));grid-template-rows:repeat(2,var(--movement-button-size));gap:4px;width:var(--movement-pad-width);height:var(--movement-pad-height);padding:0;background:none;border-radius:0;justify-content:start;pointer-events:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.game-page .viewport .direction-pad button{pointer-events:auto;width:var(--movement-button-size);height:var(--movement-button-size);min-width:44px;min-height:44px;margin:0;padding:0;order:0;border:1px solid #99bfce66;background:#102234ed;color:#d9eef7;border-radius:9px;box-shadow:0 3px 12px #0003;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;display:grid;place-items:center}
.game-page .viewport .direction-pad [data-dir=up]{grid-column:2;grid-row:1}
.game-page .viewport .direction-pad [data-dir=left]{grid-column:1;grid-row:2}
.game-page .viewport .direction-pad [data-dir=down]{grid-column:2;grid-row:2}
.game-page .viewport .direction-pad [data-dir=right]{grid-column:3;grid-row:2}
.direction-pad button::before{content:'';width:10px;height:10px;border-top:2px solid currentColor;border-right:2px solid currentColor;transform:rotate(45deg)}
.direction-pad [data-dir=left]::before{transform:rotate(-135deg)}
.direction-pad [data-dir=up]::before{transform:rotate(-45deg)}
.direction-pad [data-dir=down]::before{transform:rotate(135deg)}
.game-page .direction-pad button:hover,.game-page .direction-pad button:active{background:#244b60;color:#c0f1f5;border-color:#a3e8ee}
.game-page .control-bar{min-height:42px;padding:10px 2px 0}
.game-page .control-bar p{font-size:12px;line-height:1.6}
.game-page .exhibition-guide{border-radius:12px}
.game-page .gallery-map-grid button{min-height:80px;font-size:12px;line-height:1.5}
@media(max-width:800px){.game-page .gallery-map-grid button{min-height:72px;font-size:13px}}
@media(max-width:700px){.entry-page .mode-grid{grid-template-columns:minmax(0,1fr);grid-template-rows:none;row-gap:24px}.entry-page .mode-card{grid-row:auto;grid-template-rows:auto minmax(220px,1fr) auto}}
@media(max-width:600px){
 .entry-page .reading-preview{min-height:220px}
 .entry-page .mode-card{grid-template-rows:auto minmax(220px,1fr) auto}
 .entry-page .studio-preview{min-height:220px}
 .game-page .viewport{--movement-button-size:44px;--movement-pad-width:140px;--movement-pad-height:92px;height:460px;border-radius:10px}
 .game-page[data-scene=journey] .viewport{height:500px}
 .game-page[data-scene=journey] .exhibit{top:42px;width:326px}
 .game-page[data-scene=journey] .exhibit-info{min-height:158px;padding:12px 18px}
 .game-page[data-scene=journey] .exhibit-info h2{font-size:20px}
 .game-page[data-scene=journey] .exhibit-info p{font-size:15px}
 .game-page[data-scene=journey] .exhibit-info .overline{font-size:13px}
 .game-page[data-scene=journey] .npc-display{top:auto}
 .game-page .gallery-exhibit{width:330px}
 .game-page .gallery-exhibit .station-info{padding:20px;height:286px}
 .game-page .station-info h2{font-size:24px}
 .game-page .station-result{font-size:16px}
 .game-page .station-summary{font-size:14px}
 .game-page .station-info button{font-size:15px;min-height:42px}
 .game-page .touch-help{max-width:none;font-size:12px}
}
@media(prefers-reduced-motion:reduce){.game-page .world{will-change:auto}}
@media(max-width:1100px) and (max-height:500px){
 .game-page .viewport{--movement-button-size:44px;--movement-pad-width:140px;--movement-pad-height:92px}
}

/* Match the actual room depth: the exhibit figure is behind the visitor. */
.entry-page .preview-npc{width:58px;height:58px;left:calc(50% - 29px);top:auto;bottom:calc(34% + 12px)}

/* Let navigation reflow with its font size instead of squeezing dates into
   three fixed columns when the user enlarges text. */
.timeline-nav button,.timeline-nav button span{min-width:0;overflow-wrap:anywhere}
@media(max-width:800px){
 .game-page .timeline-nav{grid-template-columns:repeat(auto-fit,minmax(min(100%,max(8.5em,calc((100% - 16px)/3))),1fr))}
}
