/* /services. The structure and motion of the "OYLA" landing-page brief Josh pasted on 2026-09-25 (a clip scrubbed
   by the scroll, a sideways row of six cards that ends by opening a second clip from the middle, a two-column
   section with the pitch held on the left, the footer), in the house system (.claude/skills/ugc-style): ink and
   white, Archivo Black and Archivo, square corners, the house buttons and tags, the homepage chrome, menu and
   footer. The brief's two ring clips stay (Josh: "the ring thing ... still fits our brand"); its six ring cards are
   our services: the first three for creators, the last three for brands.
   Motion: services.js; the chrome and menu: /brands/chrome.css and /brands/menu.js; the footer: /footer.css. */
:root {
  --ink: #24363f;
  --bg: #ffffff;
  --ink-88: color-mix(in srgb, var(--ink) 88%, transparent);
  --ink-64: color-mix(in srgb, var(--ink) 64%, transparent);
  --ink-48: color-mix(in srgb, var(--ink) 48%, transparent);
  --ink-24: color-mix(in srgb, var(--ink) 24%, transparent);
  --pop-pink: #ff2fd6;
  --font-sans: 'Archivo', 'Switzer Fallback', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif;
  --font-display: 'Archivo Black', 'Arial Black', 'Archivo', sans-serif;
  --fs-body-lg: clamp(18px, 2vw, 24px);
  --lh-body-lg: 1.33;
  --ls-body-lg: -.03em;
  --container: 1256px;
  --container-wide: 1600px;
  --ease-expo: cubic-bezier(0.16, 1, 0.3, 1);
  --sv-line: 1px solid var(--ink);
  --sv-pad: 48px;
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--bg);
  color: var(--ink);
  font-family: var(--font-sans);
  font-weight: 300;
  font-size: clamp(16px, 1.667vw, 20px);
  line-height: 1.45;
  letter-spacing: -.02em;
  -webkit-font-smoothing: antialiased;
  overflow-x: clip;
}
a { color: inherit; }
h1, h2, h3, p { margin: 0; }
::selection { background: var(--pop-pink); color: var(--ink); }

/* the menu slides the page left through --page-x (chrome.css names /brands' layers; these are this page's) */
.sv-page, .footer { translate: var(--page-x, 0px) 0; }

/* ── buttons: the house button, with the brief's "+" as a square tile (the Let's talk arrow tile) ── */
.sv-btn {
  display: inline-flex;
  align-items: stretch;
  min-height: 48px;
  background: #fff;
  color: var(--ink);
  text-decoration: none;
  border: 2px solid var(--ink);
  border-radius: 0;
  box-shadow: 3px 3px 0 var(--ink);
  touch-action: manipulation;
  transition: transform .12s ease, box-shadow .12s ease, background .12s ease, color .12s ease;
}
.sv-btn--ink { background: var(--ink); color: #fff; }
.sv-btn__label { display: flex; align-items: center; padding: 0 20px; font-size: 14px; font-weight: 600; letter-spacing: .01em; }
.sv-btn__plus { position: relative; width: 46px; border-left: 2px solid var(--ink); }
.sv-btn--ink .sv-btn__plus { border-left-color: rgba(255, 255, 255, .28); }
.sv-btn__plus::before, .sv-btn__plus::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 2px; background: currentColor; translate: -50% -50%;
  transition: rotate .35s cubic-bezier(0.23, 1, 0.32, 1);
}
.sv-btn__plus::after { rotate: 90deg; }
.sv-btn:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 var(--ink); }
.sv-btn:focus-visible { outline: 2px solid var(--ink); outline-offset: 4px; }
@media (hover: hover) and (pointer: fine) {
  .sv-btn:hover { background: var(--pop-pink); color: var(--ink); transform: translate(-1px, -1px); box-shadow: 5px 5px 0 var(--ink); }
  .sv-btn--ink:hover .sv-btn__plus { border-left-color: var(--ink); }
  .sv-btn:hover .sv-btn__plus::before { rotate: 90deg; }
  .sv-btn:hover .sv-btn__plus::after { rotate: 180deg; }
}

/* the house tag */
.sv-tag {
  display: inline-flex; align-items: center; gap: 10px; padding: 6px 12px;
  font-size: 14px; font-weight: 500; line-height: 1.4; letter-spacing: 0;
  background: #fff; border: 2px solid var(--ink); box-shadow: 3px 3px 0 var(--ink);
}
.sv-tag::before { content: ""; width: 10px; height: 10px; background: var(--pop-pink); border: 2px solid var(--ink); }

/* ── 1. hero: a 500vh track, the clip sticky across it, the title and button bottom left ── */
.sv-hero { position: relative; z-index: 10; height: 500vh; background: var(--bg); }   /* the clip is white; the brief's black would flash before it paints */
.sv-hero__sticky {
  position: sticky; top: 0; height: 100vh; height: 100svh; overflow: hidden; background: var(--bg);
  display: flex; flex-direction: column; justify-content: flex-end; padding: var(--sv-pad);
}
.sv-hero__video { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; object-fit: cover; }
.sv-hero__content { position: relative; z-index: 3; max-width: 900px; display: flex; flex-direction: column; align-items: flex-start; gap: 18px; }
.sv-hero__title {
  font-family: var(--font-display); font-weight: 400; font-size: clamp(40px, 6vw, 88px); line-height: .95;
  letter-spacing: -.045em; color: var(--ink);
}
.sv-hero__line { display: block; }
.sv-hero__line-inner { display: inline-block; }
.sv-w { display: inline-block; white-space: nowrap; }
.sv-char { display: inline-block; will-change: transform, opacity; }


