/* =====================================================================
   Media Scape â€” style.css
   Dark, bold, premium event & media agency UI. No frameworks.
   Sections: tokens Â· base Â· utilities Â· header Â· hero Â· marquee Â·
   services Â· stats Â· process Â· testimonials Â· packages Â· team Â·
   gallery Â· about Â· contact Â· cta Â· footer Â· motion Â· responsive
   ===================================================================== */

:root {
  --bg: #0a0a0c;
  --bg-1: #0e0e13;
  --surface: #131319;
  --surface-2: #17171f;
  --line: rgba(255, 255, 255, .09);
  --line-2: rgba(255, 255, 255, .055);
  --text: #f4f4f6;
  --muted: #a3a3ae;
  --muted-2: #76767f;
  --gold: #fcf000;          /* mediascape.co.in primary brand yellow */
  --gold-2: #ffc211;        /* their golden shade â€” gradient partner */
  --violet: #8b6bff;
  --grad: linear-gradient(115deg, #fcf000, #ffc211);
  --grad-violet: linear-gradient(115deg, #b79bff, #6d43e0);
  --radius: 18px;
  --radius-lg: 26px;
  --radius-sm: 12px;
  --shadow: 0 30px 60px -24px rgba(0, 0, 0, .65);
  --maxw: 1180px;
  /* fixed type scale */
  --type-12: 12px;
  --type-14: 14px;
  --type-16: 16px;
  --type-20: 20px;
  --type-24: 24px;
  --type-32: 32px;
  /* compact radius scale */
  --radius-4: 4px;
  --radius-8: 8px;
  --radius-16: 16px;
  --radius: var(--radius-8);
  --radius-lg: var(--radius-16);
  --radius-sm: var(--radius-4);
  --ease: cubic-bezier(.22, .61, .36, 1);
  --font: 'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --display: 'Syne', 'Manrope', system-ui, sans-serif;
}

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
/* overflow-x: clip on the root (not just body) so the off-screen fixed nav drawer
   (translateX(101%)) can't be panned into view on mobile, exposing blank space to the
   right. clip (unlike hidden/auto) creates no scroll container, so position: sticky â€”
   the scrub hero â€” keeps working. */
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; overflow-x: clip; }
body {
  font-family: var(--font); background: var(--bg); color: var(--text);
  font-size: var(--type-16); line-height: 1.6; overflow-x: clip;
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
}
img, svg, video { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
ul { list-style: none; padding: 0; }
button { font: inherit; color: inherit; cursor: pointer; border: 0; background: none; }
input, textarea, select { font: inherit; color: inherit; }
:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; border-radius: 6px; }
::selection { background: var(--gold); color: #12100a; }
/* ambient glow + grain */
body::before {
  content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(1100px 620px at 14% -8%, rgba(252, 240, 0, .10), transparent 60%),
    radial-gradient(900px 640px at 102% 2%, rgba(139, 107, 255, .09), transparent 55%);
}
body::after {
  content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: .035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
.site-header, main, .site-footer { position: relative; z-index: 1; }

/* ambient aurora â€” slow-drifting glow orbs spread across the viewport so the
   space below the hero never reads as flat black. Fixed layer, sits with the
   body glow/grain at z-index 0 (main is z-index 1). Motion auto-freezes under
   the global prefers-reduced-motion rule, leaving soft static glows. */
.bg-fx { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.bg-orb { position: absolute; border-radius: 50%; filter: blur(30px); will-change: transform, translate; }
.bg-orb.o1 {
  width: 46vw; height: 46vw; max-width: 620px; max-height: 620px; left: -8vw; top: 20vh;
  background: radial-gradient(circle, rgba(252, 240, 0, .22), transparent 68%);
  animation: drift-a 26s var(--ease) infinite;
}
.bg-orb.o2 {
  width: 52vw; height: 52vw; max-width: 720px; max-height: 720px; right: -12vw; top: 56vh;
  background: radial-gradient(circle, rgba(139, 107, 255, .21), transparent 68%);
  animation: drift-b 34s var(--ease) infinite;
}
.bg-orb.o3 {
  width: 40vw; height: 40vw; max-width: 540px; max-height: 540px; left: 32vw; top: 78vh;
  background: radial-gradient(circle, rgba(243, 208, 137, .17), transparent 70%);
  animation: drift-c 30s var(--ease) infinite;
}

/* cursor spotlight â€” a soft warm light that trails the pointer. JS parks it under
   the cursor and adds .on to fade it in (skips touch + reduced-motion). It lives in
   the root stacking context above main (z-index 2) with `screen` blend, so it only
   ever *lightens* the dark UI as it moves â€” text stays readable. Fixed, so it never
   adds scrollbars. Starts invisible, so with JS off it simply never shows. */
.cursor-glow {
  position: fixed; top: 0; left: 0; z-index: 2; pointer-events: none;
  width: 520px; height: 520px; margin: -260px 0 0 -260px; border-radius: 50%;
  background: radial-gradient(circle, rgba(252, 240, 0, .14), rgba(139, 107, 255, .05) 46%, transparent 66%);
  mix-blend-mode: screen; filter: blur(6px);
  opacity: 0; transition: opacity .8s var(--ease); will-change: transform;
}
.cursor-glow.on { opacity: 1; }
@media (hover: none) { .cursor-glow { display: none; } }

/* utilities */
.container { width: 100%; max-width: var(--maxw); margin-inline: auto; padding-inline: 22px; }
.section { padding: clamp(64px, 9vw, 128px) 0; }
.section-head { max-width: 640px; margin-bottom: clamp(34px, 5vw, 60px); }
.section-head.center { margin-inline: auto; text-align: center; }
.eyebrow {
  display: inline-flex; align-items: center; gap: 9px; font-weight: 700;
  font-size: var(--type-12); letter-spacing: .22em; text-transform: uppercase; color: var(--gold);
  margin-bottom: 18px;
}
.eyebrow::before { content: ""; width: 26px; height: 1px; background: var(--grad); }
.section-head.center .eyebrow::after { content: ""; width: 26px; height: 1px; background: var(--grad); }
h1, h2, h3, h4 { font-family: var(--display); font-weight: 800; line-height: 1.04; letter-spacing: -.02em; }
h2.title { font-size: var(--type-32); }
h3.title { font-size: var(--type-24); }
.lead { color: var(--muted); font-size: var(--type-16); margin-top: 16px; }
.grad-text { background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.muted { color: var(--muted); }

/* buttons */
.btn {
  --btn-y: 14px; --btn-x: 24px; --btn-radius: 999px;
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  padding: var(--btn-y) var(--btn-x); border: 1px solid transparent;
  border-radius: var(--btn-radius); font-weight: 700; font-size: var(--type-14); line-height: 1;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), background .3s, border-color .3s, color .3s;
  will-change: transform;
}
.btn svg { width: 18px; height: 18px; }
.btn-primary, .btn-secondary, .btn-ghost { font-family: inherit; }
.btn-primary { background: linear-gradient(135deg, #fff34d 0%, #fcf000 48%, #ffc211 100%); color: #131002; font-weight: 800; box-shadow: 0 14px 34px -12px rgba(252, 240, 0, .55); }
.btn-primary:hover { transform: translateY(-3px); box-shadow: 0 20px 44px -12px rgba(252, 240, 0, .7); }
.btn-secondary { border-color: var(--line); color: var(--text); background: var(--surface-2); }
.btn-secondary:hover { border-color: rgba(252, 240, 0, .55); color: var(--gold-2); background: rgba(252, 240, 0, .08); transform: translateY(-3px); }
.btn-ghost { border-color: var(--line); color: var(--text); background: rgba(255, 255, 255, .02); }
.btn-ghost:hover { border-color: var(--gold); color: var(--gold-2); transform: translateY(-3px); }
.btn-lg { --btn-y: 17px; --btn-x: 32px; font-size: 1rem; }
.btn .arrow-ur, .btn svg { transition: transform .35s var(--ease); }
.btn:hover svg { transform: translate(2px, -2px); }
/* ---------- header / nav ---------- */
.skip-link { position: absolute; left: -999px; top: 8px; z-index: 200; background: var(--gold); color: #12100a; padding: 10px 16px; border-radius: 8px; font-weight: 700; }
.skip-link:focus { left: 12px; }
.site-header { position: sticky; top: 0; z-index: 100; transition: background .4s, backdrop-filter .4s, border-color .4s; border-bottom: 1px solid transparent; }
.site-header.scrolled { background: rgba(10, 10, 12, .72); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom-color: var(--line); }
.header-inner { display: flex; align-items: center; justify-content: space-between; gap: 20px; height: 78px; }
.brand { display: inline-flex; align-items: center; gap: 11px; }
.brand-mark { border-radius: 10px; }
.brand-name { font-family: var(--display); font-weight: 800; font-size: 1.22rem; letter-spacing: -.01em; }
.brand-name span { color: var(--gold); }
.brand-logo { height: 34px; width: auto; display: block; }
.nav { display: flex; align-items: center; gap: 6px; }
.nav > a { position: relative; padding: 9px 14px; font-weight: 600; font-size: .95rem; color: var(--muted); border-radius: 10px; transition: color .25s; }
.nav > a::after { content: ""; position: absolute; left: 14px; right: 14px; bottom: 5px; height: 2px; background: var(--grad); transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease); border-radius: 2px; }
.nav > a:hover { color: var(--text); }
.nav > a:hover::after, .nav > a.is-active::after { transform: scaleX(1); }
.nav > a.is-active { color: var(--text); }
.nav-cta { margin-left: 12px; }
/* .nav > a (0,1,1) would otherwise paint this CTA's label muted-grey; match .btn-primary's
   dark, bold text with a rule that outranks it so "Start a Project" reads clearly on the gold. */
.nav > a.nav-cta { color: #130b02; font-weight: 800; }
.nav-cta::after { display: none; }
.nav-toggle { display: none; width: 46px; height: 46px; border-radius: 12px; border: 1px solid var(--line); align-items: center; justify-content: center; position: relative; }
.nav-toggle svg { position: absolute; transition: opacity .25s, transform .25s; }
.nav-toggle svg:last-child { opacity: 0; transform: rotate(-45deg); }
.nav-toggle[aria-expanded="true"] svg:first-child { opacity: 0; transform: rotate(45deg); }
.nav-toggle[aria-expanded="true"] svg:last-child { opacity: 1; transform: none; }
/* ---------- hero ---------- */
.hero { position: relative; min-height: min(92vh, 900px); display: flex; align-items: center; padding: 120px 0 80px; overflow: hidden; }
.hero-bg { position: absolute; inset: 0; z-index: -1; }
.hero-bg video, .hero-bg img { width: 100%; height: 100%; object-fit: cover; }
.hero-bg::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10, 10, 12, .55) 0%, rgba(10, 10, 12, .82) 62%, var(--bg) 100%); }
.hero-orb { position: absolute; border-radius: 50%; filter: blur(70px); z-index: -1; opacity: .55; animation: float 14s ease-in-out infinite; }
.hero-orb.a { width: 420px; height: 420px; background: radial-gradient(circle, rgba(252, 240, 0, .5), transparent 70%); top: -80px; left: -60px; }
.hero-orb.b { width: 460px; height: 460px; background: radial-gradient(circle, rgba(139, 107, 255, .42), transparent 70%); bottom: -120px; right: -80px; animation-delay: -5s; }
.hero-inner { max-width: 900px; }
.hero .badge {
  display: inline-flex; align-items: center; gap: 10px; padding: 8px 16px 8px 10px; border-radius: 999px;
  border: 1px solid var(--line); background: rgba(255, 255, 255, .03); font-size: .82rem; font-weight: 600; color: var(--muted); margin-bottom: 26px;
}
.hero .badge b { display: inline-flex; align-items: center; gap: 6px; color: var(--gold); }
.hero .badge svg { width: 15px; height: 15px; }
.hero h1 { font-size: var(--type-32); letter-spacing: -.03em; }
.hero h1 .line { display: block; overflow: hidden; }
.hero p.lead { max-width: 620px; font-size: var(--type-16); }
.hero-actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 34px; }
.hero-stats { display: flex; flex-wrap: wrap; gap: 30px 46px; margin-top: 52px; padding-top: 30px; border-top: 1px solid var(--line-2); }
.hero-stats .hs-num { font-family: var(--display); font-weight: 800; font-size: 1.8rem; }
.hero-stats .hs-lab { color: var(--muted); font-size: .86rem; margin-top: 2px; }
.scroll-cue { position: absolute; bottom: 26px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 8px; color: var(--muted-2); font-size: .72rem; letter-spacing: .2em; text-transform: uppercase; }
.scroll-cue .dot { width: 22px; height: 36px; border: 1px solid var(--line); border-radius: 12px; position: relative; }
.scroll-cue .dot::after { content: ""; position: absolute; top: 7px; left: 50%; width: 3px; height: 7px; border-radius: 3px; background: var(--gold); transform: translateX(-50%); animation: cue 1.7s infinite; }
/* ---------- marquee (client logo roll â€” pauses on hover) ---------- */
.marquee { border-block: 1px solid var(--line-2); padding: 16px 0; overflow: hidden; background: linear-gradient(180deg, var(--bg-1), var(--bg)); -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
.marquee-track { display: flex; align-items: center; gap: 22px; width: max-content; animation: marquee 30s linear infinite; }
.marquee:hover .marquee-track { animation-play-state: paused; }
.marquee-logo { flex: 0 0 180px; width: 180px; height: 82px; display: inline-flex; align-items: center; justify-content: center; padding: 10px 18px; border: 1px solid var(--line-2); border-radius: 16px; background: linear-gradient(180deg, rgba(255, 255, 255, .035), rgba(255, 255, 255, .012)); transition: border-color .35s var(--ease), background .35s var(--ease), transform .35s var(--ease); }
.marquee-logo img { display: block; width: 100%; height: 100%; object-fit: contain; filter: none; opacity: 1; transition: transform .35s var(--ease), opacity .35s var(--ease); }
.marquee-logo:hover { border-color: rgba(252, 240, 0, .5); background: rgba(252, 240, 0, .08); transform: translateY(-2px); }
.marquee-logo:hover img { transform: scale(1.04); opacity: 1; }

/* ---------- services (card = branded emblem cover + body) ---------- */
.services-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.svc {
  position: relative; border-radius: var(--radius); background: var(--surface);
  border: 1px solid var(--line); overflow: hidden;
  transition: transform .4s var(--ease), border-color .4s, box-shadow .4s;
}
.svc:hover { transform: translateY(-6px); border-color: rgba(252, 240, 0, .5); box-shadow: 0 24px 46px -24px rgba(0, 0, 0, .75); }
/* media cover: a gold-lit gradient panel that frames the service emblem, with a shine that sweeps across on hover */
.svc-media { position: relative; z-index: 0; display: grid; place-items: center; height: 132px; overflow: hidden;
  background: radial-gradient(130% 120% at 82% 6%, rgba(252, 240, 0, .22), transparent 60%), linear-gradient(160deg, #1b1b23, #101015);
  border-bottom: 1px solid var(--line); }
/* soft gold halo behind the emblem (inset+margin:auto centres the absolute box) */
.svc-media::before { content: ""; position: absolute; inset: 0; margin: auto; z-index: 0; width: 118px; height: 118px; border-radius: 50%; background: radial-gradient(circle, rgba(252, 240, 0, .2), transparent 70%); transition: transform .6s var(--ease); }
.svc:hover .svc-media::before { transform: scale(1.16); }
/* diagonal shine sweep on hover */
.svc-media::after { content: ""; position: absolute; inset: 0; z-index: 2; background: linear-gradient(115deg, transparent 32%, rgba(255, 255, 255, .16) 48%, transparent 64%); transform: translateX(-130%); }
.svc:hover .svc-media::after { transition: transform .85s var(--ease); transform: translateX(130%); }
/* the emblem: a real mediascape.co.in service graphic (PNG masked to the gold gradient) or our matching gold line icon */
.svc-emblem { position: relative; z-index: 1; display: inline-flex; color: var(--gold); transition: transform .6s var(--ease); }
.svc-emblem.is-img { width: 62px; height: 62px; background: var(--grad); -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; }
.svc:hover .svc-emblem { transform: rotate(-6deg) scale(1.1); }
.svc .svc-no { position: absolute; top: 14px; right: 16px; z-index: 3; margin: 0; font-family: var(--display); font-weight: 800; font-size: .82rem; color: rgba(255, 255, 255, .5); }
.svc-body { position: relative; z-index: 1; padding: 22px 26px 30px; }
/* base .svc-ico is the outlined chip shared with about.php panels â€” keep it */
.svc-ico { display: inline-flex; padding: 13px; border-radius: 14px; background: rgba(252, 240, 0, .1); color: var(--gold); border: 1px solid rgba(252, 240, 0, .22); margin-bottom: 20px; transition: transform .4s var(--ease), background .4s var(--ease), color .4s var(--ease), box-shadow .4s var(--ease), border-color .4s var(--ease); }
/* emblem springs in when its card reveals (backwards fill only, so :hover transform still wins; reduce-motion zeroes it) */
.js .svc.reveal.in .svc-emblem { animation: svcPop .6s var(--ease) .1s backwards; }
.svc h3 {
  min-height: 2.08em;
  font-size: var(--type-20);
  margin-bottom: 8px;
  letter-spacing: -.01em;
}
.svc p { color: var(--muted); font-size: .93rem; line-height: 1.55; }
/* ---------- stats ---------- */
.stats { background: linear-gradient(180deg, var(--bg-1), var(--bg)); border-block: 1px solid var(--line-2); }
.stats-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.stat { text-align: center; padding: 20px; position: relative; }
.stat:not(:last-child)::after { content: ""; position: absolute; right: -10px; top: 20%; bottom: 20%; width: 1px; background: var(--line-2); }
.stat .num {
  display: block; min-height: 1em; white-space: nowrap;
  font-family: var(--display); font-weight: 800; font-size: var(--type-32);
  line-height: 1; font-variant-numeric: tabular-nums;
  background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; letter-spacing: -.03em;
}
.stat .lab { margin-top: 12px; color: var(--muted); font-weight: 600; letter-spacing: .02em; font-size: .95rem; }

/* ---------- process ---------- */
.process-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; position: relative; }
.process-grid::before { content: ""; position: absolute; top: 34px; left: 8%; right: 8%; height: 1px; background: linear-gradient(90deg, transparent, var(--line), transparent); }
.step { position: relative; padding-top: 4px; }
.step .step-no { width: 66px; height: 66px; border-radius: 50%; display: grid; place-items: center; font-family: var(--display); font-weight: 800; font-size: 1.35rem; color: var(--gold-2); background: var(--surface); border: 1px solid var(--line); margin-bottom: 22px; position: relative; z-index: 1; transition: transform .4s var(--ease), border-color .4s; }
.step:hover .step-no { transform: translateY(-4px); border-color: var(--gold); }
.step h3 { font-size: var(--type-20); margin-bottom: 8px; }
.step p { color: var(--muted); font-size: .92rem; }
.process-cta {
  margin-top: 46px; max-width: 680px; margin-inline: auto;
  display: flex; flex-wrap: wrap; align-items: center; justify-content: center; text-align: center; gap: 18px 26px;
  padding: 26px 30px; border-radius: var(--radius-lg);
  background: linear-gradient(155deg, rgba(252, 240, 0, .10), rgba(255, 255, 255, .015));
  border: 1px solid var(--line); position: relative; overflow: hidden;
}
.process-cta::before { content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(130% 150% at 0% 0%, rgba(252, 240, 0, .16), transparent 58%); }
.process-cta p { position: relative; margin: 0; flex: 0 1 420px;
  font-family: var(--display); font-weight: 700; font-size: var(--type-20); line-height: 1.3; color: var(--text); }
.process-cta .btn { position: relative; flex: 0 0 auto; }
/* ---------- testimonials ---------- */
.testi { background: linear-gradient(180deg, var(--bg), var(--bg-1)); }
.testi-viewport { overflow: hidden; }
.testi-track { display: flex; transition: transform .6s var(--ease); }
.testi-card { flex: 0 0 100%; padding: 6px; }
.testi-inner { max-width: 860px; margin-inline: auto; text-align: center; padding: clamp(30px, 5vw, 56px); border-radius: var(--radius-lg); background: var(--surface); border: 1px solid var(--line); position: relative; }
.testi-inner .qmark { font-family: var(--display); font-size: 5rem; line-height: .6; color: var(--gold); opacity: .28; }
.testi-quote { font-family: var(--display); font-weight: 600; font-size: var(--type-24); line-height: 1.4; letter-spacing: -.01em; margin: 10px 0 22px; }
.stars { display: inline-flex; gap: 4px; color: rgba(255, 255, 255, .16); margin-bottom: 22px; }
.stars .star svg { fill: currentColor; }
.stars .star.on { color: var(--gold); filter: drop-shadow(0 2px 6px rgba(252, 240, 0, .4)); }
.testi-who { display: flex; align-items: center; justify-content: center; gap: 14px; }
.testi-who img { width: 52px; height: 52px; border-radius: 50%; object-fit: cover; border: 1px solid var(--line); }
.testi-who .n { font-weight: 700; font-family: var(--display); }
.testi-who .o { color: var(--gold); font-size: .88rem; }
.testi-controls { display: flex; align-items: center; justify-content: center; gap: 18px; margin-top: 34px; }
.testi-btn { width: 50px; height: 50px; border-radius: 50%; border: 1px solid var(--line); display: grid; place-items: center; color: var(--text); transition: background .3s, border-color .3s, transform .3s; }
.testi-btn:hover { border-color: var(--gold); color: var(--gold-2); transform: scale(1.06); }
.testi-dots { display: flex; gap: 9px; }
.testi-dots button { width: 24px; height: 24px; border-radius: 50%; background: var(--line); transition: width .3s, background .3s; }
.testi-dots button.on { width: 32px; border-radius: var(--radius-8); background: var(--grad); }
/* ---------- packages ---------- */
.pkg-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; }
.pkg { flex: 1 1 300px; max-width: 360px; position: relative; display: flex; flex-direction: column; padding: 32px 28px; border-radius: var(--radius); background: var(--surface); border: 1px solid var(--line); transition: transform .4s var(--ease), border-color .4s, box-shadow .4s; }
.pkg:hover { transform: translateY(-6px); border-color: rgba(252, 240, 0, .4); box-shadow: 0 26px 54px -26px rgba(0, 0, 0, .7); }
.pkg.featured { border-color: transparent; background:
    linear-gradient(var(--surface), var(--surface)) padding-box,
    var(--grad) border-box; box-shadow: 0 30px 60px -30px rgba(252, 240, 0, .4); }
.pkg.featured::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
    background: radial-gradient(120% 72% at 50% -8%, rgba(252, 240, 0, .1), transparent 62%); }
.pkg > * { position: relative; z-index: 1; }
.pkg .tag { position: absolute; top: -13px; left: 50%; transform: translateX(-50%); z-index: 2; white-space: nowrap;
    background: var(--grad); color: #17120a; font-size: .67rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase;
    padding: 7px 15px; border-radius: 999px; box-shadow: 0 10px 22px -8px rgba(252, 240, 0, .6); }
.pkg h2 { font-size: var(--type-20); font-weight: 700; letter-spacing: .04em; color: var(--text); margin-bottom: 10px; }
.pkg .price { display: flex; align-items: baseline; gap: .26rem; flex-wrap: nowrap; min-width: 0;
    font-family: var(--display); font-weight: 800; font-size: var(--type-24); letter-spacing: -.02em; line-height: 1.02; }
.pkg .price .amt { white-space: nowrap; }
.pkg .price small { font-size: .82rem; font-weight: 600; color: var(--muted-2); letter-spacing: .01em; }
.pkg .note { color: var(--muted); font-size: .85rem; min-height: 1.2em; margin: 8px 0 0; }
.pkg ul { display: grid; gap: 12px; margin: 22px 0 26px; padding-top: 22px; border-top: 1px solid var(--line); }
.pkg li { display: flex; gap: 11px; font-size: .92rem; color: var(--text); align-items: flex-start; }
.pkg li svg { flex: 0 0 auto; width: 18px; height: 18px; color: var(--gold); margin-top: 2px; }
.pkg .btn { width: 100%; justify-content: center; margin-top: auto; }
.pkg-note { text-align: center; color: var(--muted); margin-top: 26px; font-size: .92rem; }

/* ---------- subpage header ---------- */
.page-hero { position: relative; padding: 128px 0 60px; overflow: hidden; }
.page-hero::before { content: ""; position: absolute; width: 520px; height: 520px; border-radius: 50%; background: radial-gradient(circle, rgba(252, 240, 0, .16), transparent 70%); top: -180px; right: -80px; filter: blur(30px); z-index: -1; }
.page-hero h1 { font-size: var(--type-32); }
.page-hero .lead { max-width: 620px; }
.crumbs { display: flex; gap: 8px; align-items: center; color: var(--muted-2); font-size: .85rem; margin-bottom: 18px; }
.crumbs a:hover { color: var(--gold); }
/* ---------- team ---------- */
.team-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.member { border-radius: var(--radius); overflow: hidden; background: var(--surface); border: 1px solid var(--line); transition: transform .4s var(--ease), border-color .4s; }
.member:hover { transform: translateY(-6px); border-color: rgba(252, 240, 0, .4); }
.member-photo { position: relative; aspect-ratio: 4 / 5; overflow: hidden; }
.member-photo img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.member:hover .member-photo img { transform: scale(1.06); }
.member-photo::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 45%, rgba(10, 10, 12, .8)); }
.member-social { position: absolute; left: 16px; bottom: 16px; display: flex; gap: 8px; opacity: 0; transform: translateY(10px); transition: opacity .4s, transform .4s; z-index: 1; }
.member:hover .member-social { opacity: 1; transform: none; }
.member-social a { width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center; background: rgba(255, 255, 255, .1); backdrop-filter: blur(6px); color: #fff; transition: background .3s; }
.member-social a:hover { background: var(--gold); color: #17120a; }
.member-body { padding: 18px 20px 22px; }
.member-body h2 { font-size: var(--type-20); }
.member-body p { color: var(--gold); font-size: .86rem; margin-top: 3px; }

/* ---------- gallery ---------- */
.gallery-filter { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 30px; }
.gallery-filter button { padding: 9px 18px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); font-weight: 600; font-size: .88rem; transition: all .3s; }
.gallery-filter button:hover { color: var(--text); border-color: var(--muted); }
.gallery-filter button.on { background: var(--grad); color: #17120a; border-color: transparent; }
.gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.tile { position: relative; border-radius: var(--radius); overflow: hidden; aspect-ratio: 4 / 3; border: 1px solid var(--line); }
.tile img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.tile:hover img { transform: scale(1.08); }
.tile-cap { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 22px 22px 30px; background: linear-gradient(180deg, transparent 40%, rgba(10, 10, 12, .82)); opacity: 0; transition: opacity .4s; }
.tile:hover .tile-cap { opacity: 1; }
.tile-cap .k { color: var(--gold); font-size: .76rem; letter-spacing: .18em; text-transform: uppercase; font-weight: 700; }
.tile-cap .t { font-family: var(--display); font-weight: 700; font-size: 1.2rem; margin-top: 4px; }
.tile.hide { display: none; }
/* Client logo/brand tiles: square so the (square) client artwork shows edge-to-edge, uncropped. */
.tile.logo { aspect-ratio: 1 / 1; background: #f4f4f0; display: grid; place-items: center; }
.tile.logo img { width: 78%; height: 78%; object-fit: contain; padding: 12px; background: transparent; }
.tile-category { position: absolute; top: 14px; left: 14px; z-index: 2; padding: 6px 10px; border-radius: var(--radius-4); background: rgba(10, 10, 12, .78); color: var(--gold); font-size: var(--type-12); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.section-action { display: flex; justify-content: center; margin-top: 24px; }
/* ---------- about / split / capabilities ---------- */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(28px, 5vw, 64px); align-items: center; }
.split.rev .split-media { order: 2; }
.split-media { position: relative; border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--line); }
.split-media img { width: 100%; height: 100%; object-fit: cover; }
.split-media .float-card { position: absolute; bottom: 20px; left: 20px; background: rgba(19, 19, 25, .85); backdrop-filter: blur(10px); border: 1px solid var(--line); border-radius: 16px; padding: 16px 20px; }
.split-media .float-card .n { font-family: var(--display); font-weight: 800; font-size: 1.6rem; color: var(--gold-2); }
.split-media .float-card .l { color: var(--muted); font-size: .82rem; }
.founder-role { color: var(--gold-2); font-weight: 700; font-size: .96rem; letter-spacing: .02em; margin: 4px 0 18px; }
.founder-role + p { margin-top: 0; }
.duo { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.panel { padding: 28px 26px; border-radius: var(--radius); background: var(--surface); border: 1px solid var(--line); }
.panel .svc-ico { margin-bottom: 16px; }
.panel h3 { font-size: 1.3rem; margin-bottom: 10px; }
.panel p { color: var(--muted); font-size: .95rem; }
.cap-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 14px; }
.cap { display: flex; align-items: center; gap: 13px; padding: 18px 20px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line); font-weight: 600; transition: border-color .3s, transform .3s; }
.cap:hover { border-color: rgba(252, 240, 0, .4); transform: translateY(-3px); }
.cap svg { color: var(--gold); flex: 0 0 auto; }
.artist-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.artist { position: relative; border-radius: var(--radius); overflow: hidden; aspect-ratio: 1; border: 1px solid var(--line); }
.artist img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.artist:hover img { transform: scale(1.06); }
.artist .meta { position: absolute; inset: auto 0 0 0; padding: 20px; background: linear-gradient(180deg, transparent, rgba(10, 10, 12, .85)); }
.artist .meta h3 { font-size: 1.25rem; }
.artist .meta p { color: var(--gold); font-size: .85rem; margin-top: 3px; }

/* ---------- cta band ---------- */
.cta-band {
  position: relative; margin: 0 auto; max-width: var(--maxw);
  border-radius: var(--radius-lg); overflow: hidden;
  padding: clamp(44px, 7vw, 84px); text-align: center;
  /* framed panel: a real gradient border (gold -> violet -> hairline) that echoes the
     ambient aurora so the surrounding glow reads intentional, over a soft surface fill,
     lifted off the busy background with depth + a faint top inset highlight. */
  border: 1px solid transparent;
  background:
    radial-gradient(130% 150% at 50% -18%, rgba(252, 240, 0, .16), transparent 56%) padding-box,
    linear-gradient(180deg, var(--surface-2), var(--surface)) padding-box,
    linear-gradient(140deg, rgba(252, 240, 0, .55), rgba(139, 107, 255, .34) 58%, rgba(255, 255, 255, .08)) border-box;
  box-shadow: 0 34px 80px -44px rgba(0, 0, 0, .8), inset 0 1px 0 rgba(255, 255, 255, .05);
}
.cta-band h2 { font-size: var(--type-32); }
@media (max-width: 600px) {
  .cta-band > .container { padding-inline: 0; min-width: 0; }
  .cta-band h2 {
    font-size: clamp(22px, 6.4vw, 28px);
    line-height: 1.15;
    overflow-wrap: anywhere;
    text-wrap: balance;
  }
}
.cta-band p { color: var(--muted); max-width: 560px; margin: 16px auto 30px; }
.cta-actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
/* ---------- contact ---------- */
.contact-grid { display: grid; grid-template-columns: 1.1fr .9fr; gap: 26px; align-items: start; }
.contact-card { padding: clamp(26px, 4vw, 40px); border-radius: var(--radius-lg); background: var(--surface); border: 1px solid var(--line); }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.field { margin-bottom: 16px; }
.field label { display: block; font-size: .85rem; font-weight: 600; color: var(--muted); margin-bottom: 7px; }
.field input, .field textarea, .field select {
  width: 100%; padding: 13px 15px; border-radius: 12px; background: var(--bg-1);
  border: 1px solid var(--line); color: var(--text); transition: border-color .3s, background .3s;
}
.field textarea { resize: vertical; min-height: 130px; }
.field input:focus, .field textarea:focus, .field select:focus { border-color: var(--gold); outline: none; background: rgba(252, 240, 0, .04); }
.field select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%23a3a3ae' stroke-width='2'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 15px center; }
.form-note { font-size: .82rem; color: var(--muted-2); margin-top: 6px; }
.form-alert { padding: 15px 18px; border-radius: 12px; background: rgba(87, 224, 197, .1); border: 1px solid rgba(87, 224, 197, .35); color: #8ff0dc; margin-bottom: 22px; display: flex; gap: 10px; align-items: flex-start; }
.form-alert svg { flex: 0 0 auto; color: #57e0c5; }
.info-list { display: grid; gap: 14px; }
.info-item { display: flex; gap: 14px; padding: 18px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line); transition: border-color .3s; }
.info-item:hover { border-color: rgba(252, 240, 0, .4); }
.info-item .i { width: 44px; height: 44px; flex: 0 0 auto; border-radius: 12px; display: grid; place-items: center; background: rgba(252, 240, 0, .1); color: var(--gold); border: 1px solid rgba(252, 240, 0, .22); }
.info-item .k { font-size: .8rem; color: var(--muted-2); text-transform: uppercase; letter-spacing: .1em; }
.info-item .v { font-weight: 600; margin-top: 2px; word-break: break-word; }
.info-item a.v:hover { color: var(--gold); }
.map-embed { margin-top: 16px; border-radius: 16px; overflow: hidden; border: 1px solid var(--line); aspect-ratio: 16 / 9; background: var(--surface); }
.map-embed iframe { width: 100%; height: 100%; border: 0; filter: grayscale(.3) invert(.9) hue-rotate(180deg); }
/* ---------- footer ---------- */
.site-footer { border-top: 1px solid var(--line); background: var(--bg-1); padding-top: clamp(48px, 7vw, 84px); margin-top: clamp(60px, 9vw, 120px); }
.back-to-top {
  position: fixed; right: 24px; bottom: 24px; z-index: 120;
  display: grid; place-items: center; width: 46px; height: 46px;
  border: 1px solid rgba(252,240,0,.42); border-radius: 50%;
  color: #17120a; background: linear-gradient(135deg, #fff34d, #ffc211);
  box-shadow: 0 12px 30px rgba(0,0,0,.35), 0 0 22px rgba(252,240,0,.2);
  opacity: 0; visibility: hidden; transform: translateY(12px);
  pointer-events: none; transition: opacity .3s var(--ease), transform .3s var(--ease), visibility .3s;
}
.back-to-top.is-visible { opacity: 1; visibility: visible; transform: none; pointer-events: auto; }
.back-to-top svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.back-to-top:hover { transform: translateY(-3px); box-shadow: 0 16px 34px rgba(0,0,0,.42), 0 0 28px rgba(252,240,0,.32); }
@media (max-width: 600px) {
  .back-to-top { right: 16px; bottom: calc(82px + env(safe-area-inset-bottom)); width: 42px; height: 42px; }
}
.footer-grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.3fr; gap: 34px; padding-bottom: 46px; }
.footer-tag { color: var(--muted); margin: 16px 0 20px; max-width: 260px; }
.socials { display: flex; gap: 10px; }
.socials a { width: 42px; height: 42px; border-radius: 12px; border: 1px solid var(--line); display: grid; place-items: center; color: var(--muted); transition: all .3s; }
.socials a:hover { color: var(--gold); border-color: var(--gold); transform: translateY(-3px); }
.footer-col h3 { font-family: var(--display); font-size: 1rem; margin-bottom: 16px; }
.footer-col a { display: block; color: var(--muted); padding: 6px 0; transition: color .25s; }
.footer-col a:hover { color: var(--gold); }
.footer-contact a, .footer-addr { display: flex; gap: 10px; align-items: flex-start; color: var(--muted); padding: 6px 0; }
.footer-contact svg { color: var(--gold); flex: 0 0 auto; margin-top: 2px; }
.footer-bottom { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; padding: 24px 0; border-top: 1px solid var(--line-2); color: var(--muted-2); font-size: .86rem; }
.footer-legal { display: flex; gap: 20px; flex-wrap: wrap; }
.footer-legal a:hover { color: var(--gold); }

/* ---------- motion ---------- */
.js .reveal { opacity: 0; transform: translateY(26px); transition: opacity .7s var(--ease), transform .7s var(--ease); }
.js .reveal.in { opacity: 1; transform: none; }
.js .reveal[data-d="1"] { transition-delay: .08s; }
.js .reveal[data-d="2"] { transition-delay: .16s; }
.js .reveal[data-d="3"] { transition-delay: .24s; }
.js .reveal[data-d="4"] { transition-delay: .32s; }
/* lazy image fade-in (only while JS is active; removed on JS failure so images never stay blank) */
.js img[loading="lazy"] { opacity: 0; transition: opacity .6s var(--ease); }
.js img[loading="lazy"].img-in { opacity: 1; }
/* Completed-event covers are primary content: never let the lazy-fade JS leave
   them invisible. Higher specificity than the hide rule, so a stale/half-run
   script (or a frozen transition) can't blank the photo â€” the whole .evt-card
   still fades in via its own .reveal. */
.js .evt-cover > img[loading="lazy"] { opacity: 1; }
@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-26px); } }
@keyframes svcPop { from { opacity: 0; transform: scale(.55) rotate(-14deg); } to { opacity: 1; transform: none; } }
@keyframes cue { 0% { opacity: 0; transform: translate(-50%, 0); } 40% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%, 12px); } }
@keyframes drift-a { 0%, 100% { translate: 0 0; scale: 1; } 50% { translate: 7vw -5vh; scale: 1.12; } }
@keyframes drift-b { 0%, 100% { translate: 0 0; scale: 1; } 50% { translate: -9vw 4vh; scale: 1.08; } }
@keyframes drift-c { 0%, 100% { translate: 0 0; scale: 1; } 50% { translate: 5vw -7vh; scale: 1.15; } }
@media (prefers-reduced-motion: reduce) {
  * { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; }
  .js .reveal { opacity: 1 !important; transform: none !important; }
  .cursor-glow { display: none !important; }
}
/* ---------- responsive ---------- */
@media (max-width: 1080px) {
  .services-grid { grid-template-columns: repeat(2, 1fr); }
  .team-grid { grid-template-columns: repeat(2, 1fr); }
  .process-grid { grid-template-columns: repeat(2, 1fr); row-gap: 40px; }
  .process-grid::before { display: none; }
}
@media (max-width: 900px) {
  .header-inner { height: 68px; }
  .nav-toggle { display: flex; }
  .nav {
    position: fixed; inset: 0 0 0 auto; width: min(88vw, 340px); max-width: 100vw;
    flex-direction: column; align-items: stretch; gap: 0;
    background: var(--bg-1); border-left: 1px solid var(--line);
    padding: 88px 20px 28px; overflow-y: auto; overscroll-behavior: contain;
    transform: translateX(101%); visibility: hidden;
    transition: transform .42s var(--ease), visibility .42s var(--ease); z-index: 90;
  }
  body.nav-open .nav { transform: none; visibility: visible; box-shadow: -34px 0 70px -34px rgba(0, 0, 0, .8); }
  /* While the drawer is open, strip the scrolled-header backdrop-filter. A non-none
     backdrop-filter makes .site-header the containing block for its fixed descendants,
     so once you've scrolled (.scrolled adds blur) the drawer + ::before dimmer re-anchor
     to the header box â€” collapsing to header height instead of the viewport. Killing it
     (and its transition, so blur(16px)â†’0 can't keep the block alive mid-fade) re-anchors
     them to the viewport: full-height drawer, full-screen dimmer. Lock the page scroll too. */
  body.nav-open .site-header { backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transition: none !important; }
  body.nav-open { overflow: hidden; }
  /* full-screen dimmer behind the drawer (lives in the drawer's own stacking context) */
  .nav::before {
    content: ""; position: fixed; inset: 0; z-index: -1;
    background: rgba(0, 0, 0, .6); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px);
    opacity: 0; visibility: hidden; transition: opacity .4s, visibility .4s;
  }
  body.nav-open .nav::before { opacity: 1; visibility: visible; }
  .nav > a:not(.nav-cta) {
    padding: 15px 14px; font-size: 1.06rem; font-weight: 600; color: var(--text);
    border-radius: 0; border-bottom: 1px solid var(--line-2);
  }
  .nav > a:not(.nav-cta)::after { display: none; }
  .nav > a:not(.nav-cta).is-active { color: var(--gold-2); }
  .nav-cta { width: 100%; margin: 20px 0 0; justify-content: center; }
  .split { grid-template-columns: 1fr; }
  .split.rev .split-media { order: 0; }
  .duo { grid-template-columns: 1fr; }
  .contact-grid { grid-template-columns: 1fr; }
  .gallery-grid { grid-template-columns: repeat(2, 1fr); }
  .artist-grid { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  .stats-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0; }
  .stat { padding: 22px 12px; }
  .stat::after { display: none; }
  .stat:nth-child(-n+2) { border-bottom: 1px solid var(--line-2); }
  .stat:nth-child(odd) { border-right: 1px solid var(--line-2); }
}
@media (max-width: 600px) {
  .services-grid { grid-template-columns: 1fr; }
  .team-grid { grid-template-columns: 1fr 1fr; }
  .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .stat { min-width: 0; padding: 14px 4px; }
  .stat::after { display: none; }
  .stat .num { font-size: var(--type-32); }
  .stat .lab { font-size: .82rem; margin-top: 8px; }
  .form-row { grid-template-columns: 1fr; }
  .gallery-grid { grid-template-columns: 1fr; }
  #work .gallery-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; }
  .process-cta { flex-direction: column; text-align: center; padding: 24px 22px; gap: 18px; }
  .process-cta p { flex: none; }
  .process-cta .btn { width: 100%; justify-content: center; }
  .artist-grid { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; }
  .footer-bottom { flex-direction: column; align-items: flex-start; }
  .hero-stats { gap: 20px 28px; }
}
/* phones: tighten gutters + trim oversized spacing so nothing feels cramped or clipped */
@media (max-width: 560px) {
  .container { padding-inline: 16px; }
  .marquee-track { gap: 12px; }
  .marquee-logo { flex-basis: 148px; width: 148px; height: 66px; padding: 8px 14px; }
  .cta-band { padding: 40px 22px; }
  .testi-controls { gap: 12px; }
  .btn { --btn-y: 13px; --btn-x: 20px; }
}
@media (max-width: 380px) {
  .team-grid { grid-template-columns: 1fr; }
  .hero-stats { gap: 16px 22px; }
  .hero-stats .hs-num { font-size: 1.55rem; }
}

