/* ═══════════════════════════════════════════════════════════════════════════
   pages/chart.css — the sentiment chart (/chart/), the market mood map (/marketmood/)
   and the shared chart widget (also used by the topic page). Tokens only (gs2.css).
   Compare-mode line colours are a validated categorical set (violet / teal / gold),
   kept clear of the blue = bullish / orange = bearish meaning.
   ═══════════════════════════════════════════════════════════════════════════ */
:root { --gsc-c1: #4A3AA7; --gsc-c2: #0F8F80; --gsc-c3: #B07D00; }
@media (prefers-color-scheme: dark) { :root:not([data-theme=light]) { --gsc-c1: #8577E6; --gsc-c2: #26A190; --gsc-c3: #B08210; } }
:root[data-theme=dark] { --gsc-c1: #8577E6; --gsc-c2: #26A190; --gsc-c3: #B08210; }

.gsc-t-pos { color: var(--pos); } .gsc-t-neg { color: var(--neg); } .gsc-t-neu { color: var(--ink-2); }

/* ── hero ─────────────────────────────────────────────────────────────── */
.gsc { padding-top: var(--sp-5); }
.gsc-hero { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 380px); gap: var(--sp-6); align-items: end; padding-bottom: var(--sp-5); border-bottom: 1px solid var(--rule); margin-bottom: var(--sp-5); }
.gsc-hero__title { font-size: clamp(2.1rem, 1.4rem + 2.6vw, 3.4rem); line-height: 1.02; letter-spacing: -.02em; margin: 4px 0 var(--sp-3); }
.gsc-hero__dek { font: 400 var(--fs-lg)/1.5 var(--font-serif); color: var(--ink-2); max-width: 60ch; margin: 0; }
.gsc-now { background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius-lg); padding: var(--sp-4); display: flex; flex-direction: column; gap: 10px; box-shadow: var(--shadow-1); }
.gsc-now__top { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; flex-wrap: wrap; }
.gsc-now__label { font: 700 11px/1.2 var(--font-sans); letter-spacing: .09em; text-transform: uppercase; color: var(--muted); }
.gsc-now__chg { font: 600 var(--fs-xs)/1.2 var(--font-mono); white-space: nowrap; }
.gsc-now__chg .gs2-muted { font-family: var(--font-sans); font-weight: 500; }
.gsc-now__main { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.gsc-now__value { font: 700 3.25rem/1 var(--font-sans); letter-spacing: -.03em; color: var(--ink); }
.gsc-now__spark .gs2-spark { width: 100%; }
.gsc-now__row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin: 2px 0 0; padding-top: 10px; border-top: 1px solid var(--rule); }
.gsc-now__row > div { min-width: 0; }
.gsc-now__row dt { font: 600 10.5px/1.2 var(--font-sans); letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.gsc-now__row dd { margin: 4px 0 0; font-size: var(--fs-lg); font-weight: 600; }

/* ── chart card ───────────────────────────────────────────────────────── */
.gsc-card { background: var(--surface); border: 1px solid var(--rule); border-radius: var(--radius-lg); padding: var(--sp-4) var(--sp-4) var(--sp-3); box-shadow: var(--shadow-1); min-width: 0; }
.gsc-controls { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 14px; }
.gsc-seg { display: inline-flex; padding: 3px; gap: 2px; border-radius: var(--radius-pill); background: var(--surface-2); border: 1px solid var(--rule); max-width: 100%; overflow-x: auto; scrollbar-width: none; }
.gsc-seg::-webkit-scrollbar { display: none; }
.gsc-seg__btn { appearance: none; border: 0; background: none; min-height: 34px; min-width: 44px; padding: 0 12px; border-radius: var(--radius-pill); font: 600 var(--fs-xs)/1 var(--font-sans); letter-spacing: .04em; color: var(--ink-2); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; text-decoration: none; white-space: nowrap; }
.gsc-seg__btn:hover { color: var(--ink); text-decoration: none; }
.gsc-seg__btn[aria-pressed=true] { background: var(--ink); color: var(--on-ink); box-shadow: var(--shadow-1); }
.gsc-seg__btn:disabled { opacity: .4; cursor: not-allowed; }
@media (pointer: coarse) { .gsc-seg__btn { min-height: 40px; } }
.gsc-switch { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; font: 600 var(--fs-xs)/1 var(--font-sans); color: var(--ink-2); cursor: pointer; user-select: none; }
.gsc-switch input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.gsc-switch__track { position: relative; width: 34px; height: 20px; border-radius: 999px; background: var(--rule); transition: background .15s var(--ease); flex: none; }
.gsc-switch__track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 14px; height: 14px; border-radius: 50%; background: var(--surface); box-shadow: var(--shadow-1); transition: transform .15s var(--ease); }
.gsc-switch input:checked + .gsc-switch__track { background: var(--ink); }
.gsc-switch input:checked + .gsc-switch__track::after { transform: translateX(14px); }
.gsc-switch input:focus-visible + .gsc-switch__track { outline: 2px solid var(--focus); outline-offset: 2px; }
.gsc-tools { margin-left: auto; display: inline-flex; gap: 2px; }
.gsc-controls .gs2-btn--ghost[aria-pressed=true] { background: var(--hover); color: var(--ink); }

.gsc-sectors { margin: 12px calc(var(--sp-4) * -1) 0; padding: 0 var(--sp-4); border-top: 1px solid var(--rule); padding-top: 12px; }
.gsc-sectors__scroll { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: thin; padding-bottom: 4px; -webkit-mask-image: linear-gradient(90deg, #000 94%, transparent); mask-image: linear-gradient(90deg, #000 94%, transparent); }
@media (min-width: 1100px) { .gsc-sectors__scroll { flex-wrap: wrap; overflow: visible; -webkit-mask-image: none; mask-image: none; } }
.gsc-chip { flex: none; min-height: 32px; font-size: var(--fs-xs); font-weight: 600; }
.gsc-chip-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; opacity: .35; display: none; }
.gsc-chip[aria-pressed=true] .gsc-chip-dot { display: inline-block; opacity: 1; background: var(--on-ink); }
.gsc-chip[aria-pressed=true] .gsc-chip-dot.gsc-sw-c1 { background: var(--gsc-c1); box-shadow: 0 0 0 2px var(--on-ink); }
.gsc-chip[aria-pressed=true] .gsc-chip-dot.gsc-sw-c2 { background: var(--gsc-c2); box-shadow: 0 0 0 2px var(--on-ink); }
.gsc-chip[aria-pressed=true] .gsc-chip-dot.gsc-sw-c3 { background: var(--gsc-c3); box-shadow: 0 0 0 2px var(--on-ink); }
.gsc-sectors__hint { margin: 6px 0 0; font: 400 var(--fs-xs)/1.4 var(--font-sans); color: var(--muted); }

/* range summary */
.gsc-stats { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; margin: 14px 0 6px; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); min-height: 66px; }
.gsc-stat { display: flex; flex-direction: column; gap: 3px; padding: 10px 12px; min-width: 0; }
.gsc-stat + .gsc-stat { border-left: 1px solid var(--rule); }
.gsc-stat__label { font: 600 10.5px/1.2 var(--font-sans); letter-spacing: .07em; text-transform: uppercase; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.gsc-stat__value { font: 650 var(--fs-xl)/1.1 var(--font-sans); letter-spacing: -.01em; color: var(--ink); white-space: nowrap; }
.gsc-stat__sub { font: 500 var(--fs-xs)/1.2 var(--font-sans); color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* legend */
.gsc-legend { display: flex; flex-wrap: wrap; gap: 6px 16px; list-style: none; margin: 10px 0 4px; padding: 0; font: 500 var(--fs-xs)/1.3 var(--font-sans); color: var(--ink-2); }
.gsc-key { display: inline-flex; align-items: center; gap: 7px; }
.gsc-key__sw { flex: none; display: inline-block; }
.gsc-key__sw--line { width: 18px; height: 2px; border-radius: 2px; background: var(--ink-2); }
.gsc-key__sw--split { width: 18px; height: 3px; border-radius: 2px; background: linear-gradient(90deg, var(--pos) 0 50%, var(--neg) 50% 100%); }
.gsc-key__sw--bar { width: 9px; height: 11px; border-radius: 2px 2px 0 0; }
.gsc-sw-c1 { background: var(--gsc-c1) !important; } .gsc-sw-c2 { background: var(--gsc-c2) !important; } .gsc-sw-c3 { background: var(--gsc-c3) !important; }
.gsc-sw-faint { background: var(--muted) !important; height: 1px !important; opacity: .7; }
.gsc-sw-avg { background: var(--ink-2) !important; height: 1.5px !important; }
.gsc-sw-ref { background: var(--ink-2) !important; opacity: .55; }
.gsc-sw-spx { background: var(--ink-2) !important; }
.gsc-sw-pos { background: var(--pos) !important; } .gsc-sw-neg { background: var(--neg) !important; }
.gsc-sw-neu { background: var(--neu) !important; opacity: .45; }
.gsc-sw-split { background: linear-gradient(90deg, var(--pos) 0 50%, var(--neg) 50% 100%) !important; height: 3px !important; }

/* the chart widget */
.gsc-chart-host { position: relative; min-height: 360px; margin-top: 6px; }
.gsc-chart { position: relative; width: 100%; }
.gsc-chart__wrap { position: relative; width: 100%; outline: none; touch-action: pan-y; cursor: crosshair; border-radius: var(--radius); }
.gsc-chart__wrap:focus-visible { box-shadow: 0 0 0 2px var(--focus); }
.gsc-chart__base, .gsc-chart__over { position: absolute; left: 0; top: 0; display: block; }
.gsc-chart__over { pointer-events: none; }
.gsc-chart-host.is-loading .gsc-chart__wrap, .gsc-chart.is-loading .gsc-chart__wrap { opacity: .5; transition: opacity .2s; }
.gsc-note { min-height: 0; margin: 2px 0 0; font: 500 var(--fs-xs)/1.4 var(--font-sans); color: var(--muted); }
.gsc-note:empty { display: none; }
.gsc-foot { margin: 10px 0 0; padding-top: 10px; border-top: 1px solid var(--rule); font: 400 var(--fs-xs)/1.5 var(--font-sans); color: var(--muted); }
.gsc-table { margin-top: 12px; max-height: 460px; overflow: auto; }
.gsc-table th[scope=row] { font: 500 var(--fs-xs)/1.3 var(--font-sans); text-transform: none; letter-spacing: 0; color: var(--ink); background: none; position: static; white-space: nowrap; }

/* tooltip */
.gsc-tip { position: absolute; left: 0; top: 0; z-index: 5; width: 300px; max-width: calc(100% - 8px); pointer-events: none;
  background: var(--surface); color: var(--ink); border: 1px solid var(--rule); border-radius: var(--radius-lg); box-shadow: var(--shadow-2); }
.gsc-tip[hidden] { display: none; }
.gsc-tip__in { padding: 10px 12px; display: flex; flex-direction: column; gap: 5px; }
.gsc-tip__when { font: 700 11px/1.3 var(--font-sans); letter-spacing: .05em; text-transform: uppercase; color: var(--muted); margin-bottom: 2px; }
.gsc-tip__row { display: flex; align-items: center; gap: 8px; font: 500 var(--fs-xs)/1.3 var(--font-sans); color: var(--ink-2); flex-wrap: wrap; }
.gsc-tip__key { width: 14px; height: 2px; border-radius: 2px; flex: none; background: var(--ink-2); }
.gsc-tip__v { font: 600 var(--fs-sm)/1 var(--font-mono); color: var(--ink); font-variant-numeric: tabular-nums; min-width: 3.4em; }
.gsc-tip__row--main .gsc-tip__v { font-size: 1.15rem; }
.gsc-tip__row .gs2-badge { margin-left: auto; padding: 3px 6px; }
.gsc-tip__stories { font: 500 var(--fs-xs)/1.4 var(--font-sans); color: var(--muted); padding-top: 4px; border-top: 1px solid var(--rule); margin-top: 2px; }
.gsc-tip__heads { display: flex; flex-direction: column; gap: 6px; padding-top: 6px; border-top: 1px solid var(--rule); }
.gsc-tip__hd { font: 700 10px/1.2 var(--font-sans); letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.gsc-tip__head { display: grid; grid-template-columns: 2.6em minmax(0, 1fr); gap: 6px; align-items: baseline; }
.gsc-tip__hs { font: 600 11px/1.3 var(--font-mono); text-align: right; }
.gsc-tip__ht { font: 500 13px/1.3 var(--font-serif); color: var(--ink); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.gsc-tip__loading { font: 400 var(--fs-xs)/1.3 var(--font-sans); color: var(--muted); }
.gsc-tip__hint { font: 400 11px/1.3 var(--font-sans); color: var(--muted); }
@media (hover: none) { .gsc-tip__hint { display: none; } }

/* ── below the chart ─────────────────────────────────────────────────── */
.gsc-below { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 360px); gap: var(--sp-6); margin-top: var(--sp-7); align-items: start; }
.gsc-stories { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--sp-5); transition: opacity .2s; }
.gsc-stories.is-loading { opacity: .5; }
.gsc-stories > .gs2-empty { grid-column: 1 / -1; }
.gsc-stories__hd { display: flex; align-items: center; gap: 8px; font: 700 11px/1.2 var(--font-sans); letter-spacing: .09em; text-transform: uppercase; color: var(--ink); margin: 0 0 2px; padding-bottom: 8px; border-bottom: 1px solid var(--rule); }
.gsc-stories__hd::before { content: ""; width: 8px; height: 8px; border-radius: 50%; }
.gsc-stories__hd--neg::before { background: var(--neg); } .gsc-stories__hd--pos::before { background: var(--pos); }
.gsc-stories .gs2-card--row .gs2-frame { width: 104px; }
.gsc-stories .gs2-card__title { font-size: 1rem; }

.gsc-trend__list { list-style: none; margin: 0; padding: 0; }
.gsc-trend__item { display: grid; grid-template-columns: 26px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--rule); }
.gsc-trend__item:last-child { border-bottom: 0; }
.gsc-trend__rank { font-size: var(--fs-xs); color: var(--accent); font-weight: 600; }
.gsc-trend__main { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.gsc-trend__term { font: 650 var(--fs-md)/1.25 var(--font-serif); color: var(--ink); text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gsc-trend__term:hover { text-decoration: underline; }
.gsc-trend__term::after { content: ""; position: absolute; inset: 0; }
.gsc-trend__item { position: relative; }
.gsc-trend__item:hover { background: linear-gradient(90deg, transparent, var(--hover) 20%, var(--hover) 80%, transparent); }
.gsc-trend__meta { font: 500 var(--fs-xs)/1.2 var(--font-sans); color: var(--muted); }
.gsc-trend__vel { display: flex; align-items: center; gap: 6px; font-size: 11px; color: var(--muted); }
.gsc-trend__bar { position: relative; flex: 0 1 120px; height: 4px; border-radius: 2px; background: var(--surface-2); overflow: hidden; }
.gsc-trend__bar::after { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: var(--w, 0%); background: var(--ink-2); border-radius: 2px; }

.gsc-sectorsec { margin-top: var(--sp-7); }
.gsc-sectorsec .gs2-heat { grid-template-columns: repeat(auto-fill, minmax(min(170px, 100%), 1fr)); }

.gsc-method { margin-top: var(--sp-7); padding: var(--sp-5); background: var(--surface-2); border-radius: var(--radius-lg); }
.gsc-method__title { font-size: var(--fs-xl); margin-bottom: var(--sp-3); }
.gsc-method__grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-5); }
.gsc-method__grid p { margin: 0; font-size: var(--fs-sm); line-height: 1.6; color: var(--ink-2); }
.gsc-method__grid strong { color: var(--ink); display: block; margin-bottom: 2px; }

@media (max-width: 1100px) { .gsc-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); } .gsc-stat:nth-child(4) { border-left: 0; } .gsc-stat:nth-child(n+4) { border-top: 1px solid var(--rule); } }
@media (max-width: 960px) {
  .gsc-hero { grid-template-columns: minmax(0, 1fr); gap: var(--sp-4); align-items: start; }
  .gsc-below { grid-template-columns: minmax(0, 1fr); }
  .gsc-method__grid { grid-template-columns: minmax(0, 1fr); gap: var(--sp-3); }
}
@media (max-width: 640px) {
  .gsc { padding-top: var(--sp-4); }
  .gsc-card { padding: 12px 12px 10px; margin-inline: calc(var(--gutter) * -1 + 4px); border-radius: var(--radius); }
  .gsc-sectors { margin-inline: -12px; padding-inline: 12px; }
  .gsc-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gsc-stat:nth-child(n) { border-left: 0; border-top: 0; }
  .gsc-stat:nth-child(2n) { border-left: 1px solid var(--rule); }
  .gsc-stat:nth-child(n+3) { border-top: 1px solid var(--rule); }
  .gsc-stat:first-child { grid-column: 1 / -1; }
  .gsc-stat:first-child + .gsc-stat { border-left: 0; }
  .gsc-stat:nth-child(3) { border-left: 1px solid var(--rule); }
  .gsc-stat:nth-child(4) { border-left: 0; }
  .gsc-stat:nth-child(5) { border-left: 1px solid var(--rule); }
  .gsc-stories { grid-template-columns: minmax(0, 1fr); }
  .gsc-now__value { font-size: 2.6rem; }
  .gsc-controls .gs2-btn--ghost span { display: none; }
  .gsc-controls { gap: 8px; }
  .gsc-switch { margin-right: auto; }
  .gsc-tools { margin-left: 0; }
  .gsc-tip { width: min(300px, calc(100% - 8px)); }
  .gsc-hero__dek { font-size: var(--fs-md); }
}

/* ═══════════════════════ /marketmood/ ═══════════════════════ */
.gsm { padding-top: var(--sp-5); }
.gsm-tabs { margin: 0 0 var(--sp-3); }
.gsm-map { position: relative; width: 100%; aspect-ratio: 16 / 8.5; min-height: 380px; border-radius: var(--radius-lg); overflow: hidden; background: var(--surface-2); border: 1px solid var(--rule); }
.gsm-tile { position: absolute; display: flex; flex-direction: column; justify-content: flex-start; gap: 3px; padding: 8px 10px; box-sizing: border-box; overflow: hidden; text-decoration: none; color: var(--ink);
  background: color-mix(in srgb, var(--tone, var(--neu)) calc(var(--a, .1) * 46% + 6%), var(--surface)); border: 1px solid var(--surface); }
.gsm-tile--pos { --tone: var(--pos); } .gsm-tile--neg { --tone: var(--neg); } .gsm-tile--neu { --tone: var(--neu); --a: .12; }
.gsm-tile:hover, .gsm-tile:focus-visible { z-index: 2; outline: 2px solid var(--ink); outline-offset: -2px; text-decoration: none; color: var(--ink); }
.gsm-tile__label { font: 650 clamp(12px, calc(var(--fs, 1) * 15px), 26px)/1.1 var(--font-serif); letter-spacing: -.005em; overflow-wrap: anywhere; }
.gsm-tile__meta { font: 600 11px/1.2 var(--font-mono); color: var(--ink-2); white-space: nowrap; }
.gsm-tile--strong .gsm-tile__label, .gsm-tile--strong .gsm-tile__meta { color: #fff; }
.gsm-tile--tiny .gsm-tile__meta { display: none; }
.gsm-tile--tiny .gsm-tile__label { font-size: 11px; font-family: var(--font-sans); font-weight: 600; }
.gsm-scale { display: flex; align-items: center; gap: 10px; margin: 10px 0 0; font: 500 var(--fs-xs)/1 var(--font-sans); color: var(--muted); flex-wrap: wrap; }
.gsm-scale__bar { width: 200px; max-width: 50vw; height: 10px; border-radius: 5px; background: linear-gradient(90deg, var(--neg), color-mix(in srgb, var(--neg) 40%, var(--surface)), var(--surface-2), color-mix(in srgb, var(--pos) 40%, var(--surface)), var(--pos)); border: 1px solid var(--rule); }
.gsm-list { display: none; }
.gsm-board { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)); gap: 0 var(--sp-5); }
.gsm-row { display: grid; grid-template-columns: minmax(0, 1fr) 96px 64px; gap: 10px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--rule); position: relative; }
.gsm-row__name { font: 600 var(--fs-sm)/1.2 var(--font-sans); color: var(--ink); text-decoration: none; }
.gsm-row__name::after { content: ""; position: absolute; inset: 0; }
.gsm-row:hover .gsm-row__name { text-decoration: underline; }
.gsm-row__n { display: block; font: 500 var(--fs-xs)/1.2 var(--font-sans); color: var(--muted); margin-top: 2px; }
.gsm-row__v { font: 600 var(--fs-md)/1 var(--font-mono); text-align: right; }
.gsm-cta { display: flex; align-items: center; gap: var(--sp-4); flex-wrap: wrap; justify-content: space-between; margin-top: var(--sp-7); padding: var(--sp-5); border-radius: var(--radius-lg); background: var(--surface); border: 1px solid var(--rule); }
.gsm-cta h2 { margin: 0 0 4px; font-size: var(--fs-xl); }
.gsm-cta p { margin: 0; color: var(--ink-2); }
@media (max-width: 640px) {
  .gsm-map { aspect-ratio: auto; min-height: 0; height: auto; display: none; }
  .gsm-list { display: block; }
}
.gsm-list ol { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr); gap: 6px; }
.gsm-list li a { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--radius); text-decoration: none; color: var(--ink);
  background: color-mix(in srgb, var(--tone, var(--neu)) calc(var(--a, .1) * 40% + 4%), var(--surface)); border: 1px solid var(--rule); }
.gsm-list li a .gsm-tile__label { font-size: var(--fs-md); flex: 1 1 auto; }
.gsm-list .gsm-bar { flex: 0 0 60px; height: 6px; border-radius: 3px; background: var(--surface-2); position: relative; overflow: hidden; }
.gsm-list .gsm-bar::after { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: var(--w); background: var(--ink-2); }
@media (max-width: 640px) { .gsc-stories .gs2-list > .gs2-card:nth-child(n+5) { display: none; } }
.gsm-list li:nth-child(n+21) { display: none; }
