:root {
  /* Brand */
  --ies-jade: #00A86B;
  --ies-jade-dark: #00794E;
  /* ★★K-1219（2026-08-30）: 主要ボタンの hover 用。★★**新設した理由 = 基準が数で決まったから。**
     ★旧実装は「地 = jade(#00A86B) ／ hover = jade-dark(#00794E)」だったが、
     ★★**jade の上の白文字は 3.08:1 で 4.5:1 を満たしていなかった**（★実測・ブラウザ）。
     ★→ 地を jade-dark（**5.46:1**）へ下げたので、hover はさらに 1 段濃い色が要る。
     ★★**白文字 × #006843 = 6.86:1**（★実測）。 */
  --ies-jade-hover: #006843;
  --ies-jade-soft: #E6F5EE;
  --ies-jade-light: #3EC580;  /* K-277: 明緑/強調 (旧 #3ec580 系) */
  /* ★★K-1187（2026-08-28）: 期間予定の帯の文字色。★★**暗いテーマでも変えない。**
     ★理由 = 帯の地（--period-color）は **カテゴリ色 ＝ テーマで変わらない固定色**だから。
       ★文字だけテーマで反転させると、暗いテーマで「明るい緑に明るい文字」になって破綻する。
     ★★**だから下のダークのブロックにこの名前を書かないこと。**★書いた瞬間に壊れる。
     ★実測 = 地 #3EC580 に対して 比 7.85（★白だと 2.21 で AA の 4.5 に届かない）。 */
  --nb-period-ink: #1A1A1E;
  --ies-coral: #FF6B4A;
  --ies-coral-dark: #E8553A;  /* K-282: coral 濃色 (danger ボタン hover 等。旧 #e8553a/#e55a3a 統一) */
  --ies-coral-soft: #FFE8E1;
  /* ★★2026-08-23: コーラルの塗りの **上に載る文字色**（★K-1129 の未読バッジで要った）。
     ★★**明るい配色でも暗い配色でも白のまま**——★下の [data-theme="dark"] でも同じ値を置く。
     ★★**なぜ専用のトークンが要るか** = ★`--ies-surface` は暗い配色で**暗色に反転する**ので、
       ★コーラルの上に置くと**読めなくなる**。★かといって `#fff` を直に書くと
       ★★commit の門（生 hex の禁止）に止まる——★★実際に止まった（★迂回せずここを作った）。
     ★★**塗りが変わっても文字が付いてくる**ように、名前は「何の上か」で付けている。
     ★★注意 = 白 × コーラルの明暗比は **約 2.8 : 1** で、★読みやすさの目安（4.5 : 1）に届いていない
       （★未決 [321]）。★既存の `.ies-sidebar__unread` と同じ値。★直すなら 2 か所同時。 */
  --ies-on-coral: #FFFFFF;
  /* ★★★2026-09-06: **「決まった行」の面**（★問い合わせ管理の契約済み）。★★K-651 が「役割トークン化予定」と
     書いていたものを、★表の器（`nb-tbl`）が要ったのでここで果たす（★旧 = `pages/inquiries.css` の生 hex 2 色）。
     ★★**相澤さんのご決定（2026-09-06・逐語）** =「**これはピンクのままでいいです**」。
     ★★**K-1229「意味の色は緑とコーラルの 2 色相だけ」の唯一の例外。★名指しで残す。**
       ★緑は「いま選んでいる行」が使用中で衝突する。★コーラルは「手が要る」側なので意味が逆になる。
     ★明るい配色の明暗比 = 文字 #1C1C1C 対 この地で **14.66 : 1**（★計算値）。 */
  --ies-settled: #FCE7F3;
  /* K-277: 二次アクセント青 (リンク/audienceチップ/checked)。--ies-info(#2F7CE0)とは別系統で両立。
     真実源 = docs/architecture/color-tokens.md。旧 #0017c1/#3460fb/#c5d7fb/#7db9d8 系を集約。 */
  --ies-blue: #0017C1;
  --ies-blue-soft: #C5D7FB;

  /* Surface */
  /* ★★★2026-09-04（K-1460・相澤さんのご指摘「WEB ページっぽくて 10 年以上前の UI」）:
   *   ★★**`#FAFAFA` → `#F2F2F2`。★地を一段沈めた。**★★これが全画面に効く 1 手である。
   *
   *   ★★**直した理由（★実測）** = ★地 `#FAFAFA` と面 `#FFFFFF` の差が **1.02 倍**しかなかった。
   *     ★★**＝ ほぼ同じ色なので、★境目を *全部 1px の線で描く* しかなかった**（★実測 = 枠線 150 か所）。
   *     ★★**線で区切るのが 2013 年、★面と地の差で分けるのが今。**★ほぼそれだけの差である。
   *
   *   ★★★**さらに、順序が逆転していた**: ★旧 `#FAFAFA`（98.0%）は
   *     ★★**副地 `#F4F4F4`（95.7%）より *明るかった*。**★★＝ ページの地がいちばん明るく、
   *     ★★**白い面が浮きようがなかった。**★★いまは 地 `#F2F2F2` < 副地 `#F4F4F4` < 面 `#FFFFFF` で単調。
   *
   *   ★先例 = **Windows 11 の設定** = 地 `#F3F3F3` / カード `#FBFBFB`（★カードに枠線が無い）。
   *   ★★**中立を保った**（★K-278 の「暖み除去」の判断を覆さない）。
   *
   *   ★★**暗い配色は 1 バイトも触っていない**（★元から 地 `#16161a` / 面 `#1e1e22` で差が付いている）。
   *   ★★**戻し方 = この 1 行を `#FAFAFA` に戻す。**★他に何も要らない。
   *
   *   ★★**測っていないこと** = ★実物の画面を 1 度も見ていない（★Local はログインできない）。
   *     ★機械で見たのは **文字の読みやすさ**だけ（★`nb-test-visual-static` / `nb-test-soft-ground`）。
   *     ★★**「きれいになった」とは書けない。★本番へ出して見ていただく必要がある。** */
  --ies-bg: #F2F2F2;            /* ★2026-09-04 K-1460（旧 #FAFAFA ← K-278 で旧 #FAFAF7 から暖み除去） */
  --ies-surface: #FFFFFF;
  /* ★★★2026-09-05（相澤さんのご報告「★地の色に近い色の帯などとつながって見える」→ ご決定「動かす」）:
   *   ★★**`#F4F4F4` → `#F8F8F8`。★副地だけを動かした。★地（`--ies-bg`）は 1 バイトも触っていない。**
   *
   *   ★★**動かす前（★丸めない比）**: ★地 #F2F2F2 → 副地 #F4F4F4 = **1.0178**（★床 1.06 の 1/3）。
   *     ★★＝ 副地で塗った帯を *地の上* に置くと消える。★相澤さんが見られた現象そのもの。
   *   ★★**動かした後**: ★地 → 副地 = **1.0541**（★3.0 倍）／ 副地 → 面 #FFFFFF = **1.0620**。
   *
   *   ★★★**床 1.06 には *原理的に* 届かない。★これは値の選び方の問題ではない**
   *     （★区間で示した。★総当たりの標本ではない）:
   *     ・★地 #F2F2F2 と 面 #FFFFFF の **総量は 1.1195** しかない。
   *     ・★両側で 1.06 を満たすには **1.06 × 1.06 = 1.1236** 要る。★**0.0041 足りない。**
   *     ・★あいだに置く解の区間 = [0.994199, 0.990566] ＝ **空**（★どんな色でも不可能）。
   *     ・★地より *暗い* 側へ出す手も塞がっている ——★そこまで暗くすると
   *       ★★`--ies-border-strong`(#8C8C8C) が枠の床 3.0 を割る（★区間 [0.936752, 0.884833] ＝ 空）。
   *   ★★**＝ この値は「床を満たす値」ではなく、★*弱いほうの段を最大にする* 値**である（★max-min）。
   *     ★#F7F7F7 は 1.0450 ／ #F9F9F9 は 1.0633 だが**面の側が 1.0528 へ落ちる**。★#F8F8F8 が均衡点。
   *
   *   ★★**引き換えに悪くなったもの（★隠さない）**: ★副地 → 面 が **1.0999 → 1.0620**。
   *     ★白い面の上の撫でた色（表の行・メニュー・パンくず）が **11/255 → 7/255** に薄まる。★床は越えている。
   *
   *   ★★★**もう 1 つの物差し（★この repo が既に持っているほう）で測り直した** ——
   *     ★`header-shared.css` の注記 =「★#F2F2F2 × #FFFFFF の **dE 4.51** ＝ 人が『面が違う』と読める既知の差」。
   *     ★★**私の式はその 4.51 をぴたりと再現した**（★陽性対照。★同色は 0.00 ＝ 陰性対照）。
   *     ・★明るい配色 いま … 地→副地 **0.70** ／ 副地→面 3.81（★弱いほうが読める差の **15%**）
   *     ・★明るい配色 あと … 地→副地 **2.09** ／ 副地→面 2.42（★弱いほうが **46%**）
   *     ・★暗い配色（★動かしていない）… 2.19 ／ 2.11（★弱いほうが **47%**）
   *     ★★**＝ この 1 手で、明るい配色の釣り合いが *暗い配色と同じ形* になる。**
   *   ★★★**それでも「読める差」には届いていない（★46%）。★これは値の選び方では埋まらない**:
   *     ★3 段すべてを 4.51 にするには総量 **9.02** 要るが、★明るい配色の総量は **4.51（50%）**、
   *     ★暗い配色は **4.02（45%）** しかない。★総量 9.02 を作るには地を **#E5E5E5**（★13 段暗く）まで
   *     沈める必要があり、★そこでは文字も枠も床を割る。
   *   ★★**＝ 本当の選択は「中立の段を 3 つ持つのをやめる」かどうかである**（★相澤さんの判断）。
   *   ★★**良くなったもの**: ★副地の上の文字と枠が全部上がった
   *     （★薄文字 4.75→**4.92** ／ 副文字 6.08→**6.30** ／ 緑の字 4.97→**5.14** ／ 枠 3.06→**3.17**）。
   *
   *   ★★**暗い配色は動かしていない**（★下の `[data-theme="dark"]`）。★理由 = ★総量が **1.0861** しかなく、
   *     ★あいだに置いた最良（等分）が **1.0422**。★いまの #1a1a1f は **1.0410 / 1.0434** ＝
   *     ★★**すでに最良から 0.001 の位置に在る。★動かしても得るものが無い。**
   *   ★★**戻し方 = この 1 行を `#F4F4F4` に戻す**（★ただし下の「同時に直すもの」も一緒に戻すこと）。
   *   ★★**同時に直さないと静かに食い違うもの**（★門が止める）:
   *     ・`assets/css/sidebar-shared.css` の同名の 1 行（★教室サイトでは**唯一のトークン定義元**）
   *     ・★**控え付きの参照で「旧値を控えに書いている」行 22 か所**（★5 枚の CSS）。
   *       ★★**別名も同じ値へ解決される**ので一緒に動く（`--ies-bg-soft` / `--ies-bg-mute` /
   *       `--ies-bg-hover` / `--ies-surface-hover` の 4 つ。★このファイルの下のほうで定義している）。
   *       ★★**ここに旧値と控えの形をそのまま書かないこと** ——★注記の中の 1 行が
   *         `nb-test-token-fallback` に *実物の参照* として数えられる（★私はこの便で実際に踏んだ）。
   *   ★★**測っていないこと** = ★実物の画面を 1 度も見ていない。★機械で見たのは比だけ。 */
  --ies-surface-alt: #F8F8F8;   /* ★2026-09-05（旧 #F4F4F4 ← K-278 で旧 #F3F3EE から暖み除去） */
  --ies-surface-tint: #E8F1FE;  /* K-277: 淡青 情報地 (旧 #e8f1fe/#f1f5fd) */
  --ies-border: #E3E3E3;        /* K-278: 暖み除去 neutral 化 (旧 #E4E4DD) */
/* ★★★2026-08-30（K-1230・機械の実測）: #C8C8C8 → **#949494**。
 * ★★**なぜ** = ★★**この枠は「見える」ことが仕事なのに、白地に対して 1.67:1 しか無かった。**
 *   ★WCAG 1.4.11（非文字コントラスト）は、★**部品の輪郭に 3:1** を求める。
 *   ★入力欄・プルダウン・複数行の枠は**これで描かれている** ＝ ★★**欄の境目が見えていなかった。**
 *   ★実測（★別プロセスがブラウザで計算）= 明 **191 辺** ／ 暗 **211 辺**が 3:1 未達。
 * ★★**値の決め方は K-1219 と同じ**——★色相と彩度をそのままに、明度だけ下げて
 *   ★**3:1 を最初に満たした値**を機械に選ばせた（★#949494 = **3.03:1**）。
 * ★★**名前どおりになった**——★「strong（強い）」と名乗りながら 1.67 だったのが誤りだった。
 * ★★**影響 = 19 か所**（★入力欄・パンくずの区切り・仕切り線ほか）。★どれも「見えるべき線」である。 */
  --ies-border-strong: #8C8C8C;   /* ★2026-08-30 追記: #949494 は白地では 3.03 だが、★地(#FAFAFA)で 2.91・副地(#F4F4F4)で 2.76 と落ちた。★★この枠は 3 つの面すべての上に載るので、★**全部で 3:1 を満たす値**を選び直した（白 3.36 ／ 地 3.22 ／ 副地 3.06）。 */
  --ies-black: #000000;  /* K-277: 純黒 (影以外。旧 #000000/black) */

  /* Text */
  --ies-text: #1C1C1C;          /* K-278: 暖み除去 neutral 化 (旧 #1C1C1A) */
  --ies-text-sub: #5C5C5C;      /* K-278: 暖み除去 neutral 化 (旧 #5C5C56) */
  /* K-936 (2026-08-17): #8A8A8A→#6B7280。白地で3.45:1(未達)→4.83:1(達成)。
     本体層 --cl-muted と同値へ統一(層のズレ解消・決定4)。★ies-text-sub(#5C5C5C)より明るいままなので
     sub>mute の階層は維持。★surface-alt(#F4F4F4)地では4.40:1に留まり僅かに未達(報告に明記)。 */
  /* ★★★2026-09-04（K-1460）: `#6B7280` → `#636D7E`。★★**K-936 が「僅かに未達」と *報告に明記して
   *   通していた穴* を、★ここで閉じた。**
   *
   *   ★★**閉じる必要が出た理由** = ★同じ便で地を `#FAFAFA` → `#F2F2F2` に沈めた。
   *     ★★**＝ K-936 が「副地でだけ 4.40:1」と書いていた状態が、★*主役の地* に来てしまう。**
   *     ★★門（`nb-test-visual-static`）が **新規 5 件**として実際に止めた（★schedule.css の 5 か所）。
   *     ★★**押し通していない。★色のほうを直した。**
   *
   *   ★★**実測（★4.5:1 の床に対して）**:
   *     ・地 `#F2F2F2` 上 … 4.32 → ★**4.66**
   *     ・副地 `#F4F4F4` 上 … 4.40（★K-936 の既知の未達） → ★**4.71**
   *     ・白 `#FFFFFF` 上 … 4.83 → ★**5.22**
   *   ★★**＝ 3 つの面すべてで床を越える。★K-936 の宿題もここで終わる。**
   *
   *   ★★**階層は保っている** ——★`--ies-text-sub` (#5C5C5C) より **明るいまま**（sub > mute）。
   *     ★Tailwind の gray-600 (#4B5563) は sub より暗くなり階層が反転するので採らなかった。
   *   ★★**暗い配色は触っていない**（★`[data-theme="dark"]` 側の `#868681` はそのまま）。 */
  --ies-text-mute: #636D7E;

  /* State */
  --ies-info: #2F7CE0;
  --ies-warn: #D97706;
  --ies-warn-soft: #FEF3C7;    /* K-277: 警告 soft 地 (旧 #fcd34d/#fde68a/#fef3c7 系) */
  --ies-danger: #DC2626;        /* K-277: 危険の正値 (#c0392b 等はこれへ統一) */
  --ies-danger-soft: #FEE2E2;  /* K-277: 危険 soft 地 (旧 #fee2e2/#fef2f2/#fdeeee) */
  /* ★★K-1219（2026-08-30）: soft 地の**上に載せる文字**の色と、その hover 地。
     ★★**なぜ `--ies-danger`（#DC2626）を使わないか** = ★soft 地の上で **3.95:1** しかなく、
     ★4.5:1 を満たさない（★実測・ブラウザ）。★#B91C1C なら **5.30:1**。
     ★★**hover 地は「4.5:1 を保てる範囲でいちばん濃い値」を機械に選ばせた** = #FBD0D0（**4.63:1**）。
     ★1 段濃い #FACACA は 4.43:1 で**落ちる**（★目では見分けられない差）。 */
  --ies-danger-ink: #B91C1C;
  --ies-danger-soft-hover: #FBD0D0;
  /* ★★★2026-08-30（K-1228・部品の完遂）: 淡い地の **上に載せる文字**の色を 3 つ足した。
   * ★★**なぜ要るか（★機械で出した数）**: ★共通部品のバッジ・アイコンの器・告知は
   *   「淡い地 ＋ 濃い文字」で作る。★ところが既存の色をそのまま載せると、
   *   ★★**明るい配色で 3 組とも 4.5:1 に届かない**:
   *     ・`--ies-coral-dark`(#E8553A) × `--ies-coral-soft`(#FFE8E1)   = **3.09:1**
   *     ・`--ies-warn`(#D97706)       × `--ies-warn-soft`(#FEF3C7)    = **2.86:1**
   *     ・`--ies-info`(#2F7CE0)       × `--ies-surface-tint`(#E8F1FE) = **3.63:1**
   * ★★**値の決め方は K-1219 とまったく同じ**——★色相と彩度をそのままに、
   *   ★**明度だけを下げて 4.5:1 を最初に満たした値**を機械に選ばせた（★好みで選んでいない）。
   *     ・`#BA442E` … 淡地 **4.52:1** ／ 白地 5.31:1
   *     ・`#A75C05` … 淡地 **4.52:1** ／ 白地 5.03:1
   *     ・`#296DC5` … 淡地 **4.51:1** ／ 白地 5.14:1
   * ★★**暗い配色では既存の色がそのまま通るので、新しい色を 1 つも作っていない**
   *   （★4.67 / 6.72 / 5.62。★下の [data-theme="dark"] を見よ）。
   * ★★**名前の付け方は「何の上に載るか」**（★`--ies-on-coral` と同じ考え）。
   *
   * ★★★2026-08-30 訂正（K-1229・相澤さんのご決定）: **琥珀と青の `-ink` は作らなかった。**
   *   ★★**意味の色は緑とコーラルの 2 色相だけ**にしたので、★琥珀と青は部品から外れた。
   *   ★★**使わない色の「読める濃さ」を先に作らない**（★作ると、次に誰かが使ってしまう）。
   *   ★★**値は記録として残す**（★もし将来また要るなら、この 2 行を復活させればよい）:
   *     ・琥珀の淡地の上 = `#A75C05`（★4.52:1）／ 暗い配色は `#e0a030`（★6.72:1）
   *     ・青の淡地の上   = `#296DC5`（★4.51:1）／ 暗い配色は `#4d9bf0`（★5.62:1）
   *   ★決定 = `docs/decisions.md` の **K-1229**。
   *
   * ★★★2026-09-03 訂正（K-1409）: **上の「琥珀と青は部品から外れた」という前提が、実測で崩れた。**
   *   ★★K-1229 が `-ink` を作らなかった理由は「**使わない色**の読める濃さを先に作らない」だった。
   *   ★★**ところが画面側の CSS は、琥珀と青の淡い地を実際に使い続けていた**（★下は 2026-09-03 の実測・
   *     `tools/nb-test-soft-ground.php`）:
   *     ・`--ies-warn`(#D97706) × `--ies-warn-soft`(#FEF3C7)    = **2.86:1** … **11 か所**
   *     ・`--ies-info`(#2F7CE0) × `--ies-surface-tint`(#E8F1FE) = **3.63:1** … **1 か所**
   *   ★★**＝「使わない色」ではなかった。★前提が違えば結論も変わる。**
   *   ★★**だから、ここに記録として残してあった 2 行を実際に作る**（★値は 1 つも動かしていない）。
   *   ★★**部品（`components.css`）は今も緑とコーラルの 2 色相だけ**である ——★K-1229 の中身は生きている。
   *     ★この 2 つは **画面側の淡い地**のためのものであり、★部品の修飾子を増やしてはいない。
   *   ★★**相澤さんへの問い**（`docs/pending-answers.md`）= ★琥珀と青の淡い地そのものを、
   *     ★緑とコーラルへ寄せてしまう案も在る。★そちらを採るなら、この 2 行は消せる。 */
  --ies-coral-ink: #BA442E;
  --ies-warn-ink: #A75C05;      /* ★淡い琥珀地 #FEF3C7 の上で 4.52:1（★白地 5.03:1）。K-1409 */
  --ies-info-ink: #296DC5;      /* ★情報地 #E8F1FE の上で 4.51:1（★白地 5.14:1）。K-1409 */
  /* ★2026-08-30（K-1230）: モーダルの覆い（★暗幕）。★★値の家を 1 つにする ——
     ★`components.css` に生で書いていたら、`impeccable` の検出器が「一覧の外の色」として拾った。
     ★不透明度つきなので hex では書けない。★明暗で同じ値でよい（★どちらでも下が透けて見える濃さ）。 */
  --ies-scrim: rgba(20, 20, 20, .5);

  /* K-283: 未定義参照だった色トークンの alias(実在トークンへ集約)。
   * 各 CSS の var(--ies-bg-soft, #fallback) 等が今後 alias 経由で実在トークンを引く
   * → Dark 等でフォールバック Light 色に化ける地雷を除去(実在トークンの変化に自動追従)。
   * 由来: K-279〜282 の色 audit で発見。詳細 docs/architecture/color-tokens.md。 */
  --ies-emerald: var(--ies-jade);
  /* 役割名アクセント層(K-649): 色名(--ies-jade)を役割名で参照。テーマ複数化に備え、
     画面側は accent を参照する。Dark は --ies-jade 上書きに自動追従(--ies-emerald と同型)。 */
  --ies-accent:        var(--ies-jade);
  --ies-accent-strong: var(--ies-jade-dark);
  --ies-accent-soft:   var(--ies-jade-soft);
  --ies-bg-soft: var(--ies-surface-alt);
  --ies-bg-mute: var(--ies-surface-alt);
  --ies-bg-hover: var(--ies-surface-alt);
  --ies-surface-hover: var(--ies-surface-alt);
  --ies-surface-2: var(--ies-bg);
  --ies-border-soft: var(--ies-border);
  /* ★罫線の共通トーン（★`--ies-border` より淡い。★面が主役で線は控えめ、という v0 の方針）。
     ★★★**2026-08-30 訂正（★別の頭の指摘。★私の初版の記述は誤りだった）**:
     ★★旧記述「**これまでどこにも定義されていなかった**」「値を解決できず currentColor（#1C1C1C）に
       落ちていた」「白地に対し **17.04:1**」は **すべて失効**。★★**事実に反していた。**
     ★★**実際には定義は在った** —— `templates/page-dashboard.php` の
       `.ies-dash-week, .ies-dash-fullrow, .ies-dash-focus { --ies-week-rule: … }`（★同値）。
       ★週グリッドはどちらの経路でも**この 3 つのどれかの中に描かれる**ので、継承して解決していた。
     ★★**私が 17.04:1 を実測したのは、私が焼いた *絵の見本* の中だけ**である ——
       ★あの絵では週グリッドを `.ies-dash-focus` の外へ素の兄弟として置いたので、
       ★★**その絵でだけ**変数が解決せず `currentColor` に落ちていた。★★**本番の欠陥ではない。**
     ★★＝ `pages/schedule.css:3449` の注記「ウィジェットの --ies-week-rule と同じ値」は**正しかった**。
     ★★**それでもここへ上げる理由**（★残す判断）: ★定義があの 3 クラスの *中にしか無い* ため、
       ★★**器の外へ 1 段でも出た瞬間に解決できない**。★実際、私はその形で踏んだ。
       ★`:root` に置けば、どこに置いても同じ色になる（★値は 1 文字も変えていない）。 */
  --ies-week-rule: color-mix(in srgb, var(--ies-border) 55%, transparent);

  /* ═══════════════════════════════════════════════════════════════════════════
   * ★★★`--ies-row-rule` —— **格子（カレンダー・座席・時間割）の「行の区切り」の色**。★2026-09-08
   *
   * ★★**なぜ在るか（★相澤さんの実機のご指摘・逐語）**:
   *   「①行の枠線をもっと濃くしたほうがいい？　同じような濃度の線なので区切りがわかりにくいです」
   *   「③ブースのメモの上の線があるけどこれは消しちゃダメかな？…あえて分けなくてはいけない
   *     明確かつ強い理由はないんだよね」
   *
   * ★★**何が起きていたか（★実測）** = ★座席管理の日ビューに **1px の線が 2 本**在り、
   *   ★行の区切り **1.28:1** ／ 升の中の線 **1.13:1** ＝ ★★**差が 0.15 しかなかった。**
   *   ★★ゲシュタルトの **類同**の法則では、★同じ見た目の要素は同じ意味だと読まれる。
   *     ＝ ★**同じ線が 2 つの違う仕事をしていた**（★区切りが追えないのは目ではなく設計の問題）。
   *
   * ★★**決めたこと（★2 段構え。★順序を逆にしない）**:
   *   ①★★**升の中に横線を引かない。**★区分けは **近接**（余白）で作る。
   *     ★これで格子の中に線が 1 本だけになり、★★**残った 1 本が「行の区切り」の意味を独占する。**
   *   ②★そのうえで、行の区切りだけをこの色にする（★**1.82:1**・★列の区切りは `--ies-border` のまま）。
   *     ★★**行 > 列 の順位を作る。★両方濃くしない**（★格子が主役になる）。
   *
   * ★★**なぜ 3:1（WCAG 1.4.11）を狙わないか** ——★★**狙っても届かないからである。**
   *   ★この線は白い升だけでなく、見出しの列（#F4F4EE）や、空き升を撫でたとき（#E9E9E3）にも載る。
   *   ★実測 = `--ies-border-strong`（#8C8C8C）に上げても **撫でたときは 2.76** で床を割る。
   *     ★★＝「規則を満たすために濃くする」という理由が成立しない。
   *   ★★表の罫線は **装飾的な区切り**であり、同じ情報は **行の位置と余白**が既に運んでいる
   *     （★線が消えても、どの行かは読める）。★1.4.11 が 3:1 を課すのは「操作できる部品」と「意味を運ぶ図」。
   *   ★★**床を本気で満たすなら、線ではなく「撫でたときの色」から見直す。**★それは別の判断。
   *
   * ★★**作り方は発明していない** = すぐ上の `--ies-week-rule` と同じ「強い線を % で薄める」形。
   * ★★**新しいカレンダー・格子を作るときは、この 2 段構えをそのまま使う**
   *   （★正本 = `docs/ui/system/acceptance.md` の「格子の線」。★この議論をもう一度やらない）。
   * ★★**間違いだった場合の兆候** = ★「行がまだ追えない」なら ① を先に確かめる（★升の中に線が残っている）。
   *   ★「線が濃すぎる／格子っぽい」なら 55% を下げる（★`--ies-border-strong` そのものには上げない）。
   * ═══════════════════════════════════════════════════════════════════════════ */
  --ies-row-rule: color-mix(in srgb, var(--ies-border-strong) 55%, transparent);
  --ies-ink: var(--ies-text);
  --ies-link: var(--ies-info);

  /* Layout */
  /* ★★2026-08-19（相澤さんの指示）: 10px → 5px。★角丸を全体的に締める。
     ★この 1 語が portal 層の角丸の正本（★実測 = 8 ファイル 10 か所がこれを参照）。
     ★★`--ies-radius-sm`（6px）は指示どおり据え置いた。★ただし **大小が逆転する**
     　（★「小さいほうの角丸」6px ＞「基準の角丸」5px）。★相澤さんに報告済・判断待ち。
     　★下げるなら 4px が刻みに乗る（★未決に積んである）。 */
  /* ★★旧名。★K-1206 で **`-sm` の別名**にした（★値を持たせない＝ 二重管理を作らない）。
   *   ★19 か所がまだこれを見ている。★新しく書かない —— 使うのは `--ies-radius-sm`。 */
  --ies-radius: var(--ies-radius-sm);
  /* ★★2026-08-29（K-1198・相澤さんの「少しずつ共通の部品にしていけるように」）:
   *   ★★**xs と md を足した。★値は新しくない** —— どちらも既に CSS が生で書いていた値である
   *     （★実測 = `docs/ui/system/SHAPE-LEDGER.md`。★4px が 47 件 ／ 8px が 40 件）。
   *   ★★**この 2 つを足す目的は、見た目を変えることではなく「口を 1 つにする」こと。**
   *     ★生の px は 274 件あり、★そのうち **トークンを通っていたのは 39 件だけ**だった。
   *     ★口が 1 つになれば、★あとで刻みを変えるのは **この数行の編集で済む**。
   *   ★★**この便では値を 1 つも変えていない**（★見た目は 1px も動かない・実測で確認済）。
   *   ★★残っている食い違い（★次に決めること）:
   *     ・`--ies-radius`（5px）だけが刻み（4/6/8/16）から外れている ——★19 か所が見ている
   *     ・`--ies-radius-sm`（6px）＞ `--ies-radius`（5px）で **大小が逆転**したまま（★下の旧注記）
   *     ・`DESIGN.md` は 8/12/16/9999 と宣言しており、★**この一覧とも食い違う**
   *     ★★どれも「どの刻みに揃えるか」という**見た目の判断**なので、★私は決めない。 */
  /* ★★★2026-08-29（K-1206・相澤さんの「君の判断で統一や整合性を確定させてください」）:
   *   ★★**角丸の刻みを 4 / 8 / 12 / 16 / 9999 の 5 段に確定した。**★意味で割り当てる:
   *     xs   4px … 小さな印（色見本・極小の札）
   *     sm   8px … **操作するもの**（ボタン・入力欄・タブ・メニュー・札）
   *     md  12px … 中の器（パネル・通知・統計の箱）
   *     lg  16px … カード・モーダル
   *     full     … 丸薬（チップ・バッジ）
   *   ★★**値ごとにトークンを作らない**（impeccable の extract = 「トークンは意味を持つこと」）。
   *   ★★**なぜ 8px か** = カードが 16px と決まっている（相澤さんがモックから確定）。
   *     ★操作するものをその **半分**にすると、器と部品の丸みが比で揃う。
   *     ★5〜6px だと 16px のカードの中で丸みが噛み合わず、★「よく見ると細部が違う」の元になる。
   *
   *   ★★**変わる値（★正直に書く）**:
   *     `--ies-radius-sm`  6px → **8px**（★144 か所・+2px）
   *     `--ies-radius-md`  8px → **12px**（★20 か所・+4px。★意味を「器」に付け替えた）
   *     `--ies-radius`     5px → **sm の別名（8px）**（★+3px）
   *     ★生の 1〜3px は xs(4px) へ、9〜10px は sm(8px) へ、13〜24px は lg(16px) へ寄せた
   *   ★★**2026-08-19 の「10px → 5px・角丸を全体的に締める」を一部戻すことになる。**
   *     ★理由 = 5px はどの刻みにも乗っておらず、★しかも `-sm`(6px) より小さくて**大小が逆転**していた。
   *     ★相澤さんに報告済で判断待ちだった項目であり、★今回「私の判断で確定させてよい」と委ねられた。
   *
   *   ★実測 = 生の指定 **102 → 3 件**（★残り 3 件は角ごと指定 `4px 4px 0 0`）／
   *     トークン経由 **308 件**（xs 67 ／ sm 144 ／ md 20 ／ lg 5 ／ full 55）。 */
  --ies-radius-xs: 4px;
  --ies-radius-sm: 8px;
  --ies-radius-md: 12px;
  /* ★★2026-08-29（K-1191・相澤さんのご決定「A（トークンを変えて全画面を揃える）」）:
       **カードの角丸**。★本体層の `--cl-radius-lg`（1rem = 16px・カード用）と **同じ値**にしてある。
     ★★**なぜ足したか（★実測）**: ★同じ「カード」なのに層で角丸が違っていた ——
       ・portal 層（`--ies-radius`）… **5px** ← ダッシュボードはこちらを見ていた
       ・本体層（`--cl-radius-lg`）… **16px** ← 他の画面はこちら
       ★★これがまさに相澤さんの仰る「ぱっと見たら同じだけど、よく見たら細部が異なっている」の実体。
     ★★**`--ies-radius`（5px）はそのまま**にしてある。★あれはボタン・入力欄など 59 か所が見ており、
       ★16px にすると**丸すぎる部品**ができる。★カードだけを分けるのが正しい。
     ★出どころ = `docs/ui/screens/社員ダッシュボード/mock-full.html`（★カードは 16px）。 */
  --ies-radius-lg: 16px;
  /* ★★2026-08-18: チップ・バッジ用のピル。★portal 層にだけ無かったので足した。
     ★本体層（header.php）には既に `--cl-radius-full: 9999px` が在り、★値を合わせてある。
     ★★足した理由（★実測）= `templates/page-yoyaku-grid.php` が **本体層の `--cl-*` を 21 か所**
       使っていたが、★この画面が読む頭は `parts/header-portal.php` で `--cl-*` は **1 つも定義されない**
       （★本番で `getComputedStyle` を撃って確認。★`--cl-primary` すら未定義／★`--ies-*` は生きている）。
     ★★＝ 余白と角丸が **効かないまま本番に出ていた**。★20 か所は `--ies-sp-1..4` に
       **同じ値（4/8/12/16px）で** 置き換えられたが、★ピルだけ受け皿が無かった。 */
  --ies-radius-full: 9999px;
  /* ★★2026-09-25（書く欄を ChatGPT 型に・spec = `docs/ui/screens/社内メッセージ/editor-spec.md` §1 の 5）:
     **書く欄（`.ies-editor`）の外枠だけの角丸**。★★**角丸の段（4 / 8 / 12 / 16 / 丸）の外の値 ＝ 例外**。
     ★出どころ = ChatGPT の入力欄の実測（2026-09-24・ログインなしのトップ・幅 1280px・計算後の値）= 28px。
     ★1 行の高さ 52px の半分 26 より大きいので、★1 行のうちは両端がまるい形になる（複数行でも同じ値）。
     ★★相澤さんの逐語 =「chat gptのような角丸を完全再現してほしい」。★★**ほかの部品に使わない**
       （★使うと段の外の角丸が広がる）。★色ではないので暗い配色の節には書かない。 */
  --ies-radius-editor: 28px;
  --ies-shadow-sm: 0 1px 2px rgba(0,0,0,.04);
  --ies-shadow-md: 0 4px 12px rgba(0,0,0,.06);

  /* Typography */
  /* K-842 (2026-08-07): "Noto Sans JP" を先頭へ。相澤さんの指示「フォントは Noto Sans がいい」。
   *   旧: -apple-system, BlinkMacSystemFont, "Hiragino Sans", "Noto Sans JP", sans-serif
   *   ★旧並びだと Noto Sans JP は 4 番目で、Mac/iOS は Hiragino Sans・Windows は OS 既定が出ていた
   *     ＝portal 層(サイドバー/共通ヘッダー/個人設定)だけ本体層と別の書体になっていた(実測)。
   *   ★webfont は header.php:34 の Google Fonts で既に読込済み。追加読込は不要。
   *   ★★これは見た目が変わる変更(特に Mac/iOS)。本体層 header.php:82 と同じ並びに揃えた。 */
  --ies-font-sans: "Noto Sans JP", -apple-system, BlinkMacSystemFont, "Hiragino Sans", sans-serif;
  /* ★2026-10-03（W-271 ②・本棚 [668]）: `monospace` の手前に "Noto Sans JP" を置いた。旧は「…, Menlo, monospace」＝ 数字の書体は JetBrains Mono でも、和文の字（「件」「コマ」）が来ると
   *   最後の `monospace`（Windows は MS Gothic）に落ちていた（[668] の実測）。数字の字は変わらず、和文だけが本文と同じ字になる（K-842「フォントは Noto Sans がいい」の延長）。
   *   ★★同じ穴が `--cl-font-mono`（:848）と Tailwind の `font-mono` に残っている（★注記が「tailwind.config の fontFamily.mono と同一の文字列」と約束している・組み立ては共有の成果物＝ここでは触らない）。 */
  --ies-font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, "Noto Sans JP", monospace;

  /* 文字サイズ調整は K-242 で rem 化。基準は html { font-size: var(--ies-fs-scale,100%) }（base.css）。
   * 旧 --ies-fs-delta(px加算方式) は全廃。スケールは JS が --ies-fs-scale に % をセット。 */

  /* Spacing scale */
  --ies-sp-1: 4px;
  --ies-sp-2: 8px;
  --ies-sp-3: 12px;
  --ies-sp-4: 16px;
  --ies-sp-5: 24px;
  --ies-sp-6: 32px;
  --ies-sp-7: 48px;

  /* ★★★2026-09-06: 押せる高さの 3 段。★★**両方のサイトへ届くのはこの層だけ**。
     ★同じ 3 段が `header.php` の `:root` に `--cl-tap-s/m/l` として在るが、★あちらは教室サイト専用で、
     ★★共通の CSS（`components.css` / `header-shared.css` / `sidebar-shared.css`）から引くと
     ★★**社員サイトで解決せず、指定そのものが落ちる**。★だから同じ値をここにも置く。
     ★正本 = `docs/ui/system/acceptance.md`「タップ領域」。★★**新しい値を決めたのではなく、写しである。**
     ★★**40px を作らない**（★2026-08-28・K-1185 で廃止済）。 */
  --ies-tap-s: 24px;   /* 行の中の小さな押しもの・パンくず */
  --ies-tap-m: 32px;   /* 既定。行の中の操作とアイコンボタン */
  --ies-tap-l: 44px;   /* 主要ボタン・メニューの行 */

  /* Sidebar */
  /* ★★K-1039 (2026-08-21): 240px → 225px。★`assets/css/sidebar-shared.css` と値を揃えた。
     ★★これは見た目の変更ではない。**実際の画面はもう 225px だった。**
       ★実測（本番 `ies.noberu.net/dashboard/`・2026-08-21）= `aside.ies-sidebar` の実幅 **225px**。
     ★★なぜ 240px と書いてあるのに 225px で描かれていたか =
       ★このトークンは **2 か所**にあり、★社員サイトでは**両方読まれる**。
       ★積む順は登録の優先度で決まり（★pdash 側 **10** ／ sidebar 側 **100**）、
       ★★**後に積まれる sidebar 側（225px）が勝っていた**。
     ★★つまりこの 240px は **1 度も効いていない死んだ値**であり、★読む人を欺いていた。
     ★決定 K-1026 が「社員サイト側は変わらない」と書いたのは、この行を見て書かれたもの。
       ★★**相澤さんの判断（2026-08-21）= 225px で追認**。★逐語 =「サイドバーの幅は社員側も
       ２２５pxでいいですけど これ僕が昨日２２５ｐｘに修正させたと思うんですけど なので追認でいいです」。
     ★★**兆候**: ★この 2 ファイルの `:root` がまた食い違ったら、★同じ「後勝ち」で
       **書いてある値と描かれる値が別物**になる。★詳細 = K-1035。 */
  /* ★★★2026-08-26（K-1181・相澤さんのご指示）: 225px → **215px**。
   *   ★逐語 =「サイドバー beta の表示をサイドバーから削除したので **その分幅を 10px 狭くして**ください
   *     ただし条件分岐して **フォントが特大の時には今と同じ幅** とかって出来る？」
   *   ★★特大（delta 6）のときだけ 225px に戻す規則は `assets/css/sidebar-shared.css` の末尾。
   *     ★あちらは **両方のサイトで**読まれるので、規則の置き場としてそちらが正しい。
   *   ★★**この 2 本は同じ値にすること**（★上のコメントの「兆候」がまさにそれ）。 */
  /* ★★★2026-09-05（相澤さんのご指示④）: 215px → **200px**（★−15px）。
   *   ★★**`assets/css/sidebar-shared.css` の同名と同じ便で変えてある**（★上のコメントの「兆候」がまさにそれ）。
   *   ★入り切ることの実測と、この変更が見ていないものは、あちらの同じ行の注記に 1 か所だけ書いた。
   *   ★機械の見張り = `.githooks/check-token-drift.php`（★食い違ったら commit が止まる）と
   *     `tools/nb-test-sidebar-metrics.php`（★項目名が入り切らなくなったら落ちる）。 */
  --ies-sidebar-w: 200px;
  --ies-sidebar-w-rail: 64px;
  /* ★★★2026-08-25 訂正: 42px → **45px**。★これは「帯を厚くした」のではなく、
   *   ★★**もともと 45px だったものを、宣言の側が 42px と嘘をついていた**のを直したもの。
   *   ★実測（★本番の実画面）= 通知ベル 44px ／ 氏名メニュー 44px ／ 下線 1px ＝ **45px**。
   *   ★★嘘になった日 = 通知ベル（K-1123・2026-08-24）を帯に足した日。
   *   ★★この 3px が引き起こしていたもの（★相澤さんの実機報告 3 件は全部これ 1 つ）:
   *     ①社内メッセージの左レールがスクロールで少し動く（★`top: 42px` で 3px 潜る）
   *     ②レールが画面の下から 3px はみ出す（★`100vh - 42px` で計算していた）
   *     ③そのはみ出しだけのために、★**ページ全体の縦スクロールバーが右端に出る**
   *   ★★併せて `layout.css` の `.ies-header` を `min-height` から **`height`** にした
   *     ＝ ★以後、宣言した値と実際の高さは **食い違えない**。
   *   ★★下の旧記述の「※42px で窮屈なら 44/45px に緩める」は、★実際にはもう 45px で描かれていた。 */
  /* ★★K-1382 (2026-09-03): 本文の枠の余白と最大幅。★出どころは `layout.css` の `.ies-content`。
   *   ★★**社員サイトの器だけがその枠を開ける**ので、★教室サイトへ移した画面は自分で開ける必要がある
   *     （★`templates/page-leads.php` の `.nb-leads-page`）。★★値をここに 1 つ置き、★写しを作らない。
   *   ★門 = `tools/nb-test-leads-layout.php` が `.ies-content` と突き合わせる（★var を解決してから比べる）。 */
  --ies-content-pad: clamp(16px, 1.2%, 24px) clamp(16px, 2vw, 32px);
  --ies-content-max: 1600px;
  /* ★列の幅の段（K-1621・K-1753・`docs/ui/system/width-by-template.md` §3・2026-09-23 UNIFY T-1）。★画面は数字を持たず、器がこの段を使う。
   *   ★990 = 一覧＋文（一覧の器の既定・`list-shell.css` の `--nb-ls-measure`）／ 720 = 1 枚ものの中身（箱は 768）。
   *   ★どちらも今ある値を名前で持っただけ（★見た目は 1px も変わらない）。 */
  --ies-col-text: 990px;
  --ies-col-page: 720px;
  --ies-header-h: 45px; /* K-222 (2026-06-01・社長FB): 56→48→42。固定占有縦領域をさらに削り可読領域を拡大。ヘッダーは flex align-items:center ゆえ子要素の中央揃えは維持。※42px で窮屈なら 44/45px に緩める(Local確認後確定)。★旧記述「参照は layout.css:110 の1箇所のみ、スマホは min-height:auto で無影響」は失効（W-269・2026-10-03）= いまは表の見出し・タブの帯・設定の柱・一覧の柱・右上の知らせ・scroll-margin が帯の下に貼りつくために読む。狭い窓（767px 以下）は直下の @media が 57px（普段の帯の計算値）に替え、parts/header-shared.php の台本が帯の実寸で上書きする。 */
}
/* ★W-269（2026-10-03）: 狭い窓の帯は min-height:auto で折り返す（上下 6px ＋ 押す的 44px ＋ 下線 1px ＝ 57px）。45px のままだと帯の下に貼りつくものが 12px 潜る。
 *   ★同じ 1 行を assets/css/header-shared.css の `:root { --ies-header-h: 45px; }` の直後にも置く（教室サイトは tokens.css を読まない時代の名残で両方に持つ・値は同じ）。
 *   ★`:root{ --ies-header-h: 45px }` の行は消さない（tools/nb-test-header-parity.php が最初に当たった値を読む）。
 *   ★ベータの画面・講師の帯・特大の字は 57 と一致しない ＝ 台本（parts/header-shared.php）が実寸を `<html style>` に書いて上書きする。広い窓は台本が消す（帯が自分の高さを min-height:var(--ies-header-h) で決めるので、実寸を書くと「一度高くなると戻らない」になる）。 */
