/* =========================================================================
   Oxium × Tech Gateway (Jordan Adeniji & Zuriel Jonah) · pitch site (system A)
   Near-black ground, cyan. The agency wrapper (house lean), deliberately
   separated from the funnel pages, which carry Tech Gateway's own cobalt.
   Display: Clash. Text: Satoshi.
   ========================================================================= */

@font-face { font-family: "Clash"; src: url("assets/fonts/clash-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "Clash"; src: url("assets/fonts/clash-600.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: "Clash"; src: url("assets/fonts/clash-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: "Satoshi"; src: url("assets/fonts/satoshi-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: "Satoshi"; src: url("assets/fonts/satoshi-500.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "Satoshi"; src: url("assets/fonts/satoshi-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; }

:root {
  --bg: #0b0c0e;
  --bg-2: #101215;
  --surface: #17191c;
  --surface-2: #1d2024;
  --line: rgba(242, 241, 238, 0.14);
  --line-soft: rgba(242, 241, 238, 0.07);

  --text: #f2f1ee;
  --text-2: #a5a8ad;
  --text-3: #8c9097;

  --accent: #3ddad0;
  --accent-2: #6fe8e0;
  --accent-deep: #1d8f88;
  --accent-ink: #04201e;
  --accent-soft: rgba(61, 218, 208, 0.12);

  --font: "Satoshi", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --display: "Clash", "Satoshi", -apple-system, BlinkMacSystemFont, sans-serif;
  --mono: ui-monospace, SFMono-Regular, Menlo, monospace;

  --container: 1120px;
  --gutter: clamp(20px, 5vw, 32px);
  --section-y: clamp(72px, 11vh, 132px);
  --radius: 18px;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
}

/* --------------------------------- Base --------------------------------- */
[hidden] { display: none !important; } /* mode-switched elements must stay hidden even when a component sets display */
* { box-sizing: border-box; }
html { background: var(--bg); -webkit-text-size-adjust: 100%; }
/* page canvas: light corner tech-frame accents + brushed diagonal streaks (gradients.md #10 + #9) */
body::before { content: ""; position: fixed; inset: 0; z-index: -2; pointer-events: none;
  background:
    radial-gradient(64% 44% at 100% 0%, rgba(61, 218, 208, 0.14), transparent 62%),
    radial-gradient(52% 42% at 0% 100%, rgba(61, 218, 208, 0.08), transparent 62%),
    repeating-linear-gradient(115deg, rgba(242, 241, 238, 0.020) 0 1px, transparent 1px 9px),
    linear-gradient(115deg, var(--bg), var(--bg-2)); }
body::after { content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none; opacity: 0.05;
  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='0.8' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); background-size: 140px 140px; }
body {
  margin: 0;
  background: transparent;
  color: var(--text);
  font-family: var(--font);
  font-size: 17px;
  line-height: 1.5;
  letter-spacing: -0.01em;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}
img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
::selection { background: var(--accent); color: var(--accent-ink); }

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.section { padding-block: var(--section-y); position: relative; }

/* ------------------------------ Typography ------------------------------ */
.hero__eyebrow { color: var(--accent); }
.eyebrow {
  margin: 0 0 18px;
  font-family: var(--mono);
  font-size: 0.74rem;
  font-weight: 500;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--accent);
}
.section__title {
  margin: 0;
  font-family: var(--display);
  font-size: clamp(2rem, 5vw, 3rem);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -0.004em;
}

/* Small directional arrows */
.arrow, .arrow-down {
  display: inline-block;
  width: 6px;
  height: 6px;
  border-right: 1.6px solid currentColor;
  border-bottom: 1.6px solid currentColor;
  vertical-align: middle;
  margin-left: 7px;
  transition: transform 0.3s var(--ease);
}
.arrow { transform: rotate(-45deg); }
.arrow-down { transform: rotate(45deg); margin-left: 8px; }

/* -------------------------------- Reveal -------------------------------- */
.reveal {
  opacity: 0;
  transform: translateY(28px) scale(0.985);
  transition: opacity 1s var(--ease), transform 1s var(--ease);
  will-change: opacity, transform;
}
.reveal.is-in { opacity: 1; transform: none; }
.hero__inner .reveal:nth-child(1) { transition-delay: 0.05s; }
.hero__inner .reveal:nth-child(2) { transition-delay: 0.18s; }
.hero__inner .reveal:nth-child(3) { transition-delay: 0.3s; }

/* -------------------------------- Buttons ------------------------------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 13px 26px;
  border-radius: 980px;
  font-size: 1rem;
  font-weight: 500;
  letter-spacing: -0.01em;
  border: 1px solid transparent;
  cursor: pointer;
  transition: transform 0.3s var(--ease), background 0.3s var(--ease),
    border-color 0.3s var(--ease), opacity 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
.btn:active { transform: scale(0.97); }
.btn--primary { background: linear-gradient(120deg, var(--accent), var(--accent-2)); color: var(--accent-ink); position: relative; overflow: hidden; }
.btn--primary::after { content: ""; position: absolute; inset: 0; transform: translateX(-120%); background: linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.28), transparent); transition: transform 0.6s var(--ease); }
.btn--primary:hover { transform: translateY(-2px); box-shadow: 0 14px 36px -10px rgba(29, 107, 99, 0.45); }
.btn--primary:hover::after { transform: translateX(120%); }
.btn--ghost { background: transparent; color: var(--text); border-color: var(--line); }
.btn--ghost:hover { border-color: var(--accent); color: var(--accent); transform: translateY(-2px); }
.btn--lg { padding: 17px 40px; font-size: 1.1rem; }

/* --------------------------------- Hero --------------------------------- */
.hero {
  text-align: center;
  padding-top: clamp(80px, 13vh, 148px);
  padding-bottom: clamp(24px, 4vh, 48px);
  overflow: hidden;
}
.hero::before {
  content: "";
  position: absolute;
  inset: -10% -5% 0 -5%;
  background: radial-gradient(120% 70% at 50% -10%, rgba(29, 107, 99, 0.10), transparent 60%);
  pointer-events: none;
  animation: glowDrift 16s ease-in-out infinite alternate;
}
.hero__inner { position: relative; }
.hero__title {
  margin: 0 auto;
  max-width: 1080px;
  font-family: var(--display);
  font-size: clamp(1.7rem, 3vw, 2.4rem);
  text-wrap: balance;
  font-weight: 700;
  line-height: 1.18;
  letter-spacing: -0.004em;
}
/* Word-by-word reveal (applied once JS splits the headline) */
.hero__title.split { opacity: 1; transform: none; transition: none; } /* the words carry the entrance; no transition on the h1 itself so GSAP never samples a half-way state */
.hero__title .word {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.42em);
  filter: blur(6px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease), filter 0.7s var(--ease);
  will-change: opacity, transform, filter;
}
.hero__title.is-in .word { opacity: 1; transform: none; filter: blur(0); }

