/* ==========================================================================
   EpoxySuite v2 — WebGL scroll journey
   The canvas is the page. DOM is only type, chrome and CTAs.
   ========================================================================== */

:root{
  --ink:#050506;
  --text:#F2F2F4;
  --muted:#8E8E99;
  --yellow:#FFC400;
  --ease:cubic-bezier(.16,1,.3,1);
  --gutter:clamp(20px,4.5vw,64px);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto !important}

body{
  margin:0;background:var(--ink);color:var(--text);
  font-family:'Inter',system-ui,sans-serif;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
a{color:inherit;text-decoration:none}

/* ---------------- the world ---------------- */
#stage{position:fixed;inset:0;z-index:0}
#gl{display:block;width:100%;height:100%}

/* film grain + vignette sell the "rendered" look */
#grain{
  position:absolute;inset:-50%;z-index:2;pointer-events:none;opacity:.038;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 6s steps(6) infinite;
}
@keyframes grain{
  0%{transform:translate(0,0)}  16%{transform:translate(-4%,-3%)}
  33%{transform:translate(3%,-4%)} 50%{transform:translate(-3%,3%)}
  66%{transform:translate(4%,2%)} 83%{transform:translate(-2%,-2%)}
  100%{transform:translate(0,0)}
}
#vig{
  position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(ellipse at 50% 50%,transparent 42%,rgba(0,0,0,.55) 100%);
}
/* the punch through the glass */
#flash{position:absolute;inset:0;z-index:4;pointer-events:none;opacity:0;background:#fff;will-change:opacity}

/* the scroll track: gives the page its length, nothing more */
#track{height:1050vh;position:relative;z-index:1;pointer-events:none}

/* ---------------- loader ---------------- */
#loader{
  position:fixed;inset:0;z-index:200;background:var(--ink);
  display:grid;place-content:center;justify-items:center;gap:1.6rem;
  transition:opacity .9s var(--ease),visibility .9s;
}
#loader.is-done{opacity:0;visibility:hidden}
.loader__mark{
  font-family:'Archivo',sans-serif;font-weight:800;
  font-size:clamp(1.1rem,3.4vw,1.8rem);letter-spacing:.42em;text-indent:.42em;
}
.loader__bar{width:min(240px,52vw);height:1px;background:rgba(255,255,255,.14);overflow:hidden}
.loader__bar i{display:block;height:100%;width:0%;background:var(--yellow);transition:width .35s var(--ease)}
.loader__pct{font-size:.7rem;letter-spacing:.2em;color:var(--muted);font-variant-numeric:tabular-nums}

/* ---------------- header ---------------- */
.hdr{
  position:fixed;top:0;left:0;right:0;z-index:60;
  display:flex;align-items:center;justify-content:space-between;
  padding:clamp(14px,2.2vw,26px) var(--gutter);
  mix-blend-mode:difference;
}
.brand{display:flex;align-items:center;gap:.6rem;font-family:'Archivo',sans-serif;font-weight:700;letter-spacing:-.02em;font-size:1rem}
.brand__dot{width:9px;height:9px;border-radius:2px;background:var(--yellow)}
.hdr .btn{
  font-size:.78rem;font-weight:600;letter-spacing:.02em;
  padding:.62em 1.15em;border:1px solid rgba(255,255,255,.45);border-radius:999px;
  transition:background .35s var(--ease),color .35s var(--ease);
}
.hdr .btn:hover{background:#fff;color:#000}

/* ---------------- scroll HUD ---------------- */
.hud{
  position:fixed;right:var(--gutter);top:50%;transform:translateY(-50%);
  z-index:60;display:flex;flex-direction:column;align-items:center;gap:.9rem;
  font-size:.58rem;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);
}
.hud__track{width:1px;height:26vh;background:rgba(255,255,255,.14);position:relative;overflow:hidden}
.hud__track i{position:absolute;inset:0 0 auto 0;height:0%;background:var(--yellow);transition:height .12s linear}
.hud__label,.hud__chapter{writing-mode:vertical-rl}
.hud__chapter{color:var(--text)}
@media (max-width:820px){.hud{display:none}}

