/* =====================================================================
   DVB web · design tokens (base layer, owned by the skeleton).
   Adapted from 01-research/refero-apple/tokens.css ([R] Refero, [A] apple.com
   measured 29-oct-2026, [P] proposal). Changes for DVB:
   - ONE accent: Apple blue. --color-link (#0066cc) for inline links and
     --color-action (#0071e3) for filled pills + focus ring are the same blue
     family, as on apple.com. No other hue anywhere (launch orange removed).
   - Fonts: self-hosted Inter / Inter Display 4.1 (SIL OFL), declared in base.css.
   - Added: --ease-house (motion catalogue §1) and --nav-h.
   Sections must use these variables; never hard-code a colour or size.
   ===================================================================== */


:root {
  /* ---------- Color: brand & accent ---------- */
  --color-link: #0066cc;            /* [R][A] Apple Blue — inline links, text CTAs (--sk-body-link-color) */
  --color-action: #0071e3;          /* [R][A] Pricing Blue — filled pill buttons, focus ring */
  --color-action-hover: #0076df;    /* [A] .button hover */
  --color-action-active: #006edb;   /* [A] .button active */
  --color-link-on-dark: #2997ff;    /* [A] rgb(41,151,255) — secondary button text on dark tiles */

  /* ---------- Color: neutrals ---------- */
  --color-ink: #1d1d1f;             /* [R][A] headlines + body */
  --color-black: #000000;           /* [A] --sk-glyph */
  --color-ink-alpha: rgba(0, 0, 0, 0.88);        /* [A] --sk-glyph-gray-alpha */
  --color-text-secondary: #6e6e73;  /* [A] rgb(110,110,115) — intro copy, subheads, footer headers */
  --color-text-secondary-alpha: rgba(0, 0, 0, 0.56); /* [A] footer text */
  --color-text-secondary-alt: #424245; /* [A] --sk-glyph-gray-secondary-alt */
  --color-slate: #707070;           /* [R] secondary/legal copy (Refero) */
  --color-steel: #86868b;           /* [R][A] tertiary glyph, outlines */
  --color-hairline: #d6d6d6;        /* [R] 1px dividers */
  --color-control-gray: #e6e6e8;    /* [R] disabled fills, nav edge */
  --color-button-neutral-active: #ededf2; /* [A] */
  --color-ink-hover: #272729;       /* [A] neutral button hover */
  --color-ink-active: #18181a;      /* [A] neutral button active */
  --color-on-dark: #f5f5f7;         /* [A] text on black tiles */

  /* ---------- Surfaces ---------- */
  --surface-0: #ffffff;             /* [R][A] canvas, hero, cards (--sk-fill) */
  --surface-1: #f5f5f7;             /* [R][A] alternate band, footer (--sk-fill-tertiary) */
  --surface-2: #fafafc;             /* [R][A] opened nav, index section (--sk-fill-secondary) */
  --surface-3: #e6e6e8;             /* [R] subdued control fill */
  --surface-dark: #000000;          /* [A] dark home tiles */
  --surface-dark-alt: #1d1d1f;      /* [A] --global-section-background-color-alt-dark */
  --surface-nav-translucent: rgba(255, 255, 255, 0.8);   /* [A] floating local nav */
  --surface-globalnav-light: rgba(250, 250, 252, 0.8);   /* [A] product page global nav */
  --surface-globalnav-dark: rgba(29, 29, 31, 0.8);       /* [A] home global nav over dark hero */
  --surface-control-translucent: rgba(210, 210, 215, 0.64); /* [R] carousel playback track */
  --backdrop-nav: saturate(1.8) blur(20px); /* [A] global nav; local nav uses blur(20px) */

  /* ---------- Typography: families ---------- */
  /* SF Pro is not licensed for general web use [P]: Inter is the proposed substitute
     (SIL OFL; Refero lists it as first fallback). Use Inter Display / opsz for ≥ 21px. */
  --font-display: "Inter Display", "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Arial, sans-serif; /* [P] replaces SF Pro Display [R][A] */
  --font-text: "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Arial, sans-serif;                      /* [P] replaces SF Pro Text [R][A] */
  --font-weight-regular: 400;       /* [R][A] */
  --font-weight-medium: 500;        /* [R][A] */
  --font-weight-semibold: 600;      /* [R][A] — Apple never uses 700 on headlines [R] */

  /* ---------- Typography: scale (large ≥1069px) [A] class rules on /iphone-duo/ ---------- */
  --type-hero-size: 80px;   --type-hero-lh: 1.05;    --type-hero-ls: -0.015em;  /* ric-type-lockup-xxl-headline; = -1.2px [R] */
  --type-display-size: 64px; --type-display-lh: 1.0625; --type-display-ls: -0.009em; /* media-hero-headline-base */
  --type-headline-xl-size: 56px; --type-headline-xl-lh: 1.07143; --type-headline-xl-ls: -0.005em;
  --type-section-size: 48px; --type-section-lh: 1.08349; --type-section-ls: -0.003em; /* section-header-headline */
  --type-headline-size: 40px; --type-headline-lh: 1.1;  --type-headline-ls: 0em;
  --type-headline-sm-size: 32px; --type-headline-sm-lh: 1.125; --type-headline-sm-ls: 0.004em;
  --type-card-title-size: 28px; --type-card-title-lh: 1.14286; --type-card-title-ls: 0.007em; /* feature-card / tile headline */
  --type-title-size: 24px; --type-title-lh: 1.16667; --type-title-ls: 0.009em;
  --type-eyebrow-size: 21px; --type-eyebrow-lh: 1.19048; --type-eyebrow-ls: 0.011em; /* product kicker / section eyebrow (lh 1 in lockups) */
  --type-intro-size: 21px; --type-intro-lh: 1.381; --type-intro-ls: 0.011em;        /* lockup copy, regular 400 */
  --type-callout-size: 19px; --type-callout-lh: 1.21053; --type-callout-ls: 0.012em;
  --type-body-lg-size: 19px; --type-body-lg-lh: 1.4211; --type-body-lg-ls: 0.012em;
  --type-body-size: 17px;  --type-body-lh: 1.47059; --type-body-ls: -0.022em;       /* = 17/25, -0.374px */
  --type-body-tight-lh: 1.23536;                                                     /* = 17/21 */
  --type-small-size: 14px; --type-small-lh: 1.42859; --type-small-ls: -0.016em;     /* body-reduced */
  --type-small-tight-lh: 1.28577;
  --type-caption-size: 12px; --type-caption-lh: 1.33337; --type-caption-ls: -0.01em; /* captions, nav pills, footer */
  --type-micro-size: 10px; --type-micro-lh: 1.24; --type-micro-ls: -0.037em;         /* [R] */

  /* ---------- Spacing [R] base 4px ---------- */
  --space-unit: 4px;
  --space-4: 4px;  --space-8: 8px;  --space-12: 12px; --space-16: 16px;
  --space-20: 20px; --space-24: 24px; --space-28: 28px; --space-32: 32px;
  --space-40: 40px; --space-48: 48px; --space-52: 52px; --space-64: 64px;
  --space-76: 76px; --space-80: 80px; --space-96: 96px; /* 96 [A] */
  --space-128: 128px; --space-144: 144px; --space-224: 224px; /* 224 [A] */
  --element-gap: 20px;      /* [R] */
  --card-padding: 28px;     /* [R] */
  --section-gap-refero: 90px; /* [R] summary value; apple.com CSS uses the paddings below */

  /* ---------- Section rhythm [A] (large; see media queries below) ---------- */
  --section-padding: 144px;          /* --global-section-padding */
  --section-padding-story: 128px;    /* .section-product-stories */
  --section-padding-reduced: 120px;  /* --global-section-padding-top-reduced */
  --section-padding-end-long: 224px; /* --global-section-aap-padding */
  --section-header-gap: 48px;        /* .section-header margin-block-end */

  /* ---------- Layout / grid [A] ---------- */
  --content-max: 1260px;      /* --global-content-max-width */
  --content-max-hero: 1680px; /* --global-content-max-width-hero */
  --content-width: 87.5%;     /* .viewport-content width */
  --nav-content-max: 1024px;  /* globalnav-content (980px + 22px side padding) */
  --footer-content-max: 980px;
  --globalnav-height: 44px;   /* measured [A][R] (CSS var says 48px on small) */
  --nav-h: 44px;

  /* ---------- Radii ---------- */
  --radius-card: 28px;     /* [R][A] feature cards, media, immersive display */
  --radius-nav-float: 18px;/* [A] floating local nav wrap (Refero says 20px) */
  --radius-nav: 20px;      /* [R] */
  --radius-link: 10px;     /* [R] */
  --radius-pill-track: 36px; /* [R] playback control */
  --radius-button-block: 8px; /* [A] .button-block */
  --radius-button-block-lg: 12px; /* [A] .button-super.button-block */
  --radius-pill: 980px;    /* [A][R] every inline button & search input */
  --radius-round: 50%;     /* [A] 36px tile buttons */

  /* ---------- Elevation [R] (rings, not shadows) ---------- */
  --shadow-ring-subtle: 0 0 0 1px #e6e6e8;
  --shadow-ring-strong: 0 0 0 1px #86868b;
  --shadow-none: none;

  /* ---------- Focus [A] ---------- */
  --focus-ring: 2px solid #0071e3;
  --focus-offset: 3px;

  /* ---------- Buttons [A] (.button family, apple.com) ---------- */
  --btn-pad-y: 9px;  --btn-pad-x: 16px;  --btn-font: 14px;   /* .button default (cta in tiles ≤734 uses 8px 15px) */
  --btn-elevated-pad-y: 12px; --btn-elevated-pad-x: 22px; --btn-elevated-font: 17px; /* home hero "Learn more" 11/21 + 1px border */
  --btn-super-pad-y: 18px; --btn-super-pad-x: 31px; --btn-super-font: 17px;
  --btn-reduced-pad-y: 4px; --btn-reduced-pad-x: 11px; --btn-reduced-font: 12px; /* nav "Buy" pill */
  --btn-border: 1px;
  --btn-disabled-opacity: 0.42;

  /* ---------- Motion [A] + house curve (CATALOGO §1) ---------- */
  --ease-house: cubic-bezier(0.16, 1, 0.3, 1); /* default for anything not tied to scroll */
  --ease-standard: cubic-bezier(0.4, 0, 0.6, 1);   /* most frequent on apple.com */
  --ease-out-soft: cubic-bezier(0.25, 0.1, 0.3, 1);/* transform 0.3s */
  --ease-decel: cubic-bezier(0, 0, 0.5, 1);         /* card hover scale, tile image */
  --ease-decel-material: cubic-bezier(0, 0, 0.2, 1);
  --ease-scrim: cubic-bezier(0.4, 0.1, 0.4, 1);
  --ease-in-out: cubic-bezier(0.42, 0, 0.58, 1);
  --ease-nav: cubic-bezier(0.28, 0.11, 0.32, 1);
  --dur-instant: 100ms;  /* button bg color */
  --dur-fast: 240ms;     /* nav (--r-globalnav-duration-medium) */
  --dur-base: 320ms;     /* link color */
  --dur-card-bg: 344ms;  /* card background */
  --dur-medium: 400ms;   /* opacity ease-in-out */
  --dur-slow: 500ms;     /* scrims, flyout link opacity */
  --dur-gallery: 1s;     /* media card gallery slide */
  /* StaggeredFadeIn reveal (scroll-in) */
  --reveal-translate-y: 30px;
  --reveal-opacity-dur: 0.9s;
  --reveal-translate-dur: 0.7s;
  --reveal-stagger: 0.15s;
}

/* ---------- Medium: 735–1068px [A] ---------- */
@media (max-width: 1068px) {
  :root {
    --type-hero-size: 64px; --type-hero-lh: 1.0625; --type-hero-ls: -0.009em;
    --type-display-size: 56px; --type-display-lh: 1.07143; --type-display-ls: -0.005em;
    --type-headline-xl-size: 48px; --type-headline-xl-lh: 1.08349; --type-headline-xl-ls: -0.003em;
    --type-section-size: 40px; --type-section-lh: 1.1; --type-section-ls: 0em;
    --type-card-title-size: 24px; --type-card-title-lh: 1.16667; --type-card-title-ls: 0.009em;
    --type-eyebrow-size: 19px; --type-eyebrow-lh: 1.21053; --type-eyebrow-ls: 0.012em;
    --section-padding: 120px;
    --section-padding-story: 96px;
    --section-padding-reduced: 80px;
    --section-padding-end-long: 176px;
    --section-header-gap: 40px;
  }
}

/* ---------- Small: ≤734px [A] ---------- */
@media (max-width: 734px) {
  :root {
    --type-hero-size: 48px; --type-hero-lh: 1.08349; --type-hero-ls: -0.003em; /* measured on hero; xxl lockup class says 40px */
    --type-display-size: 32px; --type-display-lh: 1.125; --type-display-ls: 0.004em;
    --type-headline-xl-size: 28px; --type-headline-xl-lh: 1.14286; --type-headline-xl-ls: 0.007em;
    --type-section-size: 32px; --type-section-lh: 1.125; --type-section-ls: 0.004em;
    --type-headline-size: 32px; --type-headline-lh: 1.125; --type-headline-ls: 0.004em;
    --type-card-title-size: 21px; --type-card-title-lh: 1.19048; --type-card-title-ls: 0.011em;
    --type-title-size: 21px; --type-title-lh: 1.19048; --type-title-ls: 0.011em;
    --type-eyebrow-size: 17px; --type-eyebrow-lh: 1.23536; --type-eyebrow-ls: -0.022em;
    --type-intro-size: 19px; --type-intro-lh: 1.4211; --type-intro-ls: 0.012em;
    --type-body-lg-size: 17px; --type-body-lg-lh: 1.47059; --type-body-lg-ls: -0.022em;
    --btn-font: 14px;
    --btn-elevated-font: 14px; --btn-elevated-pad-y: 8px; --btn-elevated-pad-x: 15px;
    --content-max: 420px;
    --section-padding: 112px;
    --section-padding-story: 80px;
    --section-padding-reduced: 56px;
    --section-padding-end-long: 144px;
    --section-header-gap: 32px;
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --reveal-translate-y: 0px;
    --reveal-opacity-dur: 0s;
    --reveal-translate-dur: 0s;
    --reveal-stagger: 0s;
  }
}

/* =====================================================================
   DVB web · base layer (owned by the skeleton; sections never edit it).
   Reset, fonts, Apple .typography-* scale, layout container, section
   rhythm, buttons, links, nav, footer, media, cards, focus, print.
   Every value comes from tokens.css. Spec: 01-research/refero-apple/SISTEMA-VISUAL.md
   ===================================================================== */