@media (max-width: 767px) { :root { --ies-header-h: 57px; } }

/* =========================================================
 * Dark テーマ(K-288 仮当て → K-291 で本実装・正式採用。値は K-288 のまま変更なし)
 *   <html data-theme="dark"> のとき色トークンを Dark 値で上書き。Light(:root)は無変更。
 *   方向性 = Linear/Vercel 風(浮いた黒地 + オフホワイト文字 + 低彩度アクセント)。
 *   alias(--ies-emerald/bg-soft/ink/link 等)は var(--実在) ゆえ自動追従(再定義不要)。
 *   ★切替は個人設定(schedule-settings ⑨)で usermeta _ies_theme に保存し、
 *     parts/header-portal.php がサーバ側で <html data-theme="dark"> を先出し(FOUC なし)。
 *     'light' は :root 既定ゆえ属性を出さない(非 light のみ data-theme を持つ)。
 *   (偵察用 Console 切替: document.documentElement.setAttribute('data-theme','dark') / removeAttribute で戻す)
 * ========================================================= */
[data-theme="dark"] {
  /* K-290: ネイティブフォーム要素(select/input/checkbox/radio/date/scrollbar)を Dark UA 描画に。
     白く浮く native コントロールを一括で黒系化(自分の予定 select / 日付ナビ / CC チェックボックス等)。 */
  color-scheme: dark;

  /* ★★2026-08-23: コーラルの上の文字色は **暗い配色でも白のまま**（★明るい配色と同じ値）。
     ★★**わざと同じ値を置いている**——★ここを書かないと「暗い配色では未定義」に見え、
       ★次に読む人が「反転させ忘れでは？」と疑って直してしまう。★★**反転させないことが仕様である。**
     ★理由 = 塗り（`--ies-coral`）が暗い配色でも明るいコーラルのままだから（★下の :171 付近）。 */
  --ies-on-coral: #FFFFFF;

  /* Surface 階層(地<副地<カード) */
  --ies-bg: #16161a;
  --ies-surface: #1e1e22;
  --ies-surface-alt: #1a1a1f;
  --ies-surface-tint: #1a2030;   /* 情報地(暗い青み) */
  --ies-border: #33333a;
  /* ★2026-08-30（K-1230）: #44444c → #68686E（★暗い面 #1e1e22 の上で **3.00:1**）。★上の :root と同じ理由。 */
  /* ★2026-08-30（K-1230）: #44444c → #707076。★暗い側の 3 つの面すべてで 3:1 以上
     （★面 #1e1e22 = 3.38 ／ 地 #16161a = 3.67 ／ 副地 #1a1a1f = 3.52）。★明るい側と同じ理由。 */
  --ies-border-strong: #707076;

  /* Text(オフホワイト〜中間グレー) */
  --ies-text: #e8e8e6;
  --ies-text-sub: #a8a8a4;
  /* K-936 (2026-08-17): #7a7a76→#868681。--cl-muted(dark) #a8a8a4 への単純統一は試したが、
     (1) --ies-text-sub と同値になり sub/mute の二段階が消える (2) messages.css の
     .rank--2(白文字を乗せた地) が 4.31:1→2.39:1 まで悪化する、の2点が判明したため見送った。
     代わりに自前の値そのもの(H60°/S1.7%を保持)でLだけ最小限動かした:
     暗地の文字用途(surface #1e1e22) 3.86:1→4.54:1、(bg #16161a) 4.19:1→4.93:1。
     ★.rank--2(白文字)は 4.31:1→3.66:1 とわずかに悪化するが、a8a8a4案(2.39:1)より小さい影響に留めた
     (この1箇所はどの案でも改善しない。報告に明記・messages.css は編集対象外)。 */
  --ies-text-mute: #868681;
  --ies-black: #e8e8e6;          /* Dark では「最濃文字」= オフホワイト相当に(純黒は不可視ゆえ) */

  /* Brand / アクセント(暗背景で沈まぬよう明度↑・低彩度) */
  --ies-jade: #2ecf8f;
  /* ★★2026-08-22 訂正: #1f9e6c は失効 → #1f9f6c。
     ★★理由 = **同じ役の緑が、暗い配色で 2 つに割れていた**（★緑の実数え上げで出た）:
       ・portal 層 --ies-jade-dark   = #1f9e6c
       ・本体層   --cl-primary-dark  = #1f9f6c（header.php:414）
       ★★緑の 1 段だけが違う＝ 見て分かる差ではないが、★**同じ役に 2 つの値**が在る状態。
     ★★どちらへ寄せたか = **本体層の #1f9f6c**。★根拠 = K-936 がこの値を選んだときの実測
       （★淡色面の上の文字 4.46:1 → 4.51:1 ／ 暗地の文字 5.30:1 → 5.36:1）。
       ★★＝ 明るい側へ寄せると、K-936 が直した 4.5:1 未達へ**戻ってしまう**。
     ★★実測（laneJ が計算・検算 #000/#fff=21.00・#767676/#fff=4.54 と一致）:
       #1f9e6c は面 #1e1e22 の上で 4.88:1 ／ #1f9f6c は **4.93:1**。★どちらも 4.5:1 を満たす。
     ★★**明るい配色は 1 バイトも触っていない**（★この節は [data-theme="dark"] の中）。
     ★同じ訂正を assets/css/sidebar-shared.css:99 にも入れた（★教室サイトはそちらが唯一の定義元）。 */
  --ies-jade-dark: #1f9f6c;
  /* ★★K-1219（2026-08-30）: ★★**hover の向きが明るいテーマと逆になる。**
     ★暗いテーマのボタンは「暗い文字 × 明るい緑」なので、hover は**明るく**する。
     ★実測 = 文字 #1e1e22 × #2ecf8f = **8.26:1**（★通常時の #1f9f6c は 4.93:1）。
     ★★明るいテーマと同じ「濃くする」をやると、暗い文字との差が縮んで**落ちる**。 */
  --ies-jade-hover: #2ecf8f;
  --ies-jade-soft: #142a20;      /* 暗い緑地 */
  --ies-jade-light: #3ee0a0;
  --ies-coral: #ff7a5c;
  --ies-coral-dark: #e85a3a;
  --ies-coral-soft: #2e1a14;     /* 暗いコーラル地 */
  /* ★★2026-09-06: 「決まった行」の面（★暗い配色）。★★値は **相澤さんが目視で採られたもの**（K-649）。
     ★実測（★当時の記録）= 副文字 6.29:1 ／ 緑の札 7.46:1 ／ ふつうの行との差 1.107。★勝手に動かさない。 */
  --ies-settled: #3a1f22;
  --ies-blue: #6b8cff;           /* #0017c1 は暗背景で沈むため明度↑ */
  --ies-blue-soft: #1e2640;      /* 暗い青地 */
  --ies-info: #4d9bf0;

  /* State */
  --ies-warn: #e0a030;
  --ies-warn-soft: #2e2410;      /* 暗い琥珀地 */
  --ies-danger: #f2564f;         /* 暗背景で視認できる赤 */
  --ies-danger-soft: #2e1616;    /* 暗い赤地 */
  /* ★★K-1219（2026-08-30）: ★★**明るいテーマの値をそのまま使うと壊れる。**
     ★実測 = 明るい側で選んだ #B91C1C を暗い地 #2e1616 に載せると **2.61:1**（★4.5 未達）。
     ★→ 暗いテーマでは既存の `--ies-danger`（#f2564f）がそのまま文字色になる（**5.01:1**）。
     ★hover 地も向きが逆（明るくする）= #3a1c1c（**4.56:1**）。★1 段明るい #3d1d1d は 4.47:1 で落ちる。 */
  --ies-danger-ink: #f2564f;
  --ies-danger-soft-hover: #3a1c1c;
  /* ★★2026-08-30（K-1228）: 淡い地の上の文字（★明るい配色の相方）。
     ★★**暗い配色では既存の色がそのまま 4.5:1 を満たす**ので、★新しい色を作っていない。
       ・`#e85a3a`（= `--ies-coral-dark`）× 暗いコーラル地 #2e1a14 = **4.67:1**
       ・`#e0a030`（= `--ies-warn`）      × 暗い琥珀地   #2e2410 = **6.72:1**
       ・`#4d9bf0`（= `--ies-info`）      × 暗い青地     #1a2030 = **5.62:1**
     ★★**別名（`var(--ies-coral-dark)`）ではなく実値を書いている理由** = ★明るい側と暗い側で
       ★**参照先が別のトークンになる**（★明るい側は専用の濃色）。★別名で書くと片側だけ意味が変わる。 */
  /* ★2026-08-30（K-1229）: 琥珀と青の `-ink` は作らなかった（★上の :root の注記を見よ）。 */
  --ies-coral-ink: #e85a3a;
  /* ★★2026-09-03（K-1409）: 琥珀と青の相方（★上の :root の訂正を見よ）。
     ★★**暗い配色では既存の色がそのまま 4.5:1 を満たす**ので、新しい値を 1 つも作っていない
       （★実測 = #e0a030 × #2e2410 = **6.72:1** ／ #4d9bf0 × #1a2030 = **5.62:1**）。 */
  --ies-warn-ink: #e0a030;
  --ies-info-ink: #4d9bf0;
  --ies-scrim: rgba(20, 20, 20, .5);   /* ★明るい配色と同値（★暗幕は配色で変えない） */

  /* 影(暗背景では黒影を強めに) */
  --ies-shadow-sm: 0 1px 2px rgba(0,0,0,.4);
  --ies-shadow-md: 0 4px 14px rgba(0,0,0,.5);
}

