/* WaWa public landing page — SPEC-20 §7.5.
   Hand-written. No framework, no gradients, no drop shadows on large surfaces,
   no icon fonts. Tokens mirror wawa-app/tailwind.config.js (§2.1); that file is
   the single source of truth for colour, this one is a mirror. */

@property --ww-how-p {
  syntax: "<number>";
  inherits: true;
  initial-value: 0;
}

:root {
  --ww-ink: #18212F;
  --ww-ink-hover: #232E40;
  --ww-ink-muted: #55617A;
  --ww-ink-subtle: #97A1B5;

  --ww-accent: #3157D5;
  --ww-accent-hover: #2848B5;
  --ww-accent-press: #203C9B;
  --ww-accent-subtle: #EEF2FF;
  --ww-accent-border: #C8D4F7;

  --ww-leaf: #3A7A6C;
  --ww-leaf-light: #6EA897;
  --ww-leaf-soft: #E7F1EE;
  --ww-leaf-border: #C5D9D3;

  /* §2.3: warm is a pinch of salt. One use in the pricing section, and it is
     now Customize — that is what the page leads with. The picked tier moved
     to accent and the save chips to leaf so gold means exactly one thing.
     (The stray --ww-warm swatches in the illustrations are decoration inside
     a drawing, not a signal, and stay.) */
  --ww-warm: #E8A33D;
  --ww-warm-soft: #FEF6E8;
  --ww-warm-border: #F5DCAE;
  --ww-warm-fg: #9A6412;

  /* Old-money gold: darker and greener than --ww-warm, which reads as
     highlighter once you put it on paper instead of on white. */
  --ww-gold: #B8912F;
  --ww-gold-light: #E3C67E;
  --ww-gold-deep: #7A5A12;
  --ww-ivory: #FCFAF4;
  --ww-champagne: #F4EDDF;

  --ww-canvas: #FAFAFA;
  --ww-white: #FFFFFF;
  --ww-border: #E4E4E7;

  --ww-r-btn: 6px;
  --ww-r-panel: 8px;
  --ww-ease: cubic-bezier(0.25, 0.1, 0.25, 1);
  --ww-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ww-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ww-motion: 240ms var(--ww-ease);
  --ww-shadow: 0 8px 24px rgba(24, 33, 47, 0.08);
  --ww-shadow-lift: 0 28px 56px rgba(24, 33, 47, 0.16);
  --ww-sy: 0;
  --ww-sp: 0;
  --ww-hero-p: 0;
  --ww-how-p: 0;
  --ww-mx: 0;
  --ww-my: 0;
  --ww-tx: 0;
  --ww-ty: 0;

  --ww-font: Inter, -apple-system, "Segoe UI Variable", "Segoe UI",
    "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;
  /* Used by two elements only, both inside the Customize band. */
  --ww-serif: ui-serif, Georgia, Cambria, "Songti SC", "Noto Serif CJK SC",
    "Source Han Serif SC", "Times New Roman", serif;
}

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

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

body.ww {
  position: relative;
  margin: 0;
  background: var(--ww-white);
  color: var(--ww-ink);
  font-family: var(--ww-font);
  font-size: 16px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
/* Scroll wash: static radial blobs, compositor-only transform.
   Never put --ww-sp / --ww-sy inside gradient or background-position. */
.ww-wash {
  display: none;
}
html.ww-js .ww-wash {
  display: block;
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
  contain: paint;
}
.ww-wash__blob {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  transform: translate3d(0, 0, 0);
  backface-visibility: hidden;
  will-change: transform;
}
.ww-wash__blob--a {
  width: 80vw;
  height: 60vh;
  left: -18vw;
  top: -28vh;
  background: radial-gradient(
    ellipse at 50% 50%,
    rgba(49, 87, 213, 0.12),
    transparent 58%
  );
}
.ww-wash__blob--b {
  width: 64vw;
  height: 50vh;
  right: -16vw;
  top: 36vh;
  background: radial-gradient(
    ellipse at 50% 50%,
    rgba(58, 122, 108, 0.09),
    transparent 60%
  );
}
body.ww > * { position: relative; z-index: 1; }
body.ww > .ww-wash { z-index: 0; pointer-events: none; }
body.ww > .ww-skip { z-index: 80; }
body.ww > .ww-progress {
  position: fixed;
  z-index: 50;
  pointer-events: none;
}
body.ww > .ww-grain {
  position: absolute;
  inset: auto;
  top: 0;
  left: 0;
  right: 0;
  height: 100vh;
  z-index: 60;
  pointer-events: none;
}
body.ww > .ww-chapters { z-index: 25; }
body.ww > .ww-top { z-index: 40; }

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

.ww-plain { list-style: none; margin: 0; padding: 0; }

.ww-skip {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--ww-ink);
  color: var(--ww-white);
  padding: 10px 16px;
  border-radius: var(--ww-r-btn);
  z-index: 20;
}
.ww-skip:focus { left: 12px; top: 12px; }

.ww-progress {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  pointer-events: none;
  background: rgba(228, 228, 231, 0.55);
}
.ww-progress span {
  display: block;
  height: 100%;
  width: 100%;
  transform: scaleX(0);
  transform-origin: 0 50%;
  background: linear-gradient(90deg, var(--ww-accent), var(--ww-leaf), var(--ww-warm));
}

.ww-grain {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 100vh;
  pointer-events: none;
  opacity: 0.055;
  background-image: url("motion/grain.svg");
  background-size: 64px 64px;
}

.ww-chapters {
  display: none;
}
html.ww-js .ww-chapters {
  display: flex;
  position: fixed;
  top: 50%;
  right: 18px;
  z-index: 25;
  transform: translateY(-50%);
  flex-direction: column;
  gap: 10px;
  pointer-events: none;
}
.ww-chapters__dot {
  width: 8px;
  height: 8px;
  border-radius: 999px;
  background: var(--ww-border);
  pointer-events: auto;
  transform: scaleY(1);
  transform-origin: 50% 50%;
  transition: background-color 220ms var(--ww-ease), transform 220ms var(--ww-ease-spring);
}
.ww-chapters__dot.is-on {
  background: var(--ww-accent);
  transform: scaleY(2.75);
  border-radius: 8px;
}

:focus-visible {
  outline: 2px solid var(--ww-accent);
  outline-offset: 3px;
  border-radius: 3px;
}
.ww-btn:focus-visible {
  outline-offset: 3px;
}

/* ---------------------------------------------------------------- layout */
.ww-wrap {
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 24px;
}
.ww-wrap--narrow { max-width: 760px; }

.ww-section { padding: 88px 0; }
.ww-section--proof { background: var(--ww-canvas); }
.ww-section--tail { padding: 72px 0; border-top: 1px solid var(--ww-border); }

.ww-grid { display: grid; gap: 20px; }
.ww-grid--3 { grid-template-columns: repeat(3, 1fr); }

/* ------------------------------------------------------------- typography */
.ww-h1 {
  margin: 0 0 16px;
  font-size: clamp(30px, 5.2vw, 52px);
  line-height: 1.12;
  letter-spacing: -0.022em;
  font-weight: 650;
}
.ww-h2 {
  margin: 0 0 10px;
  font-size: clamp(24px, 3.2vw, 34px);
  line-height: 1.2;
  letter-spacing: -0.016em;
  font-weight: 640;
}
.ww-h2--quiet {
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  color: var(--ww-ink-subtle);
  margin-bottom: 24px;
}
.ww-h2--inverse { color: var(--ww-white); }
.ww-h2--tail { margin: 0; }
.ww-h3 {
  margin: 0 0 8px;
  font-size: 18px;
  line-height: 1.35;
  letter-spacing: -0.008em;
  font-weight: 620;
}
.ww-body { margin: 0; color: var(--ww-ink-muted); font-size: 15px; }
.ww-lede {
  margin: 0 0 28px;
  color: var(--ww-ink-muted);
  font-size: 17px;
  max-width: 56ch;
}
.ww-note { margin: 12px 0 0; color: var(--ww-ink-subtle); font-size: 13px; }
.ww-note--center { margin-top: 24px; text-align: center; }

.ww-eyebrow {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 18px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ww-ink-muted);
}
.ww-eyebrow--inverse { color: rgba(255, 255, 255, 0.62); }
.ww-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--ww-leaf);
  flex: none;
}
.ww-dot--light { background: var(--ww-leaf-light); }

/* -------------------------------------------------------------- controls */
.ww-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 0 22px;
  border: 1px solid var(--ww-accent);
  border-radius: var(--ww-r-btn);
  background: var(--ww-accent);
  color: var(--ww-white);
  font: inherit;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  transition:
    background-color var(--ww-motion),
    border-color var(--ww-motion),
    transform 280ms var(--ww-ease-out),
    box-shadow 280ms var(--ww-ease-out);
}
.ww-btn:hover {
  background: var(--ww-accent-hover);
  border-color: var(--ww-accent-hover);
}
.ww-btn:active {
  background: var(--ww-accent-press);
  border-color: var(--ww-accent-press);
}
.ww-btn--wa {
  flex-direction: column;
  gap: 1px;
  min-height: 48px;
  padding: 8px 22px;
  line-height: 1.15;
}
.ww-btn__sub {
  font-size: 11px;
  font-weight: 550;
  letter-spacing: 0.02em;
  opacity: 0.88;
  font-variant-numeric: tabular-nums;
}
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-btn:hover { transform: translateY(-3px) scale(1.03); box-shadow: 0 12px 28px rgba(49, 87, 213, 0.28); }
  .ww-btn:active { transform: translateY(1px) scale(0.99); }
}
.ww-btn--sm { min-height: 40px; padding: 0 15px; font-size: 14px; }
.ww-btn--quiet {
  background: var(--ww-white);
  color: var(--ww-accent);
  border-color: var(--ww-accent-border);
  width: 100%;
}
.ww-btn--quiet:hover {
  background: var(--ww-accent-subtle);
  border-color: var(--ww-accent);
}
.ww-btn--ghost {
  background: var(--ww-white);
  color: var(--ww-accent);
  border-color: var(--ww-accent-border);
}
.ww-btn--ghost:hover {
  background: var(--ww-accent-subtle);
  border-color: var(--ww-accent);
}

