/* =========================================================
   FLAR3 motion layer — effects, scroll storytelling, micro-interactions.
   Everything here is progressive: without JS (or with reduced motion) the page reads normally.
   ========================================================= */
.js main{animation:pageIn .6s var(--ease) both}
@keyframes pageIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.intro main,.enter main{animation:none}

/* ---------- cursor glow (desktop) ---------- */
.cursor-glow{position:fixed;left:0;top:0;width:34rem;height:34rem;margin:-17rem 0 0 -17rem;border-radius:50%;pointer-events:none;z-index:0;
  background:radial-gradient(closest-side,rgba(255,91,53,.075),rgba(141,125,255,.03) 55%,transparent 70%);mix-blend-mode:screen;opacity:0;transition:opacity .6s}
.cursor-glow.on{opacity:1}
.cursor-dot{position:fixed;left:0;top:0;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--accent);pointer-events:none;z-index:60;box-shadow:0 0 14px 3px rgba(255,91,53,.55);opacity:0;transition:opacity .3s,width .25s,height .25s,margin .25s}
.cursor-dot.on{opacity:1}
.cursor-dot.big{width:38px;height:38px;margin:-19px 0 0 -19px;background:rgba(255,91,53,.12);border:1px solid var(--accent-line);box-shadow:none}

/* ---------- hero ---------- */
.hero-canvas{position:absolute;inset:0;width:100%;height:100%}
.hero-art{will-change:transform;transition:transform .9s var(--ease)}
.wm-l{display:inline-block}
.js .wordmark .wm-l{opacity:0;transform:translateY(.35em) rotate(4deg);filter:blur(8px);animation:wmIn 1s var(--ease) forwards;animation-delay:calc(var(--hd,0s) + .05s + var(--li,0) * .06s)}
.intro{--hd:1.45s}.enter{--hd:.45s}
@keyframes wmIn{to{opacity:1;transform:none;filter:none}}
.js .hero-content>*:not(.wordmark){opacity:0;animation:heroIn .9s var(--ease) forwards}
.js .hero-content>*:nth-child(1){animation-delay:calc(var(--hd,0s) + .05s)}
.js .hero-content>*:nth-child(3){animation-delay:calc(var(--hd,0s) + .35s)}
.js .hero-content>*:nth-child(4){animation-delay:calc(var(--hd,0s) + .45s)}
.js .hero-content>*:nth-child(5){animation-delay:calc(var(--hd,0s) + .55s)}
.js .hero-content>*:nth-child(6){animation-delay:calc(var(--hd,0s) + .65s)}
.js .hero-content>*:nth-child(7){animation-delay:calc(var(--hd,0s) + .75s)}
@keyframes heroIn{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.tagline em{background:linear-gradient(90deg,#ff5b35,#ff9a6b,#8d7dff,#ff5b35);background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shine 7s linear infinite}
@keyframes shine{to{background-position:300% 0}}
.wordmark .three::after{animation:beacon 2.4s ease-in-out infinite}
@keyframes beacon{0%,100%{box-shadow:0 0 30px 8px rgba(255,91,53,.55)}50%{box-shadow:0 0 50px 16px rgba(255,91,53,.85)}}
.scroll-hint{position:absolute;left:50%;bottom:1.6rem;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:.5rem;font-family:var(--mono);font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;color:var(--dim);z-index:2}
.scroll-hint i{width:1px;height:2.6rem;background:linear-gradient(var(--accent),transparent);animation:cue 2.2s ease-in-out infinite;transform-origin:top}
@keyframes cue{0%,100%{transform:scaleY(.35)}50%{transform:scaleY(1)}}

/* ---------- stats band ---------- */
.stats{display:grid;grid-template-columns:repeat(5,1fr);border:1px solid var(--line);border-radius:18px;overflow:hidden;background:var(--bg2)}
.stat{padding:1.4rem 1.2rem;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:.3rem;position:relative}
.stat:last-child{border-right:0}
.stat b{font-family:var(--display);font-weight:600;font-size:clamp(2rem,4vw,3rem);letter-spacing:-.04em;line-height:1;color:var(--text)}
.stat b span{color:var(--accent)}
.stat p{font-size:.8rem;color:var(--muted)}
.stat::after{content:"";position:absolute;left:0;bottom:0;height:2px;width:0;background:var(--accent);transition:width 1.4s var(--ease)}
.stats.in .stat::after{width:100%}
@media (max-width:860px){.stats{grid-template-columns:1fr 1fr}.stat{border-bottom:1px solid var(--line)}.stat:nth-child(2n){border-right:0}.stat:last-child{grid-column:1/-1}}

/* ---------- cards: tilt + cursor highlight ---------- */
.fx-tilt{transform-style:preserve-3d;transition:transform .5s var(--ease),border-color .25s;will-change:transform;position:relative}
.fx-tilt::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s;
  background:radial-gradient(22rem 22rem at var(--mx,50%) var(--my,50%),rgba(255,91,53,.10),transparent 45%)}
.fx-tilt:hover::after{opacity:1}
.fx-tilt.v::after{background:radial-gradient(22rem 22rem at var(--mx,50%) var(--my,50%),rgba(141,125,255,.13),transparent 45%)}
.fx-tilt.s::after{background:radial-gradient(22rem 22rem at var(--mx,50%) var(--my,50%),rgba(216,195,162,.11),transparent 45%)}
.btn.primary{position:relative;overflow:hidden;transition:transform .35s var(--ease),background .2s,box-shadow .3s}
.btn.primary:hover{box-shadow:0 10px 40px -8px rgba(255,91,53,.6)}
.btn.primary::before{content:"";position:absolute;top:0;left:-60%;width:40%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.45),transparent);transform:skewX(-20deg);animation:sweep 4.5s ease-in-out infinite}
@keyframes sweep{0%,70%{left:-60%}100%{left:130%}}