/* ---------- Fonts: Inter 4.1 self-hosted (SIL OFL, see fonts/LICENSE-Inter-OFL.txt) ---------- */
@font-face { font-family: "Inter"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/Inter-Regular.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/Inter-Medium.woff2") format("woff2"); }
@font-face { font-family: "Inter"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/Inter-SemiBold.woff2") format("woff2"); }
@font-face { font-family: "Inter Display"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/InterDisplay-Regular.woff2") format("woff2"); }
@font-face { font-family: "Inter Display"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/InterDisplay-Medium.woff2") format("woff2"); }
@font-face { font-family: "Inter Display"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/InterDisplay-SemiBold.woff2") format("woff2"); }

/* ---------- Reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: calc(var(--nav-h) + 12px); }
body { margin: 0; background: var(--surface-0); color: var(--color-ink); font-family: var(--font-text);
  font-size: var(--type-body-size); line-height: var(--type-body-lh); letter-spacing: var(--type-body-ls);
  font-weight: var(--font-weight-regular); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility; overflow-x: clip; }
h1, h2, h3, h4, h5, h6, p, ul, ol, dl, dd, figure, blockquote { margin: 0; }
ul, ol { padding: 0; list-style: none; }
img, picture, video, svg, canvas { display: block; max-width: 100%; height: auto; }
button, input, textarea, select { font: inherit; color: inherit; letter-spacing: inherit; }
button { cursor: pointer; background: none; border: 0; padding: 0; }
a { color: var(--color-link); text-decoration: none; transition: color var(--dur-base) var(--ease-standard); }
a:hover { text-decoration: underline; text-underline-offset: 0.18em; }
strong, b { font-weight: var(--font-weight-semibold); }
[hidden] { display: none !important; }

/* ---------- Focus [A] ---------- */
:focus { outline: none; }
:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-offset); border-radius: var(--radius-link); }

/* ---------- Utilities ---------- */
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip-link { position: fixed; top: 8px; left: 8px; z-index: 100; padding: 8px 16px; border-radius: var(--radius-pill);
  background: var(--color-ink); color: #fff; font-size: var(--type-small-size); transform: translateY(-200%); }
.skip-link:focus-visible { transform: none; }
.text-secondary { color: var(--color-text-secondary); }
.text-center { text-align: center; }
.nowrap { white-space: nowrap !important; text-wrap: nowrap !important; } /* utility beats .typography-* text-wrap */

/* =====================================================================
   Typography — mirrors apple.com .typography-* (sizes switch per breakpoint
   through tokens.css: large ≥1069 · medium 735–1068 · small ≤734).
   Display face from 19px up, Text face below. Never 700 on headlines.
   ===================================================================== */
.typography-hero, .typography-display, .typography-headline-xl, .typography-section,
.typography-headline, .typography-headline-sm, .typography-card-title, .typography-title,
.typography-eyebrow, .typography-callout { font-family: var(--font-display); font-weight: var(--font-weight-semibold); text-wrap: balance; }
.typography-hero        { font-size: var(--type-hero-size);        line-height: var(--type-hero-lh);        letter-spacing: var(--type-hero-ls); }
.typography-display     { font-size: var(--type-display-size);     line-height: var(--type-display-lh);     letter-spacing: var(--type-display-ls); }
.typography-headline-xl { font-size: var(--type-headline-xl-size); line-height: var(--type-headline-xl-lh); letter-spacing: var(--type-headline-xl-ls); }
.typography-section     { font-size: var(--type-section-size);     line-height: var(--type-section-lh);     letter-spacing: var(--type-section-ls); }
.typography-headline    { font-size: var(--type-headline-size);    line-height: var(--type-headline-lh);    letter-spacing: var(--type-headline-ls); }
.typography-headline-sm { font-size: var(--type-headline-sm-size); line-height: var(--type-headline-sm-lh); letter-spacing: var(--type-headline-sm-ls); }
.typography-card-title  { font-size: var(--type-card-title-size);  line-height: var(--type-card-title-lh);  letter-spacing: var(--type-card-title-ls); }
.typography-title       { font-size: var(--type-title-size);       line-height: var(--type-title-lh);       letter-spacing: var(--type-title-ls); }
.typography-eyebrow     { font-size: var(--type-eyebrow-size);     line-height: var(--type-eyebrow-lh);     letter-spacing: var(--type-eyebrow-ls); }
.typography-callout     { font-size: var(--type-callout-size);     line-height: var(--type-callout-lh);     letter-spacing: var(--type-callout-ls); }
.typography-intro       { font-family: var(--font-display); font-size: var(--type-intro-size); line-height: var(--type-intro-lh); letter-spacing: var(--type-intro-ls); color: var(--color-text-secondary); text-wrap: pretty; }
.typography-intro strong, .typography-intro em { color: var(--color-ink); font-weight: inherit; font-style: normal; } /* Apple "bold by colour" */
.typography-body-lg     { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); letter-spacing: var(--type-body-lg-ls); text-wrap: pretty; }
.typography-body        { font-size: var(--type-body-size); line-height: var(--type-body-lh); letter-spacing: var(--type-body-ls); text-wrap: pretty; }
.typography-body-tight  { font-size: var(--type-body-size); line-height: var(--type-body-tight-lh); letter-spacing: var(--type-body-ls); }
.typography-small       { font-size: var(--type-small-size); line-height: var(--type-small-lh); letter-spacing: var(--type-small-ls); }
.typography-caption     { font-size: var(--type-caption-size); line-height: var(--type-caption-lh); letter-spacing: var(--type-caption-ls); }
.typography-label       { font-size: var(--type-small-size); line-height: var(--type-small-lh); letter-spacing: var(--type-small-ls); font-weight: var(--font-weight-medium); }
.tabular                { font-variant-numeric: tabular-nums; }

/* Vertical text rhythm [A] (--sk-*-margin) */
.stack > * + * { margin-top: 0.8em; }
.stack-tight > * + * { margin-top: 0.4em; }

/* =====================================================================
   Layout
   ===================================================================== */
.container { width: var(--content-width); max-width: var(--content-max); margin-inline: auto; }
.container--hero { width: 100%; max-width: var(--content-max-hero); margin-inline: auto; }
.container--narrow { width: var(--content-width); max-width: 980px; margin-inline: auto; }
.container--text { width: var(--content-width); max-width: 692px; margin-inline: auto; }

/* Section rhythm [A]: white canvas by default, #f5f5f7 bands for contrast. */
.section { position: relative; padding-block: var(--section-padding); background: var(--surface-0); }
.section--story   { padding-block: var(--section-padding-story); }
.section--reduced { padding-block: var(--section-padding-reduced); }
.section--flush   { padding-block: 0; }
.section--band    { background: var(--surface-1); }
.section--band-end { padding-bottom: var(--section-padding-end-long); }
.section--index   { background: var(--surface-2); }
.section--dark    { background: var(--surface-dark); color: var(--color-on-dark); }
.section--dark .typography-intro { color: var(--color-steel); }
.section--dark .typography-intro strong { color: var(--color-on-dark); }
.section--dark a:not(.button) { color: var(--color-link-on-dark); }

.section-header { display: flex; flex-direction: column; gap: 20px; margin-bottom: var(--section-header-gap); }
.section-header--row { flex-direction: row; align-items: flex-end; justify-content: space-between; gap: 120px; }
@media (max-width: 734px) { .section-header--row { flex-direction: column; align-items: flex-start; gap: 16px; } }

/* Centered chapter lockup [A] §6.6: eyebrow → headline → grey intro. */
.lockup { text-align: center; max-width: 980px; margin-inline: auto; }
.lockup > .typography-eyebrow + * { margin-top: 0.4em; }
.lockup > * + .typography-intro, .lockup > * + .lockup-copy { margin-top: 0.8em; }
.lockup .typography-intro, .lockup .lockup-copy { max-width: 692px; margin-inline: auto; }
.lockup-ctas { display: flex; flex-wrap: wrap; justify-content: center; gap: 16px 24px; margin-top: 32px; align-items: center; }

/* Simple grids (gap = Refero element gap). */
.grid { display: grid; gap: var(--element-gap); }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1068px) { .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 734px)  { .grid-2, .grid-3 { grid-template-columns: minmax(0, 1fr); } }

/* Text + image pair: image enters from the opposite side [R]. */
.split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 64px; align-items: center; }
.split--reverse > :first-child { order: 2; }
@media (max-width: 734px) { .split { grid-template-columns: minmax(0, 1fr); gap: 32px; } .split--reverse > :first-child { order: 0; } }

/* =====================================================================
   Surfaces: card + media (28px radius, never a shadow)
   ===================================================================== */
.card { background: var(--surface-0); border-radius: var(--radius-card); padding: var(--card-padding); overflow: hidden; }
.section--band .card { background: var(--surface-0); }
.section:not(.section--band) .card { background: var(--surface-1); }
.card > * + * { margin-top: 12px; }

.media { position: relative; border-radius: var(--radius-card); overflow: hidden; background: var(--surface-1); }
.media img, .media picture { width: 100%; height: 100%; object-fit: cover; }
.media--bleed { border-radius: 0; }
.ratio-4x5 { aspect-ratio: 4 / 5; } .ratio-3x2 { aspect-ratio: 3 / 2; } .ratio-16x9 { aspect-ratio: 16 / 9; }
.ratio-1x1 { aspect-ratio: 1 / 1; } .ratio-21x9 { aspect-ratio: 21 / 9; }
/* Photo slot until Harvey picks the photo: flat grey, centred caption. */
.media-ph { display: grid; place-items: center; background: var(--surface-1); color: var(--color-steel);
  font-size: var(--type-caption-size); line-height: var(--type-caption-lh); letter-spacing: var(--type-caption-ls); text-align: center; padding: 24px; }
.media > .media-ph { position: absolute; inset: 0; }
.section--band .media-ph { background: var(--surface-3); }
.section--dark .media-ph { background: var(--surface-dark-alt); color: var(--color-steel); }

.hairline { border: 0; border-top: 1px solid var(--color-hairline); margin: 0; }

/* =====================================================================
   Buttons [A] — pill 980px; hover changes colour only.
   ===================================================================== */
.button { display: inline-flex; align-items: center; justify-content: center; gap: 0.35em; border: var(--btn-border) solid transparent;
  border-radius: var(--radius-pill); padding: calc(var(--btn-pad-y) - 1px) calc(var(--btn-pad-x) - 1px);
  font-family: var(--font-text); font-size: var(--btn-font); line-height: var(--type-small-tight-lh); letter-spacing: var(--type-small-ls);
  font-weight: var(--font-weight-regular); white-space: nowrap; text-decoration: none; cursor: pointer;
  background: var(--color-action); color: #fff;
  transition: background-color var(--dur-instant) linear, color var(--dur-instant) linear, border-color var(--dur-instant) linear; }
.button:hover { background: var(--color-action-hover); text-decoration: none; }
.button:active { background: var(--color-action-active); }
.button--secondary { background: transparent; color: var(--color-link); border-color: var(--color-link); }
.button--secondary:hover { background: var(--color-action-hover); color: #fff; border-color: var(--color-action-hover); }
.button--neutral { background: var(--color-ink); color: #fff; }
.button--neutral:hover { background: var(--color-ink-hover); } .button--neutral:active { background: var(--color-ink-active); }
.button--secondary-neutral { background: transparent; color: var(--color-ink); border-color: var(--color-ink); }
.button--secondary-neutral:hover { background: var(--color-ink); color: #fff; }
.button--elevated { padding: calc(var(--btn-elevated-pad-y) - 1px) calc(var(--btn-elevated-pad-x) - 1px); font-size: var(--btn-elevated-font); line-height: 1.17648; letter-spacing: var(--type-body-ls); }
.button--reduced { padding: calc(var(--btn-reduced-pad-y) - 1px) calc(var(--btn-reduced-pad-x) - 1px); font-size: var(--btn-reduced-font); line-height: var(--type-caption-lh); letter-spacing: var(--type-caption-ls); }
.button[disabled], .button[aria-disabled="true"] { opacity: var(--btn-disabled-opacity); pointer-events: none; }
.section--dark .button--secondary { color: var(--color-link-on-dark); border-color: var(--color-link-on-dark); }
.section--dark .button--secondary:hover { color: #fff; }

/* Text link with chevron [A] "Learn more ›" */
.link-more { display: inline-flex; align-items: baseline; gap: 0.2em; font-size: inherit; }
.link-more::after { content: "›"; font-family: var(--font-text); }

/* =====================================================================
   Global nav [A] §6.1 — fixed, 44px, translucent + blur.
   ===================================================================== */
.globalnav { position: fixed; inset: 0 0 auto 0; z-index: 50; height: var(--nav-h);
  background: var(--surface-globalnav-light); -webkit-backdrop-filter: var(--backdrop-nav); backdrop-filter: var(--backdrop-nav); }
.globalnav::after { content: ""; position: absolute; inset: auto 0 0 0; height: 1px; background: var(--color-control-gray); opacity: 0;
  transition: opacity var(--dur-fast) var(--ease-standard); }
.globalnav.is-scrolled::after, .globalnav.is-open::after { opacity: 1; }
.globalnav-inner { max-width: var(--nav-content-max); height: 100%; margin-inline: auto; padding-inline: 22px;
  display: flex; align-items: center; justify-content: space-between; gap: 24px; }
.globalnav-brand { font-family: var(--font-display); font-size: 17px; line-height: 1; font-weight: var(--font-weight-semibold);
  letter-spacing: -0.01em; color: var(--color-ink); white-space: nowrap; }
.globalnav-brand:hover { text-decoration: none; }
.globalnav-links { display: flex; align-items: center; gap: 28px; }
.globalnav-links a:not(.button) { font-size: var(--type-caption-size); line-height: 1; letter-spacing: -0.01em; color: var(--color-ink-alpha); }
.globalnav-links a:not(.button):hover { color: var(--color-ink); text-decoration: none; }
.globalnav-toggle { display: none; width: 44px; height: 44px; margin-right: -12px; align-items: center; justify-content: center; color: var(--color-ink); }
.globalnav-toggle svg { width: 18px; height: 18px; }
@media (max-width: 734px) {
  .globalnav-inner { padding-inline: 16px; }
  .globalnav-toggle { display: inline-flex; }
  .globalnav-links { position: fixed; inset: var(--nav-h) 0 auto 0; flex-direction: column; align-items: stretch; gap: 0;
    padding: 8px 32px 32px; background: var(--surface-2); border-bottom: 1px solid var(--color-control-gray); display: none; }
  .globalnav.is-open .globalnav-links { display: flex; }
  .globalnav-links a:not(.button) { font-family: var(--font-display); font-size: 28px; line-height: 1.14; font-weight: var(--font-weight-semibold);
    padding-block: 10px; color: var(--color-ink); }
  .globalnav-links .button { align-self: flex-start; margin-top: 16px; }
  html:not(.js) .globalnav-toggle { display: none; }
  html:not(.js) .globalnav-links { position: static; display: flex; flex-direction: row; flex-wrap: nowrap; overflow-x: auto; background: transparent; border: 0; padding: 0; gap: 16px; }
  html:not(.js) .globalnav-links a:not(.button) { font-family: var(--font-text); font-size: var(--type-caption-size); font-weight: 400; padding: 0; white-space: nowrap; }
}
main { display: block; }
.page-offset { padding-top: var(--nav-h); }

/* =====================================================================
   Footer [A] §6.12 — #f5f5f7, 12/16, rgba(0,0,0,.56)
   ===================================================================== */
.footer { background: var(--surface-1); color: var(--color-text-secondary-alpha); font-size: var(--type-caption-size);
  line-height: var(--type-caption-lh); letter-spacing: var(--type-caption-ls); padding-block: 40px 24px; }
.footer-inner { width: var(--content-width); max-width: var(--footer-content-max); margin-inline: auto; }
.footer a { color: var(--color-ink-alpha); }
.footer-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 24px; padding-top: 16px; margin-top: 16px; border-top: 1px solid var(--color-hairline); }
.footer-links { display: flex; flex-wrap: wrap; gap: 8px 20px; }

/* =====================================================================
   Motion hooks (driven by motion.js). Nothing is hidden without JS; only
   elements below the fold at load get .is-pending (CATALOGO A5, R11).
   ===================================================================== */
.is-pending { opacity: 0; transform: translate3d(0, var(--reveal-translate-y), 0); }
.is-pending[data-reveal="photo"] { transform: translate3d(0, 28px, 0); clip-path: inset(12% 0 0 0 round var(--radius-card)); }
.is-pending[data-reveal="fade"] { transform: none; }
.reveal-line { display: block; }

/* Sticky scene scaffold: a tall track with a pinned stage (CATALOGO §1.3). */
.scene { position: relative; }
.scene-stage { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: hidden; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; }
  .is-pending { opacity: 1 !important; transform: none !important; clip-path: none !important; }
}

/* ---------- Print: everything visible, no chrome ---------- */
@media print {
  .globalnav, .skip-link, .no-print { display: none !important; }
  .page-offset { padding-top: 0; }
  .is-pending { opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .section { padding-block: 24px; background: #fff !important; color: #000 !important; }
  .scene-stage { position: static; height: auto; }
  a { color: #000; }
}

/* Footer socials (markup from {{html.socials}}, config.json → socials) */
.footer-socials { display: flex; flex-wrap: wrap; gap: 8px 20px; margin-top: 16px; }

/* Harvey 30-oct: «hay esquinas duras, no con el formato Apple» → todas las fotos con esquinas redondeadas (salvo los retratos de estudio fundidos con el blanco). */
main dvb-img:not(.s-00-photo), main dvb-img:not(.s-00-photo) img, main dvb-img:not(.s-00-photo) picture { border-radius: 22px; }
main dvb-img:not(.s-00-photo) { overflow: hidden; display: block; }
.s-01-opening-image, .s-01-opening-image img { border-radius: 22px; }
@media (max-width: 734px) { main dvb-img:not(.s-00-photo), main dvb-img:not(.s-00-photo) img { border-radius: 16px; } }

/* ==== Titulares con degradado negro → gris (estilo «Might takes flight» de Apple), 30-oct ==== */
:root { --grad-ink: linear-gradient(100deg, #1d1d1f 0%, #3a3a3e 45%, #7c7c82 100%);
        --grad-on-dark: linear-gradient(100deg, #f5f5f7 0%, #d2d2d7 50%, #8e8e93 100%); }
:is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title) { position: relative; }
:is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title) * { background-repeat: no-repeat; }
/* The gradient goes on the LEAF that holds the text: a parent with background-clip:text paints its
   children's glyphs even when an animation has them at opacity 0 (Chrome desktop, 30-oct bug). */
:is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title):not(:has(*)),
:is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title) :not(:has(*)) {
  background-image: var(--grad-ink); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
:is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title):has(*) { background-image: none; }
.s-08-title:not(:has(*)), .s-08-title :not(:has(*)) {
  background-image: var(--grad-on-dark); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
@media (forced-colors: active) { :is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title, .s-00-title *, .s-08-title *) { -webkit-text-fill-color: currentColor; color: CanvasText; background: none; } }
@media print { :is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title) * , :is(.s-00-title, .s-01-title, .s-02-title, .s-03-title, .s-04-title, .s-05-title, .s-06-title, .s-07-title, .s-08-title) { -webkit-text-fill-color: #1d1d1f; } }

/* Public page shell: the base owns behaviour; this layer refines its surfaces. */
.globalnav {
  --nav-surface: var(--surface-2);
  --nav-panel: var(--surface-2);
  --nav-ink: var(--color-ink);
  --nav-secondary: var(--color-ink-alpha);
  --nav-hairline: var(--color-control-gray);
  --nav-scrim: rgba(255, 255, 255, .6);
  isolation: isolate;
  background: var(--nav-surface);
  color: var(--nav-ink);
  -webkit-backdrop-filter: var(--backdrop-nav);
  backdrop-filter: var(--backdrop-nav);
}

/* Keep the edge to one hairline, including the scrolled state. */
.globalnav, .globalnav.is-scrolled { box-shadow: none; }

@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .globalnav { --nav-surface: var(--surface-globalnav-light); }
}

/* The closing/footer controller owns is-dark, including reverse scroll. */
.globalnav.is-dark {
  --nav-surface: var(--surface-dark);
  --nav-panel: var(--surface-dark);
  --nav-ink: var(--color-on-dark);
  --nav-secondary: var(--color-on-dark);
  --nav-hairline: var(--color-text-secondary-alt);
  --nav-scrim: rgba(0, 0, 0, .4);
}
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .globalnav.is-dark { --nav-surface: var(--surface-globalnav-dark); }
}

.globalnav::after { z-index: 3; pointer-events: none; background: var(--nav-hairline); }
.globalnav.is-open { background: var(--nav-panel); }
.globalnav-brand, .globalnav-home, .globalnav-toggle { color: var(--nav-ink); }
.globalnav-links > a:not(.button) { color: var(--nav-secondary); }
.globalnav-links > a:not(.button):hover { color: var(--nav-ink); }
.globalnav-links > a:not(.button)[aria-current="true"] { color: var(--nav-ink); font-weight: var(--font-weight-semibold); }

.globalnav-inner {
  width: 100%;
  max-width: none;
  gap: var(--space-20);
  padding-inline: var(--space-24);
}

.globalnav-brand {
  display: inline-flex;
  align-items: center;
  min-height: var(--nav-h);
  min-width: 0;
  flex: 0 1 auto;
  gap: 10px;
  font-family: var(--font-text);
  font-size: var(--type-body-size);
  font-weight: var(--font-weight-semibold);
  line-height: 1.1;
  white-space: normal;
}
.globalnav-monogram { width: var(--space-32); height: var(--space-28); flex: none; }
.globalnav-name { min-width: 0; }
.globalnav.is-dark .globalnav-brand { color: var(--surface-0); }

.globalnav-links { flex-shrink: 0; gap: clamp(var(--space-8), 1.5vw, var(--space-28)); }
.globalnav-links > a:not(.button), .globalnav-home {
  display: inline-flex;
  align-items: center;
  min-height: var(--nav-h);
  white-space: nowrap;
}

.globalnav a:focus-visible, .globalnav-toggle:focus-visible {
  outline-offset: calc(-1 * var(--space-4));
}

.globalnav-toggle { flex-shrink: 0; }
.globalnav-toggle path {
  transform-box: fill-box;
  transform-origin: center;
  transition: transform var(--dur-fast) var(--ease-nav);
}
.globalnav.is-open .globalnav-icon-top { transform: translateY(3px) rotate(45deg); }
.globalnav.is-open .globalnav-icon-bottom { transform: translateY(-3px) rotate(-45deg); }

.globalnav-home {
  flex-shrink: 0;
  gap: var(--space-4);
  font-size: var(--type-caption-size);
  line-height: var(--type-caption-lh);
  letter-spacing: var(--type-caption-ls);
}
.globalnav-home svg { width: var(--space-16); height: var(--space-16); }

@media (max-width: 1068px) and (min-width: 735px) {
  .globalnav-inner { gap: var(--space-16); }
  .globalnav-links { gap: var(--space-8); }
}

@media (max-width: 734px) {
  .globalnav-inner {
    gap: var(--space-12);
    padding-inline: var(--space-16);
  }
  .globalnav-toggle { margin-right: 0; }
  /* The scrim belongs to the existing toggle: tapping its generated box
     reaches the same click handler, without a second focusable control. */
  .js .globalnav-toggle::before {
    content: "";
    position: fixed;
    inset: var(--nav-h) 0 auto;
    height: calc(100vh - var(--nav-h));
    height: calc(100dvh - var(--nav-h));
    z-index: 0;
    background: var(--nav-scrim);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--dur-fast) var(--ease-nav);
  }
  .js .globalnav.is-open .globalnav-toggle::before { opacity: 1; pointer-events: auto; }
  /* An open panel is opaque. Removing the ancestor backdrop also leaves
     the fixed scrim attached to the viewport, with its own page blur. */
  .js .globalnav.is-open { -webkit-backdrop-filter: none; backdrop-filter: none; }
  .globalnav-brand, .globalnav-toggle svg { position: relative; z-index: 1; }
  .globalnav-links {
    z-index: 2;
    max-height: calc(100vh - var(--nav-h));
    max-height: calc(100svh - var(--nav-h));
    overflow-y: auto;
    overscroll-behavior-y: contain;
    background: var(--nav-panel);
    border-color: var(--nav-hairline);
    padding: var(--space-16) max(var(--space-16), env(safe-area-inset-right)) var(--space-32) max(var(--space-16), env(safe-area-inset-left));
  }
  .globalnav-links > a:not(.button) {
    min-height: var(--space-52);
    padding-block: var(--space-8);
    white-space: normal;
  }
  .globalnav-links .button { max-width: 100%; white-space: normal; }

  .js .globalnav.is-open .globalnav-links > a {
    animation: globalnav-link-in var(--dur-fast) var(--ease-nav) both;
  }

  /* Without JS, navigation is ordinary content: every destination stays visible. */
  html:not(.js) .globalnav { position: relative; height: auto; }
  html:not(.js) .globalnav-inner { flex-wrap: wrap; gap: 0; height: auto; }
  html:not(.js) .globalnav-brand { width: 100%; }
  html:not(.js) .globalnav-links {
    display: flex;
    position: static;
    width: 100%;
    max-height: none;
    flex-wrap: wrap;
    overflow: visible;
    gap: 0 var(--space-20);
    padding: 0 0 var(--space-12);
  }
  html:not(.js) .globalnav-links > a:not(.button) {
    display: inline-flex;
    min-height: var(--space-40);
    padding-block: var(--space-8);
    font-size: var(--type-small-size);
    line-height: var(--type-small-lh);
    white-space: normal;
  }
  html:not(.js) .globalnav-links .button { margin-block: var(--space-8); }
  html:not(.js) .globalnav-home { margin-top: calc(-1 * var(--nav-h)); margin-left: auto; }
  html:not(.js) .globalnav--minimal .globalnav-inner { flex-wrap: nowrap; gap: var(--space-12); }
  html:not(.js) .globalnav--minimal .globalnav-brand { width: auto; }
  html:not(.js) .globalnav--minimal .globalnav-home { margin-top: 0; }
  html:not(.js) .page-offset { padding-top: 0; }
}

@keyframes globalnav-link-in {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .js .globalnav.is-open .globalnav-links > a { animation: none; }
  .globalnav-toggle path { transition: none; }
  .js .globalnav-toggle::before { transition: none; }
}

/* Shell pages owned by the skeleton (404). */
.s-404 { min-height: calc(100vh - var(--nav-h)); min-height: calc(100svh - var(--nav-h)); display: grid; place-items: center; }

/* Marca: sello DV (Harvey 30-oct: el cuadrado negro «cutre» → sello fino). */
.globalnav-badge { display: inline-grid; place-items: center; flex: none; width: 30px; height: 30px; border-radius: 50%;
  border: 1.25px solid currentColor; color: #1d1d1f; background: transparent;
  font-family: "Inter Display", "Inter", -apple-system, sans-serif; font-weight: 600; font-size: 11px; line-height: 1;
  letter-spacing: .06em; padding-left: .06em; transition: color .3s var(--ease-house); }
.globalnav.is-dark .globalnav-badge { color: #f5f5f7; }

/* Logo B (Claude, recomendado a Harvey): solo el nombre; «Blanco» en gris. */
.globalnav-name { font-weight: 600; letter-spacing: -.02em; }
.globalnav-name-last { color: #86868b; font-weight: 500; }
.globalnav.is-dark .globalnav-name-last { color: #a1a1a6; }

/* ==== Cookie notice (bottom card, Apple style) ==== */
.consent { position: fixed; z-index: 60; left: 50%; bottom: max(var(--space-24), env(safe-area-inset-bottom)); width: min(560px, calc(100% - 32px));
  transform: translate(-50%, 24px); opacity: 0; transition: transform 420ms cubic-bezier(.16,1,.3,1), opacity 320ms ease; pointer-events: none; }
.consent.is-visible { transform: translate(-50%, 0); opacity: 1; pointer-events: auto; }
.consent-card { background: rgba(255,255,255,.92); -webkit-backdrop-filter: saturate(180%) blur(20px); backdrop-filter: saturate(180%) blur(20px);
  border: 1px solid var(--color-hairline); border-radius: 22px; box-shadow: 0 12px 40px rgba(0,0,0,.12); padding: 20px 22px; color: var(--color-ink); }
.consent-title { font-weight: 600; font-size: 17px; line-height: 1.3; margin: 0 0 6px; }
.consent-text { font-size: 14px; line-height: 1.45; color: var(--color-text-secondary); margin: 0; }
.consent-text a { color: var(--color-link); white-space: nowrap; }
.consent-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }
.consent-button { min-height: 44px; min-width: 120px; padding: 0 20px; border-radius: 980px; font: inherit; font-size: 15px; font-weight: 500; cursor: pointer; border: 1px solid transparent; }
.consent-button--primary { background: var(--color-action); color: #fff; }
.consent-button--primary:hover { background: var(--color-action-hover); }
.consent-button--secondary { background: var(--color-button-neutral-active); color: var(--color-ink); }
.consent-button--secondary:hover { background: var(--color-control-gray); }
.consent-button:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-offset); }
@media (max-width: 734px) { .consent-actions { justify-content: stretch; } .consent-button { flex: 1 1 0; min-width: 0; } }
@media (prefers-reduced-motion: reduce) { .consent { transition: none; } }
@media print { .consent { display: none !important; } }

/* ==== Legal pages ==== */
.legal { padding-block: calc(var(--globalnav-height) + 64px) 96px; }
.legal-inner { max-width: 760px; }
.legal-title { font-size: clamp(36px, 6vw, 56px); line-height: 1.07; font-weight: 600; letter-spacing: -0.015em; margin: 8px 0 12px; }
.legal-updated { color: var(--color-text-secondary); font-size: 14px; margin: 0 0 40px; }
.legal h2 { font-size: 21px; line-height: 1.25; font-weight: 600; margin: 40px 0 10px; }
.legal p, .legal-list { font-size: 17px; line-height: 1.55; color: var(--color-text-secondary-alt); }
.legal p + p { margin-top: 12px; }
.legal-list { padding-left: 1.2em; margin: 10px 0 0; }
.legal-list li + li { margin-top: 6px; }
.legal a { color: var(--color-link); }
.legal strong { color: var(--color-ink); font-weight: 600; }
.legal-table-wrap { overflow-x: auto; margin-top: 16px; border: 1px solid var(--color-hairline); border-radius: 16px; }
.legal-table { width: 100%; border-collapse: collapse; font-size: 15px; line-height: 1.45; }
.legal-table th, .legal-table td { text-align: left; vertical-align: top; padding: 12px 14px; border-bottom: 1px solid var(--color-hairline); }
.legal-table tr:last-child td { border-bottom: 0; }
.legal-table th { font-weight: 600; background: #f5f5f7; }
.legal-table code { font-size: 14px; }
.legal-inline-button { font: inherit; color: var(--color-link); background: none; border: 0; padding: 0; cursor: pointer; text-decoration: underline; text-underline-offset: 2px; }
.legal-more { margin-top: 56px !important; padding-top: 20px; border-top: 1px solid var(--color-hairline); font-size: 15px !important; }
@media (max-width: 734px) { .legal { padding-block: calc(var(--globalnav-height) + 40px) 72px; } .legal p, .legal-list { font-size: 16px; } .legal-table { min-width: 560px; } }
@media (max-width: 734px) {
  .legal-table-wrap { overflow: visible; border: 0; border-radius: 0; }
  .legal-table { min-width: 0; }
  .legal-table thead { display: none; }
  .legal-table tr { display: block; border: 1px solid var(--color-hairline); border-radius: 16px; padding: 6px 0; }
  .legal-table tr + tr { margin-top: 12px; }
  .legal-table td { display: grid; grid-template-columns: 96px 1fr; gap: 12px; border: 0; padding: 8px 14px; }
  .legal-table td::before { content: attr(data-label); font-weight: 600; color: var(--color-ink); }
}

/* 9 links (con «Por los jóvenes»): en tabletas estrechas el menú se aprieta en vez de desbordar */
@media (max-width: 920px) and (min-width: 735px) {
  .globalnav-inner { gap: var(--space-12); }
  .globalnav-links { gap: 6px; }
  .globalnav-links > a:not(.button) { font-size: 11px; letter-spacing: 0; }
  .globalnav-name-last { display: none; }
}

/* Owner 30-oct: menu links glide instead of jumping; native scroll, so the pinned
   scenes keep tracking it. Reduced motion keeps the instant jump (base.css). */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}
/* Logo: one ink → grey gradient across the whole name, «Blanco» at the grey end. */
.globalnav-name {
  background-image: var(--grad-ink);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.globalnav-name-last { color: inherit; -webkit-text-fill-color: transparent; }
.globalnav.is-dark .globalnav-name { background-image: var(--grad-on-dark); }
.globalnav.is-dark .globalnav-name-last { color: inherit; }
@media (forced-colors: active) {
  .globalnav-name, .globalnav-name-last { -webkit-text-fill-color: currentColor; background: none; }
}

/* ==== sections/00-hero ==== */
/* Real photograph, with a complete reading order before the pinned handoff. */
.s-00-hero { position: relative; z-index: 2; padding: 0; overflow: clip; background: var(--surface-0); --s-00-name-size: clamp(32px, 8vw, 144px); }
.s-00-stage { position: relative; top: 0; height: auto; min-height: calc(100svh - var(--nav-h)); padding-block: var(--space-64) calc(var(--space-48) + var(--space-8)); overflow: visible; background: var(--surface-0); }
.s-00-heading, .s-00-portrait-frame { width: 87.5%; max-width: 1260px; margin-inline: auto; }
.s-00-heading { position: relative; z-index: 3; text-align: center; }
.s-00-eyebrow { margin: 0; font-size: var(--type-small-size); line-height: var(--type-small-lh); font-weight: var(--font-weight-regular); color: var(--color-text-secondary); text-wrap: balance; }
.s-00-title { margin: var(--space-20) 0 0; font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: var(--s-00-name-size); line-height: 1.04; letter-spacing: -.035em; text-align: center; white-space: nowrap; }
.s-00-title-text, .s-00-word { display: inline-block; }
.s-00-title-line { display: inline; white-space: nowrap; }
.s-00-portrait-frame { position: relative; z-index: 2; margin-top: var(--space-32); height: 60vh; height: min(60svh, 175vw); min-height: min(40.25vw, 579.6px); overflow: hidden; border-radius: var(--radius-card); transform-origin: 0 0; background: var(--surface-1); }
.s-00-photo, .s-00-photo img { display: block; width: 100%; height: 100%; }
.s-00-photo { transform-origin: 50% 30%; }
.s-00-photo img { object-fit: cover; object-position: 50% 22%; transform-origin: 50% 35%; }
.s-00-lockup { position: relative; z-index: 4; margin-top: var(--space-32); text-align: center; }
.s-00-intro { max-width: 692px; margin: 0 auto; text-wrap: balance; }
.s-00-ctas { justify-content: center; margin-top: var(--space-24); gap: var(--space-16) var(--space-24); }
.s-00-primary { white-space: normal; text-align: center; }
.s-00-contact { display: inline-flex; gap: var(--space-4); align-items: center; min-height: var(--space-40); }
.s-00-arrow { flex: none; }
.s-00-skip { position: absolute; z-index: 6; top: var(--space-12); right: 6.25%; min-height: var(--space-40); padding-inline: var(--space-12); color: var(--color-text-secondary); background: var(--surface-0); border-radius: var(--radius-pill); }
.s-00-bridge, .s-00-landscape, .s-00-handoff-credit, .s-00-handoff-caption { display: none; pointer-events: none; }
.s-00-hero.s-00-enhanced { padding-bottom: 100svh; background: transparent; }
.s-00-enhanced .s-00-stage { position: sticky; top: var(--s-00-pin-top, var(--nav-h)); }
.s-00-enhanced .s-00-portrait-frame { border-radius: 0; clip-path: inset(0 round 28px); }
.s-00-enhanced .s-00-bridge { position: absolute; z-index: 4; display: flex; flex-direction: column; justify-content: center; text-align: center; opacity: 0; background: var(--surface-0); }
.s-00-bridge > p:first-child { font-size: var(--type-small-size); color: var(--color-text-secondary); }
.s-00-bridge-title { margin-top: var(--space-8); font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: clamp(48px, 5.2vw, 80px); line-height: 1.02; letter-spacing: -.035em; text-wrap: balance; }
.s-00-bridge-title > span { display: block; }
.s-00-enhanced .s-00-landscape { display: flex; flex-direction: column; position: absolute; z-index: 3; overflow: visible; opacity: 0; }
.s-00-landscape-media { flex: none; width: 100%; height: var(--s-00-landscape-h); overflow: hidden; border-radius: var(--radius-card); }
.s-00-castle, .s-00-castle img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 53% 40%; }
.s-00-enhanced .s-00-handoff-credit { display: block; position: static; margin: 0; padding: 10px 0 0; color: var(--color-text-secondary); font-size: 11px; line-height: 1.3; overflow-wrap: anywhere; letter-spacing: var(--type-caption-ls); text-align: right; }
.s-00-credit-link { text-decoration: underline; text-underline-offset: .15em; }
.s-00-enhanced .s-00-handoff-caption { position: absolute; z-index: 4; display: block; opacity: 0; font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: 40px; line-height: 1.1; letter-spacing: -.025em; text-wrap: pretty; }
.s-00-handoff-caption span { display: block; }
.s-00-hero.s-00-direct { padding-bottom: 0; }
.s-00-direct .s-00-stage { position: relative; top: 0; }
.s-00-direct .s-00-bridge, .s-00-direct .s-00-landscape, .s-00-direct .s-00-handoff-credit { display: none; }
@media (max-width: 734px) {
 .s-00-hero { --s-00-name-size: clamp(32px, 14vw, 64px); }
 .s-00-title { white-space: normal; text-wrap: balance; }
 .s-00-title-line { display: block; width: max-content; margin-inline: auto; }
 .s-00-eyebrow { font-size: var(--type-caption-size); }
 .s-00-portrait-frame { margin-top: var(--space-28); }
 .s-00-intro { max-width: 27em; font-size: var(--type-body-size); line-height: var(--type-body-lh); }
 .s-00-primary { font-size: var(--type-small-size); }
 .s-00-bridge-title { font-size: clamp(32px, 10.25vw, 56px); }
 .s-00-bridge-title > span:first-child { white-space: nowrap; }
 .s-00-handoff-credit { font-size: var(--type-micro-size); line-height: var(--type-micro-lh); }
 .s-00-enhanced .s-00-handoff-caption { font-size: 24px; }
}
@media (min-width: 735px) and (max-height: 700px) {
 .s-00-bridge-title { font-size: var(--space-48); }
}
@media (prefers-reduced-motion: reduce), print {
 .s-00-hero.s-00-enhanced { padding-bottom: 0; background: var(--surface-0); }
 .s-00-enhanced .s-00-stage { position: relative; top: 0; opacity: 1 !important; }
 .s-00-title, .s-00-eyebrow, .s-00-lockup, .s-00-photo, .s-00-photo img { opacity: 1 !important; transform: none !important; }
 .s-00-portrait-frame { transform: none !important; clip-path: none !important; border-radius: var(--radius-card) !important; }
 .s-00-bridge, .s-00-landscape, .s-00-handoff-credit, .s-00-handoff-caption, .s-00-skip { display: none !important; }
}

/* Movimiento reducido: el nombre siempre cabe en su caja (≈10,3 em de ancho → 8,3vw entra en el contenedor de 87,5 %). */
@media (prefers-reduced-motion: reduce) and (min-width: 735px) {
  .s-00-title { font-size: min(8.3vw, 150px) !important; }
}

/* ===== Hero de estudio (Claude, Harvey 11:5x: «sigue muy cutre») =====
   Retrato entero (cabeza y hombros) sobre el mismo blanco de la página: sin caja, sin zoom, nítido. */
.s-00-hero .s-00-portrait-frame { background: #fff; overflow: hidden; border-radius: 0 !important;
  width: min(62vw, 760px); max-width: 760px; height: auto !important; min-height: 0 !important; aspect-ratio: 1536 / 1104; margin-top: var(--space-24); }
.s-00-hero .s-00-photo img { object-fit: contain; object-position: 50% 100%; }

@media (max-width: 734px) { .s-00-hero .s-00-portrait-frame { width: 100%; } }

/* Global-3: a stable top anchor preserves the complete studio portrait. */
.s-00-enhanced .s-00-portrait-frame { transform-origin: 50% 0; }
.s-00-enhanced .s-00-bridge-title { font-size: clamp(32px, 4vw, 48px); }
.s-00-enhanced .s-00-bridge { justify-content: flex-start; }
.s-00-hero .s-00-portrait-frame { width: min(48vw, 640px); margin-top: var(--space-8);
  -webkit-mask-image: linear-gradient(to bottom, #000 74%, transparent 100%); mask-image: linear-gradient(to bottom, #000 74%, transparent 100%); }
.s-00-hero .s-00-lockup { margin-top: var(--space-16); position: relative; z-index: 3; }
@media (max-width: 734px) { .s-00-hero .s-00-portrait-frame { width: 100%; } }

/* Harvey 13:5x: «se le ve muy pequeño» → retrato grande. */
.s-00-hero .s-00-portrait-frame { width: min(74vw, 1060px) !important; margin-top: calc(-1 * var(--space-8)) !important;
  -webkit-mask-image: linear-gradient(to bottom, #000 66%, transparent 97%); mask-image: linear-gradient(to bottom, #000 66%, transparent 97%); }
.s-00-hero .s-00-lockup { margin-top: calc(-1 * clamp(80px, 9vw, 140px)) !important; }
@media (max-width: 734px) { .s-00-hero .s-00-portrait-frame { width: 118% !important; margin-left: -9% !important; } .s-00-hero .s-00-lockup { margin-top: -48px !important; } }

/* ===== Hero a dos columnas (Harvey 13:5x: «Daniel a la izquierda y a la derecha lo otro, quedaba más pro») ===== */
.s-00-hero .s-00-stage { display: grid !important; grid-template-columns: minmax(0, 1.08fr) minmax(0, 1fr); grid-template-areas: "foto titulo" "foto texto";
  align-items: end; column-gap: clamp(32px, 5vw, 88px); width: 87.5%; max-width: 1260px; margin-inline: auto;
  min-height: calc(100svh - var(--nav-h)); padding-block: clamp(40px, 6vh, 72px) 0 !important; }
.s-00-hero .s-00-heading { grid-area: titulo; width: auto !important; max-width: none !important; margin: 0 !important; text-align: left; align-self: end; }
.s-00-hero .s-00-title { white-space: normal !important; text-align: left; font-size: clamp(52px, 6vw, 100px) !important; line-height: 1.0; letter-spacing: -.04em; margin-top: 14px; }
.s-00-hero .s-00-title-line { display: inline !important; }
.s-00-hero .s-00-portrait-frame { grid-area: foto; width: 100% !important; max-width: none !important; margin: 0 !important; aspect-ratio: auto !important;
  height: calc(100svh - var(--nav-h) - clamp(40px, 6vh, 72px)) !important; min-height: 520px !important; align-self: end;
  -webkit-mask-image: linear-gradient(to bottom, #000 82%, transparent 100%); mask-image: linear-gradient(to bottom, #000 82%, transparent 100%); }
.s-00-hero .s-00-photo, .s-00-hero .s-00-photo img { height: 100% !important; }
.s-00-hero .s-00-photo img { object-fit: cover !important; object-position: 50% 10% !important; }
.s-00-hero .s-00-lockup { grid-area: texto; width: auto !important; margin: 24px 0 clamp(64px, 12vh, 140px) !important; text-align: left; }
.s-00-hero .s-00-lockup .lockup-ctas { justify-content: flex-start; }
.s-00-hero .s-00-intro { max-width: 22em; margin-inline: 0; font-size: clamp(19px, 1.5vw, 24px); }
.s-00-hero .s-00-bridge, .s-00-hero .s-00-landscape, .s-00-hero .s-00-handoff-credit, .s-00-hero .s-00-skip { display: none !important; }
@media (max-width: 734px) {
  .s-00-hero .s-00-stage { grid-template-columns: 1fr; grid-template-areas: "titulo" "foto" "texto"; padding-top: 32px !important; }
  .s-00-hero .s-00-heading, .s-00-hero .s-00-lockup { text-align: center; }
  .s-00-hero .s-00-lockup .lockup-ctas { justify-content: center; }
  .s-00-hero .s-00-intro { margin-inline: auto; }
  .s-00-hero .s-00-portrait-frame { height: 58svh !important; min-height: 0 !important; }
  .s-00-hero .s-00-lockup { margin: 8px 0 40px !important; }
}

/* ===== Entrada «wow» recuperada (Harvey 14:5x: «¿Me quitaste las animaciones wow del inicio?») ===== */
@keyframes s-00-sube { from { opacity: 0; transform: translate3d(0, 34px, 0); } to { opacity: 1; transform: none; } }
@keyframes s-00-abre { from { clip-path: inset(14% 18% 0 18% round 28px); } to { clip-path: inset(0 0 0 0 round 0); } }
@keyframes s-00-acerca { from { transform: scale(1.12); filter: grayscale(1); } 55% { filter: grayscale(0); } to { transform: scale(1); filter: grayscale(0); } }
@media (prefers-reduced-motion: no-preference) {
  .s-00-hero .s-00-eyebrow { animation: s-00-sube .9s var(--ease-house) .15s both; }
  .s-00-hero .s-00-title { animation: s-00-sube 1.1s var(--ease-house) .3s both; }
  .s-00-hero .s-00-portrait-frame { animation: s-00-abre 1.5s var(--ease-house) .1s both; }
  .s-00-hero .s-00-photo img { animation: s-00-acerca 2.2s var(--ease-house) .1s both; transform-origin: 50% 30%; }
  .s-00-hero .s-00-intro { animation: s-00-sube .9s var(--ease-house) .75s both; }
  .s-00-hero .s-00-ctas { animation: s-00-sube .9s var(--ease-house) .9s both; }
  /* Al bajar: el retrato se aleja en profundidad y el texto sube más deprisa (parallax), sin dejar huecos. */
  @supports (animation-timeline: view()) {
    @keyframes s-00-profundidad { to { transform: translate3d(0, 12%, 0) scale(.94); opacity: .55; } }
    @keyframes s-00-texto-sube { to { transform: translate3d(0, -18%, 0); opacity: 0; } }
    .s-00-hero .s-00-photo { animation: s-00-profundidad linear both; animation-timeline: view(); animation-range: exit 0% exit 90%; }
    .s-00-hero .s-00-heading { animation: s-00-texto-sube linear both; animation-timeline: view(); animation-range: exit 10% exit 80%; }
  }
}

/* ===== Enlace con la historia (01) en escena fija · Claude c1, 30-oct =====
   El inicio de arriba se queda TAL CUAL. Al bajar, el escenario se fija: nombre y botones
   suben y se van, el retrato se reduce a un marco redondeado a la IZQUIERDA y el castillo
   de Manzanares llega desde el fondo a un marco a la DERECHA. El final es idéntico a la
   primera escena de 01, que toma el relevo sin salto (DVB.originPlate). */
.s-00-card, .s-00-overlay { display: none; }
.s-00-hero.s-00-enhanced { padding-bottom: 0; height: calc(var(--s-00-stage-h) + var(--s-00-track, 120svh)); background: var(--surface-0); }
.s-00-hero.s-00-enhanced .s-00-stage { position: sticky; top: var(--s-00-pin-top, var(--nav-h)); height: var(--s-00-stage-h) !important; min-height: 0 !important; overflow: visible; }
.s-00-hero.s-00-enhanced .s-00-portrait-frame { clip-path: none; transform-origin: 0 0; mix-blend-mode: multiply; will-change: transform; }
.s-00-hero.s-00-opened .s-00-portrait-frame { animation: none !important; }
.s-00-hero.s-00-enhanced .s-00-heading, .s-00-hero.s-00-enhanced .s-00-lockup { will-change: transform, opacity; }
.s-00-hero.s-00-enhanced .s-00-card { display: block; position: absolute; z-index: 1; background: var(--surface-1); opacity: 0; transform-origin: 0 0; pointer-events: none; }
.s-00-hero.s-00-enhanced .s-00-overlay { display: block; position: absolute; z-index: 3; top: 0; pointer-events: none; overflow: clip; }
.s-00-overlay > .s-01-stage { position: absolute !important; inset: 0 !important; height: 100% !important; opacity: 1 !important; background: transparent !important; }
.s-00-overlay .s-01-portrait { display: none !important; }
.s-00-hero.s-00-faded .s-00-stage { opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: reduce), print {
  .s-00-hero.s-00-enhanced { padding-bottom: 0; height: auto; }
  .s-00-card, .s-00-overlay { display: none !important; }
}

/* ===== Correcciones de Harvey 30-oct (tarde): retrato más arriba y bloque de texto junto =====
   La foto de estudio trae mucho blanco sobre la cabeza: la imagen se alarga un 13 % y sube
   ese 13 % (la cabeza queda a ~70 px de la navegación y el retrato llena más la columna).
   01 aplica el mismo encuadre a su marco, así el relevo sigue sin salto. */
.s-00-hero .s-00-photo img { position: relative; top: -13%; height: 113% !important; }
@media (min-width: 735px) {
  .s-00-hero .s-00-stage { grid-template-areas: "foto ." "foto titulo" "foto texto" "foto ."; grid-template-rows: 1fr auto auto 1fr;
    padding-top: var(--space-16) !important; }
  .s-00-hero .s-00-portrait-frame { grid-row: 1 / -1; height: calc(100svh - var(--nav-h) - var(--space-16)) !important; }
  .s-00-hero .s-00-heading { align-self: end; }
  .s-00-hero .s-00-lockup { align-self: start; margin: var(--space-40) 0 var(--space-48) !important; }
  .s-00-hero .s-00-ctas { margin-top: var(--space-32); }
}
/* Hombros sin corte vertical duro: fundido lateral suave hacia el blanco, como el de abajo. */
.s-00-hero .s-00-portrait-frame {
  -webkit-mask-image: linear-gradient(to bottom, #000 82%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%, #000 90%, transparent 100%) !important;
  mask-image: linear-gradient(to bottom, #000 82%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%, #000 90%, transparent 100%) !important;
  -webkit-mask-composite: source-in; mask-composite: intersect; }
/* Móvil: fundido lateral y de abajo más ancho y gradual (varias paradas), sin borde duro. */
@media (max-width: 734px) {
  .s-00-hero .s-00-portrait-frame { -webkit-mask-image: linear-gradient(to bottom, #000 66%, rgba(0,0,0,.75) 78%, rgba(0,0,0,.35) 88%, rgba(0,0,0,.1) 95%, transparent 100%), linear-gradient(to right, transparent 0, rgba(0,0,0,.12) 5%, rgba(0,0,0,.4) 11%, rgba(0,0,0,.75) 18%, #000 26%, #000 74%, rgba(0,0,0,.75) 82%, rgba(0,0,0,.4) 89%, rgba(0,0,0,.12) 95%, transparent 100%) !important; mask-image: linear-gradient(to bottom, #000 66%, rgba(0,0,0,.75) 78%, rgba(0,0,0,.35) 88%, rgba(0,0,0,.1) 95%, transparent 100%), linear-gradient(to right, transparent 0, rgba(0,0,0,.12) 5%, rgba(0,0,0,.4) 11%, rgba(0,0,0,.75) 18%, #000 26%, #000 74%, rgba(0,0,0,.75) 82%, rgba(0,0,0,.4) 89%, rgba(0,0,0,.12) 95%, transparent 100%) !important; }
}
/* Móvil: un solo eje (antetítulo, nombre, retrato, frase y botón centrados) y,
   en pantallas bajas, el retrato cede alto para que frase y botón entren en la primera pantalla. */
@media (max-width: 734px) {
  .s-00-hero .s-00-title { text-align: center; }
  .s-00-hero .s-00-portrait-frame { height: clamp(220px, calc(100svh - var(--nav-h) - 330px), 58svh) !important; }
}
/* Móvil estrecho/bajo: el marco del retrato nunca se vuelve apaisado (≤ 0,8 de ancho/alto),
   así la escena de Manzanares reparte los dos marcos a partes iguales. */
@media (max-width: 734px) {
  .s-00-hero .s-00-portrait-frame { width: min(100%, calc(.8 * clamp(220px, calc(100svh - var(--nav-h) - 330px), 58svh))) !important; justify-self: center; margin-inline: auto !important; }
}
.s-00-overlay .s-01-stage::before { display: none !important; }

/* ==== sections/01-origen ==== */
/* 01 · De dónde viene · historia en escena fija (sticky) con profundidad.
   Sin JS / movimiento reducido / impresión: cabecera + dos bloques foto+texto apilados.
   Con JS (.s-01-on en el escenario): una sola escena fija; section.js coloca cada pieza
   en px y la mueve solo con transform/opacity. Créditos siempre DEBAJO de la foto. */
.s-01-origen { --s-01-r: 22px; --s-01-photo-h: clamp(420px, 66svh, 680px); --s-01-scene-gap: var(--space-128); }
.s-01-intro { padding-block: var(--space-96) var(--space-64); text-align: center; }
.s-01-eyebrow { margin: 0; color: var(--color-text-secondary); }
.s-01-title { margin: var(--space-12) 0 0; font-size: clamp(48px, 5.6vw, 80px); line-height: 1.03; letter-spacing: -.035em; text-wrap: balance; }
.s-01-title > span { display: block; }

.s-01-portrait { display: none; }

.s-01-scenes { list-style: none; margin-block: 0; padding: 0 0 var(--space-128); display: grid; gap: var(--s-01-scene-gap); }
.s-01-scene { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--element-gap); }
.s-01-figure { grid-column: 1 / -1; margin: 0; }
.s-01-media { position: relative; height: var(--s-01-photo-h); border-radius: var(--s-01-r); overflow: hidden; background: var(--surface-1); isolation: isolate; }
.s-01-image, .s-01-image picture, .s-01-image img { display: block; width: 100%; height: 100%; }
.s-01-image { transform-origin: 50% 55%; }
.s-01-image img { object-fit: cover; }
.s-01-scene--manzanares .s-01-image img { object-position: 50% 42%; }
.s-01-scene--escorial { --s-01-photo-h: clamp(460px, 76svh, 780px); }
.s-01-scene--escorial .s-01-image img { object-position: 50% 55%; }

.s-01-credit { margin: 0; padding-top: var(--space-12); color: var(--color-text-secondary); font-size: 11px; line-height: 1.3; letter-spacing: 0; text-align: right; overflow-wrap: anywhere; }
.s-01-credit a { color: inherit; text-decoration: underline; text-decoration-color: var(--color-hairline); text-underline-offset: .18em; }
.s-01-credit a:hover { color: var(--color-ink); text-decoration-color: currentColor; }

.s-01-text { grid-column: 1 / -1; display: grid; grid-template-columns: subgrid; align-items: start; margin-top: var(--space-24); padding-top: var(--space-28); border-top: 1px solid var(--color-hairline); }
.s-01-meta { grid-column: 1 / span 4; display: grid; grid-template-columns: auto 1fr; column-gap: var(--space-16); row-gap: var(--space-4); margin: 0; padding-top: 6px; }
.s-01-index { grid-row: 1 / span 2; color: var(--color-steel); padding-top: 3px; white-space: nowrap; }
.s-01-place { font-family: var(--font-display); font-size: var(--type-callout-size); line-height: var(--type-callout-lh); font-weight: var(--font-weight-semibold); color: var(--color-ink); }
.s-01-where { font-size: var(--type-small-size); line-height: var(--type-small-lh); color: var(--color-text-secondary); }
.s-01-copy { grid-column: 5 / -1; margin: 0; font-family: var(--font-display); font-size: clamp(32px, 3.05vw, 44px); line-height: 1.1; font-weight: var(--font-weight-semibold); letter-spacing: -.026em; color: var(--color-ink); text-wrap: balance; max-width: 22ch; }
.s-01-copy span { display: block; }

@media (max-width: 1068px) {
  .s-01-origen { --s-01-photo-h: clamp(380px, 56svh, 560px); --s-01-scene-gap: var(--space-96); }
  .s-01-scene--escorial { --s-01-photo-h: clamp(420px, 64svh, 640px); }
}
@media (max-width: 734px) {
  .s-01-origen, .s-01-stage { --s-01-r: 16px; }
  .s-01-origen, .s-01-scene--escorial { --s-01-photo-h: min(118vw, 54svh, 480px); }
  .s-01-origen { --s-01-scene-gap: var(--space-80); }
  .s-01-intro { padding-block: var(--space-64) var(--space-40); }
  .s-01-title { font-size: clamp(36px, 10.4vw, 48px); line-height: 1.04; }
  .s-01-scenes { padding-bottom: var(--space-96); }
  .s-01-scene, .s-01-text { grid-template-columns: minmax(0, 1fr); }
  .s-01-text { margin-top: var(--space-16); padding-top: var(--space-20); row-gap: var(--space-12); }
  .s-01-meta, .s-01-copy { grid-column: 1; }
  .s-01-meta { padding-top: 0; }
  .s-01-copy { font-size: clamp(24px, 7.2vw, 28px); line-height: 1.12; max-width: none; }
  .s-01-credit { padding-top: var(--space-8); font-size: 10px; }
  .s-01-scene--manzanares .s-01-image img { object-position: 52% 45%; }
  .s-01-scene--escorial .s-01-image img { object-position: 42% 50%; }
}

/* ===== Escena fija (solo con JS y movimiento normal) ===== */
.s-01-origen.s-01-scened { height: calc(var(--s-01-stage-h, 100svh) + var(--s-01-track, 230svh)); }
.s-01-origen.s-01-joined { z-index: 3; background: transparent; margin-top: calc(-1 * var(--s-01-stage-h, 100svh)); }
.s-01-stage { --s-01-r: 22px; }
.s-01-stage.s-01-on { position: sticky; top: var(--nav-h); height: var(--s-01-stage-h, calc(100svh - var(--nav-h))); overflow: clip; background: var(--surface-0); }
.s-01-joined:not(.s-01-live) .s-01-stage.s-01-on { opacity: 0; pointer-events: none; }
.s-01-on .s-01-intro, .s-01-on .s-01-portrait, .s-01-on .s-01-figure, .s-01-on .s-01-text { position: absolute; margin: 0; }
.s-01-on .s-01-intro { padding: 0; text-align: left; }
.s-01-on .s-01-title { margin-top: var(--space-8); font-size: clamp(36px, 3.4vw, 52px); line-height: 1.04; letter-spacing: -.03em; }
.s-01-on .s-01-title > span { display: inline; }
.s-01-on .s-01-scenes { position: absolute; inset: 0; width: auto; max-width: none; margin: 0; padding: 0; display: block; }
.s-01-on .s-01-scene { position: absolute; inset: 0; display: block; pointer-events: none; }
.s-01-on .s-01-figure, .s-01-on .s-01-text { pointer-events: auto; will-change: transform, opacity; }
.s-01-on .s-01-media { height: var(--s-01-media-h, 400px); }
.s-01-on .s-01-image { will-change: transform; }
.s-01-on .s-01-credit { padding-top: 10px; }
.s-01-on .s-01-text { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); column-gap: var(--element-gap); padding-top: var(--space-20); }
.s-01-on .s-01-meta { grid-column: 1; }
.s-01-on .s-01-copy { grid-column: 2; font-size: clamp(26px, 2.5vw, 38px); max-width: 24ch; }
.s-01-on .s-01-scene--escorial .s-01-copy { max-width: 30ch; }
/* Retrato: misma foto y mismo encuadre que el inicio (multiplicada sobre una tarjeta gris). */
.s-01-on .s-01-portrait { display: block; border-radius: var(--s-01-r); overflow: hidden; background: var(--surface-1); isolation: isolate; will-change: transform, opacity; }
.s-01-portrait-img, .s-01-portrait-img img { display: block; width: 100%; height: 100%; }
.s-01-portrait-img { mix-blend-mode: multiply; -webkit-mask-image: linear-gradient(to bottom, #000 82%, transparent 100%); mask-image: linear-gradient(to bottom, #000 82%, transparent 100%); }
.s-01-portrait-img img { object-fit: cover; object-position: 50% 10%; }
.s-01-on.s-01-solo .s-01-portrait { display: none; }
@media (max-width: 734px) {
  .s-01-on .s-01-title { font-size: clamp(28px, 8.4vw, 36px); }
  .s-01-on .s-01-title > span { display: block; }
  .s-01-on .s-01-text { grid-template-columns: minmax(0, 1fr); row-gap: var(--space-8); padding-top: var(--space-12); }
  .s-01-on .s-01-meta, .s-01-on .s-01-copy { grid-column: 1; }
  .s-01-on .s-01-copy { font-size: clamp(20px, 6.2vw, 26px); max-width: none; }
  .s-01-on .s-01-credit { padding-top: 6px; }
}

@media (prefers-reduced-motion: reduce), print {
  .s-01-image { transform: none !important; }
}
@media print {
  .s-01-origen, .s-01-scene--escorial { --s-01-photo-h: 300px; }
  .s-01-origen { --s-01-scene-gap: var(--space-32); }
  .s-01-intro { padding-block: var(--space-32); }
  .s-01-scene { break-inside: avoid; }
  .s-01-copy { font-size: var(--type-title-size); }
}
/* Mismo encuadre que el retrato del inicio (imagen alargada un 13 % y subida). */
.s-01-portrait-img img { position: relative; top: -13%; height: 113%; }

/* Vuelta 3: titular por escena (Manzanares el Real → «Su voz empezó en El Escorial.»),
   cambiado en la misma transición; el nombre del lugar ya no se repite bajo la foto. */
.s-01-head1 { display: none; }
.s-01-on .s-01-heads { display: grid; }
.s-01-on .s-01-heads > .s-01-title { grid-area: 1 / 1; will-change: transform, opacity; }
.s-01-on .s-01-head1 { display: block; }
.s-01-on .s-01-place { display: none; }
.s-01-on .s-01-meta { grid-template-columns: auto; row-gap: var(--space-4); }
.s-01-on .s-01-index { grid-row: auto; padding-top: 0; }
.s-01-on .s-01-copy { font-size: clamp(24px, 2.1vw, 32px); max-width: 34ch; }
.s-01-on .s-01-scene--escorial .s-01-copy { max-width: 34ch; }
@media (max-width: 734px) {
  .s-01-on .s-01-meta { grid-template-columns: auto 1fr; column-gap: var(--space-12); }
  .s-01-on .s-01-copy { font-size: clamp(20px, 5.8vw, 24px); }
}
/* Mismo fundido lateral que el retrato del inicio. */
.s-01-portrait-img {
  -webkit-mask-image: linear-gradient(to bottom, #000 82%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%, #000 90%, transparent 100%);
  mask-image: linear-gradient(to bottom, #000 82%, transparent 100%), linear-gradient(to right, transparent 0, #000 10%, #000 90%, transparent 100%);
  -webkit-mask-composite: source-in; mask-composite: intersect; }
@media (max-width: 734px) {
  .s-01-portrait-img { -webkit-mask-image: linear-gradient(to bottom, #000 66%, rgba(0,0,0,.75) 78%, rgba(0,0,0,.35) 88%, rgba(0,0,0,.1) 95%, transparent 100%), linear-gradient(to right, transparent 0, rgba(0,0,0,.12) 5%, rgba(0,0,0,.4) 11%, rgba(0,0,0,.75) 18%, #000 26%, #000 74%, rgba(0,0,0,.75) 82%, rgba(0,0,0,.4) 89%, rgba(0,0,0,.12) 95%, transparent 100%); mask-image: linear-gradient(to bottom, #000 66%, rgba(0,0,0,.75) 78%, rgba(0,0,0,.35) 88%, rgba(0,0,0,.1) 95%, transparent 100%), linear-gradient(to right, transparent 0, rgba(0,0,0,.12) 5%, rgba(0,0,0,.4) 11%, rgba(0,0,0,.75) 18%, #000 26%, #000 74%, rgba(0,0,0,.75) 82%, rgba(0,0,0,.4) 89%, rgba(0,0,0,.12) 95%, transparent 100%); }
}

/* Salida 01→02 «de la foto a la línea»: el 01 se solapa con el arranque del 02 (margen
   negativo medido en JS) y su escenario se vuelve transparente (velo blanco con opacidad)
   para que el 02 suba por debajo mientras el marco queda en una barra de 2 px. */
.s-01-origen.s-01-scened { position: relative; z-index: 3; background: transparent; margin-bottom: calc(-1 * var(--s-01-overlap, 0px)); }
.s-01-stage.s-01-on { background: transparent; }
.s-01-stage.s-01-on::before { content: ""; position: absolute; inset: 0; background: var(--surface-0); opacity: var(--s-01-veil, 1); pointer-events: none; }

/* ==== sections/02-jovenes ==== */
/* 02 · a typographic pause: statement, evidence, then the words behind it. */
/* 01→02: no top cushion; the Escorial bar of 01 hands over to the title. */
.s-02-jovenes { padding-block: var(--space-32) calc(var(--section-padding-story) * 0.5); }
/* The quote closes the section: the next section's own top space is the pause. */
.s-02-timeline { position: absolute; top: -100vh; height: calc(100% + 100vh); width: 1px; pointer-events: none; }
.s-02-content { position: relative; }
/* Base reserves nav + 12px; local targets add 52px (64px clear below nav). */
.s-02-title, .s-02-source, .s-02-document, .s-02-skip { scroll-margin-top: var(--space-52); }
.s-02-heading { text-align: center; }
.s-02-eyebrow { color: var(--color-text-secondary); margin-bottom: var(--space-24); }
.s-02-controls { display: flex; align-items: center; justify-content: center; gap: var(--space-16); margin-top: var(--space-28); }
.s-02-progress { width: var(--space-80); height: calc(var(--space-4) / 2); background: var(--color-hairline); overflow: hidden; }
.s-02-progress-fill { display: block; width: 100%; height: 100%; background: var(--color-text-secondary); transform-origin: left center; transform: scaleX(var(--s-02-progress, 1)); }
.s-02-skip { padding: var(--space-4) var(--space-8); color: var(--color-text-secondary); min-height: var(--space-32); }
.s-02-skip:hover { text-decoration: underline; text-underline-offset: 0.2em; }
.s-02-skip:disabled { cursor: default; text-decoration: none; }
.s-02-title { font-size: calc(var(--type-hero-size) * 1.5); line-height: var(--type-hero-lh); letter-spacing: var(--type-hero-ls); }
.s-02-line { display: block; }
.s-02-title-row { display: block; }
.s-02-title-row .s-02-line { display: inline-block; }
/* One line on desktop: the sentence measures ~40em. */
.s-02-lead { max-width: 42em; margin: 0 auto var(--space-20); opacity: 1; color: var(--color-text-secondary); color: color-mix(in srgb, var(--color-text-secondary), var(--color-steel) var(--s-02-muted, 0%)); }
.s-02-intro { max-width: calc(var(--content-max) * 0.52); margin: var(--space-40) auto 0; }
.s-02-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: var(--space-96); padding-block: var(--space-52); border-top: 1px solid var(--color-hairline); border-bottom: 1px solid var(--color-hairline); }
.s-02-stat { min-width: 0; padding-inline: var(--space-64); }
.s-02-stat:first-child { padding-left: 0; }
.s-02-stat + .s-02-stat { border-left: 1px solid var(--color-hairline); padding-right: 0; }
.s-02-figure { display: flex; align-items: baseline; gap: var(--space-12); font-family: var(--font-display); font-weight: var(--font-weight-semibold); line-height: var(--type-hero-lh); letter-spacing: var(--type-hero-ls); }
/* 160px from 1440 up; below that it scales so «24,54 %» never leaves its column. */
.s-02-number { position: relative; display: inline-block; font-size: min(calc(var(--type-hero-size) * 2), 11.12vw); letter-spacing: -0.035em; white-space: nowrap; }
.s-02-number-final { display: inline-block; opacity: var(--s-02-final, 1); background-image: var(--grad-ink); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
/* Each figure fills its own scale with the same scroll progress as its counter. */
.s-02-stat--edad { --s-02-pos: 71.7647%; } /* (30,2 - 18) / (35 - 18) */
.s-02-stat--paro { --s-02-pos: 24.54%; }
.s-02-scale { margin-top: var(--space-32); max-width: 28em; }
.s-02-scale-track { position: relative; display: block; height: var(--space-4); border-radius: var(--space-4); background: var(--color-control-gray); }
.s-02-scale-fill { position: absolute; top: 0; bottom: 0; left: 0; width: var(--s-02-pos); border-radius: inherit; background-image: var(--grad-ink); transform-origin: left center; transform: scaleX(var(--s-02-count, 1)); }
/* A box as wide as the value, carrying the dot at its right edge, slides in from the left (no overflow to the right). */
/* A light runs along the filling bar (--s-02-shine peaks halfway through the fill). */
.s-02-scale-fill { clip-path: inset(0 round var(--space-4)); }
.s-02-scale-fill::after { content: ""; position: absolute; top: 0; bottom: 0; left: 0; width: 50%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.9), transparent); opacity: var(--s-02-shine, 0); transform: translate3d(calc((var(--s-02-count, 1) * 2 - 1) * 100%), 0, 0); }
.s-02-scale-move { position: absolute; top: 0; bottom: 0; left: 0; width: var(--s-02-pos); transform: translate3d(calc((var(--s-02-count, 1) - 1) * 100%), 0, 0); }
.s-02-scale-dot { position: absolute; top: 50%; right: 0; width: var(--space-16); height: var(--space-16); margin: calc(var(--space-16) / -2) calc(var(--space-16) / -2) 0 0; border-radius: 50%; background: var(--color-ink); box-shadow: 0 0 0 var(--space-4) var(--surface-0); }
.s-02-scale-ends { display: flex; justify-content: space-between; margin-top: var(--space-12); font-size: var(--type-small-size); line-height: 1.3; color: var(--color-steel); font-variant-numeric: tabular-nums; }
.s-02-number-roll { position: absolute; top: 0; left: 0; white-space: nowrap; opacity: var(--s-02-rolling, 0); }
.s-02-unit { font-size: var(--type-headline-size); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); }
.s-02-stat-label { color: var(--color-text-secondary); max-width: 25em; margin-top: var(--space-24); min-height: calc(var(--type-body-lg-size) * var(--type-body-lg-lh) * 2); }
.s-02-source { display: block; margin-top: var(--space-20); min-height: var(--space-32); }
.s-02-source-end { display: inline-flex; align-items: center; gap: var(--space-4); white-space: nowrap; }
.s-02-source svg, .s-02-document svg { flex: 0 0 auto; width: var(--space-16); height: var(--space-16); }
.s-02-digit { display: inline-block; vertical-align: -0.18em; height: 1.12em; width: 0.64em; overflow: hidden; }
.s-02-glyph { fill: currentColor; }
.s-02-fraction { line-height: 1.12; }
/* The quote is read, word by word: each word passes from light grey to ink as the scroll advances. */
.s-02-quote { position: relative; margin: var(--space-96) auto 0; max-width: calc(var(--content-max) * 0.8); text-align: center; }
/* Pins (JS only, when the stage fits the screen): the stage holds still while its scene plays. */
.s-02-pin.is-pinned > .s-02-stats, .s-02-pin.is-pinned > .s-02-quote { position: sticky; }
.s-02-mark { display: block; width: var(--space-64); height: var(--space-48); margin: 0 auto var(--space-32); color: var(--color-hairline); opacity: var(--s-02-mark, 1); transform: translate3d(0, calc((1 - var(--s-02-mark, 1)) * var(--space-24)), 0); }
.s-02-quote-text { font-family: var(--font-display); font-size: var(--type-section-size); font-weight: var(--font-weight-semibold); line-height: 1.16; letter-spacing: -0.012em; color: var(--color-ink); text-wrap: balance; }
.s-02-word { opacity: var(--s-02-word, 1); }
.s-02-attribution { display: grid; justify-items: center; gap: var(--space-8); margin-top: var(--space-40); color: var(--color-text-secondary); }
.s-02-document { display: inline-flex; align-items: center; gap: var(--space-4); justify-self: center; min-height: var(--space-32); flex-wrap: wrap; }
.s-02-document-reference { color: var(--color-text-secondary); }
@media (max-width: 1279px) {
  .s-02-lead { text-wrap: balance; }
}
@media (max-width: 1068px) {
  .s-02-stat { padding-inline: var(--space-40); }
  /* Tablet: two figures side by side must fit their half column («24,54 %» ≈ 3.6em). */
  .s-02-number { font-size: min(calc(var(--type-hero-size) * 2), 10.5vw); }
  .s-02-intro { max-width: 32em; }
  .s-02-quote { max-width: 92%; }
}
@media (max-width: 734px) {
  .s-02-title, .s-02-source, .s-02-document, .s-02-skip { scroll-margin-top: var(--space-28); }
  .s-02-eyebrow { margin-bottom: var(--space-20); }
  .s-02-controls { gap: var(--space-12); margin-top: var(--space-24); }
  /* Touch targets: every link and button in the section reaches 44px on phones. */
  .s-02-skip, .s-02-document { min-height: calc(var(--space-40) + var(--space-4)); }
  .s-02-skip { display: inline-flex; align-items: center; }
  /* Two lines on every phone: «son el presente.» measures 7.09em, so 12vw keeps it inside the 87.5vw content. */
  .s-02-title { font-size: min(calc(var(--type-hero-size) * 1.17), 12vw); line-height: var(--type-hero-lh); }
  .s-02-title-row { white-space: nowrap; }
  /* Two balanced lines at 390: the sentence measures 40em on one line. */
  .s-02-lead { max-width: none; margin-bottom: var(--space-20); font-size: clamp(15px, 4vw, var(--type-intro-size)); text-wrap: balance; }
  /* Lighter on phones: smaller, full width, balanced, so it does not read as a block. */
  .s-02-intro { margin-top: var(--space-28); max-width: none; font-size: var(--type-body-size); line-height: var(--type-body-lh); text-wrap: balance; }
  /* The figure grows up out of its own line while its counter runs: it rises by the hidden share
     of its height and a clip keeps it above the line (20% slack for the comma's descender). */
  .s-02-number, .s-02-unit { transform: translate3d(0, calc((1 - var(--s-02-count, 1)) * 100%), 0); clip-path: inset(-20% -10% calc((1 - var(--s-02-count, 1)) * 100% - 20%) -10%); }
  .s-02-stats { grid-template-columns: minmax(0, 1fr); margin-top: var(--space-64); padding-block: 0; }
  .s-02-stat, .s-02-stat:first-child { padding: var(--space-32) 0; }
  .s-02-stat + .s-02-stat { border-left: 0; border-top: 1px solid var(--color-hairline); }
  .s-02-number { font-size: calc(var(--type-hero-size) * 1.75); }
  .s-02-unit { font-size: var(--type-card-title-size); }
  .s-02-stat-label { margin-top: var(--space-20); min-height: 0; }
  .s-02-scale { margin-top: var(--space-24); }
  .s-02-source { margin-top: var(--space-4); padding-block: var(--space-12); min-height: calc(var(--space-40) + var(--space-4)); }
  .s-02-quote { max-width: 100%; margin-top: var(--space-64); }
  .s-02-mark { width: var(--space-48); height: calc(var(--space-48) * 0.75); margin-bottom: var(--space-24); }
  .s-02-quote-text { font-size: min(var(--space-28), 7.6vw); line-height: 1.2; letter-spacing: -0.006em; }
  .s-02-attribution { margin-top: var(--space-28); gap: var(--space-4); }
}
@media (max-width: 359px) {
  .s-02-number { font-size: calc(var(--type-hero-size) * 1.25); }
}
@media (prefers-reduced-motion: reduce) {
  .s-02-line, .s-02-lead, .s-02-number-final, .s-02-word, .s-02-mark { transform: none !important; opacity: 1 !important; }
  .s-02-lead { color: var(--color-text-secondary) !important; }
  .s-02-scale-fill, .s-02-scale-move, .s-02-number, .s-02-unit { transform: none !important; }
  .s-02-number, .s-02-unit, .s-02-line { clip-path: none !important; }
  .s-02-scale-fill::after { display: none; }
  .s-02-controls, .s-02-number-roll { display: none; }
}
@media print {
  .s-02-line, .s-02-lead, .s-02-number-final, .s-02-word, .s-02-mark { transform: none !important; opacity: 1 !important; }
  .s-02-lead { color: var(--color-text-secondary) !important; }
  .s-02-scale-fill, .s-02-scale-move, .s-02-number, .s-02-unit { transform: none !important; }
  .s-02-number, .s-02-unit, .s-02-line { clip-path: none !important; }
  .s-02-scale-fill::after { display: none; }
  .s-02-controls, .s-02-number-roll { display: none; }
  .s-02-number { font-size: var(--type-section-size); }
  .s-02-jovenes { break-inside: avoid; }
}

/* ==== sections/02b-por-los-jovenes ==== */
/* 02b · Por los jóvenes. Four blocks, four effects that appear nowhere else on the page:
   01 particles that gather into «2.000» (canvas) + an iris that opens on a photo,
   02 a thread of light that draws a constellation, 03 a horizontal gallery on three planes,
   04 words that arrive from depth. Without JS or with reduced motion: one static, complete column.
   Everything under .s-02b-on is the animated layout (set by section.js). */
.s-02b-jovenes { padding-block: var(--space-80) var(--space-64); overflow-x: clip; overflow-y: visible; }
.s-02b-jovenes :is(.s-02b-src, .s-02b-title) { scroll-margin-top: var(--space-52); }

/* ---------- Opening ---------- */
.s-02b-lockup { text-align: center; }
.s-02b-eyebrow { color: var(--color-text-secondary); margin-bottom: var(--space-20); }
.s-02b-title { position: relative; font-size: calc(var(--type-hero-size) * 1.25); }
/* The gradient lives on each line, never on the h2: a text-clipped background on the parent would paint the
   glyphs of its children even while those children are at opacity 0 (seen in desktop Chrome). */
/* One Apple-style sheen for every title of the section (ink → graphite → steel), built from the tokens. */
.s-02b-jovenes { --s-02b-grad: linear-gradient(100deg, var(--color-ink) 0%, var(--color-ink) 22%, var(--color-text-secondary-alt) 62%, var(--color-steel) 100%); }
.s-02b-tline, .s-02b-impact, .s-02b-word, .s-02b-uline { background-image: var(--s-02b-grad); background-repeat: no-repeat; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
/* Each line hugs its own words (so the sheen spans them) with room for the glyphs' side bearings. */
.s-02b-tline { display: table; margin-inline: auto; padding-inline: 0.06em; }
/* Lines/words that animate carry the sheen themselves (a text-clipped parent would paint hidden children). */
.s-02b-on .s-02b-udia .s-02b-impact { background-image: none; -webkit-text-fill-color: currentColor; }
.s-02b-jovenes:not(.s-02b-on) .s-02b-vline { background-image: var(--s-02b-grad); background-repeat: no-repeat; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.s-02b-lead { max-width: 30em; margin: var(--space-28) auto 0; }
.s-02b-giant, .s-02b-entry-line { display: none; }
.s-02b-coda-dim, .s-02b-bridge { transition: none; }

/* ---------- Shared pieces ---------- */
.s-02b-block { margin-top: var(--space-80); }
.s-02b-head { display: flex; align-items: center; gap: var(--space-12); color: var(--color-text-secondary); }
.s-02b-num { display: inline-grid; place-items: center; min-width: var(--space-32); height: var(--space-32); padding-inline: var(--space-8); border-radius: var(--radius-pill); background: var(--surface-1); color: var(--color-ink); font-size: var(--type-caption-size); }
.s-02b-when { color: var(--color-action); }
.s-02b-text { color: var(--color-ink); margin-top: var(--space-8); }
/* Every fact reads the same way: (a) the impact, big; (b) his exact role, short, with the year; (c) the source. */
.s-02b-impact { font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: var(--type-card-title-size); line-height: var(--type-card-title-lh); letter-spacing: var(--type-card-title-ls); color: var(--color-ink); text-wrap: balance; }
.s-02b-role { margin-top: var(--space-8); color: var(--color-text-secondary); text-wrap: pretty; }
/* The arrow follows the last word, even when the label wraps. */
.s-02b-src { display: inline-block; padding-block: var(--space-4); margin-top: var(--space-8); color: var(--color-link); }
.s-02b-src svg { display: inline-block; width: var(--space-16); height: var(--space-16); margin-left: var(--space-4); vertical-align: -0.2em; }
.s-02b-src:hover { text-decoration: underline; text-underline-offset: 0.2em; }

/* ---------- 01 · 2.000 ---------- */
.s-02b-canvas { display: none; }
.s-02b-dots-inner { text-align: center; }
.s-02b-dots-inner .s-02b-head { justify-content: center; }
.s-02b-big { display: flex; flex-direction: column; align-items: center; margin-top: var(--space-24); font-family: var(--font-display); font-weight: var(--font-weight-semibold); }
.s-02b-big-num { display: block; font-size: clamp(80px, min(28vw, 31vh), 300px); line-height: 1; letter-spacing: -0.04em; white-space: nowrap; color: var(--color-ink); }
.s-02b-big-unit { display: block; margin-top: var(--space-8); font-size: var(--type-headline-size); line-height: var(--type-headline-lh); color: var(--color-text-secondary); }
.s-02b-fact--center { max-width: 40em; margin: var(--space-28) auto 0; }

/* Block 01 rows: one grid, two columns shared by every row (media or figure | impact, role, source). */
.s-02b-feats { margin-top: var(--space-80); border-bottom: 1px solid var(--color-hairline); }
.s-02b-feat { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: var(--space-64); align-items: center; padding-block: var(--space-48); border-top: 1px solid var(--color-hairline); }
.s-02b-feat-copy .s-02b-impact { font-size: var(--type-headline-sm-size); line-height: var(--type-headline-sm-lh); letter-spacing: var(--type-headline-sm-ls); }
.s-02b-stat { align-self: center; }
.s-02b-stat-num { font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: var(--type-hero-size); line-height: 1; letter-spacing: -0.03em; white-space: nowrap;
  background-image: var(--grad-ink); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.s-02b-stat-label { margin-top: var(--space-12); color: var(--color-text-secondary); max-width: 22em; }
.s-02b-conf-media { margin: 0; }
.s-02b-iris { border-radius: 22px; overflow: hidden; }
.s-02b-conf-image { aspect-ratio: 1; }
.s-02b-conf-image img { display: block; width: 100%; height: 100%; object-fit: cover; }
.s-02b-credit { margin-top: var(--space-12); color: var(--color-text-secondary); }


/* ---------- 02 · Constellation ---------- */
.s-02b-sky { position: relative; margin-top: var(--space-40); }
.s-02b-thread { display: none; }
.s-02b-stars { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-40); list-style: none; margin: 0; padding: 0; }
.s-02b-star { position: relative; padding-top: var(--space-40); align-self: start; }
.s-02b-node { position: absolute; top: 0; left: 0; width: var(--space-16); height: var(--space-16); border-radius: var(--radius-round); background: var(--color-action); box-shadow: 0 0 0 6px color-mix(in srgb, var(--color-action) 14%, transparent); }
.s-02b-star-card { background: var(--surface-1); border-radius: 22px; padding: var(--card-padding); }


/* ---------- 03 · Rail ---------- */
.s-02b-back, .s-02b-ticks, .s-02b-count { display: none; }
.s-02b-vline { display: block; text-wrap: balance; }
.s-02b-rail { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-20); list-style: none; margin: var(--space-32) auto 0; padding: 0; width: var(--content-width); max-width: var(--content-max); }
.s-02b-slide-card { display: flex; flex-direction: column; align-items: flex-start; height: 100%; background: var(--surface-1); border-radius: 22px; padding: var(--space-40) var(--card-padding) var(--card-padding); }
.s-02b-place { color: var(--color-action); margin-bottom: var(--space-12); }
.s-02b-slide-card .s-02b-src { padding-top: var(--space-4); }

/* ---------- 04 · Voice ---------- */
.s-02b-voice-inner { text-align: center; }
.s-02b-voice-inner .s-02b-head { justify-content: center; }
.s-02b-voice-title { margin-top: var(--space-16); color: var(--color-ink); max-width: 15em; margin-inline: auto; }
.s-02b-word { display: inline-block; }
.s-02b-uline { display: table; padding-right: 0.06em; }
.s-02b-rows { list-style: none; margin: var(--space-48) auto 0; padding: 0; max-width: 980px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-40); text-align: left; }
.s-02b-row { border-top: 1px solid var(--color-hairline); padding-top: var(--space-20); }

.s-02b-coda { margin-top: var(--space-80); text-align: center; max-width: 22em; color: var(--color-ink); }

/* =====================================================================
   Animated layout (JS on, motion allowed)
   ===================================================================== */
.s-02b-on .s-02b-b1, .s-02b-on .s-02b-b3, .s-02b-on .s-02b-b4 { margin-top: 0; }
.s-02b-on .s-02b-b3 { margin-top: var(--space-40); }
/* Opening: the giant line lands on the eyebrow. */
/* Every scene is pinned with its content centred in the viewport (sticky top set by JS), so the scene
   arrives right after the block before it and leaves with the next one right behind: no blank bands. */
.s-02b-on .s-02b-open-stage { position: sticky; top: var(--s-02b-top, var(--nav-h)); padding-block: var(--space-40); }
.s-02b-on .s-02b-giant { display: block; position: absolute; left: 0; top: 0; margin: 0; font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: 200px; line-height: 1.1; letter-spacing: var(--type-eyebrow-ls); white-space: nowrap; transform-origin: 0 0; pointer-events: none;
  background-image: linear-gradient(100deg, var(--color-ink) 0%, var(--color-ink) 45%, var(--color-text-secondary-alt) 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.s-02b-on .s-02b-eyebrow { opacity: 0; }
/* Entry from 02: a thread drops from the Security Council signature and opens the giant line. */
.s-02b-on .s-02b-entry-line { display: block; position: absolute; left: 50%; top: 0; width: 2px; margin-left: -1px; height: 100px; border-radius: 1px; background: var(--color-action); transform-origin: 50% 0; transform: scaleY(0); pointer-events: none; }
.s-02b-on .s-02b-tline, .s-02b-on .s-02b-lead { opacity: 0; }

/* 01 · particles */
.s-02b-on .s-02b-dots-stage { position: sticky; top: var(--s-02b-top, var(--nav-h)); }
.s-02b-on .s-02b-canvas { display: block; position: absolute; left: 0; top: -45vh; width: 100%; height: calc(100% + 57vh); pointer-events: none; }
.s-02b-on .s-02b-canvas { z-index: 0; }
.s-02b-on .s-02b-dots-inner { position: relative; z-index: 1; }
.s-02b-on .s-02b-big-num, .s-02b-on .s-02b-big-unit, .s-02b-on .s-02b-dots-stage .s-02b-fact { opacity: 0; }
.s-02b-on .s-02b-feats { margin-top: var(--space-40); }
.s-02b-on .s-02b-iris { clip-path: circle(0% at 42% 32%); }

/* 02 · thread */
.s-02b-on .s-02b-thread { display: block; position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.s-02b-thread-base { fill: none; stroke: var(--color-hairline); stroke-width: 1; stroke-dasharray: 2 6; stroke-linecap: round; }
.s-02b-thread-light { fill: none; stroke: var(--color-action); stroke-width: 2; stroke-linecap: round; }
.s-02b-spark { fill: var(--color-action); }
.s-02b-spark-halo { fill: var(--color-action); opacity: 0.16; }
.s-02b-dust circle { fill: var(--color-steel); opacity: 0.35; }
.s-02b-on .s-02b-sky { margin-top: var(--space-48); }
.s-02b-on .s-02b-stars { position: relative; }
/* A constellation, not a row: the stars sit at different heights and the thread joins them. */
.s-02b-on .s-02b-star:nth-child(2) { margin-top: var(--space-128); }
.s-02b-on .s-02b-star:nth-child(3) { margin-top: var(--space-48); }
.s-02b-on .s-02b-node { background: var(--surface-0); box-shadow: inset 0 0 0 2px var(--color-steel); transition: none; }
.s-02b-on .s-02b-node.is-lit { background: var(--color-action); box-shadow: 0 0 0 6px color-mix(in srgb, var(--color-action) 14%, transparent); }
.s-02b-on .s-02b-star-card { clip-path: inset(0 100% 100% 0 round 22px); }

/* 03 · rail on three planes */
.s-02b-on .s-02b-rail-stage { position: sticky; top: var(--s-02b-top, var(--nav-h)); padding-block: var(--space-24); }
.s-02b-on .s-02b-back { display: block; position: absolute; left: 0; top: 50%; height: 62vh; width: auto; margin-top: -31vh; pointer-events: none; }
.s-02b-back text { font-family: var(--font-display); font-weight: var(--font-weight-semibold); font-size: 250px; letter-spacing: -0.03em; fill: var(--color-control-gray); opacity: 0.85; }
.s-02b-on .s-02b-rail-head { display: flex; align-items: center; justify-content: space-between; position: relative; }
.s-02b-on .s-02b-count { display: block; color: var(--color-text-secondary); }
.s-02b-count-now { color: var(--color-ink); }
.s-02b-on .s-02b-rail { display: flex; gap: var(--s-02b-gap, 40px); width: auto; max-width: none; margin: var(--space-32) 0 0; position: relative; }
.s-02b-on .s-02b-slide { flex: 0 0 var(--s-02b-card, 560px); }
.s-02b-on .s-02b-slide-card { box-shadow: var(--shadow-ring-subtle); background: var(--surface-0); padding: var(--space-52) var(--space-52) var(--space-40); }
.s-02b-on .s-02b-slide-card .s-02b-impact { font-size: var(--type-headline-sm-size); line-height: var(--type-headline-sm-lh); letter-spacing: var(--type-headline-sm-ls); }
.s-02b-on .s-02b-ticks { display: block; position: relative; margin-top: var(--space-40); height: var(--space-12); width: 400vw; pointer-events: none;
  background: repeating-linear-gradient(90deg, var(--color-hairline) 0 1px, transparent 1px 40px); border-top: 1px solid var(--color-hairline); }

/* 04 · words from depth */
.s-02b-on .s-02b-voice-stage { position: sticky; top: var(--s-02b-top, var(--nav-h)); padding-block: var(--space-24); }
.s-02b-on .s-02b-voice-inner { width: var(--content-width); }
.s-02b-on .s-02b-voice-title { perspective: 900px; font-size: var(--type-hero-size); line-height: var(--type-hero-lh); letter-spacing: var(--type-hero-ls); max-width: 13em; }
.s-02b-on .s-02b-rows { margin-top: var(--space-64); }
.s-02b-on .s-02b-word { opacity: 0; }
.s-02b-on .s-02b-row { clip-path: inset(0 0 100% 0); }
.s-02b-on .s-02b-coda { margin-top: var(--space-40); position: relative; z-index: 1; }

@media (max-width: 1068px) {
  .s-02b-feat { gap: var(--space-40); }
  .s-02b-stat-num { font-size: var(--type-display-size); }
  .s-02b-stars { gap: var(--space-24); }
}

@media (max-width: 734px) {
  .s-02b-jovenes { padding-block: var(--space-64) var(--space-48); }
  .s-02b-jovenes :is(.s-02b-src, .s-02b-title) { scroll-margin-top: var(--space-28); }
  .s-02b-title { font-size: 40px; line-height: 1.1; }
  .s-02b-big-unit { font-size: var(--type-title-size); }
  .s-02b-src { padding-block: var(--space-12); }
  .s-02b-feat { grid-template-columns: minmax(0, 1fr); gap: var(--space-24); padding-block: var(--space-32); }
  .s-02b-feat-copy .s-02b-impact, .s-02b-on .s-02b-slide-card .s-02b-impact { font-size: var(--type-title-size); line-height: var(--type-title-lh); letter-spacing: var(--type-title-ls); }
  .s-02b-stat-num { font-size: 48px; }
  .s-02b-impact { font-size: var(--type-title-size); line-height: var(--type-title-lh); }
  .s-02b-on .s-02b-slide-card { padding: var(--space-32) var(--space-24) var(--space-24); }
  .s-02b-on .s-02b-voice-title { font-size: 38px; line-height: 1.1; }
  .s-02b-on .s-02b-rows { margin-top: var(--space-32); }
  .s-02b-on .s-02b-giant { text-align: center; line-height: 0.98; }
  .s-02b-on .s-02b-open-stage { padding-block: var(--space-16); }
  .s-02b-iris { border-radius: 16px; }
  .s-02b-stars { grid-template-columns: minmax(0, 1fr); gap: var(--space-28); }
  .s-02b-star { padding-top: 0; padding-left: var(--space-40); }
  .s-02b-node { top: var(--space-28); left: 0; }
  .s-02b-star-card { border-radius: 16px; padding: var(--space-24); }
  .s-02b-rail { grid-template-columns: minmax(0, 1fr); }
  .s-02b-slide-card { border-radius: 16px; padding: var(--space-28) var(--space-24) var(--space-24); }
  .s-02b-rows { grid-template-columns: minmax(0, 1fr); gap: var(--space-24); margin-top: var(--space-32); }
  .s-02b-on .s-02b-star:nth-child(2), .s-02b-on .s-02b-star:nth-child(3) { margin-top: 0; }
  .s-02b-on .s-02b-back { height: 26vh; margin-top: -12vh; }
  .s-02b-coda { font-size: var(--type-headline-sm-size); line-height: var(--type-headline-sm-lh); }
}

@media (max-width: 380px), (max-height: 700px) and (max-width: 734px) {
  .s-02b-on .s-02b-voice-title { font-size: 30px; }
  .s-02b-on .s-02b-voice-inner .s-02b-head { display: none; }
  .s-02b-on .s-02b-rows { margin-top: var(--space-24); gap: var(--space-16); }
  .s-02b-on .s-02b-row .s-02b-impact { font-size: 19px; line-height: 1.25; }
  .s-02b-on .s-02b-row { padding-top: var(--space-12); }
}

@media (forced-colors: active) { .s-02b-tline, .s-02b-impact, .s-02b-word, .s-02b-uline, .s-02b-stat-num { -webkit-text-fill-color: currentColor; color: CanvasText; background: none; } }

@media print {
  .s-02b-giant, .s-02b-entry-line, .s-02b-canvas, .s-02b-thread, .s-02b-back, .s-02b-ticks { display: none !important; }
}

/* ==== sections/03-trayectoria ==== */
/* 03 · Straight logarithmic zoom into the Security Council (sticky, three reading plateaus) + self-advancing gallery. */
.s-03-trayectoria { --s-03-phrase-size: var(--space-40); --s-03-phrase-leading: 1.1; --s-03-phrase-tracking: -.02em; --s-03-scene-top: var(--space-64); --s-03-scene-bottom: calc(var(--space-28) * 2); padding-block: var(--section-padding-story) 0; }
.s-03-header { padding-bottom: var(--space-64); }
.s-03-eyebrow { color: var(--color-text-secondary); margin-bottom: var(--space-24); }
.s-03-title { max-width: 16em; }
.s-03-skip { display: inline-flex; align-items: center; gap: var(--space-8); margin-top: var(--space-28); min-height: var(--space-40); }
.s-03-skip svg { flex-shrink: 0; }
/* Zoom scene. Without .s-03-live (no JS, reduced motion, print, too short a
   viewport) it is the complete static state: the photo, then the three steps. */
.s-03-trayectoria { --s-03-photo-radius: 22px; --s-03-top: calc(var(--nav-h) + var(--space-64)); --s-03-bottom: calc(var(--space-28) * 2); --s-03-credit-h: var(--space-48); }
.s-03-scene { position: relative; }
.s-03-stage { position: relative; }
.s-03-layout { width: var(--content-width); max-width: var(--content-max); margin-inline: auto; padding-bottom: var(--section-padding-story); }
.s-03-zoom { margin: 0; min-width: 0; }
.s-03-zoom-frame { position: relative; aspect-ratio: 3 / 2; overflow: clip; border-radius: var(--s-03-photo-radius); background: var(--surface-1); }
.s-03-zoom-image, .s-03-zoom-image img { display: block; width: 100%; height: 100%; }
.s-03-zoom-image img { object-fit: cover; object-position: 50% 50%; }
.s-03-zoom-credit { max-width: 40em; }
.s-03-caption { min-width: 0; margin-top: var(--space-64); }
.s-03-counter { display: none; }
.s-03-phrases { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-48); }
.s-03-phrase { min-width: 0; }
.s-03-step { color: var(--color-text-secondary); margin-bottom: var(--space-20); font-family: var(--font-text); font-weight: var(--font-weight-medium); }
.s-03-phrase-title { color: var(--color-ink); font-family: var(--font-display); font-size: var(--s-03-phrase-size); line-height: var(--s-03-phrase-leading); font-weight: var(--font-weight-semibold); letter-spacing: var(--s-03-phrase-tracking); text-wrap: pretty; }
.s-03-phrase-detail { margin-top: var(--space-20); color: var(--color-text-secondary); font-size: var(--type-intro-size); line-height: var(--type-intro-lh); font-weight: var(--font-weight-regular); letter-spacing: var(--type-intro-ls); text-wrap: pretty; }
.s-03-press { margin: var(--space-24) 0 0; padding-top: var(--space-20); border-top: 1px solid var(--color-hairline); }
.s-03-press-source { color: var(--color-text-secondary); }
.s-03-press-source a { display: inline-flex; align-items: center; min-height: var(--space-32); }
.s-03-press-quote { margin: var(--space-4) 0 0; color: var(--color-ink); font-family: var(--font-display); font-size: var(--space-24); line-height: 1.25; font-weight: var(--font-weight-medium); letter-spacing: -.01em; }
.s-03-proof { margin-top: var(--space-12); }
/* Apple ink→grey gradient, only on the elements that hold the text themselves (their parents animate). */
.s-03-phrase-title, .s-03-role { width: fit-content; max-width: 100%; background-image: var(--grad-ink); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
@media (forced-colors: active) { .s-03-phrase-title, .s-03-role { -webkit-text-fill-color: currentColor; color: CanvasText; background: none; } }
/* Live: a pinned stage, copy beside the photo, never over it. */
.s-03-scene.s-03-live { height: 400vh; height: 400svh; }
.s-03-live .s-03-stage { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: clip; }
.s-03-live .s-03-layout { box-sizing: border-box; height: 100%; max-width: var(--content-max); padding: var(--s-03-top) 0 var(--s-03-bottom); display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 7fr); column-gap: var(--space-64); align-items: center; align-content: center; }
/* A big 4:3 frame (~74 % of the usable height); the zoom happens inside it. */
.s-03-live .s-03-zoom { grid-column: 2; grid-row: 1; width: 100%; max-width: calc((100vh - var(--s-03-top) - var(--s-03-bottom)) * .74 * 4 / 3); max-width: calc((100svh - var(--s-03-top) - var(--s-03-bottom)) * .74 * 4 / 3); justify-self: end; }
.s-03-live .s-03-zoom-frame { aspect-ratio: 4 / 3; transform-origin: 50% 50%; }
/* Origin above Daniel's face: at full zoom both faces stay whole (measured on the 1536 source). */
.s-03-live .s-03-zoom-image img { transform-origin: 36% 6%; }

.s-03-live .s-03-caption { grid-column: 1; grid-row: 1; margin: 0; }
.s-03-live .s-03-counter { display: flex; align-items: center; gap: var(--space-12); color: var(--color-text-secondary); margin-bottom: var(--space-28); font-weight: var(--font-weight-medium); }
.s-03-counter-rule { position: relative; width: var(--space-64); height: 1px; background: var(--color-hairline); overflow: hidden; }
.s-03-counter-rule > span { position: absolute; inset: 0; background: var(--color-ink); transform: scaleX(0); transform-origin: left; }
.s-03-current { color: var(--color-ink); }
.s-03-live .s-03-phrases { display: grid; grid-template-columns: minmax(0, 1fr); }
.s-03-live .s-03-phrase { grid-area: 1 / 1; will-change: transform, opacity; }
.s-03-live .s-03-phrase:not(.s-03-on) { pointer-events: none; }
/* The pulled-up stage overlaps the header's air: only its photo and copy take pointer events. */
.s-03-live .s-03-stage { pointer-events: none; }
.s-03-live .s-03-zoom, .s-03-live .s-03-caption { pointer-events: auto; }
/* Wide cards keep the evidence and the photograph together; no date axis. */
.s-03-carousel { --s-03-gutter: max(6.25vw, calc((100vw - var(--content-max)) / 2)); --s-03-card-width: min(87.5vw, 1100px); --s-03-role-size: var(--space-28); --s-03-role-leading: var(--space-32); padding-block: var(--section-padding-story) var(--space-64); background: var(--surface-1); scroll-margin-top: calc(var(--nav-h) + var(--space-24)); }
.s-03-gallery-header { margin-bottom: var(--section-header-gap); }
.s-03-gallery-header h3 { max-width: 17em; }
.s-03-viewport { width: var(--content-width); max-width: var(--content-max); margin-inline: auto; }
.s-03-viewport:focus:not(:focus-visible) { outline: none; }
.s-03-viewport:focus-visible { outline: var(--focus-ring); outline-offset: calc(-1 * var(--focus-offset)); }
.s-03-track { display: grid; gap: var(--space-32); }
.s-03-slide { min-width: 0; }
.s-03-card { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); min-height: var(--space-224); background: var(--surface-0); border-radius: var(--radius-card); overflow: clip; }
.s-03-card--text { grid-template-columns: minmax(0, 1fr); }
.s-03-card-media { position: relative; display: flex; flex-direction: column; justify-content: center; min-width: 0; padding: var(--space-28); }
.s-03-card-image { display: block; width: 100%; overflow: hidden; border-radius: var(--radius-nav-float); }
.s-03-card-image img { display: block; width: 100%; height: 100%; object-fit: cover; }
.s-03-card-media--consejo .s-03-card-image { aspect-ratio: 1284 / 1011; border-radius: var(--s-03-photo-radius); }
.s-03-card-media--consejo img { object-fit: contain; object-position: 50% 50%; }
.s-03-card-media--oij .s-03-card-image { aspect-ratio: 1; border-radius: var(--s-03-photo-radius); }
.s-03-card-media--oij img { object-fit: cover; object-position: 50% 50%; }
.s-03-card-media--habitat .s-03-card-image { aspect-ratio: 4 / 5; max-width: 360px; margin-inline: auto; }
.s-03-card-media--habitat img { object-position: 50% 42%; }
.s-03-card-media--malta .s-03-card-image { aspect-ratio: 4 / 3; border-radius: var(--s-03-photo-radius); }
.s-03-card-media--malta img { object-fit: cover; object-position: 50% 24%; }
.s-03-card-media--eslovaquia .s-03-card-image { aspect-ratio: 4 / 3; }
.s-03-card-media--eslovaquia img { object-fit: contain; object-position: 50% 50%; }
.s-03-credit { color: var(--color-text-secondary); margin-top: var(--space-12); }
.s-03-card-copy { padding: var(--space-48); display: flex; flex-direction: column; align-items: flex-start; }
.s-03-number { color: var(--color-text-secondary); font-size: var(--type-small-size); line-height: var(--type-small-lh); margin-bottom: var(--space-28); }
.s-03-role { font-size: var(--s-03-role-size); line-height: var(--s-03-role-leading); font-weight: var(--font-weight-semibold); }
.s-03-description { color: var(--color-text-secondary); font-size: var(--type-body-size); line-height: var(--type-body-lh); margin-top: var(--space-20); }
.s-03-source-note { color: var(--color-text-secondary); margin-top: var(--space-8); }
.s-03-links { display: flex; flex-wrap: wrap; gap: var(--space-12) var(--space-28); padding-top: var(--space-28); margin-top: auto; }
.s-03-link { display: inline-flex; align-items: center; gap: var(--space-4); min-height: var(--space-40); }
.s-03-link svg { flex-shrink: 0; }
.s-03-links--inline { display: block; }
.s-03-link--wrapping { display: inline; }
.s-03-link-tail { white-space: nowrap; }
.s-03-link-tail svg { display: inline-block; vertical-align: middle; }
.s-03-carousel.s-03-enhanced .s-03-viewport { width: 100%; max-width: none; overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scroll-padding-inline: var(--s-03-gutter); scrollbar-width: none; touch-action: pan-y pinch-zoom; }
.s-03-carousel.s-03-enhanced .s-03-viewport::-webkit-scrollbar { display: none; }
.s-03-carousel.s-03-enhanced .s-03-track { display: flex; gap: var(--space-24); width: max-content; padding: var(--space-4) var(--s-03-gutter); padding-inline-end: calc(100vw - var(--s-03-card-width) - var(--s-03-gutter)); }
.s-03-carousel.s-03-enhanced .s-03-slide { width: var(--s-03-card-width); flex: 0 0 auto; scroll-snap-align: start; }
.s-03-carousel.s-03-enhanced .s-03-card { min-height: 560px; }
.s-03-controls { display: flex; justify-content: center; align-items: center; gap: var(--space-8); margin: var(--space-32) auto 0; width: fit-content; padding: var(--space-8); border-radius: var(--radius-pill-track); background: var(--color-control-gray); }
.s-03-dots { display: flex; align-items: center; padding-inline: var(--space-8); }
/* Each dot is a button: 44 px tall, 28 px apart, its tap area widened to 44 px with ::before (a neighbour never covers a dot's centre). */
.s-03-dot { position: relative; display: flex; align-items: center; justify-content: center; width: var(--space-28); height: calc(var(--space-40) + var(--space-4)); padding: 0; border: 0; background: none; cursor: pointer; border-radius: var(--radius-pill); }
.s-03-dot::before { content: ""; position: absolute; inset: 0 calc(-1 * var(--space-8)); }
.s-03-dot.s-03-active { width: calc(var(--space-48) + var(--space-20)); }
.s-03-dot:focus:not(:focus-visible) { outline: none; }
.s-03-dot:focus-visible { outline: var(--focus-ring); outline-offset: calc(-1 * var(--space-8)); }
.s-03-dot-bar { display: block; width: var(--space-8); height: var(--space-8); border-radius: var(--radius-pill); background: var(--color-steel); overflow: hidden; }
.s-03-dot.s-03-active .s-03-dot-bar { width: var(--space-48); background: var(--surface-0); }
.s-03-dot:hover .s-03-dot-bar { background: var(--color-text-secondary); }
.s-03-dot.s-03-active:hover .s-03-dot-bar { background: var(--surface-0); }
.s-03-dot-bar > span { display: block; height: 100%; width: 100%; transform: scaleX(0); transform-origin: left; background: var(--color-ink); border-radius: inherit; }
.s-03-pause { min-width: var(--space-96); min-height: var(--space-48); padding-inline: var(--space-16); border-radius: var(--radius-pill); display: flex; justify-content: center; align-items: center; gap: var(--space-8); background: var(--surface-0); }
.s-03-pause:hover { background: var(--surface-2); }
.s-03-pause svg { flex-shrink: 0; }
.s-03-play-icon { display: none; }
.s-03-pause[aria-pressed="true"] .s-03-play-icon { display: block; }
.s-03-pause[aria-pressed="true"] .s-03-pause-icon { display: none; }
.s-03-today { padding-block: var(--space-96) 0; display: grid; grid-template-columns: 1fr 3fr; column-gap: var(--space-64); }
/* 03→04 hinge: the fine line under «Hoy» is the section's last edge; the 04 grey curtain opens from it. */
.s-03-hinge { grid-column: 1 / -1; display: block; height: 1px; margin-top: var(--space-64); background: var(--color-hairline); transform-origin: 50% 50%; }
/* 02→03 bridge: the title's second line travels in from the 02 signature (FLIP, transform/opacity only). */
.s-03-bridge, .s-03-lead { display: inline-block; }
.s-03-lead-line { display: block; }
.s-03-today-label { color: var(--color-text-secondary); padding-top: var(--space-8); }
.s-03-today-copy { max-width: 26em; }
.s-03-today-content { min-width: 0; }
.s-03-today-link { margin-top: var(--space-24); }
@media (max-width: 1068px) {
  .s-03-trayectoria { --s-03-phrase-size: var(--space-32); }
  .s-03-phrases { grid-template-columns: minmax(0, 1fr); max-width: 40em; }
  .s-03-live .s-03-layout { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); column-gap: var(--space-40); }
  .s-03-card-copy { padding: var(--space-32); }
  .s-03-carousel.s-03-enhanced .s-03-card { min-height: 520px; }
}
@media (max-width: 734px) {
  /* Mobile entry: compact, the photo arrives right after «Ver los cargos». */
  .s-03-trayectoria { padding-top: var(--space-64); }
  .s-03-header { padding-bottom: var(--space-24); }
  .s-03-carousel { padding-top: var(--space-40); }
  .s-03-title { font-size: var(--type-headline-size); line-height: var(--type-headline-lh); letter-spacing: var(--type-headline-ls); }
  .s-03-title br { display: none; }
  .s-03-trayectoria { --s-03-phrase-size: var(--space-28); --s-03-photo-radius: 16px; --s-03-credit-h: var(--space-32); }
  .s-03-caption { margin-top: var(--space-40); }
  /* Mobile scene: big photo at 20 px margins just under the nav; counter and phrase below it, never over it. */
  /* Centred in the useful height (between the nav and the bottom edge): equal air above and below. */
  .s-03-live .s-03-layout { height: 100%; width: 100%; max-width: none; padding: var(--nav-h) var(--space-20) 0; display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: 0; }
  .s-03-live .s-03-zoom { max-width: none; }
  .s-03-live .s-03-zoom-frame { aspect-ratio: 4 / 3; }
  .s-03-live .s-03-zoom-image img { transform-origin: 36% 6%; }
  .s-03-live .s-03-zoom-credit { margin-top: var(--space-8); }
  .s-03-live .s-03-caption { margin-top: var(--space-20); padding-inline: max(0px, calc(6.25vw - var(--space-20))); }
  .s-03-live .s-03-counter { margin-bottom: var(--space-12); }
  .s-03-live { --s-03-phrase-size: var(--space-24); --s-03-phrase-leading: 1.16; }
  .s-03-live .s-03-press { margin-top: var(--space-16); padding-top: var(--space-12); }
  .s-03-live .s-03-press-quote { font-size: var(--space-20); }
  .s-03-live .s-03-proof { margin-top: var(--space-4); }
  .s-03-live .s-03-phrase-detail { margin-top: var(--space-12); }
  .s-03-step { margin-bottom: var(--space-16); }
  .s-03-phrase-detail { font-size: var(--type-body-size); line-height: var(--type-body-lh); letter-spacing: var(--type-body-ls); margin-top: var(--space-16); }
  .s-03-press-quote { font-size: var(--type-title-size); }
  .s-03-card { grid-template-columns: minmax(0, 1fr); grid-template-rows: max-content 1fr; }
  .s-03-card-media { padding: var(--space-20) var(--space-20) 0; }
  .s-03-card-media--consejo { justify-content: flex-start; padding-top: var(--space-24); }
  .s-03-card-image { border-radius: var(--radius-nav-float); }
  .s-03-card-media--habitat .s-03-card-image { max-width: 220px; }
  .s-03-card-copy { padding: var(--space-24); }
  .s-03-number { margin-bottom: var(--space-20); }
  .s-03-description { margin-top: var(--space-16); }
  .s-03-carousel.s-03-enhanced .s-03-card { min-height: 680px; height: 100%; }
  .s-03-carousel.s-03-enhanced .s-03-track { align-items: stretch; gap: var(--space-16); }
  .s-03-carousel.s-03-enhanced .s-03-slide { width: 87.5vw; }
  /* Mobile cards: 20 px gutters with a deliberate 32 px peek of the next card; every photo fills the card at 4:3 with 16 px corners;
     the card is as tall as the tallest content (flex stretch), never a fixed height. */
  .s-03-carousel { --s-03-gutter: var(--space-20); --s-03-card-width: calc(100vw - var(--space-64)); }
  .s-03-carousel.s-03-enhanced .s-03-track { gap: var(--space-12); }
  .s-03-carousel.s-03-enhanced .s-03-slide { width: var(--s-03-card-width); display: flex; }
  .s-03-carousel.s-03-enhanced .s-03-card { min-height: 0; height: auto; flex: 1 1 auto; }
  .s-03-card { display: flex; flex-direction: column; }
  .s-03-card-media, .s-03-card-media--consejo { display: block; padding: var(--space-16) var(--space-16) 0; }
  .s-03-card-media .s-03-card-image, .s-03-card-media--habitat .s-03-card-image { width: 100%; max-width: none; margin: 0; aspect-ratio: 4 / 3; border-radius: var(--s-03-photo-radius); }
  .s-03-card-media .s-03-card-image img { object-fit: cover; }
  .s-03-card-media--consejo img { object-position: 50% 80%; }
  .s-03-card-media--oij img { object-position: 50% 20%; transform: scale(1.1); transform-origin: 40% 30%; }
  .s-03-card-media--habitat img { object-position: 50% 20%; }
  .s-03-card-media--malta img { object-position: 50% 24%; }
  .s-03-card-media--eslovaquia img { object-position: 50% 50%; }
  .s-03-card-media .s-03-credit { margin-top: var(--space-8); }
  .s-03-card-copy { padding: var(--space-20) var(--space-16) var(--space-24); }
  .s-03-number { margin-bottom: var(--space-12); }
  .s-03-description { margin-top: var(--space-12); }
  .s-03-links { margin-top: 0; padding-top: var(--space-16); }
  /* Mobile controls: icon-only Pause (its aria-label names it), so dots + Pause fit 320 with air. */
  .s-03-pause { min-width: var(--space-48); width: var(--space-48); padding: 0; }
  .s-03-pause-label { display: none; }
  .s-03-today { grid-template-columns: minmax(0, 1fr); row-gap: var(--space-24); padding-top: var(--space-64); }
  .s-03-hinge { margin-top: var(--space-24); }
  .s-03-today-copy { font-size: var(--type-headline-sm-size); line-height: var(--type-headline-sm-lh); }
}
@media (max-width: 734px) and (max-height: 720px) {
  /* Short phones: a 3:2 frame and a smaller phrase keep the scene pinned instead of static. */
  .s-03-live .s-03-zoom-frame { aspect-ratio: 3 / 2; }
  .s-03-live .s-03-zoom-image img { transform-origin: 40% 6%; }
  .s-03-live .s-03-caption { margin-top: var(--space-16); }
  .s-03-live .s-03-counter { margin-bottom: var(--space-8); }
  .s-03-live { --s-03-phrase-size: var(--space-20); --s-03-phrase-leading: 1.2; }
  .s-03-live .s-03-phrase-detail { font-size: 15px; line-height: 1.4; margin-top: var(--space-8); }
  .s-03-live .s-03-press { margin-top: var(--space-12); padding-top: var(--space-8); }
  .s-03-live .s-03-press-source a { min-height: var(--space-24); }
  .s-03-live .s-03-press-quote { font-size: 17px; }
  .s-03-live .s-03-proof { min-height: var(--space-32); }
}
@media (max-width: 360px) {
  .s-03-card-copy { padding: var(--space-24) var(--space-20); }
  .s-03-card-media { padding-inline: var(--space-16); }
  .s-03-dots { padding-inline: var(--space-4); }
  .s-03-dot { width: var(--space-24); }
  .s-03-carousel { --s-03-role-size: var(--space-24); --s-03-role-leading: var(--space-28); }
  .s-03-description { font-size: 15px; line-height: 1.47; }
  .s-03-links { font-size: 15px; }
  .s-03-dot::before { inset: 0 calc(-1 * var(--space-8) - 2px); }
  .s-03-dot.s-03-active { width: calc(var(--space-48) + var(--space-16)); }
}
@media (prefers-reduced-motion: reduce) {
  .s-03-scene.s-03-live { height: auto; }
  .s-03-live .s-03-stage { position: relative; height: auto; }
  .s-03-zoom-frame, .s-03-zoom-image img, .s-03-zoom-credit, .s-03-phrase { transform: none !important; opacity: 1 !important; }
  .s-03-controls { display: none; }
}
@media print {
  .s-03-phrase-title, .s-03-role { -webkit-text-fill-color: var(--color-ink); }
  .s-03-scene.s-03-live { height: auto; }
  .s-03-live .s-03-stage { position: relative; height: auto; }
  .s-03-zoom-frame, .s-03-zoom-image img, .s-03-zoom-credit, .s-03-phrase { transform: none !important; opacity: 1 !important; }
  .s-03-carousel.s-03-enhanced .s-03-viewport { width: 100%; overflow: visible; }
  .s-03-carousel.s-03-enhanced .s-03-track { display: grid; width: 100%; padding: 0; }
  .s-03-carousel.s-03-enhanced .s-03-slide { width: 100%; break-inside: avoid; }
  .s-03-carousel.s-03-enhanced .s-03-card { min-height: 0; }
  .s-03-controls, .s-03-skip { display: none; }
}
/* Peeking images remain visible; clipped copies are absent from focus and AT. */
@media screen {
  .s-03-carousel.s-03-enhanced .s-03-slide:not(.s-03-active) { visibility: hidden; }
  .s-03-carousel.s-03-enhanced .s-03-slide:not(.s-03-active) .s-03-card-media { visibility: visible; }
  .s-03-carousel.s-03-enhanced .s-03-slide:not(.s-03-active) .s-03-credit { visibility: hidden; }
}

/* ==== sections/04-aporta ==== */
/* Static reading remains complete without JavaScript and with reduced motion. */
.s-04-aporta { --s-04-safe-top: var(--space-64); --s-04-safe-bottom: calc(var(--space-48) + var(--space-8)); padding-top: var(--section-padding-story); }
.s-04-heading { max-width: 1100px; }
.s-04-header { max-width: 980px; margin: 0 auto var(--space-48); text-align: center; }
.s-04-eyebrow { color: var(--color-text-secondary); margin-bottom: var(--space-16); }
.s-04-title { font-size: var(--type-display-size); line-height: var(--type-display-lh); letter-spacing: var(--type-display-ls); }
.s-04-stage { position: static; height: auto; overflow: visible; padding-bottom: var(--space-64); }
.s-04-board { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-40); }
.s-04-card { min-width: 0; }
.s-04-photo { position: relative; border-radius: var(--radius-card); isolation: isolate; }
.s-04-photo::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background: color-mix(in srgb, var(--color-action) 35%, var(--surface-0)); opacity: 0; filter: blur(var(--space-24)); pointer-events: none; z-index: -1; }
.s-04-image { aspect-ratio: 4 / 5; border-radius: inherit; }
.s-04-image picture, .s-04-image img { display: block; width: 100%; height: 100%; }
.s-04-image img { object-fit: cover; border-radius: inherit; }
.s-04-aporta.s-04-animated .s-04-image::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: var(--surface-1); opacity: var(--s-04-dim, 0); pointer-events: none; }
.s-04-photo--vivienda img { object-position: 50% 45%; }
/* Preserve both complete heads; a vertical crop cannot contain this source. */
.s-04-photo--europa .s-04-image { aspect-ratio: 1; }
.s-04-photo--europa img { object-position: 100% 35%; }
.s-04-photo--jovenes .s-04-image { aspect-ratio: 123 / 100; }
.s-04-photo--jovenes img { object-position: 0% 62%; }
.s-04-image--espana { aspect-ratio: 4 / 3; }
.s-04-photo--espana img { object-position: 50% 78%; }
.s-04-photo-label { display: flex; flex-wrap: wrap; align-content: start; justify-content: space-between; gap: var(--space-4) var(--space-8); padding: var(--space-12) var(--space-4) 0; color: var(--color-text-secondary); }
.s-04-photo-label span { white-space: nowrap; }
.s-04-credit { flex: 1 0 100%; font-size: var(--type-caption-size); line-height: var(--type-caption-lh); }
.s-04-overview { display: none; }
.s-04-copy { padding-top: var(--space-24); }
.s-04-index { color: var(--color-link); margin-bottom: var(--space-12); }
.s-04-card-title { margin-bottom: var(--space-16); }
.s-04-body { color: var(--color-text-secondary-alt); }
.s-04-controls { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-16); min-height: var(--space-48); }
.s-04-steps { display: flex; flex-shrink: 0; gap: var(--space-8); }
.s-04-step { width: var(--globalnav-height); min-height: var(--space-48); display: flex; flex-direction: column; justify-content: center; gap: var(--space-8); align-items: flex-start; font-size: var(--type-caption-size); color: var(--color-text-secondary); font-variant-numeric: tabular-nums; }
.s-04-step-track { width: 100%; height: 2px; background: var(--color-control-gray); position: relative; }
.s-04-step-track::after { content: ""; position: absolute; inset: 0; background: var(--color-action); transform: scaleX(0); transform-origin: left; }
.s-04-step[aria-current] { color: var(--color-link); }
.s-04-step[aria-current] .s-04-step-track::after { transform: scaleX(1); }
.s-04-skip { display: flex; flex-shrink: 0; align-items: center; gap: var(--space-8); color: var(--color-link); min-height: var(--space-48); font-size: var(--type-caption-size); }
.s-04-skip svg { flex: 0 0 auto; }
/* Plateau titles carry the house ink→grey gradient, on the leaf h3 itself. */
.s-04-card-title { background-image: var(--grad-ink); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
@media (forced-colors: active) { .s-04-card-title { -webkit-text-fill-color: currentColor; color: CanvasText; background: none; } }
/* Borders with the neighbours (scroll-tied, reversible; final state without JS).
   03→04: the grey band opens downward from the 03 «Hoy» line; the heading rises
   inside the opening. 04→05: the band's lower edge becomes a horizon curve
   that lifts as 05 arrives. */
.s-04-aporta { isolation: isolate; overflow-x: clip; }
.s-04-edge { position: absolute; left: 0; width: 1px; pointer-events: none; visibility: hidden; }
.s-04-edge--in { top: -100vh; height: 200vh; }
.s-04-edge--out { bottom: -100vh; height: 200vh; }
.s-04-aporta.s-04-curtain { background: transparent; }
.s-04-aporta.s-04-curtain::before { content: ""; position: absolute; left: 0; right: 0; top: var(--s-04-band-top, 0px); bottom: 0; z-index: -1; background: var(--surface-1); clip-path: inset(0 0 var(--s-04-band-cut, 0px) 0); pointer-events: none; }
.s-04-horizon { position: absolute; left: -30%; right: -30%; bottom: -1px; height: 120px; border-radius: 50% 50% 0 0 / 100% 100% 0 0; background: var(--surface-0); transform: translateY(calc((1 - var(--s-04-rise, 0)) * 101%)); pointer-events: none; z-index: 0; }
/* Quotes: one lead quote in large type, then two in a tidy grid of cards.
   Separated from the scene by air; the words rise in a scroll-tied cascade. */
.s-04-quotes { position: relative; padding-top: calc(2 * var(--space-80)); padding-bottom: var(--space-32); }
.s-04-quotes-track { position: absolute; top: -100vh; bottom: 0; left: 0; width: 1px; pointer-events: none; }
.s-04-quote { margin: 0; position: relative; }
.s-04-quote-text { color: var(--color-ink); text-wrap: pretty; }
.s-04-quote--lead { max-width: 980px; padding-top: var(--space-64); }
.s-04-quote--lead::before, .s-04-quote--card::before { content: "\201C"; position: absolute; left: -0.04em; top: 0; font-family: var(--font-display); font-weight: var(--font-weight-semibold); line-height: 1; color: var(--color-hairline); pointer-events: none; }
.s-04-quote--lead::before { font-size: 120px; top: -12px; }
.s-04-quote--lead .s-04-quote-text { font-family: var(--font-display); font-size: var(--type-headline-size); line-height: var(--type-headline-lh); letter-spacing: var(--type-headline-ls); font-weight: var(--font-weight-semibold); }
.s-04-quote-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-24); margin-top: var(--space-80); }
.s-04-quote--card { background: var(--surface-0); border-radius: var(--radius-card); padding: var(--space-80) var(--space-40) var(--space-40); display: flex; flex-direction: column; justify-content: space-between; gap: var(--space-32); }
.s-04-quote--card::before { font-size: 72px; left: var(--space-40); top: var(--space-24); }
.s-04-quote--card .s-04-quote-text { font-family: var(--font-display); font-size: var(--type-card-title-size); line-height: var(--type-card-title-lh); letter-spacing: var(--type-card-title-ls); font-weight: var(--font-weight-semibold); }
.s-04-source { color: var(--color-text-secondary); margin-top: var(--space-24); display: flex; align-items: center; gap: var(--space-12); }
.s-04-source::before { content: ""; width: var(--space-24); height: 1px; background: var(--color-steel); flex: 0 0 auto; }
.s-04-quote--card .s-04-source { margin-top: 0; }
.s-04-word { display: inline-block; }
/* A fixed camera with two independent reading zones; no grid while enhanced. */
.s-04-aporta.s-04-animated .s-04-track { height: 500svh; }
.s-04-aporta.s-04-animated .s-04-stage { position: sticky; top: calc(var(--nav-h) + var(--s-04-safe-top)); height: calc(100svh - var(--nav-h) - var(--s-04-safe-top) - var(--s-04-safe-bottom)); padding: 0; }
.s-04-aporta.s-04-animated .s-04-inner { position: relative; height: 100%; }
.s-04-aporta.s-04-animated .s-04-board { position: relative; display: block; height: 100%; perspective: 1600px; perspective-origin: 50% 50%; }
.s-04-aporta.s-04-animated .s-04-card { display: contents; }
.s-04-aporta.s-04-animated .s-04-photo { position: absolute; left: 50%; top: 50%; width: var(--s-04-fit-w); transform-origin: center; backface-visibility: hidden; pointer-events: none; }
.s-04-aporta.s-04-animated .s-04-photo-label { position: absolute; top: 100%; width: 100%; visibility: hidden; font-size: var(--type-caption-size); line-height: var(--type-caption-lh); }
.s-04-aporta.s-04-animated .s-04-copy { position: absolute; left: 64%; top: 0; width: 36%; padding: 0; }
.s-04-aporta.s-04-animated .s-04-card-title { font-size: var(--type-headline-sm-size); }
.s-04-aporta.s-04-animated .s-04-body { font-size: var(--type-body-size); line-height: var(--type-body-lh); }
.s-04-aporta.s-04-animated .s-04-overview { position: absolute; left: 0; top: 0; width: 100%; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-16); font-size: var(--type-body-size); line-height: var(--type-body-lh); text-align: center; }
.s-04-aporta.s-04-animated .s-04-controls { position: absolute; left: 64%; top: 0; width: 36%; }
.s-04-aporta.s-04-animated.s-04-fanning .s-04-controls { left: 50%; width: min(100%, 480px); margin-left: max(-240px, -50%); }
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="0"] .s-04-card:nth-child(1) .s-04-photo-label,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="1"] .s-04-card:nth-child(2) .s-04-photo-label,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="2"] .s-04-card:nth-child(3) .s-04-photo-label,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="3"] .s-04-card:nth-child(4) .s-04-photo-label { visibility: visible; }
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="0"] .s-04-card:nth-child(1) .s-04-photo::before,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="1"] .s-04-card:nth-child(2) .s-04-photo::before,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="2"] .s-04-card:nth-child(3) .s-04-photo::before,
.s-04-aporta.s-04-animated.s-04-reading[data-s-04-active="3"] .s-04-card:nth-child(4) .s-04-photo::before { opacity: .05; }
/* Desktop (≥1024): on the page grid, like 03 and 05. The heading stays above
   the scene, left-aligned; the scene puts the topic text in the left five
   columns, the deck in the right six and the control bar across the bottom. */
@media (min-width: 1024px) {
  .s-04-header { text-align: left; margin-left: 0; max-width: none; margin-bottom: var(--space-16); }
  .s-04-heading { max-width: var(--content-max); }
}
/* The heading lives in the scene's left column, pinned above the index/text. */
.s-04-aporta.s-04-wide .s-04-header { position: absolute; left: 0; top: 0; width: var(--s-04-left-w); margin: 0; z-index: 2; }
.s-04-aporta.s-04-wide .s-04-title { margin-left: 0 !important; margin-right: 0 !important; }
@media (max-width: 1279px), (max-height: 820px) {
  .s-04-aporta.s-04-wide .s-04-title { font-size: var(--type-section-size); line-height: var(--type-section-lh); letter-spacing: var(--type-section-ls); }
}
.s-04-aporta.s-04-wide .s-04-overview { width: var(--s-04-left-w); grid-template-columns: minmax(0, 1fr); gap: 0; text-align: left; font-size: var(--type-title-size); line-height: var(--type-title-lh); letter-spacing: var(--type-title-ls); font-weight: var(--font-weight-semibold); }
.s-04-aporta.s-04-wide .s-04-overview li { padding: var(--space-12) 0; border-top: 1px solid var(--color-hairline); color: var(--color-ink); }
.s-04-aporta.s-04-wide .s-04-overview li:last-child { border-bottom: 1px solid var(--color-hairline); }
.s-04-aporta.s-04-wide .s-04-copy { left: 0; width: var(--s-04-left-w); }
.s-04-aporta.s-04-wide .s-04-index { color: var(--color-text-secondary); margin-bottom: var(--space-16); font-size: var(--type-small-size); line-height: var(--type-small-lh); }
.s-04-aporta.s-04-wide .s-04-card-title { font-size: var(--type-headline-size); line-height: var(--type-headline-lh); letter-spacing: var(--type-headline-ls); margin-bottom: var(--space-20); text-wrap: balance; }
.s-04-aporta.s-04-wide .s-04-body { font-size: var(--type-body-lg-size); line-height: var(--type-body-lg-lh); letter-spacing: var(--type-body-lg-ls); color: var(--color-text-secondary); max-width: 30em; }
.s-04-aporta.s-04-animated.s-04-wide .s-04-controls,
.s-04-aporta.s-04-animated.s-04-fanning.s-04-wide .s-04-controls { left: 0; width: 100%; margin-left: 0; justify-content: space-between; flex-wrap: nowrap; padding: 0 var(--space-8) 0 var(--space-20); border: 1px solid var(--color-hairline); border-radius: var(--radius-pill); background: var(--surface-0); }
.s-04-aporta.s-04-wide .s-04-steps { gap: var(--space-16); }
.s-04-aporta.s-04-wide .s-04-photo--vivienda .s-04-image { aspect-ratio: 1; }
.s-04-aporta.s-04-wide .s-04-photo--vivienda img { object-position: 50% 40%; }
.s-04-aporta.s-04-wide .s-04-photo-label { font-size: var(--type-small-size); line-height: var(--type-small-lh); padding-top: var(--space-12); }
@media (max-width: 1023px) {
    .s-04-aporta.s-04-animated .s-04-inner { width: calc(100% - var(--space-32)); max-width: 640px; }
  .s-04-aporta.s-04-animated .s-04-copy { left: 0; width: 100%; }
  .s-04-aporta.s-04-animated .s-04-card-title { font-size: var(--type-title-size); margin-bottom: var(--space-12); }
  .s-04-aporta.s-04-animated .s-04-body { font-size: var(--type-small-size); line-height: var(--type-small-lh); }
  .s-04-aporta.s-04-animated .s-04-overview { grid-template-columns: minmax(0, 1fr); text-align: left; gap: var(--space-8); }
  .s-04-aporta.s-04-animated .s-04-controls,
  .s-04-aporta.s-04-animated.s-04-fanning .s-04-controls { left: 0; width: 100%; margin-left: 0; flex-wrap: wrap; justify-content: center; gap: var(--space-8) var(--space-16); }
}
@media (max-width: 734px) {
  .s-04-horizon { height: 88px; left: -60%; right: -60%; }
  .s-04-quotes { width: calc(100% - 2 * var(--space-20)); padding-top: var(--space-96); }
  .s-04-quote--lead { padding-top: var(--space-48); }
  .s-04-quote--lead::before { font-size: 88px; top: -10px; }
  .s-04-quote--lead .s-04-quote-text { font-size: var(--type-headline-xl-size); line-height: var(--type-headline-xl-lh); letter-spacing: var(--type-headline-xl-ls); }
  .s-04-quote-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-16); margin-top: var(--space-48); }
  .s-04-quote--card { padding: var(--space-64) var(--space-24) var(--space-24); gap: var(--space-24); border-radius: var(--space-16); }
  .s-04-quote--card::before { font-size: 60px; left: var(--space-24); top: var(--space-16); }
  .s-04-quote--card .s-04-quote-text { font-size: var(--type-card-title-size); line-height: var(--type-card-title-lh); }
  .s-04-header { margin-bottom: var(--space-32); text-align: left; }
  .s-04-title { max-width: 11em; }
  .s-04-board { grid-template-columns: minmax(0, 1fr); }
      /* Mobile polish: one 20px gutter, 16px photo corners, 15px reading copy. */
  .s-04-aporta { --s-04-gutter: var(--space-20); }
  .s-04-aporta .container, .s-04-aporta.s-04-animated .s-04-inner { width: calc(100% - 2 * var(--s-04-gutter)); }
  .s-04-photo { border-radius: var(--space-16); }
  .s-04-card-title { text-wrap: balance; }
  .s-04-aporta.s-04-animated .s-04-card-title { font-size: var(--type-title-size); line-height: var(--type-title-lh); }
  .s-04-aporta.s-04-animated .s-04-body { font-size: 15px; line-height: 1.4; }
  .s-04-aporta.s-04-animated .s-04-overview { font-size: 15px; gap: var(--space-4); }
  .s-04-aporta.s-04-animated .s-04-overview li { min-height: 24px; }
  .s-04-step, .s-04-skip { min-height: var(--globalnav-height); }
  /* Phone scene: the stage runs to 16px above the screen edge (photos keep far
     more than 56px); the list is the title, active in ink and the rest in grey. */
  .s-04-aporta { --s-04-safe-bottom: var(--space-16); }
  /* The heading is pinned inside the scene, so the stage starts under the nav. */
  .s-04-aporta.s-04-phone { --s-04-safe-top: var(--space-12); }
  .s-04-aporta.s-04-phone .s-04-header { position: absolute; left: 0; top: 0; width: 100%; margin: 0; z-index: 2; }
  .s-04-aporta.s-04-phone .s-04-photo::before { display: none; }
  .s-04-aporta.s-04-phone .s-04-eyebrow { margin-bottom: var(--space-4); }
  .s-04-aporta.s-04-phone .s-04-title { font-size: var(--type-headline-xl-size); line-height: var(--type-headline-xl-lh); letter-spacing: var(--type-headline-xl-ls); }
  .s-04-aporta.s-04-phone .s-04-photo--vivienda .s-04-image { aspect-ratio: 1; }
  .s-04-aporta.s-04-phone .s-04-photo--vivienda img { object-position: 50% 40%; }
  .s-04-aporta.s-04-phone .s-04-index,
  .s-04-aporta.s-04-phone .s-04-card-title { position: absolute; left: 0; top: 0; margin: 0; opacity: 0; pointer-events: none; }
  .s-04-aporta.s-04-phone .s-04-overview { gap: 0; font-size: 17px; line-height: 24px; letter-spacing: var(--type-body-ls); }
  .s-04-aporta.s-04-phone .s-04-overview li { min-height: 0; color: var(--color-text-secondary); }
  .s-04-header { margin-bottom: var(--space-24); }
  .s-04-aporta.s-04-animated.s-04-phone .s-04-controls,
  .s-04-aporta.s-04-animated.s-04-fanning.s-04-phone .s-04-controls { gap: var(--space-4); justify-content: space-between; flex-wrap: nowrap; }
  /* Captions keep the text column's width even when a short screen shrinks the photo. */
  .s-04-aporta.s-04-phone .s-04-photo-label { left: 50%; width: var(--s-04-cap-w); margin-left: calc(var(--s-04-cap-w) / -2); text-align: center; justify-content: center; }
  .s-04-aporta.s-04-phone .s-04-steps { gap: 0; }
  .s-04-aporta.s-04-phone[data-s-04-active="0"] .s-04-overview li:nth-child(1),
  .s-04-aporta.s-04-phone[data-s-04-active="1"] .s-04-overview li:nth-child(2),
  .s-04-aporta.s-04-phone[data-s-04-active="2"] .s-04-overview li:nth-child(3),
  .s-04-aporta.s-04-phone[data-s-04-active="3"] .s-04-overview li:nth-child(4) { color: var(--color-ink); font-weight: var(--font-weight-semibold); }
}
/* Short phones (320×640): a tighter list and controls on one line. */
@media (max-width: 734px) and (max-height: 700px) {
  .s-04-aporta.s-04-phone .s-04-overview { font-size: 15px; line-height: 20px; }
}
@media (max-width: 734px) and (max-height: 700px) {
  .s-04-aporta.s-04-short .s-04-photo .s-04-image { aspect-ratio: 4 / 3; }
  .s-04-aporta.s-04-short .s-04-photo--vivienda img { object-position: 50% 22%; }
  .s-04-aporta.s-04-short .s-04-photo--europa img { object-position: 100% 25%; }
}
@media (max-width: 359px) {
  .s-04-aporta.s-04-phone .s-04-skip svg { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .s-04-horizon { display: none; }
  .s-04-photo, .s-04-copy { transform: none !important; opacity: 1 !important; }
}
@media print {
  .s-04-card-title { -webkit-text-fill-color: #1d1d1f; }
  .s-04-horizon { display: none; }
  .s-04-aporta .s-04-controls { display: none !important; }
  .s-04-card { break-inside: avoid; }
}

/* ==== sections/05-conexiones ==== */
/* 05 · Eight verified encounters. The complete editorial list is the default. */
.s-05-conexiones { --s-05-photo-width: clamp(420px, 36vw, 560px); --s-05-globe-diameter: min(72svh, 46vw); --s-05-nav-clearance: 64px; --s-05-bottom-clearance: 56px; isolation: isolate; }
.s-05-stage { position: relative; height: auto; overflow: visible; }
.s-05-inner { position: relative; padding-block: var(--section-padding-story); }
.s-05-header { max-width: 1060px; }
.s-05-eyebrow { margin-bottom: var(--space-16); }
.s-05-title { max-width: 1060px; }
.s-05-intro { max-width: 692px; margin-top: var(--space-20); }
.s-05-world, .s-05-origin, .s-05-controls, .s-05-tunnel, .s-05-tunnel-backdrop, .s-05-finale { display: none; }
.s-05-stops { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--space-64) var(--space-32); margin-top: var(--space-64); }
.s-05-stop { min-width: 0; padding: 2px; }
.s-05-sede { color: var(--color-text-secondary); margin-bottom: var(--space-4); }
.s-05-city { letter-spacing: var(--type-headline-ls); }
.s-05-institution { color: var(--color-text-secondary); margin-top: var(--space-4); min-height: 40px; }
.s-05-figure { margin-top: var(--space-16); }
.s-05-photo { width: 100%; aspect-ratio: var(--s-05-photo-ratio, 4 / 5); background: var(--surface-1); }
.s-05-photo picture, .s-05-photo img { width: 100%; height: 100%; object-fit: cover; }
.s-05-photo--1 img { object-position: 46% 0%; transform: scale(1.1); transform-origin: 0 0; }
.s-05-photo--2 img { object-position: 51.5% 30%; }
.s-05-photo--4 { --s-05-photo-ratio: 4 / 3; }
.s-05-photo--4 img { object-position: 50% 0%; transform: none; }
.s-05-photo--6 img { object-position: 56.7% 35%; }
.s-05-photo--7 img { object-position: 59.5% 30%; }
.s-05-photo--8 { --s-05-photo-ratio: 4 / 3; }
.s-05-photo--8 img { object-position: 50% 0%; transform: none; }
.s-05-photo--9 img { object-position: 54.5% 40%; }
.s-05-photo--10 img { object-position: 46.6% 40%; filter: contrast(1.08) saturate(1.05); }
.s-05-caption { margin-top: var(--space-16); color: var(--color-text-secondary); text-wrap: pretty; }
.s-05-end { padding-bottom: var(--section-padding-story); }
.s-05-static-promise { max-width: 800px; margin-bottom: var(--space-48); }
.s-05-credit { color: var(--color-text-secondary); }

/* Shared scroll engine opts into the stage after checking available height. */
.s-05-enhanced { --s-05-photo-width: min(clamp(420px, 36vw, 560px), calc((100svh - 380px) * .8)); }
.s-05-enhanced .s-05-track { --s-05-timeline: 950svh; height: calc(var(--s-05-timeline) + var(--s-05-tail, 0px)); pointer-events: none; }
/* The scene's timeline keeps its original length; the tail after it holds the
   closing phrase while the next section rises beneath, then lets it go. */
.s-05-timeline, .s-05-probe { display: none; }
.s-05-enhanced .s-05-timeline { display: block; position: absolute; inset: 0 0 auto; height: var(--s-05-timeline); visibility: hidden; pointer-events: none; }
.s-05-enhanced .s-05-probe { display: block; position: absolute; top: -100svh; bottom: 0; left: 0; width: 1px; visibility: hidden; pointer-events: none; }
.s-05-enhanced.s-05-conexiones { z-index: 1; margin-bottom: calc(-1 * var(--s-05-tail, 0px)); background: transparent; pointer-events: none; }
.s-05-enhanced .s-05-stage { pointer-events: auto; }
.s-05-enhanced .s-05-stage { position: sticky; top: 0; height: 100svh; overflow: clip; clip-path: inset(0); isolation: isolate; background: var(--surface-0); }
/* Keep the standard translucent navigation over its original white backing. */
.s-05-enhanced .s-05-stage::after { content: ''; position: absolute; inset: 0 0 auto; height: var(--nav-h); background: var(--surface-0); z-index: 9; pointer-events: none; }
.s-05-enhanced .s-05-inner { height: 100%; padding-block: 0; }
.s-05-enhanced .s-05-header { position: absolute; top: calc(var(--nav-h) + var(--s-05-nav-clearance)); left: 0; width: 100%; z-index: 3; pointer-events: none; transform-origin: left top; }
.s-05-enhanced .s-05-intro { max-width: 650px; }
/* The canvas spans the whole stage; JS anchors the globe to the container's left edge. */
.s-05-enhanced .s-05-world { display: block; position: absolute; width: 100vw; height: 100%; left: calc((100% - 100vw) / 2); top: 0; }
.s-05-canvas { width: 100%; height: 100%; max-width: none; }
.s-05-enhanced .s-05-origin { display: grid; gap: var(--space-8); position: absolute; top: 53%; left: var(--s-05-panel-x, auto); right: auto; width: 200px; }
.s-05-origin-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--color-action); margin-bottom: var(--space-12); }
.s-05-origin > :first-of-type, .s-05-origin > :last-child { color: var(--color-text-secondary); }
.s-05-enhanced .s-05-stops { display: block; margin: 0; }
.s-05-enhanced .s-05-stop { position: absolute; left: var(--s-05-panel-x, auto); right: auto; top: 50%; width: var(--s-05-panel-w, var(--s-05-photo-width)); transform-origin: center; }
.s-05-enhanced .s-05-institution { display: none; }
/* Adapt width to the available height while retaining a true 4:5 photograph. */
.s-05-enhanced .s-05-stop .s-05-photo { height: auto; aspect-ratio: var(--s-05-photo-ratio, 4 / 5); }
.s-05-enhanced .s-05-figure { margin-top: var(--space-12); }
.s-05-enhanced .s-05-caption { margin-top: var(--space-12); }
.s-05-enhanced .s-05-controls { position: absolute; inset: auto 0 var(--s-05-bottom-clearance); display: flex; gap: var(--space-24); align-items: center; z-index: 8; background: var(--surface-0); border: 1px solid var(--color-hairline); border-radius: var(--radius-pill); padding-inline: var(--space-12); }
.s-05-controls[inert] { pointer-events: none; }
.s-05-position { min-width: 65px; }
.s-05-count { color: var(--color-ink); font-weight: var(--font-weight-semibold); }
.s-05-count-total { color: var(--color-text-secondary); }
.s-05-route { display: flex; gap: var(--space-4); align-items: center; }
.s-05-step { display: grid; place-items: center; width: 32px; height: 44px; }
.s-05-step::after { content: ''; width: 5px; height: 5px; border-radius: var(--radius-pill); background: var(--color-hairline); }
.s-05-step[aria-current="step"]::after { width: 24px; background: var(--color-action); }
.s-05-static { display: inline-flex; gap: var(--space-8); align-items: center; color: var(--color-link); margin-left: auto; min-height: 44px; }
.s-05-control-short { display: none; }
.s-05-static:hover { text-decoration: underline; text-underline-offset: 0.18em; }
.s-05-enhanced .s-05-static-promise { display: none; }
.s-05-enhanced .s-05-end { display: none; }

