/* ==========================================================================
   Eventiere marketing site - design system (v2)
   ==========================================================================
   Extracted from website/index.html (the approved homepage redesign), which
   is the design reference for every page. Tokens, fonts, base type, the
   container, header (with the Features mega panel and mobile sheet), footer,
   buttons, section rhythm and the long-form article/prose blocks are lifted
   here from the homepage's own class names, so a page on this system looks
   and behaves exactly like the homepage's chrome.

   SCOPING - this file coexists with shared.css/blog.css on a page that has
   only had its header/footer stamped and still carries its old body markup.
   Two things make that safe:
     - @font-face and :root are the only rules left GLOBAL. Custom
       properties and font declarations are additive; they cannot restyle
       an element shared.css already owns, and a same-named @font-face in
       both files is idempotent (same files, same descriptors).
     - EVERY OTHER SELECTOR IN THIS FILE IS SCOPED, and TWO CLASSES decide
       how much of it applies - `<body class="v2">` (a fully redesigned
       page, every rule below applies) or `<body class="v2-chrome">` (a
       page that still loads shared.css and still carries its OLD body
       markup - only the shared header/footer/floats/icon-sprite rules
       apply; base type, prose, section rhythm and every "v2-" page-block
       class stay scoped to `body.v2` alone, or they would restyle that old
       markup the moment both stylesheets load together). The stamp script
       (scripts/website-stamp-chrome.py) decides which class a page gets,
       from whether it still has a shared.css link - never hand-edit which
       one a page carries.
       - CHROME rules (the header - site-header/header-row/brand/nav-links/
         nav-item-features/features-panel*, header-right/locale-pill/
         header-btn/menu-btn/mobile-sheet*, the footer - site-footer/
         footer-*, the icon sprite - .sr-only, the skip link, and the four
         shared floats - back-to-top/wa-float+tooltip/#cookie-banner+its
         children/#exit-popup+its children) are scoped
         `:is(body.v2, body.v2-chrome) <selector>` - one rule serves both
         page kinds.
       - Right after the header/footer/floats sections below is a CHROME
         RESET block: shared.css/blog.css style a bare `<nav>`/`<footer>`
         element and the class names `.nav-links`/`.container`/`.btn`/
         `.btn-primary` GLOBALLY (a v2-chrome page still loads shared.css),
         and the new header/footer reuse those exact class names - so that
         block re-declares, at higher specificity and scoped to ONLY the
         four chrome containers (site-header, mobile-sheet, site-footer,
         features-panel), every property shared.css/blog.css would
         otherwise still apply there (position, box-sizing, font, list
         style, link underline, image sizing, focus ring...). It must never
         widen beyond those four containers, or it starts re-resetting old
         page content instead of leaving it to shared.css/blog.css.
       - EVERYTHING ELSE (base type, buttons/text-links as used in page
         content, section rhythm, `.container`/`.measure`, breadcrumb, every
         "v2-" page-block class, the article/blog prose system) is scoped
         `body.v2 <selector>` only - a v2-chrome page's old body content
         keeps shared.css's/blog.css's own version of anything by that name.
       - The two sample pages that dropped shared.css entirely carry `v2`,
         for the same reason as any other fully redesigned page - it is
         what makes the full ruleset apply.
   Anything this file adds that has no homepage equivalent (page heroes,
   feature rows, long-form article layout) is ALSO given a "v2-" class
   name on top of the body.v2 scope, as a second guard against a future
   same-named addition to shared.css.
   Do not add a bare element or unscoped class rule below the tokens/fonts -
   every new rule must start with (or be nested under) `body.v2` or
   `:is(body.v2, body.v2-chrome)`, per the CHROME/page-content split above.
   ========================================================================== */

