/* =========================================================
   ちのわ — アプリ共通スタイル（Teal Trust パレット / 純CSS）

   ★2026-09-09：茂治のUXフィードバック「全体的に詰まってる。もっと余白を」「文字が小さい。
     年配の方が操作する可能性も考慮してほしい（実際に俺は48歳だが小さくて見にくい）」を反映。
     ★原則（茂治に確認済み）
       ① ★選ぶもの・押すものを、いちばん大きくする
       ② 🚨 ★何も小さくしない。★差は「大きくする」だけで付ける
          ★「説明を小さくして差を付ける」は、★上の指摘に逆行する
       ③ ★余白で「まとまり」を作る　④ ★押せる面積を広げる
     ★変えた値
       ★font-size:13.5px → 14.5px（★24箇所。★これが「全体的に小さい」の実体だった）
       ★.btn 15→16px / padding 9,16 → 12,20　★.btn-lg 16→18px / 13,24 → 16,32
       ★.btn-sm 14→15px / 6,12 → 9,14（★小さいボタンも下げない）
       ★.field input 15→16px / padding 10,12 → 13,14　★.field label 14→15px
       ★.table td padding 12→15px / th 11→13px　★.checklist li padding 10→14px
     ⚠️ ★値はまだ暫定（茂治「過剰なら再びFBする」）。★検査に下限として書かないこと。
        ★「これでいい」が出てから書く。

   🚨 ★このファイルが原本です（2026-09-08〜）。
      ★ここを直してください。★他所からコピーされて上書きされることはありません。

   ★経緯：もとは mockup/assets/styles.css が原本で、
     app/scripts/sync-assets.ts が build と start:local のたびに
     mockup/assets/ → app/public/assets/ を丸ごとコピーしていました。
     ★mockup/ の運用が終了した（2026-09-08・茂治判断。LP系5枚を除く）ので、
     ★同期を撤去し、原本をこちらへ移しています。

   ⚠️ ★sync-assets.ts を復活させないこと。
      ★復活させると、ここへの編集が★次の build で静かに巻き戻ります
      （mockup/ はもう更新されないので、2026-09-08 の状態に固定される）。
      ★エラーは出ません。「直したはずなのに反映されない」だけが起きます。

   ⚠️ 🚨 ★同名の `site/assets/styles.css` は★死んでいません（2026-09-08 訂正。
      ★2026-10-16 に `mockup/assets/` から★移った）。
      ★`diagnosis.html`（LPの「3分でわかる無料診断」の飛び先・公開ページ）が読んでいます。
      ★同期は撤去したので★連動しません。★両方とも原本で、★別々に育ちます。
      ★診断の見た目を直すときは、★あちらを直してください。★こちらではありません。

   ⚠️ ★app/public/assets/ を .gitignore に戻さないこと。
      ★同期が無くなったので、ignore すると clone した人の手元に実体が来ません。
      ★build は通り、エラーも出ず、★CSS もロゴも無い画面が表示されます。

   ★このディレクトリの中身と、その使われ方：
      styles.css        … このファイル。アプリ全画面
      logo-reverse.svg  … ★LPとも共有（site/assets/ にも同じ実体がある）
      favicon.svg       … ★LPとも共有（同上）
      logo.svg          … アプリ側のみ（この CSS の url() から4箇所）
      logo-brand.svg    … アプリ側のみ（この CSS の url() から1箇所）
      ★共有2ファイルの一致は app/tests/shared-assets.test.ts が見ています。
   ========================================================= */

:root{
  --ink:#07332E;      /* 濃ティール（ダーク面・見出し） */
  --ink2:#0C4A42;     /* 少し明るいダーク */
  --teal:#028090;     /* primary */
  --sea:#00A896;      /* seafoam */
  --mint:#02C39A;     /* accent */
  --tint:#E7F3F1;     /* 薄ティール（カード面） */
  --tint2:#D3E9E6;
  --sand:#F4F8F7;     /* 背景 */
  --line:#CBDEDB;     /* 罫線 */
  --grey:#5A6B6B;     /* 本文グレー */
  --grey2:#859897;    /* 淡いグレー */
  --white:#ffffff;
  --warn:#C0622F;     /* 警告（廃棄期限） */
  --warnbg:#FBEEE8;
  --ok:#00A896;
  --danger:#C0392B;
  --shadow:0 1px 3px rgba(7,51,46,.08),0 4px 16px rgba(7,51,46,.06);
  --radius:12px;
  --sidebar-w:250px;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:system-ui,-apple-system,"Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,sans-serif;
  color:var(--ink);
  background:var(--sand);
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
  font-size:16px;
}
a{color:var(--teal);text-decoration:none;}
a:hover{text-decoration:underline;}
h1,h2,h3,h4{margin:0;font-weight:700;}
p{margin:0;}
small{font-size:14.5px;}