/* The outer sticky stage clips the scene. Keeping this inner volume unflattened
   lets each complete photograph occupy its own tilted plane in perspective. */
.s-05-enhanced .s-05-tunnel, .s-05-enhanced .s-05-tunnel-backdrop { display: block; position: absolute; inset: var(--nav-h) calc((100% - 100vw) / 2) 0; pointer-events: none; opacity: 0; }
.s-05-enhanced .s-05-tunnel-backdrop { background: #fff; z-index: 4; }
.s-05-enhanced .s-05-tunnel { perspective: 1200px; perspective-origin: 50% 50%; transform-style: preserve-3d; overflow: visible; z-index: 5; }
.s-05-flight { position: absolute; left: 50%; top: 50%; min-width: 0; min-height: 0; opacity: 0; backface-visibility: hidden; }
.s-05-flight[hidden] { display: none; }
.s-05-flight picture, .s-05-flight img { display: block; width: 100%; height: 100%; }
/* Corners come from the clip-path set per frame, so they stay true at every scale. */
.s-05-flight img { object-fit: cover; object-position: 50% 50%; transform: none; }
.s-05-enhanced .s-05-finale { display: grid; place-items: center; position: absolute; inset: 0; padding-block: calc(var(--nav-h) + var(--s-05-nav-clearance)) var(--s-05-bottom-clearance); overflow: clip; background: var(--surface-0); color: var(--color-ink); z-index: 7; clip-path: circle(0px at 50% 50%); }
.s-05-finale-photo { position: absolute; inset: calc(var(--nav-h) + var(--s-05-nav-clearance)) 90px 56px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-12); margin: 0; pointer-events: none; }
.s-05-finale-media { width: min(100%, calc((100svh - var(--nav-h) - var(--s-05-nav-clearance) - 56px - 64px) * 1536 / 1264)); aspect-ratio: 1536 / 1264; flex: 0 0 auto; overflow: hidden; border-radius: var(--radius-card); }
.s-05-finale-media picture, .s-05-finale-media img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center; }
.s-05-finale-credit { display: block; margin-top: var(--space-4); }
.s-05-finale-caption { max-width: 100%; font-size: var(--type-caption-size); line-height: var(--type-caption-lh); color: var(--color-text-secondary); text-align: center; text-wrap: pretty; }
.s-05-finale-inner { position: relative; width: var(--content-width); max-width: var(--content-max); text-align: center; }
.s-05-home { color: var(--color-text-secondary); margin-bottom: var(--space-32); }
.s-05-promise { font-size: clamp(56px, 8vw, 120px); line-height: 1.05; letter-spacing: -.03em; }
.s-05-promise-line { display: block; width: fit-content; position: relative; margin-inline: auto; }
.s-05-promise-last { color: var(--color-link); }
.s-05-beam { display: block; position: absolute; width: 2px; top: 9%; bottom: 0; left: 0; background: var(--color-link); }
.s-05-again { display: inline-flex; align-items: center; gap: var(--space-8); color: var(--color-link); margin-top: var(--space-48); min-height: 44px; }

