/* ==== Bravo Protocol: hero title overlays (owner-approved set E) ====
   Movie-title cards over the live first-arrival film. Classes only, no inline styles; compositor-only motion
   (opacity + transform). The layer is position:fixed and out of flow, so it never moves layout.
   Default state = hidden. overlay.js adds .ov-armed to <html> (JS on, motion allowed); a line shows only while it has .on. */

.ov{position:fixed;inset:0;z-index:2;pointer-events:none;display:none}   /* above the film (stage z0), below headline/hero copy (z3) */
.ov-armed .ov{display:block}

/* soft corner scrim: fades in with whichever line is up; measured contrast in README */
.ov-scrim{position:absolute;inset:0;opacity:0;transition:opacity 1.1s cubic-bezier(.2,.7,.2,1)}
.ov-scrim-bl{background:radial-gradient(70% 60% at 0% 100%,rgba(6,11,20,.62) 0%,rgba(6,11,20,.38) 42%,rgba(6,11,20,0) 78%)}
.ov-scrim-br{background:radial-gradient(70% 60% at 100% 100%,rgba(6,11,20,.62) 0%,rgba(6,11,20,.38) 42%,rgba(6,11,20,0) 78%)}
.ov-scrim.on{opacity:1}

.ov-line{position:absolute;bottom:clamp(92px,15vh,168px);margin:0;max-width:min(820px,calc(100vw - 2 * var(--pad)));
  opacity:0;transform:translate3d(-14px,0,0);
  transition:opacity .75s cubic-bezier(.4,0,.2,1),transform .75s cubic-bezier(.4,0,.2,1)}
.ov-bl{left:var(--pad)}
.ov-br{right:var(--pad);text-align:right;transform:translate3d(14px,0,0)}
.ov-line.on{opacity:1;transform:translate3d(0,0,0);
  transition:opacity 1.1s cubic-bezier(.2,.7,.2,1),transform 2.4s cubic-bezier(.16,.8,.24,1)}   /* in: fade + slow track */

.ov-k{display:flex;align-items:center;gap:14px;font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:.34em;
  text-transform:uppercase;color:rgba(243,238,228,.86);margin:0 0 14px;padding-left:.02em}
.ov-k::before{content:"";width:28px;height:1px;background:var(--gold);opacity:.8;flex:none}
.ov-br .ov-k{justify-content:flex-end;padding-right:0}
.ov-br .ov-k::before{order:2}
.ov-t{display:block;font-family:var(--disp);font-weight:400;font-size:clamp(21px,2.05vw,33px);line-height:1.22;letter-spacing:.012em;
  color:var(--ink);text-shadow:0 1px 18px rgba(4,8,15,.62),0 0 2px rgba(4,8,15,.35);text-wrap:balance}

/* one restrained pw-bulb per card (same filament keyframes as the approved sections; .25 s after the card starts) */
.ov-lit.pw-bulb{color:#c6a568;text-shadow:0 0 1px rgba(198,165,104,.4)}
.ov-line.on .ov-lit.pw-bulb{color:#fff6e3;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 9px rgba(222,168,80,.45),0 0 16px rgba(222,168,80,.14);
  animation:fx-filament 1.6s cubic-bezier(.3,0,.2,1) .25s both}
@keyframes fx-filament{
  0%{color:#c6a568;text-shadow:0 0 1px rgba(198,165,104,.4),0 0 2px rgba(230,207,156,0),0 0 4px rgba(198,165,104,0),0 0 9px rgba(222,168,80,0),0 0 16px rgba(222,168,80,0)}
  42%{color:#fffbf2;text-shadow:0 0 1px #ffffff,0 0 3px #f6e2b4,0 0 6px #d9b56f,0 0 12px rgba(222,168,80,.7),0 0 22px rgba(222,168,80,.24)}
  54%{color:#fff3da;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 8px rgba(222,168,80,.36),0 0 14px rgba(222,168,80,.10)}
  60%{color:#fff8ea;text-shadow:0 0 1px #fff4d8,0 0 2px #ecd6a6,0 0 5px #cdab6c,0 0 10px rgba(222,168,80,.52),0 0 18px rgba(222,168,80,.17)}
  100%{color:#fff6e3;text-shadow:0 0 1px #fff0cc,0 0 2px #e6cf9c,0 0 4px #c6a568,0 0 9px rgba(222,168,80,.45),0 0 16px rgba(222,168,80,.14)}}

/* phones / portrait film: every card bottom-left, above the scroll cue zone */
@media (max-width:760px),(max-aspect-ratio:9/10){
  .ov-line,.ov-br{left:var(--pad);right:auto;text-align:left;bottom:clamp(120px,17vh,170px);transform:translate3d(-12px,0,0)}
  .ov-br .ov-k{justify-content:flex-start}
  .ov-br .ov-k::before{order:0}
  .ov-scrim-br{background:radial-gradient(90% 55% at 0% 100%,rgba(6,11,20,.72) 0%,rgba(6,11,20,.46) 45%,rgba(6,11,20,0) 80%)}
  .ov-scrim-bl{background:radial-gradient(90% 55% at 0% 100%,rgba(6,11,20,.72) 0%,rgba(6,11,20,.46) 45%,rgba(6,11,20,0) 80%)}
  .ov-k{font-size:10px;letter-spacing:.3em;margin-bottom:11px}
  .ov-k::before{width:22px}
  .ov-t{font-size:clamp(20px,5.6vw,26px)}
}

/* set E card 0 (opener on the 45-frame tower shot): this card only uses short fades (in .3 s, out .22 s) so it and its scrim
   are fully gone before the first whip pan starts at frame 40. Same type, kicker, placement and tracking as every other card. */
.ov-line.ov-quick{transition-duration:.22s}
.ov-line.ov-quick.on{transition:opacity .3s cubic-bezier(.2,.7,.2,1),transform 2.4s cubic-bezier(.16,.8,.24,1)}
.ov-scrim.ov-quick{transition-duration:.22s}
.ov-scrim.ov-quick.on{transition-duration:.3s}
/* opener bulb: same fx-filament keyframes and settled look, compressed (start .1 s, 0.8 s long, settled by 0.9 s) so it completes while the card is fully up */
.ov-line.ov-quick.on .ov-lit.pw-bulb{animation-duration:.8s;animation-delay:.1s}
@media (prefers-reduced-motion:reduce){.ov{display:none!important}}
