/* ==========================================================================
   Plunk.io — warm-editorial design system (see MAIN-DESIGN.md)
   Cream canvas · oversized radii · circular-portrait constellation ·
   floating pill nav · ink-black CTAs · Sofia Sans.
   ========================================================================== */

/* ---- Tokens ------------------------------------------------------------- */
:root {
    /* Surfaces */
    --canvas: #F3F0EE;        /* warm putty canvas — never pure white */
    --lifted: #FCFBFA;        /* paper-on-paper raised sections */
    --white: #FFFFFF;
    --ink: #141413;           /* warm near-black: CTAs, headings, footer */
    --charcoal: #262627;
    --slate: #696969;         /* muted secondary text */
    --dust: #D1CDC7;          /* whisper text / hairlines */
    --ghost: #E8E2DA;         /* cream-on-cream watermark headlines */

    /* Accent — SWITCHABLE. Default = doc orange.
       Alternative = Digital auburn via <html data-accent="auburn">. */
    --accent: #CF4500;        /* Signal Orange */
    --accent-light: #F37338;  /* Light Signal Orange — arcs, indicators */

    /* Type */
    --font: 'Sofia Sans', -apple-system, 'Helvetica Neue', Helvetica, Arial, sans-serif;

    /* Radii — small / button / hero-stadium / pill */
    --r-sm: 6px;
    --r-btn: 20px;
    --r-stadium: 40px;
    --r-pill: 999px;

    /* Spacing (8px base) */
    --s-2: 8px;  --s-3: 16px; --s-4: 24px; --s-5: 32px;
    --s-6: 48px; --s-7: 64px; --s-8: 96px; --s-9: 128px;

    /* Elevation — atmospheric, never hard */
    --shadow-nav: rgba(0, 0, 0, 0.04) 0px 4px 24px 0px;
    --shadow-lift: rgba(0, 0, 0, 0.08) 0px 24px 48px 0px;

    --container: 1280px;
    --gutter: 48px;
}

:root[data-accent="auburn"] {
    --accent: #b85c3f;        /* Digital auburn */
    --accent-light: #cf7a5c;
}

/* ---- Base --------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    min-height: 100vh;
    overflow-x: clip;   /* guard against stray horizontal overflow (decorative
                           bleed, long headings) on mobile — clip is sticky-safe */
    font-family: var(--font);
    font-weight: 450;
    font-size: 16px;
    line-height: 1.4;
    color: var(--ink);
    background: var(--canvas);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}

h1, h2, h3 { margin: 0; font-weight: 500; letter-spacing: -0.02em; }
h1, .h1-scale { font-size: clamp(40px, 6vw, 72px); line-height: 1.0; }
/* Visual H1 scale without claiming the H1 semantic — for section headlines
   that read at hero size but aren't the document's top-level heading. */
.h1-scale { white-space: normal; }   /* wrap freely — nowrap ran headings off-screen on mobile */
h2 { font-size: clamp(30px, 4vw, 56px); line-height: 1.12; }
h3 { font-size: 24px; line-height: 1.2; }
p { margin: 0; }

a { color: inherit; text-decoration: none; }

img { display: block; max-width: 100%; }

.container {
    width: 100%;
    max-width: var(--container);
    margin-inline: auto;
    padding-inline: var(--gutter);
}

main { margin-bottom: 64px; }
.section { padding-block: clamp(64px, 11vw, 64px); }
.section.constellation { padding-top: 192px; }
.section--lifted { background: var(--lifted); }

/* ---- Eyebrow (dot + uppercase tracking) --------------------------------- */
.eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 14px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--slate);
}
.eyebrow::before {
    content: "";
    width: 8px; height: 8px;
    border-radius: 50%;
    background: var(--accent);
}