@media (min-width: 735px) and (max-width: 1068px) {
  .s-05-conexiones { --s-05-photo-width: clamp(300px, 40vw, 420px); }
  .s-05-enhanced { --s-05-photo-width: min(clamp(300px, 36vw, 420px), calc((100svh - 400px) * .8)); }
  .s-05-enhanced .s-05-city { font-size: var(--type-card-title-size); line-height: var(--type-card-title-lh); }
}
@media (max-width: 1068px) {
  .s-05-stops { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .s-05-step { width: 28px; }
}
@media (max-width: 734px) {
  .s-05-conexiones, .s-05-enhanced { --s-05-photo-width: 100%; --s-05-globe-diameter: min(44svh, 86vw); --s-05-nav-clearance: 64px; }
  .s-05-stops { grid-template-columns: minmax(0, 1fr); gap: var(--space-48); }
  .s-05-stop { max-width: 360px; margin-inline: auto; }
  .s-05-title { font-size: var(--type-section-size); line-height: var(--type-section-lh); }
  .s-05-intro { font-size: var(--type-body-size); line-height: var(--type-body-lh); }
  .s-05-enhanced .s-05-track { --s-05-timeline: 1000svh; }
  .s-05-enhanced .s-05-eyebrow { font-size: var(--type-small-size); margin-bottom: var(--space-12); }
  .s-05-enhanced .s-05-intro { margin-top: var(--space-12); }
  .s-05-enhanced .s-05-origin { top: 70%; left: 0; right: auto; width: 100%; justify-items: center; text-align: center; }
  .s-05-origin-dot { margin-bottom: var(--space-4); }
  /* Portrait encounter card: the photograph spans the column, then the place,
     the name and the caption beneath it. Text never sits on the photograph. */
  .s-05-enhanced .s-05-stop { top: 46svh; left: 0; right: 0; width: 100%; max-width: none; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto; row-gap: var(--space-8); align-items: start; }
  .s-05-enhanced .s-05-stop[hidden] { display: none; }
  .s-05-enhanced .s-05-location { grid-row: 2; text-align: left; margin-top: var(--space-4); }
  .s-05-enhanced .s-05-city { font-size: 28px; line-height: 32px; }
  .s-05-enhanced .s-05-institution { display: none; }
  .s-05-enhanced .s-05-sede { font-size: var(--type-caption-size); line-height: 16px; margin-bottom: 2px; }
  .s-05-enhanced .s-05-figure { display: contents; }
  .s-05-enhanced .s-05-stop .s-05-photo { grid-row: 1; width: 100%; height: auto; aspect-ratio: 3 / 2; margin: 0; border-radius: var(--space-16); }
  .s-05-enhanced .s-05-stop .s-05-photo img { object-position: 50% var(--s-05-face-y, 24%); transform: none; }
  .s-05-enhanced .s-05-caption { grid-row: 3; max-width: none; margin: 0; font-size: var(--type-small-size); line-height: 20px; text-align: left; align-self: start; }
  .s-05-enhanced .s-05-controls { gap: var(--space-12); flex-wrap: nowrap; justify-content: space-between; }
  .s-05-position { min-width: 42px; font-size: var(--type-caption-size); }
  .s-05-route { gap: 0; flex: 1; min-width: 0; }
  .s-05-step { width: auto; flex: 1; min-width: 0; }
  .s-05-step[aria-current="step"]::after { width: 16px; }
  .s-05-static { font-size: var(--type-caption-size); min-height: 44px; flex: 0 0 auto; margin: 0; }
  .s-05-static svg, .s-05-control-full { display: none; }
  .s-05-control-short { display: inline; }
  .s-05-finale-photo { inset-inline: var(--space-24); }
  .s-05-finale-media { width: min(100%, calc((100svh - var(--nav-h) - var(--s-05-nav-clearance) - 56px - 96px) * .8)); aspect-ratio: 4 / 5; }
  .s-05-finale-media img { object-position: 45% 40%; }
  .s-05-home { margin-bottom: var(--space-24); }
}
@media (min-width: 735px) and (max-height: 800px) {
  .s-05-enhanced { --s-05-photo-width: min(clamp(300px, 36vw, 420px), calc((100svh - 400px) * .8)); }
  .s-05-enhanced .s-05-city { font-size: var(--type-title-size); line-height: var(--type-title-lh); }
  .s-05-enhanced .s-05-institution { display: none; }
  .s-05-enhanced .s-05-figure { margin-top: var(--space-12); }
}
@media print {
  .s-05-eyebrow, .s-05-intro { opacity: 1 !important; }
  .s-05-enhanced .s-05-track { height: auto; }
  .s-05-enhanced .s-05-stage { position: static; height: auto; overflow: visible; clip-path: none; isolation: auto; }
  .s-05-enhanced .s-05-stage::after { display: none; }
  .s-05-enhanced .s-05-header, .s-05-enhanced .s-05-stop { position: static; width: auto; opacity: 1 !important; transform: none !important; clip-path: none !important; }
  .s-05-enhanced .s-05-stops { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-32); margin-top: var(--space-32); }
  .s-05-enhanced .s-05-stop[hidden] { display: block !important; }
  .s-05-enhanced .s-05-inner { padding-block: var(--space-32); }
  .s-05-enhanced .s-05-stop .s-05-photo { width: 100%; height: auto; aspect-ratio: var(--s-05-photo-ratio, 4 / 5); clip-path: none !important; }
  .s-05-enhanced .s-05-stop { display: block; }
  .s-05-enhanced .s-05-figure { display: block; }
  .s-05-world, .s-05-origin, .s-05-controls, .s-05-tunnel, .s-05-tunnel-backdrop, .s-05-finale { display: none !important; }
}