.mark { position: relative; white-space: nowrap; color: var(--accent-deep); }
.mark::after {
  content: "";
  position: absolute;
  left: -1px; right: -1px; bottom: -0.04em;
  height: 0.09em;
  background: var(--accent);
  border-radius: 3px;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.8s var(--ease) 0.5s;
}
.hero__title.is-in .mark::after { transform: scaleX(1); }

/* Plain variant: the phrase keeps the body colour and lets the accent live in the
   underline alone, so the emphasis reads as one stroke rather than two signals. */
.mark--plain { color: inherit; }

.hero__actions { margin-top: 40px; display: flex; justify-content: center; }
.hero__actions .arrow-down { animation: chevBob 2.2s var(--ease) infinite; }

/* -------------------------------- Player --------------------------------
   The custom native player. Its constants are tuned — recolour it, never
   redesign it (references/hero-video-player.md). Two deliberate choices:
   NO time readouts (a visible duration invites "how long is this?" before
   they have started), and captions ON by default with the live word painted
   in the accent, because most of these get opened on mute in a DM. */
.hplayer { margin: 44px auto 0; max-width: 760px; }
.hplayer__stage {
  position: relative; aspect-ratio: 1920 / 1034; /* matches the recorded video, so nothing is cropped */ border-radius: var(--radius);
  overflow: hidden; background: #05060a; border: 1px solid var(--line);
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.5);
}
.hplayer__video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; background: #05060a; }

/* dark scrim behind the big play button (idle only) */
.hplayer__scrim { position: absolute; inset: 0; pointer-events: none; transition: opacity 0.45s var(--ease);
  background: radial-gradient(120% 120% at 50% 45%, rgba(0,0,0,0.12), rgba(0,0,0,0.55)); }
.hplayer__stage:not([data-state="idle"]) .hplayer__scrim { opacity: 0; }

/* big centred play */
.hplayer__big { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: 88px; height: 88px; border-radius: 50%; cursor: pointer; display: grid; place-items: center;
  border: 1px solid rgba(255,255,255,0.55); background: rgba(255,255,255,0.09); backdrop-filter: blur(8px);
  transition: transform 0.4s var(--ease), background 0.4s var(--ease), opacity 0.4s var(--ease), border-color 0.4s var(--ease); }
.hplayer__big svg { width: 32px; height: 32px; fill: #fff; margin-left: 4px; position: relative; z-index: 1; }
.hplayer__big-glow { position: absolute; inset: 0; border-radius: 50%; animation: hpPulse 2.8s ease-out infinite; }
.hplayer__big:hover { transform: translate(-50%, -50%) scale(1.07); background: rgba(255,255,255,0.17); border-color: #fff; }
.hplayer__stage:not([data-state="idle"]) .hplayer__big { opacity: 0; pointer-events: none; transform: translate(-50%, -50%) scale(0.8); }
@keyframes hpPulse {
  0%   { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent) 42%, transparent); }
  70%  { box-shadow: 0 0 0 22px transparent; }
  100% { box-shadow: 0 0 0 0 transparent; }
}

/* captions overlay */
.hplayer__cc { position: absolute; left: 50%; bottom: 76px; transform: translateX(-50%); max-width: 84%; text-align: center;
  font-size: clamp(0.9rem, 0.8rem + 0.5vw, 1.08rem); line-height: 1.4; color: #fff; pointer-events: none;
  transition: bottom 0.3s var(--ease); }
.hplayer__cc span { background: rgba(6,8,14,0.64); padding: 3px 10px; border-radius: 7px;
  -webkit-box-decoration-break: clone; box-decoration-break: clone; }
