@charset "UTF-8";
/* ==========================================================================
   特養入居受付システム — デザインシステム
   配色：横浜ブルー（海と港のまち）を基調に、福祉らしい落ち着きを足す。
   　　　横浜市の色は青。**飾りに使う色は青系だけ**にする（帯・入口・手続きの色分け・グラフ）。
   　　　緑・黄・赤は意味を持つ色として取ってあるので、飾りには使わない。
   　　　　緑＝済んだこと／受理　黄＝注意　赤＝できないこと／エラー
   利用者：市民側は40〜50代（本人の息子・娘世代）が中心。
           → 本文16px以上／コントラストAA以上／タップ領域44px以上。

   表示設定（ヘッダの「表示」）
     <html data-theme="…" data-font="…"> を切り替えて見え方を変える。
       data-theme : auto（端末に合わせる）／light／dark／cvd（色覚サポート）
                    ／contrast（ハイコントラスト）／sepia（目にやさしい）
       data-font  : s（小）／m（標準）／l（大）／xl（特大）
     色は下の「トークン」だけを使って書く。生の色コードを部品側に書かない。
     ※ dark の中身は「auto＋端末がダーク」用と「dark 指定」用の2か所にある。
        片方だけ直さないこと。
   ========================================================================== */

/* ============================== トークン（ライト＝既定） ============================== */

:root {
  color-scheme: light;

  /* --- 横浜ブルー系（主色） --- */
  --yb-50:  #EEF6FD;
  --yb-100: #D7EAFA;
  --yb-200: #AFD3F3;
  --yb-300: #7BB6E8;
  --yb-400: #3D8FD6;
  --yb-500: #0F6FC2;   /* 標準 */
  --yb-600: #005BAC;   /* 横浜ブルー */
  --yb-700: #00457F;
  --yb-800: #00325C;
  --yb-900: #002440;

  /* --- みなとブルー（副色・アクセント） ---
     主色より一段明るい青。青緑（ティール）に振らず、色相は青の範囲（200度前後）に収める。
     横浜市の色は青なので、装飾に使う色はここと横浜ブルーの2つだけで足りるようにしてある。 */
  --aq-50:  #DFEFF9;
  --aq-200: #A8D0E8;
  --aq-500: #1585BC;
  --aq-600: #0A6C99;
  --aq-700: #08536F;

  /* --- 中立色（少し暖かいグレー） ---
     いちばん明るい面は純白にしない。長時間見る業務画面でまぶしくならないよう、
     白の手前（L*97〜98）で止めて、面どうしの差だけを残す。印刷は print.css で純白に戻す。 */
  --n-0:   #F8F9FA;
  --n-25:  #F4F5F7;
  --n-50:  #EDEFF2;
  --n-100: #E4E7EA;
  --n-200: #DCE0E4;
  --n-300: #C2C8CE;
  --n-400: #98A1AA;
  --n-500: #69737E;
  --n-600: #545D67;
  --n-700: #3D454E;
  --n-800: #272D34;
  --n-900: #171B20;

  /* --- 意味色 --- */
  --ok-50: #E8F6EE;  --ok-500: #0E7A4F;  --ok-700: #095A3A;
  --wa-50: #FDF3E3;  --wa-500: #A66200;  --wa-700: #7A4900;
  --dg-50: #FDECEC;  --dg-500: #B3261E;  --dg-700: #8A1C16;
  --in-50: #EEF6FD;  --in-500: var(--yb-600);

  /* 蛍光ペン。値そのものを塗るのではなく、下側だけ引く（数字が読みにくくならないように） */
  --hl: #BCDDF5;
  --head-bg: #E9F0F7;

  /* --- 面と文字 --- */
  --bg:        var(--n-50);
  --surface:   var(--n-0);
  --surface-2: var(--n-25);
  --line:      var(--n-200);
  --line-soft: var(--n-100);
  --text:      var(--n-800);
  --text-2:    var(--n-600);
  --text-3:    var(--n-500);

  /* --- 主色の使い分け --- */
  --brand:            var(--yb-600);  /* リンク・強調の文字 */
  --brand-hover:      var(--yb-700);
  --brand-soft:       var(--yb-50);   /* 淡い面 */
  --brand-soft-hover: var(--yb-200);
  --brand-strong:     var(--yb-700);  /* 淡い面の上に置く文字 */
  --brand-border:     var(--yb-300);  /* hover の枠 */
  --brand-solid:      var(--yb-600);  /* 塗りボタン・選択中 */
  --brand-solid-hover:var(--yb-700);
  --on-brand:         #FFFFFF;        /* 塗りの上の文字 */
  --text-on:          var(--on-brand);/* 旧名（互換） */

  --accent-strong:      var(--aq-700);
  --accent-solid:       var(--aq-600);
  --accent-solid-hover: var(--aq-700);
  --on-accent:          #FFFFFF;

  --danger-solid:       var(--dg-500);
  --danger-solid-hover: var(--dg-700);
  --on-danger:          #FFFFFF;

  /* --- 部品の面 --- */
  --field-border: #8C949C;
  --field-arrow:  var(--n-500);
  --placeholder:  var(--n-400);
  --muted-bg:     var(--n-100);   /* 任意ラベル・コード等の下地 */
  --disabled-bg:  var(--n-50);
  --hover-bg:     var(--n-50);
  --track:        var(--n-100);   /* 進捗・棒グラフの下地 */
  --scan-bg:      var(--n-100);   /* スキャン画像の余白 */
  --thead-bg:     var(--yb-50);
  --thead-text:   var(--yb-800);
  --thead-border: var(--yb-200);
  --progress-fill: linear-gradient(90deg, var(--yb-600), var(--aq-500));

  /* --- 見出しの帯 ---
     この帯の青が画面全体の基調。左を濃く、右をわずかに明るくするだけで、
     色相は横浜ブルーから動かさない（緑や青緑を混ぜない）。 */
  --topbar-bg: linear-gradient(100deg, var(--yb-800) 0%, var(--yb-600) 55%, var(--yb-500) 140%);
  --topbar-fg: #FFFFFF;
  --topbar-on-fg: var(--yb-700);   /* 帯の中で白地に置く文字 */
  --topbar-border: transparent;
  --topbar-hover:  rgba(255,255,255,.16);
  --topbar-active: rgba(255,255,255,.22);
  --topbar-active-border: rgba(255,255,255,.34);
  --topbar-chip:   rgba(0,0,0,.16);

  /* --- 注意書きの枠 --- */
  --note-in-border: var(--yb-200);
  --note-ok-border: #9BD3B5;
  --note-wa-border: #E3C58A;
  --note-dg-border: #E7A9A5;

  /* --- ログイン画面の背景 --- */
  --auth-bg:
    radial-gradient(1100px 520px at 12% -8%, var(--yb-100), transparent 60%),
    radial-gradient(900px 480px at 100% 0%, var(--aq-50), transparent 55%),
    var(--bg);

  /* --- 形 --- */
  --r-xs: 6px; --r-sm: 8px; --r-md: 12px; --r-lg: 16px; --r-xl: 22px; --r-full: 999px;
  --bw: 1px;   /* 枠の太さ（ハイコントラストで太くする） */

  --sh-1: 0 1px 2px rgba(0,36,64,.06), 0 1px 3px rgba(0,36,64,.05);
  --sh-2: 0 2px 4px rgba(0,36,64,.06), 0 4px 12px rgba(0,36,64,.07);
  --sh-3: 0 6px 16px rgba(0,36,64,.10), 0 12px 32px rgba(0,36,64,.08);
  --ring: 0 0 0 3px rgba(0,91,172,.32);
  --focus: var(--brand-solid);
  --focus-w: 2px;

  /* --- 字 --- */
  --font: "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Yu Gothic UI", "Yu Gothic",
          Meiryo, "Noto Sans JP", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-num: "Segoe UI", system-ui, -apple-system, sans-serif;

  --fs-scale: 1;      /* 文字サイズ設定（data-font）で変わる */
  --fs-base: 1rem;
  --lh-base: 1.85;

  /* --- 間隔 --- */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 20px;
  --s-6: 24px; --s-7: 32px; --s-8: 40px; --s-9: 56px; --s-10: 72px;

  --tap: 44px;
  /* --header-h は帯の最低の高さ。--header-now は tokuyo.js が入れる実測値で、
     「帯の下に貼り付く」要素の位置だけに使う（--header-h に書き戻すと帯が伸び続ける）。 */
  --header-h: 64px;
}

/* 業務画面は毎日使うので高密度にする。
   1画面に必要な情報が収まるよう、間隔のトークンを一段小さくする。
   （市民向けの画面は :root の値のままで、タップ領域44px・行間1.85を保つ） */
.app-shell {
  --fs-base: .94rem; --lh-base: 1.6;
  --s-5: 14px; --s-6: 16px; --s-7: 20px; --s-8: 26px; --s-9: 32px; --s-10: 40px;
  --tap: 38px;
  --header-h: 56px;
}

/* ============================== 文字サイズ ============================== */
/* rem を基準に組んでいるので、html の文字サイズを変えれば全体が拡大縮小する。 */

:root[data-font="s"]  { --fs-scale: .92; }
:root[data-font="m"]  { --fs-scale: 1; }
:root[data-font="l"]  { --fs-scale: 1.15; }
:root[data-font="xl"] { --fs-scale: 1.3; }

/* ============================== 配色テーマ ============================== */

:root[data-theme="auto"], :root:not([data-theme]) { color-scheme: light dark; }
:root[data-theme="light"] { color-scheme: light; }