/* ═══════════════════════════════════════════════════════════════════════════
 * ★★★本体層のトークン（`--cl-*`）——★2026-09-07（段 B・配りの 1 本化）に `header.php` の `<style>` から移した。
 *
 * ★★**なぜ移したか**（★実測・配り台帳 `tools/nb-asset-ledger.php`）: ★`header.php` の `<style>` は B 型の画面にしか出ないので、
 *   ★A 型（`parts/header-portal.php`）の 10 枚には `--cl-*` が **1 つも無かった**。★部品が `--cl-*` を使うと A 型で宣言ごと無効になる。
 * ★★**値も注記も 1 文字も変えていない**（★字下げだけ外した）。★★2 層（`--ies-*` と `--cl-*`）を 1 つのファイルに置く ＝ 届く画面が同じになる。
 * ★★**2 層を 1 層へ畳む話は別の 1 手**（★同じ意味のトークンが 2 つ在ることは変わっていない）。
 * ═══════════════════════════════════════════════════════════════════════════ */
:root {
    /* K-936 (2026-08-17): コントラスト是正 第1弾。白文字を乗せる用途(主ボタン等)が
       WCAG 4.5:1 未達だったため、色相(H)・彩度(S)は変えず明度(L)のみ下げた。
       新しい緑・コーラルは作らず、既に合格している値に寄せて統一した(詳細は各行コメント)。
       検算(自前スクリプト・#000/#fff=21.00:1, #767676/#fff=4.54:1 の既知値と一致を確認済み):
       --cl-primary       #00A86B→#00794E: 白文字 3.08:1→5.46:1 (H158.2°→158.7°、Sそのまま)
         = portal層 --ies-jade-dark と同値に統一(3つ目の緑を作らない・決定1)。
       --cl-primary-dark  #00935C→#00794E: 白地上の文字 3.94:1→5.46:1、
         バッジ文脈(primary-light地) 3.55:1→4.93:1。portal層 --ies-jade-dark と同値に統一。
         ★副作用(第1弾時点): cl-primary と cl-primary-dark が同値になるため、両方を使う
         hover差分(例 .nbt-settings__btn--primary / .sv-ok 系)の色変化が消える
         (色の悪化ではなく「濃淡の段」が無くなるだけ)。

       K-937 (2026-08-17): コントラスト是正 第2弾。上の副作用を解消。
       --cl-primary-dark #00794E→#006843: H158.68°/S100%を保ったまま L 23.73%→20.46%
         (二分探索で「基準色とのコントラスト比が1.25:1以上になる境界」を探索し、
         条件を満たす中で最も明るい値=最小限の暗化に丸めた)。
         実測(自前スクリプト・検算 #000/#fff=21.00:1・#767676/#fff=4.54:1 と一致を確認済み):
           dark vs 基準色(#00794E)  = 1.256:1 (条件C: 目で分かる差 ≥1.25:1を満たす)
           dark vs 白               = 6.860:1 (条件A/B: 4.5:1以上。コントラスト比は
                                      fg/bg の役割に依らず対称なので白地文字/白文字背景の
                                      両方を1回の計算で満たす)
           dark vs primary-light(バッジ文脈#E6F7F1) = 6.187:1 (旧#00794E時点は4.926:1・改善)
         ②Tailwind config層 primary.dark・③予備クラス層(.text-primary-dark 等)も
         同じ #006843 に揃えた(3層とも同一値)。
       --cl-accent-dark は①層(:root)に**未定義のまま据え置いた**(新規作成しなかった)。
         理由 = 他ファイル(employee-manage.css・ui-header.php・single-career_column.php・
         subject-chips.css・page-staff-student-manage.php 等)が
         `var(--cl-accent-dark, #E85A3A)` という**フォールバック付き参照**を使っており、
         かつそれらのコメントに「--cl-accent-dark は header.php に存在しない(実測)」と
         明記されている=「未定義であること」を前提にコードが書かれている。
         ここで --cl-accent-dark を新規定義すると、CSS変数のフォールバックは
         「未定義の時だけ」発動する仕様のため、上記ファイル群のフォールバック値
         (#E85A3A)が黙って上書きされ、header.php を1バイトも触っていない
         他ファイルの表示色が変わってしまう(=今回の作業範囲=header.php 1本、の外側)。
         ②Tailwind config層・③予備クラス層の accent.dark は
         var() 参照ではなく直値hexなので、この問題とは無関係に #C82500 へ更新済み。
         ★★決めてほしい: --cl-accent-dark を①層にも定義して3層完全一致にするか
         (影響範囲=上記ファイル群の見た目が変わる。悪化ではなく改善方向の値だが、
         このレーンの外での変更になる)。報告の先頭に記載。 */
    /* ★★2026-08-21: **primary の 1 系統だけ**を「値の埋め込み」から「配色に追従する形」へ変えた。
       ★★2026-08-21 訂正: 旧記述の `--cl-primary: #00794E;` 等（直値 hex）は失効。
         ★上の K-936 / K-937 のコメント（値の算出根拠）は**そのまま有効**。★値は 1 も変えていない。
       ★★何のために変えたか = `bg-primary/10` のような**半透明つきの色**が、
         ★暗い配色に切り替わっても追従しないため。★理由 = Tailwind の不透明度修飾子は
         **色が hex か rgb() の「数値」でないと合成できない**。★`var(--cl-primary)` を
         そのまま渡すと `bg-primary` は効くが `bg-primary/10` が**作れない**
         （★同じ壁の記録 = `assets/css/pages/tenant-settings.css:36`
           「--cl-primary は hex なので rgba(var(--cl-primary)) と書けない」）。
       ★★やり方 = **色を「R G B の 3 数字」で持つ**。★そうすると
         `rgb(var(--cl-primary-rgb) / .10)` と書けるので、★半透明の側も配色に追従する。
         ★★これで **`bg-primary/10` を使っている箇所を 1 つも書き換えずに**追従させられる。
       ★★静かな壊れ方への安全弁: ★3 数字の側が**未定義になると、薄いところだけでなく
         `bg-primary` ごと消える**（★未定義の var() は宣言ごと無効になるため）。
         ★だから参照側は **すべて `var(--cl-primary-rgb, 0 121 78)` と控えの値つきで書く**。
         ★★＝ 3 数字を消しても、色は**元の値のまま出る**（★消えない）。
       ★★数字の対応（★hex から変換しただけ・新しい色ではない）:
         #00794E = 0 121 78 ／ #006843 = 0 104 67 ／ #E6F7F1 = 230 247 241。
       ★★**accent / ink / muted / border / warn / info は今回触っていない**（★戻せる単位で刻む）。 */
    --cl-primary-rgb:       0 121 78;     /* = #00794E */
    --cl-primary-dark-rgb:  0 104 67;     /* = #006843 */
    --cl-primary-light-rgb: 230 247 241;  /* = #E6F7F1 */
    /* ★★hex 名の 3 トークンは**この 3 数字から作る**。★二重定義にしない
       （★同じ色を 2 か所に書くと片方だけ直る＝ このファイルが今日直した --ies-text-mute と同じ事故）。 */
    --cl-primary:       rgb(var(--cl-primary-rgb, 0 121 78));
    --cl-primary-dark:  rgb(var(--cl-primary-dark-rgb, 0 104 67));
    --cl-primary-light: rgb(var(--cl-primary-light-rgb, 230 247 241));
    /* ★★★2026-09-29（W-186・K-1936 ③・本棚 [581]）: **緑の塗りの上に載せる字と絵の色**（★`--cl-primary` と組で使う）。
       ★明るい配色 = 白（緑 0 121 78 の上で 5.46:1）／ 暗い配色 = 濃い字 22 22 26（緑 46 207 143 の上で 8.97:1・濃い緑 31 159 108 の上で 5.38:1）。
       ★★なぜ要るか = 暗い配色では緑が明るくなるのに、画面の手書きの `text-white` は白のまま ＝ **2.01:1** で読めなかった。
         ★上の K-936 の二者択一（緑を暗くすると、緑を字に使う所が壊れる）を、緑ではなく *上の字* を配色で変えて解いた。
       ★使い方 = Tailwind の `text-on-primary`（`bg-primary` ／ `bg-primary-dark` の上）／ CSS の `var(--cl-on-primary)`。
       ★`--nbh-on-jade`（header-shared.css）はこれを読む（★同じ値を 2 か所に書かない）。 */
    --cl-on-primary-rgb: 255 255 255;
    --cl-on-primary:     rgb(var(--cl-on-primary-rgb, 255 255 255));
    /* --cl-accent #FF6B4A→#e52a00: 白文字 2.82:1→4.50:1。H10.9°→11.0°(色相維持)、
       Sは100%のまま、Lのみ64.5%→44.9%へ(4.5:1を満たす中で最も明るい値・二分探索)。
       コーラルの「赤らしさ」(暖色・高彩度)は保持。★--cl-bg(#FAFAF7)を地にした場合は
       4.31:1 で僅かに未達(白そのものが地なら4.50:1・報告に明記)。

       K-937 (2026-08-17) 第2弾: ②Tailwind config層・③予備クラス層の accent.dark
       (旧#E85A3A)を #C82500 に更新(直値hex・var()参照ではない)。
       H11.00°/S100%を保ち L 44.90%→39.31%(基準色とのコントラスト1.25:1以上になる
       境界を二分探索・最も明るい値)。実測: dark vs 基準色(#e52a00)=1.253:1、
       dark vs 白=5.644:1(≥4.5、条件A/B両方)。dark vs accent-light(#FFF0ED)文脈
       =5.09:1(旧#E85A3Aは3.18:1で実は未達だった・改善)。
       ★★2026-08-17 追記(親が判断): --cl-accent-dark を①層にも **定義した**(下行)。
         ★担当は「他ファイルが `var(--cl-accent-dark, #E85A3A)` というフォールバック付き参照を
           使っているので、定義すると黙って上書きされる」ことを理由に見送ったが、
         ★★親が裏を取ったところ **予備値を書いていない参照が 2 か所あった**:
             assets/css/pages/subject-chips.css:255   color: var(--cl-accent-dark);
             page-staff-lesson-settings.php:978       color: var(--cl-accent-dark);  ← ★保存失敗の文字色
           ★★＝ 変数が無いので **色が何も当たっていない**(保存に失敗しても文字が赤くならない)。
           ★★定義すればこの 2 か所は **直る**。
         ★フォールバック付きの 5 か所(employee-manage.css / ui-header.php / single-career_column.php)は
           旧 #E85A3A のまま取り残されており、★accent 本体を変えた今 **そこだけ色が割れている**。
           ★★定義すれば全部が新しい値に揃う＝「統一」の目的そのもの。
         ★値は担当の算出どおり #C82500 (H11.00°/S100% を保ち L44.90%→39.31%)。
           実測: 白と 5.644:1 ／ 基準色 #e52a00 と 1.253:1(濃淡が目で分かる) ／
                accent-light(#FFF0ED)地の文字として 5.09:1(旧 #E85A3A は 3.18:1 で未達だった)。 */
    /* ★★★2026-08-30（K-1225・段 1）: **3 数字を正本にし、hex 名はそこから作る。**
     *   ★★**上の `--cl-primary` と同じ作法**（★同じ色を 2 か所に書かない）。
     *
     * ★★**なぜ足したか（★実測 2026-08-30）**: ★`tailwind.config` の
     *   `accent` / `surface` / `ink` / `muted` / `border` は **生の hex を直書き**しており、
     *   ★★**暗い配色に追従していなかった。**
     *   ★実測（★組み立てた CSS の原文で確認）=
     *     `.text-ink { color: rgb(26 26 30) }` … ★**変数を読んでいない**
     *     `.bg-primary { background-color: rgb(var(--cl-primary-rgb, …)) }` … ★対照・読んでいる
     *   ★★**暗い配色では地（`var(--cl-bg)`）だけが暗くなり、その上に黒い文字が出ていた。**
     *   ★★**該当 = 3,845 か所**（`text-muted` 1,290 ／ `border-border` 912 ／ `text-ink` 744 ほか）。
     *
     * ★★**値は 1 つも変えていない。★hex を 10 進の 3 数字にしただけ。**
     * ★★**控えの値（`, 229 42 0` 等）を消さないこと。**★3 数字が未定義になると、
     *   ★半透明のところだけでなく **その色が丸ごと透明になる**（★エラーは出ない）。
     *   ★この書き忘れは `.githooks/check-added-lines.php` の規則⑦ が commit 時に止める。 */
    --cl-accent-rgb:       229 42 0;      /* = #e52a00 */
    --cl-accent-dark-rgb:  200 37 0;      /* = #C82500 */
    --cl-accent-light-rgb: 255 240 237;   /* = #FFF0ED */
    /* ★★★2026-09-04（★K-1460 の *教室サイト側*）: **地を一段沈めた。**
     *   ★★**相澤さんのご指示（逐語）** =「ただし **面で設計するは全面的に統一したい**です」。
     *
     * ★★**何が起きていたか（★実測。★推測ではない）**:
     *   ★社員サイトの地は同じ日に `assets/css/tokens.css` の `--ies-bg` で一段沈めたが、
     *   ★★**`tokens.css` と `base.css` は `functions.php` の `noberu_is_employee_site()` が
     *     真のときしか積まれない**（★`functions.php:897` の early return）。
     *   ★★**＝ 教室サイト（`noberu.net/{教室コード}/`）には 1 バイトも届いていなかった。**
     *
     * ★★**教室サイトの地を塗っているのは、★このファイル自身である**（★下の `body` の節）:
     *     `body { background-color: var(--cl-bg); }`
     *   ★社員サイトでは `base.css:15` が `wp_head()` の中で **後から**同じ `body` を塗るので、
     *     ★同じ詳細度で後勝ち ＝ あちらは `--ies-bg` が効いている。
     *   ★★**＝ 1 つのファイルが両サイトの地を書いているが、★効くのは教室サイトだけ。**
     *
     * ★★**値は `tokens.css` の `--ies-bg`（明るい側）と同値**（★★新しい色を作っていない）。
     * ★★**測った差**（★面＝白 との比。★式は `#000/#fff=21.00` と `#767676/#fff=4.54` で検算済）:
     *     ・旧 … 面 / 地 = **1.046 倍** ＝ ★段が見えず、境目を 1px の線で描くしかなかった
     *     ・新 … 面 / 地 = **1.119 倍** ＝ ★社員サイトと同じ段
     *   ★★**Tailwind の `surface` もこの 3 数字を読む**ので（`tailwind.config.js` の `surface`）、
     *     ★`bg-surface` **529 か所**が同時に追従する。★別途書き換える必要は無い。
     * ★★**暗い配色は触っていない**（★元から面と地に差が付いている）。 */
    --cl-bg-rgb:           242 242 242;   /* ★= tokens.css の --ies-bg（明るい側）と同値 */
    --cl-ink-rgb:          26 26 30;      /* = #1A1A1E */
    /* ★★★2026-09-04: **薄い字を一段濃くした。★地を沈めた *ことによって* 床が割れるため。**
     *   ★★**実測**（★上と同じ式・同じ検算）:
     *     ・旧い値 … 面 4.83 ／ 副地 4.40 ／ ★★**新しい地 4.32** ＝ ★★**床 4.5 割れ**
     *     ・新しい値 … 面 5.22 ／ 副地 4.75 ／ **新しい地 4.67** ＝ ★★**3 つの面すべてで床を越える**
     *   ★★**値は `tokens.css` の `--ies-text-mute` と同値**
     *     （★親が同じ日に・同じ理由で決めた値。★★**3 つ目の灰色を作らない**）。
     *   ★★**門はこの組を見ていない**（★正直に書く）——
     *     ★`tools/nb-test-visual-static.php` は「Tailwind の class で当てた色」を射程の外と
     *     ★自分で宣言しているので、★★**`bg-surface` × `text-muted` の組は機械では 1 度も判定されない。**
     *     ★★＝ 上の比は**手で計算した**（★検算つき）。★門の緑はこの是正の根拠ではない。 */
    --cl-muted-rgb:        99 109 126;    /* ★= tokens.css の --ies-text-mute（明るい側）と同値 */
    --cl-border-rgb:       227 227 227;   /* = #E3E3E3。★K-1214 で portal 層の --ies-border と同値に統一 */
    --cl-accent:        rgb(var(--cl-accent-rgb, 229 42 0));
    --cl-accent-dark:   rgb(var(--cl-accent-dark-rgb, 200 37 0));
    --cl-accent-light:  rgb(var(--cl-accent-light-rgb, 255 240 237));
    /* ★★2026-09-04: **控えの 3 数字も一緒に直した。**★★片方だけ直すと、
       ★3 数字が未定義になった場面（★このファイルを通らない画面）で**旧い地が出る**
       ＝ ★同じ色を 2 か所に持ったまま片方だけ直す、★この repo が何度も踏んだ形になる。 */
    --cl-bg:            rgb(var(--cl-bg-rgb, 242 242 242));
    --cl-ink:           rgb(var(--cl-ink-rgb, 26 26 30));
    --cl-muted:         rgb(var(--cl-muted-rgb, 99 109 126));
    --cl-border:        rgb(var(--cl-border-rgb, 227 227 227));
    --cl-surface:       #FFFFFF;   /* ★Tailwind の `surface` は **この値ではない**（下の注記） */
    /* ★★K-1024 (2026-08-20): 予約管理を **本体層へ寄せる**ために足りなかった 4 つ。
       ★★相澤さんの逐語 =「そもそも予約管理は本体に移行移設したのに **css が旧 portal である
         ことが問題**ですから **根本的に解決**してください」
       ★★＝ portal 層（`--ies-*`）で書かれていた画面を、★座席管理と同じ本体層へ翻訳する。
         ★その途中で「本体に受け皿が無い」ものが 4 つ出た。★**丸めずに足す**
         （★近い値へ寄せると、★余白や枠が黙って変わる）。
       ★値は portal 層の正本（`assets/css/tokens.css`）から **そのまま写した**。★新しい値ではない。
       ★★これは **追加だけ**。★上の色トークンは 1 つも変えていない＝ 既存の画面はバイト単位で不変。 */
    /* ★★★2026-09-03（K-1392）訂正: **`#C8C8C8` は失効していた。**
       ★★**この行は「= --ies-border-strong」と名乗りながら、値が向こうと違っていた。**
         ★portal 層（`assets/css/tokens.css:51`）は **2026-08-30 に `#949494` → `#8C8C8C`** へ直されており、
         ★★**本体層だけが取り残されていた**（★`#C8C8C8` は白地に **1.67:1**）。
       ★向こうの注記（★そのまま引く）=「#949494 は白地では 3.03 だが、地(#FAFAFA)で 2.91・
         副地(#F4F4F4)で 2.76 と落ちた。★**この枠は 3 つの面すべての上に載るので、
         全部で 3:1 を満たす値**を選び直した（白 **3.36** ／ 地 **3.22** ／ 副地 **3.06**）」。
       ★★**基準は WCAG 1.4.11（Non-text Contrast）の 3:1** であって、文字の 4.5:1 ではない。
         ★★**＝ `#8C8C8C` は基準を満たしている。**★「一段濃くしても届かない」は 4.5 と取り違えた誤り。
       ★★**新しい色を決めていない。**★相澤さんのご指示（逐語・2026-09-03）=
         「デザインシステムやコンポネント化ではどう定義されてるの？**それに従ってください**」。
       ★★**なぜ門が捕まえなかったか**: ★commit 前の「トークンのずれの門」は **CSS だけ**を読む。
         ★★**`header.php` は PHP なので、この行は 1 度も照合されていなかった**（★親へ起票）。 */
    --cl-border-strong: #8C8C8C;   /* = --ies-border-strong（★同値の写し）。★入力欄の枠（地の枠より 1 段強い） */
    --cl-ink-sub:       #5C5C5C;   /* = --ies-text-sub。★--cl-muted(#6B7280) より 1 段濃い字 */
    --cl-shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);   /* = --ies-shadow-sm */
    --cl-shadow-md: 0 4px 12px rgba(0, 0, 0, .06);  /* = --ies-shadow-md */
    /* K-915: 注意(warn) / 情報(info)。値はモック 10 枚の実測 hex(出現数は docs/ui/specs/2026-08-08-tokens-amber-info.md)。
       warn = 手が要るが失敗ではない(未処理・申請中・進行中)。info = 中立の情報(分類・属性・予定)。
       ★失敗はコーラル(accent)、正常・選択・リンクは緑(primary)。★土曜に info を使わない。 */
    /* ★★2026-08-22: warn / info を **配色に追従する形**（3 数字）へ。★K-1035 が primary に
         施したのと同じやり方。★★**値は 1 つも変えていない**（★hex から数字へ書き換えただけ）。
       ★★なぜ warn / info だけか = ★この 2 系統は **元から追従していた**（`var(--cl-warn)` 参照）。
         ★だから 3 数字にしても**明暗どちらの色も変わらない**。★得るものは 1 つだけ ——
         ★★**不透明度修飾子（`bg-warn/10` 等）が使えるようになる**（★従来は無言で透明だった）。
       ★★accent / ink / muted / border / surface は **今回わざと変えていない**。
         ★理由 = あちらを追従させると**暗い配色で文字が読めなくなる**。★地（`bg-white`）が
         追従しないため（★実測 = 暗い配色でも `bg-white` は `rgb(255, 255, 255)` のまま）。
         ★実測（白地に乗せたときのコントラスト・追従させた場合）:
           text-ink   17.35:1 → 1.23:1 ／ bg-ink+白文字 17.35:1 → 1.23:1
           text-muted  4.83:1 → 2.39:1 ／ text-accent    4.50:1 → 2.56:1
         ★★＝ **先に地（surface 層）を追従させるのが順序**。★詳細は報告と未決へ。
       ★★数字の対応（★hex から変換しただけ・新しい色ではない）:
         #D8B34A = 216 179 74 ／ #A3762A = 163 118 42 ／ #FDF3E0 = 253 243 224 ／
         #F0DCB4 = 240 220 180 ／ #4A6F9E = 74 111 158 ／ #EAF0F8 = 234 240 248。 */
    --cl-warn-rgb:       216 179 74;    /* = #D8B34A */
    /* ★★2026-09-02: 138 98 35（#8A6223）へ濃くした。★旧 163 118 42（#A3762A）は
       地 #FDF3E0 の上で 3.68:1 ＝ 床（4.5）割れ（★実測 = 教室設定の時間帯の注意文・夏期の札）。
       ★新値は同じ地の上で 4.95:1（計算）。★色相は変えていない（琥珀のまま濃くしただけ）。
       ★★琥珀そのものを部品から畳む話（K-1229）は別件 —— これは床の是正だけ。 */
    --cl-warn-dark-rgb:  138 98 35;     /* = #8A6223（旧 #A3762A・3.68:1 → 4.95:1） */
    --cl-warn-light-rgb: 253 243 224;   /* = #FDF3E0 */
    --cl-warn-line-rgb:  240 220 180;   /* = #F0DCB4 */
    --cl-info-rgb:       74 111 158;    /* = #4A6F9E */
    --cl-info-light-rgb: 234 240 248;   /* = #EAF0F8 */
    /* ★★2026-09-11: 「情報の濃い字」を足した（★warn-dark / accent-dark と同じ作法＝淡い地の上の字は同じ色相の濃い値）。
       ★値 = 座席管理の冬期講習の札・振替の札が元から使っていた紺 #1F4E7A（K-359 のパレット）。
       ★理由 = 座席管理の style をトークンへ寄せたとき、この紺が --cl-info（#4A6F9E）に置き換わり、
         淡い地 #EAF0F8 の上の字が 7.52:1 → 4.51:1（床ぎりぎり）に落ちた（担当 CSEAT の実測）。★元の 7.52:1 へ戻す。 */
    --cl-info-dark-rgb:  31 78 122;     /* = #1F4E7A（淡い地 #EAF0F8 の上で 7.52:1） */
    /* ★★★2026-09-12: **「ふさがっている面」を 1 つ足した**（★相澤さんのご決定 =「（３）ふやしていいです」）。
     *
     * ★★**何に使うか** = ★予約管理の升が「社員の予定と重なっている・まだ枠が無い」とき地に敷く
     *   （`assets/css/pages/yoyaku-grid.css` の `td.is-busy-free`）。
     *   ★★**旧は `--cl-border`（面の *区切り* の色）を地に流用していた**（★あの画面が自分でそう申告していた）。
     *     ★区切りの色を面に敷くと、★★**区切りを 1 段濃くした日に、面の色も黙って変わる**。
     *
     * ★★**なぜ warn / info / accent で済まさないか**（★3 つ目の色を持ち込まない規律への答え）:
     *   ・`accent` = **失敗**。★重なりは失敗ではない（★相澤さん =「重なっていても承知で出す」）。
     *   ・`warn`   = **手が要るが失敗ではない**（★未処理・申請中）。★ここは人の手を求めていない。
     *   ・`info`   = **中立の情報**（★分類・属性・予定）。★★いちばん近いが、
     *       ★`--cl-info-light` は **淡い青**で、★この画面では「選ばれている升」と読める
     *       （★同じ表の中で緑＝公開中・赤＝被っている と並ぶので、★3 色目の *有彩色* を増やしたくない）。
     *   ★★＝ **無彩色に寄せた「ふさがり」の面**を 1 つだけ足す。★字と枠は既にある色を使う（下）。
     *
     * ★★**足したのは 1 つだけ。★字と枠は足していない**（★同じ値を 2 か所に書かないため）:
     *   ・字 = `--cl-ink-sub`（明 #5C5C5C ／ 暗 #a8a8a4）
     *   ・枠 = `--cl-muted`  （明 #636D7E ／ 暗 #a8a8a4）
     *
     * ★★**測った比**（★式は `(L1+0.05)/(L2+0.05)`。★上の節と同じ式で、★`#000/#fff=21.00` と
     *   `#767676/#fff=4.54` で検算した）:
     *     ・面の段  … 白 #FFFFFF / この面 = **1.205** ／ 地 #F2F2F2 / この面 = **1.077**（★床 1.06 超）
     *     ・字      … `--cl-ink-sub` #5C5C5C をこの面に乗せて **5.55:1**（★床 4.5 超）
     *     ・枠      … `--cl-muted` #636D7E をこの面に乗せて **4.33:1**（★床は 3:1・WCAG 1.4.11）
     *     ・旧の面（#E3E3E3）との差 = **1.065** ＝ ★見て分かる差がある（★同じ色に丸めていない）
     *   ★★暗い配色 … 面 / `--cl-surface` #1e1e22 = **1.165** ／ 字・枠（#a8a8a4）= **5.98:1**。
     * ★★**片方だけ足すと `.githooks/check-added-lines.php` の規則⑦ が commit を止める**（★正しい）。 */
    --cl-busy-light-rgb: 232 234 237;   /* = #E8EAED（★ふさがっている面。★新しい値） */
    /* ★★hex 名の 6 トークンは**この 3 数字から作る**。★二重定義にしない
       （★同じ色を 2 か所に書くと片方だけ直る＝ K-1035 が --ies-text-mute で踏んだ事故）。
       ★他ファイルが `var(--cl-warn)` 等で参照しているので**消せない**（★導いて残す）。 */
    --cl-warn:          rgb(var(--cl-warn-rgb, 216 179 74));
    --cl-warn-dark:     rgb(var(--cl-warn-dark-rgb, 163 118 42));
    --cl-warn-light:    rgb(var(--cl-warn-light-rgb, 253 243 224));
    --cl-warn-line:     rgb(var(--cl-warn-line-rgb, 240 220 180));
    --cl-info:          rgb(var(--cl-info-rgb, 74 111 158));
    --cl-info-light:    rgb(var(--cl-info-light-rgb, 234 240 248));
    --cl-info-dark:     rgb(var(--cl-info-dark-rgb, 31 78 122));
    --cl-busy-light:    rgb(var(--cl-busy-light-rgb, 232 234 237));

    /* K-935 (2026-08-17): font / radius / spacing / tap の本体トークン。★追加のみ・上の色トークンは無変更。
       「規約が無い」「参照先が無い」の2穴の後者を埋める(散らばりの実測=器15種/縦余白12種/font-family直書き77行/生hex1148箇所320種)。
       ★light/dark で値が変わらない(色ではない)ので [data-theme="dark"] 側への追加は無い。

       font: 値は header.php 自身の body 宣言(下の body{font-family:…})・
         tailwind.config の fontFamily.sans/mono と**同一の文字列**を複製しただけ(新しい値ではない)。
         mono は page-*.php(本体層 51本)の raw font-family 宣言 24件中 21件がこの表記
         ('JetBrains Mono', monospace / 空白ゆれのみ)= 実測の多数派とも一致。

       radius: page-*.php(51本)の rounded-* 使用 計926件(内訳8種)を実測し、上位4種(計898件)をそのまま rem 化した。
         rounded-xl 309 / rounded-2xl 241 / rounded-lg 189 / rounded-full 159
         (次点 rounded-3xl 10・rounded-md 9・rounded-t 7・rounded-sm 2 は僅少のため段に採用せず)。
         ★値は Tailwind の生成値(lg=0.5rem/xl=0.75rem/2xl=1rem[config上書き]/full=9999px)と
         完全に同一の数値を複製しているため、Tailwind クラスと CSS 変数が食い違うことは構造上ない。

       sp: Tailwind の余白スケールは 1刻み=0.25rem が既定(configで上書きしていない)。
         --cl-sp-N を同じ N*0.25rem で定義したので、Tailwind の p-N/py-N/gap-N と値が常に一致する
         (2つの表を手で同期させるのではなく、同じ式から導く方式で食い違いを構造的に防ぐ)。
         py-2(8px)は page-*.php 内の py-* 306件で単独最多。

       tap: 実測の多数派ではなく指示値(相澤さん 2026-08-17「押せる高さを40にしていいか→いいです」)。
         ★pending-decisions.md [10] の争点(サイドバー等の実測が40px・44pxへ広げるか)と直結する数字。
         ★このKでは pending-decisions.md 側は更新していない(編集許可ファイル外)。要確認。 */
    --cl-font-sans: 'Noto Sans JP', sans-serif;
    --cl-font-mono: 'JetBrains Mono', monospace;

    --cl-radius-sm:   0.5rem;   /* 8px  = rounded-lg  (入力) */
    /* ★★2026-09-03（K-1399）訂正: 旧記述「12px = **ボタン**」は**失効した**。
       ★K-1206（2026-08-29）で**操作するもの（ボタン・入力欄）は 8px** と決まっている。
       ★★12px は「**中の器**」（★節の中のカード・小区画）。★カードは 16px。
       ★★**古いコメントは間違った地図である**（`review-discipline.md`）。 */
    --cl-radius-md:   0.75rem;  /* 12px = rounded-xl  (中の器。★ボタンではない・K-1206) */
    --cl-radius-lg:   1rem;     /* 16px = rounded-2xl (カード) */
    --cl-radius-full: 9999px;   /*      = rounded-full(チップ・バッジ) */

    --cl-sp-1: 0.25rem; /* 4px */
    --cl-sp-2: 0.5rem;  /* 8px  = py-2 相当・page-*.php 内 py-* で単独最多 */
    /* ★2026-10-21（K-2174・W-304 ②）: 10px = py-2.5 相当。★カードの中の一覧の行の縦の余白（相澤さんの答え「縦 10 × 横 12」）。★これが無いと raw px でしか書けない（★pre-commit の rawpx に止められる・8/18 の 20px と同じ訳） */
    --cl-sp-2-5: 0.625rem; /* 10px */
    --cl-sp-3: 0.75rem; /* 12px */
    --cl-sp-4: 1rem;    /* 16px */
    /* ★★2026-08-18 追加: 20px。★「●●設定」の枠どうしのすき間が 20px で、
       ★これが無いと raw px でしか書けなかった（★pre-commit の「角丸・余白の rawpx」に止められる）。
       ★★式は上と同じ N*0.25rem ＝ Tailwind の p-5 / gap-5 と一致する。
       ★★★portal 層の `--ies-sp-5` は **24px** で、**この値とは違う**（★あちらは 4/8/12/16/24/32/48 の刻み）。
          ★★2 つの層で `-5` の意味が揃っていない。★層をまたいで読み替えないこと。 */
    --cl-sp-5: 1.25rem; /* 20px = gap-5 (「●●設定」の枠どうしのすき間) */
    /* ★★K-1024 (2026-08-20): 予約管理を本体層へ寄せるときに、★portal 層の 24 / 32 / 48px を
         受ける段が本体に無かった。★**丸めずに足す**（★近い段へ寄せると余白が黙って変わる）。
       ★★名前は **この層の決まりどおり `N × 0.25rem`**（★上のコメントの規則）。
         ★だから 24px は `-6`、32px は `-8`、48px は `-12`。
         ★★**portal の `-5`(24px) を `--cl-sp-5`(20px) に読み替えてはいけない**（★上の警告のとおり）。
         ★★対応は **24px → `--cl-sp-6`**。★数字の一致ではなく **値の一致**で移すこと。
       ★Tailwind の p-6 / p-8 / p-12 とも値が一致する（★この層の設計どおり）。 */
    --cl-sp-6:  1.5rem; /* 24px = gap-6。★= portal 層の --ies-sp-5 */
    --cl-sp-8:  2rem;   /* 32px = gap-8。★= portal 層の --ies-sp-6 */
    --cl-sp-12: 3rem;   /* 48px = gap-12。★= portal 層の --ies-sp-7 */

    /* ★★2026-08-28（相澤さんのご決定・K-1185）: **押せるものの当たり判定を S / M / L の 3 段にした**。
       ★逐語 =「ボタンも SML みたいに 3 つのコンポーネントっていうのかな？ を
         あらかじめ設計しておいてケースごとにどれ使おうかな？みたいにやるといい」。
       ★★これはデザインシステムの標準的な形（サイズスケール）で、正しい。
       ★★**なぜ 3 段で足りると言えるか** = ★この日の実測で必要になった値が
         **ちょうど 3 つだった**（★偶然ではなく、場面が 3 種類あるということ）。

       ★★**旧 `--cl-tap-min`（40px 直値）の何が壊れていたか**（★2 つある）:
         ①★**名前が「最小」なのに、実態は既定値として 15 ファイル 34 行で使われていた。**
           ★＝ 名前が役割を誤らせ、★密な場所にも大きな値が流れ込んでいた
         ②★**40px はどの標準とも一致しない中間値**
           （WCAG 2.2 AA=24 ／ AAA=44 ／ Apple HIG=44 ／ Material=48）。
           ★★規約自身が「★指示値。実測の多数派ではない」と**根拠の薄さを自認していた**。
       ★★**だから値を据え置いて別名で迂回するのではなく、正面から組み直した。**
         ★逐語 =「古いルールは聖域だからと触れずにその他を刷新するとちぐはぐになりませんかね？」。

       ★★**旧名 `--cl-tap-min` は 40px のまま据え置いた**（★詳しい理由は下の定義の注記）。
         ★★2026-08-28 訂正: ここには「M への別名として残す」と書いてあったが、
           ★**実装はそうしていない**（★透明な帯 4 か所が無音で死ぬため据え置いた）。
           ★方針を変えたときの消し忘れだった（★レビューが指摘）。
       ★（既存の参照を一斉に書き換えない
         ＝ `review-discipline.md` §3「次に触る場所だけ」）。★新しく書くものは S/M/L を使う。 */

    /* ★S = 一覧の行の中に埋まっている小さなトグル。
       ★**周りを別の当たり判定が隙間なく囲んでいる**場所にだけ使う（★外しても隣に当たる）。
       ★例 = 予定タグの中の ToDo チェック。
       ★★値の根拠 = WCAG 2.2 の 2.5.8（AA）の下限ちょうど。★これ以上は下げられない。
       ★★実測（2026-08-28・本番の予定タグ）= ここに 40px は物理的に入らない:
         ・予定タグの高さ 53.8px。★チェックの下の余地 **9.8px**・隣の予定との隙間 **4px**
         ・親 `.ies-dash-week__day` が **`overflow: hidden`**
           （★`docs/ui/system/acceptance.md` が「必ず確かめろ」と警告している罠がここに在る）
         ・40px の帯は右のタイトルに **16.5px** 乗り、★**ドラッグの掴みどころを食う**
         ・24px なら上下左右 5.5px ずつで収まる（★右だけタイトルに 1.5px 乗るが無害） */
    --cl-tap-s: 24px;
    /* ★M = 既定。★迷ったらこれ。
       ★札（チップ）・ふつうのボタン・アイコンボタン・一覧の行。
       ★★`--cl-field-h`（文字を入れる欄の**見た目**）と同じ 32px。★同じ引き出しの中で
         段差を作らないため（★2026-08-20 に相澤さんが実画面で決めた値）。
         ★★ただし**役割が違うので連動させていない**（片方だけ変えたい日が来る）。 */
    --cl-tap-m: 32px;
    /* ★L = **単独で押すもの**。★周りに他の当たり判定が無く、外すと何も起きない場所。
       ★例 = 主要な確定ボタン・ヘッダーのアイコンボタン・スマホの主要導線。
       ★★**44px の根拠（★実測 2026-08-28・本番 4 画面）**:
         ・★**4 画面すべてでヘッダーの鐘と個人メニューが 44px** ＝ すでに事実上の標準
         ・Apple HIG の 44pt ／ WCAG 2.2 の 2.5.5（AAA）の 44px と一致する
       ★★**40px は廃止した。**★どの段でもない中間値で、
         ★実測ではテナント設定 1 画面に **51 件偏在**していた（★保存ボタンが全部 40px）。
         ★★**「全部が主要ボタンに見える」＝ これが「無駄にでかい」の正体だった。** */
    --cl-tap-l: 44px;
    /* ★★旧名。★★**2026-08-28 時点では 40px のまま据え置く**（★M への別名にしていない）。
       ★★**理由 = 別名にすると「透明な帯」を使っている 4 か所が静かに死ぬ**（★レビューの実測）:
         ・`inc/yoyaku/grid-slot-panel.php` … 「この内容で枠を作る」ほかの確定ボタン
         ・`inc/yoyaku/grid-event-panel.php` … 「保存する」「作成する」「取り消す」
         ・`assets/css/pages/tenant-settings.css` … 定員の行
         ・`assets/css/pages/subject-chips.css` … 単元の絞り込みの札
       ★いずれも `height:100%` ＋ `min-height: var(--cl-tap-min)` の形なので、
         ★親が 32px のとき `max(32,32)=32` ＝ **帯が 1px も広げなくなる**。
       ★★**見た目は 1px も変わらず、エラーも出ず、検査も落ちない**（★最悪の壊れ方）。
       ★★**順序**: ①上の 4 か所を明示的に `--cl-tap-l` へ書き換える
         → ②`templates/page-schedule-settings.php` と `templates/page-yoyaku-grid.php` の
           **自前の `--cl-tap-min:40px` を消す**（★これが在る限り「一斉に追従」は成り立たない）
         → ③そのうえでここを `var(--cl-tap-m)` にする。
       ★★**新しく書くものには使わない。★S / M / L を選ぶこと。** */
    --cl-tap-min: 40px;
    /* ★★2026-08-22（午後・相澤さん指示）: **文字を入れる欄の「見た目」の高さ**。
       ★逐語 =「**このスクショの部分の高さ 40px とかって高さが大きすぎてやぼったいんだよね
         これも 40px っていうなんかタップするところの最小の高さっていうルールがあるんだよね
         これも改訂してよりスタイリッシュになるようにしたいです**」。
       ★★`--cl-tap-min`（40px）と **役割が違う**:
         ・`--cl-tap-min` … **単独で押すもの**（ボタン・アイコンボタン・行・カード・札の当たり判定）
         ・`--cl-field-h` … **文字を入れる欄とプルダウンの見た目**（入力欄・textarea・select）
       ★★32px にした理由 = **札（チップ）が既に見た目 32px**（`docs/ui/system/acceptance.md`・
         2026-08-20 に相澤さんが実画面で決めた値）。★同じ引き出しの中で欄だけ 40px だと段差が出る。
       ★★アクセシビリティ = WCAG 2.2 の 2.5.8（AA）の下限は **24px**。★32px はこれを上回る。
         ★2.5.5（AAA）の 44px には届かない＝ 40px のときと **同じ位置**（AA は満たす／AAA は満たさない）。
       ★★**入力欄は「押す」ものではなく「書く」もの**＝ 見出しと欄が縦に並ぶので、
         ★指で狙う面は欄の高さだけではない。★ボタンと同じ下限を当てる必然が無い。 */
    --cl-field-h: 32px;
}
/* K-298a: 本体トークン --cl-* の Dark 対応。Light(:root)無変更・[data-theme="dark"] のみ・
   新トークン名は増やさず既存 --cl-* の dark 値を足すだけ。var(--cl-*) 参照(座席管理等162箇所)が
   一気に追従する。値は portal K-288 の --ies-* dark 値と色温度を揃え、noberu chrome(--ies-*)と
   本体(--cl-*)が同一画面で浮かないようにする。ブランド緑/コーラルは同系色の明度調整に留め化けさせない。
   ★生hex(#fff/#FFF8F6 等)・Tailwind bg-white は --cl-* ではないため本K では追従しない(後続 K-298b)。 */