.hplayer__cc i { font-style: normal; transition: color 0.12s linear; }
/* the live word's plate is drawn with box-shadow spread, not padding, so nothing reflows */
.hplayer__cc i.is-live { color: var(--accent); border-radius: 4px;
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 18%, transparent); }
.hplayer__cc:empty { display: none; }
/* captions stay out of the idle frame: poster, one play button, nothing else */
.hplayer__stage[data-state="idle"] .hplayer__cc { opacity: 0; }
.hplayer__stage:hover .hplayer__cc, .hplayer__stage[data-state="paused"] .hplayer__cc { bottom: 82px; }

/* control bar */
.hplayer__bar { position: absolute; left: 0; right: 0; bottom: 0; z-index: 3; display: flex; align-items: center; gap: 12px;
  padding: 14px 16px; background: linear-gradient(to top, rgba(4,6,10,0.85), rgba(4,6,10,0.4) 60%, transparent);
  opacity: 0; transform: translateY(8px); transition: opacity 0.3s var(--ease), transform 0.3s var(--ease); }
.hplayer__stage:hover .hplayer__bar, .hplayer__stage[data-state="paused"] .hplayer__bar,
.hplayer__stage.hp-touch .hplayer__bar { opacity: 1; transform: none; }
.hplayer__stage[data-state="idle"] .hplayer__bar { opacity: 0; pointer-events: none; }

