/* =============================================================================
   v6.373.0: 下請け催促 設定ページ（R1・受信と可視化）
   =============================================================================
   承認済みサンプル docs/samples/shitauke_staff_map_sample.html の配置に準拠。
   ⚠️ サンプルの生スタイル（.btn / border-radius:6px / 固定色）はそのまま採らない:
     ・ボタンは DESIGN.md §2 のピル型（9999px）= gs-btn / gs-btn-pill / gs-btn-primary を使う
     ・色は CSS 変数（--color-*）に寄せてダークモードで破綻させない
   ここに書くのは**このページ固有のレイアウト**（カード・統計・タグ）だけ。 */

/* 🩹 v6.387.0: **判定グループの表に横スクロールバーが常に出ていた**（1265px でも）。
     原因は幅の不足（`overflow` の設定ではない）。実測:
       .sh-wrap の内側 1080 − 左右 padding 32 = 1048
       → .sh-card-body の内側 1046 − 左右 padding 36 = **1010px**
       → 表は `min-width: 1040px`（v6.385.0 に「全欄 1440 + アラート −60 を合成して 1023px 必要」と
         実測した値）なので **30px 足りず**、`.sh-table-wrap { overflow-x: auto }` がバーを出していた。
     ⚠️ **`overflow: hidden` では直さない**（バーは消えても中身が見えなくなり、はみ出しに気づけなくなる）。
     ⚠️ **表の min-width も下げない**（1040 は「潰れない最小幅」として実測した値なので、
       下げると数値の入力欄が潰れる）。
     → **枠のほうを広げる**。1080 → 1140 で表の置き場が 1010 → **1070px**（30px の余裕つき）。 */
.sh-wrap { max-width: 1140px; margin: 0 auto; padding: 20px 16px 64px; }

/* ⚠️ v6.387.0: `.sh-head h1` / `.sh-lead` は**この変更で使われなくなったので削除した**
   （ページ上部の見出しと説明文を除去したため）。このファイルを読むのは
   alsok-renkei-settings.html **だけ**なので、他の画面への影響は無い。 */

/* ---------- トースト ---------- */
/* 🩹 v6.380.0: **この設定ページにも .toast の CSS が無かった**（ALSOK連携ページと同じ欠落）。
     `#toast` の要素はあり common.js の toast() も動いていたが、素の <div> のままなので
     保存メッセージが出っぱなしになっていた。⚠️ 信介さんの報告は ALSOK連携ページだったが、
     **並列箇所を grep して同時に直す** #92。
   ⚠️ `.toast` は style.css に無く、ページごとの CSS に並列定義されている。
     ここは dashboard.css:2630 の値をそのままコピーして揃える。 */
