/* Home hero entrance: "Signal Lock". CSS only; transform/opacity only; the headline and copy are never hidden (no opacity:0 on text).
   Everything below is decorative and sits inside @media (prefers-reduced-motion: no-preference): reduced-motion visitors get the plain page. */
@media (prefers-reduced-motion: no-preference) and (update: fast) {
  .heroHome { overflow-x: clip; }
  .heroHome > * { position: relative; z-index: 1; }
  /* 1) one cyan scan line sweeps the hero once */
  .heroHome::before { content: ""; position: absolute; z-index: 0; top: 0; bottom: 0; left: 0; width: 100%; pointer-events: none; opacity: 0; transform: translateX(-100%);
    background: linear-gradient(90deg, transparent 0, rgba(93,232,237,0) 78%, rgba(93,232,237,.14) 96%, rgba(160,250,255,.85) 99.4%, transparent 100%);
    animation: se-scan 1050ms cubic-bezier(.22,.7,.2,1) 120ms 1 both; }
  /* 2) a faint grid brightens behind the scan, then fades away (nothing permanent) */
  .heroHome::after { content: ""; position: absolute; z-index: 0; inset: 0; pointer-events: none; opacity: 0;
    background-image: linear-gradient(rgba(93,232,237,.10) 1px, transparent 1px), linear-gradient(90deg, rgba(93,232,237,.10) 1px, transparent 1px); background-size: 48px 48px;
    -webkit-mask-image: radial-gradient(ellipse at 68% 42%, #000 0, transparent 72%); mask-image: radial-gradient(ellipse at 68% 42%, #000 0, transparent 72%);
    animation: se-grid 1900ms ease-out 200ms 1 both; }
  /* 3) one light sheen passes over the second headline line (the text itself is fully visible from the first frame) */
  .heroHome h1 .gl { position: relative; display: inline-block; clip-path: inset(-.2em 0); }
  .heroHome h1 .gl::after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 55%; pointer-events: none; opacity: 0; transform: translateX(-120%);
    background: linear-gradient(100deg, transparent 0, rgba(150,245,250,.30) 50%, transparent 100%);
    animation: se-sheen 1150ms cubic-bezier(.3,.6,.2,1) 650ms 1 both; }
  /* 4) the product card locks in: orb pulses once, the 01/02/03 markers snap into place in sequence */
  .heroHome .proofOrb { animation: se-orb 760ms cubic-bezier(.2,.8,.2,1) 700ms 1 backwards; }
  .heroHome .proofRow i { animation: se-mark 520ms cubic-bezier(.2,.8,.2,1) calc(950ms + var(--i, 0) * 130ms) 1 backwards; }
  .heroHome .proofRow:nth-child(1) i { --i: 0; } .heroHome .proofRow:nth-child(2) i { --i: 1; } .heroHome .proofRow:nth-child(3) i { --i: 2; }
}
@keyframes se-scan { 0% { transform: translateX(-100%); opacity: 0; } 14% { opacity: 1; } 78% { transform: translateX(0); opacity: 1; } 100% { transform: translateX(22%); opacity: 0; } }
@keyframes se-grid { 0% { opacity: 0; } 35% { opacity: 1; } 100% { opacity: 0; } }
@keyframes se-sheen { 0% { transform: translateX(-120%); opacity: 0; } 20% { opacity: 1; } 100% { transform: translateX(260%); opacity: 0; } }
@keyframes se-orb { 0% { scale: .9; } 60% { scale: 1.08; } 100% { scale: 1; } }
@keyframes se-mark { 0% { scale: 1.35; opacity: .4; } 100% { scale: 1; opacity: 1; } }