.ww-link {
  color: var(--ww-ink-muted);
  font-size: 14px;
  font-weight: 550;
  text-decoration: none;
  transition: color var(--ww-motion);
}
.ww-link:hover { color: var(--ww-ink); }
.ww-link--inverse { color: rgba(255, 255, 255, 0.72); }
.ww-link--inverse:hover { color: var(--ww-white); }

/* ------------------------------------------------------------- site head */
.ww-top {
  position: sticky;
  top: 0;
  z-index: 40;
  border-bottom: 1px solid var(--ww-border);
  background: rgba(255, 255, 255, 0.94);
}
.ww-top__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 72px;
}
.ww-top__brand { display: inline-flex; }
.ww-top__brand img { width: 150px; height: 36px; }
.ww-top__nav { display: flex; align-items: center; gap: 16px; }
.ww-top__nav .ww-link {
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  padding: 8px 6px;
}

.ww-lang {
  display: flex;
  align-items: center;
  flex: none;
  gap: 2px;
  padding: 3px;
  border: 1px solid var(--ww-border);
  border-radius: 999px;
  background: var(--ww-canvas);
  white-space: nowrap;
}
.ww-lang__btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  min-width: 44px;
  padding: 0 10px;
  border-radius: 999px;
  color: var(--ww-ink-muted);
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0.02em;
  text-decoration: none;
  transition: background-color var(--ww-motion), color var(--ww-motion), transform 200ms var(--ww-ease-out);
}
.ww-lang__btn:hover { color: var(--ww-ink); }
.ww-lang__btn[aria-current="true"] {
  background: var(--ww-ink);
  color: var(--ww-white);
}

/* ------------------------------------------------------------------ hero */
.ww-hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: var(--ww-canvas);
  border-bottom: 1px solid var(--ww-border);
  padding: 84px 0 76px;
}
.ww-hero__layers {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}
.ww-hero__layers::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    radial-gradient(ellipse 78% 90% at 72% 42%, transparent 18%, var(--ww-canvas) 72%),
    radial-gradient(ellipse 60% 70% at 30% 70%, transparent 10%, rgba(250, 250, 250, 0.55) 70%);
}
.ww-hero__grid {
  position: absolute;
  inset: -8%;
  z-index: 0;
  pointer-events: none;
}
.ww-hero__grid-shift {
  position: absolute;
  top: -50%;
  left: -50%;
  width: 200%;
  height: 200%;
  background-image:
    linear-gradient(to right, rgba(58, 122, 108, 0.11) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(58, 122, 108, 0.11) 1px, transparent 1px);
  background-size: 48px 48px;
  background-repeat: repeat;
  transform: translate3d(0, 0, 0) scale(1.14);
  backface-visibility: hidden;
  will-change: transform;
}
.ww-hero__grid--b .ww-hero__grid-shift {
  background-size: 28px 28px;
  background-image:
    linear-gradient(to right, rgba(49, 87, 213, 0.1) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(49, 87, 213, 0.1) 1px, transparent 1px);
  opacity: 0.7;
  transform: translate3d(0, 0, 0) scale(1.08);
}
.ww-hero__orb {
  position: absolute;
  z-index: 2;
  border-radius: 50%;
  pointer-events: none;
}
.ww-hero__orb--a {
  width: min(58vw, 560px);
  height: min(58vw, 560px);
  right: -10%;
  top: -20%;
  background: radial-gradient(circle, rgba(49, 87, 213, 0.3), rgba(58, 122, 108, 0.14) 46%, transparent 70%);
}
.ww-hero__orb--b {
  width: min(42vw, 380px);
  height: min(42vw, 380px);
  left: -8%;
  bottom: -18%;
  background: radial-gradient(circle, rgba(232, 163, 61, 0.22), transparent 68%);
}
.ww-hero__orb--c {
  width: min(28vw, 240px);
  height: min(28vw, 240px);
  right: 18%;
  bottom: 8%;
  background: radial-gradient(circle, rgba(58, 122, 108, 0.28), transparent 70%);
}
/* Signature: a faint timetable grid — the product's actual artifact, not
   particles and not a purple mesh. Masked so it recedes behind the copy. */
.ww-hero::before,
.ww-hero::after { display: none; }
.ww-hero__inner {
  position: relative;
  z-index: 1;
  display: grid;
  /* Art gets the bigger share: the copy column is already capped by the
     lede's 56ch measure, so extra width there would do nothing, while the
     illustration is the only thing balancing a 52px headline. */
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
  gap: 64px;
  align-items: center;
}
.ww-promise {
  margin: 0 0 20px;
  font-size: clamp(17px, 2.1vw, 21px);
  line-height: 1.45;
  color: var(--ww-ink);
  font-weight: 500;
  max-width: 30ch;
}
.ww-hero__cta {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}
.ww-hero__art {
  position: relative;
  perspective: 1400px;
  overflow: hidden;
  min-height: 400px;
  pointer-events: none;
}
.ww-hero__shot {
  position: relative;
  z-index: 1;
  transform: translate3d(6%, 4%, 0) scale(1.1);
  transform-origin: 82% 42%;
  backface-visibility: hidden;
  pointer-events: none;
}
html.ww-js .ww-hero__shot {
  will-change: transform;
}
.ww-hero__stage {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
}
.ww-mock {
  position: absolute;
  pointer-events: none;
  border-radius: 16px;
  overflow: hidden;
  background: linear-gradient(180deg, #FFFFFF 0%, #F4F6FB 100%);
  border: 1px solid rgba(255, 255, 255, 0.92);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    0 18px 36px rgba(24, 33, 47, 0.14);
}
.ww-mock img,
.ww-mock__lift {
  display: block;
  width: 100%;
  height: auto;
}
.ww-mock--plate {
  position: relative;
  inset: auto;
  width: 104%;
  margin-left: auto;
  margin-right: -10%;
  opacity: 0.84;
  border-radius: 12px;
}
.ww-mock--tt {
  width: min(74%, 360px);
  top: 4%;
  left: -4%;
  z-index: 2;
  transform: rotate(-6deg);
}
.ww-mock--ping {
  width: min(50%, 236px);
  top: 32%;
  right: -8%;
  z-index: 3;
  transform: rotate(6deg);
  border-radius: 28px;
}
@media (min-width: 961px) {
  .ww-hero__art { overflow: visible; }
  .ww-hero__shot {
    transform: translate3d(10%, 6%, 0) scale(1.14);
    transform-origin: 88% 40%;
  }
  .ww-mock--plate {
    width: 112%;
    margin-right: -16%;
  }
  .ww-mock--ping {
    width: min(52%, 252px);
    top: 30%;
    right: -18%;
  }
}
.ww-hero__art img {
  width: 100%;
  height: auto;
}
html.ww-js .ww-h1 .ww-word {
  display: inline-block;
  overflow: hidden;
  vertical-align: bottom;
  transform-origin: 50% 100%;
}

/* ---------------------------------------------------------- proof points */
.ww-panel {
  background: var(--ww-white);
  border: 1px solid var(--ww-border);
  border-radius: var(--ww-r-panel);
  padding: 28px 26px;
  transition:
    border-color var(--ww-motion),
    box-shadow 320ms var(--ww-ease-out),
    transform 80ms linear;
}
.ww-panel__idx {
  margin: 0 0 12px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.12em;
  color: var(--ww-accent);
  font-variant-numeric: tabular-nums;
}
html.ww-js [data-ww-count] { font-variant-numeric: tabular-nums; }
.ww-panel:hover { border-color: var(--ww-leaf-border); }
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-panel:hover {
    border-color: var(--ww-leaf);
    box-shadow: var(--ww-shadow-lift);
  }
}

/* ---------------------------------------------------------- how it works */
.ww-how { padding-top: 72px; }
.ww-steps { margin-top: 8px; }
.ww-step {
  display: flex;
  flex-direction: column;
}
.ww-step__art { width: 128px; height: 96px; margin-bottom: 16px; }
.ww-step__num {
  order: -1;
  margin: 0 0 10px;
  font-size: 12px;
  font-weight: 640;
  letter-spacing: 0.1em;
  color: var(--ww-accent);
}
.ww-how__dots,
.ww-how__bar { display: none; }

