/* ---------- Custom cursor ---------- */
html.pm-cursor-on,html.pm-cursor-on *{cursor:none!important}
html.pm-cursor-on input:not([type=range]):not([type=button]):not([type=submit]):not([type=checkbox]):not([type=radio]),html.pm-cursor-on textarea,html.pm-cursor-on [contenteditable="true"]{cursor:text!important}
.pm-cursor{position:fixed;inset:0;z-index:2147483000;pointer-events:none;opacity:0;transition:opacity .25s ease}
.pm-cursor.is-visible{opacity:1}
.pm-cursor[data-mode=hidden]{opacity:0}
.pm-cursor-sparks{position:absolute;inset:0;width:100%;height:100%}
.pm-cursor-ring,.pm-cursor-dot{position:absolute;left:0;top:0;will-change:transform}
.pm-cursor-ring{width:30px;height:30px;margin:-15px 0 0 -15px;border-radius:50%;border:1.5px solid #f2e7d0;box-shadow:0 0 0 1px #0d0c0b33,0 2px 10px #0006;transition:border-color .2s ease,background-color .2s ease,border-width .15s ease,opacity .2s ease}
.pm-cursor-dot{width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;background:#f2e7d0;box-shadow:0 0 0 1px #0d0c0b55,0 0 8px #ffd27a88}
.pm-cursor-glyph{position:absolute;left:50%;top:50%;font:600 13px/1 'Space Mono',monospace;color:#f2e7d0;text-shadow:0 1px 3px #000a}
.pm-cursor[data-mode=pointer] .pm-cursor-ring{border-color:#ffd27a;background:#ffd27a1f}
.pm-cursor[data-mode=grab] .pm-cursor-ring{border-style:dashed;border-color:#f2e7d0}
.pm-cursor[data-mode=grabbing] .pm-cursor-ring{border-width:3px;border-color:#e0603f;background:#e0603f22}
.pm-cursor[data-mode=zoom-in] .pm-cursor-ring,.pm-cursor[data-mode=zoom-out] .pm-cursor-ring{border-color:#ffd27a;background:#0d0c0b55}
.pm-cursor[data-mode=drag] .pm-cursor-ring{border-color:#ceac77}
.pm-cursor[data-mode=text] .pm-cursor-ring{opacity:0}
.pm-cursor.is-down .pm-cursor-ring{background:#ffd27a33}

/* ---------- Title sequence ---------- */
#cinema-opening{background:radial-gradient(ellipse 80% 70% at 50% 45%,#16201f 0%,#0c1112 70%,#070a0b 100%);clip-path:circle(150% at 50% 48%);transition:clip-path 1.05s cubic-bezier(.76,0,.24,1),opacity .35s ease .85s}
#cinema-opening.departing{clip-path:circle(0% at 50% 48%);opacity:0}
#cinema-opening.departing .opening-brand{transform:scale(1.14);filter:blur(3px);opacity:0;transition:transform 1s cubic-bezier(.76,0,.24,1),filter .8s ease,opacity .6s ease .25s}
/* The projector beam warms up with a few uneven flickers, then hums. */
.opening-beam{position:absolute;left:50%;top:-12%;width:170vmax;height:150vmax;transform:translateX(-50%);background:conic-gradient(from 180deg at 50% 0%,transparent 0deg 167deg,#ffe6b01c 172deg,#ffe6b040 180deg,#ffe6b01c 188deg,transparent 193deg 360deg);filter:blur(18px);animation:beam-on 1.3s steps(1,end) both,beam-hum 3.2s ease-in-out 1.3s infinite;pointer-events:none;mix-blend-mode:screen}
.opening-light{animation:ident-light 4s ease both,light-flicker 1.3s steps(1,end) both}
.opening-grain{position:absolute;inset:-50%;opacity:.09;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");animation:grain .5s steps(5) infinite;pointer-events:none}
.opening-vignette{position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 45%,#000a 100%);pointer-events:none}
.opening-dust{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen}
.opening-brand{animation:gate-weave 2.6s steps(26) 1.6s infinite;transform-origin:50% 55%}
.opening-mark{animation:mark-drop .95s cubic-bezier(.34,1.56,.64,1) .15s both}
.opening-name{display:flex;justify-content:center}
.opening-name .ol{display:inline-block;animation:letter-hang .85s cubic-bezier(.34,1.56,.64,1) both,letter-glow 1.6s ease both;animation-delay:calc(.42s + var(--i) * 60ms),calc(.95s + var(--i) * 45ms);transform-origin:50% 0%}
.opening-rule{animation:rule-draw .7s cubic-bezier(.65,0,.35,1) 1.05s both;transform-origin:center}
.opening-caption{display:inline-block;white-space:nowrap;overflow:hidden;animation:caption-type .9s steps(21,end) 1.35s both}
.opening-caption::after{content:'';display:inline-block;width:.6em;height:1em;margin-left:.15em;vertical-align:-.15em;background:#bfae94;animation:caret .7s steps(1) 1.35s 4 both}
#skip-opening{border:1px dashed #bbad9466;border-radius:3px;padding:10px 14px;animation:ticket-in .6s cubic-bezier(.34,1.56,.64,1) 1.6s both;transition:transform .25s cubic-bezier(.34,1.56,.64,1),color .2s,border-color .2s,background .2s}
#skip-opening:hover,#skip-opening:focus-visible{color:#f2e7d0;border-color:#ceac77;background:#ceac7714;transform:translateY(-2px) rotate(-2deg)}
#skip-opening:focus-visible{outline:1px solid #ceac77;outline-offset:3px}
@keyframes beam-on{0%{opacity:0}12%{opacity:.7}16%{opacity:.1}26%{opacity:.85}31%{opacity:.25}42%{opacity:1}100%{opacity:1}}
@keyframes beam-hum{0%,100%{opacity:1}50%{opacity:.82}}
@keyframes light-flicker{0%{opacity:0}12%{opacity:.6}16%{opacity:.15}26%{opacity:.8}31%{opacity:.3}42%{opacity:1}100%{opacity:1}}
@keyframes grain{0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}60%{transform:translate(-2%,-1%)}80%{transform:translate(3%,3%)}100%{transform:translate(0,0)}}
@keyframes gate-weave{0%{transform:translate(0,0)}25%{transform:translate(.4px,-.5px)}50%{transform:translate(-.3px,.4px)}75%{transform:translate(.2px,.6px)}100%{transform:translate(0,0)}}
@keyframes mark-drop{0%{opacity:0;transform:translateY(-70px) rotate(-14deg)}60%{opacity:.75}100%{opacity:.75;transform:none}}
@keyframes letter-hang{0%{opacity:0;transform:translateY(-.55em) rotate(calc(var(--tilt) * 1deg)) scale(.7);filter:blur(4px)}55%{opacity:1;filter:blur(0)}100%{opacity:1;transform:none;filter:blur(0)}}
@keyframes letter-glow{0%,100%{text-shadow:none}35%{text-shadow:0 0 18px #ffd27a99,0 0 2px #ffe9c0}}
@keyframes rule-draw{from{transform:scaleX(0);opacity:0}to{transform:scaleX(1);opacity:1}}
@keyframes caption-type{from{max-width:0}to{max-width:30ch}}
@keyframes caret{0%{opacity:1}50%{opacity:0}100%{opacity:0}}
@keyframes ticket-in{from{opacity:0;transform:translateY(14px) rotate(4deg)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
 .opening-beam,.opening-grain,.opening-brand,.opening-mark,.opening-name .ol,.opening-rule,.opening-caption,.opening-caption::after,#skip-opening{animation:none!important}
 .opening-dust{display:none}
 #cinema-opening{transition:opacity .3s ease;clip-path:none}
 #cinema-opening.departing{clip-path:none}
}