/* ==== sections/06-cercania ==== */
/* 06 · Editorial bento: two rows of four photographs, alternating wide and narrow.
   In each row one photo sets the height by its ratio; the other fills it, so both
   frames and both captions line up (subgrid). */
.s-06-cercania { --s-06-photo-radius: var(--radius-card); --s-06-gutter: var(--space-24); isolation: isolate; }
.s-06-track { position: absolute; top: -100vh; right: 0; bottom: 0; left: 0; pointer-events: none; }
.s-06-header { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--s-06-gutter); align-items: end; margin-bottom: var(--space-80); }
.s-06-heading { grid-column: 1 / 7; min-width: 0; }
.s-06-eyebrow { margin-bottom: var(--space-20); }
.s-06-title { max-width: 8em; text-wrap: balance; }
.s-06-intro { grid-column: 8 / 13; color: var(--color-text-secondary); text-wrap: pretty; }
.s-06-grid { display: grid; gap: var(--space-64); }
.s-06-row { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); grid-template-rows: auto auto; column-gap: var(--s-06-gutter); }
.s-06-card { min-width: 0; position: relative; grid-row: span 2; display: grid; grid-template-rows: subgrid; row-gap: var(--space-16); margin: 0; }
.s-06-card--b { grid-column: 1 / 8; }
.s-06-card--e { grid-column: 8 / 13; }
.s-06-card--c { grid-column: 1 / 5; }
.s-06-card--g { grid-column: 5 / 13; }
.s-06-visual { position: relative; min-width: 0; min-height: 0; border-radius: var(--s-06-photo-radius); isolation: isolate; }
.s-06-visual::before { content: ""; position: absolute; inset: 0; border: var(--space-8) solid var(--color-link); border-radius: inherit; filter: blur(var(--space-8)); opacity: 0.05; pointer-events: none; }
.s-06-crop { position: relative; z-index: 1; border-radius: inherit; }
.s-06-photo { display: block; width: 100%; height: 100%; }
.s-06-photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
/* The leading photo of each row sets its height... */
.s-06-card--e .s-06-crop { aspect-ratio: 8 / 7; }
.s-06-card--g .s-06-crop { aspect-ratio: 4 / 3; }
/* ...and its partner fills it without adding height of its own. */
.s-06-card--fill .s-06-visual, .s-06-card--fill .s-06-crop { height: 100%; }
.s-06-card--fill .s-06-photo { position: absolute; inset: 0; }
/* Crops: every face whole. ECOSOC keeps the officer's face inside the frame. */
.s-06-card--b .s-06-photo img { object-position: 60% 78%; }
.s-06-card--e .s-06-photo img { object-position: 30% 50%; }
.s-06-card--c .s-06-photo img { object-position: 45% 0%; }
.s-06-card--g .s-06-photo img { object-position: 50% 60%; }
.s-06-caption { color: var(--color-text-secondary); padding-inline: var(--space-4); max-width: 46em; text-wrap: pretty; }
/* The credit sits right under the last photo; no empty cushion closes the section. */
.s-06-cercania { padding-bottom: var(--space-64); }
.s-06-credit { color: var(--color-text-secondary); margin-top: var(--space-16); }