/* ---- Buttons ------------------------------------------------------------ */
.btn {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-family: var(--font);
    font-size: 16px;
    font-weight: 500;
    letter-spacing: -0.02em;
    line-height: 1;
    padding: 14px 26px;
    border-radius: var(--r-btn);
    border: 1.5px solid var(--ink);
    cursor: pointer;
    transition: transform 120ms ease, background 160ms ease, color 160ms ease;
}
.btn:active { transform: translateY(1px); }
.btn--primary { background: var(--ink); color: var(--canvas); }
.btn--primary:hover { background: #000; }
.btn--secondary { background: var(--white); color: var(--ink); }
.btn--secondary:hover { background: var(--ink); color: var(--canvas); }
.btn svg { width: 16px; height: 16px; }

/* Satellite micro-CTA — white circle with arrow, docks on a portrait */
.satellite {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px; height: 56px;
    border-radius: 50%;
    background: var(--white);
    color: var(--ink);
    box-shadow: var(--shadow-lift);
    transition: transform 200ms cubic-bezier(0.22, 1, 0.36, 1);
}
.satellite svg { width: 20px; height: 20px; }

/* ---- Floating pill nav -------------------------------------------------- */
.nav-wrap {
    position: sticky;
    top: 24px;
    z-index: 100;
    padding-inline: var(--gutter);
    animation: nav-slide-down 0.7s cubic-bezier(0.19, 1, 0.22, 1) 0.6s both;  /* slide in on load — all widths */
}
.nav {
    display: flex;
    position: relative;
    align-items: center;
    gap: 32px;
    max-width: var(--container);
    margin-inline: auto;
    padding: 14px 16px 14px 28px;
    background: rgba(255, 255, 255, 0.85);
    -webkit-backdrop-filter: saturate(140%) blur(12px);
    backdrop-filter: saturate(140%) blur(12px);
    border-radius: var(--r-pill);
    box-shadow: var(--shadow-nav);
}
.nav__logo img { height: 26px; width: auto; }
.nav__links {
    display: flex;
    gap: 36px;
    margin: 0 auto 0 16px;
    padding: 0;
    list-style: none;
}
.nav__links a {
    font-size: 16px; font-weight: 500; letter-spacing: -0.02em;
    color: var(--ink);
    transition: color 160ms ease;
}
.nav__links a:hover { color: var(--accent); }
.nav__cta { padding: 10px 22px; }
.nav__toggle { display: none; }
.nav__only-mobile { display: none; }   /* a "Request a demo" entry shown only in the mobile dropdown */

/* ---- Nav overlaid on media-hero pages (home) ----------------------------
   Fixed at all widths so it stays pinned while scrolling and overlays the
   hero video. Slides in on load via the .nav-wrap animation above. */
.has-media-hero .nav-wrap { position: fixed; top: 24px; left: 0; right: 0; }
@keyframes nav-slide-down {
    from { transform: translateY(calc(-100% - 32px)); }
    to   { transform: none; }
}
@media (prefers-reduced-motion: reduce) {
    .nav-wrap { animation: none; }
}

/* Wide container — the media frame breaks past the nav's width (1280),
   but caps so it isn't edge-to-edge on large screens. */
.container--wide { max-width: 1500px; padding-inline: clamp(24px, 3.5vw, 40px); }
/* Card-style container: paper-on-paper lifted surface with oversized radius.
   Used to lift a single section into a card rather than tinting the whole
   section-band background. */
.container--card {
    background: var(--lifted);
    border-radius: 92px;
    padding-block: clamp(64px, 8vw, 120px);
    padding-inline: clamp(40px, 6vw, 96px);
}

/* ---- Hero — wide media frame (video placeholder), text below ------------ */
.hero--media { padding-block: 16px 0; }
.hero__media {
    position: relative;
    height: 840px;        /* fixed — fills most of a typical screen, does not shrink with the window */
    border-radius: clamp(40px, 6vw, 88px);
    overflow: hidden;
    box-shadow: var(--shadow-lift);
    background: var(--ink); /* solid fallback; the hero <video> covers it once loaded */
}
/* poster-treatment shots: the poster carries its own header + card, so the
   app-window chrome bar is dropped and the frame goes flat on the canvas. */
.shot-frame--poster{padding-top:0;background:transparent;border:0;box-shadow:none;border-radius:18px}
.shot-frame--poster::before,.shot-frame--poster::after{display:none}

/* interim hero carousel (video not yet delivered): the rotating render
   showcase fills the frame exactly like the video will. */
.hero__media .page-hero__bg::after { background: linear-gradient(0deg, rgba(0,0,0,.28) 0%, transparent 45%); }
/* drawn poster slides: show the whole composition on any viewport, drop the
   photo gradient and the caption overlay while one is active. */
.hero__media .page-hero__img--poster { object-fit: contain; background: #F3F0EE; }
.hero__media .page-hero__bg::after { transition: opacity 0.8s ease; }
.hero__media.is-poster-slide .page-hero__bg::after { opacity: 0; }
.hero__media .hero__overlay { transition: opacity 0.8s ease; }
.hero__media.is-poster-slide .hero__overlay { opacity: 0; }
/* caption hierarchy: product name big, descriptor smaller */
.hero__overlay--images .hero__overlay-line:nth-child(2) { font-size: 0.4em; font-weight: 600; letter-spacing: 0; margin-top: 14px; }
/* composed dark hero: full frame always visible; the top frame fades in once
   (the drawing becomes the render). No photo wash needed on drawn art. */
.hero__media .page-hero__img--poster-dark { object-fit: contain; background: #161615; }
.hero__media .hero-xfade::after { display: none; }
.hero-xfade .hero-xfade__top { opacity: 0; animation: hero-xfade-in 2s ease 1.8s forwards; }
@keyframes hero-xfade-in { to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .hero-xfade .hero-xfade__top { animation: none; opacity: 1; } }
/* hero video — fills the media frame; sits beneath any overlays */
.hero__video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
}
/* hero text overlay — two stacked lines bottom-left of the media frame.
   Each line fades + rises in sequence, timed to land in the last few
   seconds of the hero arc (over the freeze-frame). JS adds
   `hero__overlay--start` when the <video> actually begins playing,
   so the timings track real playback, not poster-paint. */
.hero__overlay {
    position: absolute;
    left: clamp(28px, 5vw, 80px);
    bottom: clamp(40px, 7vw, 110px);
    z-index: 1;
    color: var(--canvas);
    font-weight: 500;
    font-size: clamp(48px, 7vw, 112px);
    line-height: 1;
    letter-spacing: -0.02em;
    text-shadow: 0 2px 24px rgba(0, 0, 0, 0.35);
    pointer-events: none;
}
.hero__overlay-line {
    display: block;
    opacity: 0;
    transform: translateY(28px);
    will-change: opacity, transform;
}
.hero__overlay-line + .hero__overlay-line { margin-top: 8px; }
.hero__overlay--start .hero__overlay-line:nth-child(1) {
    animation: hero-line-in 1.2s cubic-bezier(0.19, 1, 0.22, 1) 10s forwards;
}
.hero__overlay--start .hero__overlay-line:nth-child(2) {
    animation: hero-line-in 1.2s cubic-bezier(0.19, 1, 0.22, 1) 11.5s forwards;
}
@keyframes hero-line-in {
    to { opacity: 1; transform: none; }
}
/* Image-carousel hero (video slot empty): no playback arc, land the lines early. */
.hero__overlay--images.hero__overlay--start .hero__overlay-line:nth-child(1) { animation-delay: 0.6s; }
.hero__overlay--images.hero__overlay--start .hero__overlay-line:nth-child(2) { animation-delay: 1.8s; }
@media (prefers-reduced-motion: reduce) {
    .hero__overlay--start .hero__overlay-line { animation: none; opacity: 1; transform: none; }
}
/* ---- Hero text — below the media frame ---------------------------------- */
.hero__below { padding-block: clamp(40px, 6vw, 72px) 0; }
.hero__grid {
    display: grid;
    grid-template-columns: 1.15fr 0.85fr;
    gap: clamp(28px, 5vw, 72px);
    align-items: end;
}
.hero__title { margin-top: 18px; max-width: 14ch; }
.hero__lead { font-size: 19px; line-height: 1.5; color: var(--charcoal); max-width: 46ch; }
.hero__actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 32px; }

/* ---- Capabilities constellation ----------------------------------------- */
.constellation { position: relative; }
.constellation__head { position: relative; max-width: 56ch; margin-bottom: 24px; }
.ghost {
    position: absolute;
    inset: -40px auto auto -4px;
    font-size: clamp(80px, 13vw, 150px);
    font-weight: 500;
    letter-spacing: -0.03em;
    line-height: 1;
    color: var(--ghost);
    z-index: 0;
    pointer-events: none;
    white-space: nowrap;
}
.constellation__head .eyebrow,
.constellation__head h2 { position: relative; z-index: 1; }

.orbits {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    column-gap: clamp(40px, 6vw, 96px);
    row-gap: 64px;
    margin-top: 80px;
}
.orbit {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* ── Constellation entrance — Mastercard-style ─────────────────────────
   Each item scales from 0.5 → 1.0 with transform-origin at the BOTTOM,
   so it appears to rise out of the ground while growing. That single
   transform property (no translate, no rotate, no blur) is what gives
   the motion its organic feel — the eye reads "the thing is growing"
   instead of "the thing is being animated by code".

   transform-origin alternates left-bottom / right-bottom by column so
   paired items grow toward each other across the spread, reinforcing
   the asymmetric constellation layout.

   JS: per-item IntersectionObserver in site.js adds .in-viewport when
   each capability scrolls into view — no chain math, no setTimeout. */
.orbit {
    transform: scale(0.5);
    transform-origin: center bottom;
    transition: transform 1.5s ease;
}
.orbit:nth-child(odd)  { transform-origin: left bottom; }
.orbit:nth-child(even) { transform-origin: right bottom; }
.orbit:nth-child(5)    { transform-origin: center bottom; }  /* lone row centers */
.orbit.in-viewport { transform: none; }

@media (prefers-reduced-motion: reduce) {
    .orbit { transition: none; transform: none; }
}

/* Asymmetric vertical offsets — preserve the "constellation, not a grid" feel
   inside the new 2-column layout. The 5th item gets its own centered row. */
.orbit:nth-child(2) { margin-top: 56px; }
.orbit:nth-child(4) { margin-top: 40px; }
.orbit:nth-child(5) {
    grid-column: 1 / -1;
    justify-self: center;
    width: 100%;             /* explicit width — without this, `justify-self: center`
                                shrinks the grid item to its content's intrinsic width,
                                so the inner portrait's `width: 100%` collapses too. */
    max-width: 680px;
    margin-top: 20px;
}
/* The lone last item gets a noticeably bigger portrait — the AI Agents
   capability is the constellation's climax and reads better at scale. */
.orbit:nth-child(5) .portrait { max-width: 620px; }
.orbit:nth-child(5) .portrait__num { font-size: 52px; }

.portrait {
    position: relative;
    width: 100%;
    max-width: 480px;
    aspect-ratio: 1;
    border-radius: 50%;
    background:
        radial-gradient(80% 80% at 50% 35%, var(--accent-light) 0%, transparent 70%),
        radial-gradient(100% 100% at 50% 100%, var(--accent) 0%, transparent 65%),
        var(--lifted);
    display: grid;
    place-items: center;
    color: var(--white);
    /* box-shadow: var(--shadow-lift); — disabled while placeholders are
       in place; restore once real circular product photos land. */
}
.portrait__num {
    font-size: 40px; font-weight: 500; letter-spacing: -0.02em;
    color: rgba(255, 255, 255, 0.92);
    mix-blend-mode: overlay;
}
/* Real portrait images — once a capability has its photo wired in, the
   image replaces the gradient placeholder and the "0N" number is hidden. */
.orbit--has-image .portrait {
    background: var(--lifted) center / cover no-repeat;
}
.orbit--has-image .portrait__num { display: none; }
.orbit--01 .portrait { background-image: url("../images/portraits/01-market-intelligence.jpg"); }
/* Similarity Forecasting: after the scale-in (1.5s) completes, three things
   happen simultaneously over the next 1.8s — the dormant-bulb base crossfades
   to the lit-standout overlay, AND the circular portrait morphs into a tall
   rounded-rectangle card. */
.orbit--02 .portrait { background-image: url("../images/posters/portrait-02-forecasting.svg?v=4"); background-color: #FCFBFA; }
/* Plunk Studio: empty room (base) crossfades to staged room (overlay)
   on viewport entry — visually demonstrates Studio's core capability. */
.orbit--03 .portrait { background-image: url("../images/portraits/03-plunk-studio-empty.jpg"); }
.orbit--03 .portrait::before {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: url("../images/portraits/03-plunk-studio.jpg") center / cover no-repeat;
    opacity: 0;
    transition: opacity 1.8s ease 1.5s; /* delay matches .orbit scale-in duration */
    z-index: 1;
}
.orbit--03.in-viewport .portrait::before { opacity: 1; }
.orbit--04 .portrait { background-image: url("../images/posters/portrait-04-campaigns.svg?v=4"); background-color: #FCFBFA; }
/* Animated portraits use a <video> element layered over the background-image
   poster. If the video fails or hasn't loaded, the JPG behind shows through. */
.portrait__video {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    border-radius: 50%;
    z-index: 1;
}
.portrait .satellite { z-index: 2; }
.orbit--05 .portrait { background-image: url("../images/posters/portrait-05-visibility.svg?v=3"); background-color: #FCFBFA; }
/* drawn portraits sit on the lifted ground with a hairline ring so the
   circle reads against the canvas (photo portraits carry their own edges) */
.orbit--02 .portrait, .orbit--04 .portrait, .orbit--05 .portrait { box-shadow: inset 0 0 0 1px var(--dust); }
.portrait .satellite {
    position: absolute;
    right: -6px; bottom: -6px;
}
.orbit:hover .satellite { transform: scale(1.08) translate(-2px, -2px); }

.orbit__eyebrow { margin-top: 28px; }
.orbit__title { margin-top: 12px; font-size: clamp(24px, 2.8vw, 36px); line-height: 1.15; }
.orbit__desc { margin-top: 8px; font-size: 15px; color: var(--slate); max-width: 22ch; }

/* ---- Two-products fork -------------------------------------------------- */
.fork { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.product {
    padding: 44px;
    border-radius: var(--r-stadium);
    background: var(--lifted);
}
.product--mfr { background: var(--white); }
.product--ret { background: var(--white); }
.product h3 { font-size: 28px; margin-top: 14px; }
.product__pillars {
    display: flex; gap: 10px; flex-wrap: wrap;
    margin: 20px 0 24px; padding: 0; list-style: none;
}
.product__pillars li {
    padding: 6px 16px;
    border: 1px solid var(--dust);
    border-radius: var(--r-pill);
    font-size: 14px; font-weight: 500;
}
.product__desc { color: var(--charcoal); line-height: 1.5; margin-bottom: 28px; }

/* ---- Differentiation / stats band --------------------------------------- */
.band { background: var(--ink); color: var(--canvas); }
.band h2 { max-width: 18ch; }
.band .eyebrow { color: var(--accent-light); }
.band .eyebrow::before { background: var(--accent-light); }
.stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    margin-top: 56px;
    border-top: 1px solid rgba(255, 255, 255, 0.18);
    padding-top: 40px;
}
.stat__value { font-size: clamp(36px, 5vw, 56px); font-weight: 500; letter-spacing: -0.02em; }
.stat__label { margin-top: 8px; color: var(--dust); font-size: 15px; }

/* ---- Pricing teaser ----------------------------------------------------- */
.teaser h2 { max-width: 20ch; }
.teaser p { margin: 20px 0 32px; max-width: 52ch; color: var(--charcoal); font-size: 18px; }

/* ============================================================== */
/* PAGE TEMPLATE — used by every marketing page except the home page.
   Full-width hero (no border-radius), placeholder image right of copy,
   then ordinary .section content below. The shared component vocabulary
   (pillars, deep-dive, timeline, capability, qa, plan, etc.) lives here. */
/* ============================================================== */

/* Page hero — full-width cinematic banner. Layered composition:
   bg image → horizontal gradient overlay (dark left, fading right) →
   text content overlaid on the left half. The bg layer is markup-ready
   for a future carousel (multiple <img> children with crossfade classes). */
.page-hero {
    position: relative;
    min-height: clamp(560px, 82vh, 920px);
    overflow: hidden;
    background: var(--ink); /* fallback while images load */
    color: var(--canvas);
    display: flex;
    align-items: center;
}
.page-hero__bg {
    position: absolute;
    inset: 0;
    z-index: 0;
    background:
        radial-gradient(70% 90% at 70% 25%, var(--accent-light) 0%, transparent 55%),
        radial-gradient(120% 120% at 10% 95%, var(--accent) 0%, transparent 50%),
        linear-gradient(150deg, #1d1815 0%, #2a2017 55%, #3d2c20 100%);
    background-size: cover;
    background-position: center;
}
/* Horizontal gradient — darkest on the left for text legibility,
   fading toward the right so the image breathes. */
.page-hero__bg::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg,
        rgba(20, 20, 19, 0.85) 0%,
        rgba(20, 20, 19, 0.65) 25%,
        rgba(20, 20, 19, 0.30) 55%,
        rgba(20, 20, 19, 0.08) 100%);
    pointer-events: none;
}
/* For the future carousel: stack <img class="page-hero__img"> inside .page-hero__bg.
   Active image is opacity 1, others 0; CSS transition handles the crossfade. */
.page-hero__img {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    opacity: 0;
    transition: opacity 1.2s ease;
}
.page-hero__img.is-active { opacity: 1; }

.page-hero .container { position: relative; z-index: 2; }
.page-hero__intro-inner {
    max-width: 56ch;
    /* Asymmetric: extra top space pushes the heading below center,
       so the eye lands lower in the frame against the image. */
    padding-top: clamp(120px, 14vw, 200px);
    padding-bottom: clamp(48px, 6vw, 80px);
}
.page-hero__title { margin-top: 16px; max-width: 18ch; color: var(--canvas); }
.page-hero__lead {
    margin-top: 20px;
    max-width: 48ch;
    font-size: clamp(17px, 1.4vw, 19px);
    line-height: 1.5;
    color: rgba(243, 240, 238, 0.82); /* canvas at 82% — soft on the dark wash */
}
.page-hero__actions { margin-top: 32px; display: flex; flex-wrap: wrap; gap: 14px; }
/* Eyebrow stays accent-orange but its + dot read well on dark too */
.page-hero .eyebrow { color: rgba(243, 240, 238, 0.78); }

/* Invert the CTAs when they sit on the dark hero — cream-on-dark for primary,
   outlined cream for secondary. */
.page-hero .btn--primary {
    background: var(--canvas);
    color: var(--ink);
    border-color: var(--canvas);
}
.page-hero .btn--secondary {
    background: transparent;
    color: var(--canvas);
    border-color: rgba(243, 240, 238, 0.55);
}
.page-hero .btn--secondary:hover { border-color: var(--canvas); }

/* Per-page bg image hooks. Drop a JPG/PNG at the path and that page's hero
   swaps from the placeholder gradient to the real image. */
.page-hero--manufacturers .page-hero__bg { background-image: url("../images/pages/manufacturers-hero.svg?v=3"); background-position: right center; }
.page-hero--retailers     .page-hero__bg { background-image: url("../images/pages/retailers-hero.svg?v=3"); background-position: right center; }
.page-hero--platform      .page-hero__bg { background-image: url("../images/pages/platform-hero.jpg"); background-position: right center; }
.page-hero--studio-mfr .page-hero__bg { background-image: url("../images/pages/studio-manufacturers-hero.png"); background-position: right center; }
.page-hero--studio-ret .page-hero__bg { background-image: url("../images/pages/studio-retailers-hero.png?v=2"); background-position: right center; }
.page-hero--studio-des .page-hero__bg { background-image: url("../images/pages/studio-designers-hero.png?v=4"); background-position: right center; }
/* Studio uses an <img> crossfade carousel, not a single bg-image — see markup. */
.page-hero--pricing       .page-hero__bg { background-image: url("../images/pages/pricing-hero.jpg?v=6"); background-position: right center; }
.page-hero--about         .page-hero__bg { background-image: url("../images/pages/about-hero.jpg?v=2"); }
.page-hero--contact       .page-hero__bg { background-image: url("../images/pages/contact-hero.jpg?v=2"); }
.page-hero--demo          .page-hero__bg { background-image: url("../images/pages/demo-hero.jpg"); }
.page-hero--home          .page-hero__bg { background-image: url("../images/pages/home-hero.png?v=5"); background-position: right center; }
.page-hero--privacy       .page-hero__bg { background-image: url("../images/pages/privacy-hero.jpg"); }

/* ---- Shared section helpers -------------------------------------------- */
.block-lead { max-width: 64ch; }
.prose, .prose-lead {
    font-size: clamp(17px, 1.4vw, 19px);
    line-height: 1.55;
    color: var(--charcoal);
}
.prose p + p { margin-top: 18px; }
/* Long-form prose (e.g., Privacy page) — restrained h2 sizing inside .prose
   so structural headings don't behave like marketing section titles. */
.prose h2 {
    margin-top: 48px;
    font-size: clamp(22px, 2.2vw, 28px);
    line-height: 1.2;
    color: var(--ink);
}
.prose h2:first-child { margin-top: 0; }
.prose h2 + p { margin-top: 12px; }
.prose ul { margin: 12px 0 18px; padding-left: 22px; }
.prose ul li { margin-top: 8px; line-height: 1.55; }
.prose a { color: var(--ink); border-bottom: 1px solid currentColor; font-weight: 500; }
.prose a:hover { color: var(--accent); }
.prose strong { font-weight: 500; color: var(--ink); }
.h1-scale-loose {
    font-size: clamp(36px, 5vw, 56px);
    line-height: 1.08;
    letter-spacing: -0.02em;
    max-width: 22ch;
}

/* "Lifted band" — same warm-cream surface as .section--lifted but no full-bleed
   tint required, since the canvas already reads paper-on-paper at scale. */
.section--lifted-band { background: var(--lifted); }

/* ---- Pillars (3-up: See/Create/Launch, Know/Create/Automate) ----------- */
.pillars {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 40px;
}
.pillar {
    padding: 40px;
    border-radius: 28px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.pillar__num {
    display: inline-block;
    font-size: 14px; font-weight: 700; letter-spacing: 0.04em;
    color: var(--accent);
}
.pillar__title {
    margin-top: 16px;
    font-size: 28px; line-height: 1.1; letter-spacing: -0.02em;
}
.pillar p { margin-top: 14px; color: var(--charcoal); line-height: 1.55; }

/* ---- Deep-dive blocks (text-only rows) -------------------------------- */
.deep-dive { display: flex; flex-direction: column; gap: 72px; }
.deep-dive__item { max-width: 64ch; }
.deep-dive__body h3 {
    margin-top: 12px;
    font-size: clamp(26px, 2.6vw, 36px);
    line-height: 1.15; letter-spacing: -0.02em;
    max-width: 24ch;
}
.deep-dive__body p { margin-top: 16px; color: var(--charcoal); font-size: 17px; line-height: 1.6; max-width: 56ch; }

/* ---- Timeline (onboarding) -------------------------------------------- */
.timeline { list-style: none; padding: 0; margin: 0; display: block; }
.timeline__step {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
    gap: clamp(32px, 4vw, 56px);
    align-items: center;
    padding: 36px;
    margin-bottom: 72px;
    background: transparent;
    border: 1px solid var(--accent);
    border-radius: 999px;
    transition: transform 220ms ease, box-shadow 220ms ease;
}
.timeline__step:last-child { margin-bottom: 0; }
.timeline__step:nth-child(even) .timeline__media { order: 2; }
.timeline__step:hover {
    transform: translateY(-2px);
    box-shadow: 0 24px 48px rgba(20, 20, 19, 0.06);
}
.timeline__media {
    aspect-ratio: 4 / 3;
    border-radius: 999px;
    background-color: var(--accent);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
}
/* All timeline steps currently render as solid accent-orange placeholders.
   Per-step image hooks can be re-introduced here when real assets are ready. */
.timeline__body { padding: 40px clamp(56px, 6vw, 104px); }
.timeline__step h4 {
    margin-top: 14px;
    font-size: clamp(28px, 3.2vw, 40px);
    line-height: 1.1;
    letter-spacing: -0.02em;
    font-weight: 500;
    max-width: 14ch;
}
.timeline__step p { margin-top: 16px; color: var(--charcoal); line-height: 1.55; max-width: 36ch; font-size: 16px; }
@media (max-width: 1023px) {
    .timeline__step {
        grid-template-columns: 1fr;
        gap: 32px;
        border-radius: 56px;
        padding: 28px;
    }
    .timeline__step:nth-child(even) .timeline__media { order: 0; }
    .timeline__media { border-radius: 36px; aspect-ratio: 16 / 9; }
    .timeline__body { padding: 8px 16px 16px; }
    .timeline__step h4 { max-width: none; }
}

/* ---- Steps (compact 4-up onboarding) ---------------------------------- */
.steps {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 32px;
}
.step {
    padding: 36px;
    border-radius: 28px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.step__num {
    display: inline-flex; align-items: center; justify-content: center;
    width: 44px; height: 44px;
    border-radius: 50%;
    background: var(--ink); color: var(--canvas);
    font-weight: 500;
}
.step h4 {
    margin-top: 20px;
    font-size: 20px; line-height: 1.2; letter-spacing: -0.02em; font-weight: 500;
}
.step p { margin-top: 12px; color: var(--charcoal); line-height: 1.5; font-size: 15px; }

/* ---- Price grid (used inside container--card for plan summary rows) --- */
.price-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 24px;
}
.price-cell {
    display: flex; flex-direction: column; gap: 6px;
    padding: 28px;
    background: var(--white);
    border-radius: 24px;
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.price-cell__label { font-size: 14px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--slate); }
.price-cell__value { font-size: 36px; font-weight: 500; letter-spacing: -0.02em; }
.price-cell__value small { font-size: 16px; font-weight: 450; color: var(--slate); margin-left: 4px; }
.price-cell__sub { font-size: 14px; color: var(--slate); line-height: 1.4; }

/* ---- Q&A (collapsible objections) ------------------------------------- */
.qa-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.qa {
    padding: 28px 32px;
    border-radius: 24px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.qa summary { font-size: 19px; font-weight: 500; letter-spacing: -0.02em; cursor: pointer; list-style: none; }
.qa summary::-webkit-details-marker { display: none; }
.qa summary::after { content: "+"; float: right; font-size: 24px; font-weight: 450; }
.qa[open] summary::after { content: "−"; }
.qa p { margin-top: 16px; color: var(--charcoal); line-height: 1.55; }

/* ============================================================== */
/* PLATFORM page — capability rows (text-only) */
/* ============================================================== */
.capability { max-width: 64ch; }
.capability__num {
    display: inline-block;
    font-size: 14px; font-weight: 700; letter-spacing: 0.04em;
    color: var(--accent);
}
.capability__body h2 {
    margin-top: 12px;
    font-size: clamp(28px, 3.2vw, 42px);
    line-height: 1.1; letter-spacing: -0.02em;
    max-width: 22ch;
}
.capability__body > .eyebrow { margin-top: 4px; display: inline-flex; }
.capability__body p { margin-top: 20px; color: var(--charcoal); font-size: 17px; line-height: 1.6; max-width: 56ch; }
.capability__bullets { margin: 20px 0 0; padding-left: 22px; color: var(--charcoal); }
.capability__bullets li { margin-top: 8px; line-height: 1.5; }

/* ---- Comparison table ------------------------------------------------- */
.compare-table {
    background: var(--white);
    border-radius: 32px;
    padding: 24px;
    overflow-x: auto;
}
.compare-table table { width: 100%; border-collapse: collapse; min-width: 720px; }
.compare-table th, .compare-table td {
    padding: 18px 16px;
    text-align: left;
    border-bottom: 1px solid rgba(20, 20, 19, 0.06);
    font-size: 15px;
}
.compare-table th { font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; font-size: 12px; color: var(--slate); }
.compare-table td.yes { color: var(--accent); font-weight: 500; }

/* ============================================================== */
/* STUDIO page — capability tile grid + live demo placeholder */
/* ============================================================== */
.capability-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; }
.capability-card {
    padding: 36px;
    border-radius: 28px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.capability-card h3 { font-size: 22px; line-height: 1.15; letter-spacing: -0.02em; }
.capability-card p { margin-top: 12px; color: var(--charcoal); font-size: 15px; line-height: 1.55; }

/* ============================================================== */
/* RETAILERS page — campaign automation grid */
/* ============================================================== */
.campaign-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.campaign {
    padding: 32px;
    border-radius: 28px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.campaign h3 { font-size: 20px; line-height: 1.2; letter-spacing: -0.02em; }
.campaign p { margin-top: 10px; color: var(--charcoal); font-size: 15px; line-height: 1.55; }

/* ============================================================== */
/* PRICING page — plan grid + add-ons + studio credits */
/* ============================================================== */
.plan-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 24px;
}
.plan {
    display: flex; flex-direction: column;
    padding: 40px;
    border-radius: 32px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.plan--featured {
    background: var(--ink);
    color: var(--canvas);
    border-color: var(--ink);
}
.plan--featured ul li::marker { color: var(--accent-light); }
.plan--featured .plan__sub { color: rgba(243, 240, 238, 0.6); }
/* On the ink-dark featured card the primary (ink) button vanishes — give it
   a canvas border so "Get started" reads (DS 2026-08-25). */
.plan--featured .btn--primary { border: 1px solid rgba(243, 240, 238, 0.75); }
.plan--featured .btn--primary:hover { border-color: var(--canvas); }
.plan header { display: flex; flex-direction: column; gap: 6px; margin-bottom: 28px; }
.plan__badge {
    align-self: flex-start;
    font-size: 12px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
    color: var(--accent-light);
    margin-bottom: 4px;
}
.plan__tier { font-size: 14px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
.plan__price { font-size: 44px; font-weight: 500; letter-spacing: -0.02em; }
.plan__price small { font-size: 16px; font-weight: 450; color: var(--slate); margin-left: 4px; }
.plan--featured .plan__price small { color: rgba(243, 240, 238, 0.5); }
.plan__sub { font-size: 14px; color: var(--slate); }
.plan ul { list-style: disc; padding-left: 22px; margin: 0 0 28px; flex: 1; }
.plan ul li { margin-top: 10px; line-height: 1.5; }
/* CTAs pin to the card bottom so all three "Get started" rows align;
   the MOST POPULAR badge floats in the top padding so plan name + price
   start at the same height on every card (DS 2026-08-25). */
.plan { position: relative; }
.plan .btn { align-self: flex-start; margin-top: auto; }
.plan__badge { position: absolute; top: 16px; left: 40px; margin-bottom: 0; }
/* small footer line under a pinned CTA — floats in the card's bottom
   padding so the button row stays aligned across cards */
.plan__after { position: absolute; bottom: 12px; left: 40px; right: 40px; font-size: 12px; color: var(--slate); margin: 0; }
.plan__after a { color: inherit; text-decoration: underline; }
/* §167.1 credit ladder + value lines — quiet, derived from the catalog */
.plan__rate { display: block; font-size: 13px; color: var(--slate); margin-top: 2px; }
.plan--featured .plan__rate { color: rgba(243, 240, 238, 0.55); }
.plan__value { font-size: 13px; line-height: 1.5; color: var(--slate); margin: -18px 0 20px; }
.plan--featured .plan__value { color: rgba(243, 240, 238, 0.65); }
.plan__value:empty { display: none; }
.credit-pack small[data-percredit] { display: block; }

.addon-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.addon {
    padding: 32px;
    border-radius: 28px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.addon__price { display: block; font-size: 32px; font-weight: 500; letter-spacing: -0.02em; color: var(--accent); }
.addon__price small { font-size: 14px; color: var(--slate); margin-left: 4px; }
.addon h4 { margin-top: 12px; font-size: 20px; line-height: 1.2; letter-spacing: -0.02em; font-weight: 500; }
.addon p { margin-top: 12px; color: var(--charcoal); font-size: 15px; line-height: 1.55; }

.studio-pricing {
    background: var(--white);
    border-radius: 28px;
    padding: 16px 24px;
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.studio-pricing table { width: 100%; border-collapse: collapse; }
.studio-pricing th, .studio-pricing td {
    padding: 18px 12px;
    text-align: left;
    border-bottom: 1px solid rgba(20, 20, 19, 0.06);
}
.studio-pricing tr:last-child td { border-bottom: none; }
.studio-pricing th { font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--slate); }
.studio-pricing td { font-size: 15px; }

.credit-packs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.credit-pack {
    display: flex; flex-direction: column; gap: 4px;
    padding: 24px;
    border-radius: 20px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.credit-pack span { font-size: 28px; font-weight: 500; letter-spacing: -0.02em; }
.credit-pack strong { font-size: 14px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
.credit-pack small { color: var(--slate); font-size: 13px; }

/* ============================================================== */
/* ABOUT page */
/* ============================================================== */
/* Client logo strip — adapted from Plunk.IO.Digital but tuned for the cream
   canvas (logos render dark ink-on-cream instead of white-on-dark). */
.brands {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    align-items: center;
    gap: clamp(32px, 4vw, 72px);
    padding-block: 16px;
}
.brands__item {
    display: flex; align-items: center; justify-content: center;
    height: 64px;
    opacity: 0.55;
    transition: opacity 200ms ease;
}
.brands__item:hover { opacity: 0.9; }
.brands__item img,
.brands__item svg {
    max-height: 100%;
    max-width: 180px;
    width: auto;
    /* Transparent-background logos (SVG mostly) — make them solid ink. */
    filter: brightness(0);
}
/* Raster logos that ship with an opaque white/light background.
   Multiply blends the white away so only the logo mark remains. */
.brands__item--has-bg img {
    filter: grayscale(1) contrast(1.2);
    mix-blend-mode: multiply;
}
/* Card-treated logos — a selected few sit in lifted pill containers for
   visual rhythm against the plain ones. */
.brands__item--card {
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.07);
    border-radius: 999px;
    padding: 0 36px;
    opacity: 1;
    height: 80px;
}
.brands__item--card img { max-width: 160px; }
.brands__item--card.brands__item--has-bg img { mix-blend-mode: multiply; }
/* Show the logo in its original colors — no brightness/grayscale filter and
   no blend mode. Use for marks whose color is load-bearing to the brand. */
.brands__item--natural img { filter: none; mix-blend-mode: normal; }
/* Parent modifier — applies the card chip treatment to every child item,
   used on the home page for a "every logo in a pill" experiment. */
.brands--all-card .brands__item {
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.07);
    border-radius: 999px;
    padding: 0 36px;
    opacity: 1;
    height: 80px;
}
.brands--all-card .brands__item img { max-width: 160px; }
.brands--all-card .brands__item--has-bg img { mix-blend-mode: multiply; }
@media (max-width: 1023px) { .brands { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 639px)  { .brands { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px; } }

.brand-family { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }
.brand-card {
    padding: 48px;
    border-radius: 40px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
}
.brand-card h3 { margin-top: 12px; font-size: 28px; line-height: 1.1; letter-spacing: -0.02em; }
.brand-card p { margin-top: 16px; color: var(--charcoal); font-size: 16px; line-height: 1.55; }

/* ============================================================== */
/* CONTACT + DEMO pages — form layout */
/* ============================================================== */
.contact-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr);
    gap: 56px;
    align-items: start;
}
.contact-form {
    padding: 48px;
    border-radius: 40px;
    background: var(--white);
    border: 1px solid rgba(20, 20, 19, 0.08);
    display: grid;
    gap: 20px;
}
.contact-form .field { display: flex; flex-direction: column; gap: 8px; }
.contact-form label { font-size: 13px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: var(--slate); }
.contact-form input,
.contact-form select,
.contact-form textarea {
    width: 100%;
    padding: 14px 16px;
    font-family: inherit;
    font-size: 16px;
    background: var(--lifted);
    border: 1.5px solid rgba(20, 20, 19, 0.12);
    border-radius: 16px;
    color: var(--ink);
    transition: border-color 160ms ease;
}
.contact-form input:focus,
.contact-form select:focus,
.contact-form textarea:focus {
    outline: none;
    border-color: var(--ink);
}
.contact-form textarea { resize: vertical; }
.form-note { font-size: 14px; color: var(--slate); }
.contact-form .btn { justify-self: flex-start; }
.contact-aside h3 { font-size: 22px; line-height: 1.2; letter-spacing: -0.02em; }
.contact-aside p { margin-top: 24px; color: var(--charcoal); font-size: 15px; line-height: 1.55; }
.contact-aside .eyebrow { display: block; margin-bottom: 6px; }
.contact-aside a { color: var(--ink); border-bottom: 1px solid currentColor; font-weight: 500; }

/* ============================================================== */
/* RESPONSIVE — collapse complex page-template grids on tablet/mobile */
/* ============================================================== */
@media (max-width: 1023px) {
    .contact-grid,
    .brand-family { grid-template-columns: 1fr; }
    .pillars,
    .plan-grid,
    .addon-grid,
    .capability-grid,
    .credit-packs { grid-template-columns: 1fr 1fr; }
    .steps,
    .steps--studio { grid-template-columns: 1fr 1fr; }
    .qa-grid,
    .campaign-grid { grid-template-columns: 1fr; }
    .timeline__step { grid-template-columns: 1fr; gap: 18px; }
}
@media (max-width: 639px) {
    .pillars,
    .plan-grid,
    .addon-grid,
    .capability-grid,
    .credit-packs,
    .steps,
    .steps--studio { grid-template-columns: 1fr; }
    .page-hero { padding-top: clamp(96px, 18vw, 140px); }
}

/* ---- Footer ------------------------------------------------------------- */
.footer { background: var(--ink); color: var(--white); padding: 100px 0 64px; }
.footer__lead { font-size: clamp(30px, 4.5vw, 48px); font-weight: 500; letter-spacing: -0.02em; max-width: 16ch; }
.footer__grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 32px;
    margin-top: 72px;
}
.footer__col h4 {
    margin: 0 0 18px;
    font-size: 13px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase;
    color: var(--dust);
}
.footer__col ul { margin: 0; padding: 0; list-style: none; }
.footer__col li { margin-bottom: 12px; }
.footer__col a { font-size: 14px; font-weight: 450; color: rgba(255, 255, 255, 0.82); }
.footer__col a:hover { color: var(--white); }
.footer__bottom {
    display: flex; justify-content: space-between; flex-wrap: wrap; gap: 16px;
    margin-top: 72px; padding-top: 28px;
    border-top: 1px solid rgba(255, 255, 255, 0.18);
    font-size: 13px; color: var(--dust);
}

/* ---- Reveal-on-scroll --------------------------------------------------- */
.reveal { opacity: 0; transform: translateY(18px); transition: opacity 700ms cubic-bezier(0.22, 1, 0.36, 1), transform 700ms cubic-bezier(0.22, 1, 0.36, 1); }
.reveal.is-visible { opacity: 1; transform: none; }

/* ---- Responsive --------------------------------------------------------- */
@media (max-width: 1023px) {
    :root { --gutter: 32px; }
    .hero__media { height: 680px; }   /* discrete tablet height — still fixed, not fluid */
    /* Tablet keeps the 2-up grid but drops the asymmetric vertical offsets;
       lone item 5 still centers in its own row via the rule above. */
    .orbits { row-gap: 56px; }
    .orbit:nth-child(2),
    .orbit:nth-child(4) { margin-top: 0; }
    .hero__grid { grid-template-columns: 1fr; gap: 8px; }
}

@media (max-width: 767px) {
    :root { --gutter: 20px; }
    .hero__media { height: 560px; }   /* discrete mobile height — still fixed, not fluid */

    /* Mobile fit-ups: tighter video gutter, smaller card radius/padding,
       hide the oversized ghost watermark (it bled off-screen). */
    .container--wide { padding-inline: 14px; }
    .container--card { border-radius: 40px; padding-block: clamp(40px, 9vw, 64px); padding-inline: 22px; }
    .ghost { display: none; }
    .section.constellation { padding-top: clamp(56px, 14vw, 96px); }

    /* Nav: full-width bar flush to the top edge, rounded bottom corners only. */
    .nav-wrap,
    .has-media-hero .nav-wrap { top: 0; left: 0; right: 0; padding-inline: 0; }
    .nav {
        max-width: none;
        border-radius: 0 0 28px 28px;
        background: var(--white);                 /* solid white, no opacity on mobile */
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
    }
    .nav.is-open .nav__links { left: 10px; right: 10px; }

    /* Mobile menu: links collapse into a dropdown panel under the pill,
       revealed by `.nav.is-open` (toggled in site.js). */
    .nav__links {
        display: none;
        position: absolute;
        top: calc(100% + 10px);
        left: 0; right: 0;
        flex-direction: column;
        gap: 2px;
        margin: 0;
        padding: 12px;
        background: var(--white);
        border-radius: 28px;
        box-shadow: var(--shadow-lift);
    }
    .nav.is-open .nav__links { display: flex; }
    .nav__links a { display: block; padding: 13px 16px; border-radius: 16px; font-size: 18px; }
    .nav__links a:hover { background: var(--canvas); color: var(--ink); }
    .nav__only-mobile { display: block; margin-top: 6px; }
    .nav__only-mobile a { background: var(--ink); color: var(--canvas); text-align: center; font-weight: 500; }
    .nav__only-mobile a:hover { background: #000; color: var(--canvas); }

    .nav__toggle {
        display: inline-flex; align-items: center; justify-content: center;
        margin-left: auto;
        width: 44px; height: 44px; border: none; background: transparent; cursor: pointer;
        color: var(--ink);
    }
    .nav__cta { display: none; }
    /* Stack capabilities one-per-row on phones — portraits stay generous. */
    .orbits { grid-template-columns: 1fr; row-gap: 56px; }
    .orbit:nth-child(5) { grid-column: auto; justify-self: stretch; max-width: none; margin-top: 0; }
    .fork { grid-template-columns: 1fr; }
    .stats { grid-template-columns: 1fr 1fr; gap: 28px; }
    .footer__grid { grid-template-columns: 1fr 1fr; }
}

@media (prefers-reduced-motion: reduce) {
    /* Capabilities reduced-motion handling lives in JS (GSAP checks the
       media query and skips the timeline, leaving elements at final state). */
    .reveal { transition: none; opacity: 1; transform: none; }
    .satellite, .orbit:hover .satellite { transition: none; }
}

/* ── Pricing: sales-led pair + request-a-meeting modal (§27) ─────────── */
.plan-grid--two { grid-template-columns: repeat(2, 1fr); max-width: 860px; margin-inline: auto; }
@media (max-width: 880px) { .plan-grid--two { grid-template-columns: 1fr; } }

.sales-modal { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center; justify-content: center; padding: 24px; }
.sales-modal[hidden] { display: none; }
.sales-modal__backdrop { position: absolute; inset: 0; background: rgba(20, 20, 19, 0.55); }
.sales-modal__card { position: relative; background: var(--cream-lift, #FCFBFA); border-radius: 28px; padding: clamp(28px, 4vw, 44px); width: min(560px, 100%); max-height: 90vh; overflow-y: auto; box-shadow: 0 24px 80px rgba(0, 0, 0, 0.25); }
.sales-modal__close { position: absolute; top: 18px; right: 22px; background: none; border: none; font-size: 26px; line-height: 1; cursor: pointer; color: var(--slate, #696969); }
.sales-modal__close:hover { color: var(--ink, #141413); }

/* ── Signup page ─────────────────────────────────────────────────────── */
.signup-card { max-width: 520px; margin-inline: auto; }
.signup-card .field { margin-bottom: 18px; }
.signup-tos { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; color: var(--slate, #696969); }
.signup-tos input { width: 16px; height: 16px; margin-top: 3px; flex-shrink: 0; }
.signup-error { color: #b3261e; font-size: 14px; }

/* ── Screenshot placeholder frames + alternating feature rows (2026-08-23 hub build) ── */
.shot-frame{position:relative;border:2px dashed rgba(0,0,0,.18);border-radius:14px;background:
  repeating-linear-gradient(45deg,rgba(0,0,0,.025),rgba(0,0,0,.025) 12px,transparent 12px,transparent 24px);
  aspect-ratio:16/10;display:flex;align-items:center;justify-content:center;overflow:hidden}
.shot-frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:12px}
.shot-frame .shot-label{color:rgba(0,0,0,.45);font-size:.78rem;letter-spacing:.04em;text-align:center;
  padding:0 24px;max-width:46ch}
.shot-frame .shot-label strong{display:block;font-size:.7rem;text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px}
.feature-row{display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:40px 0}
.feature-row+.feature-row{border-top:1px solid rgba(0,0,0,.07)}
.feature-row--flip .feature-row__media{order:2}
.feature-row h3{font-size:1.35rem;margin:10px 0 12px}
.feature-row p{max-width:52ch;opacity:.85}
.feature-row ul{margin:14px 0 0 18px;opacity:.85}
.feature-row ul li{margin-bottom:6px}
@media (max-width:900px){.feature-row{grid-template-columns:1fr;gap:24px}.feature-row--flip .feature-row__media{order:0}}
.audience-band{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:32px}
.audience-band .aud{border:1px solid rgba(0,0,0,.1);border-radius:14px;padding:24px;background:#fff}
.audience-band .aud h3{margin:6px 0 8px}
.audience-band .aud p{opacity:.8;font-size:.92rem;margin-bottom:14px}
@media (max-width:900px){.audience-band{grid-template-columns:1fr}}
.shot-frame--filled{border:1px solid rgba(0,0,0,.08);background:#fff;aspect-ratio:auto;display:block;
  border-radius:14px;overflow:hidden;padding-top:22px;position:relative;
  box-shadow:0 30px 60px -24px rgba(18,24,36,.30),0 8px 20px -10px rgba(18,24,36,.16)}
.shot-frame--filled::before{content:"";position:absolute;top:0;left:0;right:0;height:22px;
  background:linear-gradient(#f6f7f9,#eef0f3);border-bottom:1px solid rgba(0,0,0,.06)}
.shot-frame--filled::after{content:"";position:absolute;top:8px;left:14px;width:6px;height:6px;border-radius:50%;
  background:#d7d9de;box-shadow:11px 0 0 #d7d9de,22px 0 0 #d7d9de}
.shot-frame--filled img{position:static;inset:auto;width:100%;height:auto;object-fit:contain;display:block;border-radius:0}

/* ── API reference pages (/developers/api/*) — shared docs styling ─────── */
.api-section { padding: 48px 0; border-top: 1px solid rgba(0,0,0,.08); }
.api-section h2 { margin-bottom: 6px; }
.api-section h2 code { font-size: .7em; }
.api-lead { max-width: 72ch; opacity: .8; margin-bottom: 20px; }
.api-endpoint { margin: 30px 0; }
.api-endpoint h3 { font-size: 1rem; margin-bottom: 6px; }
.api-endpoint p { max-width: 74ch; opacity: .85; }
pre.api-code { background: #10151c; color: #dbe4ee; border-radius: 10px; padding: 14px 16px;
    overflow-x: auto; font-size: .8rem; line-height: 1.55; margin: 10px 0 0; }
pre.api-code .c { color: #7c8b9d; }
code.api-inline { background: rgba(16,21,28,.08); border-radius: 5px; padding: 1px 6px; font-size: .85em; }
.api-tablewrap { overflow-x: auto; }
table.api-table { border-collapse: collapse; width: 100%; font-size: .88rem; margin-top: 12px; min-width: 560px; }
table.api-table th { text-align: left; font-size: .7rem; letter-spacing: .06em; text-transform: uppercase;
    opacity: .6; padding: 7px 12px; border-bottom: 2px solid rgba(0,0,0,.12); white-space: nowrap; }
table.api-table td { padding: 9px 12px; border-bottom: 1px solid rgba(0,0,0,.08); vertical-align: top; }
table.api-table td:first-child { white-space: nowrap; }
.api-pill { display: inline-block; font-size: .68rem; font-weight: 700; letter-spacing: .04em;
    border-radius: 99px; padding: 2px 9px; margin-right: 8px; vertical-align: middle; }
.api-pill--get { background: #e3f2ec; color: #16694a; }
.api-pill--post { background: #e8ecfb; color: #2b3f9e; }
.api-key-pill { display: inline-block; font-size: .68rem; font-weight: 700; letter-spacing: .04em;
    border-radius: 99px; padding: 2px 9px; margin-left: 8px; vertical-align: middle; }
.api-key-pill--pk { background: #fdf1e2; color: #8a5a12; }
.api-key-pill--sk { background: #f3e8f7; color: #6b2d85; }
.api-key-pill--kiosk { background: #e3eef9; color: #1d5586; }
.api-toc { display: flex; flex-wrap: wrap; gap: 8px 6px; margin: 20px 0 4px; }
.api-toc a { font-size: .8rem; text-decoration: none; border: 1px solid rgba(0,0,0,.14);
    border-radius: 99px; padding: 4px 12px; color: inherit; white-space: nowrap; }
.api-toc a:hover { border-color: rgba(0,0,0,.4); }
.api-note { border-left: 3px solid rgba(0,0,0,.18); padding: 2px 0 2px 14px; opacity: .8;
    font-size: .88rem; max-width: 72ch; margin-top: 12px; }
.api-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; margin-top: 36px; }
.api-card { border: 1px solid rgba(0,0,0,.12); border-radius: 16px; padding: 30px 28px;
    display: flex; flex-direction: column; gap: 12px; }
.api-card h3 { margin: 0; }
.api-card p { opacity: .82; margin: 0; flex: 1; }
.api-card .btn { align-self: flex-start; }
.api-card ul { margin: 0; padding-left: 18px; opacity: .82; font-size: .9rem; }
