/* =====================================================================================================
   wine-base.css (hand-written, 20 Oct 2026): the shared components of the wine-and-rose landing pages.
   Loads after wine-chrome.css (the homepage's own tokens, base, buttons, header, menus and footer, cut from
   catalyse-home-wine.html at build time) and wine-kit.css (the recoloured solution kit, only on pages with kit
   visuals); each template's wine/assets/t-<name>.css loads after this file.

   Prefix: wn- for components, wm- for the scroll-motion parts (wine-motion.js). Never reuse the header's class
   names (.pill .mnav .mm .hdr .ann .lang .login .hcta .ovl .navwrap .mini .ftr .social .legal .tag .slot).

   Palette (the homepage): hero wine #1a0616 -> #4a1238 with crimson glows; light rose #ffb3c7; button #d6335e
   (white text); links / bands #b4235a; bright band #e8466f; page #f7f2f4; ink #1e0a1a; borders #e8dfe3.
   One warm accent for charts only: champagne #f6c98e. Sora 500 headlines, Inter text.
   ===================================================================================================== */

/* =====================================================================================================
   RESPONSIVE (21 Oct 2026). Designed at desktop 1440; at 1200 and wider every page must stay exactly as designed,
   so all phone / tablet rules sit inside max-width (or hover / pointer) media queries. Use these breakpoints
   everywhere (wine-base.css, t-*.css, wine-polls.css, the homepage), desktop first; each query covers the screens
   narrower than its width (so a 1024 tablet in landscape gets the 1200 rules, a 768 tablet in portrait the 1024 ones):
     1200  small laptop        @media (max-width: 1199.98px)
     1024  tablet landscape    @media (max-width: 1023.98px)
      768  tablet portrait     @media (max-width: 767.98px)
      480  phone               @media (max-width: 479.98px)
     touch                     @media (hover: none) and (pointer: coarse)   (tap targets, no sticky hover lifts)
   Phone bar: no sideways scroll at 360 / 390 / 414; body text >= 16px; nothing under 12px; tap targets >= 44px;
   grids 1 column (2 on tablets); headings scale with clamp(); hero text visible at first paint.
   Motion: below 1024px or on a touch screen (LITE query "(max-width: 1023.98px), (hover: none) and (pointer: coarse)")
   wine-motion.js swaps html.wm-on for html.wm-lite: reveals still run, with short distances; everything keyed on
   html.wm-on (pinned stories, sideways stages, card stacks, parallax, scrubbing, tilt and the templates' own
   html.wm-on scenes) falls back to its static no-JS layout, so pinned stories become normal stacked sections.
   A template that wants motion on phones writes html.wm-lite rules. Reduced motion stays fully static.
   The header (wine-chrome.css, cut from the homepage) uses the same four queries: from 1024px up the desktop pill, below
   1024px the S01 bar (56px; 72px below 480px) that scrolls away, the pill (56px; 52px below 480px) and the menu button.
   The header is sticky and in the page flow, so content under it starts below the S01 bar and only has to clear the
   rest of the pill (10 + 56 = 66px; 8 + 52 = 60px below 480px) plus its own gap.
   Shared hooks: --wn-hdr-clear / --wn-hdr-clear-m (space above the hero text for the header on tablets / phones;
   96px below 1024px / 88px below 768px when unset). Templates set their hero's top padding through these two variables,
   never as a fixed px value; .wn-tscroll (wrap a wide table or drawing: it scrolls inside, never the page).
   The responsive rules are at the end of this file (section RESPONSIVE).
   ===================================================================================================== */