/* ---------- staggered children ---------- */
.js .stagger>*{opacity:0;transform:translateY(22px) scale(.98);transition:opacity .7s ease,transform .8s var(--ease)}
.js .stagger.in>*{opacity:1;transform:none}

/* ---------- SVG line draw ---------- */
.js .draw path:not([stroke-dasharray]),.js .draw-lines path:not([stroke-dasharray]){stroke-dasharray:var(--len,600);stroke-dashoffset:var(--len,600);transition:stroke-dashoffset 1.8s var(--ease)}
.js .draw.in path,.js .draw-lines.in path{stroke-dashoffset:0}
.eco-svg .eco-node circle:first-child{transition:transform .5s var(--ease);transform-box:fill-box;transform-origin:center}
.eco-svg .eco-node.on circle:first-child{transform:scale(1.06)}
.eco-orbit{animation:spin 30s linear infinite;transform-origin:300px 275px}
@keyframes spin{to{transform:rotate(360deg)}}
.eco-core{animation:corePulse 3s ease-in-out infinite;transform-origin:300px 275px}
@keyframes corePulse{0%,100%{opacity:.06}50%{opacity:.22}}

/* ---------- SOS flow lights up ---------- */
.flow-step{transition:opacity .5s}
.js .flow.scrolly .flow-step{opacity:.32}
.js .flow.scrolly .flow-step.lit{opacity:1}
.flow-step .fs-n{transition:background .4s,color .4s,box-shadow .4s,border-color .4s}
.js .flow.scrolly .flow-step.lit .fs-n{background:var(--accent);color:#170905;border-color:var(--accent);box-shadow:0 0 0 6px rgba(255,91,53,.12),0 0 28px rgba(255,91,53,.45)}
.fs-line{position:relative;overflow:hidden}
.fs-line::after{content:"";position:absolute;inset:0;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease)}
.js .flow.scrolly .flow-step.lit .fs-line::after{transform:scaleX(1)}
.flow-progress{height:2px;background:var(--line);border-radius:2px;overflow:hidden}
.flow-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),#ff9a6b);transition:width .3s linear}

/* ---------- storyboard: active frame ---------- */
.frame{transition:transform .6s var(--ease),border-color .4s,box-shadow .5s,opacity .5s}
.js .story-run .frame{opacity:.45}
.js .story-run .frame.active{opacity:1;transform:translateY(-6px);box-shadow:0 24px 60px -30px rgba(255,91,53,.55)}
.js .story-run .frame.past{opacity:.8}
.scene svg{transition:transform .8s var(--ease)}
.frame.active .scene svg{transform:scale(1.08)}