/* ===== page-specific additions (about / events / contact) ===== */
.ticks { list-style: none; display: grid; gap: 10px; margin-top: 18px; }
.ticks li { display: flex; gap: 10px; align-items: flex-start; color: var(--muted); font-size: .93rem; }
.ticks li svg { flex: 0 0 auto; width: 16px; height: 16px; color: var(--gold); margin-top: 3px; }

/* capability / type cards reuse .cap as a full card (icon + heading + copy) */
.cap { flex-direction: column; align-items: flex-start; gap: 12px; padding: 26px 24px; font-weight: 400; }
.cap-ico { display: inline-flex; padding: 12px; border-radius: 13px; background: rgba(252, 240, 0, .1); color: var(--gold); border: 1px solid rgba(252, 240, 0, .22); }
.cap h3 { font-family: var(--display); font-size: 1.16rem; }
.cap p { color: var(--muted); font-size: .92rem; line-height: 1.6; }

/* contact form captions (label wraps input; caption is a <span>) */
.field > span { display: block; font-size: .85rem; font-weight: 600; color: var(--muted); margin-bottom: 7px; }
.field > span small { color: var(--muted-2); font-weight: 500; }

/* stacked label/value inside an info row */
.info-item > div { display: flex; flex-direction: column; justify-content: center; }
.contact-info > .title { margin-bottom: 18px; }
.contact-info .socials { margin-top: 20px; }