:root {
  --wn-wine: #1a0616; --wn-wine-2: #4a1238; --wn-plum: #33102c; --wn-rose: #ffb3c7; --wn-rose-10: #fdf1f4;
  --wn-rose-20: #f6c9d6; --wn-btn: #d6335e; --wn-link: #b4235a; --wn-deep: #8e1a47; --wn-bright: #e8466f;
  --wn-page: #f7f2f4; --wn-ink: #1e0a1a; --wn-line: #e8dfe3; --wn-gold: #f6c98e; --wn-white: #fff;
  --wn-r-sm: 14px; --wn-r: 24px; --wn-r-lg: 32px; --wn-r-xl: 40px;
  --wn-ease: cubic-bezier(.2, .7, .2, 1); --wn-ease-out: cubic-bezier(.16, 1, .3, 1);
  --wn-sec-y: 112px;
  --wn-shadow: 0 24px 60px rgba(20, 4, 15, .14);
  --wn-shadow-dark: 0 24px 60px rgba(20, 4, 15, .45);
  /* the homepage hero: wine gradient with crimson glows and two soft light streaks */
  --wn-hero-bg:
    radial-gradient(36% 42% at 48% 0%, #14040f 0%, rgba(20,4,15,0) 85%),
    radial-gradient(28% 34% at 100% 0%, rgba(176,32,92,.80) 0%, rgba(176,32,92,0) 80%),
    radial-gradient(42% 64% at 100% 40%, rgba(176,32,92,1) 0%, rgba(150,28,82,.8) 40%, rgba(110,20,70,0) 82%),
    radial-gradient(26% 36% at 76% 50%, rgba(128,30,78,.6) 0%, rgba(128,30,78,0) 80%),
    radial-gradient(40% 46% at 0% 30%, rgba(70,12,50,1) 0%, rgba(70,12,50,.9) 45%, rgba(70,12,50,0) 85%),
    radial-gradient(26% 32% at 100% 96%, rgba(232,70,111,.40) 0%, rgba(232,70,111,0) 80%),
    linear-gradient(116deg, rgba(0,0,0,0) 20%, rgba(230,120,160,.16) 26%, rgba(0,0,0,0) 32%, rgba(0,0,0,0) 44%, rgba(235,130,170,.12) 50%, rgba(0,0,0,0) 56%),
    linear-gradient(64deg, rgba(0,0,0,0) 55%, rgba(220,110,150,.09) 60%, rgba(0,0,0,0) 66%),
    linear-gradient(180deg, #1a0616 0%, #24091f 30%, #1e0719 52%, #3a0f2c 78%, #4a1238 100%);
  /* the homepage's glass card (.gl) */
  --wn-glass-bg:
    radial-gradient(46% 40% at 20% 18%, rgba(214,51,94,.42) 0%, rgba(214,51,94,0) 75%),
    radial-gradient(38% 36% at 88% 10%, rgba(255,179,199,.16) 0%, rgba(255,179,199,0) 75%),
    radial-gradient(52% 46% at 84% 94%, rgba(142,26,71,.85) 0%, rgba(142,26,71,0) 75%),
    linear-gradient(160deg, #2c0a24 0%, #1a0616 55%, #12030d 100%);
}

/* ---------- page ---------- */
body.wn { background: var(--wn-page); color: var(--body); }
.wn-main { display: block; overflow-x: clip; }
.wn-main img { max-width: 100%; }
.wn-skip { position: fixed; left: 16px; top: -60px; z-index: 100; padding: 10px 16px; border-radius: 999px; background: #fff;
  color: var(--ink); font: 600 15px/1 var(--text); box-shadow: var(--wn-shadow); transition: top .2s var(--wn-ease); }
.wn-skip:focus { top: 12px; }
.wn-sr { position: absolute !important; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* never visible on these pages (owner, 20 Oct 2026): status and sample pills of the homepage chrome */
.mm__soon, .soon, .sd, .mini__s, .sk-sample, .sk-soon { display: none !important; }

/* ---------- type ---------- */
.wn-display { font: 500 88px/92px var(--display); letter-spacing: -2.2px; color: var(--wn-h, var(--ink)); }
.wn-h1 { font: 500 64px/70px var(--display); letter-spacing: -1.4px; color: var(--wn-h, var(--ink)); }
.wn-h2 { font: 500 48px/56px var(--display); letter-spacing: -.96px; color: var(--wn-h, var(--ink)); }
.wn-h2--rose { color: var(--wn-h2, var(--blue)); }
.wn-h3 { font: 500 30px/36px var(--display); letter-spacing: -.5px; color: var(--wn-h, var(--ink)); }
.wn-h4 { font: 600 20px/27px var(--text); letter-spacing: -.2px; color: var(--wn-h, var(--ink)); }
.wn-lead { font: 400 20px/31px var(--text); color: var(--wn-tx, var(--body)); }
.wn-body { font: 400 18px/28px var(--text); color: var(--wn-tx, var(--body)); }
.wn-small { font: 400 14px/20px var(--text); color: var(--wn-mut, var(--grey70)); }
.wn-muted { color: var(--wn-mut, var(--grey70)); }
.wn-num { font-variant-numeric: tabular-nums; }
.wn-kicker { display: inline-flex; align-items: center; gap: 10px; font: 600 14px/18px var(--text); letter-spacing: .08em;
  text-transform: uppercase; color: var(--wn-k, var(--blue)); }
.wn-kicker i { width: 8px; height: 8px; flex: none; border-radius: 50%; background: currentColor; box-shadow: 0 0 0 4px color-mix(in srgb, currentColor 22%, transparent); }
.wn-kicker .bn, .wn-kicker b { text-transform: none; }
.wn-prose p { font: 400 19px/30px var(--text); color: var(--wn-tx, var(--body)); }
.wn-prose p + p { margin-top: 18px; }
.wn-prose b, .wn-prose strong { font-weight: 600; color: var(--wn-h, var(--ink)); }

/* section heads */
.wn-head { display: flex; flex-direction: column; gap: 16px; max-width: 860px; margin-bottom: 56px; }
.wn-head--center { align-items: center; text-align: center; margin-left: auto; margin-right: auto; }
.wn-head .wn-sub { font: 400 20px/30px var(--text); color: var(--wn-mut, var(--grey70)); max-width: 720px; }
.wn-head--flush { margin-bottom: 0; }

/* ---------- sections ---------- */
.wn-sec { position: relative; padding: var(--wn-sec-y) 0; }
.wn-sec--sm { padding: 72px 0; }
.wn-sec--lg { padding: 160px 0; }
.wn-sec--flush-top { padding-top: 0; }
.wn-sec--flush-bottom { padding-bottom: 0; }
.wn-sec--white { background: #fff; }
.wn-sec--page { background: var(--wn-page); }
.wn-sec--rose { background: var(--wn-rose-10); }
/* dark sections: white headings, light rose kickers */
.wn-sec--ink, .wn-sec--wine, .wn-sec--plum, .wn-sec--band, .wn-sec--bright, .wn-hero, .wn-on-dark {
  --wn-h: #fff; --wn-h2: #fff; --wn-k: var(--mint); --wn-tx: rgba(255, 255, 255, .86); --wn-mut: rgba(255, 255, 255, .72); color: #fff; }
.wn-sec--ink { background: var(--wn-ink); }
.wn-sec--plum { background: var(--wn-plum); }
.wn-sec--wine { background: var(--wn-hero-bg); overflow: hidden; }
.wn-sec--band { background: var(--blue); --wn-k: #fff; }
.wn-sec--bright { background: var(--cyan); --wn-k: #fff; }
.wn-sec--band .wn-kicker i, .wn-sec--bright .wn-kicker i { box-shadow: none; }
/* our own fine diagonal line pattern (the homepage's photo panels) on any block */
.wn-lines { background-image: repeating-linear-gradient(135deg, rgba(255,179,199,0) 0 22px, rgba(255,179,199,.12) 22px 23px, rgba(255,179,199,0) 23px 40px); }
.wn-lines--light { background-image: repeating-linear-gradient(135deg, rgba(180,35,90,0) 0 22px, rgba(180,35,90,.07) 22px 23px, rgba(180,35,90,0) 23px 40px); }

/* layout */
.wn-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 72px; align-items: center; }
.wn-split--top { align-items: start; }
.wn-split--wide { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
.wn-split--narrow { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.wn-split > .wn-head { margin-bottom: 0; }
.wn-grid { display: grid; gap: 24px; }
.wn-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.wn-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.wn-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.wn-grid--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.wn-sticky { position: sticky; top: 150px; }

/* ---------- hero ---------- */
.wn-hero { position: relative; isolation: isolate; overflow: hidden; padding: 172px 0 120px; background: var(--wn-hero-bg); }
.wn-hero--light { background: var(--wn-page); --wn-h: var(--ink); --wn-k: var(--blue); --wn-tx: var(--body); --wn-mut: var(--grey70); color: var(--body); }
.wn-hero--rose { background: radial-gradient(60% 70% at 85% 10%, rgba(232,70,111,.18), rgba(232,70,111,0) 70%),
  radial-gradient(50% 60% at 0% 100%, rgba(255,179,199,.45), rgba(255,179,199,0) 70%), var(--wn-rose-10);
  --wn-h: var(--ink); --wn-k: var(--blue); --wn-tx: var(--body); --wn-mut: var(--grey70); color: var(--body); }
.wn-hero__glow { position: absolute; z-index: -1; right: -12%; top: 18%; width: 820px; height: 820px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(232,70,111,.42), rgba(232,70,111,.12) 55%, rgba(232,70,111,0)); }
.wn-hero__grid { display: grid; grid-template-columns: minmax(0, 6fr) minmax(0, 5fr); gap: 64px; align-items: center; }
.wn-hero__solo { max-width: 920px; }
.wn-hero__txt { display: flex; flex-direction: column; gap: 22px; }
.wn-hero__txt .wn-h1, .wn-hero__txt .wn-display { margin-top: 2px; }
.wn-hero__ctas { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 18px; }
.wn-hero__vis { position: relative; min-width: 0; }
.wn-hero .wn-lead { max-width: 640px; }

/* breadcrumbs */
.wn-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; font: 600 14px/18px var(--text); color: var(--grey60); }
.wn-crumbs a { color: var(--blue); transition: color .2s var(--ease-link); }
.wn-crumbs a:hover { color: var(--blue70); text-decoration: underline; text-underline-offset: 4px; }
.wn-crumbs [aria-current] { color: var(--ink); }
/* separators (aria-hidden): grey60 / rose .72 so they still read on the rose and wine heroes (QA 21 Oct: the old
   --divider and rose .45 measured 1.3:1 and 3:1) */
.wn-crumbs__sep { color: var(--grey60); }
.wn-crumbs--dark { color: rgba(255,255,255,.7); }
.wn-crumbs--dark a { color: var(--mint); }
.wn-crumbs--dark a:hover { color: #fff; }
.wn-crumbs--dark [aria-current] { color: #fff; }
.wn-crumbs--dark .wn-crumbs__sep { color: rgba(255,179,199,.72); }

/* ---------- buttons (the homepage's .btn family + these) ---------- */
.btn-sm { min-height: 44px; padding: 10px 20px; font-size: 16px; line-height: 16px; }
.wn-btn-white { background: #fff; border-color: #fff; color: var(--ink); }
.wn-btn-white:hover { background: var(--wn-rose-10); border-color: var(--wn-rose-10); color: var(--blue70); }
.wn-btn-ink { background: var(--ink); border-color: var(--ink); color: #fff; }
.wn-btn-ink:hover { background: var(--blue80); border-color: var(--blue80); }
/* the outlined rose button on the light rose hero: #b4235a measured 4.4:1 over the hero's crimson glow (QA 21 Oct) */
.wn-hero--rose .btn-ghost-blue { color: var(--wn-deep); border-color: var(--wn-deep); }
.wn-hero--rose .btn-ghost-blue:hover { color: var(--blue80); border-color: var(--blue80); }
.btn .wn-arr { width: 18px; height: 18px; flex: none; transition: transform .3s var(--wn-ease-out); }
.btn:hover .wn-arr { transform: translateX(4px); }
.wn-on-dark .tlink, .wn-sec--ink .tlink, .wn-sec--wine .tlink, .wn-sec--plum .tlink, .wn-hero .tlink { color: var(--mint); }
.wn-on-dark .tlink:hover, .wn-sec--ink .tlink:hover, .wn-sec--wine .tlink:hover, .wn-sec--plum .tlink:hover, .wn-hero .tlink:hover { color: #fff; }
.wn-sec--band .tlink, .wn-sec--bright .tlink { color: #fff; }

/* icons */
.wn-ico { display: block; flex: none; }

/* ---------- cards ---------- */
.wn-card { position: relative; display: flex; flex-direction: column; gap: 12px; padding: 32px; border-radius: var(--wn-r);
  background: #fff; border: 1px solid var(--wn-line); color: var(--body);
  transition: transform .45s var(--wn-ease-out), box-shadow .45s var(--wn-ease-out), border-color .3s ease; }
.wn-card p { font: 400 16px/25px var(--text); color: var(--grey70); }
.wn-card .wn-h4 { color: var(--ink); }
a.wn-card:hover, .wn-card--lift:hover { transform: translateY(-6px); box-shadow: var(--wn-shadow); border-color: var(--wn-rose-20); }
.wn-card__ico { width: 48px; height: 48px; flex: none; display: grid; place-items: center; border-radius: 14px; background: var(--wn-rose-10); color: var(--blue); }
.wn-card--rose { background: var(--wn-rose-10); border-color: transparent; }
.wn-card--dark { background: var(--wn-glass-bg); border: 1px solid rgba(255,179,199,.28); color: #fff;
  box-shadow: 0 0 0 1px rgba(232,70,111,.12), 0 0 38px rgba(232,70,111,.18), inset 0 0 46px rgba(232,70,111,.10); }
.wn-card--dark p { color: rgba(255,255,255,.78); }
.wn-card--dark .wn-h4 { color: #fff; }
.wn-card--dark .wn-card__ico { background: rgba(255,179,199,.14); color: var(--mint); }
.wn-card--glass { background: rgba(26,6,22,.62); border: 1px solid rgba(255,179,199,.22); color: #fff; backdrop-filter: blur(6px); }
.wn-card--glass p { color: rgba(255,255,255,.8); }
.wn-card--glass .wn-h4 { color: #fff; }
.wn-glass { border-radius: 18px; background: rgba(26,6,22,.76); border: 1px solid rgba(255,179,199,.2); box-shadow: 0 20px 44px rgba(10,2,8,.5); }

/* ---------- stat row (real numbers only) ---------- */
.wn-stats { display: flex; flex-wrap: wrap; gap: 0; border-top: 1px solid var(--wn-line); }
.wn-stat { flex: 1 1 0; min-width: 180px; padding: 28px 28px 8px 0; display: flex; flex-direction: column; gap: 10px; }
.wn-stat + .wn-stat { padding-left: 28px; border-left: 1px solid var(--wn-line); }
.wn-stat b { font: 500 64px/1 var(--display); letter-spacing: -1.6px; color: var(--blue); font-variant-numeric: tabular-nums; }
.wn-stat span { font: 400 16px/24px var(--text); color: var(--grey70); }
.wn-stats--dark { border-top-color: rgba(255,179,199,.22); }
.wn-stats--dark .wn-stat + .wn-stat { border-left-color: rgba(255,179,199,.22); }
.wn-stats--dark .wn-stat b { color: var(--mint); }
.wn-stats--dark .wn-stat span { color: rgba(255,255,255,.78); }

/* ---------- numbered steps ---------- */
.wn-steps { counter-reset: wns; border-top: 1px solid var(--wn-line); }
.wn-steps > li { counter-increment: wns; display: grid; grid-template-columns: 112px minmax(0, 420px) minmax(0, 1fr); column-gap: 32px;
  align-items: baseline; padding: 32px 0; border-bottom: 1px solid var(--wn-line); }
.wn-steps > li::before { content: counter(wns, decimal-leading-zero); font: 500 44px/1 var(--display); letter-spacing: -1px; color: var(--purple); }
.wn-steps h3 { font: 600 22px/29px var(--text); letter-spacing: -.2px; color: var(--wn-h, var(--ink)); }
.wn-steps p { font: 400 17px/27px var(--text); color: var(--wn-mut, var(--grey70)); max-width: 680px; }
.wn-sec--ink .wn-steps, .wn-sec--wine .wn-steps, .wn-sec--plum .wn-steps, .wn-on-dark .wn-steps,
.wn-sec--ink .wn-steps > li, .wn-sec--wine .wn-steps > li, .wn-sec--plum .wn-steps > li, .wn-on-dark .wn-steps > li { border-color: rgba(255,179,199,.2); }
.wn-sec--ink .wn-steps > li::before, .wn-sec--wine .wn-steps > li::before, .wn-sec--plum .wn-steps > li::before, .wn-on-dark .wn-steps > li::before { color: var(--mint); }

/* ---------- ticked list ---------- */
.wn-ticks { display: grid; gap: 18px; }
.wn-ticks--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 48px; row-gap: 26px; }
.wn-ticks--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 40px; row-gap: 26px; }
.wn-ticks li { display: grid; grid-template-columns: 26px minmax(0, 1fr); column-gap: 14px; align-items: start; }
.wn-tick { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; background: var(--purple); color: #fff; margin-top: 1px; }
.wn-ticks b { display: block; font: 600 18px/26px var(--text); color: var(--wn-h, var(--ink)); }
.wn-ticks div { font: 400 17px/26px var(--text); color: var(--wn-tx, var(--body)); }
.wn-ticks div span { display: block; margin-top: 4px; font: 400 16px/25px var(--text); color: var(--wn-mut, var(--grey70)); }
.wn-sec--ink .wn-tick, .wn-sec--wine .wn-tick, .wn-sec--plum .wn-tick, .wn-on-dark .wn-tick, .wn-hero .wn-tick { background: var(--mint); color: var(--ink); }

/* ---------- chips ---------- */
.wn-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.wn-chip { display: inline-flex; align-items: center; gap: 8px; height: 34px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--wn-line);
  background: #fff; font: 600 14px/1 var(--text); color: var(--grey70); white-space: nowrap; }
.wn-chip--rose { border-color: transparent; background: var(--wn-rose-10); color: var(--blue70); }
.wn-sec--ink .wn-chip, .wn-sec--wine .wn-chip, .wn-sec--plum .wn-chip, .wn-on-dark .wn-chip, .wn-hero .wn-chip {
  border-color: rgba(255,179,199,.32); background: rgba(255,255,255,.07); color: #fff; }

/* ---------- drawn bars (ILLUSTRATIVE charts) ---------- */
.wn-bars { display: flex; flex-direction: column; gap: 14px; }
.wn-bars li { display: grid; grid-template-columns: minmax(0, 200px) minmax(0, 1fr) 56px; gap: 16px; align-items: center; }
.wn-bars__l { font: 400 15px/20px var(--text); color: var(--wn-h, var(--ink)); }
.wn-bars__t { position: relative; height: 12px; border-radius: 999px; background: var(--wn-rose-10); overflow: hidden; }
.wn-bars__t i { position: absolute; inset: 0; border-radius: inherit; background: var(--wn-rose-20); transform-origin: 0 50%; transform: scaleX(var(--v, .5)); }
.wn-bars li.is-hi .wn-bars__t i { background: linear-gradient(90deg, var(--purple), var(--cyan)); }
.wn-bars__v { font: 600 15px/20px var(--text); text-align: right; color: var(--wn-h, var(--ink)); font-variant-numeric: tabular-nums; }
.wn-bars--dark .wn-bars__t { background: rgba(255,255,255,.1); }
.wn-bars--dark .wn-bars__t i { background: rgba(255,179,199,.45); }
.wn-bars--dark li.is-hi .wn-bars__t i { background: linear-gradient(90deg, #d6335e, #ffb3c7); }
.wn-bars--dark .wn-bars__l, .wn-bars--dark .wn-bars__v { color: #fff; }

/* ---------- quote ---------- */
.wn-quote { position: relative; display: flex; flex-direction: column; gap: 18px; padding: 36px 40px; border-radius: var(--wn-r); background: #fff;
  box-shadow: var(--wn-shadow); color: var(--ink); }
.wn-quote__mark { color: var(--purple); }
.wn-quote blockquote { margin: 0; font: 500 26px/36px var(--display); letter-spacing: -.3px; }
.wn-quote figcaption { font: 600 15px/20px var(--text); color: var(--grey60); }

/* ---------- FAQ (native details) ---------- */
.wn-faq { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 7fr); gap: 72px; align-items: start; }
.wn-faq__h { position: sticky; top: 150px; }
.wn-faq__h .wn-head { margin-bottom: 0; }
.wn-faq__item { border-top: 1px solid var(--wn-line); }
.wn-faq__item:last-child { border-bottom: 1px solid var(--wn-line); }
.wn-faq__item summary { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 26px 0; cursor: pointer; list-style: none;
  font: 500 21px/29px var(--display); letter-spacing: -.2px; color: var(--wn-h, var(--ink)); transition: color .2s ease; }
.wn-faq__item summary::-webkit-details-marker { display: none; }
.wn-faq__item summary:hover { color: var(--blue); }
.wn-faq__item summary i { width: 34px; height: 34px; flex: none; display: grid; place-items: center; border-radius: 50%; background: var(--wn-rose-10);
  color: var(--blue); transition: transform .35s var(--wn-ease-out), background-color .2s ease, color .2s ease; }
.wn-faq__item[open] summary i { transform: rotate(45deg); background: var(--purple); color: #fff; }
.wn-faq__a { padding: 0 64px 28px 0; }
.wn-faq__a p { font: 400 18px/29px var(--text); color: var(--wn-tx, var(--body)); }
.wn-faq__item[open] .wn-faq__a { animation: wn-open .45s var(--wn-ease-out); }
@keyframes wn-open { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }

/* ---------- closing CTA ---------- */
.wn-cta { padding: 40px 0 120px; }
.wn-cta__box { position: relative; isolation: isolate; overflow: hidden; display: flex; flex-direction: column; align-items: center; gap: 18px;
  padding: 104px 64px 72px; border-radius: var(--wn-r-xl); background: var(--wn-hero-bg); color: #fff; text-align: center;
  --wn-h: #fff; --wn-tx: rgba(255,255,255,.86); }
.wn-cta__box .wn-h2 { max-width: 900px; }
.wn-cta__box .wn-lead { max-width: 720px; }
.wn-cta__glow { position: absolute; z-index: -1; left: 50%; top: 40%; width: 900px; height: 520px; margin-left: -450px; border-radius: 50%; pointer-events: none;
  background: radial-gradient(closest-side, rgba(232,70,111,.48), rgba(232,70,111,0)); }
.wn-cta__btns { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px; margin-top: 18px; }
.wn-cta__office { display: inline-flex; align-items: center; gap: 8px; margin-top: 18px; font: 400 15px/20px var(--text); color: rgba(255,255,255,.72); }
.wn-cta__office svg { color: var(--mint); }
.wn-cta--band { padding: 0; }
.wn-cta--band .wrap { max-width: none; padding: 0; }
/* the bright band: #e8466f only in the top-left corner; deeper crimson where the copy sits, a wine shade (not a
   crimson glow) behind it, and solid white copy, so the lead and the office line keep 4.5:1 against the real pixels
   (QA 21 Oct: white .86 / .72 measured 4.47:1 / 3.3:1; even pure white on #e8466f is only 3.8:1) */
.wn-cta--band .wn-cta__box { border-radius: 0; --wn-tx: #fff;
  background: radial-gradient(60% 80% at 82% 0%, rgba(255,179,199,.22), rgba(255,179,199,0) 70%),
  linear-gradient(150deg, #e8466f 0%, #c42c5c 16%, #a51f55 55%, #7d1640 100%); }
.wn-cta--band .wn-cta__glow { background: radial-gradient(closest-side, rgba(94,15,46,.38), rgba(94,15,46,0)); }
.wn-cta--band .wn-lead { color: #fff; }
.wn-cta--band .wn-cta__office { color: #fff; font-weight: 500; }
.wn-cta--band .wn-cta__office svg { color: #fff; }

/* ---------- related / link cards ---------- */
.wn-related { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.wn-related--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.wn-rcard { position: relative; display: flex; flex-direction: column; gap: 10px; min-height: 236px; padding: 28px 28px 72px; border-radius: var(--wn-r);
  background: #fff; border: 1px solid var(--wn-line); color: var(--body);
  transition: transform .45s var(--wn-ease-out), box-shadow .45s var(--wn-ease-out), border-color .3s ease, background-color .3s ease; }
.wn-rcard:hover { transform: translateY(-6px); box-shadow: var(--wn-shadow); border-color: var(--wn-rose-20); }
.wn-rcard__k { font: 600 12px/16px var(--text); letter-spacing: .08em; text-transform: uppercase; color: var(--blue); }
.wn-rcard b { font: 500 24px/30px var(--display); letter-spacing: -.3px; color: var(--ink); }
.wn-rcard__d { font: 400 15px/23px var(--text); color: var(--grey70); }
.wn-rcard__go { position: absolute; left: 28px; bottom: 26px; color: var(--blue); transition: transform .35s var(--wn-ease-out); }
.wn-rcard:hover .wn-rcard__go { transform: translateX(6px); }
.wn-rcard--hub { background: var(--wn-glass-bg); border-color: rgba(255,179,199,.3); }
.wn-rcard--hub .wn-rcard__k { color: var(--mint); }
.wn-rcard--hub b { color: #fff; }
.wn-rcard--hub .wn-rcard__d { color: rgba(255,255,255,.78); }
.wn-rcard--hub .wn-rcard__go { color: var(--mint); }

/* ---------- kit visuals (recoloured solution kit) ---------- */
.wn-vis { position: relative; height: 560px; border-radius: 28px; }
.wn-vis--sm { height: 440px; }
.wn-vis--lg { height: 640px; }
.wn-vis--auto { height: auto; }
.sk.wkit { display: block; background: transparent; color: inherit; font-family: var(--text); letter-spacing: 0;
  --sk-font: var(--text); --sk-display: var(--display); --sk-display-w: 500; --sk-mono: var(--text);
  --sk-ok: #ffb3c7; --sk-ok-ink: #1e0a1a; --sk-paper: transparent; }
.wn-vis > .sk.wkit { height: 100%; }
.wn-vis > .sk.wkit > .fpanel { height: 100%; }
.wn-vis--auto > .sk.wkit > .fpanel { height: auto; }
/* the drawn scenes at landing-page size (as build.py's .xp-vis tuning) */
.wn-vis .sv .card { width: 84%; padding: 24px 26px; }
.wn-vis .sv3 .card:not(.mid) { left: 37%; width: 58%; }
.wn-vis .sv3 .quote { right: 3%; width: 30%; }
.wn-vis .sv .ttl { font-size: 22px; font-weight: 500; }
.wn-vis .sv4 .orbit { scale: .82; }
.wn-vis .cv-tiles { width: 88%; gap: 10px; }
.wn-vis .sv2 .ppl .pp { width: 100px; height: 100px; }
.wn-vis .sv2 .spk .pp { width: 156px; height: 156px; }
.wn-vis .cv-say { font-size: 14px; max-width: 54%; }

/* ---------- marquee (data-marquee: wine-motion.js doubles the children and pauses it off screen) ---------- */
.wn-marquee { overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.wn-marquee__track { display: flex; gap: 20px; width: max-content; }
html.wm-on .wn-marquee.is-looping .wn-marquee__track { animation: wm-marquee var(--wm-dur, 50s) linear infinite; }
html.wm-on .wn-marquee.is-looping:hover .wn-marquee__track, html.wm-on .wn-marquee.is-looping:not(.is-live) .wn-marquee__track { animation-play-state: paused; }
@keyframes wm-marquee { to { transform: translate3d(calc(-50% - 10px), 0, 0); } }

/* ---------- website forms (22 Oct 2026: wine-forms.js posts them to /forms/send.php, which emails info@) ----------
   .wf-hp       the honeypot field: off screen for people, still in the form for bots
   .wf-status   the answer after Send (filled by wine-forms.js): --ok, --err, --info (review copy)
   .wf-sent     the same answers for a form posted without JavaScript: send.php redirects to ?sent=1#sent-<form id>
                (or ?sent=0#notsent-<form id>) and the line with that id shows through :target
   .wf-privacy  the line under each form ("We use your details only to reply to you. ...") */
.wf-hp { position: absolute !important; left: -10000px !important; top: auto !important; width: 1px !important;
  height: 1px !important; overflow: hidden !important; }
.wf-status, .wf-sent:target { margin-top: 16px; padding: 12px 16px; border-radius: 14px; background: var(--wn-rose-10);
  font: 400 15px/22px var(--text, Inter, sans-serif); color: var(--wn-ink); }
.wf-status[hidden], .wf-sent { display: none; }
.wf-sent:target { display: block; scroll-margin-top: 120px; }
.wf-status--err, .wf-sent--err:target { background: #fff5f6; box-shadow: inset 0 0 0 1px #e9b8c6; }
.wf-status a, .wf-sent a, .wf-privacy a { color: var(--wn-link); font-weight: 600; text-decoration: underline;
  text-underline-offset: 3px; }
.wf-privacy { margin-top: 14px; font: 400 14px/21px var(--text, Inter, sans-serif); color: var(--grey70, #6b5a65); }
form[aria-busy="true"] [type="submit"] { opacity: .6; cursor: progress; }
@media (max-width: 767.98px) {
  .wf-status, .wf-sent:target, .wf-privacy { font-size: 16px; line-height: 24px; }
}

/* =====================================================================================================
   MOTION (wine-motion.js). Everything below is armed only when <html> has .wm-on (set in <head> before the
   first paint, removed again if wine-motion.js never starts); without it every element is visible and still.
   transform and opacity only (blur reveals use filter; data-draw animates stroke-dashoffset of small SVGs).
   ===================================================================================================== */
@property --wm-p { syntax: '<number>'; inherits: false; initial-value: 1; }
@property --wm-c { syntax: '<number>'; inherits: false; initial-value: .5; }
:root { --wm-ease: cubic-bezier(.16, 1, .3, 1); }

/* 1. reveals (one-shot, IntersectionObserver): data-reveal="up|down|left|right|scale|blur|fade|tilt|stagger|bars" */
html.wm-on [data-reveal] { transition: opacity .9s var(--wm-ease), transform 1s var(--wm-ease), filter .9s var(--wm-ease);
  transition-delay: var(--wm-delay, 0ms); }
html.wm-on [data-reveal]:not([data-reveal="stagger"]):not([data-reveal="bars"]):not(.is-in) { opacity: 0; }
html.wm-on [data-reveal="up"]:not(.is-in) { transform: translate3d(0, 48px, 0); }
html.wm-on [data-reveal="down"]:not(.is-in) { transform: translate3d(0, -40px, 0); }
html.wm-on [data-reveal="left"]:not(.is-in) { transform: translate3d(-72px, 0, 0); }
html.wm-on [data-reveal="right"]:not(.is-in) { transform: translate3d(72px, 0, 0); }
html.wm-on [data-reveal="scale"]:not(.is-in) { transform: scale(.9); }
html.wm-on [data-reveal="blur"]:not(.is-in) { filter: blur(16px); transform: scale(1.04); }
html.wm-on [data-reveal="tilt"]:not(.is-in) { transform: perspective(1400px) rotateX(16deg) translate3d(0, 56px, 0); transform-origin: 50% 100%; }
/* stagger: the direct children come in one after another (data-stagger="up|scale|left|right|blur" picks how) */
html.wm-on [data-reveal="stagger"] > * { transition: opacity .8s var(--wm-ease), transform .9s var(--wm-ease), filter .8s var(--wm-ease);
  transition-delay: calc(var(--wm-i, 0) * var(--wm-step, 90ms) + var(--wm-delay, 0ms)); }
html.wm-on [data-reveal="stagger"]:not(.is-in) > * { opacity: 0; transform: translate3d(0, 36px, 0); }
html.wm-on [data-reveal="stagger"][data-stagger="scale"]:not(.is-in) > * { transform: scale(.88); }
html.wm-on [data-reveal="stagger"][data-stagger="left"]:not(.is-in) > * { transform: translate3d(-48px, 0, 0); }
html.wm-on [data-reveal="stagger"][data-stagger="right"]:not(.is-in) > * { transform: translate3d(48px, 0, 0); }
html.wm-on [data-reveal="stagger"][data-stagger="blur"]:not(.is-in) > * { filter: blur(12px); transform: none; }
/* bars: .wn-bars (or any [data-reveal="bars"] holding <i style="--v:.62">) grow from 0; data-step-ms="40" on the
   bars block sets the gap between bars (default 110ms; wine-motion.js copies it to --wm-bstep) */
html.wm-on [data-reveal="bars"] i { transition: transform 1.3s var(--wm-ease); transition-delay: calc(var(--wm-i, 0) * var(--wm-bstep, 110ms) + 150ms); }
html.wm-on [data-reveal="bars"]:not(.is-in) i { transform: scaleX(0); }
html.wm-on [data-reveal="bars"][data-axis="y"] i { transform-origin: 50% 100%; }
html.wm-on [data-reveal="bars"][data-axis="y"].is-in i { transform: scaleY(var(--v, 1)); }
html.wm-on [data-reveal="bars"][data-axis="y"]:not(.is-in) i { transform: scaleY(0); }
/* split headlines: data-split wraps each word; the words rise into place */
.wm-w { display: inline-block; overflow: hidden; vertical-align: top; padding-bottom: .08em; margin-bottom: -.08em; }
.wm-w > span { display: inline-block; }
html.wm-on [data-split] .wm-w > span { transition: transform 1s var(--wm-ease), opacity .8s var(--wm-ease);
  transition-delay: calc(var(--wm-i, 0) * 55ms + var(--wm-delay, 0ms)); }
html.wm-on [data-split]:not(.is-in) .wm-w > span { transform: translate3d(0, 105%, 0); opacity: 0; }

/* 2. scrubbed by scroll: data-scrub="fade-up|scale-in|zoom-out|slide-left|slide-right|tilt|rotate" and data-parallax
   ("0.2" = speed; negative = against the scroll). --wm-p / --wm-c run 0 -> 1 while the element crosses the view:
   CSS scroll-driven animations where supported (html.wm-sda), else wine-motion.js sets them on scroll. */
@keyframes wm-p { from { --wm-p: 0; } to { --wm-p: 1; } }
@keyframes wm-c { from { --wm-c: 0; } to { --wm-c: 1; } }
html.wm-on.wm-sda [data-scrub] { animation: wm-p linear both; animation-timeline: view(); animation-range: entry 0% cover 48%; }
html.wm-on.wm-sda [data-parallax] { animation: wm-c linear both; animation-timeline: view(); animation-range: cover 0% cover 100%; }
html.wm-on [data-scrub="fade-up"] { opacity: calc(.1 + .9 * var(--wm-p)); transform: translate3d(0, calc((1 - var(--wm-p)) * 90px), 0); }
html.wm-on [data-scrub="scale-in"] { opacity: calc(.25 + .75 * var(--wm-p)); transform: scale(calc(.82 + .18 * var(--wm-p))); }
html.wm-on [data-scrub="zoom-out"] { transform: scale(calc(1.2 - .2 * var(--wm-p))); }
html.wm-on [data-scrub="slide-left"] { opacity: calc(.2 + .8 * var(--wm-p)); transform: translate3d(calc((1 - var(--wm-p)) * 160px), 0, 0); }
html.wm-on [data-scrub="slide-right"] { opacity: calc(.2 + .8 * var(--wm-p)); transform: translate3d(calc((1 - var(--wm-p)) * -160px), 0, 0); }
html.wm-on [data-scrub="tilt"] { transform: perspective(1600px) rotateX(calc((1 - var(--wm-p)) * 28deg)) scale(calc(.88 + .12 * var(--wm-p)));
  transform-origin: 50% 100%; }
html.wm-on [data-scrub="rotate"] { transform: rotate(calc((1 - var(--wm-p)) * -10deg)); }
html.wm-on [data-parallax] { transform: translate3d(0, calc((.5 - var(--wm-c)) * var(--wm-speed, .2) * 320px), 0); will-change: transform; }

/* 3. data-draw: the SVG's paths draw themselves while it scrolls through (wine-motion.js sets pathLength="1") */
html.wm-on [data-draw] .wm-draw { stroke-dasharray: 1 1; stroke-dashoffset: calc(1 - var(--wm-d, 1)); }
html.wm-on.wm-sda [data-draw] { view-timeline: --wm-dt block; }
html.wm-on.wm-sda [data-draw] .wm-draw { animation: wm-draw linear both; animation-timeline: --wm-dt; animation-range: entry 10% cover 55%; }
@keyframes wm-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }

/* 4. pinned scroll story: <section class="wm-pin" data-pin data-steps="4"><div class="wm-pin__sticky"> ...
   [data-step="0..n-1"] ... </div></section>. The section is n screens tall, the stage sticks, the step whose turn
   it is gets .is-active (earlier ones .is-past); --wm-pin (0 -> 1) is on the section for progress bars.
   Without JS: no pinning, every step shows in order. */
html.wm-on .wm-pin { height: calc(var(--wm-steps, 3) * var(--wm-step-h, 85vh) + 100vh); }
html.wm-on .wm-pin__sticky { position: sticky; top: 0; height: 100vh; overflow: hidden; }
html.wm-on .wm-pin__layers { display: grid; }
html.wm-on .wm-pin__layers > * { grid-area: 1 / 1; }
html.wm-on .wm-pin [data-step] { transition: opacity .6s var(--wm-ease), transform .8s var(--wm-ease); }
html.wm-on .wm-pin [data-step]:not(.is-active) { opacity: 0; transform: translate3d(0, 32px, 0); pointer-events: none; }
html.wm-on .wm-pin [data-step].is-past:not(.is-active) { transform: translate3d(0, -32px, 0); }
html.wm-on .wm-pin .wm-keep[data-step].is-past { opacity: 1; transform: none; }   /* .wm-keep: stays once shown */
.wm-pin__bar { height: 3px; border-radius: 3px; background: rgba(255,179,199,.2); overflow: hidden; }
.wm-pin__bar i { display: block; height: 100%; background: linear-gradient(90deg, #d6335e, #ffb3c7); transform-origin: 0 50%; transform: scaleX(var(--wm-pin, 0)); }

/* 5. horizontal scroll: <section class="wm-h" data-hscroll><div class="wm-h__sticky"><div class="wm-h__track">cards
   </div></div></section>: vertical scrolling moves the track sideways while the stage sticks. Without JS: a
   sideways-scrolling row. */
.wm-h__track { display: flex; gap: 24px; width: max-content; }
.wm-h__sticky { overflow-x: auto; }
html.wm-on .wm-h { height: calc(100vh + var(--wm-h-dist, 0px)); }
html.wm-on .wm-h__sticky { position: sticky; top: 0; height: 100vh; overflow: hidden; display: flex; flex-direction: column; justify-content: center; }
html.wm-on .wm-h__track { transform: translate3d(calc(var(--wm-hp, 0) * var(--wm-h-dist, 0px) * -1), 0, 0); will-change: transform; }

/* 6. card stack: <div class="wm-stack" data-stack> <article class="wm-stack__card"> ... : each card sticks a little
   lower than the one before and shrinks back as the next one covers it. */
html.wm-on .wm-stack__card { position: sticky; top: calc(var(--wm-stack-top, 150px) + var(--wm-i, 0) * 22px);
  transform: scale(calc(1 - var(--wm-cover, 0) * .07)); transform-origin: 50% 0; }
html.wm-on .wm-stack__card::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: #1e0a1a;
  opacity: calc(var(--wm-cover, 0) * .32); }
.wm-stack { display: flex; flex-direction: column; gap: 40px; }
.wm-stack__card { position: relative; }

/* 7. tilt on hover: data-tilt (cards, visuals) */
html.wm-on [data-tilt] { transition: transform .5s var(--wm-ease); transform: perspective(1200px) rotateX(var(--wm-rx, 0deg)) rotateY(var(--wm-ry, 0deg)); }

/* 8. scroll progress bar (added by wine-motion.js unless <body> has .wn-noprogress) */
.wm-progress { position: fixed; z-index: 70; left: 0; right: 0; top: 0; height: 3px; pointer-events: none; }
.wm-progress i { display: block; height: 100%; background: linear-gradient(90deg, #b4235a, #e8466f 55%, #ffb3c7); transform-origin: 0 50%; transform: scaleX(var(--wm-sp, 0)); }
html.wm-on.wm-sda .wm-progress i { animation: wm-grow linear both; animation-timeline: scroll(root block); }
@keyframes wm-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }

/* 9. loops only while visible: data-play gets .is-live on screen; CSS loops inside pause otherwise (WCAG 2.2.2) */
html.wm-on [data-play]:not(.is-live) *, html.wm-on [data-play]:not(.is-live) *::before, html.wm-on [data-play]:not(.is-live) *::after { animation-play-state: paused !important; }

/* 10. LITE motion (21 Oct 2026): below 1024px and on touch screens wine-motion.js swaps html.wm-on for html.wm-lite.
   Only the one-shot reveals run there, every direction as a short rise (no sideways moves that could push the page
   wider); pinned stories, sideways stages, stacks, parallax, scrubbing, drawing and tilt keep their static layout. */
html.wm-lite [data-reveal], html.wm-lite [data-split] { transition: opacity .6s var(--wm-ease), transform .7s var(--wm-ease);
  transition-delay: var(--wm-delay, 0ms); }
html.wm-lite [data-reveal]:not([data-reveal="stagger"]):not([data-reveal="bars"]):not(.is-in),
html.wm-lite [data-split]:not([data-reveal]):not(.is-in) { opacity: 0; transform: translate3d(0, 18px, 0); }
html.wm-lite [data-reveal="fade"]:not(.is-in), html.wm-lite [data-reveal="blur"]:not(.is-in) { transform: none; }
html.wm-lite [data-reveal="scale"]:not(.is-in) { transform: scale(.97); }
html.wm-lite [data-reveal="stagger"] > * { transition: opacity .5s var(--wm-ease), transform .6s var(--wm-ease);
  transition-delay: calc(min(var(--wm-i, 0), 6) * 60ms + var(--wm-delay, 0ms)); }
html.wm-lite [data-reveal="stagger"]:not(.is-in) > * { opacity: 0; transform: translate3d(0, 14px, 0); }
html.wm-lite [data-reveal="bars"] i { transition: transform .9s var(--wm-ease); transition-delay: calc(min(var(--wm-i, 0), 10) * 60ms + 100ms); }
html.wm-lite [data-reveal="bars"]:not(.is-in) i { transform: scaleX(0); }
html.wm-lite [data-reveal="bars"][data-axis="y"] i { transform-origin: 50% 100%; }
html.wm-lite [data-reveal="bars"][data-axis="y"].is-in i { transform: scaleY(var(--v, 1)); }
html.wm-lite [data-reveal="bars"][data-axis="y"]:not(.is-in) i { transform: scaleY(0); }
html.wm-lite .wn-marquee.is-looping .wn-marquee__track { animation: wm-marquee var(--wm-dur, 50s) linear infinite; }
html.wm-lite .wn-marquee.is-looping:not(.is-live) .wn-marquee__track { animation-play-state: paused; }
html.wm-lite [data-play]:not(.is-live) *, html.wm-lite [data-play]:not(.is-live) *::before, html.wm-lite [data-play]:not(.is-live) *::after { animation-play-state: paused !important; }
html.wm-lite.wm-sda .wm-progress i { animation: wm-grow linear both; animation-timeline: scroll(root block); }
/* the hero (and the first section of a page without .wn-hero) on small screens: shown at first paint, before
   wine-motion.js runs (the <head> snippet arms html.wm-on), so its text never waits for a reveal and nothing moves */
@media (max-width: 1023.98px), (hover: none) and (pointer: coarse) {
  html:is(.wm-on, .wm-lite) :is(.wn-hero, .wn-main > section:first-of-type) [data-reveal]:not([data-reveal="stagger"]):not([data-reveal="bars"]):not(.is-in),
  html:is(.wm-on, .wm-lite) :is(.wn-hero, .wn-main > section:first-of-type) [data-reveal="stagger"]:not(.is-in) > *,
  html:is(.wm-on, .wm-lite) :is(.wn-hero, .wn-main > section:first-of-type) [data-split]:not(.is-in),
  html:is(.wm-on, .wm-lite) :is(.wn-hero, .wn-main > section:first-of-type) [data-split]:not(.is-in) .wm-w > span {
    opacity: 1; transform: none; filter: none; transition: none; }
}

/* static: reduced motion, ?static=1, print */
@media (prefers-reduced-motion: reduce) {
  html [data-reveal], html [data-reveal]:not([data-reveal="bars"]) > *, html [data-split] .wm-w > span, html [data-scrub], html [data-parallax], html [data-tilt],
  html .wm-pin [data-step] { opacity: 1 !important; transform: none !important; filter: none !important;
    animation: none !important; transition: none !important; }
  /* bars keep their resting length (scaleX(var(--v)) / scaleY / width, as on ?static=1): only the movement stops */
  html [data-reveal="bars"] i { animation: none !important; transition: none !important; }
  html [data-draw] .wm-draw { stroke-dasharray: none !important; animation: none !important; }
  html .wm-pin, html .wm-h { height: auto !important; }
  html .wm-pin__sticky, html .wm-h__sticky, html .wm-stack__card { position: relative !important; height: auto !important; }
  .wn-marquee__track { animation: none !important; }
}
@media print {
  html.wm-on [data-reveal], html.wm-on [data-reveal] > *, html.wm-on [data-split] .wm-w > span { opacity: 1 !important; transform: none !important; filter: none !important; }
  html.wm-lite [data-reveal], html.wm-lite [data-reveal] > *, html.wm-lite [data-split] { opacity: 1 !important; transform: none !important; filter: none !important; }
}

/* =====================================================================================================
   RESPONSIVE: the shared components on small laptops, tablets and phones (breakpoints: the block at the top).
   Template blocks (t-*.css) load after this file and fix their own parts with the same breakpoints.
   ===================================================================================================== */
/* for templates: a wide table or drawing scrolls inside this box, never the page (no page uses it yet) */
.wn-tscroll { max-width: 100%; overflow-x: auto; overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch; }

/* ---------- 1200: small laptop ---------- */
@media (max-width: 1199.98px) {
  /* headings scale with the screen (equal to the desktop sizes at 1200, about 60% of them at 390) */
  .wn-display { font-size: clamp(40px, 5.43vw + 22.8px, 88px); line-height: 1.05; letter-spacing: -.025em; }
  .wn-h1 { font-size: clamp(34px, 3.21vw + 25.5px, 64px); line-height: 1.1; letter-spacing: -.022em; }
  .wn-h2 { font-size: clamp(28px, 1.98vw + 24.3px, 48px); line-height: 1.18; letter-spacing: -.02em; }
  .wn-h3 { font-size: clamp(22px, .74vw + 21.1px, 30px); line-height: 1.2; letter-spacing: -.016em; }
  .wn-split { gap: 56px; }
  .wn-hero__grid { gap: 48px; }
  .wn-faq { gap: 56px; }
  .wn-grid--5 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .wn-steps > li { grid-template-columns: 96px minmax(0, 360px) minmax(0, 1fr); column-gap: 28px; }
  /* related-card titles: a long word ("Segmentation", "Programming & hosting") wraps inside its card at 1024 */
  .wn-rcard b { font-size: 21px; line-height: 27px; overflow-wrap: anywhere; }
}

/* ---------- 1024: tablet landscape and below ---------- */
@media (max-width: 1023.98px) {
  :root { --wn-sec-y: 96px; }
  .wn-sec--sm { padding: 64px 0; }
  .wn-sec--lg { padding: 120px 0; }
  .wn-head { margin-bottom: 44px; }
  .wn-head--flush { margin-bottom: 0; }
  /* text + picture splits stack (the picture follows the text) */
  .wn-split, .wn-split--wide, .wn-split--narrow { grid-template-columns: minmax(0, 1fr); gap: 48px; }
  .wn-grid--3, .wn-grid--4, .wn-grid--5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wn-sticky { position: static; }
  /* hero: one column, the visual under the text */
  .wn-hero { padding: var(--wn-hdr-clear, 96px) 0 88px; }
  .wn-hero__grid { grid-template-columns: minmax(0, 1fr); gap: 48px; }
  .wn-hero__solo { max-width: 760px; }
  .wn-hero__glow { width: 640px; height: 640px; right: -30%; }
  /* the closing CTA's office line reads at 16px on tablets too (phone agents, 21 Oct 2026) */
  .wn-cta__office { font-size: 16px; line-height: 22px; }
  /* stat row: four still fit side by side */
  .wn-stat { min-width: 140px; padding: 24px 20px 8px 0; }
  .wn-stat + .wn-stat { padding-left: 20px; }
  .wn-stat b { font-size: 52px; letter-spacing: -1.3px; }
  /* numbered steps: number | title and text */
  .wn-steps > li { grid-template-columns: 80px minmax(0, 1fr); column-gap: 24px; row-gap: 8px; }
  .wn-steps > li::before { grid-row: 1 / span 2; font-size: 38px; }
  .wn-steps > li > * { grid-column: 2; }
  .wn-ticks--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* FAQ: the heading above the questions, no sticky column */
  .wn-faq { grid-template-columns: minmax(0, 1fr); gap: 36px; }
  .wn-faq__h { position: static; }
  .wn-faq__a { padding-right: 32px; }
  /* closing CTA */
  .wn-cta { padding: 32px 0 96px; }
  .wn-cta__box { padding: 88px 48px 64px; border-radius: var(--wn-r-lg); }
  /* related cards: two columns */
  .wn-related, .wn-related--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* kit visuals */
  .wn-vis { height: 500px; }
  .wn-vis--sm { height: 420px; }
  .wn-vis--lg { height: 560px; }
  .wn-vis--auto { height: auto; }
  /* media never wider than its column */
  .wn-main video, .wn-main canvas, .wn-main iframe { max-width: 100%; }
}

/* ---------- 768: tablet portrait, phones in landscape ---------- */
@media (max-width: 767.98px) {
  :root { --wn-sec-y: 72px; }
  /* a long word (a URL, a product code) breaks instead of running out of a shared block */
  .wn-prose, .wn-faq, .wn-card, .wn-rcard, .wn-quote, .wn-cta__box, .wn-ticks, .wn-steps { overflow-wrap: break-word; }
  .wn-sec--sm { padding: 56px 0; }
  .wn-sec--lg { padding: 96px 0; }
  /* text: never under 16px for reading copy */
  .wn-lead { font-size: 18px; line-height: 28px; }
  .wn-body { font-size: 17px; line-height: 27px; }
  .wn-prose p { font-size: 17px; line-height: 28px; }
  .wn-prose p + p { margin-top: 16px; }
  .wn-head { gap: 12px; margin-bottom: 36px; }
  .wn-head--flush { margin-bottom: 0; }
  .wn-head .wn-sub { font-size: 18px; line-height: 28px; }
  .wn-split, .wn-split--wide, .wn-split--narrow { gap: 36px; }
  .wn-grid { gap: 16px; }
  .wn-grid--2, .wn-grid--3, .wn-grid--4, .wn-grid--5 { grid-template-columns: minmax(0, 1fr); }
  /* hero */
  .wn-hero { padding: var(--wn-hdr-clear-m, 88px) 0 64px; }
  .wn-hero__txt { gap: 18px; }
  .wn-hero__ctas { margin-top: 10px; gap: 12px; }
  .wn-hero__glow { width: 480px; height: 480px; right: -45%; top: 8%; }
  .wn-crumbs { column-gap: 8px; row-gap: 6px; }
  /* cards */
  .wn-card { padding: 24px; }
  /* stat row: two by two (an odd last one takes the full row) */
  .wn-stats { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wn-stat { min-width: 0; padding: 20px 16px 16px 0; }
  .wn-stat + .wn-stat { padding-left: 0; border-left: 0; }
  .wn-stat:nth-child(2n) { padding-left: 16px; border-left: 1px solid var(--wn-line); }
  .wn-stat:nth-child(n+3) { border-top: 1px solid var(--wn-line); }
  .wn-stat:last-child:nth-child(odd) { grid-column: 1 / -1; }
  .wn-stats--dark .wn-stat:nth-child(n+3) { border-top-color: rgba(255,179,199,.22); }
  .wn-stat b { font-size: clamp(34px, 8vw + 6px, 48px); letter-spacing: -.025em; }
  /* numbered steps */
  .wn-steps > li { grid-template-columns: 52px minmax(0, 1fr); column-gap: 14px; padding: 24px 0; }
  .wn-steps > li::before { font-size: 30px; }
  .wn-steps h3 { font-size: 20px; line-height: 27px; }
  .wn-steps p { font-size: 16px; line-height: 25px; }
  /* ticked lists and chips */
  .wn-ticks--2, .wn-ticks--3 { grid-template-columns: minmax(0, 1fr); row-gap: 20px; }
  .wn-chip { height: auto; min-height: 34px; padding: 8px 14px; line-height: 18px; white-space: normal; }
  /* drawn bars: label and value on one line, the bar under them */
  .wn-bars li { grid-template-columns: minmax(0, 1fr) auto; column-gap: 12px; row-gap: 8px; }
  .wn-bars__l { grid-column: 1; grid-row: 1; }
  .wn-bars__v { grid-column: 2; grid-row: 1; }
  .wn-bars__t { grid-column: 1 / -1; grid-row: 2; }
  /* quote */
  .wn-quote { padding: 28px 24px; gap: 14px; }
  .wn-quote blockquote { font-size: 21px; line-height: 30px; }
  /* FAQ */
  .wn-faq { gap: 28px; }
  .wn-faq__item summary { gap: 16px; padding: 20px 0; font-size: 18px; line-height: 26px; }
  .wn-faq__a { padding: 0 0 24px; }
  .wn-faq__a p { font-size: 17px; line-height: 27px; }
  /* closing CTA */
  .wn-cta { padding: 24px 0 72px; }
  .wn-cta__box { padding: 64px 24px 48px; gap: 14px; border-radius: 28px; }
  .wn-cta__glow { width: 560px; height: 380px; margin-left: -280px; }
  .wn-cta__btns { margin-top: 10px; gap: 12px; }
  .wn-cta__office { flex-wrap: wrap; justify-content: center; margin-top: 10px; font-size: 16px; line-height: 22px; }
  /* related cards: one column */
  .wn-related, .wn-related--3 { grid-template-columns: minmax(0, 1fr); gap: 14px; }
  .wn-rcard { min-height: 0; padding: 24px 24px 64px; }
  .wn-rcard b { font-size: 21px; line-height: 27px; }
  .wn-rcard__go { left: 24px; bottom: 22px; }
  /* kit visuals */
  .wn-vis { height: 420px; border-radius: 22px; }
  /* the offices map (wine-kit.css .sk-map, generated from the kit): its city names drawn at about 8px on a phone read at
     12px or more, centred over their pins so none runs past the edge; the role lines under them (6px) are left out, the
     page text names each office's role (21 Oct 2026) */
  .wkit .sk-map svg text { font-size: 25px; text-anchor: middle; }
  .wkit .sk-map svg text.r { display: none; }
  .wn-vis--sm { height: 360px; }
  .wn-vis--lg { height: 460px; }
  .wn-vis--auto { height: auto; }
  /* code and tables scroll inside their box, never the page */
  .wn-main pre { max-width: 100%; overflow-x: auto; }
  .wn-prose table, .wn-table { display: block; max-width: 100%; overflow-x: auto; }
}

/* ---------- 480: phone ---------- */
@media (max-width: 479.98px) {
  :root { --wn-sec-y: 64px; }
  .wn-sec--sm { padding: 48px 0; }
  .wn-head { margin-bottom: 32px; }
  .wn-head--flush { margin-bottom: 0; }
  /* button rows: one full-width button per line; long labels wrap instead of running off the screen */
  .wn-hero__ctas, .wn-cta__btns { flex-direction: column; align-items: stretch; align-self: stretch; }
  .wn-hero__ctas > .btn, .wn-cta__btns > .btn { width: 100%; }
  .wn-hero__ctas > :not(.btn) { align-self: flex-start; }
  .wn-cta__btns > :not(.btn) { align-self: center; }
  .wn-main .btn { max-width: 100%; white-space: normal; text-align: center; }
  .wn-card { padding: 22px 20px; }
  .wn-quote { padding: 24px 20px; }
  .wn-cta__box { padding: 56px 20px 40px; border-radius: 24px; }
  .wn-rcard { padding: 22px 20px 60px; }
  .wn-rcard__go { left: 20px; }
  .wn-steps > li { grid-template-columns: 44px minmax(0, 1fr); column-gap: 12px; }
  .wn-steps > li::before { font-size: 26px; }
}

/* ---------- small screens and touch: form fields at 16px (iOS zooms into smaller ones) ---------- */
@media (max-width: 767.98px), (hover: none) and (pointer: coarse) {
  .wn-main :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="submit"]):not([type="button"]):not([type="hidden"]), select, textarea) {
    font-size: 16px !important; }
}

/* ---------- touch screens: 44px tap targets without moving the layout, no hover lifts that stick after a tap ---------- */
@media (hover: none) and (pointer: coarse) {
  .wn-crumbs a { display: inline-block; padding: 13px 13px; margin: -13px -13px; }
  .wn-main .tlink { padding-top: 15px; padding-bottom: 11px; margin-top: -11px; margin-bottom: -11px; }
  .wn-main .tlink::after { bottom: 7px; }
  a.wn-card:hover, .wn-card--lift:hover, .wn-rcard:hover, .wn-rcard:hover .wn-rcard__go, .wn-main .tlink:hover, .btn:hover .wn-arr { transform: none; }
}

/* the main column clips anything wider than the screen; overflow-x: clip where supported (keeps sticky working) */
@supports not (overflow-x: clip) {
  @media (max-width: 1023.98px) { .wn-main { overflow-x: hidden; } }
}