/* Sticky pin: three steps crossfade as the tall track is scrolled. Desktop only. */
@media (min-width: 781px) {
  html.ww-js .ww-how {
    padding: 0;
  }
  html.ww-js .ww-how__track {
    height: 330vh;
    position: relative;
  }
  html.ww-js .ww-how__sticky {
    position: sticky;
    top: 72px;
    height: calc(100vh - 72px);
    display: flex;
    align-items: center;
    overflow: hidden;
  }
  html.ww-js .ww-how__layout {
    display: grid;
    grid-template-columns: minmax(220px, 0.88fr) minmax(280px, 1.12fr);
    gap: 32px 40px;
    align-items: center;
    min-width: 0;
  }
  html.ww-js .ww-how__copy,
  html.ww-js .ww-how__demo {
    min-width: 0;
  }
  html.ww-js .ww-how .ww-steps {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    min-height: 168px;
    margin-top: 4px;
    perspective: 1200px;
  }
  html.ww-js .ww-how .ww-step {
    grid-area: 1 / 1;
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    row-gap: 6px;
    align-items: start;
    opacity: 0;
    transform: translate3d(36px, 8px, 0) scale(0.96);
    transform-origin: 0% 50%;
    pointer-events: none;
    transition:
      opacity 420ms var(--ww-ease-out),
      transform 560ms var(--ww-ease-out);
  }
  html.ww-js .ww-how .ww-step.is-on {
    opacity: 1;
    transform: none;
    pointer-events: auto;
  }
  html.ww-js .ww-how .ww-step__art {
    display: none;
  }
  html.ww-js .ww-how .ww-step__num {
    order: 0;
    font-size: clamp(28px, 4vw, 44px);
    letter-spacing: -0.04em;
    font-weight: 700;
    margin: 0;
  }
  html.ww-js .ww-how__dots {
    display: flex;
    gap: 8px;
    margin: 28px 0 0;
  }
  html.ww-js .ww-how__dots span {
    width: 8px;
    height: 8px;
    border-radius: 999px;
    background: var(--ww-border);
    transition: background-color 280ms, transform 280ms var(--ww-ease-spring);
  }
  html.ww-js .ww-how__dots span.is-on {
    background: var(--ww-accent);
    transform: scale(1.45);
  }
  html.ww-js .ww-how__bar {
    display: block;
    height: 3px;
    margin-top: 18px;
    border-radius: 999px;
    background: var(--ww-border);
    overflow: hidden;
  }
  html.ww-js .ww-how__bar::after {
    content: "";
    display: block;
    height: 100%;
    width: 100%;
    background: var(--ww-accent);
    transform: scaleX(var(--ww-how-p, 0));
    transform-origin: left center;
  }
}

html:not(.ww-js) .ww-how__demo { display: none; }

html.ww-js .ww-how {
  --ww-s0: clamp(0, calc(var(--ww-how-p, 0) * 3.333), 1);
  --ww-s1: clamp(0, calc((var(--ww-how-p, 0) - 0.35) * 3.572), 1);
  --ww-s2: clamp(0, calc((var(--ww-how-p, 0) - 0.68) * 3.125), 1);
  --ww-v0: clamp(0, calc((0.38 - var(--ww-how-p, 0)) * 10), 1);
  --ww-v2: clamp(0, calc((var(--ww-how-p, 0) - 0.62) * 10), 1);
  --ww-v1in: clamp(0, calc((var(--ww-how-p, 0) - 0.26) * 10), 1);
  --ww-v1: min(var(--ww-v1in), calc(1 - var(--ww-v2)));
}

.ww-how__demo {
  position: relative;
  pointer-events: none;
  z-index: 1;
}
.ww-demo {
  position: relative;
  height: 420px;
  max-width: 520px;
  margin-left: auto;
  border: 1px solid var(--ww-border);
  border-radius: 14px;
  background: var(--ww-white);
  overflow: hidden;
  contain: layout style paint;
  transform: translateZ(0);
}
.ww-demo__scene {
  position: absolute;
  inset: 12px;
  pointer-events: none;
}
html.ww-js .ww-demo__scene--tt {
  opacity: var(--ww-v0, 1);
  transform: translate3d(calc(var(--ww-v1, 0) * -28px), 0, 0) scale(calc(1 - var(--ww-v1, 0) * 0.05));
}
html.ww-js .ww-demo__scene--q {
  opacity: var(--ww-v1, 0);
  transform: translate3d(calc((1 - var(--ww-v1in, 0)) * 36px + var(--ww-v2, 0) * -24px), 0, 0) scale(calc(0.96 + var(--ww-v1, 0) * 0.04));
}
html.ww-js .ww-demo__scene--wa {
  opacity: var(--ww-v2, 0);
  transform: translate3d(calc((1 - var(--ww-v2, 0)) * 40px), 0, 0) scale(calc(0.94 + var(--ww-v2, 0) * 0.06));
}

.ww-tt,
.ww-q {
  height: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ww-tt__chrome,
.ww-q__chrome,
.ww-phone__bar {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 28px;
}
.ww-tt__pips { display: flex; gap: 4px; }
.ww-tt__pips i {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--ww-border);
}
.ww-tt__pips i:nth-child(1) { background: #E8A33D; }
.ww-tt__pips i:nth-child(2) { background: #6EA897; }
.ww-tt__pips i:nth-child(3) { background: #3157D5; }
.ww-tt__title,
.ww-q__title,
.ww-phone__title {
  flex: 1;
  font-size: 12px;
  font-weight: 650;
  letter-spacing: 0.02em;
  color: var(--ww-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ww-tt__clock { display: flex; color: var(--ww-accent); }
.ww-tt__hand {
  transform-origin: 16px 16px;
  transform: rotate(calc(var(--ww-s0, 0) * 220deg));
}
.ww-tt__field {
  height: 28px;
  border: 1px solid var(--ww-border);
  border-radius: 6px;
  background: var(--ww-canvas);
  padding: 8px 10px;
}
.ww-tt__field i {
  display: block;
  width: 42%;
  height: 6px;
  border-radius: 3px;
  background: var(--ww-border);
}
html.ww-js .ww-tt__field {
  position: relative;
}
html.ww-js .ww-tt__field::after {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: 8px;
  border: 3px solid var(--ww-accent-border);
  opacity: clamp(0, calc((0.16 - var(--ww-s0, 0)) * 14), 1);
  pointer-events: none;
}
.ww-tt__days {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 6px;
}
.ww-tt__days span {
  text-align: center;
  font-size: 11px;
  font-weight: 700;
  color: var(--ww-ink-subtle);
  font-variant-numeric: tabular-nums;
}
.ww-tt__grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  flex: 1;
}
.ww-tt__card {
  --on: clamp(0, calc((var(--ww-s0, 0) - (var(--i, 0) * 0.07)) * 9), 1);
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 52px;
  border-radius: 8px;
  background: var(--ww-accent-subtle);
  color: var(--ww-accent);
  font-size: 13px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  opacity: var(--on);
  transform: translate3d(0, calc((1 - var(--on)) * 12px), 0) scale(calc(0.9 + var(--on) * 0.1));
}
.ww-tt__card:nth-child(2),
.ww-tt__card:nth-child(5) { background: var(--ww-leaf-soft); color: var(--ww-leaf); }
.ww-tt__card:nth-child(3),
.ww-tt__card:nth-child(6) { background: var(--ww-warm-soft); color: var(--ww-warm-fg); }
.ww-tt__card--pick {
  position: relative;
  z-index: 1;
  transform: translate3d(0, calc((1 - var(--on)) * 12px), 0) scale(calc(0.9 + var(--on) * 0.1 + clamp(0, calc((var(--ww-s0, 0) - 0.5) * 10), 1) * 0.08));
}
.ww-tt__card--pick::after {
  content: "";
  position: absolute;
  inset: -4px;
  border: 2px solid var(--ww-accent);
  border-radius: 10px;
  opacity: clamp(0, calc((var(--ww-s0, 0) - 0.48) * 10), 1);
  transform: scale(calc(0.92 + clamp(0, calc((var(--ww-s0, 0) - 0.48) * 10), 1) * 0.08));
}
.ww-tt__btn {
  position: relative;
  align-self: flex-end;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 10px;
  background: var(--ww-accent);
  transform: scale(calc(1 - clamp(0, calc((var(--ww-s0, 0) - 0.66) * 16), 1) * 0.1 + clamp(0, calc((var(--ww-s0, 0) - 0.74) * 14), 1) * 0.1));
}
.ww-tt__ripple {
  position: absolute;
  inset: 4px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.45);
  opacity: calc(clamp(0, calc((var(--ww-s0, 0) - 0.64) * 20), 1) * (1 - clamp(0, calc((var(--ww-s0, 0) - 0.72) * 8), 1)));
  transform: scale(calc(0.4 + clamp(0, calc((var(--ww-s0, 0) - 0.64) * 10), 1) * 1.8));
}

.ww-q__count {
  font-size: 12px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--ww-accent);
}
.ww-q__track {
  display: block;
  height: 4px;
  border-radius: 999px;
  background: var(--ww-border);
  overflow: hidden;
}
.ww-q__fill {
  display: block;
  height: 100%;
  width: 100%;
  background: var(--ww-leaf);
  transform: scaleX(var(--ww-s1, 0));
  transform-origin: 0 50%;
}
.ww-q__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  flex: 1;
}
.ww-q__row {
  --on: clamp(0, calc((var(--ww-s1, 0) - var(--i, 0) * 0.1) * 9), 1);
  --done: clamp(0, calc((var(--ww-s1, 0) - 0.36 - var(--i, 0) * 0.09) * 10), 1);
  position: relative;
  display: grid;
  grid-template-columns: 28px minmax(0, 1fr) auto 18px;
  gap: 8px;
  align-items: center;
  min-height: 40px;
  padding: 0 8px;
  border: 1px solid var(--ww-border);
  border-radius: 8px;
  overflow: hidden;
  opacity: var(--on);
  transform: translate3d(calc((1 - var(--on)) * 22px), 0, 0);
}
.ww-q__row::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--ww-leaf-soft);
  opacity: calc(var(--done) * 0.9);
  transform: scaleX(var(--done));
  transform-origin: 0 50%;
  pointer-events: none;
}
.ww-q__row > * { position: relative; z-index: 1; }
.ww-q__row b {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--ww-accent-subtle);
  color: var(--ww-accent);
  font-size: 11px;
  font-weight: 700;
}
.ww-q__row:nth-child(2n) b { background: var(--ww-leaf-soft); color: var(--ww-leaf); }
.ww-q__row:nth-child(3n) b { background: var(--ww-warm-soft); color: var(--ww-warm-fg); }
.ww-q__who i {
  display: block;
  height: 5px;
  border-radius: 3px;
  background: var(--ww-border);
}
.ww-q__who i:first-child { width: 48px; }
.ww-q__who i:last-child { width: 32px; margin-top: 4px; }
.ww-q__row code {
  font-family: inherit;
  font-size: 11px;
  font-variant-numeric: tabular-nums;
  color: var(--ww-ink-muted);
}
.ww-q__st {
  position: relative;
  width: 14px;
  height: 14px;
  font-style: normal;
}
.ww-q__wait,
.ww-q__ok {
  position: absolute;
  inset: 0;
}
.ww-q__wait {
  border: 2px solid var(--ww-warm);
  border-top-color: transparent;
  border-radius: 50%;
  opacity: calc(1 - var(--done));
}
.ww-q__ok {
  border-radius: 50%;
  background: var(--ww-leaf);
  opacity: var(--done);
  transform: scale(var(--done));
}
.ww-q__ok::before {
  content: "";
  position: absolute;
  left: 3px;
  top: 4px;
  width: 6px;
  height: 3px;
  border-left: 1.6px solid #fff;
  border-bottom: 1.6px solid #fff;
  transform: rotate(-45deg);
}