.hp-btn { width: 34px; height: 34px; flex: none; display: grid; place-items: center; border: none; background: transparent;
  color: #fff; cursor: pointer; border-radius: 8px; opacity: 0.82; transition: opacity 0.2s var(--ease), background 0.2s var(--ease); }
.hp-btn:hover { opacity: 1; background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }
.hp-btn svg { width: 20px; height: 20px; fill: #fff; }
.hp-btn--mute svg, .hp-btn--full svg { fill: none; stroke: #fff; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.hp-i-play, .hp-i-sound { display: none; }
.hplayer__stage[data-state="paused"] .hp-i-pause, .hplayer__stage[data-state="idle"] .hp-i-pause { display: none; }
.hplayer__stage[data-state="paused"] .hp-i-play, .hplayer__stage[data-state="idle"] .hp-i-play { display: block; }

.hp-spacer { flex: 1 1 auto; }

/* the progress line: bottom edge of the frame, above the bar, always visible in playback */
.hp-scrub { position: absolute; left: 0; right: 0; bottom: 0; z-index: 4; height: 22px;
  display: flex; align-items: flex-end; cursor: pointer; touch-action: none;
  opacity: 0; transition: opacity 0.3s var(--ease); }
.hplayer__stage:not([data-state="idle"]) .hp-scrub { opacity: 1; }
.hplayer__stage[data-state="idle"] .hp-scrub { pointer-events: none; }
/* a dark plate so the line survives bright footage and reads at 0% */
.hp-scrub__plate { position: absolute; left: 0; right: 0; bottom: 0; height: 6px;
  background: rgba(4,6,10,0.6); transition: height 0.15s var(--ease); }
.hp-scrub__track { position: relative; width: 100%; height: 6px; overflow: hidden;
  background: rgba(255,255,255,0.18); transition: height 0.15s var(--ease); }
.hp-scrub:hover .hp-scrub__track, .hp-scrub.dragging .hp-scrub__track,
.hp-scrub:focus-visible .hp-scrub__track { height: 10px; }
.hp-scrub:hover .hp-scrub__plate, .hp-scrub.dragging .hp-scrub__plate,
.hp-scrub:focus-visible .hp-scrub__plate { height: 10px; }
.hp-scrub__buf { position: absolute; left: 0; top: 0; height: 100%; width: 0; background: rgba(255,255,255,0.26); }
.hp-scrub__fill { position: absolute; left: 0; top: 0; height: 100%; width: 0;
  background: linear-gradient(90deg, var(--accent-2), var(--accent));
  box-shadow: 0 0 12px color-mix(in srgb, var(--accent) 55%, transparent); }
/* white leading-edge cap, something to aim the drag at */
.hp-scrub__cap { position: absolute; bottom: 0; left: 0; width: 4px; height: 14px; background: #fff;
  border-radius: 2px; transform: translateX(-50%) scaleY(0); transform-origin: bottom center;
  transition: transform 0.18s var(--ease); box-shadow: 0 0 8px rgba(255,255,255,0.6); }
.hp-scrub:hover .hp-scrub__cap, .hp-scrub.dragging .hp-scrub__cap,
.hp-scrub:focus-visible .hp-scrub__cap { transform: translateX(-50%) scaleY(1); }
.hp-scrub:focus-visible { outline: none; }

/* CC toggle */
.hp-btn--cc { width: auto; padding: 0 9px; font-size: 0.7rem; font-weight: 700; letter-spacing: 0.06em; }
.hp-btn--cc.is-on { background: rgba(255,255,255,0.18); opacity: 1; }

/* speed */
.hp-speed { position: relative; }
.hp-btn--speed { width: auto; padding: 0 9px; font-size: 0.76rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.hp-speed__menu { position: absolute; bottom: 44px; left: 50%; transform: translateX(-50%); min-width: 76px; padding: 6px;
  background: rgba(10,12,18,0.97); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 16px 40px rgba(0,0,0,0.5);
  display: none; flex-direction: column; gap: 2px; }
.hp-speed__menu.open { display: flex; }
.hp-speed__menu button { border: none; background: transparent; color: rgba(255,255,255,0.8); font-size: 0.78rem; font-weight: 600;
  padding: 7px 10px; border-radius: 7px; cursor: pointer; text-align: center; font-variant-numeric: tabular-nums; }
.hp-speed__menu button:hover { background: rgba(255,255,255,0.09); color: #fff; }
.hp-speed__menu button.is-on { background: rgba(255,255,255,0.15); color: #fff; }

@media (max-width: 560px) {
  .hp-btn { width: 30px; height: 30px; }
  .hp-btn--full { display: none; }
  .hplayer__cc { bottom: 62px; }
}
@media (prefers-reduced-motion: reduce) {
  .hplayer__big-glow { animation: none; }
  .hplayer__big, .hplayer__bar, .hplayer__scrim, .hplayer__cc,
  .hp-scrub, .hp-scrub__track, .hp-scrub__plate, .hp-scrub__cap { transition: none; }
  .hplayer__cc i { transition: none; }
}

/* ----------------------------- Deliverables ----------------------------- */
.deliverables { padding-top: clamp(28px, 4.5vh, 56px); }
.deliverables__title { text-align: center; margin-bottom: clamp(48px, 8vh, 84px); }

.group { margin-bottom: clamp(64px, 10vh, 112px); }
.group:last-child { margin-bottom: 0; }
.group__head { display: flex; align-items: center; justify-content: center; gap: 22px; margin-bottom: 36px; }
.group__rule { flex: 1; height: 1px; background: var(--line); max-width: 220px; transform: scaleX(0); transform-origin: center; transition: transform 0.9s var(--ease); }
.group__head.is-in .group__rule { transform: scaleX(1); }
.group__meta { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.group__label { font-family: var(--display); font-size: 1.05rem; font-weight: 600; letter-spacing: -0.01em; color: var(--text); }
.group__count { font-family: var(--mono); font-size: 0.72rem; color: var(--text-3); letter-spacing: 0.18em; }

.grid { display: grid; gap: 24px; }
.grid--3 { grid-template-columns: repeat(3, 1fr); }
.grid--2 { grid-template-columns: repeat(2, 1fr); max-width: 860px; margin-inline: auto; }
.grid--1 { grid-template-columns: 1fr; }

/* Preview card: a framed browser window + clear type hierarchy */
/* ---------------------------- Deliverable card ---------------------------
   Deliberately minimal: a preview image, a title, and "Preview". No browser
   chrome on the thumb, no kicker, no description — the card's job is to make
   the prospect open it, and every extra line competes with that. */
.pcard {
  appearance: none; font: inherit; color: inherit; text-align: center; position: relative;
  background: var(--surface); border: 1px solid var(--line-soft); border-radius: var(--radius);
  padding: 12px 12px 18px; cursor: pointer; display: flex; flex-direction: column; gap: 14px;
  transform-style: preserve-3d; will-change: transform;
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.6) inset, 0 10px 30px -22px rgba(21, 32, 31, 0.25);
  transition: transform 0.6s var(--ease), border-color 0.6s var(--ease), box-shadow 0.6s var(--ease);
}
.pcard:hover { border-color: color-mix(in srgb, var(--accent) 35%, transparent); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.6) inset, 0 30px 60px -28px rgba(21, 32, 31, 0.32), 0 0 0 1px color-mix(in srgb, var(--accent) 8%, transparent); }
.pcard:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.pcard::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: radial-gradient(circle at var(--mx, 50%) var(--my, 50%), var(--accent-soft), transparent 44%); opacity: 0; transition: opacity 0.35s var(--ease); pointer-events: none; }
.pcard:hover::after { opacity: 1; }

.thumb { position: relative; display: block; border-radius: 12px; overflow: hidden; background: var(--surface-2); aspect-ratio: 4 / 3; border: 1px solid var(--line-soft); box-shadow: 0 14px 30px -18px rgba(21, 32, 31, 0.35); }
.thumb--wide { aspect-ratio: 960 / 260; }
.thumb__img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 0%; display: block; transition: transform 0.6s var(--ease); }
.pcard:hover .thumb__img { transform: scale(1.035); }
.thumb--wide .thumb__img { object-position: 50% 50%; }
.thumb::after { content: ""; position: absolute; inset: 0; pointer-events: none; border-radius: inherit; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.4); }

.pcard__title { display: block; font-family: var(--display); font-size: 1.08rem; font-weight: 600; letter-spacing: -0.01em; line-height: 1.2; color: var(--text); }
.pcard__link { display: inline-flex; align-items: center; justify-content: center; gap: 6px; font-size: 0.84rem; font-weight: 600; color: var(--text-3); letter-spacing: 0.005em; transition: gap 0.3s var(--ease), color 0.3s var(--ease); }
.pcard:hover .pcard__link { gap: 10px; color: var(--accent); }
.pcard__link .arrow { margin-left: 0; border-color: currentColor; }

/* SVG mock palette (legacy) */
.mock { width: 100%; height: auto; }
.m-stroke { fill: none; stroke: rgba(21, 32, 31, 0.28); stroke-width: 2; }
.m-line { stroke: rgba(21, 32, 31, 0.12); stroke-width: 1.5; }
.m-fill { fill: var(--accent); }
.m-soft { fill: rgba(21, 32, 31, 0.16); }
.m-faint { fill: rgba(21, 32, 31, 0.07); }
.m-panel { fill: var(--surface-2); stroke: rgba(21, 32, 31, 0.12); stroke-width: 1; }

/* --------------------------------- CTA ---------------------------------- */
.cta { text-align: center; overflow: hidden; }
.cta::before {
  content: "";
  position: absolute; inset: 0;
  background: radial-gradient(60% 60% at 50% 120%, rgba(29, 107, 99, 0.12), transparent 70%);
  pointer-events: none;
}
.cta__wrap { position: relative; }
.cta__title {
  margin: 0 0 36px;
  font-family: var(--display);
  font-size: clamp(2.4rem, 6.5vw, 4rem);
  font-weight: 700;
  line-height: 1.04;
  letter-spacing: -0.012em;
}

/* -------------------------------- Footer -------------------------------- */
.footer { position: relative; height: 72px; background: rgba(21, 32, 31, 0.04); }
.footer::before { content: ""; position: absolute; left: 0; right: 0; top: -140px; height: 140px; pointer-events: none; background: linear-gradient(180deg, transparent, rgba(21, 32, 31, 0.04)); }
.footer__inner { height: 100%; display: flex; align-items: center; justify-content: center; }
.footer__note { font-family: var(--mono); font-size: 0.78rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-3); line-height: 48px; }

/* ------------------------------ Sticky CTA ------------------------------ */
/* Booking one tap away for the whole scroll; yields only to the closing CTA. */
.stickycta {
  position: fixed;
  right: clamp(16px, 3vw, 28px);
  bottom: clamp(16px, 3vw, 28px);
  z-index: 60;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 24px;
  border-radius: 980px;
  background: var(--accent, var(--text));
  color: var(--accent-ink, var(--bg));
  font-size: 0.98rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  text-decoration: none;
  box-shadow: 0 12px 40px color-mix(in srgb, var(--accent) 38%, transparent),
    0 0 0 1px rgba(21, 32, 31, 0.06);
  opacity: 0;
  visibility: hidden;
  transform: translateY(14px) scale(0.96);
  transition: opacity 0.35s var(--ease), transform 0.35s var(--ease),
    visibility 0s linear 0.35s;
}
.stickycta.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translate(var(--mgx, 0px), var(--mgy, 0px)) scale(1);
  transition: opacity 0.35s var(--ease), transform 0.25s var(--ease), visibility 0s;
  transition: opacity 0.35s var(--ease), transform 0.35s var(--ease), visibility 0s;
}
.stickycta.is-visible:hover { transform: translate(var(--mgx, 0px), calc(var(--mgy, 0px) - 2px)) scale(1.02); }
.stickycta__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent-ink, var(--bg));
  animation: stickyPulse 2.4s var(--ease) infinite;
}
@keyframes stickyPulse {
  0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--accent-ink) 55%, transparent); }
  70%, 100% { box-shadow: 0 0 0 7px transparent; }
}
@media (max-width: 560px) {
  .stickycta { left: clamp(16px, 3vw, 28px); right: clamp(16px, 3vw, 28px); justify-content: center; }
}

