/*
 * Cinematic Hero V3 — scoped styles (every selector is prefixed .zch3). Media only: the scene
 * owns the whole hero below the platform header. The platform owns the header, the Mobile V2
 * chrome and typography:
 *   - header offset: --zs-header-height (desktop) · --zs-m-topbar-h + safe top (< 1024px)
 *   - bottom nav:    --zs-m-nav-space (< 1024px), never covers the hero
 *   - fonts:         --zs-font-institutional (locale font) · --zs-font-mono (stream symbols)
 * The scene is framed in .zch3__frame; the engine centres the composition in that frame.
 */

.zch3 {
  --zch3-top: #e6e9ec;
  --zch3-bot: #f6f7f9;
  --zch3-lime: var(--zs-green-primary, #a3ff12);
  --zch3-header: var(--zs-header-height, 72px);
  --zch3-nav: 0px;
  /* Bottom strip handed to the next section: the market ribbon starts on #f8f8f6 and overlaps the hero. */
  --zch3-next: #f8f8f6;
  --zch3-fade: 96px;
  --zch3-frame-bottom: 48px;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  width: 100%;
  box-sizing: border-box;
  height: 100vh;
  height: 100svh;
  min-height: 600px;
  max-height: 1080px;
  background: linear-gradient(180deg, var(--zch3-top) 0%, var(--zch3-bot) 100%);
  font-family: var(--zs-font-institutional);
  font-synthesis: none;
  letter-spacing: 0;
  text-rendering: geometricPrecision;
}

.zch3__stage {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}

.zch3__canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  max-width: none;
  opacity: 0;
  transition: opacity 1.2s cubic-bezier(.22, .61, .36, 1);
}

.zch3[data-stage="live"] .zch3__canvas {
  opacity: 1;
}

.zch3__frame {
  position: absolute;
  inset: var(--zch3-header) 0 var(--zch3-frame-bottom) 0;
}

.zch3__poster {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: contain;
  -webkit-mask-image: radial-gradient(closest-side, #000 74%, transparent 100%);
  mask-image: radial-gradient(closest-side, #000 74%, transparent 100%);
  animation: zch3Fade .9s ease both;
}

/*
 * A band under the platform header so its chrome stays legible over the film, and a bottom
 * fade into the next section so the hero never ends on a hard edge.
 */
.zch3__veil {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(240, 242, 244, .94) 0, rgba(240, 242, 244, .94) calc(var(--zch3-header) - 12px), rgba(240, 242, 244, 0) calc(var(--zch3-header) + 28px)),
    linear-gradient(0deg, var(--zch3-next) 0, rgba(248, 248, 246, 0) var(--zch3-fade));
}

.zch3__tags {
  position: absolute;
  inset: 0;
}

.zch3-tag {
  position: absolute;
  left: 0;
  top: 0;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 18px;
  padding: 0 7px 0 6px;
  border-radius: 2px;
  box-sizing: border-box;
  background: rgba(255, 255, 255, .8);
  border: 1px solid rgba(15, 17, 19, .06);
  color: #1b1f23;
  font: 500 10px/1 var(--zs-font-mono);
  letter-spacing: 0;
  white-space: nowrap;
  direction: ltr;
  opacity: 0;
  will-change: transform, opacity;
}

.zch3-tag i {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: #2b2f34;
  opacity: .38;
  flex: none;
  transition: background-color .6s ease, opacity .6s ease;
}

.zch3-tag[data-live] i {
  background: var(--zch3-lime);
  opacity: 1;
  box-shadow: 0 0 0 1px rgba(15, 17, 19, .35);
}

/*
 * Mobile V2 shell (< 1024px): Mobile V2 top bar above, bottom nav below. The stacked scene is
 * framed from the width (the globe is width-bound), so the hero is only as tall as the globe
 * and its orbits need, and never taller than the space between the top bar and the bottom nav.
 */
@media (max-width: 1023.98px) {
  .zch3 {
    --zch3-header: calc(var(--zs-m-topbar-h, 56px) + var(--zs-m-safe-top, 0px));
    --zch3-nav: var(--zs-m-nav-space, 0px);
    --zch3-fade: 64px;
    --zch3-frame-bottom: 24px;
    min-height: 0;
    max-height: none;
    height: clamp(440px, calc(var(--zch3-header) + 112vw), calc(100vh - var(--zch3-nav)));
    height: clamp(440px, calc(var(--zch3-header) + 112vw), calc(100svh - var(--zch3-nav)));
  }
}

@media (max-width: 374px) {
  .zch3-tag {
    height: 19px;
    font-size: 10px;
    padding: 0 7px 0 6px;
  }
}

@keyframes zch3Fade {
  from { opacity: 0; }
  to { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .zch3__canvas {
    transition-duration: .5s;
  }
}

/* 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:var(--zs-font-institutional);
  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). */

  /* Neutral canvas family */
  --zsph-canvas: #ffffff;          /* page chapters */
  --zsph-canvas-lab: #ffffff;      /* signature chapter — hairline 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: 1840px;
  --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(--zs-font-institutional);
  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;
  }
}

/* ── Mobile V2 intelligence chapter markers (from approved live-source) ──
   Wrapper is display:contents so parent layout is unchanged on desktop.
   Marker only shows below 1024px. Token fallbacks keep Desktop untouched. */
.zs-m-intel-step {
  display: contents;
}

.zs-m-intel-marker {
  display: none;
}

@media (max-width: 1023.98px) {
  .zs-m-intel-marker {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 8px var(--zs-m-gutter, 16px) 12px;
    font-size: var(--zs-m-text-sm, 13px);
    font-weight: 500;
    color: var(--zs-m-ink-3, rgba(11, 13, 12, 0.55));
    font-variant-numeric: tabular-nums;
  }

  .zs-m-intel-marker::before {
    content: '';
    inline-size: 8px;
    block-size: 8px;
    flex: none;
    border-radius: 50%;
    background: var(--zs-m-brand, #a3ff12);
    box-shadow: 0 0 0 4px var(--zs-m-press, rgba(163, 255, 18, 0.14));
    order: -1;
  }

  .zs-m-intel-marker::after {
    content: '';
    flex: 1;
    block-size: 1px;
    background: var(--zs-m-surface-line, rgba(11, 13, 12, 0.1));
  }

  .zs-m-intel-marker b {
    font-weight: 700;
    color: var(--zs-m-ink, #0b0d0c);
  }
}

/* Placeholder while the post-hero chapters stream in (HomePageClient). Holds one viewport so the in-flow
   footer stays below the fold; carries no route-pending marker, so the boot veil does not wait for it. */
.home-page-root .zs-home-posthero-pending {
  min-height: 100vh;
  min-height: 100svh;
}

