/* ==========================================================================
   theme-fixes.css — 2026-09-02
   theme.css の後に読み込む「取り残し」専用の修正層。

   どのページも dark/light の両方で実測し、
     ・dark なのに明るい面が残っている
     ・light なのに暗い面が残っている
     ・文字と背景のコントラストが 4.5:1（大きい字は 3:1）に届かない
   の3つだけを直す。レイアウトと配置には触らない。

   計測: Playwright で 36 ルート × 2 テーマ。結果は
   work/kabufu-ui-2026-09-02/sweep1.json。
   ここを消せば元の見た目に戻る（他のCSSは書き換えていない）。
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. 弱い文字色のトークンを引き上げる
       --kb-text-subtle は dark 3.95:1 / light 3.55:1 しかなく、
       フッターの見出し・件数・キャプションなど 140 箇所が基準未満だった。
   -------------------------------------------------------------------------- */
html[data-theme="dark"] {
  --kb-text-muted: #93a1b7;   /* 6.9:1 */
  --kb-text-subtle: #8290a6;  /* 5.4:1 */
}
html[data-theme="light"] {
  --kb-text-muted: #4f5e73;   /* 6.6:1 */
  --kb-text-subtle: #626f85;  /* 5.1:1 */
}
html[data-theme="dark"] .kb-related { --kb-related-subtle: #8290a6; --kb-related-muted: #93a1b7; }
html[data-theme="light"] .kb-related { --kb-related-subtle: #626f85; --kb-related-muted: #4f5e73; }

/* 関連ナビの見出し小文字は --kb-related-accent が解決されず罫線色になっていた
   （dark 1.89:1 / light 1.66:1）。アクセント色を直接与える。 */
html[data-theme] .kb-related-kicker { color: var(--kb-accent) !important; }

/* --------------------------------------------------------------------------
   2. 旧配色（slate 系の直書き）で沈む文字
   -------------------------------------------------------------------------- */
html[data-theme] :where(
  .sec-count, .ind-count, .summ-label, .sr-note, .dl-note,
  .kb-related-heading-note, .vt-row-cap, .fut-card-label
) { color: var(--kb-text-muted) !important; }

html[data-theme] :where(.sub, .note, .subtitle, .caption, .meta, .hint) { color: var(--kb-text-muted); }

/* 上げ下げの色は light では緑が明るすぎて 3.3:1 だった。 */
html[data-theme] :where(.fut-card-change, .chg, .change) .up,
html[data-theme] :where(.fut-card-change.up, .chg.up, .change.up, .is-up) { color: var(--kb-positive) !important; }
html[data-theme] :where(.fut-card-change, .chg, .change) .down,
html[data-theme] :where(.fut-card-change.down, .chg.down, .change.down, .is-down) { color: var(--kb-negative) !important; }

/* dark で旧リンク色 #2563eb（3.5:1）のまま残っている表内リンク。 */
html[data-theme="dark"] :where(td, th, .sub, small, .tk-list) a { color: var(--kb-accent-hover); }

/* dark で本文が #334155 のまま出ている表（為替フェアバリュー等、1.7:1）。 */
html[data-theme="dark"] :where(.fv-table, .fx-table, .ec-table) :where(td, th) { color: var(--kb-text) !important; }

/* --------------------------------------------------------------------------
   3. dark に取り残された明るい面
   -------------------------------------------------------------------------- */

/* コモディティETF NAV乖離 */
html[data-theme] .navd-note {
  background: var(--kb-surface-raised) !important;
  border-color: var(--kb-border) !important;
  color: var(--kb-text-muted) !important;
}
html[data-theme] .navd-note h2 { color: var(--kb-text) !important; }
html[data-theme] .navd-links {
  background: var(--kb-surface) !important;
  box-shadow: none !important;
  border: 1px solid var(--kb-border) !important;
}
html[data-theme] .navd-links span { color: var(--kb-text-muted) !important; }
html[data-theme] .navd-links a {
  border-color: var(--kb-border) !important;
  background: var(--kb-surface-raised) !important;
  color: var(--kb-text-muted) !important;
}
html[data-theme] .navd-links a:hover { border-color: var(--kb-accent) !important; color: var(--kb-text) !important; }

/* 上場廃止銘柄・シャープレシオ・確率ページの注記 */
html[data-theme] :where(.dl-note, .sr-note, .warn) {
  background: var(--kb-surface-raised) !important;
  border-color: var(--kb-border) !important;
}
html[data-theme] .dl-note {
  border-color: color-mix(in srgb, var(--kb-warning) 45%, var(--kb-border)) !important;
  background: var(--kb-chart-warning-fill) !important;
  color: var(--kb-warning) !important;
}

/* 日本インフレ研究: 明るいツールバーと、逆に light で黒いままのヒーロー */
html[data-theme] .main-area .toolbar {
  background: var(--kb-surface-raised) !important;
  border-color: var(--kb-border) !important;
}
html[data-theme] :where(section.hero, .method) {
  background: var(--kb-surface) !important;
  border: 1px solid var(--kb-border);
  color: var(--kb-text) !important;
}
html[data-theme] :where(section.hero, .method) :where(h1, h2, h3, b, strong) { color: var(--kb-text) !important; }
html[data-theme] :where(section.hero, .method) :where(p, span, small, div) { color: var(--kb-text-muted); }

/* --------------------------------------------------------------------------
   4. 投資家ノート（独自の緑系デザイン。dark でほぼ全面が白かった）
   -------------------------------------------------------------------------- */
html[data-theme="dark"] .kn {
  --kn-ink: var(--kb-text);
  --kn-muted: var(--kb-text-muted);
  --kn-line: var(--kb-border);
  --kn-accent: #4fd1a5;
  --kn-soft: rgba(79, 209, 165, .12);
  color: var(--kb-text);
}
html[data-theme="dark"] :where(
  .kn-themes, .kn-note, .kn-source, .kn-index, .kn-catalog, .kn-hero, .kn-card, .kn-toolbar
) {
  background: var(--kb-surface) !important;
  border-color: var(--kb-border) !important;
  color: var(--kb-text);
  box-shadow: none !important;
}
html[data-theme="dark"] .kn-note-head { background: var(--kb-surface-raised) !important; }
html[data-theme="dark"] :where(.kn-abstract, .kn-one, .kn-rule, .kn-warn, .kn-badge, .kn-tab) {
  background: var(--kb-surface-subtle) !important;
  border-color: var(--kb-border) !important;
  color: var(--kb-text-muted) !important;
}
html[data-theme="dark"] .kn-table th { background: var(--kb-surface-raised) !important; color: var(--kb-text-muted) !important; }
html[data-theme="dark"] .kn-table td { border-top-color: var(--kb-border) !important; }
html[data-theme="dark"] .kn-table b { color: var(--kb-text) !important; }
html[data-theme="dark"] .kn-table-wrap { border-color: var(--kb-border) !important; }
html[data-theme="dark"] :where(.kn-source h2, .kn-card h3, .kn-note h2, .kn-section-title) { color: var(--kb-text) !important; }
html[data-theme="dark"] :where(.kn-source p, .kn-card p, .kn-source-type, .kn-original-title, .kn-byline) { color: var(--kb-text-muted) !important; }
html[data-theme="dark"] .kn-timeline a { color: var(--kb-text-muted) !important; }
html[data-theme="dark"] .kn-timeline:before { background: var(--kb-border) !important; }

/* 逆に light では帯だけが黒く残っていた。両テーマとも面のトークンへ寄せる。 */
html[data-theme] :where(.kn-attribution, .kn-foot) {
  background: var(--kb-surface-raised) !important;
  border: 1px solid var(--kb-border);
  color: var(--kb-text-muted) !important;
}
html[data-theme] :where(.kn-attribution, .kn-foot) b { color: var(--kb-text) !important; }

/* --------------------------------------------------------------------------
   5. 静的ページ（プライバシー・利用規約など）の直書き
       ページ内 <style> の .legal-wrap 系がテーマより後に効いていた。
   -------------------------------------------------------------------------- */
html[data-theme] .legal-wrap :where(h1, h2, h3) { color: var(--kb-text) !important; }
html[data-theme] .legal-wrap :where(p, li, td) { color: var(--kb-text-muted) !important; }
html[data-theme] .legal-wrap h1 { border-bottom-color: var(--kb-border) !important; }
html[data-theme] .legal-wrap h2 { border-left-color: var(--kb-accent) !important; }
html[data-theme] .legal-wrap :where(th, td) { border-color: var(--kb-border) !important; }
html[data-theme] .legal-wrap th { background: var(--kb-surface-raised) !important; color: var(--kb-text) !important; }
html[data-theme] .legal-wrap .updated { color: var(--kb-text-subtle) !important; }
html[data-theme] .legal-wrap a { color: var(--kb-accent-hover) !important; }

/* --------------------------------------------------------------------------
   6. 縞模様・行ハイライトが白のまま残っている表
   -------------------------------------------------------------------------- */
html[data-theme="dark"] .main-area :where(tr, tbody tr)[style*="#f8fafc"],
html[data-theme="dark"] .main-area :where(tr, tbody tr)[style*="#F8FAFC"],
html[data-theme="dark"] .main-area :where(div, td)[style*="background:#f8fafc"],
html[data-theme="dark"] .main-area :where(div, td)[style*="background: #f8fafc"] {
  background: var(--kb-surface-raised) !important;
  color: var(--kb-text) !important;
}

/* --------------------------------------------------------------------------
   7. サイドバーのリンク色分けを廃止した名残
       rs-tone-* は 7 色に散っていた。既定の文字色へ寄せ、選択中だけを目立たせる。
   -------------------------------------------------------------------------- */
html[data-theme] :where(.rs-tone-muted, .rs-tone-info, .rs-tone-accent, .rs-tone-purple,
                        .rs-tone-teal, .rs-tone-green, .rs-tone-red, .rs-tone-cyan) {
  color: var(--kb-text-muted) !important;
  font-weight: 600;
}

/* --------------------------------------------------------------------------
   8. 静的ページの共有サイドバー
       これらのページは2カラムシェルを持たないので、共有サイドバーは
       ハンバーガー（≤900px）専用にする。デスクトップでは出さない。
       これを入れる前は #rightSidebar が無く、common.js が別内容の
       予備メニューを生成していた（同じサイトで2種類のメニューが出ていた）。
   -------------------------------------------------------------------------- */
@media (min-width: 901px) {
  body:where(.static-page, .guide-page, .login-page, .fx-page) > #rightSidebar { display: none !important; }
}


/* --------------------------------------------------------------------------
   9. 旧配色の直書きが残っている箇所（実測で拾った分）
       JS が inline style で色を書く箇所は属性セレクタで拾う。
       ダークで 1.0〜2.6:1 まで落ちて読めなくなっていたものを含む。
   -------------------------------------------------------------------------- */
html[data-theme="dark"] :is(
  [style*="color:#0f172a"], [style*="color: #0f172a"],
  [style*="color:#1e293b"], [style*="color: #1e293b"],
  [style*="color:#334155"], [style*="color: #334155"],
  [style*="color:#374151"], [style*="color: #374151"],
  [style*="color:#111827"], [style*="color: #111827"]
) { color: var(--kb-text) !important; }

html[data-theme] :is(
  [style*="color:#94a3b8"], [style*="color: #94a3b8"],
  [style*="color:#9ca3af"], [style*="color: #9ca3af"],
  [style*="color:#aeb9ca"], [style*="color: #aeb9ca"],
  [style*="color:#cbd5e1"], [style*="color: #cbd5e1"]
) { color: var(--kb-text-muted) !important; }

html[data-theme] :is([style*="color:#16a34a"], [style*="color:#22c55e"], [style*="color:#059669"]) { color: var(--kb-positive) !important; }
html[data-theme] :is([style*="color:#dc2626"], [style*="color:#ef4444"], [style*="color:#b91c1c"]) { color: var(--kb-negative) !important; }
html[data-theme] :is([style*="color:#d97706"], [style*="color:#f59e0b"], [style*="color:#ca8a04"]) { color: var(--kb-warning) !important; }

/* 上場廃止銘柄の数値がダークで 1.01:1（実質見えない）だった */
html[data-theme] :where(.dl-kpi, .dl-price, .dl-name, .dl-card) :where(strong, b) { color: var(--kb-text) !important; }
html[data-theme] :where(.dl-kpi, .dl-price) span { color: var(--kb-text-muted) !important; }

/* 入力ラベル・サイドバー銘柄行・投資家ノートの件数 */
html[data-theme] :where(.navd-field, .fv-field, .sr-field) label { color: var(--kb-text-muted) !important; }
html[data-theme] :where(.tk-metrics, .tk-sub) span { color: var(--kb-text-muted) !important; }
html[data-theme] :where(.kn-theme-count, .kn-count, .kn-time) { color: var(--kb-text-muted) !important; }

/* 上げ下げのクラス名は系統ごとにばらばら。まとめてトークンへ寄せる。 */
html[data-theme] :where(.pos, .plus, .up, .good, .ret-pos, .val-up) { color: var(--kb-positive) !important; }
html[data-theme] :where(.neg, .minus, .down, .bad, .ret-neg, .val-down) { color: var(--kb-negative) !important; }
html[data-theme] :where(.weak, .weak-weak, .caution) { color: var(--kb-warning) !important; }

/* --------------------------------------------------------------------------
   10. 実測で 3.0:1 を切っていた箇所（ページ固有クラス）
       いずれも slate 系（#94a3b8 / #64748b / #aeb9ca / #b0b8c4）や
       濃紺（#1e293b / #1e3a8a / #1d4ed8）の直書きが残っていたもの。
   -------------------------------------------------------------------------- */
html[data-theme] :where(
  .vt-stat, .cat-meta, .highlight-period, .hf-idx-grid, .hf-rank-chip,
  .opt-loading, .kn-source-type, .sec-meta, .fund-meta
) { color: var(--kb-text-muted) !important; }
html[data-theme] .vt-stat strong { color: var(--kb-text) !important; }

/* 上場廃止一覧はダークで 1.2〜1.7:1（ほぼ読めない） */
html[data-theme] td.dl-name { color: var(--kb-text) !important; }
html[data-theme] td.dl-code { color: var(--kb-accent-hover) !important; }
html[data-theme] :where(td.dl-date, td.dl-market, .dl-meta) { color: var(--kb-text-muted) !important; }

/* 本文の表に素の <a> が残っていて、ダークで旧リンク色のまま沈んでいた */
html[data-theme="dark"] .main-area a:not([class]) { color: var(--kb-accent-hover); }

/* 見出し・ラベルの薄さ（3.78:1）。トークンへ寄せる。 */
html[data-theme] .main-area :where(h4, legend) { color: var(--kb-text) !important; }

/* --------------------------------------------------------------------------
   11. 共通フッターが本文の横に並ぶページ
       footer.php の JS は .main-area の末尾へフッターを移す。
       ページ側が .main-area を flex 行にしていると、本文の隣に並んでしまう。
   -------------------------------------------------------------------------- */
.main-area:has(> .site-footer) { flex-wrap: wrap; }
.main-area > .site-footer { flex: 1 0 100%; width: 100%; }

/* 投資家ノートのテーマカードもダークで明るいままだった */
html[data-theme="dark"] :where(.kn-theme, .kn-theme-grid > *, .kn-index-btn, .kn-catalog-tools, .kn-note-head) {
  background: var(--kb-surface-raised) !important;
  border-color: var(--kb-border) !important;
  color: var(--kb-text) !important;
}
html[data-theme="dark"] :where(.kn-theme p, .kn-theme small, .kn-index-btn small) { color: var(--kb-text-muted) !important; }
html[data-theme="dark"] .kn-attribution > div {
  background: var(--kb-surface) !important;
  border: 1px solid var(--kb-border);
  color: var(--kb-text) !important;
}
html[data-theme="dark"] .kn-table th,
html[data-theme="dark"] .kn table th { background: var(--kb-surface-raised) !important; color: var(--kb-text-muted) !important; }

/* --------------------------------------------------------------------------
   12. グラデーション背景のヒーロー
       background-color が透明で background-image だけ暗いので、
       「面の色」を見る検査に掛からず、テーマの本文色が上に乗って
       ライトでは暗い緑に暗い字という状態のまま残っていた（実測 1.3:1）。
   -------------------------------------------------------------------------- */
html[data-theme="dark"] .kn-hero {
  background-image: linear-gradient(135deg, #10251e 0%, #1c4234 60%, #2b3f52 145%) !important;
}
html[data-theme="dark"] .kn-hero,
html[data-theme="dark"] .kn-hero :where(h1, h2, p, span, small, b, strong) { color: #eef6f1 !important; }

html[data-theme="light"] .kn-hero {
  background-image: linear-gradient(135deg, #eef6f1 0%, #e2efe8 58%, #f2eee2 145%) !important;
  border: 1px solid var(--kb-border);
}
html[data-theme="light"] .kn-hero,
html[data-theme="light"] .kn-hero :where(h1, h2, b, strong) { color: #10251e !important; }
html[data-theme="light"] .kn-hero :where(p, span, small) { color: #3d5b50 !important; }

/* 日本インフレ研究の注記（#fff5ee）がダークで白いまま残っていた */
html[data-theme] .stealth {
  background: var(--kb-chart-warning-fill) !important;
  border-color: color-mix(in srgb, var(--kb-warning) 40%, var(--kb-border)) !important;
  color: var(--kb-warning) !important;
}

/* ============================================================
 * 13. 共通チャートエンジン（kb-chart.js）用のトークン
 *     ツールチップと「強調色の上に載る文字色」はテーマ側に無かった。
 *     canvas も DOM も同じ値を読むので、必ずここで両テーマ分を定義する。
 * ==========================================================*/
html[data-theme="dark"] {
  --kb-accent-contrast: #071019;
  --kb-tooltip-bg: rgba(13, 19, 28, .95);
  --kb-tooltip-fg: #e8eefa;
  --kb-tooltip-border: rgba(124, 139, 161, .34);
  --kb-tooltip-head: #7cc7ff;
}
html[data-theme="light"] {
  --kb-accent-contrast: #ffffff;
  --kb-tooltip-bg: rgba(20, 28, 40, .96);
  --kb-tooltip-fg: #f2f6fc;
  --kb-tooltip-border: rgba(255, 255, 255, .18);
  --kb-tooltip-head: #9fd0ff;
}

/* 表示形式スイッチを .ch-toolbar へ差し込む際の間隔 */
.ch-toolbar .ch-type-seg { display: inline-flex; gap: 4px; flex-wrap: wrap; align-items: center; }

/* ============================================================
 * 14. ツールバーの「選択中」を1色に揃える
 *     theme.css は既に --kb-accent へ寄せているが、common.css の
 *     `.ch-int-btn.active`（詳細度 0,2,0）が `html[data-theme] :where(...)`
 *     （0,1,1）に勝っていたため効いていなかった。実測では1本のツールバーに
 *     紺・青・紫の3色が同時に出ていた。ここで詳細度を上げて一本化する。
 * ==========================================================*/
html[data-theme] .ch-int-btn.active,
html[data-theme] .ch-period-btn.active,
html[data-theme] .ch-price-btn.active,
html[data-theme] .unit-btn.active,
html[data-theme] .pg-btn.active,
html[data-theme] .pg-size-btn.active,
html[data-theme] .tbl-pg-btn.active,
html[data-theme] .fin-tab-btn.active,
html[data-theme] .page-tab.active {
  background: var(--kb-accent) !important;
  border-color: var(--kb-accent) !important;
  color: var(--kb-accent-contrast) !important;
  font-weight: 600;
}
html[data-theme] .fin-tab-btn.active,
html[data-theme] .page-tab.active { border-bottom-color: var(--kb-accent) !important; }

/* ============================================================
 * 15. 実測で残っていた低コントラスト（2026-09-02 第2回計測）
 *     36ページ×2テーマを Playwright で走らせ、WCAG 比が基準未満の
 *     文字を要素の祖先経路つきで採取して、出どころのある順に潰した。
 *     ページCSSを1枚ずつ直すより、ここに1か所置くほうが次に増えたときも追える。
 *
 *     ヒートマップのタイル文字（白 on 明るい緑・比 2.1〜3.1）はここに入れていない。
 *     `.hm-tile .tk/.chg` には text-shadow が掛かっており、計器がそれを見ていないため
 *     数値上だけ低く出る。実際の紙面では読める（finviz 系の標準的な処理）。
 * ==========================================================*/

/* 業種一覧・銘柄一覧の表本文（#475569 / #64748b がダークで 2.4〜3.8） */
html[data-theme] :where(table.ind-table, table.us-table, table.dl-table, table.ss-table, table.ptab) td {
  color: var(--kb-text);
}
html[data-theme] :where(table.ind-table, table.us-table) td:not(:first-child) { color: var(--kb-text-muted); }
html[data-theme] table.dl-table td.dl-price small { color: var(--kb-text-muted); }
html[data-theme] :where(table.ptab, table.us-table, table.ind-table, table.dl-table) a { color: var(--kb-accent-hover); }

/* 空売り残の増減。ダークで淡緑のセル地と暗緑の文字が残っていた */
html[data-theme] :where(.ss-up, td.ss-up) {
  color: var(--kb-positive) !important;
  background: color-mix(in srgb, var(--kb-positive) 12%, transparent);
}
html[data-theme] :where(.ss-dn, td.ss-dn) {
  color: var(--kb-negative) !important;
  background: color-mix(in srgb, var(--kb-negative) 12%, transparent);
}

/* 投資家ノートの一覧表の補足（#94a3b8 on 白 = 2.56） */
html[data-theme] table.kn-catalog-table td small { color: var(--kb-text-muted); }

/* 13F の索引リンクの副題（#94a3b8 on #f8fafc = 2.45） */
html[data-theme] .hf-idx-grid a span { color: var(--kb-text-muted); }

/* 経済指標トップのカード。面はテーマで暗くなるのに文字が #0f172a のままで比 1.01 だった */
html[data-theme] .cat-card h3 { color: var(--kb-text); }
html[data-theme] .cat-card p { color: var(--kb-text-muted); }
html[data-theme] .cat-card { background: var(--kb-surface); border-color: var(--kb-border); }
html[data-theme] .cat-card:hover { border-color: var(--kb-accent); }

/* ヒートマップの業種ラベル（#e2e8f0 on rgba(0,0,0,.55) = 4.0）。地を濃くして 7:1 まで上げる */
html[data-theme] .hm-sector-label { background: rgba(0, 0, 0, .72); color: #f4f7fb; }

/* オプション研究の表の弱い文字（--or-dim が暗面で 3.1）。1段だけ明るくする */
html[data-theme="dark"] .or { --or-dim: #7b8798; }

/* ------------------------------------------------------------
 * 15-b. 第2回の残り。ページ側の詳細度が高い（`.us-table td:nth-child(2)` など）
 *       ので、こちらも要素まで書いて上回らせる。
 * ----------------------------------------------------------*/

/* 業種ページ・米国株トップの銘柄リンク。#1a3a5c が暗面で比 1.54（ほぼ見えない） */
html[data-theme] :is(.sec-tk-grid, .us-oth-grid) a { color: var(--kb-text-muted); }
html[data-theme] :is(.sec-tk-grid, .us-oth-grid) a b { color: var(--kb-accent-hover); }
html[data-theme] :is(.sec-tk-grid, .us-oth-grid) a:hover { color: var(--kb-text); }

/* 銘柄一覧の表 */
html[data-theme] table.us-table td,
html[data-theme] table.us-table td:nth-child(2) { color: var(--kb-text-muted); }
html[data-theme] table.us-table td:first-child { color: var(--kb-text); }
html[data-theme] table.us-table tr:hover td { background: var(--kb-surface-subtle); }
html[data-theme] :is(table.ss-table, table.table-compact, table.opt-tbl) td { color: var(--kb-text); }

/* シャープレシオの設定パネル */
html[data-theme] :is(.sr-settings label, .sr-row.header span) { color: var(--kb-text-muted); }

/* 経済ダッシュボードの指標カード */
html[data-theme] .fred-card .fred-label { color: var(--kb-text-muted); }

/* 投資家ノートのテーマ件数 */
html[data-theme] .kn-theme-count strong { color: var(--kb-positive); }

/* オプション研究トップのカード内の副題・数値 */
html[data-theme] :is(.opt-card span, .opt-card a span, .opt-card h3 span) { color: var(--kb-text-muted); }
html[data-theme] :is(.opt-env-badge.opt-env-bad, .rg-lo25) {
  background: color-mix(in srgb, var(--kb-negative) 16%, transparent);
  color: var(--kb-negative);
}

/* 米国株詳細のファンド行のリンク */
html[data-theme] :is(td a, td div a, td div span) { color: inherit; }
html[data-theme] td a { color: var(--kb-accent-hover); }

/* 日本インフレ研究のカバレッジ欄（#f7fafb の白いカードがダークで残っていた） */
html[data-theme] .cov {
  background: var(--kb-surface-raised);
  border-left-color: var(--kb-positive);
  color: var(--kb-text);
}
html[data-theme] .cov span { color: var(--kb-text-muted); }

/* /fx/trade/ の下部フッターのリンク（比 4.2） */
html[data-theme] footer a { color: var(--kb-text-muted); }

/* ------------------------------------------------------------
 * 15-c. インライン style の色の取りこぼし
 *       9 節の一括掃き出しに #64748b / #475569 / #2563eb / #1e40af が
 *       入っていなかった。JS が組み立てる表がこれを直接書いており、
 *       /hk-china/ だけで 1,243 要素・/jp-stock/short-selling/ で 53 要素あった。
 *       CSS からは「宣言された値」を選べないので、属性の中身で拾うしかない。
 * ----------------------------------------------------------*/
html[data-theme] :is(
  [style*="color:#64748b"], [style*="color: #64748b"],
  [style*="color:#475569"], [style*="color: #475569"],
  [style*="color:#6b7280"], [style*="color: #6b7280"],
  [style*="color:#71829a"], [style*="color: #71829a"]
) { color: var(--kb-text-muted) !important; }

html[data-theme="dark"] :is(
  [style*="color:#2563eb"], [style*="color: #2563eb"],
  [style*="color:#1e40af"], [style*="color: #1e40af"],
  [style*="color:#1d4ed8"], [style*="color: #1d4ed8"],
  [style*="color:#3b82f6"], [style*="color: #3b82f6"]
) { color: var(--kb-accent-hover) !important; }

/* 同じ理由で、CSS 側に残っていた同値の宣言も拾えるところは拾う */
html[data-theme] :is(table.ptab, table.opt-tbl, table.ss-table) a { color: var(--kb-accent-hover); }
html[data-theme] :is(.ss-card .lbl, .ss-card .val) { color: var(--kb-text); }
html[data-theme] .ss-card .lbl { color: var(--kb-text-muted); }
html[data-theme] .or-table td.num { color: var(--kb-text); }
html[data-theme] .us-oth details > summary,
html[data-theme] .sec-tk details > summary { color: var(--kb-accent-hover); }

/* ------------------------------------------------------------
 * 15-d. 最後の残り。行の強調に淡い色地を直接指定している箇所が、
 *       ダークで「明るい帯に明るい文字」になっていた（比 1.04〜1.12）。
 *       地の側を色の混合に置き換える。文字色は触らない。
 * ----------------------------------------------------------*/
html[data-theme] :is(
  [style*="background:#ecfdf5"], [style*="background: #ecfdf5"],
  [style*="background:#dcfce7"], [style*="background: #dcfce7"],
  [style*="background:#d1fae5"], [style*="background: #d1fae5"]
) { background: color-mix(in srgb, var(--kb-positive) 15%, transparent) !important; }

html[data-theme] :is(
  [style*="background:#fee2e2"], [style*="background: #fee2e2"],
  [style*="background:#fef2f2"], [style*="background: #fef2f2"],
  [style*="background:#ffe4e6"], [style*="background: #ffe4e6"]
) { background: color-mix(in srgb, var(--kb-negative) 15%, transparent) !important; }

html[data-theme] :is(
  [style*="background:#fef3c7"], [style*="background: #fef3c7"],
  [style*="background:#fffbeb"], [style*="background: #fffbeb"]
) { background: color-mix(in srgb, var(--kb-warning) 15%, transparent) !important; }

html[data-theme] :is(.ss-flash.ok, .rg-lo25, .opt-env-badge.opt-env-bad, .rg-hi25) {
  background: color-mix(in srgb, currentColor 14%, transparent);
}

/* 日本インフレ研究。白いカード（#f7fafb）と弱いラベルがダークで残っていた */
html[data-theme] :is(.result, .card.metric, .field) {
  background: var(--kb-surface-raised);
  color: var(--kb-text);
}
html[data-theme] :is(.card.metric label, .field label, .card.metric small) { color: var(--kb-text-muted); }

/* 各所の副題 */
html[data-theme] :is(.ss-card .sub, .highlight-card .highlight-sub, .navd-card .k) { color: var(--kb-text-muted); }

/* 強調色の上に載る文字。--kb-accent は白文字だと 3.2:1 しか出ない。
   ダークでは濃い側、ライトでは白を使う（--kb-accent-contrast）。 */
html[data-theme] :is(
  .vt-mode.active, .vt-metric.active, .or-seg button.is-on,
  .or-subnav a.is-on, .kbc-seg-btn.active, .hz.active
) { color: var(--kb-accent-contrast) !important; }

/* オプション研究の弱い数値（--or-muted が暗面で 3.1／明面で 3.45） */
html[data-theme="dark"] .or { --or-muted: #93a0b2; }
html[data-theme="light"] .or { --or-muted: #4d5b6b; }

/* ヒートマップの業種サマリ表のオレンジ（白地で 2.8） */
html[data-theme] #sectorSummaryTable td[style*="color"] { color: var(--kb-text) !important; }

/* --or-* は or.css が `.or` に付けているが、`.or` を祖先に持たない
   組み方のページもある（strategy は .or-wrap から始まる）。根でも同じ値にしておく。 */
html[data-theme="dark"] { --or-dim: #7b8798; --or-muted: #93a0b2; }
html[data-theme="light"] { --or-dim: #5f6e7d; --or-muted: #4d5b6b; }

/* ==========================================================
 * 16. 実測の残り 137 件（contrast7.json）。
 *     並べ替えて上から潰す。数字は WCAG AA（本文 4.5 / 大 3.0）
 *     で実測した比。「見えない文字」を先に、色味の弱さを後に。
 * ==========================================================*/

/* ----------------------------------------------------------
 * 16-a. 強調色で塗ったボタンの上の白文字。
 *   白 on --kb-accent(#4c8dff) は 3.2 しか出ない。ボタンの地は
 *   変えず、文字を --kb-accent-contrast へ寄せる
 *   （暗面 #071019 で 5.98 / 明面は白で 5.69）。
 *   ページ側が color:#fff を直接書いているので !important が要る。
 * ----------------------------------------------------------*/
html[data-theme] :is(
  .sb-view-btn.active, .sb-sort-btn.active, .det-nav-tab.active,
  .btn.btn-primary, .quick-btn.active, .hm-tab.active,
  .vt-fund-metric.active, .vt-scale.active, .vt-period.active,
  .pb-tab.active, .opt-tabbtn.active, .opt-subnav a.is-on,
  .sec-btn.active, .login-submit, .ss-tab.active
) { color: var(--kb-accent-contrast) !important; }

/* 選択中ボタンの「中の添え字」は親の色を継がず、弱色のまま残る。
   強調色の地の上では比 1.01〜1.22 まで落ちていた。 */
html[data-theme] :is(
  .hz.active, .pb-tab.active, .sec-btn.active, .quick-btn.active,
  .btn.btn-primary, .hm-tab.active, .sb-view-btn.active
) :is(small, span, b, i, .sec-count) { color: inherit !important; }

/* ----------------------------------------------------------
 * 16-b. 完全に読めなくなっていた文字（比 1.0〜1.2）。
 *   ページCSSが暗色の見出し色を直書きしていて、ダークで
 *   「黒地に黒」になっていた。
 * ----------------------------------------------------------*/
html[data-theme] :is(
  .ss-panel h2, .sr-card h2, .navd-card .v, .fin-section-title,
  .login-tabs button.is-active
) { color: var(--kb-text) !important; }

/* 淡い色地で行を強調している表。ページCSS側の指定はインライン属性
   セレクタ（15-d）では拾えないので、地の側を混合に置き換える。 */
html[data-theme] .ptab tr.now td {
  background: color-mix(in srgb, var(--kb-negative) 15%, transparent) !important;
}
html[data-theme] :is(
  [style*="background:#fef9c3"], [style*="background: #fef9c3"],
  [style*="background:#fefce8"], [style*="background: #fefce8"],
  [style*="background:#fff7ed"], [style*="background: #fff7ed"]
) { background: color-mix(in srgb, var(--kb-warning) 15%, transparent) !important; }

/* ログイン画面。ヘッダーのログインボタンは暗いトップバー前提で
   #eaf8ff を直書きしていたため、ライトで 1.07（ほぼ不可視）だった。 */
html[data-theme="light"] .login-page .auth-login-btn {
  background: var(--kb-accent);
  border-color: var(--kb-accent);
  color: #fff;
}
html[data-theme] .login-card-heading > span { color: var(--kb-info) !important; }
html[data-theme] .login-divider { color: var(--kb-text-muted); }
html[data-theme] .login-forgot { color: var(--kb-text-muted); }
html[data-theme] .login-tabs button { color: var(--kb-text-muted); }

/* ----------------------------------------------------------
 * 16-c. 弱色（#94a3b8 / #64748b / #475569）の直書きが残っていた所。
 *   クラス指定なので 15-c のインライン掃きでは拾えない。
 * ----------------------------------------------------------*/
html[data-theme] :is(
  .navd-card .s, .fred-date, .imf-note, .dl-none, .dl-count,
  .sr-ticker-name, .hf-idx-lead, .sb-tab, .kn-index-btn small,
  .kn-catalog-head p, .kn-themes-head p, .vt-profitability:not(.active),
  .vt-profitability-tabs > span, .sec-tk-lead
) { color: var(--kb-text-muted) !important; }

/* 動画ノート。緑がかった弱色（#526159 / #396b59 / #5a826f）が
   ダークで 2.7 前後だった。見出しは本文色、副文は弱色へ。 */
html[data-theme] .kn-attribution :is(span, div, p) { color: var(--kb-text-muted); }
html[data-theme] :is(.kn-index h2, .kn-theme-grid summary, .kn-themes h2) { color: var(--kb-text); }
html[data-theme] .kn-section-kicker { color: var(--kb-info); }
html[data-theme="dark"] .kn-source-top strong { color: var(--kb-accent-hover); }

/* 為替フェアバリュー。割高/割安のラベルが暗い赤・暗い灰のまま。 */
html[data-theme="dark"] :is(.fx-card-sub .rich, .fx-card-sub .cheap) { color: var(--kb-negative); }
html[data-theme="dark"] .fx-card-sub .neutral { color: var(--kb-text-muted); }

/* インフレ研究。ティール（#5ad4c7 / #55d0c2）が白地で 1.8。
   「+54.4%」の朱色も 3.75。トークンの情報色・負色へ寄せる。 */
html[data-theme] .ir :is(.hero em, .kick, .prodtop .kick) { color: var(--kb-info) !important; }
html[data-theme] .ir .prodtop strong { color: var(--kb-negative); }
html[data-theme] .ir :is(.stealth b, .stealth strong) { color: var(--kb-text); }

/* バリュエーション推移の橙（明面 4.29）。 */
html[data-theme="light"] .vt-symbol-value.orange strong { color: #8f4c00; }

/* ヘッジファンド一覧の details 見出し（#2563eb が暗面で 3.48）。 */
html[data-theme="dark"] :is(.hf-idx summary, .m-val.blue, .sb-tab.active) {
  color: var(--kb-accent-hover) !important;
}

/* 米国ETFのモバイル用ナビ。淡い青チップ（#eff6ff）が地のまま
   残り、その上の淡い青文字が 2.21 だった。 */
html[data-theme] .sb-mobile-nav a {
  background: var(--kb-surface-subtle) !important;
  color: var(--kb-text) !important;
}

/* 米国ヒートマップの業種サマリ表（橙 #f97316 が白地で 2.8）。 */
html[data-theme] #usSectorSummary td[style*="color"] { color: var(--kb-text) !important; }

/* /lp/ は theme-fixes.css を読まない独立ページ。
   タグと脚注の色は lp/index.php 側で直した。 */

/* ==========================================================
 * 17. 2巡目の実測（contrast8.json / 44件）で残った分。
 * ==========================================================*/

/* 明面の緑が淡い色地の上で 4.28〜4.45 と少し足りない。
   トークンを一段濃くする（白地で 4.97 → 6.04）。
   系列色としても使われるが、濃くなる方向なので面との分離は悪くならない。 */
html[data-theme="light"] { --kb-positive: #00785d; --kb-chart-series-2: #00785d; }
/* 2026-09-16: #07705a は白地 6.04 を満たす代わりに彩度が 0.092 しかなく、
   系列色として見ると「灰色に見える」側の帯外だった（dataviz の彩度下限 0.10）。
   色相170のまま両立できる一番濃い点が #00785d（白地 5.46・淡色地 5.22・彩度 0.101）。
   下げたのは比の方だが、元の不足（4.28〜4.45）よりは上で、AAの4.5も超えている。 */
/* 系列色2も同じ値にする。オプション研究の表は「系列2の色」を
   インライン style で書き出しているので、片方だけ濃くすると
   表の緑だけ 4.28 のまま取り残される。二つの倍率は同じ証拠から読む。 */

/* オプション研究の弱色。暗面で 4.31 だった。 */
html[data-theme="dark"] { --or-dim: #8895a9; }
html[data-theme="dark"] .or { --or-dim: #8895a9; }

/* .or-badge は `.or` を祖先に持たないページ（sentiment）で
   --or-muted が解決できず、本文色（明るい灰）をそのまま継いでいた。 */
html[data-theme] .or-badge {
  color: var(--kb-text-muted) !important;
  border-color: var(--kb-border);
  background: var(--kb-surface-subtle);
}

/* シャープレシオの解説カード。見出し #1d4ed8（2.68）、本文 #334155（1.74）、
   強調 #0f172a（1.01）が全部そのままだった。 */
html[data-theme] .sr-about h3 { color: var(--kb-accent-hover) !important; }
html[data-theme] .sr-about :is(p, b, li, td, th) { color: var(--kb-text) !important; }

/* インフレ研究。結果カードの見出しと、強弱を表す太字。 */
html[data-theme] .result small { color: var(--kb-text-muted) !important; }
html[data-theme] .weak-critical   { color: var(--kb-negative) !important; }
html[data-theme] .weak-developing { color: var(--kb-warning) !important; }
html[data-theme] .weak-strong     { color: var(--kb-positive) !important; }

/* 淡い色地の上の注記（明面で 3.84）。地の色が意味を持つので文字は本文色にする。 */
html[data-theme] :is(.dl-note, .stealth b, .stealth strong) { color: var(--kb-text) !important; }

/* 銘柄概要ページの導入文（暗面で 2.53）。 */
html[data-theme] .kbf-lede { color: var(--kb-text-muted) !important; }

/* 為替の空リスト表示（明面で 4.27）。 */
html[data-theme] :is(.list.empty, .fx-list .empty) { color: var(--kb-text-muted) !important; }

/* 16-a の積み残し。強調色の地に載る文字と、その中の絵文字・添え字。 */
html[data-theme] :is(.fut-tab.active, .fx-head #reload, #reload) {
  color: var(--kb-accent-contrast) !important;
}
html[data-theme] .fut-tab.active :is(span, small, b, i) { color: inherit !important; }

/* ------------------------------------------------------------
 * 17. 廃止銘柄アーカイブのジャンル札（.dl-badge）
 *     色は PHP のジャンル表からインライン style で書き出されるので、
 *     テーマに追随しない。地は同じ色の 12% なので、判定は面の色に対して行う。
 *     暗面（#101722）に対する実測:
 *       #4f46e5 完全子会社化 …… 2.86
 *       #be123c 上場維持基準の不適合 …… 2.86
 *     他の10色は 3.16〜7.01 で通る。明面は #94a3b8「その他」だけが 2.56 だが、
 *     いまはその区分の行が無く画面に出ていない（出たときのために入れておく）。
 * ----------------------------------------------------------*/
html[data-theme="dark"] .dl-badge[style*="#4f46e5"] { color: #a5a0ff !important; }
html[data-theme="dark"] .dl-badge[style*="#be123c"] { color: #ff8095 !important; }
html[data-theme="light"] .dl-badge[style*="#94a3b8"] { color: #5b6675 !important; }
/* 米国版（/us-stock/delisted/）は同じ札をクラスで書いている。
   暗面で落ちるのは exchange_action（#be123c・2.86）の1つだけ。 */
html[data-theme="dark"] .dl-cat-exchange_action { color: #ff8095 !important; }

/* 注意書きの箱（.dl-note / .dl-caution）。淡い黄の地・濃い茶の文字で固定されており、
   暗面では紙が1枚だけ明るく残る島になる。既に 16 節で .dl-note の文字だけ本文色に
   していたが、地を変えていなかったので暗面では明るい地に明るい文字になる作りだった。
   地と縁を警告色の混合へ置き換え、太字だけ警告色で残す。 */
html[data-theme="dark"] :is(.dl-note, .dl-caution) {
  background: color-mix(in srgb, var(--kb-warning) 12%, var(--kb-surface)) !important;
  border-color: color-mix(in srgb, var(--kb-warning) 38%, transparent) !important;
  color: var(--kb-text) !important;
}
html[data-theme="dark"] :is(.dl-note, .dl-caution) b { color: var(--kb-warning) !important; }

/* ==========================================================================
   21. 所有者ビューの銘柄ページ（/jp-stock/<code>/ の財務・詳細財務・配当・四季報）
       2026-09-10 追加。

       ログインしないと HTML にも出ないセクションなので、これまでの掃引
       （公開50ルート×2テーマ）は一度も測っていなかった。ローカル検証台
       （認証を迂回する経路は本番に作らず、判定関数だけ差し替えた php -S）で
       8001 を dark 実測したところ、明るい面 24種・低コントラスト 675件あった。

       四季報セクション（#sec-sk）の CSS は sk-section.js が実行時に <style> を
       head へ差し込むので、このファイルより後ろに来る。同じ詳細度では負けるため
       !important が要る（theme.css の #sec-sk ブロックが同じ理由で付けている）。
   ========================================================================== */

/* --- 21-1. 四季報セクションの注記の箱。地が #fcfdfe 固定で、暗面のなかに
   白い紙が9枚残っていた（利用者の指摘そのもの）。文字は --ink3 のままなので
   白地に薄灰＝3.18:1 でもあった。 --- */
html[data-theme="dark"] #sec-sk .sk-note {
  background: var(--kb-surface-subtle) !important;
  color: var(--kb-text-muted) !important;
  border-top-color: var(--kb-border) !important;
}
html[data-theme="dark"] #sec-sk .sk-note b { color: var(--kb-text) !important; }

/* --- 21-2. 四季報の切替ボタン（background:#fff 固定）。選択中だけ accent で
   塗られ、非選択の5個が白いままだった。 --- */
html[data-theme="dark"] #sec-sk .sk-seg { border-color: var(--kb-border) !important; }
html[data-theme="dark"] #sec-sk .sk-seg button {
  background: var(--kb-surface-raised) !important;
  color: var(--kb-text-muted) !important;
}
html[data-theme="dark"] #sec-sk .sk-seg button + button { border-left-color: var(--kb-border) !important; }
html[data-theme="dark"] #sec-sk .sk-seg button.on { color: #fff !important; }

/* --- 21-3. 四季報の直書きの文字色。暗面で沈んでいた分だけ引き上げる。
   OCR 注記 #be123c は 2.67:1、負値 #c2410c は 3.02:1 だった。 --- */
html[data-theme="dark"] #sec-sk .sk-tab i.ocr { color: #ff8aa3 !important; }
html[data-theme="dark"] #sec-sk .sk-neg { color: var(--kb-negative) !important; }

/* --- 21-4. 四季報のインライン style で決まる2色。インラインは !important でしか
   上書きできないので、変数にして sk-section.js 側から参照させている
   （--sk-fc = 予想値の青 / --sk-track = 棒グラフの溝）。既定値は sk-section.js。 --- */
html[data-theme="dark"] #sec-sk { --sk-fc: #8fbaf0; --sk-track: #1a2433; }

/* --- 21-5. 共通クラスの直書き（common.css）。所有者ビューで初めて画面に出た。
   .g/.r は詳細財務の増減記号で、この1ページだけで 424 か所ある。 --- */
html[data-theme="dark"] .g { color: var(--kb-positive); }
html[data-theme="dark"] .r { color: var(--kb-negative); }
html[data-theme="dark"] table.ft td:first-child { color: var(--kb-text); }
html[data-theme="dark"] .help-tip {
  background: var(--kb-surface-subtle);
  color: var(--kb-text-muted);
  border: 1px solid var(--kb-border);
}
html[data-theme="dark"] .help-tip:hover {
  background: var(--kb-border-strong);
  color: var(--kb-text);
}

/* --- 21-6. overview.php のページ内 <style> にある直書き。 --- */
html[data-theme="dark"] .radar-axis-label { color: var(--kb-text-muted); }
html[data-theme="dark"] .gauge-label { color: var(--kb-text-muted); }
html[data-theme="dark"] .va-card h3 { color: var(--kb-text-muted); }
/* 読み込み中の枠。実データが来るまで白い箱が出る。 */
html[data-theme="dark"] .sec-lazy {
  background: var(--kb-surface);
  color: var(--kb-text-subtle);
  box-shadow: none;
}
/* 品質警告の帯（淡黄の地・濃茶の文字で固定）。8001 では出ないが同じ作り。 */
html[data-theme="dark"] .quality-warn {
  background: color-mix(in srgb, var(--kb-warning) 12%, var(--kb-surface)) !important;
  border-left-color: var(--kb-warning) !important;
  color: var(--kb-text) !important;
}

/* --- 21-7. 詳細財務の「単体」札。dark 用の指定は sections-merged.css に既にあるが
   （html[data-theme="dark"] .if-basis-tag）、同じファイルの
   .if-detail-table thead th small.if-basis-tag のほうが詳細度で勝っていて
   一度も効いていなかった。暗面に橙の札が8枚残る。詳細度を上げて通す。 --- */
html[data-theme="dark"] .if-detail-table thead th small.if-basis-tag {
  background: #8a3b12;
  color: #ffe1c2;
}

/* --- 21-8. 四季報のインライン style で決まる残りの色。sk-section.js 側を
   var(--…, 既定値) にしてあるので、暗面の値だけここで与える。
   明面は既定値のまま（このファイルは触らない）。 --- */
html[data-theme="dark"] #sec-sk {
  --sk-up: #7cb3f5;                      /* 実績が予想を上回った側。#2a78d6 は 4.07:1 */
  --sk-down: #ff8a8a;                    /* 下回った側。#e34948 は 4.55:1 で辛うじて通るが揃える */
  --sk-mid: var(--kb-border-strong);
  --sk-lbl: var(--kb-text-muted);        /* 棒の行ラベル。#64748b は 3.78:1 */
  --sk-tick: var(--kb-border-strong);
}

/* --- 21-9. 四季報の札と切替の文字。地は theme.css が暗くしていたが、
   文字色が明面用のまま残っていた（.bdg-md の紫は 2.10:1）。 --- */
html[data-theme="dark"] #sec-sk :where(.bdg-sk, .bdg-co, .bdg-ac, .bdg-md) { color: var(--kb-text) !important; }
html[data-theme="dark"] #sec-sk .sk-tab.on em { color: #fff !important; }
html[data-theme="dark"] #sec-sk .sk-tab.sum {
  background: var(--kb-surface-raised) !important;
  border-color: var(--kb-accent) !important;
  color: var(--kb-accent-hover) !important;
}

/* --- 21-10. チェックボックスが白い箱のまま残る。
   html に color-scheme:dark は付いているが、.opt-check が background:#fff を
   直に当てているので UA の暗色描画に戻らない。 --- */
html[data-theme="dark"] .opt-check input[type="checkbox"] {
  background: var(--kb-surface-raised);
  border-color: var(--kb-border-strong);
  accent-color: var(--kb-accent);
}

/* --- 21-11. 銘柄ページの凡例。#64748b で 3.78:1。 --- */
html[data-theme="dark"] :where(.leg-rev, .leg-ni, .leg-op) { color: var(--kb-text-muted); }

/* ==========================================================================
   22. 所有者だけが見えるページの掃引（2026-09-10）

       21節と同じ検証台で、所有者限定の 22 ルートを dark で測った。
       明るい面 2,500 / 低コントラスト 2,300 のうち、ほぼ全部が
       次の5ページに集まっていた。原因はどれも「そのページだけが持つ
       ライト前提の直書き」で、共通トークンを見ていない。

         /jp-stock/employee-info/    面1250 字1198
         /jp-stock/index-synthesis/  面 664 字 465
         /jp-stock/analysis/         面 466 字 396
         /jp-stock/eps-cagr/         面 140 字 140
         /jp-stock/research/         面   0 字  69
   ========================================================================== */

/* --- 22-1. 表の縞。`tr:nth-child(even) td{background:#fafbfd}` が暗面でも
   そのまま出るので、行の地が白・文字が白になり 1.14:1（実質見えない）。
   6節は inline style の #f8fafc しか見ていなかった。 --- */
html[data-theme="dark"] :is(.emp-table, .scr-table) tbody tr:nth-child(even) > td {
  background: var(--kb-surface-raised);
}
html[data-theme="dark"] .mcs-table tr.topic-head > td {
  background: var(--kb-surface-raised);
  color: var(--kb-text);
  border-top-color: var(--kb-border-strong);
}

/* --- 22-2. EPS成長率の札。地は淡い緑の直書き、文字はトークンなので
   暗面だと淡緑に淡緑で 1.85:1。地を文字色の混合にすると両テーマで通る。 --- */
html[data-theme="dark"] .cagr-badge {
  background: color-mix(in srgb, currentColor 18%, var(--kb-surface));
}

/* --- 22-3. 指数合成のページは独自パレット（--syn-*）を持っていて、
   値がライト用の1組しかない。暗面用の値をここで与える。
   これだけで表の 402 セル（#b91c1c 2.78:1）と 40 セル（#115e59 2.37:1）が通る。 --- */
html[data-theme="dark"] .synthesis-page {
  --syn-bg: var(--kb-bg);
  --syn-panel: var(--kb-surface);
  --syn-border: var(--kb-border);
  --syn-text: var(--kb-text);
  --syn-muted: var(--kb-text-muted);
  --syn-accent: #2fb9a8;
  --syn-accent-strong: #4fd6c4;
  --syn-warn: var(--kb-warning);
  --syn-danger: #ff8a8a;
  --syn-soft: color-mix(in srgb, #2fb9a8 16%, var(--kb-surface));
}

/* --- 22-4. 調査ノートの確度の札。地は混合色なのに文字だけ直書きで 2.56:1。 --- */
html[data-theme="dark"] .rdb-conf-medium { color: var(--kb-warning); }

/* --- 22-5. 資本改革の表は JS が inline で色を書く。9節に無かった紫だけ足す
   （#7c3aed は暗面で 3.16:1）。 --- */
html[data-theme] :is([style*="color:#7c3aed"], [style*="color: #7c3aed"]) { color: #a78bfa !important; }

/* --- 22-6. 銘柄分析レポート（/jp-stock/<code>/analysis/）の札とカード。
   地が淡色の直書き、文字がトークンなので暗面で 1.1〜2.2:1 になる。 --- */
html[data-theme="dark"] :is(.risk-hi, .risk-mid, .risk-lo, .opp-hi, .opp-mid, .opp-lo)
  :is(.an-risk-badge, .an-opp-badge) {
  background: color-mix(in srgb, currentColor 20%, var(--kb-surface));
}
html[data-theme="dark"] :is(
  [style*="background:#eff6ff"], [style*="background: #eff6ff"],
  [style*="background:#f0f9ff"], [style*="background: #f0f9ff"],
  [style*="background:#fdf2f8"], [style*="background: #fdf2f8"],
  [style*="background:#f5f3ff"], [style*="background: #f5f3ff"],
  [style*="background:#f0fdf4"], [style*="background: #f0fdf4"],
  [style*="background:#fff5f5"], [style*="background: #fff5f5"]
) { background: var(--kb-surface-raised) !important; }

/* ==========================================================================
   23. 掃引の第2巡で残った分（2026-09-10）
   ========================================================================== */

/* --- 23-1. `vnext-shadow`（分析一覧などの先頭に出る補足の箱）。
   parts/vnext-shadow-status.php が自前の <style> を持っていて全部ライト固定。 --- */
html[data-theme="dark"] .vnext-shadow {
  background: var(--kb-surface-raised);
  color: var(--kb-text);
  border-color: var(--kb-border);
}
html[data-theme="dark"] .vnext-shadow summary::after { color: var(--kb-text-muted); }
html[data-theme="dark"] .vnext-shadow table { background: var(--kb-surface); }
html[data-theme="dark"] .vnext-shadow :is(th, td) { border-color: var(--kb-border); }
html[data-theme="dark"] .vnext-shadow-badge {
  background: color-mix(in srgb, var(--kb-accent) 22%, var(--kb-surface));
  color: var(--kb-accent-hover);
}
html[data-theme="dark"] .vnext-shadow-badge.warn {
  background: color-mix(in srgb, var(--kb-warning) 20%, var(--kb-surface));
  color: var(--kb-warning);
}

/* --- 23-2. 大株主ページのページ送りと表示切替。地はトークンだが縁と文字が直書き
   （無効ボタンは #f4f6f8 の地に #a9b4bf で 1.94:1）。
   選択中は `.is-active` なので、そこには触らない。 --- */
html[data-theme="dark"] .msh-pagination button { color: var(--kb-accent-hover); border-color: var(--kb-border); }
html[data-theme="dark"] .msh-pagination button:disabled { color: var(--kb-text-subtle); background: var(--kb-surface-raised); }
html[data-theme="dark"] .msh-pagination button:hover:not(:disabled) { background: var(--kb-surface-raised); border-color: var(--kb-border-strong); }
html[data-theme="dark"] .msh-view-tabs button:not(.is-active) { color: var(--kb-text-muted); border-color: var(--kb-border); }

/* --- 23-3. 強調セルの直書き（従業員データほか）。 --- */
html[data-theme="dark"] .hi-red { color: var(--kb-negative); }
html[data-theme="dark"] .hi-green { color: var(--kb-positive); }
html[data-theme="dark"] .hi-amber { color: var(--kb-warning); }

/* --- 23-4. 銘柄分析レポート（/jp-stock/<code>/analysis/）の危険度カード。
   `.risk-hi` だけ地が白系の直書き（#fff5f5）で、見出しの白文字が 1.10:1。
   札の文字も濃色固定のものが2つ残っていた（22-6 で地を文字色の混合にしたので
   文字を明るくすれば地も一緒に付いてくる）。 --- */
html[data-theme="dark"] .an-risk-card.risk-hi {
  background: color-mix(in srgb, var(--kb-negative) 12%, var(--kb-surface));
  border-color: color-mix(in srgb, var(--kb-negative) 38%, transparent);
}
html[data-theme="dark"] :is(.risk-mid, .risk-lo, .opp-hi, .opp-mid) { border-color: var(--kb-border); }
html[data-theme="dark"] .risk-lo .an-risk-badge { color: var(--kb-positive); }
html[data-theme="dark"] .opp-hi .an-opp-badge { color: #c4b5fd; }

/* --- 23-5. 投資家ノートの札。狭い画面向けの上書きが地と文字を淡色で固定していた。 --- */
html[data-theme="dark"] .kn-model-tag {
  background: color-mix(in srgb, #6366f1 16%, var(--kb-surface));
  color: #a5b4fc;
}
html[data-theme="dark"] .kn-status {
  background: color-mix(in srgb, var(--kb-accent) 16%, var(--kb-surface));
  color: var(--kb-accent-hover);
}
html[data-theme="dark"] .kn-pill.note { color: #a78bfa; }
html[data-theme="dark"] .kn-pill.pending { color: var(--kb-warning); }

/* --- 23-6. 分析スクリーニングの選択中タブ。淡い青の地が暗面に1枚残っていた。 --- */
html[data-theme="dark"] .scr-tab.active {
  background: color-mix(in srgb, var(--kb-accent) 22%, var(--kb-surface));
  color: var(--kb-accent-hover);
}
