/* ── the design system, inlined (packages/tokens + the registry section system) ── */
/* =============================================================================
   Leadværk — FONTS, self-hosted
   -----------------------------------------------------------------------------
   The design guide imported Figtree and JetBrains Mono from
   `fonts.googleapis.com` (demo-v2/leadvaerk.css:11). Production must not:

     · it is a render-blocking third-party round trip on the critical path,
       paid for in LCP on every customer site;
     · it leaks every visitor's IP to Google, which on a Danish customer site
       is a GDPR exposure we would be creating on the customer's behalf;
     · LPH already solved this the hard way — its `saas` ThemeLayout gates the
       Google Fonts injection on `window.__lphConsent.personalization`, i.e. on
       consent, which means the typeface does not load at all for the
       ~majority of visitors who decline. Self-hosting removes the consent
       question entirely: a font served from our own origin is not a third
       party and needs no permission.

   Files live in `packages/tokens/assets/fonts/` as woff2, subset to
   `latin` + `latin-ext` (Danish needs æ ø å — latin alone drops them).
   Variable fonts where available: one file per family, not one per weight.

   The two `<link rel="preload">` tags belong in the document head, before the
   stylesheet, for the two faces that paint above the fold:

     <link rel="preload" as="font" type="font/woff2" crossorigin
           href="/fonts/figtree-var-latin-ext.woff2">
     <link rel="preload" as="font" type="font/woff2" crossorigin
           href="/fonts/jetbrains-mono-var-latin-ext.woff2">

   Preload ONLY those two. Everything below the first section is the tenant
   font-PAIRING catalog (`themes/src/pairings.mjs`), and a tenant renders
   exactly one pairing: a declared `@font-face` whose family no rule on the page
   ever names is not fetched, so the other twenty-odd faces cost this file's own
   bytes (~1.5 KiB gzipped) and no request at all. Preloading them would undo
   that — a preload fetches unconditionally.
   ========================================================================== */

@font-face {
  font-family: 'Figtree';
  src: url('/fonts/figtree-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: swap;
  /* latin + latin-ext: U+00C6/U+00E6 (Æ æ), U+00D8/U+00F8 (Ø ø),
     U+00C5/U+00E5 (Å å) all fall inside the latin block; latin-ext is carried
     for Slovak/Polish customer names in CMS content. */
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'JetBrains Mono';
  src: url('/fonts/jetbrains-mono-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+2000-206F, U+2074, U+20AC, U+2122, U+2212, U+FEFF, U+FFFD;
}

/* Metric-compatible fallback so `font-display: swap` does not reflow the page.
   Figtree's metrics are close to Segoe UI / system-ui at these overrides.

   TWO DEFECTS FIXED 2026-08-18, both of which made this face inert.

   (1) It resolved on NOTHING but Windows and macOS. `local('Segoe UI')`,
       `local('Helvetica Neue')` and `local('Arial')` are all absent on Linux and
       Android, so those visitors matched no fallback face at all and ate the
       full metric mismatch — measured at +12% on `1ch` and recorded in the
       Phase 13 handoff as the deeper defect behind `cls-budget`. The three
       Liberation/DejaVu/Noto names below are the metric-compatible faces that
       actually ship on Linux; `local()` costs nothing when it misses, so naming
       all six is strictly better than naming three.

   (2) NOTHING EVER NAMED IT. `--lv-font-ui` (primitives.css) listed
       `'Figtree', ui-sans-serif, …` and never `'Figtree Fallback'`, so even on
       Windows the face was declared, matched by no stack, and used by no
       element. A metric-compatible fallback that no font stack names is a
       comment. It is named now — here, in primitives.css, and in
       `themes/src/pairings.mjs`'s own body stack. */
@font-face {
  font-family: 'Figtree Fallback';
  src: local('Segoe UI'), local('Helvetica Neue'), local('Arial'),
       local('Liberation Sans'), local('Noto Sans'), local('DejaVu Sans');
  ascent-override: 96%;
  descent-override: 24%;
  line-gap-override: 0%;
  size-adjust: 102%;
}


/* ─── `font-display: optional`, and why it is not `swap` down here ──────────
   (2026-08-18, Phase 13.)

   The two faces ABOVE keep `swap`: they are the platform's own, they are what a
   page falls back to, and `'Figtree Fallback'` now genuinely matches Figtree's
   metrics on every OS, so their swap does not reflow.

   These twenty-one have no metric twin and cannot cheaply be given one — they
   are twenty-one different families with twenty-one different advance widths,
   and a per-family `size-adjust` calibration is a real job with real
   measurements behind it, not a number to guess. Until that exists, `swap` on a
   display face is a guaranteed reflow: the fallback paints, the vendored face
   arrives, and every line re-wraps. Measured on `raw` at 1440 the League Gothic
   headline collapsed from three lines to one and scored CLS 0.152 against a
   ≤0.1 budget; `atelier` at 390 scored 0.114 the same way.

   `optional` removes the class outright. The browser gives the face ~100ms and
   then commits for the life of the page: either the real face from the FIRST
   paint, or the fallback for all of it — never a swap between them, so there is
   no reflow to score. And the ~100ms is not a gamble here: `render.mjs`
   preloads the display face (`usedFontFiles(css, ['display'])`) and the preview
   path inlines every used face as a `data:` URI, so the face is present before
   first paint on both delivery paths.

   The trade is stated rather than hidden: on a genuinely slow cold load a
   visitor may see that page in the fallback stack. That is the right way round
   — a consistent page in the wrong face beats a correct page that jumps under
   the reader's eye, and it is the only one of the two that a Core Web Vital
   measures. When the per-family metric fallbacks land, these can go back to
   `swap` and the trade disappears. */

/* =============================================================================
   PAIRING CATALOG — the faces behind `themes/src/pairings.mjs`
   -----------------------------------------------------------------------------
   Twenty-one families, every one SIL OFL 1.1, vendored under
   `assets/fonts/upstream/` with a `<Family>-OFL.txt` beside it and cut to the
   ranges below by `tools/build-fonts.py`. They exist so a tenant's pairing is a
   real typographic identity rather than a system-stack alias: `æ` set in
   Fraunces on one customer's site and in Barlow Condensed on the next is the
   whole point of the catalog, and neither of those is a font a visitor's OS
   happens to have. Same self-host rule as the two faces above — no CDN, no
   consent question, no third party.

   Two conventions run through every block:

   · WEIGHT RANGES ARE THE FONT'S OWN. A `@font-face` weight descriptor is what
     the matcher instances a variable axis against, so the range is the axis
     range clamped to what the theme layer asks for (`--lv-weight-heading` is
     800), never a wider number copied between blocks. Where a family ships
     several static files instead of an axis (Spectral, Barlow, Barlow
     Condensed — no variable release upstream), each weight is its own block.

   · SINGLE-WEIGHT DISPLAY FACES DECLARE A RANGE ANYWAY. 'DM Serif Display' and
     'League Gothic' ship exactly one weight because that IS the design — they
     are display cuts meant to be set large at that weight. Declaring
     `font-weight: 400` alone would leave the matcher without a bold and it
     would smear a synthetic one under an 800 heading, which on a high-contrast
     serif is the ugliest artefact in this file. Declaring the range says "this
     face is the bold too": the heading renders in the real drawing instead.
   ========================================================================== */

/* `fraunces-inter` — warm editorial serif over a neutral workhorse.
   Cut with SOFT/WONK pinned off (see build-fonts.py `PIN`); opsz stays live, so
   the hero gets Fraunces' display drawing and body copy its text drawing. */
@font-face {
  font-family: 'Fraunces';
  src: url('/fonts/fraunces-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `dm-serif-display-dm-sans` — high-contrast didone display, geometric body. */
@font-face {
  font-family: 'DM Serif Display';
  src: url('/fonts/dm-serif-display-400-latin-ext.woff2') format('woff2');
  font-weight: 400 800;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'DM Sans';
  src: url('/fonts/dm-sans-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `space-grotesk-work-sans` — technical grotesque display, humanist body. */
@font-face {
  font-family: 'Space Grotesk';
  src: url('/fonts/space-grotesk-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Work Sans';
  src: url('/fonts/work-sans-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `libre-caslon-text-source-sans` — bookish old-style serif, quiet sans body. */
@font-face {
  font-family: 'Libre Caslon Text';
  src: url('/fonts/libre-caslon-text-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Source Sans 3';
  src: url('/fonts/source-sans-3-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `bitter-karla` — slab serif display, grotesque body. Trade/craft register. */
@font-face {
  font-family: 'Bitter';
  src: url('/fonts/bitter-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Karla';
  src: url('/fonts/karla-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 800;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `archivo-expanded-archivo` — one superfamily, two widths. The display face is
   cut at wdth 125 (build-fonts.py `PIN`) and the body at the family's own 100,
   which is why both name the SAME upstream file and different served files. */
@font-face {
  font-family: 'Archivo Expanded';
  src: url('/fonts/archivo-expanded-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Archivo';
  src: url('/fonts/archivo-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `spectral-public-sans` — literary text serif, civic sans. Two static cuts:
   Spectral has no variable release upstream. */
@font-face {
  font-family: 'Spectral';
  src: url('/fonts/spectral-400-latin-ext.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Spectral';
  src: url('/fonts/spectral-700-latin-ext.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Public Sans';
  src: url('/fonts/public-sans-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `sora-ibm-plex-sans` — geometric-technical display, engineered body. */
@font-face {
  font-family: 'Sora';
  src: url('/fonts/sora-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 800;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'IBM Plex Sans';
  src: url('/fonts/ibm-plex-sans-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `crimson-pro-mulish` — classical book serif, rounded-humanist body. */
@font-face {
  font-family: 'Crimson Pro';
  src: url('/fonts/crimson-pro-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Mulish';
  src: url('/fonts/mulish-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 900;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `league-gothic-lora` — poster-condensed display against a bookish body. The
   loudest pairing in the catalog; the body face is what keeps it readable. */
@font-face {
  font-family: 'League Gothic';
  src: url('/fonts/league-gothic-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 800;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Lora';
  src: url('/fonts/lora-var-latin-ext.woff2') format('woff2-variations');
  font-weight: 400 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* `barlow-condensed-barlow` — industrial utility, one superfamily at two
   widths. Static cuts: Barlow has no variable release upstream. */
@font-face {
  font-family: 'Barlow Condensed';
  src: url('/fonts/barlow-condensed-400-latin-ext.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Barlow Condensed';
  src: url('/fonts/barlow-condensed-700-latin-ext.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Barlow';
  src: url('/fonts/barlow-400-latin-ext.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Barlow';
  src: url('/fonts/barlow-700-latin-ext.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: optional;
  unicode-range:
    U+0000-00FF, U+0100-017F, U+0180-024F,
    U+0259, U+1E00-1EFF, U+2000-206F, U+2074, U+20AC,
    U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* =============================================================================
   Leadværk — LAYER 1: PRIMITIVES
   -----------------------------------------------------------------------------
   Raw values. Theme-independent. Named by position on a scale, NEVER by role.
   Nothing in the product references these directly — `semantic.css` maps them
   onto roles and everything else uses the roles.

   The colour ramp is not invented. It is sampled from the brand assets:
     /home/ian/inspiration/leadvaerk/Leadvaerk_1.webp   (horizontal wordmark)
     /home/ian/inspiration/leadvaerk/Leadvaerk_avatar.webp (monogram disc)
   Sampling method and the per-stop sRGB values are recorded in
     docs/design/brand-mark.md
   Do not "adjust" a brand stop without re-sampling and updating that document.

   Every value that carries text is gated by tools/contrast/check-contrast.mjs.
   ========================================================================== */

:root {
  /* ─────────────────────────────────────────────────────────────────────────
     BRAND RAMP — navy → teal, the mark's own gradient
     Measured stops (sRGB → OKLCH):
       #082245  oklch(25.5% 0.073 257)   wordmark letterforms
       #022b66  oklch(30.4% 0.113 259)   ligature start
       #055183  oklch(42.1% 0.106 246)   ligature mid
       #006987  oklch(48.5% 0.093 226)   ligature 3/4
       #008a96  oklch(57.8% 0.099 206)   ligature teal
       #009396  oklch(60.2% 0.102 197)   avatar teal terminal
     The scale below interpolates and extends that ramp in OKLCH so lightness
     steps are perceptually even. Chroma stays low (0.07–0.11) on purpose —
     see .impeccable.md §4: the system's interest comes from the rim, not from
     saturated fills.
     ───────────────────────────────────────────────────────────────────────── */

  --lv-navy-950: oklch(19% 0.055 258);
  --lv-navy-900: oklch(25.5% 0.073 257);  /* ← measured: wordmark ink */
  --lv-navy-800: oklch(30.5% 0.107 258);  /* ← measured: ligature start */
  --lv-navy-700: oklch(34% 0.100 252);
  --lv-navy-600: oklch(37% 0.101 248);
  --lv-navy-500: oklch(42% 0.106 246);    /* ← measured: ligature mid */

  --lv-teal-800: oklch(40% 0.096 232);
  --lv-teal-700: oklch(48.5% 0.093 226);  /* ← measured: ligature 3/4 */
  --lv-teal-600: oklch(53% 0.094 208);    /* ramp terminal — contrast-capped */
  --lv-teal-500: oklch(57.8% 0.099 206);  /* ← measured: ligature teal */
  --lv-teal-400: oklch(60.2% 0.102 197);  /* ← measured: avatar terminal */
  --lv-teal-300: oklch(68% 0.093 200);
  --lv-teal-200: oklch(74% 0.088 198);
  --lv-teal-100: oklch(84% 0.062 196);
  --lv-teal-050: oklch(93% 0.028 198);

  /* Dark-theme mark ramp, following the `-inv` convention used by the slate
     ink stops above. The light ramp travels 25.5% → 42% → 57.8% in lightness,
     and re-lighting it for dark by keeping that 32-point span put the START at
     42% — measured at 1.52:1 against the dark glass rail, which composites to
     roughly 30% lightness. The æ ligature's navy end was therefore all but
     invisible, unmeasured, for the whole build.
     The fix is a SHORTER lightness travel, not a different identity: the hue
     path is unchanged (250 → 214 → 198, navy into teal) and the chroma stays
     inside the 0.07–0.11 band `.impeccable.md` §4 fixes. On a dark surface a
     ramp cannot start low; it can still travel. */
  --lv-navy-300-inv: oklch(62% 0.098 250);   /* dark-theme ligature start */
  --lv-teal-350-inv: oklch(68% 0.094 214);   /* dark-theme ligature mid */

  /* ─────────────────────────────────────────────────────────────────────────
     NEUTRAL RAMP — tinted toward the brand hue (chroma 0.006–0.055).
     A true grey next to a cool palette reads as dirt. These are the only
     "greys" in the system.
     ───────────────────────────────────────────────────────────────────────── */

  --lv-slate-000: oklch(99.2% 0.003 240);
  --lv-slate-025: oklch(97% 0.007 238);
  --lv-slate-050: oklch(96% 0.008 240);
  --lv-slate-100: oklch(92.5% 0.012 235);
  --lv-slate-200: oklch(88.5% 0.012 236);
  --lv-slate-300: oklch(78% 0.018 238);
  --lv-slate-400: oklch(58% 0.030 240);
  --lv-slate-500: oklch(51% 0.033 242);
  --lv-slate-600: oklch(44% 0.042 250);
  --lv-slate-700: oklch(34% 0.036 255);
  --lv-slate-750: oklch(28% 0.038 254);
  --lv-slate-800: oklch(24% 0.040 255);
  --lv-slate-850: oklch(19% 0.038 256);
  --lv-slate-900: oklch(14% 0.032 257);
  --lv-slate-050-inv: oklch(96% 0.008 230);   /* dark-theme primary ink */
  --lv-slate-150-inv: oklch(79% 0.020 230);   /* dark-theme secondary ink */
  --lv-slate-250-inv: oklch(72% 0.024 234);   /* dark-theme tertiary ink */
  --lv-slate-350-inv: oklch(60% 0.030 240);   /* dark-theme control boundary */

  /* ─────────────────────────────────────────────────────────────────────────
     STATUS PRIMITIVES — two lightness tiers, tuned per theme in semantic.css.
     `-t` = text tier (passes 4.5:1 on its theme's worst-case backdrop).
     `-s` = surface/fill tier (used only behind text, never as text).
     ───────────────────────────────────────────────────────────────────────── */

  --lv-ok-t-light:   oklch(45% 0.086 192);
  --lv-ok-s-light:   oklch(92% 0.045 190);
  --lv-ok-t-dark:    oklch(80% 0.110 185);
  --lv-ok-s-dark:    oklch(38% 0.078 187);

  --lv-warn-t-light: oklch(48% 0.134 55);
  --lv-warn-s-light: oklch(93% 0.055 80);
  --lv-warn-t-dark:  oklch(85% 0.130 82);
  --lv-warn-s-dark:  oklch(40% 0.090 68);

  --lv-bad-t-light:  oklch(50% 0.190 25);
  --lv-bad-s-light:  oklch(93% 0.034 22);
  --lv-bad-t-dark:   oklch(78% 0.126 24);
  --lv-bad-s-dark:   oklch(38% 0.110 24);

  /* ─────────────────────────────────────────────────────────────────────────
     REFRACTION SPECTRUM — the prismatic rim.
     Cool-biased: turquoise → aqua → azure → indigo, then ONE warm stop.
     .impeccable.md §4: the warm stop is the difference between "split light"
     and "a blue smear". It has exactly one use — this gradient. Never an
     accent, never a status colour.
     ───────────────────────────────────────────────────────────────────────── */

  --lv-spec-1: oklch(72% 0.115 195);  /* turquoise */
  --lv-spec-2: oklch(80% 0.105 172);  /* aqua-green */
  --lv-spec-3: oklch(74% 0.120 235);  /* azure */
  --lv-spec-4: oklch(70% 0.130 285);  /* indigo */
  --lv-spec-5: oklch(80% 0.095 55);   /* the one warm note */

  /* ─────────────────────────────────────────────────────────────────────────
     TYPE — Figtree (UI) + JetBrains Mono (figures). Both self-hosted; see
     fonts.css. .impeccable.md §4 bans the Google Fonts CDN import the demo
     used.
     ───────────────────────────────────────────────────────────────────────── */

  /* `'Figtree Fallback'` (fonts.css) is a metric-compatible face whose whole
     job is to stop `font-display: swap` reflowing the page. It was declared
     and named by no stack, so it did nothing at all until 2026-08-18; it sits
     directly behind Figtree here, which is the only position in which a
     metric twin has any effect. */
  --lv-font-ui: 'Figtree', 'Figtree Fallback', ui-sans-serif, system-ui, 'Segoe UI', sans-serif;
  --lv-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Mono', monospace;

  /* 5 steps, ratio ≥1.25 between adjacent steps (17 → 24 → 38 → 56 is 1.41/1.58/1.47;
     the two small steps below body are the label tier). */
  --lv-text-2xs: 0.6875rem; /* 11px — nav labels, kbd chips, counters */
  --lv-text-xs:  0.78rem;   /* 12.5px — eyebrows, table headers, captions */
  --lv-text-sm:  0.9375rem; /* 15px — UI default: buttons, table cells, fields */
  --lv-text-md:  1.0625rem; /* 17px — body copy */
  --lv-text-lg:  1.5rem;    /* 24px — section headings, stat values */
  --lv-text-xl:  2.375rem;  /* 38px — page titles */
  --lv-text-2xl: 3.5rem;    /* 56px — marketing display */

  --lv-weight-regular: 400;
  --lv-weight-medium: 500;
  --lv-weight-semibold: 600;
  --lv-weight-bold: 700;
  --lv-weight-heading: 800;
  --lv-weight-mark: 900;

  --lv-leading-tight: 1.08;
  --lv-leading-snug: 1.35;
  --lv-leading-normal: 1.55;

  --lv-tracking-heading: -0.028em;
  --lv-tracking-label: -0.012em;
  --lv-tracking-eyebrow: 0.11em;
  --lv-tracking-num: -0.02em;

  --lv-measure: 68ch;   /* prose max-width — never wider */

  /* ─────────────────────────────────────────────────────────────────────────
     SPACE — 4pt scale
     ───────────────────────────────────────────────────────────────────────── */

  --lv-space-1: 4px;
  --lv-space-2: 8px;
  --lv-space-3: 12px;
  --lv-space-4: 16px;
  --lv-space-5: 24px;
  --lv-space-6: 32px;
  --lv-space-7: 48px;
  --lv-space-8: 64px;
  --lv-space-9: 96px;

  /* ─────────────────────────────────────────────────────────────────────────
     SHAPE
     ───────────────────────────────────────────────────────────────────────── */

  --lv-radius-sm: 10px;
  --lv-radius-md: 16px;
  --lv-radius-lg: 24px;
  --lv-radius-xl: 32px;
  --lv-radius-pill: 999px;

  /* ─────────────────────────────────────────────────────────────────────────
     MOTION — one curve for everything the user causes. No bounce, no spring.
     ───────────────────────────────────────────────────────────────────────── */

  --lv-ease: cubic-bezier(0.22, 1, 0.36, 1);
  --lv-dur-instant: 120ms;
  --lv-dur-fast: 160ms;
  --lv-dur-state: 240ms;
  --lv-dur-panel: 420ms;
  --lv-dur-light: 450ms;  /* rim + bloom — light settles slowly */

  /* ─────────────────────────────────────────────────────────────────────────
     Z-LAYERS — systemic only. A number outside this list is a defect.
     ───────────────────────────────────────────────────────────────────────── */

  --lv-z-canvas: 0;
  --lv-z-sticky: 40;
  --lv-z-panel: 55;
  --lv-z-bar: 60;
  --lv-z-overlay: 80;
  --lv-z-palette: 85;
  --lv-z-toast: 95;
}

/* =============================================================================
   Leadværk — LAYER 2: SEMANTIC ROLES
   -----------------------------------------------------------------------------
   Maps primitives onto what things ARE. This is the layer product code reads.
   A component that references `--lv-navy-900` instead of `--lv-text-primary`
   is a defect: it cannot be re-themed and it is invisible to the contrast gate.

   Theming contract
   ----------------
     :root                       → light (default)
     :root[data-theme="dark"]    → dark, explicit
     @media (prefers-color-scheme: dark) :root:not([data-theme])  → dark, implicit
     :root[data-theme="light"]   → light, explicit (must beat the media query)

   The explicit attribute always wins over the OS preference, in BOTH
   directions — this is the rule the demo got right and most systems get wrong.

   Every foreground/background pair declared here is registered in
   tools/contrast/pairs.mjs and measured by tools/contrast/check-contrast.mjs.
   ========================================================================== */

:root,
:root[data-theme='light'] {
  color-scheme: light;

  /* ── Backdrop ──────────────────────────────────────────────────────────
     `canvas` is the page. `canvas-wash-*` are the three atmospheric radial
     gradients laid over it. Their alpha is capped at 0.22 because the wash
     is what determines the WORST-CASE backdrop every glass surface and every
     piece of canvas-level text is measured against (.impeccable.md §6).
     `canvas-worst` records that computed floor so the gate can read it. */
  --lv-canvas: var(--lv-slate-050);
  --lv-canvas-deep: var(--lv-slate-100);
  --lv-canvas-wash-a: oklch(84% 0.070 210);
  --lv-canvas-wash-b: oklch(80% 0.075 258);
  --lv-canvas-wash-c: oklch(86% 0.055 180);
  --lv-canvas-wash-alpha: 0.22;
  --lv-canvas-worst: oklch(93.3% 0.023 218);   /* = canvas + wash-a @ 0.22, computed */
  --lv-overlay-scrim: color-mix(in oklab, var(--lv-canvas-deep) 62%, transparent);

  /* ── Opaque surfaces — where all work happens (.impeccable.md §3) ────── */
  --lv-surface: var(--lv-slate-000);
  --lv-surface-raised: var(--lv-slate-025);
  --lv-surface-sunken: var(--lv-slate-050);

  /* ── Ink ───────────────────────────────────────────────────────────────
     Three text roles, and all three clear 4.5:1 against the worst-case
     canvas. There is no fourth, dimmer text role — "faint" in the demo was
     a 3.1:1 colour used for real text. `--lv-icon-quiet` and `--lv-line`
     exist for the non-text jobs that role was doing. */
  --lv-text-primary: var(--lv-navy-900);
  --lv-text-secondary: var(--lv-slate-600);
  --lv-text-tertiary: var(--lv-slate-500);
  --lv-text-on-brand: oklch(98% 0.008 205);
  --lv-text-link: var(--lv-teal-700);

  /* ── Lines and boundaries ──────────────────────────────────────────────
     `line` = decorative hairline between same-surface content. No contrast
       requirement (it separates, it does not identify).
     `line-control` = the boundary of an interactive control. WCAG 1.4.11
       requires 3:1 against what it sits on. Gated. */
  --lv-line: var(--lv-slate-200);
  --lv-line-strong: var(--lv-slate-300);
  --lv-line-control: var(--lv-slate-400);
  --lv-icon-quiet: var(--lv-slate-400);

  /* ── Brand ─────────────────────────────────────────────────────────────
     `--lv-ramp` is the mark's gradient and it is what primary actions carry
     (.impeccable.md §4). Its light terminal is capped at --lv-teal-600 so
     that `--lv-text-on-brand` clears 4.5:1 at the brightest point of the
     gradient — the demo's terminal was too light for its own button label. */
  --lv-brand: var(--lv-teal-700);
  --lv-brand-strong: var(--lv-navy-800);
  --lv-brand-soft: var(--lv-teal-050);
  --lv-accent: var(--lv-brand);
  --lv-highlight: var(--lv-brand-soft);
  --lv-ramp: linear-gradient(
    118deg,
    var(--lv-navy-900) 0%,
    var(--lv-navy-500) 46%,
    var(--lv-teal-600) 100%
  );
  --lv-ramp-terminal: var(--lv-teal-600);   /* the gate measures ink against this */

  /* ── Status ────────────────────────────────────────────────────────────
     `-text` carries text and is gated at 4.5:1. `-surface` is a fill and is
     never used as a text colour. */
  --lv-ok-text: var(--lv-ok-t-light);
  --lv-ok-surface: var(--lv-ok-s-light);
  --lv-warn-text: var(--lv-warn-t-light);
  --lv-warn-surface: var(--lv-warn-s-light);
  --lv-bad-text: var(--lv-bad-t-light);
  --lv-bad-surface: var(--lv-bad-s-light);

  /* ── Focus ────────────────────────────────────────────────────────────
     One ring, everywhere, on `:focus-visible` only. 3:1 against every
     surface it can land on. Gated. */
  --lv-focus-ring: var(--lv-teal-600);
  --lv-focus-width: 2px;
  --lv-focus-offset: 3px;

  /* ── Elevation — navy-tinted, never neutral grey ──────────────────────── */
  --lv-shadow-tint: 14 34 62;
  --lv-lift-1: 0 1px 2px rgb(var(--lv-shadow-tint) / 0.06),
               0 2px 6px -2px rgb(var(--lv-shadow-tint) / 0.09);
  --lv-lift-2: 0 2px 4px rgb(var(--lv-shadow-tint) / 0.06),
               0 12px 28px -10px rgb(var(--lv-shadow-tint) / 0.22);
  --lv-lift-3: 0 4px 8px rgb(var(--lv-shadow-tint) / 0.07),
               0 28px 60px -18px rgb(var(--lv-shadow-tint) / 0.30);

  /* ── Glass material parameters — consumed by material.css ─────────────── */
  --lv-glass-tint: 255 255 255;
  --lv-glass-alpha: 0.55;
  --lv-glass-edge: 0.85;          /* inner top highlight opacity */
  --lv-glass-under: 14 34 62;     /* inner bottom shade colour */
  --lv-glass-blur: 22px;
  --lv-glass-saturate: 185%;
  --lv-rim-opacity: 0.44;
  --lv-rim-opacity-hover: 0.74;
  --lv-bloom-opacity: 0.50;
  --lv-bloom-opacity-hover: 0.72;
  --lv-bloom-blur: 14px;
  /* Composite of --lv-canvas-worst under glass at the declared alpha. The
     gate measures every piece of text that sits on glass against THIS, not
     against the surface token — a translucent surface has no colour of its
     own. */
  --lv-glass-worst: oklch(97.0% 0.010 220);
}

:root[data-theme='dark'] {
  color-scheme: dark;

  --lv-canvas: var(--lv-slate-850);
  --lv-canvas-deep: var(--lv-slate-900);
  --lv-canvas-wash-a: oklch(42% 0.082 210);
  --lv-canvas-wash-b: oklch(36% 0.105 258);
  --lv-canvas-wash-c: oklch(40% 0.085 180);
  --lv-canvas-wash-alpha: 0.24;
  --lv-canvas-worst: oklch(25.1% 0.047 236);   /* = canvas + wash-a @ 0.24, computed */
  --lv-overlay-scrim: color-mix(in oklab, var(--lv-canvas-deep) 72%, transparent);

  --lv-surface: var(--lv-slate-800);
  --lv-surface-raised: var(--lv-slate-750);
  --lv-surface-sunken: var(--lv-slate-900);

  --lv-text-primary: var(--lv-slate-050-inv);
  --lv-text-secondary: var(--lv-slate-150-inv);
  --lv-text-tertiary: var(--lv-slate-250-inv);
  --lv-text-on-brand: oklch(98% 0.008 205);   /* SAME as light — see note */
  --lv-text-link: var(--lv-teal-200);

  /* Note on --lv-text-on-brand: the demo flipped this to a DARK ink in dark
     mode (`--accent-ink: oklch(16% 0.04 235)`), which measures 2.1:1 against
     the dark ramp's own navy start — a primary button whose label failed on
     its own background. One ink, both themes; the ramp is what gets capped. */

  --lv-line: var(--lv-slate-700);
  --lv-line-strong: var(--lv-slate-750);
  --lv-line-control: var(--lv-slate-350-inv);
  --lv-icon-quiet: var(--lv-slate-250-inv);

  --lv-brand: var(--lv-teal-200);
  --lv-brand-strong: var(--lv-teal-300);
  --lv-brand-soft: oklch(30% 0.055 205);
  --lv-accent: var(--lv-brand);
  --lv-highlight: var(--lv-brand-soft);
  --lv-ramp: linear-gradient(
    118deg,
    var(--lv-navy-700) 0%,
    var(--lv-teal-800) 46%,
    var(--lv-teal-600) 100%
  );
  --lv-ramp-terminal: var(--lv-teal-600);

  --lv-ok-text: var(--lv-ok-t-dark);
  --lv-ok-surface: var(--lv-ok-s-dark);
  --lv-warn-text: var(--lv-warn-t-dark);
  --lv-warn-surface: var(--lv-warn-s-dark);
  --lv-bad-text: var(--lv-bad-t-dark);
  --lv-bad-surface: var(--lv-bad-s-dark);

  --lv-focus-ring: var(--lv-teal-200);

  --lv-shadow-tint: 0 0 0;
  --lv-lift-1: 0 1px 2px rgb(0 0 0 / 0.38), 0 2px 8px -2px rgb(0 0 0 / 0.48);
  --lv-lift-2: 0 2px 6px rgb(0 0 0 / 0.42), 0 14px 32px -10px rgb(0 0 0 / 0.62);
  --lv-lift-3: 0 6px 12px rgb(0 0 0 / 0.48), 0 32px 70px -20px rgb(0 0 0 / 0.72);

  --lv-glass-tint: 185 210 235;
  --lv-glass-alpha: 0.10;
  --lv-glass-edge: 0.30;
  --lv-glass-under: 0 0 0;
  --lv-glass-blur: 22px;
  --lv-glass-saturate: 170%;
  --lv-rim-opacity: 0.50;
  --lv-rim-opacity-hover: 0.80;
  --lv-bloom-opacity: 0.42;
  --lv-bloom-opacity-hover: 0.66;
  --lv-bloom-blur: 16px;
  --lv-glass-worst: oklch(31.8% 0.047 236);
}

/* OS preference — applies only when the app has not made an explicit choice.
   Kept as a duplicate block rather than a nested selector so the file stays
   parseable by the contrast gate (which reads declarations, not cascade). */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    color-scheme: dark;

    --lv-canvas: var(--lv-slate-850);
    --lv-canvas-deep: var(--lv-slate-900);
    --lv-canvas-wash-a: oklch(42% 0.082 210);
    --lv-canvas-wash-b: oklch(36% 0.105 258);
    --lv-canvas-wash-c: oklch(40% 0.085 180);
    --lv-canvas-wash-alpha: 0.24;
    --lv-canvas-worst: oklch(25.1% 0.047 236);
    --lv-overlay-scrim: color-mix(in oklab, var(--lv-canvas-deep) 72%, transparent);

    --lv-surface: var(--lv-slate-800);
    --lv-surface-raised: var(--lv-slate-750);
    --lv-surface-sunken: var(--lv-slate-900);

    --lv-text-primary: var(--lv-slate-050-inv);
    --lv-text-secondary: var(--lv-slate-150-inv);
    --lv-text-tertiary: var(--lv-slate-250-inv);
    --lv-text-link: var(--lv-teal-200);

    --lv-line: var(--lv-slate-700);
    --lv-line-strong: var(--lv-slate-750);
    --lv-line-control: var(--lv-slate-350-inv);
    --lv-icon-quiet: var(--lv-slate-250-inv);

    --lv-brand: var(--lv-teal-200);
    --lv-brand-strong: var(--lv-teal-300);
    --lv-brand-soft: oklch(30% 0.055 205);
    --lv-accent: var(--lv-brand);
    --lv-highlight: var(--lv-brand-soft);
    --lv-ramp: linear-gradient(
      118deg,
      var(--lv-navy-700) 0%,
      var(--lv-teal-800) 46%,
      var(--lv-teal-600) 100%
    );

    --lv-ok-text: var(--lv-ok-t-dark);
    --lv-ok-surface: var(--lv-ok-s-dark);
    --lv-warn-text: var(--lv-warn-t-dark);
    --lv-warn-surface: var(--lv-warn-s-dark);
    --lv-bad-text: var(--lv-bad-t-dark);
    --lv-bad-surface: var(--lv-bad-s-dark);

    --lv-focus-ring: var(--lv-teal-200);

    --lv-shadow-tint: 0 0 0;
    --lv-lift-1: 0 1px 2px rgb(0 0 0 / 0.38), 0 2px 8px -2px rgb(0 0 0 / 0.48);
    --lv-lift-2: 0 2px 6px rgb(0 0 0 / 0.42), 0 14px 32px -10px rgb(0 0 0 / 0.62);
    --lv-lift-3: 0 6px 12px rgb(0 0 0 / 0.48), 0 32px 70px -20px rgb(0 0 0 / 0.72);

    --lv-glass-tint: 185 210 235;
    --lv-glass-alpha: 0.10;
    --lv-glass-edge: 0.30;
    --lv-glass-under: 0 0 0;
    --lv-glass-saturate: 170%;
    --lv-rim-opacity: 0.50;
    --lv-rim-opacity-hover: 0.80;
    --lv-bloom-opacity: 0.42;
    --lv-bloom-opacity-hover: 0.66;
    --lv-bloom-blur: 16px;
    --lv-glass-worst: oklch(31.8% 0.047 236);
  }
}

/* =============================================================================
   Leadværk — LAYER 3: MATERIAL
   -----------------------------------------------------------------------------
   The glass. This file is the signature of the whole product and it is the one
   file where an agent should change nothing without reading .impeccable.md §3
   and §4 first.

   What makes it Leadværk glass rather than the frosted panel every dashboard
   has shipped since 2013:

     · CHROMATIC ABERRATION, NOT BLUR. A 1px conic gradient masked to the border
       box (`mask-composite: exclude`) — split light running around the edge —
       plus a coloured bloom pooling BENEATH the lower edge, which is refracted
       light landing on the surface below. Blur is deliberately modest; the
       `saturate()` does more of the work. Heavy blur reads as fog.
     · PURE CSS. No `filter: url()`, no SVG filters. Those cost a rasterisation
       pass and are exactly what breaks in Safari.
     · COOL-BIASED SPECTRUM with one warm stop (--lv-spec-5). See primitives.css.

   WHERE IT MAY BE USED — .impeccable.md §3, restated because this is the rule
   most often broken:
     ALLOWED  rail · top bar · command palette · builder navigator / inspector /
              library drawer · toasts · popovers · dropdowns · theme bar ·
              marketing nav · marketing "lens" panels
     BANNED   data tables and rows · forms · fields inside a panel body · long
              text · article bodies · the builder canvas · modal bodies with
              forms · settings pages · anything containing a <textarea> · any
              surface that scrolls its own content

   `.lv-solid` is the DEFAULT surface. Reach for `.lv-glass` deliberately.
   ========================================================================== */

/* ── The opaque work surface — the default ───────────────────────────────── */

.lv-solid {
  background: var(--lv-surface);
  border: 1px solid var(--lv-line);
  border-radius: var(--lv-radius-lg);
  box-shadow: var(--lv-lift-1);
}

.lv-solid-sunken {
  background: var(--lv-surface-sunken);
  border: 1px solid var(--lv-line);
  border-radius: var(--lv-radius-lg);
  box-shadow: none;
}

/* ── The glass material ──────────────────────────────────────────────────── */

/* `position` lives in its own zero-specificity `:where()` rule, deliberately.
   Every floating glass surface (palette, popover, menu, tooltip, the mobile
   rail drawer) pairs `.lv-glass` with its own single-class rule that sets its
   REAL position (fixed, mostly). Both used to be plain `.lv-glass { position:
   relative }` at equal specificity with e.g. `.lv-palette { position: fixed }`
   — a tie broken by which stylesheet happened to load second, not by intent.
   That silently turned the command palette's `top: 14%` into an in-flow
   offset from wherever its portal landed in `document.body`, landing it near
   the bottom of the page. `:where()` contributes zero specificity, so any
   component's own `position` rule now wins regardless of file order, and a
   surface with no other opinion still gets `relative` as its base case. */
:where(.lv-glass) {
  position: relative;
}
.lv-glass {
  isolation: isolate;
  border-radius: var(--lv-radius-lg);

  /* The body: a directional tint wash. The three-stop gradient is what gives
     the surface a light direction — a flat rgba() fill reads as plastic. */
  background: linear-gradient(
    160deg,
    rgb(var(--lv-glass-tint) / calc(var(--lv-glass-alpha) + 0.22)) 0%,
    rgb(var(--lv-glass-tint) / var(--lv-glass-alpha)) 42%,
    rgb(var(--lv-glass-tint) / calc(var(--lv-glass-alpha) - 0.08)) 100%
  );

  backdrop-filter: blur(var(--lv-glass-blur)) saturate(var(--lv-glass-saturate));
  -webkit-backdrop-filter: blur(var(--lv-glass-blur)) saturate(var(--lv-glass-saturate));

  /* Machined edge: bright top, half-bright left, shaded bottom. This is the
     "wrought" quality from .impeccable.md §2 — the surface has a thickness. */
  box-shadow:
    inset 0 1px 0 0 rgb(255 255 255 / var(--lv-glass-edge)),
    inset 1px 0 0 0 rgb(255 255 255 / calc(var(--lv-glass-edge) * 0.45)),
    inset 0 -1px 0 0 rgb(var(--lv-glass-under) / 0.12),
    var(--lv-lift-2);
}

/* ── The bloom — refracted light pooling on the surface below ────────────── */

.lv-glass::before {
  content: '';
  position: absolute;
  inset: 6% 4% -10% 4%;   /* pushed DOWN and OUT: light lands below, not behind */
  border-radius: inherit;
  z-index: -2;
  background:
    radial-gradient(60% 100% at 16% 100%, var(--lv-spec-1) 0%, transparent 70%),
    radial-gradient(55% 100% at 50% 100%, var(--lv-spec-3) 0%, transparent 70%),
    radial-gradient(60% 100% at 86% 100%, var(--lv-spec-4) 0%, transparent 70%);
  filter: blur(var(--lv-bloom-blur));
  opacity: var(--lv-bloom-opacity);
  transition: opacity var(--lv-dur-light) var(--lv-ease);
  pointer-events: none;
}

/* ── The rim — THE signature. 1px of conic gradient, masked to the border ── */

.lv-glass::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  z-index: -1;
  background: conic-gradient(
    from var(--lv-rim-angle, 205deg),
    var(--lv-spec-1),
    var(--lv-spec-2),
    var(--lv-spec-3),
    var(--lv-spec-4),
    var(--lv-spec-5),
    var(--lv-spec-1)
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  opacity: var(--lv-rim-opacity);
  transition: opacity var(--lv-dur-light) var(--lv-ease);
  pointer-events: none;
}

/* Hover is the only motion the material has. It brightens; it does not move. */
.lv-glass:hover::after,
.lv-glass:focus-within::after {
  opacity: var(--lv-rim-opacity-hover);
}
.lv-glass:hover::before,
.lv-glass:focus-within::before {
  opacity: var(--lv-bloom-opacity-hover);
}

/* ── Variants ────────────────────────────────────────────────────────────── */

/* `flat` — structural chrome that is large, static, or always on screen: the
   rail, the stat strip, the marketing proof band. No bloom (a bloom under a
   full-height rail is noise), a quieter rim, less blur to cut paint cost. */
.lv-glass--flat {
  --lv-glass-blur: 16px;
  --lv-glass-saturate: 150%;
  --lv-rim-opacity: 0.20;
  --lv-rim-opacity-hover: 0.30;
}
.lv-glass--flat::before {
  display: none;
}

/* `lifted` — the surfaces that most justify the material: command palette,
   modal shells, marketing lens. Full rim, full bloom, deepest elevation. */
.lv-glass--lifted {
  box-shadow:
    inset 0 1px 0 0 rgb(255 255 255 / var(--lv-glass-edge)),
    inset 1px 0 0 0 rgb(255 255 255 / calc(var(--lv-glass-edge) * 0.45)),
    inset 0 -1px 0 0 rgb(var(--lv-glass-under) / 0.12),
    var(--lv-lift-3);
}

/* `control` — buttons, fields, chips. Smaller radius, tighter blur, no bloom
   (a bloom under a 40px button is a smudge). */
.lv-glass--control {
  --lv-glass-blur: 16px;
  --lv-glass-saturate: 180%;
  border-radius: var(--lv-radius-pill);
  box-shadow:
    inset 0 1px 0 0 rgb(255 255 255 / var(--lv-glass-edge)),
    inset 0 -1px 0 0 rgb(var(--lv-glass-under) / 0.12),
    var(--lv-lift-1);
}
.lv-glass--control::before {
  display: none;
}

/* Edge-anchored chrome: a rail flush to the viewport edge should not draw a
   rim on the edge it is flush with, or the rim reads as a seam. */
.lv-glass--edge-left  { border-start-start-radius: 0; border-end-start-radius: 0; }
.lv-glass--edge-right { border-start-end-radius: 0; border-end-end-radius: 0; }

/* =============================================================================
   DEGRADATION — three independent paths, all landing on the same opaque
   surface. .impeccable.md §5 principle 6: the fallback must be a good design,
   not a broken one. This is why `.lv-solid` and the glass fallback are the
   same visual object.
   ========================================================================== */

/* 1. The browser cannot composite a backdrop at all. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lv-glass {
    background: var(--lv-surface);
    box-shadow:
      inset 0 0 0 1px var(--lv-line),
      var(--lv-lift-2);
  }
  .lv-glass::before { display: none; }
  .lv-glass::after  { opacity: calc(var(--lv-rim-opacity) * 0.6); }
}

/* 2. The user has asked for less transparency (Reduce Transparency on macOS
      and iOS, and the equivalent on Windows). This is an accessibility
      request, not a capability gap: honour it completely — the rim goes too,
      because a prismatic edge on an opaque panel is exactly the visual noise
      the setting exists to remove. */
@media (prefers-reduced-transparency: reduce) {
  .lv-glass {
    background: var(--lv-surface);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow:
      inset 0 0 0 1px var(--lv-line),
      var(--lv-lift-2);
  }
  .lv-glass::before,
  .lv-glass::after { display: none; }
}

/* 3. Forced colours (Windows High Contrast). Everything becomes system paint;
      the material is meaningless and must not fight the user's palette. */
@media (forced-colors: active) {
  .lv-glass {
    background: Canvas;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border: 1px solid CanvasText;
    box-shadow: none;
  }
  .lv-glass::before,
  .lv-glass::after { display: none; }
}

/* 4. Reduced motion: the rim/bloom transition is decorative, so it goes to
      zero — but the END STATES stay correct and nothing depends on the
      transition having run (.impeccable.md §4). */
@media (prefers-reduced-motion: reduce) {
  .lv-glass::before,
  .lv-glass::after {
    transition-duration: 0.01ms;
  }
}

/* =============================================================================
   PERFORMANCE BUDGET — not advisory.
   -----------------------------------------------------------------------------
   `backdrop-filter` re-samples the backdrop region on every paint inside that
   region. The cost scales with AREA, not with element count, and it compounds
   with scrolling because a scroll invalidates the sampled region.

   Budget: at most SIX `.lv-glass` elements composited at once, and their
   combined area must not exceed ~35% of the viewport. The admin shell as
   specified spends: rail (1) + top bar (1) + at most one floating surface
   (palette OR dropdown OR toast) = 3. The builder spends: top bar + navigator
   + inspector + library drawer = 4.

   If a design needs a seventh, it is using glass on a work surface — go back
   to .impeccable.md §3.

   `contain: paint` is applied to the two always-on chrome surfaces in
   components.css so their backdrop sampling is bounded to their own box.
   ========================================================================== */

/* =============================================================================
   Leadværk — LAYER 4: COMPONENT TOKENS + BASE PRIMITIVES
   -----------------------------------------------------------------------------
   Component-scoped custom properties (so a component can be re-tuned without
   touching semantic roles), plus the small set of base primitives every one of
   the ~95 admin pages composes from.

   Everything here is class-based and framework-free — the same rules serve the
   React admin, the Astro public site, and the `saas` theme. No component in
   this system may declare a raw colour; it declares a component token here and
   maps it to a semantic role.
   ========================================================================== */

:root {
  /* ── Button ─────────────────────────────────────────────────────────────
     Height 44px at default size: WCAG 2.5.5 target size, and the reason the
     padding is 13px rather than the 12px that would look tidier. */
  --lv-btn-height: 44px;
  --lv-btn-height-sm: 36px;
  --lv-btn-height-lg: 52px;
  --lv-btn-padding-x: 24px;
  --lv-btn-padding-x-sm: 16px;
  --lv-btn-radius: var(--lv-radius-pill);
  --lv-btn-font: var(--lv-weight-bold) var(--lv-text-sm) / 1 var(--lv-font-ui);
  --lv-btn-case: none;
  --lv-btn-variant: normal;
  --lv-btn-tracking: var(--lv-tracking-label);
  --lv-btn-border: 0;
  --lv-btn-halo-opacity: 0.48;
  --lv-btn-halo-opacity-hover: 0.85;
  /* THE HOVER GRAMMAR (operator defect, dennis-niess round 2): the whole
     `.lv-btn` family transitioned `transform`/`box-shadow`/`background-color`
     but every *-hover token a device leaves unset defaulted to an IDENTICAL
     copy of its resting value — `none` here, `var(--lv-btn-primary-shadow)`
     below — so a button with no theme device opinion (most of them) animated
     into exactly what it already looked like. `translateY(-1px)` is the
     shared lift every solid device now gets by default; a theme's own device
     in packages/themes/src/buttons.mjs can still override it per voice, this
     is only the floor. `--lv-btn-ink-wash` is the shared "colour-mix with
     ink" darken — an INSET box-shadow film rather than a background-color
     mix, because `--lv-btn-primary-surface` is a gradient a flat colour-mix
     cannot darken, and one wash works identically over a gradient or a flat
     fill. */
  --lv-btn-hover-transform: translateY(-1px);
  --lv-btn-ink-wash: color-mix(in oklab, var(--lv-text-primary) 10%, transparent);
  /* The `ruled` device's hover wash — a `::before` that scales in from the
     left. Inert by default (scale 0 both states, transparent fill), so every
     device that never sets `--lv-btn-invert-scale-hover` renders nothing:
     no extra paint, no stacking-context participation beyond what `::after`
     (the halo) already proves safe (theme-button-voices-spec.md "Gates" §2 —
     mirrors the same isolation:auto escape the halo relies on). */
  --lv-btn-invert-fill: transparent;
  --lv-btn-invert-scale: 0;
  --lv-btn-invert-scale-hover: 0;
  /* PRIMARY — today's gloss-over-ramp, as values rather than literals, so a
     theme's device can replace the material without touching the selector
     (theme-button-voices-spec.md "The variable contract"). */
  --lv-btn-primary-surface:
    linear-gradient(178deg, rgb(255 255 255 / 0.34) 0%, rgb(255 255 255 / 0) 48%),
    var(--lv-ramp);
  --lv-btn-primary-surface-hover: var(--lv-btn-primary-surface);
  --lv-btn-primary-ink: var(--lv-text-on-brand);
  --lv-btn-primary-border: 0;
  --lv-btn-primary-shadow:
    inset 0 1px 0 0 rgb(255 255 255 / 0.48),
    inset 0 -1px 0 0 rgb(0 0 0 / 0.18),
    0 2px 5px rgb(var(--lv-shadow-tint) / 0.16),
    0 12px 26px -10px color-mix(in oklab, var(--lv-brand) 78%, transparent);
  /* The ink wash layers ON TOP of the resting shadow list (a `var()` inside a
     `box-shadow` value list is just another comma-separated entry), so the
     gradient itself never has to be touched — safe under any device's own
     `--lv-btn-primary-surface`. */
  --lv-btn-primary-shadow-hover: var(--lv-btn-primary-shadow), inset 0 0 0 999px var(--lv-btn-ink-wash);
  /* SOLID SECONDARY — today's `.lv-btn--solid` values, as a device-settable
     "secondary voice" (spec table row `--lv-btn-solid-*`).

     INK AND SURFACE ARE ONE TOKEN PAIR, RESOLVED IN THE SAME SCOPE. Both
     custom properties substitute their var()s HERE, at :root — so the pair
     freezes together: page surface, page ink. The selector used to pair this
     frozen surface with a USE-SITE `var(--lv-text-primary)` instead, and any
     context that re-points the text roles without re-pointing the surface
     (the photo hero's scrim collapse in open.pitch — unlike the band, which
     re-points both) split the pair: measured on the live dennis-niess heroes,
     `.lv-btn--solid` computed oklch(0.985) ink on oklch(0.995) surface —
     1.02:1, an invisible secondary CTA on every hero sitewide (FINAL-VERDICT
     defect 3). A device that makes the solid voice TRANSPARENT re-points
     `--lv-btn-solid-ink: currentcolor` and follows the context ink again
     (buttons.mjs `ruled`). Gated: tools/contrast/pairs.mjs
     `btn-solid-ink-on-solid-surface`. */
  --lv-btn-solid-surface: var(--lv-surface);
  --lv-btn-solid-ink: var(--lv-text-primary);
  --lv-btn-solid-border: 0;
  --lv-btn-solid-shadow: inset 0 0 0 1px var(--lv-line-control), var(--lv-lift-1);
  /* Darken (ink mixed into the raised surface) AND lift (the stronger
     elevation step) — `--lv-surface-raised` alone read too close to resting
     to land as a hover at all. */
  --lv-btn-solid-surface-hover: color-mix(in oklab, var(--lv-text-primary) 6%, var(--lv-surface-raised));
  --lv-btn-solid-shadow-hover: inset 0 0 0 1px var(--lv-line-control), var(--lv-lift-2);
  /* What the halo is MADE of, as a token rather than a literal, so the theme
     plane can answer the question a customer site asks and the admin does not:
     whose light is this? Here — the admin, and anything that does not set it —
     it stays the refraction spectrum, which is the platform's own signature
     (.impeccable.md §4, derive.mjs's note on why --lv-spec-* never adapts).
     A tenant's public site overrides it with their brand ramp: the rim on
     glass stays ours, the light under their button is theirs. */
  --lv-btn-halo: linear-gradient(100deg, var(--lv-spec-3), var(--lv-spec-1), var(--lv-spec-3));

  /* ── Field ──────────────────────────────────────────────────────────────
     Fields inside GLASS chrome (search in a top bar, the command palette) use
     `--lv-field-bg-glass`. Fields inside a FORM are opaque, always. */
  --lv-field-height: 44px;
  --lv-field-height-sm: 38px;
  --lv-field-padding-x: 14px;
  --lv-field-radius: var(--lv-radius-sm);
  --lv-field-radius-pill: var(--lv-radius-pill);
  --lv-field-bg: var(--lv-surface);
  --lv-field-border: var(--lv-line-control);
  --lv-field-border-hover: var(--lv-text-tertiary);
  /* G22 — the focus ring is a FIELD token, not a re-declaration of
     `--lv-focus-ring`. It resolves to that same gated value today (the
     universal ring is already measured at 3:1 against surface/canvas/glass
     — `focus-ring-on-surface`, `focus-ring-on-canvas`, `focus-ring-on-glass`
     in `tools/contrast/pairs.mjs`), so no new pair is owed for the default.
     A theme that ever wants a field ring in its own accent overrides ONLY
     this token — never `--lv-focus-ring` itself, which every other
     `:focus-visible` outline in the system still reads — and owes
     `tools/contrast/pairs.mjs` a pair the day it does, per §6 of
     `.impeccable.md`.

     `--lv-field-focus-ring-width: 3px` and `--lv-field-focus-ring-alpha: 25%`
     stood here until 2026-08-18 and are gone. They copied the reference
     calibration (`design-reference/dennis-niess-reference.html`'s
     `.field input:focus-visible{ box-shadow:0 0 0 3px oklch(67% .115 68 / .25) }`)
     without ever measuring it — .impeccable.md §5.3, "a colour claim without a
     computed value is not a claim". Measured, a 25%-alpha halo composites to
     1.40–1.54:1 against the ground in all ten themes that render a field, and
     the 1px inset hairline it accompanied moves by 8% lightness. That is a
     focus state a sighted keyboard user cannot find, and it is what
     `tools/immersive-design/focus-appearance.mjs` now measures in rendered
     pixels rather than in declared values. The ring below is the audited
     `--lv-field-focus-ring` at the universal `--lv-focus-width`, so a field
     gets the same indicator as every other control in the system (§5.7, "one
     of everything") and inherits its already-gated 3:1 pairs. */
  --lv-field-focus-ring: var(--lv-focus-ring);

  /* ── Table — opaque, dense, no card boxes, rules do the separating ────── */
  --lv-table-row-height: 52px;
  --lv-table-row-height-compact: 40px;
  --lv-table-cell-padding-x: 12px;
  --lv-table-head-font: var(--lv-weight-semibold) var(--lv-text-xs) / 1 var(--lv-font-ui);
  --lv-table-row-hover: color-mix(in oklab, var(--lv-brand) 6%, var(--lv-surface));
  --lv-table-row-selected: color-mix(in oklab, var(--lv-brand) 11%, var(--lv-surface));

  /* ── Rail / top bar — the two always-on glass surfaces ──────────────── */
  --lv-rail-width: 264px;
  --lv-rail-width-collapsed: 72px;
  --lv-topbar-height: 60px;

  /* ── Badge ──────────────────────────────────────────────────────────── */
  --lv-badge-height: 22px;
  --lv-badge-padding-x: 11px;

  /* ── Meter ──────────────────────────────────────────────────────────── */
  --lv-meter-height: 7px;
}

/* =============================================================================
   BASE
   ========================================================================== */

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

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

body {
  margin: 0;
  min-height: 100dvh;
  font-family: var(--lv-font-ui);
  font-size: var(--lv-text-md);
  line-height: var(--lv-leading-normal);
  color: var(--lv-text-primary);
  background-color: var(--lv-canvas);
  /* The three atmospheric washes. Alpha is a token, not a literal, because it
     is what sets --lv-canvas-worst — the backdrop the contrast gate measures
     everything against (.impeccable.md §6). */
  background-image:
    radial-gradient(1150px 640px at 10% -8%,
      rgb(from var(--lv-canvas-wash-a) r g b / var(--lv-canvas-wash-alpha)), transparent 62%),
    radial-gradient(950px 580px at 94% 2%,
      rgb(from var(--lv-canvas-wash-b) r g b / var(--lv-canvas-wash-alpha)), transparent 62%),
    radial-gradient(780px 520px at 58% 106%,
      rgb(from var(--lv-canvas-wash-c) r g b / calc(var(--lv-canvas-wash-alpha) * 0.85)), transparent 60%);
  background-attachment: fixed;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

h1, h2, h3, h4 {
  font-family: var(--lv-font-ui);
  font-weight: var(--lv-weight-heading);
  letter-spacing: var(--lv-tracking-heading);
  line-height: var(--lv-leading-tight);
  margin: 0;
  text-wrap: balance;
}

p { margin: 0; max-width: var(--lv-measure); }
a { color: inherit; }

/* Every figure in the product. Tabular so a changing number does not reflow. */
.lv-num {
  font-family: var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--lv-tracking-num);
}

.lv-eyebrow {
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-eyebrow);
  /* The theme's eyebrow case — see the same rule on .lv-sec__eyebrow in
     packages/registry/styles/section.css. The two eyebrow classes must move
     together or a page sets its section eyebrows in one case and its inline
     ones in another. */
  text-transform: var(--lv-display-case, uppercase);
  font-variant-caps: var(--lv-display-variant, normal);
  color: var(--lv-text-tertiary);
}

.lv-muted { color: var(--lv-text-secondary); }
.lv-quiet { color: var(--lv-text-tertiary); }
.lv-rule  { height: 1px; background: var(--lv-line); border: 0; margin: 0; }

/* Visually hidden but present in the DOM. Load-bearing: any node carrying a
   `data-edit*` attribute must use this instead of `display: none`, or the page
   builder loses the edit target. */
.lv-vh {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* =============================================================================
   FOCUS — one ring, every interactive element, `:focus-visible` only.
   The demo shipped this on `.btn` and nothing else; nav links, tree nodes,
   palette rows, segmented buttons, tabs, swatches and library cards all had
   no visible focus at all (.impeccable.md §7 item 7).
   ========================================================================== */

:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
  border-radius: var(--lv-radius-sm);
}

/* On a glass surface the ring can land on a light backdrop; a companion
   ring in the surface colour guarantees the 3:1 boundary either way. */
.lv-glass :where(a, button, input, [tabindex]):focus-visible {
  box-shadow: 0 0 0 calc(var(--lv-focus-width) + var(--lv-focus-offset)) var(--lv-surface);
}

/* =============================================================================
   BUTTON
   ========================================================================== */

.lv-btn {
  position: relative;
  isolation: isolate;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--lv-space-2);
  min-height: var(--lv-btn-height);
  padding-inline: var(--lv-btn-padding-x);
  border: var(--lv-btn-border);
  border-radius: var(--lv-btn-radius);
  font: var(--lv-btn-font);
  text-transform: var(--lv-btn-case);
  font-variant-caps: var(--lv-btn-variant);
  letter-spacing: var(--lv-btn-tracking);
  color: var(--lv-text-primary);
  cursor: pointer;
  white-space: nowrap;
  transition: transform var(--lv-dur-fast) var(--lv-ease),
              box-shadow var(--lv-dur-state) var(--lv-ease),
              background-color var(--lv-dur-state) var(--lv-ease),
              color var(--lv-dur-state) var(--lv-ease);
}
/* Same press value as `.lv-affordance-lift`/`.lv-link--arrow`
   (packages/registry/styles/section.css) — one press grammar everywhere a
   control presses, not a button-specific number. */
.lv-btn:active { transform: scale(0.97); }
.lv-btn[disabled],
.lv-btn[aria-disabled='true'] {
  opacity: 0.5;
  cursor: not-allowed;
  transform: none;
}

/* PRIMARY — carries the mark's own gradient (.impeccable.md §4).
   `--lv-ramp`'s light terminal is capped so `--lv-text-on-brand` clears
   4.5:1 at the brightest point of the gradient. Gated in pairs.mjs as
   `on-brand vs ramp-terminal`. */
.lv-btn--primary {
  /* THE HALO MUST PAINT BEHIND THE BUTTON, NOT OVER IT.
     `.lv-btn` sets `isolation: isolate`, which makes the button a stacking
     context; inside one, a `z-index: -1` pseudo-element paints ABOVE the
     element's own background and below its text. So the halo — a turquoise/
     azure gradient at opacity 0.48, blurred 11px, `inset: -3px` — was laid
     across the whole face of every primary button, on top of `--lv-ramp`.
     Measured on `raw` (brand hue 18, a deep red-orange): the button's centre
     sampled (108,166,217), a washed blue. With the isolation released it
     samples (147,123,198) and the red gradient is visible. Every one of the
     sixteen themes had the same cyan CTA for this one reason.

     `isolation: auto` lets the pseudo escape to the nearest ancestor stacking
     context, where a bloom belongs — light landing on the surface *under* the
     control (.impeccable.md §4). `.lv-btn--glass` keeps the isolation it
     needs: its `::after` is a 1px masked rim that has to sit above its own
     translucent fill, which is the opposite requirement. */
  isolation: auto;
  color: var(--lv-btn-primary-ink);
  background: var(--lv-btn-primary-surface);
  border: var(--lv-btn-primary-border);
  box-shadow: var(--lv-btn-primary-shadow);
}
.lv-btn--primary:hover {
  background: var(--lv-btn-primary-surface-hover);
  box-shadow: var(--lv-btn-primary-shadow-hover);
  --lv-btn-invert-scale: var(--lv-btn-invert-scale-hover);
}
/* `:active` (below, universal — RULES: active behaviour stays untouched by a
   device) must always win over a device's hover press/translate, so the
   hover transform is scoped OUT of the active state rather than relying on
   source order or specificity to sort it out. Shared across every SOLID
   voice (primary/solid/danger) — the filled-background family that "lifts"
   on hover, as opposed to `--quiet`/`--glass`, which fill in place instead
   of moving (ghost/outline never lifts off the page it sits on). */
.lv-btn--primary:hover:not(:active),
.lv-btn--solid:hover:not(:active),
.lv-btn--danger:hover:not(:active) {
  transform: var(--lv-btn-hover-transform);
}

/* The halo: the same refracted-light idea as the bloom, tuned for a control.
   Opacity is device-controlled (buttons.mjs) — 0 for every device except
   `halo-pill`, which is the platform's own face and keeps today's
   elevation-derived glow (scales.mjs shapeVars()). */
.lv-btn--primary::after {
  content: '';
  position: absolute;
  inset: -3px;
  z-index: -1;
  border-radius: inherit;
  background: var(--lv-btn-halo);
  filter: blur(11px);
  opacity: var(--lv-btn-halo-opacity);
  transition: opacity var(--lv-dur-state) var(--lv-ease);
  pointer-events: none;
}
.lv-btn--primary:hover::after { opacity: var(--lv-btn-halo-opacity-hover); }

@media (prefers-reduced-transparency: reduce), (forced-colors: active) {
  .lv-btn--primary::after { display: none; }
}

/* The `ruled` device's hover wash — a translucent film that scales in from
   the left under UNCHANGED ink text (never an invert: text stays the same
   colour so no new contrast pairing is needed). Shares `.lv-btn--primary`'s
   `isolation: auto` release, so it escapes to the same ancestor stacking
   context the halo already proves paints BEHIND the button's own background
   and content (components.css note above `.lv-btn--primary`) — a second
   `z-index: -1` layer at the same level, ordered by source position, never a
   NEW stacking context of its own (mirrors differentiation.test.mjs's
   isolation assertion). Inert everywhere else: `--lv-btn-invert-scale`
   defaults to 0 in both states. */
.lv-btn--primary::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background-color: var(--lv-btn-invert-fill);
  transform: scaleX(var(--lv-btn-invert-scale));
  transform-origin: left center;
  transition: transform var(--lv-dur-state) var(--lv-ease);
  pointer-events: none;
}
/* Decorative, like the glass rim/bloom (material.css) — the transition goes
   to ~0 but the end state (filled or not) stays correct either way. */
@media (prefers-reduced-motion: reduce) {
  .lv-btn--primary::before { transition-duration: 0.01ms; }
}

/* SECONDARY — glass. Only legitimate inside glass chrome or on the canvas;
   never inside an opaque panel body (use `--quiet` there). */
.lv-btn--glass {
  background: linear-gradient(
    165deg,
    rgb(var(--lv-glass-tint) / calc(var(--lv-glass-alpha) + 0.26)),
    rgb(var(--lv-glass-tint) / var(--lv-glass-alpha))
  );
  backdrop-filter: blur(16px) saturate(180%);
  -webkit-backdrop-filter: blur(16px) saturate(180%);
  box-shadow:
    inset 0 0 0 1px var(--lv-line-control),
    inset 0 1px 0 0 rgb(255 255 255 / var(--lv-glass-edge)),
    var(--lv-lift-1);
}
.lv-btn--glass::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  padding: 1px;
  background: conic-gradient(
    from var(--lv-rim-angle, 205deg),
    var(--lv-spec-1), var(--lv-spec-2), var(--lv-spec-3),
    var(--lv-spec-4), var(--lv-spec-5), var(--lv-spec-1)
  );
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  opacity: 0.42;
  transition: opacity var(--lv-dur-state) var(--lv-ease);
  pointer-events: none;
}
.lv-btn--glass:hover::after { opacity: 0.80; }

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .lv-btn--glass { background: var(--lv-surface); }
}
@media (prefers-reduced-transparency: reduce) {
  .lv-btn--glass {
    background: var(--lv-surface);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }
  .lv-btn--glass::after { display: none; }
}

/* SOLID SECONDARY — the correct secondary inside a form or panel body.
   `--lv-btn-solid-ink`, never a bare text role: the ink must be the token
   that froze WITH the surface (see the token block's own note — the bare
   role is exactly what went white-on-white on every photo hero). */
.lv-btn--solid {
  background: var(--lv-btn-solid-surface);
  color: var(--lv-btn-solid-ink);
  border: var(--lv-btn-solid-border);
  box-shadow: var(--lv-btn-solid-shadow);
}
.lv-btn--solid:hover {
  background: var(--lv-btn-solid-surface-hover);
  box-shadow: var(--lv-btn-solid-shadow-hover);
}

/* TERTIARY */
.lv-btn--quiet {
  background: transparent;
  color: var(--lv-text-secondary);
  box-shadow: none;
  padding-inline: var(--lv-space-4);
}
.lv-btn--quiet:hover {
  color: var(--lv-text-primary);
  background: color-mix(in oklab, var(--lv-brand) 8%, transparent);
}

/* DESTRUCTIVE — the one solid voice that had no hover at all (the operator's
   literal "no hover/active states" complaint): same ink-darken + shadow-token
   lift as `--solid` above, mixed against its own surface/border tokens
   rather than `--lv-line-control`/`--lv-surface-raised`. */
.lv-btn--danger {
  background: var(--lv-bad-surface);
  color: var(--lv-bad-text);
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-bad-text) 40%, transparent);
}
.lv-btn--danger:hover {
  background: color-mix(in oklab, var(--lv-text-primary) 6%, var(--lv-bad-surface));
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-bad-text) 55%, transparent), var(--lv-lift-2);
}

.lv-btn--sm { min-height: var(--lv-btn-height-sm); padding-inline: var(--lv-btn-padding-x-sm); font-size: var(--lv-text-xs); }
.lv-btn--lg { min-height: var(--lv-btn-height-lg); font-size: var(--lv-text-md); }
.lv-btn--block { width: 100%; }
.lv-btn--icon { padding: 0; width: var(--lv-btn-height); height: var(--lv-btn-height); border-radius: var(--lv-radius-md); }
.lv-btn--icon.lv-btn--sm { width: var(--lv-btn-height-sm); height: var(--lv-btn-height-sm); }

/* A small-size button is still a 44px touch target on a coarse pointer. */
@media (pointer: coarse) {
  .lv-btn--sm, .lv-btn--icon.lv-btn--sm { min-height: 44px; min-width: 44px; }
}

/* =============================================================================
   FIELD
   ========================================================================== */

/* Opaque field — the default, and the only one permitted inside a form. */
.lv-field {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  min-height: var(--lv-field-height);
  padding-inline: var(--lv-field-padding-x);
  border-radius: var(--lv-field-radius);
  background: var(--lv-field-bg);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
  transition: box-shadow var(--lv-dur-state) var(--lv-ease);
}
.lv-field:hover { box-shadow: inset 0 0 0 1px var(--lv-field-border-hover); }
/* The ring is drawn on the WRAPPER, not on the input: `.lv-field` is the box
   the visitor sees as "the field" — the input inside it is transparent, has no
   border of its own, and is inset by `--lv-field-padding-x`, so an outline on
   the input would trace a square rectangle floating inside a rounded control.
   `:focus-within` is what carries it, which also means an affix (a search icon,
   a currency prefix, a unit suffix) is enclosed by the ring rather than left
   outside it.

   `outline`, not `box-shadow`: an outline follows `border-radius`, is never
   painted under a sibling, and is the same mechanism as the universal
   `:focus-visible` rule above — so the field ring cannot drift away from every
   other ring in the product.

   Measured, not asserted: `tools/immersive-design/focus-appearance.mjs`
   screenshots each field unfocused and focused, diffs the rendered pixels, and
   holds the result to WCAG 2.2 SC 2.4.11 — a ≥2px perimeter whose pixels clear
   3:1 against BOTH their own unfocused value and the adjacent ground.
   `packages/themes/test/focus-appearance.test.mjs` pins it.

   `:has(> :is(input, select, textarea))` is not decoration — it is what makes
   this rule mean "a wrapper around a form control" rather than "anything
   wearing the class". `decide.pricing/renderers/pricing-field.astro:103` puts
   `lv-field` on its <section> (a *field of offers*, a different word), so on
   any theme binding that renderer the class matches a whole 1040×958 section
   that already inherits this primitive's flex/min-height/padding/background/
   border by accident — measured on `tide`, and a pre-existing defect this rule
   must not compound by drawing a 2px ring around an entire pricing table.
   Every genuine field wrapper in the registry (act.enquire, act.apply,
   act.comment, act.qualify, act.request-quote, act.schedule, act.subscribe,
   act.transact, act.conversion-panel, browse.locations, open.listing,
   open.scene, decide.compare-live-data) holds its control as a DIRECT child;
   the pricing section holds radios nested inside label rows. The structural
   predicate separates them without either package knowing about the other.
   The collision itself is `decide.pricing`'s to rename. */
.lv-field:has(> :is(input, select, textarea)):focus-within {
  box-shadow: inset 0 0 0 1px var(--lv-field-focus-ring);
  outline: var(--lv-focus-width) solid var(--lv-field-focus-ring);
  outline-offset: var(--lv-focus-offset);
}
.lv-field input,
.lv-field textarea {
  flex: 1;
  min-width: 0;
  border: 0;
  background: transparent;
  outline: none;
  font: var(--lv-weight-regular) var(--lv-text-sm) / 1.5 var(--lv-font-ui);
  color: var(--lv-text-primary);
}
.lv-field input::placeholder,
.lv-field textarea::placeholder { color: var(--lv-text-tertiary); }
.lv-field--invalid { box-shadow: inset 0 0 0 1px var(--lv-bad-text); }
.lv-field--textarea { align-items: stretch; padding-block: var(--lv-space-3); }

/* ── File field ───────────────────────────────────────────────────────────────
   The one input the system had no answer for. `act.apply` wrapped its text
   fields in `.lv-field` and left the file input bare with two local
   declarations, so a form built entirely from this system had one control in
   the browser's own grey chrome sitting between two pill-shaped fields.
   The trim is the field; `::file-selector-button` carries the button role,
   because the native button is the accessible, keyboard-reachable control and
   replacing it with a styled `<label>` costs that for nothing. Both vendor
   spellings are written out: `::file-selector-button` is the standard and
   `::-webkit-file-upload-button` is what Safari still answers to, and a
   selector list containing one unknown pseudo-element is dropped WHOLE by the
   parser — so these cannot be combined into one rule. */
.lv-field--file { padding-inline: var(--lv-space-2); padding-block: var(--lv-space-2); }
.lv-field--file input[type='file'] {
  flex: 1;
  min-width: 0;
  font: var(--lv-weight-regular) var(--lv-text-sm) / 1.5 var(--lv-font-ui);
  color: var(--lv-text-secondary);
}
.lv-field--file input[type='file']::file-selector-button {
  margin-inline-end: var(--lv-space-3);
  padding: var(--lv-space-2) var(--lv-space-4);
  border: 0;
  border-radius: var(--lv-radius-pill);
  font: var(--lv-weight-semibold) var(--lv-text-sm) / 1.2 var(--lv-font-ui);
  color: var(--lv-text-primary);
  background: var(--lv-surface-raised);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
  cursor: pointer;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}
.lv-field--file input[type='file']::-webkit-file-upload-button {
  margin-inline-end: var(--lv-space-3);
  padding: var(--lv-space-2) var(--lv-space-4);
  border: 0;
  border-radius: var(--lv-radius-pill);
  font: var(--lv-weight-semibold) var(--lv-text-sm) / 1.2 var(--lv-font-ui);
  color: var(--lv-text-primary);
  background: var(--lv-surface-raised);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
  cursor: pointer;
}
.lv-field--file input[type='file']:hover::file-selector-button { background: var(--lv-field-bg); }
.lv-field textarea { resize: vertical; }
.lv-field select { width: 100%; border: 0; background: transparent; color: var(--lv-text-primary); font: var(--lv-weight-regular) var(--lv-text-sm) / 1.5 var(--lv-font-ui); }
/* ── Form layout — twelve columns, and the field declares what its data needs ─
   Every field was full width regardless of what it held: a three-character
   currency code got the same box as an affiliate URL, which is what made every
   form in the CMS read as one undifferentiated column.

   Three properties make this safe to roll across ~29 forms:

   1. `.lv-form > *` spans the full row, so a form that declares NOTHING renders
      exactly as it did before. Narrowing is opt-in, per field, at the call site.
   2. Adjacency is free. A `third` followed by a `quarter` lands on one row
      because the tracks are there — price and currency read as one money
      control with no wrapper element and no name change.
   3. The collapse is a CONTAINER query, not a viewport one. The same form
      renders in a 22rem drawer and on a full page; only the form's own inline
      size decides whether the columns survive. */
.lv-form {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  /* Row gap wider than column gap: that difference is what reads as columns
     rather than as a wrapped list. */
  gap: var(--lv-space-5) var(--lv-space-4);
  container-type: inline-size;
}
.lv-form > * { grid-column: 1 / -1; }
.lv-form-field { display: grid; gap: var(--lv-space-2); align-content: start; }
.lv-form-field--quarter    { grid-column: span 3; }
.lv-form-field--third      { grid-column: span 4; }
.lv-form-field--half       { grid-column: span 6; }
.lv-form-field--two-thirds { grid-column: span 8; }
.lv-form-field--full       { grid-column: 1 / -1; }
/* Two honest degradations, both measured against the track a `quarter` gets.
   At 30rem a quarter track is ~110px — under a currency select with its
   chevron — so below that the row goes two-up and the fine distinctions
   collapse into it. Below 20rem (a `sm` drawer, a phone held upright) a row of
   any kind is a lie and everything is full width. */
@container (max-width: 30rem) {
  .lv-form > .lv-form-field--quarter,
  .lv-form > .lv-form-field--third,
  .lv-form > .lv-form-field--half { grid-column: span 6; }
  .lv-form > .lv-form-field--two-thirds { grid-column: 1 / -1; }
}
@container (max-width: 20rem) {
  .lv-form > .lv-form-field { grid-column: 1 / -1; }
}
/* A band, not a panel — hairline and rhythm, no box. Its children sit side by
   side while they fit and stack when they do not; that is the whole behaviour.
   First-child suppression: a rule at the very top of a form separates nothing. */
.lv-form-group {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
  gap: var(--lv-space-3) var(--lv-space-4);
  padding-top: var(--lv-space-4);
  border-top: 1px solid var(--lv-line);
}
.lv-form-group:first-child { padding-top: 0; border-top: 0; }
.lv-form-field__label { font-size: var(--lv-text-sm); font-weight: var(--lv-weight-semibold); }
.lv-form-field__helper { color: var(--lv-text-secondary); font-size: var(--lv-text-xs); }
.lv-form-field__error { color: var(--lv-bad-text); font-size: var(--lv-text-xs); }
.lv-form-field--invalid .lv-form-field__label { color: var(--lv-bad-text); }
/* A code or a figure is set in the mono face wherever it appears (§4). The
   controls set `font` as a shorthand, which resets family, so the family has to
   be restated here rather than inherited from the `.lv-num` wrapper. */
.lv-field.lv-num input,
.lv-field.lv-num select { font-family: var(--lv-font-mono); font-feature-settings: 'tnum' 1; letter-spacing: var(--lv-tracking-num); }
.lv-select { position: relative; }
.lv-select::after {
  content: '⌄';
  position: absolute;
  right: var(--lv-field-padding-x);
  pointer-events: none;
  color: var(--lv-text-tertiary);
}
.lv-select select { appearance: none; padding-right: var(--lv-space-5); cursor: pointer; }
.lv-site-switcher {
  display: flex;
  align-items: center;
  min-height: var(--lv-field-height);
  padding-inline: var(--lv-field-padding-x);
  border-radius: var(--lv-field-radius);
  background: var(--lv-field-bg);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
}
.lv-site-switcher select { width: 100%; border: 0; background: transparent; color: var(--lv-text-primary); font: var(--lv-weight-medium) var(--lv-text-sm) / 1.5 var(--lv-font-ui); }
.lv-check, .lv-toggle-field { display: flex; align-items: center; gap: var(--lv-space-3); }
.lv-check input { width: 18px; height: 18px; accent-color: var(--lv-brand); }
.lv-toggle-field__label { font-size: var(--lv-text-sm); font-weight: var(--lv-weight-semibold); }
.lv-toggle-field__description { color: var(--lv-text-secondary); font-size: var(--lv-text-xs); }

/* Glass field — ONLY inside glass chrome: the top-bar search, the command
   palette input, the builder inspector. Never in a form. */
.lv-field--glass {
  background: linear-gradient(
    165deg,
    rgb(var(--lv-glass-tint) / calc(var(--lv-glass-alpha) + 0.30)),
    rgb(var(--lv-glass-tint) / calc(var(--lv-glass-alpha) + 0.06))
  );
  backdrop-filter: blur(16px) saturate(170%);
  -webkit-backdrop-filter: blur(16px) saturate(170%);
  box-shadow:
    inset 0 0 0 1px var(--lv-line-control),
    inset 0 1px 0 0 rgb(255 255 255 / var(--lv-glass-edge)),
    inset 0 2px 5px 0 rgb(var(--lv-glass-under) / 0.08);
}
@media (prefers-reduced-transparency: reduce) {
  .lv-field--glass {
    background: var(--lv-surface);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
  }
}

/* =============================================================================
   TOGGLE — a real <button role="switch">, keyboard-operable.
   ========================================================================== */

.lv-toggle {
  position: relative;
  width: 52px; height: 30px;
  flex: none;
  border-radius: var(--lv-radius-pill);
  cursor: pointer;
  border: 1px solid var(--lv-line-control);   /* 3:1 boundary in the OFF state */
  background: var(--lv-surface-sunken);
  transition: background-color var(--lv-dur-state) var(--lv-ease),
              border-color var(--lv-dur-state) var(--lv-ease);
}
.lv-toggle::after {
  content: '';
  position: absolute;
  top: 2px; left: 2px;
  width: 24px; height: 24px;
  border-radius: 50%;
  background: var(--lv-surface);
  box-shadow: 0 1px 2px rgb(var(--lv-shadow-tint) / 0.22),
              0 4px 8px -2px rgb(var(--lv-shadow-tint) / 0.28);
  transition: transform var(--lv-dur-state) var(--lv-ease);
}
.lv-toggle[aria-checked='true'] {
  background-image: var(--lv-ramp);
  border-color: transparent;
  box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.4),
              0 4px 14px -4px color-mix(in oklab, var(--lv-brand) 65%, transparent);
}
.lv-toggle[aria-checked='true']::after { transform: translateX(22px); }

@media (pointer: coarse) {
  /* The visual switch stays 52×30; the hit area grows to 44px. */
  .lv-toggle { position: relative; }
  .lv-toggle::before {
    content: '';
    position: absolute;
    inset: -7px -0px;
    min-height: 44px;
  }
}

/* =============================================================================
   BADGE
   ========================================================================== */

.lv-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: var(--lv-badge-height);
  padding-inline: var(--lv-badge-padding-x);
  border-radius: var(--lv-radius-pill);
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1.4 var(--lv-font-ui);
  color: var(--lv-text-secondary);
  background: var(--lv-surface-raised);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}
.lv-badge--ok   { color: var(--lv-ok-text);   background: var(--lv-ok-surface);   box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-ok-text) 38%, transparent); }
.lv-badge--warn { color: var(--lv-warn-text); background: var(--lv-warn-surface); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-warn-text) 42%, transparent); }
.lv-badge--bad  { color: var(--lv-bad-text);  background: var(--lv-bad-surface);  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-bad-text) 38%, transparent); }
.lv-badge--tier { color: var(--lv-accent); background: var(--lv-highlight); box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-accent) 40%, transparent); }

/* The status dot is decoration; the badge's TEXT carries the state, so a
   colour-blind user never depends on the dot. */
.lv-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; flex: none; }

/* =============================================================================
   TABLE — opaque, dense, rules not boxes (.impeccable.md §3 and §5.5)
   ========================================================================== */

.lv-table { width: 100%; border-collapse: collapse; background: var(--lv-surface); }
.lv-table th {
  text-align: left;
  font: var(--lv-table-head-font);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--lv-text-tertiary);
  padding: 0 var(--lv-table-cell-padding-x) var(--lv-space-3);
  white-space: nowrap;
}
.lv-table td {
  padding: var(--lv-space-3) var(--lv-table-cell-padding-x);
  border-top: 1px solid var(--lv-line);
  font-size: var(--lv-text-sm);
  vertical-align: middle;
  height: var(--lv-table-row-height);
}
.lv-table tbody tr:hover td { background: var(--lv-table-row-hover); }
.lv-table tbody tr[aria-selected='true'] td { background: var(--lv-table-row-selected); }
.lv-table td:first-child, .lv-table th:first-child { padding-left: 0; }
.lv-table td:last-child,  .lv-table th:last-child  { padding-right: 0; text-align: right; }
.lv-table--compact td { height: var(--lv-table-row-height-compact); padding-block: var(--lv-space-2); }

/* Tables scroll inside their own container; the page body never scrolls
   sideways.

   `position: relative` is load-bearing, not decoration. `overflow-x: auto`
   clips a scroller's IN-FLOW descendants, but an absolutely positioned one is
   clipped only by an ancestor that is also its containing block — and a
   `position: static` scroller is not. Every wide table in this registry
   carries `.lv-vh` labels ("Tageftersyn: inkluderet"), which are
   `position: absolute`; at 390px their static position sits 200–500px past
   the viewport, so they escaped the scroller and set `documentElement`'s
   scroll width while `body.scrollWidth` still read 390. That is the whole of
   the Phase 13 `horizontal-overflow` failure on the pricing and comparison
   tables: the table was never the offender, its own visually-hidden labels
   were. Making the scroller the containing block clips them with everything
   else. */
.lv-table-scroll { position: relative; overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* A table row's compact record identifier. The adjacent title supplies the
   accessible name; this stays decorative so its abbreviation is not repeated. */
.lv-marker-tile {
  display: grid;
  place-items: center;
  width: 28px;
  height: 28px;
  flex: none;
  border: 1px solid var(--lv-line);
  border-radius: var(--lv-radius-sm);
  background: var(--lv-surface-sunken);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-2xs);
  font-weight: var(--lv-weight-bold);
}

/* =============================================================================
   METER
   ========================================================================== */

.lv-meter {
  height: var(--lv-meter-height);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-surface-sunken);
  overflow: hidden;
  /* `--lv-line-control`, not `--lv-line`: a meter at 0% is a graphic that
     conveys information (WCAG 1.4.11), so its track boundary needs 3:1 — a
     decorative hairline leaves an empty meter invisible. Gated as
     `meter-track-boundary`. */
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
}
.lv-meter > i {
  display: block;
  height: 100%;
  /* The primitive's own fallback: a meter placed without `--lv-meter-value` on
     the wrapper (Meter.tsx, which sets `width` inline instead — see below)
     still renders full rather than collapsing to nothing. Callers that DO set
     `--lv-meter-value` (prove.rating-summary) get their fill this way; an
     inline `width` on `i` itself, where a caller computes one, wins over this
     regardless — inline style always outranks a class rule. */
  width: var(--lv-meter-value, 100%);
  border-radius: inherit;
  background-image: var(--lv-ramp);
}
.lv-meter--warn > i { background-image: linear-gradient(90deg, var(--lv-warn-text), var(--lv-bad-text)); }

/* =============================================================================
   ALWAYS-ON CHROME — paint containment so backdrop sampling is bounded
   ========================================================================== */

.lv-rail, .lv-topbar { contain: paint; }

/* =============================================================================
   SHARED COMPOSITIONS — these own the stem classes emitted by primitives.
   ========================================================================== */

.lv-tabs { min-width: 0; }
.lv-tabs [role='tabpanel'] { min-width: 0; outline: none; }
.lv-section { min-width: 0; }
.lv-section--warn { box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-warn-text) 34%, transparent), var(--lv-lift-1); }
.lv-section--bad { box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-bad-text) 34%, transparent), var(--lv-lift-1); }
.lv-status-banner { display: grid; gap: var(--lv-space-3); }
.lv-status-banner--warn { background: color-mix(in oklab, var(--lv-warn-surface) 54%, var(--lv-surface)); }
.lv-status-banner--bad { background: color-mix(in oklab, var(--lv-bad-surface) 54%, var(--lv-surface)); }
.lv-empty--compact { padding-block: var(--lv-space-4); gap: var(--lv-space-2); }
.lv-empty--compact h3 { font-size: var(--lv-text-sm); }
.lv-filter-bar__search { min-width: min(100%, 14rem); }
.lv-filter-bar__select { min-width: 10rem; }
.lv-chip-group__search { width: min(100%, 18rem); }
.lv-inline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lv-space-2); }

/* =============================================================================
   Leadværk — the public-site SECTION system
   -----------------------------------------------------------------------------
   One stylesheet, imported by every component renderer that needs it. It exists
   because of `.impeccable.md` §5.4 and §5.7: the system is the deliverable, and
   there is one of everything. Eighty components each inventing their own
   heading block is eighty components that disagree about what a heading block
   is, which is the state LPH was measured in.

   Two rules govern what may live here rather than in a component's own
   `<style>`:

     1. If two components would write it identically, it belongs here.
     2. If it encodes a *brand* decision rather than a *layout* decision, it
        belongs here even if only one component uses it today.

   NO GLASS IN THIS FILE. `.impeccable.md` §3 is a law: glass carries chrome,
   never the work surface, and a customer's page content is the work surface —
   for their visitor it is the only surface. Everything below is opaque and
   therefore measurable by the contrast gate.

   THE SIGNATURE, spent once and reused 80 times: the **spectral hairline** at
   the head of a section — a 1px rule that carries the mark's ramp for its first
   4rem and then fades to the neutral line colour. It is the machined edge of
   §2's "wrought", at the one place every section already has a horizontal line.
   Components do not get to add a second signature.
   ========================================================================== */

/* ── The section shell ───────────────────────────────────────────────────── */

.lv-sec {
  /* Container queries, not viewport queries: a section may be placed in a
     narrow article column or in a full-bleed page. §4 of the design protocol. */
  container-type: inline-size;
  /* THE COMPOSED-SECTION SEAM (G20). `--lv-sec-pad` is this plane's own
     rhythm value — the base, re-declared by the --tight/--loose modifiers
     below, so the computed padding is byte-identical to the literal
     `padding-block` declarations this replaces. `--lv-sec-pad-start/-end`
     belong to the THEME PLANE (contract.mjs THEME_LAYER_VARS): the block
     shell sets them on composition wrappers (`.lvt-group`/`.lvt-split`
     members, chrome.mjs) to collapse the rhythm between banded members and
     to neutralise it inside a split column. Unset — every ordinary page —
     both fall back to `--lv-sec-pad` and nothing changes. Same seam, same
     direction as `--lv-container-max` on `.lv-sec__inner` below: the theme
     supplies a value, this plane decides where it lands. */
  --lv-sec-pad: var(--lv-space-8);
  padding-block: var(--lv-sec-pad-start, var(--lv-sec-pad)) var(--lv-sec-pad-end, var(--lv-sec-pad));
  color: var(--lv-text-primary);

  /* THE ACCENT INK ROLE, and why it is a role rather than `--lv-brand-strong`
     written eight times.

     A theme may put a section in a brand band (`sections: { intent: { tone:
     'band' } }`). The band inverts the room through the VARIABLES — chrome.mjs
     re-points --lv-text-*, --lv-surface* and --lv-line* on the shell's direct
     child, which is this element — so a component that paints with a text role
     survives inversion at any specificity. A component that paints with the
     BRAND role does not: --lv-brand-strong is the band gradient's own dark end.

     Measured, before this role existed: `prove.customer-voice` set its rating
     figure to var(--lv-brand-strong) and `raw` and `saas` both place that
     intent in a band. On raw the band runs oklch(34% 0.15 18) → oklch(48% 0.15
     44) and the figure resolved to oklch(34% 0.15 18) — the gradient's first
     stop exactly. Contrast 1.00:1. The rating was invisible on two of sixteen
     themes, and .impeccable.md §5.1 says the ratio wins.

     So: a brand-coloured accent that sits on the INHERITED background reads
     this role. Outside a band it is the brand, unchanged and still measured by
     the contrast gate's brand-on-canvas pairs. Inside one the theme re-points
     it to the band's single ink.

     An accent that carries its OWN background — `explain.capability-grid`'s
     icon chip is --lv-brand-strong on --lv-brand-soft — must NOT use this role.
     That pair travels with the element, the contrast gate measures it as
     `brand-on-brand-soft`, and re-pointing the ink would break a measured pair
     to fix a problem it does not have. */
  --lv-ink-accent: var(--lv-brand-strong);
}

.lv-sec--tight { --lv-sec-pad: var(--lv-space-6); }
.lv-sec--loose { --lv-sec-pad: var(--lv-space-9); }

/* Full-bleed background variant. Still opaque; the wash comes from the canvas
   tokens, so it re-themes rather than being painted in. */
.lv-sec--sunken {
  background: var(--lv-surface-sunken);
  padding-inline: var(--lv-space-5);
}

/* ── The work column, and the two axes it used to cancel ──────────────────────

   THE CONTAINER AXIS. `rhythm.container` is a real theme axis — 880–1440px in
   `packages/themes/src/scales.mjs`, generated into `--lv-container-max` and
   applied to THIS ELEMENT'S PARENT by `.lvt-shell > *`. A second, literal cap
   here at 72rem = 1152px silently overruled every theme that declared more:
   portfolio 1360, comparison 1320, ecommerce 1300, raw 1280, gridline 1240,
   community 1200, saas 1160, simple 1160 — eight of sixteen, all rendering at
   1152. Reading the variable makes this cap agree with the shell's instead of
   competing with it; the fallback is what an untethered surface with no theme
   stylesheet (a bare document, a fixture) gets, and it is the value that used
   to be unconditional.

   `.impeccable.md` §5.4: a token, never a literal. A length that encodes a
   theme decision is as much a token as a colour is. */
.lv-sec__inner {
  /* `--lv-sec-inner-max` is the composed-section seam again (see `.lv-sec`
     above): inside a split column the shell lifts the cap, because a column
     is narrower than the work column by construction and the cap would only
     re-centre a phantom margin. Unset everywhere else. */
  max-width: var(--lv-sec-inner-max, var(--lv-container-max, 72rem));
  margin-inline: auto;
  /* A flex or grid item's automatic minimum size is its MIN-CONTENT size, and
     several components lay their section root out as flex or grid — which
     makes this inner an item whose floor is whatever its widest unbreakable
     descendant demands. A gallery rail or a wide media row then holds the
     inner open past the shell and the page scrolls sideways, even though the
     rail scrolls its own content perfectly well. The floor is the same one
     `.lvt-split` already writes as `minmax(0, 1fr)` (chrome.mjs, v1.0.51) and
     for the identical reason; stated here so it holds for every section root,
     not only the split pair. */
  min-inline-size: 0;
}

/* ── Bleed ────────────────────────────────────────────────────────────────────

   THE CAP. `.lvt-shell--bleed` drops the page gutter and lifts the cap off its
   own child (chrome.mjs), because `SECTION_TONES` defines bleed as "the section
   runs to the page edge: no gutter, no work column". The cap the content then
   hit was the one above — so a bled hero, gallery or map was a 1152px column
   that had merely lost its side padding, and `SECTION_BUDGET.bleed`, three per
   theme and rationed against the band, bought almost nothing.

   The shell cannot reach in and fix this from its own side: a theme may not
   write a rule that names a component's class (`theme-selector-out-of-namespace`
   in packages/themes/src/check). So the component reads the TREATMENT instead.
   The dependency runs component → shell, which is the direction the boundary
   leaves open, and it is one rule rather than sixteen.

   THE FLOOR. Bleed sets `padding-inline: 0` on the shell and nothing else inset
   the content: `.lv-sec` and `.lv-sec__inner` carry no inline padding at all
   (only `.lv-sec--sunken` did), so on any viewport under the work column — every
   phone, and every one of the eight wide themes on a laptop — a bled section's
   text ran to the physical edge of the glass. A bleed surrenders the work
   COLUMN, not the margin that makes a line of text readable, so the floor has
   to survive it. It sits on the shell's child (the component root) rather than
   on `.lv-sec__inner`, because 21 of 83 components — `browse.product-set`'s
   grid and `locate.map` among them — have no inner at all.

   A component that has already made an inline-padding decision of its own keeps
   it: a scoped `.lv-x.astro-hash` rule is (0,2,0) and wins, and an unscoped one
   is equal-specificity but later in the stylesheet (registry.css is
   concatenated after system.css). `open.atmosphere` and `.lv-map--editor` are
   the two that rely on that today. */
.lvt-shell--bleed > * {
  padding-inline: var(--lv-space-5);
}

.lvt-shell--bleed .lv-sec__inner {
  max-width: none;
}

/* ── The same floor, for a section whose BACKGROUND is the media ──────────────

   `.lvt-shell:has(> [data-lv-bleed])` (packages/themes/src/chrome.mjs) drops
   the gutter and the work-column cap so a hero photograph reaches the page
   edge. The COPY must not follow it there — a headline that starts at the
   physical edge of the glass is the defect the floor above exists to prevent,
   and an uncapped hero on a 1440px laptop sets its lede across the whole
   viewport.

   THE RULE IS NOT HERE, and that is not a preference. This file reaches a
   served page ONLY through `apps/site-renderer/themes/system.css`, which
   `theme:generate` writes — and `theme:generate` refuses while `theme:check`
   reports findings, which it has since before this change (22 dark-theme
   contrast findings, none of them geometry). So a rule added here today is a
   rule no visitor would ever load. Measured, and it is not hypothetical: the
   `.lv-icon` primitive added to this file on 2026-08-07 is absent from the
   `system.css` on disk for exactly the same reason.

   So the floor sits in the three components that carry the attribute, in their
   own scoped blocks, which `registry:generate` compiles into `registry.css` on
   every run. It is three copies of one declaration rather than one — the cost
   is stated here rather than hidden, and it is owed back to this file the day
   `theme:check` is green. */

/* ── The head: eyebrow, title, lede. Left-aligned by default ─────────────── */

.lv-sec__head {
  position: relative;
  max-width: var(--lv-measure);
  padding-block-start: var(--lv-space-4);
  margin-block-end: var(--lv-space-6);
}

/* The signature. `::before` so it never interferes with the edit surface. */
.lv-sec__head::before {
  content: '';
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0;
  inline-size: 100%;
  block-size: 1px;
  background:
    linear-gradient(90deg, var(--lv-accent) 0, var(--lv-highlight) 2.5rem, transparent 4rem),
    var(--lv-line);
}

.lv-sec__head--center {
  margin-inline: auto;
  text-align: center;
}

.lv-sec__head--center::before {
  background:
    linear-gradient(90deg, transparent 0, var(--lv-brand-soft) 50%, transparent 100%),
    var(--lv-line);
}

/* G23 — the kicker/eyebrow system.
   Calibrated against `design-reference/dennis-niess-reference.html`'s `.kick`:
   mono face, accent ink, wide tracking, and a small dimension-line motif —
   the carpenter's "01 |—| Ydelser" measure-tick, borrowed because it is the
   one signature on that page that is pure typography-and-geometry rather than
   a photograph, which is exactly what a token-driven system can reproduce.

   THE INK. `--lv-text-tertiary` (neutral grey) read as inert furniture, not a
   section landmark. `--lv-ink-accent` is the ROLE this file already defines on
   `.lv-sec` (§ above) for exactly this case — a brand-coloured mark that must
   survive a banded placement without painting the brand onto the brand. Same
   role, same fallback pattern (`var(--lv-ink-accent, var(--lv-brand-strong))`),
   already shipped at this identical weight/size on
   `explain.narrative-media`'s `.lv-story__category` and four other renderers
   — this is that pattern reaching the one kicker the system itself owns.

   THE FACE. `--lv-font-mono` (JetBrains Mono, .impeccable.md §4: "for every
   figure") rather than `--lv-font-ui` — a kicker is a label THAT CARRIES A
   NUMBER once `.lv-sec--numbered` is in play, and the numeral needs the mono
   face's tabular figures whether or not this particular section is numbered.
   A kicker that switches face when numbering is added is a fourth, unwanted
   axis; one face for the whole class reads as one system. */
.lv-sec__eyebrow {
  display: block;
  margin-block-end: var(--lv-space-2);
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);
  letter-spacing: var(--lv-tracking-eyebrow);
  /* The theme's eyebrow case. `type.eyebrowCase` resolves to --lv-display-case
     in packages/themes/src/scales.mjs and this rule hard-coded `uppercase`, so
     `small-caps` (atelier, restaurant) and `normal` (washi) were a FOURTH axis
     value that never reached a page — after the display face, the hero step and
     the neutral chroma. The fallback keeps the admin, which sets no theme, on
     uppercase.

     `small-caps` pairs the transform with real small capitals rather than
     merely lowercasing the label: lowercase alone reads as a mistake, and small
     capitals are what a menu card and a drawing sheet actually set an eyebrow
     in. */
  text-transform: var(--lv-display-case, uppercase);
  font-variant-caps: var(--lv-display-variant, normal);
  color: var(--lv-ink-accent, var(--lv-brand-strong));
}

/* THE DIMENSION-LINE MOTIF. Two 1px verticals with a 1px horizontal midline —
   the reference's tick SVG, redrawn as layered `background` gradients so no
   renderer has to carry inline SVG for it (the same technique `.lv-sec__head`'s
   own signature hairline above already uses). Sits on `::before`, which is
   always the FIRST thing generated content can add — `.lv-sec--numbered`'s
   auto-number (below) has to lead the label per this file's own numbered-list
   convention (`.lv-steps > li::before { content: counter(lv-step) }`), so the
   tick cannot also claim `::before` and is placed on `::after`, trailing the
   label as a flourish instead of separating number from label as the
   reference's markup does. That reordering is the one place this upgrade is
   NOT pixel-faithful to the reference, and it is a direct consequence of the
   "no markup change, no builder wiring" constraint this wave works under —
   `.lv-sec__eyebrow` wraps plain text with no child span to peg an `order` to.

   TOKEN-LEVEL OPT-OUT, per the brief: "themes must be able to opt out /
   restyle." A theme cannot select `.lv-sec__eyebrow` from its own CSS
   (`theme-selector-out-of-namespace` — packages/themes/src/check/index.mjs
   explicitly carves out `:root` custom-property assignments as always in
   bounds, which is the seam this uses). `saas` uses it:
   `themes/saas/ornament.css` sets `--lv-eyebrow-tick-display: none` to keep
   its own plain mark, per the brief's own example. */
:root {
  --lv-eyebrow-tick-display: inline-block;
  --lv-eyebrow-tick-width: 1.5rem;
}

.lv-sec__eyebrow::after {
  content: '';
  display: var(--lv-eyebrow-tick-display, inline-block);
  vertical-align: middle;
  margin-inline-start: var(--lv-space-2);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  block-size: 0.5rem;
  background:
    linear-gradient(var(--lv-ink-accent, var(--lv-brand-strong)), var(--lv-ink-accent, var(--lv-brand-strong)))
      left / 1px 100% no-repeat,
    linear-gradient(var(--lv-ink-accent, var(--lv-brand-strong)), var(--lv-ink-accent, var(--lv-brand-strong)))
      right / 1px 100% no-repeat,
    linear-gradient(var(--lv-ink-accent, var(--lv-brand-strong)), var(--lv-ink-accent, var(--lv-brand-strong)))
      center / 100% 1px no-repeat;
}

/* ── THE TICK, PER TENANT MOTIF ───────────────────────────────────────────
   A tenant that has chosen one of `packages/themes/src/motifs.mjs`'s seven
   motifs gets that motif drawn TWICE: once large, on `.lvt-shell::before` /
   `::after` (the shell ornament `motifCss()` emits), and once small, here, on
   every section eyebrow down the page. The small one is what turns the choice
   into a THREAD rather than a decoration — a shell ornament is seen once per
   page, the eyebrow tick is seen at every section landmark, and drawing both
   from one vocabulary is the entire point of a per-tenant motif.

   THE SEAM. `[data-lv-motif='…']` on an ancestor — a later wave sets it on
   the document's `body` element from the tenant's resolved `motif_key`. An
   attribute rather than a class because a class on `body` is theme-shell
   territory (`chrome.mjs` owns it) and this is TENANT state, not theme state
   — the same separation that keeps `motifs.mjs` a closed set of its own that
   `check/axes.mjs` never scans. Until that wave lands, no rule below can
   match and every page keeps the default tick.

   (`body`, written as the element name and never as the angle-bracket start
   tag. This file is inlined verbatim into `apps/site-renderer/themes/
   system.css`, and from there into the inline stylesheet of every preview
   document — so a literal body start tag written here is the FIRST one in
   those bytes, ~340KB ahead of the real one, and anything that locates the
   body by scanning for it lands mid-stylesheet instead. Everything below
   that point is still CSS, including the `.lvt-nav`/`.lvt-foot` SELECTORS
   the theme plane declares, which is exactly what the component- and
   section-preview "has no site chrome" tests read as a rendered header and
   footer.)

   THE INK AND THE SIZE. `--lv-ornament-ink` and `--lv-ornament-size`: the two
   variables `motifVars()` already sets for the shell device, so the tick is
   the same brand ink and keyed to the same rhythm as the ornament it rhymes
   with, with no third token to keep in step (the reconciled plan's MATCH 1 —
   "no new var" — applies to the tick as much as to the shell). Both carry a
   fallback: the ink falls through to the default tick's own
   `--lv-ink-accent` chain, the size to normal rhythm's 18px, so the rules
   still draw something sane if the attribute ever reaches a surface that sets
   no theme layer at all (the admin).

   THE DEFAULT IS UNTOUCHED. Nothing here alters `.lv-sec__eyebrow::after`
   above. A page with no `data-lv-motif` — every page today, and every tenant
   who never picks a motif — gets the |—| dimension tick exactly as before.
   And `--lv-eyebrow-tick-display: none` (saas) still switches every variant
   off, because each one RESTATES `display` and `inline-size` from those same
   two `--lv-eyebrow-tick-*` tokens rather than relying on the default rule to
   supply them across the specificity step. That restatement is deliberate
   redundancy: it is what makes the theme-level opt-out and the shared tick
   footprint true of each variant on its own terms, including the eighth one
   somebody adds by copying the seventh.

   THE TECHNIQUE is the default's, unchanged: layered background gradients
   with per-layer position and size, no image and no inline SVG for any of it
   — including `linear-gradient(<ink>, <ink>)` spelled out in full for a solid
   layer. The tempting shorthand for that is `linear-gradient(<ink> 0 100%)`,
   which Chromium accepts and `<color-stop-list>` in css-images-4 does not
   (the production wants two comma-separated stops; a doubly-positioned single
   stop is defined as expanding to two, not as being two). One engine's
   leniency is not a licence, and a gradient that fails to parse is a silently
   blank tick, so these rules pay the second `var()` chain. */

/* RULER-TICKS — alternating long and half graduations standing on the rule
   they are struck from, the shell's ruler edge at eyebrow scale. Three
   layers: the long ticks at one ornament step, the half ticks a half-step
   over and 45% as tall, and the baseline they sit on. */
[data-lv-motif='ruler-ticks'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.4))
      left bottom / 100% 100% no-repeat,
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.4))
      calc(var(--lv-ornament-size, 18px) * 0.2) bottom / 100% 45% no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left bottom / 100% 1px no-repeat;
}

/* DIMENSION-LINES — the measured span with real arrowheads, where the default
   tick has square end caps. Four diagonal 1px strokes (a `/` and a `\` meeting
   at each end, drawn as hard-stopped 45°/135° gradients in a small square box
   pinned to that corner) plus the midline they measure. This is the one
   variant deliberately CLOSE to the default: the tenant who picked
   `dimension-lines` picked the system's own house mark, and gets it sharpened
   rather than replaced. */
[data-lv-motif='dimension-lines'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    linear-gradient(135deg,
        transparent calc(50% - 0.5px),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px))
      left top / min(calc(var(--lv-ornament-size, 18px) * 0.25), 0.25rem) 50% no-repeat,
    linear-gradient(45deg,
        transparent calc(50% - 0.5px),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px))
      left bottom / min(calc(var(--lv-ornament-size, 18px) * 0.25), 0.25rem) 50% no-repeat,
    linear-gradient(45deg,
        transparent calc(50% - 0.5px),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px))
      right top / min(calc(var(--lv-ornament-size, 18px) * 0.25), 0.25rem) 50% no-repeat,
    linear-gradient(135deg,
        transparent calc(50% - 0.5px),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) calc(50% - 0.5px) calc(50% + 0.5px),
        transparent calc(50% + 0.5px))
      right bottom / min(calc(var(--lv-ornament-size, 18px) * 0.25), 0.25rem) 50% no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left center / 100% 1px no-repeat;
}

/* CHALK-LINE — a snapped line, not a ruled one: no end caps (the default's
   two verticals are exactly what a snapped string does not have), skipping
   where the string bounced, and dusty underneath.

   HOW THE IRREGULARITY IS MADE, since a gradient is the most regular thing in
   CSS: two long-dashed hairlines one pixel apart in y, on INCOMMENSURATE
   periods (0.33 vs 0.47 of the ornament step, deliberately not a ratio). Each
   is perfectly regular; their union drifts in and out of phase across 24px
   and never repeats inside the tick, so the eye reads one wobbling line
   rather than two dashed ones. Two earlier cuts — three offset segments, then
   a continuous rule with pooled patches — read as a broken bar and as a blob
   respectively; chalk has to read LIGHTER than its siblings here, not
   heavier, and dashes are what buy that. The half-degree rotation is lifted
   verbatim from the motif's own `.lvt-shell::before`: same string, snapped
   twice at two scales. */
[data-lv-motif='chalk-line'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  transform: rotate(-0.6deg);
  background:
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 calc(var(--lv-ornament-size, 18px) * 0.28),
        transparent calc(var(--lv-ornament-size, 18px) * 0.28) calc(var(--lv-ornament-size, 18px) * 0.33))
      left 42% / 100% 1px no-repeat,
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 calc(var(--lv-ornament-size, 18px) * 0.4),
        transparent calc(var(--lv-ornament-size, 18px) * 0.4) calc(var(--lv-ornament-size, 18px) * 0.47))
      left 58% / 100% 1px no-repeat,
    repeating-linear-gradient(90deg,
        color-mix(in oklab, var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 45%, transparent) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.22))
      left 88% / 100% 1px no-repeat;
}

/* PLANK-PATTERN — one board run interrupted at every seam: a rule broken by a
   2px gap each ornament step, and a taller notch standing in each gap where
   two planks butt. Two layers, phase-locked to the same step so the notch
   always lands in the break rather than on a board. */
[data-lv-motif='plank-pattern'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 calc(var(--lv-ornament-size, 18px) * 0.45 - 2px),
        transparent calc(var(--lv-ornament-size, 18px) * 0.45 - 2px) calc(var(--lv-ornament-size, 18px) * 0.45))
      left center / 100% 1px no-repeat,
    repeating-linear-gradient(90deg,
        transparent 0 calc(var(--lv-ornament-size, 18px) * 0.45 - 2px),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong)))
          calc(var(--lv-ornament-size, 18px) * 0.45 - 2px) calc(var(--lv-ornament-size, 18px) * 0.45 - 1px),
        transparent calc(var(--lv-ornament-size, 18px) * 0.45 - 1px) calc(var(--lv-ornament-size, 18px) * 0.45))
      left center / 100% 75% no-repeat;
}

/* BRICK-COURSING — two courses, not one row: head joints across the upper
   half, the same joints half a brick over across the lower half, and the bed
   lines they course against. The offset between the two rows of verticals IS
   the mark — a running bond never lines its joints up, and that stagger is
   the one thing no other variant here does. */
[data-lv-motif='brick-coursing'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.55))
      left top / 100% 0.25rem no-repeat,
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.55))
      calc(var(--lv-ornament-size, 18px) * 0.275) bottom / 100% 0.25rem no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left 0.25rem / 100% 1px no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left bottom / 100% 1px no-repeat;
}

/* LEVEL-BUBBLE — the vial read end-on: a guide rule running in from each
   side, the two centring marks, and the bubble itself as a ring between them.
   `closest-side` is what keeps the ring 1px at every rhythm — the stops are
   percentages of the ending shape, so the ring scales with the box instead of
   fattening as `--lv-ornament-size` grows, and the `min()` stops the box
   itself outgrowing the tick's own 0.5rem height at cathedral rhythm. */
[data-lv-motif='level-bubble'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    radial-gradient(circle closest-side,
        transparent 0 52%,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 52% 88%,
        transparent 88%)
      center / min(calc(var(--lv-ornament-size, 18px) * 0.34), 0.5rem) min(calc(var(--lv-ornament-size, 18px) * 0.34), 0.5rem)
      no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      32% center / 1px 100% no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      68% center / 1px 100% no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left center / 30% 1px no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      right center / 30% 1px no-repeat;
}

/* TAPE-MEASURE-TICK — graduations HANGING from the tape's printed edge, at
   roughly two and a half times the density of `ruler-ticks`, with every
   fourth one running long. Anchored top where the ruler is anchored bottom,
   which is the whole difference between reading a rule laid on the page and
   reading a tape pulled across it. */
[data-lv-motif='tape-measure-tick'] .lv-sec__eyebrow::after {
  display: var(--lv-eyebrow-tick-display, inline-block);
  inline-size: var(--lv-eyebrow-tick-width, 1.5rem);
  background:
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.16))
      left top / 100% 40% no-repeat,
    repeating-linear-gradient(90deg,
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))) 0 1px,
        transparent 1px calc(var(--lv-ornament-size, 18px) * 0.64))
      left top / 100% 85% no-repeat,
    linear-gradient(
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))),
        var(--lv-ornament-ink, var(--lv-ink-accent, var(--lv-brand-strong))))
      left top / 100% 1px no-repeat;
}

/* THE AUTO-NUMBER. `body` is the one ancestor every page has regardless of
   theme shell markup, so the reset lives there rather than in a theme's own
   `.lvt-shell` (which would make numbering a per-theme feature instead of a
   system one). `.lv-sec--numbered` is opt-in per section — a builder flag
   lands in a parallel work stream; this only makes the class do something
   once applied. `decimal-leading-zero` gives "01".."09" and falls through to
   "10"+ unpadded past two digits, matching the reference's own two-digit
   kickers. Tabular figures + the number's own (tighter) tracking, because the
   eyebrow's `--lv-tracking-eyebrow` (0.11em, tuned for letters) reads as
   broken kerning on digits — `.impeccable.md` §4's "JetBrains Mono for every
   figure" rule again. */
body { counter-reset: lv-sec-number; }

.lv-sec--numbered { counter-increment: lv-sec-number; }

.lv-sec--numbered .lv-sec__eyebrow::before {
  content: counter(lv-sec-number, decimal-leading-zero);
  margin-inline-end: var(--lv-space-2);
  letter-spacing: var(--lv-tracking-num);
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
}

.lv-sec__title {
  margin: 0;
  font-size: var(--lv-text-2xl);
  color: var(--lv-text-primary);
}

.lv-sec__title--sm { font-size: var(--lv-text-xl); }

.lv-sec__lede {
  margin-block-start: var(--lv-space-3);
  color: var(--lv-text-secondary);
  line-height: var(--lv-leading-normal);
}

.lv-sec__foot {
  margin-block-start: var(--lv-space-6);
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-3);
}

/* ── Grids and lists ─────────────────────────────────────────────────────── */

.lv-grid {
  display: grid;
  gap: var(--lv-space-5);
  margin: 0;
  padding: 0;
  list-style: none;
  grid-template-columns: repeat(auto-fit, minmax(min(17rem, 100%), 1fr));
}

/* An explicit column count, honoured only once there is room for it. The
   `auto-fit` above is the mobile-first answer and never needs a media query. */
@container (min-width: 44rem) {
  .lv-grid--cols {
    grid-template-columns: repeat(var(--lv-cols, 3), minmax(0, 1fr));
  }
}

.lv-grid--tight { gap: var(--lv-space-4); }

/* Dense information: hairlines, not boxes (design protocol §2, DENSITY ≥7). */
.lv-rows {
  margin: 0;
  padding: 0;
  list-style: none;
  border-block-start: 1px solid var(--lv-line);
}

.lv-rows > li {
  padding-block: var(--lv-space-4);
  border-block-end: 1px solid var(--lv-line);
}

/* ── The card. Elevation only where elevation means something ────────────── */

.lv-card {
  display: flex;
  flex-direction: column;
  gap: var(--lv-space-3);
  block-size: 100%;
  padding: var(--lv-space-5);
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}

/* Un-carded variant: the same content model with rules doing the separating. */
.lv-card--plain {
  padding: 0;
  background: none;
  box-shadow: none;
  border-radius: 0;
}

.lv-card__title {
  margin: 0;
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-semibold);
  line-height: var(--lv-leading-snug);
  color: var(--lv-text-primary);
}

.lv-card__body {
  margin: 0;
  color: var(--lv-text-secondary);
  line-height: var(--lv-leading-normal);
}

.lv-card__meta {
  margin: 0;
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

.lv-card__link {
  color: var(--lv-text-link);
  text-decoration: none;
  font-weight: var(--lv-weight-medium);
}

.lv-card__link:hover { text-decoration: underline; }

/* ── Media ───────────────────────────────────────────────────────────────── */

.lv-media {
  display: block;
  overflow: hidden;
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface-sunken);
}

.lv-media img,
.lv-media video {
  display: block;
  inline-size: 100%;
  block-size: 100%;
  object-fit: cover;
}

.lv-media--wide { aspect-ratio: 16 / 9; }
.lv-media--square { aspect-ratio: 1; }
.lv-media--portrait { aspect-ratio: 3 / 4; }

/* ── Affordance layer (G25) ────────────────────────────────────────────────
   One hover/active grammar, spent once here and consumed by every card,
   link and interactive tile the next component waves touch — calibrated
   against `design-reference/dennis-niess-reference.html`'s `.svc`
   (photographic service card) and `.story-link` (arrow link).

   THE CONTRACT — three classes, applied at the call site:

     .lv-affordance-lift        on the interactive root (an `<a>` or
                                 `<button>` wrapping a `.lv-card` and/or a
                                 `.lv-media`). Lifts on hover, presses on
                                 `:active`. If the root also contains a
                                 `.lv-media`, that media's `img`/`video` zooms
                                 in step — no extra class needed.

     .lv-link--arrow             on an inline text link that carries a
                                 trailing `<svg aria-hidden="true">…</svg>`
                                 arrow — the arrow slides on hover. The svg
                                 needs no class of its own.

     (tactile `:active` feedback ships on `.lv-affordance-lift` and
     `.lv-link--arrow` directly — nothing extra to apply.)

   Usage:
     <a class="lv-card lv-affordance-lift" href="…">
       <span class="lv-media lv-media--wide"><img …></span>
       …
     </a>
     <a class="lv-link--arrow" href="…">Mere om os
       <svg width="14" height="14" viewBox="0 0 16 16" aria-hidden="true">…</svg>
     </a>

   MOTION SAFETY — deliberately NOT a local `@media (prefers-reduced-motion)`
   block. Every class below is `[class*="lv-"]`, which the file's existing
   backstop (§ Motion, further down this file — v1.0.28) already collapses to
   a near-zero transition duration under `prefers-reduced-motion: reduce`.
   Writing a second guard here would be the second copy of a rule §5.7 of
   .impeccable.md's "one of everything" exists to prevent; the transform END
   STATE still applies (hover still reads as hovered, `:active` still presses)
   because .impeccable.md §4 Motion requires the end state to stay reachable,
   just without the animated glide. */

.lv-affordance-lift {
  transition: transform var(--lv-dur-state) var(--lv-ease),
              box-shadow var(--lv-dur-state) var(--lv-ease);
}

.lv-affordance-lift:hover {
  transform: translateY(-6px);
  box-shadow: var(--lv-lift-2);
}

.lv-affordance-lift:active { transform: scale(0.97); }

/* Media zoom — scoped to `.lv-media`'s own `img`/`video` rule so the zoom
   never outgrows the `overflow: hidden` frame that already clips it above. */
.lv-affordance-lift .lv-media img,
.lv-affordance-lift .lv-media video {
  transition: transform var(--lv-dur-panel) var(--lv-ease);
}

.lv-affordance-lift:hover .lv-media img,
.lv-affordance-lift:hover .lv-media video {
  transform: scale(1.045);
}

/* WCAG 2.2 SC 2.5.8 — 24×24 CSS px minimum.
   This is the "read more →" affordance that closes a card, and it is NOT
   covered by SC 2.5.8's inline exception: the exception is for a target "in a
   sentence or block of text", and nothing precedes or follows this on its line.
   It is `inline-flex` with an arrow child, so it was never a text run either.
   Measured at 106×15 before this rule (visual-matrix.json, `touch-target`).
   The block grows around the text rather than the text growing, so the type,
   colour and the arrow's own motion are untouched — only the hit area. */
.lv-link--arrow {
  display: inline-flex;
  align-items: center;
  min-block-size: 24px;
  gap: var(--lv-space-2);
  color: var(--lv-text-link);
  text-decoration: none;
  font-weight: var(--lv-weight-medium);
}

.lv-link--arrow:hover { text-decoration: underline; }
.lv-link--arrow:active { transform: scale(0.97); }

.lv-link--arrow svg {
  flex: none;
  transition: transform var(--lv-dur-fast) var(--lv-ease);
}

.lv-link--arrow:hover svg { transform: translateX(3px); }

/* ── Icons ───────────────────────────────────────────────────────────────────
   One class, so that six components carrying an icon slot do not each invent a
   swatch with its own size, radius and tint. `explain.capability-grid` had the
   only such rule until 2026-08-07 and it lived in that component's own scoped
   block, which is exactly how a second one would have drifted.

   The drawing inherits `currentColor`, so the tint below is the ONLY colour
   decision, and `--lv-brand-soft` / `--lv-brand-strong` are the tenant's. The
   plain variant drops the surface for rows and lists, where a filled square per
   line is louder than the content it labels. */

.lv-icon {
  display: grid;
  place-items: center;
  flex: none;
  inline-size: var(--lv-space-7);
  block-size: var(--lv-space-7);
  border-radius: var(--lv-radius-sm);
  background: var(--lv-brand-soft);
  color: var(--lv-brand-strong);
}

.lv-icon--plain {
  inline-size: auto;
  block-size: auto;
  border-radius: 0;
  background: none;
  color: var(--lv-brand-strong);
}

.lv-icon--lg {
  inline-size: var(--lv-space-8);
  block-size: var(--lv-space-8);
  border-radius: var(--lv-radius-md);
}

/* ── Trust marks (G4/G16) ─────────────────────────────────────────────────
   The chip + the star-row's ink role. The inline SVG source markup itself —
   'google' | 'trustpilot' | 'facebook' plus the star glyph — is generated by
   `packages/registry/src/trust-marks`, on the same `renderIcon`-shaped
   pattern `packages/registry/src/icons` already established: a TS module
   returns complete `<svg>` markup, a renderer drops it in with `set:html`,
   and these two classes are what it drops the markup INTO. No renderer
   consumes either yet — this is the shared surface the next two waves
   (review-source attribution, hero/quote trust strips) build on, so nothing
   here may assume a particular component's markup.

   Usage:
     import { renderTrustMark, renderStarRow } from '../../../src/trust-marks/index.js';
     <span class="lv-trust-mark" set:html={renderTrustMark('google')} />
     <span class="lv-num" set:html={renderStarRow(4.7, { label: '4,7 ud af 5 stjerner' })} /> */

.lv-trust-mark {
  display: grid;
  place-items: center;
  flex: none;
  inline-size: 2.1rem;
  block-size: 2.1rem;
  border-radius: var(--lv-radius-pill);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}

.lv-trust-mark--lg {
  inline-size: 2.75rem;
  block-size: 2.75rem;
}

/* `currentColor` stars (packages/registry/src/trust-marks) read this role,
   same pattern as the eyebrow above: a brand-coloured mark that has to
   survive a banded/dark placement (the reference's `.voice` quote band)
   without painting the brand onto the brand. */
.lv-star-row {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  vertical-align: -1px;
  color: var(--lv-ink-accent, var(--lv-brand-strong));
}

/* ── Chips: a filter entry point, per audit §8.4 ─────────────────────────── */

.lv-chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.lv-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--lv-space-2);
  min-block-size: 36px;
  padding-inline: var(--lv-space-4);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  font: var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);
  color: var(--lv-text-primary);
  text-decoration: none;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}

.lv-chip:hover { background: var(--lv-surface-raised); }

@media (pointer: coarse) {
  .lv-chip { min-block-size: 44px; }
}

/* ── Label/value pairs: specs, opening hours, practical detail ───────────── */

.lv-kv {
  display: grid;
  grid-template-columns: minmax(8rem, max-content) 1fr;
  gap: var(--lv-space-2) var(--lv-space-5);
  margin: 0;
}

.lv-kv dt {
  font-size: var(--lv-text-sm);
  font-weight: var(--lv-weight-medium);
  color: var(--lv-text-tertiary);
}

.lv-kv dd {
  margin: 0;
  color: var(--lv-text-primary);
}

/* ── The empty state ─────────────────────────────────────────────────────────
   Audit §5.0 makes this a first-class, editable, action-bearing surface on
   every `browse.*` intent and every external binding. LPH had exactly one
   designed empty state in the whole library, on a per-tenant component. The
   dashed hairline is the one place in the system where a border is dashed, so
   it reads as "nothing here yet" and not as "a card". */

.lv-empty {
  display: flex;
  flex-direction: column;
  align-items: start;
  gap: var(--lv-space-3);
  max-width: 48ch;
  padding: var(--lv-space-7);
  border: 1px dashed var(--lv-line-strong);
  border-radius: var(--lv-radius-lg);
  background: var(--lv-surface-raised);
}

.lv-empty__title {
  margin: 0;
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-semibold);
  color: var(--lv-text-primary);
}

.lv-empty__body {
  margin: 0;
  color: var(--lv-text-secondary);
  line-height: var(--lv-leading-normal);
}

/* ── Prose: the one long-form measure in the system ──────────────────────── */

.lv-prose {
  max-width: var(--lv-measure);
  color: var(--lv-text-primary);
  line-height: var(--lv-leading-normal);
}

.lv-prose :where(h2, h3) { margin-block: var(--lv-space-6) var(--lv-space-3); }
.lv-prose :where(p, ul, ol) { margin-block: 0 var(--lv-space-4); }
.lv-prose :where(a) { color: var(--lv-text-link); }
.lv-prose--wide { max-width: 60rem; }
.lv-prose--full { max-width: none; }

/* ── Motion ──────────────────────────────────────────────────────────────────
   Nothing in this file animates on load. The one orchestrated moment a page
   gets belongs to the page, not to eighty sections each staggering their own
   children — that is how a site ends up feeling like a slot machine. */

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

  /* Backstop, not the primary mechanism. Every component that animates
     deliberately (dialogs, `:has()` reveals, scroll-spy) already carries its
     own local `@media (prefers-reduced-motion: reduce)` block, because only
     the component knows which end-state the motion resolves to. This rule
     exists for the 80+ components that DON'T animate deliberately but still
     inherit `--lv-dur-state`/`--lv-dur-panel` transitions from ordinary
     hover/focus states, and for whatever the next component adds tomorrow
     without remembering to write its own guard.

     Durations collapse to near-zero rather than `transition: none` /
     `animation: none` — a hard `none` can suppress the `transitionend` /
     `animationend` event some components wait on to flip a class or remove
     a node, silently breaking that end-state instead of just skipping the
     motion to reach it. 0.01ms still fires those events; nothing visibly
     moves. `scroll-behavior: auto` covers `html { scroll-behavior: smooth }`
     if a future component ever sets it — imperative
     `element.scrollIntoView({ behavior: 'smooth' })` calls are CSS-invisible
     and stay gated in their own script (see act.qualify/questionnaire.astro,
     orient.jump-nav/nav.astro, explain.scroll-pinned-showcase/showcase.astro
     for the pattern: check `matchMedia('(prefers-reduced-motion: reduce)')`
     and pass `'auto'` instead of `'smooth'`). */
  [class*="lv-"], [class*="lv-"] * {
    transition-duration: 0.01ms !important;
    transition-delay: 0s !important;
    animation-duration: 0.01ms !important;
    animation-delay: -0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ── Split: copy beside media ─────────────────────────────────────────────────
   Used by every "show and tell" intent. One implementation, one reversal
   modifier — the alternating rhythm that LPH shipped as a separate component
   (`alternating-feature-list`, 203 placements) is `:nth-child(even)` here. */

.lv-split {
  display: grid;
  gap: var(--lv-space-6);
  align-items: center;
}

@container (min-width: 46rem) {
  .lv-split { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .lv-split--reverse > :first-child { order: 2; }
  .lv-split--wide-copy { grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); }
}

/* ── Steps: a numbered or dated sequence ─────────────────────────────────── */

.lv-steps {
  display: grid;
  gap: var(--lv-space-5);
  margin: 0;
  padding: 0;
  list-style: none;
  counter-reset: lv-step;
}

.lv-steps > li {
  position: relative;
  counter-increment: lv-step;
  padding-inline-start: var(--lv-space-8);
}

.lv-steps > li::before {
  content: counter(lv-step);
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: 0;
  display: grid;
  place-items: center;
  inline-size: var(--lv-space-6);
  block-size: var(--lv-space-6);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-brand-soft);
  color: var(--lv-brand-strong);
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);
  font-variant-numeric: tabular-nums;
}

/* The connector, drawn from the marker rather than between the items, so the
   last step has no dangling tail. */
.lv-steps > li:not(:last-child)::after {
  content: '';
  position: absolute;
  inset-inline-start: calc(var(--lv-space-6) / 2);
  inset-block: var(--lv-space-6) calc(var(--lv-space-5) * -1);
  inline-size: 1px;
  background: var(--lv-line);
}

/* `icon` was an enum value with nothing behind it. Only `none` and `date` had
   rules, so choosing "ikon" fell through to the counter and drew the numbers —
   the customer picked a different marker and the page did not change. It now
   draws the step's own icon in the marker's place, deliberately keeping the
   numbered variant's geometry so the connector between steps still lands. */
.lv-steps--marker-icon > li::before { content: none; }

.lv-steps__icon {
  position: absolute;
  inset-inline-start: 0;
  inset-block-start: 0;
  inline-size: var(--lv-space-6);
  block-size: var(--lv-space-6);
  border-radius: var(--lv-radius-pill);
}

.lv-steps--marker-none > li::before,
.lv-steps--marker-date > li::before { content: none; }
.lv-steps--marker-none > li,
.lv-steps--marker-date > li { padding-inline-start: 0; }
.lv-steps--marker-none > li:not(:last-child)::after,
.lv-steps--marker-date > li:not(:last-child)::after { content: none; }

@container (min-width: 52rem) {
  .lv-steps--horizontal {
    grid-auto-flow: column;
    grid-auto-columns: minmax(0, 1fr);
  }

  .lv-steps--horizontal > li:not(:last-child)::after {
    inset: calc(var(--lv-space-6) / 2) calc(var(--lv-space-5) * -1) auto var(--lv-space-6);
    inline-size: auto;
    block-size: 1px;
  }
}

/* ── connector: 'line' — opt-in, default 'none' (G13) ─────────────────────
   The numbered/icon marker above already threads a short segment between
   adjacent badges — chained per-<li>, the same generated-content technique
   the reference's own chalk line uses, just too quiet to read as ONE line
   and silent for marker: 'date' | 'none'. `connector: 'line'` widens that
   segment, gives every marker a peg (the badge itself for number/icon, a
   plain accent dot for date/none), and rings the peg in --lv-surface — the
   section's OWN surface, which chrome.mjs re-points inside a brand band
   (see the accent-ink role note at the top of this file) — so the peg reads
   as sitting ON the line rather than fusing with it, on any tone.

   Reflow is inherited for free: the default (vertical) axis is a permanent
   spine, since steps are already one column at every width; paired with
   axis: 'horizontal' the line runs left-to-right at the same >=52rem
   container breakpoint `--horizontal` already reflows at above, and drops
   back to this vertical rule below it. Nothing here animates — it is a
   static line, so there is nothing for prefers-reduced-motion to disable. */

.lv-steps--connector-line > li::before,
.lv-steps--connector-line .lv-steps__icon {
  box-shadow: 0 0 0 var(--lv-space-1) var(--lv-surface);
}

.lv-steps--connector-line.lv-steps--marker-none > li::before,
.lv-steps--connector-line.lv-steps--marker-date > li::before {
  content: '';
  display: block;
  inline-size: var(--lv-space-6);
  block-size: var(--lv-space-6);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-brand-strong);
  box-shadow: 0 0 0 var(--lv-space-1) var(--lv-surface);
}

.lv-steps--connector-line.lv-steps--marker-none > li,
.lv-steps--connector-line.lv-steps--marker-date > li {
  padding-inline-start: var(--lv-space-8);
}

.lv-steps--connector-line.lv-steps--marker-none > li:not(:last-child)::after,
.lv-steps--connector-line.lv-steps--marker-date > li:not(:last-child)::after {
  content: '';
}

.lv-steps--connector-line > li:not(:last-child)::after {
  inline-size: 2px;
}

@container (min-width: 52rem) {
  .lv-steps--connector-line.lv-steps--horizontal > li:not(:last-child)::after {
    block-size: 2px;
  }
}

/* ── markerLabel — the mono "TRIN n" kicker (G14) ──────────────────────────
   Still the SAME CSS counter: the number is `counter(lv-step)`, generated
   exactly as the plain numbered pill already generates it — only the prefix
   word and the box it sits in change. `attr(data-marker-label)` reads the
   per-<li> attribute the renderer writes, so the label has one source of
   truth (the `markerLabel` prop) and needs no CSS string-escaping. Only
   reachable with marker: 'number' — the renderer gates the class on that,
   so this never fights icon/date/none. */

.lv-steps--kicker > li {
  padding-inline-start: 0;
}

.lv-steps--connector-line.lv-steps--kicker > li {
  padding-inline-start: var(--lv-space-6);
}

.lv-steps--kicker > li::before {
  content: attr(data-marker-label) ' ' counter(lv-step);
  position: static;
  display: block;
  inline-size: auto;
  block-size: auto;
  border-radius: 0;
  background: none;
  box-shadow: none;
  margin-block-end: var(--lv-space-2);
  color: var(--lv-ink-accent, var(--lv-brand-strong));
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);
  letter-spacing: var(--lv-tracking-label);
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}

/* Belt-and-braces: win over the ring the connector-line rule above adds to
   every marker's ::before, regardless of stylesheet order — the kicker
   text has no badge to ring. */
.lv-steps--connector-line.lv-steps--kicker > li::before {
  box-shadow: none;
  background: none;
}

.lv-steps--kicker .lv-card__title {
  font-size: var(--lv-text-lg);
}

/* The kicker's own peg + line: a single generated box per <li>, its accent
   dot / surface ring / hairline drawn as three layered backgrounds — the
   same technique the eyebrow tick above this file uses, so no renderer
   carries inline SVG for a decoration. Vertical by default; the horizontal
   variant rotates which axis is "inline" vs "block" at the identical 52rem
   container breakpoint every other horizontal rule in this file uses. */

/* Replaced 2026-08-15 (explain modernization): selector list gains --marker-chip. */
.lv-steps--connector-line.lv-steps--kicker > li::after,
.lv-steps--connector-line.lv-steps--marker-chip > li::after {
  content: '';
  position: absolute;
  inset-inline-start: 0;
  inset-block: 0 calc(var(--lv-space-6) * -1);
  inline-size: var(--lv-space-3);
  /* The base connector above sets `background: var(--lv-line)` — a SHORTHAND,
     so its background-color survives this rule's image/size/position longhands
     and floods the whole peg box as a solid bar (it covered the TRIN kickers
     on every non-last step of the acceptance render). The kicker's line is a
     sized gradient layer; the box itself must stay clear. */
  background-color: transparent;
  background-image:
    radial-gradient(circle, var(--lv-brand-strong) 0 32%, transparent 33%),
    radial-gradient(circle, var(--lv-surface) 0 46%, transparent 47%),
    linear-gradient(var(--lv-line), var(--lv-line));
  background-repeat: no-repeat;
  background-position: center top, center top, center top;
  background-size:
    var(--lv-space-3) var(--lv-space-3),
    var(--lv-space-3) var(--lv-space-3),
    2px 100%;
}

/* Replaced 2026-08-15 (explain modernization): selector list gains --marker-chip. */
.lv-steps--connector-line.lv-steps--kicker > li:last-child::after,
.lv-steps--connector-line.lv-steps--marker-chip > li:last-child::after {
  inset-block-end: auto;
  block-size: var(--lv-space-3);
  background-image:
    radial-gradient(circle, var(--lv-brand-strong) 0 32%, transparent 33%),
    radial-gradient(circle, var(--lv-surface) 0 46%, transparent 47%);
  background-size:
    var(--lv-space-3) var(--lv-space-3),
    var(--lv-space-3) var(--lv-space-3);
}

@container (min-width: 52rem) {
  /* Horizontal, the connector row sits across the TOP of every step — where
     the in-flow kicker text also starts. Clear it: the li steps down by the
     row's own height plus one breath, so "TRIN n" reads BELOW the drawn line
     exactly as the reference's chalk line does. Vertical needs nothing — the
     line is a left column there and the li's inline padding already clears it. */
  /* Replaced 2026-08-15 (explain modernization): selector list gains --marker-chip. */
  .lv-steps--connector-line.lv-steps--kicker.lv-steps--horizontal > li,
  .lv-steps--connector-line.lv-steps--marker-chip.lv-steps--horizontal > li {
    padding-block-start: calc(var(--lv-space-3) + var(--lv-space-2));
  }

  /* Replaced 2026-08-15 (explain modernization): selector list gains --marker-chip. */
  .lv-steps--connector-line.lv-steps--kicker.lv-steps--horizontal > li::after,
  .lv-steps--connector-line.lv-steps--marker-chip.lv-steps--horizontal > li::after {
    inset-block-start: 0;
    inset-inline: 0 calc(var(--lv-space-6) * -1);
    inline-size: auto;
    block-size: var(--lv-space-3);
    background-position: left center, left center, left center;
    background-size:
      var(--lv-space-3) var(--lv-space-3),
      var(--lv-space-3) var(--lv-space-3),
      100% 2px;
  }

  /* Replaced 2026-08-15 (explain modernization): selector list gains --marker-chip. */
  .lv-steps--connector-line.lv-steps--kicker.lv-steps--horizontal > li:last-child::after,
  .lv-steps--connector-line.lv-steps--marker-chip.lv-steps--horizontal > li:last-child::after {
    inset-inline-end: auto;
    inline-size: var(--lv-space-3);
    background-image:
      radial-gradient(circle, var(--lv-brand-strong) 0 32%, transparent 33%),
      radial-gradient(circle, var(--lv-surface) 0 46%, transparent 47%);
    background-size:
      var(--lv-space-3) var(--lv-space-3),
      var(--lv-space-3) var(--lv-space-3);
  }
}

/* ── Note: a callout inside running text ─────────────────────────────────────
   Deliberately NOT a coloured left stripe — that is the single most
   over-produced pattern in this class of component and the design protocol
   bans it outright. The signal is a hairline box plus a labelled kicker. */

.lv-note {
  max-width: var(--lv-measure);
  padding: var(--lv-space-5);
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface-raised);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}

.lv-note--warn { background: var(--lv-warn-surface); color: var(--lv-warn-text); }
.lv-note--ok { background: var(--lv-ok-surface); color: var(--lv-ok-text); }
.lv-note--bad { background: var(--lv-bad-surface); color: var(--lv-bad-text); }

.lv-note__kicker {
  display: block;
  margin-block-end: var(--lv-space-2);
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-eyebrow);
  text-transform: uppercase;
}

/* ── Quote ───────────────────────────────────────────────────────────────── */

.lv-quote {
  max-width: var(--lv-measure);
  margin: 0;
}

.lv-quote__text {
  margin: 0;
  font-size: var(--lv-text-lg);
  line-height: var(--lv-leading-snug);
  color: var(--lv-text-primary);
  text-wrap: pretty;
}

.lv-quote--display .lv-quote__text {
  font-size: var(--lv-text-xl);
  font-weight: var(--lv-weight-medium);
}

/* The one substring a pullquote marks (G15). `prove.customer-voice`'s
   `pullquote` layout builds this via `src/text-emphasis`'s escape-then-wrap
   — never trusted markup — and drops it in with `set:html`, so this class
   only ever wraps text that renderer already fully HTML-escaped. Token-only
   ink — the same accent role `.lv-star-row`/`.lv-trust-mark` (earlier in
   this file) and `.lv-voices__rating` use, for the same dark-band reason. */
.lv-quote__accent {
  color: var(--lv-ink-accent, var(--lv-brand-strong));
  font-weight: var(--lv-weight-bold);
  font-style: italic;
}

.lv-quote__by {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  margin-block-start: var(--lv-space-4);
  font-size: var(--lv-text-sm);
  color: var(--lv-text-tertiary);
}

/* ── Portrait ────────────────────────────────────────────────────────────── */

.lv-portrait {
  flex: none;
  inline-size: var(--lv-portrait-size, 3rem);
  block-size: var(--lv-portrait-size, 3rem);
  border-radius: var(--lv-radius-pill);
  object-fit: cover;
  background: var(--lv-surface-sunken);
}

.lv-portrait--lg { --lv-portrait-size: 5.5rem; }

/* ── Figure: one number, one label. Never a card ─────────────────────────── */

.lv-figures {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(10rem, 100%), 1fr));
  gap: var(--lv-space-5);
  margin: 0;
}

.lv-figure__value {
  font-size: var(--lv-text-2xl);
  font-weight: var(--lv-weight-semibold);
  color: var(--lv-text-primary);
}

/* Replaced 2026-08-15 (prove modernization).
   PATTERN-STANDARDS §2.3(a): stats are big numeral + caps-whisper caption —
   the §1.3 eyebrow layer, not a sentence in body type. Case follows the
   theme's display-case token, same as `.lv-sec__eyebrow`/`.lv-eyebrow`, so a
   theme that opts out of uppercase opts these captions out with it. */
.lv-figure__label {
  margin: var(--lv-space-2) 0 0;
  font: var(--lv-weight-bold) var(--lv-text-xs) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-eyebrow);
  text-transform: var(--lv-display-case, uppercase);
  font-variant-caps: var(--lv-display-variant, normal);
  color: var(--lv-text-tertiary);
}

/* ── Actions row ─────────────────────────────────────────────────────────── */

.lv-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-3);
}

/* ── Form block — opaque always, never glass (.impeccable.md §3) ─────────── */

.lv-form {
  display: grid;
  gap: var(--lv-space-4);
  max-width: 34rem;
}

.lv-form__label {
  display: block;
  margin-block-end: var(--lv-space-2);
  font: var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);
  color: var(--lv-text-secondary);
}

.lv-form__consent {
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

/* ── Form success state — the shared no-JS confirmation mechanism ──────────
   `POST /api/formularer` 303-redirects back to the submitter's own page with
   BOTH `?sendt=<kind>-<placementId>` and a matching
   `#lv-sent-<kind>-<placementId>` fragment (see
   `apps/api/src/routes/formularer/index.ts`'s `redirectTarget`). The fragment
   is what does the work: a browser navigating to a URL whose hash matches an
   element's `id` applies `:target` to that element and scrolls it into view
   NATIVELY, with scripting fully disabled — the query param rides along for
   anything that later wants the same information without parsing the hash,
   but nothing here reads it.

   Every renderer that posts to `/api/formularer` (`act.apply`, `act.enquire`,
   `act.comment`, `act.subscribe`, `act.request-quote`, and `act.schedule`'s
   static fallback) wraps its `<form>` and its sibling `.lv-form-success` in
   one `[data-lv-form-shell]`. `:has()` is already load-bearing in this
   registry (`act.schedule`'s `.lv-booking__opt:has(input:checked)`), so this
   is the established technique for state-driven CSS here, not a new one. */

.lv-form-success { display: none; }

.lv-form-success:target { display: block; }

/* `.lv-empty` too — `act.schedule`'s static fallback can show it (no slots
   left) beside a shell whose success block is target-active from an earlier
   submission on the same reload; a visitor who just got their confirmation
   does not also need "no times left, write to us instead" under it. */
[data-lv-form-shell]:has(.lv-form-success:target) > form,
[data-lv-form-shell]:has(.lv-form-success:target) > .lv-empty {
  display: none;
}

/* ── Chart series tokens ─────────────────────────────────────────────────────
   Registry-owned component tokens (LAYER 4). They live here rather than in
   `packages/tokens` because W2-D4 owns the registry and not the token package;
   they should migrate up the next time the token layer moves, unchanged.

   **These four values were computed, not chosen.** The brand lives in a narrow
   cool hue span (`.impeccable.md` §4: 195–260 OKLCH, chroma 0.07–0.11), which
   is hostile to categorical encoding — near hues at similar lightness are
   exactly what a dichromat reader cannot separate. The set below is the output
   of an exhaustive search over that span, scored by the data-viz validator's
   own checks, maximising the worst adjacent ΔE that still passes both modes:

     node scripts/validate_palette.js "#00989b,#0465af,#6b8ae4,#5f53ae" \
          --mode light --surface "#fbfdfe"

     [PASS] Lightness band        all 4 inside L 0.43–0.77
     [PASS] Chroma floor          all 4 >= 0.1
     [PASS] CVD separation        worst adjacent ΔE 14.0 (protan) · tritan 11.6
     [PASS] Normal-vision floor   worst adjacent ΔE 15.7 (normal)
     [PASS] Contrast vs surface   all 4 >= 3:1
     dark mode: same four checks pass; contrast reports the documented sub-3:1
     relief on slots 2 and 4, which is why `prove.chart` ships direct labels AND
     a table view rather than treating either as optional.

   Chroma is 0.14 — above the brand's 0.07–0.11 band. That is deliberate and is
   the one place the band is exceeded: the validator's chroma floor is 0.10 and
   a series at 0.11 could not clear the CVD gate. A chart is the one surface
   where colour carries data rather than mood.

   FIXED ORDER. Slot 1 is always the first series. A filter that removes a
   series never repaints the survivors. There is no slot 5: a fifth series folds
   into "Øvrige" or the chart becomes small multiples.

   ── WHY THESE DO NOT FOLLOW THE THEME'S BRAND, THOUGH THE SCENE NOW DOES ──────

   Raised 2026-08-04 as the twin of `open.atmosphere`'s navy-and-teal presets:
   four cool values on a warm-paper restaurant site read as imported. The scene
   was that defect and is fixed. This is not, and the difference is measurable.

   The scene's overlays sit UNDER TEXT whose ratio the gate already covers at
   both ends of the ramp, so re-anchoring them costs nothing. A chart's four
   values must stay separable from EACH OTHER, including for a reader who has
   lost one of the three cone channels — and they must do it at whatever hue the
   tenant's own `brand_color` happens to be, which is any hue at all.

   Measured (`test/chart-series.test.ts`, Viénot–Brettel–Mollon 1999 dichromacy
   simulation, ΔE in OKLab ×100, worst ADJACENT pair, the metric the validation
   above reports):

     shipped, fixed                       normal 15.6 · protan 13.8 · deutan 15.0 · tritan 10.8
     same set rotated onto the brand hue  collapses to 4.1 (paper, 68°),
                                          4.2 (restaurant, 52°), 4.2 (design, 322°)
     slot 1 alone following the brand      collapses to 3.7 (hue 324°)
     best hue-agnostic ladder found        6.4, over a search of 224 constructions
                                          (monotone lightness ladder × hue fan)

   The ceiling is not a search failure, it is arithmetic: a dichromat's
   separation has to come from LIGHTNESS, and keeping all four slots ≥3:1
   against the light canvas caps lightness at about 0.64, which leaves ~0.27 of
   range to split three ways. Whatever hue is left over is the channel that
   reader does not have.

   `.impeccable.md` §5 principle 1 — legible before beautiful, and the ratio
   wins — settles it. These four are a DATA encoding that happens to live in the
   brand's hue span, not a brand expression; the theme reaches this component
   through `--lv-chart-grid`, `--lv-chart-axis`, the surface it sits on and the
   type it is labelled in. If a tenant ever needs a house palette here, the way
   in is four more declared, validated values, not a rotation — and it needs
   `--lv-chart-1..4` added to `THEME_LAYER_VARS`, which is a theme-plane change
   and belongs in a report. */

:root {
  --lv-chart-1: oklch(60% 0.14 196);
  --lv-chart-2: oklch(50% 0.14 250);
  --lv-chart-3: oklch(65% 0.14 268);
  --lv-chart-4: oklch(50% 0.14 286);
  --lv-chart-grid: var(--lv-line);
  --lv-chart-axis: var(--lv-text-tertiary);
}

/* === modernization 2026-08-15: explain === */

/* Additions to the `.lv-steps` system above (explain.sequence). Two new
   presentation switches, both driven by the SAME `lv-step` counter the
   numbered pill already generates:

     .lv-steps--marker-chip   `marker: 'chip'` — the outlined stage chip from
                              motionsites/process-1: an in-flow mono pill
                              ("TRIN 1", or the bare numeral without a
                              markerLabel), outlined with an inset 1px ring in
                              the accent-ink role so it survives a banded
                              placement.

     .lv-steps--punch         `numberLook: 'over-border'`, marker: number only
                              (renderer-gated) — B7's counter-over-border:
                              each step carries a 1px top hairline and the
                              numeral punches a gap in it, backed by
                              --lv-surface (the section's OWN surface, which
                              chrome.mjs re-points inside a band) and sitting
                              astride the line.

   Selector notes, deliberate: the chip/punch `::before` rules lead with
   `.lv-steps.` (0,3,1) so they beat `.lv-steps--connector-line > li::before`'s
   surface ring (0,2,1) at any stylesheet order; the punch thread-suppression
   carries the same double class for the same reason. The five kicker
   peg/padding rules earlier in this file were extended in place with the chip
   selector (see the "Replaced 2026-08-15" provenance comments there) so
   `connector: 'line'` draws the same peg-and-line for a chip sequence as for
   a kicker one. */

/* ── marker: 'chip' — outlined stage chip (process-1) ────────────────────── */

/* Double class (0,2,1): outranks the base `.lv-steps > li` inline padding at
   any merge position, not just when this file lands after it. */
.lv-steps.lv-steps--marker-chip > li {
  padding-inline-start: 0;
}

.lv-steps.lv-steps--marker-chip > li::before {
  content: counter(lv-step);
  position: static;
  display: inline-flex;
  align-items: center;
  inline-size: auto;
  block-size: auto;
  margin-block-end: var(--lv-space-3);
  padding: calc(var(--lv-space-1) / 2) var(--lv-space-3);
  border-radius: var(--lv-radius-pill);
  background: transparent;
  box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--lv-ink-accent, var(--lv-brand-strong)) 45%, transparent);
  color: var(--lv-ink-accent, var(--lv-brand-strong));
  font: var(--lv-weight-bold) var(--lv-text-xs) / 1.6 var(--lv-font-mono);
  letter-spacing: var(--lv-tracking-label);
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}

.lv-steps.lv-steps--marker-chip > li[data-marker-label]::before {
  content: attr(data-marker-label) ' ' counter(lv-step);
}

/* The chip is in-flow; the badge-anchored thread has no badge to hang from.
   `connector: 'line'` re-enables a drawn line via the peg rules above. */
.lv-steps.lv-steps--marker-chip > li:not(:last-child)::after { content: none; }

.lv-steps--connector-line.lv-steps--marker-chip > li:not(:last-child)::after { content: ''; }

/* ── numberLook: 'over-border' — B7's counter punching the top border ────── */

.lv-steps.lv-steps--punch > li {
  padding-inline-start: 0;
  padding-block-start: var(--lv-space-5);
  border-block-start: 1px solid var(--lv-line);
}

.lv-steps.lv-steps--punch > li::before {
  content: counter(lv-step);
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0;
  translate: 0 -50%;
  display: block;
  inline-size: auto;
  block-size: auto;
  border-radius: 0;
  padding-inline-end: var(--lv-space-3);
  background: var(--lv-surface);
  box-shadow: none;
  color: var(--lv-ink-accent, var(--lv-brand-strong));
  font: var(--lv-weight-bold) var(--lv-text-lg) / 1 var(--lv-font-mono);
  letter-spacing: var(--lv-tracking-label);
  text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}

.lv-steps.lv-steps--punch > li[data-marker-label]::before {
  content: attr(data-marker-label) ' ' counter(lv-step);
}

/* The border IS the connector here: the badge thread — and connector-line's
   widened variant — would double-draw against it. Double class (0,3,2) so the
   suppression outranks both at any order. */
.lv-steps.lv-steps--punch > li:not(:last-child)::after { content: none; }

/* The kicker's connector PADDING rule (earlier in this file) is deliberately
   NOT extended with the chip selector: its (0,2,1) would tie with the chip
   zero-padding rule above and decide by merge position. The chip gets its own
   triple-class copy instead — (0,3,1) wins at any order. */
.lv-steps.lv-steps--connector-line.lv-steps--marker-chip > li {
  padding-inline-start: var(--lv-space-6);
}

/* === modernization 2026-08-15: prove === */

/* `.lv-figure__label` was re-cut in place (see the "Replaced 2026-08-15"
   provenance comment on the block above) — `.lv-figures`/`.lv-figure__*` are
   consumed ONLY by `prove.numbers` and `prove.case-study` (verified by grep
   across components/), both owned by that family.

   CONSOLIDATION CANDIDATE (deliberately not yet a rule — no renderer
   references it): `prove.customer-voice` (display layouts) and `prove.press`
   (band) both draw Danish guillemets + accent ink around a display quote in
   their own scoped styles. If a third quote surface appears, promote this
   block and switch the renderers' scoped rules to it:

   .lv-quote--guillemets::before { content: '»'; margin-inline-end: 0.08em; }
   .lv-quote--guillemets::after { content: '«'; margin-inline-start: 0.08em; }
   .lv-quote--guillemets::before,
   .lv-quote--guillemets::after {
     color: var(--lv-ink-accent, var(--lv-brand-strong));
     font-style: normal;
   }
*/

/* === modernization 2026-08-15: open (vision-judge fix) === */

/* open.editorial's accent-underline and word-reveal classes are injected via
   `set:html` (mastheadHeadlineHtml), so they never carry Astro's scope class —
   the component's own <style> compiled them to `.lv-masthead__accent.astro-…`,
   which matched NOTHING and the §2.1 marker underline shipped dead. They live
   here, unscoped, for exactly the reason `.lv-quote__accent` above does.
   Owner: components/open.editorial/renderers/masthead.astro (sole emitter of
   `lv-masthead__*`, verified by grep across components/). */

/* One word of the rubric carries a marker stroke in the theme's accent
   (Doctronic's serif statement). The stroke is an SVG path used as a MASK
   over a plain `background` so its colour is the token, not a hard-coded
   fill baked into a data URI — the accent follows `--lv-ink-accent`
   everywhere, including a theme band's re-point. `isolation: isolate` keeps
   the stroke's `z-index: -1` inside the word's own stacking context: behind
   the glyphs (so descenders cut through it like real marker ink), never
   behind an ancestor's ground. */
.lv-masthead__accent {
  position: relative;
  isolation: isolate;
  font-weight: inherit;
  color: inherit;
}

.lv-masthead__accent::after {
  content: '';
  position: absolute;
  z-index: -1;
  inset-inline: -0.08em;
  /* -0.06em, not -0.14em: at the masthead's tight leading the deeper drop
     landed the stroke on the NEXT line's cap height (vision-judge crop,
     2026-08-15). This keeps it riding the baseline's descender zone. */
  inset-block-end: -0.06em;
  block-size: 0.26em;
  background: var(--lv-ink-accent, var(--lv-brand-strong));
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 10' preserveAspectRatio='none'%3E%3Cpath d='M2 7.5 C 20 3.5 45 8.5 70 5.5 S 95 4.2 98 5.6' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 10' preserveAspectRatio='none'%3E%3Cpath d='M2 7.5 C 20 3.5 45 8.5 70 5.5 S 95 4.2 98 5.6' fill='none' stroke='black' stroke-width='3' stroke-linecap='round'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
}

/* On the cover the marker stroke prints in the cover's own ink: a brand
   accent on a scrimmed photograph is unmeasured, on-brand white is the pair
   the scrim already pays for. */
.lv-masthead--display[data-lv-bleed] .lv-masthead__accent::after {
  background: var(--lv-text-on-brand);
}

/* Word-by-word entrance (hero-8). FAIL-VISIBLE BY CONSTRUCTION: the words'
   resting state is fully visible — there is no hidden default for a noscript
   page to inherit. The entrance is an ANIMATION that only attaches once the
   shared observer stamps `data-shown` on the revealing header, and only under
   `prefers-reduced-motion: no-preference`; `both` fill holds each word at the
   keyframe's `from` during its own delay, which is what produces the stagger
   without ever hiding a word by default. */
.lv-masthead__w { display: inline-block; }

@media (prefers-reduced-motion: no-preference) {
  .lv-masthead--words .lvt-reveal[data-shown] .lv-masthead__w {
    animation: lv-masthead-word var(--lv-dur-panel) var(--lv-ease) both;
    animation-delay: calc(var(--lv-w, 0) * 55ms);
  }

  @keyframes lv-masthead-word {
    from {
      opacity: 0;
      transform: translateY(0.35em);
    }
  }
}

/* GENERATED FILE — registry component plane. */
/* charts/chart.css */
/* THE CHART STYLESHEET — one file, two consumers.
   ---------------------------------------------------------------------------
   `renderChart()` emits these class names and nothing else; this file is what
   they mean. It is imported by `prove.chart`'s Astro renderer, so the registry
   generator folds it into the site's single stylesheet, and it is read
   verbatim by the admin's chart-preview route. Two copies of a chart's
   appearance is exactly the drift the Grafer tool exists to remove, so there
   is one.

   No scoped `<style>` block can do this job: the chart arrives through
   `set:html`, and Astro's scoped-class strategy cannot reach markup it did not
   compile. */
.lv-chart__plot { display: grid; gap: var(--lv-space-4); }
.lv-chart__legend { display: flex; flex-wrap: wrap; gap: var(--lv-space-4); margin: 0; padding: 0; list-style: none; font-size: var(--lv-text-sm); color: var(--lv-text-secondary); }
.lv-chart__key { display: flex; align-items: center; gap: var(--lv-space-2); }
.lv-chart__swatch { inline-size: 12px; block-size: 12px; border-radius: 3px; }
.lv-chart__unit { margin: 0; font-size: var(--lv-text-xs); color: var(--lv-text-tertiary); }
.lv-chart__figure { margin: 0; overflow-x: auto; }
.lv-chart__svg { inline-size: 100%; block-size: auto; min-inline-size: 320px; }
.lv-chart__grid { stroke: var(--lv-chart-grid); stroke-width: 1; }
.lv-chart__tick { fill: var(--lv-chart-axis); font: 500 12px/1 var(--lv-font-mono); font-feature-settings: "tnum" 1; }
.lv-chart__hlabel { font-family: var(--lv-font-ui); }
.lv-chart__value, .lv-chart__total { fill: var(--lv-text-primary); font: 600 14px/1 var(--lv-font-mono); font-feature-settings: "tnum" 1; }
.lv-chart__total { font-size: 20px; }
.lv-chart__line { fill: none; stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round; }
.lv-chart__area { opacity: 0.16; }
.lv-chart__track { fill: var(--lv-chart-grid); }
.lv-chart__table summary { cursor: pointer; font-size: var(--lv-text-sm); color: var(--lv-text-secondary); }
.lv-chart__table table { width: 100%; margin-block-start: var(--lv-space-3); border-collapse: collapse; font: var(--lv-weight-regular) var(--lv-text-sm) / 1.5 var(--lv-font-ui); }
.lv-chart__table th, .lv-chart__table td { padding: var(--lv-space-2) var(--lv-space-3); border-block-end: 1px solid var(--lv-line); text-align: start; }
.lv-chart__table td { font-family: var(--lv-font-mono); font-feature-settings: "tnum" 1; text-align: end; }
.lv-chart__measured, .lv-chart__disclaimer { margin: 0; max-width: var(--lv-measure); font-size: var(--lv-text-xs); color: var(--lv-text-tertiary); }
.lv-chart__cta { margin: 0; }
/* components/act.qualify/renderers/questionnaire.css */
/**
 * The questionnaire modal's surface.
 *
 * UN-SCOPED ON PURPOSE. The dialog and every question inside it are built by
 * the client script — one shared instance per document, created on first open —
 * because the questions are not known at build time: they are fetched from
 * `GET /questionnaires/public/:slug` at click time so that an edit in the admin
 * goes live without a rebuild. Astro's scoped styles only match elements that
 * carry the build-time `data-astro-cid-*` attribute, and a node created by
 * `innerHTML` never does. Every selector here is `.lv-lq*`-namespaced, so
 * global scope is collision-safe; the generator inlines this file into
 * `registry.css` verbatim.
 *
 * SURFACE CLASS: solid, always. `.impeccable.md` §3 forbids glass on "modal
 * bodies containing forms", on "anything containing a `<textarea>`" and on "any
 * surface that scrolls its own content". This dialog is all three at once. The
 * scrim behind it is the only translucent thing in the component.
 *
 * THE SIGNATURE is the progress rail: a hairline track whose fill carries
 * `--lv-ramp`, the brand's own gradient. It is the one bold element; everything
 * else in here is quiet on purpose, because the visitor is doing work.
 */

/* ── The section that invites the visitor in ─────────────────────────────── */

.lv-qual__invite {
  display: grid;
  justify-items: start;
  gap: var(--lv-space-4);
  max-width: var(--lv-measure);
}

/* ── The dialog ──────────────────────────────────────────────────────────── */

.lv-lq {
  inline-size: min(34rem, calc(100vw - var(--lv-space-6)));
  max-block-size: min(44rem, calc(100dvh - var(--lv-space-7)));
  padding: 0;
  border: 0;
  border-radius: var(--lv-radius-xl);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line), var(--lv-lift-3);
  color: var(--lv-text-primary);
  overflow: hidden;
}

.lv-lq::backdrop {
  background: var(--lv-overlay-scrim);
}

.lv-lq__shell {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  max-block-size: inherit;
  block-size: 100%;
}

/* ── Header: the counter, the title, the way out ─────────────────────────── */

.lv-lq__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--lv-space-4);
  padding: var(--lv-space-5) var(--lv-space-5) var(--lv-space-4);
}

.lv-lq__meta {
  display: grid;
  gap: var(--lv-space-2);
  min-inline-size: 0;
}

/* Mono, tabular: the counter changes on every step and must not reflow the
   title beside it. `.impeccable.md` §4 — a number set in the UI face is a bug. */
.lv-lq__counter {
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  letter-spacing: var(--lv-tracking-num);
  color: var(--lv-text-tertiary);
}

.lv-lq__title {
  margin: 0;
  font: var(--lv-weight-heading) var(--lv-text-xl) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-heading);
  text-wrap: balance;
}

.lv-lq__close {
  flex: none;
}

/* ── The progress rail — the signature ───────────────────────────────────── */

.lv-lq__rail {
  block-size: 2px;
  background: var(--lv-line);
}

.lv-lq__fill {
  display: block;
  block-size: 100%;
  background: var(--lv-ramp);
  transform-origin: left center;
  transform: scaleX(0);
  transition: transform var(--lv-dur-panel) var(--lv-ease);
}

/* ── Body ────────────────────────────────────────────────────────────────── */

.lv-lq__body {
  padding: var(--lv-space-2) var(--lv-space-5) var(--lv-space-5);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.lv-lq__intro,
.lv-lq__lede {
  margin: 0 0 var(--lv-space-5);
  max-inline-size: var(--lv-measure);
  font-size: var(--lv-text-sm);
  line-height: var(--lv-leading-normal);
  color: var(--lv-text-secondary);
}

.lv-lq__questions {
  display: grid;
  gap: var(--lv-space-6);
}

.lv-lq__q {
  display: grid;
  gap: var(--lv-space-3);
}

.lv-lq__label {
  font: var(--lv-weight-semibold) var(--lv-text-md) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-text-primary);
}

.lv-lq__req {
  margin-inline-start: 2px;
  color: var(--lv-text-tertiary);
}

.lv-lq__helper {
  margin: calc(var(--lv-space-2) * -1) 0 0;
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

/* ── Fields ──────────────────────────────────────────────────────────────── */

.lv-lq__input,
.lv-lq__textarea {
  inline-size: 100%;
  min-block-size: var(--lv-field-height);
  padding: var(--lv-space-3) var(--lv-field-padding-x);
  border: 0;
  border-radius: var(--lv-field-radius);
  background: var(--lv-field-bg);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
  font: var(--lv-weight-regular) var(--lv-text-md) / var(--lv-leading-normal) var(--lv-font-ui);
  color: var(--lv-text-primary);
}

.lv-lq__textarea {
  min-block-size: 7rem;
  resize: vertical;
}

.lv-lq__input:hover,
.lv-lq__textarea:hover {
  box-shadow: inset 0 0 0 1px var(--lv-field-border-hover);
}

.lv-lq__input:focus-visible,
.lv-lq__textarea:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-lq__input[aria-invalid='true'],
.lv-lq__textarea[aria-invalid='true'] {
  box-shadow: inset 0 0 0 1px var(--lv-bad-text);
}

/* ── Options ─────────────────────────────────────────────────────────────── */

.lv-lq__options {
  display: grid;
  gap: var(--lv-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

@container (min-width: 30rem) {
  .lv-lq__options[data-cols='2'] { grid-template-columns: 1fr 1fr; }
}

.lv-lq__option {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  inline-size: 100%;
  min-block-size: 44px;
  padding: var(--lv-space-3) var(--lv-space-4);
  border: 0;
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  font: var(--lv-weight-medium) var(--lv-text-sm) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-text-primary);
  text-align: start;
  cursor: pointer;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}

.lv-lq__option:hover { background: var(--lv-surface-raised); }

.lv-lq__option:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-lq__option[aria-pressed='true'] {
  background: var(--lv-brand-soft);
  box-shadow: inset 0 0 0 1px var(--lv-brand);
}

.lv-lq__tick {
  display: grid;
  place-items: center;
  flex: none;
  inline-size: 20px;
  block-size: 20px;
  border-radius: var(--lv-radius-sm);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  color: transparent;
}

.lv-lq__option[aria-pressed='true'] .lv-lq__tick {
  background: var(--lv-brand);
  box-shadow: none;
  color: var(--lv-text-on-brand);
}

/* ── Errors ──────────────────────────────────────────────────────────────── */

.lv-lq__error {
  margin: 0;
  font: var(--lv-weight-medium) var(--lv-text-xs) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-bad-text);
}

/* ── Footer ──────────────────────────────────────────────────────────────── */

.lv-lq__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lv-space-3);
  padding: var(--lv-space-4) var(--lv-space-5);
  border-block-start: 1px solid var(--lv-line);
  background: var(--lv-surface-sunken);
}

.lv-lq__consent {
  margin: 0;
  flex: 1 1 14rem;
  font-size: var(--lv-text-2xs);
  line-height: var(--lv-leading-snug);
  color: var(--lv-text-tertiary);
}

.lv-lq__actions {
  display: flex;
  flex: none;
  gap: var(--lv-space-2);
}

/* ── The outcome ─────────────────────────────────────────────────────────── */

.lv-lq__outcome {
  display: grid;
  justify-items: start;
  gap: var(--lv-space-4);
  padding-block: var(--lv-space-5);
}

.lv-lq__seal {
  display: grid;
  place-items: center;
  inline-size: 40px;
  block-size: 40px;
  border-radius: var(--lv-radius-pill);
  background: var(--lv-ok-surface);
  color: var(--lv-ok-text);
}

.lv-lq__outcome-title {
  margin: 0;
  font: var(--lv-weight-heading) var(--lv-text-xl) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-heading);
  text-wrap: balance;
}

.lv-lq__outcome-body {
  margin: 0;
  max-inline-size: var(--lv-measure);
  line-height: var(--lv-leading-normal);
  color: var(--lv-text-secondary);
}

/* ── Waiting and failing ─────────────────────────────────────────────────── */

.lv-lq__status {
  margin: 0;
  padding-block: var(--lv-space-6);
  font-size: var(--lv-text-sm);
  color: var(--lv-text-secondary);
}

@media (prefers-reduced-motion: reduce) {
  .lv-lq__fill,
  .lv-lq__option {
    transition: none;
  }
}
/* components/act.schedule/renderers/booking.css */
/**
 * The booking dialog's surface (the real-calendar silhouette of `act.schedule`).
 *
 * UN-SCOPED ON PURPOSE, same reason `act.qualify/renderers/questionnaire.css`
 * gives: the dialog is built by the client script — one shared instance per
 * document, created the first time a visitor opens it — because the services,
 * staff and slots are not known at build time: they are fetched from
 * `GET /booking/services` and `GET /booking/slots` at click time, so an edit in
 * the admin calendar is live without a rebuild. Astro's scoped styles only
 * match elements carrying the build-time `data-astro-cid-*` attribute, and a
 * node created by `innerHTML` never does. Every selector here is
 * `.lv-bm*`-namespaced, so global scope is collision-safe; the generator
 * inlines this file into `registry.css` verbatim.
 *
 * SURFACE CLASS: solid, always. `.impeccable.md` §3 forbids glass on "modal
 * bodies containing forms" and "any surface that scrolls its own content" —
 * this dialog is both. The scrim behind it is the only translucent thing in
 * the component. Structurally this is `act.qualify`'s dialog again (same
 * header/rail/body/footer skeleton, same option-button and field vocabulary) —
 * kept as its own `.lv-bm*` namespace rather than a shared class, matching the
 * one-CSS-file-per-renderer convention every other dialog in this registry
 * follows (`browse.product-media`'s lightbox is the third instance of the
 * same shape, also its own namespace).
 */

/* ── The section that invites the visitor in ─────────────────────────────── */

.lv-sched__invite {
  display: grid;
  justify-items: start;
  gap: var(--lv-space-4);
  max-width: var(--lv-measure);
}

/* ── The dialog ──────────────────────────────────────────────────────────── */

.lv-bm {
  inline-size: min(34rem, calc(100vw - var(--lv-space-6)));
  max-block-size: min(46rem, calc(100dvh - var(--lv-space-7)));
  padding: 0;
  border: 0;
  border-radius: var(--lv-radius-xl);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line), var(--lv-lift-3);
  color: var(--lv-text-primary);
  overflow: hidden;
}

.lv-bm::backdrop {
  background: var(--lv-overlay-scrim);
}

.lv-bm__shell {
  display: grid;
  grid-template-rows: auto auto minmax(0, 1fr) auto;
  max-block-size: inherit;
  block-size: 100%;
}

/* ── Header: the counter, the title, the way out ─────────────────────────── */

.lv-bm__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--lv-space-4);
  padding: var(--lv-space-5) var(--lv-space-5) var(--lv-space-4);
}

.lv-bm__meta {
  display: grid;
  gap: var(--lv-space-2);
  min-inline-size: 0;
}

/* Mono, tabular: the counter changes on every step and must not reflow the
   title beside it. `.impeccable.md` §4 — a number set in the UI face is a bug. */
.lv-bm__counter {
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  letter-spacing: var(--lv-tracking-num);
  color: var(--lv-text-tertiary);
}

.lv-bm__title {
  margin: 0;
  font: var(--lv-weight-heading) var(--lv-text-xl) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-heading);
  text-wrap: balance;
}

.lv-bm__close {
  flex: none;
}

/* ── The progress rail ────────────────────────────────────────────────────── */

.lv-bm__rail {
  block-size: 2px;
  background: var(--lv-line);
}

.lv-bm__fill {
  display: block;
  block-size: 100%;
  background: var(--lv-ramp);
  transform-origin: left center;
  transform: scaleX(0);
  transition: transform var(--lv-dur-panel) var(--lv-ease);
}

/* ── Body ────────────────────────────────────────────────────────────────── */

.lv-bm__body {
  padding: var(--lv-space-2) var(--lv-space-5) var(--lv-space-5);
  overflow-y: auto;
  overscroll-behavior: contain;
}

.lv-bm__status {
  margin: 0;
  padding-block: var(--lv-space-6);
  font-size: var(--lv-text-sm);
  color: var(--lv-text-secondary);
}

.lv-bm__lede {
  margin: 0 0 var(--lv-space-5);
  max-inline-size: var(--lv-measure);
  font-size: var(--lv-text-sm);
  line-height: var(--lv-leading-normal);
  color: var(--lv-text-secondary);
}

/* ── Option list: services and staff share this vocabulary ──────────────── */

.lv-bm__options {
  display: grid;
  gap: var(--lv-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.lv-bm__option {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lv-space-3);
  inline-size: 100%;
  min-block-size: 44px;
  padding: var(--lv-space-3) var(--lv-space-4);
  border: 0;
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  font: var(--lv-weight-medium) var(--lv-text-sm) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-text-primary);
  text-align: start;
  cursor: pointer;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}

.lv-bm__option:hover { background: var(--lv-surface-raised); }

.lv-bm__option:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-bm__option[aria-pressed='true'] {
  background: var(--lv-brand-soft);
  box-shadow: inset 0 0 0 1px var(--lv-brand);
}

.lv-bm__option-left {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  min-inline-size: 0;
}

.lv-bm__option-title {
  display: block;
  font-weight: var(--lv-weight-semibold);
}

.lv-bm__option-meta {
  display: block;
  margin-block-start: 2px;
  font-size: var(--lv-text-2xs);
  color: var(--lv-text-tertiary);
}

.lv-bm__option-price {
  flex: none;
  font: var(--lv-weight-medium) var(--lv-text-xs) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  color: var(--lv-text-secondary);
}

/* Staff avatar / initial fallback — the one place a photograph appears in the
   whole registry's dialog vocabulary. */
.lv-bm__avatar {
  flex: none;
  inline-size: 2.25rem;
  block-size: 2.25rem;
  border-radius: var(--lv-radius-pill);
  object-fit: cover;
  background: var(--lv-surface-sunken);
}

.lv-bm__avatar-fallback {
  display: grid;
  place-items: center;
  flex: none;
  inline-size: 2.25rem;
  block-size: 2.25rem;
  border-radius: var(--lv-radius-pill);
  background: var(--lv-brand-soft);
  color: var(--lv-brand);
  font: var(--lv-weight-semibold) var(--lv-text-xs) / 1 var(--lv-font-ui);
}

/* ── The day rail ─────────────────────────────────────────────────────────── */

.lv-bm__days {
  display: flex;
  gap: var(--lv-space-2);
  margin: 0 0 var(--lv-space-5);
  padding: 2px;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scrollbar-width: thin;
}

.lv-bm__day {
  display: grid;
  justify-items: center;
  gap: 2px;
  flex: none;
  inline-size: 3.25rem;
  padding: var(--lv-space-2) 0;
  border: 0;
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  color: var(--lv-text-primary);
  cursor: pointer;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}

.lv-bm__day:hover { background: var(--lv-surface-raised); }

.lv-bm__day:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-bm__day[aria-pressed='true'] {
  background: var(--lv-brand-soft);
  box-shadow: inset 0 0 0 1px var(--lv-brand);
}

.lv-bm__day-name {
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1 var(--lv-font-ui);
  text-transform: uppercase;
  letter-spacing: var(--lv-tracking-label);
  color: var(--lv-text-tertiary);
}

.lv-bm__day[aria-pressed='true'] .lv-bm__day-name { color: var(--lv-brand); }

.lv-bm__day-num {
  font: var(--lv-weight-semibold) var(--lv-text-md) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
}

/* ── Slots, grouped by part of day ────────────────────────────────────────── */

.lv-bm__slot-group + .lv-bm__slot-group { margin-block-start: var(--lv-space-5); }

.lv-bm__slot-group-label {
  margin: 0 0 var(--lv-space-2);
  font: var(--lv-weight-semibold) var(--lv-text-2xs) / 1 var(--lv-font-ui);
  text-transform: uppercase;
  letter-spacing: var(--lv-tracking-label);
  color: var(--lv-text-tertiary);
}

.lv-bm__slots {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(5.25rem, 1fr));
  gap: var(--lv-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.lv-bm__slot {
  min-block-size: 44px;
  padding: var(--lv-space-2) var(--lv-space-3);
  border: 0;
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
  font: var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  color: var(--lv-text-primary);
  cursor: pointer;
  transition: background-color var(--lv-dur-state) var(--lv-ease);
}

.lv-bm__slot:hover { background: var(--lv-surface-raised); }

.lv-bm__slot:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-bm__slot[aria-pressed='true'] {
  background: var(--lv-brand-soft);
  box-shadow: inset 0 0 0 1px var(--lv-brand);
}

/* ── Fields: the details step ─────────────────────────────────────────────── */

.lv-bm__field {
  display: grid;
  gap: var(--lv-space-2);
  margin: 0 0 var(--lv-space-4);
}

.lv-bm__field:last-child { margin-block-end: 0; }

.lv-bm__label {
  font: var(--lv-weight-semibold) var(--lv-text-sm) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-text-primary);
}

.lv-bm__input {
  inline-size: 100%;
  min-block-size: var(--lv-field-height);
  padding: var(--lv-space-3) var(--lv-field-padding-x);
  border: 0;
  border-radius: var(--lv-field-radius);
  background: var(--lv-field-bg);
  box-shadow: inset 0 0 0 1px var(--lv-field-border);
  font: var(--lv-weight-regular) var(--lv-text-md) / var(--lv-leading-normal) var(--lv-font-ui);
  color: var(--lv-text-primary);
}

.lv-bm__input:hover { box-shadow: inset 0 0 0 1px var(--lv-field-border-hover); }

.lv-bm__input:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-bm__input[aria-invalid='true'] {
  box-shadow: inset 0 0 0 1px var(--lv-bad-text);
}

/* ── The summary the visitor confirms against ─────────────────────────────── */

.lv-bm__summary {
  display: grid;
  gap: var(--lv-space-1);
  margin: 0 0 var(--lv-space-5);
  padding: var(--lv-space-4);
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface-sunken);
  font-size: var(--lv-text-sm);
  color: var(--lv-text-secondary);
}

.lv-bm__summary strong { color: var(--lv-text-primary); }

.lv-bm__summary time {
  font-family: var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
}

/* ── Errors and the conflict banner ───────────────────────────────────────── */

.lv-bm__error {
  margin: 0 0 var(--lv-space-4);
  font: var(--lv-weight-medium) var(--lv-text-xs) / var(--lv-leading-snug) var(--lv-font-ui);
  color: var(--lv-bad-text);
}

.lv-bm__banner {
  margin: 0 0 var(--lv-space-4);
  padding: var(--lv-space-3) var(--lv-space-4);
  border-radius: var(--lv-radius-md);
  background: var(--lv-warn-surface);
  color: var(--lv-warn-text);
  font-size: var(--lv-text-xs);
  line-height: var(--lv-leading-snug);
}

/* ── Footer ──────────────────────────────────────────────────────────────── */

.lv-bm__foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lv-space-3);
  padding: var(--lv-space-4) var(--lv-space-5);
  border-block-start: 1px solid var(--lv-line);
  background: var(--lv-surface-sunken);
}

/* ── The outcome ─────────────────────────────────────────────────────────── */

.lv-bm__outcome {
  display: grid;
  justify-items: start;
  gap: var(--lv-space-4);
  padding-block: var(--lv-space-5);
}

.lv-bm__seal {
  display: grid;
  place-items: center;
  inline-size: 40px;
  block-size: 40px;
  border-radius: var(--lv-radius-pill);
  background: var(--lv-ok-surface);
  color: var(--lv-ok-text);
}

.lv-bm__outcome-title {
  margin: 0;
  font: var(--lv-weight-heading) var(--lv-text-xl) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-heading);
  text-wrap: balance;
}

.lv-bm__outcome-body {
  margin: 0;
  max-inline-size: var(--lv-measure);
  line-height: var(--lv-leading-normal);
  color: var(--lv-text-secondary);
}

@media (prefers-reduced-motion: reduce) {
  .lv-bm__fill,
  .lv-bm__option,
  .lv-bm__day,
  .lv-bm__slot {
    transition: none;
  }
}
/* components/browse.event-set/renderers/calendar.css */
/**
 * The month grid's surface.
 *
 * UN-SCOPED ON PURPOSE, and the reason is structural rather than stylistic:
 * the grid's markup is produced by `lib/calendar-grid.ts` as a STRING, both at
 * build time (`set:html`) and again in the browser after a shared-source fetch
 * or a filter click. Astro's scoped styles only match elements that carry the
 * build-time `data-astro-cid-*` attribute, and a node created by `innerHTML`
 * never does — a scoped block would leave every rebuilt panel unstyled. The
 * generator inlines this file into `registry.css` verbatim (`collectExternalCss`),
 * and every selector is `.lv-cal*`-namespaced, so global scope is safe.
 *
 * SURFACE CLASS: solid, always. `.impeccable.md` §3 forbids glass on "any
 * surface that scrolls its own content" and on work surfaces generally. A month
 * grid is a dense reading surface whose backdrop would change under it as the
 * page moves, and 42 translucent cells is precisely the compositor cost §3
 * names. It is drawn the way a wall calendar is drawn: hairlines and paper.
 *
 * Every colour is a token. The grid's structure comes from `--lv-line` at 1px
 * and nothing else — no fills, no zebra, no per-cell borders that would double
 * up along shared edges.
 */

.lv-cal {
  border-radius: var(--lv-radius-lg);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line);
  overflow: hidden;
}

/* ── The bar: month name, and the two page controls ──────────────────────── */

.lv-cal__bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--lv-space-4);
  padding: var(--lv-space-4) var(--lv-space-5);
  border-block-end: 1px solid var(--lv-line);
}

.lv-cal__month {
  margin: 0;
  font: var(--lv-weight-semibold) var(--lv-text-lg) / var(--lv-leading-snug) var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-heading);
  color: var(--lv-text-primary);
}

.lv-cal__pager {
  display: inline-flex;
  gap: var(--lv-space-2);
}

/* The pager is `--sm` (36px) so it does not shout over the month name, which is
   right with a mouse and wrong with a thumb. `.lv-chip` in section.css makes the
   same trade the same way; a tablet is the likeliest device to meet the grid,
   since the list view is what a phone gets. */
@media (pointer: coarse) {
  .lv-cal__pager .lv-btn {
    min-inline-size: 44px;
    min-block-size: 44px;
    inline-size: 44px;
    block-size: 44px;
  }
}

/* ── Weekday header and the week rows ────────────────────────────────────── */

.lv-cal__weekdays,
.lv-cal__week {
  display: grid;
  grid-template-columns: repeat(7, minmax(0, 1fr));
}

.lv-cal__weekdays {
  border-block-end: 1px solid var(--lv-line);
}

.lv-cal__weekday {
  padding: var(--lv-space-2) var(--lv-space-3);
  font: var(--lv-weight-semibold) var(--lv-text-2xs) / 1 var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-label);
  text-transform: uppercase;
  color: var(--lv-text-tertiary);
}

/* One hairline per shared edge: the row owns its top rule, the cell owns its
   leading rule, and the first cell of each row suppresses its own. Doubling a
   1px rule into 2px along every internal edge is the classic grid tell. */
.lv-cal__week + .lv-cal__week {
  border-block-start: 1px solid var(--lv-line);
}

.lv-cal__cell {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: var(--lv-space-1);
  min-block-size: 5.5rem;
  padding: var(--lv-space-2);
  border-inline-start: 1px solid var(--lv-line);
}

.lv-cal__cell:first-child {
  border-inline-start: 0;
}

.lv-cal__cell--pad {
  background: var(--lv-surface-sunken);
}

.lv-cal__cell:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: calc(var(--lv-focus-offset) * -1);
}

.lv-cal__date {
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

/* Today is stated with weight and ink, not with a filled disc — the disc reads
   as "selected" and the visitor has selected nothing. Set by the client, which
   is the only place a clock is permitted. */
.lv-cal__cell--today .lv-cal__date {
  font-weight: var(--lv-weight-bold);
  color: var(--lv-text-primary);
}

.lv-cal__cell--today::before {
  content: '';
  position: absolute;
  inset-block-start: 0;
  inset-inline: 0;
  block-size: 2px;
  background: var(--lv-brand);
}

/* ── Event chips ─────────────────────────────────────────────────────────── */

.lv-cal__chips {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-block-size: 0;
}

/* SC 2.5.8 (Target Size, Minimum): a day chip is a discrete clickable tile in
   a month-grid cell — the calendar equivalent of an event badge — so the
   standard's "in a sentence or block of text" exception does not apply. It
   measured 154-175 × 20-21 before this rule. `align-items: baseline` is kept
   because the time stamp and the title must sit on one baseline; the 24px
   floor grows the chip's box beneath them without disturbing that. */
.lv-cal__chip {
  display: flex;
  align-items: baseline;
  min-block-size: 24px;
  gap: var(--lv-space-2);
  padding: 3px var(--lv-space-2);
  border-radius: var(--lv-radius-sm);
  background: var(--lv-brand-soft);
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1.3 var(--lv-font-ui);
  color: var(--lv-text-primary);
  text-decoration: none;
}

a.lv-cal__chip:hover {
  background: var(--lv-surface-raised);
}

a.lv-cal__chip:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-cal__chip-time {
  flex: none;
  font-size: var(--lv-text-2xs);
  color: var(--lv-text-secondary);
}

.lv-cal__chip-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* THE SIGNATURE. A multi-day event is one continuous bar across the days it
   runs, so the shape of a busy weekend is legible at a glance — which is the
   whole difference between a calendar and a list. The days after the first
   square off their leading edge and lose their inset, so consecutive cells
   read as one object interrupted by the grid rule rather than as three
   unrelated chips that happen to share a title. No accent stripe involved. */
.lv-cal__chip--spans {
  background: var(--lv-brand-soft);
  box-shadow: inset 0 0 0 1px var(--lv-line-control);
}

.lv-cal__chip--continues {
  border-start-start-radius: 0;
  border-end-start-radius: 0;
  margin-inline-start: calc(var(--lv-space-2) * -1 - 1px);
  padding-inline-start: var(--lv-space-2);
}

.lv-cal__more {
  padding-inline: var(--lv-space-2);
  font-size: var(--lv-text-2xs);
  color: var(--lv-text-tertiary);
}

/* ── Visitor-facing tag filter ───────────────────────────────────────────── */

.lv-events__filter {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lv-space-2);
  margin-block-end: var(--lv-space-5);
}

.lv-events__filter-label {
  margin: 0;
  font: var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);
  color: var(--lv-text-secondary);
}

.lv-chip--toggle {
  border: 0;
  cursor: pointer;
  font: inherit;
}

.lv-chip--toggle[aria-pressed='true'] {
  background: var(--lv-brand);
  color: var(--lv-text-on-brand);
  box-shadow: none;
}

.lv-chip--toggle:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-chip--static {
  min-block-size: 28px;
  padding-inline: var(--lv-space-3);
  font-size: var(--lv-text-xs);
  color: var(--lv-text-secondary);
}

.lv-events__facts {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-2);
  margin-block: var(--lv-space-2) 0;
}

/* ── The two views ───────────────────────────────────────────────────────── */
/*
 * The list is the base state and the grid is the enhancement, in that order and
 * for three reasons: it is what a crawler indexes, it is what a visitor without
 * JavaScript gets, and it is the copy that carries the operator's `data-edit`
 * anchors. A container query — not a viewport query — decides which is shown,
 * because this section may sit in a narrow article column on a wide screen.
 */

.lv-events--calendar .lv-events__grid { display: none; }

@container (min-width: 46rem) {
  .lv-events--calendar .lv-events__grid { display: block; }
  .lv-events--calendar .lv-events__list { display: none; }
}

/* A grid that never arrived — shared source still loading, a fetch that failed,
   or a placement whose dates are all unparseable — must not collapse the
   section to nothing. `revert` undoes the `display: none` above rather than
   imposing a second layout on a plain `<ul>`. */
.lv-events--calendar .lv-events__grid:empty { display: none; }

@container (min-width: 46rem) {
  .lv-events--calendar .lv-events__grid:empty + .lv-events__list { display: revert; }
}

@media (prefers-reduced-motion: reduce) {
  .lv-cal__chip,
  .lv-chip--toggle {
    transition: none;
  }
}
/* components/browse.image-set/renderers/lightbox.css */
/**
 * `browse.image-set`'s gallery lightbox surface.
 *
 * DELIBERATE DUPLICATE of `browse.product-media/renderers/lightbox.css`,
 * `.lv-pmedia-lb` renamed to `.lv-gallery-lb` throughout — not a shared
 * import, because a component's renderer only imports its own sibling files
 * in this tree (see that component's script/def.ts header for the fuller
 * rationale on why the dialog is built lazily and reads straight off the
 * baked `<img>` elements). Both dialogs must stay visually identical: change
 * one, change the other in the same edit — WITH ONE NAMED EXCEPTION:
 *
 * `.lv-gallery-lb__meta` / `.lv-gallery-lb__caption` (2026-08-14,
 * GAP-ANALYSIS §6 G19) are an image-set-ONLY addition. `browse.product-media`
 * has no caption content — it shows the same object from different angles,
 * not different subjects — so its `.lv-pmedia-lb__counter` stays exactly as
 * it was: a bare, absolutely-positioned bottom bar. Here that bar became a
 * flex row (`.lv-gallery-lb__meta`) holding the new caption span plus the
 * counter span, which keeps its own mirrored styling (font, tokens,
 * position within the row) — so if you ever add a caption to product-media
 * too, mirror THIS shape into that file rather than re-deriving it. Every
 * other rule below (`__shell`, `__figure`, `__img`, `__close`, `__nav`,
 * `::backdrop`) is still the byte-identical mirror the rest of this comment
 * describes.
 *
 * 2026-08-14 chrome polish (PATTERN-STANDARDS §2.2b, mirrored BOTH ways —
 * these rules are part of the byte-identical base, not the exception): the
 * backdrop gained a blur behind the scrim (the A13 recipe — the page recedes
 * physically, not just tonally), the dialog and backdrop gained an entrance
 * (opacity + a short rise, transform/opacity only, killed in the
 * reduced-motion block below), and the nav arrows nudge 2px in their travel
 * direction on hover at `--lv-dur-fast` — the §1.1 affordance layer.
 *
 * UN-SCOPED ON PURPOSE, same reason `act.qualify/renderers/questionnaire.css`
 * and `browse.product-media/renderers/lightbox.css` give: it is a file every
 * one of this component's four route-family renderers imports, so a scoped
 * copy would be four near-identical copies of the same dialog in
 * `registry.css`. Every selector here is `.lv-gallery-lb*`-namespaced, so
 * global scope is collision-safe; the generator inlines this file verbatim.
 *
 * 2026-08-18 (Phase 7C1): THE DIALOG IS SERVER-RENDERED NOW. It used to be
 * built by the client script on first open — which is why this file could not
 * be scoped in the first place, the markup never carrying Astro's build-time
 * `data-astro-cid-*` attribute. Declaring the renderer's interaction anatomy
 * made that build the DOM-replacement family `check/interaction.ts` bans, so
 * each renderer now bakes one `<dialog>` per placement and the behaviour only
 * writes `textContent` into its caption and counter. The rules below are
 * unchanged: they were always plain class selectors, and they match the baked
 * markup exactly as they matched the built markup.
 *
 * SURFACE CLASS: solid. `.impeccable.md` §3 keeps glass off any surface that
 * scrolls its own content or fills most of the viewport as the thing being
 * looked at rather than chrome floating over other content — a lightbox is
 * squarely that. The scrim behind it is the only translucent thing here.
 */

.lv-gallery-lb {
  inline-size: min(56rem, calc(100vw - var(--lv-space-6)));
  max-block-size: calc(100dvh - var(--lv-space-7));
  padding: 0;
  border: 0;
  border-radius: var(--lv-radius-xl);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line), var(--lv-lift-3);
  color: var(--lv-text-primary);
}

/* Blur + scrim, not scrim alone (A13): the page behind physically recedes,
   which is what makes the solid dialog read as the one thing in focus.
   `-webkit-` prefix for Safari, which still requires it on backdrop-filter. */
.lv-gallery-lb::backdrop {
  background: var(--lv-overlay-scrim);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

/* Entrance — transform/opacity only, one short rise. `[open]` so re-running
   the animation on every showModal() needs no JS class juggling; the
   backdrop fades in step. Reduced motion kills both below. */
@keyframes lv-gallery-lb-in {
  from { opacity: 0; transform: translateY(0.65rem); }
}

@keyframes lv-gallery-lb-backdrop-in {
  from { opacity: 0; }
}

.lv-gallery-lb[open] { animation: lv-gallery-lb-in var(--lv-dur-state) var(--lv-ease); }
.lv-gallery-lb[open]::backdrop { animation: lv-gallery-lb-backdrop-in var(--lv-dur-state) var(--lv-ease); }

.lv-gallery-lb__shell {
  position: relative;
  display: grid;
  place-items: center;
  block-size: 100%;
  padding: var(--lv-space-6);
}

.lv-gallery-lb__figure {
  display: grid;
  margin: 0;
  max-inline-size: 100%;
  max-block-size: calc(100dvh - var(--lv-space-7) - var(--lv-space-9));
}

.lv-gallery-lb__img {
  display: block;
  max-inline-size: 100%;
  max-block-size: calc(100dvh - var(--lv-space-7) - var(--lv-space-9));
  object-fit: contain;
  border-radius: var(--lv-radius-md);
  opacity: 0;
  transition: opacity var(--lv-dur-state) var(--lv-ease);
}

.lv-gallery-lb__img[data-ready='1'] { opacity: 1; }

.lv-gallery-lb__close {
  position: absolute;
  inset-block-start: var(--lv-space-3);
  inset-inline-end: var(--lv-space-3);
  z-index: 1;
}

.lv-gallery-lb__nav {
  position: absolute;
  inset-block-start: 50%;
  transform: translateY(-50%);
  z-index: 1;
  transition: transform var(--lv-dur-fast) var(--lv-ease);
}

.lv-gallery-lb__nav--prev { inset-inline-start: var(--lv-space-3); }
.lv-gallery-lb__nav--next { inset-inline-end: var(--lv-space-3); }

/* Directional nudge, the §1.1 affordance grammar: the arrow moves 2px the
   way it will take you, at the quick layer's duration. `:active` recompresses
   to the resting spot. */
.lv-gallery-lb__nav--prev:hover { transform: translateY(-50%) translateX(-2px); }
.lv-gallery-lb__nav--next:hover { transform: translateY(-50%) translateX(2px); }
.lv-gallery-lb__nav:active { transform: translateY(-50%) scale(0.94); }

/* image-set-only — see the file header. The bar keeps the exact absolute
   bottom-centre position `.lv-pmedia-lb__counter` uses in product-media;
   it just now holds two spans instead of being the counter text itself. */
.lv-gallery-lb__meta {
  position: absolute;
  inset-block-end: var(--lv-space-3);
  inset-inline: var(--lv-space-6);
  margin: 0;
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: var(--lv-space-3);
  text-align: center;
}

.lv-gallery-lb__caption {
  font-size: var(--lv-text-sm);
  color: var(--lv-text-primary);
}

.lv-gallery-lb__caption:empty { display: none; }

/* Mirrored styling from `.lv-pmedia-lb__counter` — only the wrapper that
   positions it changed. */
.lv-gallery-lb__counter {
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  letter-spacing: var(--lv-tracking-num);
  color: var(--lv-text-tertiary);
}

@media (prefers-reduced-motion: reduce) {
  .lv-gallery-lb__img { transition: none; }

  /* The `[class*="lv-"]` backstop in styles/section.css cannot reach a
     `::backdrop` pseudo-element, so the entrance pair is disarmed here
     explicitly rather than left to collapse. */
  .lv-gallery-lb[open],
  .lv-gallery-lb[open]::backdrop { animation: none; }

  .lv-gallery-lb__nav { transition: none; }
}
/* components/browse.product-media/renderers/lightbox.css */
/**
 * `zoom: 'lightbox'`'s dialog surface.
 *
 * MIRROR CONTRACT: `browse.image-set/renderers/lightbox.css` is a deliberate
 * duplicate of this file (`.lv-pmedia-lb` → `.lv-gallery-lb`) — change one,
 * change the other in the same edit. That file's header names the one
 * sanctioned divergence (its `__meta`/`__caption` bar, an image-set-only
 * addition this component has no content for). The 2026-08-14 chrome polish
 * (PATTERN-STANDARDS §2.2b) is part of the byte-identical base and lives in
 * BOTH files: blurred backdrop behind the scrim (the A13 recipe — the page
 * recedes physically, not just tonally), an entrance on `[open]` (opacity +
 * a short rise, transform/opacity only, killed in the reduced-motion block
 * below), and a 2px directional nav-arrow nudge on hover at `--lv-dur-fast`
 * — the §1.1 affordance layer.
 *
 * UN-SCOPED ON PURPOSE, same reason `act.qualify/renderers/questionnaire.css`
 * gives: this dialog is built by the client script the first time a visitor
 * opens it, one shared instance per `[data-lv-pmedia]` root, so it never
 * carries Astro's build-time `data-astro-cid-*` scope attribute. Every
 * selector here is `.lv-pmedia-lb*`-namespaced, so global scope is
 * collision-safe; the generator inlines this file into `registry.css`
 * verbatim, exactly like the questionnaire's.
 *
 * SURFACE CLASS: solid. `.impeccable.md` §3 keeps glass off any surface that
 * scrolls its own content or fills most of the viewport as the thing being
 * looked at rather than chrome floating over other content — a lightbox is
 * squarely that. The scrim behind it is the only translucent thing here.
 */

.lv-pmedia-lb {
  inline-size: min(56rem, calc(100vw - var(--lv-space-6)));
  max-block-size: calc(100dvh - var(--lv-space-7));
  padding: 0;
  border: 0;
  border-radius: var(--lv-radius-xl);
  background: var(--lv-surface);
  box-shadow: inset 0 0 0 1px var(--lv-line), var(--lv-lift-3);
  color: var(--lv-text-primary);
}

/* Blur + scrim, not scrim alone (A13): the page behind physically recedes,
   which is what makes the solid dialog read as the one thing in focus.
   `-webkit-` prefix for Safari, which still requires it on backdrop-filter. */
.lv-pmedia-lb::backdrop {
  background: var(--lv-overlay-scrim);
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

/* Entrance — transform/opacity only, one short rise. `[open]` so re-running
   the animation on every showModal() needs no JS class juggling; the
   backdrop fades in step. Reduced motion kills both below. */
@keyframes lv-pmedia-lb-in {
  from { opacity: 0; transform: translateY(0.65rem); }
}

@keyframes lv-pmedia-lb-backdrop-in {
  from { opacity: 0; }
}

.lv-pmedia-lb[open] { animation: lv-pmedia-lb-in var(--lv-dur-state) var(--lv-ease); }
.lv-pmedia-lb[open]::backdrop { animation: lv-pmedia-lb-backdrop-in var(--lv-dur-state) var(--lv-ease); }

.lv-pmedia-lb__shell {
  position: relative;
  display: grid;
  place-items: center;
  block-size: 100%;
  padding: var(--lv-space-6);
}

.lv-pmedia-lb__figure {
  display: grid;
  margin: 0;
  max-inline-size: 100%;
  max-block-size: calc(100dvh - var(--lv-space-7) - var(--lv-space-9));
}

.lv-pmedia-lb__img {
  display: block;
  max-inline-size: 100%;
  max-block-size: calc(100dvh - var(--lv-space-7) - var(--lv-space-9));
  object-fit: contain;
  border-radius: var(--lv-radius-md);
  opacity: 0;
  transition: opacity var(--lv-dur-state) var(--lv-ease);
}

.lv-pmedia-lb__img[data-ready='1'] { opacity: 1; }

.lv-pmedia-lb__close {
  position: absolute;
  inset-block-start: var(--lv-space-3);
  inset-inline-end: var(--lv-space-3);
  z-index: 1;
}

.lv-pmedia-lb__nav {
  position: absolute;
  inset-block-start: 50%;
  transform: translateY(-50%);
  z-index: 1;
  transition: transform var(--lv-dur-fast) var(--lv-ease);
}

.lv-pmedia-lb__nav--prev { inset-inline-start: var(--lv-space-3); }
.lv-pmedia-lb__nav--next { inset-inline-end: var(--lv-space-3); }

/* Directional nudge, the §1.1 affordance grammar: the arrow moves 2px the
   way it will take you, at the quick layer's duration. `:active` recompresses
   to the resting spot. */
.lv-pmedia-lb__nav--prev:hover { transform: translateY(-50%) translateX(-2px); }
.lv-pmedia-lb__nav--next:hover { transform: translateY(-50%) translateX(2px); }
.lv-pmedia-lb__nav:active { transform: translateY(-50%) scale(0.94); }

.lv-pmedia-lb__counter {
  position: absolute;
  inset-block-end: var(--lv-space-3);
  inset-inline: 0;
  margin: 0;
  text-align: center;
  font: var(--lv-weight-medium) var(--lv-text-2xs) / 1 var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  letter-spacing: var(--lv-tracking-num);
  color: var(--lv-text-tertiary);
}

@media (prefers-reduced-motion: reduce) {
  .lv-pmedia-lb__img { transition: none; }

  /* The `[class*="lv-"]` backstop in styles/section.css cannot reach a
     `::backdrop` pseudo-element, so the entrance pair is disarmed here
     explicitly rather than left to collapse. */
  .lv-pmedia-lb[open],
  .lv-pmedia-lb[open]::backdrop { animation: none; }

  .lv-pmedia-lb__nav { transition: none; }
}
/* components/browse.showcase-marquee/renderers/rail.css */
/**
 * browse.showcase-marquee — THE RAIL CHASSIS, shared by all three anatomies.
 *
 * One file so the boundedness rules are written ONCE and cannot drift between
 * anatomies. Everything anatomy-specific (the stamped numerals, the progress
 * hairline's own treatment and its `animation-timeline` binding, the drift
 * loop) lives in the renderer's own scoped `<style>` block; everything that
 * decides whether the rail is SAFE lives here.
 *
 * ADOPTED from the Phase 7C2 partial draft (`cache/phase7-partial-20260818`),
 * with five corrections recorded so the next reader sees the history:
 *   1. `lv-rail__*` → `lv-mq__*`. The component already owns the `lv-mq`
 *      namespace and `premium-2-mint.test.ts` pins `lv-mq__set--clone`; a
 *      second namespace for one component is the "one of everything" defect
 *      (.impeccable §5.7).
 *   2. `--lv-text-2xs` is not a token in this tree (grep: zero definitions) —
 *      the draft inherited the typo from the old renderer. `--lv-text-xs`.
 *   3. The draft's progress hairline named `--lv-rail-scroll` but nothing ever
 *      declared it. The name is now produced by `scroll-timeline` on the
 *      viewport and hoisted to the frame with `timeline-scope`, because the
 *      hairline is the viewport's SIBLING, not its descendant.
 *   4. The draft kept prev/next buttons hidden until a script ran. There is no
 *      script: dropped. See "THE SCRIPT BUDGET" below.
 *   5. The edge-fade mask of the old renderer stays dropped. A fade SOFTENS
 *      the cut edge, and the cut edge is the affordance the anatomy is built
 *      on (`section.browse.edge-bleed-rail.v1`: "the cut edge states there are
 *      more"). It also wanted a raw `#000` alpha literal.
 *
 * ── The three safety laws, in the order every rail this estate has reviewed
 *    has violated them ────────────────────────────────────────────────────
 *
 * 1 · A HORIZONTAL RAIL NEVER CAPTURES A VERTICAL GESTURE.
 *     `overflow-x: auto` + `overflow-y: hidden` gives the viewport scrollable
 *     overflow on the inline axis only, so a wheel or a swipe with any block
 *     component reaches the page. `overscroll-behavior-block: auto` is written
 *     out even though it is the initial value: it is the declaration a future
 *     editor would otherwise "tidy" into the `overscroll-behavior: contain`
 *     shorthand — which is exactly the bug (it contains BOTH axes and glues a
 *     visitor to the rail). Only the `-inline` longhand may ever say `contain`.
 *     No `touch-action` is declared anywhere: `pan-x` alone would forbid the
 *     vertical pan, and the browser's default already does the right thing.
 *
 * 2 · THE SCROLL IS VISIBLE BEFORE IT IS TOUCHED.
 *     Three affordances, none of which needs JavaScript: the native scrollbar
 *     is kept (thin, brand-tinted — hiding it is how rails become invisible),
 *     the item at the cut edge is deliberately half-visible, and the count line
 *     states the true total in text. The scroll-driven progress hairline is a
 *     fourth, added only where the browser supports scroll timelines.
 *
 * 3 · EVERY STATE IS REACHABLE WITHOUT JS AND WITHOUT MOTION.
 *     The rail is a plain scroll container in its server-rendered resting
 *     state: scroll, snap, keyboard and every `data-edit-*` anchor work with
 *     scripting off and with motion off. Drift, where an anatomy offers it at
 *     all, is a transform on top of a container that was already navigable.
 *
 * THE SCRIPT BUDGET IS ZERO. No anatomy ships a `<script>`. That is not
 * asceticism, it is the strongest available form of law 1: a renderer with no
 * `wheel`, `touchmove` or `scroll` listener cannot preventDefault a gesture it
 * never hears. It also settles law 3 by construction — there is no no-JS
 * degrade because there is no JS rung to fall from — and keeps every
 * `data-edit-*` anchor server-emitted and immortal (check/interaction.ts's
 * anchor rule). The consequences are that the keyboard contract is the
 * platform's own (a focusable scroll container: arrows, Home/End, Page keys)
 * and that the pause control is a native checkbox, not a button.
 *
 * GLASS IS FORBIDDEN HERE and that is a rule, not a taste: .impeccable §3
 * bans `backdrop-filter` on "any surface that scrolls its own content". The
 * rail scrolls its own content. It is `.lv-solid` grammar throughout.
 */

/* ── The room ──────────────────────────────────────────────────────────────
   The rail owns the physical page edge (the `bleed-past-gutter` half of
   `section.browse.edge-bleed-rail.v1`); the head and the meta line keep the
   work column by carrying their own gutter, the same discipline
   `open.editorial`'s masthead uses. */

.lv-mq.lv-mq--bleeding { padding-inline: 0; }

.lv-mq__head,
.lv-mq__meta,
.lv-mq__empty {
  max-width: var(--lv-container-max, 72rem);
  margin-inline: auto;
  padding-inline: var(--lv-gutter, var(--lv-space-5));
}

.lv-mq__rows {
  display: grid;
  gap: var(--lv-space-4);
}

.lv-mq__frame {
  display: grid;
  gap: var(--lv-space-2);
  /* Hoists the viewport's named scroll timeline to this subtree so the
     progress hairline — a SIBLING of the scroll port, not a descendant — can
     name it. Ignored by browsers without scroll-driven animations, where the
     hairline is `display: none` anyway. */
  timeline-scope: --lv-mq-scroll;
}

/* ── The scroll port (law 1) ─────────────────────────────────────────────── */

.lv-mq__viewport {
  /* The scroll port must also be the CONTAINING BLOCK for what it scrolls.
     `overflow-x: auto` clips in-flow descendants, but an absolutely
     positioned descendant is clipped only by an ancestor that is also its
     containing block — and a `position: static` scroller is not one. Every
     card in this rail carries a `.lv-vh` alt-text span (`marquee.astro`,
     `marquee-product.astro`, `marquee-workshop.astro`), and `.lv-vh` is
     `position: absolute`. On a 390px viewport those spans sit at their static
     position part-way along a track several viewports wide, so unclipped they
     set the DOCUMENT's scroll width — the page scrolled sideways while the
     rail itself was perfectly contained. Same defect, same one-line fix, as
     `.lv-table-scroll` and `.lv-offer__table-wrap`. */
  position: relative;
  overflow-x: auto;
  overflow-y: hidden;
  overscroll-behavior-inline: contain;
  overscroll-behavior-block: auto;
  scroll-snap-type: inline proximity;
  scroll-padding-inline: var(--lv-gutter, var(--lv-space-5));
  scrollbar-width: thin;
  scrollbar-color: var(--lv-line-strong) transparent;
  /* Room for the focus ring the clipped block axis would otherwise cut. */
  padding-block: var(--lv-space-1);
  scroll-timeline: --lv-mq-scroll inline;
}

/* The rail is ONE keyboard stop with a name (`tabindex="0"` + `role="group"`
   in the markup): arrows, Home/End and the Page keys scroll it natively, with
   no script and no key handler of ours. The cards themselves are not links and
   are deliberately NOT tabbable — twelve photographs would otherwise be twelve
   tab stops on the way to the next real control. */
.lv-mq__viewport:focus-visible {
  outline: var(--lv-focus-width, 2px) solid var(--lv-focus-ring, var(--lv-brand-strong));
  outline-offset: 3px;
  border-radius: var(--lv-radius-md);
}

.lv-mq__track {
  display: flex;
  gap: var(--lv-space-4);
  inline-size: max-content;
}

.lv-mq__set {
  display: flex;
  flex: none;
  gap: var(--lv-space-4);
  margin: 0;
  padding: 0;
  padding-inline: var(--lv-gutter, var(--lv-space-5));
  list-style: none;
}

/* The clone exists only to close a drift loop seamlessly. It is `aria-hidden`,
   carries no `data-edit*` (one edit target per image, never two) and no
   `alt` text, and it is not rendered at all by an anatomy that never drifts. */
.lv-mq__set--clone { padding-inline-start: 0; }

.lv-mq__card {
  flex: none;
  scroll-snap-align: start;
}

.lv-mq__fig { margin: 0; }

/* Same height, natural width — the contact-sheet rhythm. The height breathes
   with the container (`.lv-sec` is a container) and is clamped so a phone gets
   a readable band and a wide screen never a wall. `min(78vw, …)` keeps the
   promise the anatomy makes about the cut edge: at every width at least one
   full card and one cut card are visible. */
.lv-mq__media {
  block-size: clamp(11rem, 26cqi, 16rem);
  max-inline-size: min(78cqi, 28rem);
  border-radius: var(--lv-radius-md);
}

.lv-mq__media img {
  block-size: 100%;
  inline-size: auto;
  max-inline-size: none;
  /* Resting grade: consistent, slightly quieted photography. */
  filter: saturate(0.92);
}

.lv-mq__cap {
  margin-block-start: var(--lv-space-2);
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

/* ── The affordances (law 2) ─────────────────────────────────────────────── */

.lv-mq__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--lv-space-3);
  margin-block-end: var(--lv-space-3);
}

/* The true count, in text, always — `true-remaining-count` is required anatomy
   and a scrollbar is not a number. Figures are mono and tabular (.impeccable
   §4: "a number set in the UI face is a bug"). */
.lv-mq__count {
  margin: 0;
  font-size: var(--lv-text-xs);
  color: var(--lv-text-tertiary);
}

.lv-mq__count b {
  font-family: var(--lv-font-mono);
  font-feature-settings: 'tnum' 1;
  font-weight: var(--lv-weight-semibold);
  color: var(--lv-text-secondary);
}

/* ── The pause control ─────────────────────────────────────────────────────
   A native checkbox with `role="switch"`: it works with scripting off, Space
   toggles it, the platform announces on/off, and `:has()` carries its state to
   the track. Checked = paused. It is rendered ONLY where motion is actually
   continuous, and hidden where the loop cannot run (reduced motion), because
   chrome for a behaviour that is not happening is the anti-pattern this
   component was reviewed for (`adapter.static-stacked-list.v1`: no inert
   chrome). */

.lv-mq__pause {
  display: inline-flex;
  align-items: center;
  gap: var(--lv-space-2);
  min-block-size: 44px;
  padding-inline: var(--lv-space-4);
  border-radius: var(--lv-radius-pill);
  box-shadow: inset 0 0 0 1px var(--lv-line-strong);
  background: var(--lv-surface);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-xs);
  font-weight: var(--lv-weight-medium);
  cursor: pointer;
  transition: box-shadow var(--lv-dur-fast) var(--lv-ease), color var(--lv-dur-fast) var(--lv-ease);
}

.lv-mq__pause:hover {
  box-shadow: inset 0 0 0 1px var(--lv-brand-strong);
  color: var(--lv-text-primary);
}

.lv-mq__pause:has(.lv-mq__switch:focus-visible) {
  outline: var(--lv-focus-width, 2px) solid var(--lv-focus-ring, var(--lv-brand-strong));
  outline-offset: 2px;
}

/* Clipped, never `opacity`/`visibility` — the control must stay in the
   accessibility tree and in the tab order; only its default box is replaced by
   the pill around it. */
.lv-mq__switch {
  position: absolute;
  inline-size: 1px;
  block-size: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.lv-mq__pause svg {
  inline-size: 0.85rem;
  block-size: 0.85rem;
  fill: currentColor;
}

.lv-mq__pause .lv-mq__glyph--play { display: none; }
.lv-mq__pause:has(.lv-mq__switch:checked) .lv-mq__glyph--play { display: block; }
.lv-mq__pause:has(.lv-mq__switch:checked) .lv-mq__glyph--pause { display: none; }

/* ── The progress hairline ─────────────────────────────────────────────────
   Scroll-driven, so it costs no script and no scroll listener. Hidden entirely
   where scroll timelines are unsupported: a bar that cannot move would be a
   lie about position, and the scrollbar, the cut edge and the count line
   already state position three other ways. Each anatomy binds its own
   `animation-timeline` and paints its own hairline. */

.lv-mq__progress { display: none; }

.lv-mq__progressbar {
  display: block;
  block-size: 100%;
  inline-size: 100%;
  transform-origin: left center;
}

/* ── The static floor (law 3) ──────────────────────────────────────────────
   Below the rail floor — and wherever an anatomy decides the set does not
   scroll — the same cards render as one wrapped, centred row: every item,
   every caption, the true count, and NO rail chrome. */

.lv-mq--still .lv-mq__viewport {
  overflow-x: visible;
  overflow-y: visible;
  scroll-snap-type: none;
  scroll-timeline: none;
}

.lv-mq--still .lv-mq__track,
.lv-mq--still .lv-mq__set {
  inline-size: auto;
  flex-wrap: wrap;
  justify-content: center;
  padding-inline: 0;
}

.lv-mq--still .lv-mq__progress { display: none; }
/* components/decide.pricing/renderers/offer.css */
/**
 * decide.pricing — the shared OFFER skeleton
 * ============================================================================
 *
 * One file behind all four route-family anatomies (`pricing.astro`,
 * `pricing-folio.astro`, `pricing-field.astro`, `pricing-ledger.astro`), the
 * same seam `prove.people/renderers/linked.css` opened in Phase 7B1. The
 * family files carry idiom — ordinals, leaders, stages. This file carries the
 * MECHANISM, and the mechanism is the part that must be correct in every
 * theme: the billing-period toggle, the price datum, the degrade ladder and
 * the builder-state block.
 *
 * ── Three laws this file exists to keep ─────────────────────────────────────
 *
 * 1. THE PRICE IS NEVER BEHIND A REVEAL. There is no `opacity: 0`, no
 *    `visibility: hidden` and no animation anywhere in this skeleton. The one
 *    thing that ever hides is a billing-period column, by `display: none`,
 *    and only on the rung where a real control has already offered the visitor
 *    the choice — and its sibling period is showing in its place. Rung 1 (no
 *    CSS) and rung 2 (no `:has()`) both print EVERY price with its own period
 *    label, so a browser that understands nothing still reads a complete,
 *    honest price list.
 *
 * 2. THE TOGGLE CHANGES THE LENS, NEVER THE TRUTH.
 *    `section.decide.rate-table.v1` states it exactly that way, and requires
 *    `billing-unit-toggle` as anatomy: "The toggle is a real control (radio
 *    pair or switch) with visible focus and a text label per unit… a tap swaps
 *    units instantly… figures never animate in a way that misstates a price at
 *    any frame." So it is a native `<fieldset>` of two `<input type="radio">`
 *    and one `:has()` rule. No script. The browser supplies the single tab
 *    stop, arrow traversal, Space, `:focus-visible` and the "radio button 2 of
 *    2" announcement, and there is no frame in which a figure is mid-flight.
 *
 * 3. EVERY PRICE AND EVERY LABEL STAYS EDITABLE IN EVERY STATE. A
 *    period-collapsed column still carries its `data-edit` anchors — the nodes
 *    are in the DOM, `display: none` does not remove them — and the builder's
 *    `expanded` state (bottom of this file) reopens both periods AND every
 *    plan-picker detail at once, so an operator can reach the yearly price of
 *    a tier that is neither selected nor currently shown.
 *
 * ── The degrade ladder ──────────────────────────────────────────────────────
 *
 *   rung 1  no CSS at all      every plan, every price (both periods, each
 *                              labelled), every feature, every CTA, in
 *                              document order
 *   rung 2  no `:has()`        as rung 1, styled: both period columns stand
 *                              side by side, the toggle is not drawn (no inert
 *                              chrome — `adapter.static-stacked-list.v1`)
 *   rung 3  `:has()`           the toggle is drawn and collapses the table to
 *                              the chosen period, instantly
 *
 * Nothing on rung 3 carries content that rungs 1–2 lack. There is no rung 4:
 * this component declares `runtime: 'none'` and ships no scroll timeline, no
 * entrance and no transition of its own. An offer section is the one place on
 * a page where motion can only ever be in the way — §5.1 of `.impeccable.md`,
 * "legible before beautiful", applied to the surface that takes the money.
 *
 * ── Glass ───────────────────────────────────────────────────────────────────
 *
 * None, anywhere, deliberately. `.impeccable.md` §3 forbids `backdrop-filter`
 * on "data tables, table rows, forms, form fields… and any surface that
 * scrolls its own content". A pricing table is every one of those things at
 * once. The offer surfaces are `.lv-solid` by construction, which §3 calls the
 * default rather than the fallback.
 */

/* ═══════════════════════════════════════════════════════════════════════════
   1 · THE BILLING-PERIOD TOGGLE
   ═══════════════════════════════════════════════════════════════════════════ */

/* The control. A real fieldset, a real legend, two real radios. The legend is
   visually hidden rather than absent: the group needs an accessible name, and
   "Betalingsperiode" is the name — but drawing it would put a third label
   above two labels that already say what they are. */
.lv-offer__periods {
  display: inline-flex;
  align-items: stretch;
  gap: 0;
  margin: 0 0 var(--lv-space-5);
  padding: 3px;
  border: 1px solid var(--lv-line);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-surface-sunken);
}

.lv-offer__periods-legend {
  position: absolute;
  inline-size: 1px;
  block-size: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* The label IS the target, and it is 44px high on every pointer type —
   `section.decide.rate-table.v1`'s touch clause is a floor, not a phone-only
   rule. */
.lv-offer__period {
  display: inline-flex;
  align-items: center;
  gap: var(--lv-space-2);
  min-block-size: 44px;
  padding-inline: var(--lv-space-4);
  border-radius: var(--lv-radius-pill);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-sm);
  font-weight: var(--lv-weight-medium);
  cursor: pointer;
}

/* The radio is DRAWN, not visually hidden. The focus ring has to sit on the
   element the arrow keys actually move — a hidden input parks the ring
   somewhere the eye cannot follow, which is defect 7 in `.impeccable.md` §7
   restated on a different control. */
.lv-offer__period input {
  flex: none;
  margin: 0;
}

.lv-offer__period input:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-offer__period:has(input:checked) {
  background: var(--lv-surface);
  color: var(--lv-text-primary);
  box-shadow: var(--lv-lift-1);
}

/* ── Rung 2 → rung 3 ────────────────────────────────────────────────────────
   Both period columns stand side by side by default. That is the honest state
   for a browser with no `:has()`, and it is also the state the no-CSS reader
   gets. Only inside the `@supports` block does the toggle appear and start
   collapsing columns — a control that cannot do anything is never drawn. */

.lv-offer__periods { display: none; }

.lv-offer__price-period {
  display: block;
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-xs);
  font-weight: var(--lv-weight-regular);
  letter-spacing: normal;
}

@supports selector(:has(*)) {
  .lv-offer--periodic .lv-offer__periods { display: inline-flex; }

  /* One rule per direction. `.lv-offer__price--alt` and `--primary` both carry
     their anchors either way; `display: none` keeps the node, and the
     `expanded` builder state at the bottom of this file outranks both. */
  .lv-offer--periodic:has(.lv-offer__period-primary input:checked) .lv-offer__price--alt { display: none; }
  .lv-offer--periodic:has(.lv-offer__period-alt input:checked) .lv-offer__price--primary { display: none; }

  /* With one period showing, its own period label is redundant with the
     toggle that is now on screen — the toggle says "pr. år", so the figure
     need not repeat it. It comes back the moment both columns show again. */
  .lv-offer--periodic:has(.lv-offer__period-primary input:checked) .lv-offer__price--primary .lv-offer__price-period,
  .lv-offer--periodic:has(.lv-offer__period-alt input:checked) .lv-offer__price--alt .lv-offer__price-period {
    display: none;
  }
}

/* Both columns standing: they need to read as two prices, not one long
   number. A hairline between them, and the second one quieter. */
.lv-offer__price + .lv-offer__price {
  margin-block-start: var(--lv-space-1);
  padding-block-start: var(--lv-space-1);
  border-block-start: 1px solid var(--lv-line);
}

/* ═══════════════════════════════════════════════════════════════════════════
   2 · THE PRICE DATUM
   ═══════════════════════════════════════════════════════════════════════════

   The defect this fixes: in a flex row of plan cards, each card's price block
   sits wherever its own name and chip stack leaves it. Three prices at three
   heights are three prices the eye has to hunt for, and comparing them is the
   entire job of the section. Every family file lays its plans out on the SAME
   five-row template, so name, price, summary, features and action land on one
   line across the whole row — `hierarchy.proof-ledger` made structural rather
   than decorative. */

/* The template is now BUILT FROM THE ARRANGEMENT rather than hard-coded, and it
   has to be: five fixed rows only held the line while every theme drew the same
   five parts in the same order, and the composition axis exists precisely so
   they do not. Each renderer emits `--lv-plan-rows` as one row per rendered
   group with the slack on the itemisation (see `pricing.astro`'s `planRows`),
   so the action still lands on the card's bottom edge and the prices still read
   as one line across the row whatever the theme refused. The fallback is the
   old literal, so a plan drawn outside the axis is unchanged. */
.lv-offer__plan {
  display: grid;
  grid-template-rows: var(--lv-plan-rows, auto auto auto 1fr auto);
  align-content: start;
  gap: 0;
}

.lv-offer__plan > * { margin-block: 0; }

.lv-offer__chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-2);
  min-block-size: var(--lv-badge-height);
  margin-block-end: var(--lv-space-2);
  padding: 0;
  list-style: none;
}

.lv-offer__badge {
  display: inline-flex;
  align-items: center;
  padding: 2px var(--lv-space-2);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-brand-soft);
  color: var(--lv-brand);
  font: var(--lv-weight-semibold) var(--lv-text-2xs) / 1.6 var(--lv-font-ui);
  text-transform: uppercase;
  letter-spacing: var(--lv-tracking-eyebrow);
}

/* "Nuværende plan" is a STATE, not a recommendation. It stays grayscale even
   on the recommended card, so the single accent keeps meaning "anbefalet" and
   nothing else — the single-accent discipline the def's header settled. */
.lv-offer__badge--current {
  background: var(--lv-surface-sunken);
  color: var(--lv-text-secondary);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}

.lv-offer__price {
  color: var(--lv-text-primary);
  font-size: var(--lv-text-2xl);
  font-weight: var(--lv-weight-semibold);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--lv-tracking-num);
}

/* The struck anchor price. `<s>` carries the semantics, a visually-hidden
   "Normalpris" carries the meaning aloud, and the figure is quiet — an anchor
   price that shouts is the thing `avoidDa` warns is misleading marketing. */
.lv-offer__anchor {
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-regular);
  text-decoration-thickness: 1px;
}

.lv-offer__summary {
  margin-block-start: var(--lv-space-2);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-sm);
}

/* ═══════════════════════════════════════════════════════════════════════════
   3 · INCLUDED / EXCLUDED — two signals, never colour alone
   ═══════════════════════════════════════════════════════════════════════════ */

.lv-offer__features {
  display: grid;
  gap: var(--lv-space-2);
  margin-block: var(--lv-space-4) var(--lv-space-4);
  padding: 0;
  list-style: none;
  font-size: var(--lv-text-sm);
}

.lv-offer__feature {
  display: flex;
  align-items: start;
  gap: var(--lv-space-3);
  color: var(--lv-text-secondary);
}

/* Filled square = included, open square + struck label = excluded. Fill versus
   outline is a geometric difference, so the distinction survives grayscale,
   colour deficiency and a printed page. The corner radius is the theme's own
   shape axis, never a literal. */
.lv-offer__mark {
  flex: none;
  inline-size: 10px;
  block-size: 10px;
  margin-block-start: 6px;
  border-radius: var(--lv-radius-sm);
  background: var(--lv-brand);
}

.lv-offer__feature.is-out {
  color: var(--lv-text-tertiary);
  text-decoration: line-through;
}

.lv-offer__feature.is-out .lv-offer__mark {
  background: none;
  box-shadow: inset 0 0 0 1px var(--lv-line-strong);
}

/* Single-accent discipline: brand ink appears on the recommended plan alone.
   Every other plan keeps the geometry and loses the hue. */
.lv-offer__plan:not(.is-featured) .lv-offer__mark { background: var(--lv-icon-quiet); }
.lv-offer__plan:not(.is-featured) .lv-offer__feature.is-out .lv-offer__mark { background: none; }

/* ═══════════════════════════════════════════════════════════════════════════
   4 · THE DOTTED LEADER
   ═══════════════════════════════════════════════════════════════════════════

   Label on the left, figure on the right, joined by a dotted rule that the eye
   tracks across the gap. It is a menu card's whole anatomy, and it is equally
   a rate card's — 6C §5.4 recorded "decide.pricing has no menu mode… the
   dotted leader between dish and price is the whole anatomy of the thing being
   imitated" as an open want. It is answered here as an ORNAMENT available to
   every family rather than a fifth `mode` value: minting a mode would change
   the meaning of stored placements, which Phase 7A1 refused to do for the same
   reason.

   Implemented as a border on a flexible middle element, not as a repeating
   character: a `content: '……'` leader is read aloud by a screen reader and
   cannot be sized to the gap. */
.lv-offer__lead {
  flex: 1 1 var(--lv-space-6);
  min-inline-size: var(--lv-space-5);
  align-self: end;
  margin-block-end: 0.32em;
  border-block-end: 1px dotted var(--lv-line-strong);
}

/* ═══════════════════════════════════════════════════════════════════════════
   5 · RATE ROWS — `section.decide.rate-table.v1`
   ═══════════════════════════════════════════════════════════════════════════ */

.lv-offer__rates {
  display: grid;
  margin: 0;
  padding: 0;
  list-style: none;
  max-inline-size: 46rem;
}

.lv-offer__rate {
  display: flex;
  align-items: baseline;
  gap: var(--lv-space-4);
  min-block-size: 48px;
  padding-block: var(--lv-space-3);
  border-block-end: 1px solid var(--lv-line);
}

.lv-offer__rate:first-child { border-block-start: 1px solid var(--lv-line); }

.lv-offer__rate-copy {
  display: grid;
  gap: 2px;
  min-inline-size: 0;
}

.lv-offer__rate-label {
  color: var(--lv-text-primary);
  font-weight: var(--lv-weight-medium);
}

.lv-offer__rate-note {
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-xs);
}

.lv-offer__rate-figures {
  flex: none;
  text-align: end;
}

.lv-offer__rate-figure {
  color: var(--lv-text-primary);
  font-size: var(--lv-text-md);
  font-variant-numeric: tabular-nums;
}

.lv-offer__rate-unit {
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-xs);
}

/* ═══════════════════════════════════════════════════════════════════════════
   6 · THE COMPARISON TABLE
   ═══════════════════════════════════════════════════════════════════════════ */

/* A table wider than its column scrolls inside its OWN container, per
   `section.decide.rate-table.v1`'s responsive clause — never the page body.

   `position: relative` is what makes that promise true. `overflow-x: auto`
   alone clips only in-flow descendants; an absolutely positioned one escapes
   unless the scroller is ALSO its containing block. Section 3 of this file
   puts a `.lv-vh` label inside every feature cell ("Tageftersyn: inkluderet"),
   and `.lv-vh` is `position: absolute`. On a 390px viewport those labels sit
   at their static position inside a 544–666px table — 76–229px past the
   viewport edge — and, unclipped, they set the DOCUMENT's scroll width. The
   table itself was always contained; its hidden labels were not. */
.lv-offer__table-wrap { position: relative; overflow-x: auto; }

.lv-offer__table {
  inline-size: 100%;
  min-inline-size: 34rem;
  border-collapse: collapse;
}

.lv-offer__table th,
.lv-offer__table td {
  padding: var(--lv-space-3) var(--lv-space-4);
  text-align: center;
  border-block-end: 1px solid var(--lv-line);
}

.lv-offer__table-corner { border: 0; }

.lv-offer__table thead th {
  vertical-align: bottom;
  padding-block-end: var(--lv-space-4);
  border-block-end: 2px solid var(--lv-line-strong);
}

.lv-offer__table-name {
  display: block;
  color: var(--lv-text-primary);
  font-weight: var(--lv-weight-semibold);
}

.lv-offer__table-row-label {
  text-align: start;
  color: var(--lv-text-secondary);
  font-weight: var(--lv-weight-medium);
}

.lv-offer__table-cell .lv-offer__mark {
  display: inline-block;
  margin-block-start: 0;
}

.lv-offer__table-cell.is-out .lv-offer__mark {
  background: none;
  box-shadow: inset 0 0 0 1px var(--lv-line-strong);
}

.lv-offer__table-dash { color: var(--lv-text-tertiary); }

.lv-offer__table-cta { padding-block: var(--lv-space-4); }

/* ═══════════════════════════════════════════════════════════════════════════
   7 · THE PLAN PICKER
   ═══════════════════════════════════════════════════════════════════════════ */

.lv-offer__picker {
  display: grid;
  gap: var(--lv-space-3);
  max-inline-size: 36rem;
}

.lv-offer__pick {
  border-radius: var(--lv-radius-md);
  box-shadow: inset 0 0 0 1px var(--lv-line);
}

.lv-offer__pick-row {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  min-block-size: 44px;
  padding: var(--lv-space-4);
  cursor: pointer;
}

.lv-offer__pick-row input { flex: none; }

.lv-offer__pick-row input:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-offer__pick-name {
  flex: 1;
  min-inline-size: 0;
  color: var(--lv-text-primary);
  font-weight: var(--lv-weight-semibold);
}

.lv-offer__pick-price {
  flex: none;
  color: var(--lv-text-primary);
  font-variant-numeric: tabular-nums;
}

/* The detail panel. `display: none` and not `opacity: 0`: an unselected plan's
   detail is not "hidden content", it is content the visitor has not asked for
   — and every anchor inside it is reachable in the `expanded` builder state
   below, which is the state the operator edits in. */
.lv-offer__pick-detail {
  display: none;
  padding: 0 var(--lv-space-4) var(--lv-space-4);
}

@supports selector(:has(*)) {
  .lv-offer__pick:has(input:checked) { box-shadow: inset 0 0 0 2px var(--lv-brand); }

  .lv-offer__pick:has(input:checked) .lv-offer__pick-detail {
    display: grid;
    gap: var(--lv-space-3);
  }
}

/* Rung 2: no `:has()` means no way to open a panel, so every panel is open.
   The visitor reads a long page instead of a short one; nobody loses a price. */
@supports not selector(:has(*)) {
  .lv-offer__pick-detail { display: grid; gap: var(--lv-space-3); }
  .lv-offer__pick-row input { display: none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   8 · CONFIGURATOR ADD-ONS
   ═══════════════════════════════════════════════════════════════════════════ */

.lv-offer__addons-wrap { max-inline-size: 42rem; }

.lv-offer__addons {
  display: grid;
  margin-block-start: var(--lv-space-6);
  padding: 0;
  list-style: none;
}

.lv-offer__addon {
  display: flex;
  align-items: center;
  gap: var(--lv-space-4);
  min-block-size: 44px;
  border-block-end: 1px solid var(--lv-line);
}

.lv-offer__addon-label {
  display: flex;
  align-items: center;
  gap: var(--lv-space-3);
  min-block-size: 44px;
  cursor: pointer;
}

.lv-offer__addon-label input:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

.lv-offer__addon-price {
  flex: none;
  font-variant-numeric: tabular-nums;
}

/* Label left, running total right — until they no longer both fit. The label
   is uppercase with tracking and the figure is `--lv-text-2xl` in the `field`
   anatomy, so inside a narrow configurator column (307px on a 390px phone)
   the pair's min-content is wider than the column and, unwrapped, held the
   section open and scrolled the page sideways. Wrapping puts the total on its
   own line, still right-aligned by the `margin-inline-start: auto` below —
   the same reading order, one line lower. Nothing is hidden or shrunk to
   illegibility: a price is the last thing that may be clipped to fit. */
.lv-offer__addon-total {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--lv-space-4);
  margin-block-start: var(--lv-space-4);
  padding-block-start: var(--lv-space-3);
  border-block-start: 2px solid var(--lv-line-strong);
  color: var(--lv-text-primary);
  font-weight: var(--lv-weight-semibold);
}

/* A flex item's automatic minimum is its min-content size; without this floor
   the longest unbreakable word in either half re-opens the row. */
.lv-offer__addon-total > * { min-inline-size: 0; }

/* The computed sum is DERIVED, so it carries no `data-edit` anchor and is
   announced politely rather than on every keystroke of a checkbox run. */
.lv-offer__addon-sum {
  margin-inline-start: auto;
  font-variant-numeric: tabular-nums;
}

.lv-offer__foot {
  max-inline-size: var(--lv-measure);
  margin-block-start: var(--lv-space-5);
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-xs);
}

/* ═══════════════════════════════════════════════════════════════════════════
   9 · BUILDER PROTOCOL v2 — `[data-lv-state]`
   ═══════════════════════════════════════════════════════════════════════════

   `data-lv-state` lands on the placement wrapper, outside any renderer's
   scoped styles, which is why these rules live in this shared plain-CSS file
   rather than in a family file's `<style>` block.

   Declared states: idle · period-alternate · focus-visible · plan-selected ·
   expanded. `idle` needs no rule — the server markup commits the primary
   period and the recommended plan, and that IS the resting state. */

/* `period-alternate` — the operator inspects the yearly column without
   clicking. Written as the mirror of the `:has()` pair above and placed after
   it, so it wins on order at equal specificity. */
[data-lv-state='period-alternate'] .lv-offer--periodic .lv-offer__price--primary { display: none; }
[data-lv-state='period-alternate'] .lv-offer--periodic .lv-offer__price--alt { display: block; }

/* `focus-visible` — the ring the keyboard user gets, shown on demand on the
   canvas so the operator can see what they are shipping. */
[data-lv-state='focus-visible'] .lv-offer__period input,
[data-lv-state='focus-visible'] .lv-offer__pick-row input,
[data-lv-state='focus-visible'] .lv-offer__addon-label input {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

/* `plan-selected` — the picker's committed row, drawn without needing a real
   `:checked` (the canvas renders server markup, not a live selection). */
[data-lv-state='plan-selected'] .lv-offer__pick { box-shadow: inset 0 0 0 2px var(--lv-brand); }
[data-lv-state='plan-selected'] .lv-offer__pick-detail { display: grid; gap: var(--lv-space-3); }

/* `expanded` — THE EDITING STATE, and the reason the two rules above can
   safely hide anything at all. Every billing period, every picker detail and
   every period label is open at once, so every `data-edit` anchor the def
   declares is on screen and reachable: a non-selected tier's price, its label,
   its yearly figure, its feature rows.

   Written with compound selectors on purpose. It has to outrank BOTH `:has()`
   collapse rules and the `period-alternate` rule above it; without that, an
   operator who asked for every field would still lose whichever column the
   toggle happened to be sitting on. */
[data-lv-state='expanded'] .lv-offer--periodic .lv-offer__price--primary,
[data-lv-state='expanded'] .lv-offer--periodic .lv-offer__price--alt,
[data-lv-state='expanded'] .lv-offer--periodic .lv-offer__price .lv-offer__price-period {
  display: block;
}

[data-lv-state='expanded'] .lv-offer .lv-offer__pick-detail {
  display: grid;
  gap: var(--lv-space-3);
}

[data-lv-state='expanded'] .lv-offer .lv-offer__pick { box-shadow: inset 0 0 0 1px var(--lv-line); }

/* ═══════════════════════════════════════════════════════════════════════════
   6 · THE COMPOSITION ZONES
   ═══════════════════════════════════════════════════════════════════════════

   The arrangement axis (`../lib/arrangement.ts`) lets a theme move the head
   matter — the label, the unit note, the lens, the guarantee row, the
   conditions — above the matrix or under it. These are the two wrappers that
   carry it, and they are deliberately thin: the zone decides WHERE a part sits,
   the part keeps its own drawing. */

.lv-offer__zone--foot {
  display: grid;
  justify-items: start;
  gap: var(--lv-space-4);
  margin-block-start: var(--lv-space-6);
}

.lv-offer__zone--foot > * { margin-block: 0; }

/* ── THE GUARANTEE ROW ──────────────────────────────────────────────────────

   What the business stands behind, set as a tight row of undertakings rather
   than a paragraph: each one is a promise that has to be readable on its own,
   and a sentence would blur four of them into a mood. Hairline-separated in the
   manner of the rate rows, mono nowhere — these are words, not figures.

   It must never read as the footnote. The footnote is what the price ASSUMES
   and is set in tertiary ink at the smallest step; this row is what the
   business PROMISES and is set in body ink at label weight. Same section, two
   different kinds of small print, and a visitor who cannot tell them apart has
   been misled about which one binds. */

.lv-offer__assurance {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lv-space-2) var(--lv-space-5);
  margin: 0;
  padding: var(--lv-space-3) 0 0;
  border-block-start: 1px solid var(--lv-line);
  list-style: none;
  max-inline-size: 100%;
}

.lv-offer__undertaking {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 0 1 auto;
  min-inline-size: 0;
}

.lv-offer__undertaking > b {
  color: var(--lv-text-primary);
  font-size: var(--lv-text-sm);
  font-weight: 600;
  letter-spacing: 0.01em;
}

.lv-offer__undertaking > span {
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-xs);
  line-height: 1.45;
  max-inline-size: 28ch;
}

/* In the section head the row is the last thing before the matrix, so it needs
   air under it rather than over it. */
.lv-offer__zone--lead .lv-offer__assurance { margin-block-start: var(--lv-space-4); }

/* The table's per-column summary, which only appears when a theme puts
   `summary` in the column head. Quiet, wrapped, and never wider than the
   column it explains. */
.lv-offer__table-summary {
  display: block;
  margin-block-start: var(--lv-space-2);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-xs);
  font-weight: 400;
  line-height: 1.45;
  text-wrap: pretty;
}
/* components/locate.map/renderers/map.css */
/* Shared by all three locate.map renderers. Class names are BEM-prefixed
   because these rules are global, not Astro-scoped. */

.lv-map {
  container-type: inline-size;
  padding-block: var(--lv-space-8);
}

.lv-map__head {
  max-width: var(--lv-measure);
  margin-block-end: var(--lv-space-6);
}

.lv-map__eyebrow {
  margin: 0 0 var(--lv-space-2);
  font: var(--lv-weight-semibold) var(--lv-text-2xs) / 1 var(--lv-font-ui);
  letter-spacing: var(--lv-tracking-eyebrow);
  text-transform: uppercase;
  color: var(--lv-text-tertiary);
}

.lv-map__title {
  margin: 0;
  font-family: var(--lv-font-ui);
  font-size: var(--lv-text-2xl);
  font-weight: var(--lv-weight-heading);
  letter-spacing: var(--lv-tracking-heading);
  line-height: var(--lv-leading-tight);
  color: var(--lv-text-primary);
}

.lv-map__desc {
  margin: var(--lv-space-3) 0 0;
  color: var(--lv-text-secondary);
  line-height: var(--lv-leading-normal);
}

/* Map left, addresses right — the list is the part that has to stay readable
   when the map fails to load, so it is never overlaid on it. */
.lv-map__body {
  display: grid;
  gap: var(--lv-space-6);
  grid-template-columns: minmax(0, 1fr);
}

@container (min-width: 780px) {
  .lv-map__body {
    grid-template-columns: minmax(0, 3fr) minmax(16rem, 2fr);
    align-items: start;
  }
}

.lv-map__frame {
  block-size: var(--lv-map-height);
  border-radius: var(--lv-radius-lg);
  border: 1px solid var(--lv-line);
  background: var(--lv-surface-sunken);
  /* §1.5 framing: the radius is only real if it clips. Google's map canvas is
     a square div mounted INSIDE this frame — without this, the tiles paint
     straight through the rounded corners and the frame reads as a sticker on
     top of the map rather than a frame around it. */
  overflow: hidden;
  box-shadow: var(--lv-lift-1);
}

.lv-map__list {
  display: flex;
  flex-direction: column;
  gap: var(--lv-space-5);
  margin: 0;
  padding: 0;
  list-style: none;
}

.lv-map__entry {
  padding-block-end: var(--lv-space-5);
  border-block-end: 1px solid var(--lv-line);
}

.lv-map__entry:last-child {
  padding-block-end: 0;
  border-block-end: 0;
}

.lv-map__entry-title {
  margin: 0 0 var(--lv-space-2);
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-semibold);
  color: var(--lv-text-primary);
}

.lv-map__entry-line,
.lv-map__entry-hours {
  margin: 0;
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-sm);
  line-height: var(--lv-leading-normal);
}

.lv-map__entry-hours {
  font-variant-numeric: tabular-nums;
  color: var(--lv-text-tertiary);
}

/* §1.1 link grammar: hairline underline at rest, inked and thickened on
   hover — never colour-only, never appearing-from-nothing. */
.lv-map__entry-link {
  display: inline-block;
  margin-block-start: var(--lv-space-2);
  color: var(--lv-text-link);
  font-size: var(--lv-text-sm);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: color-mix(in oklab, var(--lv-text-link) 45%, transparent);
  transition: text-decoration-color var(--lv-dur-state) var(--lv-ease);
}

.lv-map__entry-link:hover {
  text-decoration-thickness: 2px;
  text-decoration-color: var(--lv-text-link);
}

.lv-map__entry-link:focus-visible {
  outline: var(--lv-focus-width) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset);
}

@media (prefers-reduced-motion: reduce) {
  .lv-map__entry-link { transition: none; }
}

.lv-map__empty {
  display: flex;
  flex-direction: column;
  align-items: start;
  gap: var(--lv-space-3);
  max-width: 48ch;
  padding: var(--lv-space-7);
  border: 1px dashed var(--lv-line-strong);
  border-radius: var(--lv-radius-lg);
  background: var(--lv-surface-raised);
}

.lv-map__empty-title {
  margin: 0;
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-semibold);
  color: var(--lv-text-primary);
}

.lv-map__empty-body {
  margin: 0;
  color: var(--lv-text-secondary);
  line-height: var(--lv-leading-normal);
}

.lv-map__frame--overlay {
  background: var(--lv-canvas-deep);
}

.lv-map__notice {
  margin: 0;
  padding: var(--lv-space-5);
  border: 1px dashed var(--lv-line-strong);
  border-radius: var(--lv-radius-lg);
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-sm);
}

.lv-map--editor {
  min-height: 100dvh;
  padding: 0;
}

.lv-map--editor .lv-map__body,
.lv-map--editor .lv-map__frame {
  width: 100%;
  min-height: 100dvh;
  border: 0;
  border-radius: 0;
}
/* components/prove.people/renderers/linked.css */
/* ── prove.people · the linked portrait index, shared skeleton ───────────────
 *
 * ONE implementation of `section.prove.people-linked-portrait-index.v1`, worn
 * four ways. The four route-family renderers (`people.astro`,
 * `people-editorial.astro`, `people-portfolio.astro`, `people-product.astro`)
 * import this file and add only what makes their family's argument; the
 * anatomy, the selection mechanism, the keyboard contract and the degrade
 * ladder live here once (.impeccable.md §5.7, "one of everything").
 *
 * THE MECHANISM — a native radio group, and nothing else.
 * `adapter.static-linked-portrait-index.v1` is explicit: "Implement linked
 * portrait selection with semantic radio inputs and labels in static HTML/CSS;
 * do not add a runtime dependency or require JavaScript for identity, keyboard
 * access or the mobile fallback." So the selection state IS `:checked` on a
 * real `<input type="radio">`, the trigger IS its `<label>`, and the linkage
 * from index to stage is one `:has()` rule. The browser supplies, for free and
 * correctly: one tab stop for the whole group (roving tabindex, natively),
 * arrow-key traversal that also selects, `Enter`/`Space`, the "radio button 3
 * of 5" announcement, and `:focus-visible`. Nothing here re-implements any of
 * it in script — the one client helper (`lib/linked-keys.js`) adds `Home`/`End`,
 * which no browser gives a radio group, and stops.
 *
 * THE DEGRADE LADDER, from the bottom up. Each rung is a superset of the one
 * below it and every rung is a design, not a ruin:
 *
 *   1. no CSS at all      an ordered list of people; every name, role, bio and
 *                         contact link readable in document order.
 *   2. no `:has()`        the STACKED LIST (`adapter.static-stacked-list.v1`):
 *                         every member with their portrait inline, no
 *                         selection, and — the correction to the first draft —
 *                         no radio either: that adapter forbids "inert chrome",
 *                         and a control that selects nothing is exactly that.
 *                         This is also what every viewport below the 46rem
 *                         container query gets, which is the pattern's own
 *                         `responsive` clause ("below 700px the section becomes
 *                         a stacked list with inline portraits; every member is
 *                         visible without selection").
 *   3. `:has()` + width   the LINKED layout: stage pinned in its own column,
 *                         index beside it, selection synchronising the two, the
 *                         radio group drawn and operable.
 *   4. no-preference      the family's one settle-on-entry, declared per family
 *                         in each renderer's own style block on a `view()`
 *                         timeline — that is what makes `runtime: 'css-view'`
 *                         true rather than merely declared.
 *
 * Nothing on rungs 3–4 carries content of its own, so nothing is lost by
 * standing on a lower rung. There is no `opacity: 0` and no
 * `visibility: hidden` anywhere in this file: hiding is `display: none` on a
 * plate whose every field is also reachable in the stacked rung and in the
 * `expanded` state, never a fade a stalled runtime could leave stuck.
 *
 * WHY THE PLATE LIVES INSIDE THE `<li>`. The obvious build — a stage element
 * beside the index — needs one CSS rule per member position to link entry N to
 * plate N (`:has(:nth-child(N) :checked) … :nth-child(N)`), i.e. a hard cap on
 * how many people a customer may add. Keeping each member's plate inside their
 * own `<li>` and lifting it into the stage column with `position: absolute`
 * makes the link a single rule for any number of members — and it is also what
 * makes rung 2 fall out for free: drop the absolute positioning and each plate
 * is already sitting in its own member's row.
 *
 * POINTER PREVIEW IS POINTER-ONLY. Hover preview lives inside
 * `@media (hover: hover) and (pointer: fine)`. On a touch screen a `:hover`
 * that latches after a tap would leave the stage showing a member the visitor
 * did not choose; the pattern's touch clause ("tap selects directly; no
 * hover-only content") is only true if the hover rules are not there at all.
 * Focus preview is ungated — a keyboard exists on every pointer type.
 *
 * BUILDER PROTOCOL v2. The canvas applies a declared state as
 * `data-lv-state="<state>"` on the placement root plus an `lv:state` event
 * (packages/builder-protocol/src/commands.ts) — never a remount. Every state
 * this component declares therefore has a CSS consequence keyed off that
 * attribute at the end of this file, so builder-driven states render with no
 * behavior chunk loaded at all. `expanded` is the one that matters: it opens
 * every member's plate at once, which is how an operator reaches the bio and
 * contact anchors of a member who is not the selected one.
 */

.lv-people {
  /* Per-family overrides live in each renderer's scoped style block. */
  --lv-people-stage: 19rem;
  --lv-people-stage-floor: 30rem;
  --lv-people-plate-ratio: 4 / 5;
  --lv-people-gutter: var(--lv-space-7);
}

/* ── The group ─────────────────────────────────────────────────────────────
   A real `<fieldset>`: the browser groups the radios by their shared `name`
   and the `<legend>` names the choice. No `role="radiogroup"` override — the
   native grouping is already correct, and an ARIA role on a fieldset that
   also contains the plates would claim a child structure the markup does not
   have. */

.lv-people__linked {
  min-inline-size: 0;
  margin: 0;
  padding: 0;
  border: 0;
}

.lv-people__legend {
  /* Rung 2 has no selection to explain, so the instruction only appears with
     the linked layout that makes it true. */
  display: none;
  padding: 0;
  color: var(--lv-text-tertiary);
  font-size: var(--lv-text-xs);
  letter-spacing: var(--lv-tracking-eyebrow);
  text-transform: uppercase;
}

.lv-people__index {
  display: grid;
  gap: var(--lv-space-6);
  margin: 0;
  padding: 0;
  list-style: none;
}

.lv-people__entry {
  display: grid;
  gap: var(--lv-space-3);
  min-inline-size: 0;
}

/* ── The pick: the whole row is the label ──────────────────────────────────
   44px minimum block size on the label itself, not on a nested hit area, so
   the tap target is the row the eye reads (.impeccable.md §0, "Hit targets
   ≥ 44×44 CSS px on touch" — binds without exception). */

.lv-people__pick {
  display: grid;
  grid-template-columns: auto auto minmax(0, 1fr);
  align-items: baseline;
  gap: var(--lv-space-1) var(--lv-space-3);
  min-block-size: 44px;
  margin: 0;
  padding-block: var(--lv-space-2);
  align-content: center;
}

label.lv-people__pick {
  cursor: pointer;
}

/* The control is DRAWN, not hidden — but only on the rung where it decides
   something. A visually-hidden radio moves the focus ring somewhere the eye is
   not; `appearance: none` on a control that stays in the layout keeps the ring
   on the thing the arrow keys actually move, which is the whole reason this is
   a radio group and not a div with a click handler. On the stacked rung the
   control is `display: none`: every plate is already open there, so a radio
   would be chrome for a decision nobody is being asked to make (and one more
   tab stop per member on the smallest screen). */
.lv-people__radio {
  display: none;
  inline-size: 0.7rem;
  block-size: 0.7rem;
  margin: 0;
  padding: 0;
  border: 1px solid var(--lv-line-strong);
  border-radius: var(--lv-radius-pill);
  background: var(--lv-surface);
  appearance: none;
  translate: 0 0.12em;
  transition: background-color var(--lv-dur-fast) var(--lv-ease),
              border-color var(--lv-dur-fast) var(--lv-ease);
}

.lv-people__radio:checked {
  border-color: var(--lv-brand-strong);
  background: var(--lv-brand-strong);
}

/* The focus ring is on the CONTROL, never on a `:has()` ancestor — the row
   emphasis further down is additive to it, never a replacement. */
.lv-people__radio:focus-visible {
  outline: var(--lv-focus-width, 2px) solid var(--lv-brand-strong);
  outline-offset: 3px;
}

.lv-people__code {
  color: var(--lv-text-tertiary);
  font-family: var(--lv-font-mono);
  font-size: var(--lv-text-xs);
  font-variant-numeric: tabular-nums;
  letter-spacing: var(--lv-tracking-num);
}

.lv-people__ident {
  display: grid;
  gap: var(--lv-space-1);
  min-inline-size: 0;
}

.lv-people__name {
  color: var(--lv-text-primary);
  font-size: var(--lv-text-md);
  font-weight: var(--lv-weight-semibold);
}

.lv-people__role {
  color: var(--lv-text-secondary);
  font-size: var(--lv-text-sm);
}

/* ── The plate: portrait, identity, bio, contact ───────────────────────────
   In the stacked rung it is an inline portrait beside the member's own text.
   In the linked rung it becomes the stage. Same element, same anchors. */

.lv-people__plate {
  display: grid;
  grid-template-columns: minmax(0, 6.5rem) minmax(0, 1fr);
  gap: var(--lv-space-2) var(--lv-space-4);
  margin: 0;
  align-items: start;
}

.lv-people__portrait,
.lv-people__mark {
  inline-size: 100%;
  block-size: auto;
  aspect-ratio: var(--lv-people-plate-ratio);
  border-radius: var(--lv-radius-md);
  background: var(--lv-surface-sunken);
  object-fit: cover;
}

/* B14 — the designed no-photo state. Brand ink on brand-soft, the pair that
   travels WITH the element (see the --lv-ink-accent note in section.css: an
   accent carrying its own background must not use the re-pointable role).
   Never a stock face, never a grey rectangle. */
.lv-people__mark {
  display: grid;
  place-items: center;
  background: var(--lv-brand-soft);
  color: var(--lv-brand-strong);
  font-size: var(--lv-text-xl);
  font-weight: var(--lv-weight-bold);
  letter-spacing: 0.04em;
  user-select: none;
}

.lv-people__plate-body {
  display: grid;
  gap: var(--lv-space-2);
  min-inline-size: 0;
}

/* The stage's identity block mirrors the index entry, so it is `aria-hidden`
   in the markup (the radio's own label already announces name and role) and
   suppressed entirely on the stacked rung where the pick row sits directly
   above it. The pattern requires the active member's identity to be "mirrored
   in both at all times" — visually, once the two zones are genuinely apart. It
   carries no `data-edit`: one anchor per path, on the index entry, which is
   the element visible in every state. */
.lv-people__plate-meta {
  display: none;
  gap: var(--lv-space-1);
}

.lv-people__bio {
  max-inline-size: var(--lv-measure);
  margin: 0;
  color: var(--lv-text-secondary);
}

.lv-people__contact {
  display: flex;
  flex-wrap: wrap;
  gap: 0 var(--lv-space-4);
  margin: 0;
  font-size: var(--lv-text-sm);
}

.lv-people__contact a {
  display: inline-flex;
  align-items: center;
  min-block-size: 44px;
}

/* ── Solo floor (§1.6): one person is a band, not a group of one ───────────
   A radio group offering a single choice is chrome for a decision nobody has;
   the renderers drop the control entirely and this widens what is left. */

.lv-people--solo .lv-people__plate {
  grid-template-columns: minmax(0, 12rem) minmax(0, 1fr);
  gap: var(--lv-space-3) var(--lv-space-6);
}

/* With no index there is no pick row, so the plate's identity block stops
   being a mirror and becomes the only one — visible, and the element that
   carries the name and role anchors. */
.lv-people--solo .lv-people__plate-meta {
  display: grid;
}

.lv-people--solo .lv-people__plate-meta .lv-people__name {
  font-size: var(--lv-text-lg);
}

/* ── Density — the index's grain, not a different anatomy ──────────────────
   `list` is one member per row. `grid` wraps the index into columns beside the
   stage. `compact` sets the role on the name's own line and tightens the
   rhythm. All three keep every anchor and every degrade rung. */

.lv-people--grid .lv-people__index {
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
}

.lv-people--compact .lv-people__index {
  gap: var(--lv-space-4);
}

.lv-people--compact .lv-people__ident {
  grid-auto-flow: column;
  grid-auto-columns: max-content;
  align-items: baseline;
  gap: var(--lv-space-2);
}

.lv-people--compact .lv-people__role::before {
  content: '· ';
}

/* ══ THE LINKED LAYOUT — rung 3 ════════════════════════════════════════════
   Gated on BOTH `:has()` support and the container's width, because the
   linked layout is the only thing here that can fail: without `:has()` the
   selection rules below never match and every plate would sit absolutely
   positioned on top of every other. Under the `@supports` gate the stacked
   rung stays. */

@supports selector(:has(*)) {
  @container (min-width: 46rem) {
    .lv-people__legend {
      display: block;
      margin-block-end: var(--lv-space-4);
    }

    .lv-people__radio {
      display: inline-block;
    }

    .lv-people__index {
      position: relative;
      min-block-size: var(--lv-people-stage-floor);
      padding-inline-start: calc(var(--lv-people-stage) + var(--lv-people-gutter));
      gap: 0;
    }

    .lv-people--grid .lv-people__index {
      column-gap: var(--lv-space-6);
    }

    .lv-people__entry {
      gap: 0;
      border-block-start: 1px solid var(--lv-line);
    }

    .lv-people--list .lv-people__entry:last-child,
    .lv-people--compact .lv-people__entry:last-child {
      border-block-end: 1px solid var(--lv-line);
    }

    /* The stage. One column, pinned to the top of the index's own box, which
       is why the index carries a floor height: the stage must have somewhere
       to stand even when three members make a short list. */
    .lv-people__plate {
      position: absolute;
      inset-block-start: 0;
      inset-inline-start: 0;
      inline-size: var(--lv-people-stage);
      grid-template-columns: minmax(0, 1fr);
      gap: var(--lv-space-4);
    }

    .lv-people__plate-meta {
      display: grid;
    }

    /* ── SELECTION, in five rules ──────────────────────────────────────────
       Read top to bottom; each later rule is deliberately more specific or
       later in source order than the one it overrides, so the outcome is
       decided by the cascade rather than by `!important`.

         1  nothing shows                                        (0,3,0)
         2  … except the committed selection                     (0,5,0)
         3  … which a keyboard focus preview replaces            (0,5,0), later
         4  … and, on a fine pointer only, hover replaces that   (0,5,0), later
         5  … with every other plate closed while hovering       (0,6,0)

       `interruption` (declared in def.ts) is a property of this being pure
       CSS state: a new selection is the new match on the next style
       recalculation. There is no in-flight transition to abandon, and the
       stage can never show two members blended. */
    .lv-people__index .lv-people__entry .lv-people__plate {
      display: none;
    }

    .lv-people__index .lv-people__entry:has(.lv-people__radio:checked) .lv-people__plate {
      display: grid;
    }

    .lv-people__index:has(.lv-people__radio:focus-visible) .lv-people__entry .lv-people__plate {
      display: none;
    }

    .lv-people__index .lv-people__entry:has(.lv-people__radio:focus-visible) .lv-people__plate {
      display: grid;
    }

    @media (hover: hover) and (pointer: fine) {
      .lv-people__index:has(.lv-people__entry:hover) .lv-people__entry .lv-people__plate {
        display: none;
      }

      .lv-people__index .lv-people__entry:hover .lv-people__plate {
        display: grid;
      }

      .lv-people__entry:hover .lv-people__name {
        color: var(--lv-text-primary);
      }
    }

    /* Row emphasis — additive to the control's own focus ring, never a
       replacement for it. */
    .lv-people__entry:has(.lv-people__radio:checked) .lv-people__name {
      color: var(--lv-text-primary);
    }

    .lv-people__entry:not(:has(.lv-people__radio:checked)) .lv-people__name {
      color: var(--lv-text-secondary);
    }

    /* One person, one plate: the solo band keeps its portrait open — there is
       no index to link it to. Placed inside the linked block so it overrides
       rule 1 rather than the stacked rung's own layout. */
    .lv-people--solo .lv-people__index {
      min-block-size: 0;
      padding-inline-start: 0;
    }

    .lv-people--solo .lv-people__index .lv-people__entry .lv-people__plate {
      display: grid;
      position: static;
      inline-size: auto;
      grid-template-columns: minmax(0, 12rem) minmax(0, 1fr);
    }
  }
}

/* ══ BUILDER-DRIVEN STATES — protocol v2 ═══════════════════════════════════
   `setState` writes `data-lv-state` on the placement root and fires
   `lv:state`; no behavior chunk is required for any of these to render. Each
   name below is one of the strings def.ts declares in
   `designBindings.interaction.states`.

   `idle` and `selected` need no rule: the server markup already commits the
   first member, which is what the resting state IS.

   These rules sit after the linked block on purpose — `expanded` carries six
   compound selectors so it also outranks the pointer-preview rule (0,6,0)
   above; without that, hovering the canvas would close plates the operator
   asked to have open. */

.lv-people[data-lv-state='hover-preview'] .lv-people__entry:has(.lv-people__radio:checked) .lv-people__name {
  color: var(--lv-text-primary);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.25em;
}

.lv-people[data-lv-state='focus-visible'] .lv-people__entry:has(.lv-people__radio:checked) .lv-people__pick {
  outline: var(--lv-focus-width, 2px) solid var(--lv-brand-strong);
  outline-offset: 2px;
  border-radius: var(--lv-radius-sm);
}

.lv-people[data-lv-state='expanded'] .lv-people__linked .lv-people__index .lv-people__entry .lv-people__plate {
  display: grid;
  position: static;
  inline-size: auto;
  grid-template-columns: minmax(0, 6.5rem) minmax(0, 1fr);
}

.lv-people[data-lv-state='expanded'] .lv-people__linked .lv-people__index {
  padding-inline-start: 0;
  min-block-size: 0;
  gap: var(--lv-space-6);
}

.lv-people[data-lv-state='expanded'] .lv-people__linked .lv-people__index .lv-people__entry {
  gap: var(--lv-space-3);
}
/* components/act.apply/renderers/apply.astro */
.lv-apply.astro-peuzzxfq{max-width:var(--lv-apply-w, 34rem)}.lv-apply-sec--w-narrow.astro-peuzzxfq{--lv-apply-w: 26rem}.lv-apply-sec--w-prose.astro-peuzzxfq{--lv-apply-w: 34rem}.lv-apply-sec--w-wide.astro-peuzzxfq{--lv-apply-w: 46rem}.lv-apply-sec--center.astro-peuzzxfq .lv-apply.astro-peuzzxfq{margin-inline:auto}.lv-apply-sec--center.astro-peuzzxfq .lv-sec__head.astro-peuzzxfq{margin-inline:auto;text-align:center}.lv-apply-sec--card.astro-peuzzxfq{background:var(--lv-surface-sunken);padding-inline:var(--lv-space-5)}.lv-apply-sec--card.astro-peuzzxfq .lv-apply.astro-peuzzxfq{padding:clamp(var(--lv-space-6),4cqi,var(--lv-space-7));border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-apply__deadline.astro-peuzzxfq{margin-block-start:var(--lv-space-3);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-apply__row.astro-peuzzxfq{display:grid;gap:var(--lv-space-2);margin:0;max-width:none}.lv-apply__row.astro-peuzzxfq .lv-form__label.astro-peuzzxfq{margin:0}.lv-apply__hint.astro-peuzzxfq{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/act.chat/renderers/entry.astro */
.lv-chat.astro-evqvf6nv{display:grid;gap:var(--lv-space-3);max-width:30rem;padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-chat__state.astro-evqvf6nv{display:flex;align-items:center;gap:var(--lv-space-2);margin:0;font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-chat__state.astro-evqvf6nv .lv-dot.astro-evqvf6nv{background:var(--lv-line-strong)}.lv-chat--open.astro-evqvf6nv .lv-chat__state.astro-evqvf6nv{color:var(--lv-ok-text)}.lv-chat--open.astro-evqvf6nv .lv-dot.astro-evqvf6nv{background:currentColor}.lv-chat--assistant-only.astro-evqvf6nv .lv-chat__state.astro-evqvf6nv{color:var(--lv-warn-text)}.lv-chat--assistant-only.astro-evqvf6nv .lv-dot.astro-evqvf6nv{background:currentColor}
/* components/act.comment/renderers/comments.astro */
.lv-comments.astro-2g6uqoxq{max-width:44rem;margin-block-end:var(--lv-space-7)}.lv-comments__item.astro-2g6uqoxq{display:grid;gap:var(--lv-space-2)}.lv-comments__meta.astro-2g6uqoxq{display:flex;gap:var(--lv-space-3);margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-comments__body.astro-2g6uqoxq{margin:0;color:var(--lv-text-primary)}.lv-comments__form.astro-2g6uqoxq{max-width:44rem}.lv-comments__notice.astro-2g6uqoxq{margin-block-end:var(--lv-space-3)}.lv-comments__row.astro-2g6uqoxq{display:grid;margin:0;max-width:none}.lv-comments__row.astro-2g6uqoxq textarea.astro-2g6uqoxq{padding-block:var(--lv-space-3);resize:vertical;font-family:inherit}
/* components/act.commit/renderers/commit-band.astro */
.lv-cta-band.astro-kbe26coo{position:relative;isolation:isolate;overflow:hidden;background:var(--lv-band-tone);color:var(--lv-text-on-brand);--lv-focus-ring: var(--lv-text-on-brand);--lv-btn-primary-ink: var(--lv-text-on-brand)}.lv-cta-band--bleed.astro-kbe26coo{padding-block:var(--lv-space-9);padding-inline:var(--lv-gutter)}.lv-cta-band--inline.astro-kbe26coo,.lv-cta-band--card.astro-kbe26coo{padding-block:var(--lv-space-8);padding-inline:var(--lv-space-6);border-radius:var(--lv-radius-lg)}.lv-cta-band__ground.astro-kbe26coo{position:absolute;inset:0;z-index:-1;pointer-events:none}.lv-cta-band__photo.astro-kbe26coo{position:absolute;inset:0;inline-size:100%;block-size:100%;object-fit:cover}.lv-cta-band__ground.astro-kbe26coo:has(.lv-cta-band__photo)::after{content:"";position:absolute;inset:0;background:rgb(var(--lv-glass-under) / 0.72)}.lv-cta-band__light.astro-kbe26coo{position:absolute;z-index:1;inset:-20% -25%;background:radial-gradient(38% 60% at 18% 78%,var(--lv-brand-strong) 0%,transparent 70%),radial-gradient(34% 56% at 52% 96%,var(--lv-ramp-terminal) 0%,transparent 70%),radial-gradient(40% 62% at 84% 82%,var(--lv-brand-strong) 0%,transparent 70%);filter:blur(var(--lv-bloom-blur));opacity:0.55}.lv-cta-band__inner.astro-kbe26coo{display:grid;justify-items:center;gap:var(--lv-space-5);text-align:center}.lv-cta-band__zone.astro-kbe26coo{display:contents}.lv-cta-band__eyebrow.astro-kbe26coo{color:inherit}.lv-cta-band__title.astro-kbe26coo{max-inline-size:var(--lv-measure);margin:0;font-family:var(--lv-display-family);font-weight:var(--lv-weight-heading);font-size:clamp(var(--lv-text-xl),6cqi,var(--lv-text-2xl));line-height:1.05;letter-spacing:var(--lv-display-tracking);text-wrap:balance;color:inherit}.lv-cta-band__lede.astro-kbe26coo{max-inline-size:var(--lv-measure);margin:0;font-size:var(--lv-text-md);color:inherit}.lv-cta-band__actions.astro-kbe26coo{justify-content:center;margin-block-start:var(--lv-space-3)}@container (max-width: 30rem){.lv-cta-band__actions.astro-kbe26coo{flex-direction:column;align-items:stretch;inline-size:100%}}.lv-cta-band__host.astro-kbe26coo{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--lv-space-2) var(--lv-space-3);margin:0;font-size:var(--lv-text-sm);color:inherit}.lv-cta-band__phone.astro-kbe26coo{display:inline-flex;align-items:center;min-block-size:44px;font-family:var(--lv-font-mono);font-feature-settings:"tnum" 1;color:inherit}.lv-cta-band__legal.astro-kbe26coo{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--lv-space-1) var(--lv-space-4);margin:0;padding-block-start:var(--lv-space-4);padding-inline:0;list-style:none;font-size:var(--lv-text-2xs);letter-spacing:var(--lv-tracking-eyebrow);color:inherit}.lv-cta-band__legal.astro-kbe26coo a.astro-kbe26coo{display:inline-flex;align-items:center;min-block-size:44px;color:inherit;text-decoration:underline;text-underline-offset:3px}@keyframes lv-cta-band-drift{from{translate:-3% 0;opacity:0.45}to{translate:3% 0;opacity:0.85}}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-cta-band__light.astro-kbe26coo{animation:lv-cta-band-drift linear both;animation-timeline:view();animation-range:cover 0% cover 100%}}}[data-lv-state="poster"] .lv-cta-band__light.astro-kbe26coo{animation:none;translate:0 0;opacity:0.55}[data-lv-state="looping"] .lv-cta-band__light.astro-kbe26coo{animation:none;translate:3% 0;opacity:0.85}[data-lv-state="paused-offscreen"] .lv-cta-band__light.astro-kbe26coo{animation:none;translate:-3% 0;opacity:0.45}
/* components/act.commit/renderers/commit.astro */
.lv-commit.astro-uj5qugmz{position:relative}.lv-commit--inline.astro-uj5qugmz{padding-block:var(--lv-space-6)}.lv-commit__inner.astro-uj5qugmz{display:grid;gap:var(--lv-space-5)}.lv-commit__panel.astro-uj5qugmz{position:relative;isolation:isolate;overflow:hidden;display:grid;gap:var(--lv-space-6);padding:var(--lv-space-7) var(--lv-space-6) var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-band-tone);color:var(--lv-text-on-brand);box-shadow:var(--lv-lift-2);--lv-focus-ring: var(--lv-text-on-brand);--lv-btn-primary-ink: var(--lv-text-on-brand)}.lv-commit--inline.astro-uj5qugmz .lv-commit__panel.astro-uj5qugmz{padding:var(--lv-space-6) var(--lv-space-5);border-radius:var(--lv-radius-md)}.lv-commit--card.astro-uj5qugmz .lv-commit__inner.astro-uj5qugmz{max-inline-size:56rem;margin-inline:auto}.lv-commit--footer.astro-uj5qugmz{padding-block-end:0}.lv-commit--footer.astro-uj5qugmz .lv-commit__panel.astro-uj5qugmz{border-end-start-radius:0;border-end-end-radius:0}.lv-commit__bg.astro-uj5qugmz{position:absolute;inset:0;z-index:-1}.lv-commit__bg.astro-uj5qugmz img.astro-uj5qugmz{inline-size:100%;block-size:100%;object-fit:cover}.lv-commit__bg.astro-uj5qugmz::after{content:"";position:absolute;inset:0;background:rgb(var(--lv-glass-under) / 0.72)}.lv-commit__head.astro-uj5qugmz{padding-block-start:var(--lv-space-5)}.lv-commit__head.astro-uj5qugmz .lv-sec__eyebrow.astro-uj5qugmz{color:var(--lv-text-on-brand)}.lv-commit__head.astro-uj5qugmz .lv-sec__lede.astro-uj5qugmz{color:var(--lv-text-on-brand)}.lv-commit__title.astro-uj5qugmz{margin:0;font-size:clamp(var(--lv-text-lg),3.4cqi,var(--lv-text-xl));letter-spacing:var(--lv-display-tracking);text-wrap:balance;color:inherit}.lv-commit__rail.astro-uj5qugmz{display:grid;gap:var(--lv-space-5);align-content:start}.lv-commit__zone--foot.astro-uj5qugmz{display:flex;flex-direction:column;gap:var(--lv-space-4)}.lv-commit__person.astro-uj5qugmz{display:flex;align-items:center;gap:var(--lv-space-4)}.lv-commit__person-text.astro-uj5qugmz{display:grid;gap:2px;margin:0;font-size:var(--lv-text-sm);color:inherit}.lv-commit__phone.astro-uj5qugmz{display:inline-flex;align-items:center;min-block-size:44px;font-family:var(--lv-font-mono);font-feature-settings:"tnum" 1;color:inherit}.lv-commit__legal.astro-uj5qugmz{display:flex;flex-wrap:wrap;gap:var(--lv-space-2) var(--lv-space-5);margin:0;padding:0;list-style:none;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-commit__legal.astro-uj5qugmz a.astro-uj5qugmz{display:inline-flex;align-items:center;min-block-size:44px;color:inherit;text-decoration:underline;text-underline-offset:3px}@container (min-width: 52rem){.lv-commit__panel.astro-uj5qugmz{grid-template-columns:minmax(0,1fr) auto;align-items:center;padding:var(--lv-space-8) var(--lv-space-7);gap:var(--lv-space-8)}.lv-commit--inline.astro-uj5qugmz .lv-commit__panel.astro-uj5qugmz{padding:var(--lv-space-6) var(--lv-space-6)}.lv-commit__rail.astro-uj5qugmz{justify-items:start}}@keyframes lv-commit-scribe{from{scale:0.35 1}to{scale:1 1}}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-commit__head.astro-uj5qugmz::before{transform-origin:0 50%;animation:lv-commit-scribe linear both;animation-timeline:view();animation-range:entry 25% entry 100%}}}[data-lv-state="poster"] .lv-commit__head.astro-uj5qugmz::before{animation:none;scale:1 1}[data-lv-state="looping"] .lv-commit__head.astro-uj5qugmz::before{animation:none;scale:0.68 1}[data-lv-state="paused-offscreen"] .lv-commit__head.astro-uj5qugmz::before{animation:none;scale:0.35 1}
/* components/act.conversion-panel/renderers/panel.astro */
.lv-cpanel__grid.astro-wwybjvo6{display:grid;gap:var(--lv-space-6);align-items:start}@container (min-width: 46rem){.lv-cpanel__grid.astro-wwybjvo6{grid-template-columns:minmax(0,7fr) minmax(0,5fr)}.lv-cpanel--form-left.astro-wwybjvo6 .lv-cpanel__grid.astro-wwybjvo6>.lv-cpanel__pitch.astro-wwybjvo6{order:2}}.lv-cpanel__quote.astro-wwybjvo6{margin-block-start:var(--lv-space-5)}.lv-cpanel__quote.astro-wwybjvo6 .lv-quote__text.astro-wwybjvo6::before{content:"« ";color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-cpanel__quote.astro-wwybjvo6 .lv-quote__text.astro-wwybjvo6::after{content:" »";color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-cpanel__facts.astro-wwybjvo6{margin:var(--lv-space-5) 0 0;max-inline-size:26rem}.lv-cpanel__fact.astro-wwybjvo6{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-cpanel__fact.astro-wwybjvo6 dt.astro-wwybjvo6{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-cpanel__fact.astro-wwybjvo6 dd.astro-wwybjvo6{margin:0}.lv-cpanel__fact.astro-wwybjvo6 dd.astro-wwybjvo6 a.astro-wwybjvo6{color:var(--lv-text-primary);text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:0.16em;transition:text-decoration-thickness var(--lv-dur-fast) var(--lv-ease)}.lv-cpanel__fact.astro-wwybjvo6 dd.astro-wwybjvo6 a.astro-wwybjvo6:hover{text-decoration-thickness:2px}.lv-cpanel__card.astro-wwybjvo6{padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:var(--lv-lift-2)}.lv-cpanel__form.astro-wwybjvo6{max-width:none}.lv-cpanel__formhead.astro-wwybjvo6{margin:0;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-cpanel__row.astro-wwybjvo6{display:grid;margin:0;max-width:none}.lv-cpanel__row.astro-wwybjvo6 .lv-field.astro-wwybjvo6{align-items:stretch}.lv-cpanel__row.astro-wwybjvo6 textarea.astro-wwybjvo6{padding-block:var(--lv-space-3);resize:vertical;font-family:inherit}.lv-cpanel__proof.astro-wwybjvo6{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3) 0;margin:var(--lv-space-7) 0 0;padding:var(--lv-space-5) 0 0;list-style:none;border-block-start:1px solid var(--lv-line)}.lv-cpanel__mark.astro-wwybjvo6{display:inline-flex;align-items:center;padding-inline:var(--lv-space-5);border-inline-start:1px solid var(--lv-line);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-cpanel__mark.astro-wwybjvo6:first-child{border-inline-start:0;padding-inline-start:0}.lv-cpanel__marklink.astro-wwybjvo6{display:inline-flex;align-items:center;gap:var(--lv-space-2);color:inherit;text-decoration:none}.lv-cpanel__marklink.astro-wwybjvo6[href]:hover .lv-cpanel__markimg.astro-wwybjvo6{opacity:1}.lv-cpanel__markimg.astro-wwybjvo6{block-size:1.75rem;inline-size:auto;filter:grayscale(1);opacity:0.72}.lv-cpanel--dark.astro-wwybjvo6{background:var(--lv-brand-strong);padding-inline:var(--lv-space-5)}.lv-cpanel--dark.astro-wwybjvo6 .lv-cpanel__pitch.astro-wwybjvo6,.lv-cpanel--dark.astro-wwybjvo6 .lv-cpanel__proof.astro-wwybjvo6{color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}.lv-cpanel--dark.astro-wwybjvo6 .lv-cpanel__card.astro-wwybjvo6{box-shadow:var(--lv-lift-3)}.lv-cpanel--dark.astro-wwybjvo6 .lv-cpanel__markimg.astro-wwybjvo6{filter:grayscale(1) invert(1);opacity:0.66}
/* components/act.enquire/renderers/form.astro */
.lv-enq__suggestions.astro-iyeqqpku{margin-block-end:var(--lv-space-5)}.lv-enq__form.astro-iyeqqpku{max-width:var(--lv-enq-w, 34rem)}.lv-enq--w-narrow.astro-iyeqqpku{--lv-enq-w: 26rem}.lv-enq--w-prose.astro-iyeqqpku{--lv-enq-w: 34rem}.lv-enq--w-wide.astro-iyeqqpku{--lv-enq-w: 46rem}.lv-enq--center.astro-iyeqqpku .lv-enq__form.astro-iyeqqpku{margin-inline:auto}.lv-enq--center.astro-iyeqqpku .lv-sec__head.astro-iyeqqpku{margin-inline:auto;text-align:center}.lv-enq--center.astro-iyeqqpku .lv-enq__suggestions.astro-iyeqqpku{justify-content:center}.lv-enq--card.astro-iyeqqpku{background:var(--lv-surface-sunken);padding-inline:var(--lv-space-5)}.lv-enq--card.astro-iyeqqpku .lv-enq__form.astro-iyeqqpku{padding:clamp(var(--lv-space-6),4cqi,var(--lv-space-7));border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-enq__row.astro-iyeqqpku{display:grid;margin:0;max-width:none}.lv-enq__help.astro-iyeqqpku{margin-block:calc(-1 * var(--lv-space-1)) var(--lv-space-2);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-enq__row.astro-iyeqqpku .lv-field.astro-iyeqqpku{align-items:stretch}.lv-enq__row.astro-iyeqqpku textarea.astro-iyeqqpku{padding-block:var(--lv-space-3);resize:vertical;font-family:inherit}.lv-enq__lede--standalone.astro-iyeqqpku,.lv-enq__consent--standalone.astro-iyeqqpku{max-width:var(--lv-measure)}.lv-enq--split.astro-iyeqqpku .lv-sec__inner.astro-iyeqqpku{display:flex;flex-direction:column;gap:var(--lv-space-7)}@container (min-width: 48rem){.lv-enq--split.astro-iyeqqpku .lv-sec__inner.astro-iyeqqpku{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:var(--lv-space-8)}.lv-enq--split.astro-iyeqqpku .lv-enq__zone--foot.astro-iyeqqpku{grid-column:1 / -1}}
/* components/act.order-confirmation/renderers/confirmation.astro */
.lv-confirm.astro-m7o3l3tq{display:grid;gap:var(--lv-space-4);max-width:var(--lv-measure)}.lv-confirm__title.astro-m7o3l3tq{margin:0;font-family:var(--lv-font-ui);font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-heading);letter-spacing:var(--lv-tracking-heading);color:var(--lv-text-primary)}.lv-confirm__lede.astro-m7o3l3tq{margin:0;color:var(--lv-text-secondary);line-height:var(--lv-leading-normal)}.lv-confirm__status.astro-m7o3l3tq{margin:0;color:var(--lv-text-tertiary)}.lv-confirm__summary.astro-m7o3l3tq{display:grid;gap:var(--lv-space-2);margin:0;padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-confirm__row.astro-m7o3l3tq{display:flex;justify-content:space-between;gap:var(--lv-space-4);margin:0}.lv-confirm__row--total.astro-m7o3l3tq{padding-block-start:var(--lv-space-2);border-block-start:1px solid var(--lv-line-strong);font-weight:var(--lv-weight-semibold)}.lv-confirm__lines.astro-m7o3l3tq{display:grid;gap:var(--lv-space-1);margin:var(--lv-space-2) 0;padding:0;list-style:none}.lv-confirm__receipt.astro-m7o3l3tq{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}
/* components/act.qualify/renderers/questionnaire.astro */
.lv-qual__row--split.astro-lsy7l7r4{display:grid;gap:var(--lv-space-6);align-items:start}@container (min-width: 52rem){.lv-qual__row--split.astro-lsy7l7r4{grid-template-columns:minmax(0,7fr) minmax(15rem,5fr);gap:var(--lv-space-8)}}.lv-qual__main.astro-lsy7l7r4>form.astro-lsy7l7r4{padding:clamp(var(--lv-space-5),4cqi,var(--lv-space-7));border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-1)}.lv-qual__proof.astro-lsy7l7r4{margin:0;padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line-strong)}.lv-qual__proof.astro-lsy7l7r4 .lv-quote__text.astro-lsy7l7r4::before{content:"« ";color:var(--lv-text-tertiary)}.lv-qual__proof.astro-lsy7l7r4 .lv-quote__text.astro-lsy7l7r4::after{content:" »";color:var(--lv-text-tertiary)}.lv-qual__form.astro-lsy7l7r4{max-width:38rem}.lv-qual__step.astro-lsy7l7r4{border:0;margin:0;padding:0}.lv-qual__step.astro-lsy7l7r4 legend.astro-lsy7l7r4{padding:0;margin-block-end:var(--lv-space-4)}.lv-qual__questions.astro-lsy7l7r4{display:grid;gap:var(--lv-space-4)}.lv-qual__q.astro-lsy7l7r4{display:grid;margin:0;max-width:none}.lv-qual__opt.astro-lsy7l7r4{cursor:pointer}.lv-qual__opt.astro-lsy7l7r4:has(input:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}
/* components/act.request-quote/renderers/quote.astro */
.lv-quote.astro-56mo3ier{display:grid;gap:var(--lv-space-6);max-width:44rem}.lv-rq__sla.astro-56mo3ier{margin-block-start:var(--lv-space-3);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-quote__line.astro-56mo3ier{display:grid;gap:var(--lv-space-2) var(--lv-space-4);align-items:center}.lv-quote__line.astro-56mo3ier label.astro-56mo3ier{margin:0}.lv-quote__qty.astro-56mo3ier{display:flex;align-items:center;gap:var(--lv-space-2)}.lv-quote__qty.astro-56mo3ier .lv-field.astro-56mo3ier{inline-size:7rem}.lv-quote__unit.astro-56mo3ier{font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-quote__contact.astro-56mo3ier{max-width:none}.lv-quote__field.astro-56mo3ier{display:grid;margin:0;max-width:none}@container (min-width: 40rem){.lv-quote__line.astro-56mo3ier{grid-template-columns:minmax(0,1fr) auto}.lv-quote__contact.astro-56mo3ier{grid-template-columns:repeat(2,minmax(0,1fr))}}.lv-rq--card.astro-56mo3ier{padding-inline:var(--lv-space-5)}.lv-rq--card.astro-56mo3ier .lv-rq__inner.astro-56mo3ier{padding:clamp(var(--lv-space-6),5cqi,var(--lv-space-8));border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-rq--band.astro-56mo3ier{position:relative;overflow:hidden;padding-inline:var(--lv-space-5);background:var(--lv-brand-strong);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: color-mix(in oklab, var(--lv-text-on-brand) 78%, transparent);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}.lv-rq--band.astro-56mo3ier::before{content:"";position:absolute;inset-block-start:-30%;inset-inline-end:-12%;inline-size:55%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,color-mix(in oklab,var(--lv-text-on-brand) 14%,transparent) 0%,transparent 65%);animation:lv-rq-drift 26s var(--lv-ease) infinite alternate;pointer-events:none}.lv-rq--band.astro-56mo3ier .lv-rq__inner.astro-56mo3ier{position:relative}@keyframes lv-rq-drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(-14%,10%,0) scale(1.15)}}@media (prefers-reduced-motion: reduce){.lv-rq--band.astro-56mo3ier::before{animation:none}}
/* components/act.schedule/renderers/booking.astro */
.lv-booking__row--split.astro-q7vlq4ck{display:grid;gap:var(--lv-space-6);align-items:start}@container (min-width: 52rem){.lv-booking__row--split.astro-q7vlq4ck{grid-template-columns:minmax(0,7fr) minmax(15rem,5fr);gap:var(--lv-space-8)}}.lv-booking__proof.astro-q7vlq4ck{margin:0;padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line-strong)}.lv-booking__proof.astro-q7vlq4ck .lv-quote__text.astro-q7vlq4ck::before{content:"« ";color:var(--lv-text-tertiary)}.lv-booking__proof.astro-q7vlq4ck .lv-quote__text.astro-q7vlq4ck::after{content:" »";color:var(--lv-text-tertiary)}.lv-booking.astro-q7vlq4ck{max-width:40rem}.lv-booking__deposit.astro-q7vlq4ck{margin-block-end:var(--lv-space-5)}.lv-booking__group.astro-q7vlq4ck{border:0;margin:0;padding:0}.lv-booking__group.astro-q7vlq4ck legend.astro-q7vlq4ck{padding:0;margin-block-end:var(--lv-space-2)}.lv-booking__opt.astro-q7vlq4ck{cursor:pointer}.lv-booking__opt.astro-q7vlq4ck:has(input:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}.lv-booking__party.astro-q7vlq4ck{display:grid;margin:0;max-width:12rem}
/* components/act.share/renderers/share.astro */
.lv-share.astro-ltwyvqdk{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3);padding-block:var(--lv-space-4);border-block:1px solid var(--lv-line)}.lv-share__label.astro-ltwyvqdk{font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}
/* components/act.subscribe/renderers/subscribe.astro */
.lv-sub--card.astro-qe2sqeib{padding-inline:var(--lv-space-5)}.lv-sub--card.astro-qe2sqeib .lv-sub__inner.astro-qe2sqeib{padding:clamp(var(--lv-space-6),4cqi,var(--lv-space-7));border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-1)}.lv-sub--banner.astro-qe2sqeib{background:var(--lv-surface-sunken);padding-inline:var(--lv-space-5)}.lv-sub__inner.astro-qe2sqeib{display:grid;gap:var(--lv-space-5);align-items:center}.lv-sub__copy.astro-qe2sqeib{display:grid;gap:var(--lv-space-2)}.lv-sub__form-shell.astro-qe2sqeib{display:grid;gap:var(--lv-space-3);max-width:30rem}.lv-sub__form.astro-qe2sqeib{display:grid;gap:var(--lv-space-2)}.lv-sub__row.astro-qe2sqeib{display:flex;flex-wrap:wrap;gap:var(--lv-space-3)}.lv-sub__row.astro-qe2sqeib .lv-field.astro-qe2sqeib{flex:1 1 14rem}@container (min-width: 52rem){.lv-sub--banner.astro-qe2sqeib .lv-sub__inner.astro-qe2sqeib,.lv-sub--inline.astro-qe2sqeib .lv-sub__inner.astro-qe2sqeib{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
/* components/act.transact/renderers/cart.astro */
.lv-cart.astro-b4hgcvhr{display:grid;gap:var(--lv-space-5);max-width:40rem}.lv-cart__lines.astro-b4hgcvhr{display:grid;gap:var(--lv-space-3);margin:0;padding:0;list-style:none}.lv-cart__line.astro-b4hgcvhr{display:grid;grid-template-columns:minmax(0,1fr) 4rem 6rem auto;gap:var(--lv-space-3);align-items:center;padding-block-end:var(--lv-space-3);border-block-end:1px solid var(--lv-line)}.lv-cart__name.astro-b4hgcvhr a.astro-b4hgcvhr{color:var(--lv-text-primary);text-decoration:none}.lv-cart__name.astro-b4hgcvhr a.astro-b4hgcvhr:hover{text-decoration:underline}.lv-cart__name.astro-b4hgcvhr a.astro-b4hgcvhr:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-cart__qty.astro-b4hgcvhr{inline-size:4rem;padding:var(--lv-space-2);border-radius:var(--lv-radius-sm);box-shadow:inset 0 0 0 1px var(--lv-line-strong);background:var(--lv-surface);color:var(--lv-text-primary);text-align:center}.lv-cart__qty.astro-b4hgcvhr:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-cart__price.astro-b4hgcvhr{text-align:end;color:var(--lv-text-secondary)}.lv-cart__remove.astro-b4hgcvhr{padding:var(--lv-space-2) var(--lv-space-3);border:0;border-radius:var(--lv-radius-sm);background:transparent;color:var(--lv-text-tertiary);font-size:var(--lv-text-xs);cursor:pointer;min-block-size:44px}.lv-cart__remove.astro-b4hgcvhr:hover{color:var(--lv-text-primary);background:var(--lv-surface-sunken)}.lv-cart__remove.astro-b4hgcvhr:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}@media (max-width: 30rem){.lv-cart__line.astro-b4hgcvhr{grid-template-columns:minmax(0,1fr) 3.5rem 5rem auto;gap:var(--lv-space-2)}}.lv-cart__totals.astro-b4hgcvhr{display:grid;gap:var(--lv-space-2);margin:0;padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-cart__totalrow.astro-b4hgcvhr{display:flex;justify-content:space-between;gap:var(--lv-space-4);margin:0;color:var(--lv-text-secondary)}.lv-cart__totalrow--total.astro-b4hgcvhr{padding-block-start:var(--lv-space-2);border-block-start:1px solid var(--lv-line-strong);font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-cart__field.astro-b4hgcvhr{display:grid;gap:var(--lv-space-2)}.lv-cart__terms.astro-b4hgcvhr{display:grid;gap:var(--lv-space-1);margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-cart__status.astro-b4hgcvhr[data-tone=warn]{padding:var(--lv-space-4);border-radius:var(--lv-radius-md);background:var(--lv-warn-surface);color:var(--lv-warn-text)}.lv-cart__status.astro-b4hgcvhr[data-tone=bad]{padding:var(--lv-space-4);border-radius:var(--lv-radius-md);background:var(--lv-bad-surface);color:var(--lv-bad-text)}
/* components/assert.personal-note/renderers/note.astro */
.lv-pnote.astro-6zfqlbxp{max-width:var(--lv-measure)}.lv-pnote__by.astro-6zfqlbxp{display:flex;align-items:center;gap:var(--lv-space-4);margin-block-start:var(--lv-space-6);padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-pnote__portrait.astro-6zfqlbxp{--tick: 0.5rem;display:inline-flex;flex:none;padding:3px;background:linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) left top / var(--tick) 1px no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) left top / 1px var(--tick) no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) right top / var(--tick) 1px no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) right top / 1px var(--tick) no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) left bottom / var(--tick) 1px no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) left bottom / 1px var(--tick) no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) right bottom / var(--tick) 1px no-repeat,linear-gradient(var(--lv-line-strong),var(--lv-line-strong)) right bottom / 1px var(--tick) no-repeat}.lv-pnote__portrait.astro-6zfqlbxp .lv-portrait.astro-6zfqlbxp{border-radius:var(--lv-radius-sm)}.lv-pnote__initials.astro-6zfqlbxp{display:grid;place-items:center;font:var(--lv-weight-bold) var(--lv-text-sm) / 1 var(--lv-font-mono);letter-spacing:0.04em;color:var(--lv-text-secondary);background:var(--lv-surface-sunken)}.lv-pnote__name.astro-6zfqlbxp{display:grid;gap:2px;margin:0;font-size:var(--lv-text-sm)}.lv-pnote__sig.astro-6zfqlbxp{margin-inline-start:auto;block-size:3rem;inline-size:auto;opacity:0.8}
/* components/assert.statement/renderers/statement.astro */
.lv-statement.astro-oxl7uqcw{max-width:46rem}.lv-statement--card.astro-oxl7uqcw{padding:var(--lv-space-7)}.lv-statement__text.astro-oxl7uqcw{margin:0;max-width:none;font-family:var(--lv-display-family, inherit);font-size:clamp(var(--lv-text-xl),5.2cqi,var(--lv-text-2xl));font-weight:var(--lv-weight-heading, var(--lv-weight-semibold));line-height:var(--lv-leading-tight);letter-spacing:var(--lv-display-tracking, var(--lv-tracking-heading));color:var(--lv-text-primary);text-wrap:balance}.lv-statement__accent.astro-oxl7uqcw{color:var(--lv-ink-accent, var(--lv-brand-strong));font-weight:var(--lv-weight-bold);font-style:italic}.lv-statement__support.astro-oxl7uqcw{margin:var(--lv-space-5) 0 0;max-width:var(--lv-measure);font-size:var(--lv-text-md);color:var(--lv-text-secondary);text-wrap:pretty}.lv-statement__sig.astro-oxl7uqcw{margin:var(--lv-space-6) 0 0;padding-block-start:var(--lv-space-3);position:relative;font:var(--lv-weight-medium) var(--lv-text-sm) / var(--lv-leading-snug) var(--lv-font-ui);color:var(--lv-text-tertiary)}.lv-statement__sig.astro-oxl7uqcw::before{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:2rem;block-size:1px;background:var(--lv-line-strong)}.lv-stmt-sec--dark.astro-oxl7uqcw{background:var(--lv-brand-strong);padding-inline:var(--lv-space-5);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}.lv-statement--card-dark.astro-oxl7uqcw{background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}
/* components/assert.value-map/renderers/map.astro */
.lv-vmap.astro-ohpcfcrl{position:relative;display:grid;gap:var(--lv-space-4)}.lv-vmap__statement.astro-ohpcfcrl{max-width:var(--lv-measure);margin:0 0 var(--lv-space-6);font-size:var(--lv-text-lg);font-weight:var(--lv-weight-medium);line-height:var(--lv-leading-snug);color:var(--lv-text-primary);text-wrap:pretty}.lv-vmap__cell.astro-ohpcfcrl.is-customer{background:var(--lv-surface-sunken)}.lv-vmap__points.astro-ohpcfcrl{display:grid;gap:var(--lv-space-2);margin:0;padding-inline-start:var(--lv-space-5);color:var(--lv-text-secondary)}.lv-vmap--vp-canvas.astro-ohpcfcrl .lv-vmap__points.astro-ohpcfcrl{padding-inline-start:0;list-style:none}.lv-vmap--vp-canvas.astro-ohpcfcrl .lv-vmap__points.astro-ohpcfcrl>li.astro-ohpcfcrl{position:relative;padding-inline-start:var(--lv-space-5)}.lv-vmap--vp-canvas.astro-ohpcfcrl .lv-vmap__points.astro-ohpcfcrl>li.astro-ohpcfcrl::before{content:"";position:absolute;inset-inline-start:0}.lv-vmap--vp-canvas.astro-ohpcfcrl .is-offer.astro-ohpcfcrl .lv-vmap__points.astro-ohpcfcrl>li.astro-ohpcfcrl::before{inset-block-start:0.3em;inline-size:0.62em;block-size:0.36em;background:linear-gradient(var(--lv-ink-accent, var(--lv-brand-strong)),var(--lv-ink-accent, var(--lv-brand-strong))) left / 2px 100% no-repeat,linear-gradient(var(--lv-ink-accent, var(--lv-brand-strong)),var(--lv-ink-accent, var(--lv-brand-strong))) bottom / 100% 2px no-repeat;transform:rotate(-50deg)}.lv-vmap--vp-canvas.astro-ohpcfcrl .is-customer.astro-ohpcfcrl .lv-vmap__points.astro-ohpcfcrl>li.astro-ohpcfcrl::before{inset-block-start:0.62em;inline-size:0.55em;block-size:2px;background:var(--lv-line-strong)}@container (min-width: 46rem){.lv-vmap--vp-canvas.astro-ohpcfcrl{grid-template-columns:repeat(2,minmax(0,1fr))}.lv-vmap--bmc.astro-ohpcfcrl{grid-template-columns:repeat(3,minmax(0,1fr))}}.lv-vmap--grouped.astro-ohpcfcrl{gap:var(--lv-space-3)}@container (min-width: 46rem){.lv-vmap--grouped.astro-ohpcfcrl{grid-auto-flow:row dense;align-items:start;gap:var(--lv-space-3) var(--lv-space-6)}.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__side--customer.astro-ohpcfcrl,.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__group--customer.astro-ohpcfcrl,.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__cell.astro-ohpcfcrl.is-customer{grid-column:1}.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__side--offer.astro-ohpcfcrl,.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__group--offer.astro-ohpcfcrl,.lv-vmap--grouped.astro-ohpcfcrl .lv-vmap__cell.astro-ohpcfcrl.is-offer{grid-column:2}}.lv-vmap__side.astro-ohpcfcrl{margin:0;padding-block-end:var(--lv-space-2);font:var(--lv-weight-bold) var(--lv-text-sm) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-vmap__side--customer.astro-ohpcfcrl{color:var(--lv-text-tertiary)}.lv-vmap__side--offer.astro-ohpcfcrl{color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-vmap__group.astro-ohpcfcrl{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:var(--lv-space-4) 0 0;padding-block-end:var(--lv-space-2);border-block-end:1px solid var(--lv-line);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);color:var(--lv-text-tertiary)}.lv-vmap__group.astro-ohpcfcrl:first-of-type{margin-block-start:0}.lv-vmap__count.astro-ohpcfcrl{display:inline-grid;place-items:center;min-inline-size:1.25rem;block-size:1.25rem;padding-inline:0.35rem;border-radius:var(--lv-radius-pill);background:var(--lv-surface-raised);color:var(--lv-text-secondary);font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-mono);font-feature-settings:"tnum" 1}.lv-vmap__cell--grouped.astro-ohpcfcrl{padding-block-start:var(--lv-space-4)}.lv-vmap__connector.astro-ohpcfcrl{display:none}@container (min-width: 46rem){.lv-vmap--vp-canvas.astro-ohpcfcrl .lv-vmap__connector.astro-ohpcfcrl{display:block;position:absolute;inset-block-start:var(--lv-space-6);inset-inline-start:50%;z-index:1;transform:translateX(-50%)}}.lv-vmap__dot.astro-ohpcfcrl{display:block;inline-size:10px;block-size:10px;border-radius:50%;background:var(--lv-surface);box-shadow:0 0 0 3px var(--lv-ink-accent, var(--lv-brand-strong))}
/* components/browse.content-set/renderers/list.astro */
.lv-grid.astro-ohstvpyc{display:flex;flex-wrap:wrap;justify-content:center}.lv-cset__item.astro-ohstvpyc{position:relative;flex:1 1 min(17rem,100%)}@container (min-width: 56rem){.lv-cset__item.astro-ohstvpyc{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:first-child:nth-last-child(2),.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:first-child:nth-last-child(2)~.lv-cset__item.astro-ohstvpyc{max-inline-size:calc((100% - var(--lv-space-5)) / 2)}}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:only-child{max-inline-size:none;flex-basis:100%}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:only-child .lv-media.astro-ohstvpyc{aspect-ratio:21 / 9}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc{transition:transform var(--lv-dur-state) var(--lv-ease),box-shadow var(--lv-dur-state) var(--lv-ease)}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:has(a:hover){transform:translateY(-6px);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-cset--cards.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc:has(a:active){transform:translateY(-3px)}.lv-cset__item.astro-ohstvpyc .lv-media.astro-ohstvpyc img.astro-ohstvpyc{transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-cset__item.astro-ohstvpyc:has(a:hover) .lv-media.astro-ohstvpyc img.astro-ohstvpyc{transform:scale(1.045)}.lv-cset__rank.astro-ohstvpyc{margin:0;font-size:var(--lv-text-xs);font-weight:var(--lv-weight-bold);color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-cset__item.astro-ohstvpyc a.astro-ohstvpyc{color:var(--lv-text-primary);text-decoration:none}.lv-cset__item.astro-ohstvpyc a.astro-ohstvpyc:hover{text-decoration:underline}.lv-cset__why.astro-ohstvpyc{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-cset--rows.astro-ohstvpyc .lv-cset__item.astro-ohstvpyc{display:grid;gap:var(--lv-space-1)}.lv-cset__cats.astro-ohstvpyc{margin-block-end:var(--lv-space-5)}.lv-cset__catbtn.astro-ohstvpyc[aria-pressed=true]{background:var(--lv-brand-soft);color:var(--lv-brand-strong);box-shadow:inset 0 0 0 1px var(--lv-brand-strong);font-weight:var(--lv-weight-semibold)}.lv-cset__search.astro-ohstvpyc{max-inline-size:22rem;margin-block-end:var(--lv-space-5)}.lv-cset__letter.astro-ohstvpyc{flex-basis:100%;margin:var(--lv-space-6) 0 var(--lv-space-2);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);color:var(--lv-text-tertiary)}.lv-cset__letter.astro-ohstvpyc:first-child{margin-block-start:0;padding-block-start:0;border-block-start:0}.lv-cset__item.astro-ohstvpyc[hidden],.lv-cset__letter.astro-ohstvpyc[hidden]{display:none}.lv-cset__empty-filtered.astro-ohstvpyc{margin-block-start:var(--lv-space-5);padding:var(--lv-space-6);text-align:center;border:1px dashed var(--lv-line-strong);border-radius:var(--lv-radius-lg);color:var(--lv-text-tertiary);font-size:var(--lv-text-sm)}
/* components/browse.content-set/renderers/ordinal-index.astro */
.lv-cidx__list.astro-ztmseqdy{margin:0;padding:0;list-style:none;border-block-end:1px solid var(--lv-line)}.lv-cidx__row.astro-ztmseqdy{display:grid;grid-template-columns:auto minmax(0,1fr);column-gap:var(--lv-space-5);row-gap:var(--lv-space-2);align-items:baseline;padding-block:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}@container (min-width: 46rem){.lv-cidx__row.astro-ztmseqdy{grid-template-columns:auto minmax(0,1fr) auto;column-gap:var(--lv-space-7)}}.lv-cidx__num.astro-ztmseqdy{align-self:start;font-size:clamp(1.6rem,1.1rem + 1.8cqi,2.5rem);font-weight:300;line-height:1;letter-spacing:-0.02em;color:var(--lv-text-tertiary);transition:color var(--lv-dur-state) var(--lv-ease)}.lv-cidx__row.astro-ztmseqdy:has(a:hover) .lv-cidx__num.astro-ztmseqdy,.lv-cidx__row.astro-ztmseqdy:has(a:focus-visible) .lv-cidx__num.astro-ztmseqdy{color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-cidx__body.astro-ztmseqdy{min-inline-size:0}.lv-cidx__title.astro-ztmseqdy{margin:0;font-size:var(--lv-text-md);line-height:var(--lv-leading-snug)}.lv-cidx__title.astro-ztmseqdy a.astro-ztmseqdy{display:inline-flex;align-items:baseline;gap:var(--lv-space-2);min-block-size:24px;color:var(--lv-text-primary);text-decoration:none}.lv-cidx__title.astro-ztmseqdy a.astro-ztmseqdy:hover span.astro-ztmseqdy{text-decoration:underline}.lv-cidx__arrow.astro-ztmseqdy{flex:none;inline-size:0.8em;block-size:0.8em;color:var(--lv-ink-accent, var(--lv-brand-strong));transition:transform var(--lv-dur-state) var(--lv-ease)}.lv-cidx__row.astro-ztmseqdy:has(a:hover) .lv-cidx__arrow.astro-ztmseqdy,.lv-cidx__row.astro-ztmseqdy:has(a:focus-visible) .lv-cidx__arrow.astro-ztmseqdy{transform:translateX(3px)}.lv-cidx__summary.astro-ztmseqdy{max-width:var(--lv-measure);margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-cidx__why.astro-ztmseqdy{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-cidx__meta.astro-ztmseqdy{margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary);font-variant-numeric:tabular-nums}@container (min-width: 46rem){.lv-cidx__meta.astro-ztmseqdy{text-align:end}}
/* components/browse.downloads/renderers/files.astro */
.lv-files.astro-mergjue3{max-width:48rem}.lv-files__row.astro-mergjue3{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--lv-space-1) var(--lv-space-4);align-items:center}.lv-files__link.astro-mergjue3{display:flex;align-items:center;gap:var(--lv-space-3);min-block-size:44px;color:var(--lv-text-primary);text-decoration:none}.lv-files__link.astro-mergjue3:hover .lv-files__title.astro-mergjue3{text-decoration:underline}.lv-files__type.astro-mergjue3{flex:none;padding:2px var(--lv-space-2);border-radius:var(--lv-radius-sm);background:var(--lv-surface-sunken);font-size:var(--lv-text-2xs);color:var(--lv-text-tertiary);text-transform:uppercase}.lv-files__meta.astro-mergjue3{display:flex;gap:var(--lv-space-3);margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/browse.entity-set/renderers/entities.astro */
.lv-grid.astro-npmx6avb{display:flex;flex-wrap:wrap;justify-content:center}.lv-ent.astro-npmx6avb{flex:1 1 min(17rem,100%)}@container (min-width: 56rem){.lv-ent.astro-npmx6avb{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}.lv-ent.astro-npmx6avb:first-child:nth-last-child(2),.lv-ent.astro-npmx6avb:first-child:nth-last-child(2)~.lv-ent.astro-npmx6avb{max-inline-size:calc((100% - var(--lv-space-5)) / 2)}}.lv-ent.astro-npmx6avb:only-child{max-inline-size:none;flex-basis:100%}.lv-ent.astro-npmx6avb:only-child .lv-media.astro-npmx6avb{aspect-ratio:21 / 9}.lv-ent.astro-npmx6avb{transition:transform var(--lv-dur-state) var(--lv-ease),box-shadow var(--lv-dur-state) var(--lv-ease)}.lv-ent.astro-npmx6avb:has(a:hover){transform:translateY(-6px);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-ent.astro-npmx6avb:has(a:active){transform:translateY(-3px)}.lv-ent.astro-npmx6avb .lv-media.astro-npmx6avb img.astro-npmx6avb{transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-ent.astro-npmx6avb:has(a:hover) .lv-media.astro-npmx6avb img.astro-npmx6avb{transform:scale(1.045)}.lv-ent__top.astro-npmx6avb{display:flex;align-items:center;gap:var(--lv-space-3);margin:0}.lv-ent__score.astro-npmx6avb{font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-ent__of.astro-npmx6avb{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-ent.astro-npmx6avb a.astro-npmx6avb{color:var(--lv-text-primary);text-decoration:none}.lv-ent.astro-npmx6avb a.astro-npmx6avb:hover{text-decoration:underline}
/* components/browse.event-set/renderers/events.astro */
.lv-events__item.astro-sgmel5iy{display:grid;gap:var(--lv-space-2) var(--lv-space-5);align-items:start}.lv-events__when.astro-sgmel5iy{display:grid;gap:2px;margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-primary)}@container (min-width: 44rem){.lv-events__item.astro-sgmel5iy{grid-template-columns:14rem minmax(0,1fr) auto;align-items:center}}
/* components/browse.feature-one/renderers/feature.astro */
.lv-feature__shell.astro-fnbrv26q{border-radius:var(--lv-radius-lg)}.lv-feature__badge.astro-fnbrv26q{margin-block-end:var(--lv-space-2)}.lv-feature__price.astro-fnbrv26q{margin:var(--lv-space-4) 0 0;font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-feature__facts.astro-fnbrv26q{margin-block-start:var(--lv-space-5);font-size:var(--lv-text-sm)}.lv-feature__actions.astro-fnbrv26q{margin-block-start:var(--lv-space-6)}
/* components/browse.image-set/renderers/gallery-cinematic.astro */
.lv-gallery__filters.astro-ffpman4s{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--lv-space-3);margin-block-end:var(--lv-space-5)}.lv-gallery__filter.astro-ffpman4s[aria-pressed=true]{background:var(--lv-brand-soft);color:var(--lv-brand-strong);box-shadow:inset 0 0 0 1px var(--lv-brand-strong);font-weight:var(--lv-weight-semibold)}.lv-gallery__count.astro-ffpman4s{margin:0;font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;color:var(--lv-text-tertiary)}.lv-gallery__none.astro-ffpman4s{margin:0;padding-block:var(--lv-space-6);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-gallery__item.astro-ffpman4s[hidden],.lv-gallery__none.astro-ffpman4s[hidden]{display:none}.lv-gallery__list.astro-ffpman4s{margin:0;padding:0;list-style:none;display:grid;gap:var(--lv-space-5);grid-template-columns:repeat(auto-fit,minmax(min(17rem,100%),1fr))}.lv-gallery__fig.astro-ffpman4s{margin:0;position:relative}.lv-gallery__fig.astro-ffpman4s .lv-media.astro-ffpman4s{position:relative}.lv-media.astro-ffpman4s{aspect-ratio:4 / 3}.lv-gallery__fig.astro-ffpman4s .lv-media.astro-ffpman4s{overflow:hidden;border-radius:var(--lv-radius-sm);background:var(--lv-surface-sunken);box-shadow:inset 0 0 0 1px var(--lv-line);transition:box-shadow var(--lv-dur-fast) var(--lv-ease)}.lv-gallery__fig.astro-ffpman4s:hover .lv-media.astro-ffpman4s,.lv-gallery__fig.astro-ffpman4s:focus-within .lv-media.astro-ffpman4s{box-shadow:inset 0 0 0 1px var(--lv-brand-strong)}.lv-gallery__fig.astro-ffpman4s .lv-media.astro-ffpman4s img.astro-ffpman4s{inline-size:100%;block-size:100%;object-fit:cover;transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-gallery__fig.astro-ffpman4s:hover .lv-media.astro-ffpman4s img.astro-ffpman4s,.lv-gallery__fig.astro-ffpman4s:focus-within .lv-media.astro-ffpman4s img.astro-ffpman4s{transform:scale(1.03)}.lv-gallery__ordinal.astro-ffpman4s{position:absolute;inset-block-start:var(--lv-space-3);inset-inline-start:var(--lv-space-3);z-index:1;font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-label);color:var(--lv-text-on-brand);mix-blend-mode:difference;transition:color var(--lv-dur-fast) var(--lv-ease)}.lv-gallery__cap.astro-ffpman4s{display:block;margin-block-start:var(--lv-space-3);font-size:var(--lv-text-xs);letter-spacing:var(--lv-tracking-label);color:var(--lv-text-tertiary)}.lv-gallery--cap-none.astro-ffpman4s .lv-gallery__cap.astro-ffpman4s span.astro-ffpman4s:not(.lv-vh){display:none}.lv-gallery--cap-overlay.astro-ffpman4s .lv-gallery__cap.astro-ffpman4s,.lv-gallery--cap-scrim.astro-ffpman4s .lv-gallery__cap.astro-ffpman4s{position:absolute;inset:auto 0 0 0;margin:0;padding:var(--lv-space-6) var(--lv-space-3) var(--lv-space-3);background:linear-gradient(to top,rgb(var(--lv-glass-under) / 0.78) 0%,rgb(var(--lv-glass-under) / 0) 100%);color:var(--lv-text-on-brand)}.lv-gallery__expand.astro-ffpman4s{display:none}.astro-ffpman4s[data-lv-ready] .lv-gallery__expand.astro-ffpman4s{display:block;position:absolute;inset:0;z-index:2;border:0;margin:0;padding:0;background:transparent;cursor:zoom-in}.lv-gallery__expand.astro-ffpman4s:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}@container (min-width: 46rem){.lv-gallery--bento.astro-ffpman4s .lv-gallery__list.astro-ffpman4s{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:12rem}.lv-gallery--bento.astro-ffpman4s .lv-media.astro-ffpman4s{block-size:100%;aspect-ratio:auto}.lv-gallery--bento.astro-ffpman4s .lv-gallery__fig.astro-ffpman4s{block-size:100%}.lv-gallery--bento.astro-ffpman4s .is-2x1.astro-ffpman4s{grid-column:span 2}.lv-gallery--bento.astro-ffpman4s .is-2x2.astro-ffpman4s{grid-column:span 2;grid-row:span 2}.lv-gallery--bento.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:only-child{grid-column:1 / -1;grid-row:span 2}.lv-gallery--bento.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:first-child:nth-last-child(2),.lv-gallery--bento.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:first-child:nth-last-child(2)~.lv-gallery__item.astro-ffpman4s{grid-column:span 2;grid-row:span 2}}.lv-gallery--masonry.astro-ffpman4s .lv-gallery__list.astro-ffpman4s{display:block;columns:1;column-gap:var(--lv-space-5)}@container (min-width: 33rem){.lv-gallery--masonry.astro-ffpman4s .lv-gallery__list.astro-ffpman4s{columns:2}}@container (min-width: 50rem){.lv-gallery--masonry.astro-ffpman4s .lv-gallery__list.astro-ffpman4s{columns:3}}.lv-gallery--masonry.astro-ffpman4s .lv-gallery__item.astro-ffpman4s{break-inside:avoid;margin-block-end:var(--lv-space-5)}.lv-gallery--masonry.astro-ffpman4s .lv-media.astro-ffpman4s{aspect-ratio:auto}.lv-gallery--masonry.astro-ffpman4s .lv-gallery__list.astro-ffpman4s:has(> .lv-gallery__item:first-child:nth-last-child(1)){columns:1}.lv-gallery--rail.astro-ffpman4s .lv-gallery__list.astro-ffpman4s{grid-auto-flow:column;grid-auto-columns:minmax(min(18rem,80%),1fr);grid-template-columns:none;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scroll-padding-inline:var(--lv-space-4)}.lv-gallery--rail.astro-ffpman4s .lv-gallery__item.astro-ffpman4s{scroll-snap-align:start}.lv-gallery--grid.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:only-child,.lv-gallery--rail.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:only-child{grid-column:1 / -1}.lv-gallery--grid.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:only-child .lv-media.astro-ffpman4s,.lv-gallery--rail.astro-ffpman4s .lv-gallery__item.astro-ffpman4s:only-child .lv-media.astro-ffpman4s{aspect-ratio:21 / 9}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-gallery--frame.astro-ffpman4s .lv-gallery__item.astro-ffpman4s{animation:lv-gallery-frame linear both;animation-timeline:view();animation-range:entry 8% entry 62%}@keyframes lv-gallery-frame{from{scale:0.985}to{scale:1}}}}
/* components/browse.image-set/renderers/gallery-filtered.astro */
.lv-gallery__filters.astro-xnk36krw{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--lv-space-3);margin-block-end:var(--lv-space-6)}.lv-gallery__rail.astro-xnk36krw{flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;padding-block-end:var(--lv-space-1)}.lv-gallery__rail.astro-xnk36krw .lv-chip.astro-xnk36krw{scroll-snap-align:start;flex:0 0 auto;min-block-size:44px;display:inline-flex;align-items:center}.lv-gallery__filter.astro-xnk36krw[aria-pressed=true]{background:var(--lv-brand-soft);color:var(--lv-brand-strong);box-shadow:inset 0 0 0 1px var(--lv-brand-strong);font-weight:var(--lv-weight-semibold)}.lv-gallery__count.astro-xnk36krw{margin:0;font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-label);color:var(--lv-text-tertiary)}.lv-gallery__none.astro-xnk36krw{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3);margin:0;padding-block:var(--lv-space-6);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-gallery__reset.astro-xnk36krw{min-block-size:44px;border:0;padding-inline:var(--lv-space-3);background:transparent;color:var(--lv-brand-strong);font:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}.lv-gallery__item.astro-xnk36krw[hidden],.lv-gallery__none.astro-xnk36krw[hidden]{display:none}.lv-gallery__list.astro-xnk36krw{margin:0;padding:0;list-style:none;display:grid;gap:var(--lv-space-4);grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}.lv-gallery__fig.astro-xnk36krw{margin:0;position:relative}.lv-gallery__fig.astro-xnk36krw .lv-media.astro-xnk36krw{position:relative;overflow:hidden;border-radius:var(--lv-radius-sm);background:var(--lv-surface-sunken);aspect-ratio:4 / 3}.lv-gallery__fig.astro-xnk36krw .lv-media.astro-xnk36krw img.astro-xnk36krw{inline-size:100%;block-size:100%;object-fit:cover;transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-gallery__fig.astro-xnk36krw:hover .lv-media.astro-xnk36krw img.astro-xnk36krw,.lv-gallery__fig.astro-xnk36krw:focus-within .lv-media.astro-xnk36krw img.astro-xnk36krw{transform:scale(1.04)}.lv-gallery__item.astro-xnk36krw:only-child{grid-column:1 / -1}.lv-gallery__item.astro-xnk36krw:only-child .lv-media.astro-xnk36krw{aspect-ratio:21 / 9}.lv-gallery__cap.astro-xnk36krw{display:block;margin-block-start:var(--lv-space-2);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-gallery--cap-none.astro-xnk36krw .lv-gallery__cap.astro-xnk36krw span.astro-xnk36krw:not(.lv-vh){display:none}.lv-gallery--cap-overlay.astro-xnk36krw .lv-gallery__cap.astro-xnk36krw,.lv-gallery--cap-scrim.astro-xnk36krw .lv-gallery__cap.astro-xnk36krw{position:absolute;inset:auto 0 0 0;margin:0;padding:var(--lv-space-6) var(--lv-space-3) var(--lv-space-3);background:linear-gradient(to top,rgb(var(--lv-glass-under) / 0.78) 0%,rgb(var(--lv-glass-under) / 0) 100%);color:var(--lv-text-on-brand)}.lv-gallery__expand.astro-xnk36krw{display:none}.astro-xnk36krw[data-lv-ready] .lv-gallery__expand.astro-xnk36krw{display:block;position:absolute;inset:0;z-index:1;border:0;margin:0;padding:0;background:transparent;cursor:zoom-in}.lv-gallery__expand.astro-xnk36krw:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}.lv-gallery__expand-icon.astro-xnk36krw{position:absolute;inset-block-end:var(--lv-space-2);inset-inline-end:var(--lv-space-2);display:grid;place-items:center;inline-size:44px;block-size:44px;border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:var(--lv-lift-2);color:var(--lv-text-primary);transition:background-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease)}.lv-gallery__fig.astro-xnk36krw:hover .lv-gallery__expand-icon.astro-xnk36krw,.lv-gallery__expand.astro-xnk36krw:focus-visible .lv-gallery__expand-icon.astro-xnk36krw{background:var(--lv-brand-strong);color:var(--lv-text-on-brand)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-gallery--board.astro-xnk36krw .lv-gallery__item.astro-xnk36krw{animation:lv-gallery-board linear both;animation-timeline:view();animation-range:entry 6% entry 58%}@keyframes lv-gallery-board{from{scale:0.98}to{scale:1}}}}
/* components/browse.image-set/renderers/gallery-focus-rail.astro */
.lv-gallery__filters.astro-7zqaum2l{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--lv-space-3);margin-block-end:var(--lv-space-5)}.lv-gallery__filter.astro-7zqaum2l[aria-pressed=true]{background:var(--lv-brand-soft);color:var(--lv-brand-strong);box-shadow:inset 0 0 0 1px var(--lv-brand-strong);font-weight:var(--lv-weight-semibold)}.lv-gallery__count.astro-7zqaum2l{margin:0;font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;color:var(--lv-text-tertiary)}.lv-gallery__none.astro-7zqaum2l{margin:0;padding-block:var(--lv-space-6);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-gallery__item.astro-7zqaum2l[hidden],.lv-gallery__none.astro-7zqaum2l[hidden]{display:none}.lv-gallery__list.astro-7zqaum2l{margin:0;padding:0;list-style:none;display:grid;grid-auto-flow:column;grid-auto-columns:min(78%,20rem);gap:var(--lv-space-4);overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:50%;padding-block-end:var(--lv-space-3)}@container (min-width: 46rem){.lv-gallery__list.astro-7zqaum2l{grid-auto-columns:min(52%,26rem)}}.lv-gallery__item.astro-7zqaum2l{scroll-snap-align:center}.lv-gallery__list.astro-7zqaum2l:has(> .lv-gallery__item:first-child:nth-last-child(-n + 3)){grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr));overflow-x:visible;scroll-snap-type:none;scroll-padding-inline:0}.lv-gallery__fig.astro-7zqaum2l{margin:0;position:relative}.lv-gallery__fig.astro-7zqaum2l .lv-media.astro-7zqaum2l{position:relative;overflow:hidden;border-radius:var(--lv-radius-sm);background:var(--lv-surface-sunken);aspect-ratio:4 / 3}.lv-gallery--masonry.astro-7zqaum2l .lv-media.astro-7zqaum2l{aspect-ratio:3 / 4}.lv-gallery--bento.astro-7zqaum2l .lv-media.astro-7zqaum2l{aspect-ratio:16 / 9}.lv-gallery__fig.astro-7zqaum2l .lv-media.astro-7zqaum2l img.astro-7zqaum2l{inline-size:100%;block-size:100%;object-fit:cover}.lv-gallery__cap.astro-7zqaum2l{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-2);margin-block-start:var(--lv-space-2);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-gallery__index.astro-7zqaum2l{font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-label);color:var(--lv-text-quaternary, var(--lv-text-tertiary))}.lv-gallery--cap-none.astro-7zqaum2l .lv-gallery__cap.astro-7zqaum2l span.astro-7zqaum2l:not(.lv-vh):not(.lv-gallery__index){display:none}.lv-gallery__progress.astro-7zqaum2l{display:none}.lv-gallery__expand.astro-7zqaum2l{display:none}.astro-7zqaum2l[data-lv-ready] .lv-gallery__expand.astro-7zqaum2l{display:block;position:absolute;inset:0;z-index:1;border:0;margin:0;padding:0;background:transparent;cursor:zoom-in}.lv-gallery__expand.astro-7zqaum2l:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view(inline)){.lv-gallery--passing.astro-7zqaum2l .lv-gallery__list.astro-7zqaum2l:has(> .lv-gallery__item:nth-child(4)) .lv-gallery__fig.astro-7zqaum2l{animation:lv-gallery-grade linear both;animation-timeline:view(inline)}@keyframes lv-gallery-grade{0%,100%{opacity:0.62;filter:saturate(0.55)}42%,58%{opacity:1;filter:none}}}@supports (timeline-scope: --lv-gallery-rail){.lv-gallery--passing.astro-7zqaum2l .lv-sec__inner.astro-7zqaum2l{timeline-scope:--lv-gallery-rail}.lv-gallery--passing.astro-7zqaum2l .lv-gallery__list.astro-7zqaum2l{scroll-timeline:--lv-gallery-rail inline}.lv-gallery--passing.astro-7zqaum2l .lv-gallery__list.astro-7zqaum2l:has(> .lv-gallery__item:nth-child(4))~.lv-gallery__progress.astro-7zqaum2l{display:block;block-size:2px;margin-block-start:var(--lv-space-3);background:var(--lv-line)}.lv-gallery--passing.astro-7zqaum2l .lv-gallery__list.astro-7zqaum2l:has(> .lv-gallery__item:nth-child(4))~.lv-gallery__progress.astro-7zqaum2l .lv-gallery__progress-bar.astro-7zqaum2l{display:block;block-size:100%;background:var(--lv-brand-strong);transform-origin:left center;animation:lv-gallery-progress linear both;animation-timeline:--lv-gallery-rail}@keyframes lv-gallery-progress{from{scale:0.02 1}to{scale:1 1}}}}
/* components/browse.image-set/renderers/gallery.astro */
.lv-gallery__filters.astro-vqv3q2am{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--lv-space-3);margin-block-end:var(--lv-space-5)}.lv-gallery__filter.astro-vqv3q2am[aria-pressed=true]{background:var(--lv-brand-soft);color:var(--lv-brand-strong);box-shadow:inset 0 0 0 1px var(--lv-brand-strong);font-weight:var(--lv-weight-semibold)}.lv-gallery__count.astro-vqv3q2am{margin:0;font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;color:var(--lv-text-tertiary)}.lv-gallery__none.astro-vqv3q2am{margin:0;padding-block:var(--lv-space-6);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-gallery__item.astro-vqv3q2am[hidden],.lv-gallery__none.astro-vqv3q2am[hidden]{display:none}.lv-gallery__list.astro-vqv3q2am{margin:0;padding:0;list-style:none;display:grid;gap:var(--lv-space-4);grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}.lv-gallery--grid.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{display:flex;flex-wrap:wrap;justify-content:center}.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am{flex:1 1 min(15rem,100%)}@container (min-width: 48rem){.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am{max-inline-size:calc((100% - 2 * var(--lv-space-4)) / 3)}.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:first-child:nth-last-child(2),.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:first-child:nth-last-child(2)~.lv-gallery__item.astro-vqv3q2am{max-inline-size:calc((100% - var(--lv-space-4)) / 2)}}.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:only-child{max-inline-size:none;flex-basis:100%}.lv-gallery--grid.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:only-child .lv-media.astro-vqv3q2am{aspect-ratio:21 / 9}.lv-gallery__fig.astro-vqv3q2am{margin:0;position:relative}.lv-gallery__fig.astro-vqv3q2am .lv-media.astro-vqv3q2am{position:relative}.lv-gallery--grid.astro-vqv3q2am .lv-media.astro-vqv3q2am{aspect-ratio:4 / 3}.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{display:block;columns:1;column-gap:var(--lv-space-4)}@container (min-width: 33rem){.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{columns:2}}@container (min-width: 50rem){.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{columns:3}}.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am{break-inside:avoid;margin-block-end:var(--lv-space-4)}.lv-gallery--masonry.astro-vqv3q2am .lv-media.astro-vqv3q2am{aspect-ratio:auto}@container (min-width: 33rem){.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am:has(> .lv-gallery__item:first-child:nth-last-child(-n + 4)){columns:2}}.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am:has(> .lv-gallery__item:first-child:nth-last-child(1)){columns:1}.lv-gallery--masonry.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:only-child .lv-media.astro-vqv3q2am{aspect-ratio:21 / 9}.lv-gallery--rail.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{grid-auto-flow:column;grid-auto-columns:minmax(min(16rem,78%),1fr);grid-template-columns:none;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scroll-padding-inline:var(--lv-space-4);padding-block-end:var(--lv-space-3)}.lv-gallery--rail.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am{scroll-snap-align:start}.lv-gallery--rail.astro-vqv3q2am .lv-media.astro-vqv3q2am{aspect-ratio:4 / 3}.lv-gallery--rail.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am:has(> .lv-gallery__item:first-child:nth-last-child(-n + 3)){grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr));overflow-x:visible;scroll-snap-type:none}.lv-gallery__cap.astro-vqv3q2am{display:block;margin-block-start:var(--lv-space-2);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-gallery--cap-none.astro-vqv3q2am .lv-gallery__cap.astro-vqv3q2am span.astro-vqv3q2am:not(.lv-vh){display:none}.lv-gallery--cap-overlay.astro-vqv3q2am .lv-gallery__cap.astro-vqv3q2am{position:absolute;inset-block-end:var(--lv-space-2);inset-inline-start:var(--lv-space-2);margin:0;padding:2px var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface);color:var(--lv-text-primary)}.lv-gallery--cap-scrim.astro-vqv3q2am .lv-gallery__cap.astro-vqv3q2am{position:absolute;inset:auto 0 0 0;margin:0;padding:var(--lv-space-6) var(--lv-space-3) var(--lv-space-3);background:linear-gradient(to top,rgb(var(--lv-glass-under) / 0.78) 0%,rgb(var(--lv-glass-under) / 0) 100%);color:var(--lv-text-on-brand);font-weight:var(--lv-weight-medium)}@media (prefers-reduced-motion: no-preference){@media (hover: hover){.lv-gallery--cap-scrim.astro-vqv3q2am .lv-gallery__cap.astro-vqv3q2am{opacity:0;transition:opacity var(--lv-dur-state) var(--lv-ease)}.lv-gallery--cap-scrim.astro-vqv3q2am .lv-gallery__fig.astro-vqv3q2am:hover .lv-gallery__cap.astro-vqv3q2am,.lv-gallery--cap-scrim.astro-vqv3q2am .lv-gallery__fig.astro-vqv3q2am:focus-within .lv-gallery__cap.astro-vqv3q2am{opacity:1}}}.lv-gallery__fig.astro-vqv3q2am .lv-media.astro-vqv3q2am img.astro-vqv3q2am{transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-gallery__fig.astro-vqv3q2am:hover .lv-media.astro-vqv3q2am img.astro-vqv3q2am,.lv-gallery__fig.astro-vqv3q2am:focus-within .lv-media.astro-vqv3q2am img.astro-vqv3q2am{transform:scale(1.045)}@container (min-width: 46rem){.lv-gallery--bento.astro-vqv3q2am .lv-gallery__list.astro-vqv3q2am{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:12rem}.lv-gallery--bento.astro-vqv3q2am .lv-media.astro-vqv3q2am{block-size:100%;aspect-ratio:auto}.lv-gallery--bento.astro-vqv3q2am .lv-gallery__fig.astro-vqv3q2am{block-size:100%}.lv-gallery--bento.astro-vqv3q2am .is-2x1.astro-vqv3q2am{grid-column:span 2}.lv-gallery--bento.astro-vqv3q2am .is-2x2.astro-vqv3q2am{grid-column:span 2;grid-row:span 2}.lv-gallery--bento.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:only-child{grid-column:1 / -1;grid-row:span 2}.lv-gallery--bento.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:first-child:nth-last-child(2),.lv-gallery--bento.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am:first-child:nth-last-child(2)~.lv-gallery__item.astro-vqv3q2am{grid-column:span 2;grid-row:span 2}}.lv-gallery__expand.astro-vqv3q2am{display:none}.astro-vqv3q2am[data-lv-ready] .lv-gallery__expand.astro-vqv3q2am{display:block;position:absolute;inset:0;z-index:1;border:0;margin:0;padding:0;background:transparent;cursor:zoom-in}.lv-gallery__expand.astro-vqv3q2am:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}.lv-gallery__expand-icon.astro-vqv3q2am{position:absolute;inset-block-end:var(--lv-space-2);inset-inline-end:var(--lv-space-2);display:grid;place-items:center;inline-size:44px;block-size:44px;border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:var(--lv-lift-2);color:var(--lv-text-primary);transition:background-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease),transform var(--lv-dur-fast) var(--lv-ease)}.lv-gallery__fig.astro-vqv3q2am:hover .lv-gallery__expand-icon.astro-vqv3q2am,.lv-gallery__expand.astro-vqv3q2am:focus-visible .lv-gallery__expand-icon.astro-vqv3q2am{background:var(--lv-brand-strong);color:var(--lv-text-on-brand);transform:translateY(-1px)}.lv-gallery__expand.astro-vqv3q2am:active .lv-gallery__expand-icon.astro-vqv3q2am{transform:translateY(0) scale(0.94)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-gallery--album.astro-vqv3q2am .lv-gallery__item.astro-vqv3q2am{animation:lv-gallery-settle linear both;animation-timeline:view();animation-range:entry 8% entry 62%}@keyframes lv-gallery-settle{from{scale:0.985}to{scale:1}}}}
/* components/browse.jobs/renderers/jobs.astro */
.lv-jobs.astro-lrvbhrph{max-width:52rem}.lv-jobs__row.astro-lrvbhrph{display:grid;gap:var(--lv-space-1)}.lv-jobs__row.astro-lrvbhrph a.astro-lrvbhrph{color:var(--lv-text-primary);text-decoration:none}.lv-jobs__row.astro-lrvbhrph a.astro-lrvbhrph:hover{text-decoration:underline}.lv-jobs__meta.astro-lrvbhrph{display:flex;flex-wrap:wrap;gap:var(--lv-space-2) var(--lv-space-4);margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-jobs__note.astro-lrvbhrph{max-width:var(--lv-measure);margin-block-start:var(--lv-space-5);font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}
/* components/browse.locations/renderers/locations.astro */
.lv-locs.astro-z4skted2{display:grid;gap:var(--lv-space-5)}.lv-locs__search.astro-z4skted2{max-width:26rem}.lv-locs__list.astro-z4skted2{display:grid;gap:var(--lv-space-4);margin:0;padding:0;list-style:none}@container (min-width: 46rem){.lv-locs__list.astro-z4skted2{display:flex;flex-wrap:wrap;justify-content:center}.lv-locs__list.astro-z4skted2 .lv-map__entry{flex:1 1 min(16rem,100%);max-inline-size:calc((100% - 2 * var(--lv-space-4)) / 3)}}
/* components/browse.narrow/renderers/narrow.astro */
.lv-narrow.astro-d7os52sd{display:grid;gap:var(--lv-space-4);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-narrow__heading.astro-d7os52sd{margin:0}.lv-narrow__facet.astro-d7os52sd{border:0;margin:0;padding:0}.lv-narrow__facet.astro-d7os52sd legend.astro-d7os52sd{padding:0;margin-block-end:var(--lv-space-2)}.lv-narrow__value.astro-d7os52sd{cursor:pointer}.lv-narrow__value.astro-d7os52sd:has(input:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}.lv-narrow__facets.astro-d7os52sd{display:grid;gap:var(--lv-space-4)}.lv-narrow__range.astro-d7os52sd{display:flex;align-items:center;gap:var(--lv-space-2);max-inline-size:16rem}.lv-narrow__range-field.astro-d7os52sd{flex:1 1 0;min-inline-size:0}.lv-narrow__range-field.astro-d7os52sd input.astro-d7os52sd{inline-size:100%;font-variant-numeric:tabular-nums;font-family:var(--lv-font-mono)}.lv-narrow__range-sep.astro-d7os52sd{flex:none;color:var(--lv-text-tertiary)}.lv-narrow__sort.astro-d7os52sd{display:grid;gap:var(--lv-space-2);margin:0}.lv-narrow__sort.astro-d7os52sd select.astro-d7os52sd{min-block-size:var(--lv-field-height);padding-inline:var(--lv-field-padding-x);border-radius:var(--lv-field-radius);border:1px solid var(--lv-field-border);background:var(--lv-field-bg);color:var(--lv-text-primary);font:inherit}.lv-narrow__actions.astro-d7os52sd{display:flex;flex-wrap:wrap;gap:var(--lv-space-3)}@container (min-width: 52rem){.lv-narrow--above.astro-d7os52sd{grid-template-columns:repeat(auto-fit,minmax(min(14rem,100%),1fr));align-items:end}.lv-narrow--above.astro-d7os52sd .lv-narrow__heading.astro-d7os52sd{grid-column:1 / -1}.lv-narrow--above.astro-d7os52sd .lv-narrow__facets.astro-d7os52sd{grid-column:1 / -1;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}}@container (min-width: 60rem){.lv-narrow--sidebar.astro-d7os52sd{position:sticky;inset-block-start:var(--lv-space-5)}}
/* components/browse.product-detail/renderers/detail.astro */
.lv-pdetail.astro-hzavdqx2{display:grid;gap:var(--lv-space-4);max-width:var(--lv-measure)}.lv-pdetail__title.astro-hzavdqx2{margin:0;font-family:var(--lv-font-ui);font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-heading);letter-spacing:var(--lv-tracking-heading);color:var(--lv-text-primary)}.lv-pdetail__desc.astro-hzavdqx2{color:var(--lv-text-secondary);line-height:var(--lv-leading-normal);white-space:pre-wrap}.lv-pdetail__price.astro-hzavdqx2{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary);font-variant-numeric:tabular-nums}.lv-pdetail__vat.astro-hzavdqx2{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-pdetail__stock.astro-hzavdqx2{margin:0;font-weight:var(--lv-weight-medium);color:var(--lv-text-secondary)}.lv-pdetail__form.astro-hzavdqx2{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3);margin-block-start:var(--lv-space-2)}.lv-pdetail__qty-field.astro-hzavdqx2 input.astro-hzavdqx2{inline-size:4.5rem;padding:var(--lv-space-2);border-radius:var(--lv-radius-sm);box-shadow:inset 0 0 0 1px var(--lv-line-strong);background:var(--lv-surface);color:var(--lv-text-primary);text-align:center}.lv-pdetail__qty-field.astro-hzavdqx2 input.astro-hzavdqx2:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-pdetail__status.astro-hzavdqx2{margin:0;inline-size:100%;font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}
/* components/browse.product-media/renderers/media.astro */
.lv-pmedia.astro-ab2mx46a{display:grid;gap:var(--lv-space-3)}.lv-pmedia__stage.astro-ab2mx46a{position:relative;display:grid;overflow:hidden;border-radius:var(--lv-radius-md);background:var(--lv-surface-sunken);aspect-ratio:1}.lv-pmedia__frame.astro-ab2mx46a{grid-area:1 / 1;margin:0;opacity:0;pointer-events:none}.lv-pmedia__frame.astro-ab2mx46a:has(.lv-pmedia__radio:checked){opacity:1;pointer-events:auto}.lv-pmedia__frame.astro-ab2mx46a img.astro-ab2mx46a{inline-size:100%;block-size:100%;object-fit:cover;transform-origin:var(--lv-pmedia-x, 50%) var(--lv-pmedia-y, 50%);transition:transform var(--lv-dur-panel) var(--lv-ease)}@media (hover: hover) and (pointer: fine){.lv-pmedia--zoom-inner.astro-ab2mx46a .lv-pmedia__frame.astro-ab2mx46a:hover img.astro-ab2mx46a{transform:scale(2)}}.lv-pmedia__hint.astro-ab2mx46a{position:absolute;inset-block-end:var(--lv-space-3);inset-inline-start:var(--lv-space-3);margin:0;padding:2px var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface);font-size:var(--lv-text-2xs);color:var(--lv-text-tertiary)}@media (hover: none){.lv-pmedia__hint.astro-ab2mx46a{display:none}}.lv-pmedia__expand.astro-ab2mx46a{position:absolute;inset:0;z-index:1;border:0;margin:0;padding:0;background:transparent;cursor:zoom-in}.lv-pmedia__expand.astro-ab2mx46a:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}.lv-pmedia__expand-icon.astro-ab2mx46a{position:absolute;inset-block-end:var(--lv-space-3);inset-inline-end:var(--lv-space-3);display:grid;place-items:center;inline-size:36px;block-size:36px;border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:var(--lv-lift-2);color:var(--lv-text-primary);transition:background-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease),transform var(--lv-dur-fast) var(--lv-ease)}.lv-pmedia__expand.astro-ab2mx46a:hover .lv-pmedia__expand-icon.astro-ab2mx46a,.lv-pmedia__expand.astro-ab2mx46a:focus-visible .lv-pmedia__expand-icon.astro-ab2mx46a{background:var(--lv-brand-strong);color:var(--lv-text-on-brand);transform:translateY(-1px)}.lv-pmedia__expand.astro-ab2mx46a:active .lv-pmedia__expand-icon.astro-ab2mx46a{transform:translateY(0) scale(0.94)}.lv-pmedia__rail.astro-ab2mx46a{display:flex;gap:var(--lv-space-2);margin:0;padding:0;list-style:none;overflow-x:auto}.lv-pmedia__thumb.astro-ab2mx46a{display:block;inline-size:4.5rem;block-size:4.5rem;border-radius:var(--lv-radius-sm);overflow:hidden;cursor:pointer;box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-pmedia__thumb.astro-ab2mx46a img.astro-ab2mx46a{inline-size:100%;block-size:100%;object-fit:cover}.lv-pmedia__radio.astro-ab2mx46a:checked+img.astro-ab2mx46a{outline:none}@container (min-width: 40rem){.lv-pmedia--rail-start.astro-ab2mx46a{grid-template-columns:4.5rem minmax(0,1fr)}.lv-pmedia--rail-start.astro-ab2mx46a .lv-pmedia__stage.astro-ab2mx46a{grid-column:2;grid-row:1}.lv-pmedia--rail-start.astro-ab2mx46a .lv-pmedia__rail.astro-ab2mx46a{grid-column:1;grid-row:1;flex-direction:column;overflow-x:visible}}@media (prefers-reduced-motion: reduce){.lv-pmedia__frame.astro-ab2mx46a img.astro-ab2mx46a{transition:none}}
/* components/browse.product-set/renderers/cards.astro */
.lv-products.astro-fgldmnvg{container-type:inline-size;padding-block:var(--lv-space-8)}.lv-products__head.astro-fgldmnvg{max-width:var(--lv-measure);margin-block-end:var(--lv-space-6)}.lv-products__eyebrow.astro-fgldmnvg{margin:0 0 var(--lv-space-2);font:var(--lv-weight-semibold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-products__title.astro-fgldmnvg{margin:0;font-family:var(--lv-font-ui);font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-heading);letter-spacing:var(--lv-tracking-heading);line-height:var(--lv-leading-tight);color:var(--lv-text-primary)}.lv-products__desc.astro-fgldmnvg{margin:var(--lv-space-3) 0 0;color:var(--lv-text-secondary);line-height:var(--lv-leading-normal)}.lv-products__detail.astro-fgldmnvg{max-width:var(--lv-measure);margin-block-end:var(--lv-space-6);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-products__detail-title.astro-fgldmnvg{margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-products__detail-note.astro-fgldmnvg{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-products__list.astro-fgldmnvg{margin:0;padding:0;list-style:none;display:grid;gap:var(--lv-space-6);grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr))}.lv-products--grid.astro-fgldmnvg .lv-products__list.astro-fgldmnvg{display:flex;flex-wrap:wrap;justify-content:center}.lv-products--grid.astro-fgldmnvg .lv-products__item.astro-fgldmnvg{flex:1 1 min(260px,100%)}@container (min-width: 720px){.lv-products--grid.astro-fgldmnvg .lv-products__item.astro-fgldmnvg{flex-basis:calc((100% - (var(--lv-products-columns) - 1) * var(--lv-space-6)) / var(--lv-products-columns));max-inline-size:calc((100% - (var(--lv-products-columns) - 1) * var(--lv-space-6)) / var(--lv-products-columns))}}.lv-products--list.astro-fgldmnvg .lv-products__list.astro-fgldmnvg{grid-template-columns:minmax(0,1fr)}.lv-products--carousel.astro-fgldmnvg .lv-products__list.astro-fgldmnvg{grid-auto-flow:column;grid-auto-columns:minmax(260px,1fr);grid-template-columns:none;overflow-x:auto;scroll-snap-type:x mandatory;padding-block-end:var(--lv-space-3)}.lv-products--carousel.astro-fgldmnvg .lv-products__item.astro-fgldmnvg{scroll-snap-align:center}.lv-products--carousel.astro-fgldmnvg .lv-products__list.astro-fgldmnvg:has(> li:first-child:nth-last-child(-n + 3)){grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));overflow-x:visible;scroll-snap-type:none}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view(inline)){.lv-products--carousel.astro-fgldmnvg .lv-products__list.astro-fgldmnvg:has(> li:nth-child(4)) .lv-products__item.astro-fgldmnvg{animation:lv-products-focus linear both;animation-timeline:view(inline)}@keyframes lv-products-focus{0%,100%{opacity:0.55;filter:saturate(0.6)}40%,60%{opacity:1;filter:none}}}}.lv-products__card.astro-fgldmnvg{display:flex;flex-direction:column;gap:var(--lv-space-3);height:100%}.lv-products--list.astro-fgldmnvg .lv-products__card.astro-fgldmnvg{flex-direction:row;align-items:center;gap:var(--lv-space-5);padding-block-end:var(--lv-space-5);border-block-end:1px solid var(--lv-line)}.lv-products__media.astro-fgldmnvg{position:relative;display:block;overflow:hidden;border-radius:var(--lv-radius-md);background:var(--lv-surface-sunken);aspect-ratio:1}.lv-products--list.astro-fgldmnvg .lv-products__media.astro-fgldmnvg{flex:0 0 8rem}.lv-products__media.astro-fgldmnvg img.astro-fgldmnvg,.lv-products__media-blank.astro-fgldmnvg{display:block;inline-size:100%;block-size:100%;object-fit:cover;transition:transform var(--lv-dur-panel) var(--lv-ease)}.lv-products--hover-zoom-in.astro-fgldmnvg .lv-products__card.astro-fgldmnvg:hover .lv-products__media.astro-fgldmnvg img.astro-fgldmnvg{transform:scale(1.04)}.lv-products--meta-over-image.astro-fgldmnvg .lv-products__card.astro-fgldmnvg{position:relative}.lv-products--meta-over-image.astro-fgldmnvg .lv-products__meta.astro-fgldmnvg{position:absolute;inset-inline:var(--lv-space-3);inset-block-end:var(--lv-space-3);padding:var(--lv-space-3);border-radius:var(--lv-radius-md);background:var(--lv-surface);box-shadow:var(--lv-lift-2)}.lv-products__price-chip.astro-fgldmnvg{position:absolute;inset-block-end:var(--lv-space-2);inset-inline-start:var(--lv-space-2);display:inline-flex;align-items:baseline;gap:var(--lv-space-2);padding:2px var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:var(--lv-lift-1);font-size:var(--lv-text-xs);color:var(--lv-text-primary);font-variant-numeric:tabular-nums}.lv-products__price-chip.astro-fgldmnvg .lv-products__vat.astro-fgldmnvg{font-size:var(--lv-text-2xs)}.lv-products__badge.astro-fgldmnvg{position:absolute;inset-block-start:var(--lv-space-2);inset-inline-start:var(--lv-space-2);padding:2px var(--lv-space-2);border-radius:var(--lv-radius-pill);background:var(--lv-brand);color:var(--lv-text-on-brand);font:var(--lv-weight-semibold) var(--lv-text-2xs) / 1.6 var(--lv-font-mono);font-variant-numeric:tabular-nums}.lv-products__badge--out.astro-fgldmnvg{background:var(--lv-surface-sunken);color:var(--lv-text-secondary);box-shadow:inset 0 0 0 1px var(--lv-line-strong)}.lv-products__meta.astro-fgldmnvg{display:flex;flex-direction:column;gap:var(--lv-space-2);align-items:start}.lv-products__name.astro-fgldmnvg{margin:0;font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);line-height:var(--lv-leading-snug)}.lv-products__name.astro-fgldmnvg a.astro-fgldmnvg{color:var(--lv-text-primary);text-decoration:none}.lv-products__name.astro-fgldmnvg a.astro-fgldmnvg:hover{text-decoration:underline}.lv-products__name.astro-fgldmnvg a.astro-fgldmnvg:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-products__price.astro-fgldmnvg{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--lv-space-2);margin:0;color:var(--lv-text-primary);font-variant-numeric:tabular-nums}.lv-products__vat.astro-fgldmnvg{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-products__stock-out.astro-fgldmnvg{margin:0;font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-products__empty.astro-fgldmnvg{display:flex;flex-direction:column;align-items:start;gap:var(--lv-space-3);max-width:48ch;padding:var(--lv-space-7);border:1px dashed var(--lv-line-strong);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised)}.lv-products__empty-title.astro-fgldmnvg{margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-products__empty-body.astro-fgldmnvg{margin:0;color:var(--lv-text-secondary);line-height:var(--lv-leading-normal)}@media (prefers-reduced-motion: reduce){.lv-products__media.astro-fgldmnvg img.astro-fgldmnvg{transition:none}.lv-products--hover-zoom-in.astro-fgldmnvg .lv-products__card.astro-fgldmnvg:hover .lv-products__media.astro-fgldmnvg img.astro-fgldmnvg{transform:none}}
/* components/browse.segment-entry/renderers/segments.astro */
.lv-grid.astro-w3beacb4{display:flex;flex-wrap:wrap;justify-content:center}.lv-seg__rich.astro-w3beacb4{flex:1 1 min(17rem,100%)}@container (min-width: 56rem){.lv-seg__rich.astro-w3beacb4{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}}.lv-seg__card.astro-w3beacb4{text-decoration:none;color:inherit;transition:transform var(--lv-dur-state) var(--lv-ease),box-shadow var(--lv-dur-state) var(--lv-ease)}.lv-seg__card.astro-w3beacb4:hover{box-shadow:inset 0 0 0 1px var(--lv-line-strong),var(--lv-lift-2)}.lv-seg__card.astro-w3beacb4:not([href]){cursor:default}.lv-seg__card.astro-w3beacb4:not([href]):hover{transform:none;box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-seg__card.astro-w3beacb4:not([href]):hover .lv-media.astro-w3beacb4 img.astro-w3beacb4{transform:none}.lv-seg__card.astro-w3beacb4:not([href]) .lv-seg__cardarrow.astro-w3beacb4{display:none}.lv-seg__cardarrow.astro-w3beacb4{display:grid;place-items:center;align-self:flex-end;margin-block-start:auto;inline-size:2.25rem;block-size:2.25rem;border-radius:var(--lv-radius-pill);border:1.5px solid var(--lv-line-strong);color:var(--lv-text-secondary);transition:background-color var(--lv-dur-fast) var(--lv-ease),border-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease),transform var(--lv-dur-fast) var(--lv-ease)}.lv-seg__card.astro-w3beacb4:hover .lv-seg__cardarrow.astro-w3beacb4,.lv-seg__card.astro-w3beacb4:focus-visible .lv-seg__cardarrow.astro-w3beacb4{background:var(--lv-brand-strong);border-color:var(--lv-brand-strong);color:var(--lv-text-on-brand);transform:translateX(3px)}.lv-seg__label.astro-w3beacb4{font-weight:var(--lv-weight-semibold)}.lv-seg__icon.astro-w3beacb4{margin-block-end:var(--lv-space-3)}.lv-seg--tiles.astro-w3beacb4 .lv-seg__label.astro-w3beacb4,.lv-seg--cards.astro-w3beacb4 .lv-seg__label.astro-w3beacb4{font-size:var(--lv-text-md)}.lv-seg__count.astro-w3beacb4{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-seg__chip.astro-w3beacb4:not([href]){cursor:default}.lv-seg__chip.astro-w3beacb4:not([href]):hover{background:var(--lv-surface)}.lv-seg__rows.astro-w3beacb4{margin:0;padding:0;list-style:none;max-inline-size:56rem;counter-reset:lv-seg-row;border-block-start:1px solid var(--lv-line)}.lv-seg__row.astro-w3beacb4{counter-increment:lv-seg-row;border-block-end:1px solid var(--lv-line)}.lv-seg__row-link.astro-w3beacb4{display:flex;align-items:center;gap:var(--lv-space-4);padding-block:var(--lv-space-4);color:inherit;text-decoration:none}.lv-seg__row-link.astro-w3beacb4::before{content:counter(lv-seg-row,decimal-leading-zero);flex:none;min-inline-size:2ch;font:var(--lv-weight-bold) var(--lv-text-xl) / 1 var(--lv-font-mono);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num);color:var(--lv-line-strong);transition:color var(--lv-dur-fast) var(--lv-ease)}.lv-seg__row-link.astro-w3beacb4[href]:hover::before,.lv-seg__row-link.astro-w3beacb4[href]:focus-visible::before{color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-seg__row-icon.astro-w3beacb4{color:var(--lv-text-secondary)}.lv-seg__row-text.astro-w3beacb4{flex:1;min-inline-size:0}.lv-seg__row-summary.astro-w3beacb4{display:block;margin-block-start:var(--lv-space-1);font-size:var(--lv-text-sm);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-seg__row-arrow.astro-w3beacb4{flex:none;display:grid;place-items:center;color:var(--lv-text-tertiary);transition:transform var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease)}.lv-seg__row-link.astro-w3beacb4[href]:hover .lv-seg__row-arrow.astro-w3beacb4,.lv-seg__row-link.astro-w3beacb4[href]:focus-visible .lv-seg__row-arrow.astro-w3beacb4{transform:translateX(4px);color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-seg__row-link.astro-w3beacb4[href]:active .lv-seg__row-arrow.astro-w3beacb4{transform:translateX(2px)}.lv-seg__row-link.astro-w3beacb4:not([href]){cursor:default}.lv-seg__row-link.astro-w3beacb4:not([href]) .lv-seg__row-arrow.astro-w3beacb4{display:none}.lv-seg__row-link.astro-w3beacb4:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:2px}.lv-seg__showcase.astro-w3beacb4{margin:0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--lv-space-5)}.lv-seg__showcase-item.astro-w3beacb4{grid-column:span 6}.lv-seg__showcase-card.astro-w3beacb4{position:relative;isolation:isolate;overflow:hidden;display:flex;align-items:flex-end;aspect-ratio:16 / 11;border-radius:var(--lv-radius-md);text-decoration:none;color:var(--lv-text-on-brand);box-shadow:inset 0 0 0 1px var(--lv-line)}@container (min-width: 53.75rem){.lv-seg__showcase-item.astro-w3beacb4{grid-column:span var(--lv-showcase-span, 6)}.lv-seg__showcase-item.astro-w3beacb4.is-standard .lv-seg__showcase-card.astro-w3beacb4{aspect-ratio:4 / 4.6}.lv-seg__showcase-item.astro-w3beacb4.is-featured .lv-seg__showcase-card.astro-w3beacb4{aspect-ratio:16 / 10.5}.lv-seg__showcase-item.astro-w3beacb4.is-stretched .lv-seg__showcase-card.astro-w3beacb4{aspect-ratio:16 / 10.5}.lv-seg__showcase-item.astro-w3beacb4.is-full-row .lv-seg__showcase-card.astro-w3beacb4{aspect-ratio:21 / 9}}.lv-seg__showcase-media.astro-w3beacb4{position:absolute;inset:0;z-index:-2;border-radius:0}.lv-seg__showcase-card.astro-w3beacb4::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,rgb(var(--lv-glass-under) / 0.88) 0%,rgb(var(--lv-glass-under) / 0.42) 42%,rgb(var(--lv-glass-under) / 0.04) 75%)}.lv-seg__showcase-body.astro-w3beacb4{display:flex;align-items:flex-end;gap:var(--lv-space-4);inline-size:100%;padding:var(--lv-space-5)}.lv-seg__showcase-text.astro-w3beacb4{flex:1;min-inline-size:0}.lv-seg__showcase-title.astro-w3beacb4{display:block;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-bold);line-height:var(--lv-leading-snug);color:var(--lv-text-on-brand)}.lv-seg__showcase-item.astro-w3beacb4.is-featured .lv-seg__showcase-title.astro-w3beacb4{font-size:var(--lv-text-xl)}.lv-seg__showcase-count.astro-w3beacb4{position:absolute;inset-block-start:var(--lv-space-3);inset-inline-end:var(--lv-space-3);padding:2px var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:var(--lv-lift-1);font-size:var(--lv-text-xs);color:var(--lv-text-primary)}.lv-seg__showcase-summary.astro-w3beacb4{display:block;margin-block-start:var(--lv-space-2);max-inline-size:38ch;font-size:var(--lv-text-sm);line-height:var(--lv-leading-normal);color:color-mix(in srgb,var(--lv-text-on-brand) 86%,transparent)}.lv-seg__showcase-arrow.astro-w3beacb4{flex:none;display:grid;place-items:center;inline-size:2.75rem;block-size:2.75rem;border-radius:var(--lv-radius-pill);border:1.5px solid color-mix(in srgb,var(--lv-text-on-brand) 55%,transparent);color:var(--lv-text-on-brand);transition:background-color var(--lv-dur-fast) var(--lv-ease),border-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease),transform var(--lv-dur-fast) var(--lv-ease)}.lv-seg__showcase-card.astro-w3beacb4:hover .lv-seg__showcase-arrow.astro-w3beacb4,.lv-seg__showcase-card.astro-w3beacb4:focus-visible .lv-seg__showcase-arrow.astro-w3beacb4{background:var(--lv-brand-strong);border-color:var(--lv-brand-strong);color:var(--lv-text-on-brand);transform:translateX(3px)}.lv-seg__showcase-card.astro-w3beacb4:not([href]){cursor:default}.lv-seg__showcase-card.astro-w3beacb4:not([href]):hover{transform:none;box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-seg__showcase-card.astro-w3beacb4:not([href]):hover .lv-media.astro-w3beacb4 img.astro-w3beacb4{transform:none}.lv-seg__showcase-card.astro-w3beacb4:not([href]) .lv-seg__showcase-arrow.astro-w3beacb4{display:none}.lv-seg__showcase-card.astro-w3beacb4:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}@media (prefers-reduced-motion: reduce){.lv-seg__card.astro-w3beacb4,.lv-seg__cardarrow.astro-w3beacb4,.lv-seg__showcase-arrow.astro-w3beacb4,.lv-seg__row-link.astro-w3beacb4::before,.lv-seg__row-arrow.astro-w3beacb4{transition:none}}
/* components/browse.showcase-marquee/renderers/marquee-product.astro */
.lv-mq--product.astro-6qmmoc4a .lv-mq__shelf.astro-6qmmoc4a{display:block;margin-block-start:0;padding:var(--lv-space-2) var(--lv-space-3);background:var(--lv-surface-sunken);border-end-start-radius:var(--lv-radius-md);border-end-end-radius:var(--lv-radius-md);color:var(--lv-text-secondary);font-weight:var(--lv-weight-medium)}.lv-mq--product.astro-6qmmoc4a .lv-mq__media.astro-6qmmoc4a{border-end-start-radius:0;border-end-end-radius:0}.lv-mq--product.astro-6qmmoc4a .lv-mq__count.astro-6qmmoc4a b.astro-6qmmoc4a{color:var(--lv-brand-strong)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: scroll()){.lv-mq--rail.astro-6qmmoc4a .lv-mq__progress.astro-6qmmoc4a{display:block;block-size:2px;background:var(--lv-line);overflow:hidden}.lv-mq--rail.astro-6qmmoc4a .lv-mq__progressbar.astro-6qmmoc4a{background:var(--lv-brand-strong);transform:scaleX(0.18);animation:lv-mq-shelf linear both;animation-timeline:--lv-mq-scroll}@keyframes lv-mq-shelf{from{transform:scaleX(0.18)}to{transform:scaleX(1)}}}}@media (prefers-reduced-motion: no-preference){.lv-mq--drift.astro-6qmmoc4a .lv-mq__track.astro-6qmmoc4a{animation:lv-mq-drift var(--lv-mq-dur, 64s) linear infinite}.lv-mq--drift.astro-6qmmoc4a .lv-mq__frame--reverse.astro-6qmmoc4a .lv-mq__track.astro-6qmmoc4a{animation-direction:reverse}.lv-mq--drift.astro-6qmmoc4a .lv-mq__frame.astro-6qmmoc4a:hover .lv-mq__track.astro-6qmmoc4a,.lv-mq--drift.astro-6qmmoc4a .lv-mq__frame.astro-6qmmoc4a:focus-within .lv-mq__track.astro-6qmmoc4a,.lv-mq--drift.astro-6qmmoc4a:has(.lv-mq__switch:checked) .lv-mq__track.astro-6qmmoc4a{animation-play-state:paused}.lv-mq--drift.astro-6qmmoc4a .lv-mq__viewport.astro-6qmmoc4a{scroll-snap-type:none}.lv-mq--drift.astro-6qmmoc4a .lv-mq__set.astro-6qmmoc4a{padding-inline:0}}.lv-mq--pace-slow.astro-6qmmoc4a{--lv-mq-dur: 64s}.lv-mq--pace-normal.astro-6qmmoc4a{--lv-mq-dur: 40s}@keyframes lv-mq-drift{from{transform:translateX(0)}to{transform:translateX(calc(-50% - var(--lv-space-2)))}}@media (prefers-reduced-motion: reduce){.lv-mq__track.astro-6qmmoc4a{animation:none}.lv-mq__set--clone.astro-6qmmoc4a{display:none}.lv-mq--drift.astro-6qmmoc4a .lv-mq__set.astro-6qmmoc4a{padding-inline:var(--lv-gutter, var(--lv-space-5))}.lv-mq--drift.astro-6qmmoc4a .lv-mq__pause.astro-6qmmoc4a{display:none}}.lv-mq--still.astro-6qmmoc4a .lv-mq__meta.astro-6qmmoc4a{justify-content:space-between}
/* components/browse.showcase-marquee/renderers/marquee-workshop.astro */
.lv-mq--workshop.astro-ichqx3uf .lv-mq__media.astro-ichqx3uf{border-radius:var(--lv-radius-sm)}.lv-mq--workshop.astro-ichqx3uf .lv-mq__media.astro-ichqx3uf img.astro-ichqx3uf{filter:none}.lv-mq--workshop.astro-ichqx3uf .lv-mq__record.astro-ichqx3uf{display:flex;align-items:baseline;gap:var(--lv-space-2);margin-block-start:var(--lv-space-2);padding-block-start:var(--lv-space-2);border-block-start:1px solid var(--lv-line-strong)}.lv-mq--workshop.astro-ichqx3uf .lv-mq__ord.astro-ichqx3uf{flex:none;font-family:var(--lv-font-mono);font-feature-settings:"tnum" 1;font-size:var(--lv-text-xs);font-weight:var(--lv-weight-bold);letter-spacing:var(--lv-tracking-num, 0);color:var(--lv-brand-strong)}.lv-mq--workshop.astro-ichqx3uf .lv-mq__datum.astro-ichqx3uf{color:var(--lv-text-secondary);font-weight:var(--lv-weight-medium)}.lv-mq--workshop.astro-ichqx3uf .lv-mq__count.astro-ichqx3uf b.astro-ichqx3uf{letter-spacing:var(--lv-tracking-num, 0);color:var(--lv-brand-strong)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: scroll()){.lv-mq--rail.astro-ichqx3uf .lv-mq__progress.astro-ichqx3uf{display:block;block-size:3px;margin-inline:var(--lv-gutter, var(--lv-space-5));background:var(--lv-line)}.lv-mq--rail.astro-ichqx3uf .lv-mq__progressbar.astro-ichqx3uf{background:var(--lv-brand-strong);transform:scaleX(0.18);animation:lv-mq-gauge linear both;animation-timeline:--lv-mq-scroll}@keyframes lv-mq-gauge{from{transform:scaleX(0.18)}to{transform:scaleX(1)}}}}.lv-mq--still.astro-ichqx3uf .lv-mq__head.astro-ichqx3uf{text-align:start}.lv-mq--still.astro-ichqx3uf .lv-mq__meta.astro-ichqx3uf{justify-content:flex-start}
/* components/browse.showcase-marquee/renderers/marquee.astro */
.lv-mq__meta.astro-zgnmpw4j{justify-content:space-between}.lv-mq__cap.astro-zgnmpw4j{font-family:var(--lv-font-ui)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: scroll()){.lv-mq--rail.astro-zgnmpw4j .lv-mq__progress.astro-zgnmpw4j{display:block;block-size:2px;margin-inline:var(--lv-gutter, var(--lv-space-5));background:var(--lv-line);border-radius:2px;overflow:hidden}.lv-mq--rail.astro-zgnmpw4j .lv-mq__progressbar.astro-zgnmpw4j{background:var(--lv-line-strong);transform:scaleX(0.18);animation:lv-mq-progress linear both;animation-timeline:--lv-mq-scroll}@keyframes lv-mq-progress{from{transform:scaleX(0.18)}to{transform:scaleX(1)}}}}@media (prefers-reduced-motion: no-preference){.lv-mq--drift.astro-zgnmpw4j .lv-mq__track.astro-zgnmpw4j{animation:lv-mq-drift var(--lv-mq-dur, 64s) linear infinite}.lv-mq--drift.astro-zgnmpw4j .lv-mq__frame--reverse.astro-zgnmpw4j .lv-mq__track.astro-zgnmpw4j{animation-direction:reverse}.lv-mq--drift.astro-zgnmpw4j .lv-mq__frame.astro-zgnmpw4j:hover .lv-mq__track.astro-zgnmpw4j,.lv-mq--drift.astro-zgnmpw4j .lv-mq__frame.astro-zgnmpw4j:focus-within .lv-mq__track.astro-zgnmpw4j,.lv-mq--drift.astro-zgnmpw4j:has(.lv-mq__switch:checked) .lv-mq__track.astro-zgnmpw4j{animation-play-state:paused}.lv-mq--drift.astro-zgnmpw4j .lv-mq__viewport.astro-zgnmpw4j{scroll-snap-type:none}.lv-mq--drift.astro-zgnmpw4j .lv-mq__set.astro-zgnmpw4j{padding-inline:0}}.lv-mq--pace-slow.astro-zgnmpw4j{--lv-mq-dur: 64s}.lv-mq--pace-normal.astro-zgnmpw4j{--lv-mq-dur: 40s}@keyframes lv-mq-drift{from{transform:translateX(0)}to{transform:translateX(calc(-50% - var(--lv-space-2)))}}@media (prefers-reduced-motion: reduce){.lv-mq__track.astro-zgnmpw4j{animation:none}.lv-mq__set--clone.astro-zgnmpw4j{display:none}.lv-mq--drift.astro-zgnmpw4j .lv-mq__set.astro-zgnmpw4j{padding-inline:var(--lv-gutter, var(--lv-space-5))}.lv-mq--drift.astro-zgnmpw4j .lv-mq__pause.astro-zgnmpw4j{display:none}}.lv-mq--still.astro-zgnmpw4j .lv-mq__head.astro-zgnmpw4j{text-align:center;margin-inline:auto}.lv-mq--still.astro-zgnmpw4j .lv-mq__meta.astro-zgnmpw4j{justify-content:center}
/* components/chrome.breadcrumbs/renderers/trail.astro */
.lv-trail.astro-t2ugo7l2{display:contents}.lv-trail--standalone.astro-t2ugo7l2{display:block;max-width:var(--lv-measure);margin-inline:auto;padding-inline:var(--lv-space-4);padding-block-start:var(--lv-space-4)}.lv-trail__nav.astro-t2ugo7l2{font-family:var(--lv-font-ui);margin-block-end:var(--lv-space-4)}.lv-trail__list.astro-t2ugo7l2{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2);margin:0;padding:0;list-style:none;font-size:var(--lv-text-xs)}.lv-trail__item.astro-t2ugo7l2{display:inline-flex;align-items:center;gap:var(--lv-space-2);min-width:0}.lv-trail__sep.astro-t2ugo7l2{color:var(--lv-icon-quiet);user-select:none}.lv-trail__link.astro-t2ugo7l2{color:var(--lv-text-secondary);text-decoration:none;border-block-end:1px solid transparent;transition:color var(--lv-dur-state) var(--lv-ease),border-color var(--lv-dur-state) var(--lv-ease)}.lv-trail__link.astro-t2ugo7l2:hover{color:var(--lv-text-link);border-block-end-color:var(--lv-text-link)}.lv-trail__link.astro-t2ugo7l2:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-trail__current.astro-t2ugo7l2{color:var(--lv-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:28ch}@media (prefers-reduced-motion: reduce){.lv-trail__link.astro-t2ugo7l2{transition:none}}
/* components/decide.answer-objections/renderers/faq.astro */
.lv-faq.astro-yvhufgsr{max-width:52rem}.lv-faq__item.astro-yvhufgsr{border-block-end:1px solid var(--lv-line)}.lv-faq__item.astro-yvhufgsr:first-child{border-block-start:1px solid var(--lv-line)}.lv-faq--grouped.astro-yvhufgsr{display:flex;flex-direction:column}.lv-faq__group.astro-yvhufgsr+.lv-faq__group.astro-yvhufgsr{margin-block-start:var(--lv-space-6)}.lv-faq__category.astro-yvhufgsr{margin:0 0 var(--lv-space-2);font:var(--lv-weight-semibold) var(--lv-text-sm) / 1.2 var(--lv-font-ui);color:var(--lv-text-secondary)}.lv-faq__q.astro-yvhufgsr{display:flex;align-items:center;justify-content:space-between;gap:var(--lv-space-4);min-block-size:52px;padding-block:var(--lv-space-3);cursor:pointer;font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary);list-style:none}.lv-faq__q.astro-yvhufgsr::-webkit-details-marker{display:none}.lv-faq__q.astro-yvhufgsr>span.astro-yvhufgsr{display:inline-block;transition:transform var(--lv-dur-fast) var(--lv-ease)}.lv-faq__item.astro-yvhufgsr:hover .lv-faq__q.astro-yvhufgsr>span.astro-yvhufgsr{transform:translateX(2px)}.lv-faq__item.astro-yvhufgsr:hover .lv-faq__q.astro-yvhufgsr::after,.lv-faq__item.astro-yvhufgsr:hover .lv-faq__q.astro-yvhufgsr::before{background:var(--lv-ink-accent)}.lv-faq__q.astro-yvhufgsr:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-faq__q.astro-yvhufgsr::after{content:"";flex:none;inline-size:12px;block-size:2px;background:var(--lv-icon-quiet);box-shadow:0 0 0 0 transparent;position:relative}.lv-faq__q.astro-yvhufgsr::before{content:"";order:2;position:absolute;inset-inline-end:5px;inline-size:2px;block-size:12px;background:var(--lv-icon-quiet);transition:opacity var(--lv-dur-state) var(--lv-ease)}.lv-faq__item.astro-yvhufgsr[open] .lv-faq__q.astro-yvhufgsr::before{opacity:0}.lv-faq__q.astro-yvhufgsr{position:relative}.lv-faq__a.astro-yvhufgsr{padding-block-end:var(--lv-space-5)}@media (prefers-reduced-motion: reduce){.lv-faq__q.astro-yvhufgsr::before{transition:none}.lv-faq__q.astro-yvhufgsr>span.astro-yvhufgsr{transition:none}.lv-faq__item.astro-yvhufgsr:hover .lv-faq__q.astro-yvhufgsr>span.astro-yvhufgsr{transform:none}}
/* components/decide.calculate/renderers/calculator.astro */
.lv-calc.astro-aadf5tws{display:grid;gap:var(--lv-space-6);align-items:start}.lv-calc__row.astro-aadf5tws{display:grid;margin:0;max-width:none}.lv-calc__label.astro-aadf5tws{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-3)}.lv-calc__readout.astro-aadf5tws{padding:1px var(--lv-space-2);border-radius:var(--lv-radius-sm);background:var(--lv-surface-sunken);font-size:var(--lv-text-sm);color:var(--lv-text-primary)}.lv-calc__slider.astro-aadf5tws{inline-size:100%;min-block-size:32px;accent-color:var(--lv-brand)}.lv-calc__slider.astro-aadf5tws:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-calc__panels.astro-aadf5tws{display:grid;gap:var(--lv-space-3)}.lv-calc__out.astro-aadf5tws{display:grid;gap:var(--lv-space-1);padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-calc__out--secondary.astro-aadf5tws{padding-block:var(--lv-space-4)}.lv-calc__out--secondary.astro-aadf5tws .lv-calc__out-value.astro-aadf5tws{font-size:clamp(1.4rem,4.5cqi,2rem)}.lv-calc__out-label.astro-aadf5tws{font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-calc__figure.astro-aadf5tws{display:flex;align-items:baseline;justify-content:flex-end;gap:var(--lv-space-1);text-align:end}.lv-calc__out-value.astro-aadf5tws{font-size:clamp(2rem,7cqi,3rem);font-weight:var(--lv-weight-semibold);line-height:1;color:var(--lv-text-primary)}.lv-calc__out-unit.astro-aadf5tws{font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-calc__assumption.astro-aadf5tws{margin-block-start:var(--lv-space-4);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary);text-align:start}@container (min-width: 46rem){.lv-calc.astro-aadf5tws{grid-template-columns:minmax(0,1fr) minmax(15rem,22rem);gap:var(--lv-space-8)}}
/* components/decide.compare-live-data/renderers/compare.astro */
.lv-live.astro-c6nz424u{display:grid;gap:var(--lv-space-5)}.lv-live__filter.astro-c6nz424u{max-width:24rem}.lv-grid.astro-c6nz424u{display:flex;flex-wrap:wrap;justify-content:center}.lv-live__top.astro-c6nz424u .lv-card.astro-c6nz424u{flex:1 1 min(17rem,100%)}@container (min-width: 54rem){.lv-live__top.astro-c6nz424u .lv-card.astro-c6nz424u{max-inline-size:calc((100% - 2 * var(--lv-space-4)) / 3)}}.lv-live.astro-c6nz424u .lv-table-scroll.astro-c6nz424u{border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:var(--lv-surface)}.lv-live.astro-c6nz424u thead.astro-c6nz424u th.astro-c6nz424u{background:var(--lv-surface-sunken);border-block-end:1px solid var(--lv-line)}.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u th.astro-c6nz424u,.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u td.astro-c6nz424u{padding-inline:var(--lv-space-5)}.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u th.astro-c6nz424u:first-child,.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u td.astro-c6nz424u:first-child{padding-inline-start:var(--lv-space-5)}.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u th.astro-c6nz424u:last-child,.lv-live.astro-c6nz424u .lv-table.astro-c6nz424u td.astro-c6nz424u:last-child{padding-inline-end:var(--lv-space-5)}.lv-live__disclosure.astro-c6nz424u{max-width:var(--lv-measure);margin-block-start:var(--lv-space-5);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/decide.compare-options/renderers/compare.astro */
.lv-table-scroll.astro-jpnacszu{border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:var(--lv-surface)}.lv-cmp.astro-jpnacszu th.astro-jpnacszu,.lv-cmp.astro-jpnacszu td.astro-jpnacszu{padding:var(--lv-space-4) var(--lv-space-5)}.lv-cmp.astro-jpnacszu th.astro-jpnacszu:first-child,.lv-cmp.astro-jpnacszu td.astro-jpnacszu:first-child{padding-inline-start:var(--lv-space-5)}.lv-cmp.astro-jpnacszu th.astro-jpnacszu:last-child,.lv-cmp.astro-jpnacszu td.astro-jpnacszu:last-child{padding-inline-end:var(--lv-space-5)}.lv-cmp.astro-jpnacszu thead.astro-jpnacszu th.astro-jpnacszu,.lv-cmp.astro-jpnacszu thead.astro-jpnacszu td.astro-jpnacszu{background:var(--lv-surface-sunken);border-block-end:1px solid var(--lv-line)}.lv-cmp__opt.astro-jpnacszu,.lv-cmp__crit.astro-jpnacszu{text-align:start}.lv-cmp__opt.astro-jpnacszu{display:table-cell}.lv-cmp__opt.astro-jpnacszu a.astro-jpnacszu{color:var(--lv-text-primary);text-decoration:none}.lv-cmp__opt.astro-jpnacszu a.astro-jpnacszu:hover{text-decoration:underline}.lv-cmp__note.astro-jpnacszu{display:block;font-weight:var(--lv-weight-regular);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-cmp__crit.astro-jpnacszu{position:sticky;inset-inline-start:0;background:var(--lv-surface);font-weight:var(--lv-weight-regular);color:var(--lv-text-secondary)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu tr.astro-jpnacszu:nth-child(even):not(.lv-cmp__grouprow) td.astro-jpnacszu:not(.is-highlight),.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu tr.astro-jpnacszu:nth-child(even):not(.lv-cmp__grouprow) .lv-cmp__crit.astro-jpnacszu{background:var(--lv-surface-sunken)}.lv-cmp__group.astro-jpnacszu{padding-block:var(--lv-space-4) var(--lv-space-2);text-align:start;font:var(--lv-weight-bold) var(--lv-text-2xs) / 1.4 var(--lv-font-ui);text-transform:uppercase;letter-spacing:var(--lv-tracking-eyebrow);color:var(--lv-text-tertiary)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu td.astro-jpnacszu,.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu .lv-cmp__crit.astro-jpnacszu{padding-block:var(--lv-space-5)}.lv-cmp__cell.astro-jpnacszu{display:inline-flex;align-items:center;gap:var(--lv-space-2);padding:2px var(--lv-space-3) 2px var(--lv-space-2);border-radius:var(--lv-radius-pill);font-size:var(--lv-text-sm)}.lv-cmp__glyph.astro-jpnacszu{flex:none;inline-size:0.95em;block-size:0.95em;color:currentColor}.lv-cmp__cell--good.astro-jpnacszu{background:var(--lv-ok-surface);color:var(--lv-ok-text)}.lv-cmp__cell--okay.astro-jpnacszu{background:var(--lv-warn-surface);color:var(--lv-warn-text)}.lv-cmp__cell--bad.astro-jpnacszu{background:var(--lv-bad-surface);color:var(--lv-bad-text)}.lv-cmp.astro-jpnacszu td.astro-jpnacszu.is-highlight,.lv-cmp.astro-jpnacszu th.astro-jpnacszu.is-highlight{background:var(--lv-brand-soft)}.lv-cmp.astro-jpnacszu .is-highlight.astro-jpnacszu{box-shadow:inset 1px 0 0 var(--lv-brand),inset -1px 0 0 var(--lv-brand)}.lv-cmp.astro-jpnacszu thead.astro-jpnacszu .is-highlight.astro-jpnacszu{box-shadow:inset 1px 0 0 var(--lv-brand),inset -1px 0 0 var(--lv-brand),inset 0 2px 0 var(--lv-brand)}.lv-cmp.astro-jpnacszu:not(:has(tfoot)) tbody.astro-jpnacszu tr.astro-jpnacszu:last-child .is-highlight.astro-jpnacszu,.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu .is-highlight.astro-jpnacszu{box-shadow:inset 1px 0 0 var(--lv-brand),inset -1px 0 0 var(--lv-brand),inset 0 -2px 0 var(--lv-brand)}.lv-cmp__badge.astro-jpnacszu{display:inline-block;margin-block-end:var(--lv-space-2);padding:2px var(--lv-space-2);border-radius:var(--lv-radius-pill);background:var(--lv-brand-soft);color:var(--lv-brand);font:var(--lv-weight-semibold) var(--lv-text-2xs) / 1.6 var(--lv-font-ui);text-transform:uppercase;letter-spacing:var(--lv-tracking-eyebrow)}.lv-cmp__dash.astro-jpnacszu{color:var(--lv-text-tertiary)}.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu td.astro-jpnacszu{border-block-start:1px solid var(--lv-line);background:var(--lv-surface-sunken)}.lv-cmp__verdict.astro-jpnacszu{margin-block-start:var(--lv-space-5)}@container (max-width: 43.75rem){.lv-table-scroll.astro-jpnacszu{overflow:visible;border:0;border-radius:0;background:none}.lv-cmp.astro-jpnacszu,.lv-cmp.astro-jpnacszu thead.astro-jpnacszu,.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu,.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu,.lv-cmp.astro-jpnacszu tr.astro-jpnacszu,.lv-cmp.astro-jpnacszu th.astro-jpnacszu,.lv-cmp.astro-jpnacszu td.astro-jpnacszu{display:block}.lv-cmp__corner.astro-jpnacszu{display:none}.lv-cmp.astro-jpnacszu thead.astro-jpnacszu tr.astro-jpnacszu{display:flex;flex-wrap:wrap;gap:var(--lv-space-2) var(--lv-space-5);padding:var(--lv-space-4) 0;border-block-end:1px solid var(--lv-line-strong)}.lv-cmp.astro-jpnacszu thead.astro-jpnacszu th.astro-jpnacszu{flex:0 1 auto;padding:0;background:none;border-block-end:0}.lv-cmp.astro-jpnacszu thead.astro-jpnacszu .is-highlight.astro-jpnacszu{box-shadow:inset 0 -2px 0 var(--lv-brand);background:none;padding-block-end:var(--lv-space-2)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu tr.astro-jpnacszu:not(.lv-cmp__grouprow){margin-block-start:var(--lv-space-4);padding:var(--lv-space-4) var(--lv-space-5) var(--lv-space-5);border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:var(--lv-surface)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu tr.astro-jpnacszu:nth-child(even):not(.lv-cmp__grouprow) td.astro-jpnacszu:not(.is-highlight),.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu tr.astro-jpnacszu:nth-child(even):not(.lv-cmp__grouprow) .lv-cmp__crit.astro-jpnacszu{background:none}.lv-cmp__grouprow.astro-jpnacszu{margin-block-start:var(--lv-space-7)}.lv-cmp__group.astro-jpnacszu{padding:0}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu .lv-cmp__crit.astro-jpnacszu{position:static;padding:0 0 var(--lv-space-3);background:none;font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu td.astro-jpnacszu{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding:var(--lv-space-3) 0 var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu td.astro-jpnacszu::before,.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu td.astro-jpnacszu::before{content:attr(data-col);flex:none;font-size:var(--lv-text-xs);color:var(--lv-text-secondary)}.lv-cmp.astro-jpnacszu tbody.astro-jpnacszu td.astro-jpnacszu.is-highlight{padding-inline:var(--lv-space-3);margin-inline:calc(-1 * var(--lv-space-3));box-shadow:inset 2px 0 0 var(--lv-brand);background:var(--lv-brand-soft)}.lv-cmp.astro-jpnacszu:not(:has(tfoot)) tbody.astro-jpnacszu tr.astro-jpnacszu:last-child .is-highlight.astro-jpnacszu,.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu .is-highlight.astro-jpnacszu{box-shadow:inset 2px 0 0 var(--lv-brand)}.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu tr.astro-jpnacszu{display:grid;gap:var(--lv-space-4);margin-block-start:var(--lv-space-6)}.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu td.astro-jpnacszu{display:grid;gap:var(--lv-space-2);justify-items:start;padding:0;border-block-start:0;background:none}.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu td.astro-jpnacszu.is-highlight{padding-inline-start:var(--lv-space-3);background:none}.lv-cmp.astro-jpnacszu tfoot.astro-jpnacszu .lv-btn.astro-jpnacszu{justify-content:center;inline-size:100%}}
/* components/decide.pricing/renderers/pricing-field.astro */
.lv-sheet__layout.astro-ppqnnkf5{display:grid;gap:var(--lv-space-6)}.lv-sheet__rail.astro-ppqnnkf5{margin-block-end:0}.lv-sheet__foot.astro-ppqnnkf5{margin-block-start:0}.lv-sheet__matrix.astro-ppqnnkf5{min-inline-size:0}@container (min-width: 48rem){.lv-sheet__layout.astro-ppqnnkf5{grid-template-columns:minmax(11rem,22%) 1fr;align-items:start;gap:var(--lv-space-8)}.lv-sheet__rail.astro-ppqnnkf5{position:sticky;top:var(--lv-space-6)}.lv-sheet__foot.astro-ppqnnkf5{grid-column:1 / -1}}.lv-sheet__terms.astro-ppqnnkf5{display:grid;gap:var(--lv-space-8);margin:0;padding:0;list-style:none}@container (min-width: 48rem){.lv-sheet__terms.astro-ppqnnkf5{grid-template-columns:repeat(auto-fit,minmax(18rem,1fr))}}.lv-sheet__term.astro-ppqnnkf5{padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-sheet__term.astro-ppqnnkf5.is-featured{border-block-start-color:var(--lv-brand)}.lv-sheet__name.astro-ppqnnkf5{margin:0;color:var(--lv-text-secondary);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);text-transform:uppercase;letter-spacing:var(--lv-tracking-label)}.lv-sheet__figure.astro-ppqnnkf5{margin-block-start:var(--lv-space-2)}.lv-sheet__figure.astro-ppqnnkf5 .lv-offer__price.astro-ppqnnkf5{font-size:var(--lv-text-2xl);line-height:var(--lv-leading-tight)}.lv-sheet__table.astro-ppqnnkf5 thead.astro-ppqnnkf5 th.astro-ppqnnkf5{border-block-end:1px solid var(--lv-line-strong)}.lv-sheet__col.astro-ppqnnkf5.is-featured .lv-offer__price.astro-ppqnnkf5{color:var(--lv-brand)}.lv-sheet__col-note.astro-ppqnnkf5{max-inline-size:16rem;color:var(--lv-text-tertiary)}.lv-sheet__spec.astro-ppqnnkf5{max-inline-size:44rem}.lv-sheet__sum.astro-ppqnnkf5{align-items:baseline;border-block-start-width:1px;border-block-start-color:var(--lv-line-strong)}.lv-sheet__sum-label.astro-ppqnnkf5{color:var(--lv-text-secondary);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);text-transform:uppercase;letter-spacing:var(--lv-tracking-label)}.lv-sheet__sum.astro-ppqnnkf5 .lv-offer__addon-sum.astro-ppqnnkf5{color:var(--lv-text-primary);font-size:var(--lv-text-2xl);line-height:var(--lv-leading-tight)}.lv-sheet__rates.astro-ppqnnkf5 .lv-offer__rate-figure.astro-ppqnnkf5{font-size:var(--lv-text-lg)}
/* components/decide.pricing/renderers/pricing-folio.astro */
.lv-folio__schedule.astro-qvehtbks{display:grid;margin:0;padding:0;list-style:none;max-inline-size:52rem}.lv-folio__entry.astro-qvehtbks{display:grid;grid-template-columns:2.5rem 1fr;gap:var(--lv-space-2) var(--lv-space-4);padding-block:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-folio__entry.astro-qvehtbks:last-child{border-block-end:1px solid var(--lv-line)}@container (min-width: 46rem){.lv-folio__entry.astro-qvehtbks{grid-template-columns:2.5rem 1fr minmax(9rem,auto)}}.lv-folio__ordinal.astro-qvehtbks{color:var(--lv-text-tertiary);font-family:var(--lv-font-mono);font-size:var(--lv-text-xs);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num)}.lv-folio__body.astro-qvehtbks{min-inline-size:0}.lv-folio__name.astro-qvehtbks{margin:0;color:var(--lv-text-primary);font-size:var(--lv-text-md);font-weight:var(--lv-weight-medium)}.lv-folio__entry.astro-qvehtbks.is-featured .lv-folio__name.astro-qvehtbks{font-weight:var(--lv-weight-semibold)}.lv-folio__entry.astro-qvehtbks.is-featured .lv-offer__price.astro-qvehtbks{color:var(--lv-brand)}.lv-folio__figures.astro-qvehtbks{text-align:start}@container (min-width: 46rem){.lv-folio__figures.astro-qvehtbks{text-align:end}}.lv-folio__figures.astro-qvehtbks .lv-offer__price.astro-qvehtbks{font-family:var(--lv-font-mono);font-size:var(--lv-text-xl)}.lv-folio__cta.astro-qvehtbks{margin-block-start:var(--lv-space-3)}.lv-folio__table.astro-qvehtbks th.astro-qvehtbks,.lv-folio__table.astro-qvehtbks td.astro-qvehtbks{text-align:start}.lv-folio__col.astro-qvehtbks{vertical-align:bottom}.lv-folio__col-ordinal.astro-qvehtbks{display:block;color:var(--lv-text-tertiary);font-family:var(--lv-font-mono);font-size:var(--lv-text-2xs)}.lv-folio__col.astro-qvehtbks .lv-offer__price.astro-qvehtbks{font-family:var(--lv-font-mono);font-size:var(--lv-text-lg)}.lv-folio__col.astro-qvehtbks.is-featured .lv-offer__table-name.astro-qvehtbks,.lv-folio__col.astro-qvehtbks.is-featured .lv-offer__price.astro-qvehtbks{color:var(--lv-brand)}.lv-folio__col-note.astro-qvehtbks{max-inline-size:16rem;color:var(--lv-text-tertiary)}.lv-folio__rates.astro-qvehtbks{counter-reset:none}.lv-folio__rate.astro-qvehtbks{gap:var(--lv-space-4)}.lv-folio__rates.astro-qvehtbks .lv-offer__rate-figure.astro-qvehtbks{font-family:var(--lv-font-mono)}.lv-folio__picker.astro-qvehtbks .lv-offer__pick.astro-qvehtbks{border-radius:0;box-shadow:none;border-block-start:1px solid var(--lv-line)}.lv-folio__picker.astro-qvehtbks .lv-offer__pick.astro-qvehtbks:last-child{border-block-end:1px solid var(--lv-line)}
/* components/decide.pricing/renderers/pricing-ledger.astro */
.lv-ledger__entries.astro-dsqgxrhc{display:grid;gap:var(--lv-space-7);margin:0;padding:0;list-style:none;max-inline-size:54rem}@container (min-width: 52rem){.lv-ledger__entries.astro-dsqgxrhc{grid-template-columns:repeat(auto-fit,minmax(20rem,1fr))}}.lv-ledger__line.astro-dsqgxrhc{display:flex;align-items:baseline;gap:var(--lv-space-3);margin-block:0 var(--lv-space-1)}.lv-ledger__name.astro-dsqgxrhc{color:var(--lv-text-primary);font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold)}.lv-ledger__figures.astro-dsqgxrhc{flex:none;text-align:end}.lv-ledger__figures.astro-dsqgxrhc .lv-offer__price.astro-dsqgxrhc{display:block;font-size:var(--lv-text-xl)}.lv-ledger__entry.astro-dsqgxrhc.is-featured .lv-ledger__name.astro-dsqgxrhc,.lv-ledger__entry.astro-dsqgxrhc.is-featured .lv-offer__price--primary.astro-dsqgxrhc{color:var(--lv-brand)}.lv-ledger__col.astro-dsqgxrhc.is-featured,.lv-ledger__cell.astro-dsqgxrhc.is-featured{border-inline:1px solid var(--lv-brand)}.lv-ledger__col.astro-dsqgxrhc.is-featured{border-block-start:1px solid var(--lv-brand);border-start-start-radius:var(--lv-radius-md);border-start-end-radius:var(--lv-radius-md)}.lv-ledger__table.astro-dsqgxrhc tfoot.astro-dsqgxrhc .lv-ledger__cell.astro-dsqgxrhc.is-featured{border-block-end:1px solid var(--lv-brand);border-end-start-radius:var(--lv-radius-md);border-end-end-radius:var(--lv-radius-md)}.lv-ledger__col.astro-dsqgxrhc.is-featured .lv-offer__table-name.astro-dsqgxrhc,.lv-ledger__col.astro-dsqgxrhc.is-featured .lv-offer__price--primary.astro-dsqgxrhc{color:var(--lv-brand)}.lv-ledger__row-label.astro-dsqgxrhc{white-space:normal}.lv-ledger__col-note.astro-dsqgxrhc{display:block;margin-block-start:var(--lv-space-2);max-inline-size:16rem;color:var(--lv-text-tertiary);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);white-space:normal}.lv-ledger__rates.astro-dsqgxrhc .lv-offer__rate.astro-dsqgxrhc{border-block-end-color:transparent}.lv-ledger__rates.astro-dsqgxrhc .lv-offer__rate.astro-dsqgxrhc:first-child{border-block-start-color:transparent}
/* components/decide.pricing/renderers/pricing.astro */
.lv-price__plans.astro-uid5b3bf{display:flex;flex-wrap:wrap;justify-content:center}.lv-price__plan.astro-uid5b3bf{flex:1 1 min(17rem,100%)}@container (min-width: 56rem){.lv-price__plan.astro-uid5b3bf{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}}.lv-price__datum.astro-uid5b3bf{padding-block:var(--lv-space-2) var(--lv-space-3);border-block-end:1px solid var(--lv-line)}.is-featured.astro-uid5b3bf .lv-price__datum.astro-uid5b3bf{border-block-end-color:var(--lv-brand)}.lv-price__name.astro-uid5b3bf{color:var(--lv-text-primary);font-size:var(--lv-text-md)}.lv-price__plan.astro-uid5b3bf.is-featured{box-shadow:inset 0 0 0 2px var(--lv-brand)}.lv-price__table-plan.astro-uid5b3bf.is-featured{background:var(--lv-brand-soft);box-shadow:inset 0 0 0 2px var(--lv-brand);border-radius:var(--lv-radius-md) var(--lv-radius-md) 0 0}
/* components/decide.recommend/renderers/recommender.astro */
.lv-rec.astro-36hco6rd{display:grid;gap:var(--lv-space-6)}.lv-rec__form.astro-36hco6rd{display:grid;gap:var(--lv-space-5)}.lv-rec__q.astro-36hco6rd{border:0;margin:0;padding:0}.lv-rec__q.astro-36hco6rd legend.astro-36hco6rd{padding:0;margin-block-end:var(--lv-space-3)}.lv-rec__opt.astro-36hco6rd{cursor:pointer}.lv-rec__opt.astro-36hco6rd:has(input:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}.lv-rec__outcomes.astro-36hco6rd{display:grid;gap:var(--lv-space-4)}.lv-rec__outcome.astro-36hco6rd{align-items:start}.lv-rec--answered.astro-36hco6rd .lv-rec__outcome.astro-36hco6rd[hidden]{display:none}@container (min-width: 46rem){.lv-rec__outcomes.astro-36hco6rd{display:flex;flex-wrap:wrap;justify-content:center}.lv-rec__outcome.astro-36hco6rd{flex:1 1 min(16rem,100%);max-inline-size:calc((100% - 2 * var(--lv-space-4)) / 3)}}
/* components/decide.variant-picker/renderers/picker.astro */
.lv-picker.astro-m23bntyl{display:grid;gap:var(--lv-space-4);max-width:34rem}.lv-picker__form.astro-m23bntyl{display:grid;gap:var(--lv-space-4);justify-items:start}.lv-picker__attr.astro-m23bntyl{border:0;margin:0;padding:0}.lv-picker__attr.astro-m23bntyl legend.astro-m23bntyl{padding:0;margin-block-end:var(--lv-space-2)}.lv-picker__value.astro-m23bntyl{cursor:pointer}.lv-picker__value.astro-m23bntyl:has(input:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}.lv-picker__value.astro-m23bntyl.is-out{cursor:not-allowed;color:var(--lv-text-tertiary)}.lv-picker__swatch.astro-m23bntyl{inline-size:16px;block-size:16px;border-radius:var(--lv-radius-pill);box-shadow:inset 0 0 0 1px var(--lv-line-strong)}.lv-picker__out.astro-m23bntyl{font-size:var(--lv-text-2xs);text-transform:uppercase;letter-spacing:var(--lv-tracking-label)}
/* components/explain.annotated-image/renderers/callouts.astro */
.lv-anno.astro-elsz2jfl[data-lv-bleed]{padding-inline:var(--lv-gutter)}.lv-anno--full.astro-elsz2jfl .lv-anno__media.astro-elsz2jfl{margin-inline:calc(-1 * var(--lv-gutter));border-radius:0}.lv-anno__canvas.astro-elsz2jfl{display:grid;gap:var(--lv-space-5)}.lv-anno__stage.astro-elsz2jfl{position:relative}.lv-anno__media.astro-elsz2jfl{background:var(--lv-surface-sunken)}.lv-anno__media.astro-elsz2jfl img.astro-elsz2jfl{aspect-ratio:16 / 10;object-position:50% 40%}.lv-anno__media--full.astro-elsz2jfl img.astro-elsz2jfl{aspect-ratio:21 / 10}@container (max-width: 30rem){.lv-anno__media--framed.astro-elsz2jfl img.astro-elsz2jfl{aspect-ratio:4 / 3}}.lv-anno__dots.astro-elsz2jfl{position:absolute;inset:0;pointer-events:none}.lv-anno__dot.astro-elsz2jfl{position:absolute;inset-inline-start:var(--ax);inset-block-start:var(--ay);transform:translate(-50%,-50%);display:grid;place-items:center;inline-size:26px;block-size:26px;border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line-strong),var(--lv-lift-1);font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-mono);font-variant-numeric:tabular-nums;color:var(--lv-brand-strong)}@media (prefers-reduced-motion: no-preference){.lv-anno__dot.astro-elsz2jfl::after{content:"";position:absolute;inset:0;border-radius:inherit;animation:lv-anno-pulse 2.6s var(--lv-ease) infinite}@keyframes lv-anno-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--lv-brand-strong) 45%,transparent)}70%,100%{box-shadow:0 0 0 12px color-mix(in srgb,var(--lv-brand-strong) 0%,transparent)}}}.lv-anno__cards.astro-elsz2jfl{display:grid;gap:var(--lv-space-3);grid-template-columns:repeat(auto-fit,minmax(min(16rem,100%),1fr));margin:0;padding:0;list-style:none}.lv-anno__card.astro-elsz2jfl{min-inline-size:0}.lv-anno__cardbox.astro-elsz2jfl{display:grid;gap:var(--lv-space-2);block-size:100%;padding:var(--lv-space-4);border-radius:var(--lv-radius-md);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-anno__num.astro-elsz2jfl{display:grid;place-items:center;inline-size:20px;block-size:20px;border-radius:var(--lv-radius-pill);background:var(--lv-brand-soft);color:var(--lv-brand-strong);font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-mono);font-variant-numeric:tabular-nums}.lv-anno__label.astro-elsz2jfl{margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);line-height:var(--lv-leading-snug);color:var(--lv-text-primary)}.lv-anno__body.astro-elsz2jfl{margin:0;font-size:var(--lv-text-sm);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-anno__price.astro-elsz2jfl{margin:0;font:var(--lv-weight-medium) var(--lv-text-xs) / 1 var(--lv-font-mono);font-variant-numeric:tabular-nums;color:var(--lv-text-primary)}.lv-anno__link.astro-elsz2jfl{font-size:var(--lv-text-sm)}@container (min-width: 48rem){.lv-anno__canvas--overlay.astro-elsz2jfl{position:relative}.lv-anno__canvas--overlay.astro-elsz2jfl .lv-anno__cards.astro-elsz2jfl{position:absolute;inset:0;display:block;pointer-events:none}.lv-anno__canvas--overlay.astro-elsz2jfl .lv-anno__card--pin.astro-elsz2jfl{position:absolute;inset-inline-start:var(--ax);inset-block-start:var(--ay);inline-size:max-content;max-inline-size:17rem;pointer-events:auto}.lv-anno__canvas--overlay.astro-elsz2jfl .lv-anno__cardbox.astro-elsz2jfl{block-size:auto;box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2)}.lv-anno__card--end.astro-elsz2jfl{transform:translate(var(--lv-space-6),-50%)}.lv-anno__card--end.astro-elsz2jfl::before{content:"";position:absolute;inset-inline-start:calc(-1 * var(--lv-space-6));inset-block-start:50%;inline-size:var(--lv-space-6);border-block-start:1px dashed color-mix(in srgb,var(--lv-text-on-brand) 80%,transparent)}.lv-anno__card--start.astro-elsz2jfl{transform:translate(calc(-100% - var(--lv-space-6)),-50%)}.lv-anno__card--start.astro-elsz2jfl::before{content:"";position:absolute;inset-inline-end:calc(-1 * var(--lv-space-6));inset-block-start:50%;inline-size:var(--lv-space-6);border-block-start:1px dashed color-mix(in srgb,var(--lv-text-on-brand) 80%,transparent)}.lv-anno__canvas--overlay.astro-elsz2jfl .lv-anno__card--pin.astro-elsz2jfl .lv-anno__num.astro-elsz2jfl{display:none}}
/* components/explain.audio/renderers/episode.astro */
.lv-audio.astro-xtlxuwqs{display:grid;gap:var(--lv-space-4);max-width:44rem;padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-audio__head.astro-xtlxuwqs{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--lv-space-3)}.lv-audio__player.astro-xtlxuwqs{inline-size:100%}.lv-audio__transcript.astro-xtlxuwqs>summary.astro-xtlxuwqs{cursor:pointer;font-weight:var(--lv-weight-medium);color:var(--lv-text-link);min-block-size:32px}.lv-audio__transcript.astro-xtlxuwqs[open]>summary.astro-xtlxuwqs{margin-block-end:var(--lv-space-3)}
/* components/explain.before-after/renderers/compare.astro */
.lv-ba__pair.astro-nboiqvbl figure.astro-nboiqvbl{position:relative}@container (min-width: 34rem){.lv-ba__pair.astro-nboiqvbl{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}.lv-ba__cap.astro-nboiqvbl{position:absolute;inset-block-end:var(--lv-space-3);inset-inline-start:var(--lv-space-3);padding:2px var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface);color:var(--lv-text-primary);font:var(--lv-weight-semibold) var(--lv-text-xs) / 1.8 var(--lv-font-ui);box-shadow:var(--lv-lift-1)}.lv-ba__slider.astro-nboiqvbl{position:relative;overflow:hidden;border-radius:var(--lv-radius-md);aspect-ratio:16 / 9}.lv-ba__img.astro-nboiqvbl{position:absolute;inset:0;inline-size:100%;block-size:100%;object-fit:cover}.lv-ba__img--clip.astro-nboiqvbl{clip-path:inset(0 calc(100% - var(--lv-ba-pos)) 0 0)}.lv-ba__seam.astro-nboiqvbl{position:absolute;inset-block:0;inset-inline-start:var(--lv-ba-pos);inline-size:2px;background:var(--lv-surface);box-shadow:0 0 0 1px rgb(0 0 0 / 0.18);pointer-events:none;translate:-1px 0}.lv-ba__handle.astro-nboiqvbl{position:absolute;inset-block-start:50%;inset-inline-start:var(--lv-ba-pos);display:grid;place-items:center;inline-size:44px;block-size:44px;border-radius:var(--lv-radius-pill);color:var(--lv-text-primary);background:var(--lv-surface);box-shadow:var(--lv-lift-2);pointer-events:none;translate:-50% -50%;transition:scale var(--lv-dur-fast) var(--lv-ease)}.lv-ba__slider.astro-nboiqvbl:hover .lv-ba__handle.astro-nboiqvbl{scale:1.08}.lv-ba__slider.astro-nboiqvbl:has(.lv-ba__range:active) .lv-ba__handle.astro-nboiqvbl{scale:0.92}.lv-ba__range.astro-nboiqvbl{position:absolute;z-index:1;inset:0;inline-size:100%;block-size:100%;margin:0;padding:0;border:0;opacity:0;background:transparent;cursor:ew-resize;-webkit-appearance:none;appearance:none}.lv-ba__range.astro-nboiqvbl:focus-visible{outline:none}.lv-ba__range.astro-nboiqvbl:focus-visible~.lv-ba__handle.astro-nboiqvbl{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:2px}.lv-ba__slider.astro-nboiqvbl:has(.lv-ba__range:focus-visible) .lv-ba__handle.astro-nboiqvbl{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:2px}.lv-ba__labels.astro-nboiqvbl{position:absolute;inset-block-start:var(--lv-space-3);inset-inline:var(--lv-space-3);display:flex;justify-content:space-between;margin:0}.lv-ba__labels.astro-nboiqvbl .lv-badge.astro-nboiqvbl{box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-1)}.lv-ba__note.astro-nboiqvbl{max-width:var(--lv-measure);margin-block-start:var(--lv-space-4);color:var(--lv-text-secondary)}
/* components/explain.callout/renderers/callout.astro */
.lv-note__body.astro-crtf3wp5 p:last-child{margin-block-end:0}
/* components/explain.capability-bento/renderers/bento.astro */
.lv-bento.astro-g6ekzl4p{display:grid;gap:var(--lv-space-4);margin:0;padding:0;list-style:none;grid-template-columns:minmax(0,1fr)}.lv-bento__tile.astro-g6ekzl4p{justify-content:end}.lv-bento__media.astro-g6ekzl4p{margin-block-end:auto}.lv-bento__icon.astro-g6ekzl4p{margin-block-end:auto}.lv-bento__link.astro-g6ekzl4p{margin-block-start:var(--lv-space-2)}@container (min-width: 46rem){.lv-bento.astro-g6ekzl4p{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:minmax(11rem,auto)}.lv-bento__tile--1x1.astro-g6ekzl4p{grid-column:span 2}.lv-bento__tile--2x1.astro-g6ekzl4p{grid-column:span 4}.lv-bento__tile--1x2.astro-g6ekzl4p{grid-column:span 2;grid-row:span 2}.lv-bento__tile--2x2.astro-g6ekzl4p{grid-column:span 2;grid-row:span 2}.lv-bento__tile--1x2.astro-g6ekzl4p,.lv-bento__tile--2x2.astro-g6ekzl4p{gap:var(--lv-space-4);padding:var(--lv-space-6)}.lv-bento__tile--1x2.astro-g6ekzl4p .lv-card__title.astro-g6ekzl4p,.lv-bento__tile--2x2.astro-g6ekzl4p .lv-card__title.astro-g6ekzl4p{font-size:var(--lv-text-lg)}.lv-bento__tile--1x2.astro-g6ekzl4p .lv-card__body.astro-g6ekzl4p,.lv-bento__tile--2x2.astro-g6ekzl4p .lv-card__body.astro-g6ekzl4p{font-size:var(--lv-text-md)}}@container (min-width: 68rem){.lv-bento.astro-g6ekzl4p{grid-template-columns:repeat(6,minmax(0,1fr))}.lv-bento__tile--1x1.astro-g6ekzl4p{grid-column:span 2}.lv-bento__tile--2x1.astro-g6ekzl4p{grid-column:span 4}.lv-bento__tile--1x2.astro-g6ekzl4p{grid-column:span 2;grid-row:span 2}.lv-bento__tile--2x2.astro-g6ekzl4p{grid-column:span 4;grid-row:span 2}.lv-bento__tile--2x2.astro-g6ekzl4p .lv-card__title.astro-g6ekzl4p{font-size:var(--lv-text-xl)}}
/* components/explain.capability-grid/renderers/grid.astro */
.lv-grid.astro-hl3h37ig.lv-grid--cols{display:flex;flex-wrap:wrap;justify-content:center;--lv-caps-gap: var(--lv-space-5)}.lv-caps__item.astro-hl3h37ig{flex:1 1 min(17rem,100%)}@container (min-width: 44rem){.lv-caps__item.astro-hl3h37ig{flex-basis:calc((100% - (var(--lv-cols) - 1) * var(--lv-caps-gap)) / var(--lv-cols));max-inline-size:calc((100% - (var(--lv-cols) - 1) * var(--lv-caps-gap)) / var(--lv-cols))}}.lv-caps--icon-left.astro-hl3h37ig .lv-caps__item.astro-hl3h37ig{display:grid;grid-template-columns:var(--lv-space-7) minmax(0,1fr);gap:var(--lv-space-2) var(--lv-space-4);align-items:start}.lv-caps--icon-left.astro-hl3h37ig .lv-caps__icon.astro-hl3h37ig{grid-row:span 3}.lv-caps--strip.astro-hl3h37ig .lv-grid.astro-hl3h37ig{gap:var(--lv-space-4);--lv-caps-gap: var(--lv-space-4)}.lv-caps--strip.astro-hl3h37ig .lv-card__body.astro-hl3h37ig{display:none}.lv-caps--strip.astro-hl3h37ig .lv-card__title.astro-hl3h37ig{font-size:var(--lv-text-sm)}
/* components/explain.changelog/renderers/log.astro */
.lv-log.astro-fmksnraa{max-width:52rem}.lv-log__entry.astro-fmksnraa{display:grid;gap:var(--lv-space-2)}.lv-log__meta.astro-fmksnraa{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3);margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-log__kind--added.astro-fmksnraa{background:var(--lv-ok-surface);color:var(--lv-ok-text)}.lv-log__kind--fixed.astro-fmksnraa{background:var(--lv-warn-surface);color:var(--lv-warn-text)}.lv-log__kind--removed.astro-fmksnraa{background:var(--lv-bad-surface);color:var(--lv-bad-text)}.lv-log__body.astro-fmksnraa{margin-block-start:var(--lv-space-2)}
/* components/explain.checklist/renderers/list.astro */
.lv-check.astro-5njhugbd{max-width:var(--lv-measure)}.lv-check__title.astro-5njhugbd{margin-block-end:var(--lv-space-3)}.lv-check__item.astro-5njhugbd{display:grid;gap:var(--lv-space-1)}.lv-check__label.astro-5njhugbd{display:flex;align-items:start;gap:var(--lv-space-3);margin:0;min-block-size:32px;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-check__label.astro-5njhugbd input.astro-5njhugbd{margin-block-start:3px;inline-size:18px;block-size:18px;flex:none}.lv-check__mark.astro-5njhugbd{flex:none;inline-size:18px;block-size:18px;margin-block-start:3px;border-radius:var(--lv-radius-sm);box-shadow:inset 0 0 0 1px var(--lv-line-strong)}.lv-check__note.astro-5njhugbd{margin:0;padding-inline-start:calc(18px + var(--lv-space-3));font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}
/* components/explain.integrations/renderers/integrations.astro */
.lv-integr.astro-er5ma4eq{display:grid;gap:var(--lv-space-7)}.lv-integr__label.astro-er5ma4eq{padding-block-end:var(--lv-space-2);margin-block-end:var(--lv-space-4);border-block-end:1px solid var(--lv-line)}.lv-integr__logo.astro-er5ma4eq{inline-size:2.5rem;block-size:2.5rem;object-fit:contain;object-position:left center}
/* components/explain.narrative-media/renderers/evidence-rows.astro */
.lv-evidence__rows.astro-r62bxwl7{display:grid;gap:var(--lv-space-4)}.lv-evidence__row.astro-r62bxwl7{display:grid;gap:var(--lv-space-5);padding:var(--lv-space-5);border-radius:var(--lv-radius-lg)}.lv-evidence__row.astro-r62bxwl7:nth-child(even){background:var(--lv-surface-sunken)}.lv-evidence__copy.astro-r62bxwl7{display:flex;flex-direction:column;justify-content:center;gap:var(--lv-space-3)}.lv-evidence__eyebrow.astro-r62bxwl7{font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-ink-accent)}.lv-evidence__title.astro-r62bxwl7{font-size:var(--lv-text-lg)}.lv-evidence__body.astro-r62bxwl7 p.astro-r62bxwl7{margin:0}.lv-evidence__body.astro-r62bxwl7 p.astro-r62bxwl7+p.astro-r62bxwl7{margin-block-start:var(--lv-space-3)}.lv-evidence__media.astro-r62bxwl7{position:relative;padding:var(--lv-space-4);background:var(--lv-brand-soft);border-radius:var(--lv-radius-lg)}.lv-evidence__media.astro-r62bxwl7>img.astro-r62bxwl7{border-radius:var(--lv-radius-sm)}.lv-evidence--frame-browser.astro-r62bxwl7 .lv-evidence__media.astro-r62bxwl7{padding:var(--lv-space-6) var(--lv-space-1) var(--lv-space-1);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-evidence--frame-browser.astro-r62bxwl7 .lv-evidence__media.astro-r62bxwl7::before{content:"";position:absolute;inset-block-start:calc(var(--lv-space-6) / 2);inset-inline-start:var(--lv-space-3);translate:0 -50%;inline-size:1.75rem;block-size:0.5rem;background-image:radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%),radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%),radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%);background-repeat:no-repeat;background-size:0.5rem 0.5rem;background-position:0 center,0.625rem center,1.25rem center}.lv-evidence__facts.astro-r62bxwl7{display:grid;gap:var(--lv-space-2);margin:0;padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-evidence__fact.astro-r62bxwl7{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--lv-space-3);font-size:var(--lv-text-sm)}.lv-evidence__fact.astro-r62bxwl7 dt.astro-r62bxwl7{margin:0;color:var(--lv-text-tertiary)}.lv-evidence__fact.astro-r62bxwl7 dd.astro-r62bxwl7{margin:0;color:var(--lv-text-primary);font-weight:var(--lv-weight-medium)}@container (min-width: 50rem){.lv-evidence__row.astro-r62bxwl7{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--lv-space-6);padding:var(--lv-space-6)}.lv-evidence__row--copy-only.astro-r62bxwl7{grid-template-columns:minmax(0,1fr)}.lv-evidence__row--copy-only.astro-r62bxwl7 .lv-evidence__copy.astro-r62bxwl7{max-inline-size:var(--lv-measure)}.lv-evidence__row.astro-r62bxwl7:nth-child(even)>.astro-r62bxwl7:first-child{order:2}.lv-evidence--fixed-side.astro-r62bxwl7 .lv-evidence__row.astro-r62bxwl7:nth-child(even)>.astro-r62bxwl7:first-child{order:0}}
/* components/explain.narrative-media/renderers/manifesto.astro */
.lv-manifest.astro-lzs3ztnm{display:grid;align-content:center;min-block-size:min(100dvh,46rem)}@media (max-height: 34rem){.lv-manifest.astro-lzs3ztnm{min-block-size:0}}.lv-manifest__inner.astro-lzs3ztnm{display:grid;gap:var(--lv-space-8);justify-items:start}.lv-manifest__statement.astro-lzs3ztnm{display:grid;gap:var(--lv-space-5);justify-items:start;max-inline-size:34ch}.lv-manifest__eyebrow.astro-lzs3ztnm{margin-block-end:0}.lv-manifest__lede.astro-lzs3ztnm{margin:0;max-inline-size:22ch;font-size:clamp(var(--lv-text-xl),6cqi,var(--lv-text-2xl));font-weight:var(--lv-weight-heading);line-height:1.05;letter-spacing:var(--lv-tracking-heading);color:var(--lv-text-primary);text-wrap:balance}.lv-manifest__lines.astro-lzs3ztnm{display:grid;gap:var(--lv-space-4)}.lv-manifest__line.astro-lzs3ztnm{margin:0;max-inline-size:none}.lv-manifest__claim.astro-lzs3ztnm{display:block;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-medium);line-height:1.25;letter-spacing:var(--lv-tracking-label);color:var(--lv-text-primary);text-wrap:balance}.lv-manifest__aside.astro-lzs3ztnm{display:block;margin-block-start:var(--lv-space-2);font-size:var(--lv-text-sm);line-height:1.55;color:var(--lv-text-tertiary)}.lv-manifest__clause.astro-lzs3ztnm{display:block}.lv-manifest__clause.astro-lzs3ztnm+.lv-manifest__clause.astro-lzs3ztnm{margin-block-start:var(--lv-space-2)}.lv-manifest__action.astro-lzs3ztnm{display:inline-flex;align-items:center;min-block-size:24px;font:var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);color:var(--lv-text-secondary);text-decoration:underline;text-underline-offset:0.4em;text-decoration-thickness:1px}.lv-manifest__action.astro-lzs3ztnm:hover{color:var(--lv-text-primary)}.lv-manifest__stats.astro-lzs3ztnm{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,max-content));gap:var(--lv-space-5);margin:0}.lv-manifest__cell.astro-lzs3ztnm{position:relative;display:flex;flex-direction:column-reverse;justify-content:end;padding:var(--lv-space-4) var(--lv-space-5)}.lv-manifest__cell.astro-lzs3ztnm::before,.lv-manifest__cell.astro-lzs3ztnm::after{content:"";position:absolute;inline-size:var(--lv-space-3);block-size:var(--lv-space-3);border:0 solid var(--lv-line)}.lv-manifest__cell.astro-lzs3ztnm::before{inset-block-start:0;inset-inline-start:0;border-block-start-width:1px;border-inline-start-width:1px}.lv-manifest__cell.astro-lzs3ztnm::after{inset-block-end:0;inset-inline-end:0;border-block-end-width:1px;border-inline-end-width:1px}.lv-manifest__cell-value.astro-lzs3ztnm{margin:0;font:var(--lv-weight-bold) var(--lv-text-lg) / 1.1 var(--lv-font-mono);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num);color:var(--lv-text-primary)}.lv-manifest__cell-label.astro-lzs3ztnm{margin:0;margin-block-start:var(--lv-space-2);font:var(--lv-weight-medium) var(--lv-text-xs) / 1.3 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}
/* components/explain.narrative-media/renderers/stacked-scenes.astro */
.lv-walk__stack.astro-44mwlfpm{display:grid;gap:var(--lv-space-6)}.lv-walk__scene.astro-44mwlfpm{display:grid;gap:var(--lv-space-3)}.lv-walk__label.astro-44mwlfpm{display:flex;align-items:baseline;gap:var(--lv-space-3);margin:0;font:var(--lv-weight-medium) var(--lv-text-xs) / 1.2 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-secondary)}.lv-walk__step.astro-44mwlfpm{font-family:var(--lv-font-mono);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num);color:var(--lv-ink-accent)}.lv-walk__card.astro-44mwlfpm{display:grid;gap:var(--lv-space-4);padding:var(--lv-space-5);border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised)}.lv-walk__title.astro-44mwlfpm{font-size:var(--lv-text-lg)}.lv-walk__media.astro-44mwlfpm{border-radius:var(--lv-radius-md)}.lv-walk__body.astro-44mwlfpm p.astro-44mwlfpm{margin:0}.lv-walk__body.astro-44mwlfpm p.astro-44mwlfpm+p.astro-44mwlfpm{margin-block-start:var(--lv-space-3)}.lv-walk__facts.astro-44mwlfpm{display:grid;gap:var(--lv-space-2);margin:0;padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-walk__fact.astro-44mwlfpm{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--lv-space-3);font-size:var(--lv-text-sm)}.lv-walk__fact.astro-44mwlfpm dt.astro-44mwlfpm{margin:0;color:var(--lv-text-tertiary)}.lv-walk__fact.astro-44mwlfpm dd.astro-44mwlfpm{margin:0;color:var(--lv-text-primary);font-weight:var(--lv-weight-medium)}@container (min-width: 56rem){.lv-walk__scene.astro-44mwlfpm{grid-template-columns:minmax(0,9rem) minmax(0,1fr);column-gap:var(--lv-space-7);align-items:start}.lv-walk__label.astro-44mwlfpm{position:relative;flex-direction:column;gap:var(--lv-space-2);padding-block-start:var(--lv-space-5)}.lv-walk__label.astro-44mwlfpm::before{content:"";position:absolute;inset-block-start:var(--lv-space-5);inset-inline-start:calc(var(--lv-space-4) * -1);inline-size:2px;block-size:1.5rem;background:var(--lv-ink-accent);opacity:0.25;transform-origin:top;scale:1 0.35}.lv-walk__card.astro-44mwlfpm{padding:var(--lv-space-6)}@media (prefers-reduced-motion: no-preference){.lv-walk__stack.astro-44mwlfpm{gap:var(--lv-space-8)}.lv-walk__scene.astro-44mwlfpm{position:sticky;inset-block-start:calc(var(--lv-space-6) + var(--lv-walk-index, 0) * var(--lv-space-2))}@supports (animation-timeline: view()){.lv-walk__label.astro-44mwlfpm::before{animation:lv-walk-mark linear both;animation-timeline:view()}@keyframes lv-walk-mark{0%,100%{opacity:0.25;scale:1 0.35}35%,65%{opacity:1;scale:1 1}}}}}[data-lv-state="scene-open"] .lv-walk__scene.astro-44mwlfpm{position:static}[data-lv-state="scene-open"] .lv-walk__label.astro-44mwlfpm::before,[data-lv-state="rail-label-active"] .lv-walk__label.astro-44mwlfpm::before{animation:none;opacity:1;scale:1 1}[data-lv-state="scene-pinned"] .lv-walk__scene.astro-44mwlfpm{position:sticky;inset-block-start:calc(var(--lv-space-6) + var(--lv-walk-index, 0) * var(--lv-space-2))}[data-lv-state="scene-covered"] .lv-walk__scene.astro-44mwlfpm:not(:last-child) .lv-walk__card.astro-44mwlfpm{filter:saturate(0.5)}
/* components/explain.narrative-media/renderers/stage-chips.astro */
.lv-stages__row.astro-y64jijaf{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:var(--lv-space-4)}.lv-stages__card.astro-y64jijaf{display:flex;flex-direction:column;gap:var(--lv-space-3);padding:var(--lv-space-5);border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised)}.lv-stages__chip.astro-y64jijaf{display:inline-flex;align-items:baseline;gap:var(--lv-space-2);align-self:start;margin:0;padding:var(--lv-space-1) var(--lv-space-3);border:1px solid var(--lv-ink-accent);border-radius:var(--lv-radius-pill);font:var(--lv-weight-bold) var(--lv-text-xs) / 1.4 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-ink-accent)}.lv-stages__no.astro-y64jijaf{font-family:var(--lv-font-mono);font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num)}.lv-stages__media.astro-y64jijaf{border-radius:var(--lv-radius-md)}.lv-stages__body.astro-y64jijaf{color:var(--lv-text-secondary)}.lv-stages__body.astro-y64jijaf p.astro-y64jijaf{margin:0}.lv-stages__body.astro-y64jijaf p.astro-y64jijaf+p.astro-y64jijaf{margin-block-start:var(--lv-space-3)}.lv-stages__checks.astro-y64jijaf{display:grid;gap:var(--lv-space-2);margin:0;padding:0;list-style:none;font-size:var(--lv-text-sm)}.lv-stages__checks.astro-y64jijaf>li.astro-y64jijaf{display:grid;grid-template-columns:1rem 1fr;align-items:baseline;gap:var(--lv-space-1) var(--lv-space-3)}.lv-stages__checks.astro-y64jijaf>li.astro-y64jijaf::before{content:"";inline-size:0.5rem;block-size:0.85rem;justify-self:center;border-inline-end:2px solid currentColor;border-block-end:2px solid currentColor;rotate:45deg;translate:0 -0.15rem;color:var(--lv-text-tertiary)}.lv-stages__check-label.astro-y64jijaf{color:var(--lv-text-primary);font-weight:var(--lv-weight-medium)}.lv-stages__check-value.astro-y64jijaf{grid-column:2;color:var(--lv-text-tertiary)}.lv-stages__promise.astro-y64jijaf{display:flex;flex-direction:column;gap:var(--lv-space-2);align-items:start;margin-block-start:auto;padding-block-start:var(--lv-space-4)}.lv-stages__title.astro-y64jijaf{margin:0;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-heading);letter-spacing:var(--lv-tracking-heading);color:var(--lv-text-primary);text-wrap:balance}.lv-stages--band.astro-y64jijaf .lv-stages__row.astro-y64jijaf{grid-template-columns:minmax(0,1fr)}.lv-stages--band.astro-y64jijaf .lv-stages__card.astro-y64jijaf{border:0;border-radius:0;padding:0;background:none;border-block-start:1px solid var(--lv-line);padding-block-start:var(--lv-space-5)}.lv-stages--band.astro-y64jijaf .lv-stages__promise.astro-y64jijaf{padding-block-start:var(--lv-space-3)}@container (min-width: 44rem){.lv-stages--band.astro-y64jijaf .lv-stages__card.astro-y64jijaf{display:grid;grid-template-columns:minmax(0,7rem) minmax(0,1fr);column-gap:var(--lv-space-6);align-items:start}.lv-stages--band.astro-y64jijaf .lv-stages__chip.astro-y64jijaf{grid-row:1 / span 4}}
/* components/explain.narrative-media/renderers/story.astro */
.lv-story__blocks.astro-ifnxmb4c{display:grid;gap:var(--lv-space-8)}.lv-story__title.astro-ifnxmb4c{font-size:var(--lv-text-lg)}.lv-story__body.astro-ifnxmb4c p.astro-ifnxmb4c{margin:0}.lv-story__body.astro-ifnxmb4c p.astro-ifnxmb4c+p.astro-ifnxmb4c{margin-block-start:var(--lv-space-3)}.lv-story__media.astro-ifnxmb4c{position:relative}.lv-story--alternating.astro-ifnxmb4c.lv-story--media-lift .lv-story__media.astro-ifnxmb4c{box-shadow:var(--lv-lift-3);border-radius:var(--lv-radius-lg)}.lv-story--frame-tint.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c{padding:var(--lv-space-4);background:var(--lv-brand-soft);border-radius:var(--lv-radius-lg)}.lv-story--frame-tint.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c>img.astro-ifnxmb4c{border-radius:var(--lv-radius-sm)}.lv-story--frame-tint.astro-ifnxmb4c .lv-story__swap.astro-ifnxmb4c{inset:var(--lv-space-4);border-radius:var(--lv-radius-sm)}.lv-story--frame-browser.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c{padding:var(--lv-space-6) var(--lv-space-1) var(--lv-space-1);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line);border-radius:var(--lv-radius-lg)}.lv-story--frame-browser.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c::before{content:"";position:absolute;inset-block-start:calc(var(--lv-space-6) / 2);inset-inline-start:var(--lv-space-3);translate:0 -50%;inline-size:1.75rem;block-size:0.5rem;background-image:radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%),radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%),radial-gradient(circle,var(--lv-line) 0 46%,transparent 50%);background-repeat:no-repeat;background-size:0.5rem 0.5rem;background-position:0 center,0.625rem center,1.25rem center}.lv-story--frame-browser.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c>img.astro-ifnxmb4c{border-radius:var(--lv-radius-sm)}.lv-story--frame-browser.astro-ifnxmb4c .lv-story__swap.astro-ifnxmb4c{inset:var(--lv-space-6) var(--lv-space-1) var(--lv-space-1);border-radius:var(--lv-radius-sm)}.lv-story--alternating.astro-ifnxmb4c.lv-story--media-lift.lv-story--frame-browser .lv-story__media.astro-ifnxmb4c{box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-3)}.lv-story__index.astro-ifnxmb4c{display:block;margin-block-end:var(--lv-space-2);font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-bold);color:var(--lv-text-tertiary);font-variant-numeric:tabular-nums}.lv-story__category.astro-ifnxmb4c{display:block;margin-block-end:var(--lv-space-2);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-ink-accent)}.lv-story__facts.astro-ifnxmb4c{display:grid;gap:var(--lv-space-2);margin-block-start:var(--lv-space-4);padding-block-start:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-story__fact.astro-ifnxmb4c{display:grid;grid-template-columns:minmax(6rem,max-content) 1fr;gap:var(--lv-space-3);font-size:var(--lv-text-sm)}.lv-story__fact.astro-ifnxmb4c dt.astro-ifnxmb4c{margin:0;color:var(--lv-text-tertiary)}.lv-story__fact.astro-ifnxmb4c dd.astro-ifnxmb4c{margin:0;color:var(--lv-text-primary);font-weight:var(--lv-weight-medium)}@container (min-width: 46rem){.lv-story--alternating.astro-ifnxmb4c .lv-story__block.astro-ifnxmb4c:nth-child(even)>.astro-ifnxmb4c:first-child{order:2}.lv-story--alternating.astro-ifnxmb4c.lv-story--split-75 .lv-story__block.astro-ifnxmb4c{grid-template-columns:minmax(0,5fr) minmax(0,7fr)}.lv-story--alternating.astro-ifnxmb4c.lv-story--split-75 .lv-story__block.astro-ifnxmb4c:nth-child(even){grid-template-columns:minmax(0,7fr) minmax(0,5fr)}.lv-story--overlap.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c{margin-inline-start:calc(var(--lv-space-7) * -1)}.lv-story--layered.astro-ifnxmb4c .lv-story__media.astro-ifnxmb4c{margin-block-start:var(--lv-space-7);box-shadow:var(--lv-lift-3)}.lv-story--layered.astro-ifnxmb4c .lv-story__block.astro-ifnxmb4c:nth-child(even) .lv-story__media.astro-ifnxmb4c{margin-block-start:0;margin-block-end:var(--lv-space-7)}}.lv-story__swap.astro-ifnxmb4c{position:absolute;inset:0;opacity:0;transition:opacity var(--lv-dur-panel) var(--lv-ease)}.lv-story--material.astro-ifnxmb4c .lv-story__block.astro-ifnxmb4c:hover .lv-story__swap.astro-ifnxmb4c,.lv-story--material.astro-ifnxmb4c .lv-story__block.astro-ifnxmb4c:focus-within .lv-story__swap.astro-ifnxmb4c{opacity:1}@media (prefers-reduced-motion: reduce){.lv-story__swap.astro-ifnxmb4c{transition:none}}
/* components/explain.pinned-walkthrough/renderers/pinned.astro */
.lv-pinned__grid.astro-g3wdmnfx{display:grid;gap:var(--lv-space-7)}.lv-pinned__caption.astro-g3wdmnfx{margin-block-start:var(--lv-space-2)}.lv-pinned__point-media.astro-g3wdmnfx{margin-block-start:var(--lv-space-3);max-inline-size:18rem;aspect-ratio:4 / 3}.lv-pinned__point-link.astro-g3wdmnfx{display:inline-block;margin-block-start:var(--lv-space-3)}@container (min-width: 52rem){.lv-pinned__grid.astro-g3wdmnfx{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.lv-pinned--end.astro-g3wdmnfx .lv-pinned__pin.astro-g3wdmnfx{order:2}.lv-pinned__pin.astro-g3wdmnfx{position:sticky;inset-block-start:var(--lv-space-6);align-self:start}}
/* components/explain.problem/renderers/problem.astro */
.lv-problem__list.astro-hv4bmycq{max-width:52rem}.lv-problem__item.astro-hv4bmycq{display:grid;gap:var(--lv-space-2)}.lv-problem__item.astro-hv4bmycq:has(.lv-problem__icon){grid-template-columns:var(--lv-space-6) minmax(0,1fr);column-gap:var(--lv-space-4)}.lv-problem__icon.astro-hv4bmycq{grid-row:span 2;align-self:start}.lv-problem__turn.astro-hv4bmycq{max-width:var(--lv-measure);margin-block-start:var(--lv-space-6);font-size:var(--lv-text-lg);font-weight:var(--lv-weight-medium);color:var(--lv-text-primary);text-wrap:pretty}
/* components/explain.product-demo/renderers/demo.astro */
.lv-demo.astro-j323odj3{border-radius:var(--lv-radius-lg);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line),var(--lv-lift-2);overflow:hidden}.lv-demo--device.astro-j323odj3{border-radius:var(--lv-radius-xl);max-inline-size:24rem;margin-inline:auto}.lv-demo--none.astro-j323odj3{background:none;box-shadow:none;border-radius:0}.lv-demo__chrome.astro-j323odj3{display:flex;align-items:center;gap:var(--lv-space-4);padding:var(--lv-space-3) var(--lv-space-4);border-block-end:1px solid var(--lv-line);background:var(--lv-surface-sunken)}.lv-demo__dots.astro-j323odj3{inline-size:42px;block-size:10px;border-radius:var(--lv-radius-pill);background:radial-gradient(circle 4px at 5px 5px,var(--lv-line-strong) 100%,transparent 0),radial-gradient(circle 4px at 21px 5px,var(--lv-line-strong) 100%,transparent 0),radial-gradient(circle 4px at 37px 5px,var(--lv-line-strong) 100%,transparent 0)}.lv-demo__url.astro-j323odj3{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-demo__switcher.astro-j323odj3{display:flex;flex-wrap:wrap;gap:var(--lv-space-2);margin:0;padding:var(--lv-space-4) var(--lv-space-4) 0;border:0}.lv-demo__tab.astro-j323odj3{display:inline-flex;align-items:center;gap:var(--lv-space-2);min-block-size:44px;padding-inline:var(--lv-space-4);border-radius:var(--lv-radius-pill);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line-control);font:var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);color:var(--lv-text-secondary);cursor:pointer}.lv-demo__tab.astro-j323odj3:has(.lv-demo__radio:checked){background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand);color:var(--lv-brand-strong)}.lv-demo__tab.astro-j323odj3:has(.lv-demo__radio:focus-visible){outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-demo__tab-num.astro-j323odj3{font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-mono)}.lv-demo__scenes.astro-j323odj3{padding:var(--lv-space-5)}.lv-demo__scene.astro-j323odj3{display:none;margin:0}.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(1) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(1),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(2) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(2),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(3) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(3),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(4) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(4),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(5) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(5),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(6) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(6),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(7) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(7),.lv-demo.astro-j323odj3:has(.lv-demo__tab:nth-of-type(8) .lv-demo__radio:checked) .lv-demo__scene.astro-j323odj3:nth-of-type(8){display:block}.lv-demo__cap.astro-j323odj3{display:grid;gap:var(--lv-space-1);margin-block-start:var(--lv-space-3);font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-demo__illustration.astro-j323odj3{display:flex;flex-direction:column;justify-content:center;gap:var(--lv-space-3);block-size:100%;padding:var(--lv-space-5);background:var(--lv-surface)}.lv-demo__illustration--build.astro-j323odj3 .lv-demo__i-hero.astro-j323odj3{display:block;block-size:40%;border-radius:var(--lv-radius-md);background:var(--lv-brand-soft)}.lv-demo__illustration--build.astro-j323odj3 .lv-demo__i-line.astro-j323odj3{display:block;block-size:var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-surface-sunken);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-demo__illustration--build.astro-j323odj3 .lv-demo__i-line--short.astro-j323odj3{inline-size:60%}.lv-demo__illustration--build.astro-j323odj3 .lv-demo__i-cta.astro-j323odj3{display:block;inline-size:40%;block-size:var(--lv-space-6);margin-block-start:auto;border-radius:var(--lv-radius-pill);background:var(--lv-brand)}.lv-demo__i-top.astro-j323odj3{display:flex;align-items:center;justify-content:space-between}.lv-demo__i-live.astro-j323odj3{display:inline-flex;align-items:center;gap:var(--lv-space-2);font:var(--lv-weight-semibold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-ok-text)}.lv-demo__i-dot.astro-j323odj3{inline-size:8px;block-size:8px;border-radius:var(--lv-radius-pill);background:currentColor}.lv-demo__i-num.astro-j323odj3{font-size:var(--lv-text-xl);font-weight:var(--lv-weight-bold);color:var(--lv-text-primary)}.lv-demo__i-bars.astro-j323odj3{display:flex;align-items:flex-end;gap:var(--lv-space-2);flex:1}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3{flex:1;block-size:100%;border-radius:var(--lv-radius-sm) var(--lv-radius-sm) 0 0;background:color-mix(in srgb,var(--lv-brand) 70%,transparent);transform:scaleY(var(--h, 1));transform-origin:bottom}.lv-demo__i-bubble.astro-j323odj3{max-inline-size:78%;padding:var(--lv-space-2) var(--lv-space-3);border-radius:var(--lv-radius-lg);font-size:var(--lv-text-sm)}.lv-demo__i-bubble--bot.astro-j323odj3{align-self:flex-start;background:var(--lv-surface-sunken);box-shadow:inset 0 0 0 1px var(--lv-line);color:var(--lv-text-primary)}.lv-demo__i-bubble--user.astro-j323odj3{align-self:flex-end;background:var(--lv-ramp);color:var(--lv-text-on-brand)}@media (prefers-reduced-motion: no-preference){.lv-demo__i-dot.astro-j323odj3{animation:lv-demo-pulse 1.8s var(--lv-ease) infinite}@keyframes lv-demo-pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--lv-ok-text) 45%,transparent)}50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--lv-ok-text) 0%,transparent)}}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3{animation:lv-demo-bar-grow 6s var(--lv-ease) infinite}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(1){animation-delay:0s}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(2){animation-delay:.15s}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(3){animation-delay:.3s}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(4){animation-delay:.45s}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(5){animation-delay:.6s}.lv-demo__i-bars.astro-j323odj3 span.astro-j323odj3:nth-child(6){animation-delay:.75s}@keyframes lv-demo-bar-grow{0%,6%{transform:scaleY(0)}30%,85%{transform:scaleY(var(--h, 1))}97%,100%{transform:scaleY(0)}}.lv-demo__i-hero.astro-j323odj3,.lv-demo__i-line.astro-j323odj3,.lv-demo__i-cta.astro-j323odj3{animation:lv-demo-stage-in 6s var(--lv-ease) infinite}.lv-demo__i-hero.astro-j323odj3{animation-delay:0s}.lv-demo__i-line--1.astro-j323odj3{animation-delay:.3s}.lv-demo__i-line--2.astro-j323odj3{animation-delay:.45s}.lv-demo__i-cta.astro-j323odj3{animation-delay:.7s}@keyframes lv-demo-stage-in{0%,4%{opacity:0;transform:translateY(6px)}14%,88%{opacity:1;transform:translateY(0)}97%,100%{opacity:0;transform:translateY(-4px)}}.lv-demo__i-bubble.astro-j323odj3{animation:lv-demo-stage-in 6s var(--lv-ease) infinite}.lv-demo__i-bubble--1.astro-j323odj3{animation-delay:0s}.lv-demo__i-bubble--2.astro-j323odj3{animation-delay:.35s}.lv-demo__i-bubble--3.astro-j323odj3{animation-delay:.7s}}
/* components/explain.progressive-disclosure/renderers/panels.astro */
.lv-disc__panels.astro-iu43v7vy{max-width:56rem}.lv-disc__panel.astro-iu43v7vy{border-block-end:1px solid var(--lv-line)}.lv-disc__panel.astro-iu43v7vy:first-child{border-block-start:1px solid var(--lv-line)}.lv-disc__summary.astro-iu43v7vy{display:flex;align-items:center;justify-content:space-between;gap:var(--lv-space-4);min-block-size:52px;padding-block:var(--lv-space-3);cursor:pointer;font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary);list-style:none}.lv-disc__summary.astro-iu43v7vy::-webkit-details-marker{display:none}.lv-disc__summary.astro-iu43v7vy::after{content:"";flex:none;inline-size:10px;block-size:10px;border-inline-end:2px solid var(--lv-icon-quiet);border-block-end:2px solid var(--lv-icon-quiet);transform:rotate(45deg);transition:transform var(--lv-dur-state) var(--lv-ease)}.lv-disc__panel.astro-iu43v7vy[open] .lv-disc__summary.astro-iu43v7vy::after{transform:rotate(-135deg)}.lv-disc__body.astro-iu43v7vy{padding-block:0 var(--lv-space-5)}.lv-disc__media.astro-iu43v7vy{margin-block-end:var(--lv-space-4);max-inline-size:32rem}@media (prefers-reduced-motion: reduce){.lv-disc__summary.astro-iu43v7vy::after{transition:none}}.lv-disc__expand.astro-iu43v7vy{display:flex;flex-direction:column;gap:var(--lv-space-3);block-size:clamp(28rem,62vh,36rem)}@container (min-width: 56rem){.lv-disc__expand.astro-iu43v7vy{flex-direction:row}}.lv-disc__xcard.astro-iu43v7vy{position:relative;display:flex;flex-direction:column;flex:1 1 0;min-block-size:0;min-inline-size:0;overflow:hidden;border-radius:var(--lv-radius-lg);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-disc__xcard.astro-iu43v7vy:has(input:checked){flex-grow:5}.lv-disc__xcard.astro-iu43v7vy:has(input:focus-visible){outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:calc(var(--lv-focus-width) * -1)}@media (prefers-reduced-motion: no-preference){.lv-disc__xcard.astro-iu43v7vy{transition:flex-grow var(--lv-dur-panel) var(--lv-ease)}}.lv-disc__xhit.astro-iu43v7vy{display:flex;flex-direction:column;flex:1 1 auto;min-block-size:0;cursor:pointer}.lv-disc__xmedia.astro-iu43v7vy{display:block;flex:1 1 auto;min-block-size:0;min-inline-size:0;background:var(--lv-surface-sunken)}.lv-disc__xmedia.astro-iu43v7vy img.astro-iu43v7vy{display:block;inline-size:100%;block-size:100%;object-fit:cover}.lv-disc__xtag.astro-iu43v7vy{display:block;flex:none;min-block-size:44px;padding:var(--lv-space-3) var(--lv-space-4);border-block-start:1px solid var(--lv-line);font:var(--lv-weight-semibold) var(--lv-text-xs) / 1.4 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-primary)}.lv-disc__xbody.astro-iu43v7vy{display:none;flex:none;padding:0 var(--lv-space-4) var(--lv-space-4);max-inline-size:none}.lv-disc__xcard.astro-iu43v7vy:has(input:checked) .lv-disc__xbody.astro-iu43v7vy{display:block}@container (min-width: 56rem){.lv-disc__xcard.astro-iu43v7vy:not(:has(input:checked)) .lv-disc__xtag.astro-iu43v7vy{writing-mode:vertical-rl;border-block-start:0;border-inline-start:1px solid var(--lv-line);align-items:flex-end;padding-block:var(--lv-space-4)}.lv-disc__xcard.astro-iu43v7vy:not(:has(input:checked)) .lv-disc__xhit.astro-iu43v7vy{flex-direction:row}}
/* components/explain.prose/renderers/prose.astro */
.lv-proseblock--narrow.astro-37bccrgj{max-width:34rem}.lv-proseblock--dropcap.astro-37bccrgj>p:first-of-type::first-letter{float:inline-start;margin-inline-end:var(--lv-space-2);font-size:3.2em;line-height:0.82;font-weight:var(--lv-weight-heading);color:var(--lv-ink-accent, var(--lv-brand-strong))}@container (max-width: 26rem){.lv-proseblock--dropcap.astro-37bccrgj>p:first-of-type::first-letter{float:none;font-size:inherit;line-height:inherit;font-weight:inherit;color:inherit;margin:0}}
/* components/explain.pull-quote/renderers/quote.astro */
.lv-quote.astro-kdpnkjon{padding-block:var(--lv-space-5);border-block:1px solid var(--lv-line)}.lv-quote__text.astro-kdpnkjon{border:0;padding:0}.lv-quote__by.astro-kdpnkjon cite.astro-kdpnkjon{font-style:normal}
/* components/explain.roadmap/renderers/board.astro */
.lv-roadmap.astro-4igdh3a7{display:grid;gap:var(--lv-space-6)}.lv-roadmap__label.astro-4igdh3a7{padding-block-end:var(--lv-space-2);border-block-end:2px solid var(--lv-line)}.lv-roadmap__col.astro-4igdh3a7.is-shipped .lv-roadmap__label.astro-4igdh3a7{border-block-end-color:var(--lv-brand)}.lv-roadmap__col.astro-4igdh3a7.is-in-progress .lv-roadmap__label.astro-4igdh3a7{border-block-end-color:var(--lv-brand-soft)}.lv-roadmap__items.astro-4igdh3a7{display:grid;gap:var(--lv-space-3);margin:var(--lv-space-4) 0 0;padding:0;list-style:none;align-content:start}@container (min-width: 46rem){.lv-roadmap.astro-4igdh3a7{grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}}
/* components/explain.scroll-pinned-showcase/renderers/showcase.astro */
.lv-showcase__grid.astro-2m4wc6yr{display:grid;gap:var(--lv-space-6)}.lv-showcase__steps.astro-2m4wc6yr{display:grid;gap:var(--lv-space-9);margin:0;padding:0;list-style:none}.lv-showcase__step.astro-2m4wc6yr{display:grid;gap:var(--lv-space-4);scroll-margin-block:var(--lv-space-8)}.lv-showcase__frame.astro-2m4wc6yr{display:none}.lv-showcase__rail.astro-2m4wc6yr{display:none}.lv-showcase__thumb.astro-2m4wc6yr{display:block;inline-size:3.5rem;block-size:3.5rem;border-radius:var(--lv-radius-sm);overflow:hidden;box-shadow:inset 0 0 0 1px var(--lv-line);opacity:0.55;transition:opacity var(--lv-dur-state) var(--lv-ease)}.lv-showcase__thumb.astro-2m4wc6yr img.astro-2m4wc6yr{inline-size:100%;block-size:100%;object-fit:cover}.lv-showcase__thumb.astro-2m4wc6yr[aria-current=true]{opacity:1;box-shadow:inset 0 0 0 2px var(--lv-brand)}@container (min-width: 56rem){.lv-showcase__grid.astro-2m4wc6yr{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;column-gap:var(--lv-space-7);align-items:start}.lv-showcase__steps.astro-2m4wc6yr{grid-column:1;grid-row:1}.lv-showcase__frame.astro-2m4wc6yr{display:block;grid-column:2;grid-row:1;position:sticky;inset-block-start:var(--lv-space-6);aspect-ratio:16 / 9;border-radius:var(--lv-radius-md);background:var(--lv-surface-sunken);overflow:hidden}.lv-showcase--rail.astro-2m4wc6yr .lv-showcase__rail.astro-2m4wc6yr{display:block;grid-column:3;grid-row:1;position:sticky;inset-block-start:var(--lv-space-6)}.lv-showcase__rail.astro-2m4wc6yr ol.astro-2m4wc6yr{display:grid;gap:var(--lv-space-2);margin:0;padding:0;list-style:none}.lv-showcase__media.astro-2m4wc6yr[data-lv-showcase-lifted]{visibility:hidden}}@media (prefers-reduced-motion: reduce){.lv-showcase__thumb.astro-2m4wc6yr{transition:none}}
/* components/explain.sequence/renderers/steps.astro */
.lv-steps__stamp.astro-u7fvoeey{margin:0 0 var(--lv-space-2);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-bold);letter-spacing:var(--lv-tracking-label);text-transform:uppercase;color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-steps__media.astro-u7fvoeey{margin-block-end:var(--lv-space-3)}
/* components/explain.spec-table/renderers/specs.astro */
.lv-specs.astro-hwfd6nre{max-width:48rem}.lv-specs.astro-hwfd6nre caption.astro-hwfd6nre{text-align:start;margin-block-end:var(--lv-space-5)}.lv-specs__group.astro-hwfd6nre th.astro-hwfd6nre{padding-block:var(--lv-space-4) var(--lv-space-2);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary);text-align:start}.lv-specs.astro-hwfd6nre tbody.astro-hwfd6nre th.astro-hwfd6nre[scope=row]{font-weight:var(--lv-weight-regular);color:var(--lv-text-secondary);text-align:start}.lv-specs__value.astro-hwfd6nre{display:flex;align-items:baseline;gap:var(--lv-space-2);justify-content:end;color:var(--lv-text-primary)}.lv-specs__unit.astro-hwfd6nre{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-specs__note.astro-hwfd6nre{max-width:var(--lv-measure);margin-block-start:var(--lv-space-4);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/explain.video/renderers/embed.astro */
.lv-video__frame.astro-fmt2ac2w{position:relative;display:grid;place-items:center}.lv-video__play.astro-fmt2ac2w{position:absolute;inset-block-end:var(--lv-space-5);inset-inline-start:var(--lv-space-5)}.lv-video__summary.astro-fmt2ac2w{max-width:var(--lv-measure);margin-block-start:var(--lv-space-4);color:var(--lv-text-secondary)}.lv-video__transcript.astro-fmt2ac2w{margin-block-start:var(--lv-space-3)}
/* components/locate.map/renderers/canvas.community.astro */
.lv-map__plate.astro-sidqyjtj{display:grid;place-content:center;justify-items:center;gap:var(--lv-space-4);min-block-size:var(--lv-map-height);padding:var(--lv-space-6);border:1px solid var(--lv-line);border-radius:var(--lv-radius-lg);background:repeating-linear-gradient(90deg,transparent 0 78px,color-mix(in oklab,var(--lv-text-primary) 4.5%,transparent) 78px 80px),var(--lv-surface-sunken);color:var(--lv-text-tertiary);text-align:center}.lv-map__plate.astro-sidqyjtj .lv-map__notice--plate.astro-sidqyjtj{border:0;padding:0;max-width:34ch;background:none}
/* components/locate.practical-info/renderers/practical.astro */
.lv-practical.astro-k5u7sa4a{display:grid;gap:var(--lv-space-7);align-items:start}.lv-practical__hours.astro-k5u7sa4a .lv-kv.astro-k5u7sa4a{margin-block-start:var(--lv-space-3)}.lv-practical__fact.astro-k5u7sa4a{display:grid;gap:2px}.lv-practical__fact.astro-k5u7sa4a:has(.lv-practical__icon){grid-template-columns:var(--lv-space-5) minmax(0,1fr);column-gap:var(--lv-space-3)}.lv-practical__icon.astro-k5u7sa4a{grid-row:span 3;align-self:start}.lv-practical__value.astro-k5u7sa4a{margin:0;color:var(--lv-text-primary)}.lv-practical__value.astro-k5u7sa4a a.astro-k5u7sa4a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,currentColor 45%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-practical__value.astro-k5u7sa4a a.astro-k5u7sa4a:hover{text-decoration-thickness:2px;text-decoration-color:currentColor}@container (min-width: 46rem){.lv-practical.astro-k5u7sa4a{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}.lv-practical--dark.astro-k5u7sa4a{padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}.lv-practical--dark.astro-k5u7sa4a{grid-template-columns:minmax(0,1fr)}.lv-practical--dark.astro-k5u7sa4a .lv-icon--plain.astro-k5u7sa4a{color:var(--lv-text-on-brand)}.lv-practical__rows.astro-k5u7sa4a{margin:0}.lv-practical__row.astro-k5u7sa4a{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-practical__row.astro-k5u7sa4a dt.astro-k5u7sa4a{display:inline-flex;align-items:center;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a{display:flex;flex-direction:column;align-items:flex-end;margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-practical__note.astro-k5u7sa4a{margin-block-start:2px;font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-practical__hours-note.astro-k5u7sa4a{margin:var(--lv-space-3) 0 0;font-size:var(--lv-text-xs);line-height:var(--lv-leading-normal);color:var(--lv-text-tertiary)}.lv-practical__foot.astro-k5u7sa4a{margin:0;grid-column:1 / -1}.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a{font-family:var(--lv-font-mono);font-size:var(--lv-text-sm);font-feature-settings:"tnum" 1;font-variant-numeric:tabular-nums;letter-spacing:var(--lv-tracking-num)}.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a .lv-practical__note.astro-k5u7sa4a,.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a .lv-quiet.astro-k5u7sa4a{font-family:var(--lv-font-ui);font-feature-settings:normal;font-variant-numeric:normal;letter-spacing:normal}.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a a.astro-k5u7sa4a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a a.astro-k5u7sa4a:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a a.astro-k5u7sa4a:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-practical--dark.astro-k5u7sa4a .lv-practical__cta.astro-k5u7sa4a{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-practical--dark.astro-k5u7sa4a .lv-practical__cta.astro-k5u7sa4a:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}.lv-practical--dark.astro-k5u7sa4a .lv-sec__eyebrow.astro-k5u7sa4a{margin-block-end:var(--lv-space-2)}@media (prefers-reduced-motion: reduce){.lv-practical__value.astro-k5u7sa4a a.astro-k5u7sa4a,.lv-practical--dark.astro-k5u7sa4a .lv-practical__row.astro-k5u7sa4a dd.astro-k5u7sa4a a.astro-k5u7sa4a{transition:none}}
/* components/open.atmosphere/renderers/scene.astro */
.lv-scene.astro-e6euaccx{position:relative;isolation:isolate;display:grid;align-content:end;min-block-size:max(320px,var(--lv-scene-h, calc(var(--lv-stage-vh, 100svh) * 0.52)));padding:var(--lv-space-8) var(--lv-gutter);overflow:hidden;color:var(--lv-text-on-brand)}.lv-scene--h-compact.astro-e6euaccx{--lv-scene-h: calc(var(--lv-stage-vh, 100svh) * 0.38);padding-block:var(--lv-space-7)}.lv-scene--h-medium.astro-e6euaccx{--lv-scene-h: calc(var(--lv-stage-vh, 100svh) * 0.52)}.lv-scene--h-full.astro-e6euaccx{--lv-scene-h: calc(var(--lv-stage-vh, 100svh) * 0.78)}.lv-scene.astro-e6euaccx::before{content:"";position:absolute;inset:0;z-index:-2;background:radial-gradient(120% 90% at var(--lv-scene-at-a, 12% 0%),var(--lv-scene-a) 0%,transparent 66%),radial-gradient(110% 80% at var(--lv-scene-at-b, 92% 8%),var(--lv-scene-b) 0%,transparent 62%),var(--lv-ramp)}.lv-scene--workshop.astro-e6euaccx{--lv-scene-a: var(--lv-brand-strong);--lv-scene-b: var(--lv-ramp-terminal)}.lv-scene--coast.astro-e6euaccx{--lv-scene-a: var(--lv-ramp-terminal);--lv-scene-b: var(--lv-brand-strong);--lv-scene-at-a: 6% 18%;--lv-scene-at-b: 98% 0%}.lv-scene--kitchen.astro-e6euaccx{--lv-scene-a: var(--lv-ramp-terminal);--lv-scene-b: var(--lv-brand-strong);--lv-scene-at-a: 34% 0%;--lv-scene-at-b: 84% 28%}.lv-scene--forest.astro-e6euaccx{--lv-scene-a: var(--lv-brand-strong);--lv-scene-b: var(--lv-brand-strong);--lv-scene-at-a: 0% 0%;--lv-scene-at-b: 100% 12%}.lv-scene--city-night.astro-e6euaccx{--lv-scene-a: var(--lv-brand-strong);--lv-scene-b: var(--lv-ramp-terminal);--lv-scene-at-a: 50% 0%;--lv-scene-at-b: 104% 68%}.lv-scene--studio.astro-e6euaccx{--lv-scene-a: var(--lv-ramp-terminal);--lv-scene-b: var(--lv-brand-strong);--lv-scene-at-a: 22% 6%;--lv-scene-at-b: 76% 4%}.lv-scene__media.astro-e6euaccx{position:absolute;inset:0;z-index:-1}.lv-scene__media.astro-e6euaccx img.astro-e6euaccx{inline-size:100%;block-size:100%;object-fit:cover}.lv-scene__media.astro-e6euaccx::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgb(var(--lv-glass-under) / var(--lv-scene-scrim, 0.78)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.78) * 0.3)) 68%)}.lv-scene--scrim-soft.astro-e6euaccx{--lv-scene-scrim: 0.55}.lv-scene__media--alt.astro-e6euaccx{opacity:0}@media (prefers-reduced-motion: no-preference){.lv-scene__media--alt.astro-e6euaccx{animation:lv-scene-drift 28s var(--lv-ease) infinite}@keyframes lv-scene-drift{0%,26%{opacity:0}42%,68%{opacity:1}84%,100%{opacity:0}}}.lv-scene.astro-e6euaccx .lv-sec__inner.astro-e6euaccx{inline-size:100%}.lv-scene__copy.astro-e6euaccx{max-width:var(--lv-measure)}.lv-scene__title.astro-e6euaccx{margin:0;font-size:clamp(var(--lv-text-xl),6cqi,3.5rem);color:inherit}.lv-scene--h-full.astro-e6euaccx .lv-scene__title.astro-e6euaccx{font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 6cqi, 3.5rem))}.lv-scene__lede.astro-e6euaccx{margin:var(--lv-space-4) 0 var(--lv-space-6);font-size:var(--lv-text-lg);color:inherit;opacity:0.9}
/* components/open.editorial/renderers/masthead.astro */
.lv-masthead__title.astro-3hbe6dmh{font-size:clamp(var(--lv-text-xl),4.2cqi,2.75rem)}.lv-masthead--display.astro-3hbe6dmh .lv-masthead__title.astro-3hbe6dmh{font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 6cqi, 3.5rem))}.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed]{position:relative;isolation:isolate;display:grid;align-content:end;min-block-size:max(280px,calc(var(--lv-stage-vh, 100svh) * 0.44));padding:var(--lv-space-8) var(--lv-gutter)}.lv-masthead__bg.astro-3hbe6dmh{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-masthead__bg.astro-3hbe6dmh img.astro-3hbe6dmh{inline-size:100%;block-size:100%;object-fit:cover}.lv-masthead__bg.astro-3hbe6dmh::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgb(var(--lv-glass-under) / 0.78) 0%,rgb(var(--lv-glass-under) / 0.23) 68%)}.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__inner.astro-3hbe6dmh{inline-size:100%}.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-sec__eyebrow.astro-3hbe6dmh,.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__title.astro-3hbe6dmh,.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__deck.astro-3hbe6dmh,.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__author.astro-3hbe6dmh,.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__role.astro-3hbe6dmh,.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__stamp.astro-3hbe6dmh{color:var(--lv-text-on-brand)}.lv-masthead--display.astro-3hbe6dmh[data-lv-bleed] .lv-masthead__by.astro-3hbe6dmh{border-block-end-color:color-mix(in srgb,var(--lv-text-on-brand) 28%,transparent)}.lv-masthead__deck.astro-3hbe6dmh{font-size:var(--lv-text-lg)}.lv-masthead__by.astro-3hbe6dmh{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3) var(--lv-space-5);max-width:var(--lv-measure);padding-block-end:var(--lv-space-5);border-block-end:1px solid var(--lv-line)}.lv-masthead__by-text.astro-3hbe6dmh{display:flex;flex-direction:column;gap:2px;margin:0}.lv-masthead__author.astro-3hbe6dmh{font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary);text-decoration:none}.lv-masthead__author.astro-3hbe6dmh:hover{text-decoration:underline}.lv-masthead__role.astro-3hbe6dmh{font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-masthead__stamp.astro-3hbe6dmh{display:flex;flex-wrap:wrap;gap:var(--lv-space-4);margin:0;margin-inline-start:auto;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-masthead__media.astro-3hbe6dmh{margin:var(--lv-space-6) 0 0}
/* components/open.entity/renderers/profile.astro */
.lv-entity.astro-hxo5rkx7{display:grid;gap:var(--lv-space-6);align-items:start}.lv-entity__media.astro-hxo5rkx7{max-inline-size:16rem}.lv-entity__rating.astro-hxo5rkx7{display:flex;align-items:baseline;gap:var(--lv-space-2);margin-block-start:var(--lv-space-4);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-entity__rating-value.astro-hxo5rkx7{font-size:var(--lv-text-xl);color:var(--lv-text-primary)}.lv-entity__facts.astro-hxo5rkx7{margin-block-start:var(--lv-space-5)}.lv-entity__actions.astro-hxo5rkx7{margin-block-start:var(--lv-space-6)}@container (min-width: 46rem){.lv-entity.astro-hxo5rkx7:has(> .lv-entity__media){grid-template-columns:16rem minmax(0,1fr)}}
/* components/open.listing/renderers/header.astro */
.lv-index.astro-topsee3x{display:grid;gap:var(--lv-space-6);align-items:end}.lv-index__head.astro-topsee3x{margin-block-end:0}.lv-index__count.astro-topsee3x{margin-block-start:var(--lv-space-4);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-index__search.astro-topsee3x .lv-btn.astro-topsee3x span.astro-topsee3x{max-width:12ch;overflow:hidden;text-overflow:ellipsis}@container (min-width: 52rem){.lv-index--search.astro-topsee3x{grid-template-columns:minmax(0,1fr) minmax(18rem,24rem)}}
/* components/open.pitch/renderers/desk.astro */
.lv-desk.astro-kuf7ugqj{position:relative;isolation:isolate}.lv-desk.astro-kuf7ugqj[data-lv-bleed]{padding-block:var(--lv-space-9);padding-inline:var(--lv-gutter)}.lv-desk--compact.astro-kuf7ugqj[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-desk--tall.astro-kuf7ugqj[data-lv-bleed]{padding-block:calc(var(--lv-space-9) * 1.6)}.lv-desk--full.astro-kuf7ugqj{display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px))}.lv-desk--full.astro-kuf7ugqj[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-desk--full.astro-kuf7ugqj.lv-desk--anchor-bottom .lv-desk__inner.astro-kuf7ugqj{margin-block-start:auto}.lv-desk__plate.astro-kuf7ugqj{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-desk__plate.astro-kuf7ugqj img.astro-kuf7ugqj{inline-size:100%;block-size:100%;object-fit:cover}.lv-desk--anchor-bottom.astro-kuf7ugqj{--lv-desk-scrim-dir: to top}.lv-desk--anchor-top.astro-kuf7ugqj{--lv-desk-scrim-dir: to bottom}.lv-desk--scrim-soft.astro-kuf7ugqj .lv-desk__plate.astro-kuf7ugqj::after,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-desk__plate.astro-kuf7ugqj::after{content:"";position:absolute;inset:0;background:linear-gradient(var(--lv-desk-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.05)) 100%),linear-gradient(100deg,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.34)) 0%,transparent 55%)}.lv-desk--scrim-strong.astro-kuf7ugqj{--lv-desk-scrim: 0.82}@media (max-width: 700px){.lv-desk--scrim-soft.astro-kuf7ugqj .lv-desk__plate.astro-kuf7ugqj::after,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-desk__plate.astro-kuf7ugqj::after{background:linear-gradient(var(--lv-desk-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-desk-scrim, 0.62) * 0.08)) 100%)}}.lv-desk--scrim-soft.astro-kuf7ugqj .lv-desk__inner.astro-kuf7ugqj,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-desk__inner.astro-kuf7ugqj{--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-line: color-mix(in srgb, var(--lv-text-on-brand) 28%, transparent)}.lv-desk--scrim-soft.astro-kuf7ugqj .lv-sec__eyebrow.astro-kuf7ugqj,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-sec__eyebrow.astro-kuf7ugqj{color:var(--lv-text-on-brand)}.lv-desk__inner.astro-kuf7ugqj{display:grid;gap:var(--lv-space-7);align-items:start}.lv-desk__zone--counter.astro-kuf7ugqj,.lv-desk__zone--foot.astro-kuf7ugqj{display:contents}.lv-desk__copy.astro-kuf7ugqj{max-width:var(--lv-measure)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__copy.astro-kuf7ugqj{margin-inline:auto;text-align:center}.lv-desk__title.astro-kuf7ugqj{margin:0;max-inline-size:14ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));line-height:var(--lv-leading-tight);text-wrap:balance;color:var(--lv-text-primary)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__title.astro-kuf7ugqj{margin-inline:auto}.lv-desk__body.astro-kuf7ugqj{margin-block-start:var(--lv-space-4);max-inline-size:46ch;font-size:var(--lv-text-md);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__body.astro-kuf7ugqj{margin-inline:auto}.lv-desk__actions.astro-kuf7ugqj{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4);margin-block-start:var(--lv-space-6)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__actions.astro-kuf7ugqj{justify-content:center}.lv-desk__act-quiet.astro-kuf7ugqj{display:inline-flex;align-items:center;min-block-size:24px;color:var(--lv-text-secondary);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--lv-line);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease),color var(--lv-dur-state) var(--lv-ease)}.lv-desk__act-quiet.astro-kuf7ugqj:hover{color:var(--lv-text-primary);text-decoration-thickness:2px;text-decoration-color:currentColor}.lv-desk__act-quiet.astro-kuf7ugqj:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-desk__trust.astro-kuf7ugqj{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4);margin-block-start:var(--lv-space-6);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__trust.astro-kuf7ugqj{justify-content:center}.lv-desk__trust-avatars.astro-kuf7ugqj{display:flex;align-items:center;margin:0;padding:0;list-style:none}.lv-desk__trust-avatars.astro-kuf7ugqj>li.astro-kuf7ugqj{display:contents}.lv-desk__trust-avatar.astro-kuf7ugqj{--lv-portrait-size: 2.5rem;border:2px solid var(--lv-surface);flex-shrink:0}.lv-desk__trust-avatars.astro-kuf7ugqj>li.astro-kuf7ugqj:not(:first-child)>.lv-desk__trust-avatar.astro-kuf7ugqj{margin-inline-start:-0.65rem}.lv-desk__trust-rating.astro-kuf7ugqj{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-desk__trust-of.astro-kuf7ugqj{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-desk__trust-stars.astro-kuf7ugqj{margin-inline-start:2px}.lv-desk__trust-label.astro-kuf7ugqj{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-desk__trust-proof.astro-kuf7ugqj{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary);max-inline-size:32ch}.lv-desk--scrim-soft.astro-kuf7ugqj .lv-trust-mark.astro-kuf7ugqj,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-trust-mark.astro-kuf7ugqj{background:var(--lv-text-on-brand)}.lv-desk__ledger.astro-kuf7ugqj{margin:0;display:grid;gap:0}.lv-desk__line.astro-kuf7ugqj{display:grid;grid-template-columns:2.5rem minmax(0,1fr);align-items:baseline;gap:0 var(--lv-space-3);padding-block:var(--lv-space-4);border-block-end:1px solid var(--lv-line)}.lv-desk__ledger.astro-kuf7ugqj .lv-desk__line.astro-kuf7ugqj:first-child{border-block-start:1px solid var(--lv-line)}.lv-desk__line-index.astro-kuf7ugqj{grid-row:span 2;align-self:start;font:var(--lv-weight-medium) var(--lv-text-xs) / 1.6 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);color:var(--lv-text-tertiary)}.lv-desk__line-value.astro-kuf7ugqj{margin:0;font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-desk__line-unit.astro-kuf7ugqj{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-desk__line-label.astro-kuf7ugqj{margin:var(--lv-space-1) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-desk__row.astro-kuf7ugqj{display:flex;flex-wrap:wrap;gap:var(--lv-space-5);margin:0;padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-desk__line--flat.astro-kuf7ugqj{flex:1 1 min(11rem,100%);padding-block:0;border-block-end:0}.lv-desk__row.astro-kuf7ugqj .lv-desk__line--flat.astro-kuf7ugqj:first-child{border-block-start:0}.lv-desk__card.astro-kuf7ugqj{align-self:start;inline-size:100%;max-inline-size:26rem;padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__card.astro-kuf7ugqj{margin-inline:auto}.lv-desk__card-title.astro-kuf7ugqj{margin:0 0 var(--lv-space-3);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-desk__card-rows.astro-kuf7ugqj{margin:0}.lv-desk__card-row.astro-kuf7ugqj{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-desk__card-row.astro-kuf7ugqj dt.astro-kuf7ugqj{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-desk__card-row.astro-kuf7ugqj dd.astro-kuf7ugqj{margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-desk__card-row.astro-kuf7ugqj dd.astro-kuf7ugqj a.astro-kuf7ugqj{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-desk__card-row.astro-kuf7ugqj dd.astro-kuf7ugqj a.astro-kuf7ugqj:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-desk__card-row.astro-kuf7ugqj dd.astro-kuf7ugqj a.astro-kuf7ugqj:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-desk__card-note.astro-kuf7ugqj{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-desk__card-cta.astro-kuf7ugqj{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-desk__card-cta.astro-kuf7ugqj:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}.lv-desk__marks.astro-kuf7ugqj{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-7);margin:0;padding:var(--lv-space-4) 0 0;border-block-start:1px solid var(--lv-line);list-style:none}.lv-desk--centered.astro-kuf7ugqj .lv-desk__marks.astro-kuf7ugqj{justify-content:center}.lv-desk__mark-link.astro-kuf7ugqj{display:inline-flex;align-items:center;color:var(--lv-text-tertiary);text-decoration:none;opacity:0.72;transition:opacity var(--lv-dur-fast) var(--lv-ease)}.lv-desk__mark-link.astro-kuf7ugqj:hover{opacity:1}.lv-desk__mark-link.astro-kuf7ugqj:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-desk__mark-img.astro-kuf7ugqj{block-size:1.75rem;inline-size:auto;filter:grayscale(1)}.lv-desk--scrim-soft.astro-kuf7ugqj .lv-desk__mark-img.astro-kuf7ugqj,.lv-desk--scrim-strong.astro-kuf7ugqj .lv-desk__mark-img.astro-kuf7ugqj{filter:grayscale(1) invert(1) brightness(1.6);mix-blend-mode:screen}.lv-desk__mark-name.astro-kuf7ugqj{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);letter-spacing:0.04em}@container (min-width: 56rem){.lv-desk--ledger.astro-kuf7ugqj .lv-desk__inner.astro-kuf7ugqj,.lv-desk--aside.astro-kuf7ugqj .lv-desk__inner.astro-kuf7ugqj{grid-template-columns:minmax(0,1.7fr) minmax(15rem,0.85fr);column-gap:var(--lv-space-8)}.lv-desk--ledger.astro-kuf7ugqj .lv-desk__copy.astro-kuf7ugqj,.lv-desk--aside.astro-kuf7ugqj .lv-desk__copy.astro-kuf7ugqj{grid-column:1}.lv-desk--ledger.astro-kuf7ugqj .lv-desk__ledger.astro-kuf7ugqj{grid-column:2;grid-row:1}.lv-desk--aside.astro-kuf7ugqj .lv-desk__card.astro-kuf7ugqj{grid-column:2;grid-row:1;justify-self:end}.lv-desk--ledger.astro-kuf7ugqj .lv-desk__marks.astro-kuf7ugqj,.lv-desk--aside.astro-kuf7ugqj .lv-desk__marks.astro-kuf7ugqj{grid-column:1 / -1}.lv-desk--aside.astro-kuf7ugqj .lv-desk__row.astro-kuf7ugqj{grid-column:1}.lv-desk--stat-rail.astro-kuf7ugqj.lv-desk--ledger .lv-desk__inner.astro-kuf7ugqj{grid-template-columns:minmax(0,1.4fr) minmax(17rem,1fr)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__inner.astro-kuf7ugqj{grid-template-columns:minmax(0,1fr)}.lv-desk--centered.astro-kuf7ugqj .lv-desk__ledger.astro-kuf7ugqj,.lv-desk--centered.astro-kuf7ugqj .lv-desk__card.astro-kuf7ugqj{grid-column:1;grid-row:auto}.lv-desk--centered.astro-kuf7ugqj .lv-desk__ledger.astro-kuf7ugqj{max-inline-size:34rem;margin-inline:auto;inline-size:100%}}@media (prefers-reduced-motion: reduce){.lv-desk__act-quiet.astro-kuf7ugqj,.lv-desk__card-row.astro-kuf7ugqj dd.astro-kuf7ugqj a.astro-kuf7ugqj,.lv-desk__mark-link.astro-kuf7ugqj{transition-duration:0.01ms}}
/* components/open.pitch/renderers/folio.astro */
.lv-folio.astro-dvu5zfqa{position:relative;isolation:isolate}.lv-folio.astro-dvu5zfqa[data-lv-bleed]{padding-block:var(--lv-space-9);padding-inline:var(--lv-gutter)}.lv-folio--compact.astro-dvu5zfqa[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-folio--tall.astro-dvu5zfqa[data-lv-bleed]{padding-block:calc(var(--lv-space-9) * 1.6)}.lv-folio--full.astro-dvu5zfqa{display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px))}.lv-folio--full.astro-dvu5zfqa[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-folio--full.astro-dvu5zfqa.lv-folio--anchor-bottom .lv-folio__inner.astro-dvu5zfqa{margin-block-start:auto}.lv-folio__plate.astro-dvu5zfqa{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-folio__plate.astro-dvu5zfqa img.astro-dvu5zfqa{inline-size:100%;block-size:100%;object-fit:cover}.lv-folio--anchor-bottom.astro-dvu5zfqa{--lv-folio-scrim-dir: to top}.lv-folio--anchor-top.astro-dvu5zfqa{--lv-folio-scrim-dir: to bottom}.lv-folio--scrim-soft.astro-dvu5zfqa .lv-folio__plate.astro-dvu5zfqa::after,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-folio__plate.astro-dvu5zfqa::after{content:"";position:absolute;inset:0;background:linear-gradient(var(--lv-folio-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.05)) 100%)}.lv-folio--scrim-strong.astro-dvu5zfqa{--lv-folio-scrim: 0.82}@media (max-width: 700px){.lv-folio--scrim-soft.astro-dvu5zfqa .lv-folio__plate.astro-dvu5zfqa::after,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-folio__plate.astro-dvu5zfqa::after{background:linear-gradient(var(--lv-folio-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-folio-scrim, 0.62) * 0.08)) 100%)}}.lv-folio--scrim-soft.astro-dvu5zfqa .lv-folio__inner.astro-dvu5zfqa,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-folio__inner.astro-dvu5zfqa{--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-line: color-mix(in srgb, var(--lv-text-on-brand) 28%, transparent)}.lv-folio--scrim-soft.astro-dvu5zfqa .lv-sec__eyebrow.astro-dvu5zfqa,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-sec__eyebrow.astro-dvu5zfqa{color:var(--lv-text-on-brand)}.lv-folio__inner.astro-dvu5zfqa{display:grid;gap:var(--lv-space-7)}.lv-folio__zone--counter.astro-dvu5zfqa,.lv-folio__zone--foot.astro-dvu5zfqa{display:contents}.lv-folio__statement.astro-dvu5zfqa{max-width:var(--lv-measure)}.lv-folio--centered.astro-dvu5zfqa .lv-folio__statement.astro-dvu5zfqa{margin-inline:auto;text-align:center}.lv-folio__title.astro-dvu5zfqa{margin:0;max-inline-size:15ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));line-height:var(--lv-leading-tight);color:var(--lv-text-primary)}.lv-folio--centered.astro-dvu5zfqa .lv-folio__title.astro-dvu5zfqa{margin-inline:auto}.lv-folio__title.astro-dvu5zfqa .lv-folio__accent{position:relative;font-weight:inherit;white-space:nowrap}.lv-folio__title.astro-dvu5zfqa .lv-folio__accent::after{content:"";position:absolute;inset-inline:-0.06em;inset-block-end:-0.06em;block-size:0.09em;border-radius:var(--lv-radius-pill);background:var(--lv-ink-accent);transform:rotate(-0.35deg)}.lv-folio__ladder.astro-dvu5zfqa{margin-block-start:var(--lv-space-6);display:grid;gap:0}.lv-folio__rung--solo.astro-dvu5zfqa{margin-block-start:var(--lv-space-6)}.lv-folio__rung.astro-dvu5zfqa{margin:0;padding-block:var(--lv-space-4);border-block-end:1px solid var(--lv-line)}.lv-folio__rung--promise.astro-dvu5zfqa{font-size:var(--lv-text-lg);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-folio__rungs.astro-dvu5zfqa{margin:0}.lv-folio__rung--fact.astro-dvu5zfqa{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-2) var(--lv-space-4);border-block-end-width:min(2px,calc(1px * var(--lv-folio-step, 1)));border-block-end-color:var(--lv-line-strong, var(--lv-line))}.lv-folio--centered.astro-dvu5zfqa .lv-folio__rung--fact.astro-dvu5zfqa{justify-content:center}.lv-folio__fact-value.astro-dvu5zfqa{margin:0;font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-folio__fact-unit.astro-dvu5zfqa{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-folio__fact-label.astro-dvu5zfqa{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-folio__step.astro-dvu5zfqa{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4);padding-block-start:var(--lv-space-5);border-block-start:2px solid var(--lv-ink-accent)}.lv-folio--centered.astro-dvu5zfqa .lv-folio__step.astro-dvu5zfqa{justify-content:center}.lv-folio__step-go.astro-dvu5zfqa::after{content:"→";margin-inline-start:var(--lv-space-2)}.lv-folio__step-aside.astro-dvu5zfqa{display:inline-flex;align-items:center;min-block-size:24px;color:var(--lv-text-secondary);font-size:var(--lv-text-sm);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px;text-decoration-color:var(--lv-line);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease),color var(--lv-dur-state) var(--lv-ease)}.lv-folio__step-aside.astro-dvu5zfqa:hover{color:var(--lv-text-primary);text-decoration-thickness:2px;text-decoration-color:currentColor}.lv-folio__step-aside.astro-dvu5zfqa:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-folio__proof.astro-dvu5zfqa{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4);margin-block-start:var(--lv-space-4)}.lv-folio--centered.astro-dvu5zfqa .lv-folio__proof.astro-dvu5zfqa{justify-content:center}.lv-folio__proof-avatars.astro-dvu5zfqa{display:flex;align-items:center;margin:0;padding:0;list-style:none}.lv-folio__proof-avatars.astro-dvu5zfqa>li.astro-dvu5zfqa{display:contents}.lv-folio__proof-avatar.astro-dvu5zfqa{--lv-portrait-size: 2.25rem;border:2px solid var(--lv-surface);flex-shrink:0}.lv-folio__proof-avatars.astro-dvu5zfqa>li.astro-dvu5zfqa:not(:first-child)>.lv-folio__proof-avatar.astro-dvu5zfqa{margin-inline-start:-0.6rem}.lv-folio__proof-rating.astro-dvu5zfqa{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-folio__proof-of.astro-dvu5zfqa{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-folio__proof-stars.astro-dvu5zfqa{margin-inline-start:2px}.lv-folio__proof-label.astro-dvu5zfqa{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-folio__proof-line.astro-dvu5zfqa{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary);max-inline-size:32ch}.lv-folio--scrim-soft.astro-dvu5zfqa .lv-trust-mark.astro-dvu5zfqa,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-trust-mark.astro-dvu5zfqa{background:var(--lv-text-on-brand)}.lv-folio__card.astro-dvu5zfqa{align-self:start;inline-size:100%;max-inline-size:26rem;padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent)}.lv-folio--centered.astro-dvu5zfqa .lv-folio__card.astro-dvu5zfqa{margin-inline:auto}.lv-folio__card-title.astro-dvu5zfqa{margin:0 0 var(--lv-space-3);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-folio__card-rows.astro-dvu5zfqa{margin:0}.lv-folio__card-row.astro-dvu5zfqa{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-folio__card-row.astro-dvu5zfqa dt.astro-dvu5zfqa{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-folio__card-row.astro-dvu5zfqa dd.astro-dvu5zfqa{margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-folio__card-row.astro-dvu5zfqa dd.astro-dvu5zfqa a.astro-dvu5zfqa{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-folio__card-row.astro-dvu5zfqa dd.astro-dvu5zfqa a.astro-dvu5zfqa:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-folio__card-row.astro-dvu5zfqa dd.astro-dvu5zfqa a.astro-dvu5zfqa:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-folio__card-note.astro-dvu5zfqa{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-folio__card-cta.astro-dvu5zfqa{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-folio__card-cta.astro-dvu5zfqa:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}.lv-folio__marks.astro-dvu5zfqa{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-7);margin:0;padding:var(--lv-space-4) 0 0;border-block-start:1px solid var(--lv-line);list-style:none}.lv-folio--aside.astro-dvu5zfqa .lv-folio__marks.astro-dvu5zfqa,.lv-folio--stat-rail.astro-dvu5zfqa .lv-folio__marks.astro-dvu5zfqa{grid-column:1 / -1}.lv-folio__mark-link.astro-dvu5zfqa{display:inline-flex;align-items:center;color:var(--lv-text-tertiary);text-decoration:none;opacity:0.72;transition:opacity var(--lv-dur-fast) var(--lv-ease)}.lv-folio__mark-link.astro-dvu5zfqa:hover{opacity:1}.lv-folio__mark-img.astro-dvu5zfqa{block-size:1.75rem;inline-size:auto;filter:grayscale(1)}.lv-folio--scrim-soft.astro-dvu5zfqa .lv-folio__mark-img.astro-dvu5zfqa,.lv-folio--scrim-strong.astro-dvu5zfqa .lv-folio__mark-img.astro-dvu5zfqa{filter:grayscale(1) invert(1) brightness(1.6);mix-blend-mode:screen}.lv-folio__mark-name.astro-dvu5zfqa{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);letter-spacing:0.04em}.lv-folio--full.astro-dvu5zfqa .lv-folio__inner.astro-dvu5zfqa{flex:1 1 auto}.lv-folio--full.astro-dvu5zfqa.lv-folio--anchor-top .lv-folio__inner.astro-dvu5zfqa{align-content:space-between}@container (min-width: 56rem){.lv-folio--aside.astro-dvu5zfqa .lv-folio__inner.astro-dvu5zfqa{grid-template-columns:minmax(0,1.7fr) minmax(16rem,0.9fr);align-items:start}.lv-folio--stat-rail.astro-dvu5zfqa:not(.lv-folio--aside) .lv-folio__statement.astro-dvu5zfqa{max-width:none}.lv-folio--stat-rail.astro-dvu5zfqa:not(.lv-folio--aside) .lv-folio__ladder.astro-dvu5zfqa{grid-template-columns:minmax(0,1.5fr) minmax(12rem,0.85fr);column-gap:var(--lv-space-7);align-items:start}.lv-folio--stat-rail.astro-dvu5zfqa:not(.lv-folio--aside) .lv-folio__rung--promise.astro-dvu5zfqa{max-inline-size:var(--lv-measure);align-self:start}}@media (prefers-reduced-motion: reduce){.lv-folio__step-aside.astro-dvu5zfqa,.lv-folio__card-row.astro-dvu5zfqa dd.astro-dvu5zfqa a.astro-dvu5zfqa,.lv-folio__mark-link.astro-dvu5zfqa{transition-duration:0.01ms}}
/* components/open.pitch/renderers/ghost.astro */
.lv-ghost.astro-5plpp7w3{position:relative;isolation:isolate}.lv-ghost.astro-5plpp7w3[data-lv-bleed]{padding-block:var(--lv-space-9);padding-inline:var(--lv-gutter)}.lv-ghost--compact.astro-5plpp7w3[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-ghost--tall.astro-5plpp7w3[data-lv-bleed]{padding-block:calc(var(--lv-space-9) * 1.6)}.lv-ghost--full.astro-5plpp7w3{display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px))}.lv-ghost--full.astro-5plpp7w3[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-ghost--full.astro-5plpp7w3.lv-ghost--anchor-bottom .lv-ghost__inner.astro-5plpp7w3{margin-block-start:auto}.lv-ghost__plate.astro-5plpp7w3{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-ghost__plate.astro-5plpp7w3 img.astro-5plpp7w3{inline-size:100%;block-size:100%;object-fit:cover}.lv-ghost--anchor-bottom.astro-5plpp7w3{--lv-ghost-scrim-dir: to top}.lv-ghost--anchor-top.astro-5plpp7w3{--lv-ghost-scrim-dir: to bottom}.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-ghost__plate.astro-5plpp7w3::after,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-ghost__plate.astro-5plpp7w3::after{content:"";position:absolute;inset:0;background:linear-gradient(var(--lv-ghost-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.05)) 100%),linear-gradient(100deg,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.34)) 0%,transparent 55%)}.lv-ghost--scrim-strong.astro-5plpp7w3{--lv-ghost-scrim: 0.82}@media (max-width: 700px){.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-ghost__plate.astro-5plpp7w3::after,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-ghost__plate.astro-5plpp7w3::after{background:linear-gradient(var(--lv-ghost-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-ghost-scrim, 0.62) * 0.08)) 100%)}}.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-ghost__inner.astro-5plpp7w3,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-ghost__inner.astro-5plpp7w3{--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-line: color-mix(in srgb, var(--lv-text-on-brand) 28%, transparent)}.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-sec__eyebrow.astro-5plpp7w3,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-sec__eyebrow.astro-5plpp7w3{color:var(--lv-text-on-brand)}.lv-ghost__inner.astro-5plpp7w3{position:relative;display:grid;gap:var(--lv-space-6)}.lv-ghost__zone--counter.astro-5plpp7w3,.lv-ghost__zone--foot.astro-5plpp7w3{display:contents}.lv-ghost--full.astro-5plpp7w3 .lv-ghost__inner.astro-5plpp7w3{flex:1 1 auto}.lv-ghost--full.astro-5plpp7w3.lv-ghost--anchor-top .lv-ghost__inner.astro-5plpp7w3{align-content:space-between}.lv-ghost__viewfinder.astro-5plpp7w3{position:absolute;inset:calc(var(--lv-space-5) * -1);border:1px solid var(--lv-line);pointer-events:none}@media (max-width: 700px){.lv-ghost__viewfinder.astro-5plpp7w3{display:none}}.lv-ghost__lockup.astro-5plpp7w3{max-width:var(--lv-measure)}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__lockup.astro-5plpp7w3{margin-inline:auto;text-align:center}.lv-ghost__title.astro-5plpp7w3{margin:0;max-inline-size:18ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));font-weight:var(--lv-weight-light, var(--lv-weight-regular));line-height:var(--lv-leading-tight);color:var(--lv-text-primary)}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__title.astro-5plpp7w3{margin-inline:auto}.lv-ghost__tagline.astro-5plpp7w3{margin-block-start:var(--lv-space-4);font-size:var(--lv-text-lg);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-ghost__horizon.astro-5plpp7w3{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--lv-space-5) var(--lv-space-7);padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__horizon.astro-5plpp7w3{justify-content:center}.lv-ghost__acts.astro-5plpp7w3{display:flex;flex-wrap:wrap;gap:var(--lv-space-3)}.lv-ghost__act.astro-5plpp7w3{display:inline-flex;align-items:center;justify-content:center;min-block-size:44px;padding:var(--lv-space-3) var(--lv-space-6);border:1px solid var(--lv-line);border-radius:var(--lv-radius-pill);color:var(--lv-text-primary);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);text-decoration:none;background:transparent;transition:background-color var(--lv-dur-state) var(--lv-ease),border-color var(--lv-dur-state) var(--lv-ease)}.lv-ghost__act.astro-5plpp7w3:hover{border-color:var(--lv-text-primary);background:color-mix(in oklab,currentColor 12%,transparent)}.lv-ghost__act--lead.astro-5plpp7w3{color:var(--lv-btn-primary-ink);background:var(--lv-btn-primary-surface);border:var(--lv-btn-primary-border);box-shadow:var(--lv-btn-primary-shadow);transition:background var(--lv-dur-state) var(--lv-ease),box-shadow var(--lv-dur-state) var(--lv-ease)}.lv-ghost__act--lead.astro-5plpp7w3:hover{background:var(--lv-btn-primary-surface-hover);box-shadow:var(--lv-btn-primary-shadow-hover)}.lv-ghost__act.astro-5plpp7w3:active{transform:scale(0.98)}.lv-ghost__act.astro-5plpp7w3:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}@media (max-width: 480px){.lv-ghost__acts.astro-5plpp7w3{flex-direction:column;align-items:stretch}}.lv-ghost__facts.astro-5plpp7w3{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-2) var(--lv-space-6);margin:0}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__facts.astro-5plpp7w3{justify-content:center}.lv-ghost__fact.astro-5plpp7w3{display:flex;align-items:baseline;gap:var(--lv-space-2)}.lv-ghost__fact-value.astro-5plpp7w3{margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-ghost__fact-unit.astro-5plpp7w3{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-ghost__fact-label.astro-5plpp7w3{margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-ghost__proof.astro-5plpp7w3{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4)}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__proof.astro-5plpp7w3{justify-content:center}.lv-ghost__proof-avatars.astro-5plpp7w3{display:flex;align-items:center;margin:0;padding:0;list-style:none}.lv-ghost__proof-avatars.astro-5plpp7w3>li.astro-5plpp7w3{display:contents}.lv-ghost__proof-avatar.astro-5plpp7w3{--lv-portrait-size: 2.25rem;border:2px solid var(--lv-surface);flex-shrink:0}.lv-ghost__proof-avatars.astro-5plpp7w3>li.astro-5plpp7w3:not(:first-child)>.lv-ghost__proof-avatar.astro-5plpp7w3{margin-inline-start:-0.6rem}.lv-ghost__proof-rating.astro-5plpp7w3{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-ghost__proof-of.astro-5plpp7w3{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-ghost__proof-stars.astro-5plpp7w3{margin-inline-start:2px}.lv-ghost__proof-label.astro-5plpp7w3{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-ghost__proof-line.astro-5plpp7w3{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary);max-inline-size:32ch}.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-trust-mark.astro-5plpp7w3,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-trust-mark.astro-5plpp7w3{background:var(--lv-text-on-brand)}.lv-ghost__card.astro-5plpp7w3{align-self:start;inline-size:100%;max-inline-size:26rem;padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent)}.lv-ghost--centered.astro-5plpp7w3 .lv-ghost__card.astro-5plpp7w3{margin-inline:auto}.lv-ghost__card-title.astro-5plpp7w3{margin:0 0 var(--lv-space-3);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-ghost__card-rows.astro-5plpp7w3{margin:0}.lv-ghost__card-row.astro-5plpp7w3{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-ghost__card-row.astro-5plpp7w3 dt.astro-5plpp7w3{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-ghost__card-row.astro-5plpp7w3 dd.astro-5plpp7w3{margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-ghost__card-row.astro-5plpp7w3 dd.astro-5plpp7w3 a.astro-5plpp7w3{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-ghost__card-row.astro-5plpp7w3 dd.astro-5plpp7w3 a.astro-5plpp7w3:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-ghost__card-row.astro-5plpp7w3 dd.astro-5plpp7w3 a.astro-5plpp7w3:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-ghost__card-note.astro-5plpp7w3{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-ghost__card-cta.astro-5plpp7w3{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-ghost__card-cta.astro-5plpp7w3:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__marks.astro-5plpp7w3{grid-column:1 / -1}.lv-ghost__marks.astro-5plpp7w3{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-7);margin:0;padding:var(--lv-space-4) 0 0;border-block-start:1px solid var(--lv-line);list-style:none}.lv-ghost__mark-link.astro-5plpp7w3{display:inline-flex;align-items:center;color:var(--lv-text-tertiary);text-decoration:none;opacity:0.72;transition:opacity var(--lv-dur-fast) var(--lv-ease)}.lv-ghost__mark-link.astro-5plpp7w3:hover{opacity:1}.lv-ghost__mark-link.astro-5plpp7w3:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-ghost__mark-img.astro-5plpp7w3{block-size:1.75rem;inline-size:auto;filter:grayscale(1)}.lv-ghost--scrim-soft.astro-5plpp7w3 .lv-ghost__mark-img.astro-5plpp7w3,.lv-ghost--scrim-strong.astro-5plpp7w3 .lv-ghost__mark-img.astro-5plpp7w3{filter:grayscale(1) invert(1) brightness(1.6);mix-blend-mode:screen}.lv-ghost__mark-name.astro-5plpp7w3{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);letter-spacing:0.04em}@container (min-width: 56rem){.lv-ghost--split.astro-5plpp7w3 .lv-ghost__lockup.astro-5plpp7w3{max-width:min(var(--lv-measure),58%)}.lv-ghost--stat-rail.astro-5plpp7w3:not(.lv-ghost--aside) .lv-ghost__horizon.astro-5plpp7w3{align-items:end;flex-wrap:nowrap}.lv-ghost--stat-rail.astro-5plpp7w3:not(.lv-ghost--aside) .lv-ghost__facts.astro-5plpp7w3{flex-direction:column;align-items:flex-end;gap:var(--lv-space-3);padding-inline-start:var(--lv-space-6);border-inline-start:1px solid var(--lv-line)}.lv-ghost--stat-rail.astro-5plpp7w3:not(.lv-ghost--aside) .lv-ghost__fact.astro-5plpp7w3{flex-direction:column;align-items:flex-end;gap:0}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__inner.astro-5plpp7w3{grid-template-columns:minmax(0,1.6fr) minmax(16rem,0.9fr);grid-template-areas:"lockup card" "horizon card" "proof card";align-items:start;column-gap:var(--lv-space-7)}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__lockup.astro-5plpp7w3{grid-area:lockup}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__horizon.astro-5plpp7w3{grid-area:horizon}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__proof.astro-5plpp7w3{grid-area:proof}.lv-ghost--aside.astro-5plpp7w3 .lv-ghost__card.astro-5plpp7w3{grid-area:card;justify-self:end}}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-ghost__lockup.astro-5plpp7w3{animation:lv-ghost-park linear both;animation-timeline:view();animation-range:exit 0% exit 100%;will-change:transform,opacity}@keyframes lv-ghost-park{from{transform:translate3d(0,0,0);opacity:1}to{transform:translate3d(0,calc(var(--lv-reveal-distance, 8px) * -1.5),0);opacity:0.62}}}}@media (prefers-reduced-motion: reduce){.lv-ghost__act.astro-5plpp7w3,.lv-ghost__card-row.astro-5plpp7w3 dd.astro-5plpp7w3 a.astro-5plpp7w3,.lv-ghost__mark-link.astro-5plpp7w3{transition-duration:0.01ms}}
/* components/open.pitch/renderers/pitch.astro */
.lv-hero.astro-ggkms7zt{position:relative;isolation:isolate}.lv-hero.astro-ggkms7zt[data-lv-bleed]{padding-block:var(--lv-space-9)}.lv-hero--compact.astro-ggkms7zt[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-hero--tall.astro-ggkms7zt[data-lv-bleed]{padding-block:calc(var(--lv-space-9) * 1.6)}.lv-hero--full.astro-ggkms7zt{display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px))}.lv-hero--full.astro-ggkms7zt[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-hero--full.astro-ggkms7zt.lv-hero--anchor-bottom .lv-hero__inner.astro-ggkms7zt{margin-block-start:auto}.lv-hero__bg.astro-ggkms7zt{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-hero__bg.astro-ggkms7zt img.astro-ggkms7zt{inline-size:100%;block-size:100%;object-fit:cover}.lv-hero--anchor-bottom.astro-ggkms7zt{--lv-hero-scrim-dir: to top}.lv-hero--anchor-top.astro-ggkms7zt{--lv-hero-scrim-dir: to bottom}.lv-hero--scrim-soft.astro-ggkms7zt .lv-hero__bg.astro-ggkms7zt::after,.lv-hero--scrim-strong.astro-ggkms7zt .lv-hero__bg.astro-ggkms7zt::after{content:"";position:absolute;inset:0;background:linear-gradient(var(--lv-hero-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.05)) 100%),linear-gradient(100deg,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.34)) 0%,transparent 55%)}.lv-hero--scrim-strong.astro-ggkms7zt{--lv-hero-scrim: 0.82}@media (max-width: 700px){.lv-hero--scrim-soft.astro-ggkms7zt .lv-hero__bg.astro-ggkms7zt::after,.lv-hero--scrim-strong.astro-ggkms7zt .lv-hero__bg.astro-ggkms7zt::after{background:linear-gradient(var(--lv-hero-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-hero-scrim, 0.62) * 0.08)) 100%)}}.lv-hero--scrim-soft.astro-ggkms7zt .lv-hero__inner.astro-ggkms7zt,.lv-hero--scrim-strong.astro-ggkms7zt .lv-hero__inner.astro-ggkms7zt{--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-line: color-mix(in srgb, var(--lv-text-on-brand) 28%, transparent)}.lv-hero--scrim-soft.astro-ggkms7zt .lv-sec__eyebrow.astro-ggkms7zt,.lv-hero--scrim-strong.astro-ggkms7zt .lv-sec__eyebrow.astro-ggkms7zt{color:var(--lv-text-on-brand)}.lv-hero.astro-ggkms7zt[data-lv-bleed]{padding-inline:var(--lv-gutter)}.lv-hero__inner.astro-ggkms7zt{display:grid;gap:var(--lv-space-7)}.lv-hero__zone--counter.astro-ggkms7zt,.lv-hero__zone--foot.astro-ggkms7zt{display:contents}.lv-hero--full.astro-ggkms7zt .lv-hero__inner.astro-ggkms7zt{flex:1 1 auto}.lv-hero--full.astro-ggkms7zt.lv-hero--anchor-top .lv-hero__inner.astro-ggkms7zt{align-content:space-between}.lv-hero__copy.astro-ggkms7zt{max-width:46rem}.lv-hero--centered.astro-ggkms7zt .lv-hero__copy.astro-ggkms7zt{margin-inline:auto;text-align:center}.lv-hero__title.astro-ggkms7zt{margin:0;max-inline-size:15ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));color:var(--lv-text-primary)}.lv-hero--centered.astro-ggkms7zt .lv-hero__title.astro-ggkms7zt{margin-inline:auto}.lv-hero__lede.astro-ggkms7zt{margin-block-start:var(--lv-space-4);font-size:var(--lv-text-lg);color:var(--lv-text-secondary);line-height:var(--lv-leading-normal)}.lv-hero__actions.astro-ggkms7zt{display:flex;flex-wrap:wrap;gap:var(--lv-space-3);margin-block-start:var(--lv-space-6)}.lv-hero--centered.astro-ggkms7zt .lv-hero__actions.astro-ggkms7zt{justify-content:center}.lv-hero__trust.astro-ggkms7zt{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4);margin-block-start:var(--lv-space-6);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-hero--centered.astro-ggkms7zt .lv-hero__trust.astro-ggkms7zt{justify-content:center}.lv-hero__trust-avatars.astro-ggkms7zt{display:flex;align-items:center;margin:0;padding:0;list-style:none}.lv-hero__trust-avatars.astro-ggkms7zt>li.astro-ggkms7zt{display:contents}.lv-hero__trust-avatar.astro-ggkms7zt{--lv-portrait-size: 2.5rem;border:2px solid var(--lv-surface);flex-shrink:0}.lv-hero__trust-avatars.astro-ggkms7zt>li.astro-ggkms7zt:not(:first-child)>.lv-hero__trust-avatar.astro-ggkms7zt{margin-inline-start:-0.65rem}.lv-hero__trust-units.astro-ggkms7zt{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3) var(--lv-space-4)}.lv-hero__trust-unit.astro-ggkms7zt{display:flex;align-items:center;gap:var(--lv-space-3)}.lv-hero__trust-sep.astro-ggkms7zt{align-self:stretch;inline-size:1px;background:var(--lv-line)}.lv-hero__trust-rating.astro-ggkms7zt{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-hero__trust-of.astro-ggkms7zt{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-hero__trust-stars.astro-ggkms7zt{margin-inline-start:2px}.lv-hero__trust-ratinglabel.astro-ggkms7zt{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-hero__trust-proof.astro-ggkms7zt{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary);max-inline-size:32ch}.lv-hero--scrim-soft.astro-ggkms7zt .lv-trust-mark.astro-ggkms7zt,.lv-hero--scrim-strong.astro-ggkms7zt .lv-trust-mark.astro-ggkms7zt{background:var(--lv-text-on-brand)}.lv-hero__stats.astro-ggkms7zt{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--lv-space-5);margin:0;padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-hero__stat.astro-ggkms7zt{flex:1 1 min(9rem,100%)}@container (min-width: 42rem){.lv-hero__stat.astro-ggkms7zt{max-inline-size:calc((100% - 3 * var(--lv-space-5)) / 4)}}.lv-hero__stat-value.astro-ggkms7zt{font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-hero__stat-unit.astro-ggkms7zt{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-hero__stat-label.astro-ggkms7zt{margin:var(--lv-space-1) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}@container (min-width: 56rem){.lv-hero--stat-rail.astro-ggkms7zt:not(.lv-hero--aside) .lv-hero__inner.astro-ggkms7zt{grid-template-columns:minmax(0,1.6fr) minmax(14rem,0.9fr);align-items:end}.lv-hero--stat-rail.astro-ggkms7zt:not(.lv-hero--aside) .lv-hero__stats.astro-ggkms7zt{flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;border-block-start:0;border-inline-start:1px solid var(--lv-line);padding-block-start:0;padding-inline-start:var(--lv-space-5)}.lv-hero--stat-rail.astro-ggkms7zt:not(.lv-hero--aside) .lv-hero__stat.astro-ggkms7zt{flex-basis:100%;max-inline-size:none}}.lv-hero__aside.astro-ggkms7zt{align-self:start;inline-size:100%;max-inline-size:26rem;padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent)}.lv-hero--centered.astro-ggkms7zt .lv-hero__aside.astro-ggkms7zt{margin-inline:auto}.lv-hero__aside-title.astro-ggkms7zt{margin:0 0 var(--lv-space-3);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-hero__aside-rows.astro-ggkms7zt{margin:0}.lv-hero__aside-row.astro-ggkms7zt{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-hero__aside-row.astro-ggkms7zt dt.astro-ggkms7zt{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-hero__aside-row.astro-ggkms7zt dd.astro-ggkms7zt{margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-hero__aside-row.astro-ggkms7zt dd.astro-ggkms7zt a.astro-ggkms7zt{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-hero__aside-row.astro-ggkms7zt dd.astro-ggkms7zt a.astro-ggkms7zt:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-hero__aside-row.astro-ggkms7zt dd.astro-ggkms7zt a.astro-ggkms7zt:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-hero__aside-note.astro-ggkms7zt{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-hero__aside-cta.astro-ggkms7zt{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-hero__aside-cta.astro-ggkms7zt:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}@container (min-width: 56rem){.lv-hero--aside.astro-ggkms7zt .lv-hero__inner.astro-ggkms7zt{grid-template-areas:"copy aside" "stats aside";grid-template-columns:minmax(0,1.6fr) minmax(16rem,0.9fr);align-items:start}.lv-hero--aside.astro-ggkms7zt .lv-hero__copy.astro-ggkms7zt{grid-area:copy}.lv-hero--aside.astro-ggkms7zt .lv-hero__stats.astro-ggkms7zt{grid-area:stats;align-self:end}.lv-hero--aside.astro-ggkms7zt .lv-hero__aside.astro-ggkms7zt{grid-area:aside;justify-self:end}}.lv-hero--aside.astro-ggkms7zt .lv-hero__logos.astro-ggkms7zt,.lv-hero--stat-rail.astro-ggkms7zt .lv-hero__logos.astro-ggkms7zt{grid-column:1 / -1}.lv-hero__logos.astro-ggkms7zt{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-7);margin:0;padding:var(--lv-space-4) 0 0;border-block-start:1px solid var(--lv-line);list-style:none}.lv-hero__logo-link.astro-ggkms7zt{display:inline-flex;align-items:center;color:var(--lv-text-tertiary);text-decoration:none;opacity:0.72;transition:opacity var(--lv-dur-fast) var(--lv-ease)}.lv-hero__logo-link.astro-ggkms7zt:hover{opacity:1}.lv-hero__logo-img.astro-ggkms7zt{block-size:1.75rem;inline-size:auto;filter:grayscale(1)}.lv-hero--scrim-soft.astro-ggkms7zt .lv-hero__logo-img.astro-ggkms7zt,.lv-hero--scrim-strong.astro-ggkms7zt .lv-hero__logo-img.astro-ggkms7zt{filter:grayscale(1) invert(1) brightness(1.6);mix-blend-mode:screen}.lv-hero__logo-name.astro-ggkms7zt{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);letter-spacing:0.04em}@media (prefers-reduced-motion: reduce){.lv-hero__aside-row.astro-ggkms7zt dd.astro-ggkms7zt a.astro-ggkms7zt,.lv-hero__logo-link.astro-ggkms7zt{transition-duration:0.01ms}}
/* components/open.pitch/renderers/workshop.astro */
.lv-workshop.astro-sh5hp3ak{position:relative;isolation:isolate}.lv-workshop.astro-sh5hp3ak[data-lv-bleed]{padding-block:var(--lv-space-9);padding-inline:var(--lv-gutter)}.lv-workshop--compact.astro-sh5hp3ak[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-workshop--tall.astro-sh5hp3ak[data-lv-bleed]{padding-block:calc(var(--lv-space-9) * 1.6)}.lv-workshop--full.astro-sh5hp3ak{display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px))}.lv-workshop--full.astro-sh5hp3ak[data-lv-bleed]{padding-block:var(--lv-space-7)}.lv-workshop--full.astro-sh5hp3ak.lv-workshop--anchor-bottom .lv-workshop__inner.astro-sh5hp3ak{margin-block-start:auto}.lv-workshop__scene.astro-sh5hp3ak{position:absolute;inset:0;z-index:-1;overflow:hidden}.lv-workshop__scene.astro-sh5hp3ak img.astro-sh5hp3ak{inline-size:100%;block-size:100%;object-fit:cover}.lv-workshop--anchor-bottom.astro-sh5hp3ak{--lv-workshop-scrim-dir: to top}.lv-workshop--anchor-top.astro-sh5hp3ak{--lv-workshop-scrim-dir: to bottom}.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-workshop__scene.astro-sh5hp3ak::after,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-workshop__scene.astro-sh5hp3ak::after{content:"";position:absolute;inset:0;background:linear-gradient(var(--lv-workshop-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.05)) 100%),linear-gradient(100deg,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.34)) 0%,transparent 55%)}.lv-workshop--scrim-strong.astro-sh5hp3ak{--lv-workshop-scrim: 0.82}@media (max-width: 700px){.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-workshop__scene.astro-sh5hp3ak::after,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-workshop__scene.astro-sh5hp3ak::after{background:linear-gradient(var(--lv-workshop-scrim-dir, to top),rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-workshop-scrim, 0.62) * 0.08)) 100%)}}.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-workshop__inner.astro-sh5hp3ak,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-workshop__inner.astro-sh5hp3ak{--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-line: color-mix(in srgb, var(--lv-text-on-brand) 28%, transparent)}.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-sec__eyebrow.astro-sh5hp3ak,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-sec__eyebrow.astro-sh5hp3ak{color:var(--lv-text-on-brand)}.lv-workshop__inner.astro-sh5hp3ak{position:relative;display:grid;gap:var(--lv-space-6);align-items:end}.lv-workshop__zone--counter.astro-sh5hp3ak,.lv-workshop__zone--foot.astro-sh5hp3ak{display:contents}.lv-workshop__display.astro-sh5hp3ak{max-width:var(--lv-measure)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__display.astro-sh5hp3ak{margin-inline:auto;text-align:center}.lv-workshop__title.astro-sh5hp3ak{margin:0;max-inline-size:16ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));line-height:var(--lv-leading-tight);color:var(--lv-text-primary)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__title.astro-sh5hp3ak{margin-inline:auto}.lv-workshop__chip.astro-sh5hp3ak{display:inline-flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-2);margin:var(--lv-space-4) 0 0;padding:var(--lv-space-2) var(--lv-space-4);border:1px solid var(--lv-line);border-radius:var(--lv-radius-pill);font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-workshop__chip-figure.astro-sh5hp3ak{font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-workshop__chip-of.astro-sh5hp3ak{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-workshop__chip-stars.astro-sh5hp3ak{margin-inline-start:2px}.lv-workshop__chip-label.astro-sh5hp3ak{color:var(--lv-text-secondary)}.lv-workshop__lede.astro-sh5hp3ak{margin-block-start:var(--lv-space-4);font-size:var(--lv-text-lg);font-weight:var(--lv-weight-regular);line-height:var(--lv-leading-normal);color:var(--lv-text-secondary)}.lv-workshop__actions.astro-sh5hp3ak{display:flex;flex-wrap:wrap;gap:var(--lv-space-3);margin-block-start:var(--lv-space-6)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__actions.astro-sh5hp3ak{justify-content:center}.lv-workshop__strip.astro-sh5hp3ak{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4);margin-block-start:var(--lv-space-5);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__strip.astro-sh5hp3ak{justify-content:center}.lv-workshop__strip-avatars.astro-sh5hp3ak{display:flex;align-items:center;margin:0;padding:0;list-style:none}.lv-workshop__strip-avatars.astro-sh5hp3ak>li.astro-sh5hp3ak{display:contents}.lv-workshop__strip-avatar.astro-sh5hp3ak{--lv-portrait-size: 2.5rem;border:2px solid var(--lv-surface);flex-shrink:0}.lv-workshop__strip-avatars.astro-sh5hp3ak>li.astro-sh5hp3ak:not(:first-child)>.lv-workshop__strip-avatar.astro-sh5hp3ak{margin-inline-start:-0.65rem}.lv-workshop__strip-rating.astro-sh5hp3ak{display:flex;align-items:baseline;gap:var(--lv-space-2);margin:0;font-size:var(--lv-text-md);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-workshop__strip-of.astro-sh5hp3ak{font-size:var(--lv-text-xs);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-workshop__strip-stars.astro-sh5hp3ak{margin-inline-start:2px}.lv-workshop__strip-label.astro-sh5hp3ak{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-workshop__strip-proof.astro-sh5hp3ak{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-secondary);max-inline-size:32ch}.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-trust-mark.astro-sh5hp3ak,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-trust-mark.astro-sh5hp3ak{background:var(--lv-text-on-brand)}.lv-workshop__facts.astro-sh5hp3ak{display:flex;flex-wrap:wrap;gap:var(--lv-space-5);margin:0;padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__facts.astro-sh5hp3ak{justify-content:center}.lv-workshop__fact.astro-sh5hp3ak{flex:1 1 min(9rem,100%)}.lv-workshop__fact-value.astro-sh5hp3ak{font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-workshop__fact-unit.astro-sh5hp3ak{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-workshop__fact-label.astro-sh5hp3ak{margin:var(--lv-space-1) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-workshop__note.astro-sh5hp3ak{position:relative;align-self:start;inline-size:100%;max-inline-size:26rem;padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent)}.lv-workshop--centered.astro-sh5hp3ak .lv-workshop__note.astro-sh5hp3ak{margin-inline:auto}.lv-workshop__leader.astro-sh5hp3ak{position:absolute;inset-inline-end:100%;inset-block-start:var(--lv-space-7);inline-size:var(--lv-space-8);block-size:1px;background:color-mix(in oklab,var(--lv-text-on-brand) 55%,transparent)}.lv-workshop__leader-mark.astro-sh5hp3ak{position:absolute;inset-inline-start:calc(var(--lv-space-3) * -1);inset-block-start:50%;display:grid;place-items:center;inline-size:1.5rem;block-size:1.5rem;transform:translateY(-50%);border:1px solid color-mix(in oklab,var(--lv-text-on-brand) 55%,transparent);border-radius:var(--lv-radius-pill);background:var(--lv-brand-strong);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);color:var(--lv-text-on-brand)}@media (max-width: 900px){.lv-workshop__leader.astro-sh5hp3ak{display:none}}.lv-workshop__note-head.astro-sh5hp3ak{display:flex;align-items:center;gap:var(--lv-space-2);margin:0 0 var(--lv-space-3)}.lv-workshop__note-index.astro-sh5hp3ak{display:none;place-items:center;inline-size:1.25rem;block-size:1.25rem;border:1px solid var(--lv-line);border-radius:var(--lv-radius-pill);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono)}@media (max-width: 900px){.lv-workshop__note-index.astro-sh5hp3ak{display:grid}}.lv-workshop__note-title.astro-sh5hp3ak{font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-workshop__note-rows.astro-sh5hp3ak{margin:0}.lv-workshop__note-row.astro-sh5hp3ak{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lv-space-4);padding-block:var(--lv-space-3);border-block-start:1px solid var(--lv-line)}.lv-workshop__note-row.astro-sh5hp3ak dt.astro-sh5hp3ak{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-workshop__note-row.astro-sh5hp3ak dd.astro-sh5hp3ak{margin:0;text-align:end;font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}.lv-workshop__note-row.astro-sh5hp3ak dd.astro-sh5hp3ak a.astro-sh5hp3ak{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:color-mix(in oklab,var(--lv-text-on-brand) 40%,transparent);transition:text-decoration-color var(--lv-dur-state) var(--lv-ease)}.lv-workshop__note-row.astro-sh5hp3ak dd.astro-sh5hp3ak a.astro-sh5hp3ak:hover{text-decoration-thickness:2px;text-decoration-color:var(--lv-text-on-brand)}.lv-workshop__note-row.astro-sh5hp3ak dd.astro-sh5hp3ak a.astro-sh5hp3ak:focus-visible{outline:var(--lv-focus-width) solid var(--lv-text-on-brand);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-workshop__note-foot.astro-sh5hp3ak{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-workshop__note-cta.astro-sh5hp3ak{inline-size:100%;margin-block-start:var(--lv-space-4);background:var(--lv-text-on-brand);color:var(--lv-brand-strong);box-shadow:none}.lv-workshop__note-cta.astro-sh5hp3ak:hover{background:color-mix(in oklab,var(--lv-text-on-brand) 92%,var(--lv-brand-strong));color:var(--lv-brand-strong)}.lv-workshop--aside.astro-sh5hp3ak .lv-workshop__marks.astro-sh5hp3ak,.lv-workshop--stat-rail.astro-sh5hp3ak .lv-workshop__marks.astro-sh5hp3ak{grid-column:1 / -1}.lv-workshop__marks.astro-sh5hp3ak{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-7);margin:0;padding:var(--lv-space-4) 0 0;border-block-start:1px solid var(--lv-line);list-style:none}.lv-workshop__mark-link.astro-sh5hp3ak{display:inline-flex;align-items:center;color:var(--lv-text-tertiary);text-decoration:none;opacity:0.72;transition:opacity var(--lv-dur-fast) var(--lv-ease)}.lv-workshop__mark-link.astro-sh5hp3ak:hover{opacity:1}.lv-workshop__mark-link.astro-sh5hp3ak:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-workshop__mark-img.astro-sh5hp3ak{block-size:1.75rem;inline-size:auto;filter:grayscale(1)}.lv-workshop--scrim-soft.astro-sh5hp3ak .lv-workshop__mark-img.astro-sh5hp3ak,.lv-workshop--scrim-strong.astro-sh5hp3ak .lv-workshop__mark-img.astro-sh5hp3ak{filter:grayscale(1) invert(1) brightness(1.6);mix-blend-mode:screen}.lv-workshop__mark-name.astro-sh5hp3ak{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);letter-spacing:0.04em}.lv-workshop--full.astro-sh5hp3ak .lv-workshop__inner.astro-sh5hp3ak{flex:1 1 auto}.lv-workshop--full.astro-sh5hp3ak.lv-workshop--anchor-top .lv-workshop__inner.astro-sh5hp3ak{align-content:space-between}@container (min-width: 56rem){.lv-workshop--aside.astro-sh5hp3ak .lv-workshop__inner.astro-sh5hp3ak{grid-template-areas:"display note" "facts note";grid-template-columns:minmax(0,1.6fr) minmax(16rem,0.9fr);column-gap:var(--lv-space-8);align-items:end}.lv-workshop--aside.astro-sh5hp3ak .lv-workshop__display.astro-sh5hp3ak{grid-area:display}.lv-workshop--aside.astro-sh5hp3ak .lv-workshop__facts.astro-sh5hp3ak{grid-area:facts}.lv-workshop--aside.astro-sh5hp3ak .lv-workshop__note.astro-sh5hp3ak{grid-area:note;justify-self:end;align-self:end}.lv-workshop--stat-rail.astro-sh5hp3ak:not(.lv-workshop--aside) .lv-workshop__inner.astro-sh5hp3ak{grid-template-columns:minmax(0,1.6fr) minmax(14rem,0.9fr);column-gap:var(--lv-space-8)}.lv-workshop--stat-rail.astro-sh5hp3ak:not(.lv-workshop--aside) .lv-workshop__facts.astro-sh5hp3ak{flex-direction:column;flex-wrap:nowrap;gap:var(--lv-space-4);padding-block-start:0;padding-inline-start:var(--lv-space-5);border-block-start:0;border-inline-start:1px solid var(--lv-line)}.lv-workshop--stat-rail.astro-sh5hp3ak:not(.lv-workshop--aside) .lv-workshop__fact.astro-sh5hp3ak{flex-basis:auto}.lv-workshop--split.astro-sh5hp3ak:not(.lv-workshop--aside) .lv-workshop__display.astro-sh5hp3ak{max-width:min(var(--lv-measure),60%)}}@media (prefers-reduced-motion: reduce){.lv-workshop__note-row.astro-sh5hp3ak dd.astro-sh5hp3ak a.astro-sh5hp3ak,.lv-workshop__mark-link.astro-sh5hp3ak{transition-duration:0.01ms}}
/* components/open.scene/renderers/scene.astro */
.lv-scene.astro-uuvg4tdy{position:relative;isolation:isolate;display:flex;flex-direction:column;min-block-size:calc(var(--lv-stage-vh, 100svh) - var(--lv-nav-height, 0px));padding-block:var(--lv-space-7);padding-inline:var(--lv-gutter)}.lv-scene__inner.astro-uuvg4tdy{margin-block-start:auto;inline-size:100%;display:grid;gap:var(--lv-space-6)}.lv-scene__backdrops.astro-uuvg4tdy{position:absolute;inset:0;z-index:-1;overflow:hidden;background:var(--lv-surface-sunken)}.lv-scene__bg.astro-uuvg4tdy{position:absolute;inset:0;opacity:0}.lv-scene__bg.astro-uuvg4tdy:first-child{opacity:1}.lv-scene__bg.astro-uuvg4tdy img.astro-uuvg4tdy{inline-size:100%;block-size:100%;object-fit:cover;object-position:50% 42%}.lv-scene__backdrops.astro-uuvg4tdy::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.92)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.58)) 38%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.20)) 68%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.05)) 100%),linear-gradient(100deg,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.34)) 0%,transparent 55%)}.lv-scene--scrim-strong.astro-uuvg4tdy{--lv-scene-scrim: 0.82}@media (max-width: 700px){.lv-scene__backdrops.astro-uuvg4tdy::after{background:linear-gradient(to top,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.98)) 0%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.72)) 42%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.32)) 70%,rgb(var(--lv-glass-under) / calc(var(--lv-scene-scrim, 0.62) * 0.08)) 100%)}}.lv-scene--tabs.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy{transition:opacity var(--lv-dur-media, 900ms) var(--lv-ease)}.lv-scene--tabs.astro-uuvg4tdy:has(.lv-scene__radio:checked) .lv-scene__bg.astro-uuvg4tdy:first-child{opacity:0}.lv-scene--tabs.astro-uuvg4tdy:has(.lv-scene__tab:nth-of-type(1) .lv-scene__radio:checked) .lv-scene__bg.astro-uuvg4tdy:nth-of-type(1),.lv-scene--tabs.astro-uuvg4tdy:has(.lv-scene__tab:nth-of-type(2) .lv-scene__radio:checked) .lv-scene__bg.astro-uuvg4tdy:nth-of-type(2),.lv-scene--tabs.astro-uuvg4tdy:has(.lv-scene__tab:nth-of-type(3) .lv-scene__radio:checked) .lv-scene__bg.astro-uuvg4tdy:nth-of-type(3),.lv-scene--tabs.astro-uuvg4tdy:has(.lv-scene__tab:nth-of-type(4) .lv-scene__radio:checked) .lv-scene__bg.astro-uuvg4tdy:nth-of-type(4){opacity:1}@media (prefers-reduced-motion: no-preference){.lv-scene--auto-2.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy{animation:lv-scene-cycle-2 16s linear infinite}.lv-scene--auto-3.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy{animation:lv-scene-cycle-3 24s linear infinite}.lv-scene--auto-4.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy{animation:lv-scene-cycle-4 32s linear infinite}.lv-scene--auto.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy:nth-of-type(2){animation-delay:8s}.lv-scene--auto.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy:nth-of-type(3){animation-delay:16s}.lv-scene--auto.astro-uuvg4tdy .lv-scene__bg.astro-uuvg4tdy:nth-of-type(4){animation-delay:24s}@keyframes lv-scene-cycle-2{0%{opacity:0}5%,50%{opacity:1}55%,100%{opacity:0}}@keyframes lv-scene-cycle-3{0%{opacity:0}4%,33.3%{opacity:1}37.3%,100%{opacity:0}}@keyframes lv-scene-cycle-4{0%{opacity:0}3%,25%{opacity:1}28%,100%{opacity:0}}}.lv-scene__copy.astro-uuvg4tdy{max-width:var(--lv-measure)}.lv-scene.astro-uuvg4tdy .lv-sec__eyebrow.astro-uuvg4tdy,.lv-scene__title.astro-uuvg4tdy,.lv-scene__lede.astro-uuvg4tdy,.lv-scene__stat-value.astro-uuvg4tdy,.lv-scene__stat-unit.astro-uuvg4tdy,.lv-scene__stat-label.astro-uuvg4tdy,.lv-scene__form-label.astro-uuvg4tdy,.lv-scene__consent.astro-uuvg4tdy{color:var(--lv-text-on-brand)}.lv-scene__title.astro-uuvg4tdy{margin:0;max-inline-size:15ch;font-size:var(--lv-hero-display, clamp(var(--lv-text-2xl), 5cqi, 3.25rem));line-height:var(--lv-leading-tight);text-wrap:balance}.lv-scene__lede.astro-uuvg4tdy{margin-block-start:var(--lv-space-4);max-inline-size:52ch;font-size:var(--lv-text-lg);line-height:var(--lv-leading-normal)}.lv-scene__actions.astro-uuvg4tdy{display:flex;flex-wrap:wrap;gap:var(--lv-space-3);margin-block-start:var(--lv-space-6)}.lv-scene__form-shell.astro-uuvg4tdy{display:grid;gap:var(--lv-space-3);max-width:28rem;margin-block-start:var(--lv-space-6)}.lv-scene__form.astro-uuvg4tdy{display:grid;gap:var(--lv-space-2)}.lv-scene__form-row.astro-uuvg4tdy{display:flex;flex-wrap:wrap;gap:var(--lv-space-3)}.lv-scene__form-row.astro-uuvg4tdy .lv-field.astro-uuvg4tdy{flex:1 1 14rem}.lv-scene__consent.astro-uuvg4tdy{color:var(--lv-text-on-brand)}.lv-scene__fold.astro-uuvg4tdy{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--lv-space-4) var(--lv-space-6);padding-block-start:var(--lv-space-4);border-block-start:1px solid color-mix(in srgb,var(--lv-text-on-brand) 28%,transparent)}.lv-scene__tabs.astro-uuvg4tdy{display:flex;flex-wrap:wrap;gap:var(--lv-space-2);margin:0;padding:0;border:0}.lv-scene__tab.astro-uuvg4tdy{display:inline-flex;align-items:center;min-block-size:44px;padding-inline:var(--lv-space-4);border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line-control);font:var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);color:var(--lv-text-primary);cursor:pointer;transition:background-color var(--lv-dur-state) var(--lv-ease),color var(--lv-dur-state) var(--lv-ease)}.lv-scene__tab.astro-uuvg4tdy:has(.lv-scene__radio:checked){background:var(--lv-brand-strong);color:var(--lv-text-on-brand)}.lv-scene__tab.astro-uuvg4tdy:has(.lv-scene__radio:focus-visible){outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset)}.lv-scene__tab.astro-uuvg4tdy:active{transform:scale(0.97)}.lv-scene__stats.astro-uuvg4tdy{display:flex;flex-wrap:wrap;gap:var(--lv-space-2) var(--lv-space-6);margin:0}.lv-scene__stat-value.astro-uuvg4tdy{font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold)}.lv-scene__stat-unit.astro-uuvg4tdy{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);letter-spacing:normal}.lv-scene__stat-label.astro-uuvg4tdy{margin:0;font-size:var(--lv-text-xs)}
/* components/orient.answer-first/renderers/answer.astro */
.lv-answer__box.astro-eqcacd5p{max-width:var(--lv-measure);padding:var(--lv-space-6);border-radius:var(--lv-radius-lg);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-answer__q.astro-eqcacd5p{margin:0 0 var(--lv-space-3);font-size:var(--lv-text-lg)}.lv-answer__a.astro-eqcacd5p{font-size:var(--lv-text-md)}.lv-answer__stats.astro-eqcacd5p{display:flex;flex-wrap:wrap;gap:var(--lv-space-5);margin:var(--lv-space-5) 0 0;padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-answer__stat-value.astro-eqcacd5p{font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-answer__stat-unit.astro-eqcacd5p{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-xs);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-answer__stat-label.astro-eqcacd5p{margin:var(--lv-space-1) 0 0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-answer__bullets.astro-eqcacd5p{margin:var(--lv-space-4) 0 0;padding-inline-start:var(--lv-space-5);display:grid;gap:var(--lv-space-2);color:var(--lv-text-secondary)}.lv-answer__paths.astro-eqcacd5p{margin-block-start:var(--lv-space-5)}.lv-answer__pathrows.astro-eqcacd5p{margin:var(--lv-space-5) 0 0;padding:0;list-style:none;border-block-start:1px solid var(--lv-line)}.lv-answer__pathrows.astro-eqcacd5p>li.astro-eqcacd5p{border-block-end:1px solid var(--lv-line)}.lv-answer__pathrow.astro-eqcacd5p{display:flex;align-items:center;gap:var(--lv-space-4);min-block-size:44px;padding-block:var(--lv-space-3);color:inherit;text-decoration:none}.lv-answer__pathrow.astro-eqcacd5p:hover .lv-answer__pathrow-label.astro-eqcacd5p{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.lv-answer__pathrow.astro-eqcacd5p:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-answer__pathrow-body.astro-eqcacd5p{display:flex;flex-direction:column;gap:2px;min-inline-size:0}.lv-answer__pathrow-label.astro-eqcacd5p{font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-answer__pathrow-sub.astro-eqcacd5p{font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-answer__source.astro-eqcacd5p{margin:var(--lv-space-5) 0 0;padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/orient.jump-nav/renderers/nav.astro */
.lv-jump.astro-kywt5mm5{max-width:var(--lv-measure);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-jump__title.astro-kywt5mm5{margin:0 0 var(--lv-space-3);font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-jump__short.astro-kywt5mm5{margin:0 0 var(--lv-space-4);padding-block-end:var(--lv-space-4);border-block-end:1px solid var(--lv-line);color:var(--lv-text-primary);font-weight:var(--lv-weight-medium)}.lv-jump__list.astro-kywt5mm5{display:grid;gap:var(--lv-space-2);margin:0;padding:0;list-style:none;counter-reset:lv-jump}.lv-jump__list.astro-kywt5mm5>li.astro-kywt5mm5{counter-increment:lv-jump}.lv-jump__link.astro-kywt5mm5{display:flex;gap:var(--lv-space-3);min-block-size:32px;align-items:center;color:var(--lv-text-link);text-decoration:none}.lv-jump__link.astro-kywt5mm5::before{content:counter(lv-jump,decimal-leading-zero);display:inline-grid;place-items:center;font:var(--lv-weight-medium) var(--lv-text-xs) / 1 var(--lv-font-mono);color:var(--lv-text-tertiary);font-variant-numeric:tabular-nums}.lv-jump__link.astro-kywt5mm5:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.lv-jump__link.astro-kywt5mm5:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-jump__link.astro-kywt5mm5.is-current{color:var(--lv-text-primary);font-weight:var(--lv-weight-semibold)}.lv-jump__link.astro-kywt5mm5.is-current::before{min-inline-size:var(--lv-space-6);min-block-size:var(--lv-space-6);border-radius:var(--lv-radius-sm);background:var(--lv-brand-soft);color:var(--lv-brand-strong)}@media (pointer: coarse){.lv-jump__link.astro-kywt5mm5{min-block-size:44px}}@container (min-width: 60rem){.lv-jump--sticky-rail.astro-kywt5mm5{position:sticky;inset-block-start:var(--lv-space-5)}}.lv-jump--chip-bar.astro-kywt5mm5{max-width:none;padding:0;border-radius:0;background:none;box-shadow:none}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__list.astro-kywt5mm5{display:flex;flex-wrap:nowrap;gap:var(--lv-space-2);padding-block:var(--lv-space-2);overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;mask-image:linear-gradient(to right,transparent,currentColor var(--lv-space-5),currentColor calc(100% - var(--lv-space-5)),transparent)}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__list.astro-kywt5mm5::-webkit-scrollbar{display:none}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5{flex:none;min-block-size:36px;padding-inline:var(--lv-space-4);border-radius:var(--lv-radius-pill);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line-control);font:var(--lv-weight-medium) var(--lv-text-sm) / 1 var(--lv-font-ui);color:var(--lv-text-primary);transition:background-color var(--lv-dur-state) var(--lv-ease),color var(--lv-dur-state) var(--lv-ease),box-shadow var(--lv-dur-state) var(--lv-ease),transform var(--lv-dur-fast) var(--lv-ease)}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5::before{content:none}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5:hover{background:var(--lv-surface-raised);text-decoration:none}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5:active{transform:scale(0.97)}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5.is-current{background:var(--lv-text-primary);color:var(--lv-surface);box-shadow:none;font-weight:var(--lv-weight-semibold)}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5.is-current::before{content:none}@media (pointer: coarse){.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5{min-block-size:44px}}@media (prefers-reduced-motion: reduce){.lv-jump__link.astro-kywt5mm5,.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5{transition:none}.lv-jump--chip-bar.astro-kywt5mm5 .lv-jump__link.astro-kywt5mm5:active{transform:none}}
/* components/orient.language-region/renderers/switcher.astro */
.lv-lang.astro-wqh5m37v{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-3);padding-block:var(--lv-space-4)}.lv-lang__label.astro-wqh5m37v{font:var(--lv-weight-bold) var(--lv-text-xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-lang__current.astro-wqh5m37v{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold)}.lv-lang__list.astro-wqh5m37v .astro-wqh5m37v[aria-current=true]{background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-brand)}
/* components/orient.progress/renderers/indicator.astro */
.lv-progress__bar.astro-rvpainuc{position:sticky;inset-block-start:0;z-index:var(--lv-z-bar);block-size:3px;background:var(--lv-line)}.lv-progress__bar.astro-rvpainuc::after{content:"";display:block;block-size:100%;transform-origin:0 50%;background:var(--lv-ramp);animation:lv-progress-scroll linear;animation-timeline:scroll()}@keyframes lv-progress-scroll{from{transform:scaleX(0)}to{transform:scaleX(1)}}.lv-progress__steps.astro-rvpainuc{display:grid;gap:var(--lv-space-4);margin:var(--lv-space-4) 0 0;padding:0;list-style:none}.lv-progress__step.astro-rvpainuc{display:flex;align-items:center;gap:var(--lv-space-3);color:var(--lv-text-tertiary)}.lv-progress__dot.astro-rvpainuc{inline-size:10px;block-size:10px;border-radius:var(--lv-radius-pill);background:var(--lv-line-strong);flex:none}.lv-progress__step.astro-rvpainuc.is-done{color:var(--lv-text-secondary)}.lv-progress__step.astro-rvpainuc.is-done .lv-progress__dot.astro-rvpainuc{background:var(--lv-brand)}.lv-progress__step.astro-rvpainuc.is-current{color:var(--lv-text-primary);font-weight:var(--lv-weight-semibold)}.lv-progress__step.astro-rvpainuc.is-current .lv-progress__dot.astro-rvpainuc{background:var(--lv-brand);box-shadow:0 0 0 4px var(--lv-brand-soft)}@container (min-width: 46rem){.lv-progress__steps.astro-rvpainuc{grid-auto-flow:column;grid-auto-columns:minmax(0,1fr)}}@media (prefers-reduced-motion: reduce){.lv-progress__bar.astro-rvpainuc::after{animation:none;transform:scaleX(1)}}
/* components/orient.site-notice/renderers/bar.astro */
.lv-notice.astro-pvwqwkbs{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--lv-space-2) var(--lv-space-5);padding:var(--lv-space-3) var(--lv-space-5);background:var(--lv-surface-sunken);color:var(--lv-text-primary);font-size:var(--lv-text-sm);text-align:center}.lv-notice--warn.astro-pvwqwkbs{background:var(--lv-warn-surface);color:var(--lv-warn-text)}.lv-notice--urgent.astro-pvwqwkbs{background:var(--lv-bad-surface);color:var(--lv-bad-text)}.lv-notice__text.astro-pvwqwkbs{margin:0;max-width:none}.lv-notice__kicker.astro-pvwqwkbs{margin-inline-end:var(--lv-space-2);font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase}.lv-notice__link.astro-pvwqwkbs{color:inherit;font-weight:var(--lv-weight-semibold);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.lv-notice__link.astro-pvwqwkbs:hover{text-decoration-thickness:2px}.lv-notice__link.astro-pvwqwkbs:focus-visible{outline:var(--lv-focus-width) solid currentColor;outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}
/* components/orient.trail/renderers/trail.astro */
.lv-trail2.astro-ask4nnt2{font-family:var(--lv-font-ui)}.lv-trail2--standalone.astro-ask4nnt2{max-width:var(--lv-measure);margin-inline:auto;padding-block:var(--lv-space-4)}.lv-trail2--inline.astro-ask4nnt2{display:contents}.lv-trail2__list.astro-ask4nnt2{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2);margin:0;padding:0;list-style:none;font:var(--lv-weight-medium) var(--lv-text-2xs) / 1.6 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase);font-variant-caps:var(--lv-display-variant, normal)}.lv-trail2__item.astro-ask4nnt2{display:inline-flex;align-items:center;gap:var(--lv-space-2);min-width:0}.lv-trail2__sep.astro-ask4nnt2{inline-size:1px;block-size:0.85em;flex:none;background:var(--lv-line-strong);transform:rotate(20deg);user-select:none}.lv-trail2__link.astro-ask4nnt2{color:var(--lv-text-secondary);text-decoration:none;border-block-end:1px solid transparent;transition:color var(--lv-dur-state) var(--lv-ease),border-color var(--lv-dur-state) var(--lv-ease)}.lv-trail2__link.astro-ask4nnt2:hover{color:var(--lv-text-link);border-block-end-color:var(--lv-text-link)}.lv-trail2__current.astro-ask4nnt2{color:var(--lv-text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:28ch}@media (prefers-reduced-motion: reduce){.lv-trail2__link.astro-ask4nnt2{transition:none}}
/* components/prove.ai-citations/renderers/citations.astro */
.lv-cites.astro-5nah5ipk{display:grid;gap:var(--lv-space-5);margin:0;padding:0;list-style:none}@container (min-width: 46rem){.lv-cites.astro-5nah5ipk{grid-template-columns:repeat(2,minmax(0,1fr))}}.lv-cites__meta.astro-5nah5ipk{display:flex;align-items:center;justify-content:space-between;gap:var(--lv-space-3);margin:0}.lv-cites__engine.astro-5nah5ipk{display:inline-flex;align-items:center;min-block-size:26px;padding-inline:var(--lv-space-3);border-radius:var(--lv-radius-pill);background:var(--lv-brand-soft);color:var(--lv-brand-strong);font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:var(--lv-display-case, uppercase)}.lv-cites__date.astro-5nah5ipk{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-cites__prompt.astro-5nah5ipk{margin:0;font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-cites__quote.astro-5nah5ipk{margin:0;padding-inline-start:var(--lv-space-4);border-inline-start:1px solid var(--lv-line-strong);color:var(--lv-text-primary);text-wrap:pretty}.lv-cites__method.astro-5nah5ipk{max-width:var(--lv-measure);margin-block-start:var(--lv-space-5);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/prove.authorship/renderers/byline.astro */
.lv-author.astro-jvf5gslb{max-width:var(--lv-measure);color:var(--lv-text-secondary)}.lv-author--card.astro-jvf5gslb{display:grid;gap:var(--lv-space-3);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-author--strip.astro-jvf5gslb{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-2) var(--lv-space-4);padding-block:var(--lv-space-3);border-block:1px solid var(--lv-line)}.lv-author__role.astro-jvf5gslb{margin:0;font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-author__who.astro-jvf5gslb{display:flex;align-items:center;gap:var(--lv-space-3)}.lv-author__name.astro-jvf5gslb{display:grid;gap:2px;margin:0;font-size:var(--lv-text-sm)}.lv-author__name.astro-jvf5gslb a.astro-jvf5gslb{color:var(--lv-text-primary);text-decoration:none}.lv-author__name.astro-jvf5gslb a.astro-jvf5gslb:hover{text-decoration:underline}.lv-author__cred.astro-jvf5gslb{color:var(--lv-text-tertiary)}.lv-author__statement.astro-jvf5gslb{margin:0}.lv-author__checked.astro-jvf5gslb{margin:0;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-author--strip.astro-jvf5gslb .lv-portrait.astro-jvf5gslb{--lv-portrait-size: 2rem}
/* components/prove.case-study/renderers/cases.astro */
.lv-cases.astro-cvh23qg4{display:grid;gap:var(--lv-space-8)}.lv-case__narrative.astro-cvh23qg4{display:grid;gap:var(--lv-space-1);margin-block:var(--lv-space-4)}.lv-case__narrative.astro-cvh23qg4 dt.astro-cvh23qg4{font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary);margin-block-start:var(--lv-space-3)}.lv-case__narrative.astro-cvh23qg4 dd.astro-cvh23qg4{margin:0;color:var(--lv-text-secondary)}.lv-case__outcomes.astro-cvh23qg4{display:flex;flex-wrap:wrap;justify-content:center;padding-block:var(--lv-space-4);border-block:1px solid var(--lv-line);margin-block-end:var(--lv-space-4)}.lv-case__outcomes.astro-cvh23qg4>div.astro-cvh23qg4{flex:1 1 min(10rem,100%);max-inline-size:14rem}.lv-figure__unit.astro-cvh23qg4{margin-inline-start:0.25em;font-family:var(--lv-font-ui);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);letter-spacing:normal;color:var(--lv-text-tertiary)}.lv-case__plate.astro-cvh23qg4{display:grid;place-items:center;aspect-ratio:16 / 9;border-radius:var(--lv-radius-md);background-color:var(--lv-surface-sunken);background-image:repeating-linear-gradient(90deg,transparent 0 78px,color-mix(in oklab,currentColor 5%,transparent) 78px 80px);color:var(--lv-text-primary);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-case__plate-art.astro-cvh23qg4{display:grid;opacity:0.55}.lv-case__plate-art.astro-cvh23qg4 svg{inline-size:clamp(5rem,18cqi,8rem);block-size:auto;stroke-width:1.2}.lv-case__plate--dark.astro-cvh23qg4{background-color:var(--lv-text-primary);color:var(--lv-surface);box-shadow:none}
/* components/prove.certification/renderers/certs.astro */
.lv-grid.astro-2bbcazqt{display:flex;flex-wrap:wrap;justify-content:center}.lv-grid.astro-2bbcazqt>li.astro-2bbcazqt{flex:1 1 min(17rem,100%)}@container (min-width: 56rem){.lv-grid.astro-2bbcazqt>li.astro-2bbcazqt{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}}.lv-certs__logo.astro-2bbcazqt{block-size:2.25rem;inline-size:auto;object-position:left center}.lv-certs__kv.astro-2bbcazqt{grid-template-columns:minmax(5.5rem,max-content) 1fr;font-size:var(--lv-text-sm)}.lv-certs__contact.astro-2bbcazqt{max-width:var(--lv-measure);margin-block-start:var(--lv-space-5);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}
/* components/prove.chart/renderers/chart.astro */
.lv-chart.astro-m4dxaa47{display:grid;gap:var(--lv-space-5)}.lv-chart__targets.astro-m4dxaa47{display:grid;gap:var(--lv-space-2)}.lv-chart__edit-list.astro-m4dxaa47{display:flex;flex-wrap:wrap;gap:var(--lv-space-2) var(--lv-space-4);margin:0;padding:0;list-style:none;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/prove.customer-voice/renderers/stage.astro */
.lv-stage__figure.astro-y2e3i7qd{display:grid;gap:var(--lv-space-5) var(--lv-space-7);margin:0;align-items:start}.lv-stage__main.astro-y2e3i7qd{min-inline-size:0}.lv-stage__portrait.astro-y2e3i7qd{order:2}@container (min-width: 46rem){.lv-stage__figure.astro-y2e3i7qd{grid-template-columns:minmax(0,12rem) minmax(0,1fr)}.lv-stage__portrait.astro-y2e3i7qd{order:0;position:sticky;inset-block-start:var(--lv-space-6)}}.lv-stage__portrait.astro-y2e3i7qd>.astro-y2e3i7qd{display:grid;place-items:center;inline-size:clamp(4.5rem,22cqi,9rem);aspect-ratio:1;border-radius:var(--lv-radius-lg)}.lv-stage__photo.astro-y2e3i7qd{object-fit:cover}.lv-stage__monogram.astro-y2e3i7qd{background:var(--lv-brand-soft);box-shadow:inset 0 0 0 1px var(--lv-line-strong);color:var(--lv-brand-strong);font-family:var(--lv-font-display, inherit);font-size:clamp(var(--lv-text-lg),8cqi,2.4rem);font-weight:var(--lv-weight-semibold);letter-spacing:var(--lv-tracking-heading)}.lv-stage__quote.astro-y2e3i7qd{margin:0;font-family:var(--lv-font-display, inherit);font-size:clamp(var(--lv-text-xl),4.2cqi,2.6rem);font-weight:var(--lv-weight-medium);line-height:var(--lv-leading-snug);letter-spacing:var(--lv-tracking-heading);text-wrap:balance;max-inline-size:22ch}.lv-stage__quote.astro-y2e3i7qd::before{content:"»";margin-inline-end:0.08em}.lv-stage__quote.astro-y2e3i7qd::after{content:"«";margin-inline-start:0.08em}.lv-stage__quote.astro-y2e3i7qd::before,.lv-stage__quote.astro-y2e3i7qd::after{color:var(--lv-ink-accent, var(--lv-brand-strong));font-style:normal}@container (min-width: 46rem){.lv-stage__quote.astro-y2e3i7qd{text-indent:-0.62em;max-inline-size:26ch}}.lv-stage__by.astro-y2e3i7qd{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-2) var(--lv-space-4);margin-block-start:var(--lv-space-6);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line);font-size:var(--lv-text-sm);color:var(--lv-text-tertiary)}.lv-stage__by.astro-y2e3i7qd .lv-quote__who.astro-y2e3i7qd b.astro-y2e3i7qd{color:var(--lv-text-primary)}.lv-stage__by.astro-y2e3i7qd .lv-quote__who.astro-y2e3i7qd b.astro-y2e3i7qd::before{content:"— ";font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-stage__ctx.astro-y2e3i7qd::before{content:"· ";color:var(--lv-text-tertiary)}.lv-stage__of.astro-y2e3i7qd{color:var(--lv-text-tertiary)}.lv-stage__more.astro-y2e3i7qd{display:inline-block;margin-block-start:var(--lv-space-5);padding-block:var(--lv-space-3);color:var(--lv-ink-accent, var(--lv-brand-strong));font-size:var(--lv-text-sm);font-weight:var(--lv-weight-semibold);text-decoration-thickness:1px;text-underline-offset:0.28em;transition:text-decoration-thickness var(--lv-dur-state) var(--lv-ease)}.lv-stage__more.astro-y2e3i7qd:hover{text-decoration-thickness:2px}
/* components/prove.customer-voice/renderers/voices.astro */
.lv-voices__list.astro-mytenaww{display:grid;gap:var(--lv-space-5);margin:0;padding:0;list-style:none;grid-template-columns:repeat(auto-fit,minmax(min(19rem,100%),1fr))}.lv-voices--wall.astro-mytenaww .lv-voices__list.astro-mytenaww{display:flex;flex-wrap:wrap;justify-content:center}.lv-voices--wall.astro-mytenaww .lv-voices__item.astro-mytenaww{flex:1 1 min(19rem,100%)}@container (min-width: 60rem){.lv-voices--wall.astro-mytenaww .lv-voices__item.astro-mytenaww{max-inline-size:calc((100% - 2 * var(--lv-space-5)) / 3)}}.lv-voices--single.astro-mytenaww .lv-voices__list.astro-mytenaww{grid-template-columns:minmax(0,1fr);max-inline-size:46rem}.lv-voices--carousel.astro-mytenaww{position:relative}.lv-voices--carousel.astro-mytenaww .lv-voices__list.astro-mytenaww{grid-auto-flow:column;grid-auto-columns:minmax(min(19rem,82%),24rem);grid-template-columns:none;overflow-x:auto;scroll-snap-type:x mandatory;padding-block-end:var(--lv-space-3)}.lv-voices--carousel.astro-mytenaww .lv-voices__item.astro-mytenaww{scroll-snap-align:start}.lv-voices--carousel.astro-mytenaww::after{content:"";position:absolute;inset-inline-end:var(--lv-space-1);inset-block-start:calc(50% - var(--lv-space-3));inline-size:9px;block-size:9px;border-block-start:2px solid var(--lv-icon-quiet);border-inline-end:2px solid var(--lv-icon-quiet);transform:rotate(45deg);pointer-events:none;opacity:0.7}.lv-voices__text.astro-mytenaww{font-size:var(--lv-text-md)}.lv-voices--single.astro-mytenaww .lv-voices__text.astro-mytenaww{font-size:var(--lv-text-lg)}.lv-voices--pullquote.astro-mytenaww .lv-voices__list.astro-mytenaww,.lv-voices--band.astro-mytenaww .lv-voices__list.astro-mytenaww{grid-template-columns:minmax(0,1fr);max-inline-size:56rem;gap:var(--lv-space-9)}.lv-voices--band.astro-mytenaww .lv-voices__list.astro-mytenaww{max-inline-size:none}.lv-voices__text--display.astro-mytenaww{font-size:clamp(var(--lv-text-lg),4.5cqi,2.9rem);font-family:var(--lv-font-display, inherit);font-style:italic;font-weight:var(--lv-weight-medium);line-height:var(--lv-leading-snug);letter-spacing:var(--lv-tracking-heading);text-wrap:balance}.lv-voices__text--display.astro-mytenaww::before{content:"»";margin-inline-end:0.08em}.lv-voices__text--display.astro-mytenaww::after{content:"«";margin-inline-start:0.08em}.lv-voices__text--display.astro-mytenaww::before,.lv-voices__text--display.astro-mytenaww::after{color:var(--lv-ink-accent, var(--lv-brand-strong));font-style:normal}@container (min-width: 46rem){.lv-voices__text--display.astro-mytenaww{text-indent:-0.62em}}.lv-quote__by--display.astro-mytenaww{flex-wrap:wrap;gap:var(--lv-space-3) var(--lv-space-4);margin-block-start:var(--lv-space-6)}.lv-quote__source.astro-mytenaww{flex:none}.lv-quote__who.astro-mytenaww{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--lv-space-2);row-gap:var(--lv-space-1)}.lv-quote__who.astro-mytenaww b.astro-mytenaww::before{content:"— ";font-weight:var(--lv-weight-regular);color:var(--lv-text-tertiary)}.lv-quote__by--display.astro-mytenaww .lv-voices__ctx.astro-mytenaww::before{content:"· ";color:var(--lv-text-tertiary)}.lv-quote__by--display.astro-mytenaww .lv-quote__who.astro-mytenaww b.astro-mytenaww{color:var(--lv-text-primary)}.lv-quote__score.astro-mytenaww{padding-inline-start:var(--lv-space-4);border-inline-start:1px solid var(--lv-line);font-weight:var(--lv-weight-semibold);color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-voices__item--display.astro-mytenaww{display:grid;gap:var(--lv-space-5);align-items:start}.lv-voices__aside.astro-mytenaww{max-width:var(--lv-measure);padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line);font-size:var(--lv-text-sm);color:var(--lv-text-secondary)}.lv-voices__frame.astro-mytenaww{align-self:stretch}.lv-voices__frame.astro-mytenaww img.astro-mytenaww{min-block-size:14rem}@container (min-width: 46rem){.lv-voices__item--has-aside.astro-mytenaww{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.lv-voices__item--has-media.astro-mytenaww{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}.lv-voices__item--has-media.astro-mytenaww.lv-voices__item--has-aside{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr)}.lv-voices__item--has-media.astro-mytenaww .lv-voices__frame.astro-mytenaww{grid-column:2;grid-row:1 / span 2}}.lv-voices__rating.astro-mytenaww{margin:0;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-ink-accent, var(--lv-brand-strong))}.lv-voices__of.astro-mytenaww{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-voices__ctx.astro-mytenaww{display:block}.lv-quote__by--display.astro-mytenaww .lv-voices__ctx.astro-mytenaww{display:inline}
/* components/prove.dataset/renderers/dataset.astro */
.lv-dataset__meta.astro-jg7rvyvz{display:flex;flex-wrap:wrap;gap:var(--lv-space-4);margin-block-start:var(--lv-space-3);font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-table.astro-jg7rvyvz thead.astro-jg7rvyvz tr.astro-jg7rvyvz{background:var(--lv-surface-sunken)}.lv-dataset__row--own.astro-jg7rvyvz td.astro-jg7rvyvz{background:var(--lv-table-row-selected);font-weight:var(--lv-weight-semibold);box-shadow:inset 2px 0 0 var(--lv-ink-accent, var(--lv-brand-strong))}
/* components/prove.evidence-mosaic/renderers/ledger.astro */
.lv-evledger__stage--dark.astro-zelljeks{padding:var(--lv-space-7);border-radius:var(--lv-radius-xl);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 28%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 48%, transparent)}.lv-evledger__anchor.astro-zelljeks{display:grid;gap:var(--lv-space-2);padding-block:var(--lv-space-5) var(--lv-space-6);border-block-end:1px solid var(--lv-line-strong)}.lv-evledger__anchor-value.astro-zelljeks{margin:0;font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-semibold);line-height:var(--lv-leading-tight);color:var(--lv-text-primary)}.lv-evledger__anchor-label.astro-zelljeks{margin:0;max-inline-size:34ch;font-size:var(--lv-text-md);line-height:var(--lv-leading-snug);color:var(--lv-text-secondary)}.lv-evledger__rows.astro-zelljeks{display:grid;grid-template-columns:minmax(0,1fr);column-gap:var(--lv-space-6)}.lv-evledger__row.astro-zelljeks{display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr);gap:var(--lv-space-4);align-items:baseline;padding-block:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-evledger__anchor.astro-zelljeks+.lv-evledger__rows.astro-zelljeks>.lv-evledger__row.astro-zelljeks:first-child{border-block-start:0}@container (min-width: 40rem){.lv-evledger__rows.astro-zelljeks{grid-template-columns:repeat(2,minmax(0,1fr))}.lv-evledger__anchor.astro-zelljeks+.lv-evledger__rows.astro-zelljeks>.lv-evledger__row.astro-zelljeks:nth-child(2){border-block-start:0}}.lv-evledger__value.astro-zelljeks{margin:0;min-inline-size:4ch;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-evledger__unit.astro-zelljeks{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-evledger__caption.astro-zelljeks{display:grid;gap:var(--lv-space-2)}.lv-evledger__label.astro-zelljeks{margin:0;font-size:var(--lv-text-sm);line-height:var(--lv-leading-snug);color:var(--lv-text-secondary)}.lv-evledger__source.astro-zelljeks{margin:0;font:var(--lv-weight-medium) var(--lv-text-2xs) / var(--lv-leading-snug) var(--lv-font-mono);letter-spacing:var(--lv-tracking-label);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-evledger__voices.astro-zelljeks{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,20rem),1fr));gap:var(--lv-space-5) var(--lv-space-6);margin-block-start:var(--lv-space-6)}.lv-evledger__voice.astro-zelljeks{display:flex;flex-direction:column;gap:var(--lv-space-3);margin:0;padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line)}.lv-evledger__stars.astro-zelljeks{display:inline-flex}.lv-evledger__quote.astro-zelljeks{margin:0;font-size:var(--lv-text-md);line-height:var(--lv-leading-snug);color:var(--lv-text-primary);text-wrap:pretty}.lv-evledger__by.astro-zelljeks{display:flex;align-items:center;gap:var(--lv-space-3);margin-block-start:auto}.lv-evledger__portrait.astro-zelljeks{--lv-portrait-size: 2.5rem}.lv-evledger__initials.astro-zelljeks{display:grid;place-items:center;flex:none;inline-size:2.5rem;block-size:2.5rem;border-radius:var(--lv-radius-pill);background:var(--lv-brand-soft);color:var(--lv-brand-strong);font:var(--lv-weight-bold) var(--lv-text-sm) / 1 var(--lv-font-mono);letter-spacing:0.02em}.lv-evledger__who.astro-zelljeks{display:grid;gap:2px;font-size:var(--lv-text-sm);color:var(--lv-text-primary)}.lv-evledger__context.astro-zelljeks{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-evledger__by.astro-zelljeks .lv-trust-mark.astro-zelljeks{margin-inline-start:auto}.lv-evledger__marks.astro-zelljeks{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-6);margin-block-start:var(--lv-space-6);padding-block-start:var(--lv-space-5);border-block-start:1px solid var(--lv-line-strong)}.lv-evledger__mark.astro-zelljeks{display:inline-flex;align-items:center;gap:var(--lv-space-3);text-decoration:none;color:inherit}.lv-evledger__mark-chip.astro-zelljeks{display:grid;place-items:center;flex:none;inline-size:2.5rem;block-size:2.5rem}.lv-evledger__mark-chip.astro-zelljeks img.astro-zelljeks{max-inline-size:1.9rem;max-block-size:1.9rem;object-fit:contain;filter:grayscale(1);opacity:0.78}.lv-evledger__mark-who.astro-zelljeks{display:grid;gap:2px}.lv-evledger__mark-name.astro-zelljeks{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}a.astro-zelljeks.lv-evledger__mark .lv-evledger__mark-name.astro-zelljeks{text-decoration:underline 1px;text-underline-offset:3px}a.astro-zelljeks.lv-evledger__mark:hover .lv-evledger__mark-name.astro-zelljeks{text-decoration-thickness:2px}a.astro-zelljeks.lv-evledger__mark:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-evledger__mark-note.astro-zelljeks{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/prove.evidence-mosaic/renderers/mosaic.astro */
.lv-mosaic__panel--dark.astro-awkhr6ft{padding:var(--lv-space-7);border-radius:var(--lv-radius-xl);background:var(--lv-brand-strong);box-shadow:var(--lv-lift-3);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 28%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 48%, transparent)}.lv-mosaic__grid.astro-awkhr6ft{display:grid;gap:var(--lv-space-3);grid-template-columns:minmax(0,1fr)}.lv-mosaic__group.astro-awkhr6ft{display:contents}@container (min-width: 40rem){.lv-mosaic__grid.astro-awkhr6ft{grid-template-columns:repeat(2,minmax(0,1fr))}.lv-mosaic__tile--m2.astro-awkhr6ft{grid-column:span 2}}@container (min-width: 62rem){.lv-mosaic__grid.astro-awkhr6ft{grid-template-columns:repeat(4,minmax(0,1fr))}.lv-mosaic__tile--w1.astro-awkhr6ft{grid-column:span 1}.lv-mosaic__tile--w2.astro-awkhr6ft{grid-column:span 2}.lv-mosaic__tile--w3.astro-awkhr6ft{grid-column:span 3}.lv-mosaic__tile--w4.astro-awkhr6ft{grid-column:span 4}}.lv-mosaic__tile.astro-awkhr6ft{display:flex;flex-direction:column;gap:var(--lv-space-2);padding:var(--lv-space-5);border-radius:var(--lv-radius-lg);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-mosaic__panel--dark.astro-awkhr6ft .lv-mosaic__tile.astro-awkhr6ft{background:color-mix(in srgb,var(--lv-text-on-brand) 8%,var(--lv-brand-strong))}.lv-mosaic__tile--anchor.astro-awkhr6ft,.lv-mosaic__panel--dark.astro-awkhr6ft .lv-mosaic__tile--anchor.astro-awkhr6ft{background:var(--lv-ramp);box-shadow:none}.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__value.astro-awkhr6ft,.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__unit.astro-awkhr6ft,.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__label.astro-awkhr6ft,.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__source.astro-awkhr6ft{color:var(--lv-text-on-brand)}.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__value.astro-awkhr6ft{font-size:var(--lv-text-2xl)}.lv-mosaic__tile--anchor.astro-awkhr6ft .lv-mosaic__label.astro-awkhr6ft{font-size:var(--lv-text-md);max-inline-size:34ch}.lv-mosaic__value.astro-awkhr6ft{margin:0;font-size:var(--lv-text-xl);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}.lv-mosaic__unit.astro-awkhr6ft{margin-inline-start:0.2em;font-family:var(--lv-font-ui);font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-tertiary)}.lv-mosaic__label.astro-awkhr6ft{margin:0;font-size:var(--lv-text-sm);line-height:var(--lv-leading-snug);color:var(--lv-text-secondary)}.lv-mosaic__source.astro-awkhr6ft{margin:auto 0 0;padding-block-start:var(--lv-space-2);font:var(--lv-weight-medium) var(--lv-text-2xs) / var(--lv-leading-snug) var(--lv-font-mono);letter-spacing:var(--lv-tracking-label);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-mosaic__quote.astro-awkhr6ft{margin:0}.lv-mosaic__stars.astro-awkhr6ft{display:inline-flex}.lv-mosaic__quote-text.astro-awkhr6ft{margin:0;font-size:var(--lv-text-lg);line-height:var(--lv-leading-snug);color:var(--lv-text-primary);text-wrap:pretty}.lv-mosaic__by.astro-awkhr6ft{display:flex;align-items:center;gap:var(--lv-space-3);margin-block-start:auto;padding-block-start:var(--lv-space-3)}.lv-mosaic__portrait.astro-awkhr6ft{--lv-portrait-size: 2.5rem}.lv-mosaic__initials.astro-awkhr6ft{display:grid;place-items:center;flex:none;inline-size:2.5rem;block-size:2.5rem;border-radius:var(--lv-radius-pill);background:var(--lv-brand-soft);color:var(--lv-brand-strong);font:var(--lv-weight-bold) var(--lv-text-sm) / 1 var(--lv-font-mono);letter-spacing:0.02em}.lv-mosaic__who.astro-awkhr6ft{display:grid;gap:2px;font-size:var(--lv-text-sm);color:var(--lv-text-primary)}.lv-mosaic__context.astro-awkhr6ft{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-mosaic__by.astro-awkhr6ft .lv-trust-mark.astro-awkhr6ft{margin-inline-start:auto}.lv-mosaic__marks.astro-awkhr6ft{flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--lv-space-4) var(--lv-space-6)}.lv-mosaic__mark.astro-awkhr6ft{display:inline-flex;align-items:center;gap:var(--lv-space-3);text-decoration:none;color:inherit}.lv-mosaic__mark-chip.astro-awkhr6ft{display:grid;place-items:center;flex:none;inline-size:2.5rem;block-size:2.5rem;border-radius:var(--lv-radius-md);background:var(--lv-surface)}.lv-mosaic__mark-chip.astro-awkhr6ft img.astro-awkhr6ft{max-inline-size:1.9rem;max-block-size:1.9rem;object-fit:contain;filter:grayscale(1);opacity:0.78}.lv-mosaic__mark-who.astro-awkhr6ft{display:grid;gap:2px}.lv-mosaic__mark-name.astro-awkhr6ft{font-size:var(--lv-text-sm);font-weight:var(--lv-weight-medium);color:var(--lv-text-primary)}a.astro-awkhr6ft.lv-mosaic__mark .lv-mosaic__mark-name.astro-awkhr6ft{text-decoration:underline 1px;text-underline-offset:3px}a.astro-awkhr6ft.lv-mosaic__mark:hover .lv-mosaic__mark-name.astro-awkhr6ft{text-decoration-thickness:2px}a.astro-awkhr6ft.lv-mosaic__mark:focus-visible{outline:var(--lv-focus-width) solid var(--lv-focus-ring);outline-offset:var(--lv-focus-offset);border-radius:var(--lv-radius-sm)}.lv-mosaic__mark-note.astro-awkhr6ft{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}
/* components/prove.numbers/renderers/band.astro */
.lv-mband__layout.astro-wsh5bobp{display:grid;gap:var(--lv-space-7);align-items:center}@container (min-width: 50rem){.lv-mband__layout.astro-wsh5bobp{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr)}}.lv-mband__copy.astro-wsh5bobp{min-inline-size:0}.lv-mband__grid.astro-wsh5bobp{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--lv-space-6) var(--lv-space-5);margin-block-start:var(--lv-space-6)}@container (min-width: 34rem){.lv-mband__grid.astro-wsh5bobp{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 68rem){.lv-mband__grid.astro-wsh5bobp{grid-template-columns:repeat(5,minmax(0,1fr))}}.lv-mband__item.astro-wsh5bobp{min-inline-size:0}.lv-mband.astro-wsh5bobp .lv-figure__value.astro-wsh5bobp{font-size:clamp(1.9rem,1.1rem + 2.9cqi,3rem);font-weight:250;line-height:var(--lv-leading-tight);letter-spacing:-0.015em;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.lv-mband--serif.astro-wsh5bobp .lv-figure__value.astro-wsh5bobp{font-family:var(--lv-font-display, Georgia, "Times New Roman", serif);font-weight:300}.lv-mband__source.astro-wsh5bobp{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-2xs);color:var(--lv-text-tertiary)}.lv-mband__stage.astro-wsh5bobp{position:relative;overflow:hidden;aspect-ratio:4 / 5;inline-size:100%;clip-path:var(--lv-mband-shape);--lv-mband-shape: inset(0 round 44% 44% var(--lv-radius-lg) var(--lv-radius-lg))}.lv-mband__stage.astro-wsh5bobp[data-mask=blade]{--lv-mband-shape: polygon(0 11%, 100% 0, 100% 89%, 0 100%)}.lv-mband__stage.astro-wsh5bobp[data-mask=lens]{--lv-mband-shape: ellipse(50% 47% at 50% 50%)}@container (min-width: 50rem){.lv-mband__stage.astro-wsh5bobp{aspect-ratio:3 / 4}}.lv-mband__media.astro-wsh5bobp{inline-size:100%;block-size:100%;object-fit:cover;transform:scale(1.1)}.lv-mband__plate.astro-wsh5bobp{display:block;block-size:100%;background:repeating-linear-gradient(to right,color-mix(in oklab,var(--lv-line-strong) 55%,transparent) 0 1px,transparent 1px 2.5rem),repeating-linear-gradient(to bottom,color-mix(in oklab,var(--lv-line-strong) 55%,transparent) 0 1px,transparent 1px 2.5rem),linear-gradient(155deg,var(--lv-brand-soft),var(--lv-surface-sunken))}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-mband__media.astro-wsh5bobp{animation:lv-mband-drift linear both;animation-timeline:view();animation-range:cover 0% cover 100%}}}@keyframes lv-mband-drift{from{transform:scale(1.1) translate3d(0,3.2%,0)}to{transform:scale(1.1) translate3d(0,-3.2%,0)}}
/* components/prove.numbers/renderers/figures.astro */
.lv-figures.astro-m2ix4a6r{display:flex;flex-wrap:wrap;justify-content:center}.lv-figs__item.astro-m2ix4a6r{flex:1 1 min(10rem,100%)}@container (min-width: 46rem){.lv-figs__item.astro-m2ix4a6r{max-inline-size:calc((100% - 3 * var(--lv-space-5)) / 4)}}.lv-figs--strip.astro-m2ix4a6r .lv-figures.astro-m2ix4a6r{padding-block:var(--lv-space-5);border-block:1px solid var(--lv-line)}.lv-figs--inline.astro-m2ix4a6r .lv-figures.astro-m2ix4a6r{flex-wrap:nowrap;flex-direction:column;justify-content:flex-start;gap:var(--lv-space-3)}.lv-figs--inline.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r{flex-basis:100%;max-inline-size:none}.lv-figs--inline.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r{display:flex;align-items:baseline;gap:var(--lv-space-3)}.lv-figs--inline.astro-m2ix4a6r .lv-figure__value.astro-m2ix4a6r{font-size:var(--lv-text-lg)}.lv-figs__source.astro-m2ix4a6r{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-2xs);color:var(--lv-text-tertiary)}.lv-figs--strip.astro-m2ix4a6r .lv-figure__value.astro-m2ix4a6r,.lv-figs--cards.astro-m2ix4a6r .lv-figure__value.astro-m2ix4a6r{font-size:clamp(2.1rem,1.2rem + 3.2cqi,3.25rem);line-height:var(--lv-leading-tight)}.lv-figs--serif.astro-m2ix4a6r .lv-figure__value.astro-m2ix4a6r{font-family:var(--lv-font-display, Georgia, "Times New Roman", serif);font-weight:300;letter-spacing:-0.01em;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.lv-figs--cell-brackets.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r{position:relative;padding-block:var(--lv-space-3);padding-inline:var(--lv-space-5)}.lv-figs--cell-brackets.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::before,.lv-figs--cell-brackets.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::after{content:"";position:absolute;inset-block:0;inline-size:0.75rem;border:1px solid var(--lv-line-strong);pointer-events:none}.lv-figs--cell-brackets.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::before{inset-inline-start:0;border-inline-end:0}.lv-figs--cell-brackets.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::after{inset-inline-end:0;border-inline-start:0}.lv-figs--cell-brackets.astro-m2ix4a6r.lv-figs--strip .lv-figures.astro-m2ix4a6r{border-block:0}.lv-figs--cell-rule-top.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r{border-block-start:3px solid var(--lv-ink-accent, var(--lv-brand-strong));padding-block-start:var(--lv-space-4);border-start-start-radius:0;border-start-end-radius:0}.lv-figs--cell-rule-top.astro-m2ix4a6r.lv-figs--strip .lv-figures.astro-m2ix4a6r{border-block:0}.lv-figs--inline.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r{border-block-start:0;padding:0}.lv-figs--inline.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::before,.lv-figs--inline.astro-m2ix4a6r .lv-figs__item.astro-m2ix4a6r::after{content:none}@container (min-width: 46rem){.lv-figs--cards.astro-m2ix4a6r .lv-figs__split.astro-m2ix4a6r{display:grid;grid-template-columns:16rem minmax(0,1fr);gap:var(--lv-space-6);align-items:start}.lv-figs--cards.astro-m2ix4a6r .lv-sec__head.astro-m2ix4a6r{margin-block-end:0}.lv-figs--cards.astro-m2ix4a6r .lv-figures.astro-m2ix4a6r{justify-content:flex-start}}.lv-figs__item--emphasis.astro-m2ix4a6r{background:var(--lv-brand-soft);box-shadow:none}.lv-figs__item--emphasis.astro-m2ix4a6r .lv-figure__value.astro-m2ix4a6r{font-size:clamp(2.6rem,1.6rem + 4cqi,4rem);background:inherit;color:var(--lv-brand-strong)}
/* components/prove.people/renderers/people-editorial.astro */
.lv-people--titleblock.astro-6vqe4gnj{--lv-people-stage: 16.5rem;--lv-people-plate-ratio: 4 / 5.4;--lv-people-gutter: var(--lv-space-8)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__code.astro-6vqe4gnj{align-self:center;padding:0.15em 0.45em;border:1px solid var(--lv-line);border-radius:var(--lv-radius-sm);background:var(--lv-surface);transition:background-color var(--lv-dur-fast) var(--lv-ease),border-color var(--lv-dur-fast) var(--lv-ease),color var(--lv-dur-fast) var(--lv-ease)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__entry.astro-6vqe4gnj:has(.lv-people__radio:checked) .lv-people__code.astro-6vqe4gnj{border-color:var(--lv-brand-strong);background:var(--lv-brand-soft);color:var(--lv-brand-strong)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__ident.astro-6vqe4gnj{grid-auto-flow:column;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:var(--lv-space-4)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__ident.astro-6vqe4gnj .lv-people__role.astro-6vqe4gnj{text-align:end;font-size:var(--lv-text-xs);letter-spacing:var(--lv-tracking-label);text-transform:uppercase}.lv-people--titleblock.astro-6vqe4gnj .lv-people__plate-meta.astro-6vqe4gnj{position:relative;padding-block-start:var(--lv-space-3);gap:var(--lv-space-1)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__plate-meta.astro-6vqe4gnj::before{content:"";position:absolute;inset-block-start:0;inset-inline:0;block-size:1px;background:var(--lv-line-strong);transform-origin:0 50%}.lv-people--titleblock.astro-6vqe4gnj .lv-people__plate-meta.astro-6vqe4gnj .lv-people__role.astro-6vqe4gnj{font-family:var(--lv-font-mono);font-size:var(--lv-text-xs);letter-spacing:var(--lv-tracking-label);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-people--titleblock.astro-6vqe4gnj .lv-people__contact.astro-6vqe4gnj{font-family:var(--lv-font-mono);font-size:var(--lv-text-xs)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-people--titleblock.astro-6vqe4gnj .lv-people__plate-meta.astro-6vqe4gnj::before{animation:lv-people-rule linear both;animation-timeline:view();animation-range:entry 15% entry 65%}@keyframes lv-people-rule{from{scale:0 1}to{scale:1 1}}}}
/* components/prove.people/renderers/people-portfolio.astro */
.lv-people--sheet.astro-tpxppivv{--lv-people-stage: 23rem;--lv-people-stage-floor: 34rem;--lv-people-plate-ratio: 3 / 4;--lv-people-gutter: var(--lv-space-8)}.lv-people--sheet.astro-tpxppivv .lv-people__portrait.astro-tpxppivv,.lv-people--sheet.astro-tpxppivv .lv-people__mark.astro-tpxppivv{border-radius:var(--lv-radius-sm)}.lv-people--sheet.astro-tpxppivv .lv-people__pick.astro-tpxppivv{position:relative;padding-inline:var(--lv-space-3)}.lv-people--sheet.astro-tpxppivv .lv-people__code.astro-tpxppivv{align-self:center}.lv-people--sheet.astro-tpxppivv .lv-people__entry.astro-tpxppivv:has(.lv-people__radio:checked) .lv-people__pick.astro-tpxppivv::before,.lv-people--sheet.astro-tpxppivv .lv-people__entry.astro-tpxppivv:has(.lv-people__radio:checked) .lv-people__pick.astro-tpxppivv::after{content:"";position:absolute;inline-size:0.7rem;block-size:0.7rem;border:1px solid var(--lv-brand-strong)}.lv-people--sheet.astro-tpxppivv .lv-people__entry.astro-tpxppivv:has(.lv-people__radio:checked) .lv-people__pick.astro-tpxppivv::before{inset-block-start:0;inset-inline-start:0;border-inline-end:0;border-block-end:0}.lv-people--sheet.astro-tpxppivv .lv-people__entry.astro-tpxppivv:has(.lv-people__radio:checked) .lv-people__pick.astro-tpxppivv::after{inset-block-end:0;inset-inline-end:0;border-inline-start:0;border-block-start:0}.lv-people--sheet.astro-tpxppivv .lv-people__plate-meta.astro-tpxppivv .lv-people__name.astro-tpxppivv{font-size:var(--lv-text-lg)}.lv-people--sheet.astro-tpxppivv .lv-people__plate-meta.astro-tpxppivv .lv-people__role.astro-tpxppivv{font-size:var(--lv-text-xs);letter-spacing:var(--lv-tracking-label);text-transform:uppercase;color:var(--lv-text-tertiary)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-people--sheet.astro-tpxppivv .lv-people__portrait.astro-tpxppivv,.lv-people--sheet.astro-tpxppivv .lv-people__mark.astro-tpxppivv{animation:lv-people-frame linear both;animation-timeline:view();animation-range:entry 10% entry 70%}@keyframes lv-people-frame{from{scale:0.985}to{scale:1}}}}
/* components/prove.people/renderers/people-product.astro */
.lv-people--desk.astro-2fyzqrsf{--lv-people-stage: 15rem;--lv-people-stage-floor: 24rem;--lv-people-plate-ratio: 1 / 1}.lv-people--desk.astro-2fyzqrsf .lv-people__portrait.astro-2fyzqrsf,.lv-people--desk.astro-2fyzqrsf .lv-people__mark.astro-2fyzqrsf{border-radius:var(--lv-radius-lg)}.lv-people--desk.astro-2fyzqrsf .lv-people__role.astro-2fyzqrsf{order:-1;color:var(--lv-text-tertiary);font-size:var(--lv-text-xs);letter-spacing:var(--lv-tracking-label);text-transform:uppercase}.lv-people--desk.astro-2fyzqrsf .lv-people__ident.astro-2fyzqrsf{display:flex;flex-direction:column;gap:0.15rem}.lv-people--desk.astro-2fyzqrsf .lv-people__name.astro-2fyzqrsf{font-size:var(--lv-text-md)}.lv-people--desk.astro-2fyzqrsf .lv-people__contact.astro-2fyzqrsf{gap:var(--lv-space-2)}.lv-people--desk.astro-2fyzqrsf .lv-people__action.astro-2fyzqrsf{min-block-size:44px;padding-inline:var(--lv-space-4);border:1px solid var(--lv-line-strong);border-radius:var(--lv-radius-pill);color:var(--lv-text-primary);text-decoration:none;transition:border-color var(--lv-dur-fast) var(--lv-ease),background-color var(--lv-dur-fast) var(--lv-ease)}.lv-people--desk.astro-2fyzqrsf .lv-people__action.astro-2fyzqrsf:hover,.lv-people--desk.astro-2fyzqrsf .lv-people__action.astro-2fyzqrsf:focus-visible{border-color:var(--lv-brand-strong);background:var(--lv-brand-soft)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-people--desk.astro-2fyzqrsf .lv-people__plate-body.astro-2fyzqrsf{animation:lv-people-desk-settle linear both;animation-timeline:view();animation-range:entry 14% entry 68%}@keyframes lv-people-desk-settle{from{opacity:0;translate:0 var(--lv-reveal-distance, 6px)}to{opacity:1;translate:0 0}}}}
/* components/prove.people/renderers/people.astro */
.lv-people--crew.astro-ovyxz3td{--lv-people-stage: 18rem;--lv-people-plate-ratio: 4 / 4.8}.lv-people--crew.astro-ovyxz3td .lv-people__code.astro-ovyxz3td{font-weight:var(--lv-weight-semibold)}.lv-people--crew.astro-ovyxz3td .lv-people__contact.astro-ovyxz3td{gap:var(--lv-space-1) var(--lv-space-5);align-items:baseline}.lv-people--crew.astro-ovyxz3td .lv-people__phone.astro-ovyxz3td{font-family:var(--lv-font-mono);font-size:var(--lv-text-md);font-variant-numeric:tabular-nums;font-weight:var(--lv-weight-semibold);letter-spacing:var(--lv-tracking-num)}.lv-people--crew.astro-ovyxz3td .lv-people__plate-meta.astro-ovyxz3td .lv-people__role.astro-ovyxz3td{color:var(--lv-text-tertiary)}@media (prefers-reduced-motion: no-preference){@supports (animation-timeline: view()){.lv-people--crew.astro-ovyxz3td .lv-people__plate.astro-ovyxz3td{animation:lv-people-crew-settle linear both;animation-timeline:view();animation-range:entry 12% entry 72%}@keyframes lv-people-crew-settle{from{opacity:0;translate:0 var(--lv-reveal-distance, 8px)}to{opacity:1;translate:0 0}}}}
/* components/prove.press/renderers/press.astro */
.lv-press.astro-wscphhoj{max-width:52rem}.lv-press__row.astro-wscphhoj{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--lv-space-1) var(--lv-space-4);align-items:baseline}.lv-press__logo.astro-wscphhoj{grid-row:span 2;block-size:1.75rem;inline-size:auto}.lv-press__outlet.astro-wscphhoj{margin:0;font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-tertiary)}.lv-press__title.astro-wscphhoj{margin:0;font-weight:var(--lv-weight-medium)}.lv-press__title.astro-wscphhoj a.astro-wscphhoj{color:var(--lv-text-primary);text-decoration:none}.lv-press__title.astro-wscphhoj a.astro-wscphhoj:hover{text-decoration:underline}.lv-press__date.astro-wscphhoj{grid-column:2;grid-row:1 / span 2;font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-press__band.astro-wscphhoj{display:grid;gap:var(--lv-space-4);padding:var(--lv-space-6) var(--lv-space-6) var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-sunken);border-block-end:0;margin-block-end:var(--lv-space-3)}.lv-press.astro-wscphhoj:has(> .lv-press__band:first-child){border-block-start:0}.lv-press__quote.astro-wscphhoj{margin:0;max-width:var(--lv-measure);font-size:clamp(var(--lv-text-lg),3.4cqi,2.1rem);font-family:var(--lv-font-display, inherit);font-style:italic;font-weight:var(--lv-weight-medium);line-height:var(--lv-leading-snug);letter-spacing:var(--lv-tracking-heading);color:var(--lv-text-primary);text-wrap:balance}.lv-press__quote.astro-wscphhoj::before{content:"»";margin-inline-end:0.08em}.lv-press__quote.astro-wscphhoj::after{content:"«";margin-inline-start:0.08em}.lv-press__quote.astro-wscphhoj::before,.lv-press__quote.astro-wscphhoj::after{color:var(--lv-ink-accent, var(--lv-brand-strong));font-style:normal}.lv-press__cite.astro-wscphhoj{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--lv-space-1) var(--lv-space-2);margin:0}.lv-press__cite.astro-wscphhoj .lv-press__logo.astro-wscphhoj{grid-row:auto;align-self:center}.lv-press__band-outlet.astro-wscphhoj{font:var(--lv-weight-bold) var(--lv-text-2xs) / 1 var(--lv-font-ui);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:var(--lv-text-secondary)}.lv-press__band-outlet.astro-wscphhoj::before{content:"— ";color:var(--lv-text-tertiary)}.lv-press__cite.astro-wscphhoj .lv-press__date.astro-wscphhoj::before{content:"· "}.lv-press__cite.astro-wscphhoj .lv-press__date.astro-wscphhoj{grid-column:auto;grid-row:auto}.lv-press__band-title.astro-wscphhoj{margin:0;font-size:var(--lv-text-sm)}.lv-press__band-title.astro-wscphhoj a.astro-wscphhoj{color:var(--lv-text-link);text-decoration:none}.lv-press__band-title.astro-wscphhoj a.astro-wscphhoj:hover{text-decoration:underline}
/* components/prove.rating-summary/renderers/summary.astro */
.lv-rating.astro-ba36gsrw{display:grid;gap:var(--lv-space-6);align-items:center}.lv-rating__avg.astro-ba36gsrw{margin:var(--lv-space-3) 0 0;font-size:clamp(2.5rem,8cqi,4rem);font-weight:var(--lv-weight-semibold);line-height:1;color:var(--lv-text-primary)}.lv-rating__of.astro-ba36gsrw{font-size:var(--lv-text-md);color:var(--lv-text-tertiary)}.lv-rating__stars.astro-ba36gsrw{margin:var(--lv-space-2) 0 0}.lv-rating__source.astro-ba36gsrw .lv-trust-mark.astro-ba36gsrw{inline-size:1.75rem;block-size:1.75rem}.lv-rating__count.astro-ba36gsrw{display:flex;gap:var(--lv-space-2);margin:var(--lv-space-2) 0 0;color:var(--lv-text-secondary)}.lv-rating__source.astro-ba36gsrw{display:flex;align-items:center;gap:var(--lv-space-2);margin:var(--lv-space-1) 0 0;font-size:var(--lv-text-sm)}.lv-rating__dist.astro-ba36gsrw{display:grid;gap:var(--lv-space-2);margin:0}.lv-rating__row.astro-ba36gsrw{display:grid;grid-template-columns:1.5rem minmax(0,1fr);align-items:center;gap:var(--lv-space-3)}.lv-rating__row.astro-ba36gsrw dt.astro-ba36gsrw{color:var(--lv-text-tertiary);font-size:var(--lv-text-sm)}.lv-rating__row.astro-ba36gsrw dd.astro-ba36gsrw{display:flex;align-items:center;gap:var(--lv-space-3);margin:0}.lv-rating__row.astro-ba36gsrw .lv-meter.astro-ba36gsrw{flex:1}.lv-rating__n.astro-ba36gsrw{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary);min-inline-size:3ch;text-align:end}@container (min-width: 44rem){.lv-rating.astro-ba36gsrw{grid-template-columns:minmax(0,14rem) minmax(0,1fr);gap:var(--lv-space-8)}}
/* components/prove.stat-scene/renderers/scene.astro */
.lv-statscene.astro-gkwssubn{background:var(--lv-brand-strong);padding-block:var(--lv-space-8);padding-inline:var(--lv-gutter, var(--lv-space-5));color:var(--lv-text-on-brand);--lv-text-primary: var(--lv-text-on-brand);--lv-text-secondary: var(--lv-text-on-brand);--lv-text-tertiary: var(--lv-text-on-brand);--lv-ink-accent: var(--lv-text-on-brand);--lv-line: color-mix(in oklab, var(--lv-text-on-brand) 30%, transparent);--lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent)}.lv-statscene__inner.astro-gkwssubn{max-width:var(--lv-container-max, 72rem);margin-inline:auto}.lv-statscene__band.astro-gkwssubn{display:grid;gap:var(--lv-space-7);align-items:center}@container (min-width: 46rem){.lv-statscene__band.astro-gkwssubn{grid-template-columns:minmax(0,5fr) minmax(0,7fr)}.lv-statscene--bare.astro-gkwssubn .lv-statscene__band.astro-gkwssubn{grid-template-columns:minmax(0,1fr)}}.lv-statscene__scene.astro-gkwssubn{position:relative;overflow:hidden;aspect-ratio:7 / 8;max-block-size:26rem;justify-self:center;inline-size:min(100%,24rem);background:color-mix(in oklab,var(--lv-text-on-brand) 8%,transparent)}.lv-statscene__scene.astro-gkwssubn img.astro-gkwssubn{display:block;inline-size:100%;block-size:100%;object-fit:cover;object-position:center;filter:saturate(0.88)}.lv-statscene--arc.astro-gkwssubn .lv-statscene__scene.astro-gkwssubn{border-radius:999px 999px var(--lv-radius-lg) var(--lv-radius-lg)}.lv-statscene--shard.astro-gkwssubn .lv-statscene__scene.astro-gkwssubn{border-radius:var(--lv-radius-md);clip-path:polygon(0 4%,100% 0,94% 96%,4% 100%)}.lv-statscene--mark.astro-gkwssubn .lv-statscene__scene.astro-gkwssubn{background:none;mask-image:var(--lv-scene-mask);mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-image:var(--lv-scene-mask);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}@media (prefers-reduced-motion: no-preference){.lv-statscene__scene.astro-gkwssubn img.astro-gkwssubn{animation:lv-statscene-pan 46s var(--lv-ease) infinite alternate}}@keyframes lv-statscene-pan{from{transform:scale(1.06) translate3d(-1.6%,1.2%,0)}to{transform:scale(1.06) translate3d(1.6%,-1.2%,0)}}@media (prefers-reduced-motion: reduce){.lv-statscene__scene.astro-gkwssubn img.astro-gkwssubn{animation:none}}.lv-statscene__figures.astro-gkwssubn{display:grid;gap:var(--lv-space-5) var(--lv-space-6);margin:0;grid-template-columns:repeat(auto-fit,minmax(min(10rem,100%),1fr))}@container (min-width: 46rem){.lv-statscene__figures.astro-gkwssubn{grid-template-columns:repeat(2,minmax(0,1fr))}.lv-statscene--bare.astro-gkwssubn .lv-statscene__figures.astro-gkwssubn{grid-template-columns:repeat(4,minmax(0,1fr))}}.lv-statscene__figures--one.astro-gkwssubn,.lv-statscene--bare.astro-gkwssubn .lv-statscene__figures--one.astro-gkwssubn{grid-template-columns:minmax(0,1fr)}.lv-statscene__fig.astro-gkwssubn{padding-block-start:var(--lv-space-4);border-block-start:1px solid var(--lv-line)}.lv-statscene__value.astro-gkwssubn{font-size:var(--lv-text-2xl);font-weight:var(--lv-weight-regular);line-height:1;letter-spacing:var(--lv-tracking-num);color:var(--lv-text-on-brand)}.lv-statscene__fig--emphasis.astro-gkwssubn{grid-column:1 / -1}.lv-statscene__fig--emphasis.astro-gkwssubn .lv-statscene__value.astro-gkwssubn{font-size:clamp(var(--lv-text-2xl),9cqi,5.75rem)}.lv-statscene__label.astro-gkwssubn{margin:var(--lv-space-2) 0 0;font:var(--lv-weight-bold) var(--lv-text-2xs) / 1.4 var(--lv-font-mono);letter-spacing:var(--lv-tracking-eyebrow);text-transform:uppercase;color:color-mix(in oklab,var(--lv-text-on-brand) 86%,transparent)}.lv-statscene__source.astro-gkwssubn{margin:var(--lv-space-2) 0 0;font-size:var(--lv-text-2xs);color:color-mix(in oklab,var(--lv-text-on-brand) 68%,transparent)}
/* components/prove.third-party-marks/renderers/marks.astro */
.lv-marks__list.astro-ke5sk3id{display:flex;flex-wrap:wrap;align-items:center;gap:var(--lv-space-5) var(--lv-space-7);margin:0;padding:0;list-style:none}.lv-marks__item.astro-ke5sk3id{display:grid;gap:var(--lv-space-1)}.lv-marks__link.astro-ke5sk3id{display:flex;align-items:center;gap:var(--lv-space-3);color:var(--lv-text-primary);text-decoration:none}.lv-marks__img.astro-ke5sk3id{block-size:2rem;inline-size:auto;max-inline-size:9rem;object-fit:contain;filter:grayscale(1);opacity:0.68;transition:filter var(--lv-dur-fast) var(--lv-ease),opacity var(--lv-dur-fast) var(--lv-ease)}.lv-marks__link.astro-ke5sk3id:hover .lv-marks__img.astro-ke5sk3id,.lv-marks__link.astro-ke5sk3id:focus-visible .lv-marks__img.astro-ke5sk3id{filter:grayscale(0);opacity:1}.lv-marks--logo.astro-ke5sk3id .lv-marks__img.astro-ke5sk3id+.lv-marks__name.astro-ke5sk3id{position:absolute;inline-size:1px;block-size:1px;overflow:hidden;clip-path:inset(50%)}.lv-marks--badge.astro-ke5sk3id .lv-marks__link.astro-ke5sk3id{padding:var(--lv-space-3) var(--lv-space-4);border-radius:var(--lv-radius-md);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line);font-weight:var(--lv-weight-semibold);font-size:var(--lv-text-sm)}.lv-marks__note.astro-ke5sk3id{font-size:var(--lv-text-xs);color:var(--lv-text-tertiary)}.lv-marks--drift.astro-ke5sk3id .lv-marks__viewport.astro-ke5sk3id{overflow:hidden}.lv-marks--drift.astro-ke5sk3id .lv-marks__track.astro-ke5sk3id{display:flex;inline-size:max-content}.lv-marks--drift.astro-ke5sk3id .lv-marks__list.astro-ke5sk3id{flex-wrap:nowrap;padding-inline-end:var(--lv-space-7)}@media (prefers-reduced-motion: no-preference){.lv-marks--drift.astro-ke5sk3id .lv-marks__track.astro-ke5sk3id{animation:lv-marks-drift 38s linear infinite}.lv-marks--drift.astro-ke5sk3id .lv-marks__track.astro-ke5sk3id:hover{animation-play-state:paused}}@keyframes lv-marks-drift{from{transform:none}to{transform:translateX(-50%)}}
/* components/sidebar.cta/renderers/cta.astro */
.lv-swidget.astro-php5gdmr{display:grid;gap:var(--lv-space-3);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-raised);box-shadow:inset 0 0 0 1px var(--lv-line)}@container (min-width: 60rem){.lv-swidget--sticky.astro-php5gdmr{position:sticky;inset-block-start:var(--lv-space-5)}}.lv-swidget__facts.astro-php5gdmr{display:grid;grid-template-columns:auto 1fr;gap:var(--lv-space-2);margin:0}
/* components/sidebar.info/renderers/info.astro */
.lv-sinfo.astro-5bv4dqwo{display:grid;gap:var(--lv-space-3);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface-sunken)}.lv-sinfo__body.astro-5bv4dqwo{font-size:var(--lv-text-sm)}.lv-sinfo__rows.astro-5bv4dqwo{grid-template-columns:minmax(4rem,max-content) 1fr;font-size:var(--lv-text-sm)}.lv-sinfo__source.astro-5bv4dqwo{margin:0;font-size:var(--lv-text-2xs);color:var(--lv-text-tertiary)}
/* components/sidebar.promote-item/renderers/promote.astro */
.lv-spromote.astro-5vwqfelh{display:grid;gap:var(--lv-space-3);padding:var(--lv-space-5);border-radius:var(--lv-radius-md);background:var(--lv-surface);box-shadow:inset 0 0 0 1px var(--lv-line)}.lv-spromote__price.astro-5vwqfelh{margin:0;font-size:var(--lv-text-lg);font-weight:var(--lv-weight-semibold);color:var(--lv-text-primary)}

/* ── technique plane (design-intensity, packages/registry/techniques/) ── */
/* techniques/animation-effects/clip-reveal-panorama/technique.css · technique.animation-effects.clip-reveal-panorama.v1 */
/* technique.animation-effects.clip-reveal-panorama.v1 — anim ≥ high.
 *
 * Full-bleed media uncovers through a clip mask while scrolling into view —
 * the panorama is already there, the window onto it opens. High only: this
 * is a statement, and a page full of statements is noise (the harmony walk
 * in the orchestration skill says one per route). Binds media that spans the
 * section (`.lv-media--bleed`, hero figures) and any `data-clip-reveal`
 * opt-in.
 */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes lv-technique-clip-panorama {
      from { clip-path: inset(12% 8% 12% 8% round var(--lv-radius-lg, 16px)); }
      to { clip-path: inset(0 0 0 0 round 0); }
    }
    body[data-lvs-anim='high'] [data-lv-node-id]:not([data-lvs-anim]) :is(.lv-media--bleed, [data-clip-reveal]),
    [data-lv-node-id][data-lvs-anim='high'] :is(.lv-media--bleed, [data-clip-reveal]) {
      animation: lv-technique-clip-panorama both ease-out;
      animation-timeline: view();
      animation-range: entry 0% entry 90%;
    }
  }
}
/* techniques/animation-effects/parallax-depth-layers/technique.css · technique.animation-effects.parallax-depth-layers.v1 */
/* technique.animation-effects.parallax-depth-layers.v1 — anim ≥ medium.
 *
 * Section media travels in a calmer tempo than the text around it — depth
 * from differential speed, no JavaScript. The media element scrubs a small
 * translate across its whole visibility window; text stays on the page's own
 * scroll. Subtle by budget: 6% of the element's height, never a background
 * that swims.
 */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes lv-technique-parallax-drift {
      from { translate: 0 3%; }
      to { translate: 0 -3%; }
    }
    body[data-lvs-anim='medium'] [data-lv-node-id]:not([data-lvs-anim]) :is(.lv-media, figure) > img,
    body[data-lvs-anim='high'] [data-lv-node-id]:not([data-lvs-anim]) :is(.lv-media, figure) > img,
    [data-lv-node-id][data-lvs-anim='medium'] :is(.lv-media, figure) > img,
    [data-lv-node-id][data-lvs-anim='high'] :is(.lv-media, figure) > img {
      animation: lv-technique-parallax-drift linear both;
      animation-timeline: view();
      animation-range: cover 0% cover 100%;
    }
  }
}
/* techniques/animation-effects/scroll-reveal-sequence/technique.css · technique.animation-effects.scroll-reveal-sequence.v1 */
/* technique.animation-effects.scroll-reveal-sequence.v1 — anim ≥ low.
 *
 * Section content tones in and lifts in sequence, driven BY scroll position
 * (view timeline) rather than by a one-shot observer — scrolling back down
 * replays it, scrubbing feels attached. Targets the section's direct content
 * blocks; the shell-level reveal (motion axis, `.lvt-reveal`) is a different
 * plane and composes. Zero runtime bytes; browsers without scroll-driven
 * animations keep the static page (@supports).
 */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes lv-technique-scroll-reveal {
      from { opacity: 0.001; translate: 0 18px; }
      to { opacity: 1; translate: 0 0; }
    }
    body[data-lvs-anim='low'] [data-lv-node-id]:not([data-lvs-anim]) .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media),
    body[data-lvs-anim='medium'] [data-lv-node-id]:not([data-lvs-anim]) .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media),
    body[data-lvs-anim='high'] [data-lv-node-id]:not([data-lvs-anim]) .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media),
    [data-lv-node-id][data-lvs-anim='low'] .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media),
    [data-lv-node-id][data-lvs-anim='medium'] .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media),
    [data-lv-node-id][data-lvs-anim='high'] .lv-sec > :is(h2, h3, p, ul, ol, figure, .lv-card, .lv-media) {
      animation: lv-technique-scroll-reveal both ease-out;
      animation-timeline: view();
      animation-range: entry 0% entry 60%;
    }
  }
}
/* techniques/micro-interactions/cta-hover-lift/technique.css · technique.micro-interactions.cta-hover-lift.v1 */
/* technique.micro-interactions.cta-hover-lift.v1 — micro ≥ low.
 *
 * Primary buttons lift a notch with shadow on hover and land again on press.
 * Rides the theme's own duration/easing tokens; the press state cooperates
 * with react-effects' press-depress (translate wins by later declaration
 * there, which is the intended compound feel).
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn,
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn,
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn,
  [data-lv-node-id][data-lvs-micro='low'] .lv-btn,
  [data-lv-node-id][data-lvs-micro='medium'] .lv-btn,
  [data-lv-node-id][data-lvs-micro='high'] .lv-btn {
    transition:
      translate var(--lv-dur-fast, 160ms) var(--lv-ease, cubic-bezier(0.22, 1, 0.36, 1)),
      box-shadow var(--lv-dur-fast, 160ms) var(--lv-ease, cubic-bezier(0.22, 1, 0.36, 1));
  }
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:is(:hover, :focus-visible),
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:is(:hover, :focus-visible),
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='low'] .lv-btn:is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='medium'] .lv-btn:is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='high'] .lv-btn:is(:hover, :focus-visible) {
    translate: 0 -2px;
    box-shadow: 0 6px 18px -8px color-mix(in oklab, currentColor 45%, transparent);
  }
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:active,
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:active,
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) .lv-btn:active,
  [data-lv-node-id][data-lvs-micro='low'] .lv-btn:active,
  [data-lv-node-id][data-lvs-micro='medium'] .lv-btn:active,
  [data-lv-node-id][data-lvs-micro='high'] .lv-btn:active {
    translate: 0 0;
    box-shadow: 0 2px 8px -6px color-mix(in oklab, currentColor 35%, transparent);
  }
}
/* techniques/micro-interactions/field-validation-pulse/technique.css · technique.micro-interactions.field-validation-pulse.v1 */
/* technique.micro-interactions.field-validation-pulse.v1 — micro ≥ medium.
 *
 * A rejected field pulses ONCE and settles — `:user-invalid` fires only after
 * the user has interacted, so nothing pulses on first paint. One animation,
 * both control kinds; the pulse is a border-color + subtle ring breath, no
 * layout shift (box-shadow, not outline growth).
 */
@media (prefers-reduced-motion: no-preference) {
  @keyframes lv-technique-validation-pulse {
    0% { box-shadow: 0 0 0 0 color-mix(in oklab, currentColor 28%, transparent); }
    55% { box-shadow: 0 0 0 5px color-mix(in oklab, currentColor 14%, transparent); }
    100% { box-shadow: 0 0 0 0 transparent; }
  }
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is(input, select, textarea):user-invalid,
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is(input, select, textarea):user-invalid,
  [data-lv-node-id][data-lvs-micro='medium'] :is(input, select, textarea):user-invalid,
  [data-lv-node-id][data-lvs-micro='high'] :is(input, select, textarea):user-invalid {
    animation: lv-technique-validation-pulse 480ms cubic-bezier(0.22, 1, 0.36, 1) 1;
  }
}
/* techniques/micro-interactions/icon-state-morph/technique.css · technique.micro-interactions.icon-state-morph.v1 */
/* technique.micro-interactions.icon-state-morph.v1 — micro ≥ medium.
 *
 * Icons living inside interactive elements answer hover/focus with a small
 * rotate+scale morph. Bound to the icon system's own drawing (`.lv-icon`,
 * inline `svg` in buttons/links), driven by the PARENT's state so the hit
 * target never changes.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is(a, button, .lv-btn) :is(.lv-icon, svg),
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is(a, button, .lv-btn) :is(.lv-icon, svg),
  [data-lv-node-id][data-lvs-micro='medium'] :is(a, button, .lv-btn) :is(.lv-icon, svg),
  [data-lv-node-id][data-lvs-micro='high'] :is(a, button, .lv-btn) :is(.lv-icon, svg) {
    transition: rotate var(--lv-dur-fast, 160ms) var(--lv-ease, ease-out), scale var(--lv-dur-fast, 160ms) var(--lv-ease, ease-out);
  }
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is(a, button, .lv-btn):is(:hover, :focus-visible) :is(.lv-icon, svg),
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is(a, button, .lv-btn):is(:hover, :focus-visible) :is(.lv-icon, svg),
  [data-lv-node-id][data-lvs-micro='medium'] :is(a, button, .lv-btn):is(:hover, :focus-visible) :is(.lv-icon, svg),
  [data-lv-node-id][data-lvs-micro='high'] :is(a, button, .lv-btn):is(:hover, :focus-visible) :is(.lv-icon, svg) {
    rotate: -4deg;
    scale: 1.12;
  }
}
/* techniques/micro-interactions/link-underline-draw/technique.css · technique.micro-interactions.link-underline-draw.v1 */
/* technique.micro-interactions.link-underline-draw.v1 — micro ≥ low.
 *
 * Content links draw their underline left-to-right on hover/focus. Scoped to
 * prose/list links inside a section shell; never navigation chrome, never
 * buttons (`.lv-btn` opts out by not being an underlined link). Uses
 * background-size so the resting state keeps the theme's own underline
 * decision untouched — the draw only ADDS the animated bar.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn),
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn),
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn),
  [data-lv-node-id][data-lvs-micro='low'] :is(p, li, dd, figcaption) a:not(.lv-btn),
  [data-lv-node-id][data-lvs-micro='medium'] :is(p, li, dd, figcaption) a:not(.lv-btn),
  [data-lv-node-id][data-lvs-micro='high'] :is(p, li, dd, figcaption) a:not(.lv-btn) {
    background-image: linear-gradient(currentColor, currentColor);
    background-repeat: no-repeat;
    background-position: 0 100%;
    background-size: 0% 1.5px;
    transition: background-size 240ms cubic-bezier(0.22, 1, 0.36, 1);
  }
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible),
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible),
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='low'] :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='medium'] :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible),
  [data-lv-node-id][data-lvs-micro='high'] :is(p, li, dd, figcaption) a:not(.lv-btn):is(:hover, :focus-visible) {
    background-size: 100% 1.5px;
  }
}
/* techniques/micro-interactions/svg-line-draw/technique.css · technique.micro-interactions.svg-line-draw.v1 */
/* technique.micro-interactions.svg-line-draw.v1 — micro ≥ high.
 *
 * Marked SVG strokes draw themselves as they scroll into view. Opt-in by
 * marker (`data-draw` on the svg or a parent): a generic selector over every
 * path would redraw icons and logos, which is exactly the noise the level
 * gate exists to refuse. pathLength=1 normalises the dash space so ONE rule
 * serves every drawing; authors set `pathLength="1"` on the marked path —
 * the annotation-card element and the skill pack both already do.
 */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes lv-technique-line-draw {
      from { stroke-dashoffset: 1; }
      to { stroke-dashoffset: 0; }
    }
    body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is([data-draw], [data-draw] svg) path[pathLength],
    [data-lv-node-id][data-lvs-micro='high'] :is([data-draw], [data-draw] svg) path[pathLength] {
      stroke-dasharray: 1;
      animation: lv-technique-line-draw 1 both ease-out;
      animation-timeline: view();
      animation-range: entry 20% entry 90%;
    }
  }
}
/* techniques/micro-interactions/toast-slide-settle/technique.css · technique.micro-interactions.toast-slide-settle.v1 */
/* technique.micro-interactions.toast-slide-settle.v1 — micro ≥ low.
 *
 * Success/receipt notices slide in and settle instead of popping. Binds the
 * platform's own success surfaces: the `:target` success blocks the form
 * components render (`.lv-form-success` family) and any element opting in
 * with `data-toast`. Entrance only — dismissal stays instant, a notice must
 * never resist being cleared.
 */
@media (prefers-reduced-motion: no-preference) {
  @keyframes lv-technique-toast-settle {
    0% { opacity: 0; translate: 0 10px; }
    70% { opacity: 1; translate: 0 -2px; }
    100% { opacity: 1; translate: 0 0; }
  }
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) :is([class*='__success'], [data-toast]):target,
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) :is([class*='__success'], [data-toast]):target,
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) :is([class*='__success'], [data-toast]):target,
  [data-lv-node-id][data-lvs-micro='low'] :is([class*='__success'], [data-toast]):target,
  [data-lv-node-id][data-lvs-micro='medium'] :is([class*='__success'], [data-toast]):target,
  [data-lv-node-id][data-lvs-micro='high'] :is([class*='__success'], [data-toast]):target,
  body[data-lvs-micro='low'] [data-lv-node-id]:not([data-lvs-micro]) [data-toast][data-shown],
  body[data-lvs-micro='medium'] [data-lv-node-id]:not([data-lvs-micro]) [data-toast][data-shown],
  body[data-lvs-micro='high'] [data-lv-node-id]:not([data-lvs-micro]) [data-toast][data-shown],
  [data-lv-node-id][data-lvs-micro='low'] [data-toast][data-shown],
  [data-lv-node-id][data-lvs-micro='medium'] [data-toast][data-shown],
  [data-lv-node-id][data-lvs-micro='high'] [data-toast][data-shown] {
    animation: lv-technique-toast-settle 360ms cubic-bezier(0.22, 1, 0.36, 1) 1;
  }
}
/* techniques/motion-effects/focus-linked-reveal/technique.css · technique.motion-effects.focus-linked-reveal.v1 */
/* technique.motion-effects.focus-linked-reveal.v1 — motion ≥ medium.
 *
 * In a group of peers (cards, steps, people), the one under the pointer or
 * holding focus steps forward and its siblings step a nøk back. `:has()` on
 * the section shell keeps this zero-JS; ancestors without :has() simply keep
 * the flat state. Opacity floor stays high — recede, never hide.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-motion='medium'] [data-lv-node-id]:not([data-lvs-motion]) :is(.lv-card, [data-selectable]),
  body[data-lvs-motion='high'] [data-lv-node-id]:not([data-lvs-motion]) :is(.lv-card, [data-selectable]),
  [data-lv-node-id][data-lvs-motion='medium'] :is(.lv-card, [data-selectable]),
  [data-lv-node-id][data-lvs-motion='high'] :is(.lv-card, [data-selectable]) {
    transition: opacity var(--lv-dur-state, 200ms) var(--lv-ease, ease), scale var(--lv-dur-state, 200ms) var(--lv-ease, ease);
  }
  body[data-lvs-motion='medium'] [data-lv-node-id]:not([data-lvs-motion]):has(:is(.lv-card, [data-selectable]):hover) :is(.lv-card, [data-selectable]):not(:hover),
  body[data-lvs-motion='high'] [data-lv-node-id]:not([data-lvs-motion]):has(:is(.lv-card, [data-selectable]):hover) :is(.lv-card, [data-selectable]):not(:hover),
  [data-lv-node-id][data-lvs-motion='medium']:has(:is(.lv-card, [data-selectable]):hover) :is(.lv-card, [data-selectable]):not(:hover),
  [data-lv-node-id][data-lvs-motion='high']:has(:is(.lv-card, [data-selectable]):hover) :is(.lv-card, [data-selectable]):not(:hover) {
    opacity: 0.72;
    scale: 0.99;
  }
  body[data-lvs-motion='medium'] [data-lv-node-id]:not([data-lvs-motion]) :is(.lv-card, [data-selectable]):hover,
  body[data-lvs-motion='high'] [data-lv-node-id]:not([data-lvs-motion]) :is(.lv-card, [data-selectable]):hover,
  [data-lv-node-id][data-lvs-motion='medium'] :is(.lv-card, [data-selectable]):hover,
  [data-lv-node-id][data-lvs-motion='high'] :is(.lv-card, [data-selectable]):hover {
    scale: 1.01;
  }
}
/* techniques/motion-effects/sectional-crossfade/technique.css · technique.motion-effects.sectional-crossfade.v1 */
/* technique.motion-effects.sectional-crossfade.v1 — motion ≥ low.
 *
 * Section grounds ease into one another instead of switching hard: the shell
 * transitions its background/border when tones change under interaction
 * (theme swaps, band hovers, dark-mode flips). Pure transition — nothing
 * animates on load, nothing scroll-linked, so it is honest at `low`.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-motion='low'] [data-lv-node-id]:not([data-lvs-motion]),
  body[data-lvs-motion='medium'] [data-lv-node-id]:not([data-lvs-motion]),
  body[data-lvs-motion='high'] [data-lv-node-id]:not([data-lvs-motion]),
  [data-lv-node-id][data-lvs-motion='low'],
  [data-lv-node-id][data-lvs-motion='medium'],
  [data-lv-node-id][data-lvs-motion='high'] {
    transition:
      background-color var(--lv-dur-panel, 320ms) var(--lv-ease, ease),
      border-color var(--lv-dur-panel, 320ms) var(--lv-ease, ease);
  }
}
/* techniques/motion-effects/settle-on-entry/technique.css · technique.motion-effects.settle-on-entry.v1 */
/* technique.motion-effects.settle-on-entry.v1 — motion ≥ low.
 *
 * The existing reveal choreography (`.lvt-reveal` + REVEAL_JS, themes/src/
 * chrome.mjs) gets a softer landing: slightly longer travel and an
 * ease-out-back curve so a section SETTLES rather than merely arriving. This
 * refines the transition the theme already declares — same properties, same
 * `[data-shown]` contract, no new mechanism — which is what makes `low` the
 * honest byte-for-byte continuation of today's default.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-motion='low'] [data-lv-node-id]:not([data-lvs-motion]) .lvt-reveal,
  body[data-lvs-motion='medium'] [data-lv-node-id]:not([data-lvs-motion]) .lvt-reveal,
  body[data-lvs-motion='high'] [data-lv-node-id]:not([data-lvs-motion]) .lvt-reveal,
  [data-lv-node-id][data-lvs-motion='low'] .lvt-reveal,
  [data-lv-node-id][data-lvs-motion='medium'] .lvt-reveal,
  [data-lv-node-id][data-lvs-motion='high'] .lvt-reveal {
    --lv-reveal-distance: 22px;
    transition-timing-function: cubic-bezier(0.22, 1.18, 0.36, 1);
  }
}
/* techniques/react-effects/press-depress/technique.css · technique.react-effects.press-depress.v1 */
/* technique.react-effects.press-depress.v1 — react ≥ low.
 *
 * Every interactive control gives under the pointer and springs back on
 * release — the difference between a dead click and a physical one. Scale,
 * not translate, so it composes with micro-interactions' hover lift (which
 * owns translate); transform-origin center keeps labels steady.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-react='low'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary),
  body[data-lvs-react='medium'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary),
  body[data-lvs-react='high'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary),
  [data-lv-node-id][data-lvs-react='low'] :is(.lv-btn, button, [role='button'], summary),
  [data-lv-node-id][data-lvs-react='medium'] :is(.lv-btn, button, [role='button'], summary),
  [data-lv-node-id][data-lvs-react='high'] :is(.lv-btn, button, [role='button'], summary) {
    transition: scale var(--lv-dur-fast, 140ms) var(--lv-ease, ease-out);
  }
  body[data-lvs-react='low'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary):active,
  body[data-lvs-react='medium'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary):active,
  body[data-lvs-react='high'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary):active,
  [data-lv-node-id][data-lvs-react='low'] :is(.lv-btn, button, [role='button'], summary):active,
  [data-lv-node-id][data-lvs-react='medium'] :is(.lv-btn, button, [role='button'], summary):active,
  [data-lv-node-id][data-lvs-react='high'] :is(.lv-btn, button, [role='button'], summary):active {
    scale: 0.97;
  }
}
/* techniques/react-effects/spring-settle/technique.css · technique.react-effects.spring-settle.v1 */
/* technique.react-effects.spring-settle.v1 — react ≥ medium.
 *
 * Interactive elements settle with a real spring curve — a pregenerated
 * `linear()` easing (the platform's sanctioned spring: the vendored Motion
 * subset's mini animate() refuses type:"spring", and this needs no library at
 * all). The curve below is a damped spring (stiffness 220, damping 18, mass
 * 1) sampled at 16 points; browsers without `linear()` fall back to the
 * theme's own easing via the transition shorthand's var() fallback.
 *
 * Applies to the same targets the press/lift techniques prime, widening the
 * return journey: releases and hover-exits travel on the spring, so the
 * element "lands" rather than merely stopping.
 */
@media (prefers-reduced-motion: no-preference) {
  body[data-lvs-react='medium'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary, .lv-card, [data-selectable]),
  body[data-lvs-react='high'] [data-lv-node-id]:not([data-lvs-react]) :is(.lv-btn, button, [role='button'], summary, .lv-card, [data-selectable]),
  [data-lv-node-id][data-lvs-react='medium'] :is(.lv-btn, button, [role='button'], summary, .lv-card, [data-selectable]),
  [data-lv-node-id][data-lvs-react='high'] :is(.lv-btn, button, [role='button'], summary, .lv-card, [data-selectable]) {
    transition-property: scale, translate, rotate, box-shadow;
    transition-duration: 420ms;
    transition-timing-function: linear(
      0, 0.0157, 0.0605, 0.1301, 0.2198, 0.3249, 0.4408, 0.5628,
      0.6863, 0.8069, 0.9203, 1.0227, 1.1108, 1.1818, 1.2333, 1
    );
  }
}

/* GENERATED by packages/themes — theme 'simple'. Edit themes/simple/theme.mjs, never this file. */
/* Enkel — Klassisk og uden ornamentik: læsbar typografi, rolige flader og ingen effekter. Standardvalget når et site skal fungere frem for at gøre indtryk. */

/* ── theme overrides ─────────────────────────────────────────────────── */
:root {
  --lv-accent: oklch(47% 0.06 220);
  --lv-bad-surface: oklch(93% 0.0254 26);
  --lv-bad-text: oklch(46% 0.16 26);
  --lv-band-tone: var(--lv-ramp);
  --lv-brand: oklch(47% 0.06 220);
  --lv-brand-soft: oklch(93% 0.0085 220);
  --lv-brand-strong: oklch(34% 0.06 220);
  --lv-btn-halo: linear-gradient(100deg, var(--lv-ramp-terminal), var(--lv-brand), var(--lv-ramp-terminal));
  --lv-btn-halo-opacity: 0;
  --lv-btn-halo-opacity-hover: 0;
  --lv-btn-primary-shadow: 0 1px 0 0 var(--lv-line-control);
  --lv-btn-primary-shadow-hover: 0 1px 0 0 var(--lv-line-control);
  --lv-btn-primary-surface: var(--lv-ramp-terminal);
  --lv-btn-radius: var(--lv-radius-md);
  --lv-canvas: oklch(96.6% 0.0022 226);
  --lv-canvas-deep: oklch(93.1% 0.004 226);
  --lv-canvas-wash-a: oklch(84% 0.0327 220);
  --lv-canvas-wash-alpha: 0.2;
  --lv-canvas-wash-b: oklch(80% 0.0436 254);
  --lv-canvas-wash-c: oklch(87% 0.0212 192);
  --lv-canvas-worst: #e6edef;
  --lv-container-max: 1160px;
  --lv-display-case: none;
  --lv-display-family: 'League Gothic', ui-sans-serif, 'Arial Narrow', 'Liberation Sans Narrow', system-ui, sans-serif;
  --lv-display-tracking: -0.018em;
  --lv-display-variant: normal;
  --lv-focus-ring: oklch(50% 0.066 220);
  --lv-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Mono', monospace;
  --lv-font-ui: 'Lora', ui-serif, Georgia, 'Times New Roman', Times, serif;
  --lv-foot-ink: var(--lv-text-primary);
  --lv-foot-tone: var(--lv-canvas);
  --lv-glass-tint: 255 255 255;
  --lv-glass-worst: #f4f7f8;
  --lv-gutter: clamp(20px, 5vw, 40px);
  --lv-hero-display: clamp(1.875rem, 5.267vw, 4.0817rem);
  --lv-highlight: oklch(93% 0.0085 220);
  --lv-icon-quiet: oklch(57.5% 0.0052 226);
  --lv-leading-normal: 1.55;
  --lv-leading-snug: 1.35;
  --lv-leading-tight: 1.08;
  --lv-lift-1: 0 1px 0 0 rgb(var(--lv-shadow-tint) / 0.06);
  --lv-lift-2: 0 1px 0 0 rgb(var(--lv-shadow-tint) / 0.09);
  --lv-lift-3: 0 2px 0 0 rgb(var(--lv-shadow-tint) / 0.11);
  --lv-line: oklch(91% 0.004 226);
  --lv-line-control: oklch(59.5% 0.0047 226);
  --lv-line-strong: oklch(82.5% 0.0044 226);
  --lv-nav-height: 64px;
  --lv-nav-ink: var(--lv-text-primary);
  --lv-nav-tone: transparent;
  --lv-ok-surface: oklch(93% 0.0159 168);
  --lv-ok-text: oklch(46% 0.1 168);
  --lv-ornament-ink: var(--lv-brand);
  --lv-ornament-size: 18px;
  --lv-radius-lg: 9px;
  --lv-radius-md: 6px;
  --lv-radius-pill: 999px;
  --lv-radius-sm: 4px;
  --lv-radius-xl: 12px;
  --lv-ramp: linear-gradient(135deg, var(--lv-brand-strong) 0%, var(--lv-ramp-terminal) 100%);
  --lv-ramp-terminal: oklch(48% 0.06 246);
  --lv-reveal-distance: 8px;
  --lv-reveal-stagger: 30ms;
  --lv-section-pause: 137px;
  --lv-section-py: 61px;
  --lv-section-py-lg: 91px;
  --lv-shadow-tint: 10 22 42;
  --lv-space-5: 22px;
  --lv-space-6: 30px;
  --lv-space-7: 46px;
  --lv-space-8: 60px;
  --lv-space-9: 92px;
  --lv-surface: oklch(99.5% 0.0001 226);
  --lv-surface-raised: oklch(98.5% 0.0006 226);
  --lv-surface-sunken: oklch(95.2% 0.0025 226);
  --lv-text-2xl: 2.9155rem;
  --lv-text-lg: 1.4875rem;
  --lv-text-link: oklch(47% 0.06 220);
  --lv-text-on-brand: oklch(98.5% 0.008 193);
  --lv-text-primary: oklch(26% 0.0064 226);
  --lv-text-secondary: oklch(43% 0.006 226);
  --lv-text-tertiary: oklch(51% 0.0056 226);
  --lv-text-xl: 2.0825rem;
  --lv-tracking-eyebrow: 0.01em;
  --lv-tracking-heading: -0.018em;
  --lv-warn-surface: oklch(93% 0.0206 62);
  --lv-warn-text: oklch(46% 0.1262 62);
  --lv-weight-heading: 700;
}

:root[data-theme='dark'] {
  --lv-accent: oklch(72% 0.06 220);
  --lv-bad-surface: oklch(34% 0.08 26);
  --lv-bad-text: oklch(82% 0.1034 26);
  --lv-band-tone: var(--lv-ramp);
  --lv-brand: oklch(72% 0.06 220);
  --lv-brand-soft: oklch(26% 0.027 220);
  --lv-brand-strong: oklch(53.2% 0.06 220);
  --lv-btn-halo: linear-gradient(100deg, var(--lv-ramp-terminal), var(--lv-brand), var(--lv-ramp-terminal));
  --lv-btn-halo-opacity: 0;
  --lv-btn-halo-opacity-hover: 0;
  --lv-btn-primary-shadow: 0 1px 0 0 var(--lv-line-control);
  --lv-btn-primary-shadow-hover: 0 1px 0 0 var(--lv-line-control);
  --lv-btn-primary-surface: var(--lv-ramp-terminal);
  --lv-btn-radius: var(--lv-radius-md);
  --lv-canvas: oklch(16% 0.0064 226);
  --lv-canvas-deep: oklch(13% 0.0064 226);
  --lv-canvas-wash-a: oklch(42% 0.045 220);
  --lv-canvas-wash-alpha: 0.16;
  --lv-canvas-wash-b: oklch(38% 0.048 254);
  --lv-canvas-wash-c: oklch(45% 0.036 192);
  --lv-canvas-worst: #10191c;
  --lv-container-max: 1160px;
  --lv-display-case: none;
  --lv-display-family: 'League Gothic', ui-sans-serif, 'Arial Narrow', 'Liberation Sans Narrow', system-ui, sans-serif;
  --lv-display-tracking: -0.018em;
  --lv-display-variant: normal;
  --lv-focus-ring: oklch(78% 0.0659 220);
  --lv-font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Cascadia Mono', monospace;
  --lv-font-ui: 'Lora', ui-serif, Georgia, 'Times New Roman', Times, serif;
  --lv-foot-ink: var(--lv-text-primary);
  --lv-foot-tone: var(--lv-canvas);
  --lv-glass-tint: 18 26 38;
  --lv-glass-worst: #10191d;
  --lv-gutter: clamp(20px, 5vw, 40px);
  --lv-hero-display: clamp(1.875rem, 5.267vw, 4.0817rem);
  --lv-highlight: oklch(26% 0.027 220);
  --lv-icon-quiet: oklch(66% 0.0083 226);
  --lv-leading-normal: 1.55;
  --lv-leading-snug: 1.35;
  --lv-leading-tight: 1.08;
  --lv-lift-1: 0 1px 0 0 rgb(var(--lv-shadow-tint) / 0.06);
  --lv-lift-2: 0 1px 0 0 rgb(var(--lv-shadow-tint) / 0.09);
  --lv-lift-3: 0 2px 0 0 rgb(var(--lv-shadow-tint) / 0.11);
  --lv-line: oklch(30.5% 0.0064 226);
  --lv-line-control: oklch(62% 0.0076 226);
  --lv-line-strong: oklch(39% 0.007 226);
  --lv-nav-height: 64px;
  --lv-nav-ink: var(--lv-text-primary);
  --lv-nav-tone: transparent;
  --lv-ok-surface: oklch(34% 0.05 168);
  --lv-ok-text: oklch(82% 0.0818 168);
  --lv-ornament-ink: var(--lv-brand);
  --lv-ornament-size: 18px;
  --lv-radius-lg: 9px;
  --lv-radius-md: 6px;
  --lv-radius-pill: 999px;
  --lv-radius-sm: 4px;
  --lv-radius-xl: 12px;
  --lv-ramp: linear-gradient(135deg, var(--lv-brand-strong) 0%, var(--lv-ramp-terminal) 100%);
  --lv-ramp-terminal: oklch(48% 0.06 246);
  --lv-reveal-distance: 8px;
  --lv-reveal-stagger: 30ms;
  --lv-section-pause: 137px;
  --lv-section-py: 61px;
  --lv-section-py-lg: 91px;
  --lv-shadow-tint: 4 8 14;
  --lv-space-5: 22px;
  --lv-space-6: 30px;
  --lv-space-7: 46px;
  --lv-space-8: 60px;
  --lv-space-9: 92px;
  --lv-surface: oklch(22% 0.0035 226);
  --lv-surface-raised: oklch(26% 0.0038 226);
  --lv-surface-sunken: oklch(13% 0.0051 226);
  --lv-text-2xl: 2.9155rem;
  --lv-text-lg: 1.4875rem;
  --lv-text-link: oklch(72% 0.06 220);
  --lv-text-on-brand: oklch(98.5% 0.008 193);
  --lv-text-primary: oklch(95% 0.0085 226);
  --lv-text-secondary: oklch(78% 0.0096 226);
  --lv-text-tertiary: oklch(70% 0.0089 226);
  --lv-text-xl: 2.0825rem;
  --lv-tracking-eyebrow: 0.01em;
  --lv-tracking-heading: -0.018em;
  --lv-warn-surface: oklch(34% 0.065 62);
  --lv-warn-text: oklch(82% 0.1063 62);
  --lv-weight-heading: 700;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
  --lv-accent: oklch(72% 0.06 220);
  --lv-bad-surface: oklch(34% 0.08 26);
  --lv-bad-text: oklch(82% 0.1034 26);
  --lv-brand: oklch(72% 0.06 220);
  --lv-brand-soft: oklch(26% 0.027 220);
  --lv-brand-strong: oklch(53.2% 0.06 220);
  --lv-canvas: oklch(16% 0.0064 226);
  --lv-canvas-deep: oklch(13% 0.0064 226);
  --lv-canvas-wash-a: oklch(42% 0.045 220);
  --lv-canvas-wash-alpha: 0.16;
  --lv-canvas-wash-b: oklch(38% 0.048 254);
  --lv-canvas-wash-c: oklch(45% 0.036 192);
  --lv-canvas-worst: #10191c;
  --lv-focus-ring: oklch(78% 0.0659 220);
  --lv-glass-tint: 18 26 38;
  --lv-glass-worst: #10191d;
  --lv-highlight: oklch(26% 0.027 220);
  --lv-icon-quiet: oklch(66% 0.0083 226);
  --lv-line: oklch(30.5% 0.0064 226);
  --lv-line-control: oklch(62% 0.0076 226);
  --lv-line-strong: oklch(39% 0.007 226);
  --lv-ok-surface: oklch(34% 0.05 168);
  --lv-ok-text: oklch(82% 0.0818 168);
  --lv-shadow-tint: 4 8 14;
  --lv-surface: oklch(22% 0.0035 226);
  --lv-surface-raised: oklch(26% 0.0038 226);
  --lv-surface-sunken: oklch(13% 0.0051 226);
  --lv-text-link: oklch(72% 0.06 220);
  --lv-text-primary: oklch(95% 0.0085 226);
  --lv-text-secondary: oklch(78% 0.0096 226);
  --lv-text-tertiary: oklch(70% 0.0089 226);
  --lv-warn-surface: oklch(34% 0.065 62);
  --lv-warn-text: oklch(82% 0.1063 62);
}
}


.lvt-page {
  min-block-size: 100dvh;
  display: flex;
  flex-direction: column;
  background: var(--lv-canvas);
  color: var(--lv-text-primary);
  font: var(--lv-weight-regular) var(--lv-text-md) / var(--lv-leading-normal) var(--lv-font-ui);
}

.lvt-main { flex: 1 1 auto; }

/* ── The display face, actually on the page ───────────────────────────────
   type.displayStack resolves to --lv-display-family in scales.mjs, and until
   now exactly two rules read it: .lvt-nav__brand and .lvt-foot__brand.
   Everything else on a public page fell through to components.css's
   'h1, h2, h3, h4 { font-family: var(--lv-font-ui) }', so
   getComputedStyle(h1).fontFamily measured FIGTREE ON ALL SIXTEEN THEMES —
   serif, condensed and mono changed a wordmark and nothing else. A theme axis
   that reaches two words of chrome is not an axis.

   This is the theme plane's business and not the component plane's: an
   element selector inside .lvt-page sets what headings are MADE of, while
   every heading's class, size, colour and placement stays where the registry
   put it. No component rule is overridden by name — see check/index.mjs's
   theme-selector-out-of-namespace, which is what stops this becoming
   art/direction.css.

   --lv-display-case is deliberately NOT applied here. It carries the
   EYEBROW's transform (scales.mjs EYEBROW), and uppercasing every h2 on saas
   or lowercasing every h2 on atelier is a different decision from the one a
   theme made when it chose an eyebrow case. */
.lvt-page :where(h1, h2, h3, h4) {
  font-family: var(--lv-display-family);
}

/* --lv-hero-display is NOT applied here.
   It was, while packages/registry was held by another task and the only way to
   reach a heading's size was from this plane. The size of a component's own
   title is the component's business, and open.pitch's pitch.astro now reads
   --lv-hero-display directly — so a rule here would be a second authority for
   one number, which is the thing this whole package exists to prevent. The
   theme supplies the VALUE; the component decides that it wants it. */

/* A keyboard user's first Tab lands here. Off-screen until focused — never
   display:none, because a hidden skip link is not a skip link. */
.lvt-skip {
  position: absolute;
  inset-inline-start: var(--lv-space-2);
  inset-block-start: -4rem;
  z-index: var(--lv-z-overlay);
  padding: var(--lv-space-2) var(--lv-space-4);
  border-radius: 0 0 var(--lv-radius-sm) var(--lv-radius-sm);
  background: var(--lv-brand-strong);
  color: var(--lv-text-on-brand);
  font-weight: var(--lv-weight-semibold);
  text-decoration: none;
}
.lvt-skip:focus-visible { inset-block-start: 0; }

:where(.lvt-page) :where(a, button, summary, [tabindex]):focus-visible {
  outline: var(--lv-focus-width, 2px) solid var(--lv-focus-ring);
  outline-offset: var(--lv-focus-offset, 2px);
  border-radius: var(--lv-radius-sm);
}

/* ── The block shell — the seam between the theme and the registry ───────── */

.lvt-shell {
  padding-block: var(--lv-section-py);
  padding-inline: var(--lv-gutter);
}

.lvt-shell > * { max-inline-size: var(--lv-container-max); margin-inline: auto; }

/* ── ONE SEAM BUDGET (Phase 3, 2026-08-18) ────────────────────────────────
   Until now an ordinary seam between two placed sections cost TWO vertical
   budgets: this shell's --lv-section-py AND .lv-sec's own --lv-space-8,
   stacked — measured at 176-404px between content boundaries across the
   sixteen themes (fixtures/section-rhythm-page.json). The shell is the SOLE
   owner of between-section rhythm on a public page, so a direct child
   surrenders its own: the same G20 seam variables the group/split collapse
   already crosses the plane boundary with (--lv-sec-pad-start/-end,
   consumed by packages/registry/styles/section.css with its own value as
   fallback — never a selector naming .lv-sec from this plane).

   :where() holds this at (0,1,0) so the group/split re-points below — equal
   specificity, later in this sheet — still win on their own wrappers, and
   the member rhythm they declare is unchanged.

   [data-lv-bleed] is excluded: a section whose background is the media
   carries its OWN vertical rhythm by contract (see the media-background
   block below — the shell hands it padding: 0), so zeroing its seam vars
   would leave a hero's copy touching the glass. Outside any shell — an
   isolated component preview, a bare fixture — neither variable is set and
   .lv-sec keeps its full standalone breathing room. */
.lvt-shell > :where(:not([data-lv-bleed])) {
  --lv-sec-pad-start: 0px;
  --lv-sec-pad-end: 0px;
}

/* ── Section treatment — see contract.mjs SECTION_TONES ──────────────────
   --loose, --sunken and --band were written in Wave 2 and nothing ever
   emitted one: shellFor() in the renderer only ever asked about glass, so
   sixteen themes shipped one flat stack of identical bands. These are the
   rooms a section can be put in, and they are the whole answer to LPH's
   58,400 lines of per-theme section components. */
.lvt-shell--loose { padding-block: var(--lv-section-py-lg); }
.lvt-shell--tight { padding-block: calc(var(--lv-section-py) * 0.5); }
/* A NARRATIVE PAUSE — declared, never accidental. --lv-section-pause
   (scales.mjs rhythmVars: one and a half loose budgets, so it clears every
   ordinary seam by construction) is granted only when a placement says
   _pause: true (apps/site-renderer/composition.mjs) — a route/composition
   decision, the same reserved-key contract as _tone. Placed after --loose
   and --tight so an equal-specificity treatment rhythm loses the tie: a
   declared pause outranks the theme's per-intent air. */
.lvt-shell--pause { padding-block: var(--lv-section-pause, var(--lv-section-py-lg)); }
.lvt-shell--sunken { background: var(--lv-surface-sunken); }
.lvt-shell--raised { background: var(--lv-surface); }

/* Full bleed: the section keeps its vertical rhythm and gives up the work
   column. It is the only treatment that changes the page's geometry rather
   than its colour, which is why it is budgeted alongside the band. */
.lvt-shell--bleed { padding-inline: 0; }
.lvt-shell--bleed > * { max-inline-size: none; }

/* ── A section whose BACKGROUND is the media ──────────────────────────────
   open.pitch with a photograph, act.commit with one, and every
   open.atmosphere scene paint an inset:0 layer across the whole section box.
   That box is the one THIS SHELL hands them, and until now it was the work
   column — padding: var(--lv-section-py) var(--lv-gutter) plus the
   --lv-container-max cap on the child. So the photograph a customer chose for
   their hero rendered as a rectangle with canvas on all four sides, which is a
   picture on a page rather than a background. Measured across the sixteen:
   eleven never grant bleed to open.pitch, and paper puts it in a sunken band
   instead, which frames the rectangle rather than hiding it.

   THIS IS NOT THE BLEED TONE, and it deliberately does not spend that budget.
   tone:'bleed' is a theme deciding that a section's CONTENT gives up the work
   column: a composition decision, rationed at three per theme because a page
   of them has no rhythm left. This is a background having to reach the page
   edge in order to be a background at all, and it follows from the customer
   putting an image in the slot — not from the theme. Rationing it would be
   rationing whether a background works.

   The component announces itself with an ATTRIBUTE rather than the shell
   reading a component class: a class here would be
   theme-selector-out-of-namespace in spirit even though this file is not a
   theme, and data-lv-bleed is a contract both planes can name. The dependency
   runs component → shell, the direction the boundary already leaves open — the
   same seam as the bleed floor in packages/registry/styles/section.css.

   padding, not padding-inline: --lv-section-py put canvas above and below the
   image too, and all three of these components carry their own vertical
   rhythm. */
.lvt-shell:has(> [data-lv-bleed]) { padding: 0; }
.lvt-shell:has(> [data-lv-bleed]) > * { max-inline-size: none; }

/* Glass over a photograph is section 3 of .impeccable.md restated: glass
   carries chrome, and a customer's own hero image is the work surface. Three
   themes (saas, service, design) grant open.pitch glass, and the grant stays
   theirs — it is the PANEL GEOMETRY that goes, so the image is not a rounded
   rectangle inset by --lv-space-6 from an edge it was just given. */
.lvt-shell--glass:has(> [data-lv-bleed]) > * { padding: 0; border-radius: 0; }

/* THE SHELL'S ORNAMENT DEVICE HAS NOWHERE LEFT TO STAND.
   Every device in ornament.mjs is drawn on this element and positioned against
   the margin it no longer has: corner-bracket sits at
   calc(var(--lv-gutter) * 0.35) from the inline edge, spectral-hairline runs
   inset-inline: var(--lv-gutter) across the top, ruled-band draws the page's
   width above the section. With the padding gone they all land ON the
   photograph — measured on paper at 1440, the two brackets rendered as brown
   ticks inside the hero image at its top-start and bottom-end corners.

   A device that marks the seam between sections has no work to do here anyway:
   the edge of a full-bleed photograph is the seam. So the shell keeps the
   theme's device everywhere else and drops it on this one section.

   The .lvt-page prefix is specificity, not scoping, and it is deliberate:
   spectral-hairline's own selector is .lvt-shell + .lvt-shell::before at
   (0,2,1), ornament.mjs is concatenated AFTER this file, and an equal-weight
   rule earlier in the sheet loses. */
.lvt-page .lvt-shell:has(> [data-lv-bleed])::before,
.lvt-page .lvt-shell:has(> [data-lv-bleed])::after { content: none; }

/* A full-bleed brand band. Carries the mark's ramp and inverts the ink — the
   one place a public page goes to full brand colour. No glass: glass on a
   filled band has nothing to refract (saas-glass-theme.md §6). */
.lvt-shell--band {
  background: var(--lv-band-tone);
  color: var(--lv-text-on-brand);
}
/* THE BAND'S INTERIOR IS AN INVERTED ROOM, AND IT IS INVERTED THROUGH THE
   VARIABLES RATHER THAN THROUGH color.

   The first attempt at this was .lvt-shell--band :where(h1,h2,h3,p,li) {
   color: inherit }, and it did not work: a component that sets
   color: var(--lv-text-primary) on its own scoped class carries (0,2,0) and
   won, so the heading of a banded section rendered near-black on the brand
   ramp. Measured on raw: getComputedStyle(h2).color was
   oklch(0.19 0.0033 24) on a gradient starting at oklch(34% 0.15 18).

   Re-pointing the ROLE instead reaches every component at every specificity,
   because a custom property inherits and is resolved where it is used. It is
   also the only version of this that the boundary permits: a theme may supply
   values for token-plane variables, and may not write a rule that matches a
   component's class (check/index.mjs).

   Every replacement is a colour the contrast gate ALREADY measures against
   this exact background: --lv-text-on-brand over --lv-ramp is the pair
   on-brand-vs-ramp (4.5 floor, measured at 4.80:1 across the gradient), and
   --lv-brand-strong is the gradient's own dark end. Nothing here introduces
   a colour pairing that tools/contrast/pairs.mjs cannot see, which is the
   whole difference between this and an unmeasured surface carrying text
   (.impeccable.md §6).

   The cost, stated rather than hidden: a band has ONE ink. Three levels of
   tonal hierarchy do not survive inversion onto a gradient, and a band is a
   single loud statement rather than a place to be subtle.

   THREE SELECTORS, ONE ROOM. The bare direct-child selector alone was
   written before composition (G20) existed and only reaches the shell's
   direct child. In a banded GROUP the member's section sits one wrapper
   deeper (.lvt-group__item > section), and the registry's own .lv-sec
   re-declares --lv-ink-accent on that section — a closer declaration that
   beats any inherited value, so the accent role silently fell back to the
   band's own dark end inside every banded group (found on the dennis-niess
   acceptance render: eyebrow, pullquote highlight and rating figure all
   invisible). Naming the composition wrappers this plane OWNS
   (.lvt-group__item / .lvt-split__item — never a .lv-* class) re-points the
   roles ON the member's root element at (0,2,0), which wins over .lv-sec's
   (0,1,0) at any stylesheet order. */
.lvt-shell--band > *,
.lvt-shell--band .lvt-group__item > *,
.lvt-shell--band .lvt-split__item > * {
  --lv-text-primary: var(--lv-text-on-brand);
  --lv-text-secondary: var(--lv-text-on-brand);
  --lv-text-tertiary: var(--lv-text-on-brand);
  --lv-text-link: var(--lv-text-on-brand);
  --lv-icon-quiet: var(--lv-text-on-brand);
  --lv-surface: var(--lv-brand-strong);
  --lv-surface-raised: var(--lv-brand-strong);
  --lv-surface-sunken: var(--lv-brand-strong);
  --lv-line: color-mix(in oklab, var(--lv-text-on-brand) 32%, transparent);
  --lv-line-strong: color-mix(in oklab, var(--lv-text-on-brand) 52%, transparent);
  --lv-line-control: color-mix(in oklab, var(--lv-text-on-brand) 70%, transparent);
  /* The registry's accent ink (packages/registry/styles/section.css) defaults
     to --lv-brand-strong, which is THIS BAND'S OWN DARK END. Left un-inverted,
     every brand-coloured accent inside a band paints the brand onto the brand:
     measured on raw, prove.customer-voice's rating figure resolved to
     oklch(34% 0.15 18) against a band starting at oklch(34% 0.15 18) — 1.00:1,
     invisible, on two of the sixteen themes that band that intent. A band has
     one ink and this is the last role that was still outside it. */
  --lv-ink-accent: var(--lv-text-on-brand);
}

/* ── Split/band composition (G20) ─────────────────────────────────────────
   Emitted by the renderer's composition pass (apps/site-renderer/
   composition.mjs) — never by a theme and never by a component. Two shapes.
   (No backticks in this block: BASE is one template literal.)

   .lvt-group — several placements in ONE shell, one tone. The shell carries
   the section padding once; the members' own .lv-sec rhythm collapses
   between them (first keeps its top, last keeps its bottom) so a quote and
   its supporting statement read as one band instead of two stacked rooms.
   The band's ink re-pointing above selects .lvt-shell--band > *, so a
   banded group's members — direct children — inherit the inverted room with
   no extra rule.

   .lvt-split — two placements side by side in ONE section. The grid is the
   shell's capped child (.lvt-shell > * hands it the work column), the
   ratio names the reference's fraction columns, and the members' .lv-sec
   padding is neutralised because the shell already owns this section's
   rhythm. Under 900px — the reference's own breakpoint — the pair stacks.

   HOW THE SHELL REACHES THE SECTION'S RHYTHM. It does not: naming .lv-sec
   from this plane is theme-selector-out-of-namespace (the first draft did,
   80 findings, 2026-08-14). The shell sets --lv-sec-pad-start /
   --lv-sec-pad-end / --lv-sec-inner-max on wrappers it OWNS, and .lv-sec
   consumes them with its own current values as fallback — the same seam
   --lv-container-max already crosses (contract.mjs THEME_LAYER_VARS, both
   consumed in packages/registry/styles/section.css). Inheritance resolves
   nearest-ancestor, so a split inside a group takes the split's zeros over
   the group's collapse value exactly as the cascade order used to decide. */
.lvt-group > * + * { --lv-sec-pad-start: var(--lv-space-4); }
.lvt-group > *:not(:last-child) { --lv-sec-pad-end: var(--lv-space-4); }

.lvt-split {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--lv-space-6);
  align-items: start;
}
.lvt-split--7-5 { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.lvt-split--5-7 { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
.lvt-split__item { min-inline-size: 0; }
/* The shell owns this section's rhythm; the columns' own is neutralised.
   The inner cap goes with it: a column is narrower than the work column by
   construction, so the cap would only re-centre a phantom margin — same
   reasoning as --bleed's lift. */
.lvt-split > * {
  --lv-sec-pad-start: 0px;
  --lv-sec-pad-end: 0px;
  --lv-sec-inner-max: none;
}
@media (max-width: 900px) {
  /* minmax(0, 1fr), not bare 1fr (2026-08-15, v1.0.51): a bare 1fr track's
     automatic minimum is the item's min-content size, so one wide member —
     a multicol gallery, an unwrappable word — could hold the stacked track
     wider than the shell and push the pair past the viewport edge on
     exactly the narrow screens this rule serves. The two-column templates
     above already say minmax(0, …) for the same reason. */
  .lvt-split { grid-template-columns: minmax(0, 1fr); }
  /* Stacked, the pair reads as a band of two — restore a collapsed rhythm
     between them so the columns do not fuse into one unreadable block. */
  .lvt-split > * + * { --lv-sec-pad-start: var(--lv-space-4); }
}

/* Glass on a page section. Budgeted, and the budget is a gate rather than
   advice — see check/index.mjs theme-glass-budget and theme-glass-on-prose. */
.lvt-shell--glass > * {
  padding: var(--lv-space-6);
  border-radius: var(--lv-radius-lg);
}

@media (prefers-reduced-motion: no-preference) {
  .lvt-reveal {
    opacity: 0;
    transform: translateY(var(--lv-reveal-distance));
    transition:
      opacity var(--lv-dur-panel) var(--lv-ease) var(--lv-reveal-delay, 0ms),
      transform var(--lv-dur-panel) var(--lv-ease) var(--lv-reveal-delay, 0ms);
  }
  .lvt-reveal[data-shown] { opacity: 1; transform: none; }
}

/* Nothing may be invisible waiting for an observer that will never fire — the
   failure mode that makes a reduced-motion page blank. */
@media (prefers-reduced-motion: reduce) {
  .lvt-reveal { opacity: 1; transform: none; }
}

/* ── Chrome shared ──────────────────────────────────────────────────────── */

.lvt-nav {
  --lvt-nav-gap: var(--lv-space-5);
  display: flex;
  align-items: center;
  gap: var(--lvt-nav-gap);
  padding-inline: var(--lv-gutter);
  min-block-size: var(--lv-nav-height);
  background: var(--lv-nav-tone);
  color: var(--lv-nav-ink);
}

.lvt-nav__brand {
  font: var(--lv-weight-heading) var(--lv-text-lg) / 1 var(--lv-display-family);
  letter-spacing: var(--lv-display-tracking);
  text-transform: var(--lv-display-case);
  color: inherit;
  text-decoration: none;
}

.lvt-nav__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--lvt-nav-gap);
  align-items: center;
  margin: 0;
  padding: 0;
  list-style: none;
}

.lvt-nav__link {
  display: inline-flex;
  align-items: center;
  min-block-size: 44px;
  color: inherit;
  font-size: var(--lv-text-sm);
  font-weight: var(--lv-weight-medium);
  text-decoration: none;
}
.lvt-nav__link[aria-current='page'] { font-weight: var(--lv-weight-bold); }

/* One breakpoint and a full-screen overlay — the LPH saas nav's single good
   structural idea, kept (saas-glass-theme.md §2). It is a <details>, so it
   opens, closes on Escape and is operable with no JavaScript at all; the
   renderer adds nothing to make it work.

   V1.0.48 (FINAL-VERDICT defect 6): the <details> is the SMALL-SCREEN
   rendering only. A closed <details> never paints its non-summary children —
   no CSS can opt them back in — so the desktop nav is its own inline list
   (.lvt-nav__links--desktop, emitted by the renderer beside the details).
   Desktop shows the list and hides the details whole; under the breakpoint
   the pair swaps. Exactly one of the two is ever displayed. */
.lvt-nav__menu { display: none; margin-inline-start: auto; }
.lvt-nav__links--desktop { margin-inline-start: auto; }

/* The header's tel: affordance — a real link in the links list, weighted like
   identity rather than like a nav item (the one number a caller needs). */
.lvt-nav__phone {
  font-weight: var(--lv-weight-bold);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* The standalone MOBILE phone anchor (V1.0.49, R5 item 2): under the
   breakpoint the desktop list hides whole — its tel: item with it — which
   left the number a Menu-tap away on the surface where callers actually
   call. This bar-level anchor shows ONLY below the breakpoint; at desktop
   the list's own item stands, so no width ever carries the number twice. */
.lvt-nav__phone--bar { display: none; }
.lvt-nav__toggle {
  display: none;
  align-items: center;
  min-block-size: 44px;
  min-inline-size: 44px;
  padding-inline: var(--lv-space-3);
  border: 1px solid var(--lv-line-control);
  border-radius: var(--lv-radius-sm);
  background: transparent;
  color: inherit;
  font: var(--lv-weight-semibold) var(--lv-text-sm) / 1 var(--lv-font-ui);
  cursor: pointer;
  list-style: none;
}
.lvt-nav__toggle::-webkit-details-marker { display: none; }

/* ── Desktop nav is one inline list, always (V1.0.50) ────────────────────
   The V1.0.49 overflow dropdown (mobile "Menu" details surfacing on desktop
   when a width estimate said the row could not fit) is retired: the estimate
   misfired on long brands, and a details toggle on a desktop header reads as
   mobile UI regardless (operator, 2026-08-15). Desktop shows the FULL list
   and wraps to a second row when it genuinely cannot fit — honest and
   unsurprising. The menu/toggle pair is hard-hidden at desktop width. */
@media (min-width: 56.3125rem) {
  .lvt-nav__menu { display: none; }
  .lvt-nav__links--desktop { flex-wrap: wrap; row-gap: var(--lv-space-2); }
}

@media (max-width: 56.25rem) {
  .lvt-nav__links--desktop { display: none; }
  .lvt-nav__phone--bar { display: inline-flex; margin-inline-start: auto; flex: 0 0 auto; }
  /* A long brand (fx "Tømrermester Dennis Niess ApS") + phone + Menu must
     never push the row past the viewport (measured 420px on a 360px screen,
     2026-08-15): the brand is the one flexible item and truncates. */
  .lvt-nav__brand { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .lvt-nav__menu { display: block; flex: 0 0 auto; }
  /* The phone bar owns the auto push when it exists; the menu follows it.
     :has() keeps the phoneless header exactly as it was. */
  .lvt-nav:has(.lvt-nav__phone--bar) .lvt-nav__menu { margin-inline-start: 0; }
  .lvt-nav__toggle { display: inline-flex; }
  .lvt-nav__menu[open] .lvt-nav__links,
  .lvt-nav__menu:not([open]) .lvt-nav__links { position: static; }
  .lvt-nav__menu:not([open]) .lvt-nav__links { display: none; }
  .lvt-nav__menu[open] .lvt-nav__links {
    position: fixed;
    inset: var(--lv-nav-height) 0 0 0;
    z-index: var(--lv-z-overlay);
    flex-direction: column;
    align-items: flex-start;
    gap: var(--lv-space-4);
    padding: var(--lv-space-6) var(--lv-gutter);
    background: var(--lv-surface);
    overflow-y: auto;
  }
  .lvt-nav__menu[open] .lvt-nav__link { font-size: var(--lv-text-lg); }
}

.lvt-foot {
  padding-block: var(--lv-section-py);
  padding-inline: var(--lv-gutter);
  background: var(--lv-foot-tone);
  color: var(--lv-foot-ink);
}
.lvt-foot__inner { max-inline-size: var(--lv-container-max); margin-inline: auto; }
.lvt-foot__links { display: flex; flex-wrap: wrap; gap: var(--lv-space-4); margin: 0; padding: 0; list-style: none; }
.lvt-foot a { color: inherit; }
.lvt-foot__colophon { margin: 0; font-size: var(--lv-text-xs); }
.lvt-foot__figure { font-family: var(--lv-font-mono); font-variant-numeric: tabular-nums; }

/* ── The footer's PROPOSITION, which is a different axis from its archetype ──
   FOOTER_CSS below decides how a footer LOOKS — five archetypes, one per theme.
   These decide what it SAYS: columns, a service business's contact block, or a
   shop's delivery-and-payment reassurance. See apps/site-renderer/footers.mjs.

   NOTE FOR ANY LATER EDITOR: this comment sits INSIDE the BASE template
   literal, so it must contain no backtick. One in prose ends the string and the
   whole module stops parsing — which is exactly what happened on 2026-08-04 and
   took ten admin test files down with it. Quote code with CAPITALS or nothing.

   The two axes are orthogonal and stay that way because of one discipline:
   NOTHING IN THIS BLOCK DECLARES A COLOUR OR A FONT. Every rule is structure —
   grid, flow, hairline — and every hairline is currentColor at low alpha, so it
   follows whatever ink the archetype chose. That is why a brand-band footer
   (ink --lv-text-on-brand on the mark's ramp) and a sitemap footer (ink on
   --lv-surface-sunken) both render the contact block correctly with no
   per-archetype rule and no measurement this file would have to claim.
   --lv-line was the obvious choice and is the wrong one: it is the PAGE's
   hairline, and on the two archetypes that invert their ink it disappears.

   Everything is scoped under the two modifiers, so the columns footer — every
   tenant's footer until now — resolves to byte-identical CSS.

   grid-column: 1 / -1 AND flex-basis: 100% on each full-width block, not one or
   the other: .lvt-foot__inner is a grid under four archetypes and a flex row
   under minimal-rule, and the inert one costs nothing. */

.lvt-foot--contact .lvt-foot__contact,
.lvt-foot--commerce .lvt-foot__assure,
.lvt-foot--commerce .lvt-foot__pay {
  grid-column: 1 / -1;
  flex-basis: 100%;
}

/* ── contact: the van door ──────────────────────────────────────────────── */

.lvt-foot--contact .lvt-foot__contact {
  display: grid;
  gap: var(--lv-space-5) var(--lv-space-6);
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  align-items: start;
  margin-block-end: var(--lv-space-5);
  padding-block-end: var(--lv-space-5);
  border-block-end: 1px solid color-mix(in oklab, currentColor 24%, transparent);
}
.lvt-foot--contact address { font-style: normal; display: grid; gap: var(--lv-space-2); justify-items: start; }
/* 44px, because a phone number in a footer is the single most-tapped link on a
   tradesperson's site and it is tapped on a phone. */
.lvt-foot--contact address a { min-block-size: 44px; display: inline-flex; align-items: center; }
/* A term and its definition, laid out as one. The times take the mono face from
   .lvt-foot__figure, which the renderer puts on the <dd>. */
.lvt-foot--contact .lvt-foot__hours { display: grid; grid-template-columns: auto 1fr; gap: var(--lv-space-2) var(--lv-space-5); margin: 0; }
.lvt-foot--contact .lvt-foot__hours dd { margin: 0; }
.lvt-foot--contact .lvt-foot__areas ul,
.lvt-foot--contact ul.lvt-foot__areas { display: flex; flex-wrap: wrap; gap: var(--lv-space-2) var(--lv-space-4); margin: 0; padding: 0; list-style: none; }

/* ── commerce: the delivery note ────────────────────────────────────────── */

.lvt-foot--commerce .lvt-foot__assure {
  display: grid;
  gap: var(--lv-space-4) var(--lv-space-5);
  grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
  margin: 0 0 var(--lv-space-6);
  padding: 0 0 var(--lv-space-6);
  list-style: none;
  border-block-end: 1px solid color-mix(in oklab, currentColor 24%, transparent);
}
.lvt-foot--commerce .lvt-foot__assure li { display: grid; grid-template-columns: auto 1fr; gap: var(--lv-space-3); align-items: start; font-size: var(--lv-text-sm); }
.lvt-foot--commerce .lvt-foot__assure svg { inline-size: 1.5rem; block-size: 1.5rem; }
.lvt-foot--commerce .lvt-foot__pay {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--lv-space-2) var(--lv-space-3);
  margin: var(--lv-space-6) 0 0;
}
/* A boundary, so it carries the 3:1 UI floor rather than the 4.5:1 text floor —
   and it is drawn from the ink it sits beside, so it clears it on every
   archetype without a per-theme measurement. */
.lvt-foot--commerce .lvt-foot__pay > span:not(.lvt-foot__eyebrow) {
  padding: var(--lv-space-1) var(--lv-space-3);
  border: 1px solid color-mix(in oklab, currentColor 45%, transparent);
  border-radius: var(--lv-radius-sm);
  font-size: var(--lv-text-xs);
}
.lvt-foot__eyebrow { font-size: var(--lv-text-xs); letter-spacing: var(--lv-display-tracking); }

/* nav archetype: inline-plain */

.lvt-nav {
  justify-content: space-between;
  background: transparent;
  border-block-end: 1px solid var(--lv-line);
}
.lvt-nav__link { text-underline-offset: 0.35em; text-decoration: underline solid transparent 1px; }
.lvt-nav__link:hover { text-decoration-color: currentColor; }

/* footer archetype: columns */

.lvt-foot { border-block-start: 1px solid var(--lv-line); }
.lvt-foot__inner { display: grid; gap: var(--lv-space-6); grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); }
.lvt-foot__links { flex-direction: column; gap: var(--lv-space-2); }
.lvt-foot__colophon { grid-column: 1 / -1; border-block-start: 1px solid var(--lv-line); padding-block-start: var(--lv-space-4); }

/* ornament device: none */

/* Deliberately empty. A theme whose whole argument is that it gets out of the
   way, and the one device a *second* theme may not also choose — see
   check/axes.mjs. */


