/* All illustration effects share its native square coordinate system. */
.room-scene { isolation:isolate; }
.room-art,.lamp-on .room-art,.raining .room-art,.raining.lamp-on .room-art { filter:none; transition:none; }
.room-effects,.raining .room-effects { position:absolute;inset:0;z-index:1;pointer-events:none;background:none;opacity:1;animation:none; }
.scene-motion { display:block;width:100%;height:100%;overflow:visible;pointer-events:none; }
.scene-motion image { pointer-events:none; }
.lamp-light { opacity:0;transition:opacity 1.05s cubic-bezier(.2,.65,.3,1); }
.lamp-on .lamp-light { opacity:1;transition-duration:.85s; }
.lit-texture { filter:brightness(1.5) saturate(.92);opacity:.65; }
.mini-hotspot span { opacity:.78;transition:opacity .2s,background .2s;box-shadow:0 1px 5px #46362618; }
.mini-hotspot:hover span,.mini-hotspot:focus-visible span { opacity:1;transform:none; }
.mini-hotspot[aria-pressed=true] span { transform:none; }
/* Move affordances aside so the actual light, petals and pages remain visible. */
.spot-lamp { left:10.4%;top:43.7%; }
.spot-water { left:36.4%;top:43.3%; }
.spot-book { left:74.3%;top:57%; }
.spot-rain { left:78.5%;top:32%; }
.room-tools button[aria-pressed=true] { background:#e8cfaa;border-color:#b78b55;color:#754822; }
.plant-motion { transform-origin:347px 563px; }
.watering .plant-motion { animation:leaf-sway 1.55s ease-in-out .26s; }
.water-drop { opacity:0; }
.watering .water-drop { animation:water-fall .75s cubic-bezier(.3,.1,.7,1) var(--water-delay) both; }
.book-page { opacity:0;transform-origin:-37px 9px; }
.drawing-date .book-page { animation:book-turn .68s cubic-bezier(.25,.6,.35,1) both; }
.cat-breath { transform-origin:1139px 1004px; }
.cat-ear { transform-origin:1040px 944px; }
.petting .cat-breath { animation:cat-breathe 1.8s ease-in-out; }
.petting .cat-ear { animation:ear-flick .85s ease-in-out .12s; }
.pet-heart { opacity:0;transform-origin:1010px 900px; }
.petting .pet-heart { animation:pet-heart-rise 1.5s ease-out .2s both; }
.petting .second-heart { animation-delay:.42s; }
.window-weather { opacity:0;transition:opacity .6s ease; }
.raining .window-weather { opacity:1; }
.glass-drop { animation:glass-slide var(--drop-time) linear var(--drop-delay) infinite;animation-play-state:paused; }
.glass-drop path { fill:none;stroke:#f2f7f8;stroke-opacity:.47;stroke-width:.8;stroke-linecap:round;vector-effect:non-scaling-stroke; }
.glass-drop ellipse { fill:#f4fbfc;fill-opacity:.58;stroke:#778e9b;stroke-opacity:.22;stroke-width:.5; }
.raining .glass-drop { animation-play-state:running; }
.room-paused .scene-motion * { animation-play-state:paused!important; }
.date-ticket-stage { perspective:900px;overflow:hidden;padding:12px 6px;margin:18px -6px; }
.date-ticket-stage .date-ticket { margin:0;border:1px solid #cfb591;border-radius:2px;background:linear-gradient(120deg,#fff9e9,#f0dec0);box-shadow:0 6px 13px #6a442018,inset 0 0 22px #fff8e388;transform-origin:50% 0; }
.date-ticket.ticket-arrive { animation:ticket-unfold .8s cubic-bezier(.16,.65,.25,1) both; }
.date-ticket.ticket-change { animation:ticket-replace .62s ease both; }
.passphrase-field { display:grid;gap:7px; }
.passphrase-control { position:relative; }
.record-form .passphrase-control input { padding-right:58px; }
.reveal-passphrase { position:absolute;right:4px;top:50%;transform:translateY(-50%);width:46px;height:44px;display:grid;place-items:center;padding:10px;border:0;border-radius:4px;background:transparent;color:#86644d; }
.reveal-passphrase:hover { background:#f1e6d5; }
.reveal-passphrase:focus-visible { outline:2px solid #ad7554;outline-offset:1px; }
.reveal-passphrase svg { width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round; }
.reveal-passphrase .eye-slash { display:none; }
.reveal-passphrase[aria-pressed=true] .eye-slash { display:block; }
@keyframes leaf-sway { 0%,100%{transform:rotate(0)} 28%{transform:rotate(.65deg)} 58%{transform:rotate(-.4deg)} 80%{transform:rotate(.16deg)} }
@keyframes water-fall { 0%{opacity:0;transform:translate(8px,-12px)} 15%{opacity:.8} 80%{opacity:.7} 100%{opacity:0;transform:translate(-5px,66px)} }
@keyframes book-turn { 0%{opacity:0;transform:translateY(0) skewY(0deg)} 25%{opacity:1} 65%{opacity:1;transform:translateY(-9px) skewY(-11deg) scaleY(1.7)} 100%{opacity:0;transform:translateY(-11px) skewY(-14deg) scaleY(.4)} }
@keyframes cat-breathe { 0%,100%{transform:scale(1)} 45%{transform:scale(1.006,1.008)} }
@keyframes ear-flick { 0%,100%{transform:rotate(0)} 35%{transform:rotate(-3deg)} 65%{transform:rotate(1deg)} }
@keyframes pet-heart-rise { 0%{opacity:0;transform:translateY(4px) scale(.9)} 20%{opacity:.7} 100%{opacity:0;transform:translateY(-30px) scale(1)} }
@keyframes glass-slide { 0%{opacity:0;transform:translate(0,-48px)} 15%{opacity:.8} 75%{opacity:.75} 100%{opacity:0;transform:translate(-6px,92px)} }
@keyframes ticket-unfold { 0%{opacity:0;transform:translateY(-32px) rotateX(-48deg) rotate(-1.5deg)} 55%{opacity:1} 100%{opacity:1;transform:translateY(0) rotateX(0) rotate(0)} }
@keyframes ticket-replace { 0%{opacity:0;transform:translateY(-17px) rotateX(-22deg)} 100%{opacity:1;transform:translateY(0) rotateX(0)} }
@media(prefers-reduced-motion:reduce) {
  .scene-motion *,.date-ticket { animation:none!important;transition:none!important; }
  .lamp-light,.window-weather { transition:none; }
  .water-drop,.book-page,.pet-heart { display:none; }
  .glass-drop { opacity:.55; }
}