/* ------------------------------- Lightbox ------------------------------- */
.lightbox {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(20px, 5vw, 64px);
  background: rgba(21, 32, 31, 0.78);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.4s var(--ease), visibility 0.4s var(--ease);
}
.lightbox.open { opacity: 1; visibility: visible; }
.lightbox__inner {
  max-width: 1000px;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 20px;
}
.lightbox__stage {
  width: 100%;
  border-radius: 16px;
  overflow: hidden;
  border: 1px solid var(--line);
  background: var(--surface);
  max-height: 78vh;
  transform-origin: top left;
  transition: transform 0.5s var(--ease);
  will-change: transform;
}
.lightbox__stage img { width: 100%; height: auto; max-height: 78vh; object-fit: contain; display: block; }
.lightbox__stage--embed { height: 78vh; background: #fff; }
.lightbox__frame { width: 100%; height: 100%; border: 0; display: block; background: #fff; }
.lightbox__open { margin-left: 12px; font-size: 0.85rem; font-weight: 500; color: rgba(255, 255, 255, 0.75); border-bottom: 1px solid rgba(255, 255, 255, 0.35); transition: color 0.3s var(--ease); }
.lightbox__open:hover { color: #fff; }
.lightbox__placeholder { padding: clamp(28px, 6vw, 64px); text-align: center; }
.lightbox__placeholder .mock { max-width: 560px; margin: 0 auto 22px; }
.lightbox__placeholder p { margin: 0; font-size: 0.9rem; color: var(--text-3); }
.lightbox__title { margin: 0; font-size: 1.05rem; font-weight: 600; color: #fff; }
.lightbox__close {
  position: absolute;
  top: clamp(16px, 3vw, 28px);
  right: clamp(16px, 3vw, 28px);
  width: 44px; height: 44px;
  border-radius: 50%;
  border: 1px solid var(--line);
  background: rgba(255, 255, 255, 0.05);
  color: #fff;
  font-size: 1.6rem;
  line-height: 1;
  cursor: pointer;
  z-index: 2;
  transition: background 0.3s var(--ease), transform 0.3s var(--ease);
}
.lightbox__close:hover { background: rgba(255, 255, 255, 0.15); transform: rotate(90deg); }

/* --------------------------- Calendly popup ----------------------------- */
.cal-modal {
  position: fixed;
  inset: 0;
  z-index: 210;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(16px, 4vw, 48px);
  background: rgba(21, 32, 31, 0.74);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  opacity: 0;
  visibility: hidden;
  transition: opacity 0.25s var(--ease), visibility 0.25s var(--ease);
}
.cal-modal.open { opacity: 1; visibility: visible; }
.cal-frame {
  position: relative;
  width: min(820px, 100%);
  height: min(1000px, 92vh);
  border-radius: 20px;
  overflow: hidden;
  border: 1px solid var(--line);
  background: #ffffff;
  box-shadow: 0 40px 120px rgba(0, 0, 0, 0.45);
  transform: scale(0.98);
  transition: transform 0.28s var(--ease);
}
.cal-modal.open .cal-frame { transform: scale(1); }
.cal-frame iframe { position: relative; z-index: 1; width: 100%; height: 100%; border: 0; display: block; background: transparent; }
.cal-loader {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  transition: opacity 0.3s var(--ease);
}
.cal-loader span { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); animation: calDot 1s ease-in-out infinite; }
.cal-loader span:nth-child(2) { animation-delay: 0.15s; }
.cal-loader span:nth-child(3) { animation-delay: 0.3s; }
.cal-modal.cal-ready .cal-loader { opacity: 0; }

/* ------------------------------- Keyframes ------------------------------ */
@keyframes glowDrift {
  0% { transform: translate3d(-1.5%, 0, 0); opacity: 0.8; }
  100% { transform: translate3d(1.5%, 1.5%, 0); opacity: 1; }
}
@keyframes playPulse {
  0% { box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.16); }
  70%, 100% { box-shadow: 0 0 0 18px rgba(255, 255, 255, 0); }
}
@keyframes chevBob {
  0%, 100% { transform: rotate(45deg) translate(0, 0); }
  50% { transform: rotate(45deg) translate(2px, 2px); }
}
@keyframes calDot {
  0%, 100% { opacity: 0.3; transform: translateY(0); }
  50% { opacity: 1; transform: translateY(-4px); }
}

/* ------------------------------ Responsive ------------------------------ */
@media (max-width: 860px) {
  .grid--3 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 600px) {
  body { font-size: 16px; }
  .grid--3, .grid--2 { grid-template-columns: 1fr; max-width: 420px; margin-inline: auto; }
  .thumb--wide { aspect-ratio: 16 / 9; }
  .group__rule { max-width: 60px; }
  .hero__actions .btn { width: 100%; }
  .stickycta { padding: 12px 22px; }
  .cal-frame { height: 90vh; border-radius: 16px; }
}

/* --------------------------- Reduced motion ----------------------------- */
@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; transition: none; }
  .lightbox, .lightbox__stage { transition: none; }
  .hero::before, .hplayer__big-glow, .hero__actions .arrow-down { animation: none; }
  .mark::after { transition: none; transform: scaleX(1); }
  .group__rule { transition: none; transform: scaleX(1); }
  .thumb__img { transition: none; }
  .pcard { transition: none; }
  .stickycta { transform: none; transition: opacity 0.25s linear, visibility 0s linear 0.25s; }
  .stickycta.is-visible { transform: none; transition: opacity 0.25s linear; }
  .stickycta__dot { animation: none; }
  .cal-modal { transition: opacity 0.15s linear; }
  .cal-frame { transition: none; transform: none; }
  .cal-loader span { animation: none; }
}

