/* v10: independent sharp scenes, temperature-specific cups, physical opening sign. */
.crisp-brew .brew-art-plane{position:absolute;overflow:hidden;isolation:isolate}
.crisp-brew .process-frame{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;max-width:none;transform:none;filter:none}
.crisp-brew .art-reveal{transition:opacity .12s linear}
.felt-brew .crisp-brew{background:#203c56}
.crisp-brew .counter-drink{position:absolute;left:50%;top:87%;width:39%;aspect-ratio:1.039;transform:translate(-50%,-90%);filter:drop-shadow(5px 9px 5px #52372045)}
.counter-drink>img{width:100%;height:100%;object-fit:contain;display:block}
.cup-steam{position:absolute;left:28%;top:-15%;width:44%;height:31%;pointer-events:none;overflow:visible}
.cup-steam i{position:absolute;left:15%;bottom:0;width:13%;height:83%;border-left:2px solid #fff8e3b0;border-radius:55%;filter:blur(1px);animation:cup-warmth 3s ease-in-out infinite;opacity:0}
.cup-steam i:nth-child(2){left:48%;animation-delay:-1s;height:100%}
.cup-steam i:nth-child(3){left:75%;animation-delay:-2s;height:74%}
.sugar-fall{position:absolute;left:34%;top:1%;font-size:38px;font-weight:900;color:#fff2d5;letter-spacing:7px;animation:sugar-into-cup .7s ease-out both;pointer-events:none}
.crisp-brew.working[data-step="1"] .process-frame{animation:grinder-hum .14s linear infinite alternate}
.crisp-brew.working[data-step="2"] .process-frame{animation:tamper-press .3s ease-out}
.crisp-brew.working[data-step="6"] .process-frame{animation:stir-ease 1.1s ease-in-out infinite alternate}
.service-scene .cup-token.cup-cutout .cup-steam,.service-scene .cup-on-table .cup-steam{z-index:1}
.service-scene .cup-on-table,.service-scene .cup-token.cup-cutout{overflow:visible}
.door-sign-hanger{position:absolute;left:47%;top:34%;width:24%;height:18%;perspective:1000px;z-index:3}
.door-sign-hanger:before{content:'';position:absolute;left:24%;right:24%;bottom:100%;height:45%;border:3px solid #ad8251;border-bottom:0;border-radius:50% 50% 0 0;filter:drop-shadow(1px 2px 1px #4433204d)}
/* A filter on the rotating parent flattens its 3D faces and hides OPEN.
   Keep the shadow on each face so the back can turn towards the player. */
.physical-door-sign{display:block;position:absolute;inset:0;width:100%;height:100%;border:0;background:none;padding:0;appearance:none;overflow:visible;transform-style:preserve-3d;transform:rotateY(0) rotate(-3deg);transition:none;color:#f9e5bc;filter:none}
.physical-door-sign:disabled{opacity:1;cursor:default}
.physical-door-sign:active:not(:disabled){transform:rotateY(0) rotate(-3deg)}
.physical-door-sign.turned{transform:rotate(3deg);transform-style:flat}
.sign-face{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5%;border:5px solid #c48b4c;outline:1px dashed #edcd98;outline-offset:-11px;border-radius:12px;background-color:#1f415a;background-image:var(--felt-noise);-webkit-backface-visibility:hidden;backface-visibility:hidden;box-shadow:inset 0 0 8px #091f3940,4px 7px 8px #4c361d55}
.sign-face b{font-family:Georgia,serif;font-size:clamp(16px,4cqw,64px);letter-spacing:.14em;line-height:1}
.sign-face small{color:#edcfa4;font-size:clamp(7px,1.1cqw,18px);letter-spacing:.3em}
.sign-open{transform:rotateY(180deg);background-color:#bd6436}
.sign-open small{color:#fff0d1}
/* Settle on one front-facing OPEN face, independent of 3D compositing. */
.physical-door-sign.turned .sign-close{display:none}
.physical-door-sign.turned .sign-open{transform:none}
.turning-sign .physical-door-sign{animation:owner-turns-sign 1.35s cubic-bezier(.35,.12,.22,1) both}
.opening-experience .scene-art{background-size:100% 100%;container-type:inline-size}
.opening-experience .dialogue .line{max-width:65ch}
@keyframes owner-turns-sign{0%{transform:rotateY(0) rotate(-3deg)}18%{transform:translateY(-4%) rotateY(12deg) rotate(1deg)}75%{transform:translateY(-2%) rotateY(187deg) rotate(-4deg)}100%{transform:rotateY(180deg) rotate(-3deg)}}
@keyframes cup-warmth{0%{transform:translateY(12%) scaleX(.8);opacity:0}35%{opacity:.55}100%{transform:translateY(-45%) scaleX(1.4);opacity:0}}
@keyframes sugar-into-cup{from{transform:translateY(-50%);opacity:1}to{transform:translateY(80%);opacity:0}}
@keyframes grinder-hum{from{translate:-.3px 0}to{translate:.3px .3px}}
@keyframes tamper-press{0%,100%{translate:0 0}55%{translate:0 2px}}
@keyframes stir-ease{from{translate:-.7px 0}to{translate:.7px .5px}}
@media(max-width:650px) and (orientation:portrait){.sign-face{border-width:2px;border-radius:6px;outline-offset:-5px}.sign-face b{font-size:19px}.sign-face small{font-size:8px}.door-sign-hanger:before{border-width:1px}.felt-brew .crisp-brew{min-height:200px}.felt-brew .brew-console{min-height:270px}.cup-steam i{border-left-width:1px}}
@media(prefers-reduced-motion:reduce){.cup-steam i,.crisp-brew.working .process-frame,.sugar-fall{animation:none}.cup-steam i{opacity:.35}.turning-sign .physical-door-sign{animation-duration:.01ms}.art-reveal{transition:none}}

/* Keep physical scene movement paused with the game dialog/background. */
#app[data-paused="true"] .arrival-walker,#app[data-paused="true"] .arrival-sprite,#app[data-paused="true"] .entry-open,#app[data-paused="true"] .entry-bell,#app[data-paused="true"] .physical-door-sign{animation-play-state:paused}
