/* ============================================================
   ELYRIA BIO — HERO CINEMA  (assembly-line story)
   Scroll choreographs four connected scenes:
     1) the vial enters the laboratory analyzer
     2) the lab prints the certificate of analysis (99.5% stamp)
     3) the vial is packed into the shipping box
     4) the box loads into the courier truck — which drives away
   Driven by cinema.js from #heroScroll progress. Pure transforms.
   ============================================================ */

.cinema{position:absolute;inset:0;z-index:3;pointer-events:none;overflow:hidden}
.cin-scene{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  will-change:transform,opacity;opacity:0;backface-visibility:hidden}

/* shared vial photo — radial vignette dissolves its rectangular backdrop */
.cin-vial-img{-webkit-mask-image:radial-gradient(62% 74% at 50% 46%,#000 70%,rgba(0,0,0,.55) 84%,transparent 97%);
          mask-image:radial-gradient(62% 74% at 50% 46%,#000 70%,rgba(0,0,0,.55) 84%,transparent 97%);
  filter:drop-shadow(0 18px 42px rgba(0,0,0,.7)) contrast(1.07) saturate(1.06) brightness(1.05);
  image-rendering:auto}

/* ============================================================
   SCENE 1 · LABORATORY ANALYZER
   ============================================================ */
.cin-lab{width:min(86vw,460px)}
.lab-rig{position:relative;display:grid;grid-template-columns:1fr 150px;grid-template-rows:auto auto;
  gap:14px 16px;padding:20px;border-radius:var(--r-12,12px);
  background:linear-gradient(165deg,#1b1611,#0d0a07);
  box-shadow:0 30px 70px rgba(0,0,0,.6),0 0 0 1px rgba(var(--accent-rgb),.32),
             inset 0 1px 0 rgba(255,255,255,.06)}
/* analyzer display */
.lab-screen{grid-column:1;grid-row:1;background:#06090b;border-radius:var(--r-8,8px);
  padding:12px 14px 14px;box-shadow:inset 0 0 0 1px rgba(var(--accent-rgb),.22),inset 0 0 30px rgba(0,0,0,.7);
  font-family:"IBM Plex Mono",monospace;min-height:118px;display:flex;flex-direction:column}
.lab-screen-head{display:flex;justify-content:space-between;align-items:center;
  font-size:9px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dim)}
.lab-led{width:7px;height:7px;border-radius:50%;background:#5fd28c;box-shadow:0 0 8px #5fd28c;animation:labBlink 1.4s steps(1) infinite}
@keyframes labBlink{0%,60%{opacity:1}61%,100%{opacity:.25}}
/* live chromatogram trace */
.lab-wave{position:relative;flex:1;margin:10px 0;overflow:hidden}
.lab-wave::before{content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(90deg,rgba(var(--accent-rgb),.10) 0 1px,transparent 1px 28px),
             repeating-linear-gradient(0deg,rgba(var(--accent-rgb),.08) 0 1px,transparent 1px 18px)}
.lab-wave i{position:absolute;left:0;right:0;bottom:8px;height:46px;display:block;
  background:
    radial-gradient(8px 40px at 22% 100%,rgba(231,192,106,.9),transparent 70%),
    radial-gradient(6px 30px at 40% 100%,rgba(231,192,106,.7),transparent 70%),
    radial-gradient(10px 46px at 63% 100%,rgba(246,225,164,.95),transparent 70%),
    radial-gradient(5px 22px at 80% 100%,rgba(231,192,106,.6),transparent 70%);
  -webkit-mask:linear-gradient(#000,#000);mask:linear-gradient(#000,#000)}
.lab-scanline{position:absolute;top:0;bottom:0;width:2px;background:rgba(246,225,164,.85);
  box-shadow:0 0 12px rgba(246,225,164,.8);animation:labSweep 2.4s linear infinite}
@keyframes labSweep{0%{left:2%}100%{left:96%}}
.lab-scanline{position:absolute;top:0;bottom:0;width:2px;background:rgba(246,225,164,.85);
  box-shadow:0 0 12px rgba(246,225,164,.8);animation:labSweep 2.4s linear infinite}
@keyframes labSweep{0%{left:2%}100%{left:96%}}
.lab-readout{font-size:9px;letter-spacing:.08em;color:var(--mist);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* sample bay where the vial sits */
.lab-bay{grid-column:2;grid-row:1 / span 2;position:relative;border-radius:var(--r-8,8px);
  background:radial-gradient(120% 80% at 50% 18%,rgba(var(--accent-rgb),.16),transparent 60%),linear-gradient(180deg,#100c08,#0a0705);
  box-shadow:inset 0 0 0 1px rgba(var(--accent-rgb),.2),inset 0 -16px 24px rgba(0,0,0,.6);
  display:flex;align-items:center;justify-content:center;overflow:hidden}
.lab-vial{height:150px;width:auto;position:relative;z-index:2}
.lab-bay-lip{position:absolute;left:8%;right:8%;bottom:14%;height:18px;border-radius:50%;
  background:radial-gradient(60% 100% at 50% 50%,rgba(var(--accent-rgb),.5),transparent 70%);filter:blur(3px)}
.lab-scan{position:absolute;left:0;right:0;height:30px;z-index:3;
  background:linear-gradient(180deg,transparent,rgba(246,225,164,.5),transparent);
  box-shadow:0 0 22px rgba(246,225,164,.5);opacity:0;mix-blend-mode:screen;animation:labScan 2.1s ease-in-out infinite}
@keyframes labScan{0%{top:6%}50%{top:78%}100%{top:6%}}
/* base strip: indicator LEDs + printer slot */
.lab-base{grid-column:1;grid-row:2;display:flex;align-items:center;justify-content:space-between;
  padding:0 4px;height:26px}
.lab-leds{display:flex;gap:7px}
.lab-leds i{width:6px;height:6px;border-radius:50%;background:rgba(var(--accent-rgb),.5)}
.lab-leds i:nth-child(1){animation:labPulse 1.1s ease-in-out infinite}
.lab-leds i:nth-child(2){animation:labPulse 1.1s ease-in-out .25s infinite}
.lab-leds i:nth-child(3){animation:labPulse 1.1s ease-in-out .5s infinite}
@keyframes labPulse{0%,100%{background:rgba(var(--accent-rgb),.35);box-shadow:none}50%{background:var(--accent);box-shadow:0 0 8px var(--accent)}}
.lab-slot{width:120px;height:6px;border-radius:4px;background:#05060a;
  box-shadow:inset 0 2px 4px rgba(0,0,0,.9),0 1px 0 rgba(var(--accent-rgb),.18)}

/* ============================================================
   SCENE 2 · CERTIFICATE OF ANALYSIS (printed)
   ============================================================ */
.cin-coa{width:min(86vw,468px);top:48%}
.coa-feed{position:absolute;left:50%;top:-12px;transform:translateX(-50%);width:74%;height:14px;border-radius:3px;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.5) 0 5px,rgba(255,255,255,.18) 5px 10px);opacity:0}
.coa-doc{position:relative;background:linear-gradient(180deg,#fbf7ee,#f1e7d2);
  border-radius:var(--r-8,8px);padding:26px 28px 22px;color:#2a2118;
  box-shadow:0 30px 70px rgba(0,0,0,.6),0 0 0 1px rgba(var(--accent-rgb),.35),inset 0 1px 0 rgba(255,255,255,.7);
  font-family:"IBM Plex Mono",monospace}
.coa-doc::before{content:"";position:absolute;inset:7px;border:1px solid rgba(120,92,40,.28);border-radius:5px;pointer-events:none}
.coa-doc-head{display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding-bottom:12px;margin-bottom:6px;border-bottom:1px solid rgba(120,92,40,.3)}
.coa-doc-meta{display:flex;flex-direction:column;align-items:flex-end;gap:3px;text-align:right;
  font-size:9px;letter-spacing:.13em;color:#6a4f24;text-transform:uppercase;line-height:1.4}
.coa-doc-brand{font-size:9.5px;letter-spacing:.13em;color:#6a4f24;text-transform:uppercase;line-height:1.4}
.coa-doc-lot{font-size:9.5px;letter-spacing:.1em;color:#8a6a32;white-space:nowrap}
.coa-doc-row{display:flex;justify-content:space-between;align-items:center;gap:14px;
  font-size:12px;padding:7px 0;border-bottom:1px dotted rgba(120,92,40,.28)}
.coa-doc-row span{color:#6b5c44;letter-spacing:.02em}
.coa-doc-row b{color:#241c12;font-weight:600;letter-spacing:.02em}
.coa-doc-row.hi b{color:#1f6b3a}
.coa-doc-sign{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;margin-top:14px}
.coa-doc-lab{font-size:9px;letter-spacing:.06em;color:#6a5736;max-width:60%;line-height:1.4}
.coa-doc-trace{font-size:8.5px;letter-spacing:.18em;text-transform:uppercase;color:#8a6a32}
/* purity stamp — slams onto the certificate */
.cin-stamp{position:absolute;right:-22px;bottom:-26px;width:138px;height:138px;
  display:flex;align-items:center;justify-content:center;opacity:0;
  transform:scale(1.7) rotate(-22deg);will-change:transform,opacity;filter:drop-shadow(0 8px 18px rgba(0,0,0,.45))}
.cin-stamp .stamp-svg{position:absolute;inset:0;width:100%;height:100%;animation:stampSpin 26s linear infinite}
.cin-stamp .stamp-ring-o{fill:none;stroke:#1f6b3a;stroke-width:2.4;opacity:.9}
.cin-stamp .stamp-ring-i{fill:none;stroke:#1f6b3a;stroke-width:1;opacity:.55}
.cin-stamp .stamp-text{fill:#1f6b3a;font-family:"IBM Plex Mono",monospace;font-size:9px;letter-spacing:.22em;font-weight:600}
.cin-stamp-core{position:relative;text-align:center;color:#1f6b3a;line-height:1}
.cin-stamp-core b{display:block;font-family:"Jost",sans-serif;font-weight:500;font-size:26px;letter-spacing:.01em}
.cin-stamp-core span{display:block;font-family:"IBM Plex Mono",monospace;font-size:8.5px;letter-spacing:.34em;margin-top:3px}
.cin-stamp-flash{position:absolute;inset:-30%;border-radius:50%;background:radial-gradient(closest-side,rgba(95,210,140,.55),transparent 70%);opacity:0}
@keyframes stampSpin{to{transform:rotate(360deg)}}

/* ============================================================
   SCENE 3 · PACKED INTO THE SHIPPING BOX  ·  true 3D corrugated mailer
   open top, two lid flaps, drops the vial in, folds shut, tapes the seam
   ============================================================ */
.cin-box{width:340px;height:300px;perspective:880px;perspective-origin:50% 34%}

/* soft contact shadow on the ground */
.box-ground{position:absolute;left:50%;bottom:48px;transform:translateX(-50%);
  width:236px;height:54px;border-radius:50%;
  background:radial-gradient(closest-side,rgba(0,0,0,.62),rgba(0,0,0,.34) 58%,transparent 78%);
  filter:blur(7px);z-index:0}

.ship-box{position:absolute;left:50%;bottom:96px;transform:translateX(-50%);
  width:var(--bw);height:var(--bh);transform-style:preserve-3d;z-index:2}

.box-3d{--bw:176px;--bd:128px;--bh:104px;
  --af:90deg;--ab:-90deg;--tape:0;
  position:absolute;left:50%;top:50%;width:var(--bw);height:var(--bh);
  transform-style:preserve-3d;
  transform:translate(-50%,-50%) rotateX(12deg) rotateZ(0deg) rotateY(0deg)}

/* ---- faces ---- */
.bf{position:absolute;left:50%;top:50%;
  background:linear-gradient(168deg,#e0bb78,#cb9d54 44%,#b0813c);
  box-shadow:inset 0 0 0 1px rgba(120,86,34,.45),inset 0 1px 0 rgba(255,246,222,.38),inset 0 -12px 22px rgba(88,62,24,.3)}
/* corrugated kraft micro-texture — finer flutes + fibre grain */
.bf::after{content:"";position:absolute;inset:0;opacity:.55;mix-blend-mode:multiply;
  background:
    repeating-linear-gradient(90deg,rgba(120,84,34,0) 0 3px,rgba(120,84,34,.09) 3px 4px),
    repeating-linear-gradient(0deg,rgba(150,110,50,0) 0 20px,rgba(88,60,22,.05) 20px 21px),
    radial-gradient(120% 80% at 50% 0%,rgba(255,246,216,.22),transparent 62%)}
.bf-front{width:var(--bw);height:var(--bh);transform:translate(-50%,-50%) translateZ(calc(var(--bd)/2));
  display:flex;align-items:center;justify-content:center}
.bf-back{width:var(--bw);height:var(--bh);transform:translate(-50%,-50%) rotateY(180deg) translateZ(calc(var(--bd)/2));
  background:linear-gradient(168deg,#6b4e23,#54401e);box-shadow:inset 0 0 24px rgba(0,0,0,.45)}
.bf-left{width:var(--bd);height:var(--bh);transform:translate(-50%,-50%) rotateY(-90deg) translateZ(calc(var(--bw)/2));
  background:linear-gradient(168deg,#7c5b2b,#5f4621);box-shadow:inset 0 0 22px rgba(0,0,0,.42)}
.bf-right{width:var(--bd);height:var(--bh);transform:translate(-50%,-50%) rotateY(90deg) translateZ(calc(var(--bw)/2));
  background:linear-gradient(168deg,#caa05c,#a87c39)}
.bf-bottom{width:var(--bw);height:var(--bd);transform:translate(-50%,-50%) rotateX(-90deg) translateZ(calc(var(--bh)/2));
  background:linear-gradient(168deg,#5b431f,#43320f);box-shadow:inset 0 0 34px rgba(0,0,0,.6)}

/* ---- shipping label on the front ---- */
.box-label{position:relative;z-index:2;background:linear-gradient(180deg,#fdfbf6,#f4efe4);border-radius:3px;padding:9px 13px 8px;text-align:center;
  box-shadow:0 6px 16px rgba(0,0,0,.34),inset 0 0 0 1px rgba(0,0,0,.09),inset 0 1px 0 rgba(255,255,255,.9);min-width:128px}
.box-label > span:not(.logo-mark):not(.box-barcode){display:block;font-family:"IBM Plex Mono",monospace;font-size:8px;letter-spacing:.16em;color:#6a5736;margin-top:4px}
.box-label .box-track{color:#1f6b3a;letter-spacing:.12em;margin-top:5px}
.box-barcode{display:block;height:15px;margin:6px 2px 0;border-radius:1px;
  background:repeating-linear-gradient(90deg,#20180f 0 1px,transparent 1px 2px,#20180f 2px 4px,transparent 4px 6px,#20180f 6px 9px,transparent 9px 10px)}

/* ---- lid flaps (hinge along the top rim) ---- */
.flap{position:absolute;left:50%;top:50%;width:var(--bw);height:calc(var(--bd)/2 + 0.5px);
  transform-origin:50% 100%;
  background:linear-gradient(180deg,#d2a863,#bb9047 60%,#a87c39);
  box-shadow:inset 0 1px 0 rgba(255,242,214,.45),inset 0 0 0 1px rgba(120,86,34,.35),0 6px 16px rgba(0,0,0,.3)}
.flap::after{content:"";position:absolute;inset:0;opacity:.45;mix-blend-mode:multiply;
  background:repeating-linear-gradient(90deg,rgba(120,84,34,0) 0 5px,rgba(120,84,34,.08) 5px 6px)}
.flap-front{transform:translate(-50%,-100%) translateY(calc(var(--bh)/-2)) translateZ(calc(var(--bd)/2)) rotateX(var(--af))}
.flap-back{transform:translate(-50%,-100%) translateY(calc(var(--bh)/-2)) translateZ(calc(var(--bd)/-2)) rotateX(var(--ab))}

/* ---- packing tape over the centre seam ---- */
.box-tape{position:absolute;left:50%;top:50%;width:34px;height:var(--bd);transform-origin:50% 0%;
  transform:translate(-50%,-50%) translateY(calc(var(--bh)/-2 - 0.6px)) rotateX(90deg) scaleY(var(--tape));
  background:linear-gradient(90deg,rgba(214,228,236,.55),rgba(236,246,252,.82) 50%,rgba(214,228,236,.55));
  box-shadow:0 0 0 1px rgba(120,140,150,.3),inset 0 0 8px rgba(255,255,255,.5)}

/* ---- the vial, dropped in from above; lives outside the preserve-3d box (flat parent) so it keeps its width; painted before .ship-box so the box rim hides it ---- */
.box-vial{position:absolute;left:50%;top:74px;transform:translateX(-50%);height:132px;width:88px;z-index:1}

/* ============================================================
   SCENE 4 · COURIER TRUCK
   ============================================================ */
.cin-truck{width:340px;height:200px}
.truck{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:300px;height:150px}
.truck-cargo{position:absolute;left:0;bottom:30px;width:190px;height:108px;border-radius:7px 6px 6px 7px;
  background:linear-gradient(180deg,#f4ecd8,#dccdb0 60%,#cdbd99);
  box-shadow:inset 0 2px 0 rgba(255,255,255,.7),inset 0 -14px 22px rgba(0,0,0,.16),0 22px 44px rgba(0,0,0,.5);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px}
.truck-cargo::before{content:"";position:absolute;left:12px;top:12px;bottom:12px;width:4px;border-radius:3px;
  background:repeating-linear-gradient(180deg,rgba(0,0,0,.10) 0 6px,transparent 6px 12px)}
.truck-brand{font-family:"Jost",sans-serif;font-weight:500;font-size:15px;letter-spacing:.2em;color:#2a2118}
.truck-sub{font-family:"IBM Plex Mono",monospace;font-size:8px;letter-spacing:.16em;text-transform:uppercase;color:#6a5736}
.truck-cab{position:absolute;left:190px;bottom:30px;width:74px;height:72px;border-radius:6px 10px 6px 6px;
  background:linear-gradient(180deg,#d6a85e,#b1813f);
  box-shadow:inset 0 2px 0 rgba(255,255,255,.3),0 18px 32px rgba(0,0,0,.45);
  clip-path:polygon(0 26%,46% 0,100% 0,100% 100%,0 100%)}
.truck-window{position:absolute;left:8px;top:20px;width:42px;height:24px;border-radius:4px 8px 3px 3px;
  background:linear-gradient(150deg,#0c1418,#22323a);box-shadow:inset 0 0 0 1px rgba(0,0,0,.3);
  clip-path:polygon(0 38%,62% 0,100% 0,100% 100%,0 100%)}
.truck-bumper{position:absolute;left:258px;bottom:30px;width:10px;height:30px;border-radius:0 4px 4px 0;background:#3a2c16}
.truck-wheel{position:absolute;bottom:2px;width:42px;height:42px;border-radius:50%;
  background:radial-gradient(circle at 50% 50%,#2a2a2e 0 36%,#15151a 37% 62%,#0a0a0d 63%);
  box-shadow:0 6px 14px rgba(0,0,0,.5),inset 0 0 0 1px rgba(var(--accent-rgb),.25)}
.truck-wheel::before{content:"";position:absolute;inset:30%;border-radius:50%;
  background:radial-gradient(circle,#caa45e,#7a5a28);box-shadow:0 0 0 2px rgba(0,0,0,.35)}
.truck-wheel::after{content:"";position:absolute;inset:30%;border-radius:50%;
  background:repeating-conic-gradient(rgba(0,0,0,.35) 0 12deg,transparent 12deg 30deg)}
.truck-wheel-r{left:34px}
.truck-wheel-f{left:196px}
.truck-rolling .truck-wheel::after{animation:wheelSpin .5s linear infinite}
@keyframes wheelSpin{to{transform:rotate(360deg)}}
.speed-lines{position:absolute;left:-6%;top:50%;transform:translateY(-50%);width:46%;height:90px;opacity:0}
.speed-lines i{position:absolute;left:0;height:3px;border-radius:3px;
  background:linear-gradient(90deg,transparent,rgba(var(--accent-rgb),.8));box-shadow:0 0 12px rgba(var(--accent-rgb),.5)}
.speed-lines i:nth-child(1){top:24%;width:70%}
.speed-lines i:nth-child(2){top:50%;width:100%}
.speed-lines i:nth-child(3){top:76%;width:54%}

/* ============================================================
   BRAND LOGO TYPOGRAPHY — ELYRIA · BIO lockup, dark-ink variant
   matches the nav wordmark (Jost, wide tracking, hairline rule)
   for use on the cinema's cream surfaces (COA / box / truck)
   ============================================================ */
.logo-mark{display:inline-flex;flex-direction:column;align-items:center;line-height:1;color:#2a2118}
.lm-name{font-family:"Jost",sans-serif;font-weight:300;letter-spacing:.34em;text-transform:uppercase;padding-left:.34em;font-size:1em}
.lm-sub{display:flex;align-items:center;gap:6px;width:100%;justify-content:center;margin-top:.46em;
  font-family:"Jost",sans-serif;font-weight:400;font-size:.44em;letter-spacing:.5em;text-transform:uppercase;padding-left:.5em;color:#8a6a32}
.lm-sub::before,.lm-sub::after{content:"";height:1px;flex:1;min-width:7px;background:linear-gradient(90deg,transparent,rgba(138,106,50,.6),transparent)}
.coa-logo{font-size:16px;align-items:flex-start}
.coa-logo .lm-sub{justify-content:flex-start}
.box-logo{font-size:12px}
.truck-logo{font-size:16px}

/* hero collapses to a single screen — the story auto-loops, no scroll runway */
.hero-scroll{height:100svh!important}
@supports (height:100dvh){ .hero-scroll{height:100dvh!important} }

/* caption ribbon reflects the active scene — rides in flow above the supporting copy so it never overlaps the trust row */
.cin-cap{order:-1;align-self:center;max-width:90%;
  font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--accent-dim);white-space:nowrap;opacity:0;transition:opacity .4s,color .4s;text-align:center}

@media (prefers-reduced-motion: reduce){
  .cin-stamp .stamp-svg,.lab-led,.lab-leds i,.truck-rolling .truck-wheel::after{animation:none}
}
@media(max-width:860px){
  .cinema{display:none!important}
  .synth-hud{display:none!important}
  .scroll-hint{display:none!important}
  .cin-cap{display:none!important}
}
@media(max-width:760px){
  .cin-lab{width:92vw} .cin-coa{width:92vw}
  .cin-cap{white-space:normal}
}


/* ============================================================
   POLISH — keyboard focus + print (added site-wide)
   ============================================================ */
:focus-visible{outline:2px solid #e7c06a;outline-offset:2px;border-radius:3px}
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid #e7c06a;outline-offset:2px}
input:focus-visible,textarea:focus-visible{outline-offset:0}
:focus:not(:focus-visible){outline:none}

@media print{
  .promobar,.nav,#nav,.mobile-nav,.cursor-dot,.cursor-ring,.grain,.toasts,#tweaks,.tweaks,.cart-btn,.hamburger,.drawer,#drawer,.cart-backdrop,.co-modal,.co-backdrop,.thanks-backdrop,.thanks-modal,.cmdk,.cmdk-backdrop,.gate,#gate,.pdp-photo-slot,.skip-link,.compare-tray,.recent-rail{display:none !important}
  html,body{background:#fff !important}
  body{color:#141414 !important}
  main,.page-main{padding-top:0 !important}
  a{color:#141414 !important;text-decoration:none !important}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact;box-shadow:none !important}
}