.ww-phone {
  height: 100%;
  max-width: 280px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  border: 2px solid var(--ww-ink);
  border-radius: 28px;
  padding: 10px 10px 12px;
  background: linear-gradient(180deg, #FFFFFF 0%, #F3F4F8 100%);
  overflow: hidden;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.7),
    0 16px 32px rgba(24, 33, 47, 0.14);
}
.ww-phone__notch {
  width: 72px;
  height: 8px;
  margin: 0 auto 8px;
  border-radius: 999px;
  background: var(--ww-ink);
}
.ww-phone__ava {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: var(--ww-leaf);
  color: #fff;
  font-size: 10px;
  font-weight: 700;
}
.ww-phone__clk {
  font-size: 11px;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
  color: var(--ww-ink-subtle);
}
.ww-phone__thread {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 6px 4px;
}
.ww-phone__out,
.ww-phone__in {
  --on: clamp(0, calc((var(--ww-s2, 0) - 0.08 - var(--i, 0) * 0.22) * 8), 1);
  max-width: 86%;
  padding: 6px 8px;
  border-radius: 14px;
  opacity: var(--on);
}
.ww-phone__out {
  align-self: flex-end;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
  background: linear-gradient(180deg, #F3FAF7 0%, #E7F1EE 100%);
  border: 1px solid rgba(197, 217, 211, 0.8);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.85);
  transform: translate3d(calc((1 - var(--on)) * 18px), 6px, 0);
}
.ww-phone__msg {
  display: flex;
  align-items: center;
  gap: 6px;
}
.ww-phone__msg img:not(.ww-phone__ok) {
  display: block;
  width: 40px;
  height: 30px;
}
.ww-phone__ok {
  width: 16px;
  height: 16px;
  display: block;
}
.ww-phone__in {
  align-self: flex-start;
  display: flex;
  align-items: center;
  background: linear-gradient(180deg, #FFFFFF 0%, #F7F8FC 100%);
  border: 1px solid var(--ww-border);
  box-shadow: inset 0 1px 0 #fff;
  transform: translate3d(calc((1 - var(--on)) * -16px), 8px, 0);
}
.ww-phone__msg--in .ww-phone__ok {
  width: 18px;
  height: 18px;
}
.ww-phone__ticks {
  display: flex;
  justify-content: flex-end;
  gap: 1px;
  margin-top: 4px;
  --tick: clamp(0, calc((var(--ww-s2, 0) - 0.3 - var(--i, 0) * 0.18) * 8), 1);
  color: color-mix(in srgb, #97A1B5 calc((1 - var(--tick)) * 100%), #3157D5 calc(var(--tick) * 100%));
}
.ww-phone__ticks i {
  width: 7px;
  height: 4px;
  border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor;
  transform: rotate(40deg);
}
.ww-phone__ticks i:last-child { margin-left: -3px; }
.ww-phone__composer {
  position: relative;
  height: 32px;
  border: 1px solid var(--ww-border);
  border-radius: 999px;
  background: var(--ww-white);
  padding: 10px 12px;
}
html.ww-js .ww-phone__composer::after {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: inherit;
  border: 3px solid var(--ww-accent-border);
  opacity: clamp(0, calc((var(--ww-s2, 0) - 0.86) * 12), 1);
  pointer-events: none;
}
.ww-phone__composer i {
  display: block;
  width: 40%;
  height: 6px;
  border-radius: 3px;
  background: var(--ww-border);
}

.ww-demo__cursor {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 6;
  width: 22px;
  height: 22px;
  opacity: var(--ww-v0, 0);
  transform: translate3d(
    calc(36px + var(--ww-s0, 0) * 228px),
    calc(78px + var(--ww-s0, 0) * 168px),
    0
  );
  pointer-events: none;
}
.ww-demo__cursor img { display: block; width: 22px; height: 22px; }
@supports (offset-path: path("M0 0")) {
  html.ww-js .ww-demo__cursor {
    offset-path: path("M 42 82 C 120 88, 210 140, 176 168 C 210 210, 268 250, 304 286");
    offset-distance: calc(var(--ww-s0, 0) * 100%);
    offset-rotate: 0deg;
    transform: none;
  }
}
.ww-demo__toast {
  position: absolute;
  right: 16px;
  bottom: 16px;
  z-index: 7;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 12px;
  border-radius: 999px;
  background: var(--ww-ink);
  color: #fff;
  font-size: 12px;
  font-weight: 650;
  opacity: calc(clamp(0, calc((var(--ww-s0, 0) - 0.78) * 12), 1) * var(--ww-v0, 0));
  transform: translate3d(0, calc((1 - clamp(0, calc((var(--ww-s0, 0) - 0.78) * 12), 1)) * 10px), 0);
}
.ww-demo__toast img { width: 18px; height: 18px; }
.ww-demo__bits {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
  --bit: calc(clamp(0, calc((var(--ww-s0, 0) - 0.8) * 10), 1) * (1 - clamp(0, calc((var(--ww-s0, 0) - 0.94) * 10), 1)) * var(--ww-v0, 0));
}
.ww-demo__bits i {
  position: absolute;
  width: 6px;
  height: 6px;
  border-radius: 1px;
  opacity: var(--bit);
}
.ww-demo__bits i:nth-child(1) { left: 56%; top: 58%; background: var(--ww-accent); transform: translate3d(calc(var(--bit) * 28px), calc(var(--bit) * -46px), 0) rotate(calc(var(--bit) * 70deg)); }
.ww-demo__bits i:nth-child(2) { left: 62%; top: 60%; background: var(--ww-leaf); transform: translate3d(calc(var(--bit) * 40px), calc(var(--bit) * -28px), 0) rotate(calc(var(--bit) * -50deg)); }
.ww-demo__bits i:nth-child(3) { left: 50%; top: 62%; background: var(--ww-warm); transform: translate3d(calc(var(--bit) * -24px), calc(var(--bit) * -40px), 0) rotate(calc(var(--bit) * 90deg)); }
.ww-demo__bits i:nth-child(4) { left: 68%; top: 54%; background: var(--ww-accent); transform: translate3d(calc(var(--bit) * 18px), calc(var(--bit) * -56px), 0) rotate(calc(var(--bit) * 40deg)); }
.ww-demo__bits i:nth-child(5) { left: 46%; top: 56%; background: var(--ww-leaf-light); transform: translate3d(calc(var(--bit) * -36px), calc(var(--bit) * -22px), 0) rotate(calc(var(--bit) * -80deg)); }
.ww-demo__bits i:nth-child(6) { left: 72%; top: 64%; background: var(--ww-warm-fg); transform: translate3d(calc(var(--bit) * 32px), calc(var(--bit) * -18px), 0) rotate(calc(var(--bit) * 110deg)); }
.ww-demo__bits i:nth-child(7) { left: 58%; top: 70%; background: var(--ww-accent-border); transform: translate3d(calc(var(--bit) * -12px), calc(var(--bit) * -34px), 0) rotate(calc(var(--bit) * 20deg)); }
.ww-demo__bits i:nth-child(8) { left: 40%; top: 64%; background: var(--ww-leaf); transform: translate3d(calc(var(--bit) * -30px), calc(var(--bit) * -50px), 0) rotate(calc(var(--bit) * 60deg)); }

html.ww-js .ww-how.is-live .ww-demo__cursor { will-change: transform, offset-distance; }
html.ww-js .ww-how:not(.is-live) .ww-demo__cursor,
html.ww-js .ww-how:not(.is-live) .ww-tt__hand,
html.ww-js .ww-how:not(.is-live) .ww-demo__scene--tt,
html.ww-js .ww-how:not(.is-live) .ww-demo__scene--q,
html.ww-js .ww-how:not(.is-live) .ww-demo__scene--wa {
  will-change: auto;
}

/* Story beats folded into How: cells (s0) → parents (s1) → ticks (s2). */
.ww-how__cast {
  position: absolute;
  inset: 0;
  z-index: 8;
  pointer-events: none;
}
.ww-how__cell {
  --on: clamp(0, calc((var(--ww-s0, 0) - var(--i, 0) * 0.1) * 8), 1);
  position: absolute;
  left: 8px;
  width: 18px;
  height: 14px;
  border-radius: 4px;
  opacity: var(--on);
  transform: scale(calc(0.7 + var(--on) * 0.3));
}
.ww-how__cell:nth-of-type(1) { top: 18%; background: var(--ww-accent); }
.ww-how__cell:nth-of-type(2) { top: 38%; background: var(--ww-leaf); }
.ww-how__cell:nth-of-type(3) { top: 58%; background: var(--ww-warm); }
.ww-how__parent {
  --on: clamp(0, calc((var(--ww-s1, 0) - var(--i, 0) * 0.12) * 8), 1);
  position: absolute;
  right: 8px;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--ww-white);
  border: 1px solid var(--ww-border);
  opacity: var(--on);
  transform: translate3d(calc((1 - var(--on)) * 22px), 0, 0) scale(calc(0.82 + var(--on) * 0.18));
}
.ww-how__parent img { width: 100%; height: 100%; }
.ww-how__parent:nth-of-type(4) { top: 16%; }
.ww-how__parent:nth-of-type(5) { top: 44%; }
.ww-how__parent:nth-of-type(6) { top: 72%; }
.ww-how__ping {
  --on: clamp(0, calc((var(--ww-s2, 0) - 0.12 - var(--i, 0) * 0.16) * 8), 1);
  position: absolute;
  left: 6%;
  width: 20px;
  height: 20px;
  opacity: var(--on);
  transform: scale(calc(0.55 + var(--on) * 0.45));
}
.ww-how__ping img { width: 20px; height: 20px; display: block; }
.ww-how__ping:nth-of-type(7) { top: 12%; }
.ww-how__ping:nth-of-type(8) { top: 40%; }
.ww-how__ping:nth-of-type(9) { bottom: 18%; }

/* ----------------------------------------------------------------- trust */
.ww-trust {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background: var(--ww-ink);
  color: var(--ww-white);
  padding: 88px 0;
}
.ww-trust__blob {
  display: none;
}
html.ww-js .ww-trust__blob {
  display: block;
  position: absolute;
  pointer-events: none;
  z-index: 0;
  border-radius: 50%;
  transform: translate3d(0, 0, 0);
  backface-visibility: hidden;
  will-change: transform;
}
.ww-trust__blob--a {
  width: 60%;
  height: 120%;
  left: -10%;
  top: -10%;
  background: radial-gradient(circle, rgba(58, 122, 108, 0.28), transparent 64%);
}
.ww-trust__blob--b {
  width: 40%;
  height: 80%;
  right: -8%;
  bottom: -20%;
  background: radial-gradient(circle, rgba(49, 87, 213, 0.22), transparent 70%);
}
.ww-trust__inner {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.9fr);
  gap: 56px;
  align-items: center;
}
.ww-trust__body {
  margin: 0 0 18px;
  font-size: 17px;
  line-height: 1.65;
  color: rgba(255, 255, 255, 0.82);
  max-width: 54ch;
}
.ww-trust__kicker {
  margin: 0;
  padding-left: 14px;
  border-left: 2px solid var(--ww-leaf-light);
  font-size: 15px;
  font-weight: 550;
  color: var(--ww-white);
}
.ww-trust__art img { width: 100%; height: auto; }
html.ww-js [data-ww-parallax] {
  transform: translate3d(0, calc(var(--ww-py, 0) * 1px), 0);
}

