/*! Mezzolab v21.20 — desktop: re-center left text block vertically with the circle (justify-content:center on [data-mz-left]; arrow stays absolute at bottom) */
[data-mz-sticky]{--mz-circle:540px;--mz-bg:#000;--mz-fg:#fff;--mz-dim:rgba(255,255,255,.55);--mz-line:rgba(255,255,255,.08);--mz-pin-offset:6rem;background:var(--mz-bg);color:var(--mz-fg);font-family:'Plusjakartadisplay'}[data-mz-sticky] [data-mz-title]{font-family:'Plusjakartadisplay' !important;font-size:3rem !important;font-weight:700 !important;letter-spacing:-.025em !important;line-height:1.05 !important;margin:0 !important}[data-mz-sticky] [data-step] p{font-family:'Plusjakartadisplay' !important;font-size:1.1rem !important;line-height:1.2 !important;margin:0 !important;font-weight:400 !important}[data-mz-sticky] [data-step]{opacity:.22;transition:opacity .45s ease,filter .55s ease}[data-mz-sticky] [data-step][data-active]{opacity:1}[data-mz-sticky] [data-mz-visuals]>[data-visual]{position:absolute !important;inset:0 !important;border-radius:50% !important;overflow:hidden !important;opacity:0 !important;pointer-events:none !important;transition:opacity 1.2s cubic-bezier(.4,0,.2,1) !important;background:#111 !important}[data-mz-sticky] [data-mz-visuals]>[data-visual][data-active]{opacity:1 !important;pointer-events:auto !important}[data-mz-sticky] [data-mz-visuals]>[data-visual] video{width:100% !important;height:100% !important;object-fit:cover !important;display:block !important}[data-mz-sticky] [data-mz-visuals]>[data-visual] a[data-mz-stop]{position:absolute !important;top:14px;right:14px;width:36px;height:36px;border-radius:999px;background:rgba(0,0,0,.65);color:#fff;display:none !important;align-items:center;justify-content:center;font-size:22px;line-height:1;text-decoration:none;z-index:6}[data-mz-sticky] [data-mz-visuals]>[data-visual].mz-fullplay a[data-mz-stop]{display:flex !important}[data-mz-sticky] [data-mz-visuals]>[data-visual="0"],[data-mz-sticky] [data-mz-visuals]>[data-visual="1"]{cursor:default !important}[data-mz-sticky] [data-mz-visuals]>[data-visual="2"]{cursor:none !important}[data-mz-sticky] .mz-hover-pill{display:none !important}[data-mz-sticky] [data-mz-pill]:not(.mz-jess-cta){display:none !important}[data-mz-sticky] [data-mz-captions]{display:none !important}[data-mz-sticky] .mz-pill-wrap{display:contents}[data-mz-sticky].mz-enhanced .mz-pill-wrap{display:contents}[data-mz-sticky] .mz-jess-cta{--mz-blue:#2563eb;position:absolute !important;top:calc(100%+20px) !important;left:50% !important;transform:translateX(-50%);display:inline-flex;align-items:center;gap:16px;padding:12px 14px 12px 22px;background:#fff;color:#0f0f10;border:none;cursor:pointer;border-radius:24px;font-family:'Plusjakartadisplay';text-align:left;box-shadow:0 10px 24px -12px rgba(0,0,0,.3);opacity:0;pointer-events:none;transition:opacity .35s ease,transform .25s ease,box-shadow .35s ease;white-space:nowrap;z-index:6}[data-mz-sticky].mz-show-jess-cta .mz-jess-cta,[data-mz-visuals].mz-show-jess-cta .mz-jess-cta,[data-mz-sticky] [data-visual="2"][data-active]~.mz-pill-wrap .mz-jess-cta{opacity:1;pointer-events:auto}[data-mz-sticky] .mz-jess-cta-b,[data-mz-sticky] .mz-jess-cta-c{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-show-jess-cta.mz-pill-b .mz-jess-cta-a,[data-mz-visuals].mz-show-jess-cta.mz-pill-b .mz-jess-cta-a{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-show-jess-cta.mz-pill-b .mz-jess-cta-b,[data-mz-visuals].mz-show-jess-cta.mz-pill-b .mz-jess-cta-b{opacity:1 !important;pointer-events:auto !important}[data-mz-sticky].mz-show-jess-cta.mz-pill-c .mz-jess-cta-a,[data-mz-visuals].mz-show-jess-cta.mz-pill-c .mz-jess-cta-a,[data-mz-sticky].mz-show-jess-cta.mz-pill-c .mz-jess-cta-b,[data-mz-visuals].mz-show-jess-cta.mz-pill-c .mz-jess-cta-b{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-show-jess-cta.mz-pill-c .mz-jess-cta-c,[data-mz-visuals].mz-show-jess-cta.mz-pill-c .mz-jess-cta-c{opacity:1 !important;pointer-events:auto !important}[data-mz-sticky] .mz-jess-cta:hover{transform:translateX(-50%) translateY(-2px);box-shadow:0 0 36px -4px rgba(37,99,235,.55),0 14px 28px -14px rgba(0,0,0,.4)}[data-mz-sticky] .mz-jess-cta__text{display:flex;flex-direction:column;gap:4px;line-height:1.1}[data-mz-sticky] .mz-jess-cta__title{font-family:'Plusjakartadisplay';font-weight:700;font-size:17px;letter-spacing:-.01em;color:#0f0f10;transition:color .35s ease}[data-mz-sticky] .mz-jess-cta__sub{font-family:'Plusjakartadisplay';font-weight:500;font-size:13px;color:#6b6b70;transition:color .35s ease}[data-mz-sticky] .mz-jess-cta:hover .mz-jess-cta__title{color:var(--mz-blue)}[data-mz-sticky] .mz-jess-cta__icon{flex:0 0 auto;width:44px;height:44px;border-radius:50%;background:#0f0f10;color:#fff;display:inline-flex;align-items:center;justify-content:center;transition:background .35s ease,color .35s ease}[data-mz-sticky] .mz-jess-cta__icon::before{content:'';width:0;height:0;border-left:9px solid currentColor;border-top:7px solid transparent;border-bottom:7px solid transparent;margin-left:3px}[data-mz-sticky] .mz-jess-cta:hover .mz-jess-cta__icon{background:var(--mz-blue);color:#fff}@media (max-width:991px){[data-mz-sticky] .mz-pill-wrap{display:block}[data-mz-sticky] [data-mz-text] .mz-jess-cta{position:absolute !important;top:var(--mz-pill-top-mobile,calc(100%+2rem)) !important;left:0 !important;right:auto !important;transform:translateY(220%) !important;padding:10px 12px 10px 16px !important;gap:12px !important;border-radius:999px !important;opacity:0 !important;filter:blur(14px) !important;transition:opacity 1s cubic-bezier(.22,.61,.36,1),filter 1s cubic-bezier(.22,.61,.36,1),transform 1s cubic-bezier(.22,.61,.36,1),box-shadow .35s ease !important;transition-delay:0s !important;will-change:opacity,filter,transform !important}[data-mz-sticky] [data-mz-text] .mz-jess-cta.mz-pill-in{opacity:1 !important;filter:blur(0) !important;transform:translateY(0) !important;transition-delay:0s !important}[data-mz-sticky] [data-mz-text] .mz-jess-cta.mz-pill-after{opacity:0 !important;filter:blur(14px) !important;transform:translateY(0) !important}[data-mz-sticky] [data-mz-text] .mz-jess-cta.mz-jess-cta-b.mz-pill-in,[data-mz-sticky] [data-mz-text] .mz-jess-cta.mz-jess-cta-c.mz-pill-in{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-pill-b [data-mz-text] .mz-jess-cta.mz-jess-cta-a.mz-pill-in,[data-mz-sticky].mz-pill-b [data-mz-text] .mz-jess-cta.mz-jess-cta-c.mz-pill-in{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-pill-b [data-mz-text] .mz-jess-cta.mz-jess-cta-b.mz-pill-in{opacity:1 !important;pointer-events:auto !important}[data-mz-sticky].mz-pill-c [data-mz-text] .mz-jess-cta.mz-jess-cta-a.mz-pill-in,[data-mz-sticky].mz-pill-c [data-mz-text] .mz-jess-cta.mz-jess-cta-b.mz-pill-in{opacity:0 !important;pointer-events:none !important}[data-mz-sticky].mz-pill-c [data-mz-text] .mz-jess-cta.mz-jess-cta-c.mz-pill-in{opacity:1 !important;pointer-events:auto !important}[data-mz-sticky] [data-mz-text] .mz-jess-cta:hover{box-shadow:0 0 36px -4px rgba(37,99,235,.55),0 14px 28px -14px rgba(0,0,0,.4) !important}[data-mz-sticky] .mz-jess-cta__title{font-size:14px !important}[data-mz-sticky] .mz-jess-cta__sub{font-size:11px !important}[data-mz-sticky] .mz-jess-cta__icon{width:36px !important;height:36px !important}}@media (min-width:992px){[data-mz-sticky] [data-mz-pin-sentinel],[data-mz-sticky] [data-mz-cue],[data-mz-sticky] [data-mz-p3-dwell],[data-mz-sticky] [data-mz-fadeout],[data-mz-sticky] .mz-nav-overlay{display:none !important}[data-mz-sticky] [data-mz-inner]{display:grid !important;grid-template-columns:1fr 1fr !important;column-gap:clamp(2rem,6vw,6rem) !important;align-items:center !important;align-content:center !important;width:min(1300px,90vw) !important;margin:0 auto !important;padding:0 !important;min-height:100vh !important;box-sizing:border-box !important}[data-mz-sticky] [data-mz-left]{grid-column:1 !important;min-width:0 !important;display:flex !important;flex-direction:column !important;gap:2rem !important}[data-mz-sticky] [data-mz-grid]{display:contents !important}[data-mz-sticky] [data-mz-visuals-col]{grid-column:2 !important;min-width:0 !important;display:flex !important;align-items:center !important;justify-content:center !important}[data-mz-sticky] [data-mz-title]{text-align:left !important;width:100% !important;max-width:none !important;white-space:nowrap !important}[data-mz-sticky] [data-mz-text]{width:100% !important}[data-mz-sticky] [data-mz-text] [data-step]+[data-step]{margin-top:1.32rem !important}[data-mz-sticky] [data-mz-visuals]{width:100% !important;max-width:var(--mz-circle) !important;height:auto !important;aspect-ratio:1 / 1 !important;position:relative !important;overflow:visible !important}[data-mz-sticky] [data-mz-text] [data-step]{position:relative !important;transform:none !important;filter:none !important;top:auto !important;opacity:.25 !important;transition:opacity .45s ease !important}[data-mz-sticky] [data-mz-text] [data-step][data-active]{opacity:1 !important}}@media (max-width:991px){[data-mz-sticky]{position:relative}[data-mz-sticky] [data-mz-inner]{display:flex !important;flex-direction:column !important;align-items:stretch !important;width:100% !important;margin:0 !important;padding:0 24px !important;min-height:auto !important;box-sizing:border-box !important}[data-mz-sticky] [data-mz-left]{display:contents !important}[data-mz-sticky] [data-mz-visuals-col]{display:contents !important}[data-mz-sticky]::before{content:'';position:sticky;top:0;display:block;height:5rem;margin-bottom:-5rem;z-index:6;background:linear-gradient(to bottom,#000 65%,transparent);pointer-events:none;order:0}[data-mz-sticky] [data-mz-title]{position:sticky !important;top:5rem !important;z-index:6 !important;background:transparent !important;margin:0 !important;padding:0 !important;text-align:center !important;width:100% !important;max-width:none !important;font-size:2.25rem !important;line-height:1.1 !important;min-height:2.5rem !important;white-space:nowrap !important;order:1;opacity:0;transition:opacity .55s ease !important}[data-mz-sticky].mz-title-in [data-mz-title]{opacity:1}[data-mz-sticky] [data-mz-title].mz-title-out{opacity:0 !important}[data-mz-sticky] [data-mz-pin-sentinel]{display:block !important;width:1px;height:0;margin:0 !important;pointer-events:none;order:1}[data-mz-sticky] [data-mz-grid]{display:contents !important}[data-mz-sticky] [data-mz-visuals]{position:sticky !important;top:var(--mz-vis-top,9.25rem) !important;z-index:5 !important;width:80vw !important;height:80vw !important;max-width:400px !important;max-height:400px !important;align-self:center !important;margin:2rem auto 0 !important;aspect-ratio:1 / 1 !important;order:2;opacity:0;transition:opacity .55s ease}[data-mz-sticky].mz-circle-in [data-mz-visuals]{opacity:1}[data-mz-sticky] [data-mz-captions]{top:calc(100%+16px) !important}[data-mz-sticky] [data-mz-text]{width:100% !important;max-width:540px !important;margin:4rem auto 0 !important;padding:0 !important;order:3;position:sticky !important;top:var(--mz-text-top,14rem) !important;min-height:14rem !important;align-self:center !important;z-index:2 !important}[data-mz-sticky] [data-mz-cue]{display:block !important;width:100% !important;height:50vh !important;pointer-events:none !important;order:4 !important;background:transparent !important}[data-mz-sticky] [data-mz-p3-dwell]{display:block !important;width:100% !important;height:4rem !important;pointer-events:none !important;order:5 !important}[data-mz-sticky] .mz-nav-overlay{position:sticky;top:0;height:0;z-index:7;order:1;pointer-events:none}[data-mz-sticky] .mz-dots{flex-direction:column;gap:14px;position:fixed;right:18px;top:var(--mz-dots-top,70vh);transform:translateY(-100%);pointer-events:auto;z-index:8;opacity:0;transition:opacity 2s ease 1s}[data-mz-sticky].mz-pinned.mz-section-visible .mz-dots{opacity:1}[data-mz-sticky]:not(.mz-pinned) .mz-dots,[data-mz-sticky]:not(.mz-section-visible) .mz-dots,[data-mz-sticky].mz-exiting .mz-dots{opacity:0 !important;transition:opacity .35s ease !important}[data-mz-sticky] .mz-dot{width:12px;height:12px;border-radius:50%;background:rgba(255,255,255,.25);border:0;padding:0;cursor:pointer;transition:background .25s ease,transform .25s ease}[data-mz-sticky] .mz-dot.is-active{background:#fff;transform:scale(1.4)}[data-mz-sticky] [data-mz-text] [data-step]{position:absolute !important;top:0 !important;left:0 !important;right:0 !important;margin:0 !important;padding:0 !important;box-sizing:border-box !important;opacity:0;filter:blur(14px);transform:translateY(220%);transition:opacity 1s cubic-bezier(.22,.61,.36,1),filter 1s cubic-bezier(.22,.61,.36,1),transform 1s cubic-bezier(.22,.61,.36,1);transition-delay:0s;will-change:opacity,filter,transform}[data-mz-sticky] [data-mz-text] [data-step][data-mz-state="in"]{opacity:1;filter:blur(0);transform:translateY(0);transition-delay:0s}[data-mz-sticky] [data-mz-text] [data-step][data-mz-state="after"]{opacity:0;filter:blur(14px);transform:translateY(0);transition-delay:0s}}@media (prefers-reduced-motion:reduce){[data-mz-sticky] *{transition:none !important;animation:none !important;filter:none !important}[data-mz-sticky] [data-step]{opacity:1 !important;filter:none !important}}/* Ancestor overflow:clip override */
#toppage._26-home-hero-section, div#toppage { overflow: clip !important; }

/* ============================================================
   v17 ADAPTERS
   ============================================================
   v17 fixes:
   - Desktop title fade: 1s → .4s (match mobile)
   - Mobile jiggle on scroll-out: handled in JS (translate3d, no Math.round)
   - Mobile dots: heavier-weight selectors to defeat Webflow + faster fade-in
   - Step 0 line break: injected in JS (markup edit)
   ============================================================ */

/* Universal: hide pills until init done */
[data-mz-sticky]:not(.mz-ready) .mz-jess-cta {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

/* Universal: faster dots fade-in (was 2s with 1s delay) */
[data-mz-sticky] .mz-dots {
  transition: opacity .5s ease !important;
}

@media (min-width: 992px) {
  /* v21.18: title fade shortened .4s → .13s so the swap-out doesn't keep
     the previous step's title text visible after the step has changed. */
  [data-mz-sticky] [data-mz-title] {
    transition: opacity .13s ease !important;
  }
  [data-mz-sticky] [data-mz-title].mz-title-out {
    opacity: 0 !important;
  }
  [data-mz-sticky] .mz-jess-cta {
    top: calc(100% + 2rem) !important;
  }
}

/* ============================================================
   v21 ADDITIONS over the v17 baseline
   ============================================================
   v21 keeps v17's whole step state machine intact (in / after / no-state)
   and applies the MINIMAL set of fixes the user actually wanted:

   1. THE scroll-up fade-back-in bug — the only original v17 complaint.
      v17's CSS had `data-mz-state="after"` use `transform: translateY(0)`
      so scrolling back UP to a previous step showed no motion. We now
      give "after" a small upward translate so the active step animates
      DOWN into place from above with the existing opacity+blur fade.
   2. Mobile pillbox row — pill on left aligned with paragraph edge,
      arrow on right aligned with the section content right edge, 12px
      between them. Same as the user approved in v19.2.
   3. Down-arrow circle button — 45 × 45 (20% smaller than the old 56px).
   4. Touch-action manipulation on tappables so iOS doesn't add a 300ms
      tap delay (QA audit #D2).
   ============================================================ */

/* (1) THE FIX: scroll-up fade-back-in actually animates */
@media (max-width: 991px) {
  [data-mz-sticky] [data-mz-text] [data-step][data-mz-state="after"] {
    transform: translateY(-30px) !important;
    /* opacity:0 and filter:blur(14px) inherit from base — so transitioning
       from "after" back to "in" plays the existing 1s blur+opacity+
       translateY tween. Now there's actual motion in BOTH directions. */
  }
}

/* (2) Mobile pillbox row — pill LEFT, arrow RIGHT, 12px gap.
   THE WRAP IS absolutely positioned BELOW text-wrap. The pill + arrow
   are static children inside the flex row. This is what was broken in
   v21.0 — wrap was display:flex but still position:static, so the row
   appeared at the top of text-wrap, on top of the paragraph. */
@media (max-width: 991px) {
  [data-mz-sticky] [data-mz-text] .mz-pill-wrap {
    position: absolute !important;
    top: var(--mz-pill-top-mobile, calc(100% + 2rem)) !important;
    left: 0 !important;
    right: 0 !important;
    display: flex !important;
    flex-direction: row !important;
    align-items: center !important;
    gap: 12px !important;
    justify-content: space-between !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  /* Pill is static inside the flex row (override base's position:absolute).
     IMPORTANT: keep the base's transform / opacity / filter — those drive
     the pill's enter animation. Only override the positioning props. */
  [data-mz-sticky] [data-mz-text] .mz-pill-wrap .mz-jess-cta {
    position: static !important;
    top: auto !important;
    left: auto !important;
    right: auto !important;
    margin: 0 !important;
  }
  /* Pill variants B and C stack ON TOP of A in the same flex slot so the
     row width is determined by A's width (or the widest, no matter which).
     Only the active variant has opacity 1; others are 0 via base rules. */
  [data-mz-sticky] [data-mz-text] .mz-pill-wrap .mz-jess-cta-b,
  [data-mz-sticky] [data-mz-text] .mz-pill-wrap .mz-jess-cta-c {
    position: absolute !important;
    left: 0 !important;
    top: 0 !important;
  }
}

/* (3) Down-arrow circle button */
[data-mz-sticky] .mz-scroll-down {
  width: 45px;
  height: 45px;
  min-width: 45px;
  min-height: 45px;
  border-radius: 50%;
  border: 2px solid #fff;
  background: transparent;
  color: #fff;
  padding: 0;
  margin: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  cursor: pointer;
  flex: 0 0 45px;
  /* Plain opacity transition only — no box-shadow animation, no filter */
  transition: opacity .25s ease, background .25s ease, color .25s ease;
  touch-action: manipulation;
}
[data-mz-sticky] .mz-scroll-down:active {
  background: #fff;
  color: #000;
}
@media (min-width: 992px) {
  /* v21.6 — desktop arrow: positioned at the BOTTOM-LEFT of the LEFT
     column (paragraph column), so it sits at the same Y as the circle's
     bottom (because the left column is stretched to fill the row height)
     but at the X of the paragraph block (user request: "aligned left,
     like the paragraph, now it is to the right of the circle. Keep it
     at the same height though").
     JS (`placeDownArrow`) moves the arrow into `[data-mz-left]` on
     desktop; CSS makes that container the positioning context. */
  [data-mz-sticky] [data-mz-left] {
    position: relative !important;
    align-self: stretch !important;
    display: flex !important;
    flex-direction: column !important;
    justify-content: center !important;
  }
  [data-mz-sticky] [data-mz-left] .mz-scroll-down {
    position: absolute !important;
    bottom: 0 !important;
    left: 0 !important;
    right: auto !important;
    top: auto !important;
    margin: 0 !important;
    z-index: 7;
  }

  /* v21.3 — desktop: paragraphs are clickable. Inactive steps get
     cursor:pointer + a hover affordance (opacity bump from .25 → .5).
     Same .45s ease as the active-step opacity transition so the visual
     reads as a unified interaction system. */
  [data-mz-sticky] [data-mz-text] [data-step]:not([data-active]) {
    cursor: pointer !important; /* v21.4 (Haiku D4): defeat Webflow w-button default */
    transition: opacity .35s ease !important;
  }
  [data-mz-sticky] [data-mz-text] [data-step]:not([data-active]):hover {
    opacity: 0.5 !important;
  }
  [data-mz-sticky] [data-mz-text] [data-step][data-active] {
    cursor: default !important;
  }
}

/* (4) Touch-action manipulation on all tappables */
[data-mz-sticky] .mz-dot,
[data-mz-sticky] button[data-jump],
[data-mz-sticky] .mz-scroll-down,
[data-mz-sticky] .mz-jess-cta {
  touch-action: manipulation;
}

@media (max-width: 991px) {
  /* M1 — gap before title */
  [data-mz-sticky] {
    padding-top: 4rem !important;
  }
  /* M2 — title fade (v21.18: .4s → .13s so the previous step's title text
     isn't visible after the step changes). White inherits from base. */
  [data-mz-sticky] [data-mz-title] {
    transition: opacity .13s !important;
  }
  /* M3 — longer final dwell */
  [data-mz-sticky] [data-mz-p3-dwell] {
    height: 10.5rem !important;
  }
  /* M4 — more scroll for cues 1+2 */
  [data-mz-sticky] [data-mz-cue="1"],
  [data-mz-sticky] [data-mz-cue="2"] {
    height: 112vh !important;
  }
  /* v17 c — Aggressive vertical dot stacking. Wins against any Webflow
     `w-*` class / inline `display:inline-block` that fights the parent flex. */
  [data-mz-sticky] .mz-nav-overlay .mz-dots,
  [data-mz-sticky] .mz-dots,
  [data-mz-sticky] [role="tablist"].mz-dots {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    justify-content: flex-start !important;
    width: auto !important;
    height: auto !important;
    gap: 14px !important;
    box-sizing: content-box !important;
  }
  [data-mz-sticky] .mz-dots > *,
  [data-mz-sticky] .mz-dot,
  [data-mz-sticky] button[data-jump] {
    display: block !important;
    flex: 0 0 auto !important;
    width: 12px !important;
    height: 12px !important;
    border-radius: 50% !important;
    border: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    background: rgba(255,255,255,.25) !important;
    box-shadow: none !important;
    float: none !important;
    position: static !important;
  }
  [data-mz-sticky] .mz-dot.is-active,
  [data-mz-sticky] button[data-jump].is-active {
    background: #fff !important;
    transform: scale(1.4) !important;
    transform-origin: center center !important; /* v21.1: scale from center, not edge */
  }
  /* v21.13 — slow fade-out as soon as the user scrolls past the section.
     JS toggles `mz-leaving` when `section.bottom < 0.6 × viewport`. Dots
     fade over 0.8s ease-out — they're gone well before the section
     fully unpins, which sidesteps the iOS Safari position:fixed
     momentum-drift that we couldn't fix structurally. */
  [data-mz-sticky].mz-leaving .mz-dots {
    opacity: 0 !important;
    transition: opacity 0.8s ease !important;
  }
}

/* ============================================================
   v21.16 — Cell-division simulation iframe (replaces the SPOT-1
   conic-gradient placeholder inside [data-visual="1"]).
   The iframe is injected by JS (injectCellSim). It fills the
   circular visual; the visual container has border-radius:50% +
   overflow:hidden so the square iframe is clipped to a circle
   (the sim renders a circular colony on black, so clipped corners
   are black anyway).
   ============================================================ */
[data-mz-sticky] [data-visual="1"] .mz-cell-sim {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  background: #000;
  display: block;
  /* v21.17 — fully interactive on ALL viewports (user choice). The ball
     is tap- AND swipe-paintable. The sim's touchstart/touchmove call
     preventDefault, so a gesture that STARTS on the circle paints virus
     instead of scrolling. To scroll the page on mobile, the user swipes
     on the area around the circle (title, paragraph, the ~10vw gutters
     beside the 80vw circle, or below it). A swipe that starts OFF the
     circle and drags over it still scrolls — the touch target is locked
     at finger-down. */
  pointer-events: auto;
}
