
/* ═══════════════════════════════════════════════════════════════════
   MX5 — Aurora-Glass command scorecard skin (v5_final rev2, 2026-07-12)
   ALL selectors scoped under body.page-macro.mx4-grid (grid view only).
   Ledger view (body.page-macro without .mx4-grid) is pixel-untouched.
   ═══════════════════════════════════════════════════════════════════ */

/* ── v5 glass tokens (grid view override layer) ─────────────────── */
body.page-macro.mx4-grid {
  --mx5-glass-bg:      rgba(16,22,30,.55);
  --mx5-pop-bg:        rgba(13,18,26,.96);
  --mx5-glass-border:  rgba(255,255,255,.12);
  --mx5-glass-shadow:  0 8px 32px rgba(0,0,0,.55), 0 1.5px 0 rgba(255,255,255,.07) inset;
  --mx5-glass-hover:   0 12px 40px rgba(0,0,0,.65), 0 1.5px 0 rgba(255,255,255,.09) inset;
  --mx5-blur:          blur(20px);
  --mx5-radius-card:   18px;
  --mx5-radius-pill:   999px;
  /* --mx5-accent MUST be the token, not a literal. Custom properties resolve at their
     DECLARATION scope, so the .mx5-score-green{--mx5-accent:var(--up)} redefinition
     further down can never reach the derived -glow/-dim/-ink computed here. With the
     literal in place, zh flipped the gauge arc, the needle and the big 76 to red
     (correct) while the regime pill and the 偏多 stance line beside them stayed green —
     one state drawn in both directions inside a single 300x180 card. china/hk already
     route this through --up; macro was the last page that did not. */
  --mx5-accent:        var(--up,#22d97a);
  --mx5-accent-glow:   color-mix(in srgb, var(--up,#22d97a) 30%, transparent);
  --mx5-accent-dim:    color-mix(in srgb, var(--up,#22d97a) 10%, transparent);
  --mx5-warn:          var(--warn,#f59e0b);
  --mx5-warn-dim:      color-mix(in srgb, var(--warn,#f59e0b) 10%, transparent);
  /* v5.3 audit round: TEXT-role accents. Fills keep the bright hue above;
     text uses these so light mode swaps in the darker, ≥4.5:1 accent
     (theme.css already provides --up/--warn darkened for light). */
  --mx5-accent-ink:    var(--ink-up, var(--mx5-accent));
  --mx5-warn-ink:      var(--ink-warn, var(--mx5-warn));
}
[data-theme="light"] body.page-macro.mx4-grid {
  /* Round-3 depth pass: the panels were 82% white over a near-white canvas —
     the card surface and the page were the SAME value, so nothing read as a
     card. Panels are now opaque white on the deepened #e8ebf1 canvas, with the
     estate's two-stop shadow (a tight contact shadow + a wide ambient one) and
     the soft recipe hairline. Depth now comes from the value step + the shadow,
     which is why the border can afford to be quiet. */
  --mx5-glass-bg:      #ffffff;
  --mx5-pop-bg:        #ffffff;
  --mx5-glass-border:  #dde2ea;
  --mx5-glass-shadow:  0 1px 2px rgba(23,32,55,.05), 0 8px 24px -12px rgba(23,32,55,.10);
  --mx5-glass-hover:   0 2px 4px rgba(23,32,55,.07), 0 14px 32px -14px rgba(23,32,55,.16);
  /* Dedicated dark accents for TEXT on the light glass card (>=4.5:1 vs ~#f6f7fa).
     Deliberately darker than the site-wide --up/--warn (which are tuned ~3.4:1
     for other surfaces); fills above keep the bright #22d97a / #f59e0b. */
  --mx5-accent-ink:    #17753f;
  --mx5-warn-ink:      #9c6212;
}
/* zh 红涨绿跌 + light: the risk-on accent INK is a literal (deep green for contrast),
   so it can't flip via the --up swap — mirror it to a deep red of equal contrast.
   (Dark mode needs no mirror: accent-ink chains through --mx5-accent → --up there.) */
html[data-theme="light"][data-lang="zh"] body.page-macro.mx4-grid {
  --mx5-accent-ink:    #a82f2f;
}
/* ── v5.3 UNIFIED card hover (Order 5): ONE idiom for every grid card/face.
   No accent-colored tints anywhere — border brightens, surface lifts ~2%,
   translateY(-1px), soft ambient shadow. Same both directions, 200ms ease-out. */
body.page-macro.mx4-grid {
  --mx5-hover-bg:      rgba(22,29,38,.62);
  --mx5-hover-border:  rgba(255,255,255,.16);
  --mx5-hover-shadow:  0 6px 24px rgba(0,0,0,.25);
  --mx5-focus-ring:    0 0 0 2px rgba(34,217,122,.55);
}
[data-theme="light"] body.page-macro.mx4-grid {
  /* Round-3: the resting surface is now opaque white, so "surface lifts 2%" has
     nowhere to go in light — the lift is carried by the border stepping up and
     the ambient shadow deepening, alongside the shared translateY(-1px). */
  --mx5-hover-bg:      #ffffff;
  --mx5-hover-border:  #c3cbd9;
  --mx5-hover-shadow:  0 2px 4px rgba(23,32,55,.07), 0 14px 32px -14px rgba(23,32,55,.16);
}

/* ── Aurora backdrop (fixed position, grid-view only) ───────────── */
body.page-macro.mx4-grid .mx5-aurora{
  position:fixed;inset:0;
  pointer-events:none;z-index:0;overflow:hidden;
}
body.page-macro.mx4-grid .mx5-aurora::before{
  content:"";position:absolute;
  width:900px;height:700px;top:-200px;left:-150px;
  border-radius:50%;filter:blur(90px);
  background:radial-gradient(ellipse,rgba(34,217,122,.12) 0%,transparent 70%);
}
body.page-macro.mx4-grid .mx5-aurora::after{
  content:"";position:absolute;
  width:700px;height:600px;bottom:-100px;right:-100px;
  border-radius:50%;filter:blur(90px);
  background:radial-gradient(ellipse,rgba(99,102,241,.10) 0%,transparent 70%);
}
body.page-macro.mx4-grid .mx5-aurora .mx5-a3{
  position:absolute;width:600px;height:500px;
  top:40%;left:50%;transform:translate(-50%,-50%);
  border-radius:50%;filter:blur(90px);
  background:radial-gradient(ellipse,rgba(34,217,122,.07) 0%,transparent 70%);
}
body.page-macro.mx4-grid .mx5-aurora .mx5-a4{
  position:absolute;width:800px;height:600px;bottom:-150px;left:20%;
  border-radius:50%;filter:blur(90px);
  background:radial-gradient(ellipse,rgba(99,102,241,.08) 0%,transparent 70%);
}
/* LIGHT: the aurora is a dark-mode idiom — coloured light blooming out of a black
   field. Inverted onto paper it is not light, it is INK: four 90px-blurred colour
   washes that tint the canvas green/indigo and read as a printing stain (most
   visible as the "orb" floating in the empty canvas past the footer, since the
   layer is position:fixed and spans the whole scroll). It is also pure decoration
   here — the market state it tints is already stated by the gauge, the score and
   the thesis line — so light simply doesn't get it. Depth in light comes from the
   panel/canvas value step and the shadow recipe, not from ambient bloom.
   The state-tinted (.au-yellow/.au-red) light variants are dropped with it. */
[data-theme="light"] body.page-macro.mx4-grid .mx5-aurora{display:none;}
/* verdict-tinted aurora (operator order 2026-07-14): the two GREEN blobs follow the
   market-state color — amber when Mixed, red when Risk-off; the indigo companions
   stay neutral. Class baked from market_state.color + live-swapped by risk_state_live.js. */
body.page-macro.mx4-grid .mx5-aurora.au-yellow::before{background:radial-gradient(ellipse,rgba(245,158,11,.10) 0%,transparent 70%);}
body.page-macro.mx4-grid .mx5-aurora.au-yellow .mx5-a3{background:radial-gradient(ellipse,rgba(245,158,11,.06) 0%,transparent 70%);}
body.page-macro.mx4-grid .mx5-aurora.au-red::before{background:radial-gradient(ellipse,rgba(239,68,68,.10) 0%,transparent 70%);}
body.page-macro.mx4-grid .mx5-aurora.au-red .mx5-a3{background:radial-gradient(ellipse,rgba(239,68,68,.06) 0%,transparent 70%);}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid .mx5-aurora::before,
  body.page-macro.mx4-grid .mx5-aurora::after,
  body.page-macro.mx4-grid .mx5-aurora .mx5-a3{animation:none;}
  /* Order 5: unified hover — no motion (instant, no lift) under reduced-motion */
  body.page-macro.mx4-grid .sxg-face.mx5-card-face,
  body.page-macro.mx4-grid .mx5-card[role="button"],
  body.page-macro.mx4-grid .mx5-mkt-tile{transition:none!important;}
  body.page-macro.mx4-grid .sx:hover .sxg-face.mx5-card-face,
  body.page-macro.mx4-grid .sxg-face.mx5-card-face:hover,
  body.page-macro.mx4-grid .mx5-card[role="button"]:hover,
  body.page-macro.mx4-grid .mx5-mkt-tile:hover,
  body.page-macro.mx4-grid .mx5-mkt-tile.up:hover,
  body.page-macro.mx4-grid .mx5-mkt-tile.dn:hover{transform:none!important;}
}

/* ── Command Scorecard — #regime-radar restyled in grid view ─────── */
/* In grid view, #regime-radar becomes a two-column glass card:
   left = gauge cluster, right = 60-session path (hidden ≤700px) */
body.page-macro.mx4-grid #regime-radar{
  background:var(--mx5-glass-bg);
  border:1px solid var(--mx5-glass-border);
  border-radius:var(--mx5-radius-card);
  backdrop-filter:var(--mx5-blur);
  box-shadow:var(--mx5-glass-shadow);
  padding:0;overflow:visible;
  display:grid;
  /* Order 2: ~30:70 left:right (more room for the command cluster, less for the chart) */
  grid-template-columns:minmax(0,3fr) minmax(0,7fr);
  gap:0;
  min-height:320px;
  position:relative;
}
/* Ledger view: restore normal panel look */
body.page-macro:not(.mx4-grid) #regime-radar{
  display:block;padding:19px 21px;
}
@media(max-width:1100px){
  body.page-macro.mx4-grid #regime-radar{grid-template-columns:minmax(0,34fr) minmax(0,66fr);}
}
@media(max-width:700px){
  body.page-macro.mx4-grid #regime-radar{grid-template-columns:1fr;}
}

/* ── mx2-hero: hidden in grid view (scorecard replaces it) ── */
body.page-macro.mx4-grid #regime-radar .mx2-hero{
  display:none!important;
}
/* ── alerts toggle + misc hero bits: hidden in grid ── */
body.page-macro.mx4-grid #regime-radar .ms-head,
body.page-macro.mx4-grid #regime-radar .ms-oneline,
body.page-macro.mx4-grid #regime-radar .howto,
body.page-macro.mx4-grid #regime-radar > script + div > .ms-head{
  display:none;
}

/* ── Scorecard left cluster ──────────────────────────────────────── */
body.page-macro.mx4-grid .mx5-sc-left{
  padding:28px 26px 22px;
  border-right:1px solid rgba(255,255,255,.07);
  display:flex;flex-direction:column;
  position:relative;overflow:visible;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-sc-left{
  border-right-color:rgba(0,0,0,.06);
}
body.page-macro.mx4-grid .mx5-sc-gauge-row{
  display:flex;align-items:center;gap:20px;margin-bottom:16px;
}
body.page-macro.mx4-grid .mx5-gauge-svg{
  /* Order 2: scaled up ~1.37× (viewBox unchanged → JS gauge math contract intact) */
  width:192px;height:138px;overflow:visible;display:block;flex-shrink:0;
}
/* Light mode: the gauge's white-alpha track/ticks/scale-labels vanish on white —
   repaint in dark ink. #mx5-score-numeral keeps its own id rule (state colour). */
/* Dial scale labels (0 / 50 / 100) are text, not decoration — they are what makes the
   needle position mean anything. At .42 they composited to #989b9e = 2.79:1 on a white
   card, under the 4.5 floor at 10px. .62 lands 5.37:1 and still reads a full step
   quieter than the body copy. Twin of the body.page-china rule — same component. */
[data-theme="light"] body.page-macro.mx4-grid .mx5-gauge-svg > text{fill:rgba(10,16,24,.62);}
[data-theme="light"] body.page-macro.mx4-grid .mx5-gauge-svg path:first-of-type{stroke:rgba(10,16,24,.10);}
[data-theme="light"] body.page-macro.mx4-grid .mx5-gauge-svg g[stroke]{stroke:rgba(10,16,24,.20);}
/* The shared light-mode pointer treatment lives in theme.css (`.odo-needle`).
   Dark mode keeps the original white blade + state-coloured hub below. */
/* Regime pill (Order 3: smaller + never clips — sizes to content, no fixed width) */
body.page-macro.mx4-grid .mx5-regime-pill{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 11px;border-radius:var(--mx5-radius-pill);
  border:1px solid var(--mx5-accent);background:var(--mx5-accent-dim);
  font-size:11px;font-weight:600;color:var(--mx5-accent-ink);
  letter-spacing:.02em;margin-bottom:10px;line-height:1.3;
  max-width:100%;box-sizing:border-box;text-align:left;width:auto;
}
/* pill parent flex child must not overflow — allow wrapping instead of bleed */
body.page-macro.mx4-grid .mx5-sc-gauge-row > div:last-child{min-width:0;}
/* The pill's text span must not be forced to shrink below its content */
/* span must be allowed to shrink AND wrap inside the pill — flex:0 0 auto here made the
   text escape the pill border once the pill itself stopped being nowrap (pill-bleed bug) */
body.page-macro.mx4-grid .mx5-regime-pill > span{flex:0 1 auto;min-width:0;}
/* pill follows the market-state verdict color (operator order 2026-07-13):
   default green accent when risk-on, amber when mixed, red when risk-off */
body.page-macro.mx4-grid .mx5-regime-pill.rp-yellow{
  border-color:var(--mx5-warn);background:var(--mx5-warn-dim);color:var(--mx5-warn-ink);
}
body.page-macro.mx4-grid .mx5-regime-pill.rp-yellow .mx5-dot{
  background:var(--mx5-warn);box-shadow:0 0 6px rgba(245,158,11,.30);
}
body.page-macro.mx4-grid .mx5-regime-pill.rp-red{
  border-color:var(--down,#ef4444);background:rgba(239,68,68,.10);color:var(--ink-down, var(--down,#ef4444));
}
body.page-macro.mx4-grid .mx5-regime-pill.rp-red .mx5-dot{
  background:var(--down,#ef4444);box-shadow:0 0 6px rgba(239,68,68,.30);
}
body.page-macro.mx4-grid .mx5-regime-pill .mx5-dot{
  width:6px;height:6px;border-radius:50%;
  background:var(--mx5-accent);box-shadow:0 0 6px var(--mx5-accent-glow);
}

/* Score + verdict beside gauge */
body.page-macro.mx4-grid .mx5-score-line{
  display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
}
/* verdict word never breaks mid-word; wraps as a whole unit if the column is tight */
body.page-macro.mx4-grid .mx5-verdict-word{white-space:nowrap;}
body.page-macro.mx4-grid .mx5-big-score{
  font-size:68px;font-weight:800;line-height:.95;color:var(--mx5-accent-ink);
  text-shadow:0 0 40px var(--mx5-accent-glow);
  letter-spacing:-.035em;font-variant-numeric:tabular-nums;
}
body.page-macro.mx4-grid .mx5-verdict-word{
  font-size:19px;font-weight:700;color:var(--ink-1,var(--text,rgba(255,255,255,.92)));
}
body.page-macro.mx4-grid .mx5-sub-line{
  font-size:11px;color:var(--mx5-accent-ink);font-weight:600;margin-top:3px;
}
/* sub-line follows the verdict color like .mx5-big-score below — without these the
   page-global green accent paints "YELLOW — Trade with caution" green */
body.page-macro.mx4-grid .mx5-score-yellow .mx5-sub-line{color:var(--mx5-warn-ink);}
body.page-macro.mx4-grid .mx5-score-red .mx5-sub-line{color:var(--ink-down, var(--down,#ef4444));}
/* score color by state */
body.page-macro.mx4-grid.ms-green-page .mx5-big-score,
body.page-macro.mx4-grid .mx5-score-green .mx5-big-score{color:var(--ink-up, var(--up,#22d97a));text-shadow:0 0 36px rgba(34,217,122,.3);}
body.page-macro.mx4-grid.ms-yellow-page .mx5-big-score,
body.page-macro.mx4-grid .mx5-score-yellow .mx5-big-score{color:var(--ink-warn, var(--warn,#f59e0b));text-shadow:0 0 36px rgba(245,158,11,.3);}
body.page-macro.mx4-grid.ms-red-page .mx5-big-score,
body.page-macro.mx4-grid .mx5-score-red .mx5-big-score{color:var(--ink-down, var(--down,#ef4444));text-shadow:0 0 36px rgba(239,68,68,.3);}
/* v6 — STATE drives the hero glance (operator order 2026-07-13). The gauge arc, needle
   accent, glow and score numeral all follow the risk-STATE band (--mx5-gauge), never a fixed
   rainbow or the regime hue — so a caution/Mixed state reads amber, not "green/go". --mx5-gauge
   and --mx5-accent route through --up/--warn/--down, so they also honour the zh 红涨绿跌 swap
   (risk-on=red, risk-off=green in Chinese). The slow regime (e.g. Goldilocks) is demoted to a
   neutral label so it never competes with the stance colour. */
body.page-macro.mx4-grid .mx5-score-green  { --mx5-gauge: var(--up);   --mx5-accent: var(--up);   }
body.page-macro.mx4-grid .mx5-score-yellow { --mx5-gauge: var(--warn); --mx5-accent: var(--warn); }
body.page-macro.mx4-grid .mx5-score-red    { --mx5-gauge: var(--down); --mx5-accent: var(--down); }
body.page-macro.mx4-grid .mx5-sc-gauge-row {
  --mx5-accent-glow: color-mix(in srgb, var(--mx5-accent) 30%, transparent);
  --mx5-accent-dim:  color-mix(in srgb, var(--mx5-accent) 10%, transparent);
}
/* CSS wins over the SVG presentation attribute, so the arc + numeral recolour by state
   (and var() resolves here, unlike in a bare SVG stroke="" attribute). */
body.page-macro.mx4-grid #mx5-gauge-arc-fill { stroke: var(--mx5-gauge, #f59e0b); }
body.page-macro.mx4-grid #mx5-score-numeral  { fill: var(--mx5-gauge, #f59e0b); }
/* Regime pill: main #2542 colours it by the market-state verdict (.rp-yellow/.rp-red);
   the risk-on default reads --mx5-accent, which the .mx5-score-* rules above set to
   var(--up) — so the pill is verdict-coloured AND flips 红涨绿跌 in zh. (My earlier flat-grey
   override was dropped in the merge: it conflicted with #2542 and left risk-on pills grey
   while yellow/red were coloured.) */

/* Thesis + flip */
body.page-macro.mx4-grid .mx5-thesis{
  font-size:13px;font-weight:450;line-height:1.55;
  color:var(--ink-1,rgba(255,255,255,.92));
  margin:12px 0 10px;
  padding-left:0;
}
body.page-macro.mx4-grid .mx5-flip{
  font-size:11px;color:var(--ink-2,rgba(255,255,255,.6));
  padding:8px 11px;
  background:var(--mx5-warn-dim);
  border:1px solid rgba(245,158,11,.18);
  border-radius:9px;line-height:1.5;
}
body.page-macro.mx4-grid .mx5-flip-arrow{color:var(--mx5-warn-ink);}

/* Popover trigger buttons row */
body.page-macro.mx4-grid .mx5-btn-row{
  display:flex;gap:8px;flex-wrap:wrap;margin-top:14px;
  position:relative;
}
/* mx5-sc-btn — already glass; harmonized with the gbtn system (macro sweep 2026-07):
   inset top sheen, hover lift + softer shadow transition, warn/up tints re-derived
   from the --warn/--up tokens via color-mix so light/zh resolve at paint. Keeps its
   own --mx5-* glass tokens (tuned for the dialog chrome) and the aria-expanded hook. */
body.page-macro.mx4-grid .mx5-sc-btn{
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 13px;border-radius:var(--mx5-radius-pill);
  border:1px solid var(--mx5-glass-border);
  background:var(--mx5-glass-bg);-webkit-backdrop-filter:blur(12px) saturate(140%);backdrop-filter:blur(12px) saturate(140%);
  color:var(--ink-2,rgba(255,255,255,.6));
  font-size:11px;font-weight:600;cursor:pointer;
  font-family:inherit;
  box-shadow:inset 0 1px 0 var(--gbtn-sheen);
  transition:color .2s ease,border-color .2s ease,background .2s ease,transform .16s ease,box-shadow .25s ease;
}
body.page-macro.mx4-grid .mx5-sc-btn:hover{
  color:var(--ink-1,rgba(255,255,255,.92));
  border-color:var(--gbtn-brd-hover);
  background:var(--gbtn-bg-hover);
  transform:translateY(-1px);
  box-shadow:inset 0 1px 0 var(--gbtn-sheen),0 8px 20px -10px rgba(3,7,18,.55);
}
body.page-macro.mx4-grid .mx5-sc-btn:active{transform:translateY(0) scale(.985);box-shadow:inset 0 1px 0 var(--gbtn-sheen);}
body.page-macro.mx4-grid .mx5-sc-btn[aria-expanded="true"]{
  color:var(--ink-1,rgba(255,255,255,.92));
  border-color:var(--gbtn-brd-hover);
  background:var(--gbtn-bg-hover);
}
body.page-macro.mx4-grid .mx5-sc-btn-warn{
  color:var(--mx5-warn-ink);
  border-color:color-mix(in srgb, var(--warn) 45%, var(--gbtn-brd));
  background:linear-gradient(180deg, color-mix(in srgb, var(--warn) 12%, var(--gbtn-bg)), var(--gbtn-bg));
}
body.page-macro.mx4-grid .mx5-sc-btn-warn:hover{
  background:linear-gradient(180deg, color-mix(in srgb, var(--warn) 20%, var(--gbtn-bg)), var(--gbtn-bg));border-color:color-mix(in srgb, var(--warn) 60%, var(--gbtn-brd));
}
body.page-macro.mx4-grid .mx5-sc-btn-warn[aria-expanded="true"]{
  background:linear-gradient(180deg, color-mix(in srgb, var(--warn) 20%, var(--gbtn-bg)), var(--gbtn-bg));border-color:color-mix(in srgb, var(--warn) 60%, var(--gbtn-brd));
}
body.page-macro.mx4-grid .mx5-sc-btn:focus-visible{
  outline:2px solid var(--link,#22d97a);outline-offset:2px;
}
@media (prefers-reduced-motion: reduce){
  body.page-macro.mx4-grid .mx5-sc-btn,
  body.page-macro.mx4-grid .mx5-sc-btn:hover,
  body.page-macro.mx4-grid .mx5-sc-btn:active{transform:none;}
}

/* ── 60-session path panel (right) ──────────────────────────────── */
body.page-macro.mx4-grid .mx5-sc-right{
  padding:22px 28px 20px;display:flex;flex-direction:column;
}
body.page-macro.mx4-grid .mx5-path-header{
  display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px;
}
body.page-macro.mx4-grid .mx5-path-title{
  font-size:11px;font-weight:700;letter-spacing:.10em;
  text-transform:uppercase;color:var(--ink-3,rgba(255,255,255,.36));
}
body.page-macro.mx4-grid .mx5-path-meta{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));}
/* Plot wrapper hosts the SVG + the screen-space JS hover overlays */
body.page-macro.mx4-grid .mx5-path-plot{
  position:relative;flex:1;min-height:190px;display:flex;
}
body.page-macro.mx4-grid .mx5-path-svg{
  display:block;width:100%;flex:1;min-height:190px;overflow:visible;
  touch-action:pan-y;
}
/* Axis-label + today-marker overlay — screen-space HTML so glyphs and the dot are
   never distorted by the SVG's preserveAspectRatio="none" fill-stretch. Positioned
   by % of the plot box (which the SVG fills exactly) so they track the gridlines. */
body.page-macro.mx4-grid .mx5-path-labels{
  position:absolute;inset:0;pointer-events:none;
  font-family:Inter,-apple-system,sans-serif;font-size:11px;line-height:1;
}
/* DIRECT children only: the bilingual l-en/l-zh spans nested inside pl-zone/pl-x must
   stay in normal flow — absolutizing them shrink-wraps the anchored parent to width 0,
   so right-aligned zone words overflow rightward past the plot edge (label-bleed bug) */
body.page-macro.mx4-grid .mx5-path-labels > span{position:absolute;white-space:nowrap;}
body.page-macro.mx4-grid .mx5-pl-y{
  left:6px;transform:translateY(-50%);
  color:var(--ink-3,rgba(255,255,255,.32));font-variant-numeric:tabular-nums;
}
body.page-macro.mx4-grid .mx5-pl-zone{
  right:14px;transform:translateY(-50%);font-weight:600;
}
/* zone labels: the .60–.66 alpha literals measured 1.51:1 (light) and 2.46:1
   (dark, the maroon) — the wash was the defect. State tokens are full-strength
   in dark and text-graded in light, and they carry the zh flip natively. */
body.page-macro.mx4-grid .mx5-pl-zone.on{color:var(--ink-up,var(--up));}
body.page-macro.mx4-grid .mx5-pl-zone.mid{color:var(--ink-warn,var(--warn));}
body.page-macro.mx4-grid .mx5-pl-zone.off{color:var(--ink-down,var(--down));}
/* zh 红涨绿跌: Risk-on(偏多)=bullish→red, Risk-off(偏空)=bearish→green (mid amber stays) */
/* zh flip now rides --up/--down at the token level — no hand-rolled override. */
/* path-chart verdict-band zone fills + boundary hairlines — the SVG rect/line elements
   carry these classes so the zh mirror below can re-tint them (their fill/stroke
   presentation attrs remain as no-CSS fallbacks; CSS wins over attrs). */
body.page-macro.mx4-grid .mx5-ph-zone-on{fill:rgba(34,217,122,.045);}
/* the risk-off zone carries 2× the tint of the other two, on purpose: it is the band a
   reader must be able to see the line ENTER, and at .045 it was invisible — which is
   part of why a window containing five risk-off prints read as calm. */
body.page-macro.mx4-grid .mx5-ph-zone-off{fill:rgba(239,68,68,.08);}
body.page-macro.mx4-grid .mx5-ph-hair-on{stroke:rgba(34,217,122,.22);}
body.page-macro.mx4-grid .mx5-ph-hair-off{stroke:rgba(239,68,68,.34);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-ph-zone-on{fill:rgba(239,68,68,.045);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-ph-zone-off{fill:rgba(34,217,122,.08);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-ph-hair-on{stroke:rgba(239,68,68,.20);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-ph-hair-off{stroke:rgba(34,217,122,.34);}
/* Band gradient stops for the score path (mx5PathBandGrad). Tokens, not baked hex, so
   the line follows the theme and flips with --up/--down under zh 红涨绿跌 exactly like
   the zone tints above. */
body.page-macro.mx4-grid .mx5-ph-line{opacity:.95;}
body.page-macro.mx4-grid #mx5PathBandGrad stop.b-on{stop-color:var(--up);}
body.page-macro.mx4-grid #mx5PathBandGrad stop.b-mid{stop-color:var(--warn);}
body.page-macro.mx4-grid #mx5PathBandGrad stop.b-off{stop-color:var(--down);}
body.page-macro.mx4-grid .mx5-pl-x{
  top:96.4%;color:var(--ink-3,rgba(255,255,255,.34));
}
body.page-macro.mx4-grid .mx5-pl-today{
  width:9px;height:9px;border-radius:50%;
  transform:translate(-50%,-50%);
  background:currentColor;box-shadow:0 0 6px currentColor;
}
/* ── Hover enhancement layer (Order 1c) — pure screen-space, hidden until JS shows ── */
body.page-macro.mx4-grid .mx5-path-cross{
  position:absolute;top:0;width:1px;height:100%;
  background:linear-gradient(rgba(255,255,255,.28),rgba(255,255,255,.06));
  opacity:0;transform:translateX(-1px);pointer-events:none;
  transition:opacity .12s ease-out;will-change:left,opacity;
}
body.page-macro.mx4-grid .mx5-path-dot{
  position:absolute;width:11px;height:11px;border-radius:50%;
  background:var(--mx5-accent);border:2px solid var(--mx5-pop-bg,#0d121a);
  box-shadow:0 0 10px var(--mx5-accent-glow),0 0 0 1px rgba(255,255,255,.25);
  opacity:0;pointer-events:none;transform:translate(-50%,-50%);
  transition:opacity .12s ease-out;will-change:left,top,opacity;
}
body.page-macro.mx4-grid .mx5-path-tip{
  position:absolute;z-index:6;pointer-events:none;
  display:flex;flex-direction:column;gap:2px;
  padding:8px 11px;border-radius:10px;
  background:rgba(15,19,26,.72);
  border:1px solid rgba(255,255,255,.12);
  box-shadow:0 8px 30px rgba(0,0,0,.5);
  backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);
  opacity:0;transform:translate(-50%,calc(-100% - 14px)) translateY(4px);
  transition:opacity .13s ease-out,transform .13s ease-out;
  white-space:nowrap;
}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  body.page-macro.mx4-grid .mx5-path-tip{background:var(--mx5-pop-bg,rgba(13,18,26,.98));}
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-path-tip{
  background:rgba(255,255,255,.82);border-color:rgba(0,0,0,.10);
  box-shadow:0 8px 30px rgba(0,0,0,.16);
}
body.page-macro.mx4-grid .mx5-path-tip.show{opacity:1;transform:translate(-50%,calc(-100% - 14px));}
body.page-macro.mx4-grid .mx5-path-tip-date{
  font-size:11px;font-weight:600;letter-spacing:.03em;
  color:var(--ink-3,rgba(255,255,255,.5));text-transform:uppercase;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-path-tip-date{color:rgba(0,0,0,.62);}
body.page-macro.mx4-grid .mx5-path-tip-row{display:flex;align-items:baseline;gap:7px;}
body.page-macro.mx4-grid .mx5-path-tip-score{
  font-size:16px;font-weight:800;line-height:1;color:var(--ink-1,rgba(255,255,255,.95));
  font-variant-numeric:tabular-nums;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-path-tip-score{color:rgba(0,0,0,.9);}
body.page-macro.mx4-grid .mx5-path-tip-verdict{font-size:12px;font-weight:600;}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid .mx5-path-cross,
  body.page-macro.mx4-grid .mx5-path-dot,
  body.page-macro.mx4-grid .mx5-path-tip{transition:none;}
}
/* Hidden on mobile (spec §0) */
@media(max-width:700px){
  body.page-macro.mx4-grid .mx5-sc-right{display:none;}
}
/* D4: prevent horizontal scroll at narrow viewports — reduce padding, gauge, score */
@media(max-width:560px){
  body.page-macro.mx4-grid .mx5-sc-left{padding:16px 12px 14px;}
  body.page-macro.mx4-grid .mx5-sc-gauge-row{gap:10px;margin-bottom:10px;}
  body.page-macro.mx4-grid .mx5-gauge-svg{width:90px;height:65px;}
  body.page-macro.mx4-grid .mx5-big-score{font-size:34px;}
  body.page-macro.mx4-grid .mx5-verdict-word{font-size:13px;}
}

/* ── Popover system ─────────────────────────────────────────────── */
/* Invisible click-away layer (z-90). It carries NO dim (2026-08-11): the factor
   popover is a peek at the numbers behind the chip you just pressed — dimming the
   whole board hid the very readings the popover explains, and read as a modal when
   nothing is being decided. The layer stays (click-away close target, Esc unchanged);
   separation now comes from the popover's own elevation + border below. The eleven
   .mx5-dlg modals keep their own .mx5-dlg-backdrop dim — those ARE modal. */
.mx5-popover-backdrop{
  display:none;position:fixed;inset:0;
  background:transparent;z-index:90;
}
.mx5-popover-backdrop.open{display:block;}

/* Popover panel */
.mx5-popover{
  display:none;position:absolute;z-index:100;
  background:var(--mx5-pop-bg,rgba(13,18,26,.96));
  border:1px solid var(--mx5-glass-border,rgba(255,255,255,.12));
  border-radius:var(--mx5-radius-card,18px);
  backdrop-filter:blur(32px);
  /* House elevation, not a modal drop shadow. --mx5-glass-hover is the mx5 family's
     own LIFTED-card token, tuned per theme (dark: 0 12px 40px/.65 + the same 1.5px
     inset sheen this popover already carried; light: the estate's two-stop contact +
     ambient pair). With the backdrop dim gone this shadow is what separates the
     popover from the board, which is why it is the lifted token and not the resting
     --mx5-glass-shadow the cards below it use. */
  box-shadow:var(--mx5-glass-hover,0 12px 40px rgba(0,0,0,.55),0 1.5px 0 rgba(255,255,255,.09) inset);
  padding:24px;min-width:320px;max-width:440px;
  top:calc(100% + 8px);left:0;
  transform-origin:top left;
}
.mx5-popover.open{display:block;}
@media(prefers-reduced-motion:no-preference){
  .mx5-popover{
    opacity:0;transform:scale(.97) translateY(-8px);
    transition:opacity 220ms cubic-bezier(.22,.68,0,1.2),transform 220ms cubic-bezier(.22,.68,0,1.2);
  }
  .mx5-popover.open{opacity:1;transform:scale(1) translateY(0);}
}
/* Right-anchored popover */
.mx5-popover.mx5-pop-right{left:auto;right:0;transform-origin:top right;}
/* Light mode: the popover plate and the card it opens over are BOTH #ffffff, so with
   the dim gone the edge is the only value step at the seam. --mx5-glass-border
   (#dde2ea) is tuned for a card on the #e8ebf1 canvas and disappears white-on-white;
   one step darker here restores the seam without turning the panel into a box. */
[data-theme="light"] .mx5-popover{border-color:#c6cfdc;}

/* Lift the parent card above the backdrop when popover open (stacking context fix) */
body.page-macro.mx4-grid #regime-radar.mx5-pop-open{
  z-index:95;position:relative;
}
.mx5-popover-title{
  font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:18px;
}

/* Mobile bottom-sheet (spec §0 — ≤700px) */
@media(max-width:700px){
  /* Remove backdrop-filter from hero card when popover open — backdrop-filter creates a
     new containing block that traps position:fixed children (CSS spec §9.3.1).
     Without this the bottom-sheet sticks to the card edge, not the viewport bottom. */
  body.page-macro.mx4-grid #regime-radar.mx5-pop-open{
    backdrop-filter:none!important;
    -webkit-backdrop-filter:none!important;
  }
  .mx5-popover{
    position:fixed!important;
    left:12px!important;right:12px!important;
    bottom:0!important;top:auto!important;
    max-width:none;width:auto;min-width:0!important; /* D3: override 320px base min-width so left/right:12px fully constrains at ≤344px */
    max-height:70vh;overflow-y:auto;
    border-radius:var(--mx5-radius-card) var(--mx5-radius-card) 0 0;
    transform-origin:bottom center;
    background:var(--mx5-pop-bg,rgba(13,18,26,.96));
    padding-top:44px; /* room for the sticky close bar */
  }
  /* Sticky close bar at top of bottom-sheet */
  .mx5-pop-close-bar{
    display:flex;align-items:center;justify-content:space-between;
    position:sticky;top:0;z-index:2;
    background:var(--mx5-pop-bg,rgba(13,18,26,.96));
    padding:12px 4px 10px;
    margin:-44px -24px 14px; /* full-bleed to popover edges */
  }
  .mx5-pop-close-handle{
    width:36px;height:4px;border-radius:2px;
    background:rgba(255,255,255,.18);margin:0 auto;
  }
  .mx5-pop-close-btn{
    display:flex;align-items:center;justify-content:center;
    width:32px;height:32px;border-radius:50%;
    background:rgba(255,255,255,.08);border:none;cursor:pointer;
    color:var(--ink-2,rgba(255,255,255,.6));font-size:18px;line-height:1;
    font-family:inherit;flex-shrink:0;
  }
  .mx5-pop-close-btn:hover{background:rgba(255,255,255,.14);}
  /* Touch target ≥44px for popover trigger buttons */
  body.page-macro.mx4-grid .mx5-sc-btn{min-height:44px;padding-top:10px;padding-bottom:10px;}
  @media(prefers-reduced-motion:no-preference){
    .mx5-popover{opacity:0;transform:translateY(20px);}
    .mx5-popover.open{opacity:1;transform:translateY(0);}
  }
}
/* Close bar hidden on desktop (bottom-sheet is mobile-only) */
@media(min-width:701px){
  .mx5-pop-close-bar{display:none;}
}

/* ── Factor breakdown (inside popover) ─────────────────────────── */
.mx5-factors-inner{display:flex;flex-direction:column;gap:14px;}
.mx5-factor-row{display:flex;flex-direction:column;gap:6px;}
.mx5-factor-header{display:flex;justify-content:space-between;align-items:baseline;}
.mx5-factor-name{font-size:12px;color:var(--ink-2,rgba(255,255,255,.6));font-weight:500;}
.mx5-factor-score{font-size:16px;font-weight:700;color:var(--ink-1,rgba(255,255,255,.92));}
.mx5-factor-score.weak{color:var(--mx5-warn-ink);}
.mx5-factor-bar-track{height:7px;border-radius:4px;background:rgba(255,255,255,.07);position:relative;}
.mx5-factor-bar-fill{height:100%;border-radius:4px;position:relative;
  background:linear-gradient(90deg,rgba(34,217,122,.45),var(--mx5-accent));}
.mx5-factor-bar-fill.weak{background:linear-gradient(90deg,rgba(245,158,11,.45),var(--mx5-warn));}
.mx5-factor-bar-fill::after{
  content:"";position:absolute;right:-2px;top:-3px;
  width:13px;height:13px;border-radius:50%;
  background:var(--mx5-accent);box-shadow:0 0 7px var(--mx5-accent-glow),0 0 16px var(--mx5-accent-glow);
}
.mx5-factor-bar-fill.weak::after{
  background:var(--mx5-warn);box-shadow:0 0 7px rgba(245,158,11,.5);
}
.mx5-factor-weak-tag{
  font-size:11px;color:var(--mx5-warn-ink);font-weight:700;letter-spacing:.05em;margin-top:3px;
}

/* ── Risk Scare Ladder (inside popover) ─────────────────────────── */
.mx5-scare-dominant-row{display:flex;align-items:baseline;gap:10px;margin-bottom:6px;}
.mx5-scare-dominant-num{font-size:48px;font-weight:800;letter-spacing:-.03em;color:var(--mx5-warn-ink);line-height:1;font-variant-numeric:tabular-nums;}
.mx5-scare-dominant-title{font-size:15px;font-weight:700;color:var(--mx5-warn-ink);}
.mx5-scare-driver{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:20px;line-height:1.5;}
.mx5-scare-list{display:flex;flex-direction:column;gap:13px;}
.mx5-scare-item{display:flex;flex-direction:column;gap:4px;}
.mx5-scare-item-header{display:flex;justify-content:space-between;align-items:baseline;}
.mx5-scare-item-name{font-size:12px;color:var(--ink-2,rgba(255,255,255,.6));font-weight:600;}
.mx5-scare-item-val{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;}
.mx5-scare-item-val.top{color:var(--mx5-warn-ink);}
.mx5-scare-item-val.lower{color:var(--ink-2,rgba(255,255,255,.6));}
.mx5-scare-meter{height:5px;border-radius:3px;background:rgba(255,255,255,.07);overflow:hidden;}
.mx5-scare-fill{height:100%;border-radius:3px;}
.mx5-scare-fill.hi {background:linear-gradient(90deg,rgba(245,158,11,.5),var(--mx5-warn));}
.mx5-scare-fill.mid{background:rgba(245,158,11,.55);}
.mx5-scare-fill.lo {background:rgba(245,158,11,.35);}
.mx5-scare-item-label{font-size:11px;color:var(--mx5-warn-ink);font-weight:600;letter-spacing:.04em;}

/* Popover footer */
.mx5-pop-footer{
  margin-top:16px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08);
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
}
[data-theme="light"] .mx5-pop-footer{border-top-color:rgba(0,0,0,.07);}
.mx5-pop-footer-link{
  background:none;border:none;cursor:pointer;font-size:11px;font-weight:600;
  color:var(--mx5-accent-ink);font-family:inherit;padding:0;
  text-decoration:underline;text-decoration-color:transparent;
  transition:text-decoration-color .15s;
}
.mx5-pop-footer-link:hover{text-decoration-color:var(--mx5-accent-ink);}

/* ══════════════════════════════════════════════════════════════════
   v5.1 — mx5OpenDlg centered dialog system (§2 addendum)
   Desktop: centered fixed glass dialog 980px / 82vh
   Mobile ≤700px: bottom sheet, 12px sides, 85vh, sticky close bar
   ══════════════════════════════════════════════════════════════════ */

/* Scroll-lock while dialog open */
/* v5.3 audit round M03: the document scroller is <html>, not <body>, so
   body{overflow:hidden} alone leaked wheel/scroll to the background. Lock the
   real scroller: html.mx5-dlg-lock pins the page while a dialog is open; JS
   restores scrollY on close (position:fixed keeps iOS from scrolling <html>). */
html.mx5-dlg-lock{ overflow:hidden; }
html.mx5-dlg-lock body{ overflow:hidden; position:fixed; width:100%; }
body.mx5-dlg-open{ overflow:hidden; }

/* Backdrop dim */
.mx5-dlg{
  display:none;position:fixed;inset:0;z-index:200;
  align-items:center;justify-content:center;
}
.mx5-dlg.open{ display:flex; }
.mx5-dlg-backdrop{
  position:absolute;inset:0;
  background:rgba(3,6,10,.58);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
}

/* ── Order 4: FROSTED glass panel ──────────────────────────────────
   Deep blur + saturate; translucent fill (legibility verified over the hero);
   inner hairline + deep soft shadow. @supports fallback to near-opaque fill
   when backdrop-filter is unavailable. backdrop-filter creates a containing
   block + its own stacking context — sticky header inside still works because
   it is a normal-flow descendant of this scroll container. */
.mx5-dlg-panel{
  position:relative;z-index:1;
  max-width:980px;width:calc(100% - 48px);
  max-height:82vh;
  background:rgba(13,17,24,.88);
  border:1px solid rgba(255,255,255,.10);
  border-radius:var(--mx5-radius-card,18px);
  backdrop-filter:blur(28px) saturate(1.4);
  -webkit-backdrop-filter:blur(28px) saturate(1.4);
  box-shadow:0 40px 120px rgba(0,0,0,.72),
             0 2px 0 rgba(255,255,255,.06) inset,
             0 0 0 1px rgba(255,255,255,.04);
  overflow-y:auto;
  display:flex;flex-direction:column;
}
[data-theme="light"] .mx5-dlg-panel{
  /* opaque white in light mode: the frosted translucent fill let the dark
     backdrop scrim bleed through and read grey — operator wants a clean white
     popup surface in light mode (dark mode keeps the frosted glass). */
  background:#ffffff;
  border-color:rgba(255,255,255,.6);
  box-shadow:0 32px 96px rgba(0,0,0,.18),
             0 1px 0 rgba(255,255,255,.9) inset,
             0 0 0 1px rgba(0,0,0,.04);
}
/* No blur support → near-opaque fill so body copy stays ≥4.5:1 over any bg */
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .mx5-dlg-panel{background:var(--mx5-pop-bg,rgba(13,18,26,.98));}
  [data-theme="light"] .mx5-dlg-panel{background:var(--mx5-pop-bg,rgba(255,255,255,.98));}
}
/* v5.3 audit round M09: dialogs whose whole body is one compact row (Deep
   Context = a single strip of linked-surface shortcuts) size to their content
   instead of the full 980px shell, so the panel isn't mostly empty. */
.mx5-dlg-panel-narrow{ max-width:640px; }

/* Dialog header (sticky). Frosted panel is translucent, so the sticky header needs
   its own denser fill + blur or scrolled body copy bleeds through the title. */
.mx5-dlg-header{
  display:flex;align-items:center;justify-content:space-between;
  padding:20px 26px 16px;
  position:sticky;top:0;z-index:2;
  background:rgba(13,17,24,.92);
  backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);
  border-bottom:1px solid rgba(255,255,255,.07);
}
[data-theme="light"] .mx5-dlg-header{
  background:#ffffff;border-bottom-color:rgba(0,0,0,.07);
}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
  .mx5-dlg-header{background:var(--mx5-pop-bg,rgba(13,18,26,.98));}
  [data-theme="light"] .mx5-dlg-header{background:var(--mx5-pop-bg,rgba(255,255,255,.98));}
}
.mx5-dlg-title{
  font-size:14px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-2,rgba(255,255,255,.6));
}
/* mx5-dlg-close — gbtn-icon recipe: 32px frosted glass circle with an inset sheen,
   hover lift + brighter fill. onclick contract (mx5CloseDlg) unchanged. */
.mx5-dlg-close{
  display:flex;align-items:center;justify-content:center;
  width:32px;height:32px;border-radius:999px;
  background:var(--gbtn-bg);border:1px solid var(--gbtn-brd);cursor:pointer;
  -webkit-backdrop-filter:blur(12px) saturate(140%);backdrop-filter:blur(12px) saturate(140%);
  color:var(--ink-2,rgba(255,255,255,.6));font-size:18px;line-height:1;
  font-family:inherit;flex-shrink:0;
  box-shadow:inset 0 1px 0 var(--gbtn-sheen),0 1px 2px rgba(3,7,18,.18);
  transition:background .2s ease,border-color .2s ease,color .2s ease,transform .16s ease,box-shadow .25s ease;
}
.mx5-dlg-close:hover{background:var(--gbtn-bg-hover);border-color:var(--gbtn-brd-hover);color:var(--text);
  transform:translateY(-1px);box-shadow:inset 0 1px 0 var(--gbtn-sheen),0 8px 20px -10px rgba(3,7,18,.55);}
.mx5-dlg-close:active{transform:translateY(0) scale(.985);box-shadow:inset 0 1px 0 var(--gbtn-sheen);}
.mx5-dlg-close:focus-visible{outline:2px solid var(--link,#22d97a);outline-offset:2px;}
@media (prefers-reduced-motion: reduce){
  .mx5-dlg-close,.mx5-dlg-close:hover,.mx5-dlg-close:active{transform:none;}
}

/* Dialog body */
.mx5-dlg-body{
  padding:24px 26px 28px;flex:1;overflow-y:auto;
}

/* ── Order 4: entrance / exit animation (desktop) ──────────────────
   .open just makes it display:flex (start state painted). JS then adds
   .mx5-dlg-in on the next frame so these transitions actually run.
   Backdrop fades 240ms; panel opacity + translateY(14px) + scale(.965)
   over 320ms; interior sections stagger-fade-up 40ms apart (cap 5).
   Close reverses at ~180ms (JS removes .mx5-dlg-in, then hides). */
@media(prefers-reduced-motion:no-preference){
  .mx5-dlg-backdrop{
    opacity:0;transition:opacity 240ms ease-out;
  }
  .mx5-dlg.mx5-dlg-in .mx5-dlg-backdrop{opacity:1;}
  .mx5-dlg-panel{
    opacity:0;transform:translateY(14px) scale(.965);
    transition:opacity 320ms cubic-bezier(.22,.9,.26,1.02),
               transform 320ms cubic-bezier(.22,.9,.26,1.02);
  }
  .mx5-dlg.mx5-dlg-in .mx5-dlg-panel{opacity:1;transform:translateY(0) scale(1);}
  /* faster close */
  .mx5-dlg.mx5-dlg-closing .mx5-dlg-backdrop{transition-duration:180ms;}
  .mx5-dlg.mx5-dlg-closing .mx5-dlg-panel{transition-duration:180ms;}
  /* interior stagger — first 5 direct children of the body rise in sequence */
  .mx5-dlg-body > *{
    opacity:0;transform:translateY(10px);
    transition:opacity 300ms ease-out,transform 300ms cubic-bezier(.22,.9,.26,1.02);
  }
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *{opacity:1;transform:translateY(0);}
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(1){transition-delay:60ms;}
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(2){transition-delay:100ms;}
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(3){transition-delay:140ms;}
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(4){transition-delay:180ms;}
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(5){transition-delay:220ms;}
  /* cap: children 6+ simply appear with the panel (no stagger, no delay) */
  .mx5-dlg.mx5-dlg-in .mx5-dlg-body > *:nth-child(n+6){transition-delay:0ms;}
  .mx5-dlg-closing .mx5-dlg-body > *{transition-delay:0ms!important;}
}
/* Reduced-motion OR no-JS: fully visible the instant .open lands (never stuck at 0) */
@media(prefers-reduced-motion:reduce){
  .mx5-dlg.open .mx5-dlg-backdrop{opacity:1;}
  .mx5-dlg.open .mx5-dlg-panel{opacity:1;transform:none;}
  .mx5-dlg.open .mx5-dlg-body > *{opacity:1;transform:none;}
}

/* Mobile bottom sheet (≤700px) */
@media(max-width:700px){
  .mx5-dlg{ align-items:flex-end; }
  .mx5-dlg-panel{
    width:calc(100% - 24px);max-width:none;
    max-height:85vh;
    border-radius:var(--mx5-radius-card,18px) var(--mx5-radius-card,18px) 0 0;
    margin:0 12px;
  }
  /* 44px min-touch on header close button */
  .mx5-dlg-close{width:44px;height:44px;font-size:22px;}
  /* No horizontal overflow inside dialogs at narrow widths */
  .mx5-dlg-body{padding:20px 18px 28px;overflow-x:hidden;}
  .mx5-dlg-header{padding:16px 18px 12px;}
  /* Order 4: bottom-sheet slide-up (translateY(100%)→0, 260ms) */
  @media(prefers-reduced-motion:no-preference){
    .mx5-dlg-panel{
      opacity:1;transform:translateY(100%) scale(1);
      transition:transform 260ms cubic-bezier(.22,.9,.26,1.02);
    }
    .mx5-dlg.mx5-dlg-in .mx5-dlg-panel{transform:translateY(0) scale(1);}
    .mx5-dlg.mx5-dlg-closing .mx5-dlg-panel{transition-duration:200ms;}
  }
  @media(prefers-reduced-motion:reduce){
    .mx5-dlg.open .mx5-dlg-panel{transform:translateY(0);}
  }
}
/* Extra-narrow (320px) — prevent any horizontal bleed */
@media(max-width:360px){
  .mx5-dlg-panel{margin:0 6px;width:calc(100% - 12px);}
  .mx5-dlg-idx-grid{grid-template-columns:1fr!important;}
}

/* ── S2: Dialog interior components ─────────────────────────────── */

/* Section eyebrow inside dialogs */
.mx5-dlg-eyebrow{
  font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));margin:0 0 14px;
}
[data-theme="light"] .mx5-dlg-eyebrow{color:rgba(0,0,0,.58);}

/* Section divider (thin separator between content blocks) */
.mx5-dlg-sep{
  height:1px;background:rgba(255,255,255,.07);margin:22px 0;
}
[data-theme="light"] .mx5-dlg-sep{background:rgba(0,0,0,.07);}

/* Dominant driver callout (RISK dialog top) */
.mx5-dlg-driver-hd{
  display:flex;align-items:center;gap:14px;margin-bottom:20px;
  padding:16px 18px;
  background:rgba(255,255,255,.04);border-radius:12px;
  border:1px solid rgba(255,255,255,.09);
}
[data-theme="light"] .mx5-dlg-driver-hd{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.07);}
.mx5-dlg-driver-icon{
  width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  flex-shrink:0;font-size:18px;
  background:rgba(239,68,68,.13);
}
.mx5-dlg-driver-label{font-size:13px;font-weight:700;margin-bottom:3px;}
.mx5-dlg-driver-sub{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));}
[data-theme="light"] .mx5-dlg-driver-sub{color:rgba(0,0,0,.62);}

/* Heads-up chips row (fed stance, turning point) */
.mx5-dlg-chips-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px;}
.mx5-dlg-chip{
  display:inline-flex;align-items:center;padding:4px 12px;
  border-radius:20px;font-size:11px;font-weight:600;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
  color:var(--ink-2,rgba(255,255,255,.6));
}
[data-theme="light"] .mx5-dlg-chip{background:rgba(0,0,0,.05);border-color:rgba(0,0,0,.1);color:rgba(0,0,0,.6);}

/* (drawdown dd-box CSS removed — the boxes section was deduped into the radar card's
   pullback-odds block, the single canonical display) */

/* Semantic chip colours for bare .chip (mood-check band chips + any dialog chip) */
body.page-macro .chip.c-up{color:var(--ink-up, var(--up,#22d97a));border-color:color-mix(in srgb,var(--up,#22d97a) 32%,transparent);background:color-mix(in srgb,var(--up,#22d97a) 9%,transparent);}
body.page-macro .chip.c-down{color:var(--ink-down, var(--down,#ef4444));border-color:color-mix(in srgb,var(--down,#ef4444) 32%,transparent);background:color-mix(in srgb,var(--down,#ef4444) 9%,transparent);}
body.page-macro .chip.c-warn{color:var(--mx5-warn-ink,#f59e0b);border-color:color-mix(in srgb,var(--warn,#f59e0b) 32%,transparent);background:color-mix(in srgb,var(--warn,#f59e0b) 9%,transparent);}
body.page-macro .chip.c-muted{color:var(--ink-2,rgba(255,255,255,.6));}

/* ── rsx-* : dlg-risk Mood check + Leaders + Overseas sections ── */
/* Leaders card */
body.page-macro .rsx-leaders{
  padding:10px 14px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);
  font-size:12px;line-height:1.55;
}
[data-theme="light"] body.page-macro .rsx-leaders{background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.06);}
body.page-macro .rsx-leaders-state{font-size:13px;font-weight:600;color:var(--ink-1,rgba(255,255,255,.92));margin-bottom:4px;}
body.page-macro .rsx-leaders-sub{font-size:11.5px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;}
/* Mood check container */
body.page-macro .rsx-mood{margin-top:0;}
/* Single gradient rail (two-marker variant) */
body.page-macro .rsx-rail-wrap{position:relative;margin:10px 0 4px;}
body.page-macro .rsx-rail{
  height:10px;border-radius:5px;
  background:linear-gradient(90deg,var(--down) 0%,var(--warn) 50%,var(--up) 100%);
  opacity:.6;position:relative;
}
body.page-macro .rsx-marker{
  position:absolute;top:-4px;width:6px;height:18px;
  background:var(--text,rgba(255,255,255,.95));border-radius:3px;
  border:2px solid var(--bg,#0a0e1a);
}
body.page-macro .rsx-marker-label{
  position:absolute;top:-18px;transform:translateX(-50%);
  font-size:9.5px;font-weight:700;white-space:nowrap;
  color:var(--ink-2,rgba(255,255,255,.62));
}
body.page-macro .rsx-marker-label.rsx-ml-below{top:auto;bottom:-16px;}
body.page-macro .rsx-axis-labels{
  display:flex;justify-content:space-between;
  font-size:9px;color:var(--muted);margin-top:2px;
}
/* Disagreement line */
body.page-macro .rsx-disagree{
  font-size:11.5px;color:var(--ink-warn, var(--warn,#f59e0b));margin:8px 0 4px;line-height:1.5;
}
/* Froth sub-block */
body.page-macro .rsx-froth{
  margin-top:14px;padding:10px 14px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);
}
[data-theme="light"] body.page-macro .rsx-froth{background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.06);}
body.page-macro .rsx-froth-hd{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-size:13px;font-weight:700;color:var(--ink-1,rgba(255,255,255,.92));margin-bottom:6px;
}
body.page-macro .rsx-froth-quad{
  font-size:12px;color:var(--ink-2,rgba(255,255,255,.62));margin-bottom:10px;line-height:1.5;
}
body.page-macro .rsx-froth-bars{display:flex;flex-direction:column;gap:8px;}
body.page-macro .rsx-froth-bar-row{display:flex;align-items:center;gap:10px;}
body.page-macro .rsx-froth-bar-lbl{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));width:110px;flex-shrink:0;}
body.page-macro .rsx-froth-bar-track{flex:1;height:6px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden;}
[data-theme="light"] body.page-macro .rsx-froth-bar-track{background:rgba(0,0,0,.09);}
body.page-macro .rsx-froth-bar-fill{height:100%;border-radius:3px;}
body.page-macro .rsx-froth-bar-val{font-size:11px;font-weight:700;width:28px;text-align:right;flex-shrink:0;}
/* Upturn cross-ref row (bottom of dlg-risk) */
body.page-macro .rsx-xref-row{
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;
  padding:10px 14px;border-radius:10px;margin-top:4px;
  background:rgba(34,197,94,.06);border:1px solid rgba(34,197,94,.18);
  font-size:12px;
}
[data-theme="light"] body.page-macro .rsx-xref-row{background:rgba(34,197,94,.04);border-color:rgba(34,197,94,.18);}
body.page-macro .rsx-xref-text{color:var(--ink-2,rgba(255,255,255,.62));line-height:1.5;}
/* rsx-xref-btn — gbtn-up glass recipe (macro sweep 2026-07); onclick contract kept */
body.page-macro .rsx-xref-btn{
  font-size:11px;font-weight:600;padding:5px 12px;border-radius:999px;cursor:pointer;
  border:1px solid color-mix(in srgb, var(--up) 45%, var(--gbtn-brd));
  background:linear-gradient(180deg, color-mix(in srgb, var(--up) 12%, var(--gbtn-bg)), var(--gbtn-bg));
  -webkit-backdrop-filter:blur(12px) saturate(140%);backdrop-filter:blur(12px) saturate(140%);
  box-shadow:inset 0 1px 0 var(--gbtn-sheen);
  color:color-mix(in srgb,var(--up,#22c55e) 80%,white);
  transition:background .2s ease,border-color .2s ease,transform .16s ease,box-shadow .25s ease;
}
body.page-macro .rsx-xref-btn:hover{
  background:linear-gradient(180deg, color-mix(in srgb, var(--up) 20%, var(--gbtn-bg)), var(--gbtn-bg));
  border-color:color-mix(in srgb, var(--up) 60%, var(--gbtn-brd));transform:translateY(-1px);
  box-shadow:inset 0 1px 0 var(--gbtn-sheen),0 8px 20px -10px color-mix(in srgb, var(--up) 45%, transparent);
}
body.page-macro .rsx-xref-btn:active{transform:translateY(0) scale(.985);box-shadow:inset 0 1px 0 var(--gbtn-sheen);}
@media (prefers-reduced-motion: reduce){ body.page-macro .rsx-xref-btn,body.page-macro .rsx-xref-btn:hover,body.page-macro .rsx-xref-btn:active{transform:none;} }
/* Dialog-level merged footer */
body.page-macro .rsx-dlg-footer{
  font-size:10px;color:var(--ink-3,rgba(255,255,255,.36));
  line-height:1.5;margin-top:4px;
}

/* Six-factor deep rows (SIGNALS dialog) */
.mx5-dlg-factor-row{
  display:grid;grid-template-columns:minmax(120px,1.4fr) 1fr 52px;
  align-items:center;gap:14px;
  padding:12px 14px;
  background:rgba(255,255,255,.03);border-radius:12px;
  border:1px solid rgba(255,255,255,.06);
  margin-bottom:8px;
}
[data-theme="light"] .mx5-dlg-factor-row{background:rgba(0,0,0,.025);border-color:rgba(0,0,0,.06);}
.mx5-dlg-factor-row.weakest{border-color:rgba(245,158,11,.25);}
.mx5-dlg-factor-name{font-size:12px;font-weight:700;}
.mx5-dlg-factor-read{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;line-height:1.4;}
[data-theme="light"] .mx5-dlg-factor-read{color:rgba(0,0,0,.62);}
.mx5-dlg-factor-bar{position:relative;height:7px;border-radius:4px;background:rgba(255,255,255,.08);}
[data-theme="light"] .mx5-dlg-factor-bar{background:rgba(0,0,0,.09);}
.mx5-dlg-factor-fill{position:absolute;left:0;top:0;height:100%;border-radius:4px;opacity:.85;}
.mx5-dlg-factor-score{font-size:16px;font-weight:800;text-align:right;font-variant-numeric:tabular-nums;}
/* Bar tick labels (0 / 50 / 100) */
.mx5-dlg-bar-ticks{display:flex;justify-content:space-between;margin-top:4px;font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));}
@media(max-width:700px){.mx5-dlg-bar-ticks{display:none;}}

/* Weakest-leg callout (SIGNALS dialog) */
.mx5-dlg-weakest-callout{
  display:flex;gap:12px;align-items:flex-start;
  padding:14px 16px;
  background:rgba(245,158,11,.07);border-radius:12px;
  border:1px solid rgba(245,158,11,.2);
  margin:4px 0 16px;
}
.mx5-dlg-weakest-icon{
  width:32px;height:32px;border-radius:8px;flex-shrink:0;
  background:rgba(245,158,11,.14);display:flex;align-items:center;justify-content:center;
}
.mx5-dlg-weakest-label{font-size:13px;font-weight:700;color:var(--mx5-warn,#f59e0b);margin-bottom:3px;}
.mx5-dlg-weakest-sub{font-size:11px;color:var(--ink-2,rgba(255,255,255,.6));}
[data-theme="light"] .mx5-dlg-weakest-sub{color:rgba(0,0,0,.55);}

/* MTF tape table (inside SIGNALS dialog) */
.mx5-dlg-mtf-tbl{width:100%;border-collapse:collapse;font-size:11.5px;margin-top:10px;}
.mx5-dlg-mtf-tbl th{
  text-align:left;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));padding:0 0 8px;
}
[data-theme="light"] .mx5-dlg-mtf-tbl th{color:rgba(0,0,0,.58);}
.mx5-dlg-mtf-tbl th:not(:first-child){text-align:center;}
.mx5-dlg-mtf-tbl td{padding:6px 0;}
.mx5-dlg-mtf-tbl td:not(:first-child){text-align:center;}
.mx5-dlg-mtf-tbl tbody tr+tr td{border-top:1px solid rgba(255,255,255,.05);}
[data-theme="light"] .mx5-dlg-mtf-tbl tbody tr+tr td{border-top-color:rgba(0,0,0,.05);}
.mx5-dlg-mtf-conf.good{color:var(--ink-up, var(--up,#22d97a));}
.mx5-dlg-mtf-conf.bad{color:var(--ink-down, var(--down,#ef4444));}
.mx5-dlg-mtf-conf.flat{color:var(--ink-3,rgba(255,255,255,.36));}

/* Index deep cards (MARKETS dialog) */
.mx5-dlg-idx-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px;
}
@media(max-width:700px){.mx5-dlg-idx-grid{grid-template-columns:repeat(2,1fr);}}
.mx5-dlg-idx-card{
  padding:14px 14px 12px;
  background:rgba(255,255,255,.04);border-radius:12px;
  border:1px solid rgba(255,255,255,.08);
}
[data-theme="light"] .mx5-dlg-idx-card{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.07);}
.mx5-dlg-idx-ticker{font-size:12px;font-weight:700;margin-bottom:1px;}
.mx5-dlg-idx-name{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
[data-theme="light"] .mx5-dlg-idx-name{color:rgba(0,0,0,.62);}
.mx5-dlg-idx-px{font-size:20px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums;margin-bottom:3px;}
.mx5-dlg-idx-chg{font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;margin-bottom:10px;}
.mx5-dlg-idx-chg.up{color:var(--ink-up, var(--up,#22d97a));}
.mx5-dlg-idx-chg.dn{color:var(--ink-down, var(--down,#ef4444));}
.mx5-dlg-idx-chips{display:flex;flex-wrap:wrap;gap:4px;}
.mx5-dlg-idx-chip{
  display:inline-flex;align-items:center;padding:2px 7px;
  border-radius:6px;font-size:11px;font-weight:600;
}
.mx5-dlg-idx-chip.ok{color:var(--ink-up, var(--up,#22d97a));background:rgba(62,200,122,.1);border:1px solid rgba(62,200,122,.2);}
.mx5-dlg-idx-chip.wn{color:var(--ink-warn, var(--warn,#f59e0b));background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.2);}
.mx5-dlg-idx-chip.mt{color:var(--ink-3,rgba(255,255,255,.36));background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
[data-theme="light"] .mx5-dlg-idx-chip.mt{color:rgba(0,0,0,.58);background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.08);}

/* Sector columns (MARKETS dialog) */
.mx5-dlg-sector-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px;}
.mx5-dlg-sector-col-head{
  font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:10px;
}
[data-theme="light"] .mx5-dlg-sector-col-head{color:rgba(0,0,0,.58);}
.mx5-dlg-sector-row{
  display:flex;align-items:center;gap:8px;padding:9px 0;
  border-bottom:1px solid rgba(255,255,255,.05);font-size:12px;
}
[data-theme="light"] .mx5-dlg-sector-row{border-bottom-color:rgba(0,0,0,.05);}
.mx5-dlg-sector-arr{font-size:11px;flex-shrink:0;}
.mx5-dlg-sector-arr.heat{color:var(--ink-down, var(--down,#ef4444));}
.mx5-dlg-sector-arr.cool{color:var(--ink-up, var(--up,#22d97a));}
.mx5-dlg-sector-name{flex:1;font-weight:500;}
.mx5-dlg-sector-rk{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));font-variant-numeric:tabular-nums;}
[data-theme="light"] .mx5-dlg-sector-rk{color:rgba(0,0,0,.58);}

/* ── Sector Temperature — rotation ladder (dlg-sector rebuild) ─────────────────
   Each sector is a rung; the little trace is its 5-day rank move (an honest 2-point
   trajectory — up = climbed, down = slipped), coloured green/red via --up/--down so
   ZH flips. Lane = current standing (leading / lagging); trace + delta = the move. */
.sct-lane{margin:0 0 20px;}
.sct-lane:last-of-type{margin-bottom:6px;}
.sct-lane-head{display:flex;align-items:center;gap:8px;margin:0 0 11px;
  font:700 11px/1 var(--font-ui,inherit);letter-spacing:.09em;text-transform:uppercase;}
.sct-lane-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;box-shadow:0 0 9px currentColor;}
.sct-lane.lead .sct-lane-head{color:color-mix(in srgb,var(--up,#22d97a) 78%,var(--text));}
.sct-lane.lag  .sct-lane-head{color:color-mix(in srgb,var(--down,#ef4444) 78%,var(--text));}
.sct-lane.lead .sct-lane-dot{color:var(--ink-up, var(--up,#22d97a));background:currentColor;}
.sct-lane.lag  .sct-lane-dot{color:var(--ink-down, var(--down,#ef4444));background:currentColor;}
.sct-lane-n{margin-left:auto;font:600 10.5px/1 var(--font-ui,inherit);letter-spacing:.01em;text-transform:none;color:var(--ink-3,rgba(255,255,255,.42));}
.sct-rung{display:grid;grid-template-columns:32px 1fr 132px 54px;align-items:center;gap:12px;
  padding:11px 13px;border-radius:13px;background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.06);transition:border-color .2s,background .2s,transform .16s;}
.sct-rung + .sct-rung{margin-top:8px;}
[data-theme="light"] .sct-rung{background:rgba(0,0,0,.018);border-color:rgba(0,0,0,.06);}
.sct-rung:hover{transform:translateY(-1px);background:rgba(255,255,255,.05);
  border-color:color-mix(in srgb,var(--sct-c,var(--up,#22d97a)) 36%,var(--line,rgba(255,255,255,.1)));}
[data-theme="light"] .sct-rung:hover{background:rgba(0,0,0,.035);}
.sct-badge{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;
  color:var(--sct-c,var(--up,#22d97a));background:color-mix(in srgb,var(--sct-c,var(--up,#22d97a)) 14%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--sct-c,var(--up,#22d97a)) 28%,transparent);}
.sct-badge svg{width:15px;height:15px;display:block;}
.sct-body{min-width:0;}
.sct-name{font:700 13px/1.25 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.92));
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sct-sub{margin-top:2px;font-size:10.5px;color:var(--ink-3,rgba(255,255,255,.44));display:flex;align-items:center;gap:7px;}
.sct-sub .sct-rk{font-variant-numeric:tabular-nums;font-weight:700;color:var(--ink-2,rgba(255,255,255,.6));}
.sct-sub .sct-stance{text-transform:capitalize;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sct-trace{width:132px;height:30px;display:block;overflow:visible;}
.sct-trace .sct-base{stroke:color-mix(in srgb,var(--ink-3,#8b93a1) 45%,transparent);stroke-width:1;stroke-dasharray:2 3;}
.sct-trace .sct-ln{fill:none;stroke:var(--sct-c,var(--up,#22d97a));stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;}
.sct-trace .sct-dot-old{fill:none;stroke:color-mix(in srgb,var(--sct-c,var(--up,#22d97a)) 55%,transparent);stroke-width:1.6;}
.sct-trace .sct-dot-now{fill:var(--sct-c,var(--up,#22d97a));}
.sct-delta{display:flex;flex-direction:column;align-items:flex-end;}
.sct-delta-v{font:800 16px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;color:var(--sct-c,var(--up,#22d97a));letter-spacing:-.01em;}
.sct-delta-k{margin-top:3px;font-size:9px;color:var(--ink-3,rgba(255,255,255,.4));letter-spacing:.02em;white-space:nowrap;}
@media(max-width:430px){
  .sct-rung{grid-template-columns:28px 1fr 82px 44px;gap:9px;padding:10px;}
  .sct-trace{width:82px;}
  .sct-delta-v{font-size:15px;}
}
@media(prefers-reduced-motion:no-preference){
  #dlg-sector .sct-rung{opacity:0;transform:translateY(8px);
    transition:opacity .44s ease,transform .44s cubic-bezier(.22,.9,.26,1.02),border-color .2s,background .2s;}
  #dlg-sector.mx5-dlg-in .sct-rung{opacity:1;transform:translateY(0);}
  #dlg-sector.mx5-dlg-in .sct-rung:nth-child(2){transition-delay:.05s}
  #dlg-sector.mx5-dlg-in .sct-rung:nth-child(3){transition-delay:.11s}
  #dlg-sector.mx5-dlg-in .sct-rung:nth-child(4){transition-delay:.17s}
  #dlg-sector.mx5-dlg-in .sct-rung:nth-child(5){transition-delay:.23s}
  #dlg-sector .sct-trace .sct-ln{stroke-dasharray:150;stroke-dashoffset:150;}
  #dlg-sector.mx5-dlg-in .sct-trace .sct-ln{transition:stroke-dashoffset .72s cubic-bezier(.22,.9,.26,1.02) .22s;stroke-dashoffset:0;}
  #dlg-sector .sct-trace .sct-dot-now{opacity:0;}
  #dlg-sector.mx5-dlg-in .sct-trace .sct-dot-now{transition:opacity .3s ease .6s;opacity:1;}
}

/* ── News modal — Market Intelligence headline list (nbx-*): each headline is a
     tappable card with a theme tag, the outlet + date, and a summary snippet — replaces
     the bare title-only accordion (the "no context / no dates" complaint). ── */
.nbx-list{display:flex;flex-direction:column;gap:8px;margin-top:12px;}
.nbx-item{display:block;text-decoration:none;color:inherit;padding:11px 13px;border-radius:11px;
  background:rgba(255,255,255,.028);border:1px solid rgba(255,255,255,.06);
  transition:border-color .2s,background .2s,transform .16s;}
[data-theme="light"] .nbx-item{background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.06);}
.nbx-item:hover{transform:translateY(-1px);background:rgba(255,255,255,.05);
  border-color:color-mix(in srgb,var(--link,#22d97a) 34%,var(--line,rgba(255,255,255,.1)));}
[data-theme="light"] .nbx-item:hover{background:rgba(0,0,0,.035);}
.nbx-top{display:flex;align-items:baseline;gap:9px;min-width:0;}
.nbx-theme{flex:0 0 auto;font:700 9px/1 var(--font-ui,inherit);letter-spacing:.06em;text-transform:uppercase;
  padding:3px 7px;border-radius:5px;color:var(--ink-2,rgba(255,255,255,.6));
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.09);white-space:nowrap;margin-top:1px;}
[data-theme="light"] .nbx-theme{background:rgba(0,0,0,.045);border-color:rgba(0,0,0,.09);}
.nbx-title{flex:1;min-width:0;font:600 13px/1.4 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.92));}
.nbx-meta{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:10.5px;color:var(--ink-3,rgba(255,255,255,.42));}
.nbx-src{font-weight:700;color:var(--ink-2,rgba(255,255,255,.6));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;}
.nbx-dot{opacity:.5;}
.nbx-date{font-variant-numeric:tabular-nums;white-space:nowrap;}
.nbx-arrow{margin-left:auto;font-weight:700;color:var(--ink-link, var(--link,#22d97a));white-space:nowrap;}
.nbx-sum{margin-top:6px;font-size:11.5px;line-height:1.5;color:var(--ink-3,rgba(255,255,255,.5));
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
@media(prefers-reduced-motion:no-preference){
  #dlg-news .nbx-item{opacity:0;transform:translateY(6px);transition:opacity .4s ease,transform .4s cubic-bezier(.22,.9,.26,1.02),border-color .2s,background .2s;}
  #dlg-news.mx5-dlg-in .nbx-item{opacity:1;transform:translateY(0);}
  #dlg-news.mx5-dlg-in .nbx-item:nth-child(2){transition-delay:.04s}
  #dlg-news.mx5-dlg-in .nbx-item:nth-child(3){transition-delay:.08s}
  #dlg-news.mx5-dlg-in .nbx-item:nth-child(4){transition-delay:.12s}
  #dlg-news.mx5-dlg-in .nbx-item:nth-child(n+5){transition-delay:.15s}
}

/* Asset tiles (MARKETS dialog) */
.mx5-dlg-asset-row{
  display:flex;flex-wrap:wrap;gap:10px;margin-top:4px;
}
.mx5-dlg-asset-tile{
  flex:1 1 100px;min-width:90px;
  padding:12px 12px 10px;
  background:rgba(255,255,255,.03);border-radius:12px;
  border:1px solid rgba(255,255,255,.07);
  text-align:center;
}
[data-theme="light"] .mx5-dlg-asset-tile{background:rgba(0,0,0,.025);border-color:rgba(0,0,0,.07);}
.mx5-dlg-asset-lbl{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:6px;}
[data-theme="light"] .mx5-dlg-asset-lbl{color:rgba(0,0,0,.58);}
.mx5-dlg-asset-val{font-size:17px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;margin-bottom:3px;}
.mx5-dlg-asset-ctx{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));}
[data-theme="light"] .mx5-dlg-asset-ctx{color:rgba(0,0,0,.58);}

/* Events calendar cards (EVENTS dialog) */
.mx5-dlg-cal-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:20px;
}
.mx5-dlg-cal-card{
  padding:14px 14px 12px;
  background:rgba(255,255,255,.04);border-radius:12px;
  border:1px solid rgba(255,255,255,.07);
  position:relative;
}
.mx5-dlg-cal-card.hot{border-color:rgba(245,158,11,.25);background:rgba(245,158,11,.04);}
[data-theme="light"] .mx5-dlg-cal-card{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.07);}
[data-theme="light"] .mx5-dlg-cal-card.hot{background:rgba(245,158,11,.04);}
/* ── Calendar date = Release Radar selector (rr-inline, 2026-07) ─────────────
   Every non-FOMC card selects its date for the inline panel below. Covered
   dates carry a subtle radar dot; every selector sharing the selected date
   receives the same --info accent ring. FOMC cards route to Fed Path instead. */
.mx5-dlg-cal-card.rr-select{cursor:pointer;transition:border-color .16s ease,box-shadow .22s ease,background .16s ease;}
.mx5-dlg-cal-card.rr-select:hover{border-color:color-mix(in srgb,var(--info,#60a5fa) 40%,transparent);box-shadow:0 2px 12px color-mix(in srgb,var(--info,#60a5fa) 8%,transparent);}
.mx5-dlg-cal-card.rr-select:focus-visible{outline:2px solid var(--info,#60a5fa);outline-offset:2px;}
/* Selected date — outer blue ring survives green/amber live-status fills. */
.mx5-dlg-cal-card.rr-active{
  border-color:color-mix(in srgb,var(--info,#60a5fa) 58%,transparent);
  background:color-mix(in srgb,var(--info,#60a5fa) 8%,rgba(255,255,255,.04));
  box-shadow:0 0 0 2px color-mix(in srgb,var(--info,#60a5fa) 72%,transparent),0 6px 18px -10px color-mix(in srgb,var(--info,#60a5fa) 60%,transparent);
}
[data-theme="light"] .mx5-dlg-cal-card.rr-active{background:color-mix(in srgb,var(--info,#60a5fa) 9%,rgba(0,0,0,.03));}
/* covered-date indicator — small radar dot chip (replaces the old "Release Radar ▸" text link) */
.mx5-dlg-cal-radar{display:inline-flex;align-items:center;gap:5px;margin-top:8px;
  font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--ink-info, var(--info,#60a5fa));}
.mx5-dlg-cal-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;
  background:var(--info,#60a5fa);position:relative;}
.mx5-dlg-cal-dot::after{content:"";position:absolute;inset:-3px;border-radius:50%;
  border:1px solid color-mix(in srgb,var(--info,#60a5fa) 55%,transparent);
  animation:rrDotPulse 2.4s ease-in-out infinite;}
@keyframes rrDotPulse{0%,100%{transform:scale(1);opacity:.7}50%{transform:scale(1.5);opacity:0}}
.mx5-dlg-cal-card.rr-active .mx5-dlg-cal-dot::after{animation:none;opacity:.9;transform:scale(1.15);}
/* Fed Path affordance chip — routes to dlg-fed (FOMC cards only) */
.mx5-dlg-cal-fed{display:inline-flex;align-items:center;gap:5px;margin-top:8px;
  padding:3px 9px;border-radius:999px;font-size:10.5px;font-weight:700;letter-spacing:.02em;
  color:color-mix(in srgb,var(--link,#22d97a) 88%,var(--text));
  background:color-mix(in srgb,var(--link,#22d97a) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--link,#22d97a) 32%,transparent);
  transition:background .16s ease,border-color .16s ease,transform .14s ease;}
.mx5-dlg-cal-card.rr-fed{cursor:pointer;transition:border-color .16s ease,box-shadow .22s ease;}
.mx5-dlg-cal-card.rr-fed:hover{border-color:color-mix(in srgb,var(--link,#22d97a) 40%,transparent);}
.mx5-dlg-cal-card.rr-fed:hover .mx5-dlg-cal-fed{background:color-mix(in srgb,var(--link,#22d97a) 20%,transparent);border-color:color-mix(in srgb,var(--link,#22d97a) 50%,transparent);transform:translateX(1px);}
.mx5-dlg-cal-card.rr-fed:focus-visible{outline:2px solid var(--link,#22d97a);outline-offset:2px;}
@media (prefers-reduced-motion: reduce){
  .mx5-dlg-cal-dot::after{animation:none;opacity:.6;}
  .mx5-dlg-cal-card.rr-select,.mx5-dlg-cal-card.rr-fed,.mx5-dlg-cal-fed{transition:none;}
  .mx5-dlg-cal-card.rr-fed:hover .mx5-dlg-cal-fed{transform:none;}
}
.mx5-dlg-cal-date{font-size:11px;font-weight:700;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:5px;}
[data-theme="light"] .mx5-dlg-cal-date{color:rgba(0,0,0,.62);}
.mx5-dlg-cal-title{font-size:13px;font-weight:700;margin-bottom:6px;line-height:1.3;}
.mx5-dlg-cal-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.mx5-dlg-cal-time{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));}
[data-theme="light"] .mx5-dlg-cal-time{color:rgba(0,0,0,.62);}
.mx5-dlg-cal-badge{
  display:inline-flex;align-items:center;padding:2px 8px;border-radius:6px;
  font-size:11px;font-weight:700;
}
.mx5-dlg-cal-badge.high{color:var(--ink-down, var(--down,#ef4444));background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.2);}
.mx5-dlg-cal-badge.med{color:var(--ink-warn, var(--warn,#f59e0b));background:rgba(245,158,11,.1);border:1px solid rgba(245,158,11,.18);}
.mx5-dlg-cal-badge.low{color:var(--ink-3,rgba(255,255,255,.36));background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);}
[data-theme="light"] .mx5-dlg-cal-badge.low{color:rgba(0,0,0,.58);background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.08);}

/* Fed strip inside dialogs (EVENTS dialog) */
.mx5-dlg-fed-strip{
  display:flex;flex-direction:column;gap:6px;
  padding:14px 16px;
  background:rgba(255,255,255,.03);border-radius:12px;
  border:1px solid rgba(255,255,255,.07);
  margin-bottom:20px;
}
[data-theme="light"] .mx5-dlg-fed-strip{background:rgba(0,0,0,.025);border-color:rgba(0,0,0,.07);}
.mx5-dlg-fed-item{display:flex;align-items:center;justify-content:space-between;padding:5px 0;}
.mx5-dlg-fed-item+.mx5-dlg-fed-item{border-top:1px solid rgba(255,255,255,.05);}
[data-theme="light"] .mx5-dlg-fed-item+.mx5-dlg-fed-item{border-top-color:rgba(0,0,0,.05);}
.mx5-dlg-fed-desc{font-size:12px;flex:1;padding-right:12px;color:var(--ink-2,rgba(255,255,255,.6));}
[data-theme="light"] .mx5-dlg-fed-desc{color:rgba(0,0,0,.55);}
.mx5-dlg-fed-val{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--ink-link, var(--link,#22d97a));white-space:nowrap;}
.mx5-dlg-fed-chg{font-size:11px;font-variant-numeric:tabular-nums;margin-left:6px;}
.mx5-dlg-fed-chg.pos{color:var(--ink-up,var(--up,#22d97a));}.mx5-dlg-fed-chg.neg{color:var(--ink-down,var(--down,#ef4444));}
.mx5-dlg-fed-src{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));text-align:right;padding-top:6px;}
[data-theme="light"] .mx5-dlg-fed-src{color:rgba(0,0,0,.58);}

/* ── Inline Release Radar panel (#rr-inline, EVENTS dialog) ───────────────────
   Replaces the retired per-date popup + its open button. Shows the selected
   calendar date's model prints on the same surface; reuses the RR card renderer
   + #rr-modal for depth. Header carries the selected date + a covered radar dot;
   body cross-fades on date swap; one display-only footer. */
#rr-inline{margin-top:4px;}
.rr-inline-head{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
.rr-inline-date{display:inline-flex;align-items:center;gap:7px;
  font-size:14px;font-weight:800;letter-spacing:-.01em;color:var(--ink-1,rgba(255,255,255,.94));
  font-variant-numeric:tabular-nums;}
.rr-inline-date .mx5-dlg-cal-dot{width:8px;height:8px;}
.rr-inline-sub{font-size:11.5px;color:var(--ink-3,rgba(255,255,255,.42));}
[data-theme="light"] .rr-inline-sub{color:rgba(0,0,0,.62);}
/* body: cross-fade on swap (JS toggles .rr-inline-swap for one frame) */
.rr-inline-body{transition:opacity .22s ease;}
.rr-inline-body.rr-inline-swap{opacity:0;}
.rr-inline-body .rr-grid{display:flex;flex-wrap:wrap;gap:12px;}
/* honest empty state (no coverage / auctions / FOMC-adjacent) */
.rr-inline-empty{padding:14px 16px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);
  display:flex;flex-direction:column;gap:6px;}
[data-theme="light"] .rr-inline-empty{background:rgba(0,0,0,.025);border-color:rgba(0,0,0,.07);}
.rr-inline-empty-line{font-size:12.5px;line-height:1.5;color:var(--ink-2,rgba(255,255,255,.72));}
[data-theme="light"] .rr-inline-empty-line{color:rgba(0,0,0,.62);}
.rr-inline-empty-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:11px;color:var(--ink-3,rgba(255,255,255,.42));}
[data-theme="light"] .rr-inline-empty-meta{color:rgba(0,0,0,.62);}
/* single display-only footer for the inline panel (Law 4: one footnote) */
.rr-inline-foot{margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.06);
  font-size:10px;line-height:1.5;color:var(--ink-3,rgba(255,255,255,.36));}
[data-theme="light"] .rr-inline-foot{border-top-color:rgba(0,0,0,.06);color:rgba(0,0,0,.58);}
@media (prefers-reduced-motion: reduce){ .rr-inline-body{transition:none;} }

/* Heatmap wrap inside dialog — chromeless spacer (1.2 de-chrome) */
.mx5-dlg-heatmap-wrap{
  background:none;border:none;border-radius:0;
  overflow:visible;margin-bottom:20px;min-height:120px;
}
[data-theme="light"] .mx5-dlg-heatmap-wrap{background:none;border:none;}
/* .mx5-dlg-heatmap-head rules removed (1.2) */

/* ── Gauge SVG glow (JS patchable via data attrs) ───────────────── */
/* Arc and needle updated by risk_state_live.js; see §3.1 */
body.page-macro.mx4-grid #mx5-gauge-arc-fill{
  /* initial dasharray set by Jinja inline style; JS updates via setAttribute */
}
body.page-macro.mx4-grid #mx5-gauge-needle{
  /* rotate transform set by Jinja inline; JS updates on live push */
}
body.page-macro.mx4-grid #mx5-score-numeral{
  /* font-size 24px; glow filter via inline style */
  filter:drop-shadow(0 0 10px rgba(34,217,122,.7));
  display:none; /* 2.2: one glow remains on .mx5-big-score; DOM kept for risk_state_live.js */
}
body.page-macro.mx4-grid #mx5-score-numeral + text{display:none;} /* hides /100 sublabel */

/* ══════════════════════════════════════════════════════════════════
   S2 — v5 card face styles (ALL scoped body.page-macro.mx4-grid)
   Port from v5_final.html rev2; CSS token aliases → mx5 custom props
   ══════════════════════════════════════════════════════════════════ */

/* ── v5 grid ORDER: resequence cards without changing DOM ───────── */
/* DOM: sx-evidence(WTD), sx-events-v2, sx-markets-v2, sx-risk-v2(order:-1=row1)
   then sx-policy-v2, sx-aibrief-v2, sx-news-v2, sx-deep-context
   Static cards injected after sx-events-v2 in DOM so they fall in row 4 naturally.
   Visual row order: scorecard(-1), markets(1), wtd+events(2), static(3), alerts+policy+ai(4), deep(5) */
body.page-macro.mx4-grid #sx-markets-v2{order:1;}
body.page-macro.mx4-grid #sx-evidence{order:2;}
body.page-macro.mx4-grid #sx-events-v2{order:2;}
body.page-macro.mx4-grid #sx-v5-fed{order:3;}
body.page-macro.mx4-grid #sx-v5-sentiment{order:3;}
body.page-macro.mx4-grid #sx-v5-sector{order:3;}
body.page-macro.mx4-grid #sx-news-v2{order:4;}
body.page-macro.mx4-grid #sx-policy-v2{order:4;}
body.page-macro.mx4-grid #sx-aibrief-v2{order:4;}
body.page-macro.mx4-grid #sx-deep-context{order:5;}

/* ── v5 static card shell (matches .card in v5_final) ─────────── */
body.page-macro.mx4-grid .mx5-card{
  background:var(--mx5-glass-bg);
  border:1px solid var(--mx5-glass-border);
  border-radius:var(--mx5-radius-card);
  backdrop-filter:var(--mx5-blur);
  box-shadow:var(--mx5-glass-shadow);
  padding:24px 26px;
  position:relative;overflow:hidden;
  display:flex;flex-direction:column;
  height:100%;box-sizing:border-box;
}
body.page-macro.mx4-grid .mx5-card::before{
  content:"";position:absolute;inset:0;
  border-radius:var(--mx5-radius-card);
  background:linear-gradient(135deg,rgba(255,255,255,.04) 0%,transparent 55%);
  pointer-events:none;
}
/* Static-card click target (Fed / Sentiment / Sector) */
body.page-macro.mx4-grid .mx5-card[role="button"]{cursor:pointer;transition:background .2s ease-out,border-color .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out;}
body.page-macro.mx4-grid .mx5-card[role="button"]:hover{background:var(--mx5-hover-bg);border-color:var(--mx5-hover-border);box-shadow:var(--mx5-hover-shadow);transform:translateY(-1px);}
body.page-macro.mx4-grid .mx5-card[role="button"]:focus-visible{outline:none;box-shadow:var(--mx5-focus-ring),var(--mx5-hover-shadow);}
/* sxg-face in grid view = v5 card face; override default padding to match .mx5-card */
body.page-macro.mx4-grid .sxg-face.mx5-card-face{
  background:var(--mx5-glass-bg);
  border:1px solid var(--mx5-glass-border);
  border-radius:var(--mx5-radius-card)!important;
  backdrop-filter:var(--mx5-blur);
  box-shadow:var(--mx5-glass-shadow);
  padding:24px 26px!important;
  min-height:unset;
  height:100%;
  transition:background .2s ease-out,border-color .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out;
}
body.page-macro.mx4-grid .sxg-face.mx5-card-face::before{
  content:"";position:absolute;inset:0;
  border-radius:inherit;
  background:linear-gradient(135deg,rgba(255,255,255,.04) 0%,transparent 55%);
  pointer-events:none;
}
body.page-macro.mx4-grid .sx:hover .sxg-face.mx5-card-face,
body.page-macro.mx4-grid .sxg-face.mx5-card-face:hover{
  background:var(--mx5-hover-bg);
  border-color:var(--mx5-hover-border);
  box-shadow:var(--mx5-hover-shadow);
  transform:translateY(-1px);
}
body.page-macro.mx4-grid .sxg-face.mx5-card-face:focus-visible{
  outline:none;box-shadow:var(--mx5-focus-ring),var(--mx5-hover-shadow);
}
/* Card title row */
body.page-macro.mx4-grid .mx5-card-title{
  font-size:13px;font-weight:700;
  color:var(--ink-1,rgba(255,255,255,.92));
  letter-spacing:-.01em;margin-bottom:18px;
}
body.page-macro.mx4-grid .mx5-card-title-row{
  display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;
}
body.page-macro.mx4-grid .mx5-card-badge{
  font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  padding:3px 9px;border-radius:var(--mx5-radius-pill);
  background:rgba(255,255,255,.07);color:var(--ink-2,rgba(255,255,255,.6));
}
/* Static card sections (not .sx — no island): sit in the rack grid */
body.page-macro.mx4-grid .sx-v5-static{
  /* participates in the rack 12-col grid just like .sx */
}
body.page-macro:not(.mx4-grid) .sx-v5-static{
  display:none; /* hidden in ledger view — these are grid-only surfaces */
}
/* D1: command scorecard (left+right) must be hidden in ledger view, mirroring .sx-v5-static */
body.page-macro:not(.mx4-grid) .mx5-sc-left,
body.page-macro:not(.mx4-grid) .mx5-sc-right{display:none;}

/* ── MARKETS tiles (v5: four-col strip inside the sxg-face) ────── */
body.page-macro.mx4-grid #sx-markets-v2 .sxg-face.mx5-card-face{
  /* Markets face = full-width tile strip; override flex-direction for row layout */
  display:flex;flex-direction:column;
  padding:18px 20px 14px!important;
}
body.page-macro.mx4-grid .mx5-mkt-grid{
  display:grid;grid-template-columns:repeat(6,1fr);gap:16px;
}
@media(max-width:1100px){
  body.page-macro.mx4-grid .mx5-mkt-grid{grid-template-columns:repeat(3,1fr);}
}
@media(max-width:700px){
  body.page-macro.mx4-grid .mx5-mkt-grid{grid-template-columns:1fr 1fr;}
}
body.page-macro.mx4-grid .mx5-mkt-tile{
  /* v5.3.1: tiles are NESTED inside an already-glass card — glass-on-glass at .1 over .1
     compounded to ~19% white ("too bright"). Inner surfaces use a subtle 3% fill, no
     second blur, hairline border, no drop shadow. */
  background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08);
  border-radius:12px;
  padding:16px 18px 12px;
  position:relative;overflow:hidden;cursor:pointer;
  transition:background .2s ease-out,border-color .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out;
}
/* Light: the dark "3% fill on glass" trick inverts badly — a 3% BLACK wash on a
   white card is a grey smudge with a 1.10:1 edge, so the six futures read as one
   undivided band. Each tile becomes its own white surface with the recipe
   hairline and a single contact shadow: the same card idiom as the panel that
   holds them, one scale down. The 16px grid gap does the rest of the separating. */
[data-theme="light"] body.page-macro.mx4-grid .mx5-mkt-tile{
  background:#ffffff;border-color:#dde2ea;
  box-shadow:0 1px 2px rgba(23,32,55,.05);
}
/* v5.3.1: tiles sit calm — neutral border like every other card; direction color
   lives on the delta text and a dimmed sparkline only (operator: too bright) */
body.page-macro.mx4-grid .mx5-mkt-tile.up,
body.page-macro.mx4-grid .mx5-mkt-tile.dn{border-color:var(--glass-border,rgba(255,255,255,.12));}
/* Unified hover (Order 5) — overrides the directional .up/.dn border on hover
   so no accent tint survives; placed AFTER .up/.dn for cascade precedence. */
body.page-macro.mx4-grid .mx5-mkt-tile:hover,
body.page-macro.mx4-grid .mx5-mkt-tile.up:hover,
body.page-macro.mx4-grid .mx5-mkt-tile.dn:hover{
  background:var(--mx5-hover-bg);
  border-color:var(--mx5-hover-border);
  box-shadow:var(--mx5-hover-shadow);
  transform:translateY(-1px);
}
body.page-macro.mx4-grid .mx5-mkt-tile:focus-visible{outline:none;box-shadow:var(--mx5-focus-ring),var(--mx5-hover-shadow);}
body.page-macro.mx4-grid .mx5-mkt-ticker{
  font-size:11px;font-weight:700;letter-spacing:.07em;
  color:var(--ink-3,rgba(255,255,255,.36));text-transform:uppercase;margin-bottom:3px;
}
body.page-macro.mx4-grid .mx5-mkt-sub{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
  letter-spacing:.04em;text-transform:uppercase;margin-bottom:4px;
}
body.page-macro.mx4-grid .mx5-mkt-price{
  font-size:19px;font-weight:700;line-height:1;
  color:var(--ink-1,rgba(255,255,255,.92));margin-bottom:4px;
  font-variant-numeric:tabular-nums;
}
body.page-macro.mx4-grid .mx5-mkt-delta{font-size:13px;font-weight:600;}
body.page-macro.mx4-grid .mx5-mkt-delta.up{color:var(--ink-up, var(--up,#22d97a));}
body.page-macro.mx4-grid .mx5-mkt-delta.dn{color:var(--ink-down, var(--down,#ef4444));}
/* live.js paintChg speaks up/down (not dn) — alias it into the same token path so a
   live-patched delta paints identically to a baked one (and flips in zh with it) */
body.page-macro.mx4-grid .mx5-mkt-delta.down{color:var(--ink-down, var(--down,#ef4444));}
body.page-macro.mx4-grid .mx5-spark{margin-top:10px;}
body.page-macro.mx4-grid .mx5-spark svg{width:100%;height:32px;display:block;}

/* B3: intl risk chips in the hero button row — red (alert) variant + non-interactive chip */
body.page-macro.mx4-grid a.mx5-sc-btn{text-decoration:none;}
body.page-macro.mx4-grid .mx5-sc-btn-alert{
  color:var(--ink-down, var(--down,#ef4444));
  border-color:color-mix(in srgb,var(--down,#ef4444) 30%,transparent);
  background:color-mix(in srgb,var(--down,#ef4444) 9%,transparent);
}
body.page-macro.mx4-grid .mx5-sc-btn-up{
  color:color-mix(in srgb,var(--up,#22c55e) 80%,white);
  border-color:color-mix(in srgb, var(--up) 45%, var(--gbtn-brd));
  background:linear-gradient(180deg, color-mix(in srgb, var(--up) 12%, var(--gbtn-bg)), var(--gbtn-bg));
}
body.page-macro.mx4-grid .mx5-sc-btn-up:hover{
  color:color-mix(in srgb,var(--up,#22c55e) 90%,white);
  border-color:color-mix(in srgb, var(--up) 60%, var(--gbtn-brd));
  background:linear-gradient(180deg, color-mix(in srgb, var(--up) 20%, var(--gbtn-bg)), var(--gbtn-bg));
}
body.page-macro.mx4-grid .mx5-sc-btn-up-strong{
  color:color-mix(in srgb,var(--up,#22c55e) 90%,white);
  border-color:color-mix(in srgb, var(--up) 60%, var(--gbtn-brd));
  background:linear-gradient(180deg, color-mix(in srgb, var(--up) 20%, var(--gbtn-bg)), var(--gbtn-bg));
}
body.page-macro.mx4-grid .mx5-sc-btn-static{cursor:default;}
/* B3 (now in dlg-risk): intl section classes — re-scoped to body.page-macro (dialog is not
   inside .mx4-grid; both grid view and dialog share these classes) */
/* (.mx5-popover-intl removed — popover retired; content lives in dlg-risk Overseas section) */
body.page-macro .mx5-pop-asof{
  font-size:10px;font-weight:400;color:var(--ink-3,rgba(255,255,255,.36));
  margin-left:8px;font-variant-numeric:tabular-nums;
}
body.page-macro .mx5-pop-intl-body{padding:4px 8px 8px;}
/* Market grid: alert tiles first, 2-col auto-fill */
body.page-macro .mx5-pop-intl-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:6px;
  margin-bottom:10px;
}
body.page-macro .mx5-pop-intl-tile{
  display:flex;align-items:center;gap:5px;
  padding:5px 7px;border-radius:7px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);
  font-size:11px;line-height:1.3;
}
[data-theme="light"] body.page-macro .mx5-pop-intl-tile{
  background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.06);
}
body.page-macro .mx5-pop-intl-tile.intl-alert{
  border-color:color-mix(in srgb,var(--down,#ef4444) 28%,transparent);
  background:color-mix(in srgb,var(--down,#ef4444) 6%,transparent);
}
body.page-macro .mx5-intl-dot{
  width:6px;height:6px;border-radius:50%;flex-shrink:0;
  background:var(--ink-3,rgba(255,255,255,.36));
}
body.page-macro .mx5-intl-dot.intl-dot-alert{background:var(--down,#ef4444);}
body.page-macro .mx5-intl-name{flex:1;min-width:0;color:var(--ink-2,rgba(255,255,255,.62));}
body.page-macro .mx5-intl-score{
  font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;
  color:var(--ink-3,rgba(255,255,255,.36));margin-left:auto;flex-shrink:0;
}
body.page-macro .mx5-intl-score.intl-score-alert{color:var(--ink-down, var(--down,#ef4444));}
/* Spread speed row */
body.page-macro .mx5-pop-intl-spread{
  font-size:12px;line-height:1.5;color:var(--ink-2,rgba(255,255,255,.62));
  padding:6px 0;border-top:1px solid rgba(255,255,255,.06);margin-bottom:8px;
}
[data-theme="light"] body.page-macro .mx5-pop-intl-spread{border-color:rgba(0,0,0,.07);}
body.page-macro .mx5-pop-intl-small{
  display:block;font-size:10.5px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;
}
/* Spillover board */
body.page-macro .mx5-pop-intl-spill{
  padding:6px 0;border-top:1px solid rgba(255,255,255,.06);margin-bottom:8px;
}
[data-theme="light"] body.page-macro .mx5-pop-intl-spill{border-color:rgba(0,0,0,.07);}
body.page-macro .mx5-pop-intl-spill-hd{
  display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;
  color:var(--ink-2,rgba(255,255,255,.62));margin-bottom:7px;
}
body.page-macro .mx5-pop-intl-spill-word{font-size:11.5px;font-weight:500;}
body.page-macro .mx5-pop-intl-spill-word.spill-alert{color:var(--ink-down, var(--down,#ef4444));}
body.page-macro .mx5-pop-intl-spill-word.spill-warn{color:var(--ink-warn, var(--warn,#f59e0b));}
body.page-macro .mx5-pop-intl-spill-word.spill-muted{color:var(--ink-3,rgba(255,255,255,.36));}
body.page-macro .mx5-pop-intl-legs{
  display:flex;flex-wrap:wrap;gap:5px;margin-bottom:5px;
}
body.page-macro .mx5-pop-intl-leg{
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 7px;border-radius:20px;font-size:11px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);
  color:var(--ink-3,rgba(255,255,255,.36));
}
[data-theme="light"] body.page-macro .mx5-pop-intl-leg{
  background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.07);
}
body.page-macro .mx5-pop-intl-leg.leg-hot{
  color:var(--ink-1,rgba(255,255,255,.92));
  border-color:color-mix(in srgb,var(--warn,#f59e0b) 36%,transparent);
  background:color-mix(in srgb,var(--warn,#f59e0b) 8%,transparent);
}
body.page-macro .mx5-leg-dot{
  width:5px;height:5px;border-radius:50%;flex-shrink:0;
  background:rgba(255,255,255,.24);
}
body.page-macro .mx5-leg-dot.leg-dot-hot{
  background:var(--warn,#f59e0b);
  box-shadow:0 0 4px var(--warn,#f59e0b);
}
body.page-macro .mx5-pop-intl-legcount{
  font-size:10.5px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;
}
/* Fallback text row */
body.page-macro .mx5-pop-intl-fallback{
  font-size:12px;color:var(--ink-2,rgba(255,255,255,.62));margin-bottom:8px;
}
/* Footer */
body.page-macro .mx5-pop-intl-footer{
  font-size:10.5px;color:var(--ink-3,rgba(255,255,255,.36));
  border-top:1px solid rgba(255,255,255,.06);padding-top:6px;margin-top:4px;
  line-height:1.5;
}
[data-theme="light"] body.page-macro .mx5-pop-intl-footer{border-color:rgba(0,0,0,.07);}
body.page-macro .mx5-pop-intl-link{
  display:inline-block;margin-top:4px;font-size:11px;
  color:var(--isle-policy,#60a5fa);text-decoration:none;
}
body.page-macro .mx5-pop-intl-link:hover{text-decoration:underline;}
/* NOTE: the stocks market-state banner CSS (.stk-ctx-strip/.scx-*) is NOT here — this
   whole mx5-css style block is macro-only (its wrapping Jinja gate excludes stocks mode),
   so any body.page-stocks rule placed here never reaches us_stocks. That misplacement is
   exactly why the strip used to render as a bare blue hyperlink. It now lives in a
   stocks-emitted scx-css style block beside the banner markup below. */

/* ── WHAT TO DO (three-priority glance inside sx-evidence face) ───────── */
body.page-macro.mx4-grid #sx-evidence .mx5-card-title{margin-bottom:13px;}
body.page-macro.mx4-grid .mx5-action-list{display:flex;flex-direction:column;}
body.page-macro.mx4-grid .mx5-action-item{
  display:flex;align-items:center;gap:11px;
  padding:10px 0;margin:0;border-radius:0;
  border-bottom:1px solid rgba(255,255,255,.06);
  transition:transform .16s ease,background .2s ease;
}
body.page-macro.mx4-grid .mx5-action-item:last-child{border-bottom:none;}
[data-theme="light"] body.page-macro.mx4-grid .mx5-action-item{border-bottom-color:rgba(0,0,0,.06);}
body.page-macro.mx4-grid .mx5-action-item:hover{
  transform:translateX(2px);background:transparent;
}
body.page-macro.mx4-grid .mx5-action-icon{
  flex-shrink:0;width:30px;height:30px;border-radius:9px;
  display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(255,255,255,.08);
}
body.page-macro.mx4-grid .mx5-action-icon svg{width:14px;height:14px;}
/* state-tinted glass icon containers (border tints to the state colour) */
body.page-macro.mx4-grid .mx5-ai-green{background:rgba(34,217,122,.10);border-color:rgba(34,217,122,.24);color:var(--ink-up, var(--up,#22d97a));}
/* zh 红涨绿跌: the icon TEXT flips via --up; the glass tint is literal — mirror it */
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-ai-green{background:rgba(239,68,68,.10);border-color:rgba(239,68,68,.24);}
body.page-macro.mx4-grid .mx5-ai-yellow{background:rgba(245,158,11,.10);border-color:rgba(245,158,11,.24);color:var(--ink-warn, var(--warn,#f59e0b));}
body.page-macro.mx4-grid .mx5-ai-blue{background:rgba(129,140,248,.10);border-color:rgba(129,140,248,.26);color:#818cf8;}
body.page-macro.mx4-grid .mx5-ai-gray{background:rgba(255,255,255,.06);color:var(--ink-3,rgba(255,255,255,.5));}
[data-theme="light"] body.page-macro.mx4-grid .mx5-ai-gray{background:rgba(0,0,0,.04);}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid .mx5-action-item,
  body.page-macro.mx4-grid .mx5-action-item:hover{transform:none;}
}
body.page-macro.mx4-grid .mx5-action-text{flex:1;}
body.page-macro.mx4-grid .mx5-action-label{
  font-size:13px;color:var(--ink-1,rgba(255,255,255,.92));
  line-height:1.45;font-weight:500;
}
body.page-macro.mx4-grid .mx5-action-sub{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;
}
/* in-row link out to the receipts (today: the stress selloff filter on
   macro_signals.html). The card FACE is itself a button that opens the Evidence
   dialog, so the anchor stops click and Enter/Space from bubbling — see the inline
   handlers on the link. */
body.page-macro.mx4-grid .mx5-wtd-jump{
  margin-left:6px;font-size:11.5px;font-weight:650;white-space:nowrap;
  color:var(--ink-link, var(--link));text-decoration:none;
}
body.page-macro.mx4-grid .mx5-wtd-jump:hover{text-decoration:underline;}
/* "Not everything agrees" — the one clause that keeps a fired gate from burying its
   own dissent now that the readout lives off-page. Muted, never a second alarm
   colour: the cross-checks are engine CONTEXT that cannot change the verdict, so it
   must not read louder than the stance it qualifies. */
body.page-macro.mx4-grid .mx5-wtd-dissent{
  color:var(--ink-3,rgba(255,255,255,.36));
}

/* ── UPCOMING EVENTS (mini week timeline inside sx-events-v2 face) — Wave E ─────────
   Impact = node size + colour + small label; a single connecting rail threads the week
   at the node centreline so the row reads as a timeline at a glance. */
body.page-macro.mx4-grid .mx5-events-sub{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:16px;
}
body.page-macro.mx4-grid .mx5-timeline{position:relative;padding-top:6px;}
/* rail sits on the node centreline (node zone is 22px tall, centred at 12px+11px) */
body.page-macro.mx4-grid .mx5-timeline-rail{
  position:absolute;top:22px;left:6%;right:6%;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--isle-events,#e0a030) 30%,transparent) 12%,color-mix(in srgb,var(--isle-events,#e0a030) 30%,transparent) 88%,transparent);
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-timeline-rail{
  background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--isle-events,#e0a030) 45%,transparent) 12%,color-mix(in srgb,var(--isle-events,#e0a030) 45%,transparent) 88%,transparent);
}
body.page-macro.mx4-grid .mx5-tl-items{
  display:flex;justify-content:space-between;position:relative;gap:4px;
}
body.page-macro.mx4-grid .mx5-tl-item{
  display:flex;flex-direction:column;align-items:center;gap:4px;flex:1;min-width:0;
}
/* fixed 22px node zone so all rails/dots share a centreline regardless of dot size */
body.page-macro.mx4-grid .mx5-tl-nodezone{
  height:22px;display:flex;align-items:center;justify-content:center;position:relative;z-index:1;
}
body.page-macro.mx4-grid .mx5-tl-dot{
  border-radius:50%;border:2px solid;flex-shrink:0;
}
body.page-macro.mx4-grid .mx5-dot-high{
  width:18px;height:18px;background:rgba(239,68,68,.24);border-color:#ef4444;
  box-shadow:0 0 10px rgba(239,68,68,.55);
}
body.page-macro.mx4-grid .mx5-dot-med{
  width:13px;height:13px;background:rgba(245,158,11,.22);border-color:#f59e0b;
  box-shadow:0 0 7px rgba(245,158,11,.4);
}
body.page-macro.mx4-grid .mx5-dot-low{
  width:9px;height:9px;background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.28);
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-dot-low{background:rgba(0,0,0,.06);border-color:rgba(0,0,0,.22);}
body.page-macro.mx4-grid .mx5-tl-date{
  font-size:10.5px;font-weight:700;color:var(--ink-2,rgba(255,255,255,.62));
  text-align:center;font-variant-numeric:tabular-nums;margin-top:2px;
}
body.page-macro.mx4-grid .mx5-tl-name{
  font-size:10.5px;font-weight:600;color:var(--ink-3,rgba(255,255,255,.5));
  text-align:center;line-height:1.25;overflow-wrap:anywhere;
}
body.page-macro.mx4-grid .mx5-tl-badge{
  font-size:9px;font-weight:800;padding:1px 6px;border-radius:4px;
  letter-spacing:.05em;text-align:center;margin-top:1px;
}
body.page-macro.mx4-grid .mx5-tl-badge.high{color:var(--ink-act, var(--act));background:color-mix(in srgb, var(--act) 12%, transparent);}
body.page-macro.mx4-grid .mx5-tl-badge.med{color:var(--mx5-warn-ink);background:rgba(245,158,11,.12);}
body.page-macro.mx4-grid .mx5-tl-badge.low{color:var(--ink-3,rgba(255,255,255,.36));background:rgba(255,255,255,.05);}
/* staggered node entrance (reduced-motion snaps to final) */
@media(prefers-reduced-motion:no-preference){
  body.page-macro.mx4-grid .mx5-tl-item{opacity:0;transform:translateY(5px);
    animation:mx5TlIn .42s cubic-bezier(.22,.9,.26,1.02) forwards;}
  body.page-macro.mx4-grid .mx5-tl-item:nth-child(1){animation-delay:.04s;}
  body.page-macro.mx4-grid .mx5-tl-item:nth-child(2){animation-delay:.10s;}
  body.page-macro.mx4-grid .mx5-tl-item:nth-child(3){animation-delay:.16s;}
  body.page-macro.mx4-grid .mx5-tl-item:nth-child(4){animation-delay:.22s;}
  body.page-macro.mx4-grid .mx5-tl-item:nth-child(5){animation-delay:.28s;}
  @keyframes mx5TlIn{to{opacity:1;transform:translateY(0);}}
}

/* ── FED PROBABILITY (static card) ─────────────────────────────── */
body.page-macro.mx4-grid .mx5-fed-main-row{
  display:flex;align-items:center;gap:18px;margin-bottom:16px;
}
body.page-macro.mx4-grid .mx5-fed-donut-wrap{
  position:relative;width:76px;height:76px;flex-shrink:0;
}
body.page-macro.mx4-grid .mx5-fed-pct-overlay{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  font-size:16px;font-weight:800;color:var(--ink-1,rgba(255,255,255,.92));
  text-align:center;line-height:1.1;
}
body.page-macro.mx4-grid .mx5-fed-pct-overlay small{
  font-size:11px;font-weight:500;color:var(--ink-3,rgba(255,255,255,.36));
  display:block;margin-top:1px;
}
body.page-macro.mx4-grid .mx5-fed-verdict{
  font-size:16px;font-weight:800;color:var(--mx5-accent-ink);
}
body.page-macro.mx4-grid .mx5-fed-desc{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;line-height:1.4;
}
body.page-macro.mx4-grid .mx5-fed-hist-label{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
  letter-spacing:.06em;text-transform:uppercase;margin-bottom:8px;
}
body.page-macro.mx4-grid .mx5-fed-hist-bars{
  display:flex;gap:3px;align-items:flex-end;height:44px;
}
body.page-macro.mx4-grid .mx5-fed-hist-col{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;
}
body.page-macro.mx4-grid .mx5-fed-hist-bar{width:100%;border-radius:2px 2px 0 0;}
body.page-macro.mx4-grid .mx5-fed-hist-name{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));text-align:center;
}
body.page-macro.mx4-grid .mx5-fed-policy-note{
  margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.07);
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));line-height:1.55;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-fed-policy-note{border-top-color:rgba(0,0,0,.07);}
body.page-macro.mx4-grid .mx5-fed-policy-note strong{color:var(--ink-1,rgba(255,255,255,.92));}

/* ── POLICY DIALOG (plx-* classes) ──────────────────────────────── */
.plx-state-hero{display:flex;align-items:center;gap:14px;margin-bottom:18px;}
.plx-state-sent{font-size:13px;font-weight:600;line-height:1.45;}
.plx-asof{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:3px;}
.plx-framing{font-size:13px;color:var(--ink-2,rgba(255,255,255,.6));line-height:1.65;margin-bottom:16px;padding:10px 14px;background:rgba(255,255,255,.04);border-radius:8px;}
[data-theme="light"] .plx-framing{background:rgba(0,0,0,.04);}
/* Rate path chart */
.plx-chart-wrap{margin-bottom:18px;}
.plx-chart-svg{display:block;width:100%;height:180px;}
.plx-chart-caption{font-size:12px;color:var(--ink-2,rgba(255,255,255,.6));line-height:1.5;margin-top:8px;}
.plx-chart-gap-chip{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px;background:rgba(160,112,232,.10);border:1px solid rgba(160,112,232,.22);color:var(--isle-policy);margin-left:8px;}
[data-theme="light"] .plx-chart-gap-chip{background:rgba(160,112,232,.08);}
.plx-x-labels{display:flex;justify-content:space-between;font-size:10px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:2px;padding:0 2px;}
/* Fed stance card */
.plx-stance-card{padding:12px 14px;background:rgba(255,255,255,.04);border-radius:10px;margin-bottom:14px;}
[data-theme="light"] .plx-stance-card{background:rgba(0,0,0,.04);}
.plx-stance-label{font-size:14px;font-weight:700;margin-bottom:4px;}
.plx-stance-mve{font-size:12px;color:var(--ink-2,rgba(255,255,255,.6));margin-top:5px;}
.plx-drivers{list-style:none;padding:0;margin:8px 0 0;display:flex;flex-direction:column;gap:3px;}
.plx-drivers li{font-size:12px;color:var(--ink-3,rgba(255,255,255,.36));padding-left:14px;position:relative;line-height:1.45;}
.plx-drivers li::before{content:"·";position:absolute;left:4px;color:var(--ink-3,rgba(255,255,255,.36));}
.plx-drivers-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px;}
.plx-driver-chip{font-size:11px;font-weight:500;padding:3px 9px;border-radius:999px;
  background:rgba(160,112,232,.08);border:1px solid rgba(160,112,232,.18);color:var(--ink-2,rgba(255,255,255,.66));}
[data-theme="light"] .plx-driver-chip{background:rgba(160,112,232,.06);color:rgba(40,20,70,.7);}
/* Jawboning counts */
.plx-jaw-counts{display:flex;gap:20px;margin-bottom:12px;}
.plx-jaw-count-box{text-align:center;}
.plx-jaw-count-num{font-size:24px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--ink-1,rgba(255,255,255,.92));}
.plx-jaw-count-lbl{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-top:2px;}
.plx-jaw-bar-track{height:5px;border-radius:3px;background:rgba(255,255,255,.07);margin-bottom:10px;overflow:hidden;}
[data-theme="light"] .plx-jaw-bar-track{background:rgba(0,0,0,.07);}
.plx-jaw-bar-fill{height:100%;border-radius:3px;background:var(--isle-policy);}
.plx-jaw-summary{font-size:12px;color:var(--ink-2,rgba(255,255,255,.6));line-height:1.55;}
.plx-jaw-ts{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:5px;}
/* Lever board */
.plx-lever-row{display:grid;grid-template-columns:1fr auto 60px;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.06);}
.plx-lever-row:last-child{border-bottom:none;}
[data-theme="light"] .plx-lever-row{border-bottom-color:rgba(0,0,0,.07);}
.plx-lever-name{font-size:13px;font-weight:600;}
.plx-lever-status{font-size:11px;font-weight:600;display:flex;align-items:center;gap:5px;}
.plx-lever-stoch{height:5px;border-radius:3px;background:rgba(255,255,255,.07);overflow:hidden;margin-top:4px;}
[data-theme="light"] .plx-lever-stoch{background:rgba(0,0,0,.07);}
.plx-lever-stoch-fill{height:100%;border-radius:3px;}
.plx-lever-watch{font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));line-height:1.45;margin-top:3px;}
.plx-favored{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
.plx-basket-chip{font-size:12px;font-weight:700;padding:3px 9px;border-radius:var(--mx5-radius-pill);background:rgba(160,112,232,.11);border:1px solid rgba(160,112,232,.22);color:var(--isle-policy);}
/* Calendar row */
.plx-cal-row{display:flex;align-items:center;gap:10px;padding:10px 0;}
.plx-cal-countdown{font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--ink-1,rgba(255,255,255,.92));}
.plx-cal-note{font-size:12px;color:var(--ink-3,rgba(255,255,255,.36));}
/* Null disclosure */
.plx-null{font-size:12px;color:var(--ink-3,rgba(255,255,255,.36));padding:10px 0;font-style:italic;}
/* Outer dots annotation chips */
.plx-dot-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.plx-dot-chip{font-size:11px;padding:2px 8px;border-radius:8px;background:rgba(245,158,11,.08);border:1px solid rgba(245,158,11,.18);color:var(--ink-warn, var(--warn,#f59e0b));}
[data-theme="light"] .plx-dot-chip{background:rgba(245,158,11,.06);}
/* ── AI BRIEF DIALOG — ABX v2: rules live in the shared _aibrief_css.j2 include
   (.aib2-* namespace). Here we only pin the per-surface accent: macro's brief
   green (--isle-brief). The literal #38c472 fallback matches --isle-brief exactly
   and — critically — is a FIXED hex, so the brand accent never red-flips in ZH
   (unlike --up, which swaps to red under html[data-lang="zh"]). ──────────────── */
#dlg-aibrief .aib2{--aib2-acc:var(--isle-brief,#38c472);}

/* ══ FED FORWARD BOARD — dlg-fed rebuild (fbm-* = Fed Board) ══════════════════
   Signature idiom: a physical balance beam. Hawkish weight tilts it left (down),
   easing weight tilts it right. The tilt IS the stance — a cold reader gets
   "which way is policy leaning" before reading a word. Legs are chips resting on
   the pans; the full threshold receipt lives on each chip's hover (data-tip).
   All animation gated on .mx5-dlg-in + prefers-reduced-motion. */

/* — Pressure beam hero — */
.fbm-beam-wrap{position:relative;margin:4px 0 20px;padding:8px 4px 0;}
.fbm-beam-heads{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;}
.fbm-beam-head{font:700 11px/1 var(--font-ui,inherit);letter-spacing:.04em;display:flex;align-items:baseline;gap:5px;}
.fbm-beam-head.hawk{color:var(--ink-down, var(--down,#ef4444));}
.fbm-beam-head.ease{color:var(--ink-up, var(--up,#22d97a));}
.fbm-beam-head .fbm-wt{font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;}
/* The physical scale: fulcrum + rotating beam + two chip pans */
.fbm-beam-stage{position:relative;height:160px;}
.fbm-beam-svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;}
/* beam bar rotates around the centre fulcrum by --tilt degrees */
.fbm-beam-bar{position:absolute;left:8%;right:8%;top:26px;height:4px;border-radius:3px;
  background:linear-gradient(90deg,var(--down,#ef4444),color-mix(in srgb,var(--down,#ef4444) 40%,var(--up,#22d97a)) 50%,var(--up,#22d97a));
  transform-origin:50% 50%;transform:rotate(var(--tilt,0deg));
  box-shadow:0 1px 6px -1px color-mix(in srgb,var(--isle-policy,#a070e8) 40%,transparent);}
/* Pans pivot about the BEAM's centreline (y≈28px), NOT the stage centre — otherwise the
   raised chip pan sweeps up THROUGH the beam line on the heavy side (the "Equity risk-off"
   clip). Matching the pivot keeps a constant gap between beam and chips across all tilts;
   pan top then just sets that gap (must clear the ±9° sweep of the top chip row). */
.fbm-beam-pans{position:absolute;inset:0;transform-origin:50% 28px;transform:rotate(var(--tilt,0deg));}
.fbm-beam-pan{position:absolute;top:54px;width:42%;display:flex;flex-direction:column;align-items:center;gap:5px;
  transform:rotate(calc(-1 * var(--tilt,0deg)));/* keep chips level while the beam tilts */}
.fbm-beam-pan.hawk{left:0;}
.fbm-beam-pan.ease{right:0;}
.fbm-beam-chips{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;max-width:100%;}
/* fulcrum triangle drawn in CSS, centred */
.fbm-fulcrum{position:absolute;left:50%;top:28px;transform:translateX(-50%);
  width:0;height:0;border-left:11px solid transparent;border-right:11px solid transparent;
  border-bottom:18px solid color-mix(in srgb,var(--isle-policy,#a070e8) 55%,var(--panel2,rgba(255,255,255,.05)));}
.fbm-fulcrum::after{content:"";position:absolute;left:50%;top:18px;transform:translateX(-50%);
  width:44px;height:3px;border-radius:2px;background:color-mix(in srgb,var(--isle-policy,#a070e8) 30%,transparent);}
/* leg chip: state colour by side + active weight */
.fbm-leg{display:inline-flex;align-items:center;gap:5px;font:600 10.5px/1 var(--font-ui,inherit);
  padding:4px 8px;border-radius:999px;white-space:nowrap;cursor:help;
  border:1px solid transparent;background:var(--panel2,rgba(255,255,255,.05));
  color:var(--ink-3,rgba(255,255,255,.42));transition:transform .16s ease,border-color .2s ease;}
.fbm-leg .fbm-dot{width:6px;height:6px;border-radius:50%;flex:0 0 auto;background:currentColor;opacity:.5;}
.fbm-leg.hawk{color:color-mix(in srgb,var(--down,#ef4444) 82%,var(--ink-2,#fff));border-color:color-mix(in srgb,var(--down,#ef4444) 20%,transparent);}
.fbm-leg.ease{color:color-mix(in srgb,var(--up,#22d97a) 82%,var(--ink-2,#fff));border-color:color-mix(in srgb,var(--up,#22d97a) 20%,transparent);}
.fbm-leg.on{font-weight:700;}
.fbm-leg.hawk.on{background:color-mix(in srgb,var(--down,#ef4444) 14%,transparent);border-color:color-mix(in srgb,var(--down,#ef4444) 40%,transparent);color:var(--ink-down, var(--down,#ef4444));}
.fbm-leg.ease.on{background:color-mix(in srgb,var(--up,#22d97a) 14%,transparent);border-color:color-mix(in srgb,var(--up,#22d97a) 40%,transparent);color:var(--ink-up, var(--up,#22d97a));}
.fbm-leg.on .fbm-dot{opacity:1;}
.fbm-leg:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--text,#fff) 30%,transparent);}
/* verdict caption under the beam */
.fbm-beam-verdict{text-align:center;font:600 12px/1.4 var(--font-ui,inherit);color:var(--ink-2,rgba(255,255,255,.7));margin-top:6px;}
.fbm-beam-verdict .fbm-lean{font-weight:800;}
.fbm-beam-verdict .fbm-lean.ease{color:var(--ink-up, var(--up,#22d97a));}
.fbm-beam-verdict .fbm-lean.hawk{color:var(--ink-down, var(--down,#ef4444));}
.fbm-beam-verdict .fbm-lean.even{color:var(--ink-warn, var(--warn,#f59e0b));}

/* — Rate-path flagship chart (ported from dlg-policy plx idiom, bigger) — */
.fbm-chart-wrap{margin:2px 0 6px;}
.fbm-chart-svg{display:block;width:100%;height:auto;}
.fbm-chart-caption{font-size:12px;color:var(--ink-2,rgba(255,255,255,.68));line-height:1.5;margin-top:8px;}
.fbm-chart-take{font-size:12.5px;font-weight:600;color:var(--ink-1,rgba(255,255,255,.9));line-height:1.5;margin-top:6px;}
.fbm-gap-chip{display:inline-flex;align-items:center;gap:4px;font:600 11px/1 var(--font-ui,inherit);
  padding:3px 9px;border-radius:999px;margin-left:2px;cursor:help;
  background:rgba(245,158,11,.10);border:1px solid rgba(245,158,11,.26);color:var(--ink-warn, var(--warn,#f59e0b));}
.fbm-diamond-key{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--ink-warn, var(--warn,#f59e0b));margin-left:8px;}
.fbm-diamond-key svg{flex:0 0 auto;}

/* — Glance rows (inflation / risk) — state word + one plain line + ? tip — */
.fbm-row{display:flex;align-items:flex-start;gap:10px;padding:9px 0;}
.fbm-row+.fbm-row{border-top:1px solid rgba(255,255,255,.06);}
[data-theme="light"] .fbm-row+.fbm-row{border-top-color:rgba(0,0,0,.06);}
.fbm-row-state{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;font:700 12px/1.3 var(--font-ui,inherit);min-width:96px;}
.fbm-row-dot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;}
.fbm-row-line{flex:1;min-width:0;font-size:12px;color:var(--ink-2,rgba(255,255,255,.66));line-height:1.5;}
.fbm-tip{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;flex:0 0 auto;
  border-radius:50%;border:1px solid rgba(255,255,255,.22);color:var(--ink-3,rgba(255,255,255,.5));
  font:700 10px/1 var(--font-ui,inherit);cursor:help;margin-left:2px;user-select:none;transition:border-color .2s,color .2s;}
.fbm-tip:hover{border-color:var(--isle-policy,#a070e8);color:var(--isle-policy,#a070e8);}
[data-theme="light"] .fbm-tip{border-color:rgba(0,0,0,.22);color:rgba(0,0,0,.62);}

/* — Chip row (policy conditions) — */
.fbm-chips{display:flex;flex-wrap:wrap;gap:7px;margin:2px 0 4px;}
.fbm-chip{display:inline-flex;align-items:center;gap:6px;font:600 11.5px/1 var(--font-ui,inherit);
  padding:6px 11px;border-radius:999px;
  background:var(--panel2,rgba(255,255,255,.05));border:1px solid rgba(255,255,255,.1);
  color:var(--ink-1,rgba(255,255,255,.88));}
[data-theme="light"] .fbm-chip{background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.1);}
.fbm-chip .fbm-chip-k{color:var(--ink-3,rgba(255,255,255,.45));font-weight:500;}
.fbm-chip.armed{border-color:color-mix(in srgb,var(--warn,#f59e0b) 42%,transparent);background:color-mix(in srgb,var(--warn,#f59e0b) 10%,transparent);color:var(--ink-warn, var(--warn,#f59e0b));}
.fbm-chip.warn{border-color:color-mix(in srgb,var(--down,#ef4444) 38%,transparent);background:color-mix(in srgb,var(--down,#ef4444) 9%,transparent);}

/* — Unified market-implied benchmark strip (shared: dlg-fed + dlg-events) — */
.fbm-bench{display:flex;flex-direction:column;gap:8px;margin:2px 0 6px;}
.fbm-bench-row{display:flex;align-items:center;gap:14px;padding:11px 14px;border-radius:12px;
  background:var(--panel2,rgba(255,255,255,.04));border:1px solid rgba(255,255,255,.08);}
[data-theme="light"] .fbm-bench-row{background:rgba(0,0,0,.025);border-color:rgba(0,0,0,.07);}
.fbm-bench-odds{font:800 26px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;color:var(--isle-policy,#a070e8);flex:0 0 auto;min-width:52px;}
.fbm-bench-odds small{font-size:13px;font-weight:600;color:var(--ink-3,rgba(255,255,255,.5));}
.fbm-bench-body{flex:1;min-width:0;}
.fbm-bench-outcome{font:700 13px/1.3 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.9));}
.fbm-bench-label{font-size:11px;color:var(--ink-3,rgba(255,255,255,.5));margin-top:1px;}
.fbm-bench-arrow{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;font:700 12px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;}
.fbm-bench-arrow.pos{color:var(--ink-up,var(--up,#22d97a));}
.fbm-bench-arrow.neg{color:var(--ink-down,var(--down,#ef4444));}
.fbm-bench-src{font-size:10px;color:var(--ink-3,rgba(255,255,255,.36));}
[data-theme="light"] .fbm-bench-odds small,[data-theme="light"] .fbm-bench-outcome{color:inherit;}

/* — Motion: beam settles + chart draws on dialog open — */
@media(prefers-reduced-motion:no-preference){
  /* beam swings from level → resting tilt */
  #dlg-fed .fbm-beam-bar,#dlg-fed .fbm-beam-pans{transform:rotate(0deg);
    transition:transform 720ms cubic-bezier(.34,1.28,.5,1);}
  #dlg-fed.mx5-dlg-in .fbm-beam-bar,#dlg-fed.mx5-dlg-in .fbm-beam-pans{transform:rotate(var(--tilt,0deg));}
  /* leg chips fade+rise, staggered */
  #dlg-fed .fbm-leg{opacity:0;transform:translateY(6px);transition:opacity .4s ease,transform .4s cubic-bezier(.22,.9,.26,1.02);}
  #dlg-fed.mx5-dlg-in .fbm-leg{opacity:1;transform:translateY(0);}
  #dlg-fed.mx5-dlg-in .fbm-leg:nth-child(1){transition-delay:.34s;}
  #dlg-fed.mx5-dlg-in .fbm-leg:nth-child(2){transition-delay:.42s;}
  #dlg-fed.mx5-dlg-in .fbm-leg:nth-child(3){transition-delay:.5s;}
  #dlg-fed.mx5-dlg-in .fbm-leg:nth-child(4){transition-delay:.58s;}
  #dlg-fed.mx5-dlg-in .fbm-leg:nth-child(n+5){transition-delay:.64s;}
  /* rate-path line reveal (stroke-dashoffset) + area fade — both dialogs */
  .fbm-chart-line{stroke-dasharray:var(--dash,1400);stroke-dashoffset:var(--dash,1400);}
  #dlg-fed.mx5-dlg-in .fbm-chart-line,#dlg-policy.mx5-dlg-in .fbm-chart-line{
    transition:stroke-dashoffset 900ms ease .25s;stroke-dashoffset:0;}
  .fbm-chart-area,.fbm-chart-node,.fbm-chart-diamond{opacity:0;}
  #dlg-fed.mx5-dlg-in .fbm-chart-area,#dlg-fed.mx5-dlg-in .fbm-chart-node,#dlg-fed.mx5-dlg-in .fbm-chart-diamond,
  #dlg-policy.mx5-dlg-in .fbm-chart-area,#dlg-policy.mx5-dlg-in .fbm-chart-node,#dlg-policy.mx5-dlg-in .fbm-chart-diamond{
    transition:opacity .6s ease .7s;opacity:1;}
}
@media(prefers-reduced-motion:reduce){
  /* everything at rest state immediately */
  .fbm-beam-bar,.fbm-beam-pans{transform:rotate(var(--tilt,0deg));}
  .fbm-leg{opacity:1;}
  .fbm-chart-line{stroke-dashoffset:0;}
  .fbm-chart-area,.fbm-chart-node,.fbm-chart-diamond{opacity:1;}
}

/* — 390px bottom-sheet: keep the beam legible, stack benchmark odds tighter — */
@media(max-width:430px){
  .fbm-beam-stage{height:156px;}
  .fbm-beam-pan{top:48px;width:44%;}
  .fbm-leg{font-size:10px;padding:3px 7px;}
  .fbm-bench-odds{font-size:22px;min-width:44px;}
  .fbm-row-state{min-width:82px;font-size:11.5px;}
}

/* ══ RISK RADAR MODAL — Sol freeze (verdict → why → watch → context) ════════
   Scoped to #dlg-risk. Shared _risk_radar_card / country clones are untouched.
   rlx-* stay global because LENS clones live on body. No parallel :root tokens. */

#dlg-risk .mx5-dlg-panel{
  container: risk-dialog / inline-size;
  font-family:var(--font-ui);
  max-width:min(900px, calc(100vw - 48px));
  width:calc(100% - 48px);
  max-height:min(88vh, 900px);
  overflow-x:hidden;
}
#dlg-risk .mx5-dlg-body,#dlg-risk .mx5-dlg-body *{min-width:0;}
#dlg-risk .mx5-dlg-title{
  font-family:var(--font-ui);
  font-size:var(--fs-md);font-weight:650;letter-spacing:0;text-transform:none;
  color:var(--ink-2);
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
}
#dlg-risk .riskdlg-asof{
  font:500 var(--fs-label)/1 var(--font-ui);letter-spacing:0;text-transform:none;
  color:var(--ink-3);font-variant-numeric:tabular-nums;
}
#dlg-risk .mx5-dlg-close{width:44px;height:44px;font-size:22px;}
#dlg-risk .mx5-dlg-header{padding:14px 22px 12px;}
#dlg-risk .mx5-dlg-body{padding:6px 22px 22px;}
@media(max-width:899px){
  #dlg-risk .mx5-dlg-panel{max-width:calc(100vw - 32px);width:calc(100vw - 32px);}
}
@media(max-width:700px){
  #dlg-risk .mx5-dlg-header{padding:14px 16px 10px;}
  #dlg-risk .mx5-dlg-body{padding:4px 16px 20px;}
}
@media(prefers-reduced-motion:no-preference){
  #dlg-risk .mx5-dlg-body > *{opacity:1;transform:none;transition:none;}
}
[data-theme="light"] #dlg-risk .mx5-dlg-title{color:var(--ink-2);}
[data-theme="light"] #dlg-risk .riskdlg-asof{color:var(--ink-3);}

/* — Risk Brief (one hero) — */
#dlg-risk .riskdlg-brief{
  padding:14px 16px 12px;border-radius:var(--r-card);
  background:color-mix(in srgb, var(--text) 4%, transparent);
  border:1px solid var(--line);
  border-left:2px solid var(--rkc-c,var(--ok));
}
#dlg-risk .riskdlg-brief[data-rk-state="calm"],
#dlg-risk .riskdlg-brief[data-rk-state="unknown"]{--rkc-c:var(--ok);}
#dlg-risk .riskdlg-brief[data-rk-state="watch"]{--rkc-c:var(--info);}
#dlg-risk .riskdlg-brief[data-rk-state="elevated"],
#dlg-risk .riskdlg-brief[data-rk-state="caution"]{--rkc-c:var(--warn);}
#dlg-risk .riskdlg-brief[data-rk-state="risk-off"],
#dlg-risk .riskdlg-brief[data-rk-state="high"]{--rkc-c:var(--down);}
[data-theme="light"] #dlg-risk .riskdlg-brief{background:var(--panel);}
#dlg-risk .riskdlg-brief-top{display:flex;align-items:baseline;justify-content:space-between;gap:12px;}
#dlg-risk .riskdlg-state{
  font:700 var(--fs-sm)/1 var(--font-ui);letter-spacing:.02em;text-transform:none;
  color:var(--rkc-c,var(--ok));
}
#dlg-risk .riskdlg-score{
  font:800 var(--fs-h1)/.9 var(--font-ui);font-variant-numeric:tabular-nums;
  color:var(--ink-1);letter-spacing:-.02em;
}
#dlg-risk .riskdlg-score small{font-size:var(--fs-sm);font-weight:600;color:var(--ink-3);margin-left:2px;}
#dlg-risk .riskdlg-domain{font:650 var(--fs-md)/1.35 var(--font-ui);color:var(--ink-1);margin-top:6px;}
#dlg-risk .riskdlg-stance{font:500 var(--fs-body)/1.45 var(--font-ui);color:var(--ink-2);margin-top:4px;}
#dlg-risk .riskdlg-authority{font:500 var(--fs-label)/1.4 var(--font-ui);color:var(--ink-3);margin-top:6px;}
#dlg-risk .riskdlg-odds{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);}
#dlg-risk .riskdlg-odds-k{font:600 var(--fs-label)/1.2 var(--font-ui);color:var(--ink-3);margin-bottom:6px;}
#dlg-risk .riskdlg-odds-h{display:flex;align-items:baseline;gap:16px;flex-wrap:wrap;}
#dlg-risk .riskdlg-odds-h span{font:500 var(--fs-sm)/1 var(--font-ui);color:var(--ink-2);}
#dlg-risk .riskdlg-odds-h b{font-weight:750;font-variant-numeric:tabular-nums;margin-left:4px;color:var(--ink-1);}
#dlg-risk .riskdlg-odds-h .is-lead{font-size:var(--fs-body);color:var(--ink-1);}
#dlg-risk .riskdlg-odds-h .is-lead b{font-size:var(--fs-num-lg);font-weight:800;}
#dlg-risk .riskdlg-odds-rail{position:relative;height:10px;margin-top:8px;}
#dlg-risk .riskdlg-odds-track{display:block;height:2px;border-radius:0;position:absolute;left:0;right:0;top:4px;
  background:var(--line);}
#dlg-risk .riskdlg-odds-dot{position:absolute;top:1px;width:8px;height:8px;border-radius:var(--r-pill);
  background:var(--ink-3);transform:translateX(-50%);}
#dlg-risk .riskdlg-odds-dot.is-lead{width:10px;height:10px;top:0;background:var(--rkc-c,var(--ok));}
#dlg-risk .riskdlg-odds-norm{position:absolute;top:-1px;width:1px;height:12px;opacity:.55;
  background:var(--ink-3);transform:translateX(-50%);}
#dlg-risk .riskdlg-odds-note{font:500 var(--fs-label)/1.3 var(--font-ui);color:var(--ink-3);margin-top:6px;font-variant-numeric:tabular-nums;}
#dlg-risk .riskdlg-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;}
#dlg-risk .riskdlg-chip{
  font:600 var(--fs-label)/1 var(--font-ui);padding:5px 8px;border-radius:var(--r-btn);
  border:1px solid var(--line);color:var(--ink-2);
  background:transparent;
}
#dlg-risk .riskdlg-chip.is-accent{color:var(--rkc-c);border-color:color-mix(in srgb,var(--rkc-c) 32%,transparent);}
#dlg-risk .riskdlg-chip[data-fed="hawkish"],
#dlg-risk .riskdlg-chip[data-fed="very-hawkish"]{--rkc-c:var(--down);}
#dlg-risk .riskdlg-chip[data-fed="dovish"],
#dlg-risk .riskdlg-chip[data-fed="very-dovish"]{--rkc-c:var(--up);}
#dlg-risk .riskdlg-chip[data-fed="neutral"]{--rkc-c:var(--warn);}

#dlg-risk .riskdlg-sec-h{
  font:650 var(--fs-body)/1.3 var(--font-ui);color:var(--ink-1);
  margin:16px 0 8px;letter-spacing:0;text-transform:none;
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
}
#dlg-risk .riskdlg-sec-h small{font:500 var(--fs-label)/1 var(--font-ui);color:var(--ink-3);text-transform:none;letter-spacing:0;}

#dlg-risk .riskdlg-drv-list{
  border:1px solid var(--line);border-radius:var(--r-card);
  background:color-mix(in srgb, var(--text) 3%, transparent);overflow:hidden;
}
[data-theme="light"] #dlg-risk .riskdlg-drv-list{background:var(--panel);}
#dlg-risk .riskdlg-drv{
  display:flex;align-items:center;gap:10px;padding:8px 12px;min-height:40px;
  border-bottom:1px solid var(--line);min-width:0;
}
#dlg-risk .riskdlg-drv:last-child{border-bottom:none;}
#dlg-risk .riskdlg-drv[data-tip-en]{cursor:help;}
#dlg-risk .riskdlg-drv[data-isle="risk"]{--rkc-c:var(--isle-risk);}
#dlg-risk .riskdlg-drv[data-isle="events"]{--rkc-c:var(--isle-events);}
#dlg-risk .riskdlg-drv[data-isle="markets"]{--rkc-c:var(--isle-markets);}
#dlg-risk .riskdlg-drv[data-isle="news"]{--rkc-c:var(--isle-news);}
#dlg-risk .riskdlg-drv[data-pressure="high"]{--rkc-c:var(--down);}
#dlg-risk .riskdlg-drv[data-pressure="moderate"]{--rkc-c:var(--warn);}
#dlg-risk .riskdlg-drv[data-pressure="low"]{--rkc-c:var(--up);}
#dlg-risk .riskdlg-drv .rlx-viz{--rlx-c:var(--rkc-c);}
#dlg-risk .riskdlg-drv .lens-ill{color:var(--rkc-c);}
#dlg-risk .riskdlg-drv .rkc-sig-ico{
  width:20px;height:20px;border-radius:0;background:transparent;
}
#dlg-risk .riskdlg-drv .rkc-sig-ico svg{width:16px;height:16px;}
#dlg-risk .riskdlg-drv .rkc-sig-body{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;}
#dlg-risk .riskdlg-drv .rkc-sig-lbl{font:650 var(--fs-label)/1.25 var(--font-ui);color:var(--ink-3);flex:0 0 auto;min-width:4.6em;}
#dlg-risk .riskdlg-drv .rkc-sig-state{margin:0;font-size:var(--fs-sm);flex:1;min-width:0;}
#dlg-risk .riskdlg-drv .rkc-sig-tip{width:44px;height:44px;border-radius:var(--r-pill);}
.rkc-sig-ico{flex:0 0 auto;width:26px;height:26px;border-radius:var(--r-btn);display:flex;align-items:center;justify-content:center;
  color:var(--rkc-c,var(--isle-risk));background:color-mix(in srgb,var(--rkc-c,var(--isle-risk)) 12%,transparent);}
.rkc-sig-ico svg{width:15px;height:15px;display:block;}
.rkc-sig-body{min-width:0;flex:1;}
.rkc-sig-lbl{font:700 12px/1.25 var(--font-ui);color:var(--ink-1);}
.rkc-sig-state{font-size:11px;line-height:1.45;color:var(--ink-2);margin-top:2px;
  display:flex;align-items:baseline;flex-wrap:wrap;gap:5px;}
.rkc-sig-chip{display:inline-flex;align-items:center;font:700 10px/1 var(--font-ui);
  letter-spacing:.03em;padding:2px 6px;border-radius:var(--r-ctl);white-space:nowrap;
  color:var(--rkc-c,var(--isle-risk));
  background:color-mix(in srgb,var(--rkc-c,var(--isle-risk)) 13%,transparent);
  border:1px solid color-mix(in srgb,var(--rkc-c,var(--isle-risk)) 32%,transparent);}
.rkc-sig-tip{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;flex:0 0 auto;
  border-radius:var(--r-pill);border:1px solid var(--line);color:var(--ink-3);
  font:700 10px/1 var(--font-ui);cursor:help;user-select:none;margin-left:auto;transition:border-color .2s,color .2s;}
.rkc-sig-tip:hover{border-color:var(--isle-risk);color:var(--isle-risk);}
[data-theme="light"] .rkc-sig-tip{border-color:var(--line);color:var(--ink-2);}

/* ── rlx-* : rich-lens popover anatomy (Tier-2 rework 2026-07-20) ────────────
   Illustrated hover cards for the six dlg-risk signal tiles (+ any heavy tip).
   Content lives in a hidden .lens-src child of the tile; the site LENS engine
   (theme.js #3102) clones it into a body-appended glass .lens-pop and manages
   chrome / clamping / bottom-sheet at ≤640px / reduced-motion. These classes
   style the CLONE, so they are global (not #dlg-risk-scoped) and lean on the
   --lens-* token chain the engine sets, so light mode + vector pages inherit.
   Anatomy (Fable direction): .lens-hd (engine) → optional rlx-viz mini-illustration
   → rlx-rows label:value glance rows → optional rlx-chips ticker row → .lens-receipt
   (engine) honest compressed receipt. Budget ≤ ~45 visible words + receipt. */
.rlx-viz{margin:2px 16px 4px;padding:10px 12px;border-radius:11px;
  background:color-mix(in srgb,var(--lens-text,#d7dce3) 4%,transparent);
  border:1px solid color-mix(in srgb,var(--lens-text,#d7dce3) 9%,transparent);}
.rlx-viz-cap{font:600 10px/1.4 var(--font-ui,Inter,sans-serif);color:var(--lens-mut,#8b93a1);margin-top:8px;}
.rlx-viz.is-news{--rlx-c:var(--isle-news);}
/* comparison bars — a label ABOVE each full-width bar. (Was a 64px label column, which
   crushed descriptive leg names like "Cyclicals fading vs defensives" into 4-line,
   mid-word-broken wraps — the "bad layout". Stacking gives the name full width and the
   bars share one left edge so length still compares cleanly.) */
.rlx-bars{display:flex;flex-direction:column;gap:12px;}
.rlx-bar-row{display:flex;flex-direction:column;gap:6px;min-width:0;}
.rlx-bar-lbl{font:600 11px/1.3 var(--font-ui,Inter,sans-serif);
  color:color-mix(in srgb,var(--lens-text,#d7dce3) 84%,var(--lens-mut,#8b93a1));overflow-wrap:break-word;}
.rlx-bar-track{position:relative;height:9px;border-radius:5px;
  background:color-mix(in srgb,var(--lens-mut,#8b93a1) 20%,transparent);overflow:hidden;}
.rlx-bar-fill{position:absolute;inset:0 auto 0 0;border-radius:5px;
  width:var(--rlx-w,50%);
  background:linear-gradient(90deg,color-mix(in srgb,var(--rlx-c,var(--lens-accent,#5b9bf0)) 55%,transparent),var(--rlx-c,var(--lens-accent,#5b9bf0)));}
.rlx-bar-fill.muted{background:color-mix(in srgb,var(--lens-mut,#8b93a1) 45%,transparent);}
/* progress-to-maturity bar (single track + marker) */
.rlx-prog{position:relative;height:10px;border-radius:6px;
  background:color-mix(in srgb,var(--lens-mut,#8b93a1) 20%,transparent);overflow:hidden;}
.rlx-prog-fill{position:absolute;inset:0 auto 0 0;width:var(--rlx-w,50%);border-radius:6px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--rlx-c,var(--lens-accent,#5b9bf0)) 50%,transparent),var(--rlx-c,var(--lens-accent,#5b9bf0)));}
/* label:value glance rows */
.rlx-rows{margin:6px 16px 10px;display:flex;flex-direction:column;gap:8px;}
.rlx-row{display:flex;flex-direction:column;gap:2px;min-width:0;}
.rlx-k{font:700 8.5px/1 var(--font-ui,Inter,sans-serif);letter-spacing:.11em;text-transform:uppercase;
  color:color-mix(in srgb,var(--lens-mut,#8b93a1) 82%,transparent);}
.rlx-v{font:450 12px/1.5 var(--font-ui,Inter,sans-serif);color:color-mix(in srgb,var(--lens-text,#d7dce3) 90%,var(--lens-mut,#8b93a1));}
.rlx-v b{font-weight:650;color:var(--lens-text,#d7dce3);}
/* ticker chip row — Favor (green-tint) · Trim (red-tint) */
.rlx-chips{margin:0 16px 12px;display:flex;flex-wrap:wrap;gap:5px 6px;align-items:center;}
.rlx-chips-lbl{font:700 8.5px/1 var(--font-ui,Inter,sans-serif);letter-spacing:.1em;text-transform:uppercase;
  color:color-mix(in srgb,var(--lens-mut,#8b93a1) 80%,transparent);margin-right:1px;}
.rlx-chip{display:inline-flex;align-items:center;font:700 10.5px/1 var(--font-ui,Inter,sans-serif);
  letter-spacing:.02em;padding:3px 8px;border-radius:6px;white-space:nowrap;}
.rlx-chip.up{color:var(--ink-ok, var(--ok,var(--up,#3da564)));background:color-mix(in srgb,var(--ok,var(--up,#3da564)) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--ok,var(--up,#3da564)) 30%,transparent);}
.rlx-chip.dn{color:var(--ink-down, var(--down,#ef4444));background:color-mix(in srgb,var(--down,#ef4444) 13%,transparent);
  border:1px solid color-mix(in srgb,var(--down,#ef4444) 30%,transparent);}
@media(prefers-reduced-motion:no-preference){
  .lens-pop.open .rlx-bar-fill,.lens-pop.open .rlx-prog-fill{transform:scaleX(0);transform-origin:0 50%;
    animation:rlxGrow .6s cubic-bezier(.22,.9,.26,1.02) .1s both;}
}
@keyframes rlxGrow{to{transform:scaleX(1);}}

/* — 3. Leadership rotation + tracked-cohort damage block — */
.rkc-rot-head,.rkc-cohort-kicker{display:flex;align-items:baseline;justify-content:space-between;gap:8px;
  font:750 10px/1.3 var(--font-ui,inherit);letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-2,rgba(255,255,255,.68));margin:2px 0 8px;}
.rkc-rot-head small,.rkc-cohort-kicker small{font-size:9px;font-weight:500;letter-spacing:.02em;text-transform:none;color:var(--ink-3,rgba(255,255,255,.4));}
.rkc-rot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:6px;margin-bottom:4px;}
.rkc-rot-chip{display:flex;align-items:center;justify-content:space-between;gap:7px;min-width:0;padding:7px 9px;
  border-radius:8px;text-decoration:none;color:var(--ink-2,rgba(255,255,255,.72));
  background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.07);}
[data-theme="light"] .rkc-rot-chip{background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.07);}
.rkc-rot-chip.up{border-color:color-mix(in srgb,var(--up,#22c55e) 34%,transparent);background:color-mix(in srgb,var(--up,#22c55e) 7%,transparent);}
.rkc-rot-chip.down{border-color:color-mix(in srgb,var(--down,#ef4444) 28%,transparent);background:color-mix(in srgb,var(--down,#ef4444) 5%,transparent);}
.rkc-rot-name{font:650 10.5px/1.25 var(--font-ui,inherit);min-width:0;}
.rkc-rot-meta{flex:0 0 auto;font:700 9.5px/1 var(--font-mono,ui-monospace,monospace);color:var(--ink-3,rgba(255,255,255,.46));}
.rkc-rot-chip.up .rkc-rot-meta{color:var(--ink-up, var(--up,#22c55e));}.rkc-rot-chip.down .rkc-rot-meta{color:var(--ink-down, var(--down,#ef4444));}
.rkc-cohort-kicker{margin-top:14px;padding-top:11px;border-top:1px solid var(--line,rgba(255,255,255,.08));}
.rkc-ldr-head{display:flex;align-items:center;gap:9px;margin:2px 0 10px;}
.rkc-ldr-state{flex:1;min-width:0;font:600 13px/1.4 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.9));}
.rkc-ldr-count{flex:0 0 auto;display:inline-flex;align-items:baseline;gap:6px;font:800 14px/1 var(--font-ui,inherit);
  font-variant-numeric:tabular-nums;padding:5px 10px;border-radius:999px;color:var(--ink-down, var(--down,#ef4444));
  background:color-mix(in srgb,var(--down,#ef4444) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--down,#ef4444) 30%,transparent);}
.rkc-ldr-count small{font-size:10px;font-weight:600;color:color-mix(in srgb,var(--down,#ef4444) 78%,var(--ink-2));letter-spacing:.02em;}
/* padding-top reserves a lane for the "index" tick label, which is absolutely
   positioned at top:-15px off the FIRST row's track. Without it the label escapes
   the bars block and collides with the state line above (operator, 2026-07-26). */
.rkc-ldr-bars{display:flex;flex-direction:column;gap:6px;position:relative;padding-top:16px;}
.rkc-ldr-row{display:grid;grid-template-columns:52px 1fr 46px;align-items:center;gap:9px;}
.rkc-ldr-tkr{font:700 11px/1 var(--font-mono,ui-monospace,'SF Mono',monospace);
  color:var(--ink-2,rgba(255,255,255,.72));letter-spacing:.02em;}
[data-theme="light"] .rkc-ldr-tkr{color:rgba(0,0,0,.72);}
.rkc-ldr-track{position:relative;height:9px;border-radius:5px;background:rgba(255,255,255,.06);overflow:visible;}
[data-theme="light"] .rkc-ldr-track{background:rgba(0,0,0,.06);}
.rkc-ldr-fill{height:100%;border-radius:5px;transform-origin:0 50%;
  background:linear-gradient(90deg,color-mix(in srgb,var(--down,#ef4444) 55%,transparent),var(--down,#ef4444));}
.rkc-ldr-idx{position:absolute;top:-3px;bottom:-3px;width:2px;border-radius:1px;
  background:var(--ink-2,rgba(255,255,255,.55));}
.rkc-ldr-idx-lbl{position:absolute;top:-15px;left:50%;transform:translateX(-50%);
  font:600 10px/1 var(--font-ui,inherit);letter-spacing:.04em;
  color:var(--ink-3,rgba(255,255,255,.52));white-space:nowrap;}
/* When the tick sits hard against the left edge of the track a centred label hangs
   over the ticker gutter — anchor it to the tick instead. */
.rkc-ldr-idx.at-start .rkc-ldr-idx-lbl{left:0;transform:none;}
.rkc-ldr-pct{font:800 11px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;text-align:right;color:var(--ink-down, var(--down,#ef4444));}
.rkc-ldr-sub{font-size:11px;color:var(--ink-3,rgba(255,255,255,.42));margin-top:9px;line-height:1.5;}
.rkc-ldr-sub b{color:var(--ink-2,rgba(255,255,255,.62));font-weight:700;font-variant-numeric:tabular-nums;}
@media(prefers-reduced-motion:no-preference){
  #dlg-risk .rkc-ldr-fill{transform:scaleX(0);transition:transform 620ms cubic-bezier(.22,.9,.26,1.02);}
  #dlg-risk.mx5-dlg-in .rkc-ldr-fill{transform:scaleX(1);}
  #dlg-risk.mx5-dlg-in .rkc-ldr-row:nth-child(2) .rkc-ldr-fill{transition-delay:.06s;}
  #dlg-risk.mx5-dlg-in .rkc-ldr-row:nth-child(3) .rkc-ldr-fill{transition-delay:.12s;}
  #dlg-risk.mx5-dlg-in .rkc-ldr-row:nth-child(4) .rkc-ldr-fill{transition-delay:.18s;}
  #dlg-risk.mx5-dlg-in .rkc-ldr-row:nth-child(5) .rkc-ldr-fill{transition-delay:.24s;}
  #dlg-risk.mx5-dlg-in .rkc-ldr-row:nth-child(n+6) .rkc-ldr-fill{transition-delay:.30s;}
}

/* — 4. Overseas severity-ring tiles (SIGNATURE) — */
.rkc-ov-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin:2px 0 12px;}
.rkc-ov{display:flex;flex-direction:column;align-items:center;gap:7px;padding:11px 8px 10px;border-radius:12px;
  text-decoration:none;color:inherit;
  background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.06);
  transition:border-color .2s ease,transform .16s ease,background .2s ease;}
[data-theme="light"] .rkc-ov{background:rgba(0,0,0,.02);border-color:rgba(0,0,0,.06);}
.rkc-ov:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--rkc-c,var(--isle-risk,#e05c5c)) 40%,var(--line,rgba(255,255,255,.1)));
  background:rgba(255,255,255,.04);}
[data-theme="light"] .rkc-ov:hover{background:rgba(0,0,0,.035);}
.rkc-ov.is-alert{border-color:color-mix(in srgb,var(--rkc-c,var(--down,#ef4444)) 30%,transparent);
  background:color-mix(in srgb,var(--rkc-c,var(--down,#ef4444)) 6%,transparent);}
.rkc-ov-ring{position:relative;width:52px;height:52px;border-radius:50%;flex:0 0 auto;
  /* conic arc 0..(val/100) in state colour, remainder a faint track */
  background:conic-gradient(var(--rkc-c,var(--isle-risk,#e05c5c)) calc(var(--rkc-v,0) * 1%),
    color-mix(in srgb,var(--muted,#8a93a3) 20%,transparent) 0);
  display:flex;align-items:center;justify-content:center;
  transition:filter .2s ease;}
.rkc-ov:hover .rkc-ov-ring{filter:drop-shadow(0 0 6px color-mix(in srgb,var(--rkc-c,var(--isle-risk,#e05c5c)) 55%,transparent));}
.rkc-ov-ring::before{content:"";position:absolute;inset:4px;border-radius:50%;
  background:var(--panel,#0f1420);}
[data-theme="light"] .rkc-ov-ring::before{background:#fff;}
.rkc-ov-val{position:relative;z-index:1;font:800 15px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;
  color:var(--rkc-c,var(--isle-risk,#e05c5c));}
.rkc-ov-name{font:600 11px/1.25 var(--font-ui,inherit);color:var(--ink-2,rgba(255,255,255,.66));text-align:center;
  max-width:100%;overflow-wrap:anywhere;}
[data-theme="light"] .rkc-ov-name{color:rgba(0,0,0,.62);}
/* state word — in the ring's own band colour, so the tile says what its colour means
   (the three markets with no hover profile had a coloured ring and no word at all) */
.rkc-ov-state{margin-top:-3px;font:700 9px/1.2 var(--font-ui,inherit);letter-spacing:.08em;
  text-transform:uppercase;text-align:center;color:var(--rkc-c,var(--muted,#8a93a3));}
/* this ring's own grading date, shown ONLY when it predates the board — the dialog's
   single footer stamp is the board's date, and a ring can be days behind it */
.rkc-ov-age{margin-top:-4px;font:600 9px/1.2 var(--font-ui,inherit);text-align:center;
  color:var(--ink-3,rgba(255,255,255,.34));}
[data-theme="light"] .rkc-ov-age{color:rgba(0,0,0,.58);}
.row-pop-why li.row-pop-stale{color:var(--ink-warn, var(--warn,#f59e0b));}
@media(prefers-reduced-motion:no-preference){
  #dlg-risk .rkc-ov-ring{--rkc-anim:0;
    background:conic-gradient(var(--rkc-c,var(--isle-risk,#e05c5c)) calc(var(--rkc-anim,0) * 1%),
      color-mix(in srgb,var(--muted,#8a93a3) 20%,transparent) 0);
    transition:filter .2s ease,--rkc-anim 700ms cubic-bezier(.22,.9,.26,1.02);}
  #dlg-risk.mx5-dlg-in .rkc-ov-ring{--rkc-anim:var(--rkc-v,0);}
}
@property --rkc-anim{syntax:'<number>';inherits:false;initial-value:0;}

/* — Transmission verdict as a state chip — */
.rkc-tx-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.rkc-tx-ttl{font:700 12px/1 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.86));}
.rkc-tx-verdict{display:inline-flex;align-items:center;gap:5px;font:700 11px/1 var(--font-ui,inherit);
  letter-spacing:.03em;padding:3px 9px;border-radius:999px;}
.rkc-tx-verdict::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;}
.rkc-tx-verdict.v-alert{color:var(--ink-down, var(--down,#ef4444));background:color-mix(in srgb,var(--down,#ef4444) 12%,transparent);border:1px solid color-mix(in srgb,var(--down,#ef4444) 30%,transparent);}
.rkc-tx-verdict.v-warn{color:var(--ink-warn, var(--warn,#f59e0b));background:color-mix(in srgb,var(--warn,#f59e0b) 12%,transparent);border:1px solid color-mix(in srgb,var(--warn,#f59e0b) 30%,transparent);}
.rkc-tx-verdict.v-ok{color:var(--ink-up, var(--up,#22c55e));background:color-mix(in srgb,var(--up,#22c55e) 12%,transparent);border:1px solid color-mix(in srgb,var(--up,#22c55e) 30%,transparent);}

/* — 5. Scare ladder: one flat instrument, not seven cards — */
#dlg-risk .riskdlg-scare-list.scare-ladder{
  gap:0;margin:0;border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden;
}
#dlg-risk .riskdlg-scare{
  display:grid;grid-template-columns:minmax(0,1.5fr) minmax(72px,1fr) 40px 58px;
  align-items:center;gap:10px;min-height:34px;padding:4px 12px;
  background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;
}
#dlg-risk .riskdlg-scare:last-child{border-bottom:0;}
#dlg-risk .riskdlg-scare[data-band="sc-band-high"]{--rkc-c:var(--down);}
#dlg-risk .riskdlg-scare[data-band="sc-band-watch"]{--rkc-c:var(--warn);}
#dlg-risk .riskdlg-scare[data-band="sc-band-elev"]{--rkc-c:var(--info);}
#dlg-risk .riskdlg-scare[data-band="sc-band-calm"]{--rkc-c:var(--muted);}
#dlg-risk .rkc-sc-ico{display:none;}
#dlg-risk .sc-name{font-size:var(--fs-sm);font-weight:650;}
#dlg-risk .sc-score{font-size:var(--fs-body);font-weight:750;}
#dlg-risk .sc-bar-track{height:5px;background:color-mix(in srgb, var(--text) 8%, transparent);}
#dlg-risk .sc-bar-fill{height:5px;transform-origin:0 50%;
  background:linear-gradient(90deg,color-mix(in srgb,var(--rkc-c,var(--muted)) 45%,transparent),var(--rkc-c,var(--muted)))!important;}
@media(prefers-reduced-motion:no-preference){
  #dlg-risk .sc-bar-fill{transform:scaleX(0);transition:transform 420ms cubic-bezier(.22,.9,.26,1.02);}
  #dlg-risk.mx5-dlg-in .sc-bar-fill{transform:scaleX(1);}
}
@media(prefers-reduced-motion:reduce){
  #dlg-risk .sc-bar-fill{transform:none;}
}
@container risk-dialog (max-width:700px){
  #dlg-risk .riskdlg-scare{grid-template-columns:minmax(0,1fr) 40px 58px;}
  #dlg-risk .riskdlg-scare .sc-bar-track{display:none;}
}
@container risk-dialog (max-width:390px){
  #dlg-risk .riskdlg-scare{
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:"copy score" "copy band";
    align-items:start;gap:2px 8px;padding:8px 12px;min-height:44px;
  }
  #dlg-risk .sc-name{grid-area:copy;}
  #dlg-risk .sc-score{grid-area:score;text-align:right;}
  #dlg-risk .sc-band{grid-area:band;justify-self:end;}
}

/* — 6. Mood check: two independent instruments.
   Labels, values and status chips live outside the rails, so a score near 50 can
   never collide with the Neutral axis label (the original 48/Neutral bug). — */
.rkc-mood-board{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin-top:10px;}
.rkc-mood-lens{padding:11px 12px 12px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.075);}
[data-theme="light"] .rkc-mood-lens{background:rgba(0,0,0,.022);border-color:rgba(0,0,0,.07);}
.rkc-mood-lens-top{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px;}
.rkc-mood-lens-name{font:700 10px/1.25 var(--font-ui,inherit);letter-spacing:.055em;text-transform:uppercase;
  color:var(--ink-2,rgba(255,255,255,.68));padding-top:3px;}
.rkc-mood-scoreline{display:flex;align-items:center;justify-content:flex-end;gap:5px;flex-wrap:wrap;text-align:right;}
.rkc-mood-score{font:800 20px/.9 var(--font-ui,inherit);font-variant-numeric:tabular-nums;
  color:var(--ink-1,rgba(255,255,255,.94));letter-spacing:-.02em;}
.rkc-mood-unit{font:600 10px/1 var(--font-ui,inherit);color:var(--ink-3,rgba(255,255,255,.44));}
.rkc-mood-scoreline .chip{font-size:10px;line-height:1;padding:3px 7px;}
.rkc-mood-mini-track{position:relative;height:9px;border-radius:999px;
  background:linear-gradient(90deg,var(--down,#ef4444) 0%,var(--warn,#f59e0b) 50%,var(--up,#22c55e) 100%);
  box-shadow:inset 0 1px 3px rgba(0,0,0,.24);}
.rkc-mood-mini-track::after{content:"";position:absolute;left:50%;top:-2px;width:1px;height:13px;
  background:color-mix(in srgb,var(--ink-1,#fff) 40%,transparent);}
.rkc-mood-pin{position:absolute;left:var(--rkc-pos,50%);top:50%;width:13px;height:13px;border-radius:50%;
  transform:translate(-50%,-50%);background:var(--text,#fff);border:3px solid var(--panel,#0f1420);
  box-shadow:0 1px 5px rgba(0,0,0,.45);z-index:2;}
[data-theme="light"] .rkc-mood-pin{border-color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.23);}
.rkc-mood-axis{display:grid;grid-template-columns:repeat(5,1fr);align-items:start;
  font:600 10px/1.25 var(--font-ui,inherit);color:var(--muted);margin-top:7px;letter-spacing:.01em;}
.rkc-mood-axis span{text-align:center;}
.rkc-mood-axis span:first-child{text-align:left;}
.rkc-mood-axis span:last-child{text-align:right;}
.rkc-mood-note{font:600 11px/1.45 var(--font-ui,inherit);color:var(--ink-3,rgba(255,255,255,.44));margin-top:9px;}
@media(prefers-reduced-motion:no-preference){
  #dlg-risk .rkc-mood-pin{left:50%;transition:left 760ms cubic-bezier(.34,1.28,.5,1) .2s;}
  #dlg-risk.mx5-dlg-in .rkc-mood-pin{left:var(--rkc-pos,50%);}
}
@media(prefers-reduced-motion:reduce){
  #dlg-risk .rkc-mood-pin{left:var(--rkc-pos,50%);}
  #dlg-risk .rkc-ldr-fill,#dlg-risk .sc-bar-fill{transform:none;}
  #dlg-risk .rkc-ov-ring{--rkc-anim:var(--rkc-v,0);}
}

/* Froth header: a title cluster and a score cluster, never four loose flex items. */
#dlg-risk .rsx-froth-hd{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:10px;margin-bottom:8px;}
.rsx-froth-title{display:flex;align-items:center;gap:7px;min-width:0;font:700 13px/1.3 var(--font-ui,inherit);}
.rsx-froth-scoreline{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap;}
.rsx-froth-score{font:850 20px/.9 var(--font-ui,inherit);font-variant-numeric:tabular-nums;letter-spacing:-.02em;}
.rsx-froth-provisional{font:600 9px/1 var(--font-ui,inherit);color:var(--ink-3,rgba(255,255,255,.4));}

/* — Leadership rows + method disclosure — */
#dlg-risk .rkc-rot-head{
  font:650 var(--fs-sm)/1.3 var(--font-ui);letter-spacing:0;text-transform:none;
  color:var(--ink-2);
}
#dlg-risk .rkc-mood-lens-name{letter-spacing:0;text-transform:none;font:650 var(--fs-label)/1.25 var(--font-ui);}
#dlg-risk .riskdlg-rot{
  display:flex;flex-direction:column;
  border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden;
}
#dlg-risk .riskdlg-theme{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:7px 12px;min-height:34px;text-decoration:none;
  color:var(--ink-2);background:transparent;
  border-bottom:1px solid var(--line);
}
#dlg-risk .riskdlg-theme:last-child,#dlg-risk .riskdlg-rot > .riskdlg-fold{border-bottom:0;}
#dlg-risk .riskdlg-tn{font:650 var(--fs-sm)/1.3 var(--font-ui);min-width:0;}
#dlg-risk .riskdlg-tm{font:700 var(--fs-label)/1 var(--font-mono);font-variant-numeric:tabular-nums;color:var(--ink-3);flex:0 0 auto;}
#dlg-risk .riskdlg-theme.up .riskdlg-tm{color:var(--ink-up,var(--up));}
#dlg-risk .riskdlg-theme.down .riskdlg-tm{color:var(--ink-down,var(--down));}
#dlg-risk .riskdlg-ldr-caveat{font:500 var(--fs-sm)/1.45 var(--font-ui);color:var(--ink-3);margin:8px 0 4px;}
#dlg-risk .riskdlg-fold > summary,
#dlg-risk .riskdlg-method > summary{
  cursor:pointer;list-style:none;font:600 var(--fs-sm)/1.3 var(--font-ui);
  color:var(--ink-2);padding:8px 12px;min-height:44px;
  display:flex;align-items:center;gap:6px;
}
#dlg-risk .riskdlg-fold > summary::-webkit-details-marker,
#dlg-risk .riskdlg-method > summary::-webkit-details-marker{display:none;}
#dlg-risk .riskdlg-fold > summary::before,
#dlg-risk .riskdlg-method > summary::before{content:"+";font-weight:700;color:var(--ink-3);width:1em;}
#dlg-risk .riskdlg-fold[open] > summary::before,
#dlg-risk .riskdlg-method[open] > summary::before{content:"–";}
#dlg-risk .riskdlg-method{
  margin-top:14px;border:1px solid var(--line);border-radius:var(--r-card);
}
#dlg-risk .riskdlg-method-note{font:500 var(--fs-sm)/1.45 var(--font-ui);color:var(--ink-3);padding:0 12px 12px;margin:0;}
#dlg-risk .rsx-dlg-footer{font:500 var(--fs-label)/1.5 var(--font-ui);color:var(--ink-3);margin-top:10px;}
#dlg-risk .riskdlg-rot > .riskdlg-fold{padding:0;}
#dlg-risk .riskdlg-rot > .riskdlg-fold > summary{border-top:1px solid var(--line);}

/* — narrow embedded-panel bleed checks — */
@container risk-dialog (max-width:520px){
  .rkc-mood-board{grid-template-columns:1fr;}
  .rkc-ov-grid{grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:6px;}
  .rkc-ov-ring{width:46px;height:46px;}
  .rkc-ov-val{font-size:14px;}
  .rkc-ldr-row{grid-template-columns:46px 1fr 42px;gap:7px;}
  #dlg-risk .rsx-froth-bar-lbl{width:92px;}
  #dlg-risk .riskdlg-drv .rkc-sig-body{flex-direction:column;gap:2px;align-items:flex-start;}
  #dlg-risk .riskdlg-odds-h{gap:12px;}
}
@container risk-dialog (max-width:340px){
  .rkc-mood-axis span:nth-child(2),.rkc-mood-axis span:nth-child(4){visibility:hidden;}
  #dlg-risk .rsx-froth-hd{grid-template-columns:1fr;}
  .rsx-froth-scoreline{justify-content:flex-start;}
  #dlg-risk .rsx-froth-bar-row{display:grid;grid-template-columns:minmax(0,1fr) 32px;gap:5px 8px;}
  #dlg-risk .rsx-froth-bar-lbl{width:auto;}
  #dlg-risk .rsx-froth-bar-track{grid-column:1/-1;grid-row:2;}
}

/* ═══ WAVE D — Market Sentiment dialog (sg-* classes) ══════════════════════
   Coherent with Wave C: same Fear→Neutral→Greed spectrum, the same conic
   @property arc idiom (--sg-anim), animations gated on #dlg-sentiment.mx5-dlg-in
   + prefers-reduced-motion. The SIGNATURE is the 0-100 zone dial — a small arc
   with Fear/Neutral/Greed bands + a pointer — reused in the hero track and in
   every leg's hover popover. */
:root{ --sg-fear:var(--down,#ef4444); --sg-neu:var(--warn,#f59e0b); --sg-greed:var(--up,#22d97a); }
@property --sg-anim{syntax:'<number>';inherits:false;initial-value:0;}

/* — Hero: slim 0-100 zone track under the composite numeral — */
.sg-hero{display:flex;align-items:center;gap:16px;margin-bottom:8px;}
.sg-hero-num{font:800 40px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;}
.sg-hero-band{font:700 18px/1.15 var(--font-ui,inherit);}
.sg-hero-sub{font-size:11px;color:var(--ink-3,rgba(255,255,255,.4));margin-top:2px;}
.sg-track-wrap{position:relative;margin:6px 0 22px;padding-top:2px;}
.sg-track{position:relative;height:12px;border-radius:7px;overflow:hidden;
  background:linear-gradient(90deg,var(--sg-fear) 0%,var(--sg-neu) 50%,var(--sg-greed) 100%);
  opacity:.82;box-shadow:inset 0 1px 3px rgba(0,0,0,.28);}
[data-theme="light"] .sg-track{opacity:.9;}
.sg-track-tick{position:absolute;top:0;bottom:0;width:1px;background:rgba(255,255,255,.35);}
[data-theme="light"] .sg-track-tick{background:rgba(0,0,0,.22);}
.sg-track-marker{position:absolute;top:-5px;width:4px;height:22px;border-radius:3px;
  background:var(--text,#fff);border:2px solid var(--panel,#0f1420);z-index:2;
  box-shadow:0 1px 4px rgba(0,0,0,.4);transform:translateX(-50%);}
[data-theme="light"] .sg-track-marker{border-color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.2);}
.sg-track-axis{display:flex;justify-content:space-between;font:600 9px/1 var(--font-ui,inherit);
  letter-spacing:.03em;color:var(--muted);margin-top:8px;text-transform:uppercase;}
@media(prefers-reduced-motion:no-preference){
  #dlg-sentiment .sg-track-marker{left:50%;transition:left 780ms cubic-bezier(.34,1.28,.5,1) .18s;}
  #dlg-sentiment.mx5-dlg-in .sg-track-marker{left:var(--sg-pos,50%);}
}
@media(prefers-reduced-motion:reduce){ #dlg-sentiment .sg-track-marker{left:var(--sg-pos,50%);} }

/* — Composite leg rows: hoverable popover triggers — */
#dlg-sentiment .mx5-dlg-factor-row[data-rpop]{cursor:pointer;
  transition:border-color .18s ease,transform .16s ease,background .18s ease;}
#dlg-sentiment .mx5-dlg-factor-row[data-rpop]:hover,
#dlg-sentiment .mx5-dlg-factor-row[data-rpop]:focus-visible{
  transform:translateY(-1px);border-color:color-mix(in srgb,var(--sg-c,var(--muted)) 45%,transparent);
  background:color-mix(in srgb,var(--sg-c,var(--muted)) 7%,rgba(255,255,255,.03));outline:none;}
[data-theme="light"] #dlg-sentiment .mx5-dlg-factor-row[data-rpop]:hover{
  background:color-mix(in srgb,var(--sg-c,var(--muted)) 7%,rgba(0,0,0,.02));}
.sg-hint{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;
  margin-left:6px;border-radius:50%;font:700 9px/1 var(--font-ui,inherit);vertical-align:middle;
  color:var(--muted);border:1px solid color-mix(in srgb,var(--muted) 40%,transparent);opacity:.7;}
#dlg-sentiment .mx5-dlg-factor-row[data-rpop]:hover .sg-hint{opacity:1;color:var(--sg-c,var(--muted));
  border-color:color-mix(in srgb,var(--sg-c,var(--muted)) 55%,transparent);}
#dlg-sentiment .mx5-dlg-factor-fill{transform-origin:0 50%;}
@media(prefers-reduced-motion:no-preference){
  #dlg-sentiment .mx5-dlg-factor-fill{transform:scaleX(0);transition:transform 620ms cubic-bezier(.22,.9,.26,1.02);}
  #dlg-sentiment.mx5-dlg-in .mx5-dlg-factor-fill{transform:scaleX(1);}
}

/* — The zone dial (SIGNATURE): 0-100 semicircle, Fear/Neutral/Greed bands +
   pointer. Lives inside the cloned .rp-src payload, so all styling is by class. — */
.sg-dial{position:relative;width:132px;height:88px;margin:2px auto 0;}
.sg-dial svg{display:block;width:100%;height:74px;overflow:visible;}
.sg-dial-band-fear{stroke:var(--sg-fear);}
.sg-dial-band-neu{stroke:var(--sg-neu);}
.sg-dial-band-greed{stroke:var(--sg-greed);}
.sg-dial-track{stroke:color-mix(in srgb,var(--muted) 22%,transparent);}
.sg-dial-ptr{stroke:var(--text,#fff);stroke-width:2.4;stroke-linecap:round;}
.sg-dial-hub{fill:var(--text,#fff);}
/* numeral + cap sit BELOW the arc baseline (y=64) so the needle never overlaps them */
.sg-dial-val{position:absolute;left:0;right:0;top:66px;text-align:center;
  font:800 19px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;color:var(--sg-c,var(--text));}
.sg-dial-cap{position:absolute;left:0;right:0;top:85px;text-align:center;
  font:600 9px/1 var(--font-ui,inherit);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);}

/* — Popover interior (extends the shared .row-pop card) — */
.sg-pop-lead{padding:12px 14px 4px;}
.sg-pop-dialwrap{padding:8px 14px 6px;}
.sg-pop-expl{padding:2px 14px 12px;display:flex;flex-direction:column;gap:9px;}
.sg-pop-expl .sg-pe{display:flex;flex-direction:column;gap:2px;}
.sg-pe-lbl{font:600 9px/1 var(--font-ui,inherit);letter-spacing:.07em;text-transform:uppercase;color:var(--muted);}
.sg-pe-txt{font-size:12px;line-height:1.5;color:var(--text);}
.sg-pop-spark{padding:0 14px 12px;}
.sg-pop-spark-lbl{font:600 9px/1 var(--font-ui,inherit);letter-spacing:.07em;text-transform:uppercase;color:var(--muted);margin-bottom:5px;}
.sg-spark svg{display:block;width:100%;height:36px;}
/* graph slot collapses when no history is present — no fake chart (house law) */

/* — Volatility weather: per-row glyph + percentile position bar — */
#dlg-sentiment .vsb-vw-row{grid-template-columns:26px minmax(110px,1.3fr) 1fr 54px;gap:12px;}
.sg-wx{width:24px;height:24px;display:flex;align-items:center;justify-content:center;color:var(--sg-wx-c,var(--muted));}
.sg-wx svg{width:20px;height:20px;display:block;}
.sg-pos{position:relative;height:6px;border-radius:4px;background:rgba(255,255,255,.08);margin-top:7px;}
[data-theme="light"] .sg-pos{background:rgba(0,0,0,.08);}
.sg-pos-mark{position:absolute;top:-3px;width:12px;height:12px;border-radius:50%;transform:translateX(-50%);
  background:var(--sg-wx-c,var(--muted));border:2px solid var(--panel,#0f1420);box-shadow:0 1px 3px rgba(0,0,0,.35);}
[data-theme="light"] .sg-pos-mark{border-color:#fff;}
.sg-pos-axis{display:flex;justify-content:space-between;font:600 8px/1 var(--font-ui,inherit);color:var(--muted);margin-top:4px;letter-spacing:.02em;}
@media(prefers-reduced-motion:no-preference){
  #dlg-sentiment .sg-pos-mark{left:50%;transition:left 640ms cubic-bezier(.34,1.2,.5,1) .12s;}
  #dlg-sentiment.mx5-dlg-in .sg-pos-mark{left:var(--sg-pp,50%);}
}
@media(prefers-reduced-motion:reduce){ #dlg-sentiment .sg-pos-mark{left:var(--sg-pp,50%);} }

/* — AI names vs the rest: two proportional cohort bars + delta chip — */
.sg-split{display:flex;flex-direction:column;gap:12px;margin:4px 0 8px;}
.sg-split-row{display:grid;grid-template-columns:minmax(96px,auto) 1fr 42px;align-items:center;gap:12px;}
.sg-split-lbl{font:600 12px/1.3 var(--font-ui,inherit);color:var(--ink-1,rgba(255,255,255,.85));}
[data-theme="light"] .sg-split-lbl{color:rgba(0,0,0,.8);}
.sg-split-track{position:relative;height:16px;border-radius:8px;background:rgba(255,255,255,.06);overflow:hidden;}
[data-theme="light"] .sg-split-track{background:rgba(0,0,0,.06);}
.sg-split-fill{position:absolute;left:0;top:0;bottom:0;border-radius:8px;transform-origin:0 50%;}
.sg-split-fill.ai{background:linear-gradient(90deg,color-mix(in srgb,var(--info,#4d8ef5) 55%,transparent),var(--info,#4d8ef5));}
.sg-split-fill.non{background:linear-gradient(90deg,color-mix(in srgb,var(--muted) 45%,transparent),color-mix(in srgb,var(--muted) 80%,transparent));}
.sg-split-val{font:800 16px/1 var(--font-ui,inherit);font-variant-numeric:tabular-nums;text-align:right;color:var(--ink-1,rgba(255,255,255,.85));}
[data-theme="light"] .sg-split-val{color:rgba(0,0,0,.82);}
.sg-split-delta{display:inline-flex;align-items:center;gap:5px;font:700 10.5px/1 var(--font-ui,inherit);letter-spacing:.02em;
  padding:4px 10px;border-radius:999px;margin-top:2px;
  color:var(--ink-warn, var(--warn,#f59e0b));background:color-mix(in srgb,var(--warn,#f59e0b) 12%,transparent);
  border:1px solid color-mix(in srgb,var(--warn,#f59e0b) 30%,transparent);}
.sg-split-delta::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;}
@media(prefers-reduced-motion:no-preference){
  #dlg-sentiment .sg-split-fill{transform:scaleX(0);transition:transform 700ms cubic-bezier(.22,.9,.26,1.02) .1s;}
  #dlg-sentiment.mx5-dlg-in .sg-split-fill{transform:scaleX(1);}
}

/* — one-line dialog footer receipt (Wave B section-j pattern) — */
.sg-foot{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px;font-size:10px;
  color:var(--ink-3,rgba(255,255,255,.4));line-height:1.5;margin-top:6px;}
.sg-foot-asof{font-variant-numeric:tabular-nums;}

@media(max-width:430px){
  .sg-hero-num{font-size:34px;}
  #dlg-sentiment .vsb-vw-row{grid-template-columns:24px 1fr 48px;}
  #dlg-sentiment .vsb-vw-row .sg-pos-wrap{display:none;}
  .sg-split-row{grid-template-columns:minmax(80px,auto) 1fr 38px;gap:8px;}
  .row-pop .sg-dial{width:120px;height:68px;}
}

/* ── MARKET SENTIMENT (static card — odometer dial) ────────────── */
body.page-macro.mx4-grid .mx5-sentiment-dial-wrap{
  text-align:center;margin-bottom:4px;
}
body.page-macro.mx4-grid .mx5-sentiment-zone-text{
  font-size:15px;font-weight:700;color:var(--mx5-accent-ink);
  text-align:center;margin-bottom:3px;
}
body.page-macro.mx4-grid .mx5-sentiment-label{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
  text-align:center;margin-top:2px;
}

/* ── SECTOR TEMPERATURE (static card) ──────────────────────────── */
body.page-macro.mx4-grid .mx5-sector-row{margin-bottom:14px;}
body.page-macro.mx4-grid .mx5-sector-sub-label{
  font-size:11px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:7px;
}
body.page-macro.mx4-grid .mx5-sector-chips{display:flex;flex-wrap:wrap;gap:5px;}
body.page-macro.mx4-grid .mx5-sector-chip{
  padding:4px 11px;border-radius:var(--mx5-radius-pill);
  font-size:12px;font-weight:600;
}
body.page-macro.mx4-grid .mx5-sector-chip.hot{
  background:rgba(34,217,122,.11);border:1px solid rgba(34,217,122,.28);
  color:var(--ink-up,var(--up,#22d97a));
}
body.page-macro.mx4-grid .mx5-sector-chip.cold{
  background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.22);
  color:var(--ink-down,var(--down,#ef4444));
}
/* zh 红涨绿跌: hot(强势)=red family, cold(退潮)=green family — text already flips
   via --up/--down; the literal glass tints mirror here */
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-sector-chip.hot{
  background:rgba(239,68,68,.11);border-color:rgba(239,68,68,.28);
}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-sector-chip.cold{
  background:rgba(34,217,122,.08);border-color:rgba(34,217,122,.22);
}
/* sector heat bars — hue by class (rank decay rides the bar's inline opacity) */
body.page-macro.mx4-grid .mx5-shb-hot{background:#22d97a;}
body.page-macro.mx4-grid .mx5-shb-cool{background:#ef4444;}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-shb-hot{background:#ef4444;}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-shb-cool{background:#22d97a;}
body.page-macro.mx4-grid .mx5-sector-heat-divider{
  margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,255,255,.07);
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-sector-heat-divider{border-top-color:rgba(0,0,0,.06);}
/* Wave E — enlarged hero heat strip: taller cells + a baseline so it reads as a chart */
body.page-macro.mx4-grid .mx5-sector-heat-divider.hero{margin-top:16px;}
body.page-macro.mx4-grid .mx5-sector-heat-label{
  font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.36));margin-bottom:10px;
}
body.page-macro.mx4-grid .mx5-sector-heat-bars{
  display:flex;gap:5px;align-items:flex-end;
}
body.page-macro.mx4-grid .mx5-sector-heat-divider.hero .mx5-sector-heat-bars{
  min-height:56px;gap:6px;padding-bottom:9px;
  border-bottom:1px solid rgba(255,255,255,.06);
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-sector-heat-divider.hero .mx5-sector-heat-bars{border-bottom-color:rgba(0,0,0,.05);}
body.page-macro.mx4-grid .mx5-sector-heat-col{
  flex:1 1 0;min-width:14px;display:flex;flex-direction:column;gap:3px;align-items:center;
}
body.page-macro.mx4-grid .mx5-sector-heat-bar{width:100%;border-radius:3px 3px 2px 2px;
  transition:filter .18s ease;}
body.page-macro.mx4-grid .mx5-sector-heat-divider.hero .mx5-sector-heat-bar{border-radius:4px 4px 2px 2px;}
body.page-macro.mx4-grid #sx-v5-sector .mx5-card:hover .mx5-sector-heat-bar{filter:brightness(1.12);}
/* legend under the hero strip: heating vs cooling */
body.page-macro.mx4-grid .mx5-sector-heat-legend{
  display:flex;justify-content:space-between;margin-top:8px;
  font-size:10px;font-weight:600;letter-spacing:.03em;
}
body.page-macro.mx4-grid .mx5-sector-heat-legend .heat-up{color:var(--ink-up,var(--up,#22d97a));}
body.page-macro.mx4-grid .mx5-sector-heat-legend .heat-dn{color:var(--ink-down,var(--down,#ef4444));}
/* .mx5-sector-heat-name removed (2.5 — truncation at every width; full names in chip lists) */

/* ── ALERTS CENTRE (sx-news-v2 face) — Wave E ───────────────────────────── */
body.page-macro.mx4-grid #sx-news-v2 .sxg-face.mx5-card-face .mx5-alerts-list{
  display:flex;flex-direction:column;margin:0 -26px;
}
body.page-macro.mx4-grid .mx5-alert-item{
  position:relative;display:flex;align-items:flex-start;gap:11px;
  padding:12px 26px 12px 23px;border-bottom:1px solid rgba(255,255,255,.05);
  border-left:3px solid transparent;
  transition:background .18s ease;
}
body.page-macro.mx4-grid .mx5-alert-item:last-child{border-bottom:none;}
/* left severity accent bar per row + glass row hover */
body.page-macro.mx4-grid .mx5-alert-item.warn{
  background:rgba(245,158,11,.04);border-left-color:var(--mx5-warn,#f59e0b);
}
body.page-macro.mx4-grid .mx5-alert-item.info{
  border-left-color:color-mix(in srgb,var(--ink-3,#8a93a3) 40%,transparent);
}
body.page-macro.mx4-grid .mx5-alert-item:hover{background:rgba(255,255,255,.03);}
body.page-macro.mx4-grid .mx5-alert-item.warn:hover{background:rgba(245,158,11,.07);}
[data-theme="light"] body.page-macro.mx4-grid .mx5-alert-item:hover{background:rgba(0,0,0,.02);}
body.page-macro.mx4-grid .mx5-alert-dot{
  width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:5px;
}
body.page-macro.mx4-grid .mx5-alert-dot.warn{
  background:var(--mx5-warn);box-shadow:0 0 6px rgba(245,158,11,.55);
}
body.page-macro.mx4-grid .mx5-alert-dot.info{
  background:var(--ink-3,rgba(255,255,255,.36));
}
body.page-macro.mx4-grid .mx5-alert-content{flex:1;min-width:0;}
body.page-macro.mx4-grid .mx5-alert-title{
  font-size:13px;font-weight:600;
  color:var(--ink-1,rgba(255,255,255,.92));line-height:1.4;
}
body.page-macro.mx4-grid .mx5-alert-title.warn{color:var(--mx5-warn-ink);}
body.page-macro.mx4-grid .mx5-alert-detail{
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
  margin-top:3px;line-height:1.5;
}
body.page-macro.mx4-grid .mx5-alert-footer{
  margin-top:14px;padding-top:11px;border-top:1px solid rgba(255,255,255,.06);
  font-size:11px;color:var(--ink-3,rgba(255,255,255,.36));
  display:flex;justify-content:space-between;align-items:center;gap:10px;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-alert-footer{border-top-color:rgba(0,0,0,.06);}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid .mx5-alert-item{transition:none;}
}

/* ── POLICY MONITOR (sx-policy-v2 face) ────────────────────────── */
body.page-macro.mx4-grid .mx5-policy-rows{display:flex;flex-direction:column;}
body.page-macro.mx4-grid .mx5-policy-row{
  display:flex;justify-content:space-between;align-items:baseline;
  padding:9px 0;border-bottom:1px solid rgba(255,255,255,.06);font-size:13px;
}
body.page-macro.mx4-grid .mx5-policy-row:last-child{border-bottom:none;}
body.page-macro.mx4-grid .mx5-policy-key{
  color:var(--ink-3,rgba(255,255,255,.36));font-size:12px;
}
body.page-macro.mx4-grid .mx5-policy-val{
  color:var(--ink-1,rgba(255,255,255,.92));font-weight:600;text-align:right;
}

/* ── POLICY MONITOR face revamp (plf-*) ────────────────────────── */
body.page-macro.mx4-grid .plf-stance-row{display:flex;align-items:flex-start;gap:7px;font-size:12px;font-weight:600;color:var(--ink-1,rgba(255,255,255,.92));margin-bottom:10px;}
body.page-macro.mx4-grid .plf-spark-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;}
body.page-macro.mx4-grid .plf-spark-svg{width:120px;height:36px;flex-shrink:0;}
body.page-macro.mx4-grid .plf-spark-label{font-size:11px;color:var(--ink-2,rgba(255,255,255,.6));line-height:1.5;min-width:0;}
body.page-macro.mx4-grid .plf-chip-row{display:flex;flex-wrap:wrap;gap:5px;}
body.page-macro.mx4-grid .plf-chip{
  display:inline-flex;align-items:center;font-size:11px;font-weight:500;
  padding:2px 8px;border-radius:var(--mx5-radius-pill,20px);
  background:rgba(160,112,232,.10);border:1px solid rgba(160,112,232,.22);
  color:var(--ink-2,rgba(255,255,255,.6));
}
[data-theme="light"] .plf-chip{background:rgba(160,112,232,.08);border-color:rgba(160,112,232,.28);color:rgba(40,20,70,.72);}
/* Fed face: spark hero gets more presence + quiet "open" affordance bottom-right */
body.page-macro.mx4-grid #sx-v5-fed .plf-spark-svg{width:100%;height:44px;}
body.page-macro.mx4-grid #sx-v5-fed .plf-spark-row{margin-bottom:8px;}
body.page-macro.mx4-grid .plf-open{display:inline-flex;align-items:center;gap:4px;margin-top:12px;
  font:600 10.5px/1 var(--font-ui,inherit);letter-spacing:.04em;text-align:right;
  color:color-mix(in srgb,var(--isle-policy,#a070e8) 45%,var(--text));transition:opacity .18s ease,transform .18s ease;}
/* face-anatomy: each card's open chip carries its own isle colour + right-aligns */
body.page-macro.mx4-grid #sx-v5-fed .plf-open{color:color-mix(in srgb,var(--isle-policy,#a070e8) 45%,var(--text));align-self:flex-start;}
body.page-macro.mx4-grid #sx-v5-sentiment .mx5-card,
body.page-macro.mx4-grid #sx-v5-sector .mx5-card{display:flex;flex-direction:column;}
body.page-macro.mx4-grid .plf-open-sent{color:color-mix(in srgb,var(--isle-brief,#38c472) 45%,var(--text));align-self:flex-end;margin-left:auto;}
body.page-macro.mx4-grid .plf-open-sect{color:color-mix(in srgb,var(--isle-evidence,#20c0a0) 45%,var(--text));align-self:flex-end;margin-left:auto;}
body.page-macro.mx4-grid #sx-v5-fed:hover .plf-open,
body.page-macro.mx4-grid #sx-v5-fed:focus-within .plf-open,
body.page-macro.mx4-grid #sx-v5-sentiment:hover .plf-open,
body.page-macro.mx4-grid #sx-v5-sentiment:focus-within .plf-open,
body.page-macro.mx4-grid #sx-v5-sector:hover .plf-open,
body.page-macro.mx4-grid #sx-v5-sector:focus-within .plf-open{opacity:1;transform:translateX(2px);}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid #sx-v5-fed:hover .plf-open,
  body.page-macro.mx4-grid #sx-v5-sentiment:hover .plf-open,
  body.page-macro.mx4-grid #sx-v5-sector:hover .plf-open{transform:none;}
}
/* ── AI BRIEF (sx-aibrief-v2 face) ─────────────────────────────── */
body.page-macro.mx4-grid .mx5-ai-ticker-pills{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:11px;}
body.page-macro.mx4-grid .mx5-ai-ticker-pill{
  padding:4px 10px;border-radius:var(--mx5-radius-pill);
  background:var(--mx5-accent-dim);border:1px solid rgba(34,217,122,.28);
  font-size:11px;font-weight:700;color:var(--mx5-accent-ink);letter-spacing:.03em;
}
body.page-macro.mx4-grid .mx5-ai-body{
  font-size:13px;color:var(--ink-2,rgba(255,255,255,.6));
  line-height:1.55;margin-bottom:10px;
}
body.page-macro.mx4-grid .mx5-ai-note{
  font-size:11.5px;color:var(--ink-3,rgba(255,255,255,.36));
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.07);
  border-radius:8px;padding:8px 11px;line-height:1.45;margin-top:auto;
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-ai-note{
  background:rgba(0,0,0,.03);border-color:rgba(0,0,0,.06);
}

/* ── WHERE NEXT router (sx-deep-context face) — Wave E ─────────────
   Signal-ranked destination cards: eyebrow / destination kicker / state word /
   one plain line / arrow. Each card is a glass tile with a left rail tinted to the
   destination's isle colour. Degrades per-slot to the quiet link row below. */
body.page-macro.mx4-grid #sx-deep-context .sxg-face.mx5-card-face{
  flex-direction:column;align-items:stretch;gap:14px;
  padding:18px 20px 16px!important;min-height:unset;cursor:default;
}
body.page-macro.mx4-grid .wnx-eyebrow{
  font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.4));display:flex;align-items:center;gap:8px;
}
body.page-macro.mx4-grid .wnx-eyebrow::after{content:'';flex:1;height:1px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--isle-deep) 30%,transparent),transparent);}
body.page-macro.mx4-grid .wnx-cards{
  display:grid;grid-template-columns:repeat(3,1fr);gap:12px;
}
body.page-macro.mx4-grid .wnx-card{
  --wnx-c:var(--isle-deep,#4d8ef5);
  position:relative;display:flex;flex-direction:column;gap:5px;
  padding:14px 16px 14px 18px;border-radius:13px;
  background:color-mix(in srgb,var(--wnx-c) 5%,var(--mx5-glass-bg));
  border:1px solid color-mix(in srgb,var(--wnx-c) 16%,var(--mx5-glass-border));
  text-decoration:none;overflow:hidden;
  transition:transform .16s ease,border-color .2s ease,background .2s ease,box-shadow .25s ease;
}
body.page-macro.mx4-grid .wnx-card::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:var(--wnx-c);opacity:.85;border-radius:0 2px 2px 0;}
body.page-macro.mx4-grid .wnx-card:hover,
body.page-macro.mx4-grid .wnx-card:focus-visible{
  transform:translateY(-2px);outline:none;
  border-color:color-mix(in srgb,var(--wnx-c) 42%,transparent);
  background:color-mix(in srgb,var(--wnx-c) 9%,var(--mx5-glass-bg));
  box-shadow:0 10px 26px -14px color-mix(in srgb,var(--wnx-c) 60%,transparent);
}
body.page-macro.mx4-grid .wnx-kicker{
  font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:color-mix(in srgb,var(--wnx-c) 45%,var(--text));display:flex;align-items:center;gap:6px;
}
body.page-macro.mx4-grid .wnx-kicker svg{width:12px;height:12px;flex-shrink:0;}
body.page-macro.mx4-grid .wnx-state{
  font-size:15px;font-weight:800;line-height:1.2;color:var(--ink-1,rgba(255,255,255,.94));
  font-variant-numeric:tabular-nums;
}
body.page-macro.mx4-grid .wnx-line{
  font-size:11.5px;line-height:1.4;color:var(--ink-2,rgba(255,255,255,.6));
  margin-bottom:2px;
}
body.page-macro.mx4-grid .wnx-go{
  margin-top:auto;font-size:10.5px;font-weight:700;letter-spacing:.03em;
  /* accent mixed to text-grade in BOTH themes (the .68-alpha wash measured
     1.69–1.76:1 on light, 2.92–4.15 dark); hover keeps the lift + slide. */
  color:color-mix(in srgb,var(--wnx-c) 45%,var(--text));display:inline-flex;align-items:center;gap:4px;
  transition:opacity .18s ease,transform .18s ease;
}
body.page-macro.mx4-grid .wnx-card:hover .wnx-go,
body.page-macro.mx4-grid .wnx-card:focus-visible .wnx-go{opacity:1;transform:translateX(2px);}
/* quiet link row — nothing lost: all six destinations remain reachable */
body.page-macro.mx4-grid .mx5-deep-chips{display:flex;flex-wrap:wrap;gap:8px 6px;align-items:center;
  padding-top:12px;border-top:1px solid rgba(255,255,255,.05);}
[data-theme="light"] body.page-macro.mx4-grid .mx5-deep-chips{border-top-color:rgba(0,0,0,.05);}
body.page-macro.mx4-grid .mx5-deep-chips-lbl{
  font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3,rgba(255,255,255,.34));margin-right:2px;}
body.page-macro.mx4-grid .mx5-deep-chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:5px 11px;border-radius:var(--mx5-radius-pill);
  background:transparent;border:1px solid transparent;
  font-size:11.5px;font-weight:600;color:var(--ink-3,rgba(255,255,255,.45));
  text-decoration:none;
  transition:color .15s,border-color .15s,background .15s;
}
body.page-macro.mx4-grid .mx5-deep-chip:hover{
  color:var(--ink-1,rgba(255,255,255,.92));
  border-color:rgba(255,255,255,.14);background:rgba(255,255,255,.06);
}
[data-theme="light"] body.page-macro.mx4-grid .mx5-deep-chip:hover{
  border-color:rgba(0,0,0,.1);background:rgba(0,0,0,.04);}
@media(max-width:760px){
  body.page-macro.mx4-grid .wnx-cards{grid-template-columns:1fr;}
}
@media(prefers-reduced-motion:reduce){
  body.page-macro.mx4-grid .wnx-card,
  body.page-macro.mx4-grid .wnx-card:hover,
  body.page-macro.mx4-grid .wnx-card:focus-visible{transform:none;}
  body.page-macro.mx4-grid .wnx-card:hover .wnx-go,
  body.page-macro.mx4-grid .wnx-card:focus-visible .wnx-go{transform:none;}
}

/* ── Sparkline (idx_spark, static SVG) ─────────────────────────── */
/* spark colors match sign: .up or .dn set on the tile */
body.page-macro.mx4-grid .mx5-spark-up path.mx5-spark-area{fill:rgba(34,217,122,.10);}
body.page-macro.mx4-grid .mx5-spark-up path.mx5-spark-line,
body.page-macro.mx4-grid .mx5-spark-up polyline{stroke:#22d97a;}
body.page-macro.mx4-grid .mx5-spark-dn path.mx5-spark-area{fill:rgba(239,68,68,.08);}
body.page-macro.mx4-grid .mx5-spark-dn path.mx5-spark-line,
body.page-macro.mx4-grid .mx5-spark-dn polyline{stroke:#ef4444;}
/* zh 红涨绿跌 mirror — up-spark red, down-spark green (neon family preserved) */
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-up path.mx5-spark-area{fill:rgba(239,68,68,.10);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-up path.mx5-spark-line,
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-up polyline{stroke:#ef4444;}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-dn path.mx5-spark-area{fill:rgba(34,217,122,.08);}
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-dn path.mx5-spark-line,
html[data-lang="zh"] body.page-macro.mx4-grid .mx5-spark-dn polyline{stroke:#22d97a;}

/* ── 1.2 heatmap scorecard title hidden (eyebrow already names it) ── */
body.page-macro.mx4-grid #dlg-heatmap-scorecard .hm-sc-tit{display:none}

/* ── 1.3 expanded overlay de-chrome (body.page-macro scoping; no heatmap.js edit) ── */
body.page-macro .hm-ov .hm-bar{background:none;border:none;padding:0;border-radius:0}
body.page-macro .hm-ov .hm-tm-wrap{background:transparent;border:none;border-radius:0}

/* ── 2.5 mobile-only full heatmap link (hidden on wider screens) ── */
body.page-macro .mx5-dlg-hm-mobile-link{display:none;margin-top:10px;text-align:center;}
body.page-macro .mx5-dlg-hm-mobile-link a{font-size:13px;color:var(--ink-link, var(--link,#22d97a));font-weight:600;}
@media(max-width:700px){body.page-macro .mx5-dlg-hm-mobile-link{display:block;}}


/* light: bloom off (DESIGN_DOCTRINE §5.8) — a coloured glow behind text is a jewel on graphite
     and a stain on white; dark keeps every one of these). */
html[data-theme="light"] :is(
  body.page-macro.mx4-grid .mx5-big-score,
  body.page-macro.mx4-grid.ms-green-page .mx5-big-score, body.page-macro.mx4-grid .mx5-score-green .mx5-big-score,
  body.page-macro.mx4-grid.ms-yellow-page .mx5-big-score, body.page-macro.mx4-grid .mx5-score-yellow .mx5-big-score,
  body.page-macro.mx4-grid.ms-red-page .mx5-big-score, body.page-macro.mx4-grid .mx5-score-red .mx5-big-score
) { text-shadow:none; }