@media (max-width: 1068px) {
  .s-06-heading { grid-column: 1 / -1; }
  .s-06-intro { grid-column: 1 / 10; margin-top: var(--space-24); }
}
@media (max-width: 734px) {
  .s-06-header { display: block; margin-bottom: var(--space-48); }
  .s-06-title { font-size: var(--type-hero-size); line-height: var(--type-hero-lh); letter-spacing: var(--type-hero-ls); }
  .s-06-eyebrow { margin-bottom: var(--space-16); }
  .s-06-grid { gap: var(--space-40); }
  .s-06-row { display: contents; }
  .s-06-card { grid-column: auto; grid-row: auto; grid-template-rows: auto auto; row-gap: var(--space-12); }
  .s-06-card--fill .s-06-visual, .s-06-card--fill .s-06-crop { height: auto; }
  .s-06-card--fill .s-06-photo { position: static; }
  .s-06-card--b .s-06-crop { aspect-ratio: 3 / 2; }
  .s-06-card--c .s-06-crop { aspect-ratio: 2 / 3; }
  .s-06-card--e .s-06-crop { aspect-ratio: 1; }
  .s-06-card--g .s-06-crop { aspect-ratio: 4 / 3; }
  .s-06-caption { padding-inline: 0; }
  /* Mobile polish: 20px gutter, 16px corners, no portrait taller than 4:5. */
  .s-06-cercania { --s-06-photo-radius: var(--space-16); }
  .s-06-container { width: calc(100% - var(--space-40)); }
  .s-06-title { text-wrap: balance; }
  .s-06-card--c .s-06-crop { aspect-ratio: 4 / 5; }
  .s-06-card--c .s-06-photo img { object-position: 45% 30%; }
}
@media (prefers-reduced-motion: reduce) {
  .s-06-card { opacity: 1 !important; transform: none !important; }
  .s-06-visual { clip-path: none !important; }
}
@media print {
  .s-06-track { display: none; }
  .s-06-row { display: contents; }
  .s-06-grid { grid-template-columns: minmax(0, 1fr); gap: var(--space-24); }
  .s-06-card { grid-column: auto; grid-row: auto; grid-template-rows: auto auto; opacity: 1 !important; transform: none !important; break-inside: avoid; }
  .s-06-card--fill .s-06-photo { position: static; }
  .s-06-card--fill .s-06-crop { aspect-ratio: 4 / 3; height: auto; }
  .s-06-visual { clip-path: none !important; }
  .s-06-visual::before { display: none; }
}