.toast {
  position: fixed; top: 72px; left: 50%; transform: translateX(-50%);
  padding: 10px 18px; border-radius: 9999px; z-index: 800;
  color: #fff; font-size: 13px; font-weight: 500;
  box-shadow: 0 4px 12px rgba(0,0,0,0.2);
  background: #202124;
  opacity: 0; pointer-events: none;
}
.toast.show    { opacity: 1; }
.toast.success { background: var(--color-green, #1e8e3e); }
.toast.error   { background: var(--color-red, #c5221f); }
.toast.info    { background: var(--color-primary, #1a73e8); }

/* ---------- カード ---------- */
.sh-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 10px;
  margin-bottom: 20px;
  overflow: hidden;
}
.sh-card-head {
  font-size: var(--text-sm, 15px); font-weight: 600; margin: 0;
  padding: 14px 18px;
  border-bottom: 1px solid var(--color-divider, var(--color-border));
  background: var(--color-surface-2);
  display: flex; align-items: center; gap: 10px;
  color: var(--color-text);
}
.sh-card-body { padding: 18px; }
.sh-head-count { font-size: var(--text-xs, 12px); color: var(--color-text-muted); font-weight: 500; }

/* 未登録カードだけ注意色の枠（サンプル準拠・アンバー系）。
   DESIGN.md §0-2 のアンバー＝「警告・保留」に対応。 */
.sh-card-alert { border-color: var(--color-amber, #f29900); }
.sh-card-alert .sh-card-head {
  background: rgba(242, 153, 0, 0.10);
  border-bottom-color: rgba(242, 153, 0, 0.35);
}
[data-theme="dark"] .sh-card-alert .sh-card-head { background: rgba(242, 153, 0, 0.16); }
.sh-count-badge {
  background: #B45309; color: #fff;
  font-size: 12px; font-weight: 700;
  border-radius: 9999px; padding: 2px 10px;
}

/* ---------- §1 受信状況 ---------- */
.sh-status-row { display: flex; flex-wrap: wrap; gap: 32px; align-items: flex-start; }
.sh-stat { min-width: 150px; }
.sh-stat-label { font-size: var(--text-xs, 12px); color: var(--color-text-muted); margin-bottom: 4px; }
.sh-stat-value { font-size: 19px; font-weight: 600; color: var(--color-text); }
.sh-stat-sub { font-size: 12px; color: var(--color-text-muted); margin-top: 2px; }
.sh-dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; margin-right: 6px; }
.sh-dot.ok { background: var(--color-green, #188038); }
.sh-dot.ng { background: var(--color-red, #c5221f); }
.sh-state-ok { color: var(--color-green, #188038); }
.sh-state-ng { color: var(--color-red, #c5221f); }
/* v6.374.0: 監視 OFF のときの「停止中」に添える注記（赤いだけだと「管制に伝わっている」と誤解される） */
.sh-state-note { display: block; font-size: 11px; color: var(--color-text-muted); font-weight: 500; margin-top: 2px; }

/* ---------- §1.5 受信の死活監視（v6.374.0 R2） ---------- */
/* トグルは DESIGN.md §2「単一フラグの ON/OFF はトグルスイッチ」の標準実装をそのまま置く。
   ⚠️ **共通化しに行かない**: 同じ 5 ルールが既に 8 ファイルに並んでおり（users / sites /
     customers / departments / order / monthly-shifts / syukan / dashboard）、
     #92「並列定義は意図された複製」の運用が確立している。ここだけ共通化すると
     「同じ部品なのに参照先が 2 通り」になるため、同じ値をコピーして揃える。 */
.toggle-with-label { display: inline-flex; align-items: center; gap: 10px; height: 44px; }
.toggle-with-label .label-text {
  font-size: var(--text-sm, 14px); color: var(--color-text); cursor: pointer; user-select: none; font-weight: 500;
}
.toggle-switch { position: relative; width: 36px; height: 20px; display: inline-block; flex-shrink: 0; cursor: pointer; }
.toggle-switch input { opacity: 0; width: 0; height: 0; }
.toggle-slider {
  position: absolute; inset: 0;
  background: var(--gray-300, #c7c9cc); border-radius: 9999px; transition: background 180ms;
}
.toggle-slider::before {
  content: ''; position: absolute; width: 16px; height: 16px; left: 2px; bottom: 2px;
  background: #fff; border-radius: 50%; transition: transform 180ms; box-shadow: 0 1px 2px rgba(0,0,0,0.15);
}
.toggle-switch input:checked + .toggle-slider { background: var(--color-primary, #1a73e8); }
.toggle-switch input:checked + .toggle-slider::before { transform: translateX(16px); }
.toggle-switch input:focus-visible + .toggle-slider {
  outline: 2px solid var(--color-primary, #1a73e8); outline-offset: 2px;
}

/* 見出し右の ON / OFF バッジ。**一目で分かること**が要件なので、
   OFF は「止まっている設定」だと分かるグレー、ON は緑にする。 */
.sh-hb-state {
  font-size: 12px; font-weight: 700; padding: 3px 12px; border-radius: 9999px; white-space: nowrap;
  background: rgba(60, 64, 67, 0.10); color: var(--color-text-muted);
}
.sh-hb-state.is-on { background: rgba(24, 128, 56, 0.12); color: #17784f; }
[data-theme="dark"] .sh-hb-state { background: rgba(255, 255, 255, 0.12); }
[data-theme="dark"] .sh-hb-state.is-on { background: rgba(129, 201, 149, 0.18); color: #81c995; }

.sh-hb-row { margin-bottom: 6px; }
/* v6.374.0: ON にできない理由をその場に出す（押せないだけだと「壊れている」と読まれる）。
   通常は説明色、ON のまま通知先を外した状態だけアンバー（DESIGN.md §0-2「警告・保留」）。 */
.sh-hb-guard { font-size: 12px; color: var(--color-text-muted); line-height: 1.7; margin-top: 2px; }
.sh-hb-guard.is-warn { color: #B45309; font-weight: 600; }
[data-theme="dark"] .sh-hb-guard.is-warn { color: #f0b429; }
/* 押せないトグルは見た目でも分かるようにする（クリックは input の disabled が止める） */
.toggle-switch.is-disabled { cursor: not-allowed; opacity: 0.55; }
.sh-hb-fields { display: flex; flex-wrap: wrap; gap: 18px 24px; align-items: flex-start; }
/* ⚠️ min-width:0 を付ける（親が flex なので、無いと中の select / input ではみ出す） */
.sh-hb-field { min-width: 0; flex: 0 1 auto; }
.sh-hb-field.sh-hb-actions { align-self: center; padding-top: 18px; }
.sh-hb-label { display: block; font-size: 12px; color: var(--color-text-muted); margin-bottom: 6px; }
.sh-hb-hint { font-size: 11px; color: var(--color-text-muted); margin-top: 5px; line-height: 1.6; }
.sh-hb-num { width: 150px; }
.sh-hb-num input {
  border: none; background: transparent; height: 100%; width: 100%; min-width: 0;
  font-size: var(--text-sm, 14px); font-family: inherit; font-weight: 500;
  outline: none; color: var(--color-text);
}
.sh-hb-unit { font-size: 12px; color: var(--color-text-muted); flex: 0 0 auto; }
#shHbChannel { min-width: 200px; }

/* 現在の状態の 1 行表示。途絶中はアンバー（DESIGN.md §0-2「警告・保留」）。 */
.sh-hb-status {
  margin-top: 16px; padding: 10px 14px; border-radius: 8px;
  font-size: var(--text-sm, 13px); line-height: 1.7;
  background: var(--color-surface-2); color: var(--color-text);
}
.sh-hb-status.is-lost {
  background: rgba(242, 153, 0, 0.10); border: 1px solid rgba(242, 153, 0, 0.35);
}
[data-theme="dark"] .sh-hb-status.is-lost { background: rgba(242, 153, 0, 0.16); }
.sh-hb-status .sh-hb-sub { display: block; font-size: 12px; color: var(--color-text-muted); margin-top: 3px; }

/* ---------- §1.6 催促の通知（v6.376.0 R3） ---------- */
/* 3 段階のスイッチ。⚠️ **今どの段階かが一目で分かること**が要件なので、
   トグル（2 値）ではなく**選ばれている 1 つが塗られる**形にする（DESIGN.md §2 の
   「単一フラグ = トグル / 複数から選ぶ = それ以外」の使い分け）。 */
.sh-rem-stages { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; }
.sh-stage-btn {
  flex: 1 1 200px; min-width: 0; text-align: left; cursor: pointer;
  border: 1px solid var(--color-border); border-radius: 10px;
  background: var(--color-surface); padding: 12px 14px;
  font-family: inherit; color: var(--color-text);
  transition: background 150ms, border-color 150ms;
}
.sh-stage-btn:hover:not(.is-active):not(:disabled) { background: var(--color-surface-2); }
.sh-stage-btn .sh-stage-name { display: block; font-size: var(--text-sm, 14px); font-weight: 700; }
.sh-stage-btn .sh-stage-desc { display: block; font-size: 11px; color: var(--color-text-muted); margin-top: 3px; line-height: 1.6; }
.sh-stage-btn:disabled { opacity: .5; cursor: not-allowed; }
/* 選択中。⚠️ 段階ごとに色を変える（停止=中立 / 試験運用=アンバー「保留」/ 本番運用=緑「稼働」）。
   DESIGN.md §0-2 の意味色に合わせる。 */
.sh-stage-btn.is-active { border-width: 2px; padding: 11px 13px; font-weight: 700; }
.sh-stage-btn.is-active[data-stage="off"]   { border-color: var(--color-text-muted); background: rgba(60,64,67,.06); }
.sh-stage-btn.is-active[data-stage="trial"] { border-color: var(--color-amber, #f29900); background: rgba(242,153,0,.10); }
.sh-stage-btn.is-active[data-stage="live"]  { border-color: var(--color-green, #188038); background: rgba(24,128,56,.10); }
[data-theme="dark"] .sh-stage-btn.is-active[data-stage="off"]   { background: rgba(255,255,255,.08); }
[data-theme="dark"] .sh-stage-btn.is-active[data-stage="trial"] { background: rgba(242,153,0,.16); }
[data-theme="dark"] .sh-stage-btn.is-active[data-stage="live"]  { background: rgba(24,128,56,.18); }

/* 見出し右のバッジ（停止 / 試験運用 / 本番運用）。.sh-hb-state を流用して色だけ足す */
.sh-hb-state.is-trial { background: rgba(242,153,0,.14); color: #B45309; }
.sh-hb-state.is-live  { background: rgba(24,128,56,.12); color: #17784f; }
[data-theme="dark"] .sh-hb-state.is-trial { background: rgba(242,153,0,.20); color: #f0b429; }
[data-theme="dark"] .sh-hb-state.is-live  { background: rgba(129,201,149,.18); color: #81c995; }

.sh-rem-table-wrap { margin-top: 16px; }
.sh-rem-table { min-width: 700px; }
.sh-rem-table td { vertical-align: middle; }
.sh-rem-cond { font-size: 12px; color: var(--color-text-muted); }
/* ⚠️ 表の中の数値入力は幅を固定する（可変にすると列がガタつく）
   v6.385.0: 同じ欄にチップ 2 つが入ったので **104 → 72px に狭めた**（信介さん指示）。
   ⚠️ `-60`（3 文字）が入り切ること。右寄せにして桁を揃える。
   🩹 **`.sh-select-pill` との複合セレクタで書く**（#96 詳細度・ソース順序の罠）。
     `.sh-select-pill { width: 100% }` はこのファイルの**後ろ**にあり、単独クラス同士だと
     ソース順で向こうが勝つ。実測したら箱は 72px ではなく **202px** になっていた
     （旧 104px も同じ理由で効いていなかった＝列幅いっぱいに広がっていた）。 */
.sh-select-pill.sh-rem-num { width: 72px; height: 36px; padding: 0 10px; flex: none; }
.sh-rem-num input {
  border: none; background: transparent; height: 100%; width: 100%; min-width: 0;
  font-size: var(--text-sm, 14px); font-family: inherit; font-weight: 500;
  outline: none; color: var(--color-text);
  text-align: right; font-variant-numeric: tabular-nums;
}
.sh-rem-actions { margin-top: 16px; }

/* ---------- v6.385.0 通知先チップ（本人 / 管制） ----------
   🚩 色は**報告状況の画面と同じ**にする（管制担当者は両方を見るので、
     同じ意味の表示は同じ色であるべき・v6.384.0 の「次：下番」で確立した作法 #92）。
     本人 = #188038（報告済みの緑 `.ar-step.is-done`）／ 管制 = #6D28D9（`.ar-band.is-attention` の紫）
   ⚠️ CSS は共有せず**同値をコピー**する（alsok-renkei.css は日々見る画面・こちらは設定画面）。 */
.sh-tg-cell { display: flex; align-items: center; gap: 7px; }
.sh-tg-chips { display: flex; gap: 4px; flex: none; }
.sh-tg-chip {
  display: inline-flex; align-items: center; justify-content: center;
  height: 24px; padding: 0 11px; border-radius: 9999px;
  font-size: 11px; font-weight: 700; white-space: nowrap; cursor: pointer;
  border: 1.5px solid var(--color-border); background: var(--color-surface);
  color: var(--color-text-faint, var(--color-text-muted));
  font-family: inherit; transition: background .12s, color .12s, border-color .12s; flex: none;
}
.sh-tg-chip:hover { border-color: var(--color-text-faint, var(--color-text-muted)); }
.sh-tg-chip.is-h.is-on { background: rgba(24,128,56,.12);  border-color: transparent; color: #188038; }
.sh-tg-chip.is-k.is-on { background: rgba(109,40,217,.12); border-color: transparent; color: #6D28D9; }
[data-theme="dark"] .sh-tg-chip.is-h.is-on { background: rgba(129,201,149,.18); color: #81c995; }
[data-theme="dark"] .sh-tg-chip.is-k.is-on { background: rgba(167,139,250,.20); color: #c4b5fd; }
/* 押せないチップ（前日確認（会社）の「本人」）。⚠️ 押せないことが**押す前に**分かる見た目にする */
.sh-tg-chip.is-locked {
  background: var(--color-surface-2); border-color: var(--color-divider, var(--color-border));
  color: var(--color-text-faint, var(--color-text-muted)); opacity: .55; cursor: not-allowed;
}
.sh-tg-chip.is-locked:hover { border-color: var(--color-divider, var(--color-border)); }
/* 両方とも押していない欄 = 送らない。**欄ごと沈ませて一目で分かるようにする** */
.sh-rem-table td.is-off { background: var(--color-surface-2); }
.sh-rem-table td.is-off .sh-rem-unit { opacity: .45; }
.sh-rem-num input:disabled { color: var(--color-text-faint, var(--color-text-muted)); cursor: not-allowed; }
/* ⚠️ こちらも複合セレクタ（`.sh-select-pill` の background / border に勝つため・#96） */
.sh-select-pill.sh-rem-num.is-off {
  background: var(--color-surface-2); border-color: var(--color-divider, var(--color-border));
}
.sh-rem-unit { font-size: 11px; color: var(--color-text-muted); flex: none; }

/* ---------- v6.387.0 設定例ブロック（表の**直下**・信介さんのサンプル準拠） ----------
   🚩 v6.385.0 は同じ内容を「凡例」として**表の上**に置いていたが、
     同じ形のチップが表の上にあると**説明ではなく本当の設定項目に見える**（信介さん指摘）。
     → 表の下へ移し、**点線枠 + 背景色 + 「設定例」バッジ**で本体と見た目を変える。
   ⚠️ **操作できないことは見た目ではなく構造で担保する**（下記 pointer-events + span 要素）。 */
.sh-tg-example {
  border: 1px dashed var(--color-border); border-radius: 10px;
  background: var(--color-surface-2); padding: 14px 15px; margin-top: 16px;
  /* 🚩 **クリックが要素に届かない**（見た目だけ無効にしない）。
     ⚠️ 中のチップは `<span>` なので**キーボードの焦点も入らない**（`<button>` にしないこと）。 */
  pointer-events: none; user-select: none;
}
.sh-tg-example .sh-tg-chip { cursor: default; }
.sh-tg-ex-head { display: flex; gap: 9px; align-items: center; margin-bottom: 3px; }
.sh-tg-ex-badge {
  font-size: 11px; font-weight: 800; letter-spacing: .06em; padding: 2px 9px; border-radius: 4px;
  background: var(--color-text-secondary, var(--color-text-muted)); color: var(--color-surface); flex: none;
}
.sh-tg-ex-title { margin: 0; font-size: 13.5px; font-weight: 700; color: var(--color-text); }
.sh-tg-ex-cap { margin: 0 0 12px; font-size: 12.5px; color: var(--color-text-muted); }
.sh-tg-ex-combos { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }
.sh-tg-ex-combo {
  display: flex; flex-wrap: wrap; gap: 9px; align-items: center; min-width: 0;
  background: var(--color-surface); border: 1px solid var(--color-divider, var(--color-border));
  border-radius: 8px; padding: 9px 11px;
}
.sh-tg-ex-means { font-size: 12.5px; color: var(--color-text); }
.sh-tg-ex-note {
  font-size: 12px; color: var(--color-text-muted); margin: 11px 0 0;
  display: flex; gap: 7px; align-items: flex-start; line-height: 1.7;
}
.sh-tg-ex-note > span:first-child { font-weight: 800; flex: none; }
.sh-tg-ex-note strong { color: var(--color-text); }
@media (max-width: 720px) {
  .sh-tg-ex-combos { grid-template-columns: minmax(0, 1fr); }
}

/* ---------- §2 未登録の氏名 ---------- */
.sh-unmatched {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 14px 0; border-bottom: 1px dashed var(--color-divider, var(--color-border));
}
.sh-unmatched:last-of-type { border-bottom: none; padding-bottom: 0; }
.sh-unmatched .sh-um-name { font-size: 17px; font-weight: 600; min-width: 130px; color: var(--color-text); }
.sh-unmatched .sh-um-meta { font-size: 12px; color: var(--color-text-muted); min-width: 210px; }

/* DESIGN.md §2-5: 入力欄はピル型ラッパーで包む（高さ 44px・9999px）。
   ⚠️ min-width:0 を付ける（親が flex なので、外さないと長いテキストでラッパーがはみ出す）。 */
.sh-select-pill {
  height: 44px; border-radius: 9999px; padding: 0 16px;
  background: var(--color-surface); border: 1px solid var(--color-border);
  display: flex; align-items: center; gap: 8px;
  min-width: 0; width: 100%;
}
.sh-select-pill select,
.sh-select-pill input.sh-picker-input {
  border: none; background: transparent; height: 100%;
  font-size: var(--text-sm, 14px); font-family: inherit; outline: none;
  font-weight: 500; cursor: pointer; color: var(--color-text);
  flex: 1 1 auto; min-width: 0;
}
.sh-select-pill input.sh-picker-input { cursor: text; }
.sh-select-pill input.sh-picker-input::placeholder { color: var(--color-text-faint, var(--color-text-muted)); font-weight: 400; }
/* 選択済みは太字にして「決まっている」ことを見せる */
.sh-select-pill input.sh-picker-input.is-picked { font-weight: 700; }

/* v6.373.0-fb1: 検索できる候補ピッカー。
   🚩 元請け「水本 真士」に対し当社は「水本 真土」で登録されており、氏名一致の候補しか出さない
     作りでは本人を選べなかった（士/土 は異体字ではなく別の漢字で正規化では吸収できない）。
   ⚠️ アクセス履歴の候補選択（access-log.js・v6.354.0）とは**共通化しない**（v6.354.0 で確定）。 */
.sh-picker { position: relative; flex: 1 1 340px; min-width: 0; max-width: 460px; }
.sh-picker-clear {
  border: none; background: transparent; cursor: pointer; flex: 0 0 auto;
  color: var(--color-text-muted); font-size: 18px; line-height: 1; padding: 0 2px;
}
.sh-picker-clear:hover { color: var(--color-text); }

.sh-suggest {
  position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 30;
  background: var(--color-surface);
  border: 1px solid var(--color-border); border-radius: 10px;
  box-shadow: var(--shadow-2, 0 4px 16px rgba(0,0,0,.14));
  max-height: 320px; overflow-y: auto; padding: 4px 0;
}
.sh-suggest-head {
  font-size: 11px; color: var(--color-text-muted);
  padding: 6px 12px 6px; border-bottom: 1px solid var(--color-divider, var(--color-border));
  line-height: 1.6;
}
.sh-suggest-item {
  padding: 9px 12px; font-size: var(--text-sm, 14px); cursor: pointer;
  color: var(--color-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.sh-suggest-item:hover,
.sh-suggest-item.is-active { background: var(--color-surface-2); }
.sh-suggest-empty { padding: 12px; font-size: 12px; color: var(--color-text-muted); }

/* ---------- §3 対応表 ---------- */
.sh-table-wrap { overflow-x: auto; }
/* ⚠️ v6.384.0: 締切超過の列が増えて 5 → 6 列になったので min-width を 760 → 880px。
   ⚠️ v6.385.0: 「通知の相手」列を消して 5 列に減ったが、**3 つの数値列にチップ 2 つが入った**ので
     必要な幅はむしろ増える（1 列あたり チップ 2 つ + 入力 72px + 単位 = 実測 217px）。
     🚩 **最長ケースを合成して実測した**（v6.382.1 の教訓）: 全欄に上限の `1440` と
       アラートに `-60` を入れて `width: max-content` で測ると **1023px**。
       880 のままだと数値列（縮まない）が条件列を潰すので **1040px** に上げた。
   ⚠️ 足りないと数値の入力欄が潰れる。**帯（.sh-table-wrap）が overflow-x: auto** なので
     狭い画面では表の中だけが横スクロールし、**ページ全体には横スクロールを出さない**。 */
.sh-table { width: 100%; border-collapse: collapse; font-size: var(--text-sm, 14px); min-width: 1040px; }
/* 判定グループ名は折り返さない（「作業終了・下番」が 2 行になると行の高さが揃わない） */
.sh-rem-table tbody td:first-child { white-space: nowrap; }
/* 表の上に置く締切超過の説明（グループごとになったので表の外に 1 つだけ置く） */
.sh-rem-overdue-note { margin: 4px 0 12px; }
/* v6.379.0: ヘッダーの文字が背景に沈んで読めなかったため**コントラストを上げた**（信介さん指摘）。
   ⚠️ 既存の管制系テーブル（site-shifts-list.css `.ssl-table thead th`）と**同じ配色に揃える** #92
     ＝ 帯の背景は `--color-surface-2`、文字は本文色。旧実装は `--color-text-muted` を
     背景なしで置いていたため、カード本体との差が出ず沈んでいた。
   ⚠️ 背景を敷いたので padding を上下対称にする（旧 `0 12px 10px` は帯にすると上が詰まる）。 */
.sh-table th {
  text-align: left; font-size: 12px; color: var(--color-text); font-weight: 600;
  padding: 10px 12px; background: var(--color-surface-2);
  border-bottom: 1px solid var(--color-divider, var(--color-border)); white-space: nowrap;
}
/* 列見出しの副題（単位の意味）。⚠️ 見出しより 1 段落とすが、沈ませない（muted は使わない） */
.sh-th-sub {
  display: block; margin-top: 3px; font-size: 11px; font-weight: 400;
  color: var(--color-text-secondary, var(--color-text-muted)); white-space: nowrap;
}
.sh-table td {
  padding: 13px 12px; border-bottom: 1px solid var(--color-divider, var(--color-border));
  vertical-align: middle; color: var(--color-text);
}
.sh-table tbody tr:last-child td { border-bottom: none; }
.sh-staff-name { font-weight: 600; }
.sh-code { color: var(--color-text-muted); font-size: 12px; }
.sh-empty { text-align: center; color: var(--color-text-muted); padding: 24px 12px; }

/* 催促の届き方タグ（本機能の要・信介さん判断9）。
   lw = LINE WORKS / push = アプリ通知 / none = どちらも無い（赤・行の背景も変える） */
.sh-tag {
  display: inline-block; font-size: 11px; font-weight: 700; padding: 3px 9px;
  border-radius: 4px; margin-right: 5px; white-space: nowrap;
}
.sh-tag.lw   { background: rgba(26, 115, 232, 0.12); color: #1a5fb4; }
.sh-tag.push { background: rgba(24, 128, 56, 0.12);  color: #17784f; }
.sh-tag.none { background: rgba(197, 34, 31, 0.12);  color: #b5262a; }
[data-theme="dark"] .sh-tag.lw   { background: rgba(138, 180, 248, 0.18); color: #8ab4f8; }
[data-theme="dark"] .sh-tag.push { background: rgba(129, 201, 149, 0.18); color: #81c995; }
[data-theme="dark"] .sh-tag.none { background: rgba(242, 139, 130, 0.18); color: #f28b82; }
/* v6.373.0-fb3: 自動で紐付いた行の印。
   ⚠️ 同じ .sh-tag を使うが**色は中立（グレー）**にする。lw / push / none は「催促が届くか」を
     表す色分けで、そこに 4 色目を足すと届き方の読み取りが濁る。「自動」は状態ではなく由来の注記。 */
.sh-tag.auto { background: rgba(60, 64, 67, 0.10); color: var(--color-text-muted); font-weight: 600; }
[data-theme="dark"] .sh-tag.auto { background: rgba(255, 255, 255, 0.12); color: var(--color-text-muted); }
/* 「催促が届きません」の行は背景も変えて一覧で拾えるようにする */
.sh-table tr.sh-warn-row { background: rgba(242, 153, 0, 0.07); }
[data-theme="dark"] .sh-table tr.sh-warn-row { background: rgba(242, 153, 0, 0.12); }

.sh-note {
  font-size: 12px; color: var(--color-text-muted); margin-top: 14px; padding-top: 12px;
  border-top: 1px solid var(--color-divider, var(--color-border)); line-height: 1.7;
}

/* ---------- v6.386.0 通知の文面 ----------
   🚩 配置は信介さんのサンプル（docs/samples/alsok_message_edit_sample.html）準拠。
     サンプルの生の色は CSS 変数に置き換え、ダークの値を対で書く（この画面の作法）。
   ⚠️ 3 つの通知種類はサンプルどおり色で見分ける（リマインド=青 / アラート=赤 / 締切超過=紫）。
     上の通知先チップの紫（管制）とは**別の意味**だが、形（角丸の太字ラベル vs 押せるチップ）と
     置き場所が違うので取り違えない。 */
.sh-msg-lead { font-size: 12.5px; color: var(--color-text-muted); line-height: 1.75; margin: 0 0 6px; }

.sh-msg-blk { padding: 18px 0; border-top: 1px solid var(--color-divider, var(--color-border)); }
.sh-msg-blk:first-child { border-top: none; padding-top: 4px; }

.sh-msg-head { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; flex-wrap: wrap; }
.sh-msg-tag {
  font-size: 11px; font-weight: 700; padding: 3px 11px; border-radius: 9999px;
  white-space: nowrap; flex: none;
}
.sh-msg-tag.is-before  { background: rgba(0, 74, 173, .10);   color: #004aad; }
.sh-msg-tag.is-after   { background: rgba(197, 34, 31, .10);  color: #c5221f; }
.sh-msg-tag.is-overdue { background: rgba(109, 40, 217, .10); color: #6D28D9; }
[data-theme="dark"] .sh-msg-tag.is-before  { background: rgba(138, 180, 248, .18); color: #8ab4f8; }
[data-theme="dark"] .sh-msg-tag.is-after   { background: rgba(242, 139, 130, .18); color: #f28b82; }
[data-theme="dark"] .sh-msg-tag.is-overdue { background: rgba(167, 139, 250, .20); color: #c4b5fd; }
.sh-msg-name { font-size: 13.5px; font-weight: 700; color: var(--color-text); }
/* 「既定に戻す」。⚠️ 既に既定なら押せない（押しても何も起きない操作を残さない） */
.sh-msg-reset {
  margin-left: auto; background: none; border: none; padding: 2px 0;
  color: var(--color-primary, #1a73e8); font-size: 12px; font-family: inherit;
  cursor: pointer; text-decoration: underline; flex: none;
}
.sh-msg-reset:disabled { color: var(--color-text-faint, var(--color-text-muted)); cursor: default; text-decoration: none; }
.sh-msg-desc { font-size: 12px; color: var(--color-text-muted); line-height: 1.7; margin: 0 0 12px; }
.sh-msg-desc strong { color: var(--color-text); }
.sh-msg-unused { color: var(--color-amber, #b06000); }
[data-theme="dark"] .sh-msg-unused { color: #f0b429; }

/* ⚠️ grid の子は既定 `min-width:auto`。左カラムに min-width:0 を書かないと
   長い 1 行がグリッドを押し広げてページごと横スクロールする（CLAUDE.md 頻出原則）。 */
.sh-msg-editor { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 18px; align-items: start; }
.sh-msg-left { min-width: 0; }

.sh-msg-text {
  box-sizing: border-box; width: 100%; min-height: 108px; resize: vertical;
  padding: 12px 14px; border: 1px solid var(--color-border); border-radius: 10px;
  background: var(--color-surface); color: var(--color-text);
  font-family: inherit; font-size: 13.5px; line-height: 1.85;
}
.sh-msg-text:focus {
  outline: 2px solid rgba(26, 115, 232, .35); outline-offset: -1px;
  border-color: var(--color-primary, #1a73e8);
}

.sh-msg-inserts { margin-top: 9px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.sh-msg-ins-label { font-size: 11.5px; color: var(--color-text-faint, var(--color-text-muted)); margin-right: 2px; }
.sh-msg-ins {
  background: var(--color-surface-2); border: 1px solid var(--color-border); border-radius: 6px;
  padding: 4px 10px; font-size: 11.5px; font-family: inherit; color: var(--color-text);
  cursor: pointer; white-space: nowrap;
}
.sh-msg-ins:hover { border-color: var(--color-text-faint, var(--color-text-muted)); }

.sh-msg-count { font-size: 11px; color: var(--color-text-faint, var(--color-text-muted)); margin-top: 7px; }
.sh-msg-count.is-warn { color: var(--color-red, #c5221f); font-weight: 700; }
[data-theme="dark"] .sh-msg-count.is-warn { color: #f28b82; }
/* 置き換わらない差し込みの注意。**保存は止めない**ので赤ではなくアンバー（#165 気づかせる側） */
.sh-msg-unk-note { font-size: 11px; line-height: 1.6; margin-top: 5px; color: var(--color-amber, #b06000); }
[data-theme="dark"] .sh-msg-unk-note { color: #f0b429; }

/* プレビュー */
.sh-msg-pv {
  background: var(--color-surface-2); border: 1px solid var(--color-border);
  border-radius: 10px; padding: 14px 15px; min-width: 0;
}
.sh-msg-pv-h { font-size: 11.5px; color: var(--color-text-faint, var(--color-text-muted)); margin-bottom: 9px; }
.sh-msg-bubble {
  background: var(--color-surface); border: 1px solid var(--color-border);
  border-radius: 12px; border-top-left-radius: 3px; padding: 11px 13px;
  font-size: 13px; line-height: 1.8; color: var(--color-text);
  white-space: pre-wrap; overflow-wrap: anywhere;
}
/* 1 行目 = アプリ通知の見出し。**太字で描いて構造を目で分かるようにする** */
.sh-msg-bt { font-weight: 700; }
/* 置き換わらない差し込みはプレビューでも目立たせる（判断1 の「気づかせる」側） */
.sh-msg-unk {
  background: rgba(242, 153, 0, .18); border-radius: 3px; padding: 0 2px;
  text-decoration: underline dotted;
}
.sh-msg-who { font-size: 11px; color: var(--color-text-faint, var(--color-text-muted)); margin-top: 8px; line-height: 1.6; }

/* プレビューを横に置けなくなる幅で 1 列に折る（412px の横スクロールはここで防ぐ） */
@media (max-width: 860px) {
  .sh-msg-editor { grid-template-columns: minmax(0, 1fr); }
}

/* ---------- スマホ ---------- */
@media (max-width: 600px) {
  .sh-wrap { padding: 14px 10px 56px; }
  .sh-status-row { gap: 18px; }
  .sh-stat { min-width: 130px; }
  .sh-unmatched { gap: 10px; }
  .sh-unmatched .sh-um-name,
  .sh-unmatched .sh-um-meta { min-width: 0; flex: 1 1 100%; }
  .sh-picker { flex: 1 1 100%; max-width: none; }
  /* v6.374.0: 死活監視の 3 項目は縦積み（横並びだと 412px で select がはみ出す） */
  .sh-hb-fields { gap: 14px; }
  .sh-hb-field { flex: 1 1 100%; }
  .sh-hb-field.sh-hb-actions { padding-top: 0; }
  .sh-hb-num { width: 100%; }
  #shHbChannel { min-width: 0; width: 100%; }
  .toggle-with-label { height: auto; align-items: flex-start; padding: 4px 0; }
  /* v6.386.0: 文面ブロック。見出しが折り返すので「既定に戻す」を右端へ押し出さない */
  .sh-msg-head { gap: 8px; }
  .sh-msg-reset { margin-left: 0; }
  .sh-msg-editor { gap: 14px; }
}

/* ==========================================================================
   v6.399.0 スマホ共通ページヘッダー標準（DESIGN.md §5-4）
   ==========================================================================
   🚩 **正本は週間予定表**（syukan.css の `@media (max-width: 600px)` 内 1-A ブロック）。
     値はそこから並列定義でコピーしている（#92）。**DESIGN.md の表ではなく実コードが正**。
     値を変えるときは syukan.css（正本）+ staff-chat.css + settings.css + alsok-renkei.css
     + shitauke-reminder.css + DESIGN.md §5-4 を同時に直す。
   ⚠️ **ALSOK連携ページ（alsok-renkei.css）と対で入れている**。設定ページはそこから
     行き来する画面なので、**片方だけ標準に揃えると遷移のたびにヘッダーの大きさが変わる**。
   ⚠️ **`.ctrl-bar` 系（§5-4-3）は入れない**（このページに要素が無い）。
   ⚠️ **既存の 600px ブロックとは別ブロックにしている**（末尾への純粋な追加にして、
     v6.386.0 までの宣言に 1 文字も触らないため）。
   ⚠️ **`!important` の有無は正本に合わせる**（style.css 側の元宣言が `!important`・#96）。 */
@media (max-width: 600px) {
  .gs-topbar .gs-btn-pill {
    height: 40px !important;
    padding: 0 10px !important;
    font-size: 11px !important;
  }
  .gs-topbar .gs-btn-icon {
    width: 40px !important;
    height: 40px !important;
  }
  .gs-topbar { gap: 8px; padding: 10px 14px 14px; }
  .gs-brand { gap: 8px; }
  .gs-logo { width: 36px; height: 36px; border-radius: 12px; }
  .gs-logo svg { padding: 7px; }
  /* タイトルを省略・改行させず全表示（ボタン縮小で確保した幅を使う） */
  .gs-brand-name { font-size: 15px; overflow: visible; text-overflow: clip; }
  #header-actions { gap: 4px !important; }
}