/* ---- ダーク（端末の設定に合わせる場合） ---- */
@media (prefers-color-scheme: dark) {
  :root[data-theme="auto"], :root:not([data-theme]) {
    --yb-50:#14273A; --yb-100:#1B3550; --yb-200:#2A4B6C; --yb-300:#3C6B93; --yb-400:#4E8CBE;
    --yb-500:#58A6E8; --yb-600:#6DB4EE; --yb-700:#9CC8EE; --yb-800:#C4DDF5; --yb-900:#E4F0FB;
    --aq-50:#0D262A; --aq-200:#2A5A60; --aq-500:#3FBFCC; --aq-600:#0E7A86; --aq-700:#62D2DE;
    --n-0:#171D25; --n-25:#1B222B; --n-50:#1D242D; --n-100:#232B34; --n-200:#2C3641;
    --n-300:#3A4550; --n-400:#5B6672; --n-500:#8B95A0; --n-600:#AEB8C2; --n-700:#CBD3DB;
    --n-800:#E6EAEE; --n-900:#F2F5F8;
    --ok-50:#0F2A1E; --ok-500:#3FB37C; --ok-700:#7FDCAE;
    --wa-50:#2B2113; --wa-500:#D19A3A; --wa-700:#F0C177;
    --dg-50:#2E1715; --dg-500:#E0736A; --dg-700:#F5A69E;
    --in-50:#16283A;
    --hl:#2C5A63;
    --head-bg:#1E2733;

    --bg:#10151B; --surface:#171D25; --surface-2:#1D242D;
    --line:#2C3641; --line-soft:#232B34;
    --text:#E6EAEE; --text-2:#AEB8C2; --text-3:#909BA6;

    --brand:#6DB4EE; --brand-hover:#93CAF4;
    --brand-soft:#16283A; --brand-soft-hover:#1F3D57;
    --brand-strong:#9CC8EE; --brand-border:#3C6B93;
    --brand-solid:#1E6FB0; --brand-solid-hover:#2A82C8; --on-brand:#FFFFFF;
    --accent-strong:#62D2DE; --accent-solid:#0E7A86; --accent-solid-hover:#14929F; --on-accent:#FFFFFF;
    --danger-solid:#B3372C; --danger-solid-hover:#C9483C; --on-danger:#FFFFFF;

    --field-border:#5F6C7A; --field-arrow:#9AA4AF; --placeholder:#7C8794;
    --muted-bg:#28313B; --disabled-bg:#1B222B; --hover-bg:#222A34;
    --track:#28313B; --scan-bg:#0C1014;
    --thead-bg:#1E2833; --thead-text:#9CC8EE; --thead-border:#2C3641;
    --progress-fill: linear-gradient(90deg, #2A82C8, #3FBFCC);

    --topbar-bg: linear-gradient(100deg, #0E2740 0%, #123A5E 55%, #0E5560 140%);
    --topbar-fg:#E9EEF3; --topbar-on-fg:#0E2740; --topbar-border:#22303D;
    --topbar-hover: rgba(255,255,255,.12); --topbar-active: rgba(255,255,255,.18);
    --topbar-active-border: rgba(255,255,255,.26); --topbar-chip: rgba(0,0,0,.28);

    --note-in-border:#2B4A66; --note-ok-border:#2E6B4C;
    --note-wa-border:#7A5C22; --note-dg-border:#7E3A33;

    --auth-bg:
      radial-gradient(1100px 520px at 12% -8%, #14304A, transparent 60%),
      radial-gradient(900px 480px at 100% 0%, #0D262A, transparent 55%),
      var(--bg);

    --sh-1: 0 1px 2px rgba(0,0,0,.4);
    --sh-2: 0 2px 8px rgba(0,0,0,.45);
    --sh-3: 0 8px 24px rgba(0,0,0,.5);
    --ring: 0 0 0 3px rgba(109,180,238,.4);
    --focus: var(--brand);
  }
}

/* ---- ダーク（利用者が選んだ場合。上の @media と同じ内容） ---- */
:root[data-theme="dark"] {
  color-scheme: dark;

  --yb-50:#14273A; --yb-100:#1B3550; --yb-200:#2A4B6C; --yb-300:#3C6B93; --yb-400:#4E8CBE;
  --yb-500:#58A6E8; --yb-600:#6DB4EE; --yb-700:#9CC8EE; --yb-800:#C4DDF5; --yb-900:#E4F0FB;
  --aq-50:#0D262A; --aq-200:#2A5A60; --aq-500:#3FBFCC; --aq-600:#0E7A86; --aq-700:#62D2DE;
  --n-0:#171D25; --n-25:#1B222B; --n-50:#1D242D; --n-100:#232B34; --n-200:#2C3641;
  --n-300:#3A4550; --n-400:#5B6672; --n-500:#8B95A0; --n-600:#AEB8C2; --n-700:#CBD3DB;
  --n-800:#E6EAEE; --n-900:#F2F5F8;
  --ok-50:#0F2A1E; --ok-500:#3FB37C; --ok-700:#7FDCAE;
  --wa-50:#2B2113; --wa-500:#D19A3A; --wa-700:#F0C177;
  --dg-50:#2E1715; --dg-500:#E0736A; --dg-700:#F5A69E;
  --in-50:#16283A;
  --hl:#2C5A63;
  --head-bg:#1E2733;

  --bg:#10151B; --surface:#171D25; --surface-2:#1D242D;
  --line:#2C3641; --line-soft:#232B34;
  --text:#E6EAEE; --text-2:#AEB8C2; --text-3:#909BA6;

  --brand:#6DB4EE; --brand-hover:#93CAF4;
  --brand-soft:#16283A; --brand-soft-hover:#1F3D57;
  --brand-strong:#9CC8EE; --brand-border:#3C6B93;
  --brand-solid:#1E6FB0; --brand-solid-hover:#2A82C8; --on-brand:#FFFFFF;
  --accent-strong:#62D2DE; --accent-solid:#0E7A86; --accent-solid-hover:#14929F; --on-accent:#FFFFFF;
  --danger-solid:#B3372C; --danger-solid-hover:#C9483C; --on-danger:#FFFFFF;

  --field-border:#5F6C7A; --field-arrow:#9AA4AF; --placeholder:#7C8794;
  --muted-bg:#28313B; --disabled-bg:#1B222B; --hover-bg:#222A34;
  --track:#28313B; --scan-bg:#0C1014;
  --thead-bg:#1E2833; --thead-text:#9CC8EE; --thead-border:#2C3641;
  --progress-fill: linear-gradient(90deg, #2A82C8, #3FBFCC);

  --topbar-bg: linear-gradient(100deg, #0E2740 0%, #123A5E 55%, #0E5560 140%);
  --topbar-fg:#E9EEF3; --topbar-on-fg:#0E2740; --topbar-border:#22303D;
  --topbar-hover: rgba(255,255,255,.12); --topbar-active: rgba(255,255,255,.18);
  --topbar-active-border: rgba(255,255,255,.26); --topbar-chip: rgba(0,0,0,.28);

  --note-in-border:#2B4A66; --note-ok-border:#2E6B4C;
  --note-wa-border:#7A5C22; --note-dg-border:#7E3A33;

  --auth-bg:
    radial-gradient(1100px 520px at 12% -8%, #14304A, transparent 60%),
    radial-gradient(900px 480px at 100% 0%, #0D262A, transparent 55%),
    var(--bg);

  --sh-1: 0 1px 2px rgba(0,0,0,.4);
  --sh-2: 0 2px 8px rgba(0,0,0,.45);
  --sh-3: 0 8px 24px rgba(0,0,0,.5);
  --ring: 0 0 0 3px rgba(109,180,238,.4);
  --focus: var(--brand);
}

/* ---- 色覚サポート（赤緑が見分けにくい方向け） ----
   赤＝朱（vermillion）、緑＝青緑、注意＝黄、副色＝赤紫。
   Okabe & Ito の「色覚バリアフリーな配色」を下敷きに、文字用へ暗くしたもの。
   色だけに頼らないよう、バッジには記号を、経過の印には線の種類を足す。 */
:root[data-theme="cvd"] {
  color-scheme: light;

  --yb-50:#E8F1FA; --yb-100:#CFE3F6; --yb-200:#A9CBEC; --yb-300:#6FA6DA; --yb-400:#2E7EBF;
  --yb-500:#0F6BAE; --yb-600:#0072B2; --yb-700:#005286; --yb-800:#003A60; --yb-900:#002843;
  --aq-50:#F7E9F1; --aq-200:#E4BDD3; --aq-500:#B2508A; --aq-600:#96376F; --aq-700:#7A2C5B;
  --ok-50:#DFF3EC; --ok-500:#00795F; --ok-700:#00604B;
  --wa-50:#FFF6D6; --wa-500:#C08A00; --wa-700:#7A5A00;
  --dg-50:#FDE8DC; --dg-500:#D55E00; --dg-700:#A03F00;
  --in-50:#E8F1FA;
  --hl:#FFE08A;
  --head-bg:#E9F0F7;

  --brand:var(--yb-600); --brand-hover:var(--yb-700);
  --brand-soft:var(--yb-50); --brand-soft-hover:var(--yb-200);
  --brand-strong:var(--yb-700); --brand-border:var(--yb-300);
  --brand-solid:#0072B2; --brand-solid-hover:#005286; --on-brand:#FFFFFF;
  --accent-strong:#7A2C5B; --accent-solid:#96376F; --accent-solid-hover:#7A2C5B; --on-accent:#FFFFFF;
  --danger-solid:#B84A00; --danger-solid-hover:#8F3900; --on-danger:#FFFFFF;

  --thead-bg:#E8F1FA; --thead-text:#003A60; --thead-border:#A9CBEC;
  --progress-fill: linear-gradient(90deg, #0072B2, #B2508A);

  --topbar-bg: linear-gradient(100deg, #004E80 0%, #0072B2 55%, #96376F 150%);

  --note-in-border:#A9CBEC; --note-ok-border:#7FBFAE;
  --note-wa-border:#DCC066; --note-dg-border:#E9A57E;

  --auth-bg:
    radial-gradient(1100px 520px at 12% -8%, #CFE3F6, transparent 60%),
    radial-gradient(900px 480px at 100% 0%, #F7E9F1, transparent 55%),
    var(--bg);

  --ring: 0 0 0 3px rgba(0,114,178,.35);
}

/* ---- ハイコントラスト（黒背景・黄文字。弱視の方・まぶしさに弱い方向け） ---- */
:root[data-theme="contrast"] {
  color-scheme: dark;

  --yb-50:#1A1500; --yb-100:#332A00; --yb-200:#4D3F00; --yb-300:#FFE14D; --yb-400:#FFE14D;
  --yb-500:#FFE14D; --yb-600:#FFE14D; --yb-700:#FFE14D; --yb-800:#FFE14D; --yb-900:#FFF3B0;
  --aq-50:#00171F; --aq-200:#00394D; --aq-500:#7FE0FF; --aq-600:#7FE0FF; --aq-700:#7FE0FF;
  --n-0:#000000; --n-25:#0D0D0D; --n-50:#141414; --n-100:#1F1F1F; --n-200:#4D4D4D;
  --n-300:#FFFFFF; --n-400:#C8C8C8; --n-500:#D8D8D8; --n-600:#E8E8E8; --n-700:#F5F5F5;
  --n-800:#FFFFFF; --n-900:#FFFFFF;
  --ok-50:#00170E; --ok-500:#5BE49B; --ok-700:#8CF3BE;
  --wa-50:#1F1500; --wa-500:#FFC24D; --wa-700:#FFD98A;
  --dg-50:#26100C; --dg-500:#FF8B7A; --dg-700:#FFB3A6;
  --in-50:#00121F;
  --hl:#7A5F00;
  --head-bg:#0D0D0D;

  --bg:#000000; --surface:#000000; --surface-2:#0D0D0D;
  --line:#FFFFFF; --line-soft:#8A8A8A;
  --text:#FFFFFF; --text-2:#F0F0F0; --text-3:#D0D0D0;

  --brand:#FFE14D; --brand-hover:#FFF0A0;
  --brand-soft:#1A1500; --brand-soft-hover:#332A00;
  --brand-strong:#FFE14D; --brand-border:#FFE14D;
  --brand-solid:#FFE14D; --brand-solid-hover:#FFF0A0; --on-brand:#000000;
  --accent-strong:#7FE0FF; --accent-solid:#7FE0FF; --accent-solid-hover:#B0EEFF; --on-accent:#000000;
  --danger-solid:#FF8B7A; --danger-solid-hover:#FFB3A6; --on-danger:#000000;

  --field-border:#FFFFFF; --field-arrow:#FFFFFF; --placeholder:#C8C8C8;
  --muted-bg:#1F1F1F; --disabled-bg:#141414; --hover-bg:#262626;
  --track:#3A3A3A; --scan-bg:#000000;
  --thead-bg:#1A1500; --thead-text:#FFE14D; --thead-border:#FFE14D;
  --progress-fill: #FFE14D;

  --topbar-bg:#000000; --topbar-fg:#FFE14D; --topbar-on-fg:#000000; --topbar-border:#FFE14D;
  --topbar-hover: rgba(255,225,77,.22); --topbar-active: rgba(255,225,77,.34);
  --topbar-active-border:#FFE14D; --topbar-chip: rgba(255,225,77,.14);

  --note-in-border:#7FE0FF; --note-ok-border:#5BE49B;
  --note-wa-border:#FFC24D; --note-dg-border:#FF8B7A;

  --auth-bg:#000000;

  --bw: 2px;
  --sh-1: none; --sh-2: none; --sh-3: none;
  --ring: 0 0 0 3px rgba(255,225,77,.55);
  --focus:#FFE14D; --focus-w: 3px;
}

/* ---- セピア（白のまぶしさをおさえた暖色） ---- */
:root[data-theme="sepia"] {
  color-scheme: light;

  --yb-50:#E7EFF5; --yb-100:#CFE0EB; --yb-200:#A9C7DA; --yb-300:#7FA9C4; --yb-400:#3E7CA0;
  --yb-500:#1A6690; --yb-600:#0E5C8A; --yb-700:#0A466B; --yb-800:#083550; --yb-900:#062639;
  --aq-50:#E2F0EF; --aq-200:#A9D5D2; --aq-500:#0F8A8E; --aq-600:#0A6E76; --aq-700:#08575E;
  --n-0:#FBF4E7; --n-25:#F8F0E1; --n-50:#F3E9D8; --n-100:#EDE1CB; --n-200:#DDCDB0;
  --n-300:#C9B695; --n-400:#A28E6F; --n-500:#7A6B5B; --n-600:#5C4F42; --n-700:#4A3F35;
  --n-800:#3A312A; --n-900:#2A231D;
  --ok-50:#E4F1E3; --ok-500:#2F6B3C; --ok-700:#22522D;
  --wa-50:#FBEED2; --wa-500:#9A6208; --wa-700:#6E4505;
  --dg-50:#FAE4DE; --dg-500:#A63A28; --dg-700:#7E2A1C;
  --in-50:#E7EFF5;
  --hl:#D8E4E7;
  --head-bg:#F1E6D2;

  --bg:#F3E9D8; --surface:#FBF4E7; --surface-2:#F6EDDD;
  --line:#DDCDB0; --line-soft:#EADFC9;
  --text:#3A312A; --text-2:#5C4F42; --text-3:#7A6B5B;

  --brand:#0E5C8A; --brand-hover:#0A466B;
  --brand-soft:#E7EFF5; --brand-soft-hover:#CFE0EB;
  --brand-strong:#0A466B; --brand-border:#7FA9C4;
  --brand-solid:#0E5C8A; --brand-solid-hover:#0A466B; --on-brand:#FFF9EF;
  --accent-strong:#08575E; --accent-solid:#0A6E76; --accent-solid-hover:#08575E; --on-accent:#FFF9EF;
  --danger-solid:#A63A28; --danger-solid-hover:#7E2A1C; --on-danger:#FFF9EF;

  --field-border:#A08A62; --field-arrow:#6B5C4B; --placeholder:#8A785E;
  --muted-bg:#EDE1CB; --disabled-bg:#EFE5D3; --hover-bg:#EFE3CE;
  --track:#E5D8C0; --scan-bg:#EADFC9;
  --thead-bg:#EFE2CB; --thead-text:#4A3F35; --thead-border:#DDCDB0;
  --progress-fill: linear-gradient(90deg, #0E5C8A, #0F8A8E);

  --topbar-bg: linear-gradient(100deg, #5B4632 0%, #6E5740 52%, #7C6B4A 140%);
  --topbar-fg:#FBF4E7; --topbar-on-fg:#5B4632; --topbar-border:#4A3928;
  --topbar-hover: rgba(255,255,255,.18); --topbar-active: rgba(255,255,255,.26);
  --topbar-active-border: rgba(255,255,255,.38); --topbar-chip: rgba(0,0,0,.22);

  --note-in-border:#A9C7DA; --note-ok-border:#9EC2A0;
  --note-wa-border:#D9BC7C; --note-dg-border:#D6A193;

  --auth-bg:
    radial-gradient(1100px 520px at 12% -8%, #EFE0C4, transparent 60%),
    radial-gradient(900px 480px at 100% 0%, #E2F0EF, transparent 55%),
    var(--bg);

  --sh-1: 0 1px 2px rgba(74,57,40,.10), 0 1px 3px rgba(74,57,40,.08);
  --sh-2: 0 2px 4px rgba(74,57,40,.10), 0 4px 12px rgba(74,57,40,.10);
  --sh-3: 0 6px 16px rgba(74,57,40,.14), 0 12px 32px rgba(74,57,40,.12);
  --ring: 0 0 0 3px rgba(14,92,138,.30);
}

/* ---- ダークグレー（夜のコンクリート）／いまは非表示 ----
   DisplayPreferences で Hidden = true にしてあるので、この配色は選べない
   （メニューに出ないうえ、Cookie や POST で指定しても弾かれる）。
   戻すときは DisplayPreferences.AllThemes と tokuyo.js の ALLOWED.theme を直す。

   「ダーク」と同じ暗い枠だが、青みも茶色みも抜いた無彩色の灰で組む。
   文字と罫線をダークよりはっきりさせてあるので、本文も主ボタンも読みやすい。
   帯（サイド）は明るい色を使わず濃い灰にしてあるので、上に白文字を置いても
   まぶしくならない。暗い画面が好きな人、夜間・薄暗い事務所向け。 */
:root[data-theme="graphite"] {
  color-scheme: dark;

  /* 有彩色は持たせず、灰の段階だけで組む。
     ボタンや選択中を示す青みは、主ボタンの #4F5F6E に寄せたわずかな冷たさだけ。 */
  --yb-50:#21252A; --yb-100:#2A2E32; --yb-200:#3A3F45; --yb-300:#545C63; --yb-400:#6E7880;
  --yb-500:#8B959D; --yb-600:#BCC8D2; --yb-700:#CFD8E0; --yb-800:#DEE4EA; --yb-900:#EDEFF1;
  --aq-50:#21252A; --aq-200:#3A4249; --aq-500:#8FA0AE; --aq-600:#4F5F6E; --aq-700:#BCC8D2;
  --n-0:#31353A; --n-25:#2E3237; --n-50:#2A2E32; --n-100:#33383D; --n-200:#545C63;
  --n-300:#697178; --n-400:#8B939A; --n-500:#A6ADB3; --n-600:#B0B6BB; --n-700:#CFD4D8;
  --n-800:#E1E4E7; --n-900:#EDEFF1;
  --ok-50:#22282A; --ok-500:#8FB5A2; --ok-700:#B8D8C6;
  --wa-50:#2A2723; --wa-500:#C0A87E; --wa-700:#DCC9A6;
  --dg-50:#2C2426; --dg-500:#C79A9A; --dg-700:#E0BCBC;
  --in-50:#21252A;
  --hl:#4A555F;
  --head-bg:#21252A;

  --bg:#25272A; --surface:#31353A; --surface-2:#2A2E32;
  --line:#545C63; --line-soft:#3E454B;
  --text:#EDEFF1; --text-2:#B0B6BB; --text-3:#989EA4;

  --brand:#BCC8D2; --brand-hover:#D5DEE6;
  --brand-soft:#2A3138; --brand-soft-hover:#343C44;
  --brand-strong:#D5DEE6; --brand-border:#545C63;
  --brand-solid:#4F5F6E; --brand-solid-hover:#607283; --on-brand:#FFFFFF;
  --accent-strong:#BCC8D2; --accent-solid:#4F5F6E; --accent-solid-hover:#607283; --on-accent:#FFFFFF;
  --danger-solid:#8A4A46; --danger-solid-hover:#9E5852; --on-danger:#FFFFFF;

  --field-border:#697178; --field-arrow:#B0B6BB; --placeholder:#8B939A;
  --muted-bg:#2A2E32; --disabled-bg:#2A2E32; --hover-bg:#3A3F45;
  --track:#2A2E32; --scan-bg:#1C1E21;
  --thead-bg:#21252A; --thead-text:#EDEFF1; --thead-border:#545C63;
  --progress-fill: linear-gradient(90deg, #4F5F6E, #8FA0AE);

  /* 帯は明るい色を使わない。濃い灰のままにして、上の白文字がまぶしくならないようにする */
  --topbar-bg:#17191B;
  --topbar-fg:#EDEFF1; --topbar-on-fg:#17191B; --topbar-border:#0E0F11;
  --topbar-hover: rgba(255,255,255,.10); --topbar-active: rgba(255,255,255,.16);
  --topbar-active-border: rgba(255,255,255,.28); --topbar-chip: rgba(255,255,255,.08);

  --note-in-border:#545C63; --note-ok-border:#5C7A6A;
  --note-wa-border:#7A6C4C; --note-dg-border:#7A5450;

  --auth-bg:#25272A;

  --sh-1: 0 1px 2px rgba(0,0,0,.45);
  --sh-2: 0 2px 8px rgba(0,0,0,.5);
  --sh-3: 0 8px 24px rgba(0,0,0,.55);
  --ring: 0 0 0 3px rgba(188,200,210,.38);
  --focus:#BCC8D2;
}

/* ---- モノクローム（建築図面）／いまは非表示 ----
   ダークグレーと同じく DisplayPreferences で Hidden = true。選べない。

   色を完全に捨てて、黒・白・灰だけで組む。罫線をほかより濃くしてあるので、
   表のマス目がくっきり出る。金額や件数を目で追う作業、明るい事務所、
   プロジェクタ投影、印刷前の確認に向く。
   そのぶん「押せる場所」は色では示せないので、形と枠で示す（下の上乗せを参照）。 */
:root[data-theme="mono"] {
  color-scheme: light;

  --yb-50:#F2F2F2; --yb-100:#E2E2E2; --yb-200:#D4D4D4; --yb-300:#B4B4B4; --yb-400:#8A8A8A;
  --yb-500:#4A4A4A; --yb-600:#2B2B2B; --yb-700:#232323; --yb-800:#1C1C1C; --yb-900:#111111;
  --aq-50:#EDEDED; --aq-200:#C8C8C8; --aq-500:#4A4A4A; --aq-600:#2B2B2B; --aq-700:#1C1C1C;
  --n-0:#FFFFFF; --n-25:#FAFAFA; --n-50:#F2F2F2; --n-100:#E2E2E2; --n-200:#D4D4D4;
  --n-300:#C0C0C0; --n-400:#9C9C9C; --n-500:#6E6E6E; --n-600:#4A4A4A; --n-700:#333333;
  --n-800:#222222; --n-900:#111111;
  --ok-50:#EDEDED; --ok-500:#2B2B2B; --ok-700:#111111;
  --wa-50:#E8E8E8; --wa-500:#4A4A4A; --wa-700:#232323;
  --dg-50:#E2E2E2; --dg-500:#232323; --dg-700:#111111;
  --in-50:#F2F2F2;
  --hl:#CFCFCF;
  --head-bg:#E2E2E2;

  --bg:#D4D4D4; --surface:#FFFFFF; --surface-2:#F2F2F2;
  --line:#9C9C9C; --line-soft:#C0C0C0;
  --text:#111111; --text-2:#4A4A4A; --text-3:#6E6E6E;

  --brand:#232323; --brand-hover:#111111;
  --brand-soft:#E2E2E2; --brand-soft-hover:#D4D4D4;
  --brand-strong:#111111; --brand-border:#9C9C9C;
  --brand-solid:#232323; --brand-solid-hover:#111111; --on-brand:#FFFFFF;
  --accent-strong:#111111; --accent-solid:#2B2B2B; --accent-solid-hover:#111111; --on-accent:#FFFFFF;
  --danger-solid:#232323; --danger-solid-hover:#111111; --on-danger:#FFFFFF;

  --field-border:#6E6E6E; --field-arrow:#4A4A4A; --placeholder:#6E6E6E;
  --muted-bg:#E2E2E2; --disabled-bg:#EDEDED; --hover-bg:#EDEDED;
  --track:#D4D4D4; --scan-bg:#E2E2E2;
  --thead-bg:#E2E2E2; --thead-text:#111111; --thead-border:#9C9C9C;
  --progress-fill: linear-gradient(90deg, #6E6E6E, #111111);

  --topbar-bg:#1C1C1C;
  --topbar-fg:#FFFFFF; --topbar-on-fg:#1C1C1C; --topbar-border:#000000;
  --topbar-hover: rgba(255,255,255,.16); --topbar-active: rgba(255,255,255,.24);
  --topbar-active-border: rgba(255,255,255,.42); --topbar-chip: rgba(255,255,255,.12);

  --note-in-border:#9C9C9C; --note-ok-border:#6E6E6E;
  --note-wa-border:#4A4A4A; --note-dg-border:#111111;

  --auth-bg:#D4D4D4;

  /* 図面なので影は使わない。面の境目は罫線で出す */
  --sh-1: none; --sh-2: none; --sh-3: none;
  --focus:#111111; --focus-w: 3px;
  --ring: 0 0 0 3px rgba(17,17,17,.35);
}

/* ============================== 基本 ============================== */

*, *::before, *::after { box-sizing: border-box; }

html {
  /* --fs-scale は利用者の「文字サイズ」設定。--fs-boost は画面の種類ごとの底上げ。
     市民向けは主な利用者が40〜60代なので底上げしてから設定を掛ける
     （小さくしたい人は、これまでどおり設定で下げられる）。
     ※ --fs-base（1rem）は別物の「本文の大きさ」。ここで使うと単位が合わず、
        指定ごと無効になって文字サイズ設定が効かなくなる。 */
  font-size: calc(100% * var(--fs-scale) * var(--fs-boost, 1));
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
}
:root:has(body.citizen) { --fs-boost: 1.08; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: var(--fs-base);
  line-height: var(--lh-base);
  font-feature-settings: "palt" 1;
  -webkit-font-smoothing: antialiased;
  text-underline-offset: .18em;
}

h1, h2, h3, h4 { margin: 0; line-height: 1.45; font-weight: 700; letter-spacing: .01em; }
h1 { font-size: 1.75rem; }
h2 { font-size: 1.3rem; }
h3 { font-size: 1.08rem; }
h4 { font-size: 1rem; }
p  { margin: 0 0 var(--s-4); }
p:last-child { margin-bottom: 0; }

a { color: var(--brand); text-decoration: underline; text-decoration-thickness: 1px; }
a:hover { color: var(--brand-hover); }

:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--focus-w) solid var(--focus);
  outline-offset: 2px;
  border-radius: var(--r-xs);
}

img, svg { max-width: 100%; height: auto; vertical-align: middle; }

/* --- 線アイコン（_Icons.cshtml のスプライトを <use> で呼ぶ） --- */
.icon-sprite { display: none; }
svg.i {
  width: 1.25em; height: 1.25em; flex: none;
  color: inherit; vertical-align: -.22em;
}

hr { border: 0; border-top: var(--bw) solid var(--line); margin: var(--s-6) 0; }

.num { font-family: var(--font-num); font-variant-numeric: tabular-nums; }

/* 読み上げ専用 */
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 100;
  background: var(--brand-solid); color: var(--on-brand); padding: var(--s-3) var(--s-5);
  border-radius: 0 0 var(--r-sm) 0;
}
.skip-link:focus { left: 0; }

/* ============================== 見出しの帯 ============================== */

.topbar {
  background: var(--topbar-bg);
  color: var(--topbar-fg);
  border-bottom: var(--bw) solid var(--topbar-border);
  box-shadow: var(--sh-2);
  position: sticky; top: 0; z-index: 40;
}
.topbar a { color: var(--topbar-fg); }
.topbar-in {
  /* 本文（.page）と同じ幅にそろえる。ここだけ狭いと帯の中身が本文より内側に寄る */
  max-width: 1440px; margin: 0 auto; min-height: var(--header-h);
  display: flex; align-items: center; gap: var(--s-4); flex-wrap: wrap;
  padding: var(--s-2) var(--s-5);
}
.brand { display: flex; align-items: center; gap: var(--s-3); text-decoration: none; }
.brand:hover { text-decoration: none; }
.brand-mark {
  /* 文字サイズ設定で本文が大きくなっても崩れないよう em で持つ */
  width: 2.4em; height: 2.4em; flex: none; border-radius: 10px;
  background: var(--topbar-hover);
  display: grid; place-items: center;
  font-weight: 700; font-size: 1rem; letter-spacing: -.04em; white-space: nowrap;
  border: 1px solid var(--topbar-active-border);
}
.brand-text { display: flex; flex-direction: column; line-height: 1.25; }
.brand-text b { font-size: 1.02rem; font-weight: 700; }
.brand-text span { font-size: .74rem; opacity: .88; letter-spacing: .06em; }

.topbar-nav { margin-left: auto; display: flex; align-items: center; gap: var(--s-1); flex-wrap: wrap; }
.topbar-nav--end { margin-left: 0; }   /* 2つ目以降は余白を取り合わない */
.topbar-nav a, .topbar-nav button {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 38px; padding: 0 var(--s-4);
  border-radius: var(--r-full); text-decoration: none;
  font-size: .9rem; font-weight: 500;
  background: transparent; border: 1px solid transparent; color: var(--topbar-fg); cursor: pointer;
}
.topbar-nav a:hover, .topbar-nav button:hover { background: var(--topbar-hover); }
.topbar-nav a[aria-current="page"] { background: var(--topbar-active); border-color: var(--topbar-active-border); }


/* ============================== 表示設定（配色・文字サイズ） ==============================
   ヘッダの中でも外（ログイン画面など）でも使えるよう、
   既定は本文の色、帯の中では帯の色を使う。 */

.prefs { display: flex; align-items: center; gap: var(--s-2); margin: 0; flex-wrap: wrap; }
/* 帯の最後に置いたときは、折り返しても右端にそろえる */
/* 表示設定から右は帯の右端へ寄せる（そのうしろに氏名・ログアウトが並ぶ） */
.topbar-in > .prefs { margin-left: auto; }

.prefs-group {
  display: inline-flex; align-items: center; gap: 2px;
  padding: 3px; border-radius: var(--r-full);
  background: var(--surface); border: var(--bw) solid var(--field-border);
}
.prefs-group > .prefs-cap { font-size: .72rem; padding: 0 var(--s-1) 0 var(--s-2); color: var(--text-3); }

.prefs-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 32px; min-width: 34px; padding: 0 var(--s-3);
  border-radius: var(--r-full); border: 1px solid transparent;
  background: transparent; color: var(--text-2);
  font: inherit; font-weight: 700; line-height: 1; cursor: pointer;
}
.prefs-btn:hover { background: var(--hover-bg); }
.prefs-btn[aria-pressed="true"] {
  background: var(--brand-solid); color: var(--on-brand); border-color: var(--brand-solid);
}
/* 大きさの見本を兼ねて「あ」の字を段階的に大きくする */
.prefs-btn[value="s"]  { font-size: .74rem; }
.prefs-btn[value="m"]  { font-size: .88rem; }
.prefs-btn[value="l"]  { font-size: 1.02rem; }
.prefs-btn[value="xl"] { font-size: 1.18rem; }

.prefs-menu { position: relative; }
.prefs-menu > summary {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 38px; padding: 0 var(--s-4);
  border-radius: var(--r-full); border: var(--bw) solid var(--field-border);
  background: var(--surface); color: var(--text-2);
  font-size: .86rem; font-weight: 600; cursor: pointer; list-style: none;
}
.prefs-menu > summary::-webkit-details-marker { display: none; }
.prefs-menu > summary::after { content: "▾"; font-size: .8em; }
.prefs-menu[open] > summary::after { content: "▴"; }
.prefs-menu > summary:hover { background: var(--hover-bg); }

.prefs-pop {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 60;
  width: 18rem; max-width: calc(100vw - var(--s-6)); padding: var(--s-2);
  background: var(--surface); color: var(--text);
  border: var(--bw) solid var(--line); border-radius: var(--r-md);
  box-shadow: var(--sh-3);
}
.prefs-pop h4 {
  font-size: .72rem; letter-spacing: .12em; color: var(--text-3);
  padding: var(--s-2) var(--s-2) var(--s-1); font-weight: 700;
}
.prefs-opt {
  display: flex; align-items: center; gap: var(--s-3); width: 100%;
  min-height: 42px; padding: var(--s-2); margin-bottom: 2px;
  background: transparent; border: 1px solid transparent; border-radius: var(--r-sm);
  color: var(--text); font: inherit; font-size: .9rem; text-align: left; cursor: pointer;
}
.prefs-opt:hover { background: var(--hover-bg); }
.prefs-opt[aria-pressed="true"] {
  background: var(--brand-soft); border-color: var(--brand-border);
  color: var(--brand-strong); font-weight: 700;
}
.prefs-opt small { display: block; font-size: .76rem; font-weight: 400; color: var(--text-3); line-height: 1.5; }
.prefs-opt[aria-pressed="true"] small { color: var(--brand-strong); }
.prefs-opt .tick { margin-left: auto; opacity: 0; flex: none; }
.prefs-opt[aria-pressed="true"] .tick { opacity: 1; }

/* 見本の色玉。今の配色に左右されないよう色を直に書く */
.sw { width: 24px; height: 24px; flex: none; border-radius: var(--r-xs); border: 1px solid rgba(0,0,0,.28); }
.sw--auto     { background: linear-gradient(135deg, #F8F9FA 0 50%, #10151B 50% 100%); }
.sw--light    { background: linear-gradient(135deg, #F8F9FA 0 50%, #005BAC 50% 100%); }
.sw--dark     { background: linear-gradient(135deg, #171D25 0 50%, #6DB4EE 50% 100%); }
.sw--graphite { background: linear-gradient(135deg, #31353A 0 50%, #BCC8D2 50% 100%); }
.sw--cvd      { background: linear-gradient(135deg, #0072B2 0 50%, #D55E00 50% 100%); }
.sw--contrast { background: linear-gradient(135deg, #000000 0 50%, #FFE14D 50% 100%); }
.sw--sepia    { background: linear-gradient(135deg, #F3E9D8 0 50%, #6E5740 50% 100%); }
.sw--mono     { background: linear-gradient(135deg, #FFFFFF 0 50%, #1C1C1C 50% 100%); }

/* 帯の中では帯の色に合わせる */
.topbar .prefs-group,
.topbar .prefs-menu > summary {
  background: var(--topbar-chip); border-color: var(--topbar-active-border); color: var(--topbar-fg);
}
.topbar .prefs-group > .prefs-cap { color: var(--topbar-fg); opacity: .85; }
.topbar .prefs-btn { color: var(--topbar-fg); }
.topbar .prefs-btn:hover,
.topbar .prefs-menu > summary:hover { background: var(--topbar-hover); }
.topbar .prefs-btn[aria-pressed="true"] {
  background: var(--topbar-fg); color: var(--topbar-on-fg); border-color: var(--topbar-fg);
}

@media (max-width: 720px) {
  .prefs { width: 100%; justify-content: flex-end; }
  .prefs-pop { position: fixed; left: var(--s-3); right: var(--s-3); top: auto; width: auto; }
  /* 帯を1行に保っているあいだは幅いっぱいにしない（ここで1行取ると帯が2段になる） */
  .topbar-in:has(.topbar-nav--fit) > .prefs { width: auto; }
}

/* ここまで狭いと、そのままでは帯に収まらない。
   押せる高さ（--tap）は変えず、まわりの余白だけ詰める。 */
@media (max-width: 540px) {
  .topbar-in { gap: var(--s-2); padding-left: var(--s-3); padding-right: var(--s-3); }
  .topbar .prefs { gap: var(--s-2); }
  .topbar .prefs-group { padding: 2px; gap: 0; }
  .topbar .prefs-btn { padding: 0; min-width: 40px; }
  .topbar .prefs-menu > summary { padding: 0 var(--s-2); }
  .topbar-me, .topbar-logout { padding: var(--s-2); }
}
/* 携帯の幅。押せる高さは 44px 以上のまま、横だけさらに詰める */
@media (max-width: 430px) {
  .topbar-in { gap: var(--s-1); }
  .topbar .prefs-btn { min-width: 36px; }
}

/* ============================== レイアウト ============================== */

/* 市民向けの横幅。大きな画面で左右が余りすぎないよう、どの画面でも広めに取る。
   面（カード・定義リスト・表）は幅いっぱいに使い、
   続けて読む文章だけ 84ch で止める（下の「説明文の折り返し」を参照）。
   下の .app-shell 側で業務画面用に上書きしているので、ここを変えても業務画面は変わらない。 */
.page { max-width: 1440px; margin: 0 auto; padding: var(--s-7) var(--s-5) var(--s-10); }
.page--narrow { max-width: 1200px; }
.page--mid { max-width: 1360px; }

/* 業務画面は一覧の列が多い。左右の余白を詰めて画面いっぱいに使う。 */
.app-shell .topbar-in { max-width: none; }
.app-shell .page { max-width: none; padding-top: var(--s-6); }
.app-shell .page--narrow { max-width: 820px; }
.app-shell .page--mid { max-width: 1020px; }

.app-shell .layout { display: grid; grid-template-columns: 244px minmax(0,1fr); gap: var(--s-6); align-items: start; }
/* 左メニューを止めているとき（Features:SideNav=false）。項目は帯に並ぶので1段組にする */
.app-shell .layout--full { grid-template-columns: minmax(0,1fr); }

/* 帯にメニューを並べるとき。項目数が多いので、アイコンを添えて詰めて出す */
.topbar-nav--menu { gap: var(--s-1); flex-wrap: wrap; }
.topbar-nav--menu a { display: inline-flex; align-items: center; gap: 6px; }
.topbar-nav--menu svg.i { width: 1.15em; height: 1.15em; flex: none; }

/* 入りきらないぶんを「そのほか」に畳む形（tokuyo.js が付ける）。
   折り返しをやめて1段に収め、あふれたものだけを畳む。
   JavaScript が無いときはこのクラスが付かず、これまでどおり折り返して全部出る。 */
/* min-width:0 が要る。既定の min-width:auto だと中身より狭くならず、
   あふれているかどうかを測れない（＝いつまでも折り返しのまま）。 */
.topbar-nav--fit { flex: 1 1 auto; min-width: 0; flex-wrap: nowrap; overflow: hidden; }
/* 項目の中で文字を折り返させない。折り返すと縦に伸びるだけで
   「横にあふれた」と測れず、いつまでも畳まれない。 */
.topbar-nav--fit > a { white-space: nowrap; flex: none; }

/* 帯そのものも折り返さない。
   折り返せるままだと、はみ出したぶんは氏名・ログアウトが下の段へ落ちるだけで、
   メニューは「あふれていない」と測れてしまう＝いつまでも畳まれず、帯が2段になる。
   畳める状態のときだけ止めること。JavaScript が無いと畳めないので、
   そのときは今までどおり折り返して全部出す。 */
.topbar-in:has(.topbar-nav--fit) { flex-wrap: nowrap; }
/* 縮んでよいのはメニューだけ。ほかは縮めず、狭いときは中の文字を落とす（下の @media） */
.topbar-in:has(.topbar-nav--fit) > .brand,
.topbar-in:has(.topbar-nav--fit) > .prefs,
.topbar-in:has(.topbar-nav--fit) > .topbar-user { flex: none; }
.nav-more { position: relative; flex: none; }
.nav-more > summary {
  list-style: none; cursor: pointer; white-space: nowrap;
  display: inline-flex; align-items: center; gap: 4px;
  min-height: var(--tap); padding: 0 var(--s-3);
  border-radius: var(--r-full); color: var(--topbar-fg); font-size: .9rem; font-weight: 600;
}
.nav-more > summary::-webkit-details-marker { display: none; }
.nav-more > summary::marker { content: ""; }
.nav-more > summary::after { content: "▾"; font-size: .8em; }
.nav-more > summary:hover, .nav-more[open] > summary { background: var(--topbar-hover); }
/* 帯（.topbar-nav--fit）は overflow:hidden なので、中に置くと切り取られる。
   画面に対して置いて、位置は開いたときに tokuyo.js が入れる。 */
.nav-more-list {
  position: fixed; z-index: 60;
  display: flex; flex-direction: column; gap: 2px; min-width: 240px; padding: var(--s-2);
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-md); box-shadow: var(--sh-2);
}
.nav-more-list a {
  display: flex; align-items: center; gap: var(--s-2); white-space: nowrap;
  min-height: var(--tap); padding: 0 var(--s-3); border-radius: var(--r-sm);
  color: var(--text); text-decoration: none; font-size: .92rem;
}
.nav-more-list a:hover { background: var(--hover-bg); text-decoration: none; }
.nav-more-list svg.i { width: 1.15em; height: 1.15em; flex: none; color: var(--text-3); }
@media (max-width: 1080px) { .app-shell .layout { grid-template-columns: 1fr; } }

.sidenav {
  position: sticky; top: calc(var(--header-now, var(--header-h)) + var(--s-4));
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-lg); padding: var(--s-3); box-shadow: var(--sh-1);
}
.sidenav h3 {
  font-size: .7rem; letter-spacing: .14em; color: var(--text-3);
  padding: var(--s-3) var(--s-3) var(--s-2); font-weight: 700;
}
.sidenav a {
  display: flex; align-items: center; gap: var(--s-3);
  min-height: 40px; padding: 0 var(--s-3); margin-bottom: 2px;
  border-radius: var(--r-sm); text-decoration: none;
  color: var(--text-2); font-size: .9rem; font-weight: 500;
}
.sidenav a:hover { background: var(--hover-bg); color: var(--text); }
.sidenav a:hover svg.i { color: var(--brand); }
.sidenav a[aria-current="page"] {
  background: var(--brand-soft); color: var(--brand-strong); font-weight: 700;
  box-shadow: inset 3px 0 0 var(--brand);
}
.sidenav a svg.i { width: 1.35em; height: 1.35em; color: var(--text-3); transition: color .12s ease; }
.sidenav a[aria-current="page"] svg.i { color: inherit; }
.sidenav .ico { width: 20px; text-align: center; flex: none; font-size: 1rem; }
/* 最後の項目の下は余白を残さない（メニューの下に使わない空きができるため） */
.sidenav > :last-child { margin-bottom: 0; }
.sidenav > :last-child > :last-child { margin-bottom: 0; }

/* だれで入っているか（マイページ）とログアウトは帯の右端に置く。
   左メニューを折りたたんでも、どの画面でも同じ位置にある。 */
.topbar-user { display: flex; align-items: center; gap: var(--s-2); }
.topbar-me,
.topbar-logout {
  display: inline-flex; align-items: center; gap: var(--s-2);
  min-height: var(--tap); padding: var(--s-2) var(--s-3);
  border: var(--bw) solid var(--topbar-active-border); border-radius: var(--r-full);
  background: var(--topbar-chip); color: var(--topbar-fg);
  font: inherit; font-size: .86rem; text-decoration: none; cursor: pointer;
}
.topbar-me:hover, .topbar-logout:hover { background: var(--topbar-hover); }
.topbar-me svg.i, .topbar-logout svg.i { width: 1.25em; height: 1.25em; flex: none; }
/* 氏名と所属は2段。所属が長いときは端を省略して、帯の幅を崩さない */
.topbar-me-name { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; text-align: left; }
.topbar-me-name b { font-weight: 700; }
.topbar-me-name small {
  font-size: .74rem; opacity: .85;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 14ch;
}
/* 狭い画面では文字を落としてアイコンだけにする（帯が折り返して伸びるのを防ぐ）。
   落とす順は「無くても困らない」順。
     1) 氏名・所属とログアウトの文字（アイコンは残す）
     2) ロゴの文字（「特養」のマークは残す）
     3) 「文字」の見出しと、いま選んでいる配色の名前（押せる形はそのまま残す）
   読み上げには残るよう、display:none ではなく画面から隠すだけにする。 */
/* いま選んでいる配色の名前（「ライト（白背景）」など）は 150px ほど取る。
   ここを空けるとメニューが2つぶん多く出せるので、いちばん先に落とす。
   どれを選んでいるかは開けば ✓ で分かる。 */
@media (max-width: 1440px) {
  .topbar .prefs-current {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%);
  }
}
@media (max-width: 1080px) {
  .topbar-me-name, .topbar-logout > span,
  .topbar .brand-text,
  .topbar .prefs-cap {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%);
  }
}

/* 業務画面の見出しの説明文は、既定でたたんでヘルプボタンで出す。
   毎日使う人には説明が要らず、横幅を取るほうが邪魔になるため。
   tokuyo.js がボタンを差し込む。JavaScript が無いときは今までどおり出たままになる。 */
/* 区分・見出し・ヘルプを1行に。中の余白は殺す
   （h1 の margin-bottom が残ると、その半分だけヘルプの丸が下にずれる） */
.head-title { display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap; }
.head-title > h1, .head-title > .eyebrow { margin: 0; }
.help-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.9em; height: 1.9em; flex: none;
  border: var(--bw) solid var(--line); border-radius: 50%;
  background: var(--surface); color: var(--text-3); cursor: pointer; padding: 0;
}
.help-toggle:hover { border-color: var(--brand-border); color: var(--brand); background: var(--brand-soft); }
.help-toggle[aria-expanded="true"] { background: var(--brand-solid); border-color: var(--brand-solid); color: var(--on-brand); }
.help-toggle svg.i { width: 1.15em; height: 1.15em; }
/* たたんだ説明。.note などが display を持っているので、勝てる強さで消す */
.app-shell .head .lede[hidden],
[data-help][hidden] { display: none; }

/* ============================== 見出しブロック ============================== */

.head { margin-bottom: var(--s-6); }
.head .eyebrow {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: .76rem; font-weight: 700; letter-spacing: .1em;
  color: var(--brand-strong); background: var(--brand-soft);
  padding: 3px 12px; border-radius: var(--r-full); margin-bottom: var(--s-3);
}
.head h1 { margin-bottom: var(--s-2); }
/* 説明文は画面幅を生かして横に長く出す。業務画面は全幅、
   申込者向けの画面は読みやすさを優先して少しだけ抑える。 */
.head .lede { color: var(--text-2); max-width: 84ch; margin: 0; }
.app-shell .head .lede { max-width: none; }

/* 申込者向けの説明文は「句読点でだけ」折り返す（やさしい日本語の考え方）。

   keep-all で文の途中では切らないようにし、句読点のうしろにだけ
   tokuyo.js が <wbr>（ここで切ってよい、という印）を入れる。
   結果、行の変わり目が必ず「、」「。」のうしろに来る。

   overflow-wrap は逃げ道。1文が長くて1行に収まらないときだけ、
   従来どおりどこでも折る（はみ出させない）。
   JavaScript が無いときも同じ経路で従来の折り返しになる。

   行の長さは制限しない。中途半端な位置で右側が大きく空くと、
   かえって不自然に見えるため（面の幅は .page 側で決める）。

   業務画面（.app-shell）は毎日使う人向けで1行に詰めたいので対象外。 */
body:not(.app-shell) .head .lede,
body:not(.app-shell) .card-body > p,
body:not(.app-shell) .note p,
body:not(.app-shell) dl.kv dd,
body:not(.app-shell) .acc-body,
body:not(.app-shell) .entry p {
  word-break: keep-all;
  overflow-wrap: anywhere;
}

.breadcrumb { display: flex; flex-wrap: wrap; gap: var(--s-2); font-size: .8rem; color: var(--text-3); margin-bottom: var(--s-4); }
.breadcrumb a { color: var(--text-2); text-decoration: none; }
.breadcrumb a:hover { text-decoration: underline; }
.breadcrumb li + li::before { content: "›"; margin-right: var(--s-2); color: var(--text-3); }
.breadcrumb ol { display: flex; flex-wrap: wrap; gap: var(--s-2); list-style: none; margin: 0; padding: 0; }

/* ============================== カード ============================== */

.card {
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-lg); box-shadow: var(--sh-1);
}
.card + .card { margin-top: var(--s-5); }
/* 並べて置くときは間隔を gap で取る。積むとき用の上余白が残ると、
   **2枚目以降だけ下へずれて頭がそろわない**（YOKOHAMA002-288）。
   同じ枡の中で積むときは打ち消さない（枡の中の <div> を挟むので、この規則に当たらない）。 */
.grid > .card + .card { margin-top: 0; }
/* 見出しには下地を敷く。カードの切れ目が分かり、どこまでが1つのまとまりかを追いやすい。
   角を丸めるのは、カード側の角丸から下地がはみ出さないようにするため。 */
.card-head {
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  padding: var(--s-4) var(--s-5); border-bottom: var(--bw) solid var(--line-soft);
  background: var(--head-bg); border-radius: var(--r-lg) var(--r-lg) 0 0;
}
/* たたんでいるときは見出しがカードの全体になるので、下も丸める */
.panel:not([open]) > summary.card-head { border-radius: var(--r-lg); }
.card-head h2, .card-head h3 { margin: 0; }
.card-head .spacer { margin-left: auto; }
.card-body { padding: var(--s-5); }
.card-foot {
  padding: var(--s-4) var(--s-5); border-top: var(--bw) solid var(--line-soft);
  background: var(--surface-2); border-radius: 0 0 var(--r-lg) var(--r-lg);
  display: flex; gap: var(--s-3); flex-wrap: wrap; align-items: center;
}

.grid { display: grid; gap: var(--s-5); }
.grid-2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
@media (max-width: 960px) { .grid-3, .grid-4 { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 640px) { .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; } }

/* 統計タイル。数字は「見出し＋数」の2行だけ。
   1枚ずつが大きいと、8枚並べただけで1画面が埋まってしまうので小さく作る。 */
.stat {
  display: flex; flex-direction: column; gap: 1px;
  background: var(--surface); border: var(--bw) solid var(--line); border-radius: var(--r-md);
  border-left: 3px solid var(--line); padding: var(--s-3) var(--s-4);
}
/* 中身は <div> でも <span> でも同じ見た目になるようにする */
.stat > .label, .stat > .value, .stat > .note { display: block; }
.stat .label { font-size: .76rem; color: var(--text-3); font-weight: 600; line-height: 1.35; }
.stat .value {
  font-family: var(--font-num); font-size: 1.55rem; font-weight: 700;
  color: var(--brand-strong); line-height: 1.2; font-variant-numeric: tabular-nums;
  /* 数字だけでなく機器名などを出すこともあるので、はみ出さずに折り返す */
  overflow-wrap: anywhere;
}
.stat .value small { font-size: .78rem; font-weight: 600; color: var(--text-3); margin-left: 2px; }
/* 注意書きの .note（枠つきの箱）と名前が同じなので、箱の見た目を打ち消す */
.stat .note {
  font-size: .74rem; color: var(--text-3); line-height: 1.45; margin-top: 2px;
  border: 0; background: none; padding: 0; border-radius: 0;
}
/* 種別は左の細い帯でも示す。数字の色だけだと、0件のときに違いが分からないため。 */
.stat--accent { border-left-color: var(--accent-solid); }
.stat--warn { border-left-color: var(--wa-500); }
.stat--danger { border-left-color: var(--dg-500); }
.stat--accent .value { color: var(--accent-strong); }
.stat--warn .value { color: var(--wa-700); }
.stat--danger .value { color: var(--dg-700); }
/* 数字のタイルは、枠の大きさではなく数の多さで並べる（1行にたくさん入る）。
   auto-fill にして、枚数が3枚でも8枚でもタイルの幅をそろえる。 */
.grid:has(> .stat) {
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--s-3);
}

/* ============================== ボタン ============================== */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s-2);
  min-height: var(--tap); padding: 0 var(--s-5);
  border-radius: var(--r-sm); border: var(--bw) solid var(--field-border);
  background: var(--surface); color: var(--text);
  font: inherit; font-size: .94rem; font-weight: 600;
  cursor: pointer; text-decoration: none; text-align: center;
  transition: background .12s ease, border-color .12s ease, box-shadow .12s ease, transform .06s ease;
}
.btn:hover { background: var(--hover-bg); text-decoration: none; }
.btn:active { transform: translateY(1px); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; }

.btn-primary {
  background: var(--brand-solid); border-color: var(--brand-solid); color: var(--on-brand);
  box-shadow: var(--sh-1);
}
.btn-primary:hover { background: var(--brand-solid-hover); border-color: var(--brand-solid-hover); }

.btn-accent { background: var(--accent-solid); border-color: var(--accent-solid); color: var(--on-accent); }
.btn-accent:hover { background: var(--accent-solid-hover); border-color: var(--accent-solid-hover); }

.btn-danger { background: var(--danger-solid); border-color: var(--danger-solid); color: var(--on-danger); }
.btn-danger:hover { background: var(--danger-solid-hover); border-color: var(--danger-solid-hover); }

.btn-ghost { background: transparent; border-color: transparent; color: var(--brand); }
.btn-ghost:hover { background: var(--brand-soft); }

.btn-lg { min-height: 56px; font-size: 1.05rem; padding: 0 var(--s-7); border-radius: var(--r-md); }
.btn-sm { min-height: 34px; font-size: .84rem; padding: 0 var(--s-3); }
.btn-block { width: 100%; }

.btn-row { display: flex; gap: var(--s-3); flex-wrap: wrap; align-items: center; }

/* ============================== 市民の手続きの色 ============================== */

/* 「申込む」と「状況をみる」は別の手続き。途中で取り違えないよう色を分ける。
   ただし色相は青の範囲で分ける（申込＝横浜ブルー／状況＝一段明るい青）。
   緑や青緑は使わない。緑は「済んだこと」を表す色として取ってあるため。
   色の見え方は人によって違うので、帯（.flow-bar）に手続きの名前も出す。 */
.flow--apply  { --flow: var(--brand-solid); --flow-strong: var(--brand-strong);  --flow-soft: var(--brand-soft); --flow-on: var(--on-brand); }
.flow--status { --flow: var(--aq-600);      --flow-strong: var(--accent-strong); --flow-soft: var(--aq-50);     --flow-on: var(--on-accent); }

.flow .topbar { border-bottom: 4px solid var(--flow); }
.flow .head .eyebrow { background: var(--flow-soft); color: var(--flow-strong); }
.flow .btn-primary { background: var(--flow); border-color: var(--flow); color: var(--flow-on); }
.flow .btn-primary:hover { background: var(--flow-strong); border-color: var(--flow-strong); }
.flow .card-head { background: var(--flow-soft); }
/* ステップ表示の現在位置は「ステップ表示」の節にまとめてある（丸と数字を必ず対で塗るため）。
   帯の中の現在ページは、下地（--topbar-active）と枠でもう示している。
   手続きの色で下線を足していたが、手続きの色と帯の色が同系だと見えないのでやめた。 */

/* いまの手続きを名前で出す帯。40〜60代の利用者を想定して、
   何をしているところなのかを常に画面に置いておく。 */
.flow-bar { background: var(--flow-soft); border-bottom: var(--bw) solid var(--line); }
.flow-bar-in {
  max-width: 1440px; margin: 0 auto; padding: var(--s-3) var(--s-5);
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  color: var(--flow-strong);
}
.flow-bar-in b { font-size: 1.05rem; }
.flow-bar-mark { display: inline-flex; }
.flow-bar-mark svg.i { width: 1.3em; height: 1.3em; }
.flow-bar-note { color: var(--text-2); font-size: .9rem; }

/* ログイン中の帯（YOKOHAMA002-286）。市民の画面をログイン中の人（代理申込のケアマネジャー
   など）が開いているときだけ出す。手続きの帯より控えめにして、本文の邪魔をしない。 */
.signed-bar { background: var(--surface-2); border-bottom: var(--bw) solid var(--line); }
.signed-bar-in {
  max-width: 1440px; margin: 0 auto; padding: var(--s-2) var(--s-5);
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  font-size: .92rem;
}
.signed-bar-in .spacer { margin-left: auto; }
.signed-bar-in form { display: inline-flex; }
.signed-mark { display: inline-flex; color: var(--text-3); }
.signed-mark svg.i { width: 1.2em; height: 1.2em; }
.signed-who b { font-size: 1rem; }

/* 市民向けは押す場所を大きくする。指でもマウスでも外しにくいように。 */
body.citizen { --tap: 52px; }
body.citizen .btn { font-size: 1rem; }
body.citizen .btn-lg { min-height: 60px; }

/* ============================== 入口カード（市民トップ） ============================== */

/* 入口のカード。枚数は機能の設定（Features）で変わるので、列数を固定しない。
   3枚なら3列、2枚なら2列で横幅いっぱいに広がる（列が1つ空いたままにならない）。 */
.entry-grid { display: grid; gap: var(--s-5); grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
/* 1枚だけのときは間延びするので、ほどよい幅で止める */
.entry-grid:has(> .entry:only-child) { grid-template-columns: minmax(0, 560px); }
@media (max-width: 900px) { .entry-grid { grid-template-columns: 1fr; } }

.entry {
  display: flex; flex-direction: column; gap: var(--s-3);
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-xl); padding: var(--s-6);
  text-decoration: none; color: var(--text);
  box-shadow: var(--sh-1);
  transition: box-shadow .16s ease, transform .16s ease, border-color .16s ease;
}
.entry:hover {
  box-shadow: var(--sh-3); transform: translateY(-2px);
  border-color: var(--brand-border); text-decoration: none;
}
.entry .ico {
  width: 52px; height: 52px; border-radius: var(--r-md);
  display: grid; place-items: center; font-size: 1.5rem;
  background: var(--brand-soft); color: var(--brand-strong);
}
.entry .ico svg.i { width: 27px; height: 27px; }
.entry h2 { font-size: 1.18rem; }
.entry p { color: var(--text-2); font-size: .94rem; margin: 0; }
.entry .go { margin-top: auto; color: var(--brand); font-weight: 700; font-size: .92rem; }

/* 入口も手続きの色で分ける。押した先の画面と同じ色にして、迷子にならないようにする。 */
.entry--apply  { --flow: var(--brand-solid); --flow-strong: var(--brand-strong);  --flow-soft: var(--brand-soft); }
.entry--status { --flow: var(--aq-600);      --flow-strong: var(--accent-strong); --flow-soft: var(--aq-50); }
.entry--apply, .entry--status { border-left: 6px solid var(--flow); }
.entry--apply .ico, .entry--status .ico { background: var(--flow-soft); color: var(--flow-strong); }
.entry--apply .go, .entry--status .go { color: var(--flow-strong); }

/* ============================== フォーム ============================== */

fieldset { border: 0; padding: 0; margin: 0 0 var(--s-6); }
legend {
  font-weight: 700; font-size: 1.02rem; padding: 0; margin-bottom: var(--s-3);
  color: var(--brand-strong); display: flex; align-items: center; gap: var(--s-2);
}

.field { margin-bottom: var(--s-5); }
.field > label, .field .field-label {
  display: block; font-weight: 600; font-size: .94rem; margin-bottom: var(--s-2);
}
.field .hint { font-size: .84rem; color: var(--text-3); margin-top: var(--s-1); }
.field .hint--em { color: var(--wa-700); font-weight: 600; }

.req {
  display: inline-block; font-size: .7rem; font-weight: 700; vertical-align: 2px;
  color: var(--on-danger); background: var(--danger-solid); border-radius: var(--r-xs);
  padding: 1px 6px; margin-left: var(--s-2); letter-spacing: .04em;
}
.opt {
  display: inline-block; font-size: .7rem; font-weight: 700; vertical-align: 2px;
  color: var(--text-3); background: var(--muted-bg); border-radius: var(--r-xs);
  padding: 1px 6px; margin-left: var(--s-2);
}

input[type="text"], input[type="tel"], input[type="email"], input[type="number"],
input[type="date"], input[type="password"], input[type="search"], input[type="time"],
select, textarea {
  width: 100%; min-height: var(--tap);
  padding: var(--s-2) var(--s-3);
  font: inherit; font-size: 1rem; color: var(--text);
  background: var(--surface); border: var(--bw) solid var(--field-border);
  border-radius: var(--r-sm);
  transition: border-color .12s ease, box-shadow .12s ease;
}
textarea { min-height: 116px; line-height: 1.7; resize: vertical; }
select { appearance: none; padding-right: var(--s-8);
  background-image: linear-gradient(45deg, transparent 50%, var(--field-arrow) 50%),
                    linear-gradient(135deg, var(--field-arrow) 50%, transparent 50%);
  background-position: calc(100% - 19px) 50%, calc(100% - 13px) 50%;
  background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; }

input:focus, select:focus, textarea:focus {
  border-color: var(--brand); box-shadow: var(--ring); outline: none;
}
input[aria-invalid="true"], select[aria-invalid="true"], textarea[aria-invalid="true"],
.input-validation-error {
  border-color: var(--dg-500) !important;
  background: var(--dg-50);
}
input::placeholder, textarea::placeholder { color: var(--placeholder); }
input[readonly], input[disabled], select[disabled], textarea[readonly] {
  background: var(--disabled-bg); color: var(--text-3);
}

.field-row { display: flex; gap: var(--s-3); flex-wrap: wrap; align-items: start; }
.field-row > * { flex: 1 1 180px; }

/* 横に並べた入力欄は、上端でそろえる。
   下端でそろえると、注記のある欄とない欄で入力枠の高さがずれて階段状に見えるため。
   ラベルの高さも1〜2行で共通にして、入力枠の位置をそろえる。 */
.field-row, .filters { --label-h: 2.5rem; }
.field-row > .field > label, .field-row > .field > .field-label,
.filters .field > label, .filters .field > .field-label {
  min-height: var(--label-h);
  display: flex; flex-wrap: wrap; align-items: baseline; align-content: flex-end; row-gap: 2px;
}
/* ラベルのない欄（ボタンだけ等）はラベル分だけ下げてそろえる */
.field-row > .field:not(:has(> label)):not(:has(> .field-label)),
.filters .field:not(:has(> label)):not(:has(> .field-label)) {
  padding-top: calc(var(--label-h) + var(--s-2));
}
.w-xs { max-width: 110px; } .w-sm { max-width: 180px; } .w-md { max-width: 280px; } .w-lg { max-width: 420px; }

/* 選択肢（ラジオ・チェック）— タップしやすい面で囲む */
.choices { display: grid; gap: var(--s-2); }
.choices--inline { grid-auto-flow: column; grid-auto-columns: max-content; }
.choices--2 { grid-template-columns: repeat(2, minmax(0,1fr)); }
.choices--3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
@media (max-width: 720px) { .choices--2, .choices--3 { grid-template-columns: 1fr; } .choices--inline { grid-auto-flow: row; } }

.choice {
  display: flex; align-items: flex-start; gap: var(--s-3);
  min-height: var(--tap); padding: var(--s-3) var(--s-4);
  border: var(--bw) solid var(--field-border); border-radius: var(--r-sm);
  background: var(--surface); cursor: pointer;
  transition: border-color .12s, background .12s, box-shadow .12s;
}
.choice:hover { border-color: var(--brand-border); background: var(--brand-soft); }
/* 丸・四角は px で固定しない。文字サイズ設定（data-font）で文字だけ大きくなると
   ラベルの1行目の中心からずれていくため、文字と一緒に伸ばす。
   上の余白は「1行の高さ − 自分の高さ」の半分。こうすると行送りが変わっても
   （市民 1.85／業務 1.6）1行目の真ん中に来る。複数行のラベルでも上に付いたままにする。 */
.choice input {
  width: 1.25em; height: 1.25em; flex: none;
  margin: calc((1em * var(--lh-base) - 1.25em) / 2) 0 0;
  accent-color: var(--brand-solid);
}
.choice-text { flex: 1; }
.choice-text b { display: block; font-weight: 600; }
.choice-text small { display: block; color: var(--text-3); font-size: .82rem; line-height: 1.6; }
.choice:has(input:checked) {
  border-color: var(--brand-solid); background: var(--brand-soft);
  box-shadow: inset 0 0 0 1px var(--brand-solid);
}
.choice:has(input:focus-visible) { box-shadow: var(--ring); }

/* 同意書のチェック。
   ここは「読んで、同意する」ための文なので、補助文（small）の扱いにしない。
   本文と同じ大きさ・同じ濃さで組み、番号は丸で大きく出す。チェックも大きくする。 */
.choice--consent { padding: var(--s-4) var(--s-5); border-width: 2px; }
.choice--consent input {
  width: 1.5em; height: 1.5em;
  margin-top: calc((1em * var(--lh-base) - 1.5em) / 2);
}
.choice--consent .choice-text {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--s-2) var(--s-3);
  align-items: start;
}
/* 番号の丸は「直下の b」だけ。本文の中にも強調の b があるので、子孫まで当てない */
.choice--consent .choice-text > b {
  display: grid; place-items: center; min-width: 1.9em; min-height: 1.9em; margin-top: .1em;
  border-radius: var(--r-full); background: var(--brand-solid); color: var(--on-brand);
  font-size: .95rem; font-weight: 700; line-height: 1;
}
.choice--consent .choice-text small {
  font-size: 1.02rem; color: var(--text); line-height: 1.9;
}
/* 業務画面（紙申込の入力）では、まわりの密度に合わせて少しだけ落とす */
.app-shell .choice--consent .choice-text small { font-size: 1rem; line-height: 1.7; }

/* コンパクトなチェック群（A〜Rなど多数の選択肢） */
.chips { display: flex; flex-wrap: wrap; gap: var(--s-2); }
.chip {
  display: inline-flex; align-items: center; gap: var(--s-2);
  min-height: 38px; padding: 0 var(--s-3);
  border: var(--bw) solid var(--field-border); border-radius: var(--r-full);
  background: var(--surface); cursor: pointer; font-size: .88rem;
}
/* 申込の選択肢（チェックボックスの列）も同じ。文字と一緒に伸ばす。
   こちらは align-items: center なので上下の位置合わせは要らない。 */
.chip input { width: 1.15em; height: 1.15em; flex: none; accent-color: var(--brand-solid); }
.chip:has(input:checked) { border-color: var(--brand-solid); background: var(--brand-soft); color: var(--brand-strong); font-weight: 600; }
.chip:hover { border-color: var(--brand-border); }

/* 絞り込みのリンク版（宛名ラベルの候補。YOKOHAMA002-260）。
   .chip はチェックボックス用なので、押して移動する側は別に用意する。見た目はそろえる。
   40〜50代の利用を想定しているので、いま選んでいるものは色と太さの両方で示す
   （色だけだと分かりにくい）。 */
.chips-link { display: flex; flex-wrap: wrap; gap: var(--s-2); align-items: center; }
.chip-link {
  display: inline-flex; align-items: center;
  min-height: 38px; padding: 0 var(--s-3);
  border: var(--bw) solid var(--field-border); border-radius: var(--r-full);
  background: var(--surface); font-size: .88rem; text-decoration: none;
}
.chip-link:hover { border-color: var(--brand-border); text-decoration: none; }
.chip-link.is-on {
  border-color: var(--brand-solid); background: var(--brand-soft);
  color: var(--brand-strong); font-weight: 700;
}

/* ============================== ステップ表示 ============================== */

/* 今どのステップにいるかは、下まで入力しても見えていてほしい。
   帯の下に貼り付ける。背景を敷かないと、下の内容が透けて読めなくなる。 */
.steps {
  display: flex; flex-wrap: wrap; gap: var(--s-2); margin-bottom: var(--s-6); list-style: none;
  position: sticky; top: var(--header-now, var(--header-h)); z-index: 20;
  padding: var(--s-3) 0; margin-top: calc(var(--s-3) * -1);
  background: var(--bg);
  box-shadow: 0 6px 6px -6px rgb(0 0 0 / .10);
}
/* 見た目は中の .step-pill が持つ。現在地は <span>、それ以外は移動用の <button>。
   li 側に持たせると、ボタンにしたとたん枠と地が二重になる。 */
.steps li { display: flex; }
.steps .step-pill {
  display: flex; align-items: center; gap: var(--s-2);
  font-family: inherit; font-size: .84rem; color: var(--text-3); text-align: left;
  padding: var(--s-2) var(--s-4); border-radius: var(--r-full);
  background: var(--surface); border: var(--bw) solid var(--line);
}
/* 押せるほうは、押せると分かるようにする（下線は出さない。丸い札の形が崩れるため） */
button.step-pill { cursor: pointer; }
button.step-pill:hover { border-color: var(--brand-solid); box-shadow: var(--sh-1); }
button.step-pill:focus-visible { outline: var(--focus-w) solid var(--focus); outline-offset: 2px; }
.steps li .n {
  /* 丸の大きさは px で固定しない。文字サイズ設定（data-font）で数字だけ大きくなり、
     丸からはみ出して見えるため、自分の font-size を基準に一緒に伸ばす。
     line-height も 1 に落とす（市民向けの 1.85 のままだと行の高さが丸を超える）。 */
  width: 1.8em; height: 1.8em; border-radius: 50%; flex: none;
  display: grid; place-items: center; font-size: .76rem; font-weight: 700;
  line-height: 1; font-variant-numeric: tabular-nums;
  /* まだ来ていないステップの数字。--text-3 だと丸の地に対して 3.9:1 で足りない */
  background: var(--track); color: var(--text-2);
}
.steps li[data-state="current"] > .step-pill {
  background: var(--brand-solid); border-color: var(--brand-solid); color: var(--on-brand); font-weight: 700;
}
.steps li[data-state="current"] .n { background: var(--on-brand); color: var(--brand-solid); }
/* 済んだところも青。塗り方で見分ける。
     済み … 淡い地＋枠つき、丸は塗り（数字は白抜き）
     現在 … 丸ごと塗り、丸は白抜き（数字が主色）
     未   … 灰
   色ではなく濃さと反転で分けているので、青一色でも並びが読み取れる。 */
.steps li[data-state="done"] > .step-pill { color: var(--brand-strong); border-color: var(--brand-border); background: var(--brand-soft); }
.steps li[data-state="done"] .n { background: var(--brand-solid); color: var(--on-brand); }

/* 手続きの色（.flow--*）が付いているときは、現在のステップもその色にする。
   丸の地と数字は**必ず対で**塗ること。丸の地だけ差し替えると、
   手続きの色が主色と同じになったときに数字が地に溶けて消える。 */
.flow .steps li[data-state="current"] > .step-pill {
  background: var(--flow, var(--brand-solid)); border-color: var(--flow, var(--brand-solid));
  color: var(--flow-on, var(--on-brand));
}
.flow .steps li[data-state="current"] .n {
  background: var(--flow-on, var(--on-brand)); color: var(--flow, var(--brand-solid));
}
.flow .steps li[data-state="done"] > .step-pill {
  color: var(--flow-strong, var(--brand-strong)); border-color: var(--flow, var(--brand-solid));
  background: var(--flow-soft, var(--brand-soft));
}
.flow .steps li[data-state="done"] .n {
  background: var(--flow, var(--brand-solid)); color: var(--flow-on, var(--on-brand));
}

.progress { height: 8px; background: var(--track); border-radius: var(--r-full); overflow: hidden; }
.progress > i { display: block; height: 100%; background: var(--progress-fill); border-radius: inherit; }

/* ============================== 表 ============================== */

.table-wrap { overflow-x: auto; border: var(--bw) solid var(--line); border-radius: var(--r-md); background: var(--surface); }

/* 日本語はどこでも改行できてしまうため、列が狭いと1文字ずつ縦に並んでしまう。
   表は中身の幅（max-content）を優先し、はみ出す分は .table-wrap で横スクロールさせる。
   長い文章の列だけ .wrap を付けて折り返す。 */
table.tbl { width: max-content; min-width: 100%; border-collapse: separate; border-spacing: 0; font-size: .9rem; }
table.tbl caption { text-align: left; padding: var(--s-3) var(--s-4); color: var(--text-3); font-size: .82rem; white-space: normal; }
/* 列の境目にも線を引く。毎日一覧を目で追う業務画面では、
   横線だけだと視線が隣の列へ滑るため。いちばん右の列には引かない。 */
table.tbl th, table.tbl td {
  padding: var(--s-3) var(--s-4); text-align: left; vertical-align: top;
  border-bottom: var(--bw) solid var(--line-soft);
  border-right: var(--bw) solid var(--line-soft);
  white-space: nowrap;
}
table.tbl th:last-child, table.tbl td:last-child { border-right: 0; }
table.tbl th.wrap, table.tbl td.wrap { white-space: normal; min-width: 22ch; max-width: 46ch; }
table.tbl td.wrap-sm, table.tbl th.wrap-sm { white-space: normal; min-width: 14ch; max-width: 28ch; }
/* 行の見出し（左端の項目名）は説明文であることが多いので折り返す */
table.tbl tbody th[scope="row"] { white-space: normal; max-width: 42ch; }
table.tbl thead th {
  background: var(--thead-bg); color: var(--thead-text);
  font-size: .8rem; font-weight: 700; letter-spacing: .03em; white-space: nowrap;
  border-bottom: var(--bw) solid var(--thead-border);
}
/* 見出し行はスクロールしても表の上に残す（貼り付く先は .table-wrap）。
   2段見出しの表は行が重なってしまうため対象外にする。 */
table.tbl thead tr:only-child th {
  position: sticky; top: 0; z-index: 3;
  box-shadow: 0 1px 0 var(--thead-border);
}
table.tbl tbody tr:hover { background: var(--surface-2); }
table.tbl tbody tr:last-child td { border-bottom: 0; }
table.tbl td.num, table.tbl th.num { text-align: right; font-family: var(--font-num); font-variant-numeric: tabular-nums; white-space: nowrap; }
table.tbl .rank { font-family: var(--font-num); font-weight: 700; color: var(--brand-strong); }
table.tbl--zebra tbody tr:nth-child(even) { background: var(--surface-2); }

/* 待機の対象ではなくなった行（他施設で入所・死亡等）。
   消さずに残すので、色を落として「もう追わなくてよい行」だと分かるようにする。
   ただし opacity は使わない（読めなくなる）。文字色はコントラスト比を保つ --text-3 まで。
   色だけに頼らないよう、氏名の横にも事由のバッジを出している。 */
table.tbl tbody tr.row--closed { background: var(--muted-bg); color: var(--text-3); }
table.tbl tbody tr.row--closed:hover { background: var(--muted-bg); }

/* 電話応対でいま確認している行（YOKOHAMA002-265）。
   電話中に「どの行を見ているか」を見失わないよう、左端に線を付けて背景も変える
   （背景だけだと、行が多いときに目で追えない）。 */
table.tbl tbody tr.row--selected { background: var(--brand-soft); }
table.tbl tbody tr.row--selected:hover { background: var(--brand-soft); }
table.tbl tbody tr.row--selected > td:first-child { box-shadow: inset 3px 0 0 var(--brand-solid); }
table.tbl tbody tr.row--closed b,
table.tbl tbody tr.row--closed .t-bold { font-weight: 500; }
table.tbl tbody tr.row--closed a { color: var(--text-2); }

/* 並べ替えできる見出し（tokuyo.js が <button> を差し込む） */
table.tbl thead th.sortable { padding: 0; }
.th-sort {
  display: flex; align-items: center; gap: 6px; width: 100%;
  min-height: 40px; padding: var(--s-3) var(--s-4);
  background: none; border: 0; border-radius: 0;
  color: inherit; font: inherit; text-align: inherit;
  white-space: nowrap; cursor: pointer;
}
.th-sort:hover { background: var(--brand-soft); }
table.tbl thead th.num .th-sort { justify-content: flex-end; }
.th-sort .mark { font-size: .9em; opacity: .32; }
table.tbl thead th[aria-sort] .th-sort .mark { opacity: 1; }
table.tbl thead th[aria-sort] { box-shadow: inset 0 -3px 0 var(--brand); }

/* 縦2列の定義リスト（申込内容の確認）。
   項目と中身の対応を目で追うものなので、外枠・横罫・縦罫をはっきり引く。
   罫が薄いと、行が多いときに1行ぶん目がずれる。 */
dl.kv {
  display: grid; grid-template-columns: max-content 1fr; gap: 0; margin: 0; font-size: .95rem;
  border: var(--bw) solid var(--line); border-radius: var(--r-sm); overflow: hidden;
  background: var(--surface);
}
dl.kv dt, dl.kv dd { padding: var(--s-3) var(--s-4); border-bottom: var(--bw) solid var(--line); margin: 0; }
dl.kv dt {
  font-weight: 600; color: var(--text-2); background: var(--surface-2); white-space: nowrap;
  border-right: var(--bw) solid var(--line);
}
/* 枠で囲ったぶん、はみ出したものは切り取られる。
   メールアドレスのような切れ目のない文字列は折り返して、隠れないようにする。 */
dl.kv dd { min-width: 0; overflow-wrap: anywhere; }
dl.kv > :nth-last-child(-n+2) { border-bottom: 0; }
@media (max-width: 640px) {
  dl.kv { grid-template-columns: 1fr; }
  dl.kv dt { border-bottom: 0; border-right: 0; }
}

/* ============================== バッジ・タグ ============================== */

.badge {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: .76rem; font-weight: 700; letter-spacing: .02em;
  padding: 2px 10px; border-radius: var(--r-full); white-space: nowrap;
  border: 1px solid transparent;
}
.badge--n  { background: var(--muted-bg); color: var(--text-2); }
.badge--in { background: var(--in-50);  color: var(--brand-strong); border-color: var(--note-in-border); }
.badge--ok { background: var(--ok-50);  color: var(--ok-700); }
.badge--wa { background: var(--wa-50);  color: var(--wa-700); }
.badge--dg { background: var(--dg-50);  color: var(--dg-700); }
.badge--aq { background: var(--aq-50);  color: var(--accent-strong); }
.badge--solid { background: var(--brand-solid); color: var(--on-brand); }

.score-pill {
  display: inline-flex; align-items: baseline; gap: 3px;
  font-family: var(--font-num); font-weight: 700;
  background: var(--brand-solid); color: var(--on-brand);
  padding: 3px 12px; border-radius: var(--r-full); font-size: .94rem;
}
.score-pill small { font-size: .72rem; font-weight: 600; opacity: .85; }

/* ============================== 注意書き ============================== */

.note {
  border-radius: var(--r-md); padding: var(--s-4) var(--s-5);
  border: var(--bw) solid var(--line); background: var(--surface-2);
  font-size: .92rem;
}
.note > :first-child { margin-top: 0; }
.note > :last-child { margin-bottom: 0; }
.note b { font-weight: 700; }
.note--info { background: var(--in-50); border-color: var(--note-in-border); }
.note--ok   { background: var(--ok-50); border-color: var(--note-ok-border); }
.note--warn { background: var(--wa-50); border-color: var(--note-wa-border); }
.note--dg   { background: var(--dg-50); border-color: var(--note-dg-border); }
.note-title { display: flex; align-items: center; gap: var(--s-2); font-weight: 700; margin-bottom: var(--s-2); }

/* ---- ダウンロード・外部の案内の並び（YOKOHAMA002-280）----
   ご高齢の方・ご家族が押す想定なので、行の間を空けて狙いやすくする。
   説明はリンクの下に落として、リンクの文字そのものを短く保つ。 */
.link-list { list-style: none; margin: 0; padding: 0; }
.link-list > li { padding: var(--s-2) 0; }
.link-list > li + li { border-top: var(--bw) solid var(--line); }
.link-list > li > a { font-weight: 700; }
.link-list > li > span { display: block; margin-top: var(--s-1); }

.validation-summary ul { margin: 0; padding-left: 1.3em; }
.validation-summary li { margin-bottom: var(--s-1); }
.field-validation-error { display: block; color: var(--dg-700); font-size: .85rem; font-weight: 600; margin-top: var(--s-1); }
.validation-summary-valid { display: none; }

/* 入力エラーの案内（_ErrorSummary / tokuyo.js） */
.error-summary:focus-visible { outline: var(--focus-w) solid var(--focus); outline-offset: 2px; }
.error-list { margin: var(--s-2) 0 var(--s-3); padding-left: 1.5em; }
.error-list li { margin-bottom: var(--s-1); }
.error-list a { color: var(--dg-700); font-weight: 600; }
.error-list a:hover { color: var(--dg-700); }

/* エラーのある欄は、たどり着いたときに一目で分かるようにする */
.field--error {
  border-left: 3px solid var(--dg-500);
  padding-left: var(--s-3); margin-left: calc(var(--s-3) * -1);
}
.field--error > label, .field--error > .field-label { color: var(--dg-700); }
.field--error input, .field--error select, .field--error textarea { border-color: var(--dg-500); }

/* ============================== 検索・フィルタ ============================== */

.filters {
  display: grid; gap: var(--s-3);
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  align-items: start;
}
.filters .actions { display: flex; gap: var(--s-2); }
/* 検索条件の中にボタンが残っている場合も、最後の行の右端にそろえる。
   （原則はカード下部の .card-foot に置く。ここは取りこぼしの受け皿） */
.filters > .actions { grid-column: 1 / -1; justify-content: flex-end; }
/* カードの外（アコーディオンの中など）で検索ボタンを右下にそろえるとき */
.actions--end {
  display: flex; gap: var(--s-2); flex-wrap: wrap;
  justify-content: flex-end; margin-top: var(--s-4);
}

/* 業務画面の検索条件は項目数が多いので、縦の余白を節約する。
   ラベルは読み上げのために残したまま見た目だけ隠し、
   何の欄かは入力欄のプレースホルダと、プルダウンの先頭の選択肢が受け持つ。
   （申込者向けの画面では使わない。ラベルが見えないと迷うため） */
.filters--tight { --label-h: 0; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); }
/* 選択肢や案内文が長い欄は2列ぶん使う（プレースホルダが途中で切れないように） */
.filters--tight > .field--wide { grid-column: span 2; }
.filters--tight > .field:not(.field--inline) > label:not(.choice),
.filters--tight > .field:not(.field--inline) > .field-label {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
  min-height: 0;
}
.filters--tight > .field:not(:has(> label)):not(:has(> .field-label)) { padding-top: 0; }
.filters--tight .hint { font-size: .8rem; line-height: 1.5; }

/* 日付欄はプレースホルダが表示されないので、短い見出しを左に置いて高さを増やさない */
.filters--tight > .field--inline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2); }
.filters--tight > .field--inline > .hint { flex: 1 0 100%; }
.filters--tight > .field--inline > label {
  flex: none; margin: 0; min-height: 0;
  font-size: .85rem; font-weight: 600; color: var(--text-2); white-space: nowrap;
}
/* 入力欄は既定で width:100% なので、そのままだとラベルと並びきらず折り返してしまう。
   幅を内容なりにして、余った分だけ伸ばす。 */
.filters--tight > .field--inline > input,
.filters--tight > .field--inline > select { flex: 1 1 auto; width: auto; min-width: 0; }

.toolbar {
  display: flex; gap: var(--s-3); flex-wrap: wrap; align-items: center;
  margin-bottom: var(--s-4);
}
.toolbar .spacer { margin-left: auto; }
.result-count { font-size: .88rem; color: var(--text-2); }
.result-count b { font-family: var(--font-num); color: var(--text); font-size: 1.05rem; }

/* 検索条件のカードは、件数を左・操作ボタンを右下にそろえる */
.card:has(.filters) .card-foot { justify-content: flex-end; }
.card:has(.filters) .card-foot .result-count { order: -1; margin-right: auto; }
.card:has(.filters) .card-foot .spacer { display: none; }

/* `.search-card` は検索条件のかたまりを囲むだけの目印。
   角に操作ボタンを重ねるのをやめたので（YOKOHAMA002-283）、いま体裁の指定は無い。 */

/* 画面の要点（件数）を**1行**で出す帯（YOKOHAMA002-284）。
   数字のタイルを縦に積むと、それだけで画面の1/4を使い、表が下へ押し出される。
   毎日この画面で一覧を見る人には、要点は1行あれば足りる。
   置き場所は見出しの行の真ん中（寄せるのは tokuyo.js。無いときはこの帯のまま出る）。 */
.head-summary {
  display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--s-3);
  margin-bottom: var(--s-4);
}
.head-summary .hs {
  display: inline-flex; align-items: baseline; gap: .35em;
  font-size: .84rem; color: var(--text-3); white-space: nowrap;
}
/* 区切りは線。「・」だと数字と地続きに見えて、どこまでが1つの数か分からない */
.head-summary .hs + .hs { border-left: var(--bw) solid var(--line); padding-left: var(--s-3); }
.head-summary .hs .n {
  font-family: var(--font-num); font-size: 1.2rem; font-weight: 700;
  color: var(--brand-strong); font-variant-numeric: tabular-nums;
}
.head-summary .hs .u { font-size: .78rem; color: var(--text-3); }
/* 種別は数字の色で示す（タイルの左帯と同じ考え方） */
.head-summary .hs--accent .n { color: var(--accent-strong); }
.head-summary .hs--warn .n { color: var(--wa-700); }
.head-summary .hs--danger .n { color: var(--dg-700); }
.head-summary .hs a { color: inherit; }

/* その画面の操作（CSVで出力・新規作成・印刷など）の帯。
   検索条件の右上に重ねていたが、それでは「検索の操作」に見えるうえ、
   検索条件をたたんでいると押せる場所が分からなかった（YOKOHAMA002-283）。
   見出しの行へ上げる（寄せるのは tokuyo.js。無いときはこの帯のまま出る）。 */
.head-actions {
  display: flex; gap: var(--s-2); align-items: center; flex-wrap: wrap;
  margin-bottom: var(--s-4);
}

/* ユーザーの区分（経営者会／施設／横浜市／ケアマネ・病院）。
   状態のバッジと役割が違うので、色の帯＋文字という別の見た目にする
   （バッジと同じ形にすると「状態」と読み違えられる）。 */
.grp {
  display: inline-flex; align-items: center; gap: .45em;
  white-space: nowrap; font-size: .85rem; font-weight: 700; color: var(--text);
}
.grp::before {
  content: ""; flex: none; width: .5em; height: 1.15em;
  border-radius: 2px; background: var(--grp-c, var(--text-3));
}
.grp--center   { --grp-c: var(--brand-solid); }
.grp--facility { --grp-c: var(--ok-500); }
.grp--city     { --grp-c: var(--accent-solid); }
.grp--cm       { --grp-c: var(--wa-500); }

/* ============================== 本人確認バー（申込詳細） ============================== */

/* 電話を受けながら本人確認をするので、下へスクロールしても本人の情報が消えないようにする。
   本人カードを丸ごと貼り付けると場所を取りすぎるので、読み合わせに使う項目だけを横1行にする。
   入りきらないときはこの中だけ横に流す（画面ごと横スクロールさせない）。 */
.idbar {
  position: sticky; top: var(--header-now, var(--header-h)); z-index: 20;
  display: flex; align-items: center; gap: var(--s-4);
  padding: var(--s-2) var(--s-4); margin-bottom: var(--s-4);
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-md); box-shadow: var(--sh-2);
  overflow-x: auto; overflow-y: hidden; white-space: nowrap; scrollbar-width: thin;
}
.idbar-item { display: inline-flex; align-items: baseline; gap: .4em; flex: none; }
.idbar-k { font-size: .72rem; font-weight: 700; letter-spacing: .04em; color: var(--text-3); }
.idbar-v { font-size: 1rem; font-weight: 700; }
.idbar-name .idbar-v { font-size: 1.2rem; }
.idbar-kana { font-size: .82rem; color: var(--text-2); }
.idbar-sep { flex: none; align-self: stretch; width: var(--bw); background: var(--line-soft); }
.idbar .spacer { margin-left: auto; }
/* 狭いときは、本人確認に直接使わないものから落とす */
@media (max-width: 1280px) { .idbar-opt { display: none; } }

/* 2行にまとめた形。1行目＝どの申込か／2行目＝読み合わせに使う値。
   パンくずと見出しの行を畳んでいるので、貼り付けても4行ぶんは取らない。 */
.idbar--2 { flex-direction: column; align-items: stretch; gap: var(--s-1); overflow: visible; padding: var(--s-2) var(--s-4); }
.idbar--2 > .idbar-row {
  display: flex; align-items: center; gap: var(--s-3); min-width: 0;
  overflow-x: auto; overflow-y: hidden; white-space: nowrap; scrollbar-width: thin;
}
.idbar--2 > .idbar-row .spacer { margin-left: auto; }
.idbar-row--facts { gap: var(--s-4); }
.idbar-back {
  flex: none; display: inline-flex; align-items: center; gap: 2px;
  font-size: .84rem; color: var(--text-2); text-decoration: none;
  padding: 2px var(--s-2) 2px 0; border-right: var(--bw) solid var(--line-soft);
}
.idbar-back:hover { color: var(--brand); text-decoration: underline; }
.idbar-back svg.i { width: 1em; height: 1em; }
.idbar--2 .idbar-name { margin: 0; font-size: 1.2rem; display: inline-flex; align-items: baseline; gap: .5em; flex: none; }
.idbar--2 .idbar-name .idbar-v { font-size: 1.2rem; }

/* 電話で読み合わせる値は、下地を引いて拾いやすくする。
   色だけに頼らないよう、太字と組みで使う。 */
.hl {
  background: linear-gradient(transparent 58%, var(--hl) 58%);
  font-weight: 700;
}

/* ============================== 画面内の目次（申込詳細） ============================== */

/* 申込詳細は縦に長く、何がどこにあるか分からなくなる。
   左に目次を貼り付けて、全体像と現在地が分かるようにする。 */
/* 目次は右に置く。左に置くと、業務画面の左メニューと縦に2本並んで
   「どちらが画面の外側の行き先か」が分かりにくい。
   読む順（HTML の並び）は目次が先のままにして、置く場所だけ入れ替える。 */
.detail-layout { display: grid; grid-template-columns: minmax(0,1fr) 190px; gap: var(--s-5); align-items: start; }
.detail-layout > .toc { grid-column: 2; grid-row: 1; }
.detail-layout > .detail-main { grid-column: 1; grid-row: 1; }
@media (max-width: 1200px) {
  .detail-layout { grid-template-columns: 1fr; }
  .detail-layout > .toc, .detail-layout > .detail-main { grid-column: 1; grid-row: auto; }
}

.toc {
  position: sticky;
  top: calc(var(--header-now, var(--header-h)) + var(--idbar-now, 52px) + var(--s-4));
  display: flex; flex-direction: column; gap: 2px;
  background: var(--surface); border: var(--bw) solid var(--line);
  border-radius: var(--r-lg); padding: var(--s-3); box-shadow: var(--sh-1);
}
.toc h2 {
  font-size: .72rem; font-weight: 700; letter-spacing: .08em;
  color: var(--text-3); margin: 0 0 var(--s-2); padding: 0 var(--s-2);
}
.toc a {
  display: block; padding: var(--s-2); border-radius: var(--r-sm);
  font-size: .88rem; color: var(--text-2); text-decoration: none;
  border-left: 3px solid transparent;
}
.toc a:hover { background: var(--hover-bg); color: var(--text); text-decoration: none; }
.toc a[aria-current] {
  background: var(--brand-soft); color: var(--brand-strong);
  border-left-color: var(--brand-solid); font-weight: 700;
}
/* 目次から飛んだとき、帯と本人確認バーの下に隠れないようにする */
.detail-main > section, .detail-main > .form-sides, .detail-main > .note {
  scroll-margin-top: calc(var(--header-now, var(--header-h)) + var(--idbar-now, 52px) + var(--s-5));
}
@media (max-width: 1200px) {
  /* 狭いときは貼り付けず、横に並ぶ見出しの一覧にする */
  .toc { position: static; flex-direction: row; flex-wrap: wrap; }
  .toc h2 { width: 100%; }
}

/* ============================== 申込書 A面・B面 ============================== */

/* 紙の申込書は A面・B面の2枚組。縦に積むと行き来にスクロールが要るので横に並べ、
   どちらを見ているか迷わないよう色を分ける。 */
.form-sides { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--s-5); align-items: start; }
/* 横並びのときは .card + .card の上余白を打ち消す（B面だけ下にずれてしまう） */
.form-sides > .card + .card { margin-top: 0; }
@media (max-width: 1200px) { .form-sides { grid-template-columns: 1fr; } }
/* A面・B面を横に並べると、1枚あたりは画面の半分しかない。
   その中をさらに2列に割ると1列 250px ほどになり、読める幅を切る。
   広い画面のときだけ2列にして、それ以外は縦に積む。 */
@media (max-width: 1600px) { .form-sides .grid-2 { grid-template-columns: 1fr; } }

/* 色は左端の帯で出す。見出しまでスクロールで戻らなくても、どちら側かが分かる */
.card--a { border-left: 4px solid var(--brand-solid); }
.card--a > .card-head { background: var(--brand-soft); }
.card--b { border-left: 4px solid var(--accent-solid); }
.card--b > .card-head { background: var(--aq-50); }
.side-mark {
  flex: none; font-size: .74rem; font-weight: 800; letter-spacing: .08em;
  padding: 2px 10px; border-radius: var(--r-full);
}
.card--a .side-mark { background: var(--brand-solid); color: var(--on-brand); }
.card--b .side-mark { background: var(--accent-solid); color: var(--on-accent); }

/* 操作のカード。ほかは「読むもの」だが、ここだけ「押すとデータが変わるもの」。
   同じ見た目だと、読んでいる流れのまま押してしまうので、面ごと分ける。 */
.card--ops { border: 2px solid var(--wa-500); background: var(--wa-50); }
.card--ops > .card-head { background: transparent; border-bottom-color: var(--wa-500); }
.card--ops > .card-body { background: var(--surface); border-radius: 0 0 var(--r-lg) var(--r-lg); }
.ops-mark {
  flex: none; font-size: .74rem; font-weight: 800; letter-spacing: .08em;
  padding: 2px 10px; border-radius: var(--r-full);
  background: var(--wa-500); color: #FFFFFF;
}
:root[data-theme="cvd"] .ops-mark::before { content: "▲"; font-size: .82em; margin-right: .3em; }

/* ============================== カードの見出しを貼り付ける（申込詳細） ============================== */

/* 申込書 A面のように縦に長いカードは、下のほうを読むころには見出しが画面の外へ出ていて、
   いま何を見ているのか分からなくなる。見出しだけ本人確認バーの下に残す。
   貼り付く範囲はカードの中だけなので、そのカードを抜ければ次の見出しに入れ替わる。 */
.detail-main .card > .card-head {
  position: sticky;
  /* 帯と本人確認バーの真下。すき間を空けると、そこを本文が通り抜けて見える */
  top: calc(var(--header-now, var(--header-h)) + var(--idbar-now, 52px));
  /* 本人確認バー（20）より下、本文より上 */
  z-index: 8;
}
/* 操作のカードだけ下地を透明にしていた。貼り付くと本文が裏を通るので敷き直す */
.detail-main .card--ops > .card-head { background: var(--wa-50); }
/* 貼り付いている間だけ、角を落として影を出す（浮いていることを見せる）。
   印は tokuyo.js が付ける。付かなくても貼り付き自体は効く。 */
.detail-main .card > .card-head.is-stuck {
  border-radius: 0;
  box-shadow: 0 4px 8px -6px rgb(0 0 0 / .30);
}

/* ============================== 別枠で開く入力（ダイアログ） ============================== */

/* 読む画面に入力欄を混ぜると、読んでいる流れのまま押してしまう。
   入力は押したときだけ別枠で開く。開いているあいだは後ろを触れない（modal）。 */
.idbar-ops {
  flex: none; display: inline-flex; align-items: center; gap: 6px;
  min-height: 34px; padding: 0 var(--s-4); cursor: pointer;
  border: 2px solid var(--wa-500); border-radius: var(--r-full);
  background: var(--wa-50); color: var(--wa-700);
  font: inherit; font-size: .88rem; font-weight: 700; white-space: nowrap;
}
.idbar-ops:hover { background: var(--wa-500); color: #FFFFFF; }
.idbar-ops:hover svg.i { color: inherit; }
.idbar-ops svg.i { width: 1.1em; height: 1.1em; }

.btn-ops {
  border-color: var(--wa-500); background: var(--wa-50); color: var(--wa-700); font-weight: 700;
}
.btn-ops:hover { background: var(--wa-500); border-color: var(--wa-500); color: #FFFFFF; }
.btn-ops svg.i { width: 1.15em; height: 1.15em; margin-right: 6px; }

/* ボタンの名前だけでは言い切れないことを置く「？」。
   JavaScript なしで開く（details）ので、動かない環境でも中身は読める。 */
.tip { position: relative; flex: none; }
.tip > summary {
  list-style: none; cursor: pointer;
  width: 30px; height: 30px; display: inline-grid; place-items: center;
  border: var(--bw) solid var(--field-border); border-radius: var(--r-full);
  background: var(--surface); color: var(--text-2);
}
.tip > summary::-webkit-details-marker { display: none; }
.tip > summary::marker { content: ""; }
.tip > summary:hover { background: var(--hover-bg); color: var(--text); }
.tip[open] > summary { background: var(--brand-soft); color: var(--brand-strong); border-color: var(--brand); }
.tip > summary svg.i { width: 1.05em; height: 1.05em; }
.tip-body {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 30;
  width: min(420px, 80vw); padding: var(--s-4); text-align: left; font-weight: 400; font-size: .92rem;
  background: var(--surface); color: var(--text);
  border: var(--bw) solid var(--line); border-radius: var(--r-md); box-shadow: var(--sh-2);
}
.tip-body ul { margin: var(--s-2) 0 0; padding-left: 1.3em; }
.tip-body li { margin-bottom: 2px; }

.dlg {
  width: min(1120px, calc(100vw - var(--s-6) * 2));
  max-height: calc(100dvh - var(--s-6) * 2);
  padding: 0; overflow: hidden;
  border: 2px solid var(--wa-500); border-radius: var(--r-lg);
  background: var(--surface); color: var(--text); box-shadow: var(--sh-3, var(--sh-2));
}
.dlg::backdrop { background: rgb(0 0 0 / .45); }
.dlg-head {
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  padding: var(--s-4) var(--s-5); background: var(--wa-50);
  border-bottom: 2px solid var(--wa-500);
}
.dlg-head h2 { margin: 0; font-size: 1.14rem; }
.dlg-head .spacer { margin-left: auto; }
.dlg-close {
  flex: none; min-width: var(--tap); min-height: var(--tap); cursor: pointer;
  border: var(--bw) solid var(--field-border); border-radius: var(--r-sm);
  background: var(--surface); color: var(--text-2); font: inherit; font-size: 1rem;
}
.dlg-close:hover { background: var(--hover-bg); color: var(--text); }
/* 中身が縦に長いので、枠の中だけをスクロールさせる（後ろの画面は動かさない） */
.dlg-body { padding: var(--s-5); overflow: auto; max-height: calc(100dvh - var(--s-6) * 2 - 72px); }
/* だれの申込を触っているのかを、開いた枠の中でも見せる（取り違え防止） */
.dlg-who {
  font-size: 1.05rem; font-weight: 700; margin-bottom: var(--s-4);
  padding-bottom: var(--s-3); border-bottom: var(--bw) solid var(--line);
  display: flex; align-items: baseline; gap: var(--s-2);
}

.pager { display: flex; gap: var(--s-2); align-items: center; justify-content: center; margin-top: var(--s-5); flex-wrap: wrap; }
.pager a, .pager span {
  min-width: 40px; min-height: 40px; padding: 0 var(--s-3);
  display: inline-grid; place-items: center;
  border: var(--bw) solid var(--field-border); border-radius: var(--r-sm);
  text-decoration: none; font-size: .9rem; background: var(--surface);
}
.pager .current { background: var(--brand-solid); border-color: var(--brand-solid); color: var(--on-brand); font-weight: 700; }
.pager .disabled { opacity: .45; pointer-events: none; }

/* ============================== 2画面比較（紙申込の突き合わせ） ============================== */

.compare { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--s-4); align-items: start; }
@media (max-width: 1100px) { .compare { grid-template-columns: 1fr; } }
.compare-pane {
  background: var(--surface); border: var(--bw) solid var(--line); border-radius: var(--r-md);
  overflow: hidden; position: sticky; top: calc(var(--header-now, var(--header-h)) + var(--s-4));
}
.compare-pane h3 {
  padding: var(--s-3) var(--s-4); background: var(--surface-2);
  border-bottom: var(--bw) solid var(--line); font-size: .92rem;
}
.compare-scan { max-height: 74vh; overflow: auto; background: var(--scan-bg); text-align: center; }
.compare-scan img { width: 100%; }
.compare-form { max-height: 74vh; overflow: auto; padding: var(--s-4); }

.diff { background: var(--wa-50); box-shadow: inset 3px 0 0 var(--wa-500); }
.diff-flag { color: var(--wa-700); font-weight: 700; font-size: .82rem; }

/* ============================== 紙申込の入力（段で少しずつ・YOKOHAMA002-285） ==============================

   原本を見ながら入れる仕事なので、**左に原本・右に入力**を置き、原本は貼り付けて動かさない。
   入力は「段」に分けて1つずつ出す。長い1枚のフォームでは、どこまで入れたかが分からず、
   目と手が上下に何度も往復していた。 */

.entry-work {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: var(--s-4); align-items: start;
}
@media (max-width: 1200px) { .entry-work { grid-template-columns: 1fr; } }

/* ---- 左：原本 ---- */
.entry-scan {
  background: var(--surface); border: var(--bw) solid var(--line); border-radius: var(--r-md);
  overflow: hidden; position: sticky; top: calc(var(--header-now, var(--header-h)) + var(--s-3));
}
.entry-scan-head {
  display: flex; align-items: center; gap: var(--s-2);
  padding: var(--s-2) var(--s-3); background: var(--surface-2);
  border-bottom: var(--bw) solid var(--line); font-size: .9rem;
}
.entry-scan-head .spacer, .entry-scan-tabs .spacer { margin-left: auto; }
.entry-scan-tabs, .entry-scan-tools {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-2);
  padding: var(--s-2) var(--s-3);
}
.entry-scan-tools { border-top: var(--bw) solid var(--line-soft); }
.entry-scan-empty { padding: var(--s-5); }
/* 画面の残りぶんをぜんぶ原本に使う（貼り付いているので、この高さのまま動かない） */
.entry-scan .compare-scan { max-height: calc(100vh - var(--header-h) - 8.5rem); }

/* ---- 右：入力 ---- */
/* overflow は切らない。切ると中の帯（回と現在地・次へ）が**この枠の中**で貼り付き、
   画面の上ではなく枠の上から --header-now ぶん下がった位置で止まってしまう。 */
.entry-form {
  background: var(--surface); border: var(--bw) solid var(--line); border-radius: var(--r-md);
  border-top-width: 3px;
}
/* どちらの回かを枠の色でも示す（1回目＝横浜ブルー／2回目＝確認の色） */
.entry--first .entry-form { border-top-color: var(--brand-solid); }
.entry--second .entry-form { border-top-color: var(--wa-500); }

.entry-form-head {
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  padding: var(--s-2) var(--s-3); background: var(--surface-2);
  border-bottom: var(--bw) solid var(--line);
  border-radius: calc(var(--r-md) - 2px) calc(var(--r-md) - 2px) 0 0;
  position: sticky; top: var(--header-now, var(--header-h)); z-index: 3;
}
.entry-form-head .spacer { margin-left: auto; }
.pass-badge {
  font-weight: 700; font-size: .92rem; padding: 2px var(--s-3); border-radius: 999px;
  border: var(--bw) solid transparent; white-space: nowrap;
}
.pass-badge--first { background: var(--brand-solid); color: var(--on-brand); }
.pass-badge--second { background: var(--wa-50); color: var(--wa-700); border-color: var(--wa-500); }
.wz-pos { font-family: var(--font-num); font-size: .9rem; color: var(--text-3); }
.wz-pos b { font-size: 1.15rem; color: var(--text); }
.wz-here { font-size: .9rem; font-weight: 700; }

/* ---- 段の並び ----
   もとの .steps は画面の上に貼り付く作りだが、ここでは**上の帯（回と現在地）を貼り付ける**。
   両方を貼り付けると重なって、どちらも読めなくなる。 */
.steps--wz {
  position: static; z-index: auto; box-shadow: none; background: none;
  margin: 0; padding: var(--s-3) var(--s-3) 0; gap: var(--s-2);
}
.steps--wz .step-pill { font-size: .82rem; padding: 2px var(--s-2) 2px 2px; cursor: pointer; }
.steps--wz li[data-state=""] > .step-pill { opacity: .75; }

/* ---- 段の中身 ---- */
.wz-step { padding: var(--s-4); }
.wz-step > fieldset { border: 0; margin: 0 0 var(--s-4); padding: 0; }
.wz-step > fieldset:last-of-type { margin-bottom: 0; }
.wz-title { display: flex; align-items: center; gap: var(--s-2); font-size: 1.05rem; margin: 0 0 var(--s-1); }
.wz-no {
  display: inline-grid; place-items: center; width: 1.7em; height: 1.7em; flex: none;
  border-radius: 50%; background: var(--brand-soft); color: var(--brand-strong);
  font-family: var(--font-num); font-weight: 700; font-size: .9em;
}
.wz-lede { color: var(--text-2); font-size: .88rem; margin: 0 0 var(--s-4); }

/* ---- 段の行き来 ---- */
.wz-nav, .wz-own-nav {
  display: flex; align-items: center; gap: var(--s-3); flex-wrap: wrap;
  padding: var(--s-3) var(--s-4); border-top: var(--bw) solid var(--line);
}
.wz-nav { position: sticky; bottom: 0; background: var(--surface-2); }
.wz-nav .spacer { margin-left: auto; }
.wz-own-nav { background: var(--surface-2); margin: var(--s-4) calc(var(--s-4) * -1) calc(var(--s-4) * -1); }

/* 必須が空のまま「次へ」を押したとき。欄そのものに印を付ける（上の帯に出しても遠い） */
.field--miss input, .field--miss select, .field--miss textarea { border-color: var(--dg-500); }
.field--miss > label { color: var(--dg-700); }

/* ---- 施設独自加点（YOKOHAMA002-290）----
   紙申込と同じ「左に材料・右で決める」形。材料は貼り付けて動かさない。 */
.bonus-facts { padding: var(--s-4); overflow: auto; max-height: calc(100vh - var(--header-h) - 9rem); }
.bonus-facts .kv { margin: 0; }
.bonus-form { min-width: 0; }
/* 1項目＝1つの枠。選んだ項目は地の色で分かるようにする
   （チェックの印だけだと、選んだ数が多いときに見落とす） */
.bonus-item {
  border: var(--bw) solid var(--line); border-radius: var(--r-md);
  padding: var(--s-3); background: var(--surface);
}
.bonus-item:has(input[type="checkbox"]:checked) {
  border-color: var(--aq-600); background: var(--aq-50);
}
/* 上限を超えたら、貼り付いた札の色で知らせる（保存すると弾かれる） */
.score-pill--over { background: var(--dg-500) !important; }

/* 回の札（見出しの行の要点に出す） */
.pass {
  font-family: var(--font-num); font-weight: 700; font-size: .9rem;
  padding: 0 .4em; border-radius: 4px; background: var(--surface-2); color: var(--text-2);
  border: var(--bw) solid var(--line);
}
.pass--on { background: var(--brand-solid); color: var(--on-brand); }
.pass--done { background: var(--brand-soft); color: var(--brand-strong); }

/* ============================== タイムライン（人物の経過） ============================== */

.timeline { list-style: none; margin: 0; padding: 0; position: relative; }
.timeline::before {
  content: ""; position: absolute; left: 15px; top: 6px; bottom: 6px;
  width: 2px; background: var(--line);
}
.timeline li { position: relative; padding: 0 0 var(--s-5) 46px; }
.timeline li::before {
  content: ""; position: absolute; left: 8px; top: 5px;
  width: 16px; height: 16px; border-radius: 50%;
  background: var(--surface); border: 3px solid var(--brand-border);
}
.timeline li[data-kind="apply"]::before  { border-color: var(--brand-solid); }
.timeline li[data-kind="consult"]::before{ border-color: var(--aq-500); }
.timeline li[data-kind="approach"]::before{ border-color: var(--wa-500); }
.timeline li[data-kind="facility"]::before{ border-color: var(--ok-500); }
.timeline li[data-kind="close"]::before  { border-color: var(--dg-500); }
.timeline li[data-kind="phone"]::before  { border-color: var(--aq-500); }
.timeline .when { font-size: .8rem; color: var(--text-3); font-family: var(--font-num); }
.timeline .what { font-weight: 600; }
.timeline .detail { font-size: .89rem; color: var(--text-2); }

/* ============================== カレンダー（空き枠） ============================== */

.cal { display: grid; grid-template-columns: repeat(7, minmax(0,1fr)); gap: var(--s-2); }
.cal .dow { text-align: center; font-size: .78rem; font-weight: 700; color: var(--text-3); padding-bottom: var(--s-1); }
.cal .dow.sat { color: var(--brand); }
.cal .dow.sun { color: var(--dg-500); }
.cal-day {
  min-height: 84px; border: var(--bw) solid var(--line); border-radius: var(--r-sm);
  background: var(--surface); padding: var(--s-2); display: flex; flex-direction: column; gap: 4px;
}
.cal-day.empty { background: transparent; border-color: transparent; }
.cal-day .d { font-family: var(--font-num); font-size: .84rem; font-weight: 700; color: var(--text-2); }
.cal-day.today { border-color: var(--brand-solid); box-shadow: inset 0 0 0 1px var(--brand-solid); }
.cal-day a.slot {
  display: block; font-size: .78rem; text-decoration: none;
  background: var(--brand-soft); color: var(--brand-strong);
  border-radius: var(--r-xs); padding: 2px 6px; font-weight: 600;
}
.cal-day a.slot:hover { background: var(--brand-soft-hover); }
.cal-day .none { font-size: .74rem; color: var(--text-3); }

/* 時間枠のボタン群 */
.slot-grid { display: grid; gap: var(--s-2); grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
.slot-btn {
  display: flex; flex-direction: column; gap: 2px; align-items: flex-start;
  min-height: 62px; padding: var(--s-3);
  border: var(--bw) solid var(--field-border); border-radius: var(--r-sm);
  background: var(--surface); text-decoration: none; color: var(--text); cursor: pointer;
}
.slot-btn:hover { border-color: var(--brand-solid); background: var(--brand-soft); text-decoration: none; }
.slot-btn b { font-family: var(--font-num); font-size: 1.02rem; }
.slot-btn small { color: var(--text-3); font-size: .78rem; }
.slot-btn[disabled], .slot-btn.full { opacity: .5; pointer-events: none; background: var(--disabled-bg); }

/* ============================== 画像添付 ============================== */

/* 横に並べたとき、中の行数が違っても枠の高さがそろうようにする（段差にしない） */
.field:has(> .dropzone) { display: flex; flex-direction: column; }
.dropzone {
  border: 2px dashed var(--field-border); border-radius: var(--r-md);
  padding: var(--s-6) var(--s-5); text-align: center; background: var(--surface-2);
  cursor: pointer; transition: border-color .12s, background .12s;
  flex: 1 1 auto; min-height: 132px;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--s-1);
}
.dropzone:hover, .dropzone.over { border-color: var(--brand-solid); background: var(--brand-soft); }
.dropzone .ico { font-size: 2rem; color: var(--text-3); }
.dropzone .ico svg.i { width: 34px; height: 34px; }
.dropzone:hover .ico, .dropzone.over .ico { color: var(--brand); }
.dropzone input[type="file"] { display: none; }
.thumbs { display: flex; gap: var(--s-3); flex-wrap: wrap; margin-top: var(--s-4); }
.thumb {
  width: 132px; border: var(--bw) solid var(--line); border-radius: var(--r-sm);
  overflow: hidden; background: var(--surface); position: relative;
}
.thumb img { display: block; width: 100%; height: 96px; object-fit: cover; }
.thumb .name { font-size: .72rem; padding: 4px 6px; color: var(--text-3); word-break: break-all; }

/* ============================== ログイン ============================== */

.auth-wrap { min-height: 100dvh; display: grid; place-items: center; padding: var(--s-6); background: var(--auth-bg); }
.auth-card { width: 100%; max-width: 448px; }
.auth-card .card-body { padding: var(--s-7); }
.auth-top { display: flex; align-items: flex-start; gap: var(--s-4); margin-bottom: var(--s-6); flex-wrap: wrap; }
.auth-top .prefs { margin-left: auto; }
.auth-logo { display: flex; align-items: center; gap: var(--s-3); }
.auth-logo .brand-mark { background: var(--brand-solid); color: var(--on-brand); border-color: var(--brand-solid-hover); }
.demo-users { font-size: .82rem; }
.demo-users code { background: var(--muted-bg); border-radius: var(--r-xs); padding: 1px 5px; font-size: .95em; }

/* ============================== フッタ ============================== */

.foot {
  border-top: var(--bw) solid var(--line); background: var(--surface);
  padding: var(--s-6) var(--s-5); margin-top: var(--s-9);
}
.foot-in { max-width: 1440px; margin: 0 auto; display: flex; flex-wrap: wrap; gap: var(--s-5); justify-content: space-between; font-size: .84rem; color: var(--text-3); }
.foot b { color: var(--text-2); }

/* ==========================================================================
   業務画面（経営者会・施設・市・ケアマネ）を詰める
   毎日使う画面なので、1画面に必要な情報が収まることを優先する。
   市民向けの画面には効かせない（.app-shell が付いているのは業務レイアウトだけ）。
   ========================================================================== */

.app-shell .card-head { padding: var(--s-3) var(--s-4); }
.app-shell .card-body { padding: var(--s-4); }
.app-shell .card-foot { padding: var(--s-3) var(--s-4); }
.app-shell .head { margin-bottom: var(--s-3); }
.app-shell .head h1 { font-size: 1.5rem; }
.app-shell .head .eyebrow { margin-bottom: var(--s-2); }

/* 見出しは1行。ここは .app-shell .head .eyebrow より強くしておく必要がある
   （そうしないと eyebrow の下余白が残って、ヘルプの丸が下にずれる） */
.app-shell .head .head-title > h1,
.app-shell .head .head-title > .eyebrow { margin: 0; }
/* ヘルプを開いたときだけ、見出しとの間を空ける */
.app-shell .head .lede:not([hidden]) { margin-top: var(--s-3); }

/* ---- ヘッダは1行にまとめる（YOKOHAMA002-278）----
   道筋・区分・見出し・ヘルプ・絞り込みで3行使っていた。
   毎日この画面で一覧を見る人には、そのぶん表が下へ押し出されるほうが困る。
   畳むのは JavaScript（tokuyo.js）。無いときは今までどおり縦に並ぶ。 */
.app-shell .head .head-title > .breadcrumb { margin: 0; }
.app-shell .head .head-title > .breadcrumb ol { margin: 0; }
/* 道筋の末尾（見出しと同じ文字）を落としたので、続きがあることを「›」で示す。
   これが無いと、戻り道の「ダッシュボード」と区分の札が地続きに見える。 */
.app-shell .head .head-title > .breadcrumb ol::after {
  content: "›";
  color: var(--text-3);
}

/* 画面の要点は行の真ん中（YOKOHAMA002-284）。
   左右の余りを均等に取るので、見出しと操作のあいだに収まる。 */
.app-shell .head .head-title > .head-summary { margin: 0 auto; }

/* その画面の操作は行のいちばん右（YOKOHAMA002-281 / 283）。
   CSVで出力・新規作成・電話応対へ など、複数並ぶので行として持たせる。 */
.app-shell .head .head-title > .head-action { margin-left: auto; }
.app-shell .head .head-title > .head-action.head-actions { margin-bottom: 0; }
/* 要点の右の auto がすでに操作を右端へ押しているので、二重に押さない */
.app-shell .head .head-title > .head-summary ~ .head-action { margin-left: 0; }

/* 横幅が足りないときは、操作だけ次の行へ落とす（見出しは1行に保つ） */
@media (max-width: 1100px) {
  .app-shell .head .head-title > .head-action { margin-left: 0; width: 100%; }
  .app-shell .head .head-title > .head-summary { margin: 0; width: 100%; }
}

/* 見出しの上下を詰める。一覧をスクロールせずに見える範囲を広げたい。 */
.app-shell .page { padding-top: var(--s-4); }
.app-shell .breadcrumb { margin-bottom: var(--s-2); }
.app-shell .toolbar { margin-bottom: var(--s-3); }

.app-shell .stat { padding: var(--s-3) var(--s-4); }
.app-shell .stat .value { font-size: 1.55rem; }
.app-shell .stat .note { line-height: 1.5; }

/* 一覧は「表の中だけ」をスクロールさせる。
   見出し行が上に貼り付き、検索条件・操作ボタンも画面に残るので、
   行を追うたびに画面を上下に往復しなくてよい。 */
.app-shell .table-wrap { max-height: var(--tbl-max, calc(100vh - 270px)); overflow: auto; }
.app-shell .table-wrap--sm { --tbl-max: 320px; }
.app-shell .table-wrap--tall { --tbl-max: calc(100vh - 160px); }

.app-shell table.tbl { font-size: .88rem; }
.app-shell table.tbl th, .app-shell table.tbl td { padding: var(--s-2) var(--s-3); }
.app-shell table.tbl caption { padding: var(--s-2) var(--s-3); }
.app-shell .th-sort { min-height: 32px; padding: var(--s-2) var(--s-3); }

.app-shell .sidenav { padding: var(--s-2); }
.app-shell .sidenav h3 { padding: var(--s-3) var(--s-2) var(--s-1); }
.app-shell .sidenav a { min-height: 34px; }
.app-shell .topbar-nav a, .app-shell .topbar-nav button { min-height: 32px; }
.app-shell .toolbar { margin-bottom: var(--s-3); }
.app-shell textarea { min-height: 84px; line-height: 1.6; }
.app-shell .field { margin-bottom: var(--s-4); }

/* 入力のかたまり（fieldset）を「箱」にして、意味のまとまりごとに切り分ける。
   1枚のカードに全部が縦一列に並ぶと、どこまでが一組なのか分からず読み疲れるため。 */
.app-shell fieldset {
  border: var(--bw) solid var(--line);
  border-radius: var(--r-md);
  background: var(--surface-2);
  padding: var(--s-4);
  margin: 0 0 var(--s-4);
}
.app-shell fieldset > legend {
  font-size: .88rem; margin: 0 0 var(--s-3) calc(var(--s-2) * -1);
  padding: 3px var(--s-3);
  background: var(--brand-soft); color: var(--brand-strong);
  border-radius: var(--r-full);
}
.app-shell fieldset > :last-child { margin-bottom: 0; }
.app-shell fieldset fieldset { background: var(--surface); }
/* 箱の中の入力欄は白のままにして、面と入力欄を見分けやすくする */
.app-shell fieldset input,
.app-shell fieldset select,
.app-shell fieldset textarea { background: var(--surface); }

/* ============================== 入力欄の幅 ============================== */
/* 入る桁数より極端に長い入力欄は、狙いを定めにくく、入力済みかどうかも見えにくい。
   「入れる桁数＋5文字ぶん」を目安に上限を付ける。
   ch は半角1文字ぶんなので、全角で入れる欄（氏名など）は2倍で数えて指定する。 */
.app-shell .field > input,
.app-shell .field > select { max-width: 34ch; }
/* 日付は「yyyy/mm/dd」＋カレンダーのボタンが入る幅。
   桁数どおりに詰めると、最後の dd がボタンに隠れてしまう。 */
.app-shell .field > input[type="date"] { max-width: 22ch; }
.app-shell .field > input[type="number"] { max-width: 14ch; }
.app-shell .field > input[type="tel"] { max-width: 18ch; }
.app-shell .field > input[type="email"] { max-width: 34ch; }
/* 検索条件は列幅そのものが上限なので、桁数の上限は外す */
.app-shell .filters .field > input,
.app-shell .filters .field > select { max-width: none; }

.w-ch-6  { max-width: 11ch !important; }
.w-ch-8  { max-width: 13ch !important; }
.w-ch-10 { max-width: 15ch !important; }
.w-ch-12 { max-width: 17ch !important; }
.w-ch-16 { max-width: 21ch !important; }
.w-ch-20 { max-width: 25ch !important; }
.w-ch-24 { max-width: 29ch !important; }
.w-ch-30 { max-width: 35ch !important; }
.w-ch-40 { max-width: 45ch !important; }
.w-full  { max-width: none !important; }

/* ============================== 入力欄の並べ方（業務画面） ============================== */
/* 横に並べた欄を等分に伸ばすと、6桁の欄も住所と同じ幅を取る。
   行の右側が空くばかりで、隣の欄まで目線が長く動く。
   伸ばさずに「入る桁数ぶん」の幅で左から詰め、余った幅は行の右に残す。 */
.app-shell .field-row { gap: var(--s-3) var(--s-4); }
/* 欄の幅は「入る桁数」と「ラベルが1行で収まる幅」の広いほうにする（min-width: max-content）。
   ラベルが折り返すと欄ごとに高さが変わり、入力枠の位置が階段状にずれるため。 */
.app-shell .field-row > .field {
  flex-grow: 0; flex-shrink: 1; flex-basis: var(--fw, 26ch);
  min-width: max-content; max-width: 100%;
}
.app-shell .field-row > .field > label,
.app-shell .field-row > .field > .field-label { flex-wrap: nowrap; white-space: nowrap; }
/* ラベルが必ず1行なら、高さをそろえるための下駄はいらない */
.app-shell .field-row { --label-h: 1.35rem; }
/* 注記とエラー文は欄の幅を決めない（文が長いだけで欄が広がると、桁数に合わせた意味がなくなる）。
   幅0＋最小幅100% にすると、幅の計算には数えられず、表示は欄いっぱいになる。 */
.app-shell .field-row > .field > .hint,
.app-shell .field-row > .field > .field-validation-error { width: 0; min-width: 100%; }
/* 選ぶ欄は「いちばん長い項目名が入る幅」。項目名が切れると何を選ぶのか分からなくなるため。 */
.app-shell .field-row > .field:has(> select) { --fw: max-content; }
/* 項目名の幅ぴったりに縮むと、右の三角と文字がくっついて読みにくい。
   三角のぶんの余白を少し広くとる。 */
.app-shell .field-row > .field > select { max-width: 46ch; padding-right: var(--s-9); }
/* 型で決まる欄 */
.app-shell .field-row > .field:has(> input[type="date"])   { --fw: 22ch; }
.app-shell .field-row > .field:has(> input[type="tel"])    { --fw: 18ch; }
.app-shell .field-row > .field:has(> input[type="number"]) { --fw: 14ch; }
.app-shell .field-row > .field:has(> input[type="email"])  { --fw: 34ch; }
/* 文章・選択肢のかたまりは行いっぱいに使う。
   中の文が長いので、min-width: max-content は解除しておく（1行ぶんの幅になってしまうため）。 */
.app-shell .field-row > .field:has(> textarea),
.app-shell .field-row > .field:has(> .chips),
.app-shell .field-row > .field:has(> .choices),
.app-shell .field-row > .field:has(> .w-full) { --fw: 100%; flex-grow: 1; min-width: 0; }
/* チェックの面は文が入るので広めに取る */
.app-shell .field-row > .field:has(> .choice) { --fw: 46ch; min-width: 0; }
/* 桁数を指定した欄は、その幅にそろえる */
.app-shell .field-row > .field:has(> .w-xs) { --fw: 110px; }
.app-shell .field-row > .field:has(> .w-sm) { --fw: 180px; }
.app-shell .field-row > .field:has(> .w-md) { --fw: 280px; }
.app-shell .field-row > .field:has(> .w-lg) { --fw: 420px; }
.app-shell .field-row > .field:has(> .w-ch-6)  { --fw: 11ch; }
.app-shell .field-row > .field:has(> .w-ch-8)  { --fw: 13ch; }
.app-shell .field-row > .field:has(> .w-ch-10) { --fw: 15ch; }
.app-shell .field-row > .field:has(> .w-ch-12) { --fw: 17ch; }
.app-shell .field-row > .field:has(> .w-ch-16) { --fw: 21ch; }
.app-shell .field-row > .field:has(> .w-ch-20) { --fw: 25ch; }
.app-shell .field-row > .field:has(> .w-ch-24) { --fw: 29ch; }
.app-shell .field-row > .field:has(> .w-ch-30) { --fw: 35ch; }
.app-shell .field-row > .field:has(> .w-ch-40) { --fw: 45ch; }
/* 逃げ道：行の残りを埋めたい欄と、そこで行を分けたいとき */
.app-shell .field-row > .field--grow { flex-grow: 1; }
.app-shell .field-row > .row-break { flex: 1 0 100%; height: 0; margin: 0; }
/* 画面が狭いときは1欄ずつ縦に並べる。
   ラベルを1行に保つと画面より広い欄ができてしまうので、ここだけは折り返しを許す。 */
@media (max-width: 700px) {
  .app-shell .field-row > .field { flex-basis: 100%; min-width: 0; }
  .app-shell .field-row > .field > label,
  .app-shell .field-row > .field > .field-label { flex-wrap: wrap; white-space: normal; }
}

/* ============================== 開閉パネル ============================== */
/* 検索条件など「いつも開いていなくてよい」かたまり。閉じておくと一覧が上に来る。 */
.panel > summary {
  list-style: none; cursor: pointer;
  border-bottom: var(--bw) solid var(--line-soft);
}
.panel > summary::-webkit-details-marker { display: none; }
.panel > summary::marker { content: ""; }
.panel:not([open]) > summary { border-bottom: 0; }
.panel > summary:hover { background: var(--hover-bg); }
.panel > summary .panel-mark {
  flex: none; width: 1.5em; height: 1.5em; display: inline-flex;
  align-items: center; justify-content: center; color: var(--text-3);
  transition: transform .12s ease;
}
.panel[open] > summary .panel-mark { transform: rotate(90deg); }
.panel > summary .panel-note { font-size: .82rem; color: var(--text-3); font-weight: 400; }
.panel > summary .badge { font-weight: 600; }

/* ============================== 左メニューの開閉 ============================== */
/* data-nav="mini" のときはアイコンだけの細い列にする（表示設定と同じ仕組みで保存） */
.nav-toggle {
  display: flex; align-items: center; gap: var(--s-2); width: 100%;
  min-height: 32px; padding: 0 var(--s-2); margin-bottom: var(--s-1);
  background: none; border: 0; border-radius: var(--r-sm);
  color: var(--text-3); font: inherit; font-size: .8rem; cursor: pointer;
}
.nav-toggle:hover { background: var(--hover-bg); color: var(--text); }
.nav-toggle svg.i { width: 1.1em; height: 1.1em; }

:root[data-nav="mini"] .app-shell .layout { grid-template-columns: 56px minmax(0,1fr); }
:root[data-nav="mini"] .sidenav a,
:root[data-nav="mini"] .sidenav .nav-btn { justify-content: center; padding: 0; }
:root[data-nav="mini"] .nav-toggle { justify-content: center; padding: 0; }
/* display:none にすると読み上げからも消えてリンクの名前が無くなるので、見た目だけ隠す */
:root[data-nav="mini"] .sidenav h3,
:root[data-nav="mini"] .sidenav .nav-label,
:root[data-nav="mini"] .nav-toggle .nav-label {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
:root[data-nav="mini"] .sidenav h3 { display: block; }
:root[data-nav="mini"] .sidenav a[aria-current="page"] { box-shadow: inset 2px 0 0 var(--brand); }
/* 画面が狭いときは1列（左メニューは上に回り込む）なので、細くする意味がない */
@media (max-width: 1080px) {
  :root[data-nav="mini"] .app-shell .layout { grid-template-columns: 1fr; }
  :root[data-nav="mini"] .sidenav h3,
  :root[data-nav="mini"] .sidenav .nav-label,
  :root[data-nav="mini"] .nav-toggle .nav-label {
    position: static; width: auto; height: auto; margin: 0; clip: auto; overflow: visible;
  }
  :root[data-nav="mini"] .sidenav a,
  :root[data-nav="mini"] .sidenav .nav-btn { justify-content: flex-start; padding: 0 var(--s-3); }
}

/* ============================== グラフ ============================== */
/* 外部のグラフ部品は読み込まない（CSP）。棒の長さは CSS の幅・高さで表す。
   色や長さだけに頼らず、数字も必ず文字で出す（読み上げ・白黒印刷・色覚のため）。 */

/* --- 横棒：内訳（要介護度別・区別・施設別） --- */
.bars { display: grid; gap: var(--s-2); }
.bar {
  display: grid; grid-template-columns: minmax(5em, max-content) minmax(0, 1fr) max-content;
  gap: var(--s-3); align-items: center;
}
.bar-label { font-size: .84rem; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bar-track { height: 13px; background: var(--track); border-radius: var(--r-full); overflow: hidden; }
.bar-track > i { display: block; height: 100%; background: var(--brand-solid); border-radius: inherit; min-width: 2px; }
.bar-value {
  font-size: .84rem; font-weight: 700; font-family: var(--font-num);
  font-variant-numeric: tabular-nums; color: var(--text);
}
.bar-value small { font-weight: 400; color: var(--text-3); margin-left: 2px; }
.bar--accent .bar-track > i { background: var(--accent-solid); }
.bar--warn .bar-track > i { background: var(--wa-500); }
a.bar { text-decoration: none; }
a.bar:hover .bar-label { color: var(--brand); text-decoration: underline; }

/* --- 縦棒：月ごとの推移。1か月に2本まで並べる --- */
.cols { display: flex; align-items: stretch; gap: var(--s-2); }
.col { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; gap: var(--s-1); }
.col-bars {
  height: 148px; display: flex; align-items: flex-end; justify-content: center; gap: 3px;
  border-bottom: var(--bw) solid var(--line);
}
.col-bar {
  width: 44%; min-height: 2px; border-radius: 3px 3px 0 0;
  background: var(--brand-solid);
}
.col-bar--b { background: var(--accent-solid); }
.col-label { text-align: center; font-size: .72rem; color: var(--text-3); white-space: nowrap; }
.col--now .col-label { color: var(--brand-strong); font-weight: 700; }

/* --- 凡例 --- */
.legend { display: flex; flex-wrap: wrap; gap: var(--s-4); font-size: .8rem; color: var(--text-2); }
.legend span { display: inline-flex; align-items: center; gap: var(--s-2); }
.legend i { width: 12px; height: 12px; border-radius: 3px; background: var(--brand-solid); flex: none; }
.legend i.b { background: var(--accent-solid); }

/* --- 前月比などの増減 --- */
.delta { font-size: .78rem; font-weight: 700; }
.delta--up { color: var(--wa-700); }
.delta--down { color: var(--ok-700); }
.delta--flat { color: var(--text-3); }

/* ============================== 画面の挙動の切り替え ============================== */
/* `Ui:StickyTableHeader` / `Ui:StickySteps`（環境変数でも指定できる）。
   既定は「貼り付ける」。off のときだけ属性が出る → Infrastructure/UiOptions.cs */
[data-ui-sticky-table="off"] .app-shell .table-wrap { max-height: none; overflow: visible; overflow-x: auto; }
[data-ui-sticky-table="off"] table.tbl thead tr:only-child th { position: static; box-shadow: none; }
[data-ui-sticky-steps="off"] .steps { position: static; box-shadow: none; padding: 0; margin-top: 0; }

/* ============================== ユーティリティ ============================== */

.stack   { display: flex; flex-direction: column; gap: var(--s-4); }
.stack-2 { display: flex; flex-direction: column; gap: var(--s-2); }
.row     { display: flex; gap: var(--s-3); align-items: center; flex-wrap: wrap; }
.row > .spacer { margin-left: auto; }
.between { display: flex; gap: var(--s-3); align-items: center; justify-content: space-between; flex-wrap: wrap; }
.mt-0{margin-top:0}.mt-2{margin-top:var(--s-2)}.mt-3{margin-top:var(--s-3)}.mt-4{margin-top:var(--s-4)}
.mt-5{margin-top:var(--s-5)}.mt-6{margin-top:var(--s-6)}.mt-7{margin-top:var(--s-7)}
.mb-0{margin-bottom:0}.mb-2{margin-bottom:var(--s-2)}.mb-3{margin-bottom:var(--s-3)}.mb-4{margin-bottom:var(--s-4)}
.mb-5{margin-bottom:var(--s-5)}.mb-6{margin-bottom:var(--s-6)}
.t-sm{font-size:.86rem}.t-xs{font-size:.78rem}.t-lg{font-size:1.06rem}
.t-muted{color:var(--text-3)}.t-2{color:var(--text-2)}
.t-ok{color:var(--ok-700)}.t-wa{color:var(--wa-700)}.t-dg{color:var(--dg-700)}
.t-bold{font-weight:700}.t-right{text-align:right}.t-center{text-align:center}
.nowrap{white-space:nowrap}
.hide{display:none}
.mask { letter-spacing: .12em; }

details.acc { border: var(--bw) solid var(--line); border-radius: var(--r-md); background: var(--surface); margin-bottom: var(--s-4); }
/* 見出しには下地を敷いて、どこからどこまでが1つのまとまりか分かるようにする。
   40〜50代が主な使い手なので、区切りは色の濃淡だけでなく罫線でも出す。 */
details.acc > summary {
  cursor: pointer; padding: var(--s-4) var(--s-5); font-weight: 700; font-size: 1.02rem;
  list-style: none; display: flex; align-items: center; gap: var(--s-3); min-height: var(--tap);
  background: var(--surface-2); border-radius: var(--r-md) var(--r-md) 0 0;
}
details.acc:not([open]) > summary { border-radius: var(--r-md); }
details.acc[open] > summary { border-bottom: var(--bw) solid var(--line); }
details.acc > summary::-webkit-details-marker { display: none; }
details.acc > summary::after { content: "＋"; margin-left: auto; color: var(--text-3); font-weight: 700; }
details.acc[open] > summary::after { content: "−"; }
details.acc > .acc-body { padding: var(--s-5); }

/* A面・B面の中のまとまりは、その面のヘッダより一段薄い同系色にする。
   同じ灰色だと、横に並べた2枚のどちらを見ているか分からなくなる。
   color-mix が使えないブラウザは上の var(--surface-2) のまま。 */
.card--a details.acc > summary { background: color-mix(in srgb, var(--brand-soft) 60%, var(--surface)); }
.card--b details.acc > summary { background: color-mix(in srgb, var(--aq-50) 60%, var(--surface)); }

/* 中身が「読むもの」ではなく「入力するもの」のたたみ。
   ほかは既定で開いているのに、ここだけ閉じている理由が見た目で分かるようにする
   （開くと長い入力欄が出るので、押すまで閉じておきたい）。 */
details.acc--form { border-color: var(--accent-solid); border-left-width: 4px; background: var(--aq-50); }
details.acc--form > summary { color: var(--accent-strong); background: var(--aq-50); border-bottom-color: var(--accent-solid); }
details.acc--form > summary::after { content: "入力する ＋"; font-size: .82rem; }
details.acc--form[open] > summary::after { content: "閉じる −"; font-size: .82rem; }
details.acc--form > .acc-body { background: var(--surface); border-radius: 0 0 var(--r-md) var(--r-md); padding-top: var(--s-4); }

/* ============================== 色覚サポートの上乗せ ==============================
   色を変えるだけでは足りないので、意味のある色には形も添える。 */

/* モノクロームは色がまったく意味を持たないので、色覚サポートと同じ形の添えを使う */
:root[data-theme="cvd"] .badge--ok::before,
:root[data-theme="mono"] .badge--ok::before { content: "✓"; font-weight: 700; }
:root[data-theme="cvd"] .badge--wa::before,
:root[data-theme="mono"] .badge--wa::before { content: "▲"; font-size: .82em; }
:root[data-theme="cvd"] .badge--dg::before,
:root[data-theme="mono"] .badge--dg::before { content: "✕"; font-weight: 700; }
:root[data-theme="cvd"] .badge--in::before,
:root[data-theme="mono"] .badge--in::before { content: "●"; font-size: .7em; }

:root[data-theme="cvd"] .timeline li[data-kind="consult"]::before,
:root[data-theme="mono"] .timeline li[data-kind="consult"]::before  { border-style: dashed; }
:root[data-theme="cvd"] .timeline li[data-kind="approach"]::before,
:root[data-theme="mono"] .timeline li[data-kind="approach"]::before { border-style: dotted; }
:root[data-theme="cvd"] .timeline li[data-kind="close"]::before,
:root[data-theme="mono"] .timeline li[data-kind="close"]::before    { border-style: double; border-width: 5px; }

/* 差異のしるし（紙申込の突き合わせ）は縞で強める */
:root[data-theme="cvd"] .diff {
  background: repeating-linear-gradient(135deg, var(--wa-50) 0 10px, #FFEFC4 10px 20px);
}
:root[data-theme="mono"] .diff {
  background: repeating-linear-gradient(135deg, #FFFFFF 0 8px, #D4D4D4 8px 16px);
}

/* ============================== モノクロームの上乗せ ============================== */

/* 色で「押せる」を示せないので、枠と形で示す。
   A面・B面の色分けも効かないため、左端の帯を太さと線種で分ける。 */
:root[data-theme="mono"] .btn,
:root[data-theme="mono"] .badge,
:root[data-theme="mono"] .score-pill { border-width: 2px; }
:root[data-theme="mono"] .btn:not(.btn-ghost) { border-color: var(--text); }
:root[data-theme="mono"] .card--a { border-left-style: solid; border-left-width: 6px; }
:root[data-theme="mono"] .card--b { border-left-style: double; border-left-width: 8px; }
:root[data-theme="mono"] .ops-mark::before { content: "▲"; font-size: .82em; margin-right: .3em; }
/* 蛍光ペンは色では出ないので、下線も添える */
:root[data-theme="mono"] .hl { text-decoration: underline; text-underline-offset: 2px; }

/* ============================== ハイコントラストの上乗せ ============================== */

:root[data-theme="contrast"] .btn,
:root[data-theme="contrast"] .badge,
:root[data-theme="contrast"] .score-pill { border-width: 2px; border-color: currentColor; }
:root[data-theme="contrast"] .btn-primary,
:root[data-theme="contrast"] .btn-accent,
:root[data-theme="contrast"] .btn-danger,
:root[data-theme="contrast"] .badge--solid,
:root[data-theme="contrast"] .score-pill { border-color: var(--text); }
:root[data-theme="contrast"] a { text-decoration-thickness: 2px; }
:root[data-theme="contrast"] .entry:hover,
:root[data-theme="contrast"] .card { box-shadow: none; }
:root[data-theme="contrast"] .steps li[data-state="done"] .n { color: #000; }

/* ================================================================
   電話応対（YOKOHAMA002-274）

   受話器を持ったまま片手で操作する画面。作りの前提が他の画面と違う。

   ■ 入れ子のスクロールを作らない
   はじめは右側を貼り付けて内側でスクロールさせたが、**枠の中に
   スクロール条が2本立つ**形になり、どこを送っているのか分からなくなった。
   いまは「聞き取り欄だけを上に貼り付け、送るのはページ1か所」にしてある。

   ■ 聞き取り欄は最初から全部出す
   電話では聞ける内容がその場で決まる。何を聞けばよいかが並んでいるほうが早い。
   入れた欄だけが効き、すべて満たすものに絞られる（AND）。順番は問わない。
   ================================================================ */

/* ---- 上に貼り付く聞き取り欄 ---- */
.phone-bar {
  position: sticky;
  top: var(--header-now, var(--header-h));
  z-index: 25;
  background: var(--surface);
  border: var(--bw) solid var(--line);
  border-radius: var(--r-lg);
  padding: var(--s-3) var(--s-4);
  margin-bottom: var(--s-4);
  box-shadow: 0 2px 8px rgba(0, 0, 0, .06);
}
.phone-bar-head { display: flex; align-items: baseline; flex-wrap: wrap; gap: var(--s-3); margin-bottom: var(--s-3); }
.phone-bar-head h1 { font-size: 1.3rem; margin: 0; }
/* 「応対の記録へ」の戻り道（YOKOHAMA002-283）。見出しの行の右端にボタンで置く。
   小さな文字のリンクでは戻り道として気づかれなかった。行は増やさない。 */
.phone-bar-head .btn-back { margin-left: auto; align-self: center; flex: none; }
.phone-bar-head .btn-back svg.i { width: 1em; height: 1em; }

/* 欄はグリッドで並べる。flex だと最後の欄が折り返さずに画面から溢れた
   （入力欄には既定の最小幅があり、縮みきらない）。auto-fit なら必ず収まる。 */
.phone-fields {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: var(--s-3);
  align-items: end;
}
.pf { min-width: 0; }

/* ボタンは欄と別の行に置く。同じ行に混ぜると、欄の幅が足りないときに
   ボタンだけ弾き出されたり、最後の欄とくっついて1つの部品に見えたりする。 */
.phone-actions { display: flex; gap: var(--s-3); margin-top: var(--s-3); }

/* 受話器を持ったまま打つので、欄はボタンと同じ高さ・同じ大きさの文字にする。
   小さいと狙いにくく、読み返しにくい。 */
.pf label {
  display: block; font-size: .9rem; font-weight: 600;
  color: var(--text-2); margin-bottom: var(--s-1); white-space: nowrap;
}
.phone-bar input[type="text"], .phone-bar input:not([type]) {
  min-height: 56px;
  font-size: 1.05rem;
  padding: 0 var(--s-3);
}

/* ---- 3枚のパネル：候補 ／ 確認 ／ 記録 ----
   1枚あたりが短くなるので、**縦に送らずに3つとも見える**。
   右に2枚を縦積みにすると、記録がどうしても画面の外へ出た。 */
.phone-body {
  display: grid;
  gap: var(--s-4);
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr) minmax(0, 1fr);
  align-items: start;
}
/* 3枚を横に置けない幅では、候補を上に、確認と記録を下に2枚 */
@media (max-width: 1700px) {
  .phone-body { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .phone-body > :first-child { grid-column: 1 / -1; }
}
@media (max-width: 1100px) {
  .phone-body { grid-template-columns: minmax(0, 1fr); }
  .phone-body > :first-child { grid-column: auto; }
  .phone-bar { position: static; }
}

/* ---- 1920×1080 の実機で「縦に送らずに3枚とも見える」ようにする ----
   画面が 1080 でも、タスクバーとブラウザの枠を引くと中は 945 前後しかない。
   さらに文字サイズを上げると聞き取り欄の帯が伸びる。何もしないと
   「記録する」ボタンが折り返し線の下へ出た（特大で 14px はみ出していた）。

   候補の表は、アプリ共通の calc(100vh - 270px) では長すぎる。
   ここは帯（見出し＋聞き取り欄）の下に置くので、その実寸を引く。
   --phonebar-now は tokuyo.js が書き込む（帯は文字サイズで伸び縮みする）。 */
.phone-body .table-wrap {
  --tbl-max: calc(100vh - var(--header-now, var(--header-h)) - var(--phonebar-now, 200px) - 160px);
}

/* メモは行数ではなく高さで決める。rows="5" のままだと、文字を大きくしたとき
   1行あたりが伸びた分だけ「記録する」ボタンが下へ押し出される。
   （rows は JavaScript も CSS も無いときの控えとして残す）
   vh 側の上限は「メモが画面の 1/8 以上を占めない」ため。画面が低いときは
   こちらが効いてボタンが画面内に残り、高いときは rem 側の広いメモになる。 */
.phone-body #memo { height: min(8.5rem, 14vh); }
[data-font="l"]  .phone-body #memo { height: min(7.5rem, 13vh); }
[data-font="xl"] .phone-body #memo { height: min(6.5rem, 12vh); }

/* ---- 確認しながらチェックする表 ---- */
.chk-tbl { width: 100%; }
.chk-tbl th {
  text-align: left; white-space: nowrap; width: 1%;
  color: var(--text-2); font-weight: 600; background: var(--surface-2);
}
.chk-tbl td, .chk-tbl th { padding: var(--s-2) var(--s-3); }
.chk-tbl .chk-c { width: 1%; padding-right: 0; }

/* 値は必ず左そろえ。表の既定では数字が右へ寄るが、ここは
   「お客さまの言った内容と1項目ずつ見比べる」表なので、
   左端がそろっていないと目が上下に動かせない。 */
table.chk-tbl td, table.chk-tbl td.num { text-align: left; }

/* 受話器を持ったまま押すので、狙いが甘くても入る大きさにする */
.chk-tbl .chk { display: block; padding: var(--s-2); cursor: pointer; }
.chk-tbl .chk input { width: 1.35rem; height: 1.35rem; cursor: pointer; }
.chk-tbl tr:has(.chk input:checked) { background: var(--ok-50); }

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: .01ms !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
}

/* 紙にしたときだけ出す枠（YOKOHAMA002-287）。
   「誰の・いつの控えか」を紙の先頭に出す。画面には出さない（画面には見出しがある）。 */
.print-only { display: none; }