/* ---------------- overlay copy ---------------- */
.copy{
  position:fixed;inset:0;z-index:50;pointer-events:none;
  transition:opacity .45s var(--ease);
}
/* once the footer is on screen the journey is over - clear the overlay so the
   last chapter is not sitting behind the footer */
html.footer-in .copy,
html.footer-in .hud{opacity:0}
/* .ch sets pointer-events:auto for its CTA, so the faded overlay would still
   swallow clicks aimed at the footer underneath it */
html.footer-in .copy,
html.footer-in .copy .ch{pointer-events:none}
/* guarantees the type stays readable whatever the camera is looking at */
.copy::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(100deg,rgba(5,5,6,.86) 0%,rgba(5,5,6,.6) 26%,rgba(5,5,6,0) 58%),
    linear-gradient(0deg,rgba(5,5,6,.82) 0%,rgba(5,5,6,.25) 26%,rgba(5,5,6,0) 48%);
}
.ch{
  position:absolute;left:var(--gutter);bottom:clamp(64px,11vh,120px);
  width:min(560px,calc(100vw - var(--gutter)*2));
  opacity:0;visibility:hidden;
  transform:translateY(28px);
  will-change:opacity,transform;
}
.ch.is-live{pointer-events:auto;visibility:visible}

.ch__eyebrow{
  display:inline-flex;align-items:center;gap:.7em;margin-bottom:1.15em;
  font-size:.64rem;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--yellow);
}
.ch__eyebrow::before{content:'';width:22px;height:1px;background:currentColor}

.ch h1,.ch h2{
  margin:0;font-family:'Archivo',sans-serif;font-weight:800;
  font-size:clamp(2.3rem,6.4vw,5.2rem);
  line-height:.92;letter-spacing:-.035em;text-transform:uppercase;
  text-wrap:balance;
}
.ch h2.big{font-size:clamp(3rem,10vw,8rem);letter-spacing:-.05em}
.ch h1 em{font-style:normal;color:var(--yellow)}
.ch p{
  margin:1.35rem 0 0;max-width:44ch;
  font-size:clamp(.92rem,1.15vw,1.04rem);line-height:1.55;color:var(--muted);
}
.tick{font-variant-numeric:tabular-nums}

.ch__cta{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;margin-top:2.2rem}
.ch__note{font-size:.76rem;color:var(--muted)}

.appstore{
  display:inline-flex;align-items:center;gap:.8em;
  background:var(--yellow);color:#0A0A0C;
  padding:.8em 1.4em .8em 1.15em;border-radius:12px;font-weight:700;line-height:1.1;
  transition:transform .35s var(--ease),box-shadow .35s var(--ease);
  box-shadow:0 14px 44px -14px rgba(255,196,0,.7);
}
.appstore:hover{transform:translateY(-3px);box-shadow:0 22px 56px -14px rgba(255,196,0,.85)}
.appstore svg{width:24px;height:24px;flex:none}
.appstore .sm{display:block;font-size:.58rem;letter-spacing:.09em;text-transform:uppercase;opacity:.72}
.appstore .lg{display:block;font-size:.98rem;letter-spacing:-.02em}

/* layer ticker inside the pour chapter */
.layers{list-style:none;margin:1.8rem 0 0;padding:0;display:flex;flex-direction:column;gap:.1rem}
.layers li{
  display:grid;grid-template-columns:2.1em 1fr auto;gap:.9rem;align-items:baseline;
  padding:.5rem 0;font-size:.88rem;
  border-bottom:1px solid rgba(255,255,255,.07);
  opacity:.22;transform:translateX(-6px);
  transition:opacity .5s var(--ease),transform .5s var(--ease),color .5s var(--ease);
  color:var(--muted);
}
.layers li.is-on{opacity:1;transform:none;color:var(--text)}
.layers li b{font-size:.62rem;letter-spacing:.14em;color:var(--muted)}
.layers li.is-on b{color:var(--yellow)}
.layers li span{font-family:'Archivo',sans-serif;font-weight:700;font-variant-numeric:tabular-nums}

/* ---------------- fallbacks ---------------- */
.fallback{position:relative;z-index:100;padding:12vh var(--gutter);max-width:60ch}
.fallback h1{font-family:'Archivo',sans-serif;text-transform:uppercase}
.fallback a{color:var(--yellow);text-decoration:underline}