/* ---------- gear chain signal pulse ---------- */
.carrow::before{content:"";position:absolute;top:-2.5px;left:0;width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px 2px rgba(255,91,53,.8);opacity:0}
.chain.live .carrow::before{animation:travel 2.4s linear infinite}
.chain.live .carrow:nth-of-type(2)::before{animation-delay:.6s}
.chain.live .carrow:nth-of-type(3)::before{animation-delay:1.2s}
@keyframes travel{0%{left:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{left:calc(100% - 6px);opacity:0}}
.chain.live .cn.end{animation:endGlow 2.4s ease-in-out infinite}
@keyframes endGlow{0%,60%,100%{box-shadow:none}80%{box-shadow:0 0 0 4px rgba(255,91,53,.15),0 0 24px rgba(255,91,53,.4)}}
@media (max-width:860px){
  .carrow::before{left:-2.5px;top:0}
  @keyframes travel{0%{top:0;opacity:0}15%{opacity:1}85%{opacity:1}100%{top:calc(100% - 6px);opacity:0}}
}
.p-visual svg{transition:transform .7s var(--ease)}
.product:hover .p-visual svg{transform:translateY(-6px) scale(1.06) rotate(-2deg)}
.p-visual svg circle[fill="#ff5b35"]{animation:led 2.2s ease-in-out infinite}
@keyframes led{0%,100%{opacity:1}50%{opacity:.45}}

/* ---------- timeline fill ---------- */
.timeline::before{background:var(--line2)!important}
.timeline::after{content:"";position:absolute;left:0;top:2.55rem;height:1px;width:0;background:linear-gradient(90deg,var(--accent),var(--violet));box-shadow:0 0 10px rgba(255,91,53,.6);transition:width 2.2s var(--ease)}
.timeline.in::after{width:100%}
.js .timeline .phase{opacity:0;transform:translateY(18px);transition:opacity .6s,transform .7s var(--ease)}
.js .timeline.in .phase{opacity:1;transform:none}
.timeline.in .phase:nth-child(2){transition-delay:.35s}.timeline.in .phase:nth-child(3){transition-delay:.7s}
.timeline.in .phase:nth-child(4){transition-delay:1.05s}.timeline.in .phase:nth-child(5){transition-delay:1.4s}
.phase .pdot{transition:background .4s,box-shadow .4s}
.timeline.in .phase .pdot{background:var(--accent);box-shadow:0 0 0 5px rgba(255,91,53,.14)}
.timeline.in .phase:nth-child(n+4) .pdot{background:var(--violet);box-shadow:0 0 0 5px rgba(141,125,255,.16)}
@media (max-width:860px){.timeline::after{display:none}}

/* ---------- "No ads. Ever." ---------- */
.stand .st-w{display:inline-block}
.js .stand .st-w{opacity:0;transform:translateY(.4em) skewY(6deg);transition:opacity .8s ease,transform 1s var(--ease)}
.js .stand.in .st-w{opacity:1;transform:none}
.js .stand.in .st-w:nth-child(2){transition-delay:.15s}
.js .stand.in em{transition-delay:.45s}
.stand em{position:relative}
.stand em::after{content:"";position:absolute;left:0;bottom:.12em;height:.06em;width:0;background:var(--accent);transition:width 1.1s var(--ease) .9s;box-shadow:0 0 20px rgba(255,91,53,.7)}
.stand.in em::after{width:100%}
.marquee{overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:1.1rem 0;-webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.marquee-track{display:flex;width:max-content;gap:2.6rem;animation:marq 26s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee span{font-family:var(--display);font-size:clamp(1.3rem,3vw,2.2rem);letter-spacing:-.02em;white-space:nowrap;color:var(--soft);display:flex;align-items:center;gap:2.6rem}
.marquee span::after{content:"";width:.5rem;height:.5rem;border-radius:50%;background:var(--accent);box-shadow:0 0 12px rgba(255,91,53,.7)}
.marquee span em{font-family:var(--serif);font-style:italic;color:var(--accent)}
@keyframes marq{to{transform:translateX(-50%)}}

/* ---------- table: rows sweep in ---------- */
.js .tbl.fx tbody tr{opacity:0;transform:translateX(-14px);transition:opacity .5s,transform .6s var(--ease)}
.js .tbl.fx.in tbody tr{opacity:1;transform:none}
.tbl.fx.in tbody tr:nth-child(2){transition-delay:.1s}.tbl.fx.in tbody tr:nth-child(3){transition-delay:.2s}
.tbl.fx.in tbody tr:nth-child(4){transition-delay:.3s}.tbl.fx.in tbody tr:nth-child(5){transition-delay:.4s}.tbl.fx.in tbody tr:nth-child(6){transition-delay:.5s}
.tbl .dotc{transform:scale(0);transition:transform .5s cubic-bezier(.3,1.6,.5,1) .6s}
.tbl.fx.in .dotc{transform:scale(1)}
.tbl tbody tr{transition:background .2s}
.tbl tbody tr:hover{background:rgba(255,255,255,.025)}

/* ---------- phone mockup float ---------- */
.phone{animation:float 6s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-12px) rotate(1deg)}}
.sos-btn{animation:sosPulse 2.2s ease-in-out infinite}
@keyframes sosPulse{0%,100%{box-shadow:0 0 0 .7rem rgba(255,91,53,.12),0 0 0 1.5rem rgba(255,91,53,.05),0 20px 50px -10px rgba(255,91,53,.55)}50%{box-shadow:0 0 0 1rem rgba(255,91,53,.16),0 0 0 2.1rem rgba(255,91,53,.06),0 20px 60px -6px rgba(255,91,53,.75)}}
.ph-bar i{animation:barGrow 5s var(--ease) infinite alternate}
@keyframes barGrow{from{width:30%}to{width:72%}}
.dash{animation:float 7s ease-in-out infinite}
.map svg circle[r="9"]{animation:mapPing 2.6s ease-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes mapPing{0%{transform:scale(.6);opacity:1}100%{transform:scale(2.2);opacity:0}}

/* ---------- SOS demo ---------- */
.demo{display:grid;grid-template-columns:1fr 1.15fr;gap:3rem;align-items:center}
.demo-stage{position:relative;border:1px solid var(--accent-line);border-radius:24px;padding:3.6rem 1.6rem 1.6rem;background:radial-gradient(30rem 20rem at 50% 0%,rgba(255,91,53,.12),transparent 70%),var(--bg2);min-height:29rem;display:flex;flex-direction:column;align-items:center;gap:1rem;overflow:hidden}
.demo-label{position:absolute;top:1rem;left:1rem}
.demo-reset{position:absolute;top:.8rem;right:.8rem}
.hold{position:relative;width:13rem;height:13rem;border-radius:50%;display:grid;place-items:center;margin-top:1.6rem;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.hold svg.ring{position:absolute;inset:0;transform:rotate(-90deg)}
.hold svg.ring circle{fill:none;stroke-width:5}
.hold .track{stroke:rgba(255,255,255,.08)}
.hold .fill{stroke:#fff;stroke-linecap:round;stroke-dasharray:578;stroke-dashoffset:578}
.hold .core{width:74%;height:74%;border-radius:50%;background:radial-gradient(circle at 40% 35%,#ff7a57,var(--accent) 55%,#d23d1c);display:grid;place-items:center;text-align:center;box-shadow:0 0 0 1rem rgba(255,91,53,.1),0 24px 60px -12px rgba(255,91,53,.6);transition:transform .2s}
.hold.pressing .core{transform:scale(.95)}
.hold .core b{font-family:var(--display);font-size:2.4rem;letter-spacing:.06em;color:#fff;display:block;line-height:1}
.hold .core span{font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.85)}
.demo-count{font-family:var(--display);font-size:6rem;font-weight:600;line-height:1;letter-spacing:-.04em;margin-top:2rem}
.demo-status{font-size:.86rem;color:var(--muted);text-align:center;min-height:1.4em}
.demo-list{width:100%;display:flex;flex-direction:column;gap:.45rem}
.demo-row{display:grid;grid-template-columns:auto 1fr auto;gap:.8rem;align-items:center;padding:.6rem .8rem;border:1px solid var(--line);border-radius:12px;background:var(--surface);opacity:0;transform:translateY(10px);transition:opacity .4s,transform .5s var(--ease),border-color .3s}
.demo-row.show{opacity:1;transform:none}
.demo-row .st{font-family:var(--mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);transition:color .3s}
.demo-row[data-s="sent"] .st{color:var(--violet)}
.demo-row[data-s="delivered"] .st{color:var(--green)}
.demo-row[data-s="delivered"]{border-color:var(--green-line)}
.demo-row[data-s="failed"] .st{color:var(--accent)}
.demo-row[data-s="failed"]{border-color:var(--accent-line)}
.demo-loc{width:100%;font-size:.8rem;color:var(--soft);border:1px dashed var(--line2);border-radius:12px;padding:.6rem .8rem;display:flex;align-items:center;gap:.6rem;opacity:0;transition:opacity .4s}
.demo-loc.show{opacity:1}
.demo-actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center}
[data-demo-view]{display:none;flex-direction:column;align-items:center;gap:1rem;width:100%}
[data-demo-view].on{display:flex}
@media (max-width:860px){.demo{grid-template-columns:1fr;gap:1.6rem}.demo-stage{min-height:26rem}}

/* ---------- section kicker number shimmer ---------- */
.kicker .rule{position:relative;overflow:hidden}
.kicker .rule::after{content:"";position:absolute;inset:0;background:var(--accent);transform:translateX(-100%);animation:ruleRun 3.5s ease-in-out infinite}
@keyframes ruleRun{0%{transform:translateX(-100%)}50%,100%{transform:translateX(100%)}}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  .js .wordmark .wm-l,.js .hero-content>*,.js .stagger>*,.js .timeline .phase,.js .stand .st-w,.js .tbl.fx tbody tr{opacity:1!important;transform:none!important;filter:none!important}
  .js .flow.scrolly .flow-step,.js .story-run .frame{opacity:1}
  .js .draw path:not([stroke-dasharray]),.js .draw-lines path:not([stroke-dasharray]){stroke-dashoffset:0!important}
  .cursor-glow,.cursor-dot,.hero-canvas{display:none}
  .tbl .dotc{transform:none}
  .marquee-track{animation:none}
}

@media (max-width:860px){.scroll-hint{display:none}}