/* ============ アプリシェル（サイドバー＋本体） ============ */
.app{display:flex;min-height:100vh;}
.sidebar{
  width:var(--sidebar-w);flex-shrink:0;background:var(--ink);color:#cfe6e2;
  display:flex;flex-direction:column;position:sticky;top:0;height:100vh;
}
.sidebar .brand{
  padding:20px 20px 16px;font-weight:700;color:#fff;font-size:16px;
  border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;gap:8px;
}
.sidebar .brand .logo{
  width:26px;height:26px;border-radius:7px;background:var(--mint);color:var(--ink);
  display:grid;place-items:center;font-weight:800;font-size:15px;
}
.sidebar .org{padding:14px 20px;font-size:14.5px;color:#9fc9c3;border-bottom:1px solid rgba(255,255,255,.08);}
.sidebar .org b{color:#fff;display:block;font-size:14px;}
.nav{padding:12px 12px;flex:1;overflow:auto;}
.nav .sec{font-size:14.5px;color:#7ba69f;padding:12px 10px 6px;letter-spacing:.04em;}
.nav a{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;
  color:#bcdcd6;font-size:15px;margin-bottom:2px;
}
.nav a:hover{background:rgba(255,255,255,.06);text-decoration:none;color:#fff;}
.nav a.active{background:var(--teal);color:#fff;font-weight:600;}
.nav a .ic{width:18px;text-align:center;opacity:.9;}
.sidebar .foot{padding:14px 20px;font-size:14.5px;color:#6f948e;border-top:1px solid rgba(255,255,255,.08);}

.content{flex:1;min-width:0;display:flex;flex-direction:column;}
.topbar{
  height:60px;background:var(--white);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 28px;position:sticky;top:0;z-index:5;
}
.topbar .crumb{font-size:14px;color:var(--grey);}
.topbar .crumb b{color:var(--ink);}
.topbar .tools{display:flex;align-items:center;gap:14px;}
.icon-btn{width:36px;height:36px;border-radius:9px;border:1px solid var(--line);background:#fff;display:grid;place-items:center;cursor:pointer;position:relative;}
.icon-btn .dot{position:absolute;top:7px;right:8px;width:7px;height:7px;border-radius:50%;background:var(--warn);}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--sea);color:#fff;display:grid;place-items:center;font-weight:700;font-size:14px;}
.main{padding:26px 28px;max-width:1180px;width:100%;}

/* ============ ページ見出し ============ */
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap;}
.page-head h1{font-size:24px;}
.page-head .sub{color:var(--grey);font-size:15px;margin-top:4px;}

/* ============ カード ============ */
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);}
.card.pad{padding:20px;}
.card-h{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;}
.card-h h3{font-size:16px;}
.card-b{padding:20px;}
.grid{display:grid;gap:16px;}
.g2{grid-template-columns:repeat(2,1fr);}
.g3{grid-template-columns:repeat(3,1fr);}
.g4{grid-template-columns:repeat(4,1fr);}
.g-2-1{grid-template-columns:2fr 1fr;}
@media(max-width:900px){.g2,.g3,.g4,.g-2-1{grid-template-columns:1fr;}}

/* ============ KPI / stat ============ */
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);}
.kpi .lbl{font-size:14.5px;font-weight:600;color:var(--teal);}
.kpi .num{font-size:34px;font-weight:800;color:var(--ink);line-height:1.1;margin:4px 0 2px;}
.kpi .cap{font-size:14.5px;color:var(--grey);}
.kpi.warn{background:var(--warnbg);border-color:#ecccbd;}
.kpi.warn .lbl{color:var(--warn);}
.kpi.warn .num{color:var(--warn);}

/* ============ ダッシュボード（2026-10-11 クリエイター。茂治の改善案から）============
   ★page.tsx（エンジニア）が使う class。★CSS を先に出して、使う側があとから乗る順番にしてある
     （★逆順だと css-classes.test.ts が「CSSに無い class」で落ちる窓が開く）。

   ★色の決まり（★崩さない）
     赤（--danger）… ★期限超過だけ。罰則がある（こども性暴力防止法38条2項の削除期限）
     橙（--warn）  … 期限間近／期限の無い残り作業（分類未確認の数）
     → ★期限の無いものに赤を使わない。★使うと「どれが本当の緊急か」がまた見えなくなる（茂治の指摘②）

   ★説明は「?」を押すと開く折りたたみ（.fold）に入れる。★マウスオーバーのツールチップは使わない
     （茂治の判断・2026-10-11。★商談のiPadとキーボード操作では出ない）。
   🚨 ★ただし「押す前に読まないと取り返しがつかない文」は折りたたまない。★.todo-row .caution に出す
     （例：期限内に再就職された場合は、先に削除するとこの扱いは使えない）。 */

/* 上段：KPI 4枚＋全体進捗 */
.dash-top{display:grid;gap:16px;grid-template-columns:repeat(4,minmax(0,1fr)) minmax(0,1.6fr);margin-bottom:16px;}
@media(max-width:1180px){.dash-top{grid-template-columns:repeat(2,minmax(0,1fr));}.dash-top .dash-progress{grid-column:1/-1;}}
@media(max-width:560px){.dash-top{grid-template-columns:1fr;}}
.dash-top .kpi{position:relative;display:block;}
.kpi .chev{position:absolute;right:14px;bottom:14px;width:32px;height:32px;border:1px solid var(--line);border-radius:8px;display:grid;place-items:center;color:var(--grey);font-size:16px;}
/* ★.kpi.attn … ★期限の無い★残り作業（★分類が未確認）。★淡い琥珀（★茂治・2026-10-17「強い警告色＋アイコン」）。
   🚨 ★★要対応（.todo-box・赤・期限あり・50万円）と★同じ色にしないこと。★削除が★薄れる。★★2026-10-17・茂治の判断で★この形にした。
   ★琥珀は★研修の「未視聴」（.badge.prep）と★同じ系統＝★「★期限の無い、やること」。★意味を揃えている。
   ★期限間近の★橙（.badge.soon #B4561F）・★赤（--danger）は★使わない */
.kpi.attn{background:#FFF7E3;border-color:#E8C878;}
.kpi.attn .lbl{color:#8A5A00;display:flex;align-items:center;gap:6px;}
.kpi.attn .num{color:#8A5A00;}
.kpi-ic{font-size:15px;line-height:1;}
/* ★.verdict-badge … ★従事者の詳細の「判定の根拠」の★対象／対象外（★茂治・2026-10-17）。★★2つとも★同じ幅・★中央寄せ。
   ★`.badge` は★共有なので★この包みの中だけ（★台帳・ダッシュボードのバッジは★変わらない）。★色は★`BADGE_TONE` のまま */
.verdict-badge .badge{width:200px;justify-content:center;}
.kpi-ask{font-size:14px;font-weight:600;color:#8A5A00;margin:2px 36px 0 0;line-height:1.5;}
.dash-progress{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow);}
.dash-progress .hd{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;}
.dash-progress .hd b{font-size:15px;color:var(--ink);}
.dash-progress .hd span{font-size:15px;color:var(--grey);}
.dash-progress .progress{margin:12px 0 12px;}

/* 要対応：1つの枠。差はバッジの色で付ける */
.todo-box{background:#FDF1EF;border:1px solid #F0C5BF;border-radius:var(--radius);padding:18px 20px;margin-bottom:16px;}
.todo-box h3{display:flex;align-items:center;gap:8px;color:#8A2B20;font-size:17px;margin-bottom:6px;}
.todo-row{display:flex;align-items:center;gap:12px 16px;flex-wrap:wrap;padding:10px 0;border-top:1px solid #F3D6D1;}
.todo-row:first-of-type{border-top:0;}
.todo-row .what{flex:1 1 240px;min-width:0;font-size:16px;line-height:1.7;}
.todo-row .act{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end;}
.todo-row .caution{font-size:14.5px;line-height:1.7;color:#8A2B20;max-width:380px;}
.badge.over{background:var(--danger);color:#fff;}
.badge.soon{background:#B4561F;color:#fff;}
/* ★確認待ち（期限なし）も ★橙（茂治の判断・2026-10-11）。
     ★ただし .badge.soon と同じ塗りにすると、測って #F19C06 と #F19A03 で ★目では見分けられなかった（茂治の案の画像）。
     → ★色は同じ橙のまま、★塗り（期限あり）と ★線（期限なし）で分ける。★色だけに頼らない（色覚の差でも残る）。 */
.badge.check{background:#fff;color:#B4561F;border:1.5px solid #B4561F;}
/* ★期限の無い行（確認待ち＝CSVに無い方の照合）は ★.badge.none（灰）で、要対応の枠の中に置く。
     ★要対応に置く理由：離職だった場合、削除の30日は★離職の日から既に動いている。期限が見えないだけで、放っておくと期限超過に化ける。
     ★「次にやること」に置かない理由：あちらは★次の1手を1つだけ出す場所。2つ並べると、どちらが先か分からなくなる。
   ★期限超過・間近の行が1つも無く、確認待ちだけのときは ★.todo-box.calm（赤みを抜く）。
     ★期限の無いものだけで枠を赤くすると、茂治の指摘②（どれが本当の緊急か分からない）に戻る。 */
.todo-box.calm{background:var(--sand);border-color:var(--line);}
.todo-box.calm h3{color:var(--ink);}
.todo-box.calm .todo-row{border-top-color:var(--line);}
/* ★#B4561F：--warn(#C0622F) だと白字とのコントラストが 4.18 で足りない。★一段濃くして 4.89 */

/* 押すと開く説明（details / summary）。★押せる面積は高さ44px以上 */
.fold summary{display:inline-flex;align-items:center;gap:8px;min-height:44px;cursor:pointer;font-weight:600;font-size:15px;color:var(--ink);list-style:none;}
.fold summary::-webkit-details-marker{display:none;}
.fold summary .qi{width:24px;height:24px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;font-size:14px;font-weight:800;}
.fold summary::after{content:"";width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);margin:-4px 0 0 4px;}
.fold[open] summary::after{transform:rotate(-135deg);margin-top:4px;}
.fold .fold-b{padding:4px 0 6px 32px;font-size:15px;line-height:1.8;color:var(--grey);}
/* ★.act … 表の行の中で「押すと開く操作」（★研修の画面の［作り直す］［受講を記録する］［取り消す］。2026-10-15）。
   ★<details class="act"><summary class="btn btn-ghost btn-sm">作り直す</summary><div class="act-b">…説明＋本当のボタン…</div></details>
   ★長い説明を★行ごとに常に出さない（★20行で20回出て表が潰れた）。★押した行でだけ開く。
   ★開いた枠は★表の上に重ねて出す（position:absolute）。★列の幅を押し広げない（★開くたびに表が組み替わらないように）。
   ⚠️ ★畳んでよいのは「★押す前に読む説明」だけ。★法務の線が掛かる原文（受け方について）は★入れない。
   ★.cell-sub … セルの2行目（日付・受ける動画・記録した人などの補足）。 */
.act{display:inline-block;vertical-align:top;position:relative;}
.act>summary{list-style:none;}
.act>summary::-webkit-details-marker{display:none;}
.act-b{position:absolute;right:0;top:calc(100% + 6px);z-index:5;width:min(380px, calc(100vw - 48px));padding:12px 14px;background:var(--white);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);font-size:14px;line-height:1.7;white-space:normal;text-align:left;}
.act-b .btn{margin-top:8px;}
/* ★.dlg-actions … モーダルの中の操作の段（★研修の画面。2026-10-15）。★上に余白と線を取り、★入力から本当のボタンを離す（★茂治「チェックと［発行する］が近い」）。 */
.dlg-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px;padding-top:16px;border-top:1px solid var(--line);}
/* ★.quote-src … 制度の原文を引く枠（★研修の画面：受け方の原文。2026-10-15 法務の C）。
   ★引用の体裁（左の線・行間・段落の区切り）は付けてよい。
   🚨 ★文字を周りの本文より★小さく・薄くしないこと（★読まれにくくするのも編集。法務）。★color と font-size は本文と同じ。 */
.quote-src{border-left:3px solid var(--line);padding:2px 0 2px 14px;margin:10px 0 0;color:var(--ink);font-size:inherit;line-height:1.8;}
.quote-src p{margin:0 0 8px;}
.quote-src p:last-child{margin-bottom:0;}
.cell-sub{display:block;font-size:14px;color:var(--grey);margin-top:2px;overflow-wrap:anywhere;}
/* ★.tbl-scroll … 表を包む箱（★研修の画面）。★表が箱より広いときだけ、★箱の中で横にスクロールする。
   ⭕ ★2026-10-15 PL の決定（★案A）：★1280px 以上は★折らずにそのまま入る（★箱932＝表932。実測）。
     ★1024〜1279px は★箱の中で横スクロール。★旧：「1024px なら横スクロールなし」（★PL が言った数。★8列になって成り立たなくなった）。
   ⚠️ ★2026-10-15 夕方、★氏名と職種を★1列にした（★茂治。★8列→7列）。★★案Aは★外さなかった：
     ★表の下限を外して測ると★1024px で★表 740px ＞ 箱 676px（★実測）。★列が1つ減っても★入らない。
     ★1280px は★箱932＝表932、★行 84〜92px（★実測）。
   ★表の下限 900px … ★ボタンを折らずに組んだ幅（★1280px で 932px に入る。実測）。★これより縮めると★職種・判定・ボタンが★1文字ずつ縦に折れる
     （★1024px の箱 676px に詰めたら、★ボタンを13pxにしても★職種と判定が縦に折れた。実測）。★小さくして詰めないこと。
   🚨 ★横に続いていることが★目で分かること（★PL の要件）。★分からないと★右端の「操作」の列に★辿り着けない＝★機能が無いのと同じ：
     ① ★氏名の列を★左に固定する（★どこまで横に送っても★誰の行か分かる）
     ② ★右端に★影を出す。★右端まで送ると★消える（★background-attachment:local の覆いが★影の上に来る）
   ⚠️ ★開く枠は★全部モーダル（★dialog の showModal は★最上層に出るので★箱で切れない）。★旧の .act-b（ポップオーバー）を★箱の中に戻さないこと。
   ★.cell-sub は★折り返せる（★開発DBの記録者がメールアドレスで、★折り返せずに隣の列を73pxまで押し潰していた）。 */
.tbl-scroll{overflow-x:auto;
  background:
    linear-gradient(to left, var(--white) 30%, rgba(255,255,255,0)) right center / 40px 100% no-repeat local,
    radial-gradient(farthest-side at 100% 50%, rgba(7,51,46,.28), rgba(7,51,46,0)) right center / 18px 100% no-repeat scroll;}
.tbl-scroll>.table{min-width:900px;}
.tbl-scroll .table .btn{white-space:nowrap;}
.tbl-scroll .table th:first-child,.tbl-scroll .table td:first-child{position:sticky;left:0;z-index:1;background:var(--white);box-shadow:1px 0 0 var(--line);}
.tbl-scroll .table tr:hover td:first-child{background:var(--sand);}

/* 直近の操作記録：説明文なし。行だけ */
.log-list{list-style:none;margin:0;padding:0;}
.log-list li{position:relative;display:flex;justify-content:space-between;gap:12px;padding:12px 0 12px 22px;border-bottom:1px solid var(--line);font-size:15px;}
.log-list li:last-child{border-bottom:0;}
.log-list li::before{content:"";position:absolute;left:3px;top:20px;width:8px;height:8px;border-radius:50%;background:var(--line);}
.log-list .at{color:var(--grey);white-space:nowrap;}

/* ============ 職種の区分の画面（2026-10-11 クリエイター。茂治の指摘3件から）============
   ★page.tsx / form.tsx（エンジニア）が使う class。★CSS を先に出して、使う側があとから乗る。 */

/* 押せないボタン。★これまで disabled でも見た目が変わらず、押せるように見えていた。
   🚨 ★見た目だけで止めない。★`disabled` 属性を外さないこと（judgment-invariants.test.ts が見ている）。
      ★opacity は disabled に★足すもの。★置き換えではない。 */
.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;}

/* 選択カードに、選んだ印の丸とチェック（.choice-set に checks を足すと効く）。
   ★チェックボックスにはしない。★はい／いいえの2択は、★未回答と「いいえ」を分けて記録する必要があるので、
     ★input は radio のまま（★1つしか選べない・★選ばないと送れない）。★見た目だけ丸とチェックにする。
   ★radio は見えなくするが、★キーボードとスクリーンリーダーからは使える（★フォーカスはカードの枠で見せる）。 */
.choice-set.checks .choice{position:relative;padding-left:76px;}
.choice-set.checks .choice input{position:absolute;opacity:0;width:1px;height:1px;margin:0;}
.choice-set.checks .choice::before{content:"";position:absolute;left:28px;top:33px;width:30px;height:30px;border:2px solid var(--line);border-radius:50%;background:#fff;box-sizing:border-box;}
.choice-set.checks .choice.on::before{background:var(--teal);border-color:var(--teal);}
.choice-set.checks .choice.on::after{content:"";position:absolute;left:39px;top:38px;width:8px;height:15px;border-right:3px solid #fff;border-bottom:3px solid #fff;transform:rotate(45deg);}
.choice-set.checks .choice:has(input:focus-visible){outline:3px solid var(--sea);outline-offset:2px;}
/* ★サイドバーがある画面では、900px 以下で2列にすると1枚が細くなりすぎる（★700px で1行に2〜3字）。★1列に落とす */
@media(max-width:900px){.choice-set.checks{grid-template-columns:1fr;}}

/* 右上の「分類の基準」。★未設定のときは .unset（★値を橙で）。
   🚨 ★未設定の警告（選ぶ前に読ませる alert warn）は★消さない。★こちらは置き場所の表示だけ。 */
.basis{font-size:15px;color:var(--grey);text-align:right;line-height:1.6;}
.basis b{color:var(--ink);}
.basis.unset b{color:var(--warn);}

/* 操作のボタンを右へ（★「戻る」を左、★確定を右＝★最後に押すものを右端に） */
.actions-end{display:flex;justify-content:flex-end;align-items:center;gap:12px;flex-wrap:wrap;}

/* ============ 3要件の画面の段（矢印形。2026-10-11 クリエイター。茂治の画像から）============
   ★氏名カードより上、横幅いっぱいに置く。
   ★<ol class="chevrons"> の中に <li class="cv">。★いまの段は .on ＋ aria-current="step"、済んだ段は .done。
   ★いまの段のラベルには「（現在地）」を付ける（★色だけに頼らない。茂治の画像の形）。
   ★済んだ段を薄く塗るのは私の判断（★画像は現在地だけ色付き）。★落とすなら .done の2行を消すだけ。
   ★幅が狭いとき（760px 以下）は、いまの段以外は番号だけにする（★.lb を隠す）。 */
.chevrons{display:flex;gap:4px;list-style:none;margin:0 0 20px;padding:0;}
.chevrons .cv{flex:1;min-width:0;display:flex;align-items:center;justify-content:center;gap:4px;
  min-height:48px;padding:6px 22px;font-size:16px;font-weight:600;text-align:center;line-height:1.35;
  background:#e4ecea;color:var(--grey);
  clip-path:polygon(0 0,calc(100% - 16px) 0,100% 50%,calc(100% - 16px) 100%,0 100%,16px 50%);}
.chevrons .cv:first-child{border-radius:8px 0 0 8px;clip-path:polygon(0 0,calc(100% - 16px) 0,100% 50%,calc(100% - 16px) 100%,0 100%);}
.chevrons .cv.on{background:var(--teal);color:#fff;}
.chevrons .cv.done{background:var(--tint);color:var(--ink);}
@media(max-width:760px){.chevrons .cv:not(.on) .lb{display:none;}.chevrons .cv{padding:6px 18px;font-size:15px;}.chevrons .cv:not(.on){flex:0 0 52px;}}

/* ============ 根拠の選択肢（行ごと押せる形。2026-10-11 クリエイター。茂治の画像から）============
   ★3要件の画面で、答えを選んだあとに出る「◯◯の根拠」。★1行を丸ごと押せる枠にする。
   ★<fieldset class="... qgroup"> の中に <div class="opt-list">、★1つずつ <div class="opt">（★選んだ行は .on）。
   ★radio は見せたまま（★茂治の画像の形。★上の大きいカードとは違い、ここは一覧なので丸は小さく残す）。
   ★「あてはまるものがない」の記入欄は、★その行の枠の中に .free で置く。 */
.card.qgroup{border-left:4px solid var(--teal);}
.opt-list{display:grid;gap:8px;margin-top:10px;}
.opt{border:1.5px solid var(--line);border-radius:10px;background:#fff;}
.opt:hover{border-color:var(--sea);}
.opt.on{border:2px solid var(--teal);background:var(--tint);}
.opt>label{display:flex;gap:12px;align-items:center;min-height:48px;padding:10px 16px;cursor:pointer;font-size:16px;line-height:1.5;}
.opt input[type=radio]{width:20px;height:20px;margin:0;flex:none;accent-color:var(--teal);}
.opt:has(input[type=radio]:focus-visible){outline:3px solid var(--sea);outline-offset:2px;}
/* ★.opt-list.joined … ★選択肢を★1つの塊に（★茂治・2026-10-15。★研修の書き出しの受講形式）。
   ★上の1枚は★下の角を、★間は★全部の角を、★下の1枚は★上の角を★落とす。★間の線は★重ねて1本に。
   ★ラジオと文字を★揃える：★`.field label`（block・太字）が★`.opt>label` を上書きしていたので、★ここで戻す。
   ★同じ形の塊を作るときは★この class を★使い回す（★新しく作らない） */
.opt-list.joined{gap:0;}
.opt-list.joined .opt+.opt{margin-top:-1.5px;}
.opt-list.joined .opt:first-child:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0;}
.opt-list.joined .opt:not(:first-child):not(:last-child){border-radius:0;}
.opt-list.joined .opt:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;}
.opt-list.joined .opt>label{display:flex;align-items:center;gap:0;margin:0;font-weight:400;font-size:16px;}
.opt-list.joined .opt>label>span{margin-left:10px;}
.opt .free{display:block;box-sizing:border-box;width:calc(100% - 64px);margin:0 16px 12px 48px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:16px;background:#fff;}
/* ★縦並びの選択肢にも丸＋チェック（.opt-list に checks を足すと効く。★2026-10-13 茂治「縦並びのラジオも同様に」）。
   ★考え方は上の .choice-set.checks と同じ（★input は radio のまま、★見た目だけ置き換える。★フォーカスは行の枠で見せる）。
   ★選んだ印は .on でも :checked でも付く。★版の理由（defaultChecked の非制御）は .on を持たないので、:has で拾う。
   ★label の中に「選択肢＋説明（muted の span）」の2行が入っても、丸は行の縦の真ん中に置く。 */
.opt-list.checks .opt>label{position:relative;padding-left:56px;}
.opt-list.checks .opt input[type=radio]{position:absolute;opacity:0;width:1px;height:1px;margin:0;}
.opt-list.checks .opt>label::before{content:"";position:absolute;left:16px;top:50%;width:24px;height:24px;margin-top:-12px;border:2px solid var(--line);border-radius:50%;background:#fff;box-sizing:border-box;}
.opt-list.checks .opt:is(.on,:has(input[type=radio]:checked)){border:2px solid var(--teal);background:var(--tint);}
.opt-list.checks .opt:is(.on,:has(input[type=radio]:checked))>label::before{background:var(--teal);border-color:var(--teal);}
.opt-list.checks .opt:is(.on,:has(input[type=radio]:checked))>label::after{content:"";position:absolute;left:25px;top:50%;width:6px;height:12px;margin-top:-8px;border-right:3px solid #fff;border-bottom:3px solid #fff;transform:rotate(45deg);}
.opt-list.checks .opt .free{width:calc(100% - 72px);margin-left:56px;}

/* ============ 3要件の確認の段：判定結果（いちばん上。2026-10-11 茂治の判断）============
   ★赤・橙を使わない（★対象は失敗ではなく、★対象外も良いことではない）。★大きさで目立たせる。 */
.verdict{font-size:26px;font-weight:800;color:var(--ink);line-height:1.4;margin:0;}
.verdict .v{color:var(--teal);}
.verdict small{font-size:18px;font-weight:700;color:var(--ink);}

/* ============ CSV取り込み（2026-10-12 クリエイター。茂治の画像から）============
   ★.dropzone … ファイルを置く場所。★枠全体にファイルを落とせること（★外に落とすとブラウザがファイルを開いてしまう）。
     ★<input type="file"> を枠いっぱいに重ねて透明にする形（.dropzone input[type=file]）。★キーボードでも選べる。
     ★選んだファイル名は .dz-name に出す（★透明にした input は名前を見せないので）。
   ★.dz-go … 「内容を確認する」。★ファイルを選ぶまで半透明（★input の required が本当の止め。見た目だけ合わせる）。
   ★.chips / .chip … 取り込む項目の一覧。 */
.page-lead{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px;}
.page-lead p{flex:1 1 420px;margin:0;line-height:1.8;}
.page-lead .tpl{display:flex;flex-direction:column;align-items:flex-end;gap:6px;}
.page-lead .tpl small{color:var(--grey);font-size:14.5px;text-align:right;}
.dropzone{position:relative;border:2px dashed var(--sea);border-radius:var(--radius);background:#fff;
  padding:40px 24px;text-align:center;margin-bottom:16px;transition:background .15s;}
.dropzone:hover,.dropzone:focus-within,.dropzone.over{background:var(--tint);}
.dropzone:focus-within{outline:3px solid var(--sea);outline-offset:2px;}
.dropzone input[type=file]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;}
.dropzone .dz-icon{font-size:44px;line-height:1;color:var(--teal);margin-bottom:12px;}
/* ★アイコンは インライン SVG（★2026-10-12 茂治「CSV の文字はダサい」）。★fill/stroke は currentColor なので、上の color が効く */
.dropzone .dz-icon svg{display:block;width:56px;height:56px;margin:0 auto;}
.dropzone .dz-title{font-size:20px;font-weight:700;color:var(--ink);margin:0 0 6px;}
.dropzone .dz-note{color:var(--grey);margin:0;}
.dropzone .dz-name{display:inline-block;margin-top:12px;padding:4px 12px;border-radius:999px;background:var(--tint);color:var(--ink);font-weight:600;}
.dropzone .dz-name:empty{display:none;}
.dz-actions{position:relative;z-index:1;margin-top:20px;}
form:has(.dropzone input[type=file]:invalid) .dz-go{opacity:.5;}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 12px;padding:0;list-style:none;}
.chip{display:inline-block;padding:6px 14px;border-radius:8px;background:#eef3f2;color:var(--ink);font-weight:700;font-size:15px;}

/* ============ 済んだことの知らせ／戻せない操作（2026-10-12 クリエイター）============
   ★.alert.done … 済んだことの知らせ（★いまの使い先：台帳から削除したあとの1行）。
     ⚠️ ★2026-10-12、確認待ちの「在職中にしました」にも使う案だったが、★茂治の判断でモーダル（dialog.confirm）にした
       （★「下の方の従事者を押したとき、上の知らせは見えない」）。★1人ずつ片づけると1クリック増えることは承知の上。
       ★モーダルの中でも、済んだことの1行にこの色を使ってよい。
   ★.btn-danger … 戻せない操作（★台帳から削除）だけに使う。★ほかの「押してよい」操作に使わない。 */
.alert.done{background:#dff3ef;color:#046b5c;border:1px solid #b9e3da;align-items:center;}
.alert.done .act{margin-left:auto;}
.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger);}
.btn-danger:hover{filter:brightness(.92);}
/* ★.btn-void … ★研修の［取消し］（★茂治・2026-10-15。★薄い赤の地・赤い枠・赤い字）。
   ★.btn-danger（★塗り）より★軽い。★表の行に並ぶ★入口のボタンなので（★押すと★理由を書くモーダルが開く）。
   ★★［受講完了確認］（★.btn-primary・塗り）と★同じ重さに見せないこと */
.btn-void{background:#fbe6e3;color:var(--danger);border-color:var(--danger);}
.btn-void:hover{filter:brightness(.97);}
/* ★.is-target … ★判定の「対象」（★茂治・2026-10-15。★緑・太字）。🚨 ★「対象外」には★付けない（★わざと片側だけ。page.tsx の注記） */
.is-target{color:#046b5c;font-weight:700;}
/* ★.course-pick … ★合言葉の発行の枠の「□ 要点動画で研修する」（★茂治・2026-10-15）。★操作の部品を★見やすくするだけ。
   ⚠️ ★上の説明の文（★原則は標準）を★小さく・薄くしないこと（★法務の C）。★太さの差は★説明を弱める編集ではない、が PL の読み */
.course-pick{display:block;margin-top:10px;font-weight:700;}
/* ★.course-lead … ★同じ枠の説明の★1文目（★原則は標準）。★.course-pick と★同じ太さ（★茂治 B・2026-10-15。★対の片方だけ強めない） */
.course-lead{font-weight:700;}
/* ★.danger-zone … 戻せない操作を置く枠（★従事者の詳細の「台帳から削除」。2026-10-12 茂治の画像から）。
   ★記録がある人には、この枠ごと出さない（★代わりに muted の1行で理由を出す）。 */
.danger-zone{border:1.5px solid #F0C5BF;background:#FDF1EF;border-radius:var(--radius);padding:18px 20px;margin-top:24px;}
.danger-zone h3{color:#8A2B20;font-size:17px;margin:0 0 6px;}
.danger-zone p{margin:0 0 14px;line-height:1.7;}
/* ★.kv-cols / .kv … 項目と値の2列（★従事者の詳細の「基本情報」。2026-10-14 茂治の画像から）。
   ★<div class="kv-cols"> の中に <dl class="kv"> を2つ。★1つの dl の中は <div><dt>項目</dt><dd>値</dd></div> の並び。
   ★左右の振り分けはマークアップで決める（★grid の自動の流し込みにしない。★項目が増えたとき勝手に左右が入れ替わるので）。
   ★1080px 以下では1列に積む（★サイドバーが 250px 取るので、820px では値の欄が 84px になり事業種別が7行に割れた。実測）。
   ⚠️ ★研修の表の下限（.tbl-scroll の 1024px）とは★別の数。★こちらは★2列で読める幅の線。★測っている物が違う。
   ★.edit-zone … ［編集］で開く枠。★開いている間は .kv-cols を出さない（★同じ値を2回見せない。茂治の「冗長」）。 */
.kv-cols{display:grid;grid-template-columns:1fr 1fr;column-gap:40px;}
.kv{margin:0;}
.kv>div{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--line);}
.kv dt{color:var(--grey);font-size:14.5px;}
.kv dd{margin:0;font-weight:600;overflow-wrap:anywhere;}
@media(max-width:1080px){.kv-cols{grid-template-columns:1fr;}}
/* ★.pv-* … CSV取り込みの確認表（★2026-10-14 茂治「項目全部出した方がいい」）。
   ★列は8つ：行／氏名（★フリガナは氏名の下に .pv-kana）／社員番号／職種／雇用形態／従事開始日／メールアドレス／状態。
   ★フリガナだけ氏名に重ねる（★同じ人の読みなので）。★雇用形態・従事開始日・メールは★自分の列を持つ（★正規化の結果を見せるのが目的）。
   ★<div class="pv-wrap"> で表を包む。★狭い画面では表を潰さず、★横にスクロールさせる（★1280px では収まる。820px で横スクロール。実測）。
   ★雇用形態は★読み替えた後の値が本体。★CSVの表記と違うときだけ、下に .pv-raw で「CSV：パート」を添える（★従事開始日には添えない）。
   ★td に付ける：氏名 .pv-name／職種 .pv-job／社員番号・雇用形態・従事開始日 .pv-nowrap／メール .pv-mail／状態 .pv-state。 */
.pv-wrap{overflow-x:auto;}
.pv-wrap>.table{min-width:960px;}
.pv-wrap td{vertical-align:top;}
.pv-kana{display:block;font-size:14px;color:var(--grey);margin-top:2px;}
.pv-raw{display:block;font-size:14px;color:var(--grey);margin-top:2px;}
.pv-name{min-width:120px;}
.pv-job{min-width:110px;}
.pv-mail{overflow-wrap:anywhere;min-width:160px;}
.pv-nowrap{white-space:nowrap;}
.pv-state{min-width:200px;}
.edit-zone h4{font-size:15px;margin:0 0 8px;}
.edit-zone section+section{margin-top:24px;padding-top:20px;border-top:1px solid var(--line);}
/* ★.dl-* … 証跡の書き出しの確認（★2026-10-13 茂治の画像から）。
   ★.dl-file … ファイル名の枠＋［コピー］。★名前は選んでもコピーできるように user-select:all。
   ★.dl-h    … 枠の中の小見出し（「含まれる項目」）。
   ★.dl-items … 項目の箇条書き。★列の一覧の原本は evidence-export.ts の COLUMNS（★ここに写さない）。
   ★「操作記録に残ります」の囲みは既存の .alert.info を使う。 */
.dl-file{display:flex;align-items:center;gap:10px;background:var(--sand);border:1px solid var(--line);border-radius:10px;padding:10px 10px 10px 14px;}
.dl-file code{flex:1;min-width:0;overflow-wrap:anywhere;font-size:15px;user-select:all;}
.dl-file .btn{padding:6px 12px;font-size:14px;flex:0 0 auto;}
.dl-h{font-size:15px;font-weight:700;margin:18px 0 6px;}
.dl-items{margin:0;padding-left:1.2em;line-height:1.8;font-size:15px;}
.dl-items li::marker{color:var(--grey2);}

/* ============ バッジ ============ */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:14.5px;font-weight:600;padding:3px 10px;border-radius:999px;white-space:nowrap;}
.badge.ok{background:#dff3ef;color:#046b5c;}
.badge.warn{background:var(--warnbg);color:var(--warn);}
.badge.prep{background:#fff4dd;color:#9a6a12;}
.badge.none{background:#f0eeee;color:#7a7a7a;}
.badge.info{background:var(--tint);color:var(--teal);}
.badge.danger{background:#fbe6e3;color:var(--danger);}
/* ★研修状況の「視聴中」（★茂治・2026-10-15：未視聴＝黄 .prep／視聴中＝青／視聴済み＝緑 .ok）。★青は★ここだけ */
.badge.blue{background:#e6eefa;color:#2d5d9f;}
.badge.dot::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;display:inline-block;}

/* ============ ボタン ============ */
.btn{display:inline-flex;align-items:center;gap:8px;font-size:16px;font-weight:600;padding:12px 20px;border-radius:9px;border:1px solid transparent;cursor:pointer;line-height:1;}
.btn:hover{text-decoration:none;}
.btn-primary{background:var(--teal);color:#fff;}
.btn-primary:hover{background:#026b78;color:#fff;}
.btn-ghost{background:#fff;color:var(--ink);border-color:var(--line);}
.btn-ghost:hover{background:var(--tint);}
.btn-mint{background:var(--mint);color:var(--ink);}
.btn-sm{padding:9px 14px;font-size:15px;}
.btn-lg{padding:16px 32px;font-size:18px;}

/* ============ テーブル ============ */
.table{width:100%;border-collapse:collapse;font-size:15px;}
.table th{text-align:left;color:var(--grey);font-weight:600;font-size:14.5px;padding:13px 14px;border-bottom:2px solid var(--line);white-space:nowrap;}
.table td{padding:15px 14px;border-bottom:1px solid var(--line);vertical-align:middle;}
.table tr:last-child td{border-bottom:none;}
.table tr:hover td{background:var(--sand);}
.table .c{text-align:center;}
.table .r{text-align:right;}
.table td .who{font-weight:600;color:var(--ink);}
.table td .meta{font-size:14.5px;color:var(--grey);}

/* ============ プログレスバー ============ */
.progress{height:10px;background:#eef4f3;border-radius:999px;overflow:hidden;}
.progress > i{display:block;height:100%;background:var(--sea);border-radius:999px;}
.progress.lg{height:14px;}

/* ============ チェックリスト / タイムライン ============ */
.checklist{list-style:none;padding:0;margin:0;}
.checklist li{display:flex;align-items:flex-start;gap:10px;padding:14px 0;border-bottom:1px dashed var(--line);}
.checklist li:last-child{border-bottom:none;}
.checklist .box{width:18px;height:18px;border-radius:5px;border:2px solid var(--line);flex-shrink:0;margin-top:2px;}
.checklist li.done .box{background:var(--sea);border-color:var(--sea);position:relative;}
.checklist li.done .box::after{content:"✓";color:#fff;font-size:14.5px;position:absolute;left:2px;top:-3px;}
.checklist li.done .txt{color:var(--grey);text-decoration:line-through;}

.timeline{list-style:none;padding:0;margin:0;position:relative;}
.timeline li{padding:0 0 18px 26px;position:relative;}
.timeline li::before{content:"";position:absolute;left:6px;top:2px;bottom:-4px;width:2px;background:var(--line);}
.timeline li::after{content:"";position:absolute;left:0;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;border:3px solid var(--sea);}
.timeline li:last-child::before{display:none;}
.timeline .t{font-size:14.5px;color:var(--grey);}
.timeline .d{font-weight:600;}

/* ============ アラート帯 ============ */
.alert{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:10px;font-size:15px;}
.alert.warn{background:var(--warnbg);color:#8a4322;border:1px solid #ecccbd;}
.alert.info{background:var(--tint);color:var(--ink);border:1px solid var(--tint2);}
.alert .ai{font-size:19px;line-height:1.2;}

/* ============ パスワードの条件（password-new / password-reset-confirm）============
   ★満たした行だけ ✓ と色を付ける。★満たしていない行を赤くしない（打っている途中の人を責めない）。
   ★条件の原本は infra/lib/chinowa-stack.ts の passwordPolicy。 */
.pw-rules{list-style:none;margin:10px 0 0;padding:0;}
.pw-rules li{position:relative;padding:3px 0 3px 26px;font-size:15px;color:var(--grey);}
.pw-rules li::before{content:"・";position:absolute;left:6px;}
.pw-rules li.met{color:var(--teal);}
.pw-rules li.met::before{content:"✓";left:4px;font-weight:800;}

/* ============ フォーム ============ */
.field{margin-bottom:16px;}
.field label{display:block;font-size:15px;font-weight:600;color:var(--ink);margin-bottom:8px;}
.field input,.field select,.field textarea{
  width:100%;padding:13px 14px;border:1px solid var(--line);border-radius:9px;font-size:16px;
  font-family:inherit;background:#fff;color:var(--ink);
}
.field input:focus,.field select:focus,.field textarea:focus{outline:none;border-color:var(--sea);box-shadow:0 0 0 3px rgba(0,168,150,.15);}
.field .hint{font-size:14.5px;color:var(--grey);margin-top:5px;}
.radio-row{display:flex;gap:10px;flex-wrap:wrap;}
.radio-card{border:1px solid var(--line);border-radius:10px;padding:12px 14px;cursor:pointer;flex:1;min-width:140px;background:#fff;}
.radio-card.sel{border-color:var(--sea);background:var(--tint);box-shadow:0 0 0 2px rgba(0,168,150,.15);}
.radio-card .rt{font-weight:600;}
.radio-card .rd{font-size:14.5px;color:var(--grey);}

/* ============ 認証（ログイン/登録）============ */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1fr 1fr;}
@media(max-width:840px){.auth-wrap{grid-template-columns:1fr;}}
.auth-brand{background:var(--ink);color:#fff;padding:56px 52px;display:flex;flex-direction:column;justify-content:center;position:relative;overflow:hidden;}
.auth-brand .blob{position:absolute;border-radius:50%;}
.auth-brand .b1{width:340px;height:340px;background:var(--teal);opacity:.35;right:-90px;bottom:-90px;}
.auth-brand .b2{width:180px;height:180px;background:var(--mint);opacity:.4;right:20px;bottom:60px;}
.auth-brand .logo{width:44px;height:44px;border-radius:11px;background:var(--mint);color:var(--ink);display:grid;place-items:center;font-weight:800;font-size:21px;margin-bottom:24px;position:relative;}
.auth-brand h1{font-size:30px;margin-bottom:14px;position:relative;}
.auth-brand p{color:#cfe6e2;font-size:16px;position:relative;max-width:400px;}
.auth-brand ul{margin:24px 0 0;padding:0;list-style:none;position:relative;}
.auth-brand ul li{padding:7px 0 7px 26px;position:relative;color:#e5f5f2;font-size:15px;}
.auth-brand ul li::before{content:"✓";position:absolute;left:0;color:var(--mint);font-weight:800;}
.auth-form{display:flex;align-items:center;justify-content:center;padding:40px;}
.auth-card{width:100%;max-width:380px;}
.auth-card h2{font-size:22px;margin-bottom:6px;}
.auth-card .lead{color:var(--grey);font-size:15px;margin-bottom:26px;}
.divider{display:flex;align-items:center;gap:12px;color:var(--grey);font-size:14.5px;margin:18px 0;}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line);}

/* ============ 診断ウィザード ============ */
.wizard-top{background:var(--ink);color:#fff;padding:16px 0;}
.wizard-top .in{max-width:760px;margin:0 auto;padding:0 24px;display:flex;align-items:center;gap:10px;}
.wizard-top .logo{width:30px;height:30px;border-radius:8px;background:var(--mint);color:var(--ink);display:grid;place-items:center;font-weight:800;}
.wizard-wrap{max-width:760px;margin:0 auto;padding:32px 24px 60px;}
.steps{display:flex;gap:8px;margin-bottom:28px;}
.steps .st{flex:1;text-align:center;font-size:14.5px;color:var(--grey);}
.steps .st .bar{height:6px;border-radius:999px;background:#e4ecea;margin-bottom:7px;}
.steps .st.on .bar{background:var(--sea);}
.steps .st.on{color:var(--teal);font-weight:600;}
.steps .st.done .bar{background:var(--sea);}
.steps .st.done{color:var(--teal);}
/* ★.done＝済んだ段（2026-10-11 クリエイター。3要件の画面の進捗）。★.on＝いまの段。★済んだ段も塗って、どこまで来たかを見せる */
.q{font-size:21px;font-weight:700;margin-bottom:18px;}

/* ============ ランディング/サイトマップ ============ */
.lp-top{background:var(--ink);color:#fff;padding:14px 0;position:sticky;top:0;z-index:10;}
.lp-top .in{max-width:1080px;margin:0 auto;padding:0 24px;display:flex;align-items:center;justify-content:space-between;}
.lp-top .logo{display:flex;align-items:center;gap:9px;font-weight:700;}
.lp-top .logo .m{width:28px;height:28px;border-radius:8px;background:var(--mint);color:var(--ink);display:grid;place-items:center;font-weight:800;}
.map-wrap{max-width:1080px;margin:0 auto;padding:36px 24px 70px;}
.map-hero{background:linear-gradient(135deg,var(--ink),var(--teal));color:#fff;border-radius:16px;padding:38px 36px;margin-bottom:12px;}
.map-hero h1{font-size:28px;margin-bottom:8px;}
.map-hero p{color:#d8efeb;max-width:640px;}
.map-sec{margin-top:30px;}
.map-sec h2{font-size:16px;color:var(--teal);margin-bottom:12px;letter-spacing:.02em;}
.map-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
@media(max-width:820px){.map-grid{grid-template-columns:1fr;}}
.map-card{display:block;background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow);color:var(--ink);}
.map-card:hover{text-decoration:none;border-color:var(--sea);transform:translateY(-1px);transition:.12s;}
.map-card .mt{font-weight:700;font-size:16px;margin-bottom:3px;}
.map-card .md{font-size:14.5px;color:var(--grey);}
.map-card .tag{font-size:14.5px;color:var(--teal);font-weight:600;}

/* ============ 補助 ============ */
.muted{color:var(--grey);}
.right{text-align:right;}
.mt0{margin-top:0;} .mt8{margin-top:8px;} .mt16{margin-top:16px;} .mt24{margin-top:24px;}
.mb8{margin-bottom:8px;} .mb16{margin-bottom:16px;} .mb24{margin-bottom:24px;}
.flex{display:flex;} .between{justify-content:space-between;} .aic{align-items:center;} .gap8{gap:8px;} .gap12{gap:12px;} .gap16{gap:16px;} .wrap{flex-wrap:wrap;}
.pill-row{display:flex;gap:8px;flex-wrap:wrap;}
.demo-note{margin:0 0 18px;font-size:14.5px;color:#9aa;}
.tabbar{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:20px;}
.tabbar a{padding:10px 16px;font-size:15px;color:var(--grey);border-bottom:2px solid transparent;}
.tabbar a.on{color:var(--teal);border-bottom-color:var(--teal);font-weight:600;}
.req-row{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--line);border-radius:10px;margin-bottom:10px;background:#fff;}
.req-row .rc{width:30px;height:30px;border-radius:50%;background:var(--sea);color:#fff;display:grid;place-items:center;font-weight:700;flex-shrink:0;}
.req-row .rc.no{background:#c9d4d2;}
.req-row .rn{font-weight:700;width:70px;flex-shrink:0;}
.req-row .rd{color:var(--grey);font-size:14px;flex:1;}
.req-row .rv{font-weight:700;color:var(--sea);}

/* ============ 従事者研修ポータル（スマホ／本人ログイン） ============ */
.portal-top{background:var(--ink);color:#fff;position:sticky;top:0;z-index:10;}
.portal-top .in{max-width:480px;margin:0 auto;padding:13px 18px;display:flex;align-items:center;justify-content:space-between;}
.portal-top .logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;color:#fff;}
.portal-top .logo .m{width:26px;height:26px;border-radius:7px;background:var(--mint);color:var(--ink);display:grid;place-items:center;font-weight:800;}
.portal-top .lo{color:#9fc9c3;font-size:14.5px;}
.portal-top .lo:hover{color:#fff;}
.portal{max-width:480px;margin:0 auto;padding:20px 18px 64px;}
.portal-hero{background:linear-gradient(135deg,var(--ink),var(--teal));color:#fff;border-radius:14px;padding:20px;margin-bottom:18px;}
.portal-hero h1{font-size:20px;margin-bottom:4px;}
.portal-hero p{color:#d8efeb;font-size:14px;}
.portal-hero .pbar{height:10px;background:rgba(255,255,255,.22);border-radius:999px;overflow:hidden;margin-top:14px;}
.portal-hero .pbar > i{display:block;height:100%;background:var(--mint);border-radius:999px;}
.vid{display:flex;gap:12px;align-items:center;padding:13px;border:1px solid var(--line);border-radius:12px;background:#fff;margin-bottom:10px;box-shadow:var(--shadow);}
.vid .th{width:44px;height:44px;border-radius:8px;background:linear-gradient(135deg,var(--teal),var(--sea));color:#fff;display:grid;place-items:center;font-size:17px;flex-shrink:0;}
.vid.done .th{background:linear-gradient(135deg,#0a8f7e,#00A896);}
.vid.todo .th{background:#fff;color:var(--ink);border:2px solid var(--line);font-weight:700;}
/* ★完了＝★塗り＋白い✓／★未完了＝★白地＋枠線＋濃い番号（★茂治・2026-10-18。★新しい色は★足していない）。
   ★旧 .vid.todo .th は★#c9d4d2 の地に★白文字（★読みにくい）。★しかも★ポータルが `todo` を★付けておらず★空回りしていた。
   ★四角は★正方形（★旧 60×44）。 */
.vid .vt{font-weight:600;font-size:15px;line-height:1.35;}
.vid .vm{font-size:14.5px;color:var(--grey);margin-top:2px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.vid .va{margin-left:auto;flex-shrink:0;text-align:right;}
/* ★押した回に［もう一度見る］が足された（2026-10-15）。★右の欄が広くなり、★スマホで題名が1文字ずつ縦に折れた（実測 375px）。
   ★題名の欄に★最低の幅を持たせ、★入らないときは★右の欄を★次の行（右寄せ）に送る。★ポータルは★壁のQRから★スマホで開かれる。 */
.vid{flex-wrap:wrap;}
.vid > :not(.th):not(.va){flex:1 1 160px;min-width:0;}
/* ★次の行に送られた右の欄が★札からはみ出した（★「見ました（日付）」＋［もう一度見る］が★札の幅より広い。実装のポータルで 375px 実測）。★札の幅で折り返す */
.vid .va{max-width:100%;}
.player{background:#0b1f1c;border-radius:12px;aspect-ratio:16/9;display:grid;place-items:center;color:#cfe6e2;margin-bottom:12px;position:relative;overflow:hidden;}
.player .pl{width:56px;height:56px;border-radius:50%;background:rgba(255,255,255,.15);display:grid;place-items:center;font-size:22px;border:2px solid rgba(255,255,255,.5);}
.player .cap{position:absolute;left:12px;bottom:10px;font-size:14.5px;color:#9fc9c3;}

/* ============ ランディングページ（公開・集客用） ============ */
.lp-hero{background:linear-gradient(135deg,var(--ink),var(--teal));color:#fff;padding:60px 24px 68px;text-align:center;position:relative;overflow:hidden;}
.lp-hero .in{max-width:820px;margin:0 auto;position:relative;z-index:1;}
.lp-hero .blob{position:absolute;border-radius:50%;opacity:.18;}
.lp-hero .b1{width:420px;height:420px;background:var(--mint);right:-120px;top:-140px;}
.lp-hero .b2{width:260px;height:260px;background:var(--sea);left:-100px;bottom:-120px;opacity:.14;}
.lp-hero .kicker{display:inline-block;background:rgba(255,255,255,.14);color:#eafaf7;font-size:14px;font-weight:600;padding:6px 14px;border-radius:999px;margin-bottom:20px;}
.lp-hero h1{font-size:38px;line-height:1.32;margin-bottom:16px;}
.lp-hero p.lead{font-size:17px;color:#d8efeb;max-width:620px;margin:0 auto 28px;}
.lp-hero .cta-row{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}
.lp-hero .note{margin-top:16px;font-size:14.5px;color:#9fc9c3;}
@media(max-width:640px){.lp-hero h1{font-size:27px;}}
.lp-wrap{max-width:1000px;margin:0 auto;padding:0 24px;}
.lp-sec{padding:54px 0;}
.lp-sec h2{font-size:26px;text-align:center;margin-bottom:10px;}
.lp-sec .sub{text-align:center;color:var(--grey);margin:0 auto 34px;font-size:16px;max-width:600px;}
.flow{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;align-items:stretch;}
.flow .step{flex:1;min-width:132px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 14px;text-align:center;box-shadow:var(--shadow);}
.flow .step .n{width:28px;height:28px;border-radius:50%;background:var(--tint);color:var(--teal);font-weight:800;display:grid;place-items:center;margin:0 auto 8px;font-size:14px;}
.flow .step.paid .n{background:var(--sea);color:#fff;}
.flow .step .st-t{font-weight:700;font-size:15px;margin-bottom:3px;}
.flow .step .st-d{font-size:14.5px;color:var(--grey);line-height:1.4;}
.feat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;}
@media(max-width:720px){.feat-grid{grid-template-columns:1fr;}}
.feat{background:#fff;border:1px solid var(--line);border-radius:14px;padding:24px;box-shadow:var(--shadow);}
.feat .ico{font-size:26px;margin-bottom:10px;}
.feat h3{font-size:17px;margin-bottom:6px;}
.feat p{font-size:14px;color:var(--grey);}
.lp-band{background:var(--tint);border:1px solid var(--tint2);border-radius:16px;padding:40px 28px;text-align:center;}
.lp-band h2{font-size:24px;margin-bottom:8px;}
.lp-band p{color:var(--grey);max-width:560px;margin:0 auto 20px;font-size:15px;}
.pain-list{max-width:640px;margin:0 auto;display:grid;gap:10px;}
.pain-list .row{display:flex;gap:12px;align-items:flex-start;background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;}
.pain-list .row .pi{font-size:19px;flex-shrink:0;}
.pain-list .row b{font-size:15px;}
.pain-list .row .d{font-size:14px;color:var(--grey);}
.pill-tags{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;}
.pill-tags .t{background:#fff;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:14px;font-weight:600;color:var(--ink);}
.lp-foot{background:var(--ink);color:#9fc9c3;text-align:center;padding:28px 24px;font-size:14.5px;}
.btn-onhero{background:rgba(255,255,255,.14);color:#fff;border-color:rgba(255,255,255,.42);}
.btn-onhero:hover{background:rgba(255,255,255,.24);color:#fff;}

/* =========================================================
   ブランドマーク（確定 2026-08-30 ／ 案A「結び」）
   茅の輪＝縄を結んで作る輪。左下の結び目が「手続きを踏んだ印」。
   輪＋結び目の2要素のみ。

   ■ マスターは assets/logo-reverse.svg（濃色地用）。CSSで描き起こさず、
     背景画像として参照している。ロゴを変えるときは SVG 1枚を直せば
     LP・管理画面19画面・ファビコンの全部に同時に効く。
     以前は border と ::after で描いていたが、線の太さと結び目のはみ出しが
     LP版とズレたため、2026-08-30 に参照方式へ切り替えた。

   ■ マークは装飾。5面とも aria-hidden で隠し、サービス名は文言側で担保している。
     sidebar / lp-top / portal-top は隣にテキストの「ちのわ」があり、
     auth-brand と wizard-top は隣接テキストが無いので <title> の「| ちのわ」で担保。
     いずれも span / div でリンクではないため、アクセシブルネームは要求されない。
     → **将来このマークをリンク化する場合（ロゴでトップへ戻す導線など）は、
       aria-hidden のままだとリンク名が空になる。aria-label="ちのわ" を付けること。**

   ■ ⚠️ 意匠の禁止事項（本ロゴを作り直すときは必ず読むこと）
     🚨 ★ここが原本。ogp.html / x-avatar.html / x-header.html は、ここを指すだけ。
        ★写さないこと（2026-09-12 までは4枚に写っていて、4枚とも同じ誤りを持っていた）。

     こども家庭庁の公式キャラクター「こまもろう」（フクロウ）と、こまもろうマーク
     （認定事業者マーク／法定事業者マーク）は、**使えない**。
       ・著作権：庁のコピーライトポリシーは、シンボルマーク・ロゴ・キャラクター
         デザインを公共データ利用規約の適用対象外としている（自由利用の対象外）
       ・法23条：未認定者がマークまたは紛らわしい表示を付すと
         1年以下の拘禁刑または50万円以下の罰金。両罰規定あり。うちは認定事業者ではない
     → **フクロウを想起させる意匠／下記の配色と器の引用／「こまもろう」の名称や
        デザインの引用は不可。**「日本版DBS対応」という制度名の記述は問題ない。
     DBSは重い話題なので「親しみやすくしよう」として公式キャラクターに寄せたくなる。
     そこが落とし穴。**ラフの段階で法務チームに見せること。**

     ★実物のマーク画像（こども家庭庁の制度ページに貼られているPNG）
       https://www.cfa.go.jp/assets/contents/node/basic_page/field_ref_images/80127231-8582-476e-a6e7-9347e725ed96/4f299f8c/20251225_policies_child-safety_efforts_koseibouhou_01.png
       ★落とした画像はリポジトリに置いていない（著作権）。見るときは取り直すこと。

   ■ 🚨 ★2026-09-30 に直した。ここは「水色・ピンクの**円形**」と書いてあった。★誤り。
       ★実物と並べて分かったこと：
         ★認定事業者マーク … **円形**        ／ 地 #009CE1
         ★法定事業者マーク … **角丸正方形**  ／ 地 #D65C95
       ★「円形」だけ禁じると、**ピンクの角丸正方形が素通りする。**
       🚨 ★そして **うちの favicon.svg は「角丸正方形＋ベタ地＋中央に白い図形」**。
          ★法定事業者マークと **同じ器**。いま紛らわしくないのは、色と中身が違うから。
          ★**器では分かれていない。** 器を根拠にしないこと。

   ■ 🚨 ★色は「地の色」で判定しない。マークは5色ある（実測）：
       #009CE1 認定の地 ／ #D65C95 法定の地 ／ #E59B2F フクロウの体 ／
       #F4CE33 くちばし ／ #211916 目
       ★**うちの差し色 #FFC24B は、くちばし #F4CE33 と ΔE≈16、体 #E59B2F と ΔE≈15。
         色相差は 4〜9度。同じ色域。**
       ★地の2色だけ測ると「うちの色は当たらない」と出る。★正しくは
         **「当たらないのは地の2色。残り3色は測っていない」。**
       → ★差し色を**面**で使わない。いまは結び目（線幅2の1本）だけ。
         ★**#FFC24B をベタ面・円・顔のパーツに使うときは、ここへ戻る。**

   ■ ★並べた結果（2026-09-30。ロゴ／Xアバター／Xヘッダー／favicon の4点）
       ★**紛らわしくない。** 220px・実寸48px・実寸24px の3段で見た。
       ★マークは「フクロウの顔（白い目2つ＋菱形のくちばし）＋白抜きの『こまもろう』
         ＋『認定』『法定』のピル」。うちは「白い輪＋結び目」。
       ★24pxでも、マークは顔に、うちは輪に見える。共通しているのは**角丸の器だけ**。
       ★確かめ方（ブラウザの縮小表示で見ない。実寸を作ってから拡大する）：
         cp <画像> /tmp/t.png && sips -Z 48 /tmp/t.png
         → image-rendering:pixelated で6倍に引き伸ばして読む

   ■ 色の規定：輪は地の明度でだけ切り替える（色相は変えない）。
     濃色地 → logo-reverse.svg ／ 白・淡色地 → logo.svg
     ブランド色で置くなら logo-brand.svg ／ 結び目は常に #FFC24B。
     ロゴが乗る5面（sidebar / auth-brand / wizard-top / lp-top / portal-top）は
     すべて背景が var(--ink) の濃色地なので logo-reverse.svg で固定。
     将来これらを白基調にする場合は、参照先を logo.svg に替えるだけでよい。
     ★2026-10-17 に足した面：ポータルの帯（.portal-band-mark）。地はロゴの色 #0E9F8F（濃色地の扱い）なので
     logo-reverse.svg。隣にテキストの「ちのわ」があり、aria-hidden。リンクにしない（法務。band.tsx）。
   ========================================================= */
.sidebar .brand .logo,
.auth-brand .logo,
.wizard-top .logo,
.lp-top .logo .m,
.portal-top .logo .m{
  flex:0 0 auto;          /* flexで横に潰れて楕円化するのを防ぐ */
  background:url(logo-reverse.svg) center/contain no-repeat;
  border:0;
  border-radius:0;
  font-size:0;
  color:transparent;
}

/* ============ 研修の案内（従事者が開く画面と、配る紙。2026-10-14 クリエイター）============
   ★従事者はログインしない。★Shell（サイドメニュー）を使わない。★この枠だけで作る。
   🚨 ★LP の部品・LP への導線（ロゴのリンク・「ちのわについて」等）を置かない。
      ★置くと特定電子メールに当たり、★送れなくなる（docs/legal-training-mail-constraints-2026-10-14.md ②）。
      ★旧：「★ロゴの画像も置かない」← ★要約で足した語（★原文に「ロゴ」は無い）。★2026-10-17・法務が★原文で訂正。
      ★いまは .portal-band にロゴと「ちのわ」を置く（★リンクにしない。★宣伝の言葉を並べない）。
   ★.portal-band … いちばん上の帯（★ロゴの色 #0E9F8F。★CSS の --teal とは別）。★.portal-band-mark … マーク（logo-reverse.svg）。
   ★.solo … 画面全体（中央寄せ）。★.solo-card … 白い札（★門の画面は .solo-narrow を足して細く）。★.solo-code … 番号の入力欄。★.solo-org … 依頼主の事業者名。
   ★.solo-link … 教材（国のページ）へのリンク。★ラベルは TRAINING_SOURCE_NOTICE の文で、★それがそのまま出典表示になる。
   ★.solo-video … 教材を埋め込む日の枠（16:9）。★.solo-done … 「見ました」を押したあとの印。★.solo-foot … 送り主の名乗り。 */
.portal-band{background:#0E9F8F;color:#fff;display:flex;align-items:center;gap:8px;padding:10px 16px;font-weight:700;font-size:16px;letter-spacing:.04em;}
.portal-band-mark{width:24px;height:24px;flex:0 0 auto;background:url(logo-reverse.svg) center/contain no-repeat;}
.solo{min-height:100vh;display:flex;flex-direction:column;align-items:center;padding:40px 16px;background:var(--sand);}
.solo-card{width:100%;max-width:640px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:28px;}
.solo-narrow{max-width:420px;}
/* ★ポータルの★札と札の間（★茂治・2026-10-18）。★隣り合う札にだけ（★エラー画面・門の前は★札が1枚なので★変わらない） */
.solo-card + .solo-card{margin-top:10px;}
/* ★門の中の★いちばん上：★誰のページか＋［ログアウト］（★茂治・2026-10-17）。★札と★同じ幅 */
.solo-who{width:100%;max-width:640px;display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 12px;font-size:15px;color:var(--grey);}
.solo-who b{color:var(--ink);font-size:17px;}
.solo-who form{margin:0;flex-shrink:0;}
.solo-org{font-size:15px;color:var(--grey);margin:0 0 6px;}
.solo-org b{color:var(--ink);font-size:17px;}
.solo-card h1{font-size:22px;line-height:1.5;margin:0 0 12px;}
.solo-video{position:relative;width:100%;aspect-ratio:16/9;background:#e4ecea;border-radius:10px;overflow:hidden;margin:16px 0 8px;display:flex;align-items:center;justify-content:center;color:var(--grey);font-size:15px;}
.solo-video iframe,.solo-video video{position:absolute;inset:0;width:100%;height:100%;border:0;}
.solo-link{display:flex;align-items:center;gap:10px;margin:16px 0 6px;padding:14px 16px;border:1.5px solid var(--line);border-radius:10px;background:var(--white);color:var(--ink);font-size:16px;font-weight:600;line-height:1.6;text-decoration:none;overflow-wrap:anywhere;}
.solo-link::after{content:"↗";margin-left:auto;color:var(--teal);font-size:18px;flex:none;}
.solo-link:hover{border-color:var(--sea);}
.solo-src{font-size:14px;color:var(--grey);line-height:1.7;margin:0 0 20px;overflow-wrap:anywhere;}
.solo-done{display:flex;gap:10px;align-items:center;background:#dff3ef;color:#046b5c;border:1px solid #b9e3da;border-radius:10px;padding:14px 16px;font-size:16px;font-weight:600;}
.solo-foot{max-width:640px;width:100%;margin-top:20px;font-size:14px;color:var(--grey);line-height:1.8;}
/* ★1文を★1つの塊にする（★茂治・2026-10-18）。★inline-block … ★入るなら★1文の途中で折り返さず★文の間で改行／
   ★入らない（★スマホ）なら★1文の中で★画面幅に合わせて折り返す。★nowrap は★使わない（★375px で溢れる） */
.solo-foot span{display:inline-block;}
.solo-code{font-size:22px;letter-spacing:.12em;text-align:center;}
/* ★門の合言葉の欄（★茂治・2026-10-17）：★上下 20px・★札いっぱい・★枠線を★薄く（★--line より明るい灰） */
.solo-card .solo-code{display:block;box-sizing:border-box;width:100%;margin:20px 0;padding:12px 14px;border:1px solid #E3EAE8;border-radius:10px;}
/* ★発行した合言葉を1度だけ見せる枠（.pass-show）。★等幅・大きく・4文字ずつ区切って見せる（★読み上げと打ち写しのため）。 */
.pass-show{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:30px;font-weight:700;letter-spacing:.14em;text-align:center;background:var(--sand);border:1px solid var(--line);border-radius:10px;padding:14px 10px;margin:12px 0;user-select:all;}

/* ★掲示の紙（.poster）。★事業所に1枚貼る（★2026-10-14 茂治：URL は事業所ごとに固定、合言葉は個人ごと）。
   ★A4 縦1枚。★見出し（.poster-h）／QR（.poster-qr。90mm。★離れて読めるように大きく）／一言（.poster-note）。
   🚨 ★事業者番号・合言葉を紙に書かない（★QRと同じ紙に在ると、撮った人が両方持つ。法務）。
   🚨 ★壁の紙は★保護者・こどもも読む。★研修の中身・氏名・事業者名を載せない（門の前に何も出さない形と同じ）。 */
.poster{width:100%;max-width:190mm;margin:0 auto;text-align:center;padding:20mm 10mm;background:#fff;}
.poster-h{font-size:32px;font-weight:800;margin:0 0 10mm;line-height:1.4;}
.poster-qr{width:90mm;height:90mm;margin:0 auto 10mm;}
.poster-qr img,.poster-qr svg{width:100%;height:100%;display:block;}
.poster-note{font-size:20px;line-height:1.8;margin:0;}

@media print{
  .no-print{display:none;}
  .poster{padding:10mm 0;}
}

/* 背景画像はブラウザ既定では印刷されない（「背景のグラフィック」がオフのとき）。
   Windowsの強制カラーモードでも同様に消える。この事業は法15条の帳簿保存(5年)と
   定期報告(年1回)が中核で、帳票のPDF出力を作ることになる。そのとき黙って消えると
   気づきにくいので、ロゴだけ強制的に印刷させる。
   なお帳票側にロゴを置くときは、背景ではなく <img src="assets/logo.svg" alt="ちのわ">
   を使うほうが確実（淡色地なので logo.svg のほう）。 */
@media print{
  .sidebar .brand .logo,
  .auth-brand .logo,
  .wizard-top .logo,
  .lp-top .logo .m,
  .portal-top .logo .m{
    print-color-adjust:exact;
    -webkit-print-color-adjust:exact;
  }
}
