/* Scoped V3 cinematic hero. Production header stays outside this block. */

.zsch {
  --paper: #f8f8f6;
  --ink: #141715;
  --graphite: #2b302d;
  --green: #2f6b54;
  --ease: cubic-bezier(.22, .68, .15, 1);
  --gutter: clamp(22px, 4.4vw, 64px);
  position: relative;
  color-scheme: light;
  background: var(--paper);
  color: var(--ink);
  font-family: "Tajawal", sans-serif;
  font-synthesis: none;
  letter-spacing: 0;
  text-rendering: geometricPrecision;
  font-variant-numeric: lining-nums tabular-nums;
  overflow-x: clip;
}

.zsch button {
  font: inherit;
  color: inherit;
  cursor: pointer;
  background: none;
  border: 0;
}

.zsch a {
  color: inherit;
  text-decoration: none;
}

.zsch button:focus-visible,
.zsch a:focus-visible {
  outline: 1.5px solid var(--green);
  outline-offset: 6px;
  border-radius: 4px;
}

.zsch-story {
  height: 420svh;
  position: relative;
}

.zsch-stage {
  position: sticky;
  top: var(--zs-header-height, 72px);
  height: calc(100svh - var(--zs-header-height, 72px));
  min-height: 560px;
  overflow: clip;
  isolation: isolate;
  background: var(--paper);
}