/* ---------------------- Hero photo-swarm (signature) -------------------- */
/* Overlay above the already-visible hero. pointer-events none throughout. */
.swarm { position: absolute; inset: 0; pointer-events: none; z-index: 5; overflow: visible; }
.swarm__ph { position: absolute; width: clamp(84px, 9vw, 128px); aspect-ratio: 4 / 5; border-radius: 14px; overflow: hidden;
  border: 1px solid rgba(255, 255, 255, 0.65); box-shadow: 0 18px 40px -16px rgba(21, 32, 31, 0.35); background: var(--surface);
  opacity: 0; transform: translate(var(--ox), var(--oy)) rotate(var(--r, 0deg)) scale(0.92); will-change: transform, opacity; }
.swarm__ph img { width: 100%; height: 100%; object-fit: cover; display: block; }
.swarm.is-on .swarm__ph { animation: swarmIn 2.6s cubic-bezier(0.16, 1, 0.3, 1) both; }
@keyframes swarmIn {
  0%   { opacity: 0; transform: translate(var(--ox), var(--oy)) rotate(var(--r, 0deg)) scale(0.92); }
  28%  { opacity: 1; transform: translate(var(--ix), var(--iy)) rotate(calc(var(--r, 0deg) * 0.4)) scale(1); }
  52%  { opacity: 1; transform: translate(var(--ix), var(--iy)) rotate(calc(var(--r, 0deg) * 0.4)) scale(1); }
  100% { opacity: 0; transform: translate(var(--ox), var(--oy)) rotate(var(--r, 0deg)) scale(0.92); }
}
@media (prefers-reduced-motion: reduce) { .swarm { display: none; } }
@media (max-width: 760px) { .swarm { display: none; } }

/* reduced / static: jump to final states (no mid-transition captures, honours prefers-reduced-motion) */
html.reduced *, html.reduced *::before, html.reduced *::after { transition-duration: 0s !important; animation-duration: 0s !important; animation-delay: 0s !important; transition-delay: 0s !important; }