/* Reduced motion / no WebGL: the journey collapses into a readable document. */
html.static #stage,html.static .hud,html.static #loader{display:none}
html.static #track{height:auto}
html.static .copy{position:static;pointer-events:auto}
html.static .ch{
  position:static;opacity:1 !important;visibility:visible !important;transform:none !important;
  width:auto;max-width:56ch;margin:0 auto;padding:12vh var(--gutter);
  border-bottom:1px solid rgba(255,255,255,.08);
}
html.static .layers li{opacity:1;transform:none;color:var(--text)}

@media (max-width:640px){
  .ch{bottom:clamp(40px,8vh,80px)}
  .ch p{font-size:.9rem}
}

/* ==========================================================================
   FOOTER
   Real document flow, scrolling in over the fixed canvas once the journey ends.
   ========================================================================== */
.ft{
  position:relative;z-index:55;
  background:var(--ink);
  border-top:1px solid rgba(255,255,255,.09);
  padding:clamp(48px,7vw,84px) var(--gutter) clamp(24px,3vw,36px);
}
.ft__inner{
  max-width:1240px;margin-inline:auto;
  display:grid;gap:clamp(2rem,4vw,3.2rem);
  grid-template-columns:1.6fr 1fr 1fr 1fr 1.4fr;
  align-items:start;
}
.ft__brand{display:flex;gap:1rem;align-items:flex-start}
.ft__logo{width:56px;height:56px;flex:none;object-fit:contain}
.ft__brand strong{
  display:block;font-family:'Archivo',sans-serif;font-weight:800;
  font-size:1.05rem;letter-spacing:-.02em;margin-bottom:.45rem;
}
.ft__brand span{display:block;font-size:.84rem;line-height:1.55;color:var(--muted)}

.ft__col,.ft__contact{display:flex;flex-direction:column;gap:.62rem}
.ft h3{
  margin:0 0 .35rem;font-family:'Inter',sans-serif;
  font-size:.64rem;font-weight:600;letter-spacing:.2em;text-transform:uppercase;
  color:var(--muted);
}
.ft__col a{
  font-size:.88rem;color:var(--text);width:max-content;max-width:100%;
  border-bottom:1px solid transparent;transition:border-color .3s var(--ease),color .3s var(--ease);
}
.ft__col a:hover{border-bottom-color:var(--yellow)}
.ft__soon{font-size:.88rem;color:var(--muted)}

.ft__email{
  font-family:'Archivo',sans-serif;font-weight:700;
  font-size:clamp(1.05rem,1.7vw,1.3rem);letter-spacing:-.02em;
  color:var(--yellow);width:max-content;max-width:100%;word-break:break-word;
  border-bottom:1px solid transparent;transition:border-color .3s var(--ease);
}
.ft__email:hover{border-bottom-color:var(--yellow)}
.ft__contact p{margin:.2rem 0 0;font-size:.82rem;line-height:1.55;color:var(--muted)}

.ft__base{
  max-width:1240px;margin:clamp(2.4rem,4vw,3.4rem) auto 0;
  padding-top:1.4rem;border-top:1px solid rgba(255,255,255,.07);
  display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;align-items:center;
  font-size:.76rem;color:var(--muted);
}
.ft__next{display:inline-flex;align-items:center;gap:.7em;flex-wrap:wrap;color:var(--text)}
.ft__next em{
  font-style:normal;font-size:.6rem;font-weight:700;
  letter-spacing:.14em;text-transform:uppercase;color:#0A0A0C;
  background:var(--yellow);border-radius:999px;padding:.35em .7em;
}

@media (max-width:1180px){
  .ft__inner{grid-template-columns:repeat(3,1fr)}
  .ft__brand{grid-column:1 / -1}
  .ft__contact{grid-column:1 / -1}
}
@media (max-width:760px){
  .ft__inner{grid-template-columns:1fr 1fr}
}
@media (max-width:560px){
  .ft__inner{grid-template-columns:1fr}
}

/* the static fallback shows the footer as an ordinary page section */
html.static .ft{border-top-color:rgba(255,255,255,.12)}