/* Diagonal section cuts */
.ww-slash {
  position: relative;
}
.ww-slash::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 48px;
  background: inherit;
  clip-path: polygon(0 100%, 100% 0, 100% 100%);
  transform: translateY(-99%);
  pointer-events: none;
}
.ww-section--proof.ww-slash::before { background: var(--ww-canvas); }
.ww-slash--dark::before { background: var(--ww-ink); }

/* Hero WhatsApp micro-story */
.ww-hero__cast {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
}
.ww-wa,
.ww-chip {
  position: absolute;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 999px;
  background: linear-gradient(180deg, #FFFFFF 0%, #F4F6FB 100%);
  border: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.95),
    0 0 0 1px rgba(24, 33, 47, 0.05),
    0 8px 16px rgba(24, 33, 47, 0.08),
    0 20px 36px rgba(24, 33, 47, 0.12);
}
.ww-wa__lift,
.ww-chip__lift {
  display: flex;
  align-items: center;
  gap: 8px;
}
.ww-wa img,
.ww-chip img { width: auto; height: auto; display: block; }
.ww-wa--1 { top: 8%; left: -4%; }
.ww-wa--2 { top: 46%; right: -6%; }
.ww-wa--3 { bottom: 10%; left: 12%; }
.ww-chip--clock { top: -6%; right: 18%; padding: 10px; border-radius: 14px; }
.ww-chip--grid { bottom: -8%; right: 4%; padding: 8px; border-radius: 12px; width: 132px; }
.ww-chip--grid img { width: 100%; height: auto; }
.ww-wa__bubble { display: flex; }
.ww-wa__tick { flex: none; }

html.ww-js .ww-hero__layers > [data-ww-layer],
html.ww-js .ww-hero__cast > [data-ww-layer] {
  --_lx: calc(var(--ww-mx, 0) * var(--ww-layer, 0) * -56px);
  --_ly: calc(var(--ww-my, 0) * var(--ww-layer, 0) * -36px);
  translate: var(--_lx) var(--_ly);
}
html.ww-js .ww-hero.is-live .ww-hero__layers > [data-ww-layer],
html.ww-js .ww-hero.is-live .ww-hero__cast > [data-ww-layer] {
  will-change: translate;
}

/* --------------------------------------------------------------- pricing */
.ww-tiers { align-items: stretch; }
.ww-tier {
  position: relative;
  display: flex;
  flex-direction: column;
  background: var(--ww-white);
  border: 1px solid var(--ww-border);
  border-radius: var(--ww-r-panel);
  padding: 28px 26px;
  transition:
    transform 80ms linear,
    box-shadow 320ms var(--ww-ease-out),
    border-color var(--ww-motion);
}
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-tier:hover {
    box-shadow: var(--ww-shadow-lift);
    border-color: var(--ww-accent-border);
  }
}
/* The picked plan is marked in accent, not warm: gold now belongs to the
   Customize band below and two of them in one section cancel out. */
.ww-tier--pick {
  border-color: var(--ww-accent);
  background: linear-gradient(180deg, var(--ww-accent-subtle) 0%, var(--ww-white) 38%);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    0 0 0 1px var(--ww-accent-border),
    0 14px 32px rgba(49, 87, 213, 0.16);
}
.ww-tier--pick::before {
  content: "";
  position: absolute;
  inset: -8px;
  border-radius: inherit;
  pointer-events: none;
  border: 2px solid rgba(49, 87, 213, 0.34);
  opacity: 0.85;
  transform: scale(1);
}
.ww-tier--pick::after {
  content: "";
  position: absolute;
  inset: -14px;
  border-radius: inherit;
  pointer-events: none;
  border: 2px solid rgba(49, 87, 213, 0.42);
  opacity: 0.4;
  transform: scale(1);
}
@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-tier--pick:hover {
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.9),
      0 0 0 1px var(--ww-accent-border),
      var(--ww-shadow-lift);
    transform:
      perspective(900px)
      rotateY(calc(var(--ww-tx, 0) * 14deg))
      rotateX(calc(var(--ww-ty, 0) * -10deg))
      translateY(-12px) scale(1.035);
  }
}
.ww-tier__badge {
  position: absolute;
  top: -11px;
  left: 26px;
  margin: 0;
  padding: 2px 10px;
  border: 1px solid var(--ww-accent-border);
  border-radius: 999px;
  background: var(--ww-accent-subtle);
  color: var(--ww-accent);
  font-size: 11px;
  font-weight: 640;
  letter-spacing: 0.03em;
}
.ww-tier__for { margin: 0 0 20px; color: var(--ww-ink-muted); font-size: 14px; min-height: 42px; }
/* The struck price sits above the real one, not beside it: the number the
   centre actually pays must still be the biggest thing in the card. A screen
   reader gets the words "List price" first, because "RM 358 RM 179" read aloud
   without them is just wrong. */
.ww-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
.ww-tier__was {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0 0 2px;
  min-height: 26px;
  font-size: clamp(17px, 2.4vw, 20px);
  font-weight: 560;
  letter-spacing: -0.01em;
  color: var(--ww-ink-muted);
  font-variant-numeric: tabular-nums;
}
.ww-tier__was s {
  text-decoration: line-through;
  text-decoration-thickness: 2px;
  text-decoration-color: rgba(58, 122, 108, 0.85);
  text-underline-offset: 2px;
}
.ww-tier__save {
  padding: 2px 9px;
  border: 1px solid var(--ww-leaf-border);
  border-radius: 999px;
  background: var(--ww-leaf-soft);
  color: var(--ww-leaf);
  font-size: 12px;
  font-weight: 640;
  letter-spacing: 0.03em;
  text-decoration: none;
}
.ww-tier__price {
  margin: 0 0 6px;
  font-size: clamp(26px, 4vw, 32px);
  font-weight: 640;
  letter-spacing: -0.02em;
  color: var(--ww-ink);
  font-variant-numeric: tabular-nums;
}
.ww-tier__period {
  display: block;
  font-size: 13px;
  font-weight: 500;
  letter-spacing: 0;
  color: var(--ww-ink-subtle);
}
.ww-tier__annual {
  margin: 0 0 18px;
  font-size: 13px;
  font-weight: 500;
  color: var(--ww-leaf);
  font-variant-numeric: tabular-nums;
}
.ww-value {
  margin: -8px 0 32px;
  padding-left: 14px;
  border-left: 2px solid var(--ww-leaf);
  color: var(--ww-ink);
  font-size: 15px;
  font-weight: 500;
  line-height: 1.55;
  max-width: 54ch;
}
.ww-tier__lines { margin: 0 0 24px; font-size: 14px; color: var(--ww-ink-muted); }
.ww-tier__lines li { padding: 8px 0; border-top: 1px solid var(--ww-border); }
.ww-tier__lines li:last-child { border-bottom: 1px solid var(--ww-border); }
.ww-tier .ww-btn--quiet { margin-top: auto; }

/* ------------------------------------------------------- customize band */
/* Ivory, not ink. The whole premium signal is carried by one gold hairline
   across the top and a serif on two words; everything else is whitespace. */