/* -------------------------- @font-face -------------------------- */
    @font-face{font-family:'Instrument Serif';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/instrument-serif-latin-400.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Instrument Serif';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/instrument-serif-latin-ext-400.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:300;font-display:swap;src:url('/fonts/inter-latin-300.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/inter-latin-400.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/inter-latin-500.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/inter-latin-600.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/inter-latin-700.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url('/fonts/inter-latin-800.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:900;font-display:swap;src:url('/fonts/inter-latin-900.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:300;font-display:swap;src:url('/fonts/inter-latin-ext-300.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/inter-latin-ext-400.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/inter-latin-ext-500.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/inter-latin-ext-600.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/inter-latin-ext-700.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url('/fonts/inter-latin-ext-800.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
    @font-face{font-family:'Inter';font-style:normal;font-weight:900;font-display:swap;src:url('/fonts/inter-latin-ext-900.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}

/* -------------------------- tokens -------------------------- */
  :root{
    /* palette atoms */
    --paper:#FAFAFC;
    --white:#FFFFFF;
    --ink:#0B0D2A;
    --slate:#4A5070;
    --line:#E3E5EF;
    --indigo:#3331C5;
    --indigo-hover:#2724A0;
    --stage:#0F0E3A;
    --stage-text2:#C9CDF2;
    --glow:#8FA2FF;
    --tint:#EEF0FF;
    --transparent: rgba(0,0,0,0);

    /* brand accent */
    --accent:var(--indigo);
    --accent-hover:var(--indigo-hover);
    --accent-contrast:var(--white);

    /* fonts - the only two font-family declarations in the whole file */
    --font-display:"Instrument Serif","Inter",serif;
    --font-body:"Inter",system-ui,sans-serif;

    /* pre-composed overlays (single tokens, not raw literals in rules) -
       one shadow token, used only by the four product mocks */
    --mock-shadow: rgba(11,13,42,0.18);
    --card-strip-bg: rgba(15,14,58,0.72);
    --sweep-mid: rgba(255,255,255,0.55);
    --header-shadow: rgba(11,13,42,0.08);
    --photo-grade: saturate(.95) contrast(1.03);

    /* page - default light chrome + the sections that never reskin */
    --page-bg:var(--paper);
    --page-surface:var(--white);
    --page-ink:var(--ink);
    --page-sub:var(--slate);
    --page-line:var(--line);

    /* header */
    --header-link:var(--slate);
    --header-link-hover:var(--ink);
    --header-border:var(--line);
    --header-btn-bg:var(--accent);
    --header-btn-fg:var(--accent-contrast);
    --locale-fg:var(--slate);
    --locale-active-bg:var(--ink);
    --locale-active-fg:var(--white);
    --locale-border:var(--line);

    /* hero */
    --hero-bg:var(--paper);
    --hero-ink:var(--ink);
    --hero-sub:var(--slate);
    --hero-fine:var(--slate);
    --hero-primary-bg:var(--accent);
    --hero-primary-fg:var(--accent-contrast);
    --hero-outline-fg:var(--ink);
    --hero-outline-border:var(--line);

    /* the matched-photo accent (ring, badge, "photos found" pill) */
    --match-accent:var(--accent);
    --match-accent-contrast:var(--accent-contrast);
    --match-pill-bg:var(--white);
    --match-pill-fg:var(--ink);
    --match-glow: 0 0 0 0 var(--transparent);
    --tile-dim-opacity:0.3;

    /* clients row */
    --clients-bg:var(--white);
    --clients-label:var(--slate);
    --clients-border:var(--line);
    --clients-logo-filter:grayscale(1);
    --clients-logo-opacity:0.55;

    /* the one dark band ("stage") - promoters + report card */
    --band-bg:var(--stage);
    --band-ink:var(--white);
    --band-sub:var(--stage-text2);
    --band-glow: rgba(143,162,255,0.35);
    --band-glow-transparent: rgba(143,162,255,0);
    --report-bar:var(--accent);

    /* final CTA band */
    --cta-bg:var(--tint);
    --cta-ink:var(--ink);
    --cta-sub:var(--slate);
    --cta-primary-bg:var(--accent);
    --cta-primary-fg:var(--accent-contrast);
    --cta-outline-fg:var(--ink);
    --cta-outline-border:var(--line);

    /* footer */
    --footer-bg:var(--white);
    --footer-ink:var(--ink);
    --footer-sub:var(--slate);
    --footer-line:var(--line);

    /* type scale (1.25 major third from 17px) */
    --fs-00:0.85rem;
    --fs-0:1.0625rem;
    --fs-1:1.3125rem;
    --fs-2:1.65625rem;
    --fs-3:2.0625rem;
    --fs-4:2.59375rem;
    --fs-5:clamp(2.1rem, 3.2vw + 1.2rem, 3.64rem); /* section headings: 58px on desktop, ~34px on phones (was fixed 58px and overflowed at 360px) */
    --fs-6:4.0625rem;
    --fs-7:clamp(2.912rem, 5.15vw + 1.12rem, 5.67rem);

    --gutter:20px;
    --radius:16px;
  }

/* -------------------------- base / reset / type -------------------------- */
  body.v2 *{box-sizing:border-box;}
  html{-webkit-text-size-adjust:100%;}
  body.v2{
    margin:0;
    background:var(--page-bg);
    color:var(--page-ink);
    font-family:var(--font-body);
    font-size:17px;
    line-height:1.65;
    -webkit-font-smoothing:antialiased;
  }
  @media (min-width:900px){ body.v2{ font-size:18px; } }
  body.v2 img{max-width:100%;display:block;}
  /* Keep the natural shape when only the width is set; :where() gives it zero weight so any component rule that crops (height + object-fit) still wins. */
  :where(body.v2) img{height:auto;}
  body.v2 a{color:inherit;}
  body.v2 p{ text-wrap:pretty; }
  body.v2 h1,
  body.v2 h2,
  body.v2 h3{
    font-optical-sizing:auto;
    line-height:1.12;
    margin:0;
    text-wrap:balance;
    color:inherit;
  }
  body.v2 h1{
    font-family:var(--font-display);
    font-weight:400;
    font-size:var(--fs-7);
    letter-spacing:-0.01em;
    line-height:1.02;
  }
  body.v2 h2{
    font-family:var(--font-display);
    font-weight:400;
    font-size:var(--fs-5);
    letter-spacing:-0.01em;
    line-height:1.08;
  }
  body.v2 h3{
    font-family:var(--font-body);
    font-weight:600;
    font-size:var(--fs-2);
    letter-spacing:-0.01em;
  }
  body.v2 p{margin:0;}
  body.v2 ul{margin:0;padding:0;list-style:none;}
  body.v2 button{font-family:inherit;}

  body.v2 a:focus-visible,
  body.v2 button:focus-visible,
  body.v2 summary:focus-visible,
  body.v2 details:focus-visible{
    outline:2px solid var(--accent);
    outline-offset:3px;
    border-radius:4px;
  }
  /* the dark band is dark, always - the indigo ring reads poorly there, so
     it focuses in white instead. */
  body.v2 .stage :focus-visible{ outline-color:var(--white); }

  body.v2 .container{
    max-width:1240px;
    margin-inline:auto;
    padding-inline:var(--gutter);
  }
  @media (min-width:640px){ body.v2 .container{ --gutter:32px; } }
  @media (min-width:1024px){ body.v2 .container{ --gutter:40px; } }

  body.v2 .measure{max-width:66ch;}

/* -------------------------- buttons + text links -------------------------- */
  /* ---------- buttons ---------- */
  body.v2 .btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    min-height:48px;
    padding:0 26px;
    border-radius:8px;
    font-size:var(--fs-0);
    font-weight:600;
    text-decoration:none;
    border:1.5px solid transparent;
    cursor:pointer;
    transition:background-color .15s ease, color .15s ease, border-color .15s ease;
  }
  body.v2 .btn-primary{ background:var(--accent); color:var(--accent-contrast); }
  body.v2 .btn-primary:hover{ background:var(--accent-hover); }
  body.v2 .btn-outline{ background:transparent; color:var(--page-ink); border-color:var(--page-line); }
  body.v2 .btn-outline:hover{ border-color:var(--accent); color:var(--accent); }
  body.v2 .btn-white{ background:var(--white); color:var(--accent); }
  body.v2 .btn-white:hover{ background:var(--band-sub); }
  body.v2 .btn-sm{ min-height:44px; padding:0 20px; }

  body.v2 .text-link{
    display:inline-flex;
    align-items:center;
    gap:6px;
    color:var(--accent);
    text-decoration:none;
    font-weight:600;
    border-bottom:1px solid transparent;
  }
  body.v2 .text-link:hover{ border-bottom-color:var(--accent); }

  body.v2 .mock-link{
    display:inline-flex;
    color:var(--accent);
    font-weight:600;
    font-size:0.9rem;
    border-bottom:1px solid transparent;
    cursor:default;
  }

  body.v2 .stage-word{
    display:block;
    color:var(--accent);
    font-weight:600;
    font-size:0.9rem;
    margin-bottom:10px;
  }


/* -------------------------- header, features panel, mobile sheet -------------------------- */
  :is(body.v2, body.v2-chrome) .site-header{
    position:sticky;
    top:0;
    z-index:50;
    background:transparent;
    border-bottom:1px solid transparent;
  }
  @media (prefers-reduced-motion:no-preference){
    :is(body.v2, body.v2-chrome) .site-header{ transition:background-color .2s ease, border-color .2s ease, box-shadow .2s ease; }
  }
  :is(body.v2, body.v2-chrome) .site-header.is-scrolled{
    background:var(--white);
    backdrop-filter:blur(8px);
    border-bottom-color:var(--header-border);
    box-shadow:0 4px 16px var(--header-shadow);
  }
  :is(body.v2, body.v2-chrome) .header-row{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:24px;
    padding-block:14px;
  }
  :is(body.v2, body.v2-chrome) .brand{ display:flex; align-items:center; }
  :is(body.v2, body.v2-chrome) .brand img{ height:28px; width:auto; }
  :is(body.v2, body.v2-chrome) .nav-links{
    display:none;
    align-items:center;
    gap:32px;
  }
  :is(body.v2, body.v2-chrome) .nav-links a{
    text-decoration:none;
    color:var(--header-link);
    font-size:0.95rem;
    font-weight:500;
    white-space:nowrap;
  }
  :is(body.v2, body.v2-chrome) .nav-links a:hover{ color:var(--header-link-hover); }
  :is(body.v2, body.v2-chrome) .nav-links a.is-active{ color:var(--page-ink); font-weight:700; }
  :is(body.v2, body.v2-chrome) .nav-item-features{ position:relative; }
  :is(body.v2, body.v2-chrome) .nav-features-trigger{
    background:none;
    border:0;
    cursor:pointer;
    font:inherit;
    font-family:var(--font-body);
    color:var(--header-link);
    font-size:0.95rem;
    font-weight:500;
    padding:0;
    white-space:nowrap;
  }
  :is(body.v2, body.v2-chrome) .nav-features-trigger:hover{ color:var(--header-link-hover); }
  :is(body.v2, body.v2-chrome) .nav-features-trigger.is-active{ color:var(--page-ink); font-weight:700; }
  :is(body.v2, body.v2-chrome) .features-panel{
    display:none;
    position:absolute;
    top:calc(100% + 20px);
    left:50%;
    transform:translateX(-50%);
    width:min(760px, 90vw);
    background:var(--white);
    border:1px solid var(--page-line);
    border-radius:16px;
    box-shadow:0 20px 50px var(--header-shadow);
    padding:28px;
    z-index:40;
  }
  :is(body.v2, body.v2-chrome) .nav-item-features:hover .features-panel,
  :is(body.v2, body.v2-chrome) .nav-item-features:focus-within .features-panel,
  :is(body.v2, body.v2-chrome) .nav-item-features.is-open .features-panel{ display:block; }
  :is(body.v2, body.v2-chrome) .features-panel-inner{
    display:grid;
    grid-template-columns:repeat(3,1fr);
    gap:28px;
  }
  :is(body.v2, body.v2-chrome) .features-col-title{
    font-family:var(--font-body);
    font-size:13px;
    font-weight:600;
    color:var(--accent);
    margin-bottom:12px;
  }
  :is(body.v2, body.v2-chrome) .features-item{
    display:flex;
    align-items:flex-start;
    gap:10px;
    padding-block:8px;
    text-decoration:none;
    color:var(--page-ink);
  }
  :is(body.v2, body.v2-chrome) .features-item-icon{ flex-shrink:0; margin-top:2px; color:var(--page-sub); }
  :is(body.v2, body.v2-chrome) .features-item-body{ display:flex; flex-direction:column; }
  :is(body.v2, body.v2-chrome) .features-item-title{ font-size:14px; font-weight:600; }
  :is(body.v2, body.v2-chrome) .features-item-desc{ font-weight:400; color:var(--page-sub); font-size:13px; margin-top:2px; }
  :is(body.v2, body.v2-chrome) .header-right{ display:flex; align-items:center; gap:14px; }
  :is(body.v2, body.v2-chrome) .locale-pill{
    display:none;
    align-items:center;
    border:1px solid var(--locale-border);
    border-radius:20px;
    overflow:hidden;
    font-size:0.8rem;
    font-weight:600;
  }
  :is(body.v2, body.v2-chrome) .locale-pill a{
    padding:6px 12px;
    text-decoration:none;
    color:var(--locale-fg);
  }
  :is(body.v2, body.v2-chrome) .locale-pill a.is-active{ background:var(--locale-active-bg); color:var(--locale-active-fg); }
  :is(body.v2, body.v2-chrome) .locale-pill span.locale-disabled{ padding:6px 12px; color:var(--locale-fg); opacity:0.4; cursor:not-allowed; }
  :is(body.v2, body.v2-chrome) .header-btn{ background:var(--header-btn-bg); color:var(--header-btn-fg); }
  :is(body.v2, body.v2-chrome) .header-btn:hover{ opacity:0.9; }
  :is(body.v2, body.v2-chrome) .menu-btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    width:44px;
    height:44px;
    border-radius:8px;
    border:1px solid var(--page-line);
    background:var(--page-surface);
    color:var(--page-ink);
  }
  /* 1024px, not 900px: at six top-level links (How it works, Use cases,
     Blog, Pricing, Company, plus the Features trigger) the row wrapped
     onto two lines between 900-1023px - "How it works"/"Use cases" broke
     mid-phrase. Nowrap on the links stops the WORD wrapping; raising the
     breakpoint stops the ROW itself running out of space before then. */
  @media (min-width:1024px){
    :is(body.v2, body.v2-chrome) .nav-links{ display:flex; }
    :is(body.v2, body.v2-chrome) .locale-pill{ display:flex; }
    :is(body.v2, body.v2-chrome) .menu-btn{ display:none; }
  }

  :is(body.v2, body.v2-chrome) .mobile-sheet{
    position:fixed;
    inset:0;
    z-index:60;
    background:var(--page-bg);
    display:none;
    flex-direction:column;
    padding:20px;
    overflow-y:auto;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet.is-open{ display:flex; }
  :is(body.v2, body.v2-chrome) .mobile-sheet-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    margin-bottom:24px;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet-close{
    width:44px;
    height:44px;
    border-radius:8px;
    border:1px solid var(--page-line);
    background:var(--page-surface);
    color:var(--page-ink);
    display:inline-flex;
    align-items:center;
    justify-content:center;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet-links{ display:flex; flex-direction:column; }
  :is(body.v2, body.v2-chrome) .mobile-sheet-links a{
    padding:12px 4px;
    border-bottom:1px solid var(--page-line);
    text-decoration:none;
    color:var(--page-ink);
    font-size:1rem;
    font-weight:600;
    min-height:44px;
    display:flex;
    align-items:center;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet-group-title{
    font-family:var(--font-body);
    font-size:13px;
    font-weight:600;
    color:var(--accent);
    margin:20px 4px 4px;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet-group-title:first-child{ margin-top:4px; }
  :is(body.v2, body.v2-chrome) .mobile-sheet-locale{ display:flex; gap:10px; margin-top:24px; }
  :is(body.v2, body.v2-chrome) .mobile-sheet-locale a{
    flex:1;
    text-align:center;
    padding:12px;
    border:1px solid var(--page-line);
    border-radius:8px;
    text-decoration:none;
    color:var(--page-ink);
    font-weight:600;
  }
  :is(body.v2, body.v2-chrome) .mobile-sheet-locale span.locale-disabled{
    flex:1;
    text-align:center;
    padding:12px;
    border:1px solid var(--page-line);
    border-radius:8px;
    color:var(--page-sub);
    font-weight:600;
    opacity:0.5;
    cursor:not-allowed;
  }

/* ==========================================================================
   CHROME RESET - a page still carrying `body.v2-chrome` still loads
   shared.css (and, on a blog post, blog.css too), and shared.css styles a
   bare `<nav>`/`<footer>` element and the class name `.container` GLOBALLY -
   the new header and footer reuse those exact names. Every rule in this
   block is scoped to ONLY the four chrome containers (site-header,
   mobile-sheet, site-footer, features-panel), at a specificity
   shared.css's bare-element and single-class rules can never beat.

   KEPT DELIBERATELY MINIMAL, and that is the load-bearing lesson from this
   block's first draft: a broad reset such as `<containers> a{color:inherit}`
   LOOKS harmless but is TIED in specificity (two classes + one element, same
   as `.nav-links a`/`.footer-col a`/`.nav-features-trigger`'s own button
   rule) with the real per-context colour/background rules those elements
   already carry lower or further down this file - a tie is won by whichever
   is LATER in the file, not by "intent", so a reset like that silently
   recoloured every non-active nav link to the same dark ink as the active
   one and stripped the Features-trigger button and the menu button of their
   background/border (found by reading COMPUTED style, not by looking - the
   screenshots alone did not show it). `ul,ol` below is the one broad
   reset actually needed AND safe: shared.css has no bare `ul`/`ol`/`li`
   rule to collide with, but it also has no list-style:none for one either
   (that lives on `body.v2 ul` - page content only), so without this the
   footer's four columns would show bullets. Do not add another broad
   tag-only rule here without checking every existing chrome rule for a
   specificity TIE against it, not just "does shared.css define this tag".
   ========================================================================== */
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) :is(ul, ol){
    margin:0; padding:0; list-style:none;
  }
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) :is(a, button, summary, details):focus-visible{
    outline:2px solid var(--accent); outline-offset:3px; border-radius:4px;
  }

  /* shared.css: `nav{position:fixed;top:0;left:0;right:0;height:60px;
     background:...;backdrop-filter:...;border-bottom:...}` targets ANY
     <nav> - including the new header's own `<nav class="nav-links">` -
     which would otherwise float it fixed over the page at a stale 60px. */
  :is(body.v2, body.v2-chrome) nav.nav-links{
    position:static; inset:auto; height:auto; z-index:auto;
    padding:0; margin:0; background:none; backdrop-filter:none;
    border:0; box-shadow:none;
  }
  /* This ALSO neutralises shared.css's own `@media(max-width:900px){
     .nav-links{display:none;position:fixed;top:60px;...}}` (its responsive
     nav overlay): that rule is a single class inside a media query, still
     lower specificity than the flat override two classes above, so it never
     wins at any width - `display` for the new header's `.nav-links` is
     handled entirely by its own >=1024px rule further up this file (the
     new mobile sheet is the real menu below that). */

  /* shared.css/blog.css: `.container{max-width:1200px;margin:0 auto;
     padding:0 6%}` - the header-row and footer both sit inside their own
     `.container`, which needs THIS system's width/gutter, not shared.css's. */
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .container{
    max-width:1240px;
    margin-inline:auto;
    padding-inline:var(--gutter);
  }
  @media (min-width:640px){
    :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .container{ --gutter:32px; }
  }
  @media (min-width:1024px){
    :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .container{ --gutter:40px; }
  }

  /* Not a shared.css collision (it has no bare `.btn` class - only
     `.btn-primary`/`.btn-outline`/`.btn-nav`/`.btn-ghost`, different names)
     - `.btn`/`.btn-sm` are THIS system's own base recipe, deliberately kept
     `body.v2`-only everywhere else (page content reuses the name too), so
     the header's Login button (`class="btn header-btn btn-sm"`) needs its
     own copy scoped to just these containers or it renders unstyled. */
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .btn{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    gap:8px;
    min-height:48px;
    padding:0 26px;
    border-radius:8px;
    font-size:var(--fs-0);
    font-weight:600;
    text-decoration:none;
    border:1.5px solid transparent;
    cursor:pointer;
    transition:background-color .15s ease, color .15s ease, border-color .15s ease;
  }
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .btn-sm{ min-height:44px; padding:0 20px; }
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .header-btn{ background:var(--header-btn-bg); color:var(--header-btn-fg); }
  :is(body.v2, body.v2-chrome) :is(.site-header, .mobile-sheet, .site-footer, .features-panel) .header-btn:hover{ opacity:0.9; }

/* ==========================================================================
   OLD-PAGE HEADER CLEARANCE - body.v2-chrome ONLY (never body.v2 - a fully
   redesigned page uses site.css's own `.v2-page-hero`/`.breadcrumb`, already
   designed around a sticky header, and never carries these OLD classes).
   shared.css's `.breadcrumb{padding:80px 6% 0}` and `.page-hero{padding:100px
   6% 60px}` (plus one page's own inline `.legal-wrap`/`.ty-wrap`) sized their
   TOP padding to clear a FIXED 60px nav that overlaid the page - the content
   below it started at document y=0, so 80px/100px was "60px of nav plus
   20-40px of breathing room". The new header is STICKY, i.e. IN FLOW: it
   already pushes everything below it down by its own real height (measured
   73px at every width tested). Left unchanged, the two clearances would
   stack (73px header + 80-100px old padding), which is the "big gap under
   the header" this fixes. Reduced here to a real, still-deliberate gap
   below the in-flow header, never to 0. */
  body.v2-chrome .breadcrumb{ padding-top:20px; }
  body.v2-chrome .page-hero{ padding-top:40px; }
  body.v2-chrome .legal-wrap{ padding-top:24px; }
  body.v2-chrome .ty-wrap{ padding-top:24px; }


/* -------------------------- section rhythm -------------------------- */
  /* ---------- section shells ---------- */
  body.v2 section{ padding-block:72px; }
  @media (min-width:900px){ body.v2 section{ padding-block:120px; } }
  body.v2 .on-white{ background:var(--page-surface); }
  body.v2 .section-head{ max-width:640px; margin-bottom:48px; }
  body.v2 .section-head p{ color:var(--page-sub); font-size:1.1rem; margin-top:14px; }


/* -------------------------- footer -------------------------- */
  :is(body.v2, body.v2-chrome) .site-footer{ background:var(--footer-bg); color:var(--footer-ink); border-top:1px solid var(--footer-line); padding-block:56px 32px; padding-inline:0; }
  :is(body.v2, body.v2-chrome) .footer-top{
    display:grid;
    grid-template-columns:1fr;
    gap:36px;
    margin-bottom:40px;
  }
  @media (min-width:640px){
    :is(body.v2, body.v2-chrome) .footer-top{ grid-template-columns:1fr 1fr; }
  }
  @media (min-width:1024px){
    :is(body.v2, body.v2-chrome) .footer-top{ grid-template-columns:1.3fr 1fr 1fr 1fr 1fr; }
  }
  :is(body.v2, body.v2-chrome) .footer-brand img{ height:26px; margin-bottom:14px; }
  :is(body.v2, body.v2-chrome) .footer-brand p{ color:var(--footer-sub); font-size:0.95rem; max-width:32ch; }
  :is(body.v2, body.v2-chrome) .footer-col h4, :is(body.v2, body.v2-chrome) .footer-col .footer-heading{
    font-size:0.85rem;
    font-weight:600;
    color:var(--footer-ink);
    margin-bottom:16px;
  }
  :is(body.v2, body.v2-chrome) .footer-col ul{ display:flex; flex-direction:column; gap:12px; }
  :is(body.v2, body.v2-chrome) .footer-col a{
    color:var(--footer-sub);
    text-decoration:none;
    font-size:0.92rem;
  }
  :is(body.v2, body.v2-chrome) .footer-col a:hover{ color:var(--accent); }
  :is(body.v2, body.v2-chrome) .footer-social-row{
    display:flex;
    flex-wrap:wrap;
    align-items:center;
    gap:20px;
    padding-top:28px;
    margin-top:28px;
    border-top:1px solid var(--footer-line);
  }
  :is(body.v2, body.v2-chrome) .footer-social-icons{ display:flex; gap:12px; }
  :is(body.v2, body.v2-chrome) .footer-social-icons a{
    display:inline-flex;
    align-items:center;
    justify-content:center;
    width:36px;
    height:36px;
    border-radius:50%;
    border:1px solid var(--footer-line);
    color:var(--footer-sub);
  }
  :is(body.v2, body.v2-chrome) .footer-social-icons a:hover{ color:var(--accent); border-color:var(--accent); }
  :is(body.v2, body.v2-chrome) .footer-locale-switch{
    display:inline-flex;
    align-items:center;
    border:1px solid var(--footer-line);
    border-radius:20px;
    overflow:hidden;
    font-size:0.8rem;
    font-weight:600;
  }
  :is(body.v2, body.v2-chrome) .footer-locale-switch a{ padding:6px 12px; text-decoration:none; color:var(--footer-sub); }
  :is(body.v2, body.v2-chrome) .footer-locale-switch a.is-active{ background:var(--footer-ink); color:var(--footer-bg); }
  :is(body.v2, body.v2-chrome) .footer-locale-switch span.locale-disabled{ padding:6px 12px; color:var(--footer-sub); opacity:0.4; cursor:not-allowed; }
  :is(body.v2, body.v2-chrome) .footer-reviews{ display:flex; gap:20px; margin-inline-start:auto; }
  :is(body.v2, body.v2-chrome) .footer-reviews a{ color:var(--footer-sub); text-decoration:none; font-size:0.85rem; font-weight:500; }
  :is(body.v2, body.v2-chrome) .footer-reviews a:hover{ color:var(--accent); }
  :is(body.v2, body.v2-chrome) .footer-bottom{
    border-top:1px solid var(--footer-line);
    padding-top:24px;
    color:var(--footer-sub);
    font-size:0.85rem;
    display:flex;
    flex-wrap:wrap;
    align-items:center;
    justify-content:space-between;
    gap:12px;
  }
  :is(body.v2, body.v2-chrome) .footer-legal{ display:flex; gap:16px; }
  :is(body.v2, body.v2-chrome) .footer-legal a{ color:var(--footer-sub); text-decoration:none; }
  :is(body.v2, body.v2-chrome) .footer-legal a:hover{ color:var(--accent); }


/* -------------------------- accessibility helpers -------------------------- */
  :is(body.v2, body.v2-chrome) .sr-only{
    position:absolute;
    width:1px;height:1px;
    padding:0;margin:-1px;
    overflow:hidden;
    clip:rect(0,0,0,0);
    white-space:nowrap;
    border:0;
  }

    /* Skip-to-content link, same tokens as everything else here. */
    :is(body.v2, body.v2-chrome) .skip-link{ position:absolute; left:-9999px; top:0; z-index:1001; background:var(--page-surface); color:var(--page-ink); border:1px solid var(--page-line); border-radius:0 0 8px 0; padding:0.7rem 1.1rem; font-size:0.85rem; font-weight:600; text-decoration:none; }
    :is(body.v2, body.v2-chrome) .skip-link:focus{ left:0; }
    /* A <picture> wrapper must not become a sizing box of its own - every
       component here was written assuming its <img> is a direct flex/grid/
       block child (width:100%;height:100%, aspect-ratio boxes, absolute
       insets). display:contents removes the <picture> from layout so its
       <img> responds to the real parent exactly as it did before. */
    body.v2 picture{ display:contents; }


/* ==========================================================================
   FLOATS: back-to-top, WhatsApp float, cookie banner, exit popup.
   Tokened versions of the homepage's own inline copies (index.html), so an
   inner page that drops shared.css gets the identical widget.
   ========================================================================== */
  :is(body.v2, body.v2-chrome) .back-to-top{
    position:fixed;
    bottom:96px;
    inset-inline-end:28px;
    z-index:998;
    width:44px;
    height:44px;
    border-radius:50%;
    background:var(--white);
    border:1px solid var(--page-line);
    color:var(--page-sub);
    cursor:pointer;
    display:flex;
    align-items:center;
    justify-content:center;
    opacity:0;
    pointer-events:none;
    box-shadow:0 8px 24px var(--header-shadow);
    transition:opacity .2s ease, transform .2s ease, color .15s ease, border-color .15s ease;
  }
  :is(body.v2, body.v2-chrome) .back-to-top.visible{ opacity:1; pointer-events:auto; }
  :is(body.v2, body.v2-chrome) .back-to-top:hover{ color:var(--accent); border-color:var(--accent); transform:translateY(-2px); }
  :is(body.v2, body.v2-chrome) .back-to-top svg{ width:16px; height:16px; }
  @media (max-width:639px){ :is(body.v2, body.v2-chrome) .back-to-top{ bottom:84px; inset-inline-end:16px; width:40px; height:40px; } }

  :is(body.v2, body.v2-chrome) .wa-float{ position:fixed; bottom:28px; inset-inline-end:28px; z-index:999; width:54px; height:54px; border-radius:50%; background:#25d366; color:#fff; border:none; cursor:pointer; display:flex; align-items:center; justify-content:center; overflow:hidden; box-shadow:0 4px 20px rgba(37,211,102,.4); text-decoration:none; transition:transform .2s,box-shadow .2s; }
  :is(body.v2, body.v2-chrome) .wa-float:hover{ transform:scale(1.08); box-shadow:0 6px 28px rgba(37,211,102,.55); }
  :is(body.v2, body.v2-chrome) .wa-float svg{ width:26px; height:26px; }
  :is(body.v2, body.v2-chrome) .wa-tooltip{ position:absolute; inset-inline-end:64px; top:50%; transform:translateY(-50%); background:rgba(255,255,255,.95); border:1px solid var(--page-line); border-radius:8px; padding:.4rem .75rem; font-size:.78rem; font-weight:600; color:var(--page-ink); white-space:nowrap; opacity:0; pointer-events:none; transition:opacity .2s; }
  :is(body.v2, body.v2-chrome) .wa-float:hover .wa-tooltip{ opacity:1; }
  @media (max-width:639px){ :is(body.v2, body.v2-chrome) .wa-float{ width:46px; height:46px; bottom:18px; inset-inline-end:16px; } :is(body.v2, body.v2-chrome) .wa-tooltip{ display:none; } }

  :is(body.v2, body.v2-chrome) #cookie-banner{ position:fixed; bottom:0; left:0; right:0; z-index:1000; padding:1.1rem 6%; background:rgba(255,255,255,.97); backdrop-filter:blur(20px); border-top:1px solid var(--page-line); display:flex; align-items:center; justify-content:space-between; gap:1.5rem; flex-wrap:wrap; transform:translateY(100%); transition:transform .35s ease; }
  :is(body.v2, body.v2-chrome) #cookie-banner.show{ transform:translateY(0); }
  :is(body.v2, body.v2-chrome) .cookie-text{ font-size:.82rem; color:var(--page-sub); line-height:1.6; max-width:700px; }
  :is(body.v2, body.v2-chrome) .cookie-text a{ color:var(--accent); text-decoration:none; }
  :is(body.v2, body.v2-chrome) .cookie-text a:hover{ text-decoration:underline; }
  :is(body.v2, body.v2-chrome) .cookie-btns{ display:flex; gap:.65rem; flex-shrink:0; flex-wrap:wrap; }
  :is(body.v2, body.v2-chrome) .cookie-accept{ font-size:.82rem; font-weight:700; color:#fff; background:var(--accent); border:none; border-radius:7px; padding:.5rem 1.2rem; cursor:pointer; }
  :is(body.v2, body.v2-chrome) .cookie-accept:hover{ background:var(--accent-hover); }
  :is(body.v2, body.v2-chrome) .cookie-decline{ font-size:.82rem; font-weight:600; color:var(--page-sub); background:transparent; border:1px solid var(--page-line); border-radius:7px; padding:.5rem 1rem; cursor:pointer; }

  :is(body.v2, body.v2-chrome) #exit-popup{ position:fixed; inset:0; z-index:2000; display:flex; align-items:center; justify-content:center; opacity:0; pointer-events:none; transition:opacity .3s; }
  :is(body.v2, body.v2-chrome) #exit-popup.open{ opacity:1; pointer-events:auto; }
  :is(body.v2, body.v2-chrome) .exit-overlay{ position:absolute; inset:0; background:rgba(11,13,42,.55); backdrop-filter:blur(4px); }
  :is(body.v2, body.v2-chrome) .exit-card{ position:relative; background:var(--white); border:1px solid var(--page-line); border-radius:var(--radius); padding:2.5rem 2rem; max-width:460px; width:calc(100% - 2rem); z-index:1; text-align:center; }
  :is(body.v2, body.v2-chrome) .exit-close{ position:absolute; top:1rem; inset-inline-end:1rem; background:none; border:none; color:var(--page-sub); font-size:1.4rem; cursor:pointer; line-height:1; padding:.25rem .5rem; }
  :is(body.v2, body.v2-chrome) .exit-close:hover{ color:var(--page-ink); }
  :is(body.v2, body.v2-chrome) .exit-badge{ font-size:.7rem; font-weight:700; color:var(--accent); background:var(--tint); border:1px solid rgba(51,49,197,.2); border-radius:100px; padding:.3rem .85rem; display:inline-block; margin-bottom:1.25rem; }
  :is(body.v2, body.v2-chrome) .exit-title{ font-family:var(--font-display); font-weight:400; font-size:clamp(1.5rem,3vw,1.9rem); line-height:1.15; margin-bottom:.75rem; color:var(--page-ink); }
  :is(body.v2, body.v2-chrome) .exit-title em{ font-style:normal; color:var(--accent); }
  :is(body.v2, body.v2-chrome) .exit-sub{ font-size:.88rem; color:var(--page-sub); line-height:1.65; margin-bottom:1.5rem; }
  :is(body.v2, body.v2-chrome) .exit-submit{ display:block; background:var(--accent); color:#fff; border:none; border-radius:8px; padding:.85rem 1.5rem; font-size:.9rem; font-weight:700; text-decoration:none; }
  :is(body.v2, body.v2-chrome) .exit-submit:hover{ background:var(--accent-hover); }
  :is(body.v2, body.v2-chrome) .exit-note{ font-size:.75rem; color:var(--page-sub); margin-top:.85rem; }

  body.v2 .read-progress{ position:fixed; top:0; left:0; right:0; height:3px; z-index:1001; background:transparent; }
  body.v2 .read-progress span{ display:block; height:100%; width:0; background:var(--accent); transition:width .1s linear; }

/* ==========================================================================
   V2: breadcrumb (shared shape for feature pages and articles)
   ========================================================================== */
  body.v2 .breadcrumb{
    display:flex;
    align-items:center;
    gap:8px;
    flex-wrap:wrap;
    font-size:.82rem;
    color:var(--page-sub);
    margin-bottom:20px;
  }
  body.v2 .breadcrumb a{ color:var(--page-sub); text-decoration:none; }
  body.v2 .breadcrumb a:hover{ color:var(--accent); }
  body.v2 .breadcrumb svg{ opacity:.5; flex-shrink:0; }
  body.v2 .breadcrumb span[aria-current],
  body.v2 .breadcrumb > span:last-child{ color:var(--page-ink); font-weight:500; }

/* ==========================================================================
   V2: small labels
   ========================================================================== */
  body.v2 .v2-eyebrow{
    display:inline-block;
    font-size:.85rem;
    font-weight:600;
    color:var(--accent);
    margin-bottom:14px;
  }

/* ==========================================================================
   V2: inner-page hero (feature pages, and any non-home landing page)
   ========================================================================== */
  body.v2 .v2-page-hero{ padding-block:56px 64px; }
  @media (max-width:639px){ body.v2 .v2-page-hero{ padding-block:32px 48px; } }
  body.v2 .v2-page-hero h1{ font-size:var(--fs-6); margin-bottom:20px; max-width:20ch; }
  @media (max-width:639px){ body.v2 .v2-page-hero h1{ font-size:var(--fs-4); } }
  body.v2 .v2-page-hero-lead{ font-size:1.15rem; color:var(--page-sub); max-width:56ch; margin-bottom:28px; }
  @media (max-width:639px){ body.v2 .v2-page-hero-lead{ font-size:var(--fs-0); } }
  body.v2 .v2-page-hero-actions{ display:flex; flex-wrap:wrap; gap:14px; margin-bottom:18px; }
  body.v2 .v2-page-hero-note{ font-size:.9rem; color:var(--page-sub); max-width:60ch; display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
  body.v2 .v2-hero-dot{ width:4px; height:4px; border-radius:50%; background:var(--page-sub); flex-shrink:0; }

  /* the hero's optional visual column (e.g. the lanyard badge component) -
     text 7/12, visual 5/12, vertically centred; single column and the
     visual BELOW the copy (buttons included) below 1024px, at a smaller
     scale so it reads as a supporting detail, not competing with the CTAs. */
  body.v2 .v2-page-hero-grid{ display:grid; grid-template-columns:1fr; gap:36px; align-items:center; }
  @media (min-width:1024px){
    body.v2 .v2-page-hero-grid{ grid-template-columns:7fr 5fr; gap:56px; }
  }
  body.v2 .v2-page-hero-visual{ display:flex; justify-content:center; }
  @media (max-width:1023px){
    body.v2 .v2-page-hero-visual{ --ev-badge-width:190px; margin-block:4px 8px; }
  }

/* ==========================================================================
   V2: feature grid / feature list rows (clean, no illustration)
   ========================================================================== */
  body.v2 .v2-feature-grid{
    display:grid;
    grid-template-columns:1fr;
    gap:28px;
  }
  @media (min-width:768px){ body.v2 .v2-feature-grid{ grid-template-columns:repeat(3,1fr); gap:32px; } }
  body.v2 .v2-feature-card{ }
  body.v2 .v2-feature-icon{
    display:flex;
    align-items:center;
    justify-content:center;
    width:44px;
    height:44px;
    border-radius:10px;
    background:var(--tint);
    color:var(--accent);
    margin-bottom:18px;
  }
  body.v2 .v2-feature-card h3{ font-size:var(--fs-1); margin-bottom:8px; }
  body.v2 .v2-feature-card p{ color:var(--page-sub); }

  body.v2 .v2-feature-list{ border-top:1px solid var(--page-line); }
  body.v2 .v2-feature-list-row{
    display:flex;
    gap:16px;
    padding-block:22px;
    border-bottom:1px solid var(--page-line);
  }
  body.v2 .v2-feature-list-icon{ flex-shrink:0; color:var(--accent); margin-top:2px; }
  body.v2 .v2-feature-list-row h3{ font-family:var(--font-body); font-size:1.05rem; font-weight:600; margin-bottom:4px; }
  body.v2 .v2-feature-list-row p{ color:var(--page-sub); }

/* ==========================================================================
   V2: two-column text/image rows
   ========================================================================== */
  body.v2 .v2-row{
    display:grid;
    grid-template-columns:1fr;
    gap:40px;
    align-items:center;
  }
  body.v2 .v2-row + .v2-row{ margin-top:72px; }
  @media (min-width:900px){
    body.v2 .v2-row{ grid-template-columns:1fr 1fr; gap:56px; }
    body.v2 .v2-row.is-reversed .v2-row-visual{ order:2; }
    body.v2 .v2-row.is-reversed .v2-row-text{ order:1; }
  }
  body.v2 .v2-row-visual img{ border-radius:var(--radius); width:100%; filter:var(--photo-grade); }
  body.v2 .v2-row-text h3{ font-family:var(--font-display); font-weight:400; font-size:var(--fs-2); margin-bottom:14px; }
  body.v2 .v2-row-text p{ color:var(--page-sub); margin-bottom:16px; }
  body.v2 .v2-row-text p:last-child{ margin-bottom:0; }
  body.v2 .v2-row-text ul{ display:flex; flex-direction:column; gap:10px; }
  body.v2 .v2-row-text li{ color:var(--page-sub); padding-inline-start:22px; position:relative; }
  body.v2 .v2-row-text li::before{ content:""; position:absolute; inset-inline-start:0; top:.55em; width:8px; height:8px; border-radius:50%; background:var(--accent); }

/* ==========================================================================
   V2: CTA band (reusable final call-to-action, inner pages)
   ========================================================================== */
  body.v2 .v2-cta-band{ background:var(--cta-bg); color:var(--cta-ink); }
  body.v2 .v2-cta-band .container{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:40px;
    flex-wrap:wrap;
  }
  body.v2 .v2-cta-band h2{ max-width:18ch; }
  body.v2 .v2-cta-band-right{ display:flex; flex-direction:column; align-items:flex-start; gap:10px; }
  body.v2 .v2-cta-band-right .v2-page-hero-actions{ margin-bottom:0; }
  body.v2 .v2-cta-note{ font-size:.85rem; color:var(--cta-sub); }
  @media (max-width:767px){ body.v2 .v2-cta-band .container{ flex-direction:column; align-items:flex-start; } }

/* ==========================================================================
   V2: long-form article layout (blog posts)
   A sticky table-of-contents column beside the prose, achieved with NO DOM
   change: .article-header is flattened with display:contents so its own
   children (tag, title, meta line, hero image, TOC) become direct items of
   the same named-area grid as .article-body and the related-posts wrapper.
   ========================================================================== */
  body.v2 .article-wrap{ max-width:1080px; margin-inline:auto; padding-block:40px 96px; }
  body.v2 .article-wrap{
    display:grid;
    grid-template-columns:1fr;
    gap:28px;
    grid-template-areas:
      "tag" "title" "meta" "hero" "toc" "body" "related";
  }
  @media (min-width:1024px){
    body.v2 .article-wrap{
      grid-template-columns:240px minmax(0,760px);
      column-gap:64px;
      row-gap:32px;
      grid-template-areas:
        "tag    tag"
        "title  title"
        "meta   meta"
        "hero   hero"
        "toc    body"
        "toc    related";
      align-items:start;
    }
  }
  body.v2 .article-header{ display:contents; }
  body.v2 .article-tag{ grid-area:tag; }
  body.v2 .article-title{ grid-area:title; }
  body.v2 .article-meta{ grid-area:meta; }
  body.v2 .article-hero{ grid-area:hero; }
  body.v2 .post-toc{ grid-area:toc; }
  body.v2 .article-body{ grid-area:body; min-width:0; }
  body.v2 .article-wrap > div[style*="margin-top: 4rem"]{ grid-area:related; margin-top:0 !important; }

  body.v2 .article-tag{
    display:inline-block;
    font-size:.85rem;
    font-weight:600;
    color:var(--accent);
    margin-bottom:4px;
  }
  body.v2 .article-title{
    font-family:var(--font-display);
    font-weight:400;
    font-size:var(--fs-5);
    line-height:1.08;
    letter-spacing:-0.01em;
    max-width:20ch;
  }
  @media (max-width:639px){ body.v2 .article-title{ font-size:var(--fs-4); } }
  body.v2 .article-meta{
    display:flex;
    align-items:center;
    gap:10px;
    flex-wrap:wrap;
    font-size:.88rem;
    color:var(--page-sub);
  }
  body.v2 .article-author{ display:flex; align-items:center; gap:8px; }
  body.v2 .article-author .author-avatar{ width:22px; height:22px; border-radius:50%; }
  body.v2 .article-hero{ width:100%; border-radius:var(--radius); filter:var(--photo-grade); }

  body.v2 .post-toc{
    font-size:.9rem;
  }
  @media (min-width:1024px){ body.v2 .post-toc{ position:sticky; top:96px; } }
  body.v2 .post-toc-label{
    font-size:.78rem;
    font-weight:600;
    color:var(--page-sub);
    margin-bottom:12px;
  }
  body.v2 .post-toc ol{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:10px; counter-reset:toc; border-inline-start:1px solid var(--page-line); }
  body.v2 .post-toc li{ counter-increment:toc; }
  body.v2 .post-toc a{
    display:flex;
    gap:10px;
    align-items:baseline;
    padding-inline-start:16px;
    margin-inline-start:-1px;
    border-inline-start:1px solid transparent;
    color:var(--page-sub);
    text-decoration:none;
    font-size:.88rem;
    line-height:1.4;
    transition:color .15s ease, border-color .15s ease;
  }
  body.v2 .post-toc a::before{ content:counter(toc, decimal-leading-zero); font-size:.72rem; font-weight:600; color:var(--accent); flex-shrink:0; }
  body.v2 .post-toc a:hover{ color:var(--page-ink); border-inline-start-color:var(--accent); }

  /* -------- prose typography, inside .article-body -------- */
  body.v2 .article-body{ font-size:18px; line-height:1.7; color:var(--page-sub); max-width:68ch; }
  body.v2 .article-body h2{
    font-family:var(--font-display);
    font-weight:400;
    font-size:var(--fs-3);
    line-height:1.15;
    color:var(--page-ink);
    letter-spacing:-0.01em;
    margin:44px 0 16px;
  }
  body.v2 .article-body h3{
    font-family:var(--font-body);
    font-weight:600;
    font-size:var(--fs-1);
    color:var(--page-ink);
    margin:32px 0 12px;
  }
  body.v2 .article-body > p{ margin-bottom:20px; }
  body.v2 .article-body ul,
  body.v2 .article-body ol{ margin:0 0 20px; padding-inline-start:22px; list-style:disc; }
  body.v2 .article-body ol{ list-style:decimal; }
  body.v2 .article-body li{ margin-bottom:8px; }
  body.v2 .article-body strong{ color:var(--page-ink); font-weight:600; }
  /* Scoped to actual PROSE containers (:where() carries zero specificity
     of its own, so this is exactly as specific as a bare `.article-body a`
     would be) rather than excluding component classes one at a time. The
     FAQ/share row/CTA card are markup children of .article-body too, and
     a blanket `.article-body a` rule reached inside them - it recoloured
     a CTA button's text to match its own background (invisible), and
     turned the share row's neutral chip links blue-and-underlined. A
     prose link only ever lives inside running text, so scoping to where
     running text lives fixes both without a specificity fight. */
  body.v2 .article-body :where(p, li, blockquote, td, th, figcaption) a{ color:var(--accent); text-decoration:underline; text-underline-offset:2px; }
  body.v2 .article-body blockquote{
    margin:24px 0;
    padding:4px 0 4px 20px;
    border-inline-start:3px solid var(--accent);
    font-family:var(--font-display);
    font-size:var(--fs-1);
    color:var(--page-ink);
    line-height:1.4;
  }
  body.v2 .article-body code{
    font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size:.85em;
    background:var(--tint);
    color:var(--page-ink);
    padding:.15em .4em;
    border-radius:5px;
  }
  body.v2 .article-body figure{ margin:28px 0; }
  body.v2 .article-body figure img{ width:100%; border-radius:var(--radius); }
  body.v2 .article-body figcaption{ margin-top:10px; font-size:.85rem; color:var(--page-sub); text-align:center; }

  body.v2 .article-callout{
    background:var(--tint);
    border-inline-start:3px solid var(--accent);
    border-radius:10px;
    padding:20px 24px;
    margin:28px 0;
  }
  body.v2 .article-callout p{ margin:0 !important; font-size:.98rem; }
  body.v2 .article-tip{
    background:var(--page-surface);
    border:1px solid var(--page-line);
    border-radius:10px;
    padding:20px 24px;
    margin:28px 0;
  }
  body.v2 .article-tip p{ margin:0 !important; font-size:.98rem; }

  body.v2 .post-takeaways{
    background:var(--tint);
    border-inline-start:3px solid var(--accent);
    border-radius:10px;
    padding:22px 26px;
    margin:8px 0 32px;
  }
  body.v2 .post-takeaways-label{ font-size:.78rem; font-weight:600; color:var(--page-sub); margin-bottom:14px; }
  body.v2 .post-takeaways ul{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:10px; }
  body.v2 .post-takeaways li{ padding-inline-start:20px; position:relative; margin:0; font-size:.98rem; }
  body.v2 .post-takeaways li::before{ content:""; position:absolute; inset-inline-start:0; top:.6em; width:6px; height:6px; border-radius:50%; background:var(--accent); }
  body.v2 .post-takeaways li strong{ color:var(--page-ink); }

  body.v2 .table-wrap{ overflow-x:auto; margin:28px 0; border:1px solid var(--page-line); border-radius:var(--radius); background:var(--white); }
  body.v2 .article-table{ width:100%; border-collapse:collapse; font-size:.92rem; }
  body.v2 .article-table caption{ caption-side:top; text-align:start; padding:16px 20px 8px; font-size:.82rem; color:var(--page-sub); font-weight:600; }
  body.v2 .article-table th,
  body.v2 .article-table td{ text-align:start; padding:14px 20px; border-bottom:1px solid var(--page-line); vertical-align:top; line-height:1.55; }
  body.v2 .article-table thead th{ font-size:.75rem; font-weight:700; color:var(--page-sub); background:var(--paper); white-space:nowrap; }
  body.v2 .article-table tbody th{ font-weight:600; color:var(--page-ink); }
  body.v2 .article-table td{ color:var(--page-sub); }
  body.v2 .article-table tbody tr:last-child th,
  body.v2 .article-table tbody tr:last-child td{ border-bottom:none; }

  body.v2 .post-faq{ margin:40px 0; }
  body.v2 .post-faq > h2{ margin-bottom:16px; }
  body.v2 .post-faq details{ background:var(--white); border:1px solid var(--page-line); border-radius:10px; margin-bottom:10px; overflow:hidden; }
  body.v2 .post-faq details[open]{ border-color:var(--accent); }
  body.v2 .post-faq summary{ cursor:pointer; list-style:none; display:flex; justify-content:space-between; align-items:center; gap:16px; padding:16px 20px; font-family:var(--font-body); font-size:1rem; font-weight:600; color:var(--page-ink); }
  body.v2 .post-faq summary::-webkit-details-marker{ display:none; }
  body.v2 .post-faq summary::after{ content:"+"; font-size:1.2rem; font-weight:400; color:var(--page-sub); flex-shrink:0; transition:transform .2s ease; }
  body.v2 .post-faq details[open] summary::after{ transform:rotate(45deg); }
  body.v2 .post-faq .faq-a{ padding:0 20px 20px; font-size:.98rem; color:var(--page-sub); line-height:1.7; }

  body.v2 .post-share{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin:40px 0; padding-top:24px; border-top:1px solid var(--page-line); }
  body.v2 .post-share-label{ font-size:.78rem; font-weight:600; color:var(--page-sub); margin-inline-end:6px; }
  body.v2 .post-share a,
  body.v2 .post-share button{
    display:inline-flex; align-items:center; gap:6px;
    font-size:.85rem; font-weight:600; color:var(--page-ink);
    background:var(--white); border:1px solid var(--page-line); border-radius:8px;
    padding:8px 14px; text-decoration:none; cursor:pointer; font-family:inherit;
    transition:border-color .15s ease, color .15s ease;
  }
  body.v2 .post-share a:hover,
  body.v2 .post-share button:hover{ border-color:var(--accent); color:var(--accent); }

  body.v2 .article-cta{ background:var(--tint); border-radius:var(--radius); padding:40px; text-align:center; margin:32px 0 0; }
  body.v2 .article-cta h3{ font-family:var(--font-display); font-weight:400; font-size:var(--fs-2); margin-bottom:8px; }
  body.v2 .article-cta .sub{ color:var(--page-sub); margin-bottom:22px; max-width:52ch; margin-inline:auto; }

  body.v2 .related-grid{ display:grid; grid-template-columns:1fr; gap:16px; }
  @media (min-width:640px){ body.v2 .related-grid{ grid-template-columns:1fr 1fr; } }
  body.v2 .related-card{
    display:block;
    background:var(--white);
    border:1px solid var(--page-line);
    border-radius:14px;
    padding:20px;
    text-decoration:none;
    transition:border-color .15s ease;
  }
  body.v2 .related-card:hover{ border-color:var(--accent); }
  body.v2 .related-card .tag{ display:block; font-size:.72rem; font-weight:600; color:var(--accent); margin-bottom:8px; }
  body.v2 .related-card h4{ font-family:var(--font-body); font-size:.98rem; font-weight:600; color:var(--page-ink); line-height:1.4; margin-bottom:6px; }
  body.v2 .related-card p{ font-size:.85rem; color:var(--page-sub); margin:0; }

/* ==========================================================================
   V2: small additions used by inner feature pages
   ========================================================================== */
  /* One ink colour in a heading, not two - the emphasised word keeps its
     upright (non-italic) styling only, no accent tint. */
  body.v2 .v2-page-hero h1 em,
  body.v2 .v2-cta-band h2 em{ font-style:normal; color:inherit; }
  body.v2 .v2-subhead{
    font-size:.85rem;
    font-weight:600;
    color:var(--page-sub);
    margin-bottom:20px;
  }
  body.v2 .v2-subhead:not(:first-child){ margin-top:44px; }
  body.v2 .v2-feature-step-num{
    font-family:var(--font-display);
    font-size:var(--fs-2);
    font-weight:400;
    color:var(--accent);
    margin-bottom:16px;
  }

