/* The original 1893 × 831 artwork sits above a 426 px basement addition (20% taller). */
.room-basement-art { position:absolute; left:0; top:66.1097852029%; width:100%; height:33.8902147971%; pointer-events:none; }
.room-basement-interior { transition:filter .55s ease; }
.room-basement-dream { position:absolute; left:0; top:66.1097852029%; width:100%; height:33.8902147971%; overflow:hidden; opacity:0; pointer-events:none; transition:opacity .65s ease; }
.room-mobile-dream { opacity:0; transition:opacity .65s ease; pointer-events:none; }
.room-navigation.is-piano-playing .room-basement-interior { filter:grayscale(1) brightness(.7) contrast(1.08); }
.room-navigation.is-piano-playing :is(.room-basement-dream,.room-mobile-dream) { opacity:1; }
.room-navigation.is-piano-playing .room-basement-art .room-piano-instrument { filter:brightness(1.5); }
.room-navigation.is-piano-playing :is(.room-entry-about,.room-entry-contact,.room-entry-quiz,.room-entry-links,.room-entry-piano) .room-label { background:#1e2025; color:#f1ede5; border-color:#6b6870; box-shadow:0 3px 9px #08080b55,inset 0 1px #ffffff12; }
.room-dream-motif { transform-box:view-box; animation:room-dream-float 19s ease-in-out var(--dream-delay) infinite paused; }
.room-dream-lantern { opacity:.8; }
.room-dream-prism { opacity:.78; animation-duration:23s; }
.room-dream-beams { opacity:.4; animation-name:room-dream-beams; animation-duration:29s; }
.room-dream-photons { opacity:.7; animation-duration:17s; }
/* Atlas bounds extend beyond the clipped sprite; anchor the prism at its
   visible center rather than the center of the full image. */
.room-prism-body { transform-box:fill-box; transform-origin:300px 60px; animation:room-prism-turn 9s ease-in-out infinite paused; }
.room-prism-input { transform-box:fill-box; transform-origin:100% 100%; animation:room-prism-incident 9s ease-in-out infinite paused; }
.room-prism-ray { transform-box:fill-box; transform-origin:0 0; animation:room-prism-refraction 9s ease-in-out infinite paused; }
.room-prism-ray-red { animation-name:room-prism-red-refraction; }
.room-prism-glint { animation:room-prism-glint 9s ease-in-out infinite paused; }
.room-ray-packet { opacity:.28; animation:room-ray-travel 3.7s linear infinite paused; }
.room-prism-ray-red .room-ray-packet { animation-duration:4.3s; }
.room-lantern-cone { transform-box:fill-box; transform-origin:50% 0; animation:room-lantern-focus 10s ease-in-out infinite paused; }
.room-light-wave { animation:room-light-wave 11s ease-in-out var(--wave-delay) infinite paused; }
.room-photon-orbits { transform-box:fill-box; transform-origin:225px 150px; animation:room-photon-precession 14s ease-in-out infinite paused; }
.room-photon-traveler { offset-path:path('M-50 20C-80-5 25-65 55-20S-25 65-50 20Z'); offset-rotate:0deg; animation:room-photon-orbit 12s linear infinite paused; }
.room-photon-traveler-white { animation-delay:-6s; }
.room-dream-red { opacity:calc(.28 + var(--piano-progress,0) * .65); mix-blend-mode:screen; animation:room-dream-breath 12s ease-in-out infinite paused; }
.room-dream-threads { opacity:.38; animation:room-dream-thread 24s ease-in-out infinite paused; }
.room-dream-spark { opacity:.55; animation:room-dream-ember var(--dream-duration) ease-in-out var(--dream-delay) infinite paused; }
.room-navigation.is-piano-playing.allows-motion:not(.is-motion-paused):not(.is-motion-idle) :is(.room-dream-motif,.room-dream-red,.room-dream-threads,.room-dream-spark,.room-prism-body,.room-prism-input,.room-prism-ray,.room-prism-glint,.room-ray-packet,.room-lantern-cone,.room-light-wave,.room-photon-orbits,.room-photon-traveler) { animation-play-state:running; }
@keyframes room-prism-turn { 0%,100% { transform:rotateY(-28deg) rotate(-5deg) skewY(-3deg); } 50% { transform:rotateY(32deg) rotate(7deg) skewY(3deg); } }
@keyframes room-prism-incident { 0%,100% { transform:rotate(-4deg); opacity:.55; } 50% { transform:rotate(6deg); opacity:.9; } }
@keyframes room-prism-refraction { 0%,100% { transform:rotate(-14deg) scaleX(.85); opacity:.45; } 50% { transform:rotate(13deg) scaleX(1.1); opacity:.9; } }
@keyframes room-prism-red-refraction { 0%,100% { transform:rotate(12deg) scaleX(.8); opacity:.85; } 50% { transform:rotate(-17deg) scaleX(1.05); opacity:.42; } }
@keyframes room-prism-glint { 0%,100% { opacity:.22; } 50% { opacity:.85; } }
@keyframes room-ray-travel { to { stroke-dashoffset:-88; } }
@keyframes room-lantern-focus { 0%,100% { transform:skewX(-7deg) scaleX(.8); opacity:.45; } 50% { transform:skewX(6deg) scaleX(1.16); opacity:.8; } }
@keyframes room-light-wave {
  0%,100% { d:path('M0 0C85 -24 155 24 230 0S375 -24 460 0'); opacity:.35; }
  50% { d:path('M0 0C85 19 155 -19 230 0S375 19 460 0'); opacity:.8; }
}
@keyframes room-photon-precession { 0%,100% { transform:rotate(-9deg) scaleY(.9); } 50% { transform:rotate(11deg) scaleY(1.08); } }
@keyframes room-photon-orbit { to { offset-distance:100%; } }
@keyframes room-dream-float { 0%,100% { transform:translate(0,0); } 40% { transform:translate(12px,-16px); } 70% { transform:translate(-8px,-7px); } }
@keyframes room-dream-beams { 0%,100% { transform:translate(-12px,4px) scale(1); } 50% { transform:translate(18px,-10px) scale(1.025); } }
@keyframes room-dream-breath { 0%,100% { transform:translate(0,0); } 50% { transform:translate(-12px,-6px); } }
@keyframes room-dream-thread { 0%,100% { transform:translate(-8px,0); } 50% { transform:translate(13px,-13px); } }
@keyframes room-dream-ember { 0%,100% { opacity:.05; transform:translate(0,12px); } 30% { opacity:.8; } 70% { opacity:.4; transform:translate(var(--dream-drift),-38px); } 95% { opacity:0; transform:translate(calc(var(--dream-drift) * 1.2),-60px); } }
.room-stair-overlay,.room-relocation-cleanup { position:absolute; left:0; top:0; width:100%; height:66.1097852029%; pointer-events:none; }
.room-navigation.has-object-layers :is(.room-relocation-cleanup,.room-stair-overlay) { display:none; }
.room-entry:is(.room-entry-quiz,.room-entry-piano,.room-entry-about,.room-entry-contact,.room-entry-links) { top:var(--room-y); height:var(--room-h); }
/* The shelf occupies empty wall space inside the piano's generous rectangular
   hit area; its own visible object and caption take priority there. */
.room-entry-links { z-index:1; }
.room-piano-toggle { padding:0; background:transparent; font:inherit; cursor:pointer; text-align:center; appearance:none; }
.room-entry-piano .room-label { display:flex; align-items:center; justify-content:center; gap:7px; overflow:hidden; }
.room-piano-icon { position:relative; flex:none; width:10px; height:10px; }
.room-piano-icon::before { content:""; position:absolute; left:0; top:0; border-top:5px solid transparent; border-bottom:5px solid transparent; border-left:8px solid currentColor; }
.room-navigation:is(.is-piano-playing,.is-piano-loading) .room-piano-icon::before { width:3px; height:10px; border:0; background:currentColor; box-shadow:5px 0 0 currentColor; }
.room-entry-piano .room-label::after { content:""; position:absolute; bottom:0; left:0; width:calc(var(--piano-progress,0) * 100%); height:3px; background:#b8945c; border-radius:3px; }
.room-piano-notes { opacity:0; pointer-events:none; }
.room-piano-note { animation:room-piano-note 4s ease-out var(--note-delay) infinite paused; }
.room-navigation.is-piano-playing.allows-motion:not(.is-motion-paused) .room-piano-notes { opacity:1; }
.room-navigation.is-piano-playing.allows-motion:not(.is-motion-paused):not(.is-motion-idle) .room-piano-note { animation-play-state:running; }
.room-piano-status { position:absolute; width:1px; height:1px; clip-path:inset(50%); overflow:hidden; white-space:nowrap; }
.room-piano-fallback { width:100%; max-width:100%; }
@keyframes room-piano-note { 0%,100% { opacity:0; transform:translate(0,0) rotate(-8deg); } 18% { opacity:.8; } 82% { opacity:.2; transform:translate(14px,-72px) rotate(10deg); } 99% { opacity:0; transform:translate(18px,-88px) rotate(14deg); } }
.room-arcade-cabinet { transform-box:view-box; transform-origin:1012px 1124px; }
.room-arcade-ball { animation:room-arcade-ball 4s linear infinite paused; }
.room-arcade-paddle { animation:room-arcade-paddle 4s ease-in-out infinite paused; }
.room-arcade-joystick { transform-origin:951px 1042px; animation:room-arcade-joystick 6s ease-in-out infinite paused; }
.room-arcade-glow { animation:room-arcade-glow 5s ease-in-out infinite paused; }
.room-arcade-answer,.room-arcade-stars { opacity:0; }
.room-navigation.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) :is(.room-arcade-ball,.room-arcade-paddle,.room-arcade-joystick,.room-arcade-glow) { animation-play-state:running; }
.room-navigation[data-opening="quiz"] .room-arcade-cabinet { animation:room-arcade-boot 2s ease both; }
.room-navigation[data-opening="quiz"] .room-basement-camera { transform-origin:887px 1040px; animation:room-arcade-camera 2s ease both; }
.room-navigation[data-opening="quiz"] .room-arcade-preview { animation:room-arcade-mobile-boot 2s ease both; }
.room-navigation[data-opening="quiz"] :is(.room-arcade-ball,.room-arcade-paddle) { animation:none; opacity:0; }
.room-navigation[data-opening="quiz"] .room-arcade-answer { animation:room-arcade-answer 2s ease both; }
.room-navigation[data-opening="quiz"] .room-arcade-stars { transform-origin:1012px 990px; animation:room-arcade-stars 2s ease both; }
@keyframes room-arcade-ball { 0%,100% { transform:none; } 24% { transform:translate(88px,28px); } 49% { transform:translate(12px,48px); } 74% { transform:translate(88px,-12px); } }
@keyframes room-arcade-paddle { 0%,100% { transform:translateY(-8px); } 25% { transform:translateY(28px); } 50% { transform:translateY(12px); } 75% { transform:translateY(-20px); } }
@keyframes room-arcade-joystick { 0%,68%,100% { transform:none; } 74% { transform:rotate(-16deg); } 81% { transform:rotate(13deg); } 89% { transform:none; } }
@keyframes room-arcade-glow { 0%,100% { opacity:.5; } 50% { opacity:1; } }
@keyframes room-arcade-boot { 0% { transform:none; } 18% { transform:rotate(-4deg) translateY(-8px); } 34% { transform:rotate(4deg) translateY(-14px); } 53% { transform:rotate(-2deg) translateY(-6px); } 72%,100% { transform:none; } }
@keyframes room-arcade-camera { 0%,25% { transform:none; } 85%,100% { transform:scale(1.16); } }
@keyframes room-arcade-mobile-boot { 0%,25% { transform:none; } 85%,100% { transform:scale(1.08); } }
@keyframes room-arcade-answer { 0%,30% { opacity:0; transform:translateY(15px); } 50%,100% { opacity:1; transform:none; } }
@keyframes room-arcade-stars { 0%,20% { opacity:0; transform:scale(.7) rotate(-8deg); } 50% { opacity:1; transform:scale(1.1) rotate(5deg); } 80%,100% { opacity:0; transform:scale(1.6); } }
@media (prefers-reduced-motion:reduce) {
  .room-navigation:not(.allows-motion) :is(.room-arcade-cabinet,.room-basement-camera,.room-arcade-preview,.room-arcade-ball,.room-arcade-paddle,.room-arcade-joystick,.room-arcade-glow,.room-arcade-answer,.room-arcade-stars) { animation:none !important; }
}
.home-page { touch-action:pan-y pinch-zoom; }
.room-navigation { --room-blue:#47362f; --room-coral:#c35a52; --room-teal:#527b6f; --room-paper:#fff8f2; }
/* A click-only easter egg, kept inside the existing house illustration. */
.room-entry.room-entry-plant { left:87.6%; top:41.6%; width:8.5%; height:18.2%; z-index:2; }
.room-entry-plant[hidden] { display:none; }
.room-plant-toggle { display:block; width:100%; height:100%; padding:0; border:0; border-radius:45%; background:transparent; cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent; }
.room-plant-toggle[hidden] { display:none; }
.room-plant-toggle:focus-visible { outline:3px solid #925048; outline-offset:4px; background:#fff6d414; }
.room-plant-preview { display:none; width:100%; height:100%; overflow:visible; }
.room-plant-art { pointer-events:none; }
.room-plant-lab { display:none; }
.is-plant-playing .room-plant-lab { display:block; }
.is-plant-playing .room-plant-static { display:none; }
.room-plant-leds { opacity:.2; }
.room-plant-light,.room-plant-leaf-glow,.room-plant-spark { opacity:0; }
.is-plant-playing .room-plant-leaves-left { animation:plant-lab-left 8.2s ease-in-out both paused; }
.is-plant-playing .room-plant-leaves-right { animation:plant-lab-right 8.2s ease-in-out both paused; }
.is-plant-playing .room-plant-offer { animation:plant-lab-offer 8.2s ease-in-out both paused; }
.is-plant-playing .room-plant-panel { animation:plant-lab-panel 8.2s cubic-bezier(.4,0,.2,1) both paused; }
.is-plant-playing :is(.room-plant-light,.room-plant-leaf-glow,.room-plant-leds) { animation:plant-lab-light 8.2s ease both paused; }
.is-plant-playing .room-plant-status-led { animation:plant-lab-status 8.2s linear both paused; }
.is-plant-playing .room-plant-spark { animation:plant-lab-success 8.2s ease both paused; }
.room-plant-leaves,.room-plant-offer,.room-plant-spark { transform-box:view-box; }
@keyframes plant-lab-left { 0%,8%,100% { transform:rotate(0deg); } 29%,77% { transform:rotate(-32deg); } 96% { transform:rotate(0deg); } }
@keyframes plant-lab-right { 0%,8%,100% { transform:rotate(0deg); } 29%,77% { transform:rotate(28deg); } 96% { transform:rotate(0deg); } }
@keyframes plant-lab-panel { 0%,18%,100% { transform:translateY(95px); opacity:0; } 23% { transform:translateY(82px); opacity:1; } 37%,74% { transform:translateY(0); opacity:1; } 89% { transform:translateY(95px); opacity:0; } }
@keyframes plant-lab-offer { 0%,33%,82%,100% { transform:rotate(0deg); } 49%,66% { transform:rotate(34deg); } 71% { transform:rotate(29deg); } }
@keyframes plant-lab-light { 0%,36%,78%,100% { opacity:0; } 45%,68% { opacity:1; } }
@keyframes plant-lab-status { 0%,66% { fill:#d6a863; } 67%,100% { fill:#a7d59a; } }
@keyframes plant-lab-success { 0%,67%,83%,100% { opacity:0; transform:translateY(6px) scale(.4); } 72% { opacity:1; transform:translateY(-4px) scale(1); } 81% { opacity:0; transform:translateY(-18px) scale(.8); } }
@media(max-width:900px) {
 .room-entry.room-entry-plant { grid-column:1/-1; justify-self:center; width:190px; height:200px; margin:8px 0 0; }
 .room-plant-preview { display:block; }
 .room-plant-toggle { border-radius:24px; }
}
@media print { .room-entry-plant { display:none; } .room-plant-lab { display:none!important; } }
.room-stage { position:relative; isolation:isolate; aspect-ratio:1893 / 1257; border-radius:12px; background:#f4e9df; box-shadow:0 14px 36px rgba(69,64,41,.1); }
.room-backdrop { display:block; width:100%; height:66.1097852029%; border-radius:12px 12px 0 0; }
.room-links { list-style:none; margin:0; padding:0; }
.room-entry { position:absolute; left:var(--room-x); top:calc(var(--room-y) * .661097852029); width:var(--room-w); height:calc(var(--room-h) * .661097852029); }
.room-link { position:relative; display:flex; align-items:flex-end; justify-content:center; width:100%; height:100%; border:2px solid transparent; border-radius:12px; color:var(--room-blue); text-decoration:none; -webkit-tap-highlight-color:transparent; touch-action:manipulation; transition:background .18s,border-color .18s; }
.room-label { position:relative; z-index:1; display:block; max-width:100%; flex-shrink:0; padding:5px 9px; border:1px solid #d9beb0; border-radius:9px; background:var(--room-paper); box-shadow:0 3px 7px rgba(91,59,23,.18),inset 0 1px #fff; color:var(--room-blue); font-size:clamp(.69rem,.98vw,.9rem); font-weight:750; line-height:1.25; letter-spacing:-.025em; text-align:center; transition:transform .18s,background .18s; }
.room-link:hover { border-color:rgba(255,248,228,.68); background:rgba(255,248,228,.12); }
.room-link:hover .room-label { transform:translateY(-3px); background:#fffaf5; }
.room-link:focus-visible { z-index:2; outline:3px solid #925048; outline-offset:3px; background:rgba(255,248,228,.18); }
.room-link:focus-visible .room-label { background:#fffaf5; box-shadow:0 0 0 2px #925048; }
.room-object-preview { display:none; }
.room-effects { position:absolute; inset:0 0 auto; height:66.1097852029%; z-index:0; pointer-events:none; }
.room-globe-position { position:absolute; left:10.1426%; top:62.5752%; width:9.6144%; aspect-ratio:1; filter:drop-shadow(2px 4px 3px rgba(13,67,54,.26)); }
.room-globe { display:block; width:100%; height:100%; overflow:visible; }
.room-globe-land { animation:room-globe-turn 36s linear infinite; animation-play-state:paused; }
.room-sun-position { position:absolute; left:37.1368%; top:61.7329%; width:5.1769%; aspect-ratio:1; }
.room-sun { display:block; width:100%; height:100%; overflow:visible; }
.room-sun-disc { filter:drop-shadow(0 0 8px #f3d598); animation:room-sun-glow 6s ease-in-out infinite; animation-play-state:paused; }
.room-sun-rays { transform-origin:60px 60px; animation:room-sun-rays 18s linear infinite; animation-play-state:paused; }
.room-device-glow { position:absolute; left:48.4945%; top:74.3682%; width:20.6022%; height:12.0337%; border-radius:50%; opacity:.2; background:radial-gradient(ellipse,rgba(255,70,49,.7),rgba(255,70,49,0) 70%); mix-blend-mode:screen; animation:room-device-glow 5.5s ease-in-out infinite; animation-play-state:paused; }
.room-mobile-device-glow { animation:room-device-glow 5.5s ease-in-out infinite; animation-play-state:paused; }
.room-navigation.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) :is(.room-globe-land,.room-sun-disc,.room-sun-rays,.room-device-glow,.room-mobile-device-glow) { animation-play-state:running; }
.room-ambient-art { position:absolute; inset:0; width:100%; height:100%; }
.room-globe-orbit { transform-origin:100px 100px; animation:room-orbit 28s linear infinite; animation-play-state:paused; }
.room-sun-halo { transform-origin:60px 60px; animation:room-sun-halo 7s ease-out infinite; animation-play-state:paused; }
.room-sun-halo-second { animation-delay:-3.5s; }
.room-screen-scan { opacity:0; animation:room-screen-scan 10s ease-in-out infinite; animation-play-state:paused; }
.room-chart-glint { opacity:0; animation:room-chart-glint 12s ease-in-out infinite; animation-delay:var(--glint-delay); animation-play-state:paused; }
.room-study-treatment { opacity:.65; animation:room-study-treatment 6s ease-in-out infinite; animation-play-state:paused; }
.room-ambient-led { opacity:.2; animation:room-ambient-led 6s ease-in-out infinite; animation-delay:var(--ambient-delay); animation-play-state:paused; }
.room-navigation.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) :is(.room-globe-orbit,.room-sun-halo,.room-screen-scan,.room-chart-glint,.room-study-treatment,.room-ambient-led) { animation-play-state:running; }
.room-sun-disc { transform-origin:60px 60px; }
.room-opening-status { flex:1; min-width:0; color:#80665a; font-size:.8rem; text-align:center; line-height:1.4; }
/* The object pixels are masked out of the original illustration; the empty
   room stays fixed behind them. The same SVG layers are used in mobile cards. */
.room-layered-scene { position:absolute; inset:0 0 auto; z-index:0; width:100%; height:66.1097852029%; overflow:visible; opacity:0; pointer-events:none; }
.room-preview-layered { opacity:0; }
.room-navigation.has-object-layers :is(.room-layered-scene,.room-preview-layered) { opacity:1; }
.room-navigation.has-object-layers :is(.room-backdrop,.room-effects,.room-preview-original) { visibility:hidden; }
.room-navigation.has-object-layers :is(.room-effects,.room-preview-original) * { animation-play-state:paused !important; }
.room-moving-object { --room-intensity:1; transform-box:view-box; animation:var(--room-idle-animation,room-idle-rock) var(--room-idle-duration,14s) ease-in-out infinite; animation-delay:var(--room-idle-delay,0s); animation-play-state:paused; }
/* Short, staggered idle gestures make the real artwork feel alive. Pause and
   viewport visibility control these gestures along with the ambient lighting. */
.room-object-home { --room-idle-animation:room-idle-door; --room-idle-duration:18s; --room-idle-delay:-2s; }
.room-object-database { --room-idle-animation:none; }
.room-object-database-info { --room-idle-animation:room-idle-book; --room-idle-delay:-8s; }
.room-object-indications { --room-idle-animation:none; }
.room-object-guidelines { --room-idle-animation:room-idle-book; --room-idle-delay:-6s; }
.room-object-statistics { --room-idle-delay:-11s; }
.room-object-articles { --room-idle-duration:16s; --room-idle-delay:-7s; }
.room-object-links { --room-idle-animation:room-idle-chain; --room-idle-duration:10s; --room-idle-delay:-1s; }
.room-object-world-map { --room-idle-animation:room-idle-globe; --room-idle-duration:10s; }
.room-object-studies { --room-idle-animation:none; }
.room-object-sunlight { --room-idle-animation:room-idle-sunlight; --room-idle-duration:12s; --room-idle-delay:-4s; }
.room-object-devices { --room-idle-animation:room-idle-treatment; --room-idle-duration:15s; --room-idle-delay:-10s; }
.room-object-about { --room-idle-animation:room-idle-book; --room-idle-delay:-12s; }
.room-object-contact { --room-idle-animation:room-idle-letter; --room-idle-duration:12s; --room-idle-delay:-9s; }
.room-navigation.has-object-layers.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) .room-moving-object { animation-play-state:running; }
.room-link.is-activating { z-index:3; border-color:#d59779; background:rgba(255,242,219,.12); box-shadow:0 0 18px rgba(204,134,99,.18); }
.room-link.is-activating .room-label { color:#704638; background:#fff4e5; transform:none; box-shadow:0 3px 10px rgba(163,85,62,.2); }
.room-link.is-activating .room-label::after { content:""; position:absolute; left:8px; right:8px; bottom:2px; height:3px; border-radius:3px; background:var(--room-coral); transform-origin:left; animation:room-opening-progress 2s linear both; }
.room-navigation[data-opening="home"] .room-object-home .room-moving-object { animation:room-object-door 2s ease both; }
.room-navigation[data-opening="database"] .room-object-database .room-moving-object { animation:none; transform:none; }
.room-navigation[data-opening="database-info"] .room-object-database-info .room-moving-object { animation:room-object-book 2s ease both; }
.room-navigation[data-opening="indications"] .room-object-indications .room-moving-object { animation:room-object-open-book 2s ease both; }
.room-navigation[data-opening="guidelines"] .room-object-guidelines .room-moving-object { animation:room-object-book 2s ease both; }
.room-navigation[data-opening="guidelines"] .room-guidelines-check { stroke-dasharray:1; animation:room-guidelines-check .45s ease both; animation-delay:var(--check-delay); }
@keyframes room-guidelines-check { from { stroke-dashoffset:1; } to { stroke-dashoffset:0; } }
.room-navigation[data-opening="statistics"] .room-object-statistics .room-moving-object { animation:room-object-chart 2s ease both; }
.room-navigation[data-opening="articles"] .room-object-articles .room-moving-object { animation:none; transform:none; }
.room-navigation[data-opening="links"] .room-object-links .room-moving-object { animation:room-object-chain 2s ease both; }
.room-navigation[data-opening="world-map"] .room-object-world-map .room-moving-object { animation:room-object-globe 2s ease both; }
.room-navigation[data-opening="studies"] .room-object-studies .room-moving-object { animation:room-object-treatment 2s ease both; }
.room-navigation[data-opening="sunlight"] .room-object-sunlight .room-moving-object { animation:room-object-sunlight 2s ease both; }
.room-navigation[data-opening="devices"] .room-object-devices .room-moving-object { animation:room-object-devices 2s ease both; }
.room-navigation[data-opening="about"] .room-object-about .room-moving-object { animation:room-object-about 2s ease both; }
.room-navigation[data-opening="contact"] .room-object-contact .room-moving-object { animation:room-object-letter 2s ease both; }
.room-navigation[data-opening="world-map"] :is(.room-layered-scene,.room-preview-layered) .room-globe-land { animation-duration:1s; animation-play-state:running; }
.room-navigation[data-opening="sunlight"] :is(.room-layered-scene,.room-preview-layered) :is(.room-sun-disc,.room-sun-rays,.room-sun-halo) { animation-play-state:running; }
.room-navigation[data-opening="sunlight"] :is(.room-layered-scene,.room-preview-layered) .room-sun-rays { animation-duration:2s; }
.room-navigation[data-opening="sunlight"] :is(.room-layered-scene,.room-preview-layered) .room-sun-disc { animation-duration:2s; }
.room-navigation[data-opening="studies"] :is(.room-layered-scene,.room-preview-layered) .room-study-treatment { animation-duration:2s; animation-play-state:running; }
/* Illustrated charts burst from Statistics and cover the full stage, including
   the full mobile grid. Their caption remains above the decorative panels. */
.room-statistics-scene { position:absolute; inset:0; z-index:2; overflow:hidden; border-radius:inherit; pointer-events:none; visibility:hidden; }
.room-statistics-card { position:absolute; left:var(--statistics-origin-x,65%); top:var(--statistics-origin-y,33%); width:var(--statistics-width); opacity:0; transform:translate(-50%,-50%) scale(.04); filter:drop-shadow(0 10px 9px rgba(65,41,27,.24)); }
.room-statistics-art { display:block; width:100%; height:auto; overflow:hidden; }
.room-navigation.has-object-layers.has-statistics-art[data-opening="statistics"] .room-statistics-scene { visibility:visible; }
.room-navigation.has-object-layers.has-statistics-art[data-opening="statistics"] .room-statistics-card { animation:room-statistics-flight 1.65s cubic-bezier(.2,.65,.24,1) both; animation-delay:var(--statistics-delay); }
.room-navigation.has-statistics-art[data-opening="statistics"] .room-object-statistics .room-moving-object { animation:room-statistics-recoil 2s ease both; }
@keyframes room-statistics-flight {
  0% { opacity:0; transform:translate(-50%,-50%) scale(.04) rotate(calc(var(--statistics-turn) * -2)); }
  10% { opacity:1; transform:translate(-50%,-50%) translate(calc(var(--statistics-travel-x) * .12),calc(var(--statistics-travel-y) * .12)) scale(.2) rotate(calc(var(--statistics-turn) * -1)); }
  38% { opacity:1; transform:translate(-50%,-50%) translate(calc(var(--statistics-travel-x) * .6),calc(var(--statistics-travel-y) * .6)) scale(.76) rotate(calc(var(--statistics-turn) * .5)); }
  68% { opacity:1; transform:translate(-50%,-50%) translate(calc(var(--statistics-travel-x) * 1.04),calc(var(--statistics-travel-y) * 1.04)) scale(1.06) rotate(calc(var(--statistics-turn) * 1.12)); }
  88%,100% { opacity:1; transform:translate(-50%,-50%) translate(var(--statistics-travel-x),var(--statistics-travel-y)) scale(1) rotate(var(--statistics-turn)); }
}
@keyframes room-statistics-recoil { 0% { transform:none; } 10% { transform:translateY(6px) scale(.94); } 23% { transform:scale(1.03); } 38%,100% { transform:none; } }
/* The framed bulb becomes the room's red light source. A radial darkness mask
   leaves nearby illustration visible; distant objects fall into deep shadow. */
.room-bulb-lighting { opacity:0; pointer-events:none; }
.room-bulb-night,.room-bulb-spill,.room-bulb-aura,.room-bulb-lit { opacity:0; }
.room-bulb-spill { mix-blend-mode:color; }
.room-bulb-lit { transform-box:view-box; transform-origin:1394px 237px; }
.room-navigation.has-object-layers[data-opening="articles"] .room-bulb-lighting { opacity:1; }
.room-navigation[data-opening="articles"] .room-bulb-night { animation:room-bulb-night 2s ease both; }
.room-navigation[data-opening="articles"] .room-bulb-spill { animation:room-bulb-spill 2s ease both; }
.room-navigation[data-opening="articles"] .room-bulb-aura { animation:room-bulb-aura 2s ease both; }
.room-navigation[data-opening="articles"] .room-bulb-lit { animation:room-bulb-ignite 2s ease both; }
@keyframes room-bulb-night { 0%,7% { opacity:0; } 25% { opacity:.35; } 60% { opacity:.9; } 85%,100% { opacity:.98; } }
@keyframes room-bulb-spill { 0% { opacity:0; } 15% { opacity:.15; } 55% { opacity:.8; } 85%,100% { opacity:1; } }
@keyframes room-bulb-aura { 0%,7% { opacity:0; } 30% { opacity:.2; } 65% { opacity:.7; } 90%,100% { opacity:1; } }
@keyframes room-bulb-ignite {
  0% { opacity:0; transform:none; filter:none; }
  15% { opacity:.7; transform:none; filter:drop-shadow(0 0 4px #ff3641); }
  40% { opacity:1; transform:scale(1.025); filter:drop-shadow(0 0 9px #ff1a35) drop-shadow(0 0 18px #ff2042); }
  75%,100% { opacity:1; transform:scale(1.05); filter:drop-shadow(0 0 5px #ffbbb1) drop-shadow(0 0 15px #ff1239) drop-shadow(0 0 30px #f01434); }
}
/* A full-sized bed falls onto the actual small devices; their original pixels
   scatter at impact. The scene joins only after its transparent art is decoded. */
.room-bed-scene,.room-device-fragment,.room-crash-dust { opacity:0; }
.room-falling-bed,.room-device-fragment,.room-crash-dust { transform-box:view-box; }
.room-falling-bed { transform-origin:1126px 770px; }
.room-navigation.has-bed[data-opening="devices"] .room-object-devices .room-moving-object { animation:none; transform:none; }
.room-navigation.has-bed[data-opening="devices"] .room-bed-scene { opacity:1; }
.room-navigation.has-bed[data-opening="devices"] .room-device-intact { animation:room-crash-intact 2s linear both; }
.room-navigation.has-bed[data-opening="devices"] .room-falling-bed { animation:room-crash-bed 2s linear both; }
.room-navigation.has-bed[data-opening="devices"] .room-device-fragment { animation:room-crash-fragment 2s linear both; }
.room-navigation.has-bed[data-opening="devices"] .room-crash-dust { animation:room-crash-dust 2s ease-out both; }
.room-navigation.has-bed[data-opening="devices"] .room-bed-trails { animation:room-crash-trails 2s linear both; }
@keyframes room-crash-bed {
  0% { transform:translateY(-850px) rotate(-12deg); }
  16% { transform:translateY(-650px) rotate(-9deg); }
  30% { transform:translateY(-380px) rotate(-5deg); }
  43% { transform:translateY(-58px); }
  47% { transform:translateY(-52px) scaleY(.91) rotate(3deg); }
  54% { transform:translateY(-76px) rotate(-3deg); }
  66% { transform:translateY(0) rotate(2deg); }
  73% { transform:translateY(-8px) rotate(-1deg); }
  82%,100% { transform:none; }
}
@keyframes room-crash-intact { 0%,42% { opacity:1; } 43%,100% { opacity:0; } }
@keyframes room-crash-fragment {
  0%,42% { opacity:0; transform:none; }
  43% { opacity:1; transform:none; }
  67% { opacity:1; transform:translate(calc(var(--crash-x) * .72),var(--crash-y)) rotate(calc(var(--crash-turn) * .6)) scale(.75); }
  88% { opacity:.6; transform:translate(var(--crash-x),65px) rotate(var(--crash-turn)) scale(.45); }
  100% { opacity:0; transform:translate(var(--crash-x),135px) rotate(var(--crash-turn)) scale(.2); }
}
@keyframes room-crash-dust {
  0%,42% { opacity:0; transform:scale(.15); }
  49% { opacity:.9; transform:scale(.65); }
  70% { opacity:.68; transform:translate(var(--dust-x),var(--dust-y)) scale(1.35); }
  95%,100% { opacity:0; transform:translate(var(--dust-x),calc(var(--dust-y) - 35px)) scale(1.6); }
}
@keyframes room-crash-trails { 0%,10% { opacity:0; } 17%,30% { opacity:.8; } 43%,100% { opacity:0; } }
/* The sun reaches behind its body, brings out amber sunglasses and puts them
   over its new eyes. The picture frame and plant stay in place. */
.room-object-sunlight svg { overflow:visible; }
.room-sun-character { transform-origin:60px 60px; }
.room-sun-face,.room-sun-pocket-arm,.room-sun-glasses-hand { opacity:0; }
.room-sun-pocket-arm { transform-origin:85px 73px; }
.room-sun-glasses-hand { transform-origin:60px 53px; }
.room-sun-eyes { transform-origin:60px 52px; }
.room-navigation[data-opening="sunlight"] .room-object-sunlight .room-moving-object { animation:none; transform:none; }
.room-navigation[data-opening="sunlight"] .room-sun-character { animation:room-sun-character 2s ease both; }
.room-navigation[data-opening="sunlight"] .room-sun-disc { animation:none; opacity:1; }
.room-navigation[data-opening="sunlight"] .room-sun-face { animation:room-sun-face 2s linear both; }
.room-navigation[data-opening="sunlight"] .room-sun-eyes { animation:room-sun-blink 2s linear both; }
.room-navigation[data-opening="sunlight"] .room-sun-pocket-arm { animation:room-sun-pocket 2s ease both; }
.room-navigation[data-opening="sunlight"] .room-sun-glasses-hand { animation:room-sun-glasses 2s ease both; }
.room-navigation[data-opening="sunlight"] .room-sun-glasses-grip { animation:room-sun-grip 2s linear both; }
@keyframes room-sun-character {
  0% { transform:none; }
  20% { transform:translate(-6px,-7px) scale(1.25); }
  45% { transform:translate(-9px,-12px) rotate(-8deg) scale(1.5); }
  75% { transform:translate(-9px,-12px) rotate(5deg) scale(1.5); }
  90%,100% { transform:translate(-9px,-12px) rotate(-4deg) scale(1.5); }
}
@keyframes room-sun-face { 0%,7% { opacity:0; } 16%,100% { opacity:1; } }
@keyframes room-sun-blink { 0%,24%,33%,100% { transform:none; } 28% { transform:scaleY(.12); } }
@keyframes room-sun-pocket {
  0%,18% { opacity:0; transform:rotate(-30deg); }
  25% { opacity:1; transform:rotate(-30deg); }
  36% { opacity:1; transform:rotate(18deg); }
  49% { opacity:1; transform:rotate(-25deg); }
  60%,100% { opacity:0; transform:rotate(-25deg); }
}
@keyframes room-sun-glasses {
  0%,32% { opacity:0; transform:translate(34px,45px) rotate(70deg) scale(.65); }
  39% { opacity:1; transform:translate(37px,32px) rotate(40deg) scale(.8); }
  56% { opacity:1; transform:translate(18px,-16px) rotate(-17deg); }
  73% { opacity:1; transform:translate(-2px,2px) rotate(3deg); }
  82%,100% { opacity:1; transform:none; }
}
@keyframes room-sun-grip { 0%,72% { opacity:1; } 82%,100% { opacity:0; } }
/* Three short scenes: a family arrives, a camera dives into the computer,
   and the globe accelerates into a red science-fiction light source. */
.room-family { opacity:0; transform-box:view-box; transform-origin:292px 398px; }
.room-navigation.has-family[data-opening="home"] .room-family-behind { animation:room-home-arrival 2s linear both; }
.room-navigation.has-family[data-opening="home"] .room-family-front { animation:room-home-enter 2s linear both; }
.room-navigation.has-family[data-opening="home"] .room-door-window { animation:room-home-window 2s linear both; }
.room-navigation.has-family[data-opening="home"] .room-object-home .room-moving-object { animation:room-home-door 2s ease both; }
.room-camera { --room-camera-pan-x:454px; --room-camera-pan-y:161.5px; --room-camera-zoom:7.8; transform-box:view-box; transform-origin:492.5px 254px; }
.room-navigation.has-object-layers[data-opening="database"] :is(.room-layered-scene,.room-entry-database .room-preview-layered) .room-camera { animation:room-database-camera 2s cubic-bezier(.3,.05,.2,1) both; }
.room-navigation.has-object-layers[data-opening="database"] .room-layered-scene { overflow:hidden; border-radius:12px; }
.room-spreadsheet { opacity:1; }
.room-sheet-stream { animation:room-sheet-scroll 9s steps(18,end) infinite; animation-play-state:paused; }
.room-sheet-highlight { opacity:0; animation:room-sheet-update .8s ease-in-out infinite; animation-delay:var(--room-cell-delay); animation-play-state:paused; }
.room-navigation.has-object-layers.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) :is(.room-sheet-stream,.room-book-spread,.room-book-turn,.room-book-leaf-back,.room-book-eye,.room-study-person) { animation-play-state:running; }
.room-navigation[data-opening="database"] .room-spreadsheet { animation:room-screen-boot 2s linear both; }
.room-navigation[data-opening="database"] :is(.room-sheet-stream,.room-sheet-highlight) { animation-play-state:running; }
.room-navigation[data-opening="database"] .room-sheet-stream { animation-duration:.42s; animation-timing-function:linear; }
.room-navigation[data-opening="database"] .room-sheet-highlight { animation-duration:.8s; }
/* The real spine anchors a short page turn every five seconds. Content changes
   at the end; pause/offscreen freezes all clocks at the same spread. */
.room-book-spread { opacity:0; animation:room-book-spread 15s step-end infinite; animation-delay:var(--room-spread-delay); animation-play-state:paused; }
.room-book-turn { opacity:0; transform-box:view-box; animation:room-page-turn 5s linear infinite; animation-play-state:paused; }
.room-book-leaf-back { opacity:0; animation:room-page-back 5s linear infinite; animation-play-state:paused; }
.room-book-eye { transform-box:fill-box; transform-origin:center; animation:room-book-blink 15s ease-in-out infinite paused; }
.room-navigation[data-opening="indications"] :is(.room-book-spread,.room-book-turn,.room-book-leaf-back,.room-book-eye) { animation-play-state:paused !important; }
.room-navigation[data-opening="indications"] .room-book-turn { visibility:hidden; }
.room-study-person { transform-box:view-box; animation:room-doctor-breathe 4.8s ease-in-out infinite; animation-play-state:paused; }
.room-study-patient { animation-name:room-patient-breathe; animation-duration:6s; animation-delay:-2.3s; }
.room-study-arm { transform-box:view-box; animation:room-doctor-arm-scan 10s ease-in-out infinite; animation-play-state:paused; }
.room-navigation.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) .room-study-arm { animation-play-state:running; }
.room-navigation[data-opening="studies"] .room-study-arm { animation-play-state:paused !important; }
@keyframes room-doctor-arm-scan { 0%,20%,100% { transform:rotate(0deg); } 45%,65% { transform:rotate(35deg); } 90% { transform:rotate(0deg); } }
.room-navigation[data-opening="studies"] .room-study-person { animation-play-state:paused !important; }
@keyframes room-book-spread { 0% { opacity:1; } 33.333333%,100% { opacity:0; } }
/* Eye spread is visible at 5–10 s; one blink precedes the turn at 9.5 s. */
@keyframes room-book-blink { 0%,57.333333%,60.666667%,100% { transform:scaleY(1); } 59% { transform:scaleY(.045); } }
@keyframes room-page-turn {
  0%,90% { opacity:0; transform:scaleX(1) skewY(0); }
  91% { opacity:1; transform:scaleX(1) skewY(0); }
  94% { opacity:1; transform:scaleX(.62) skewY(-7deg); }
  96% { opacity:1; transform:scaleX(.04) skewY(-12deg); }
  98.5%,99.999% { opacity:1; transform:scaleX(-1) skewY(0); }
  100% { opacity:0; transform:scaleX(-1) skewY(0); }
}
@keyframes room-page-back { 0%,95.5% { opacity:0; } 97%,100% { opacity:1; } }
@keyframes room-doctor-breathe { 0%,100% { transform:rotate(-.35deg); } 42% { transform:rotate(1.4deg) scaleY(1.008); } 66% { transform:rotate(.4deg) scaleY(1.003); } }
@keyframes room-patient-breathe { 0%,100% { transform:rotate(.45deg); } 48% { transform:rotate(-1deg) scaleY(1.01); } 72% { transform:rotate(.25deg) scaleY(1.003); } }
.room-reactor-core,.room-reactor-spill,.room-reactor-flare { opacity:0; }
.room-navigation[data-opening="world-map"] :is(.room-layered-scene,.room-preview-layered) .room-globe { transform-origin:100px 100px; animation:room-reactor-energy 2s ease-in both; }
.room-navigation[data-opening="world-map"] .room-reactor-core { animation:room-reactor-core 2s ease-in both; }
.room-navigation[data-opening="world-map"] .room-reactor-spill { animation:room-reactor-light 2s ease-in both; }
.room-reactor-flare { transform-box:view-box; transform-origin:276px 618px; }
.room-navigation[data-opening="world-map"] .room-reactor-flare { animation:room-reactor-flare 2s ease-in both; }
@keyframes room-home-arrival {
  0%,5% { opacity:0; transform:translateY(-8px) scale(.9); }
  18% { opacity:1; transform:translateY(-2px) scale(.98); }
  28%,63% { opacity:1; transform:none; } 64%,100% { opacity:0; transform:none; }
}
@keyframes room-home-window { 0%,5% { opacity:1; } 18%,100% { opacity:0; } }
@keyframes room-home-door {
  0%,32% { transform:none; } 48% { transform:scaleX(.65) skewY(-5deg); }
  65% { transform:scaleX(.08) skewY(-13deg); } 78%,100% { transform:scaleX(.12) skewY(-11deg); }
}
@keyframes room-home-enter {
  0%,63% { opacity:0; transform:none; }
  64% { opacity:1; transform:none; }
  73% { opacity:1; transform:translate(3px,1px) rotate(-1deg) scale(1.025); }
  83% { opacity:1; transform:translate(6px,5px) rotate(1deg) scale(1.08); }
  92% { opacity:1; transform:translate(8px,7px) rotate(-.7deg) scale(1.12); }
  100% { opacity:1; transform:translate(10px,10px) scale(1.16); }
}
@keyframes room-database-camera {
  0% { transform:none; } 12% { transform:scale(.98); }
  38% { transform:translate(calc(var(--room-camera-pan-x) * .3),calc(var(--room-camera-pan-y) * .3)) scale(calc(1 + (var(--room-camera-zoom) - 1) * .22)); }
  72% { transform:translate(calc(var(--room-camera-pan-x) * .88),calc(var(--room-camera-pan-y) * .88)) scale(calc(1 + (var(--room-camera-zoom) - 1) * .82)); }
  92%,100% { transform:translate(var(--room-camera-pan-x),var(--room-camera-pan-y)) scale(var(--room-camera-zoom)); }
}
@keyframes room-screen-boot { 0% { opacity:0; } 12%,100% { opacity:1; } }
@keyframes room-sheet-scroll { to { transform:translateY(-108px); } }
@keyframes room-sheet-update { 0%,100% { opacity:0; } 35% { opacity:.72; } 70% { opacity:.08; } }
@keyframes room-reactor-energy {
  0% { transform:none; filter:none; }
  28% { transform:scale(1.03); filter:drop-shadow(0 0 4px #f53d43); }
  62% { transform:scale(1.12); filter:drop-shadow(0 0 16px #ff173d) drop-shadow(0 0 35px #ff3150); }
  100% { transform:scale(1.18); filter:drop-shadow(0 0 22px #fff0ce) drop-shadow(0 0 48px #ff073a) drop-shadow(0 0 88px #ff2450); }
}
@keyframes room-reactor-core { 0% { opacity:0; } 30% { opacity:.1; } 65% { opacity:.65; } 100% { opacity:1; } }
@keyframes room-reactor-light { 0%,10% { opacity:0; } 45% { opacity:.18; } 70% { opacity:.55; } 100% { opacity:1; } }
@keyframes room-reactor-flare { 0%,35% { opacity:0; transform:scale(.1); } 65% { opacity:.35; transform:scale(.65); } 100% { opacity:1; transform:scale(1.25); } }
@media (min-width:901px) {
  /* Follow the piano's silhouette: leave the upper-left wall shelf clear while
     retaining the keyboard and bench in the lower part of its hit area. */
  .room-entry-piano .room-link { clip-path:polygon(22% 0,100% 0,100% 100%,0 100%,0 48%,22% 48%); }
  /* Static artwork keeps its original targets until the shifted layers load. */
  .room-navigation:not(.has-object-layers) :is(.room-entry-database,.room-entry-database-info,.room-entry-indications,.room-entry-statistics,.room-entry-world-map,.room-entry-studies,.room-entry-sunlight,.room-entry-devices) { left:var(--room-fallback-x); }
  /* Keep the caption/progress outside the camera and prevent invisible targets
     from being activated underneath the enlarged screen. Escape cancels. */
  .room-navigation.allows-motion.has-object-layers[data-opening="database"] .room-entry:not(.room-entry-database) { visibility:hidden; }
  .room-navigation.allows-motion.has-object-layers[data-opening="database"] .room-entry-database { left:0; top:0; width:100%; height:100%; }
  .room-navigation.allows-motion.has-object-layers[data-opening="database"] .room-entry-database .room-link { padding-bottom:12px; border-color:transparent; background:transparent; box-shadow:none; }
}
/* Each two-second reaction has anticipation, a large gesture and a landing.
   Distances are in artwork coordinates, with a smaller travel on mobile. */
@keyframes room-object-door {
  0% { transform:none; } 12% { transform:scaleX(1.04) skewY(2deg); }
  48% { transform:scaleX(.18) skewY(-17deg); } 66% { transform:scaleX(.36) skewY(-12deg); }
  84%,100% { transform:scaleX(.23) skewY(-15deg); }
}
@keyframes room-object-bounce {
  0%,100% { transform:none; } 12% { transform:translateY(8px) scaleY(.94); }
  35% { transform:translateY(calc(-64px * var(--room-intensity))) rotate(calc(-10deg * var(--room-intensity))) scale(calc(1 + 0.08 * var(--room-intensity))); }
  55% { transform:translateY(calc(-38px * var(--room-intensity))) rotate(calc(8deg * var(--room-intensity))); }
  74% { transform:translateY(5px) scaleY(.94); } 87% { transform:translateY(-12px) rotate(calc(-2deg * var(--room-intensity))); }
}
@keyframes room-object-book {
  0%,100% { transform:none; } 12% { transform:rotate(calc(6deg * var(--room-intensity))) scale(.96); }
  35% { transform:translateY(calc(-65px * var(--room-intensity))) rotate(calc(-22deg * var(--room-intensity))) scale(calc(1 + 0.12 * var(--room-intensity))); }
  56% { transform:translateY(calc(-42px * var(--room-intensity))) rotate(calc(16deg * var(--room-intensity))) scaleX(.32); }
  76% { transform:translateY(calc(-22px * var(--room-intensity))) rotate(calc(-8deg * var(--room-intensity))) scaleX(1.08); }
  91% { transform:rotate(calc(3deg * var(--room-intensity))); }
}
@keyframes room-object-open-book {
  0%,100% { transform:none; } 12% { transform:scaleX(.94) scaleY(.97); }
  34% { transform:translateY(calc(-52px * var(--room-intensity))) rotate(calc(-12deg * var(--room-intensity))) scale(calc(1 + 0.12 * var(--room-intensity))); }
  55% { transform:translateY(calc(-35px * var(--room-intensity))) rotate(calc(10deg * var(--room-intensity))) scaleX(.56); }
  73% { transform:translateY(calc(-18px * var(--room-intensity))) rotate(calc(-5deg * var(--room-intensity))) scaleX(1.12); }
  91% { transform:rotate(calc(2deg * var(--room-intensity))); }
}
@keyframes room-object-chart {
  0%,100% { transform:none; } 12% { transform:translateY(4px) rotate(calc(4deg * var(--room-intensity))); }
  35% { transform:translateY(calc(-62px * var(--room-intensity))) rotate(calc(-18deg * var(--room-intensity))) scale(calc(1 + 0.14 * var(--room-intensity))); }
  55% { transform:translateY(calc(-34px * var(--room-intensity))) rotate(calc(14deg * var(--room-intensity))); }
  75% { transform:rotate(calc(-8deg * var(--room-intensity))); } 90% { transform:rotate(calc(3deg * var(--room-intensity))); }
}
@keyframes room-object-poster {
  0%,100% { transform:none; filter:brightness(1); } 12% { transform:rotate(calc(4deg * var(--room-intensity))) scale(.95); }
  35% { transform:translateY(calc(-42px * var(--room-intensity))) rotate(calc(-20deg * var(--room-intensity))) scale(calc(1 + 0.20 * var(--room-intensity))); filter:brightness(1.16); }
  57% { transform:translateY(calc(-22px * var(--room-intensity))) rotate(calc(15deg * var(--room-intensity))) scale(calc(1 + 0.10 * var(--room-intensity))); }
  77% { transform:rotate(calc(-7deg * var(--room-intensity))); } 91% { transform:rotate(calc(2deg * var(--room-intensity))); }
}
@keyframes room-object-chain {
  0%,100% { transform:none; } 12% { transform:translateY(5px) rotate(calc(7deg * var(--room-intensity))); }
  34% { transform:translateY(calc(-62px * var(--room-intensity))) rotate(calc(-32deg * var(--room-intensity))) scale(calc(1 + 0.10 * var(--room-intensity))); }
  56% { transform:translateY(calc(-44px * var(--room-intensity))) rotate(calc(29deg * var(--room-intensity))); }
  75% { transform:translateY(calc(-20px * var(--room-intensity))) rotate(calc(-16deg * var(--room-intensity))); }
  90% { transform:rotate(calc(7deg * var(--room-intensity))); }
}
@keyframes room-object-globe {
  0%,100% { transform:none; } 12% { transform:rotate(calc(7deg * var(--room-intensity))) scale(.95); }
  36% { transform:translateY(calc(-44px * var(--room-intensity))) rotate(calc(-18deg * var(--room-intensity))) scale(calc(1 + 0.17 * var(--room-intensity))); }
  58% { transform:translateY(calc(-28px * var(--room-intensity))) rotate(calc(14deg * var(--room-intensity))) scale(calc(1 + 0.08 * var(--room-intensity))); }
  78% { transform:rotate(calc(-7deg * var(--room-intensity))); } 92% { transform:rotate(calc(3deg * var(--room-intensity))); }
}
@keyframes room-object-treatment {
  0%,100% { transform:none; filter:brightness(1); } 12% { transform:scale(.97); }
  38% { transform:translateY(calc(-26px * var(--room-intensity))) rotate(calc(-5deg * var(--room-intensity))) scale(calc(1 + 0.10 * var(--room-intensity))); filter:brightness(1.15); }
  60% { transform:translateY(calc(-16px * var(--room-intensity))) rotate(calc(4deg * var(--room-intensity))) scale(calc(1 + 0.05 * var(--room-intensity))); filter:brightness(1.12); }
  80% { transform:rotate(calc(-2deg * var(--room-intensity))); }
}
@keyframes room-object-sunlight {
  0%,100% { transform:none; } 12% { transform:scale(.96) rotate(calc(4deg * var(--room-intensity))); }
  36% { transform:translateY(calc(-50px * var(--room-intensity))) rotate(calc(-12deg * var(--room-intensity))) scale(calc(1 + 0.16 * var(--room-intensity))); }
  59% { transform:translateY(calc(-24px * var(--room-intensity))) rotate(calc(10deg * var(--room-intensity))) scale(calc(1 + 0.08 * var(--room-intensity))); }
  79% { transform:rotate(calc(-5deg * var(--room-intensity))); } 93% { transform:rotate(calc(2deg * var(--room-intensity))); }
}
@keyframes room-object-devices {
  0%,100% { transform:none; filter:brightness(1); } 12% { transform:translateY(5px) scaleY(.96); }
  35% { transform:translateY(calc(-45px * var(--room-intensity))) rotate(calc(-8deg * var(--room-intensity))) scale(calc(1 + 0.10 * var(--room-intensity))); filter:brightness(1.24); }
  59% { transform:translateY(calc(-26px * var(--room-intensity))) rotate(calc(7deg * var(--room-intensity))) scale(calc(1 + 0.05 * var(--room-intensity))); filter:brightness(1.18); }
  78% { transform:rotate(calc(-3deg * var(--room-intensity))); } 92% { transform:rotate(calc(1deg * var(--room-intensity))); }
}
@keyframes room-object-about {
  0%,100% { transform:none; } 12% { transform:rotate(calc(-5deg * var(--room-intensity))) scale(.96); }
  35% { transform:translateY(calc(-56px * var(--room-intensity))) rotate(calc(24deg * var(--room-intensity))) scale(calc(1 + 0.15 * var(--room-intensity))); }
  56% { transform:translateY(calc(-34px * var(--room-intensity))) rotate(calc(-17deg * var(--room-intensity))) scaleX(.3); }
  77% { transform:translateY(calc(-18px * var(--room-intensity))) rotate(calc(8deg * var(--room-intensity))) scaleX(1.08); }
  92% { transform:rotate(calc(-3deg * var(--room-intensity))); }
}
@keyframes room-object-letter {
  0% { transform:none; opacity:1; } 12% { transform:translateY(8px) rotate(calc(7deg * var(--room-intensity))) scale(.96); }
  36% { transform:translate(calc(-20px * var(--room-intensity)),calc(-65px * var(--room-intensity))) rotate(calc(-26deg * var(--room-intensity))) scale(calc(1 + 0.16 * var(--room-intensity))); }
  57% { transform:translate(calc(18px * var(--room-intensity)),calc(-45px * var(--room-intensity))) rotate(calc(18deg * var(--room-intensity))) scale(calc(1 + 0.08 * var(--room-intensity))); }
  76% { transform:translate(calc(-8px * var(--room-intensity)),calc(-58px * var(--room-intensity))) rotate(calc(-14deg * var(--room-intensity))); opacity:1; }
  100% { transform:translate(calc(62px * var(--room-intensity)),calc(-145px * var(--room-intensity))) rotate(calc(24deg * var(--room-intensity))) scale(.72); opacity:0; }
}
@keyframes room-idle-rock { 0%,42%,78%,100% { transform:none; } 52% { transform:rotate(-3deg); } 64% { transform:rotate(2deg); } }
@keyframes room-idle-hop { 0%,48%,82%,100% { transform:none; } 59% { transform:translateY(-7px) rotate(-1deg); } 70% { transform:translateY(-3px) rotate(1deg); } }
@keyframes room-idle-door { 0%,48%,85%,100% { transform:none; } 62% { transform:scaleX(.88) skewY(-3deg); } 73% { transform:scaleX(.94) skewY(-1deg); } }
@keyframes room-idle-book { 0%,42%,85%,100% { transform:none; } 55% { transform:translateY(-8px) rotate(-4deg) scaleX(.94); } 69% { transform:rotate(2deg); } }
/* Slow twists accelerate briefly, then settle; the pedestal stays fixed. */
@keyframes room-idle-chain {
  0%,100% { transform:translateY(-2px) rotate(-10deg) scaleX(.9); animation-timing-function:linear; }
  38% { transform:translateY(-5px) rotate(3deg) scaleX(1); animation-timing-function:ease-in; }
  52% { transform:translateY(-9px) rotate(18deg) scaleX(.78); animation-timing-function:ease-out; }
  64% { transform:translateY(-7px) rotate(5deg) scaleX(.94); animation-timing-function:linear; }
  84% { transform:translateY(-3px) rotate(-4deg) scaleX(1); animation-timing-function:ease-out; }
}
@keyframes room-idle-globe { 0%,100% { transform:rotate(-2deg); } 50% { transform:rotate(2deg); } }
@keyframes room-idle-treatment { 0%,42%,86%,100% { transform:none; filter:brightness(1); } 62% { transform:rotate(-1deg) scale(1.015); filter:brightness(1.06); } }
@keyframes room-idle-sunlight { 0%,100% { transform:none; } 50% { transform:translateY(-4px) rotate(-1deg); } }
@keyframes room-idle-letter { 0%,43%,90%,100% { transform:none; } 58% { transform:translateY(-13px) rotate(-5deg); } 74% { transform:translateY(-6px) rotate(3deg); } }
@keyframes room-orbit { to { transform:rotate(360deg); } }
@keyframes room-sun-halo { 0% { opacity:0; transform:scale(.85); } 20% { opacity:.65; } 100% { opacity:0; transform:scale(1.48); } }
@keyframes room-screen-scan { 0%,60% { opacity:0; transform:translateY(0); } 68% { opacity:.42; } 88% { opacity:.3; transform:translateY(78px); } 94%,100% { opacity:0; transform:translateY(78px); } }
@keyframes room-chart-glint { 0%,65%,100% { opacity:0; } 76% { opacity:.5; } 87% { opacity:0; } }
@keyframes room-study-treatment { 0%,100% { opacity:.5; } 50% { opacity:1; } }
@keyframes room-ambient-led { 0%,100% { opacity:.1; } 48% { opacity:.75; } }
@keyframes room-opening-progress { from { transform:scaleX(0); } to { transform:scaleX(1); } }
.room-toolbar { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:12px; margin-top:12px; }
.room-motion-toggle { display:inline-flex; align-items:center; justify-content:center; min-height:44px; padding:8px 12px; border:1px solid #e4d3c7; border-radius:10px; color:#6d5145; background:#fcf8f4; font:inherit; font-size:.8rem; font-weight:650; line-height:1.4; text-decoration:none; }
.room-motion-toggle { cursor:pointer; }
.room-motion-toggle[hidden] { display:none; }
.room-motion-toggle:hover { background:#f6eae3; }
.room-motion-toggle:focus-visible { outline:3px solid #925048; outline-offset:3px; }
.room-motion-toggle:disabled { cursor:default; color:#756b67; }
@keyframes room-globe-turn { from { transform:translateX(0); } to { transform:translateX(-400px); } }
@keyframes room-sun-glow { 0%,100% { opacity:.8; transform:scale(.97); } 50% { opacity:1; transform:scale(1.08); } }
@keyframes room-sun-rays { to { transform:rotate(360deg); } }
@keyframes room-device-glow { 0%,100% { opacity:.08; } 50% { opacity:.24; } }
@media (max-width:900px) {
  .room-entry:is(.room-entry-quiz,.room-entry-piano,.room-entry-about,.room-entry-contact,.room-entry-links) { height:auto; }
  .room-arcade-preview,.room-piano-preview { background:radial-gradient(ellipse at center,#f4d9b9,#f5ecdf 75%); }
  .room-statistics-card { width:calc(var(--statistics-width) * 1.6); }
  .room-stage { aspect-ratio:auto; padding:18px; border:1px solid #dfc7ba; border-top:8px solid #c35a52; border-bottom:8px solid #c35a52; background:#f6eee7; box-shadow:0 10px 28px rgba(69,64,41,.08); }
  .room-backdrop,.room-effects,.room-layered-scene,.room-basement-art,.room-basement-dream,.room-stair-overlay,.room-relocation-cleanup { display:none; }
  .room-links { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; }
  .room-entry { position:static; width:auto; height:auto; min-width:0; }
  .room-link { display:flex; flex-direction:column; align-items:stretch; gap:0; overflow:hidden; border:1px solid #e2cdbf; border-radius:12px; background:#fcf7f1; box-shadow:0 3px 8px rgba(93,61,31,.05); }
  .room-object-preview { display:block; width:100%; height:154px; }
  .room-object-preview .room-moving-object { --room-intensity:.6; }
  .room-label { display:flex; align-items:center; justify-content:center; flex:1; max-width:none; min-height:48px; padding:9px 6px; border:0; border-top:1px solid #ecdcd1; border-radius:0; box-shadow:none; font-size:.85rem; line-height:1.3; }
  .room-link:hover { border-color:#bb8c78; background:#fcf7f1; }
  .room-link:hover .room-label { transform:none; }
  .room-link:focus-visible { outline-offset:3px; }
  .room-link:focus-visible .room-label { box-shadow:none; }
}
@media (max-width:600px) {
  .room-entry-piano { grid-column:1/-1; }
  .room-entry-piano .room-object-preview { height:190px; }
  .room-statistics-card { width:calc(var(--statistics-width) * 2.65); }
  .room-stage { padding:12px; }
  .room-links { grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; }
  .room-object-preview { height:142px; }
  .room-label { font-size:.82rem; }
  .room-opening-status { order:3; flex-basis:100%; }
}
@media (max-width:360px) {
  .room-stage { padding:9px; }
  .room-links { gap:9px; }
  .room-object-preview { height:120px; }
  .room-label { font-size:.76rem; }
}
@media (prefers-reduced-motion:reduce) {
  .room-navigation:not(.allows-motion) :is(.room-book-spread,.room-book-turn,.room-book-leaf-back,.room-book-eye,.room-study-person,.room-study-arm) { animation:none !important; }
  .room-navigation:not(.allows-motion) .room-book-pages { visibility:hidden; }
  .room-navigation:not(.allows-motion) .room-moving-object,.room-navigation:not(.allows-motion) .room-link.is-activating .room-label::after { animation:none !important; }
  .room-navigation:not(.allows-motion) .room-guidelines-check { animation:none !important; }
  .room-navigation:not(.allows-motion) :is(.room-globe-land,.room-sun-disc,.room-sun-rays,.room-device-glow,.room-mobile-device-glow) { animation:none; }
  .room-navigation:not(.allows-motion) :is(.room-link,.room-label) { transition:none; }
  .room-navigation:not(.allows-motion) .room-link:hover .room-label { transform:none; }
  .room-navigation:not(.allows-motion) :is(.room-globe-orbit,.room-sun-halo,.room-screen-scan,.room-chart-glint,.room-study-treatment,.room-ambient-led) { animation:none; }
  .room-navigation:not(.allows-motion) :is(.room-camera,.room-family,.room-door-window,.room-spreadsheet,.room-sheet-stream,.room-sheet-highlight,.room-reactor-core,.room-reactor-spill,.room-reactor-flare,.room-globe) { animation:none !important; }
  .room-navigation:not(.allows-motion) :is(.room-family,.room-reactor-core,.room-reactor-spill,.room-reactor-flare) { opacity:0 !important; }
  .room-navigation:not(.allows-motion) .room-door-window { opacity:1; }
  .room-navigation:not(.allows-motion)[data-opening="database"] .room-spreadsheet { opacity:1; }
  .room-navigation:not(.allows-motion)[data-opening="database"] .room-label { opacity:1 !important; }
  .room-navigation:not(.allows-motion) :is(.room-device-intact,.room-falling-bed,.room-device-fragment,.room-crash-dust,.room-bed-trails,.room-sun-character,.room-sun-face,.room-sun-eyes,.room-sun-pocket-arm,.room-sun-glasses-hand,.room-sun-glasses-grip) { animation:none !important; }
  .room-navigation:not(.allows-motion) .room-device-intact { opacity:1; }
  .room-navigation:not(.allows-motion) :is(.room-bed-scene,.room-device-fragment,.room-crash-dust,.room-sun-face,.room-sun-pocket-arm,.room-sun-glasses-hand) { opacity:0 !important; }
  .room-navigation:not(.allows-motion) :is(.room-bulb-night,.room-bulb-spill,.room-bulb-aura,.room-bulb-lit) { animation:none !important; }
  .room-navigation:not(.allows-motion) .room-bulb-lighting { opacity:0 !important; }
  .room-navigation:not(.allows-motion) .room-statistics-scene { visibility:hidden !important; }
  .room-navigation:not(.allows-motion) .room-statistics-card { animation:none !important; }
}

@media (max-width:900px) {
  .room-entry:is(.room-entry-about,.room-entry-contact,.room-entry-quiz,.room-entry-links,.room-entry-piano) .room-link { transition:background .55s ease; }
  .room-navigation.is-piano-playing :is(.room-entry-about,.room-entry-contact,.room-entry-quiz,.room-entry-links,.room-entry-piano) .room-link { background:#232329; }
  .room-navigation.is-piano-playing :is(.room-entry-about,.room-entry-contact,.room-entry-quiz,.room-entry-links) .room-object-preview { filter:grayscale(1) brightness(.75); }
  .room-navigation.is-piano-playing .room-piano-preview .room-piano-instrument { filter:grayscale(1) brightness(.75); }
}

/* Calm eight-second changes inside the original Statistics picture frame. */
.room-chart-type { opacity:0; animation:room-chart-cycle 32s linear infinite; animation-delay:var(--chart-delay); animation-play-state:paused; }
.room-navigation.has-object-layers.is-motion-ready:not(.is-motion-paused):not(.is-motion-idle) .room-chart-type { animation-play-state:running; }
@keyframes room-chart-cycle { 0%,23.4375% { opacity:1; } 25%,98.4375% { opacity:0; } 100% { opacity:1; } }
@media (prefers-reduced-motion:reduce) {
  .room-navigation:not(.allows-motion) .room-chart-type { animation:none; opacity:0; }
  .room-navigation:not(.allows-motion) .room-chart-type:first-of-type { opacity:1; }
}