.ww-custom {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  margin-top: 48px;
  border: 1px solid rgba(184, 145, 47, 0.30);
  border-radius: var(--ww-r-panel);
  background: linear-gradient(158deg, var(--ww-ivory) 0%, var(--ww-champagne) 56%, #FBF6EA 100%);
  color: var(--ww-ink);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.9),
    0 26px 60px rgba(122, 90, 18, 0.10);
}
.ww-custom::before {
  content: "";
  position: absolute;
  z-index: 2;
  top: 0;
  left: 0;
  right: 0;
  height: 1px;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(184, 145, 47, 0.18) 12%,
    var(--ww-gold-light) 36%,
    var(--ww-gold) 50%,
    var(--ww-gold-light) 64%,
    rgba(184, 145, 47, 0.18) 88%,
    transparent
  );
}
.ww-custom__glow {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(54% 120% at 86% -14%, rgba(255, 255, 255, 0.92), transparent 60%),
    radial-gradient(48% 124% at 2% 110%, rgba(184, 145, 47, 0.13), transparent 66%);
}
/* Follows the pointer. Fixed size, moved only by translate3d, so a
   pointermove never repaints the band. JS sets --ww-lx / --ww-ly in px. */
.ww-custom__spot {
  position: absolute;
  z-index: 0;
  top: 0;
  left: 0;
  width: 620px;
  height: 620px;
  margin: -310px 0 0 -310px;
  border-radius: 50%;
  pointer-events: none;
  opacity: 0;
  background: radial-gradient(
    circle,
    rgba(255, 255, 255, 0.95) 0%,
    rgba(255, 251, 240, 0.62) 30%,
    rgba(227, 198, 126, 0.20) 52%,
    rgba(184, 145, 47, 0.07) 66%,
    rgba(184, 145, 47, 0) 74%
  );
  transform: translate3d(var(--ww-lx, 50%), var(--ww-ly, 50%), 0);
  transition: opacity 420ms var(--ww-ease);
}
.ww-custom.is-lit .ww-custom__spot { opacity: 1; }

.ww-custom__inner {
  position: relative;
  z-index: 1;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 332px);
  gap: 56px;
  align-items: center;
  padding: 56px 56px 52px;
}
/* An eyebrow with a rule, not a filled chip. A pill here would be the same
   shape as "Most popular" above and the two would read as the same rank. */
.ww-custom__badge {
  display: flex;
  align-items: center;
  gap: 11px;
  margin: 0 0 18px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--ww-gold-deep);
  font-size: 11px;
  font-weight: 640;
  letter-spacing: 0.15em;
  text-transform: uppercase;
}
.ww-custom__badge::before {
  content: "";
  flex: none;
  width: 28px;
  height: 1px;
  background: linear-gradient(90deg, var(--ww-gold), rgba(184, 145, 47, 0.15));
}
.ww-custom__name {
  margin: 0 0 14px;
  font-family: var(--ww-serif);
  font-size: clamp(30px, 3.6vw, 40px);
  font-weight: 500;
  line-height: 1.12;
  letter-spacing: -0.015em;
  color: var(--ww-ink);
}
.ww-custom__for {
  margin: 0 0 26px;
  max-width: 54ch;
  font-size: 16.5px;
  line-height: 1.72;
  color: var(--ww-ink-muted);
}
.ww-custom__lines { margin: 0; font-size: 14.5px; color: var(--ww-ink); }
.ww-custom__lines li {
  position: relative;
  padding: 12px 0 12px 30px;
  border-top: 1px solid rgba(184, 145, 47, 0.20);
  line-height: 1.55;
}
.ww-custom__lines li:last-child { border-bottom: 1px solid rgba(184, 145, 47, 0.20); }
.ww-custom__lines li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 21px;
  width: 14px;
  height: 1px;
  background: var(--ww-gold);
}
.ww-custom__buy {
  padding: 30px 28px 26px;
  border: 1px solid rgba(184, 145, 47, 0.26);
  border-radius: var(--ww-r-panel);
  background: rgba(255, 255, 255, 0.80);
  box-shadow: 0 12px 30px rgba(122, 90, 18, 0.07);
}
.ww-custom__was {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 0 0 6px;
  font-size: 18px;
  font-weight: 550;
  letter-spacing: -0.01em;
  color: var(--ww-ink-subtle);
  font-variant-numeric: tabular-nums;
}
.ww-custom__was s {
  text-decoration: line-through;
  text-decoration-thickness: 2px;
  text-decoration-color: rgba(184, 145, 47, 0.85);
  text-underline-offset: 2px;
}
.ww-custom__save {
  padding: 3px 10px;
  border: 1px solid rgba(184, 145, 47, 0.34);
  border-radius: 999px;
  background: rgba(184, 145, 47, 0.10);
  color: var(--ww-gold-deep);
  font-size: 11.5px;
  font-weight: 640;
  letter-spacing: 0.04em;
  text-decoration: none;
}
.ww-custom__price {
  margin: 0 0 22px;
  font-family: var(--ww-serif);
  font-size: clamp(36px, 4.8vw, 46px);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--ww-ink);
  font-variant-numeric: tabular-nums;
}
.ww-custom__period {
  display: block;
  margin-top: 9px;
  font-family: var(--ww-font);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: var(--ww-ink-subtle);
}
/* Ink, not accent. On ivory the blue button is the same button as the three
   above it, and this one is not the same offer. */
.ww-custom__cta {
  width: 100%;
  background: var(--ww-ink);
  border-color: var(--ww-ink);
  color: var(--ww-white);
}
.ww-custom__cta:hover,
.ww-custom__cta:active {
  background: var(--ww-ink-hover);
  border-color: var(--ww-ink-hover);
  color: var(--ww-white);
}
.ww-custom__note {
  margin: 16px 0 0;
  font-size: 12.5px;
  line-height: 1.6;
  color: var(--ww-ink-muted);
}

@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-custom__cta:hover { box-shadow: 0 12px 28px rgba(24, 33, 47, 0.24); }
}

/* ------------------------------------------------ customize band: motion */
/* The sheen. One pass on arrival, then once every 9s. */
.ww-custom::after {
  content: "";
  position: absolute;
  z-index: 3;
  top: -20%;
  left: 0;
  width: 42%;
  height: 140%;
  pointer-events: none;
  opacity: 0;
  transform: translate3d(-140%, 0, 0) skewX(-18deg);
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 253, 246, 0.55) 42%,
    rgba(227, 198, 126, 0.30) 58%,
    rgba(255, 255, 255, 0) 100%
  );
}

html.ww-js .ww-custom[data-ww-reveal] {
  opacity: 0;
  transform: translateY(40px) scale(0.985);
}
/* Opt out of ww-pop: a band this wide arriving as one block reads as a slab. */
html.ww-js .ww-custom[data-ww-reveal].is-in {
  animation: ww-lux-in 900ms var(--ww-ease-out) both;
}
html.ww-js .ww-custom[data-ww-reveal].is-settled {
  opacity: 1;
  transform: none;
}

@media (prefers-reduced-motion: no-preference) {
  html.ww-js .ww-custom.is-in::before,
  html.ww-js .ww-custom.is-settled::before {
    transform-origin: center;
    animation: ww-lux-rule 900ms 120ms var(--ww-ease-out) both;
  }
  html.ww-js .ww-custom.is-in::after,
  html.ww-js .ww-custom.is-settled::after {
    animation: ww-lux-sheen 1500ms 980ms var(--ww-ease-out) both,
               ww-lux-sheen 1500ms 9s var(--ww-ease-out) infinite;
  }
  html.ww-js .ww-custom.is-in .ww-custom__badge,
  html.ww-js .ww-custom.is-settled .ww-custom__badge {
    animation: ww-lux-eyebrow 900ms 380ms var(--ww-ease-out) both;
  }
  html.ww-js .ww-custom.is-in .ww-custom__badge::before,
  html.ww-js .ww-custom.is-settled .ww-custom__badge::before {
    animation: ww-lux-dash 700ms 380ms var(--ww-ease-out) both;
  }
  html.ww-js .ww-custom.is-in .ww-custom__name,
  html.ww-js .ww-custom.is-settled .ww-custom__name {
    animation: ww-lux-name 860ms 480ms var(--ww-ease-out) both;
  }
  html.ww-js .ww-custom.is-in .ww-custom__for,
  html.ww-js .ww-custom.is-settled .ww-custom__for {
    animation: ww-lux-rise 760ms 620ms var(--ww-ease-out) both;
  }
  html.ww-js .ww-custom.is-in .ww-custom__lines li,
  html.ww-js .ww-custom.is-settled .ww-custom__lines li {
    animation: ww-lux-line 660ms var(--ww-ease-out) both;
    animation-delay: calc(700ms + var(--ww-i, 0) * 90ms);
  }
  html.ww-js .ww-custom.is-in .ww-custom__lines li::before,
  html.ww-js .ww-custom.is-settled .ww-custom__lines li::before {
    transform-origin: left center;
    animation: ww-lux-dash 620ms var(--ww-ease-out) both;
    animation-delay: calc(820ms + var(--ww-i, 0) * 90ms);
  }
  html.ww-js .ww-custom.is-in .ww-custom__buy,
  html.ww-js .ww-custom.is-settled .ww-custom__buy {
    animation: ww-lux-buy 900ms 560ms var(--ww-ease-spring) both;
  }
}
.ww-custom__lines li:nth-child(1) { --ww-i: 0; }
.ww-custom__lines li:nth-child(2) { --ww-i: 1; }
.ww-custom__lines li:nth-child(3) { --ww-i: 2; }
.ww-custom__lines li:nth-child(4) { --ww-i: 3; }
.ww-custom__lines li:nth-child(5) { --ww-i: 4; }
.ww-custom__lines li:nth-child(6) { --ww-i: 5; }

