/* NUBOG — 3D exploded-camera scroll experience */

.x-scroll{position:relative;height:640vh}
.x-scroll--hero{height:480vh}
.x-scroll.static{height:auto;min-height:100vh}

/* homepage hero overlay (fades as the explode begins) */
.x-hero{position:absolute;inset-inline:0;inset-block-start:12vh;z-index:5;
  display:grid;justify-items:center;text-align:center;gap:1rem;
  padding-inline:var(--gutter);will-change:opacity,transform}
.x-hero-mark{width:min(110px,22vw);filter:drop-shadow(0 18px 46px rgba(60,9,108,.6));margin-block-end:.4rem}
.x-hero h1{font-size:var(--fs-hero);font-weight:900;max-width:18ch}
.x-hero .lead{margin-inline:auto;text-align:center}
.x-hero .scene-cta{display:flex;gap:.9rem;flex-wrap:wrap;justify-content:center;margin-block-start:.8rem}
.x-fallback .x-hero-fb{display:grid;justify-items:center;gap:1rem;max-width:760px}
.x-fallback .x-hero-fb h1{font-size:var(--fs-hero)}
@media (max-height:760px){.x-hero{inset-block-start:9vh}.x-hero .lead{display:none}}
.x-stage{position:sticky;inset-block-start:0;height:100vh;overflow:clip;background:#231F20}
.x-scroll.static .x-stage{position:relative}
.x-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.x-vignette{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 92% at 50% 44%,transparent 42%,rgba(14,11,13,.8) 100%)}

/* stage copy blocks (opacity driven by scroll progress in JS) */
.x-copy{position:absolute;inset-inline-start:clamp(1.4rem,6vw,6rem);inset-block-end:11vh;
  max-width:30ch;opacity:0;transform:translateY(24px);pointer-events:none;z-index:5}
.x-copy .kicker{margin-block-end:.8rem}
.x-copy h2{font-size:clamp(1.7rem,3.6vw,3rem);font-weight:800}
.x-copy p{color:var(--mist);margin-block-start:.7rem;font-size:.98rem;max-width:44ch}

/* component callouts */
.x-callouts{position:absolute;inset:0;pointer-events:none;z-index:6}
/* Physical top/left on purpose: callouts are placed via 3D→screen projection
   (physical pixel coords). Logical properties here would anchor them to the
   right edge in Arabic and push every label off-screen. */
.x-callout{position:absolute;top:0;left:0;opacity:0;will-change:transform,opacity}
.x-callout svg{overflow:visible;display:block;position:absolute;top:0;left:0}
.x-callout .x-dot{fill:var(--gold)}
.x-callout .x-ring{fill:none;stroke:var(--gold);stroke-width:1;opacity:.55}
.x-callout .x-line{fill:none;stroke:var(--gold);stroke-width:1.1;opacity:.9}
.x-lab{position:absolute;font-family:var(--f-display);font-weight:300;font-size:.76rem;
  letter-spacing:.16em;text-transform:uppercase;color:#fff;white-space:nowrap;
  padding-block-end:.28rem;border-block-end:1px solid var(--gold-25)}
[dir="rtl"] .x-lab{letter-spacing:.02em}

/* ---- seven-act product experience (media-experience.html) ---- */
.x-scroll--xl{height:880vh}

.x-center{position:absolute;inset-inline:0;inset-block-start:50%;translate:0 -50%;z-index:5;
  display:grid;justify-items:center;text-align:center;gap:1.1rem;
  padding-inline:var(--gutter);opacity:0;pointer-events:none;will-change:opacity,transform}
.x-center h1,.x-center h2{font-size:clamp(2.1rem,6vw,5rem);font-weight:900;max-width:16ch;text-shadow:0 8px 40px rgba(0,0,0,.55)}
.x-center .x-sub{color:var(--mist);font-size:clamp(.98rem,1.4vw,1.2rem);max-width:52ch}
.x-logo{width:min(92px,18vw);opacity:0;filter:drop-shadow(0 14px 40px rgba(60,9,108,.6))}
.x-cta .btn{pointer-events:auto;margin-block-start:.6rem}

.x-macro{position:absolute;inset-inline:0;inset-block-end:9vh;z-index:5;
  display:grid;justify-items:center;gap:.6rem;text-align:center;opacity:0;pointer-events:none}