/* ===================== Payments: modal + checkout ===================== */
.form-alert.bad { background: rgba(255,90,90,.1); border-color: rgba(255,90,90,.4); color: #ffb3b3; }
.pay-backdrop { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 20px;
  background: rgba(5,5,8,.72); backdrop-filter: blur(6px); }
.pay-backdrop[hidden] { display: none; }
.pay-dialog { position: relative; width: 100%; max-width: 440px; background: var(--surface-2);
  border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 34px 30px; box-shadow: var(--shadow);
  max-height: 92vh; overflow: auto; animation: payIn .3s var(--ease); }
@keyframes payIn { from { opacity: 0; transform: translateY(16px) scale(.98); } to { opacity: 1; transform: none; } }
.pay-x { position: absolute; top: 14px; right: 16px; width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid var(--line); background: transparent; color: var(--muted); font-size: 1.5rem; line-height: 1; cursor: pointer; }
.pay-x:hover { color: var(--text); border-color: var(--gold); }
.pay-amount { font-family: var(--display); font-size: 2rem; font-weight: 700;
  background: var(--grad); -webkit-background-clip: text; background-clip: text; color: transparent; margin: 4px 0 18px; }
.pay-amount small { -webkit-text-fill-color: var(--muted); font-size: .9rem; font-weight: 500; margin-left: 4px; }
.pay-form { display: grid; gap: 14px; }
.pay-form[hidden] { display: none; }   /* so a successful payment (pay.js sets form.hidden) actually hides the form */
.pay-form .btn { margin-top: 4px; width: 100%; justify-content: center; }
.pay-msg { min-height: 1.2em; margin: 0; font-size: .9rem; color: var(--muted); }
.pay-msg.bad { color: #ffb3b3; }
.pay-secure { display: flex; align-items: center; gap: 7px; margin: 2px 0 0; font-size: .8rem; color: var(--muted-2); }
.pay-secure svg { width: 14px; height: 14px; color: var(--gold); flex: 0 0 auto; }
.pay-secure code { color: var(--gold-2); }
.pay-ok { text-align: center; display: grid; gap: 8px; justify-items: center; padding: 8px 0; }
.pay-ok[hidden] { display: none; }   /* an explicit display: grid otherwise defeats the hidden attr â†’ success shows pre-payment */
.pr-ico { display: inline-grid; place-items: center; width: 64px; height: 64px; border-radius: 50%;
  background: rgba(87,224,197,.12); color: #8ff0dc; border: 1px solid rgba(87,224,197,.4); }
.pay-result { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg);
  padding: 40px 34px; display: grid; gap: 10px; justify-items: center; text-align: center; }
.pay-result[hidden] { display: none; }   /* same footgun: honor the hidden attr so "You're booked!" only shows after payment */
.pay-result.bad .pr-ico { background: rgba(255,90,90,.12); color: #ffb3b3; border-color: rgba(255,90,90,.4); }
.pay-result code, .pay-result.ok code { font-size: .85rem; color: var(--gold-2); }
/* __PAYCSS__ */

/* ===================== Events ===================== */
.event-meta { list-style: none; display: flex; flex-wrap: wrap; gap: 12px 22px; margin: 22px 0 0; padding: 0; }
.event-meta li { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: .95rem; }
.event-meta svg { color: var(--gold); flex: 0 0 auto; }
.event-book { display: grid; grid-template-columns: 1.05fr .95fr; gap: 30px; align-items: start; }
.event-visual { border-radius: var(--radius-lg); overflow: hidden; border: 1px solid var(--line); background: var(--surface); }
.event-visual img { display: block; width: 100%; height: 100%; object-fit: cover; }
.event-book .contact-card { display: block; }
.event-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.event-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg);
  overflow: hidden; display: flex; flex-direction: column; transition: transform .3s var(--ease), border-color .3s; }
.event-card:hover { transform: translateY(-5px); border-color: rgba(252,240,0,.4); }
.ec-media { display: block; aspect-ratio: 4/3; overflow: hidden; }
.ec-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
.event-card:hover .ec-media img { transform: scale(1.05); }
.ec-body { padding: 20px 22px 22px; display: flex; flex-direction: column; gap: 8px; flex: 1; }
.ec-body h3 { font-family: var(--display); font-size: 1.2rem; }
.ec-meta { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: .88rem; margin: 0; }
.ec-meta svg { color: var(--gold); flex: 0 0 auto; }
.ec-foot { margin-top: auto; padding-top: 14px; display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ec-price { font-weight: 700; color: var(--text); font-size: .95rem; }
.ec-price small { display: block; color: var(--muted-2); font-weight: 500; font-size: .72rem; }
/* __ADMINCSS__ */

/* ===================== Admin ===================== */
.admin-body { background: var(--bg); }
.admin-login { min-height: 100vh; display: grid; place-items: center; padding: 24px; }
.admin-login .contact-card { width: 100%; max-width: 400px; display: grid; gap: 14px; }
.admin-bar { display: flex; align-items: center; justify-content: space-between; padding: 18px 26px;
  border-bottom: 1px solid var(--line); background: var(--surface); position: sticky; top: 0; z-index: 10; }
.admin-brand { font-family: var(--display); font-weight: 700; color: var(--text); text-decoration: none; }
.admin-brand span { color: var(--muted); font-weight: 500; }
.admin-main { max-width: var(--maxw); margin: 0 auto; padding: 30px 26px 70px; }
.admin-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 34px; }
.astat { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 22px; }
.astat .an { display: block; font-family: var(--display); font-size: 1.7rem; font-weight: 700; color: var(--gold-2); }
.astat .al { color: var(--muted); font-size: .85rem; }
.admin-h { font-family: var(--display); font-size: 1.3rem; margin: 26px 0 14px; }
.admin-tablewrap { overflow-x: auto; border: 1px solid var(--line); border-radius: var(--radius); background: var(--surface); }
.admin-table { width: 100%; border-collapse: collapse; font-size: .9rem; min-width: 720px; }
.admin-table th, .admin-table td { padding: 13px 16px; text-align: left; border-bottom: 1px solid var(--line-2); vertical-align: top; }
.admin-table th { color: var(--muted); font-weight: 600; font-size: .78rem; text-transform: uppercase; letter-spacing: .04em; }
.admin-table tr:last-child td { border-bottom: none; }
.admin-table code { font-size: .78rem; color: var(--muted); }
.admin-empty { text-align: center; color: var(--muted-2); padding: 26px; }
.st { display: inline-block; padding: 3px 11px; border-radius: 999px; font-size: .75rem; font-weight: 600; text-transform: capitalize; }
.st.b-paid { background: rgba(87,224,197,.14); color: #8ff0dc; }
.st.b-pending, .st.b-created { background: rgba(252,240,0,.14); color: var(--gold-2); }
.st.b-failed { background: rgba(255,90,90,.14); color: #ffb3b3; }

@media (max-width: 900px) {
  .event-book { grid-template-columns: 1fr; }
  .event-grid { grid-template-columns: 1fr 1fr; }
  .admin-stats { grid-template-columns: 1fr 1fr; }
}
.pay-dialog h2.title { font-size: var(--type-24); }
@media (max-width: 600px) { .event-grid { grid-template-columns: 1fr; } }

/* ---- contact form: honeypot, success message, admin message cell ---- */
.hp-field { position: absolute !important; left: -9999px !important; top: auto;
  width: 1px; height: 1px; overflow: hidden; }
.pay-msg.ok { color: #8ff0dc; }
.admin-msg { max-width: 420px; white-space: normal; color: var(--muted); font-size: .85rem; }

/* occasional upcoming-event announcement */
.upcoming-popup[hidden] { display: none; }
.upcoming-popup {
  position: fixed; inset: 0; z-index: 10000; display: grid; place-items: center;
  padding: 22px; background: rgba(5,5,8,.72); backdrop-filter: blur(9px);
  animation: popupIn .45s var(--ease) both;
}
.upcoming-popup-backdrop { position: absolute; inset: 0; }
.upcoming-popup-card {
  position: relative; z-index: 1; display: grid; grid-template-columns: minmax(190px, .8fr) minmax(260px, 1fr);
  width: min(760px, 100%); overflow: hidden; border: 1px solid rgba(252,240,0,.35);
  border-radius: 22px; background: linear-gradient(145deg, #1a1820, #0c0c10);
  box-shadow: 0 30px 100px rgba(0,0,0,.65), 0 0 45px rgba(252,240,0,.12);
}
.upcoming-popup-card > img { width: 100%; height: auto; min-height: 0; object-fit: contain; }
.upcoming-popup-copy { align-self: center; padding: 34px 32px 36px; }
.upcoming-popup-copy .eyebrow { color: var(--gold); }
.upcoming-popup-copy h2 { margin: 14px 0 10px; font-family: var(--display); font-size: var(--type-24); line-height: 1.08; }
.upcoming-popup-copy p { color: var(--muted); margin: 0 0 22px; line-height: 1.6; }
.upcoming-popup-close { position: absolute; top: 12px; right: 12px; z-index: 2; display: grid; place-items: center; width: 38px; height: 38px; border: 1px solid rgba(255,255,255,.2); border-radius: 50%; color: var(--text); background: rgba(7,7,10,.62); cursor: pointer; }
.upcoming-popup-close:hover { color: var(--gold); border-color: rgba(252,240,0,.6); }
html.popup-open { overflow: hidden; }
@keyframes popupIn { from { opacity: 0; } to { opacity: 1; } }
@media (max-width: 600px) {
  .upcoming-popup { padding: 16px; }
  .upcoming-popup-card { display: block; max-height: min(90vh, 720px); overflow-y: auto; }
  .upcoming-popup-card > img { display: block; height: auto; min-height: 0; object-position: center; }
  .upcoming-popup-copy { padding: 24px 22px 26px; }
  .upcoming-popup-copy h2 { font-size: 1.55rem; }
  .upcoming-popup-copy p { margin-bottom: 18px; }
}

/* =====================================================================
   HERO SCROLL-SCRUB  (homepage) â€” merged from /hero-scroll-scrub
   A <canvas> plays a 120-frame sequence as the user scrolls the 340vh
   track. The source's universal reset / body / demo .next-section rules
   were intentionally NOT copied â€” the site already has its own base. */
.mobile-hero { display: none; }
#hero-scrub { position: relative; height: 340vh; }

/* exit scrim: JS ramps its opacity 0 -> 1 over the last third of the scroll,
   dimming canvas + text to the page background for a seamless handoff so the
   hero settles out into the page instead of cutting abruptly. */
.hero-exit {
  position: absolute; inset: 0;
  background: var(--bg);
  opacity: 0; z-index: 3;
  pointer-events: none;
}

.hero-sticky {
  position: sticky; top: 0;
  height: 100vh; width: 100%;
  overflow: hidden;
  background: #000;
}

.hero-story-canvas {
  position: absolute; top: 0; left: 0;
  width: 100%; height: 100%;
  object-fit: cover;
}

.hero-digital-overlay {
  position: absolute; inset: 0; z-index: 2; pointer-events: none;
  overflow: hidden;
  /* mix-blend-mode:screen was removed: blending this overlay against the two
     full-screen canvases on every scroll frame was a major scrub-jank source.
     The icons keep their gold tint + drop-shadow glow, just without the
     per-frame backdrop re-composite. */
}
.hero-float-icon {
  position: absolute; display: grid; place-items: center;
  width: clamp(24px, 3vw, 42px); height: clamp(24px, 3vw, 42px);
  color: rgba(252, 240, 0, .68);
  opacity: .48; filter: drop-shadow(0 0 9px rgba(252, 240, 0, .42));
  animation: heroIconFloat 13s ease-in-out infinite;
  will-change: transform;   /* promote to its own layer so the float is pure
                               compositor work (the drop-shadow rasters once,
                               not every animation frame) */
}
.hero-float-icon svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.35; stroke-linecap: round; stroke-linejoin: round; }
.hfi-facebook { left: 8%; top: 18%; color: rgba(169, 128, 255, .62); animation-duration: 17s; animation-delay: -6s; }
.hfi-instagram { right: 9%; top: 16%; animation-duration: 15s; animation-delay: -3s; }
.hfi-whatsapp { right: 7%; bottom: 23%; color: rgba(170, 139, 255, .56); animation-duration: 19s; animation-delay: -11s; }
.hfi-megaphone { left: 5%; bottom: 20%; animation-duration: 16s; animation-delay: -8s; }
.hfi-arrow { right: 18%; top: 35%; color: rgba(252, 194, 17, .64); animation-duration: 14s; animation-delay: -1s; }
.hfi-dots { left: 17%; top: 40%; color: rgba(169, 128, 255, .48); animation-duration: 21s; animation-delay: -14s; }
.hero-growth-chart {
  position: absolute; right: 3%; bottom: 8%; width: clamp(180px, 24vw, 340px); height: auto;
  opacity: .35; filter: drop-shadow(0 0 8px rgba(252, 240, 0, .4));
}
.chart-grid { fill: none; stroke: rgba(255,255,255,.12); stroke-width: .7; stroke-dasharray: 2 7; }
.chart-line { fill: none; stroke: rgba(252,240,0,.78); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 1; animation: growthDraw 8s ease-in-out infinite; }
.chart-arrow { fill: none; stroke: rgba(252,240,0,.82); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; opacity: 0; animation: growthArrow 8s ease-in-out infinite; }
@keyframes heroIconFloat {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(-4deg); }
  35% { transform: translate3d(13px, -18px, 0) rotate(5deg); }
  70% { transform: translate3d(-10px, 9px, 0) rotate(-2deg); }
}
@keyframes growthDraw {
  0%, 10% { stroke-dashoffset: 1; opacity: .2; }
  45%, 78% { stroke-dashoffset: 0; opacity: 1; }
  100% { stroke-dashoffset: -1; opacity: .2; }
}
@keyframes growthArrow {
  0%, 42% { opacity: 0; transform: translateY(5px); }
  55%, 78% { opacity: .9; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-3px); }
}
.hero-text {
  position: absolute;
  top: 22%; left: 6%; right: 6%;
  z-index: 3;
  max-width: 900px;
  text-shadow: 0 4px 30px rgba(0, 0, 0, .7);
}
.hero-text h1 {
  font-family: var(--display);
  font-size: var(--type-32);
  font-weight: 800; line-height: 1.14; letter-spacing: -.02em;
  margin-bottom: 16px;
}
.hero-text p { font-size: var(--type-16); opacity: .85; }
.hero-award-copy {
  display: grid; gap: 4px; max-width: 760px;
  font-family: var(--display); font-size: var(--type-24) !important;
  line-height: 1.12; letter-spacing: -.02em; opacity: 1 !important;
}
.hero-award-copy[hidden] { display: none; }
.hero-award-copy strong { color: #ffc522; font-weight: 800; }
.hero-award-copy span { color: rgba(255,255,255,.92); font-weight: 600; }
.hero-award-copy b {
  background: linear-gradient(100deg, #fff34d, #ffc211);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  font-weight: 800; text-shadow: 0 0 16px rgba(252,240,0,.28);
}
#hero-copy[data-state="marketing"] h1 { color: rgba(255,255,255,.96); }
.hero-hash { color: #fcf000; font-weight: 800; text-shadow: 0 0 18px rgba(252,240,0,.45); }
#hero-copy[data-state="marketing"] h1 strong {
  background: linear-gradient(100deg, #fff34d 0%, #ffc211 44%, #d7b8ff 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  text-shadow: 0 0 24px rgba(252,240,0,.16);
}
#hero-copy[data-state="event"] { opacity: 1; }
.hero-copy-actions { display: flex; gap: 12px; margin-top: 24px; }

.hero-loading {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  background: #000; z-index: 5;
  font-size: 14px; letter-spacing: 1px; color: var(--gold);
  transition: opacity .5s ease;
}
.hero-loading.hidden { opacity: 0; pointer-events: none; }

.scroll-hint {
  position: absolute; bottom: 30px; left: 50%;
  transform: translateX(-50%);
  font-size: 13px; opacity: .6; z-index: 2;
  animation: heroScrubBounce 2s infinite;
}
@keyframes heroScrubBounce {
  0%, 100% { transform: translate(-50%, 0); }
  50%      { transform: translate(-50%, 8px); }
}

/* scrub hero on phones: the 120-frame canvas scrub is multi-megabyte to download and the
   scroll-jacked 260vh track is janky on touch â€” and the vh-vs-innerHeight gap in the scroll
   math left a black void below the fold. So phones get a clean single-screen hero: one bright
   math left a black void below the fold. So on phones the frame sequence AUTOPLAYS on a timer
   (initHeroAutoplay() in main.js) instead of being scroll-scrubbed: the stage-lights sweep on
   their own â€” no scroll-jack, no gap. ::before is an instant poster (and the graceful fallback
   if the canvas or its frames fail); a brand wash fades into the page; copy sits low. */
@media (max-width: 600px) {
  #hero-scrub { height: auto; }
  .hero-sticky {
    position: relative; height: 88vh; min-height: 500px;
    overflow: hidden; background: #000;
  }
  .hero-sticky::before {          /* instant poster + graceful fallback (Ken-Burns if the canvas fails) */
    content: ""; position: absolute; inset: 0; z-index: 0;
    background: #08080c;
    animation: heroKen 22s ease-in-out infinite alternate;
    will-change: transform;
  }
  .hero-story-canvas {            /* active single render surface */
    display: block; z-index: 0;
  }
  .hero-sticky::after {           /* legibility wash that fades into the page bg below */
    content: ""; position: absolute; inset: 0; z-index: 1;
    background: linear-gradient(180deg, rgba(10, 10, 12, .30) 0%, rgba(10, 10, 12, .62) 55%, var(--bg) 100%);
  }
  .hero-digital-overlay { z-index: 2; }
  .hero-float-icon { width: 24px; height: 24px; opacity: .34; }
  .hfi-dots, .hfi-arrow { display: none; }
  .hero-growth-chart { right: -8%; bottom: 8%; width: 230px; opacity: .22; }
  .hero-exit { display: none !important; }
  .hero-text {
    position: absolute; top: auto; bottom: 11%; left: 22px; right: 22px; z-index: 2;
    opacity: 1; transform: none;   /* keep the text readable on small screens */
  }
  .hero-text h1 { font-size: var(--type-24); line-height: 1.08; overflow-wrap: break-word; }
  .hero-copy-actions { margin-top: 18px; }
}
@keyframes heroKen {
  from { transform: scale(1.05) translate(0, -1.5%); }
  to   { transform: scale(1.16) translate(1.5%, 1.5%); }
}
@media (prefers-reduced-motion: reduce) {
  .hero-sticky::before { animation: none; }
  .hero-float-icon, .chart-line, .chart-arrow { animation: none; }
  .chart-line { stroke-dashoffset: 0; opacity: .7; }
  .chart-arrow { opacity: .7; }
}

/* Supplied two-part hero story: both canvases share one pinned stage and crossfade
   around the handoff, so the event scene grows out of the final marketing frame. */
#hero-scrub { height: 420vh; }
.hero-sticky { isolation: isolate; }
.hero-story-canvas {
  position: absolute; inset: 0; z-index: 1;
  display: block; width: 100%; height: 100%;
  object-fit: cover; opacity: 0;
  contain: layout paint;
}
#hero-canvas-event { opacity: 1; }
/* The supplied frame sequences are the complete visual story; remove the old
   floating-icon/chart animation layer from the hero. */
.hero-digital-overlay, .hero-watermark-mask { display: none !important; }
.hero-story-transition {
  position: absolute; inset: 0; z-index: 2; pointer-events: none;
  opacity: 0;
  background:
    radial-gradient(ellipse at 58% 48%, rgba(252,240,0,.24), transparent 25%),
    radial-gradient(ellipse at 42% 56%, rgba(139,107,255,.24), transparent 38%),
    linear-gradient(180deg, rgba(7,7,11,.04), rgba(7,7,11,.22) 70%, rgba(7,7,11,.72));
  /* Keep this as an ordinary translucent layer. Blend modes force an extra
     compositing pass while the canvas is redrawn on every animation frame. */
}
.hero-story-exit {
  position: absolute; inset: 0; z-index: 4; pointer-events: none;
  opacity: 0;
  background:
    linear-gradient(180deg, rgba(10,10,12,.04) 0%, rgba(10,10,12,.45) 56%, var(--bg) 100%),
    var(--bg);
  will-change: opacity;
}
.hero-watermark-mask {
  position: absolute; right: 0; bottom: 0; z-index: 5;
  width: clamp(150px, 17vw, 250px); height: clamp(120px, 15vw, 205px);
  pointer-events: none;
  background: linear-gradient(135deg, rgba(7,7,11,.86) 0%, rgba(7,7,11,.95) 34%, #07070b 68%, #07070b 100%);
}
.hero-digital-overlay { z-index: 3; }
.hero-text { z-index: 6; }

@media (max-width: 600px) {
  #hero-scrub { height: 360vh; }
  /* The site header is sticky too. Reserve its mobile height so the hero
     canvas and copy never slide underneath the header while scrubbing. */
  .hero-sticky {
    position: sticky;
    top: 68px;
    height: calc(100dvh - 68px);
    min-height: calc(100svh - 68px);
  }
  .hero-sticky::before, .hero-sticky::after { display: none; }
  .hero-sticky { background: linear-gradient(180deg, #08080c 0%, #12101a 46%, #08080c 100%); }
  /* Keep the copy below the sticky mobile header. The hero stage is pinned at
     the viewport top, so a percentage-only offset can slide the first lines
     underneath the header on short phone screens. */
  .hero-text {
    left: 18px !important;
    right: 18px !important;
    top: max(24px, 4vh) !important;
    bottom: auto !important;
    max-width: none;
    overflow: visible;
  }
  .hero-marketing-text, .hero-event-text { transform: none !important; }
  .hero-text h1 { font-size: var(--type-24); line-height: 1.08; }
  .hero-text p { max-width: 31rem; margin-bottom: 0; font-size: .95rem; line-height: 1.45; }
  .hero-award-copy { gap: 3px; font-size: var(--type-20) !important; line-height: 1.14; }
  .scroll-hint { display: block !important; bottom: max(18px, env(safe-area-inset-bottom)); }
  .hero-digital-overlay { display: block; }
  .hero-float-icon { width: 23px; height: 23px; opacity: .42; }
  .hfi-facebook { left: 8%; top: 17%; }
  .hfi-instagram { right: 8%; top: 16%; }
  .hfi-whatsapp { right: 9%; bottom: 31%; }
  .hfi-megaphone { left: 7%; bottom: 29%; }
  .hfi-arrow { right: 18%; top: 34%; }
  .hero-story-transition { background: linear-gradient(180deg, rgba(7,7,11,.04), rgba(7,7,11,.30) 68%, rgba(7,7,11,.78)); }
  /* The mobile story already ends naturally when the sticky stage releases.
     Keep the final marketing frame bright instead of covering it with the
     desktop handoff scrim. */
  .hero-story-exit { display: none !important; }
  .hero-watermark-mask { width: 150px; height: 128px; }
  .intro-inner { gap: 12px; padding-inline: 20px; }
  .intro-brand-logo { width: min(300px, 72vw); }
  .intro-word { font-size: 1rem; letter-spacing: .11em; }
  .intro-caption { max-width: 90vw; font-size: .62rem; letter-spacing: .13em; }
}
@media (max-width: 380px) {
  .hero-text { top: max(20px, 4vh); }
  .hero-text h1 { font-size: var(--type-24); }
  .hero-text p { font-size: .88rem; }
}

/* =====================================================================
   Mobile polish â€” press feedback, safe-area insets, one-tap action bar.
   The client browses mostly on phones, where the primary CTA is buried
   in the hamburger drawer, so it's mirrored into a pinned bottom bar;
   taps get real feedback because touch has no :hover.
   ===================================================================== */
* { -webkit-tap-highlight-color: transparent; }            /* no grey flash on tap */
.btn:active { transform: translateY(-1px) scale(.97); }
.svc:active, .pkg:active, .member:active, .event-card:active, .tile:active { transform: scale(.985); }
.nav a:active, .mb-item:active { opacity: .68; }

/* touch keeps :hover "stuck" after a tap â€” drop the lift on hover-less devices */
@media (hover: none) {
  .svc:hover, .pkg:hover, .member:hover, .event-card:hover,
  .btn-primary:hover, .btn-secondary:hover, .btn-ghost:hover { transform: none; }
}

.mobile-bar { display: none; }        /* phones-only; revealed in the â‰¤600px block below */
@media (max-width: 600px) {
  .mobile-bar {
    display: flex; gap: 8px; align-items: stretch;
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 120;
    padding: 8px 12px calc(8px + env(safe-area-inset-bottom, 0px));
    /* SOLID, no backdrop-filter anywhere. A backdrop-filter on this fixed bar â€” or on a
       pseudo inside its stacking context â€” drops the gold CTA's label during scroll
       repaints on mobile Chrome (the empty-gold-pill bug). Two filter-based fixes failed;
       removing the filter entirely eliminates the trigger. Losing the frosted blur is the
       accepted trade for a CTA whose text never vanishes. */
    background: #101014;
    border-top: 1px solid var(--line);
    transition: transform .28s cubic-bezier(.4, 0, .2, 1);
  }
  body.nav-open .mobile-bar { display: none; }   /* don't sit over the open nav drawer */
  body.lb-open  .mobile-bar { display: none; }   /* nor over an open gallery lightbox */
  /* Reserve space so the fixed bar never covers the final page content. */
  body { padding-bottom: calc(76px + env(safe-area-inset-bottom, 0px)); }
  .mb-item {
    display: inline-flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 3px; min-width: 54px; min-height: 52px; padding: 6px 8px; border-radius: 12px;
    font-size: .72rem; font-weight: 600; color: var(--text);
    background: rgba(255, 255, 255, .04); border: 1px solid var(--line);
  }
  .mb-item svg { width: 20px; height: 20px; }
  .mb-cta {
    flex: 1 1 auto; min-width: 0; flex-direction: row; gap: 6px;
    font-size: .92rem; font-weight: 800; letter-spacing: .01em; white-space: nowrap;
    color: #130b02; background: #fcf000; border: 0;
    /* SOLID gold â€” no gradient, no box-shadow, no layer hints. Those were the ONLY paint
       properties unique to this button; Call/WhatsApp (plain solid fills, no shadow) never
       broke. The bar is position:fixed, so it's a composited layer on mobile; a real GPU can
       drop the foreground repaint of a re-rasterised gradient/shadow child during scroll,
       leaving the filled-but-wordless pill. Paint kept as simple as the working buttons so the
       label can't be dropped. Backdrop-filter was already ruled out across three prior fixes. */
  }
  .mb-cta > span { color: #130b02; }
  body { padding-bottom: calc(66px + env(safe-area-inset-bottom, 0px)); }   /* clear the pinned bar */
  .container {
    padding-left: max(16px, env(safe-area-inset-left));
    padding-right: max(16px, env(safe-area-inset-right));
  }
}

/* =====================================================================
   Mobile "wow" pass â€” richer reveals, editorial type rhythm, a header
   that condenses on scroll, and paint savings below the fold. Everything
   here is phone-scoped (â‰¤600px) and defers to reduced-motion.
   ===================================================================== */

/* #4 â€” scroll-reveal: a touch more travel + a per-item cascade so grids
   ripple in instead of snapping as one block. will-change is dropped the
   moment an item lands, so it never lingers on every reveal at once. */
.js .reveal:not(.in) { will-change: opacity, transform; }
@media (max-width: 600px) {
  .js .reveal { transform: translateY(20px) scale(.985); }
  .js .reveal.in { transform: none; }
  .js .stats-grid .stat:nth-child(2)     { transition-delay: .08s; }
  .js .stats-grid .stat:nth-child(3)     { transition-delay: .16s; }
  .js .stats-grid .stat:nth-child(4)     { transition-delay: .24s; }
  .js .gallery-grid .tile:nth-child(2n)  { transition-delay: .09s; }
  .js .team-grid .member:nth-child(3n+2) { transition-delay: .08s; }
  .js .team-grid .member:nth-child(3n)   { transition-delay: .16s; }
}

/* #5 â€” type & spacing rhythm: bigger lead copy, more line-height air, and
   pretty/balanced wrapping so headings and paragraphs read editorially. */
@media (max-width: 600px) {
  .lead         { font-size: 1.06rem; line-height: 1.72; }
  .hero-text p  { font-size: 1.05rem; line-height: 1.6; }
  h2.title      { line-height: 1.12; }
  .section-head { margin-bottom: 30px; }
  p      { text-wrap: pretty; }
  .title { text-wrap: balance; }
}

/* #6 â€” header condenses on scroll to give phones back some screen. */
@media (max-width: 600px) {
  .header-inner, .brand-logo { transition: height .3s var(--ease); }
  .site-header.scrolled .header-inner { height: 58px; }
  .site-header.scrolled .brand-logo   { height: 28px; }
}

/* #1 â€” skip paint/layout for off-screen lower sections on phones. The
   first .section (#services) is untouched, and .stats sits too near the
   fold to reserve space, so only later siblings + CTA + footer opt in. */
@media (max-width: 600px) {
  .section ~ .section,
  .cta-band,
  .site-footer {
    content-visibility: auto;
    contain-intrinsic-size: auto 500px;
  }
}

/* reduced motion: keep the richer reveal from reintroducing movement. */
@media (prefers-reduced-motion: reduce) {
  .js .reveal { transform: none; transition-delay: 0s; }
}

/* =====================================================================
   Brand intro splash (home only) â€” the gold monogram draws itself in and
   the wordmark rises, then the whole overlay lifts to reveal the hero.
   Timeline is pure CSS (uncovers even if JS never runs); JS only flags it
   as seen (once per session) and removes the node afterwards.
   ===================================================================== */
#intro {
  position: fixed; inset: 0; z-index: 9999;
  display: grid; place-items: center;
  background:
    radial-gradient(circle at 50% 42%, rgba(252,240,0,.09), transparent 24%),
    radial-gradient(circle at 50% 55%, rgba(139,107,255,.12), transparent 48%),
    #0a0a0c;
  animation: introOut 1.15s cubic-bezier(.22,.7,.2,1) 2.15s forwards;
}
.intro-inner { display: grid; justify-items: center; gap: 15px; text-align: center; }
.intro-brand-logo {
  display: block; width: min(300px, 64vw); height: auto;
  filter: drop-shadow(0 10px 30px rgba(252, 240, 0, .28));
  opacity: 0; transform: translateY(10px) scale(.96);
  animation: introPop .8s var(--ease) .15s both;
}
.intro-word {
  display: inline-block;
  font-family: var(--display); font-weight: 700; font-size: 1.16rem;
  letter-spacing: .14em; text-transform: uppercase; color: var(--text);
  overflow: hidden; white-space: nowrap; opacity: 0;
  clip-path: inset(0 100% 0 0);
  animation: introType 1.15s steps(12, end) .85s both;
}
 .intro-caption {
  color: rgba(255,255,255,.62); font-size: .72rem; letter-spacing: .18em;
  text-transform: uppercase; opacity: 0; animation: introWord .7s var(--ease) 1.9s both;
 }
@keyframes introPop  { from { opacity: 0; transform: translateY(10px) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes introType { from { clip-path: inset(0 100% 0 0); opacity: 0; } to { clip-path: inset(0 0 0 0); opacity: 1; } }
@keyframes introWord { from { opacity: 0; transform: translateY(9px); } to { opacity: 1; transform: none; } }
@keyframes introOut  { to { opacity: 0; visibility: hidden; transform: none; } }

html.intro-playing { overflow: hidden; }
html.intro-seen #intro { display: none; }
@media (prefers-reduced-motion: reduce) {
  #intro { animation-duration: .2s; animation-delay: .2s; }
  .intro-brand-logo, .intro-word, .intro-caption { animation: none; opacity: 1; transform: none; width: auto; border: 0; clip-path: none; }
}

/* =====================================================================
   Completed Events â€” showcase slider + fullscreen gallery lightbox
   (event.php listing). Dark/gold, motion-rich, fully responsive.
   ===================================================================== */
.completed { padding-top: 26px; }
.evt-stack { display: flex; flex-direction: column; gap: 22px; margin-top: 26px; }

.evt-card {
  display: grid; grid-template-columns: 1.15fr .85fr; gap: 0;
  width: 100%; text-align: left; cursor: pointer; color: var(--text); font: inherit;
  background: linear-gradient(180deg, var(--surface), var(--surface-2));
  border: 1px solid var(--line); border-radius: var(--radius-lg); overflow: hidden;
  transition: border-color .35s var(--ease), transform .35s var(--ease), box-shadow .35s var(--ease);
}
.evt-card:hover { border-color: var(--line-2); transform: translateY(-3px); box-shadow: var(--shadow); }
.evt-card:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }

.evt-cover { position: relative; overflow: hidden; min-height: 340px; background: #0a0a0c; }
.evt-cover > img, .evt-cover-vid { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.evt-cover > img { transition: transform .8s var(--ease); }
.evt-card:hover .evt-cover > img { transform: scale(1.06); }
.evt-cover-vid { opacity: 0; transition: opacity .5s var(--ease); }
.evt-card:hover .evt-cover-vid { opacity: 1; }
.evt-badge {
  position: absolute; top: 14px; left: 14px; z-index: 3;
  display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 999px;
  font-size: .74rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: #1c1406; background: var(--grad); box-shadow: 0 6px 18px rgba(252,240,0,.35);
}
.evt-badge svg { width: 14px; height: 14px; }
.evt-play {
  position: absolute; inset: 0; z-index: 2; margin: auto; width: 62px; height: 62px;
  display: grid; place-items: center; color: #fff; background: rgba(10,10,12,.45);
  border: 1px solid rgba(255,255,255,.35); border-radius: 999px; backdrop-filter: blur(3px);
  pointer-events: none; transition: transform .35s var(--ease), background .35s var(--ease);
}
.evt-card:hover .evt-play { transform: scale(1.08); background: rgba(10,10,12,.2); }
.evt-count {
  position: absolute; bottom: 14px; left: 14px; z-index: 3; padding: 5px 10px; border-radius: 999px;
  font-size: .74rem; font-weight: 600; color: var(--text);
  background: rgba(10,10,12,.6); border: 1px solid var(--line-2); backdrop-filter: blur(4px);
}
.evt-shine {
  position: absolute; inset: 0; z-index: 2; pointer-events: none; transform: translateX(-120%);
  background: linear-gradient(115deg, transparent 40%, rgba(255,255,255,.14) 50%, transparent 60%);
  transition: transform .9s var(--ease);
}
.evt-card:hover .evt-shine { transform: translateX(120%); }

.evt-meta { padding: 26px 28px; display: flex; flex-direction: column; gap: 12px; justify-content: center; }
.evt-kind {
  align-self: flex-start; font-family: var(--display); font-size: .72rem; letter-spacing: .12em;
  text-transform: uppercase; color: var(--gold-2); padding: 5px 11px;
  border: 1px solid var(--line-2); border-radius: 999px;
}
.evt-name { font-family: var(--display); font-weight: 700; font-size: var(--type-24); line-height: 1.14; }
.evt-facts { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.ef { display: inline-flex; align-items: center; gap: 7px; color: var(--muted); font-size: .92rem; }
.ef svg { color: var(--gold); flex: none; }
.evt-blurb { color: var(--muted); font-size: .96rem; line-height: 1.6; }
.evt-open { margin-top: 6px; display: inline-flex; align-items: center; gap: 8px; color: var(--gold-2); font-weight: 600; }
.evt-open svg { transition: transform .35s var(--ease); }
.evt-card:hover .evt-open svg { transform: translate(3px, -3px); }
/* (completed events now render as a vertical stack â€” the old slider nav
   arrows + dots are gone, so their rules were removed.) */

/* fullscreen gallery lightbox */
.lightbox {
  position: fixed; inset: 0; z-index: 1000; display: grid;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr);
  min-width: 0; min-height: 0; overflow: hidden;
}
.lightbox[hidden] { display: none; }
.lb-backdrop { position: absolute; inset: 0; background: rgba(7,7,9,.975); backdrop-filter: blur(8px); }
body.lb-open { overflow: hidden; }
.lb-shell {
  position: relative; z-index: 1; display: flex; flex-direction: column;
  width: 100%; height: 100%; min-width: 0; min-height: 0; overflow: hidden;
  padding: 16px clamp(12px, 4vw, 40px) 24px;
}
.lb-bar { display: flex; align-items: center; gap: 14px; padding: 6px 2px 14px; color: var(--text); }
.lb-title { font-family: var(--display); font-weight: 700; font-size: 1.05rem; }
.lb-count { color: var(--muted); font-size: .9rem; }
.lb-close {
  margin-left: auto; width: 44px; height: 44px; display: grid; place-items: center;
  color: var(--text); background: var(--surface); border: 1px solid var(--line-2);
  border-radius: 999px; cursor: pointer; transition: background .3s var(--ease), border-color .3s var(--ease);
}
.lb-close:hover { background: var(--surface-2); border-color: var(--gold); }
.lb-stage { position: relative; flex: 1; display: flex; align-items: center; min-height: 0; min-width: 0; isolation: isolate; }
.lb-track { position: relative; flex: 1; min-width: 0; min-height: 0; width: 100%; height: 100%; overflow: hidden; }
.lb-slide {
  position: absolute; inset: 0; display: grid; place-items: center;
  min-width: 0; min-height: 0; padding: 0 4px;
  opacity: 0; visibility: hidden; transform: translateX(28px);
  pointer-events: none; transition: opacity .5s var(--ease), transform .5s var(--ease), visibility .5s;
}
.lb-slide.is-active { opacity: 1; visibility: visible; transform: translateX(0); pointer-events: auto; }
.lb-slide img, .lb-slide video {
  display: block; width: 100%; height: 100%; min-width: 0; min-height: 0;
  max-width: 100%; max-height: 100%;
  object-fit: contain; border-radius: var(--radius-sm); background: #0a0a0c;
}
.lb-nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 10;
  width: 52px; height: 52px; display: grid; place-items: center; color: var(--text);
  background: rgba(19,19,25,.72); border: 1px solid var(--line-2); border-radius: 999px;
  cursor: pointer; pointer-events: auto; touch-action: manipulation;
  transition: background .3s var(--ease), border-color .3s var(--ease);
}
.lb-nav:hover { background: var(--surface-2); border-color: var(--gold); }
.lb-nav.prev { left: 0; }
.lb-nav.next { right: 0; }

@media (max-width: 720px) {
  .evt-card { grid-template-columns: 1fr; }
  .evt-cover { min-height: 260px; }
  .evt-meta { padding: 20px; }
  .lb-nav { width: 44px; height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .lb-track { transition: none; }
  .evt-card:hover { transform: none; }
  .evt-card:hover .evt-cover > img { transform: none; }
  .evt-shine { display: none; }
}

/* =====================================================================
   UPCOMING / TEASER cards (event.php) â€” dark cinematic suspense.
   Blurred silhouette bg, glowing gold border, spotlight beam sweep,
   drifting smoke, live countdown + inline "Notify me" form. All motion
   is disabled under prefers-reduced-motion (see the block at the end).
   ===================================================================== */
.upcoming { position: relative; }
.teaser-grid {
  display: grid; gap: 26px; margin-top: 8px;
  grid-template-columns: repeat(3, 1fr);
}
.teaser-card {
  position: relative; overflow: hidden; isolation: isolate;
  min-height: 420px; border-radius: var(--radius-lg);
  padding: 1px;                       /* room for the glowing border ring */
  background: linear-gradient(160deg, rgba(252,240,0,.5), rgba(252,240,0,.06) 40%, rgba(255,255,255,.05));
  box-shadow: 0 24px 60px -28px rgba(0,0,0,.9);
  animation: tc-pulse 3.6s var(--ease) infinite;
}
/* blurred/darkened silhouette image behind everything */
.teaser-card::before {
  content: ""; position: absolute; inset: 0; z-index: 0;
  background-image: var(--tbg); background-size: cover; background-position: center;
  filter: blur(16px) brightness(.34) saturate(.7); transform: scale(1.18);
  transition: filter .6s var(--ease), transform .6s var(--ease);
}
/* Show the same upcoming artwork used by the announcement popup inside the
   teaser card as a visible, softly darkened backdrop. */
.tc-art {
  position: absolute; inset: 0; z-index: 0;
  width: 100%; height: 100%; object-fit: cover;
  opacity: .46; filter: brightness(.62) saturate(.9);
  transform: scale(1.04);
  transition: opacity .6s var(--ease), filter .6s var(--ease), transform .6s var(--ease);
}
/* dark wash so text always reads over the photo */
.teaser-card::after {
  content: ""; position: absolute; inset: 0; z-index: 1; border-radius: inherit;
  background: linear-gradient(180deg, rgba(10,10,12,.35), rgba(10,10,12,.78) 60%, rgba(10,10,12,.94));
}
@keyframes tc-pulse {
  0%,100% { box-shadow: 0 24px 60px -28px rgba(0,0,0,.9), 0 0 0 rgba(252,240,0,0); }
  50%     { box-shadow: 0 24px 60px -28px rgba(0,0,0,.9), 0 0 34px -6px rgba(252,240,0,.55); }
}
/* spotlight beam sweeping across the card */
.tc-beam {
  position: absolute; inset: -40% -60%; z-index: 2; pointer-events: none;
  background: linear-gradient(75deg, transparent 42%, rgba(243,208,137,.16) 50%, transparent 58%);
  transform: translateX(-30%) rotate(8deg);
  animation: tc-beam 6.5s var(--ease) infinite;
}
@keyframes tc-beam {
  0%   { transform: translateX(-60%) rotate(8deg); opacity: 0; }
  35%  { opacity: 1; }
  70%  { transform: translateX(60%) rotate(8deg); opacity: 0; }
  100% { transform: translateX(60%) rotate(8deg); opacity: 0; }
}
/* drifting smoke / particle haze */
.tc-smoke {
  position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: .5;
  background:
    radial-gradient(60px 60px at 20% 80%, rgba(252,240,0,.10), transparent 70%),
    radial-gradient(90px 90px at 75% 90%, rgba(255,255,255,.06), transparent 70%),
    radial-gradient(70px 70px at 50% 100%, rgba(252,240,0,.08), transparent 70%);
  animation: tc-smoke 9s ease-in-out infinite alternate;
}
@keyframes tc-smoke {
  0%   { transform: translateY(6px) scale(1);    opacity: .35; }
  100% { transform: translateY(-10px) scale(1.08); opacity: .6; }
}
.tc-inner {
  position: relative; z-index: 3;
  display: flex; flex-direction: column; gap: 12px;
  height: 100%; padding: 22px 22px 24px;
  border-radius: inherit;
}
.tc-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.tc-badge {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .72rem; font-weight: 800; letter-spacing: .14em; text-transform: uppercase;
  color: var(--gold-2); padding: 6px 11px; border-radius: 999px;
  border: 1px solid rgba(252,240,0,.4); background: rgba(252,240,0,.08);
}
.tc-hint { font-size: .82rem; color: var(--muted); text-align: right; }
.tc-name { font-family: var(--display); font-size: 1.5rem; line-height: 1.15; margin: 6px 0 0; }
.tc-q {
  letter-spacing: .22em; background: var(--grad);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.tc-clue { color: var(--text); font-style: italic; opacity: .92; margin: 0; }
/* live countdown */
.tc-count { display: flex; gap: 8px; margin-top: auto; }
.tc-count .cu {
  flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 10px 4px; border-radius: var(--radius-sm);
  background: rgba(255,255,255,.04); border: 1px solid var(--line);
}
.tc-count .cu b {
  font-family: var(--display); font-size: 1.35rem; font-weight: 800;
  color: var(--gold-2); font-variant-numeric: tabular-nums; line-height: 1;
}
.tc-count .cu i { font-style: normal; font-size: .62rem; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.tc-count.is-live b { color: var(--gold-2); }
.tc-count.is-done { justify-content: center; }

.tc-notify, .tc-cta { width: 100%; justify-content: center; margin-top: 4px; }
/* inline notify form */
.tc-form { display: grid; gap: 10px; margin-top: 4px; }
.tc-form[hidden] { display: none; }
.tc-form .field span { font-size: .78rem; }
.tc-msg { margin: 2px 0 0; font-size: .84rem; min-height: 1em; }
.tc-msg.ok  { color: #8ff0dc; }
.tc-msg.bad { color: #ffb4a2; }

/* hover: lift the veil a little */
.teaser-card:hover::before { filter: blur(9px) brightness(.5) saturate(.85); transform: scale(1.12); }
.teaser-card:hover .tc-art { opacity: .62; filter: brightness(.7) saturate(1); transform: scale(1.01); }
.teaser-card:hover { animation-play-state: paused; box-shadow: 0 28px 66px -26px rgba(0,0,0,.95), 0 0 40px -6px rgba(252,240,0,.6); }

/* revealed â†’ behaves like a normal, un-blurred event card */
.teaser-card.is-revealed { animation: none; }
.teaser-card.is-revealed::before { filter: brightness(.6) saturate(1); transform: scale(1.04); }
.teaser-card.is-revealed .tc-beam,
.teaser-card.is-revealed .tc-smoke { display: none; }

.teaser-foot { text-align: center; color: var(--muted); font-size: .85rem; margin-top: 22px; }

@media (max-width: 980px) { .teaser-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 680px) {
  .teaser-grid { grid-template-columns: 1fr; gap: 20px; }
  .teaser-card { min-height: 360px; }
  .tc-name { font-size: 1.35rem; }
  .tc-count .cu b { font-size: 1.2rem; }
}
@media (prefers-reduced-motion: reduce) {
  .teaser-card { animation: none; }
  .tc-beam, .tc-smoke { display: none; }
  .teaser-card::before, .teaser-card:hover::before { transition: none; }
}

/* Mobile-only editorial hero. Desktop scroll story retains its existing layout. */
@media (max-width: 600px) {
  #hero-scrub { height: auto; }
  #hero-scrub > .hero-sticky { display: none; }
  .mobile-hero {
    display: flex; flex-direction: column; position: relative; isolation: isolate;
    padding: 35px 22px 24px; overflow: hidden;
    background: radial-gradient(ellipse at 100% 48%, #fcf00009, transparent 65%), #0a0a0c;
  }
  .mh-eyebrow { display: flex; align-items: center; gap: 8px; color: #c6c5bc; font: 700 9px/1.5 var(--font); letter-spacing: .16em; margin-bottom: 22px; }
  .mh-eyebrow > span, .mh-live-dot { width: 5px; height: 5px; flex-shrink: 0; border-radius: 50%; background: var(--gold); }
  .mobile-hero h1 { font-family: var(--font); font-size: clamp(42px, 12.6vw, 72px); font-weight: 800; line-height: 1.04; letter-spacing: -.065em; margin: 0 0 19px; color: #f7f6ef; }
  .mobile-hero h1 em { font-family: Georgia, 'Times New Roman', serif; font-weight: 400; font-style: italic; color: var(--gold); letter-spacing: -.065em; }
  .mh-description { max-width: 34ch; color: #aaaab1; font-size: 14px; line-height: 1.75; margin: 0 0 23px; }
  .mh-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 18px; margin-bottom: 30px; }
  .mh-cta { display: inline-flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 49px; padding: 12px 17px; border-radius: 8px; background: var(--gold); color: #111208; font-size: 12px; font-weight: 800; text-decoration: none; }
  .mh-cta svg { flex-shrink: 0; }
  .mh-cta:active { transform: translateY(1px); }
  .mh-work { display: inline-flex; align-items: center; gap: 7px; min-height: 48px; color: #dededb; font-size: 11px; font-weight: 600; }
  .mh-work span { font-size: 17px; color: var(--gold); }
  .mh-showcase { position: relative; width: 100%; aspect-ratio: 1.35; overflow: hidden; border: 1px solid #ffffff24; border-radius: 12px; background: #171416; contain: paint; }
  .mh-scene { position: absolute; inset: 0; background-size: cover; background-position: center; }
  .mh-scene-event { background-image: url('../hero-event-mobile/frame_035.webp'); animation: mhDrift 14s ease-in-out infinite alternate; }
  .mh-scene-brand { background-image: url('../hero-marketing-mobile/frame_090.webp'); opacity: 0; animation: mhCrossfade 14s ease-in-out infinite; }
  .mh-scene { animation-play-state: paused; }
  .mobile-hero.is-active .mh-scene { animation-play-state: running; }
  .mh-shade { position: absolute; inset: 0; background: linear-gradient(180deg, #08080b80, transparent 38%, #08080bea); }
  .mh-scene-top { position: absolute; top: 17px; left: 17px; right: 17px; display: flex; align-items: center; gap: 7px; font-size: 8px; font-weight: 700; letter-spacing: .13em; color: #f8efd8; }
  .mh-scene-top > span:last-child { margin-left: auto; color: var(--gold); font-size: 20px; line-height: 1; }
  .mh-scene-caption { position: absolute; bottom: 38px; left: 17px; right: 17px; display: flex; justify-content: space-between; align-items: end; gap: 8px; }
  .mh-scene-caption > span:first-child { font-family: var(--font); font-size: clamp(23px, 6.6vw, 36px); font-weight: 500; letter-spacing: -.045em; line-height: 1.1; color: #fffdf4; }
  .mh-scene-caption strong { font-weight: 800; }
  .mh-orbit { flex-shrink: 0; width: 36px; height: 36px; display: grid; place-items: center; border: 1px solid #fff3c970; border-radius: 50%; color: var(--gold); font-size: 23px; }
  .mh-scene-index { position: absolute; bottom: 15px; left: 18px; color: #c2bdaa; font-size: 7px; letter-spacing: .16em; }
  .mh-proof { display: flex; align-items: center; gap: 11px; padding-top: 20px; }
  .mh-award { display: grid; place-items: center; width: 34px; height: 34px; border: 1px solid #fcf00030; border-radius: 50%; font-size: 22px; color: var(--gold); }
  .mh-proof strong { display: block; color: #deded4; font-size: 10px; font-weight: 700; letter-spacing: .035em; }
  .mh-proof small { display: block; margin-top: 3px; color: #929299; font-size: 9px; }
}
@keyframes mhCrossfade { 0%, 25%, 100% { opacity: 0; transform: scale(1); } 45%, 78% { opacity: 1; transform: scale(1.035); } }
@keyframes mhDrift { from { transform: scale(1); } to { transform: scale(1.045); } }
@media (max-width: 600px) and (prefers-reduced-motion: reduce) {
  .mobile-hero .mh-scene { animation: none; }
  .mobile-hero .mh-scene-brand { display: none; }
}
/* Rounded client-logo ribbon and lean mobile rendering. */
.marquee-logo{border-radius:999px;flex-basis:170px;width:170px;height:88px;padding:15px 24px;background:#f4f4ef;border-color:#ffffff1a}
.marquee-logo img{border-radius:8px}
@media(max-width:900px){body.nav-open .nav-toggle{z-index:91;background:var(--bg-1)}}
@media(max-width:600px){
  .bg-fx,.cursor-glow,body::after{display:none}
  body::before{position:absolute;height:800px;background:radial-gradient(ellipse at 80% 0,#fcf0000c,transparent 65%)}
  #intro{display:none}
  html.intro-playing{overflow:clip}
  .site-header.scrolled{background:#0a0a0cf5;backdrop-filter:none;-webkit-backdrop-filter:none}
  .marquee-logo{flex-basis:132px;width:132px;height:72px;padding:12px 19px;border-radius:999px}
  .marquee-track{gap:16px}
  .mobile-hero .mh-scene{animation:none}
  .mobile-hero .mh-scene-brand{display:none}
  .mobile-hero .mh-eyebrow{font-size:10px}
  .mobile-hero .mh-scene-index{font-size:9px}
  .mobile-hero .mh-proof strong,.mobile-hero .mh-proof small{font-size:11px}
  .header-inner,.brand-logo{transition:none}
  .page-hero{padding-top:48px;padding-bottom:30px}
}
@media(max-width:600px){
  .section ~ .section,.cta-band,.site-footer{content-visibility:visible;contain-intrinsic-size:none}
  .js .reveal{transform:none;transition-property:opacity;transition-duration:.25s}
}
/* Bare client artwork: remove the large white pill containers. */
.marquee-logo,.marquee-logo:hover{background:transparent;border:0;border-radius:0;box-shadow:none}
.marquee-logo img{border-radius:0}

/* Performance: retain static ambient light without continuously moving filter layers. */
.bg-orb{animation:none;filter:none;will-change:auto}.cursor-glow{display:none}
body::after{display:none}
.site-header{transition:background .2s,border-color .2s}.site-header.scrolled{background:#0a0a0cf5;backdrop-filter:none;-webkit-backdrop-filter:none}
.js .reveal:not(.in){will-change:auto}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