[data-theme="dark"] {
    /* K-936 (2026-08-17): コントラスト是正 第1弾・Dark。
       ★★--cl-primary と --cl-accent は Dark では変更していない（意図的・未対応のまま）。
       理由 = 1つの値で「白文字を乗せるボタン地」と「暗い地の上の文字/枠線/アイコン」の
       両方を同時に満たせないことを実測で確認したため（トークンを増やさない制約の下では
       二者択一になり、どちらかを選ぶと他方が壊れる。以下は --cl-primary の実測、H/Sを保ったまま
       Lだけを動かして両方を試した結果）:
         L 49.6%(現状)… 白文字 2.01:1(未達) / 暗地上の文字 8.97:1(達成)
         L 32.2%(白文字ボタン用に下げた場合)… 白文字 4.54:1(達成) / 暗地上の文字 3.97:1(新たに未達)
         L 35.0%… 白文字 3.92:1(未達) / 暗地上の文字 4.61:1(達成)
       → 交差点の前後どちらでも両立しない。実際に `color: var(--cl-primary)` を文字色として使う
       箇所が seat-view.php・subject-chips.css・settings-shell.css・dashboard 系だけで20箇所以上あり、
       現状は 8.97:1 で余裕がある。ここを 3.97:1 まで落とす方が実害が大きいと判断し、
       ボタン地(白文字 2.01:1)は今回は据え置いた。--cl-accent も同型（現状 7.04:1 の文字用途が
       複数あり、白文字ボタン用に暗くすると 4.01:1 まで落ちて文字用途が壊れる）。
       ★★決めてほしい: 新トークン(例 --cl-primary-btn)を切って役割を分けるか、ボタン側の
       文字色を白から濃色に変える(コンポーネント側の変更・本レーン外)か。報告の先頭に記載。 */
    /* ★★2026-08-21 訂正: 旧記述の `--cl-primary: #2ecf8f;` /
         `--cl-primary-dark: #1f9f6c;` / `--cl-primary-light: #142a20;` は失効
         （★**値は 1 も変えていない**。★書き方だけを 3 数字に変えた）。
       ★★ここで hex 名の 3 トークン（--cl-primary 等）を**上書きしない**こと。
         ★:root 側が `rgb(var(--cl-primary-rgb, …))` で作っているので、
         ★**この 3 数字を差し替えるだけで hex 名の側も暗い値になる**（★自動で追従する）。
         ★上書きを足すと二重定義に戻る。
       ★★上の K-936 の算出根拠はそのまま有効:
         #1f9f6c は K-936 で #1f9e6c→#1f9f6c（バッジ文脈 4.46:1→4.51:1、暗地文字 5.30:1→5.36:1）。
       ★★**今回の変更で暗い配色の見た目が変わる箇所がある**（★意図した変更）:
         ★Tailwind の `bg-primary` / `bg-primary/5` / `/10` / `/15` / `/20` / `text-primary` /
           `border-primary` 等は、★これまで**明るい配色の緑 #00794E に固定**されていた
           （★config が直値 hex だったため、暗い配色でも追従しなかった）。
         ★★これからは暗い配色で **#2ecf8f（--ies-jade と同値）** で出る。
         ★★＝ 暗い配色のとき「portal 層のサイドバーだけ明るい緑・本体は暗い緑」という
           **食い違いが消える**方向に倒れる。
       ★★数字の対応: #2ecf8f = 46 207 143 ／ #1f9f6c = 31 159 108 ／ #142a20 = 20 42 32。 */
    --cl-primary-rgb:       46 207 143;  /* = #2ecf8f (= --ies-jade) */
    --cl-primary-dark-rgb:  31 159 108;  /* = #1f9f6c (K-936) */
    --cl-primary-light-rgb: 20 42 32;    /* = #142a20 (= --ies-jade-soft・暗い緑地) */
    --cl-on-primary-rgb:    22 22 26;    /* = #16161a（W-186・緑が明るくなるので上の字は濃く・旧 --nbh-on-jade と同値） */
    /* ★★★2026-08-30（K-1225・段 1）: 暗い配色の 3 数字。
     *   ★★**値は 1 つも変えていない**（★すぐ下の hex をそのまま 10 進にした）。
     *   ★★**明るい側にだけ足すと `.githooks/check-added-lines.php` の規則⑦ が commit を止める。**
     *     ★それが正しい —— ★片方だけだと、★**暗い配色でその色が丸ごと透明になる。** */
    --cl-accent-rgb:       255 122 92;   /* = #ff7a5c */
    --cl-accent-dark-rgb:  232 90 58;    /* = #e85a3a（★下の :545 と同値） */
    --cl-accent-light-rgb: 46 26 20;     /* = #2e1a14 */
    --cl-bg-rgb:           22 22 26;     /* = #16161a */
    --cl-ink-rgb:          232 232 230;  /* = #e8e8e6 */
    --cl-muted-rgb:        168 168 164;  /* = #a8a8a4 */
    --cl-border-rgb:       51 51 58;     /* = #33333a */
    --cl-accent:        rgb(var(--cl-accent-rgb, 255 122 92));   /* = --ies-coral */
    --cl-accent-light:  rgb(var(--cl-accent-light-rgb, 46 26 20)); /* = --ies-coral-soft (暗いコーラル地) */
    --cl-bg:            rgb(var(--cl-bg-rgb, 22 22 26));         /* = --ies-bg */
    --cl-ink:           rgb(var(--cl-ink-rgb, 232 232 230));     /* = --ies-text (オフ白) */
    --cl-muted:         rgb(var(--cl-muted-rgb, 168 168 164));   /* = --ies-text-sub (暗地で可読な muted) */
    --cl-border:        rgb(var(--cl-border-rgb, 51 51 58));     /* = --ies-border */
    --cl-surface:       #1e1e22; /* = --ies-surface */
    /* ★★K-1024 (2026-08-20): 明るい配色側に足した 2 つの、暗い配色側の値。
       ★値は portal 層の正本（`assets/css/tokens.css` の暗い配色の節）から**そのまま写した**。
       ★★暗い配色では `--cl-ink-sub` と `--cl-muted` が **同じ値になる**（★portal もそうなっている）。
         ★＝ 暗地では「1 段濃い字」と「薄い字」を分けていない。★明るい配色でだけ分かれる。
       ★影と余白は配色で変わらないので、★ここには足さない（★明るい側の 1 か所だけが正本）。 */
    /* ★★★2026-09-03（K-1392）訂正: 明るい側と同じ型の取り残し。★`#44444c` は portal 層と違っていた。
       ★portal（`tokens.css:300`）= `#707076`。★向こうの注記 =「暗い側の 3 面すべてで 3:1 以上」。 */
    --cl-border-strong: #707076; /* = --ies-border-strong（★同値の写し） */
    --cl-ink-sub:       #a8a8a4; /* = --ies-text-sub（暗地）。★--cl-muted と同値 */
    /* ★★K-1024 (2026-08-20): **暗い配色の `--cl-accent-dark` が無かった。**
       ★実測 = 明るい配色の `#C82500` がそのまま暗地に乗り、★暗地（`#1e1e22`）で **2.94:1**。
         ★★読みやすさの目安 4.5:1 を **下回っていた**（★予約管理の「日曜」の文字で表に出た）。
       ★値は portal 層の暗い配色の正本（`assets/css/tokens.css:147` の `--ies-coral-dark`）
         と同じ `#e85a3a`。★★実測 = 暗地で **4.71:1**（★親が計算して確かめた）。
       ★★これは予約管理だけの話ではない。★`--cl-accent-dark` を暗い配色で使っている
         画面すべてが、★いままで 2.94:1 で出ていた（★2026-08-17 に明るい側だけ定義したときの取り残し）。 */
    /* ★★2026-08-30（K-1225）: 3 数字から作る形にした（★上に `--cl-accent-dark-rgb` を置いた）。
       ★★**値は 1 バイトも変えていない**（`232 90 58` = `#e85a3a`）。 */
    --cl-accent-dark:   rgb(var(--cl-accent-dark-rgb, 232 90 58)); /* = --ies-coral-dark（暗地） */
    /* K-915: warn/info の Dark。K-298a と同じ方針で portal(--ies-*) の Dark 値へ寄せる
       (同一画面で chrome と本体が浮かないようにするため)。 */
    /* ★★2026-08-22 訂正: 旧記述の `--cl-warn: #E0A030;` など **hex 名の 6 行は失効**
         （★**値は 1 つも変えていない**。★書き方だけを 3 数字に変えた）。
       ★★ここで hex 名のトークン（--cl-warn 等）を**上書きしないこと**。
         ★:root 側が `rgb(var(--cl-warn-rgb, …))` で作っているので、
         ★**この 3 数字を差し替えるだけで hex 名の側も暗い値になる**（★自動で追従する）。
         ★上書きを足すと二重定義に戻る（★K-1035 が --ies-text-mute で踏んだ事故と同型）。
       ★★数字の対応: #E0A030 = 224 160 48 ／ #E8C078 = 232 192 120 ／ #2E2410 = 46 36 16 ／
         #4A3A1C = 74 58 28 ／ #4D9BF0 = 77 155 240 ／ #1A2030 = 26 32 48。
       ★旧コメントの根拠はそのまま有効:
         warn = --ies-warn (dark) ／ warn-dark = ★淡色面の上の文字ゆえ面の反転に合わせて明るくする
         (ink と同型) ／ warn-light = --ies-warn-soft (dark) 暗い琥珀地 ／
         warn-line = ★罫。--ies-border(dark) と同水準の明度で琥珀色相 ／
         info = --ies-info (dark) ／ info-light = --ies-surface-tint (dark) 情報地。 */
    --cl-warn-rgb:       224 160 48;    /* = #E0A030 */
    --cl-warn-dark-rgb:  232 192 120;   /* = #E8C078 */
    --cl-warn-light-rgb: 46 36 16;      /* = #2E2410 */
    --cl-warn-line-rgb:  74 58 28;      /* = #4A3A1C */
    --cl-info-rgb:       77 155 240;    /* = #4D9BF0 */
    --cl-info-light-rgb: 26 32 48;      /* = #1A2030 */
    --cl-info-dark-rgb:  141 189 245;   /* = #8DBDF5（★2026-09-11: 情報の濃い字の暗い配色版＝ warn-dark と同じく暗い地の上で明るくする） */
    /* ★★2026-09-12: 「ふさがっている面」の暗い配色。★明るい側と同じ役（★`--cl-surface` #1e1e22 より 1 段明るい面）。
       ★★**hex 名の `--cl-busy-light` はここで上書きしない**（★:root 側が 3 数字から作るので自動で追従する）。
       ★測った比 = 面 / `--cl-surface` = **1.165** ／ 字と枠（`--cl-ink-sub` / `--cl-muted` = #a8a8a4）= **5.98:1**。 */
    --cl-busy-light-rgb: 42 42 48;      /* = #2A2A30 */
}