.zsch-atmosphere {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(120% 70% at 50% 8%, #fff 0%, rgba(255, 255, 255, 0) 62%),
    radial-gradient(90% 60% at 50% 100%, #f8f8f6 0%, rgba(248, 248, 246, 0) 70%);
}

.zsch-stage::after {
  content: "";
  position: absolute;
  z-index: 0;
  left: 0;
  right: 0;
  bottom: 0;
  height: 92px;
  pointer-events: none;
  background: linear-gradient(
    to bottom,
    rgba(248, 248, 246, 0) 0%,
    rgba(248, 248, 246, 0.42) 46%,
    #f8f8f6 100%
  );
}

.zsch-canvas {
  position: absolute;
  inset: 0;
  z-index: 1;
  display: block;
  max-width: none;
}

.zsch-motion {
  display: none;
  position: absolute;
  z-index: 12;
  top: 10px;
  inset-inline-end: calc(var(--gutter) - 10px);
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  background: transparent;
  border: 0;
  padding: 0;
  color: #b4b8b5;
  opacity: 0.42;
  transition: opacity 0.4s, color 0.4s;
}

.zsch-motion:hover,
.zsch-motion:focus-visible {
  opacity: 1;
  color: #5f6561;
}

.zsch-motion-icon {
  display: flex;
  gap: 2.5px;
  width: 8px;
  height: 8px;
  align-items: center;
  justify-content: center;
}

.zsch-motion-icon i {
  width: 1.5px;
  height: 8px;
  background: currentColor;
  border-radius: 1px;
}

.zsch-motion[aria-pressed="true"] .zsch-motion-icon i:first-child {
  width: 0;
  height: 0;
  border-inline-start: 7px solid currentColor;
  border-block: 4px solid transparent;
  background: none;
  border-radius: 0;
}

.zsch-motion[aria-pressed="true"] .zsch-motion-icon i:last-child {
  display: none;
}

.zsch-copy {
  position: absolute;
  z-index: 5;
  top: 14.5%;
  left: 0;
  width: 100%;
  text-align: center;
}

.zsch-scene-copy {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0;
  pointer-events: none;
}

.zsch-scene-copy.is-current {
  pointer-events: auto;
}

.zsch-scene-copy:first-child {
  opacity: 1;
}

.zsch-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  font-size: 13.5px;
  font-weight: 500;
  color: #747a76;
  margin: 0 0 20px;
}

.zsch-eyebrow::before,
.zsch-eyebrow::after {
  content: "";
  width: 22px;
  height: 1px;
  background: #cfd2ce;
}

.zsch h1,
.zsch h2 {
  margin: 0;
  font-weight: 700;
  color: var(--ink);
  letter-spacing: -0.035em;
  line-height: 1.1;
  font-family: "Tajawal", sans-serif;
}

.zsch h1 {
  font-size: clamp(56px, 6.6vw, 112px);
}

.zsch h2 {
  font-size: clamp(50px, 5.6vw, 92px);
}

.zsch-subtitle {
  margin: 12px 0 0;
  font-size: clamp(24px, 2.7vw, 44px);
  line-height: 1.35;
  font-weight: 400;
  color: #8d928e;
  letter-spacing: -0.02em;
}

.zsch-bottom {
  display: none;
  position: absolute;
  z-index: 8;
  bottom: 18px;
  inset-inline: var(--gutter);
  justify-content: space-between;
  align-items: center;
  color: rgba(43, 48, 45, 0.38);
  pointer-events: none;
}

.zsch-hint {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 11px;
  font-weight: 400;
}

.zsch-scroll-line {
  position: relative;
  width: 1px;
  height: 20px;
  background: rgba(40, 46, 42, 0.1);
  overflow: hidden;
}

.zsch-scroll-line i {
  position: absolute;
  left: 0;
  top: -40%;
  width: 1px;
  height: 40%;
  background: rgba(43, 48, 45, 0.42);
  animation: zsch-drip 2.4s var(--ease) infinite;
}

@keyframes zsch-drip {
  0% { top: -40%; }
  70%, 100% { top: 100%; }
}

.zsch-note {
  font-size: 10.5px;
  font-weight: 400;
  color: rgba(43, 48, 45, 0.32);
}

.zsch-progress {
  position: absolute;
  z-index: 9;
  bottom: 0;
  inset-inline: 0;
  height: 1px;
  background: transparent;
}

.zsch-progress i {
  display: block;
  height: 100%;
  background: rgba(58, 64, 60, 0.18);
  transform-origin: right;
  transform: scaleX(0);
}

.zsch-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

.zsch.is-loading .zsch-scene-copy:first-child > * {
  opacity: 0;
}

.zsch-scene-copy:first-child > * {
  transition: opacity 1.1s var(--ease);
}

.zsch-scene-copy:first-child > :nth-child(2) { transition-delay: 0.12s; }
.zsch-scene-copy:first-child > :nth-child(3) { transition-delay: 0.28s; }

/* Mobile portrait hero is a separate component. This node stays hidden on desktop. */
.zsch-mcta {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .zsch *,
  .zsch *::before,
  .zsch *::after {
    animation: none !important;
    transition: none !important;
  }
  .zsch-scroll-line i { top: 30%; }
}

/* ══════════════════════════════════════════════════════════════════════
   ZeroSpread — Mobile Hero V3 (< 1024px)
   One portrait scene · pearl / graphite · one point of green.

   Outside the mobile media query this file only reproduces the previous
   HomeHero pending slot (`.zsmh-slot`) so the desktop first paint is
   byte-for-byte the same box. Every visual rule is < 1024px.
   ══════════════════════════════════════════════════════════════════════ */

/* ≥ 1024px: identical to the old empty pending slot, then HomeHero swaps in
   the desktop CinematicHero. */
.zsm3 {
  display: block;
  min-height: calc(100svh - var(--zs-m-nav-space, 0px));
}

@media (min-width: 1024px) {
  .zsm3 > .zsm3-stage {
    display: none;
  }
}

@media (max-width: 1023.98px) {
  .zsm3 {
    --zsm3-ink: #141715;
    --zsm3-ink-2: #3a403c;
    --zsm3-muted: #5c635f; /* 5.9:1 on the pearl stage */
    --zsm3-pearl: #f6f6f3;
    --zsm3-signal: #7db800;
    --zsm3-g: max(20px, var(--zs-m-gutter, 16px));
    --zsm3-stage-h: max(560px, calc(100dvh - var(--zs-m-nav-space, 62px)));
    --zsm3-travel: 0px;
    --zsm3-ease: cubic-bezier(0.2, 0, 0, 1);
    --zsm3-exit: 0;

    position: relative;
    box-sizing: border-box;
    height: var(--zsm3-stage-h);
    min-height: 0;
    margin: 0;
    background: #f6f6f3;
    color: var(--zsm3-ink);
    font-family: Tajawal, 'IBM Plex Sans Arabic', sans-serif;
    font-synthesis: none;
    font-variant-numeric: lining-nums;
    letter-spacing: 0;
  }

  /* Reduced motion: one composed frame, no scroll travel. */
  .zsm3[data-zsm3-reduced] {
    height: var(--zsm3-stage-h);
  }

  .zsm3-stage {
    position: sticky;
    top: 0;
    height: var(--zsm3-stage-h);
    overflow: hidden;
    background:
      radial-gradient(95% 44% at 50% 58%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 72%),
      linear-gradient(180deg, #f2f2ef 0%, #f7f7f4 36%, #f3f3ef 74%, #ecece7 100%);
  }

  /* ── the market (canvas) ─────────────────────────────────────────── */
  .zsm3-canvas {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    max-inline-size: none;
    pointer-events: none;
    transform: none;
    filter: none;
    opacity: 0;
    transition: opacity 520ms var(--zsm3-ease);
  }

  .zsm3[data-zsm3-ready] .zsm3-canvas {
    opacity: 1;
  }

  /* ── copy: upper third, reading-start aligned (not a centred template) ── */
  .zsm3-copy {
    position: absolute;
    z-index: 2;
    inset-inline: var(--zsm3-g);
    top: calc(var(--zs-m-topbar-h, 56px) + var(--zs-m-safe-top, 0px) + clamp(12px, 2.6svh, 28px));
    transform: translate3d(0, calc(var(--zsm3-exit) * -22px), 0);
    /* clears before it can pass under the still-transparent top bar */
    opacity: calc(1 - var(--zsm3-exit) * 2.2);
  }

  .zsm3-eyebrow {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0;
    color: var(--zsm3-muted);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
  }

  .zsm3-eyebrow::before {
    content: '';
    inline-size: 20px;
    block-size: 1px;
    background: currentColor;
    opacity: 0.55;
  }

  .zsm3-title {
    margin: 12px 0 0;
    color: var(--zsm3-ink);
    font-size: clamp(42px, 13vw, 58px);
    font-weight: 700;
    line-height: 1.04;
    letter-spacing: 0;
    text-wrap: balance;
  }

  .zsm3-support {
    margin: 8px 0 0;
    color: var(--zsm3-muted);
    font-size: clamp(18px, 5vw, 21px);
    font-weight: 500;
    line-height: 1.35;
  }

  /* ── scene captions (approved desktop story lines) ──────────────────── */
  .zsm3-caps {
    position: absolute;
    z-index: 2;
    inset-inline: var(--zsm3-g);
    bottom: calc(clamp(18px, 3.4svh, 32px) + 48px + clamp(20px, 3.4svh, 30px));
    min-height: 52px;
    pointer-events: none;
  }

  .zsm3-cap {
    position: absolute;
    inset-inline: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0;
    color: var(--zsm3-ink-2);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.4;
    opacity: 0;
    transform: translate3d(0, 6px, 0);
    transition:
      opacity 420ms var(--zsm3-ease),
      transform 420ms var(--zsm3-ease);
  }

  .zsm3-cap::before {
    content: '';
    inline-size: 6px;
    block-size: 6px;
    flex: none;
    border-radius: 50%;
    /* graphite: the only green in the hero visual is the focus point */
    background: var(--zsm3-ink);
    opacity: 0.55;
  }

  .zsm3-cap--mark {
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
  }

  .zsm3-cap--mark::before {
    display: none;
  }

  .zsm3-mark {
    display: inline-flex;
    color: var(--zsm3-ink);
    font-size: 24px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: -0.01em;
  }

  .zsm3-mark-spread {
    color: var(--zsm3-signal);
  }

  .zsm3-mark-line {
    color: var(--zsm3-muted);
    font-size: 14px;
    font-weight: 500;
  }

  .zsm3[data-zsm3-scene='1'] .zsm3-cap[data-for='1'],
  .zsm3[data-zsm3-scene='2'] .zsm3-cap[data-for='2'],
  .zsm3[data-zsm3-scene='3'] .zsm3-cap[data-for='3'] {
    opacity: 1;
    transform: none;
    transition-delay: 120ms;
  }

  /* ── action ─────────────────────────────────────────────────────────── */
  .zsm3-actions {
    position: absolute;
    z-index: 3;
    inset-inline: var(--zsm3-g);
    bottom: clamp(18px, 3.4svh, 32px);
    display: flex;
    align-items: center;
    gap: 20px;
  }

  .zsm3-primary {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    min-height: 48px;
    padding-inline: 24px 20px;
    border-radius: 999px;
    background: var(--zsm3-ink);
    color: var(--zsm3-pearl);
    font-size: 16px;
    font-weight: 700;
    line-height: 1;
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
    transition: transform 120ms var(--zsm3-ease), background-color 160ms var(--zsm3-ease);
  }

  .zsm3-primary:active {
    transform: scale(0.98);
    background: #262a27;
  }

  .zsm3-primary-dot {
    inline-size: 7px;
    block-size: 7px;
    border-radius: 50%;
    background: #a3ff12;
  }

  .zsm3-secondary {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    color: var(--zsm3-ink);
    font-size: 15px;
    font-weight: 500;
    text-decoration: none;
    -webkit-tap-highlight-color: transparent;
  }

  .zsm3-secondary:active {
    opacity: 0.6;
  }

  .zsm3-primary:focus-visible,
  .zsm3-secondary:focus-visible {
    outline: 2px solid var(--zsm3-ink);
    outline-offset: 3px;
    border-radius: 999px;
  }

  /* scroll cue: a hairline, not an arrow; plays twice, disappears on scroll */
  .zsm3-cue {
    position: relative;
    display: block;
    margin-inline-start: auto;
    inline-size: 1px;
    block-size: 30px;
    overflow: hidden;
    background: rgba(20, 23, 21, 0.14);
    transition: opacity 240ms var(--zsm3-ease);
  }

  .zsm3-cue i {
    position: absolute;
    inset-inline: 0;
    top: 0;
    block-size: 10px;
    background: var(--zsm3-ink);
    animation: zsm3-cue 2.2s var(--zsm3-ease) 3.4s 2 both;
    opacity: 0;
  }

  .zsm3[data-zsm3-scrolled] .zsm3-cue,
  .zsm3[data-zsm3-reduced] .zsm3-cue {
    opacity: 0;
  }

  @keyframes zsm3-cue {
    0% { transform: translate3d(0, -10px, 0); opacity: 0; }
    30% { opacity: 1; }
    100% { transform: translate3d(0, 30px, 0); opacity: 0; }
  }

  @media (prefers-reduced-motion: reduce) {
    .zsm3 {
      height: var(--zsm3-stage-h);
    }

    .zsm3-canvas,
    .zsm3-cap,
    .zsm3-primary {
      transition: none;
    }

    .zsm3-cue {
      display: none;
    }
  }
}

/* ZeroSpread — Market Ribbon
   The end of the hero: the chart's structure continues as a quiet pearl ribbon.
   Scoped entirely under .zs-ribbon — touches nothing else. */

.zs-ribbon{
  --rb-h:96px;          /* svg height incl. arc */
  --rb-arc:22px;        /* rise of the top edge at centre — melts into the hero floor */
  --rb-body:78px;
  --rb-ink:#141715;
  --rb-graphite:#2b302d;
  --rb-muted:#8a908c;
  --rb-hair:rgba(40,46,42,.07);
  --rb-up:#2f6b54;
  --rb-down:#9b4f49;
  --rb-flat:#8a908c;
  position:relative;z-index:3;
  height:var(--rb-h);
  margin-top:calc(var(--rb-arc) * -1);   /* the crest rises into the hero's last frame */
  font-family:"Tajawal",sans-serif;
  font-synthesis:none;
  font-variant-numeric:lining-nums tabular-nums;
  color:var(--rb-ink);
  direction:rtl;
  color-scheme:light;
  background:linear-gradient(to bottom,#f8f8f6 0%,#f6f6f4 58%,#fdfdfc 100%);
}
.zs-ribbon__shape{position:absolute;inset:0;width:100%;height:100%;display:block;overflow:visible;
  filter:none}
.zs-ribbon__edge{fill:none;stroke:var(--rb-hair);stroke-width:1;vector-effect:non-scaling-stroke}
.zs-ribbon__edge--low{stroke:rgba(40,46,42,.04)}
.zs-ribbon__ticks{stroke:rgba(40,46,42,.06);stroke-width:1;vector-effect:non-scaling-stroke}

.zs-ribbon__inner{position:absolute;inset-inline:var(--gutter,clamp(22px,4.4vw,64px));top:calc(var(--rb-arc) + 8px);bottom:6px;
  display:flex;align-items:center;gap:clamp(12px,1.4vw,26px)}

/* Arabic-first lead-in */
.zs-ribbon__lead{flex:none;display:flex;align-items:center;gap:10px;font-size:12.5px;font-weight:500;color:var(--rb-graphite);white-space:nowrap}
.zs-ribbon__live{position:relative;width:6px;height:6px;border-radius:50%;background:var(--rb-up)}
.zs-ribbon__live::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid var(--rb-up);opacity:0;animation:zs-rb-pulse 3.2s ease-out infinite}
@keyframes zs-rb-pulse{0%{transform:scale(.4);opacity:.45}70%,100%{transform:scale(1.25);opacity:0}}
.zs-ribbon__lead-rule{width:1px;height:22px;background:var(--rb-hair)}

/* Track */
.zs-ribbon__viewport{position:relative;flex:1;min-width:0;overflow:hidden;height:100%;display:flex;align-items:center}
.zs-ribbon__track{display:flex;align-items:center;width:100%;justify-content:space-between;list-style:none;margin:0;padding:0}
.zs-ribbon.is-flowing .zs-ribbon__viewport{
  -webkit-mask-image:linear-gradient(to left,transparent,#000 48px,#000 calc(100% - 48px),transparent);
          mask-image:linear-gradient(to left,transparent,#000 48px,#000 calc(100% - 48px),transparent)}
.zs-ribbon.is-flowing .zs-ribbon__track{width:max-content;justify-content:flex-start;animation:zs-rb-flow var(--rb-dur,60s) linear infinite}
.zs-ribbon.is-flowing .zs-ribbon__viewport:hover .zs-ribbon__track{animation-play-state:paused}
@keyframes zs-rb-flow{from{transform:translateX(0)}to{transform:translateX(50%)}}  /* RTL: content drifts toward reading direction */
.zs-ribbon.is-scroll .zs-ribbon__viewport{overflow-x:auto;scrollbar-width:none}
.zs-ribbon.is-scroll .zs-ribbon__track{width:max-content;justify-content:flex-start}

/* Item */
.zs-ribbon__item{flex:none;display:flex;align-items:center;gap:8px;direction:ltr;padding:0 clamp(11px,.9vw,20px);position:relative;height:40px}
.zs-ribbon__item + .zs-ribbon__item::before{content:"";position:absolute;right:0;top:11px;bottom:11px;width:1px;background:rgba(40,46,42,.06)}
.zs-ribbon__icon{flex:none;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;overflow:hidden;border:1px solid #dfe1dd;background:#fff}
.zs-ribbon__icon svg{width:24px;height:24px;display:block}
.zs-ribbon__label{font-size:11px;font-weight:500;letter-spacing:.035em;color:var(--rb-muted);white-space:nowrap}
.zs-ribbon__price{font-size:14px;font-weight:700;letter-spacing:-.005em;color:var(--rb-ink);white-space:nowrap;transition:opacity .5s}
.zs-ribbon__chg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:500;white-space:nowrap;color:var(--rb-flat)}
.zs-ribbon__chg::after{content:"";width:0;height:0;border-inline:3.5px solid transparent}
.zs-ribbon__chg[data-dir="up"]{color:var(--rb-up)}
.zs-ribbon__chg[data-dir="up"]::after{border-bottom:4.5px solid currentColor}
.zs-ribbon__chg[data-dir="down"]{color:var(--rb-down)}
.zs-ribbon__chg[data-dir="down"]::after{border-top:4.5px solid currentColor}
.zs-ribbon__chg[data-dir="none"]::after{display:none}
.zs-ribbon__chg[data-dir="flat"]::after{width:7px;height:1px;border:0;background:currentColor}
.zs-ribbon__price.is-ticking{opacity:.45}

@media (max-width:700px){
  .zs-ribbon{--rb-h:84px;--rb-arc:14px}
  .zs-ribbon__inner{inset-inline:0;gap:0}
  .zs-ribbon__lead{padding-inline:20px 14px;font-size:11.5px}
  .zs-ribbon__lead-rule{display:none}
  .zs-ribbon__item{padding:0 14px;gap:8px}
  .zs-ribbon__price{font-size:13.5px}
}
@media (prefers-reduced-motion:reduce){
  .zs-ribbon__live::after{display:none}
  .zs-ribbon.is-flowing .zs-ribbon__track{animation:none}
}

/*
 * ZeroSpread — Home Post-Hero V1.1 · Design tokens (polish pass)
 * Scoped to .zsph so nothing leaks into the host application.
 * Light theme only. Sharpened to match Indicators Light V2 ink discipline
 * without copying its layout. See docs/VISUAL_SYSTEM.md.
 */
.zsph {
  /* Typeface — the host must load Tajawal 400/500/700 (see docs/INTEGRATION_MANIFEST.md). */
  --zsph-font: 'Tajawal', sans-serif;

  /* Neutral canvas family */
  --zsph-canvas: #f7f8fa;          /* page chapters */
  --zsph-canvas-lab: #f2f4f7;      /* signature chapter — cooler pearl, softer handoff */
  --zsph-surface: #ffffff;         /* primary section surface */
  --zsph-well: #f8f9fb;            /* quiet inner well */
  --zsph-hover: #f4f5f7;           /* row / item hover tone */
  --zsph-press: #eef0f3;

  /* Ink — aligned to Indicators Light V2 sharpness */
  --zsph-ink: #0b0f14;             /* primary text */
  --zsph-ink-2: #1f2630;           /* strong secondary */
  --zsph-muted: #58616d;           /* body secondary */
  --zsph-faint: #8a929d;           /* metadata, axis labels */
  --zsph-ghost: #b9c0c8;           /* placeholders, empty glyphs */

  /* Lines — slightly firmer for product precision */
  --zsph-line: rgba(15, 23, 42, 0.09);
  --zsph-line-soft: rgba(15, 23, 42, 0.06);
  --zsph-line-strong: rgba(15, 23, 42, 0.16);
  --zsph-grid: rgba(15, 23, 42, 0.055);

  /* Market semantics — used ONLY where financial meaning requires them */
  --zsph-up: #0b7f57;
  --zsph-down: #c8372d;
  --zsph-up-soft: rgba(11, 127, 87, 0.1);
  --zsph-down-soft: rgba(200, 55, 45, 0.1);
  --zsph-candle-up: #1f9d6f;
  --zsph-candle-down: #d4483d;

  /* Brand — rare. Tiny marks only (chapter kicker, signature eyebrows, live dot). */
  --zsph-brand: #a3ff12;
  --zsph-brand-edge: #7cc70a;      /* 1px ring so the dot reads on white */

  /* Radius */
  --zsph-r-lg: 16px;               /* section surfaces */
  --zsph-r-md: 12px;               /* media, wells, nodes */
  --zsph-r-sm: 10px;               /* controls */
  --zsph-r-xs: 6px;                /* tags */

  /* Elevation — nearly invisible */
  --zsph-shadow: 0 1px 2px rgba(15, 23, 42, 0.035);
  --zsph-shadow-pop: 0 6px 20px -8px rgba(15, 23, 42, 0.18), 0 1px 2px rgba(15, 23, 42, 0.05);

  /* Layout — ~15–20% less inter-section air; internal readability preserved */
  --zsph-gutter: clamp(16px, 2.3vw, 40px);
  --zsph-max: var(--zs-w-workspace, 1840px); /* promoted to the Desktop V2 width family — same value */
  --zsph-section-gap: clamp(44px, 4vw, 70px);
  /* Related intelligence trio (Memory → Reaction → Contradiction) */
  --zsph-lab-flow-gap: clamp(28px, 2.6vw, 40px);
  --zsph-pad: clamp(16px, 1.45vw, 24px);   /* surface inner padding */

  /* Type scale (px) */
  --zsph-t-display: clamp(26px, 1.25vw + 12px, 33px);
  --zsph-t-value: clamp(26px, 1vw + 14px, 32px);
  --zsph-t-panel: 17px;
  --zsph-t-body: 14.5px;
  --zsph-t-small: 13px;
  --zsph-t-meta: 12px;

  /* Controls */
  --zsph-ctl-h: 34px;

  /* Motion */
  --zsph-ease: cubic-bezier(0.2, 0, 0, 1);
  --zsph-dur: 200ms;
}

@media (prefers-reduced-motion: reduce) {
  .zsph { --zsph-dur: 0ms; }
}

/*
 * ZeroSpread — Home Post-Hero V1
 * All selectors are scoped under .zsph (prefix zsph-). No global element resets.
 * Weights used: 400 / 500 / 700 only. letter-spacing: 0. font-synthesis: none.
 */

/* ------------------------------------------------------------------ */
/* Root                                                                */
/* ------------------------------------------------------------------ */
.zsph {
  font-family: var(--zsph-font);
  font-weight: 400;
  font-size: var(--zsph-t-body);
  line-height: 1.6;
  color: var(--zsph-ink);
  background: var(--zsph-canvas);
  letter-spacing: 0;
  font-synthesis: none;
  font-kerning: normal;
  font-optical-sizing: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  text-align: right;
  overflow-x: clip;
}
.zsph *, .zsph *::before, .zsph *::after { box-sizing: border-box; letter-spacing: 0; font-synthesis: none; }
.zsph :where(h1, h2, h3, h4, p, ul, ol, dl, dd, figure) { margin: 0; padding: 0; }
.zsph :where(ul, ol) { list-style: none; }
.zsph :where(button) { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
.zsph :where(a) { color: inherit; text-decoration: none; }
.zsph :where(table) { border-collapse: collapse; width: 100%; }
.zsph :where(th) { font-weight: inherit; text-align: inherit; }
.zsph :where(b, strong) { font-weight: 700; }
.zsph img { display: block; max-width: 100%; }

.zsph :where(a, button, [tabindex]):focus-visible {
  outline: 2px solid var(--zsph-ink);
  outline-offset: 2px;
  border-radius: 6px;
}

.zsph-num { font-variant-numeric: tabular-nums lining-nums; font-feature-settings: 'tnum' 1, 'lnum' 1; unicode-bidi: isolate; }
.zsph-sr { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.zsph-na { color: var(--zsph-ghost); font-weight: 500; }
.zsph-sep { display: inline-block; width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.45; margin: 0 8px; vertical-align: middle; }

.zsph-tone--up { color: var(--zsph-up); }
.zsph-tone--down { color: var(--zsph-down); }
.zsph-tone--flat, .zsph-tone--none { color: var(--zsph-muted); }

.zsph-brand-dot {
  display: inline-block; width: 7px; height: 7px; border-radius: 50%;
  background: var(--zsph-brand); box-shadow: 0 0 0 1px var(--zsph-brand-edge) inset;
  flex: none;
}

/* Fade for swapped panels (tabs / event switch) */
.zsph-fade { animation: zsph-fade var(--zsph-dur) var(--zsph-ease) both; }
@keyframes zsph-fade { from { opacity: 0; } to { opacity: 1; } }

/* ------------------------------------------------------------------ */
/* Layout / chapters                                                   */
/* ------------------------------------------------------------------ */
.zsph-wrap { width: 100%; max-width: calc(var(--zsph-max) + 2 * var(--zsph-gutter)); margin: 0 auto; padding: 0 var(--zsph-gutter); }
.zsph-chapter { padding: var(--zsph-section-gap) 0; }
.zsph-chapter--market { padding-top: clamp(32px, 2.8vw, 52px); }
.zsph-chapter--lab {
  background: var(--zsph-canvas-lab);
  /* Soft handoff — no hard band edge */
  box-shadow:
    inset 0 1px 0 rgba(15, 23, 42, 0.045),
    inset 0 -1px 0 rgba(15, 23, 42, 0.045);
  border-top: 0;
  border-bottom: 0;
}
.zsph-chapter--plan { padding-bottom: clamp(40px, 4vw, 72px); }

.zsph-wrap > .zsph-section + .zsph-section { margin-top: var(--zsph-section-gap); }
/* Tighter trilogy rhythm inside the lab chapter (legacy .zsph-section fallbacks) */
.zsph-chapter--lab .zsph-wrap > .zsph-section + .zsph-section { margin-top: var(--zsph-lab-flow-gap); }

/* One Intelligence chapter: Memory → Reaction → Contradiction share one gap, not three stacked paddings */
.zsph-lab-flow {
  display: flex;
  flex-direction: column;
  gap: var(--zsph-lab-flow-gap);
}
.zsph-chapter--lab .zsph-lab-flow > * {
  padding-block: 0;
  margin-block: 0;
}
.zsph-chapter--lab .zsph-lab-flow > .zsph-section + .zsph-section {
  margin-top: 0;
}

.zsph-chapter__intro {
  display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
  padding-bottom: 14px; margin-bottom: 28px;
  border-bottom: 1px solid var(--zsph-line-soft);
}
.zsph-chapter__kicker { display: inline-flex; align-items: center; gap: 8px; font-size: var(--zsph-t-small); font-weight: 700; color: var(--zsph-ink); }
.zsph-chapter__line { font-size: var(--zsph-t-small); color: var(--zsph-ink-2); font-weight: 500; }

.zsph-split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(20px, 2vw, 32px); align-items: stretch; }
.zsph-split > .zsph-section { display: flex; flex-direction: column; min-width: 0; }
.zsph-split > .zsph-section + .zsph-section { margin-top: 0; }
.zsph-grow { flex: 1 1 auto; }

/* ------------------------------------------------------------------ */
/* Section header                                                      */
/* ------------------------------------------------------------------ */
.zsph-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 16px; }
.zsph-head__text { min-width: 0; }
.zsph-head__eyebrow { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-size: 11px; font-weight: 500; color: var(--zsph-faint); line-height: 1; letter-spacing: 0; }
.zsph-head__sig { display: inline-flex; align-items: center; gap: 6px; color: var(--zsph-muted); font-weight: 500; font-size: 11px; }
.zsph-head__title { font-size: var(--zsph-t-display); font-weight: 700; line-height: 1.22; color: var(--zsph-ink); }
.zsph-head__sub { margin-top: 5px; font-size: var(--zsph-t-body); color: var(--zsph-ink-2); font-weight: 400; max-width: 58ch; line-height: 1.55; }
.zsph-head__side { display: flex; align-items: center; gap: 14px; flex: none; }
.zsph-head__meta { font-size: var(--zsph-t-meta); color: var(--zsph-faint); font-weight: 500; }
/* Trilogy signature headers share identical rhythm */
.zsph-chapter--lab .zsph-head { margin-bottom: 14px; }
.zsph-chapter--lab .zsph-head__sub { max-width: 52ch; }

/* ------------------------------------------------------------------ */
/* Primitives                                                          */
/* ------------------------------------------------------------------ */
.zsph-surface {
  background: var(--zsph-surface);
  border: 1px solid var(--zsph-line);
  border-radius: var(--zsph-r-lg);
  box-shadow: var(--zsph-shadow);
  min-width: 0;
}

.zsph-btn {
  display: inline-flex; align-items: center; gap: 8px;
  height: var(--zsph-ctl-h); padding: 0 14px;
  border-radius: var(--zsph-r-sm);
  font-size: var(--zsph-t-small); font-weight: 500; white-space: nowrap;
  transition: background-color var(--zsph-dur) var(--zsph-ease), border-color var(--zsph-dur) var(--zsph-ease), color var(--zsph-dur) var(--zsph-ease);
}
.zsph-btn svg { transition: transform var(--zsph-dur) var(--zsph-ease); }
.zsph-btn--ghost { color: var(--zsph-ink-2); border: 1px solid var(--zsph-line); background: var(--zsph-surface); }
.zsph-btn--ghost:hover { border-color: var(--zsph-line-strong); color: var(--zsph-ink); }
.zsph-btn--ghost:hover svg, .zsph-btn--line:hover svg { transform: translateX(-2px); }
.zsph-btn--line { color: var(--zsph-ink); border: 1px solid var(--zsph-line-strong); background: var(--zsph-surface); }
.zsph-btn--line:hover { background: var(--zsph-ink); border-color: var(--zsph-ink); color: #fff; }

.zsph-textlink { font-size: var(--zsph-t-small); font-weight: 500; color: var(--zsph-ink-2); text-decoration: underline; text-decoration-color: var(--zsph-line-strong); text-underline-offset: 4px; transition: text-decoration-color var(--zsph-dur) var(--zsph-ease); }
.zsph-textlink:hover { text-decoration-color: currentColor; }

.zsph-tag {
  display: inline-flex; align-items: center; height: 24px; padding: 0 8px;
  border: 1px solid var(--zsph-line); border-radius: var(--zsph-r-xs);
  font-size: var(--zsph-t-meta); font-weight: 500; color: var(--zsph-ink-2);
  background: var(--zsph-surface); white-space: nowrap;
}

.zsph-overline { font-size: 11.5px; font-weight: 500; color: var(--zsph-faint); line-height: 1.4; }
.zsph-panel-title { font-size: var(--zsph-t-panel); font-weight: 700; line-height: 1.35; }

.zsph-iconbtn {
  position: relative; z-index: 2;
  display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 8px; color: var(--zsph-faint);
  transition: background-color var(--zsph-dur) var(--zsph-ease), color var(--zsph-dur) var(--zsph-ease);
}
.zsph-iconbtn:hover { background: var(--zsph-hover); color: var(--zsph-ink); }
.zsph-iconbtn.is-on { color: var(--zsph-ink); }

/* Stretched link — the whole card is clickable, text stays selectable-ish */
.zsph-stretch::after { content: ''; position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
.zsph-stretch:focus-visible { outline: none; }
.zsph-stretch:focus-visible::after { outline: 2px solid var(--zsph-ink); outline-offset: 2px; border-radius: var(--zsph-r-md); }

/* Asset mark */
.zsph-mark {
  display: inline-grid; place-items: center; flex: none; overflow: hidden;
  background: var(--zsph-well); color: var(--zsph-ink-2);
  border: 1px solid var(--zsph-line);
  font-weight: 700; line-height: 1; font-variant-numeric: tabular-nums;
}
.zsph-mark--circle { border-radius: 50%; }
.zsph-mark--square { border-radius: var(--zsph-r-md); }
.zsph-mark--skel { width: 28px; height: 28px; border-radius: 50%; background: var(--zsph-press); border-color: var(--zsph-line-soft); }
.zsph-mark img { width: 100%; height: 100%; object-fit: cover; }

/* Change values */
.zsph-change { font-weight: 500; white-space: nowrap; }
.zsph-change--em { font-weight: 700; }

/* Direction glyph */
.zsph-glyph { flex: none; }

/* Tabs */
.zsph-tabs { display: flex; align-items: center; min-width: 0; }
.zsph-tabs--segment { gap: 2px; padding: 3px; background: var(--zsph-well); border: 1px solid var(--zsph-line-soft); border-radius: var(--zsph-r-sm); }
.zsph-tabs--segment .zsph-tab {
  height: 28px; min-width: 38px; padding: 0 10px; border-radius: 7px;
  font-size: var(--zsph-t-meta); font-weight: 500; color: var(--zsph-muted);
  font-variant-numeric: tabular-nums;
  transition: background-color var(--zsph-dur) var(--zsph-ease), color var(--zsph-dur) var(--zsph-ease), box-shadow var(--zsph-dur) var(--zsph-ease);
}
.zsph-tabs--segment .zsph-tab:hover { color: var(--zsph-ink); }
.zsph-tabs--segment .zsph-tab[aria-selected='true'] { background: var(--zsph-surface); color: var(--zsph-ink); font-weight: 700; box-shadow: 0 0 0 1px var(--zsph-line), 0 1px 2px rgba(15, 23, 42, 0.05); }
.zsph-tabs--underline { gap: 20px; overflow-x: auto; scrollbar-width: none; }
.zsph-tabs--underline::-webkit-scrollbar { display: none; }
.zsph-tabs--underline .zsph-tab {
  position: relative; height: 40px; flex: none;
  font-size: var(--zsph-t-small); font-weight: 500; color: var(--zsph-muted);
  transition: color var(--zsph-dur) var(--zsph-ease);
}
.zsph-tabs--underline .zsph-tab::after { content: ''; position: absolute; inset-inline: 0; bottom: 0; height: 2px; border-radius: 2px; background: var(--zsph-ink); transform: scaleX(0); transition: transform var(--zsph-dur) var(--zsph-ease); }
.zsph-tabs--underline .zsph-tab:hover { color: var(--zsph-ink); }
.zsph-tabs--underline .zsph-tab[aria-selected='true'] { color: var(--zsph-ink); font-weight: 700; }
.zsph-tabs--underline .zsph-tab[aria-selected='true']::after { transform: scaleX(1); }
.zsph-tabs--underline .zsph-tab:focus-visible { outline-offset: -2px; }

/* Empty state */
.zsph-empty { display: flex; align-items: flex-start; gap: 12px; padding: 28px var(--zsph-pad); color: var(--zsph-muted); }
.zsph-empty--compact { padding: 14px 0; gap: 10px; }
.zsph-empty__icon { display: inline-grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: 50%; border: 1px solid var(--zsph-line); color: var(--zsph-faint); background: var(--zsph-surface); }
.zsph-empty--compact .zsph-empty__icon { width: 28px; height: 28px; }
.zsph-empty__title { font-size: var(--zsph-t-small); font-weight: 700; color: var(--zsph-ink-2); line-height: 1.5; margin-top: 6px; }
.zsph-empty--compact .zsph-empty__title { margin-top: 4px; font-weight: 500; }
.zsph-empty__body { font-size: var(--zsph-t-small); color: var(--zsph-muted); margin-top: 2px; max-width: 60ch; }

/* Sparkline */
.zsph-spark { display: block; flex: none; overflow: visible; }
.zsph-spark path { fill: none; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
.zsph-spark--up path { stroke: var(--zsph-up); }
.zsph-spark--down path { stroke: var(--zsph-down); }
.zsph-spark--ink path { stroke: var(--zsph-ink-2); }
.zsph-spark--muted path, .zsph-spark--muted line { stroke: var(--zsph-ghost); fill: none; }
.zsph-spark__base { stroke: var(--zsph-line-strong); stroke-width: 1; stroke-dasharray: 1.5 2.5; }

/* Mini chart */
.zsph-mini { position: relative; width: 100%; color: var(--zsph-ink); }
.zsph-mini svg { display: block; overflow: visible; }
.zsph-mini__grid { stroke: var(--zsph-grid); stroke-width: 1; }
.zsph-mini__line { fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linejoin: round; stroke-linecap: round; }
.zsph-mini__after { fill: none; stroke: var(--zsph-faint); stroke-width: 1.5; stroke-dasharray: 3 3.5; stroke-linecap: round; }
.zsph-mini__split { stroke: var(--zsph-line-strong); stroke-width: 1; stroke-dasharray: 2 3; }
.zsph-mini--up { color: var(--zsph-up); }
.zsph-mini--down { color: var(--zsph-down); }
.zsph-mini__dot { position: absolute; width: 7px; height: 7px; margin: -3.5px 0 0 -3.5px; border-radius: 50%; background: currentColor; box-shadow: 0 0 0 2.5px var(--zsph-surface); }
.zsph-mini__split-label { position: absolute; top: -2px; transform: translateX(6px); font-size: 11px; font-weight: 500; color: var(--zsph-faint); white-space: nowrap; line-height: 1; }
.zsph-mini__level { stroke-width: 1; stroke-dasharray: 4 4; stroke: var(--zsph-line-strong); }
.zsph-mini__level--target { stroke: var(--zsph-up); stroke-opacity: 0.55; }
.zsph-mini__level--stop { stroke: var(--zsph-down); stroke-opacity: 0.5; }
.zsph-mini__level--entry { stroke: var(--zsph-ink-2); stroke-opacity: 0.45; }
.zsph-mini__level-tag {
  position: absolute; left: 0; transform: translateY(-50%);
  display: inline-flex; align-items: center; gap: 6px; height: 20px; padding: 0 7px;
  font-size: 11px; font-weight: 500; line-height: 1; color: var(--zsph-ink-2);
  background: var(--zsph-surface); border: 1px solid var(--zsph-line); border-radius: 5px; white-space: nowrap;
}
.zsph-mini__level-tag--target { color: var(--zsph-up); }
.zsph-mini__level-tag--stop { color: var(--zsph-down); }

/* ------------------------------------------------------------------ */
/* 01 · Market Overview — full-width chart workspace                   */
/* ------------------------------------------------------------------ */
.zsph-section--overview > .zsph-head { margin-bottom: 20px; }
.zsph-section--overview .zsph-head__title { font-size: clamp(30px, 1.2vw + 16px, 33px); line-height: 1.2; }
.zsph-section--overview .zsph-head__sub {
  max-width: 48ch;
  margin-top: 4px;
  font-size: 13.5px;
  font-weight: 400;
  line-height: 1.5;
  color: var(--zsph-muted);
}
.zsph-section--overview .zsph-head__eyebrow { margin-bottom: 4px; opacity: 0.75; }
.zsph-section--overview + .zsph-section { margin-top: clamp(40px, 3.2vw, 56px); }

.zsph-ov { overflow: hidden; }
.zsph-ov__workspace { padding: 10px var(--zsph-pad) 4px; min-width: 0; }

/* —— ZS Chart homepage embed —— */
.zsph-zs { min-width: 0; }
.zsph-zs__header {
  display: flex;
  align-items: center;
  gap: 10px 14px;
  min-height: 44px;
  flex-wrap: nowrap;
}
.zsph-zs__id { display: flex; align-items: center; gap: 10px; min-width: 0; flex: none; }
.zsph-zs__id-text { min-width: 0; padding-inline-end: 2px; display: flex; flex-direction: column; }
.zsph-zs__id--btn {
  text-align: start;
  border-radius: 10px;
  padding: 4px 6px 4px 4px;
  margin: -4px -6px -4px -4px;
  transition: background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__id--btn:hover,
.zsph-zs__picker.is-open .zsph-zs__id--btn {
  background: var(--zsph-well);
}
.zsph-zs__symbol-row {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
}
.zsph-zs__pick-chevron {
  flex: none;
  color: var(--zsph-muted);
  transition: transform var(--zsph-dur) var(--zsph-ease), color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__picker.is-open .zsph-zs__pick-chevron {
  transform: rotate(180deg);
  color: var(--zsph-ink);
}
.zsph-zs__picker { position: relative; flex: none; z-index: 6; }
.zsph-zs__pop {
  position: absolute;
  top: calc(100% + 8px);
  inset-inline-start: 0;
  width: min(360px, calc(100vw - 32px));
  max-height: min(420px, 70vh);
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 10px;
  border-radius: 12px;
  border: 1px solid var(--zsph-line);
  background: #fff;
  box-shadow: 0 12px 32px rgba(15, 23, 42, 0.12), 0 2px 6px rgba(15, 23, 42, 0.06);
  z-index: 20;
}
.zsph-zs__pop-search {
  width: 100%;
  height: 36px;
  padding: 0 12px;
  border-radius: 8px;
  border: 1px solid var(--zsph-line);
  background: var(--zsph-well);
  color: var(--zsph-ink);
  font-family: inherit;
  font-size: 13px;
  font-weight: 400;
  letter-spacing: 0;
  outline: none;
}
.zsph-zs__pop-search::placeholder { color: var(--zsph-ghost); }
.zsph-zs__pop-search:focus {
  border-color: rgba(15, 23, 42, 0.28);
  background: #fff;
}
.zsph-zs__pop-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
.zsph-zs__pop-tab {
  height: 28px;
  padding: 0 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 500;
  color: var(--zsph-muted);
  background: transparent;
  transition: color var(--zsph-dur) var(--zsph-ease), background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__pop-tab:hover { color: var(--zsph-ink); background: var(--zsph-well); }
.zsph-zs__pop-tab.is-on {
  color: #fff;
  background: var(--zsph-ink);
  font-weight: 700;
}
.zsph-zs__pop-list {
  overflow-y: auto;
  max-height: 280px;
  margin: 0 -4px;
  padding: 0 4px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.zsph-zs__pop-empty {
  padding: 18px 8px;
  text-align: center;
  font-size: 13px;
  font-weight: 400;
  color: var(--zsph-muted);
}
.zsph-zs__pop-row {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  min-height: 44px;
  padding: 6px 8px;
  border-radius: 8px;
  text-align: start;
  transition: background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__pop-row:hover,
.zsph-zs__pop-row.is-focus {
  background: var(--zsph-well);
}
.zsph-zs__pop-row.is-active {
  background: rgba(15, 23, 42, 0.06);
}
.zsph-zs__pop-row-icon {
  flex: none;
  width: 28px;
  height: 28px;
  display: grid;
  place-items: center;
  overflow: hidden;
  border-radius: 50%;
  background: var(--zsph-well);
  border: 1px solid var(--zsph-line);
  font-size: 9px;
  font-weight: 700;
  color: var(--zsph-ink-2);
}
.zsph-zs__pop-row-icon img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.zsph-zs__pop-row-fb {
  font-variant-numeric: tabular-nums;
  letter-spacing: 0;
}
.zsph-zs__pop-row-main {
  min-width: 0;
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 1px;
}
.zsph-zs__pop-row-symbol {
  font-size: 13.5px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--zsph-ink);
  font-variant-numeric: tabular-nums;
}
.zsph-zs__pop-row-name {
  font-size: 12px;
  font-weight: 400;
  line-height: 1.3;
  color: var(--zsph-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.zsph-zs__pop-row-cat {
  flex: none;
  font-size: 11px;
  font-weight: 500;
  color: var(--zsph-ghost);
  white-space: nowrap;
}
.zsph-zs__mark {
  display: inline-grid; place-items: center; flex: none;
  width: 32px; height: 32px; border-radius: 50%;
  background: var(--zsph-well); border: 1px solid var(--zsph-line);
  font-size: 10px; font-weight: 700; color: var(--zsph-ink-2);
  font-variant-numeric: tabular-nums; overflow: hidden;
}
.zsph-zs__mark img { width: 100%; height: 100%; object-fit: cover; display: block; }
.zsph-zs__symbol {
  font-size: 16.5px; font-weight: 700; line-height: 1.15;
  color: var(--zsph-ink); letter-spacing: 0;
}
.zsph-zs__name {
  margin-top: 1px;
  font-size: 12px; font-weight: 400; color: var(--zsph-muted);
  line-height: 1.3; letter-spacing: 0;
}
.zsph-zs__price {
  flex: none;
  margin-inline-start: 2px;
  font-size: clamp(34px, 1.05vw + 20px, 37px); font-weight: 700; line-height: 1;
  font-variant-numeric: tabular-nums; color: var(--zsph-ink); letter-spacing: 0;
}
.zsph-zs__delta {
  display: inline-flex; align-items: baseline; gap: 8px; flex: none;
  font-size: 13.5px; font-weight: 700; line-height: 1;
  padding-inline-start: 2px;
}
.zsph-zs__pct { font-weight: 700; font-size: 13.5px; }
.zsph-zs__abs { font-weight: 700; font-size: 13.5px; }
.zsph-zs__live {
  display: inline-flex; align-items: center; gap: 6px;
  margin-inline-start: auto;
  font-size: 12px; font-weight: 500; color: var(--zsph-muted); white-space: nowrap;
  line-height: 1;
}
.zsph-zs__live-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--zsph-faint); flex: none; }
.zsph-zs__live--live .zsph-zs__live-dot { background: var(--zsph-up); }
.zsph-zs__live--poll .zsph-zs__live-dot { background: #c9891a; }
.zsph-zs__live--loading .zsph-zs__live-dot { background: var(--zsph-ghost); }
.zsph-zs__live-clock { color: var(--zsph-faint); }

.zsph-zs__controls {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  height: 36px; margin-top: 8px; flex-wrap: nowrap;
}
.zsph-zs__tfs {
  display: inline-flex; align-items: center; gap: 2px; flex: none; height: 100%;
}
.zsph-zs__tf {
  height: 30px; min-width: 38px; padding: 0 10px; border-radius: 7px;
  font-size: 12px; font-weight: 500; color: var(--zsph-muted);
  font-variant-numeric: tabular-nums; letter-spacing: 0;
  transition: color var(--zsph-dur) var(--zsph-ease), background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__tf:hover { color: var(--zsph-ink); }
.zsph-zs__tf.is-on { background: var(--zsph-ink); color: #fff; font-weight: 700; }
.zsph-zs__tools {
  display: inline-flex; align-items: center; gap: 1px; flex: none; height: 30px;
  padding: 2px; border: 1px solid var(--zsph-line); border-radius: 7px;
  background: var(--zsph-surface);
}
.zsph-zs__tool {
  display: inline-grid; place-items: center; width: 28px; height: 26px;
  border-radius: 5px; color: var(--zsph-muted);
  transition: color var(--zsph-dur) var(--zsph-ease), background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-zs__tool:hover { color: var(--zsph-ink); background: var(--zsph-hover); }
.zsph-zs__tool.is-on { color: var(--zsph-ink); background: var(--zsph-well); }

.zsph-zs__plot {
  position: relative;
  margin-top: 2px;
  min-width: 0;
  height: 456px;
  border-radius: 0;
  overflow: hidden;
  background: #fff;
}
.zsph-zs__plot:fullscreen {
  padding: 20px; background: #fff; box-sizing: border-box;
}
.zsph-zs__host { position: relative; width: 100%; height: 100%; min-height: 280px; }
.zsph-zs__host canvas { display: block; }
.zsph-zs__loading {
  position: absolute; inset: 0; display: grid; place-items: center;
  font-size: var(--zsph-t-small); font-weight: 500; color: var(--zsph-muted);
  background: rgba(255, 255, 255, 0.72); pointer-events: none; z-index: 2;
}
.zsph-zs__tip {
  position: absolute; top: 0; left: 0; z-index: 4;
  width: 168px; padding: 8px 10px; border-radius: 8px;
  background: #fbfbfc; border: 1px solid rgba(15, 23, 42, 0.1);
  box-shadow: 0 6px 18px -12px rgba(15, 23, 42, 0.28), 0 1px 1px rgba(15, 23, 42, 0.04);
  pointer-events: none; opacity: 0; visibility: hidden;
  font-size: 11.5px; color: var(--zsph-ink); letter-spacing: 0;
}
.zsph-zs__tip.is-on { opacity: 1; visibility: visible; }
.zsph-zs__tip-time { color: var(--zsph-muted); margin-bottom: 4px; white-space: nowrap; font-size: 11px; font-weight: 400; }
.zsph-zs__tip dl div { display: flex; justify-content: space-between; gap: 16px; line-height: 1.55; }
.zsph-zs__tip dt { color: var(--zsph-faint); font-weight: 400; }
.zsph-zs__tip dd { font-weight: 500; color: var(--zsph-ink); font-variant-numeric: tabular-nums; min-width: 4.5ch; text-align: left; }

/* Bottom market rail — continuous strip, not cards */
.zsph-ov__rail {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  border-top: 1px solid var(--zsph-line);
  margin: 0;
}
.zsph-ov__rail > li { min-width: 0; }
.zsph-ov__rail > li + li { border-inline-start: 1px solid var(--zsph-line-soft); }
.zsph-ov__rail-item {
  display: flex; flex-direction: column; justify-content: space-between; gap: 10px;
  padding: 12px var(--zsph-pad) 14px; height: 100%; min-height: 72px;
  transition: background-color var(--zsph-dur) var(--zsph-ease);
}
a.zsph-ov__rail-item:hover { background: var(--zsph-hover); }
.zsph-ov__rail-label {
  font-size: 12.5px; font-weight: 500; color: var(--zsph-muted);
  line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.zsph-ov__rail-row {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  min-height: 26px;
  font-size: 16px; font-weight: 700; line-height: 1;
}
.zsph-ov__rail-row .zsph-chg { line-height: 1; }
.zsph-ov__spark { flex: none; }

.zsph-cc__line { stroke: var(--zsph-ink-2); stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.zsph-ov .zsph-cc__last-tag { background: var(--zsph-up); }

/* Candle chart */
.zsph-cc { --axis-w: 72px; --axis-h: 24px; position: relative; display: flex; flex-direction: column; user-select: none; }
.zsph-cc__plot { position: relative; flex: 1 1 auto; display: flex; min-height: 0; }
.zsph-cc__canvas { position: relative; flex: 1 1 auto; min-width: 0; cursor: crosshair; touch-action: pan-y; }
.zsph-cc__canvas:focus-visible { outline: 2px solid var(--zsph-ink); outline-offset: 4px; border-radius: 4px; }
.zsph-cc svg { display: block; position: absolute; inset: 0; overflow: visible; }
.zsph-cc__grid { stroke: var(--zsph-grid); stroke-width: 1; }
.zsph-cc__up line { stroke: var(--zsph-candle-up); stroke-width: 1; }
.zsph-cc__up rect { fill: var(--zsph-candle-up); }
.zsph-cc__down line { stroke: var(--zsph-candle-down); stroke-width: 1; }
.zsph-cc__down rect { fill: var(--zsph-candle-down); }
.zsph-cc__vol { fill: rgba(15, 23, 42, 0.09); }
.zsph-cc__vol.is-active { fill: rgba(15, 23, 42, 0.28); }
.zsph-cc__last { stroke: var(--zsph-ink); stroke-opacity: 0.35; stroke-width: 1; stroke-dasharray: 2 3; }
.zsph-cc__cross { stroke: var(--zsph-ink); stroke-opacity: 0.35; stroke-width: 1; stroke-dasharray: 3 3; }
.zsph-cc__yaxis { position: relative; width: var(--axis-w); flex: none; }
.zsph-cc__yaxis span { position: absolute; left: 10px; transform: translateY(-50%); font-size: 11.5px; color: var(--zsph-faint); line-height: 1; white-space: nowrap; }
.zsph-cc__yaxis .zsph-cc__last-tag { left: 4px; padding: 4px 6px; border-radius: 5px; background: var(--zsph-ink); color: #fff; font-weight: 500; }
.zsph-cc__xaxis { position: relative; height: var(--axis-h); margin-right: var(--axis-w); }
.zsph-cc__xaxis span { position: absolute; top: 8px; transform: translateX(-50%); font-size: 11.5px; color: var(--zsph-faint); line-height: 1; white-space: nowrap; }
.zsph-cc__xaxis span.is-start { transform: none; }
.zsph-cc__xaxis span.is-end { transform: translateX(-100%); }
.zsph-cc__tip {
  position: absolute; top: 8px; z-index: 3; transform: translateX(14px);
  min-width: 176px; padding: 10px 12px; border-radius: 10px;
  background: var(--zsph-surface); border: 1px solid var(--zsph-line); box-shadow: var(--zsph-shadow-pop);
  pointer-events: none; font-size: var(--zsph-t-meta);
}
.zsph-cc__tip.is-left { transform: translateX(calc(-100% - 14px)); }
.zsph-cc__tip-time { color: var(--zsph-muted); margin-bottom: 6px; white-space: nowrap; }
.zsph-cc__tip dl div { display: flex; justify-content: space-between; gap: 16px; line-height: 1.75; }
.zsph-cc__tip dt { color: var(--zsph-faint); }
.zsph-cc__tip dd { font-weight: 500; color: var(--zsph-ink); }

/* ------------------------------------------------------------------ */
/* 02 · News                                                           */
/* ------------------------------------------------------------------ */
.zsph-news { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(18px, 1.8vw, 28px); }
.zsph-news--n2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.zsph-news--n1 { grid-template-columns: minmax(0, 1fr); max-width: 720px; }
.zsph-news__item { position: relative; display: flex; flex-direction: column; min-width: 0; border-radius: var(--zsph-r-md); }
.zsph-news__media { position: relative; aspect-ratio: 16 / 10; border-radius: var(--zsph-r-md); overflow: hidden; background: var(--zsph-well); border: 1px solid var(--zsph-line-soft); }
.zsph-news__media img { width: 100%; height: 100%; object-fit: cover; object-position: center; transition: filter var(--zsph-dur) var(--zsph-ease); }
.zsph-news__noimg { position: absolute; inset: 0; display: grid; place-items: center; color: var(--zsph-ghost); }
.zsph-news__item:hover .zsph-news__media img { filter: brightness(0.94); }
.zsph-news__body { padding-top: 12px; max-width: 42ch; }
.zsph-news__meta { display: flex; align-items: center; flex-wrap: wrap; font-size: 11.5px; color: var(--zsph-faint); line-height: 1.35; }
.zsph-news__meta > * + *::before { content: ''; display: inline-block; width: 3px; height: 3px; border-radius: 50%; background: currentColor; opacity: 0.55; margin: 0 7px; vertical-align: middle; }
.zsph-news__cat { font-weight: 700; color: var(--zsph-ink-2); }
.zsph-news__title { margin-top: 8px; font-size: clamp(16.5px, 0.3vw + 12.5px, 18.5px); font-weight: 700; line-height: 1.48; color: var(--zsph-ink); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.zsph-news__title a { transition: color var(--zsph-dur) var(--zsph-ease); background-image: linear-gradient(currentColor, currentColor); background-size: 0 1px; background-repeat: no-repeat; background-position: 100% 100%; }
.zsph-news__item:hover .zsph-news__title a { color: var(--zsph-ink-2); }
.zsph-news__sum { margin-top: 6px; font-size: var(--zsph-t-small); color: var(--zsph-muted); line-height: 1.65; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* ------------------------------------------------------------------ */
/* 03 · Ideas                                                          */
/* ------------------------------------------------------------------ */
.zsph-ideas { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.zsph-ideas--n2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.zsph-ideas--n1 { grid-template-columns: minmax(0, 1fr); }
.zsph-idea { position: relative; display: flex; flex-direction: column; padding: var(--zsph-pad); min-width: 0; transition: background-color var(--zsph-dur) var(--zsph-ease); }
.zsph-idea + .zsph-idea { border-inline-start: 1px solid var(--zsph-line); }
.zsph-idea:hover { background: #fcfcfd; }
.zsph-idea:first-child { border-start-start-radius: var(--zsph-r-lg); border-end-start-radius: var(--zsph-r-lg); }
.zsph-idea:last-child { border-start-end-radius: var(--zsph-r-lg); border-end-end-radius: var(--zsph-r-lg); }
.zsph-idea__head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.zsph-idea__inst { display: flex; align-items: center; gap: 10px; min-width: 0; }
.zsph-idea__sym { font-size: 16px; font-weight: 700; line-height: 1.15; text-align: right; color: var(--zsph-ink); }
.zsph-idea__iname { font-size: var(--zsph-t-meta); color: var(--zsph-muted); line-height: 1.35; }
.zsph-idea__chart { margin-top: 14px; }
.zsph-idea__chart--empty { height: 132px; display: grid; place-items: center; }
.zsph-idea__chart--scaffold {
  height: 124px;
  margin: 4px 0 2px;
  border-radius: var(--zsph-r-sm);
  background: var(--zsph-well);
  border: 1px solid var(--zsph-line-soft);
  display: grid;
  place-items: center;
  overflow: hidden;
}
.zsph-idea__chart--scaffold svg {
  width: 92%;
  height: 70%;
  stroke: rgba(15, 23, 42, 0.14);
  stroke-width: 1.2;
  fill: none;
}
.zsph-idea__chart--scaffold line { stroke: var(--zsph-grid); stroke-width: 0.7; }
.zsph-idea__bias { display: flex; align-items: center; gap: 10px; margin-top: 12px; font-size: var(--zsph-t-meta); color: var(--zsph-faint); font-weight: 500; }
.zsph-idea__dir { display: inline-flex; align-items: center; gap: 4px; font-weight: 700; font-size: 13px; }
.zsph-idea__bias > * + *::before { content: ''; display: inline-block; width: 3px; height: 3px; border-radius: 50%; background: var(--zsph-faint); opacity: 0.6; margin-inline-end: 10px; vertical-align: middle; }
.zsph-idea__title { margin-top: 5px; font-size: 15.5px; font-weight: 700; line-height: 1.55; color: var(--zsph-ink-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: calc(2 * 1.55em); }
.zsph-idea__foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--zsph-line-soft); opacity: 0.88; }
.zsph-idea__author { display: flex; align-items: center; min-width: 0; font-size: 11.5px; color: var(--zsph-faint); }
.zsph-idea__avatar { display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; margin-inline-end: 7px; background: var(--zsph-well); border: 1px solid var(--zsph-line); font-size: 10px; font-weight: 700; color: var(--zsph-muted); flex: none; overflow: hidden; }
.zsph-idea__aname { font-weight: 500; color: var(--zsph-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zsph-idea__author .zsph-sep { margin: 0 8px; }
.zsph-idea__author time { white-space: nowrap; }
.zsph-idea__eng { display: flex; align-items: center; gap: 12px; color: var(--zsph-ghost); font-size: 11.5px; flex: none; }
.zsph-idea__eng > span { display: inline-flex; align-items: center; gap: 4px; font-weight: 500; }
.zsph-idea__eng .zsph-iconbtn { margin-inline-start: -4px; }

/* ------------------------------------------------------------------ */
/* 04 · Market memory                                                  */
/* ------------------------------------------------------------------ */
.zsph-mem__grid { display: grid; grid-template-columns: minmax(280px, 0.92fr) minmax(0, 2.08fr); }
.zsph-mem__now {
  padding: calc(var(--zsph-pad) + 2px) var(--zsph-pad) var(--zsph-pad);
  background: var(--zsph-well);
  border-inline-end: 1px solid var(--zsph-line);
  border-start-start-radius: var(--zsph-r-lg);
  display: flex; flex-direction: column;
}
.zsph-mem__now-kicker { color: var(--zsph-ink-2); font-weight: 700; font-size: 11.5px; }
.zsph-mem__now-id { display: flex; align-items: center; gap: 12px; margin-top: 10px; }
.zsph-mem__sym { font-size: 19px; font-weight: 700; line-height: 1.15; text-align: right; color: var(--zsph-ink); }
.zsph-mem__win { font-size: var(--zsph-t-meta); color: var(--zsph-muted); margin-top: 3px; font-weight: 500; }
.zsph-mem__win .zsph-sep { margin: 0 6px; }
.zsph-mem__now-chart { margin-top: 16px; flex: 1 1 auto; min-height: 148px; }
.zsph-mem__now-chart .zsph-mini__dot { box-shadow: 0 0 0 2.5px var(--zsph-well); }
.zsph-mem__desc { margin-top: 14px; font-size: 13.5px; line-height: 1.7; color: var(--zsph-ink-2); font-weight: 500; }
.zsph-mem__traits { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.zsph-mem__traits li { font-size: 11.5px; font-weight: 500; color: var(--zsph-ink-2); padding: 3px 8px; border-radius: var(--zsph-r-xs); border: 1px solid var(--zsph-line); background: var(--zsph-surface); }

.zsph-mem__cases { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.zsph-mem__case, .zsph-mem__slot { padding: var(--zsph-pad); min-width: 0; display: flex; flex-direction: column; }
.zsph-mem__cases > * + * { border-inline-start: 1px solid var(--zsph-line-soft); }
.zsph-mem__case.is-primary { background: linear-gradient(180deg, rgba(15, 23, 42, 0.018) 0%, transparent 48%); }
.zsph-mem__case.is-primary .zsph-mem__period { font-size: 17.5px; }
.zsph-mem__case.is-primary .zsph-overline { color: var(--zsph-ink-2); font-weight: 700; }
.zsph-mem__case-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.zsph-mem__period { font-size: 16.5px; font-weight: 700; line-height: 1.3; margin-top: 3px; color: var(--zsph-ink); }
.zsph-mem__sim { display: grid; grid-template-columns: auto auto; align-items: baseline; column-gap: 8px; row-gap: 5px; justify-items: end; }
.zsph-mem__sim-label { font-size: 11px; color: var(--zsph-faint); }
.zsph-mem__sim-val { font-size: 14.5px; font-weight: 700; }
.zsph-mem__sim-bar { grid-column: 1 / -1; width: 64px; height: 2px; border-radius: 2px; background: var(--zsph-line); overflow: hidden; direction: ltr; }
.zsph-mem__sim-bar span { display: block; height: 100%; background: var(--zsph-ink); border-radius: inherit; }
.zsph-mem__sim--na { display: block; font-size: var(--zsph-t-meta); color: var(--zsph-faint); max-width: 11ch; text-align: left; line-height: 1.4; }
.zsph-mem__case-chart { margin-top: 18px; }
.zsph-mem__case-chart--empty { height: 96px; display: grid; place-items: center; }
.zsph-mem__scaffold {
  position: relative;
  margin-top: 12px;
  border-radius: var(--zsph-r-sm);
  background: var(--zsph-well);
  border: 1px solid var(--zsph-line-soft);
  display: grid;
  place-items: center;
  overflow: hidden;
}
.zsph-mem__scaffold svg {
  position: absolute;
  inset: 10px 12px;
  width: calc(100% - 24px);
  height: calc(100% - 20px);
  stroke: rgba(15, 23, 42, 0.16);
  stroke-width: 1.15;
  fill: none;
}
.zsph-mem__scaffold line { stroke: var(--zsph-grid); stroke-width: 0.7; }
.zsph-mem__scaffold span {
  position: relative;
  z-index: 1;
  font-size: var(--zsph-t-meta);
  font-weight: 500;
  color: var(--zsph-muted);
  background: rgba(248, 249, 251, 0.82);
  padding: 4px 10px;
  border-radius: 999px;
}
.zsph-mem__out { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin-top: auto; padding-top: 16px; }
.zsph-mem__out > div { padding-top: 10px; border-top: 1px solid var(--zsph-line-soft); }
.zsph-mem__out > div + div { padding-inline-start: 10px; }
.zsph-mem__out dt { font-size: 11px; color: var(--zsph-faint); line-height: 1.35; }
.zsph-mem__out dd { font-size: 16px; margin-top: 3px; line-height: 1.25; }
.zsph-mem__note { margin-top: 8px; font-size: 11.5px; color: var(--zsph-muted); }
.zsph-mem__slot { justify-content: flex-start; background: repeating-linear-gradient(135deg, transparent 0 7px, rgba(15, 23, 42, 0.022) 7px 8px); }
.zsph-mem__slot-text { margin-top: 10px; font-size: var(--zsph-t-small); color: var(--zsph-muted); max-width: 26ch; }
.zsph-mem__none { grid-column: 1 / -1; display: grid; align-items: center; }
.zsph-mem__foot { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 12px var(--zsph-pad); border-top: 1px solid var(--zsph-line); font-size: var(--zsph-t-meta); color: var(--zsph-muted); }
.zsph-mem__foot p { display: inline-flex; align-items: center; gap: 8px; }
.zsph-mem__foot svg { color: var(--zsph-faint); flex: none; }

/* ------------------------------------------------------------------ */
/* 05 · Reaction graph                                                 */
/* ------------------------------------------------------------------ */
.zsph-rx { display: grid; grid-template-columns: minmax(240px, 280px) minmax(0, 1fr); }
.zsph-rx__side { padding: var(--zsph-pad); border-inline-end: 1px solid var(--zsph-line); display: flex; flex-direction: column; gap: 14px; }
.zsph-rx__events { display: flex; flex-direction: column; gap: 3px; margin-top: -4px; }
.zsph-rx__event {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  min-height: 40px; padding: 7px 11px; border-radius: var(--zsph-r-sm); text-align: right;
  border: 1px solid transparent; color: var(--zsph-muted);
  transition: background-color var(--zsph-dur) var(--zsph-ease), border-color var(--zsph-dur) var(--zsph-ease), color var(--zsph-dur) var(--zsph-ease);
}
.zsph-rx__event:hover { background: var(--zsph-hover); color: var(--zsph-ink); }
.zsph-rx__event[aria-pressed='true'] { background: var(--zsph-surface); border-color: var(--zsph-line-strong); color: var(--zsph-ink); box-shadow: var(--zsph-shadow); }
.zsph-rx__event-title { font-size: var(--zsph-t-small); font-weight: 500; }
.zsph-rx__event[aria-pressed='true'] .zsph-rx__event-title { font-weight: 700; }
.zsph-rx__event-date { font-size: 11px; color: var(--zsph-faint); white-space: nowrap; }
.zsph-rx__context { font-size: var(--zsph-t-small); line-height: 1.7; color: var(--zsph-ink-2); padding-top: 14px; border-top: 1px solid var(--zsph-line-soft); }
.zsph-rx__legend-title { font-size: 11px; color: var(--zsph-faint); margin-bottom: 7px; }
.zsph-rx__legend { display: flex; flex-wrap: wrap; gap: 8px 16px; }
.zsph-rx__legend li { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--zsph-ink-2); font-weight: 500; }
.zsph-rx__key { display: block; width: 20px; height: 0; border-top: 1.5px solid rgba(15, 23, 42, 0.5); }
.zsph-rx__key--medium { border-top: 1px solid rgba(15, 23, 42, 0.32); }
.zsph-rx__key--low { border-top: 1px dashed rgba(15, 23, 42, 0.32); }
.zsph-rx__note { margin-top: auto; display: flex; gap: 8px; align-items: flex-start; font-size: var(--zsph-t-meta); color: var(--zsph-muted); line-height: 1.55; }
.zsph-rx__note svg { flex: none; margin-top: 2px; color: var(--zsph-faint); }

.zsph-rx__stage { padding: clamp(16px, 2vw, 32px) clamp(14px, 2vw, 36px); min-width: 0; display: grid; align-items: center;
  background-image: radial-gradient(rgba(15, 23, 42, 0.06) 1px, transparent 1px); background-size: 18px 18px; background-position: center; border-start-end-radius: var(--zsph-r-lg); border-end-end-radius: var(--zsph-r-lg); }
.zsph-rx__graph { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) minmax(188px, 228px) minmax(0, 1fr); column-gap: clamp(40px, 6vw, 96px); align-items: center; }
.zsph-rx__wires { position: absolute; inset: 0; pointer-events: none; overflow: visible; }
.zsph-rx__wire path { fill: none; stroke: rgba(15, 23, 42, 0.22); stroke-width: 1; transition: stroke var(--zsph-dur) var(--zsph-ease), opacity var(--zsph-dur) var(--zsph-ease); }
.zsph-rx__wire circle { fill: var(--zsph-surface); stroke: rgba(15, 23, 42, 0.38); stroke-width: 1; transition: opacity var(--zsph-dur) var(--zsph-ease); }
.zsph-rx__wire--high path { stroke: rgba(15, 23, 42, 0.48); stroke-width: 1.5; }
.zsph-rx__wire--low path, .zsph-rx__wire--none path { stroke-dasharray: 3.5 3.5; }
.zsph-rx__wire--none path { stroke: rgba(15, 23, 42, 0.16); }
.zsph-rx__wire.is-active path { stroke: var(--zsph-ink); }
.zsph-rx__wire.is-active circle { stroke: var(--zsph-ink); fill: var(--zsph-ink); }
.zsph-rx__wire.is-dim { opacity: 0.32; }
.zsph-rx__col { position: relative; display: flex; flex-direction: column; gap: 12px; z-index: 1; min-width: 0; }
.zsph-rx__node {
  position: relative; padding: 11px 13px; border-radius: var(--zsph-r-md);
  background: var(--zsph-surface); border: 1px solid var(--zsph-line);
  box-shadow: var(--zsph-shadow);
  transition: border-color var(--zsph-dur) var(--zsph-ease), opacity var(--zsph-dur) var(--zsph-ease);
}
.zsph-rx__node.is-active { border-color: var(--zsph-line-strong); }
.zsph-rx__node.is-dim { opacity: 0.5; }
.zsph-rx__node-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.zsph-rx__node-title { font-size: 14px; font-weight: 700; line-height: 1.35; color: var(--zsph-ink); }
.zsph-rx__node-sym { font-size: 10.5px; font-weight: 500; color: var(--zsph-faint); }
.zsph-rx__node-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 5px; flex-wrap: wrap; }
.zsph-rx__tend { display: inline-flex; align-items: center; gap: 4px; font-size: 11.5px; font-weight: 500; color: var(--zsph-ink-2); }
.zsph-rx__tend--mixed, .zsph-rx__tend--none { color: var(--zsph-muted); }
.zsph-rx__obs { display: inline-flex; align-items: baseline; gap: 6px; font-size: var(--zsph-t-small); }
.zsph-rx__obs-label { font-size: 10.5px; color: var(--zsph-faint); }
.zsph-rx__obs .zsph-change { font-weight: 700; }
.zsph-rx__rel { margin-top: 3px; font-size: 11.5px; line-height: 1.55; color: var(--zsph-muted); }
.zsph-rx__hub { position: relative; z-index: 1; padding: 16px 16px 14px; border-radius: 14px; background: var(--zsph-ink); color: #fff; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.1); text-align: center; }
.zsph-rx__hub-status { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 500; color: rgba(255, 255, 255, 0.58); }
.zsph-rx__hub-title { margin-top: 7px; font-size: 16.5px; font-weight: 700; line-height: 1.4; }
.zsph-rx__hub-date { margin-top: 5px; font-size: var(--zsph-t-meta); color: rgba(255, 255, 255, 0.68); }
.zsph-rx__hub-count { margin-top: 10px; padding-top: 9px; border-top: 1px solid rgba(255, 255, 255, 0.12); font-size: 11px; color: rgba(255, 255, 255, 0.55); }

/* ------------------------------------------------------------------ */
/* 06 · Contradiction detector — analytical strip (not a spreadsheet)  */
/* ------------------------------------------------------------------ */
.zsph-cd__scale { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; padding: 11px var(--zsph-pad); border-bottom: 1px solid var(--zsph-line); }
.zsph-cd__scale-title { font-size: 11px; color: var(--zsph-faint); font-weight: 500; }
.zsph-cd__scale ol { display: flex; flex-wrap: wrap; gap: 6px 18px; }
.zsph-cd__scale li { display: inline-flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--zsph-ink-2); font-weight: 500; }
.zsph-cd__meter { display: inline-flex; gap: 2px; direction: rtl; }
.zsph-cd__meter span { width: 9px; height: 3px; border-radius: 1px; background: var(--zsph-line); }
.zsph-cd__meter span.is-on { background: var(--zsph-ink-2); }
.zsph-cd__meter--high span.is-on { background: var(--zsph-down); }

.zsph-cd__list { display: flex; flex-direction: column; }
.zsph-cd__row {
  display: grid;
  grid-template-columns: minmax(140px, 0.85fr) minmax(0, 2.1fr) minmax(160px, 1.05fr);
  gap: 14px 18px;
  align-items: center;
  padding: 11px var(--zsph-pad);
  transition: background-color var(--zsph-dur) var(--zsph-ease);
}
.zsph-cd__row + .zsph-cd__row { border-top: 1px solid var(--zsph-line-soft); }
.zsph-cd__row:hover { background: var(--zsph-hover); }
.zsph-cd__row:last-child { border-end-start-radius: var(--zsph-r-lg); border-end-end-radius: var(--zsph-r-lg); }

.zsph-cd__inst-link { display: flex; align-items: center; gap: 11px; min-width: 0; }
.zsph-cd__inst-link > span:last-child { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.zsph-cd__sym { font-size: 14px; font-weight: 700; text-align: right; color: var(--zsph-ink); }
.zsph-cd__name { font-size: 11.5px; color: var(--zsph-muted); }

/* Compact internal-signal strip: LABEL → arrow → micro track */
.zsph-cd__strip {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(72px, 1fr));
  gap: 6px 10px;
  align-items: stretch;
  padding: 8px 10px;
  border-radius: var(--zsph-r-sm);
  border: 1px solid var(--zsph-line-soft);
  background: var(--zsph-well);
}
.zsph-cd__cell {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-rows: auto auto;
  grid-template-areas: 'label dir' 'track track';
  align-items: center;
  column-gap: 6px;
  row-gap: 4px;
  min-width: 0;
  padding: 2px 4px;
}
.zsph-cd__cell + .zsph-cd__cell { border-inline-start: 1px solid var(--zsph-line-soft); padding-inline-start: 10px; margin-inline-start: 2px; }
.zsph-cd__cell-label { grid-area: label; font-size: 10.5px; font-weight: 500; color: var(--zsph-faint); line-height: 1.2; }
.zsph-cd__cell-dir { grid-area: dir; display: inline-flex; align-items: center; justify-content: flex-end; }
.zsph-cd__cell .zsph-glyph { color: var(--zsph-ink-2); }
.zsph-cd__cell--up .zsph-glyph { color: var(--zsph-ink-2); }
.zsph-cd__cell--down .zsph-glyph { color: var(--zsph-ink-2); }
.zsph-cd__cell--flat .zsph-glyph { color: var(--zsph-faint); }
.zsph-cd__cell--price { font-weight: 700; }
.zsph-cd__cell--price .zsph-cd__cell-label { color: var(--zsph-ink-2); font-weight: 700; }
.zsph-cd__cell--price .zsph-glyph { color: inherit; }
.zsph-cd__cell--na .zsph-na { grid-area: dir; font-size: 12px; }
.zsph-cd__track {
  grid-area: track;
  display: block;
  width: 100%;
  height: 2px;
  border-radius: 1px;
  background: var(--zsph-line);
  overflow: hidden;
  direction: ltr;
}
.zsph-cd__track span { display: block; height: 100%; background: var(--zsph-ink-2); opacity: 0.45; border-radius: inherit; }
.zsph-cd__cell--price .zsph-cd__track span { background: currentColor; opacity: 0.65; }

/* Verdict is the focal point */
.zsph-cd__verdict {
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 8px 12px;
  border-radius: var(--zsph-r-sm);
  border: 1px solid var(--zsph-line);
  background: var(--zsph-surface);
  min-width: 0;
}
.zsph-cd__level { display: inline-flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 700; line-height: 1.3; color: var(--zsph-ink); }
.zsph-cd__row--high .zsph-cd__verdict { border-color: rgba(200, 55, 45, 0.28); }
.zsph-cd__row--high .zsph-cd__level { color: var(--zsph-down); }
.zsph-cd__row--divergence .zsph-cd__level { color: var(--zsph-ink); }
.zsph-cd__row--aligned .zsph-cd__level,
.zsph-cd__row--watch .zsph-cd__level { color: var(--zsph-ink-2); }
.zsph-cd__row--none .zsph-cd__level { color: var(--zsph-muted); font-weight: 500; }
.zsph-cd__sum { font-size: 11.5px; line-height: 1.55; color: var(--zsph-muted); max-width: 36ch; }

/* ------------------------------------------------------------------ */
/* 07 · Events                                                         */
/* ------------------------------------------------------------------ */
.zsph-ev { --ev-cols: 60px minmax(0, 1fr) minmax(88px, 140px) 88px; display: flex; flex-direction: column; overflow: hidden; }
.zsph-ev__cols { display: grid; grid-template-columns: var(--ev-cols); gap: 14px; align-items: center; height: 36px; padding: 0 var(--zsph-pad); font-size: 11.5px; color: var(--zsph-faint); font-weight: 500; }
.zsph-ev__dayhead { display: flex; align-items: center; gap: 8px; padding: 8px var(--zsph-pad); font-size: 11.5px; font-weight: 500; color: var(--zsph-muted); background: var(--zsph-well); border-top: 1px solid var(--zsph-line-soft); border-bottom: 1px solid var(--zsph-line-soft); }
.zsph-ev__rel { font-weight: 700; color: var(--zsph-ink); }
.zsph-ev__row { position: relative; display: grid; grid-template-columns: var(--zsph-ev-cols, var(--ev-cols)); gap: 14px; align-items: center; min-height: 54px; padding: 8px var(--zsph-pad); transition: background-color var(--zsph-dur) var(--zsph-ease); }
.zsph-ev__row + .zsph-ev__row { border-top: 1px solid var(--zsph-line-soft); }
.zsph-ev__row:hover { background: var(--zsph-hover); }
.zsph-ev__time { font-size: 14.5px; font-weight: 700; text-align: right; }
.zsph-ev__main { min-width: 0; }
.zsph-ev__title { display: flex; align-items: baseline; gap: 8px; font-size: 14px; font-weight: 700; line-height: 1.4; }
.zsph-ev__code { font-size: 10.5px; font-weight: 500; color: var(--zsph-faint); }
.zsph-ev__vals { display: flex; gap: 12px; margin-top: 1px; font-size: 11.5px; color: var(--zsph-faint); }
.zsph-ev__vals b { font-weight: 500; color: var(--zsph-ink-2); margin-inline-start: 4px; }
.zsph-ev__country { display: flex; align-items: center; gap: 8px; min-width: 0; font-size: 11.5px; color: var(--zsph-muted); }
.zsph-ev__cc { display: inline-grid; place-items: center; min-width: 26px; height: 18px; padding: 0 4px; border-radius: 4px; border: 1px solid var(--zsph-line); font-size: 10px; font-weight: 700; color: var(--zsph-ink-2); flex: none; }
.zsph-ev__cl { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zsph-ev__imp { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--zsph-muted); }
.zsph-ev__bars { display: inline-flex; align-items: flex-end; gap: 2px; height: 11px; direction: ltr; }
.zsph-ev__bars span { width: 3px; border-radius: 1px; background: var(--zsph-line-strong); }
.zsph-ev__bars span:nth-child(1) { height: 5px; }
.zsph-ev__bars span:nth-child(2) { height: 8px; }
.zsph-ev__bars span:nth-child(3) { height: 11px; }
.zsph-ev__bars span.is-on { background: var(--zsph-ink-2); }
.zsph-ev__row--high .zsph-ev__bars span.is-on { background: var(--zsph-down); }
.zsph-ev__row--high .zsph-ev__imp-label { color: var(--zsph-ink); font-weight: 700; }
.zsph-ev__tz { margin-top: auto; padding: 10px var(--zsph-pad); border-top: 1px solid var(--zsph-line-soft); font-size: 11.5px; color: var(--zsph-faint); }

/* ------------------------------------------------------------------ */
/* 08 · Platforms                                                      */
/* ------------------------------------------------------------------ */
.zsph-pf { display: flex; flex-direction: column; }
.zsph-pf__row { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; grid-template-areas: 'logo main cta' 'logo feats cta'; column-gap: 14px; row-gap: 8px; align-items: center; padding: 14px var(--zsph-pad); transition: background-color var(--zsph-dur) var(--zsph-ease); }
.zsph-pf__row + .zsph-pf__row { border-top: 1px solid var(--zsph-line-soft); }
.zsph-pf__row:hover { background: var(--zsph-hover); }
.zsph-pf__row:first-child { border-start-start-radius: var(--zsph-r-lg); border-start-end-radius: var(--zsph-r-lg); }
.zsph-pf__row > .zsph-mark { grid-area: logo; align-self: start; font-size: 12px !important; }
.zsph-pf__main { grid-area: main; min-width: 0; }
.zsph-pf__name { font-size: 15px; font-weight: 700; line-height: 1.3; text-align: right; }
.zsph-pf__desc { margin-top: 2px; font-size: 12.5px; color: var(--zsph-muted); line-height: 1.55; }
.zsph-pf__cats { margin-top: 3px; font-size: 11.5px; color: var(--zsph-ink-2); font-weight: 500; }
.zsph-pf__feats { grid-area: feats; display: flex; flex-wrap: wrap; gap: 5px; }
.zsph-pf__feats .zsph-tag { background: var(--zsph-well); border-color: transparent; color: var(--zsph-muted); height: 20px; font-size: 11px; }
.zsph-pf__cta { grid-area: cta; }
.zsph-pf__disc { margin-top: auto; display: flex; align-items: flex-start; gap: 8px; padding: 10px var(--zsph-pad); border-top: 1px solid var(--zsph-line-soft); font-size: 11.5px; color: var(--zsph-faint); line-height: 1.55; }
.zsph-pf__disc svg { flex: none; margin-top: 2px; }

/* ================================================================== */
/* Responsive                                                          */
/* ================================================================== */

@media (max-width: 1439px) {
  .zsph-split { grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); }
  .zsph-pf__row { grid-template-columns: 44px minmax(0, 1fr); grid-template-areas: 'logo main' 'logo feats' 'logo cta'; }
  .zsph-pf__cta { justify-self: start; margin-top: 4px; }
}

@media (max-width: 1279px) {
  .zsph-split { grid-template-columns: minmax(0, 1fr); gap: var(--zsph-section-gap); }
  .zsph-pf__row { grid-template-columns: 44px minmax(0, 1fr) auto; grid-template-areas: 'logo main cta' 'logo feats cta'; }
  .zsph-pf__cta { justify-self: auto; margin-top: 0; }

  .zsph-mem__grid { grid-template-columns: minmax(0, 1fr); }
  .zsph-mem__now { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); grid-template-areas: 'o chart' 'id chart' 'desc chart' 'traits chart'; column-gap: 32px; align-content: start; border-inline-end: 0; border-bottom: 1px solid var(--zsph-line); border-start-end-radius: var(--zsph-r-lg); }
  .zsph-mem__now > .zsph-overline { grid-area: o; }
  .zsph-mem__now-id { grid-area: id; }
  .zsph-mem__now-chart { grid-area: chart; align-self: center; margin-top: 0; }
  .zsph-mem__desc { grid-area: desc; }
  .zsph-mem__traits { grid-area: traits; }

  .zsph-rx { grid-template-columns: minmax(0, 1fr); }
  .zsph-rx__side { border-inline-end: 0; border-bottom: 1px solid var(--zsph-line); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 14px 32px; }
  .zsph-rx__side > .zsph-overline { grid-column: 1 / -1; }
  .zsph-rx__events { grid-column: 1 / -1; flex-direction: row; flex-wrap: wrap; margin-top: -4px; }
  .zsph-rx__event { flex: 1 1 180px; border-color: var(--zsph-line); }
  .zsph-rx__context { border-top: 0; padding-top: 0; }
  .zsph-rx__note { margin-top: 0; }
  .zsph-rx__legend-wrap { align-self: start; }
  .zsph-rx__stage { border-radius: 0 0 var(--zsph-r-lg) var(--zsph-r-lg); }
}

@media (max-width: 1100px) {
  .zsph-zs__header {
    flex-wrap: wrap;
    row-gap: 8px;
  }
  .zsph-zs__live { margin-inline-start: 0; }
  .zsph-zs__controls { gap: 10px; }
  .zsph-zs__tfs { width: auto; }
  .zsph-zs__tools { margin-inline-start: auto; }
  .zsph-ov__rail {
    display: flex;
    overflow-x: auto;
    scrollbar-width: thin;
    -webkit-overflow-scrolling: touch;
  }
  .zsph-ov__rail > li { flex: 0 0 46%; min-width: 160px; }
  .zsph-ov__rail > li + li { border-inline-start: 1px solid var(--zsph-line-soft); }

  /* Contradictions → stacked analytical readings */
  .zsph-cd__row {
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas:
      'inst verdict'
      'strip strip';
    gap: 12px 16px;
    padding: 14px var(--zsph-pad);
  }
  .zsph-cd__inst { grid-area: inst; }
  .zsph-cd__verdict { grid-area: verdict; justify-self: end; text-align: left; max-width: 200px; }
  .zsph-cd__strip { grid-area: strip; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 12px; }
  .zsph-cd__cell + .zsph-cd__cell { border-inline-start: 0; padding-inline-start: 4px; margin-inline-start: 0; }
  .zsph-cd__cell:nth-child(n + 3) { border-top: 1px solid var(--zsph-line-soft); padding-top: 8px; }
}

@media (max-width: 1100px) {
  .zsph-ideas { grid-template-columns: minmax(0, 1fr) !important; }
  .zsph-idea { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: 'head chart' 'bias chart' 'title chart' 'foot foot'; column-gap: 28px; align-content: start; }
  .zsph-idea + .zsph-idea { border-inline-start: 0; border-top: 1px solid var(--zsph-line); }
  .zsph-idea__head { grid-area: head; }
  .zsph-idea__chart { grid-area: chart; margin-top: 0; align-self: center; }
  .zsph-idea__bias { grid-area: bias; }
  .zsph-idea__title { grid-area: title; min-height: 0; }
  .zsph-idea__foot { grid-area: foot; }
  .zsph-idea:first-child, .zsph-idea:last-child { border-radius: 0; }
}

@media (max-width: 960px) {
  .zsph-news { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .zsph-news__item.is-lead { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 24px; align-items: center; }
  .zsph-news__item.is-lead .zsph-news__body { padding-top: 0; }
  .zsph-news__item.is-lead .zsph-news__title { font-size: 21px; }

  .zsph-rx__graph { column-gap: 44px; grid-template-columns: minmax(0, 1fr) minmax(170px, 200px) minmax(0, 1fr); }
}

@media (max-width: 860px) {
  .zsph-mem__cases { grid-template-columns: minmax(0, 1fr); }
  .zsph-mem__cases > * + * { border-inline-start: 0; border-top: 1px solid var(--zsph-line-soft); }
  .zsph-mem__case { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-areas: 'head chart' 'out chart'; column-gap: 28px; }
  .zsph-mem__case-head { grid-area: head; }
  .zsph-mem__case-chart { grid-area: chart; margin-top: 12px; align-self: center; }
  .zsph-mem__out { grid-area: out; padding-top: 16px; }
  .zsph-mem__slot { min-height: 96px; }
}

@media (max-width: 720px) {
  .zsph-head { flex-direction: column; align-items: stretch; gap: 12px; margin-bottom: 14px; }
  .zsph-head__side { justify-content: flex-start; }
  .zsph-head__side .zsph-btn { height: 32px; padding: 0 12px; }
  .zsph-chapter__intro { flex-direction: column; gap: 4px; margin-bottom: 22px; padding-bottom: 12px; }

  .zsph-ov__workspace { padding: 10px var(--zsph-pad) 4px; }
  .zsph-zs__header {
    flex-wrap: wrap;
    gap: 8px 12px;
    min-height: 0;
  }
  .zsph-zs__id { width: 100%; }
  .zsph-zs__picker { width: 100%; }
  .zsph-zs__pop { width: min(100%, 360px); }
  .zsph-zs__price { font-size: 30px; }
  .zsph-zs__live { margin-inline-start: 0; width: 100%; }
  .zsph-zs__controls { gap: 10px; height: auto; flex-wrap: wrap; margin-top: 6px; }
  .zsph-zs__tfs {
    width: 100%;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
  }
  .zsph-zs__tfs::-webkit-scrollbar { display: none; }
  .zsph-zs__tf { flex: none; min-width: 42px; }
  .zsph-zs__tools { margin-inline-start: auto; }
  .zsph-zs__plot { height: 320px !important; }
  .zsph-zs__plot[style] { height: 320px !important; }
  .zsph-cc { --axis-w: 56px; }
  .zsph-ov__rail {
    display: flex;
    overflow-x: auto;
    scrollbar-width: thin;
    -webkit-overflow-scrolling: touch;
  }
  .zsph-ov__rail > li { flex: 0 0 48%; min-width: 152px; }

  .zsph-news { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .zsph-news__item.is-lead { display: flex; }
  .zsph-news__item.is-lead .zsph-news__body { padding-top: 16px; }
  .zsph-news__item.is-lead .zsph-news__title { font-size: 19px; }
  .zsph-news__item:not(.is-lead) { display: grid; grid-template-columns: minmax(0, 1fr) 112px; grid-template-areas: 'body media'; gap: 16px; align-items: start; padding-top: 18px; margin-top: 18px; border-top: 1px solid var(--zsph-line); border-radius: 0; }
  .zsph-news__item:not(.is-lead) .zsph-news__media { grid-area: media; aspect-ratio: 1 / 1; border-radius: 10px; }
  .zsph-news__item:not(.is-lead) .zsph-news__body { grid-area: body; padding-top: 0; }
  .zsph-news__item:not(.is-lead) .zsph-news__title { margin-top: 6px; font-size: 15.5px; }
  .zsph-news__item:not(.is-lead) .zsph-news__sum { display: none; }

  .zsph-idea { display: flex; }
  .zsph-idea__chart { margin-top: 16px; }

  .zsph-mem__now { display: flex; }
  .zsph-mem__now-chart { margin-top: 18px; }
  .zsph-mem__case { display: flex; }
  .zsph-mem__case-chart { margin-top: 22px; }
  .zsph-mem__foot { flex-direction: column; align-items: flex-start; gap: 8px; }

  /* Reaction graph — mobile spine composition */
  .zsph-rx__side { display: flex; }
  .zsph-rx__events { flex-direction: row; overflow-x: auto; flex-wrap: nowrap; scrollbar-width: none; margin-inline: calc(-1 * var(--zsph-pad)); padding-inline: var(--zsph-pad); }
  .zsph-rx__events::-webkit-scrollbar { display: none; }
  .zsph-rx__event { flex: none; flex-direction: column; align-items: flex-start; gap: 2px; min-width: 140px; }
  .zsph-rx__stage { background-image: none; padding: var(--zsph-pad); }
  .zsph-rx__graph { display: flex; flex-direction: column; align-items: stretch; gap: 0; }
  .zsph-rx__wires { display: none; }
  .zsph-rx__hub { order: -1; text-align: right; margin-bottom: 18px; }
  .zsph-rx__col { gap: 10px; padding-inline-start: 22px; }
  .zsph-rx__col--b { margin-top: 10px; }
  .zsph-rx__col::before { content: ''; position: absolute; top: -18px; bottom: 24px; inset-inline-start: 7px; border-inline-start: 1px solid rgba(15, 23, 42, 0.22); }
  .zsph-rx__col--b::before { top: -10px; }
  .zsph-rx__node::before { content: ''; position: absolute; top: 24px; inset-inline-start: -15px; width: 15px; border-top: 1px solid rgba(15, 23, 42, 0.22); }
  .zsph-rx__node::after { content: ''; position: absolute; top: 21px; inset-inline-start: -18px; width: 5px; height: 5px; border-radius: 50%; background: var(--zsph-surface); border: 1px solid rgba(15, 23, 42, 0.4); }

  .zsph-cd__scale { flex-direction: column; align-items: flex-start; gap: 8px; }
  .zsph-cd__row {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      'inst'
      'verdict'
      'strip';
    gap: 10px;
  }
  .zsph-cd__verdict { justify-self: stretch; text-align: right; max-width: none; }
  .zsph-cd__strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .zsph-cd__cell:nth-child(odd) { border-inline-end: 1px solid var(--zsph-line-soft); padding-inline-end: 8px; }
  .zsph-cd__cell:nth-child(n + 3) { border-top: 1px solid var(--zsph-line-soft); padding-top: 8px; }

  .zsph-ev { --ev-cols: 52px minmax(0, 1fr) auto; }
  .zsph-ev__cols { display: none; }
  .zsph-ev__day.is-first .zsph-ev__dayhead { border-top: 0; }
  .zsph-ev__row { grid-template-columns: 52px minmax(0, 1fr); grid-template-areas: 'time main' 'time meta'; row-gap: 6px; column-gap: 14px; align-items: start; }
  .zsph-ev__time { grid-area: time; padding-top: 1px; }
  .zsph-ev__main { grid-area: main; }
  .zsph-ev__country { grid-area: meta; }
  .zsph-ev__imp { grid-area: meta; justify-self: end; }

  .zsph-pf__row { grid-template-columns: 40px minmax(0, 1fr); grid-template-areas: 'logo main' 'feats feats' 'cta cta'; row-gap: 14px; }
  .zsph-pf__row > .zsph-mark { width: 40px !important; height: 40px !important; }
  .zsph-pf__cta { justify-self: stretch; justify-content: center; }
}

@media (max-width: 480px) {
  .zsph-mt__spark-col { display: none; }
  .zsph-mt tbody th, .zsph-mt tbody td { height: 52px; }
  .zsph-mt__name { max-width: 34vw; }
  .zsph-cc { --axis-w: 56px; }
  .zsph-cc__yaxis span { font-size: 10.5px; left: 6px; }
  .zsph-cc__xaxis span:nth-child(2), .zsph-cc__xaxis span:nth-child(4) { display: none; }
  .zsph-live { margin-inline-start: 0; width: 100%; }
  .zsph-idea__eng { gap: 10px; }
  .zsph-mem__period { font-size: 17px; }
}

@media (prefers-reduced-motion: reduce) {
  .zsph *, .zsph *::before, .zsph *::after { transition-duration: 0ms !important; animation-duration: 0ms !important; }
}

/**
 * Homepage mobile overflow containment — scoped to .home-page-root only.
 * Does not affect desktop layout or other routes.
 */

.home-page-root {
  box-sizing: border-box;
  max-width: 100%;
}

.home-page-root *,
.home-page-root *::before,
.home-page-root *::after {
  box-sizing: border-box;
}

@media (max-width: 639px) {
  .home-page-root {
    overflow-x: clip;
    max-width: 100%;
  }

  .home-page-root .home-mobile-pad {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .home-page-root .home-table-scroll {
    max-width: 100%;
    min-width: 0;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }

  .home-page-root .home-table-scroll table {
    min-width: 36rem;
  }

  .home-page-root .home-flex-child {
    min-width: 0;
    max-width: 100%;
  }

  .home-page-root .home-brokers-preview {
    padding-left: 1rem;
    padding-right: 1rem;
    overflow-x: clip;
  }

  .home-page-root .home-brokers-preview .container {
    max-width: 100%;
  }

  .home-page-root [class*="max-w-[1600px]"] {
    max-width: 100%;
    padding-left: 1rem;
    padding-right: 1rem;
  }
}

@media (max-width: 480px) {
  .home-page-root {
    overflow-x: hidden;
  }
}

/**
 * Tablet only (640–1023px): fixes +23px horizontal overflow on / at 768×1024.
 * Root cause: CategoryBar pill nav wider than viewport. Mobile/desktop unchanged.
 */
@media (min-width: 640px) and (max-width: 1023px) {
  .home-page-root {
    overflow-x: hidden !important;
    max-width: 100% !important;
  }

  .home-page-root .home-hero-wrap {
    max-width: 100% !important;
    overflow-x: hidden !important;
  }

  .home-page-root .zs-catbar-wrap {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-x: hidden !important;
    padding-left: 12px !important;
    padding-right: 12px !important;
    box-sizing: border-box !important;
  }

  .home-page-root nav.zs-catbar {
    display: inline-flex !important;
    max-width: 100% !important;
    min-width: 0 !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    -webkit-overflow-scrolling: touch;
    scroll-snap-type: x proximity;
    scrollbar-width: none;
  }

  .home-page-root .zs-catbar::-webkit-scrollbar {
    display: none;
  }

  .home-page-root .zs-catbar button {
    scroll-snap-align: start;
    flex-shrink: 0;
  }

  .home-page-root main {
    max-width: 100%;
    min-width: 0;
  }
}