/* ------------------------- Sender options (pitch site) ------------------- */
/* Agency branding: small top-left lockup. Configured in PITCH_CONFIG.brand; removed when empty. */
/* Agency lockup: centred at the top of the hero, mark + wordmark. It is the only
   agency branding on the page besides the footer line. */
.agency-bar { position: absolute; top: clamp(18px, 3vw, 28px); left: 50%; transform: translateX(-50%); z-index: 6; display: inline-flex; align-items: center; gap: 10px; }
.agency-bar a { display: inline-flex; align-items: center; gap: 10px; }
.agency-bar img { height: 30px; width: auto; display: block; }
.agency-bar span { font-family: var(--mono); font-size: 0.72rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--text-2); }
.hero { position: relative; }

/* Hero embed (Loom / Wistia) */
.hplayer__embed { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; background: #05060a; }
.hplayer__stage[data-state="embed"] .hplayer__scrim, .hplayer__stage[data-state="embed"] .hplayer__big, .hplayer__stage[data-state="embed"] .hplayer__bar, .hplayer__stage[data-state="embed"] .hplayer__cc { display: none; }

/* Inline Calendly (replaces the CTA button + modal) */
.cta__title { margin-bottom: 28px; }
.cal-inline { position: relative; width: min(900px, 100%); margin: 0 auto; height: min(760px, 92vh); border-radius: 20px; overflow: hidden; background: var(--surface); border: 1px solid var(--line); box-shadow: 0 30px 80px -40px rgba(21, 32, 31, 0.35); }
.cal-inline iframe { width: 100%; height: 100%; border: 0; display: block; }

/* Case studies (optional, PITCH_CONFIG.caseStudies) */
/* =============================== RESULTS ================================ */
/* Story-style proof graphics, 9:16, three across. Each one opens full-size in the
   same lightbox the deliverable cards use (main.js binds .pcard and .rcard alike).
   Nine reads best; the grid just gets shorter with fewer. */
.results { padding-top: 0; }
.results__title { text-align: center; margin-bottom: clamp(36px, 6vh, 60px); }
/* Flex, not grid, so an incomplete last row CENTRES instead of hugging the left
   edge. Nine cards is the fullest read, but 3 is common and 4 or 5 happen; with
   grid, a count that isn't a multiple of 3 leaves visible empty slots. */
.results__grid {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: 26px; max-width: 1080px; margin-inline: auto;
}
.rcard { flex: 0 1 calc((100% - 52px) / 3); max-width: 336px; }
.rcard {
  display: flex; flex-direction: column; gap: 14px; padding: 0;
  border: none; background: transparent; color: inherit; text-align: center;
  cursor: pointer; font: inherit;
  transition: transform 0.45s var(--ease);
}
.rcard__shot {
  display: block; position: relative; overflow: hidden;
  aspect-ratio: 9 / 16; border-radius: var(--radius);
  border: 1px solid var(--line); background: var(--surface-2);
  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.45);
  transition: border-color 0.45s var(--ease), box-shadow 0.45s var(--ease);
}
.rcard__shot img, .rcard__shot iframe {
  width: 100%; height: 100%; object-fit: cover; display: block; border: 0;
}
.rcard__shot::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(180deg, var(--accent-soft), transparent 45%);
  opacity: 0; transition: opacity 0.45s var(--ease);
}
.rcard:hover { transform: translateY(-6px); }
.rcard:hover .rcard__shot, .rcard:focus-visible .rcard__shot {
  border-color: color-mix(in srgb, var(--accent) 55%, transparent);
  box-shadow: 0 26px 60px rgba(0, 0, 0, 0.55),
              0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);
}
.rcard:hover .rcard__shot::after { opacity: 1; }
.rcard:focus-visible { outline: none; }
/* A video entry is not a lightbox trigger — it plays in place. */
.rcard--video { cursor: default; }
.rcard--video:hover { transform: none; }
.rcard__meta { display: flex; flex-direction: column; gap: 4px; }
.rcard__head {
  font-family: var(--display); font-size: 0.98rem; font-weight: 600;
  line-height: 1.3; letter-spacing: -0.01em; color: var(--text);
}
.rcard__tag {
  font-size: 0.74rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-3);
}
@media (max-width: 860px) {
  .results__grid { gap: 20px; }
  .rcard { flex-basis: calc((100% - 20px) / 2); }
}
@media (max-width: 700px) { .cal-inline { height: 80vh; border-radius: 16px; } }
@media (max-width: 460px) {
  .results__grid { gap: 16px; }
  .rcard { flex-basis: calc((100% - 16px) / 2); }
  .rcard__head { font-size: 0.88rem; }
  .rcard__tag { font-size: 0.66rem; }
}
@media (prefers-reduced-motion: reduce) {
  .rcard, .rcard__shot, .rcard__shot::after { transition: none; }
  .rcard:hover { transform: none; }
}