@media (hover: hover) and (prefers-reduced-motion: no-preference) {
  .ww-custom {
    transition: box-shadow 420ms var(--ww-ease-out), transform 420ms var(--ww-ease-out);
  }
  .ww-custom.is-lit {
    transform: translateY(-3px);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.9),
      0 34px 74px rgba(122, 90, 18, 0.16);
  }
}

@keyframes ww-lux-in {
  from { opacity: 0; transform: translateY(40px) scale(0.985); }
  to { opacity: 1; transform: none; }
}
@keyframes ww-lux-rule {
  from { transform: scaleX(0); opacity: 0; }
  60% { opacity: 1; }
  to { transform: scaleX(1); opacity: 1; }
}
@keyframes ww-lux-sheen {
  0% { opacity: 0; transform: translate3d(-140%, 0, 0) skewX(-18deg); }
  12% { opacity: 1; }
  76% { opacity: 1; }
  100% { opacity: 0; transform: translate3d(340%, 0, 0) skewX(-18deg); }
}
@keyframes ww-lux-eyebrow {
  from { opacity: 0; letter-spacing: 0.30em; }
  to { opacity: 1; letter-spacing: 0.15em; }
}
@keyframes ww-lux-dash {
  from { transform: scaleX(0); }
  to { transform: scaleX(1); }
}
@keyframes ww-lux-name {
  from { opacity: 0; clip-path: inset(0 0 100% 0); transform: translateY(14px); }
  to { opacity: 1; clip-path: inset(0 0 -10% 0); transform: none; }
}
@keyframes ww-lux-rise {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: none; }
}
@keyframes ww-lux-line {
  from { opacity: 0; transform: translateX(-12px); }
  to { opacity: 1; transform: none; }
}
@keyframes ww-lux-buy {
  from { opacity: 0; transform: translateY(22px) scale(0.955); }
  to { opacity: 1; transform: none; }
}

@media (max-width: 960px) {
  .ww-custom__inner { grid-template-columns: minmax(0, 1fr); gap: 34px; padding: 40px 34px 36px; }
  .ww-custom__spot { display: none; }
}

@media (max-width: 520px) {
  .ww-custom { margin-top: 32px; }
  .ww-custom__inner { padding: 30px 20px 26px; gap: 26px; }
  .ww-custom__name { font-size: 28px; }
  .ww-custom__for { font-size: 15px; }
  .ww-custom__buy { padding: 24px 20px 20px; }
}

/* ------------------------------------------------------------------- FAQ */
.ww-faq { border-top: 1px solid var(--ww-border); margin-top: 32px; }
.ww-faq__item { border-bottom: 1px solid var(--ww-border); }
.ww-faq__q {
  list-style: none;
  cursor: pointer;
  padding: 20px 40px 20px 0;
  position: relative;
  font-size: 17px;
  font-weight: 600;
  color: var(--ww-ink);
  transition: color var(--ww-motion);
}
.ww-faq__q::-webkit-details-marker { display: none; }
.ww-faq__q:hover { color: var(--ww-accent); }
.ww-faq__q::after {
  content: "";
  position: absolute;
  right: 8px;
  top: 50%;
  width: 9px;
  height: 9px;
  margin-top: -6px;
  border-right: 2px solid var(--ww-ink-subtle);
  border-bottom: 2px solid var(--ww-ink-subtle);
  transform: rotate(45deg);
  transform-origin: center;
  transition: transform var(--ww-motion);
}
.ww-faq__item[open] > .ww-faq__q::after { transform: rotate(-135deg); margin-top: -2px; }
.ww-faq__a {
  margin: 0;
  padding: 0 40px 24px 0;
  color: var(--ww-ink-muted);
  font-size: 15px;
  max-width: 68ch;
}

/* ------------------------------------------------------------ tail + foot */
.ww-tail {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.ww-section--tail {
  position: relative;
  overflow: hidden;
}
html.ww-js .ww-section--tail.is-in {
  background:
    radial-gradient(ellipse 70% 80% at 50% 120%, rgba(49, 87, 213, 0.14), transparent 60%),
    var(--ww-white);
}
html.ww-js .ww-section--tail.is-in .ww-h2--tail {
  transform: scale(1.04);
}
.ww-tail__cta {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin: 0;
}

.ww-foot { background: var(--ww-ink); color: rgba(255, 255, 255, 0.72); padding: 56px 0 48px; }
.ww-foot__inner {
  display: grid;
  grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
  gap: 48px;
  align-items: start;
}
.ww-foot__brand img { width: 168px; height: 40px; }
.ww-foot__links { display: flex; flex-wrap: wrap; gap: 8px 8px; margin: 18px 0 0; }
.ww-foot__links a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  min-width: 44px;
  padding: 12px 10px;
}
.ww-foot__pdpa { margin: 0 0 16px; font-size: 13px; line-height: 1.7; max-width: 66ch; }
.ww-foot__copy { margin: 0; font-size: 13px; color: rgba(255, 255, 255, 0.5); }

/* -------------------------------------------------------------- responsive
   Breaks down to 360px. Nothing below relies on hover. */
@media (max-width: 960px) {
  .ww-hero__inner,
  .ww-trust__inner { grid-template-columns: minmax(0, 1fr); gap: 40px; }
  .ww-hero { padding: 60px 0 56px; }
  .ww-hero__art { min-height: 320px; }
  .ww-trust { padding: 64px 0; }
  .ww-promise { max-width: none; }
  .ww-foot__inner { grid-template-columns: minmax(0, 1fr); gap: 32px; }
  html.ww-js .ww-chapters { display: none; }
  .ww-wa--1 { top: 4%; left: 0; }
  .ww-wa--2 { top: auto; bottom: 18%; right: 0; }
  .ww-chip--grid { right: 0; bottom: -4%; }
  .ww-mock--tt { left: 0; }
  .ww-mock--ping { right: -4%; top: 24%; }
}

@media (max-width: 780px) {
  .ww-grid--3 { grid-template-columns: minmax(0, 1fr); }
  .ww-section { padding: 60px 0; }
  .ww-tier__for { min-height: 0; }
  .ww-step__art { width: 104px; height: 78px; margin-bottom: 14px; }
  .ww-slash::before { height: 28px; }
  .ww-hero__cast { display: none; }
  .ww-chip { display: none; }
  .ww-hero__art { min-height: 0; overflow: hidden; }
  .ww-hero__shot { transform: none; }
  .ww-hero__stage {
    position: relative;
    inset: auto;
  }
  .ww-mock--plate,
  .ww-mock--ping { display: none; }
  .ww-mock--tt {
    position: relative;
    top: auto;
    left: auto;
    width: min(100%, 340px);
    margin: 0 auto;
    transform: none;
  }
  html.ww-js .ww-hero.is-live .ww-mock--tt .ww-mock__lift { animation: none; }
  html.ww-js .ww-how__layout {
    display: flex;
    flex-direction: column;
    gap: 20px;
  }
  html.ww-js .ww-how {
    --ww-how-p: 1;
    --ww-s0: 1;
    --ww-s1: 1;
    --ww-s2: 1;
    --ww-v0: 1;
    --ww-v1: 1;
    --ww-v2: 1;
    --ww-v1in: 1;
  }
  html.ww-js .ww-demo {
    height: auto;
    max-width: 100%;
    margin: 0;
    overflow: visible;
    border: 0;
    background: transparent;
    display: flex;
    flex-direction: column;
    gap: 12px;
  }
  html.ww-js .ww-demo__scene {
    position: relative;
    inset: auto;
    opacity: 1;
    transform: none;
    clip-path: none;
    height: 188px;
    border: 1px solid var(--ww-border);
    border-radius: 12px;
    background: var(--ww-white);
    padding: 10px;
    overflow: hidden;
  }
  html.ww-js .ww-demo__cursor,
  html.ww-js .ww-demo__toast,
  html.ww-js .ww-demo__bits,
  html.ww-js .ww-how__cast { display: none; }
  html.ww-js .ww-step__art { display: none; }
  html.ww-js .ww-q__row { min-height: 28px; }
  html.ww-js .ww-tt__card { min-height: 40px; }
}

/* hero brand mark + compact language labels (mobile header) */
.ww-hero__mark {
  margin: 0 0 14px;
  line-height: 0;
}
.ww-hero__mark img {
  display: block;
  width: 56px;
  height: 56px;
}
.ww-lang__short { display: none; }

@keyframes ww-mark-in {
  from { opacity: 0; transform: translate3d(0, 10px, 0) scale(0.86); }
  to { opacity: 1; transform: none; }
}

@media (max-width: 520px) {
  .ww-wrap { padding: 0 18px; }
  .ww-top__inner { min-height: 64px; }
  .ww-top__brand img { width: 112px; height: 27px; }
  .ww-top__nav { gap: 8px; }
  .ww-lang__btn { min-height: 44px; min-width: 44px; padding: 0 7px; font-size: 12px; }
  .ww-lang__full { display: none; }
  .ww-lang__short { display: inline; }
  .ww-top__nav .ww-link { display: none; }
  .ww-hero__mark { margin-bottom: 10px; }
  .ww-hero__mark img { width: 40px; height: 40px; }
  .ww-btn--sm { min-height: 40px; padding: 0 12px; font-size: 13px; }
  .ww-lede { font-size: 16px; }
  .ww-tail { flex-direction: column; align-items: flex-start; }
  .ww-tail__cta { width: 100%; }
  .ww-tail .ww-btn { width: 100%; }
  .ww-hero__cta .ww-btn { width: 100%; }
  html.ww-js .ww-how__demo,
  html.ww-js .ww-demo,
  html.ww-js .ww-phone { max-width: 100%; }
  html.ww-js .ww-q__row:nth-child(n+5) { display: none; }
  html.ww-js .ww-q__row code { font-size: 10px; }
}