/* ==== sections/07-medios ==== */
/* 07 · press. An open editorial list; each halo inherits its row contour. */
/* integrar.sh renames the root class to .s-07-medios in the fragment only, so the root selector names both. */
:is(.s-07-propuestas, .s-07-medios) { isolation: isolate; padding-top: var(--space-48); }
/* 07→08: no own background; the page white and the 08's fixed black layer show through, with no seam. */
:is(.s-07-propuestas, .s-07-medios) { background: transparent; }
/* 07→08: the 08 publishes --cl on :root (0 white, 1 black); the list's ink lightens with the blackout.
   The swap is compressed into --cl 0.3-0.7 so text spends little time grey on grey. */
:is(.s-07-propuestas, .s-07-medios) { --s-07-k: clamp(0%, calc((0.7 - var(--cl, 0)) * 250%), 100%); --s-07-ink: color-mix(in srgb, var(--color-ink) var(--s-07-k), var(--color-on-dark)); --s-07-black: color-mix(in srgb, var(--color-black) var(--s-07-k), var(--color-on-dark)); --s-07-muted: color-mix(in srgb, var(--color-text-secondary) var(--s-07-k), var(--color-steel)); --s-07-link: color-mix(in srgb, var(--color-link) var(--s-07-k), var(--color-link-on-dark)); --s-07-line: color-mix(in srgb, var(--color-hairline) var(--s-07-k), var(--color-text-secondary-alt)); color: var(--s-07-ink); }
.s-07-title { color: var(--s-07-ink); }
.s-07-anchor { position: absolute; top: 0; left: 0; width: 1px; height: 1px; pointer-events: none; }
/* Base contributes nav + 12px; internal hashes/focus keep another 52px. */
:is(.s-07-propuestas, .s-07-medios) [id]:not(.s-07-anchor), .s-07-row { scroll-margin-top: var(--space-52); }
.s-07-header { gap: var(--space-20); margin-bottom: var(--space-76); }
.s-07-eyebrow { color: var(--s-07-muted); }
.s-07-title { max-width: 18ch; text-wrap: balance; }
.s-07-item { position: relative; }
.s-07-item::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: var(--s-07-line); transform-origin: left center; transform: scaleX(var(--s-07-rule, 1)); }
.s-07-item:last-child::after { content: ""; position: absolute; bottom: 0; left: 0; right: 0; height: 1px; background: var(--s-07-line); transform-origin: left center; transform: scaleX(var(--s-07-rule-end, 1)); transition: opacity var(--dur-base) var(--ease-house); }
/* The halo replaces the rules it touches, so the row reads as one lifted surface. */
.s-07-item::before { transition: opacity var(--dur-base) var(--ease-house); }
.s-07-item:hover::before, .s-07-item:hover + .s-07-item::before, .s-07-item:focus-within::before, .s-07-item:focus-within + .s-07-item::before { opacity: 0; }
.s-07-item:last-child:hover::after, .s-07-item:last-child:focus-within::after { opacity: 0; }
/* DVB.progress(track) runs from 0 to 1 as this row moves from 90vh to 65vh. */
.s-07-track { position: absolute; top: -90vh; left: 0; width: 1px; height: 125vh; pointer-events: none; visibility: hidden; }
.s-07-row { position: relative; isolation: isolate; display: grid; grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.55fr) auto; align-items: start; gap: var(--space-48); padding-block: var(--space-48); min-width: 0; border-radius: var(--radius-nav-float); color: var(--s-07-ink); text-decoration: none; }
.s-07-row::before { content: ""; position: absolute; z-index: -1; inset: 0 calc(-1 * var(--space-28)); transition: opacity var(--dur-base) var(--ease-house); border-radius: inherit; background: var(--color-black); opacity: 0; pointer-events: none; }
.s-07-row:hover { text-decoration: none; }
.s-07-row:hover::before, .s-07-row:focus-visible::before { opacity: 0.04; }
.s-07-row:focus-visible { outline-offset: var(--space-4); }
.s-07-source { min-width: 0; transform: translate3d(0, var(--s-07-rise, 0px), 0); opacity: var(--s-07-opacity, 1); }
.s-07-medium { max-width: 13ch; font-family: var(--font-display); font-size: clamp(var(--space-40), 4.4vw, var(--space-64)); font-weight: var(--font-weight-medium); line-height: var(--type-hero-lh); letter-spacing: -0.025em; color: var(--s-07-black); text-wrap: balance; }
.s-07-date { margin-top: var(--space-16); color: var(--s-07-muted); }
.s-07-headline { max-width: 34ch; padding-top: var(--space-8); font-size: var(--space-28); font-weight: var(--font-weight-medium); line-height: var(--type-title-lh); color: var(--s-07-ink); text-wrap: pretty; }
.s-07-read { display: inline-flex; align-items: center; padding-top: var(--space-4); font-size: var(--type-body-size); line-height: var(--type-body-lh); font-weight: var(--font-weight-medium); color: var(--s-07-link); white-space: nowrap; }
.s-07-read-content { display: inline-flex; align-items: center; gap: var(--space-8); transition: transform var(--dur-base) var(--ease-house); }
.s-07-arrow { width: var(--space-24); height: var(--space-24); flex: none; }
.s-07-row:hover .s-07-read-content, .s-07-row:focus-visible .s-07-read-content { transform: translate3d(var(--space-4), 0, 0); }
@media (max-width: 1068px) {
  .s-07-row { column-gap: var(--space-32); }
}
@media (max-width: 734px) {
  :is(.s-07-propuestas, .s-07-medios) [id]:not(.s-07-anchor), .s-07-row { scroll-margin-top: var(--space-28); }
  :is(.s-07-propuestas, .s-07-medios) { padding-top: var(--space-32); }
  .s-07-header { margin-bottom: var(--space-48); }
  .s-07-title { font-size: var(--type-hero-size); line-height: var(--type-hero-lh); letter-spacing: var(--type-hero-ls); max-width: 12ch; }
  .s-07-row { grid-template-columns: minmax(0, 1fr); gap: var(--space-24); padding-block: var(--space-32); }
  .s-07-medium { max-width: none; text-wrap: pretty; }
  .s-07-date { margin-top: var(--space-8); }
  .s-07-headline { max-width: none; padding-top: 0; font-size: var(--type-title-size); }
  .s-07-row::before { inset: 0 calc(-1 * var(--space-12)); }
  .s-07-read { padding-top: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .s-07-item::before, .s-07-item:last-child::after { transform: scaleX(1) !important; }
  .s-07-source, .s-07-headline, .s-07-read { transform: none !important; opacity: 1 !important; }
  .s-07-row::before { opacity: 0; transition: none; }
  .s-07-read-content { transition: none; transform: none !important; }
}
@media print {
  .s-07-item::before, .s-07-item:last-child::after { transform: scaleX(1) !important; }
  .s-07-source, .s-07-headline, .s-07-read { transform: none !important; opacity: 1 !important; }
  .s-07-read-content { transform: none !important; }
  .s-07-row::before, .s-07-track { display: none; }
  .s-07-item { break-inside: avoid; }
}

/* ==== sections/08-cierre ==== */
/* 08 · The whole surface darkens before the closing composition enters. */
.s-08-cierre {
  padding: 0;
  background: var(--surface-dark);
  color: var(--color-on-dark);
}
.s-08-anchor { position: absolute; inset: 0 auto auto 0; }
.s-08-stage { position: relative; min-height: 100svh; isolation: isolate; }
.s-08-layout {
  min-height: 100svh;
  display: grid;
  grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);
  align-items: center;
  column-gap: var(--space-64);
  padding-block: calc(var(--nav-h) + var(--space-64)) calc(var(--space-28) * 2);
}
.s-08-copy { position: relative; grid-column: 1; min-width: 0; }
.s-08-eyebrow { margin-bottom: var(--space-24); }
.s-08-title { margin: 0; font-size: clamp(44px, 4.8vw, 72px); line-height: 1.05; }
.s-08-line { display: block; }
.s-08-message {
  max-width: 19em;
  margin-top: var(--space-32);
  font-weight: var(--font-weight-medium);
  line-height: var(--type-intro-lh);
  text-wrap: pretty;
  opacity: .86;
}
.s-08-purpose {
  margin-top: var(--space-24);
  color: inherit;
  opacity: .86;
}
.s-08-quote {
  font-family: var(--font-display);
  font-size: var(--space-28);
  font-weight: var(--font-weight-regular);
  line-height: var(--type-title-lh);
  text-wrap: pretty;
  overflow-wrap: break-word;
}
.s-08-author { margin-top: var(--space-12); }
.s-08-portrait {
  position: relative;
  width: min(100%, calc((100svh - var(--nav-h) - var(--space-64) - var(--space-28) * 2 - var(--space-64)) * .8));
  max-width: calc(var(--space-224) * 2.5);
  min-width: 0;
  justify-self: end;
}
.s-08-photo-frame {
  position: relative;
  z-index: 3;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--radius-card);
}
.s-08-image { display: block; width: 100%; height: 100%; }
.s-08-image img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 30%;
  /* The left-biased origin keeps all eight faces inside this tighter crop. */
  transform: scale(1.17);
  transform-origin: 40% 0;
}
.s-08-caption {
  margin-top: var(--space-12);
  color: inherit;
  text-wrap: pretty;
}
.s-08-actions { display: flex; margin-top: var(--space-32); }
.s-08-contact { position: relative; z-index: 4; min-height: var(--globalnav-height); gap: var(--space-12); }
.s-08-contact svg { width: var(--space-20); height: var(--space-20); }
.s-08-press { position: relative; z-index: 4; display: inline-flex; align-items: center; gap: var(--space-8); min-height: var(--globalnav-height); margin-top: var(--space-8); padding-inline: var(--space-16); border: 1px solid var(--color-hairline); border-radius: var(--radius-pill); color: var(--color-ink); background: var(--surface-0); }
.s-08-press svg { width: var(--space-16); height: var(--space-16); }
.s-08-skip { position: absolute; left: calc((100% - min(var(--content-width), var(--content-max))) / 2); bottom: var(--space-8); z-index: 4; display: inline-flex; gap: var(--space-8); align-items: center; min-height: var(--globalnav-height); color: inherit; opacity: 0; pointer-events: none; }
.s-08-skip:focus-visible { opacity: 1; pointer-events: auto; background: var(--surface-dark); color: var(--color-on-dark); padding-inline: var(--space-12); }
.s-08-skip svg { width: var(--space-16); height: var(--space-16); }
/* Live scene: the whole screen goes dark at once. A fixed layer under every
   section (z-index -1) takes opacity = --s-08-night; this section turns
   transparent so the layer shows through it, and the same value is published
   as --cl on :root for the section above. The copy only enters on full contrast. */