/* ── 2. the six services, sideways, then the second clip opens from the middle ── */
.sv-awards { position: relative; z-index: 10; background: var(--bg); border-top: var(--sv-line); border-bottom: var(--sv-line); }
.sv-awards__track { height: calc(100vh + var(--run, 0px)); height: calc(100svh + var(--run, 0px)); }
.sv-awards__stage { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: hidden; }
.sv-awards__grid { display: flex; width: max-content; height: 100%; will-change: transform; }
.sv-card {
  width: 33.333vw; height: 100%; flex: none; background: #fff; border-right: var(--sv-line);
  display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center;
  padding: clamp(40px, 8vh, 80px) var(--sv-pad); gap: clamp(18px, 3vh, 32px);
}
.sv-card__img { width: 85%; max-width: 420px; aspect-ratio: 3 / 2; max-height: 280px; overflow: hidden; border: 2px solid var(--ink); }  /* the editorial tiles are 3:2 with their word at the left edge: never crop them */
.sv-card__img img { display: block; width: 100%; height: 100%; object-fit: cover; }
.sv-card__name { font-family: var(--font-display); font-weight: 400; font-size: clamp(26px, 2.3vw, 36px); line-height: .95; letter-spacing: -.045em; text-wrap: balance; }
.sv-card__line { max-width: 30ch; font-size: clamp(16px, 1.25vw, 18px); line-height: 1.4; color: var(--ink-64); text-wrap: pretty; }

/* the clip under the row: clipped to a centre line, it opens symmetrically to the full stage (the brief animates
   width 0 to 100% from the middle; an inset clip does the same without re-laying out the frame every scroll) */
.sv-reveal {
  --open: 0;                                 /* services.js tweens it 0 to 1 */
  position: absolute; inset: 0; z-index: 2; overflow: hidden; pointer-events: none;
  clip-path: inset(0 calc(50% * (1 - var(--open))) 0 calc(50% * (1 - var(--open))));
}
.sv-reveal__video { position: absolute; left: 50%; top: 50%; width: 100vw; height: 100vh; height: 100svh; translate: -50% -50%; object-fit: cover; }

/* ── 3. every service: the pitch sticky on the left, the services scrolling on the right ── */
.sv-all { position: relative; z-index: 10; display: grid; grid-template-columns: 50% 50%; background: var(--bg); border-bottom: var(--sv-line); }
.sv-all__left {
  position: sticky; top: 0; height: 100vh; height: 100svh;
  display: flex; flex-direction: column; justify-content: space-between; align-items: flex-start; gap: 32px;
  /* the top clears the fixed wordmark */
  padding: calc(var(--pad-y) + 96px) 96px var(--sv-pad) var(--sv-pad);
}
.sv-all__h { font-family: var(--font-display); font-weight: 400; font-size: clamp(32px, 4vw, 56px); line-height: 1; letter-spacing: -.045em; max-width: 14ch; text-wrap: balance; }
.sv-all__copy { display: grid; gap: 28px; max-width: 34ch; font-size: clamp(18px, 1.667vw, 24px); line-height: 1.25; letter-spacing: -.02em; }
.sv-all__right { border-left: var(--sv-line); }
.sv-stat { min-height: 45vh; padding: var(--sv-pad); border-bottom: var(--sv-line); }
.sv-stat:last-child { border-bottom: 0; }
.sv-stat__h { font-family: var(--font-display); font-weight: 400; font-size: clamp(40px, 5vw, 76px); line-height: .95; letter-spacing: -.045em; }
.sv-stat__line { display: block; overflow: clip; padding-bottom: .06em; }
.sv-stat__p { padding-top: 36px; max-width: 32ch; font-size: clamp(18px, 1.667vw, 24px); line-height: 1.25; color: var(--ink-88); text-wrap: pretty; }
.sv-word { display: inline-block; }

/* ── tablet ── */
@media (min-width: 769px) and (max-width: 1199px) {
  :root { --sv-pad: 32px; }
  .sv-card { width: 50vw; }
  .sv-all__left { padding: calc(var(--pad-y) + 96px) 32px 40px 32px; }
  .sv-stat__h { font-size: 52px; }
}

/* ── phones ── */
@media (max-width: 768px) {
  :root { --sv-pad: 16px; }
  .sv-hero__sticky { padding: 16px 16px 24px; }
  .sv-hero__title { font-size: 44px; }
  .sv-card { width: 85vw; padding: 48px 20px; }
  .sv-card__img { width: 100%; }
  .sv-all { grid-template-columns: minmax(0, 1fr); }
  .sv-all__left { position: relative; height: auto; padding: 72px 16px 56px; gap: 28px; }
  .sv-all__right { border-left: 0; border-top: var(--sv-line); }
  .sv-stat { min-height: 0; padding: 40px 16px; }
  .sv-stat__h { font-size: 40px; }
  .sv-stat__p { padding-top: 20px; font-size: 16px; }
  .sv-all__copy { font-size: 18px; }
  .sv-btn { min-height: 48px; }
}

/* reduced motion: no scrub, no sideways run, no opening; the clips show their first frame, the six services wrap
   into a grid and everything is in place */
@media (prefers-reduced-motion: reduce) {
  .sv-hero { height: auto; }
  .sv-hero__sticky { position: relative; }
  .sv-awards__track { height: auto; }
  .sv-awards__stage { position: relative; height: auto; }
  .sv-awards__grid { width: 100%; height: auto; flex-wrap: wrap; }
  .sv-card { width: 33.333%; height: auto; min-height: 70vh; border-bottom: var(--sv-line); }
  .sv-reveal { display: none; }
  .sv-btn, .sv-btn__plus::before, .sv-btn__plus::after { transition: none; }
}
@media (prefers-reduced-motion: reduce) and (max-width: 991px) {
  .sv-card { width: 100%; min-height: 0; }
}