@media (max-width: 380px) {
  .ww-wrap { padding: 0 14px; }
  .ww-panel, .ww-tier { padding: 22px 18px; }
  .ww-tier__badge { left: 18px; }
  .ww-faq__q { font-size: 16px; }
  .ww-tier__price { font-size: 26px; }
  .ww-value { margin-bottom: 24px; }
  .ww-top__inner {
    gap: 8px;
    flex-wrap: wrap;
  }
  .ww-top__brand img { width: 100px; height: 24px; }
  .ww-top__nav { gap: 6px; min-width: 0; }
  .ww-lang { padding: 2px; gap: 0; }
  .ww-lang__btn { min-height: 44px; min-width: 44px; padding: 0 6px; font-size: 11px; }
  .ww-btn--sm { padding: 0 10px; }
  html.ww-js .ww-demo__scene { height: 176px; }
}

/* -------------------------------------------------------------- motion
   Scroll-driven page: rAF writes compositor transforms on wash / grid / shot.
   How pin is JS-only (one 0→1). Enter animations are 3D pop / flip.
   prefers-reduced-motion still kills all. */
@keyframes ww-hero-copy {
  from {
    opacity: 0;
    transform: translateY(28px) rotateX(18deg);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes ww-hero-art {
  from { opacity: 0.2; }
  to { opacity: 1; }
}
@keyframes ww-word-in {
  from {
    opacity: 0;
    transform: translateY(1.15em) rotateX(80deg);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes ww-bubble-in {
  from {
    opacity: 0;
    transform: translate3d(-72px, 36px, 0) scale(0.62) rotate(-10deg);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes ww-float-lift {
  0%, 100% { transform: translate3d(0, 0, 0); }
  50% { transform: translate3d(0, -8px, 0); }
}
@keyframes ww-pop {
  0% {
    opacity: 0;
    transform: translateY(56px) rotateX(16deg) scale(0.88);
  }
  62% {
    opacity: 1;
    transform: translateY(-10px) rotateX(-3deg) scale(1.03);
  }
  100% {
    opacity: 1;
    transform: none;
  }
}
@keyframes ww-flip {
  0% {
    opacity: 0;
    transform: perspective(900px) rotateY(-48deg) translateY(48px) scale(0.82);
  }
  62% {
    opacity: 1;
    transform: perspective(900px) rotateY(10deg) translateY(-14px) scale(1.05);
  }
  100% {
    opacity: 1;
    transform: perspective(900px) rotateY(0deg) translateY(0) scale(1);
  }
}
@keyframes ww-pulse-glow {
  0%, 100% { opacity: 0.28; transform: scale(1); }
  50% { opacity: 0.92; transform: scale(1.04); }
}
@keyframes ww-pulse-ring {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.02); }
}
@keyframes ww-cta-glow {
  0%, 100% { transform: translateY(0) scale(1); }
  50% { transform: translateY(-3px) scale(1.03); }
}
@keyframes ww-clip-reveal {
  from {
    opacity: 0.2;
    transform: translate3d(-18px, 0, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}
@keyframes ww-py {
  from { transform: translate3d(0, 28px, 0); }
  to { transform: translate3d(0, -28px, 0); }
}

@media (prefers-reduced-motion: no-preference) {
  .ww-hero__copy {
    perspective: 800px;
  }
  .ww-hero__copy > *:not([data-ww-hero-title]) {
    animation: ww-hero-copy 700ms var(--ww-ease-out) both;
    animation-delay: calc(var(--ww-i, 0) * 70ms);
    transform-origin: left center;
  }
  .ww-hero__copy > *:nth-child(1) { --ww-i: 0; }
  .ww-hero__copy > *:nth-child(2) { --ww-i: 1; }
  .ww-hero__copy > *:nth-child(3) { --ww-i: 2; }
  .ww-hero__copy > *:nth-child(4) { --ww-i: 3; }
  .ww-hero__copy > *:nth-child(5) { --ww-i: 4; }
  .ww-hero__copy > *:nth-child(6) { --ww-i: 5; }
  .ww-hero__copy > *:nth-child(7) { --ww-i: 6; }
  .ww-hero__copy > .ww-hero__mark {
    animation: ww-mark-in 760ms var(--ww-ease-spring) both;
    animation-delay: 0ms;
  }
  html.ww-js .ww-h1 .ww-word {
    animation: ww-word-in 760ms var(--ww-ease-out) both;
    animation-delay: calc(var(--ww-wi, 0) * 72ms + 120ms);
  }
  .ww-hero__shot {
    animation: ww-hero-art 1100ms var(--ww-ease-out) both;
    animation-delay: 180ms;
  }
  html.ww-js .ww-wa--1 { animation: ww-bubble-in 820ms 520ms var(--ww-ease-out) both; }
  html.ww-js .ww-wa--2 { animation: ww-bubble-in 820ms 760ms var(--ww-ease-out) both; }
  html.ww-js .ww-wa--3 { animation: ww-bubble-in 820ms 1000ms var(--ww-ease-out) both; }
  html.ww-js .ww-chip--clock { animation: ww-bubble-in 800ms 640ms var(--ww-ease-out) both; }
  html.ww-js .ww-chip--grid { animation: ww-bubble-in 800ms 880ms var(--ww-ease-out) both; }
  html.ww-js .ww-hero.is-live .ww-mock--tt .ww-mock__lift { animation: ww-float-lift 5.6s ease-in-out infinite; }
  html.ww-js .ww-hero.is-live .ww-mock--ping .ww-mock__lift { animation: ww-float-lift 6.4s 0.5s ease-in-out infinite; }
  html.ww-js .ww-section--tail.is-in .ww-btn {
    animation: ww-cta-glow 2.8s ease-in-out infinite;
  }
}

html.ww-js [data-ww-reveal] {
  opacity: 0;
  transform: translateY(48px) rotateX(12deg) scale(0.94);
  transform-origin: center bottom;
}
html.ww-js [data-ww-reveal].is-in {
  animation: ww-pop 820ms var(--ww-ease-out) both;
}
html.ww-js [data-ww-reveal="flip"].is-in {
  animation-name: ww-flip;
  animation-duration: 980ms;
}
html.ww-js .ww-grid--3 > [data-ww-reveal]:nth-child(2).is-in { animation-delay: 140ms; }
html.ww-js .ww-grid--3 > [data-ww-reveal]:nth-child(3).is-in { animation-delay: 280ms; }
html.ww-js [data-ww-reveal].is-settled {
  animation: none;
  opacity: 1;
  transform: none;
}
html.ww-js [data-ww-tilt].is-settled {
  transform:
    perspective(900px)
    rotateY(calc(var(--ww-tx, 0) * 16deg))
    rotateX(calc(var(--ww-ty, 0) * -12deg));
}
html.ww-js .ww-tier--pick[data-ww-reveal].is-in {
  animation: ww-flip 980ms var(--ww-ease-out) both;
}
/* The picked tier no longer breathes. Its rings still mark it, but the one
   thing that keeps moving in this section is now the Customize sheen --
   two competing idle animations one above the other cancel out. */

html.ww-js [data-ww-clip] {
  opacity: var(--ww-clip, 1);
  transform: translate3d(calc((1 - var(--ww-clip, 1)) * -16px), 0, 0);
}

html.ww-js [data-ww-tilt].is-in {
  will-change: transform;
}

@supports (animation-timeline: view()) {
  html.ww-sda [data-ww-clip] {
    animation: ww-clip-reveal linear both;
    animation-timeline: view();
    animation-range: cover 12% cover 42%;
  }
  html.ww-sda [data-ww-parallax] {
    animation: ww-py linear both;
    animation-timeline: view();
  }
}

/* -------------------------------------------------- prefers-reduced-motion
   SPEC-20 §9: every animation stops. Colour still changes on hover, but
   nothing moves and nothing eases. How-it-works pin is disabled (no .ww-js). */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    animation-delay: 0ms !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .ww-faq__item[open] > .ww-faq__q::after { transition: none; }
  html.ww-js [data-ww-reveal],
  html.ww-js [data-ww-clip],
  html.ww-js [data-ww-parallax],
  html.ww-js .ww-h1 .ww-word,
  .ww-hero__copy > *,
  .ww-hero__art,
  .ww-hero__shot,
  .ww-hero__art img,
  .ww-hero::before,
  .ww-hero::after,
  .ww-hero__grid,
  .ww-hero__grid-shift,
  .ww-hero__orb,
  .ww-wa,
  .ww-chip,
  .ww-how__cell,
  .ww-how__parent,
  .ww-how__ping,
  .ww-progress span,
  .ww-panel,
  .ww-tier,
  .ww-demo,
  .ww-demo__scene,
  .ww-demo__cursor,
  .ww-how__demo {
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
    filter: none !important;
    clip-path: none !important;
    letter-spacing: inherit !important;
    will-change: auto !important;
    translate: none !important;
    stroke-dashoffset: 0 !important;
  }
  .ww-how__demo { display: none !important; }
  .ww-mock--tt,
  .ww-mock--ping,
  .ww-mock--plate,
  .ww-mock__lift,
  .ww-wa__lift,
  .ww-chip__lift {
    animation: none !important;
  }
  html.ww-js .ww-wash,
  html.ww-js .ww-trust__blob,
  .ww-grain,
  .ww-progress,
  .ww-chapters { display: none !important; }
}

@media print {
  .ww-top__nav, .ww-skip, .ww-progress, .ww-grain, .ww-chapters, .ww-hero__cast { display: none; }
  .ww-trust, .ww-foot { background: var(--ww-white); color: var(--ww-ink); }
  .ww-hero::before, .ww-hero::after,
  html.ww-js .ww-wash { display: none; }
  .ww-top { position: static; }
}