.x-mlabel{font-family:var(--f-display);font-weight:300;font-size:clamp(1.3rem,3.2vw,2.2rem);
  letter-spacing:.12em;text-transform:uppercase;text-shadow:0 6px 30px rgba(0,0,0,.6)}
[dir="rtl"] .x-mlabel{letter-spacing:0;text-transform:none}

.x-specs{position:absolute;inset-inline-end:clamp(1.4rem,7vw,7rem);inset-block-start:50%;translate:0 -50%;
  z-index:5;display:grid;gap:1rem;max-width:34ch;pointer-events:none;opacity:0}
.x-specs .kicker{margin-block-end:.4rem}
.x-spec{display:flex;gap:.85rem;align-items:baseline;opacity:0;
  font-family:var(--f-display);font-weight:600;font-size:clamp(1rem,1.5vw,1.25rem)}
.x-spec i{inline-size:8px;block-size:8px;background:var(--gold);transform:rotate(45deg);flex:none;translate:0 -2px}

.x-serv{position:absolute;inset-inline-start:clamp(1.4rem,7vw,7rem);inset-block-start:50%;translate:0 -50%;
  z-index:5;display:grid;gap:.65rem;pointer-events:none;opacity:0}
.x-serv h2{font-size:clamp(1.5rem,3vw,2.5rem);margin-block-end:.7rem;max-width:14ch}
.x-sv{font-family:var(--f-display);font-weight:300;color:var(--mist);opacity:0;
  font-size:clamp(1.05rem,1.8vw,1.5rem);display:flex;align-items:center;gap:.7rem}
.x-sv::before{content:"";inline-size:1.4rem;block-size:1px;background:var(--gold);flex:none}

@media (max-width:760px){
  .x-specs{inset-inline:1.2rem;translate:0 -50%;max-width:none}
  .x-serv{inset-inline:1.2rem;translate:0 -50%}
  .x-mlabel{font-size:1.15rem}
}

/* portal flare + skip */
.x-flare{position:absolute;inset:0;pointer-events:none;opacity:0;z-index:7;mix-blend-mode:screen;
  background:radial-gradient(circle at 50% 47%,#fff 0%,rgba(225,200,33,.9) 20%,rgba(60,9,108,.6) 46%,transparent 72%)}
.x-skip{position:absolute;inset-block-end:1.6rem;inset-inline-end:1.7rem;z-index:8;
  font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:var(--mist);
  border:1px solid var(--line);border-radius:999px;padding:.55rem 1.1rem;
  backdrop-filter:blur(10px);background:rgba(26,22,23,.5);transition:all var(--t-fast)}
.x-skip:hover{color:var(--gold);border-color:var(--gold-25)}
[dir="rtl"] .x-skip{letter-spacing:.04em}

/* scroll hint inside stage */
.x-hint{position:absolute;inset-block-end:1.8rem;inset-inline-start:50%;translate:-50%;z-index:5;
  display:grid;justify-items:center;gap:.45rem;color:var(--mist);
  font-size:var(--fs-label);letter-spacing:.3em;text-transform:uppercase;transition:opacity .5s}
[dir="rtl"] .x-hint{letter-spacing:.1em;translate:50%}
.x-hint i{inline-size:1px;block-size:40px;background:linear-gradient(var(--gold),transparent);
  animation:hint 1.8s var(--ease) infinite}

/* fallback (no WebGL / reduced motion) */
.x-fallback{display:none;position:absolute;inset:0;place-items:center;text-align:center;
  padding:2rem;z-index:9;background:radial-gradient(900px 600px at 50% 30%,rgba(85,18,155,.4),transparent 60%),#231F20}
.x-fallback.show{display:grid}
.x-fallback img{width:min(220px,40vw);margin-inline:auto;filter:drop-shadow(0 24px 60px rgba(60,9,108,.6))}
.x-fallback p{color:var(--mist);max-width:46ch;margin:1.2rem auto 1.6rem}

@media (max-width:760px){
  .x-copy{inset-block-end:14vh;max-width:26ch}
  .x-lab{font-size:.68rem}
  .x-skip{inset-block-end:1rem;inset-inline-end:1rem;padding:.45rem .85rem}
}
@media (prefers-reduced-motion:reduce){
  .x-hint{display:none}
}
