/* Shared soft light, fixed selection scale, and gentle camera depth. */
:root{--mx:0px;--my:0px;--specimen-size:clamp(98px,10.3vw,154px);--selection-size:clamp(166px,17vw,250px)}
#chamber>.environment{filter:saturate(.87) contrast(.96) brightness(1.035);transform:translate(calc(var(--mx) * -.4),calc(var(--my) * -.4)) scale(1.025);will-change:transform}
#chamber>.objects{transform:translate(var(--mx),var(--my));will-change:transform}
#garden{transform:translate(calc(var(--mx) * .55),calc(var(--my) * .55)) scale(1.015);will-change:transform}
#chamber::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 50% 37%,#dbd9ca0a,transparent 70%)}
#objects{z-index:1}
#objects .specimen{width:var(--specimen-size)!important;height:var(--specimen-size)!important;aspect-ratio:1!important}
#objects .specimen .art{width:100%;height:100%}
#objects .specimen .caption{bottom:-24px;max-width:var(--selection-size);text-wrap:balance}
#objects .specimen.selected{--scale:1!important}
#objects .specimen:hover{--scale:1.025}
#objects .specimen::after{width:var(--selection-size);height:var(--selection-size);aspect-ratio:1;top:calc(50% + 7px)}
#objects #selection-ring{width:var(--selection-size);height:var(--selection-size);margin-top:7px;border-color:#f7e8d9a8}
#objects .specimen[data-material=temperature]{top:min(70%,calc(94.2% - 115px - var(--specimen-size) / 2))!important}
/* A glass-like but softly painted thermometer, with slight faceted depth. */
#temperature-view .thermometer{width:42px;border:1px solid #f7eee3b0;background:linear-gradient(90deg,#b5aba17d 0%,#eee8dd96 18%,#fff5e957 35%,#c3b8ad57 68%,#80776c76 100%);box-shadow:inset 3px 0 3px #fff9ef55,inset -5px 0 8px #3b29272b,7px 8px 14px #34252226;transform:translateX(-50%)}
#temperature-view .thermometer::before{content:'';position:absolute;inset:12px 7px 7px;border-radius:25px;border-left:2px solid #fff7e766;border-right:1px solid #5e4b3e44;pointer-events:none}
#temperature-view .thermometer::after{width:72px;height:72px;border:8px solid #e6dfd3b5;background:radial-gradient(circle at 32% 25%,#fffcf273,transparent 48%),var(--mercury-color);box-shadow:inset -5px -6px 11px #38282d26,inset 2px 3px 6px #fff5dd55,6px 8px 15px #35232b24}
#temperature-view .mercury{left:14px;width:13px;background:linear-gradient(90deg,#fff6e530,transparent 60%,#342a3725),var(--mercury-color);box-shadow:inset 2px 0 2px #fff8e830}
#temperature-view .temp-key{margin-left:38px}
/* Texture remains sharp, in a quiet central image with the room behind it. */
#texture-view{background:#51362ee6;backdrop-filter:blur(9px)}
#texture-view::before{content:'';position:absolute;inset:-18px;background:url('assets/tactile/background-original-v49.png') center/cover;filter:blur(9px) saturate(.8) brightness(.83);pointer-events:none}
#texture-view .texture-canvas{inset:auto;left:50%;top:53%;transform:translate(-50%,-50%);width:min(48vw,720px);height:min(46vh,450px);z-index:1;cursor:url('assets/tactile/touch-cursor.svg') 20 20,crosshair}
#texture-view .texture-shade{z-index:0;background:linear-gradient(#30232c24,transparent 45%,#30232c26)}
#texture-view .topbar,#texture-view .texture-copy{z-index:3}
#texture-view .lens{z-index:4}
#texture-view .texture-loading{z-index:2}
/* Door controls use exactly the interior palette and pill silhouette. */
.room-gallery{color:#eee8d9;background:radial-gradient(ellipse at 50% 42%,#b5aa9322,transparent 64%),linear-gradient(145deg,#484c43,var(--wall) 55%,#393b35)}
.room-gallery::before{opacity:.15}
.room-heading p,.entry-controls p{color:#d4cbbb}
.room-gallery .entry-button,.room-gallery .arrow{background:var(--ui-fill);color:var(--ui-ink);border:0;border-radius:30px;font:13px 'Kaisei Opti',Georgia,serif;box-shadow:none;backdrop-filter:blur(10px)}
.room-gallery .entry-button{min-height:0;padding:9px 18px;min-width:0}
.room-gallery .entry-button:hover,.room-gallery .arrow:hover{background:#eee}
.room-gallery .door-frame{border-color:var(--stone,#aaa28d);box-shadow:inset 0 0 0 2px #e4e3d54d,0 0 0 2px #4a493b55,0 0 0 8px #b2ac9859}
.room-gallery .door-reveal{border-color:#777568 #9b9681 #b6ad95 #92907b}
.room-gallery .lintel{background:#aaa58e}.room-gallery .threshold{background:#8a8875}
.room-gallery #portal-stage{transform:translate(var(--px,0px),var(--py,0px));transition:transform .14s ease-out}
#door-hit{position:absolute;inset:0;background:transparent;border:0;cursor:pointer;width:100%;height:100%;z-index:2}
#door-hit:focus-visible{outline:2px solid #fff5df;outline-offset:-5px}
#room-view{position:fixed;inset:0;z-index:20;overflow:hidden;background:transparent}
#room-view[hidden]{display:none}
#room-view iframe{position:absolute;inset:0;width:100%;height:100%;border:0;transform-origin:center;pointer-events:auto}
.room-gallery.inside{overflow:hidden}
.room-gallery.inside .room-heading,.room-gallery.inside .entry-controls,.room-gallery.inside .arrow{opacity:0;pointer-events:none}
.room-gallery .portal{filter:drop-shadow(0 16px 20px #171c1924)}
.camera-out #chamber,.camera-out #room{transform:scale(.42);opacity:.6;transition:transform .32s ease,opacity .32s}
@media(max-width:700px){:root{--specimen-size:clamp(72px,18vw,108px);--selection-size:clamp(130px,29vw,164px)}#texture-view .texture-canvas{width:76vw;height:42vh}#texture-view .texture-copy{top:12%;left:12%;width:76%}#texture-view .texture-copy h2{font-size:22px}.room-gallery .room-heading{padding-top:8vh}}
@media(prefers-reduced-motion:reduce){#garden,#chamber>.objects,#chamber>.environment{transform:none!important}.camera-out #chamber,.camera-out #room{transition:none}}

/* One shared, slightly richer tactile palette; only the door panels vary. */
.room-gallery{--stone:#aaa28a;background:radial-gradient(ellipse at 50% 42%,#cab18d20,transparent 64%),linear-gradient(145deg,#535a43,#75624c 55%,#424735)}
.room-gallery .room-heading{padding-top:10vh}
.room-gallery .entry-controls{transform:translateY(-4vh);min-height:130px}
/* Preserve each food's native width-to-height ratio within the common selection area. */
#chamber[data-scene=taste] #objects .art{display:grid;place-items:center}
#chamber[data-scene=taste] #objects .specimen-canvas{width:100%;height:100%;object-fit:contain;object-position:center}
@media(max-width:700px){.room-gallery .room-heading{padding-top:12vh}.room-gallery .entry-controls{transform:translateY(-2vh)}}
@media(min-width:701px) and (max-height:740px){.room-gallery .room-heading{padding-top:8vh}.room-gallery .entry-controls{transform:translateY(-2vh)}}

/* v42: shared warm exterior, positioned against the supplied door composition. */
.room-gallery{--door:#88735e;--stone:#b6a084;--ui-fill:#D5C0AA;--ui-ink:#422b23;color:#D5C0AA;background:radial-gradient(ellipse at 48% 45%,#62433233,transparent 65%),radial-gradient(ellipse at 50% 45%,#493025 0%,#382219 100%)}
.room-gallery::before{background:url('assets/door-grain.svg') repeat;opacity:.2;mix-blend-mode:soft-light}
.room-gallery #gallery{height:100svh;min-height:580px;display:block}
.room-gallery .room-heading{position:absolute;top:5%;left:0;width:100%;padding:0}
.room-gallery .room-heading p{color:#D5C0AA;margin:0 0 22px;font-size:11px}
.room-gallery .room-heading h1{color:#D5C0AA;font-size:clamp(28px,2.75vw,46px)}
.room-gallery #portal-stage{position:absolute;top:24.5%;left:50%;margin-left:-20%;width:40%;height:47.5%;min-height:0}
.room-gallery .portal{width:58%;height:100%;min-height:0;max-height:none}
.room-gallery .door-panel{background:repeating-linear-gradient(0deg,transparent 0 29px,#e6d9bd15 30px,#3b2a2017 31px,transparent 33px),url('assets/door-grain.svg'),#88735e;border-color:#b19b7d80;box-shadow:inset 0 0 0 3px #d9bea333}
.room-gallery .door-frame{border-color:#b6a084;background:#b6a084;box-shadow:inset 0 0 0 2px #e6d1b578,0 0 0 2px #57433288,0 0 0 7px #9e896b66}
.room-gallery .door-reveal{border-color:#8f7961 #b7a184 #d1b998 #a28b6e}
.room-gallery .lintel{background:linear-gradient(#b09a7d,#8d765d);top:-13px}
.room-gallery .threshold{background:linear-gradient(#ac9578,#89735b);bottom:-12px}
.room-gallery .entry-controls{position:absolute;top:81%;left:0;width:100%;padding:0;min-height:0;transform:none}
.room-gallery .entry-button{min-width:176px;min-height:48px;padding:12px 24px;border-radius:11px;font-size:16px;background:#D5C0AA;color:#422b23}
.room-gallery .entry-controls p{color:#D5C0AA;font-size:13px;margin-top:17px}
.room-gallery .arrow{top:44%;width:54px;height:54px;background:#D5C0AA;color:#422b23}
.room-gallery .previous{left:4%}.room-gallery .next{right:4%}
.room-gallery .entry-button:hover,.room-gallery .arrow:hover{background:#e1cdb7}
.room-gallery a:focus-visible,.room-gallery button:focus-visible{outline-color:#D5C0AA}
/* Soft rounded volume extends continuously from the upright stem into its bulb. */
#temperature-view .thermometer::after{border:8px solid transparent;background:radial-gradient(ellipse at 31% 24%,#fff6e693 0%,#fff6e61a 35%,#352a3938 85%),linear-gradient(var(--mercury-color),var(--mercury-color)) padding-box,linear-gradient(130deg,#f1e7d5 5%,#d3c6b7 34%,#9e9185 76%,#c5b6a6) border-box;background-clip:padding-box,padding-box,border-box;box-shadow:inset 2px 3px 7px #fff4dc55,inset -5px -6px 9px #3b293b38,5px 7px 13px #34252232}
#texture-view .texture-canvas{width:min(48vw,720px,81.78vh);height:auto;aspect-ratio:16/9}
#texture-view .lens{width:clamp(90px,9vw,130px);height:clamp(64px,6.4vw,93px)}
@media(max-width:700px){
 .room-gallery .room-heading{top:6%;padding:0}.room-gallery .room-heading p{margin-bottom:16px}
 .room-gallery #portal-stage{left:50%;margin-left:-37%;width:74%;top:25%;height:45%}
 .room-gallery .portal{width:63%;min-height:0;max-height:none}
 .room-gallery .arrow{width:38px;height:38px;top:45%}.room-gallery .previous{left:3%}.room-gallery .next{right:3%}
 .room-gallery .entry-controls{top:81%;transform:none}.room-gallery .entry-button{min-width:168px;min-height:46px}
 #texture-view .texture-canvas{width:min(76vw,74.67vh);height:auto;aspect-ratio:16/9}
 #texture-view .lens{width:90px;height:64px}
}

/* The supplied background is displayed without tint, overlays, or color filters. */
.room-gallery{background:#38201b url('assets/door-background.png') center/cover no-repeat}
.room-gallery::before{display:none}
#temperature-view .thermometer{width:92px;height:48%;background:none;border:0;box-shadow:none;border-radius:0;transform:translateX(-50%)}
#temperature-view .thermometer::before,#temperature-view .thermometer::after{display:none}
.thermometer-glass{display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(5px 7px 8px #34252226)}
#temperature-view .temperature-keys{top:4%;bottom:16%;left:50%;right:auto;width:0}
#temperature-view .temp-key{margin-left:23px}
#room-view{pointer-events:none;z-index:3;will-change:clip-path;overflow:hidden}
#room-view iframe{pointer-events:none;transform-origin:50% 50%;will-change:transform;visibility:hidden}
#room-view iframe.current{visibility:visible}
.room-gallery.inside #room-view,.room-gallery.travelling #room-view{z-index:20}
.room-gallery.inside #room-view iframe.current{pointer-events:auto}
.room-gallery.travelling .room-heading,.room-gallery.travelling .entry-controls,.room-gallery.travelling .arrow{opacity:0;pointer-events:none}
.room-gallery #portal-stage{transition:none;transform:translate3d(var(--px,0px),var(--py,0px),0)}
.room-gallery .portal{will-change:transform;transform-style:preserve-3d}
.room-gallery .room-heading,.room-gallery .entry-controls,.room-gallery .arrow{transition:opacity .16s}
#scene-window.loading::after{content:'Loading room…';position:absolute;inset:0;display:grid;place-items:center;color:#D5C0AA;font-size:12px}
#chamber>.environment{transform:translate3d(calc(var(--mx) * .4),calc(var(--my) * .4),0) scale(1.055)}
#chamber>.objects{transform:translate3d(var(--mx),var(--my),0)}

html[data-suspended=true] .art{animation-play-state:paused}

/* Every scene layer shares one camera projection. Objects do not orbit independently. */
#chamber>.environment,#chamber>.objects,#garden,#botanical-layer,#eye-volume{
 transform:perspective(1200px) rotateX(var(--view-pitch,0deg)) rotateY(var(--view-yaw,0deg)) scale(1.045);
 transform-origin:50% 50%;will-change:transform;
}
@media(prefers-reduced-motion:reduce){#chamber>.environment,#chamber>.objects,#garden,#botanical-layer,#eye-volume{transform:none!important}}

.room-gallery{background:#38251e url('assets/door-background-v44.png') center/cover no-repeat}
#objects #selection-ring{margin-top:0;transition:opacity .16s ease}
#objects .specimen.selected .art{animation:none;transform:none}
.room-gallery.travelling #portal{z-index:24}
.room-gallery.travelling #portal-stage{z-index:24}
.sensory-ink{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:2}
html[data-preview] .sensory-ink,html[data-suspended=true] .sensory-ink{visibility:hidden}
.room-gallery.travelling .door-frame,.room-gallery.travelling .scene-window{background:transparent}

/* v46: visual-only reference alignment; specimen and interaction rules remain unchanged. */
#chamber[data-scene=taste]>.environment,#chamber[data-scene=tactile]>.environment{filter:url(#reference-tone);object-fit:cover;object-position:center}
#chamber[data-scene=taste]::after,#chamber[data-scene=tactile]::after{display:none}
#chamber[data-scene=taste]>.wash,#chamber[data-scene=taste]>.ambient{display:none}
.room-gallery{--stone:#bba084}
.room-gallery .door-frame{border-color:#bea58a;box-shadow:inset 0 0 0 1px #dec8ae,0 0 0 2px #846c5688,0 0 0 6px #957a5e55}
.room-gallery .door-reveal{border-color:#8e745c #b99c7c #ddbd96 #b49a7b}
.room-gallery .door-panel{background:repeating-linear-gradient(0deg,transparent 0 29px,#ead7c018 30px,#63513f1c 31px,transparent 33px),url('assets/door-grain.svg'),linear-gradient(115deg,#b8a48c,#9c8974);border-color:#bda98e;box-shadow:inset 0 0 0 2px #dcc4a844}
.room-gallery .lintel{background:linear-gradient(#d7bc9a,#987c5e);height:11px}
.room-gallery .threshold{background:linear-gradient(#cbb08f,#93775c);height:11px}
.room-gallery .entry-button{background:#d5c0aa;border:1px solid #e6d1b7;border-radius:11px;box-shadow:0 4px 12px #21150e26}
.room-gallery .room-heading h1{font-size:clamp(28px,2.85vw,48px)}
@media(min-width:701px){.room-gallery #portal-stage{margin-left:-20.5%;width:41%}}

/* v47: restrained tactile chroma and the taste reference's shaded perimeter. */
#chamber[data-scene=tactile]>.environment{filter:url(#reference-tone) saturate(.9)}
#chamber[data-scene=taste]::after{
 content:'';display:block;position:absolute;inset:0;z-index:-1;pointer-events:none;
 background:radial-gradient(ellipse at 50% 48%,rgba(33,16,13,0) 40%,rgba(33,16,13,.035) 61%,rgba(33,16,13,.14) 85%,rgba(33,16,13,.26) 100%);
}

/* v48: original user-supplied plates, without reference grading or added vignette. */
#chamber[data-scene=taste]>.environment,#chamber[data-scene=tactile]>.environment{filter:none;object-fit:cover;object-position:center;transform:perspective(1200px) rotateX(var(--view-pitch,0deg)) rotateY(var(--view-yaw,0deg))}
#chamber[data-scene=taste]::after,#chamber[data-scene=tactile]::after{display:none;background:none}
#chamber[data-scene=taste]>.wash,#chamber[data-scene=taste]>.ambient,#room>.vignette{display:none}
#garden-environment{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;pointer-events:none;transform:perspective(1200px) rotateX(var(--view-pitch,0deg)) rotateY(var(--view-yaw,0deg));transform-origin:center;will-change:transform}
@media(prefers-reduced-motion:reduce){#garden-environment,#chamber>.environment{transform:none!important}}

/* v50: restore v42 object-relative parallax, without rotating the room plane. */
#chamber[data-scene]>.environment{transform:translate(calc(var(--mx) * -.4),calc(var(--my) * -.4)) scale(1.025)}
#chamber>.objects{transform:translate(var(--mx),var(--my))}
#garden{transform:translate(calc(var(--mx) * .55),calc(var(--my) * .55)) scale(1.015)}
#botanical-layer,#eye-volume{transform:none}
#garden-environment{transform:translate(calc(var(--mx) * -.4),calc(var(--my) * -.4)) scale(1.015)}
@media(prefers-reduced-motion:reduce){#garden-environment,#chamber[data-scene]>.environment,#chamber>.objects,#garden{transform:none!important}}

/* Taste background retains its existing restrained chroma. */
#chamber[data-scene=taste]>.environment{filter:saturate(.92)}
#chamber[data-scene=taste]{--specimen-size:clamp(105.84px,11.124vw,166.32px)}
@media(max-width:700px){#chamber[data-scene=taste]{--specimen-size:clamp(77.76px,19.44vw,116.64px)}}

/* Balanced specimen silhouettes, with a dedicated caption lane below each ring. */
#chamber[data-scene=taste] #objects .specimen .specimen-canvas{transform:scale(var(--visual-scale,1));transform-origin:center}
#chamber[data-scene=taste] #objects [data-taste=sour]{left:22%;top:66%;--visual-scale:.796}
#chamber[data-scene=taste] #objects [data-taste=sweet]{left:31%;top:40%;--visual-scale:1}
#chamber[data-scene=taste] #objects [data-taste=bitter]{left:69%;top:38%;--visual-scale:1.088}
#chamber[data-scene=taste] #objects [data-taste=spicy]{left:49%;top:69%;--visual-scale:.862}
#chamber[data-scene=taste] #objects [data-taste=salty]{left:78%;top:67%;--visual-scale:.93}
#chamber[data-scene=tactile]{--specimen-size:min(clamp(98px,10.3vw,154px),17svh);--selection-size:min(clamp(150px,14vw,212px),24svh)}
#chamber[data-scene=tactile] #objects .specimen .caption{top:calc(50% + var(--selection-size)/2 + 10px);bottom:auto;width:calc(var(--selection-size) + 8px);max-width:calc(var(--selection-size) + 8px);white-space:normal;line-height:1.35}
#chamber[data-scene=tactile] #objects [data-material=nail]{left:20%;top:40%!important}
#chamber[data-scene=tactile] #objects [data-material=leather]{left:40%;top:36%!important}
#chamber[data-scene=tactile] #objects [data-material=velvet]{left:60%;top:40%!important}
#chamber[data-scene=tactile] #objects [data-material=metal]{left:80%;top:37%!important}
#chamber[data-scene=tactile] #objects [data-material=clay]{left:26%;top:71%!important}
#chamber[data-scene=tactile] #objects [data-material=temperature]{left:50%;top:69%!important}
#chamber[data-scene=tactile] #objects [data-material=cotton]{left:74%;top:71%!important}
@media(max-width:900px){
 #chamber[data-scene=taste] #objects [data-taste=sour]{left:20%;top:67%}
 #chamber[data-scene=taste] #objects [data-taste=sweet]{left:25%;top:38%}
 #chamber[data-scene=taste] #objects [data-taste=bitter]{left:75%;top:38%}
 #chamber[data-scene=taste] #objects [data-taste=spicy]{left:50%;top:54%}
 #chamber[data-scene=taste] #objects [data-taste=salty]{left:80%;top:70%}
 #chamber[data-scene=tactile]{--specimen-size:min(21vw,90px);--selection-size:min(28vw,120px,16svh)}
 #chamber[data-scene=tactile] #objects .specimen .caption{font-size:10px;top:calc(50% + var(--selection-size)/2 + 7px)}
 #chamber[data-scene=tactile] #objects [data-material=nail]{left:18%;top:32%!important}
 #chamber[data-scene=tactile] #objects [data-material=leather]{left:50%;top:32%!important}
 #chamber[data-scene=tactile] #objects [data-material=velvet]{left:82%;top:32%!important}
 #chamber[data-scene=tactile] #objects [data-material=metal]{left:28%;top:53%!important}
 #chamber[data-scene=tactile] #objects [data-material=clay]{left:72%;top:53%!important}
 #chamber[data-scene=tactile] #objects [data-material=temperature]{left:28%;top:74%!important}
 #chamber[data-scene=tactile] #objects [data-material=cotton]{left:72%;top:74%!important}
}

/* Shared taste/touch specimen typography; circles enclose the artwork and label. */
#chamber[data-scene] #objects .specimen .caption{font:11px/1.35 Arial,sans-serif;letter-spacing:.15em;text-transform:uppercase;color:#fff4d8;opacity:1;left:50%;bottom:auto;top:calc(100% + 20px);width:150px;max-width:150px;white-space:normal;text-wrap:balance;text-align:center;transform:translateX(-50%);text-shadow:0 1px 8px #24251e}
#chamber[data-scene=taste] #objects .specimen::after{top:calc(50% + var(--ring-offset,12px));border:1px solid #f3e6d9a6}
#chamber[data-scene=tactile] #objects #selection-ring{border:1px solid #f3e6d9a6}
#chamber[data-scene=taste] #objects [data-taste=sweet]{left:37%;top:42%}
#chamber[data-scene=taste] #objects [data-taste=bitter]{left:63%;top:40%}
@media(max-width:900px){
 #chamber[data-scene] #objects .specimen .caption{font-size:10px;width:110px;max-width:110px}
 #chamber[data-scene=taste] #objects [data-taste=sweet]{left:30%;top:38%}
 #chamber[data-scene=taste] #objects [data-taste=bitter]{left:70%;top:38%}
}