.s-08-live {
  --s-08-night: 0;
  --s-08-photo: 0;
  --s-08-cap: 0;
  height: 240svh;
  background: transparent;
}
.s-08-live .s-08-stage { position: sticky; top: 0; height: 100svh; }
.s-08-live .s-08-layout { position: relative; z-index: 2; height: 100%; min-height: 0; }
.s-08-night { display: none; }
.s-08-live .s-08-night {
  display: block;
  position: fixed;
  inset: 0;
  z-index: -1;
  background: var(--surface-dark);
  opacity: var(--s-08-night);
  pointer-events: none;
}
.s-08-live .s-08-rise {
  --r: 0;
  opacity: var(--r);
  transform: translate3d(0, calc((1 - var(--r)) * var(--space-32)), 0);
}
.s-08-live .s-08-message { opacity: calc(var(--r) * .86); }
.s-08-live .s-08-purpose { opacity: calc(var(--r) * .86); }
/* Portrait on its own plane: it fades and scales in whole, only once the
   screen is past half dark, so it never floats as a ghost on the white. */
.s-08-live .s-08-portrait { z-index: 3; }
.s-08-live .s-08-photo-frame { opacity: var(--s-08-photo); transform: scale(calc(.92 + var(--s-08-photo) * .08)); transform-origin: 50% 60%; }
.s-08-live .s-08-caption { opacity: var(--s-08-cap); }
/* Tall content (phones): no pinned stage; the screen darkens while the
   section scrolls in and is fully dark before its top reaches the navigation. */
.s-08-flow { height: auto; }
.s-08-flow .s-08-stage { position: relative; height: auto; }
.s-08-flow .s-08-layout { height: auto; min-height: 100svh; }
.s-08-static { height: auto; background: var(--surface-dark); color: var(--color-on-dark); }
.s-08-static .s-08-stage { position: relative; height: auto; }
.s-08-static .s-08-layout { height: auto; min-height: 100svh; }
.s-08-static .s-08-night { display: none; }
@media (max-width: 1068px) {
  .s-08-layout { column-gap: var(--space-48); }
}
@media (max-width: 734px) {
  .s-08-layout { grid-template-columns: minmax(0, 1fr); align-content: center; justify-items: start; row-gap: var(--space-24); padding-block: calc(var(--nav-h) + var(--space-64)) calc(var(--space-28) * 2); }
  .s-08-eyebrow { margin-bottom: var(--space-16); }
  .s-08-title { font-size: clamp(var(--type-headline-size), 12vw, var(--type-hero-size)); }
  .s-08-message { max-width: 17em; margin-top: var(--space-20); }
  .s-08-portrait { width: 100%; max-width: none; justify-self: center; }
  .s-08-cierre:has(.s-08-actions, .s-08-press) .s-08-layout { row-gap: var(--space-20); }
}
@media (prefers-reduced-motion: reduce) {
  .s-08-cierre { height: auto; background: var(--surface-dark); color: var(--color-on-dark); }
  .s-08-cierre .s-08-stage { position: relative; height: auto; }
  .s-08-cierre .s-08-layout { min-height: 100svh; }
  .s-08-cierre .s-08-night { display: none; }
}
@media print {
  .s-08-cierre { height: auto; background: var(--surface-dark); }
  .s-08-cierre .s-08-night { display: none; }
  .s-08-cierre .s-08-stage { position: static; height: auto; min-height: 0; }
  .s-08-cierre .s-08-layout { min-height: 0; height: auto; padding-block: var(--space-32); }
  .s-08-cierre .s-08-skip { display: none; }
}

/* Harvey 30-oct («Esto muy grande»): cierre más contenido. */
.s-08-quote { font-size: clamp(18px, 1.6vw, 24px) !important; line-height: 1.4 !important; }

/* Owner 30-oct: «Es el momento…» on one line on desktop, two balanced lines on phones;
   the phrase and the quote carry a soft on-dark gradient (white → a faint steel blue),
   like Apple's Pro headlines. */
.s-08-cierre {
  --s-08-steel: color-mix(in srgb, var(--color-on-dark) 40%, color-mix(in srgb, var(--color-steel) 80%, var(--color-link-on-dark)));
  --s-08-grad: linear-gradient(100deg, var(--color-on-dark) 0%, var(--color-on-dark) 18%, var(--s-08-steel) 100%);
}
.s-08-message { max-width: none; white-space: nowrap; }
.s-08-message, .s-08-quote p {
  background-image: var(--s-08-grad);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}
.s-08-quote { width: fit-content; max-width: 32em; }
@media (max-width: 1068px) {
  .s-08-message { white-space: normal; max-width: 19em; text-wrap: balance; }
}
@media (max-width: 734px) {
  .s-08-message { max-width: 17em; }
}
@media (forced-colors: active) {
  .s-08-message, .s-08-quote p { -webkit-text-fill-color: currentColor; color: CanvasText; background: none; }
}
/* A menu link to #contacto lands where the closing copy is complete (pinned track). */
.s-08-live:not(.s-08-flow) .s-08-anchor { top: calc(80svh + var(--nav-h) + 12px); }

/* ==== sections/99-pie ==== */
.s-99-pie {
  background: var(--surface-dark);
  color: var(--color-steel);
  border: 0;
  padding-block: var(--space-64) var(--space-32);
}

/* Dividers belong to the content width, never to the viewport edge. */
.s-99-pie::before, .s-99-pie::after { content: none; }

.s-99-inner {
  position: relative;
  width: var(--content-width);
  max-width: var(--content-max);
  padding-top: var(--space-32);
}

/* The signature line: drawn left to right as the footer arrives (--s-99-line). */
.s-99-inner::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: var(--btn-border);
  background: var(--color-text-secondary-alt);
  transform-origin: left center;
  transform: scaleX(var(--s-99-line, 1));
}

/* Columns rise in cascade after the line (--s-99-step per item, set by JS). */
.s-99-step {
  opacity: var(--s-99-step, 1);
  transform: translate3d(0, calc((1 - var(--s-99-step, 1)) * var(--space-16)), 0);
}

.s-99-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-20) var(--space-48);
  padding-bottom: var(--space-32);
}

.s-99-brand {
  color: var(--color-on-dark);
  font-family: var(--font-display);
  font-size: var(--type-eyebrow-size);
  line-height: var(--type-eyebrow-lh);
  letter-spacing: var(--type-eyebrow-ls);
  font-weight: var(--font-weight-semibold);
}

.s-99-brand-note {
  color: var(--color-steel);
  font-family: var(--font-text);
  font-size: var(--type-small-size);
  line-height: var(--type-small-lh);
  letter-spacing: var(--type-small-ls);
  font-weight: var(--font-weight-regular);
  white-space: nowrap;
}

.s-99-socials {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-8) var(--space-32);
}

.s-99-pie .s-99-social {
  display: inline-flex;
  align-items: center;
  gap: var(--space-8);
  min-height: var(--globalnav-height);
  color: var(--color-on-dark);
  font-size: var(--type-small-size);
  line-height: var(--type-small-lh);
  letter-spacing: var(--type-small-ls);
}

.s-99-social:hover {
  color: var(--color-link-on-dark);
  text-decoration: none;
}

.s-99-social:hover span {
  text-decoration: underline;
  text-underline-offset: .2em;
}

.s-99-network-icon {
  flex: 0 0 var(--space-20);
  width: var(--space-20);
  height: var(--space-20);
}

.s-99-arrow {
  flex: 0 0 var(--space-12);
  width: var(--space-12);
  height: var(--space-12);
  color: var(--color-steel);
}

.s-99-contact {
  margin-bottom: var(--space-16);
  overflow-wrap: anywhere;
}

.s-99-pie .s-99-contact-link {
  color: var(--color-on-dark);
}

.s-99-legal {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0 var(--space-32);
  border-top: var(--btn-border) solid var(--color-ink);
  padding-block: var(--space-12) var(--space-24);
}

.s-99-disclosure {
  min-width: 0;
}

.s-99-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-16);
  min-height: var(--globalnav-height);
  color: var(--color-on-dark);
  cursor: pointer;
  list-style: none;
}

.s-99-summary::-webkit-details-marker {
  display: none;
}

.s-99-summary::marker {
  content: "";
}

.s-99-summary:hover {
  color: var(--color-link-on-dark);
}

.s-99-toggle {
  flex: 0 0 var(--space-12);
  width: var(--space-12);
  height: var(--space-12);
  color: var(--color-steel);
  transition: transform var(--dur-fast) var(--ease-standard);
}

.s-99-disclosure[open] .s-99-toggle {
  transform: rotate(45deg);
}

.s-99-detail {
  color: var(--color-steel);
  padding-block: var(--space-8) var(--space-20);
  font-size: var(--type-small-size);
  line-height: var(--type-small-lh);
  letter-spacing: var(--type-small-ls);
  overflow-wrap: anywhere;
}

.s-99-detail p + p {
  margin-top: var(--space-12);
}

.s-99-version {
  max-width: 100%;
  font-size: var(--type-caption-size);
  line-height: var(--type-caption-lh);
  letter-spacing: var(--type-caption-ls);
  text-wrap: pretty;
}

.s-99-pie :focus-visible {
  outline: var(--focus-ring);
  outline-offset: var(--focus-offset);
  border-radius: var(--radius-button-block);
}

@media (max-width: 734px) {
  .s-99-pie {
    padding-block: var(--space-40) var(--space-28);
  }

  .s-99-top {
    align-items: flex-start;
    flex-direction: column;
    gap: var(--space-12);
    padding-bottom: var(--space-20);
  }

  .s-99-socials {
    column-gap: var(--space-24);
  }

  .s-99-legal {
    grid-template-columns: minmax(0, 1fr);
    padding-block: var(--space-8) var(--space-20);
  }

  .s-99-disclosure + .s-99-disclosure {
    border-top: var(--btn-border) solid var(--color-ink);
  }
}

@media (prefers-reduced-motion: reduce) {
  .s-99-toggle {
    transition: none;
  }
}

.s-99-consent {
  width: 100%;
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  text-align: left;
}

@media (min-width: 735px) and (max-width: 1068px) {
  .s-99-legal {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 734px) {
  .s-99-legal > * + * {
    border-top: var(--btn-border) solid var(--color-ink);
  }
}

.s-99-legal a.s-99-summary,
.s-99-legal button.s-99-summary {
  color: var(--color-on-dark);
  text-decoration: none;
}

.s-99-legal a.s-99-summary:hover,
.s-99-legal button.s-99-summary:hover {
  color: var(--color-link-on-dark);
}