/* ------------------------- Bridge (unaware mode) ------------------------- */
.bridge { padding-bottom: clamp(24px, 4vh, 48px); }
.bridge__head { text-align: center; margin-bottom: clamp(56px, 9vh, 96px); }
.bridge__head .eyebrow { margin-bottom: 14px; }
.beat { display: grid; grid-template-columns: 92px minmax(0, 1.25fr) minmax(280px, 0.9fr); gap: clamp(24px, 4vw, 56px); align-items: start; padding-block: clamp(40px, 6vh, 64px); border-top: 1px solid var(--line-soft); }
.beat:last-of-type { border-bottom: 1px solid var(--line-soft); }
.beat__num { display: flex; flex-direction: column; gap: 14px; padding-top: 6px; }
.beat__idx { font-family: var(--mono); font-size: 0.78rem; letter-spacing: 0.2em; color: var(--accent); }
.beat__rule { width: 36px; height: 1px; background: var(--accent); transform: scaleX(0); transform-origin: left; transition: transform 0.9s var(--ease) 0.25s; }
.beat.is-in .beat__rule { transform: scaleX(1); }
.beat__kicker { margin: 0 0 12px; font-family: var(--mono); font-size: 0.72rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-3); }
.beat__title { margin: 0 0 16px; font-family: var(--display); font-size: clamp(1.35rem, 2.3vw, 1.8rem); font-weight: 700; line-height: 1.16; letter-spacing: -0.004em; text-wrap: balance; }
.beat__text { margin: 0; font-size: 1.02rem; line-height: 1.65; color: var(--text-2); max-width: 56ch; }
.beat__aside { background: var(--surface); border: 1px solid var(--line-soft); border-radius: var(--radius); padding: 22px 24px; box-shadow: 0 18px 48px -28px rgba(21, 32, 31, 0.25); }
.aside__note { margin: 16px 0 0; font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-3); }
/* 01 · price ladder */
.ladder { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ladder li { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 10px 12px; border-radius: 10px; background: var(--surface-2); font-size: 0.95rem; }
.ladder li span { color: var(--text-2); }
.ladder li b { font-family: var(--display); font-weight: 700; white-space: nowrap; }
.ladder__gap { background: transparent !important; border: 1px dashed rgba(29, 107, 99, 0.45); }
.ladder__gap b { color: var(--accent); font-family: var(--mono); font-weight: 500; font-size: 0.74rem; letter-spacing: 0.12em; text-transform: uppercase; }
/* 02 · before / after */
.shift { display: grid; grid-template-columns: 1fr 28px 1fr; align-items: center; gap: 10px; }
.shift__col { display: grid; gap: 4px; padding: 14px 12px; border-radius: 12px; background: var(--surface-2); }
.shift__col--on { background: var(--accent-soft); border: 1px solid rgba(29, 107, 99, 0.25); }
.shift__label { font-family: var(--mono); font-size: 0.66rem; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-3); }
.shift__col b { font-family: var(--display); font-size: 1rem; line-height: 1.2; letter-spacing: -0.01em; }
.shift__col--on b { color: var(--accent-deep); }
.shift__sub { font-size: 0.8rem; color: var(--text-2); line-height: 1.35; }
.shift__arrow { width: 22px; height: 22px; border-right: 1.6px solid var(--accent); border-top: 1.6px solid var(--accent); transform: rotate(45deg) scale(0.6); justify-self: center; }
/* 03 · sums */
.sums { display: grid; gap: 10px; }
.sum { display: grid; gap: 4px; padding: 12px 14px; border-radius: 12px; background: var(--surface-2); }
.sum b { font-family: var(--display); font-size: 1.5rem; font-weight: 700; letter-spacing: -0.004em; line-height: 1; }
.sum span { font-size: 0.86rem; color: var(--text-2); line-height: 1.4; }
.sum--on { background: var(--accent-soft); border: 1px solid rgba(29, 107, 99, 0.25); }
.sum--on b { color: var(--accent-deep); }
/* 04 · the week */
.week { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.week li { display: grid; grid-template-columns: 96px 1fr; gap: 12px; align-items: baseline; padding: 10px 12px; border-radius: 10px; background: var(--surface-2); }
.week b { font-family: var(--display); font-size: 1.05rem; font-weight: 700; letter-spacing: -0.015em; }
.week span { font-size: 0.86rem; color: var(--text-2); line-height: 1.4; }
.bridge__close { text-align: center; padding-top: clamp(44px, 7vh, 72px); display: grid; gap: 24px; justify-items: center; }
.bridge__closing { margin: 0; max-width: 46ch; font-family: var(--display); font-size: clamp(1.15rem, 1.9vw, 1.45rem); font-weight: 600; line-height: 1.35; letter-spacing: -0.015em; text-wrap: balance; }
.cta__sub { margin: -12px auto 32px; max-width: 52ch; font-size: 1.02rem; line-height: 1.6; color: var(--text-2); }
@media (max-width: 900px) {
  .beat { grid-template-columns: 1fr; gap: 22px; }
  .beat__num { flex-direction: row; align-items: center; }
}

/* ---- mobile hardening (references/mobile.md) ---- */
img, svg, video, canvas, iframe { max-width: 100%; height: auto; }
p, li, td, th, blockquote, figcaption,
h1, h2, h3, h4, h5, h6 { overflow-wrap: anywhere; }
table, pre { display: block; max-width: 100%; overflow-x: auto; }
@media (max-width: 700px) {
  .tag, [class*="badge"], [class*="pill"] { margin-left: 0; }
}
@media (max-width: 420px) {
  .tok-merge, .tok-link, code { white-space: normal; }
}
