/* 後半戦の作戦ボード（/kouhansen-board/）専用。クラスは kb- で始め、テーマの style.css は変えない（asset_version の更新は不要）
   設計: 02_joyoflife-site/design/作戦ボード_画面設計_20261022.md §1（色・文字・タップ）。中身を変えたら kb.v2.css に名前を変える（公開キャッシュ対策）
   色の決まり: 本文の文字に --c-primary(#569da2)・--c-accent を使わない。意味のある文字・線は --c-ink。赤はエラーだけ */
.kb {
  --kb-ink: var(--c-ink);
  --kb-on-ink: #fff;
  --kb-tint: color-mix(in srgb, var(--c-primary) 8%, var(--c-surface));
  --kb-edge: color-mix(in srgb, var(--c-primary) 28%, var(--c-line));
  --kb-field-edge: color-mix(in srgb, var(--c-text) 50%, var(--c-surface));
  --kb-flag: color-mix(in srgb, var(--c-accent) 70%, #000);
  --kb-err: #b42318;
  --kb-err-bg: #fdecea;
  --kb-tap: 48px;
  font-size: 18px; line-height: 1.9; color: var(--c-text);
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .kb {
    --kb-ink: color-mix(in srgb, var(--c-primary) 42%, #fff); --kb-on-ink: #121516;
    --kb-tint: color-mix(in srgb, var(--c-primary) 12%, var(--c-surface)); --kb-edge: color-mix(in srgb, var(--c-primary) 35%, var(--c-line));
    --kb-flag: color-mix(in srgb, var(--c-accent) 45%, #fff); --kb-err: #ffb4a9; --kb-err-bg: color-mix(in srgb, #ffb4a9 12%, var(--c-surface));
  }
}
:root[data-theme="dark"] .kb {
  --kb-ink: color-mix(in srgb, var(--c-primary) 42%, #fff); --kb-on-ink: #121516;
  --kb-tint: color-mix(in srgb, var(--c-primary) 12%, var(--c-surface)); --kb-edge: color-mix(in srgb, var(--c-primary) 35%, var(--c-line));
  --kb-flag: color-mix(in srgb, var(--c-accent) 45%, #fff); --kb-err: #ffb4a9; --kb-err-bg: color-mix(in srgb, #ffb4a9 12%, var(--c-surface));
}
.prose .kb, .kb { font-size: 18px; }
/* このツールの中は、すべて端末のフォントだけを使う（2026-10-22）。
   テーマの Web フォント（Google Fonts の Noto Sans JP）は文字の範囲ごとに分割ファイルを取りに行くため、入力した名前・予定の文字や、
   選んだ項目で変わる表示（「答えない」・北海道など）に応じて外部への要求が起き、入力の手がかりが外へ出る（ネットログで確認済み）。法務 A6 */
.kb { --kb-ff-local: system-ui, -apple-system, "Hiragino Sans", "Hiragino Kaku Gothic ProN", "Yu Gothic UI", "Yu Gothic", Meiryo, sans-serif; --ff-head: var(--kb-ff-local); --ff-body: var(--kb-ff-local); }
.kb, .kb * { font-family: var(--kb-ff-local) !important; }
.kb [hidden] { display: none !important; }
.kb :focus-visible { outline: 3px solid var(--kb-ink); outline-offset: 2px; }
.kb p { margin: 0 0 1em; }
.kb a { color: var(--kb-ink); }
.prose .kb h2 { margin: 48px 0 16px; font-size: clamp(22px, 2.8vw, 26px); }
.prose .kb h3 { margin: 32px 0 12px; font-size: 20px; }
.kb h2:focus, .kb h3:focus { outline: none; }
.kb h2[tabindex="-1"]:focus-visible { outline: none; }   /* 計算後に移す見出しは操作できる部品ではないため枠を出さない（読み上げの位置合わせだけ） */
.kb-sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* JavaScript が動くときだけツールを出す（動かないときは noscript の案内と「数字の出どころ」だけ） */
.kb:not(.is-js) .kb-tool { display: none; }

.kb-eyebrow { display: inline-block; margin: 0 0 12px !important; padding: 4px 12px; border-radius: 999px; background: var(--c-tint); color: var(--kb-ink); font: 700 14px/1.6 var(--ff-head); letter-spacing: .06em; }
.kb-lead { font-size: 18px; }
.kb-privacy, .kb-notice, .kb-info {
  margin: 0 0 24px !important; padding: 14px 18px; border-left: 4px solid var(--kb-ink); border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  background: var(--kb-tint); font-size: 16px; line-height: 1.8;
}
.kb-notice { font-size: 15px; color: var(--c-sub); }
/* 最初の画面に「生まれた年」の欄を近づけるため、計算例と送信しない旨は小さく詰める（2026-10-23） */
.kb-example { margin: 0 0 12px !important; }
.kb .kb-privacy { margin: 0 0 16px !important; padding: 6px 10px; font-size: 15px; line-height: 1.7; letter-spacing: 0; }   /* 2026-10-24 推奨B2: 文が長くなったため左右の余白と字間を詰め、375px で2行（21字×2）に収める */
.kb-privacy a { color: var(--kb-ink); }
/* 送信しない旨の「くわしく」（#kb-q3）は preventDefault せず、ふつうのページ内リンクとしてなめらかに移動する（2026-10-24 推奨B2）。
   このCSSはこのページだけで読むため html に付けてよい。ヘッダーの高さ分は テーマの scroll-padding-top で空く。動きを減らす設定では付けない */
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }
.prose .kb #kb-h-input { margin-top: 8px; }
.kb-notice a { color: var(--kb-ink); }
.kb-restore { padding: 14px 18px; border: 1.5px solid var(--kb-edge); border-radius: var(--radius-sm); margin: 0 0 24px; }
.kb-restore p { margin: 0 0 8px; }

/* 入力 */
.kb-field { margin: 0 0 24px; border: 0; padding: 0; min-width: 0; }
.kb-label, .kb-field > legend { display: block; margin: 0 0 8px; padding: 0; font: 700 17px/1.5 var(--ff-head); }
.kb-req { margin-left: 8px; font-size: 14px; font-weight: 700; color: var(--c-sub); }
.kb-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.kb-input, .kb-select, .kb-textarea {
  box-sizing: border-box; min-height: var(--kb-tap); padding: 10px 14px; border: 1.5px solid var(--kb-field-edge); border-radius: var(--radius-sm);
  background: var(--c-surface); color: var(--c-text); font: inherit; font-size: 18px; line-height: 1.5;
}
.kb-input--year { width: 7.5em; font-variant-numeric: tabular-nums; }
.kb-input--age { width: 5.5em; }
.kb-select { width: 100%; max-width: 16em; }
.kb-textarea { width: 100%; min-height: 96px; }
.kb-input--wide { width: 100%; }
.kb-input[aria-invalid="true"], .kb-select[aria-invalid="true"], .kb-textarea[aria-invalid="true"], .kb-choices[aria-invalid="true"] { border: 2.5px solid var(--kb-err); }
.kb-choices[aria-invalid="true"] { border-radius: var(--radius-sm); padding: 6px; }
.kb-wareki { color: var(--c-sub); font-size: 17px; }
.kb-hint { margin: 8px 0 0 !important; color: var(--c-sub); font-size: 15px; line-height: 1.7; }
.kb-err { margin: 8px 0 0 !important; color: var(--kb-err); font-size: 16px; font-weight: 700; line-height: 1.6; }
.kb-err::before { content: "！ "; }

/* ラジオの大きな枠（行全体が押せる。ネイティブの input をそのまま使う） */
.kb-choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(6.5em, 1fr)); gap: 8px; }
.kb-choice { position: relative; display: flex; align-items: center; gap: 10px; min-height: 56px; padding: 8px 14px; box-sizing: border-box;
  border: 1.5px solid var(--kb-field-edge); border-radius: var(--radius-sm); background: var(--c-surface); cursor: pointer; font-weight: 600; line-height: 1.4; }
.kb-choice input { width: 22px; height: 22px; margin: 0; flex: 0 0 auto; accent-color: var(--kb-ink); }
.kb-choice:has(input:checked) { border: 2.5px solid var(--kb-ink); background: var(--kb-tint); padding: 7px 13px; }
.kb-choice:has(input:focus-visible) { outline: 3px solid var(--kb-ink); outline-offset: 2px; }
.kb-choice input:focus-visible { outline: none; }

/* 折りたたみ */
.kb-details { margin: 0 0 16px; border: 1.5px solid var(--c-line); border-radius: var(--radius-sm); background: var(--c-surface); }
.kb-details > summary { display: flex; align-items: center; gap: 10px; min-height: var(--kb-tap); padding: 8px 16px; cursor: pointer; font-weight: 700; list-style: none; }
.kb-details > summary::-webkit-details-marker { display: none; }
.kb-details > summary::before { content: "▸"; color: var(--kb-ink); transition: transform .15s; }
.kb-details[open] > summary::before { transform: rotate(90deg); }
.kb-details__body { padding: 4px 16px 16px; }

/* ボタン */
.kb-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: var(--kb-tap); padding: 10px 22px; box-sizing: border-box;
  border: 1.5px solid var(--kb-ink); border-radius: 999px; background: transparent; color: var(--kb-ink); font: 700 17px/1.4 var(--ff-head); cursor: pointer; text-align: center; }
.kb-btn:hover { background: var(--kb-tint); }
.kb-btn--main { width: 100%; background: var(--kb-ink); color: var(--kb-on-ink); font-size: 19px; border-width: 0; min-height: 56px; }
.kb-btn--main:hover { background: color-mix(in srgb, var(--kb-ink) 88%, #000); }
.kb-btn--text { min-height: var(--kb-tap); padding: 8px 4px; border: 0; border-radius: 6px; text-decoration: underline; text-underline-offset: 3px; }
.kb-btns { display: grid; gap: 12px; }
@media (min-width: 560px) { .kb-btns { grid-template-columns: 1fr 1fr; } }
.kb-after { margin: 10px 0 0 !important; color: var(--c-sub); font-size: 15px; text-align: center; }
.kb-status { min-height: 1.5em; margin: 12px 0 0 !important; font-weight: 700; color: var(--kb-ink); }

/* エラーの一覧 */
.kb-errsum { margin: 0 0 24px; padding: 14px 18px; border: 2.5px solid var(--kb-err); border-radius: var(--radius-sm); background: var(--kb-err-bg); color: var(--c-text); }
:root[data-theme="dark"] .kb-errsum { background: var(--kb-err-bg); }
.kb-errsum p { margin: 0 0 6px; font-weight: 700; }
.kb-errsum ul { margin: 0; padding-left: 1.2em; }
.kb-errsum a { display: inline-block; min-height: 40px; padding: 6px 0; color: var(--c-text); text-decoration: underline; }

/* 季節のカード */
.kb-summary { font-size: 18px; }
.prose ul.kb-cards, .kb-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0 0 20px; padding: 0; list-style: none; }
@media (min-width: 720px) { .kb-cards { grid-template-columns: repeat(var(--kb-n, 4), minmax(0, 1fr)); } }
.prose .kb-cards li, .kb-card { margin: 0; }
.kb-card { padding: 16px 16px 14px; border: 1.5px solid var(--kb-edge); border-radius: var(--radius); background: var(--kb-tint); }
.kb-card__name { display: block; font: 700 18px/1.4 var(--ff-head); }
.kb-card__pre { display: block; font-size: 18px; line-height: 1.4; margin-top: 6px; }
.kb-card__val { display: block; white-space: nowrap; }
.kb-card__num { display: inline-block; font: 800 52px/1.1 var(--ff-head); font-variant-numeric: tabular-nums; color: var(--kb-ink); letter-spacing: -.01em; overflow-wrap: normal; }
.kb-card__num.is-range { font-size: 40px; }
.kb-card__unit { margin-left: 4px; font-size: 18px; font-weight: 700; }
.kb-card__note { display: block; margin-top: 6px; color: var(--c-sub); font-size: 15px; line-height: 1.5; }
@media (min-width: 720px) { .kb-card__num { font-size: 64px; } .kb-card__num.is-range { font-size: 46px; } }
.kb-meta { color: var(--c-sub); font-size: 16px; }

/* 家族・予定の行 */
.kb-item { margin: 0 0 16px; padding: 14px 14px 6px; border: 1.5px solid var(--c-line); border-radius: var(--radius-sm); }
.kb-item .kb-field { margin-bottom: 14px; }
.kb-item .kb-choices { grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* 年表（縦・1行1年・行の区切りは点線） */
.prose ol.kb-tl, .kb-tl { list-style: none; margin: 0 0 12px; padding: 0; border-top: 1px dotted var(--kb-field-edge); }
.prose .kb-tl li, .kb-tl li { margin: 0; padding: 10px 4px; border-bottom: 1px dotted var(--kb-field-edge); font-size: 16px; line-height: 1.7; }
.prose .kb-tl li::marker { content: none; }
.kb-tl__hd { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 12px; }
.kb-tl__y { font-weight: 800; font-variant-numeric: tabular-nums; }
.kb-tl__w { color: var(--c-sub); font-size: 14px; }
.kb-tl__a { font-weight: 700; font-variant-numeric: tabular-nums; }
.kb-tl__now { padding: 0 8px; border-radius: 999px; background: var(--kb-tint); color: var(--kb-ink); font-size: 14px; font-weight: 700; }
.kb-tl__fam { display: block; padding-left: 1em; }
.kb-tl__dog { display: inline-block; margin-right: 4px; padding: 0 6px; border: 1px solid var(--kb-field-edge); border-radius: 6px; font-size: 13px; line-height: 1.5; color: var(--c-sub); }
.kb-tl__plan { display: block; padding-left: 1em; color: var(--kb-flag); font-weight: 700; }
.kb-tl__mark { display: block; margin-top: 6px; color: var(--kb-ink); font-weight: 700; text-align: center; }
.kb-tl__mark::before, .kb-tl__mark::after { content: " ┄┄ "; color: var(--c-sub); font-weight: 400; }
.kb-tl-after { color: var(--c-sub); }

/* 共有画像のプレビュー */
.kb-share { margin: 16px 0 0; }
.kb-share figure { margin: 0 0 16px; }
.kb-share img { display: block; width: 100%; height: auto; border: 1px solid var(--c-line); border-radius: var(--radius-sm); }
.kb-share figcaption { margin: 6px 0 8px; font-size: 15px; color: var(--c-sub); text-align: left; }

/* メルマガ（準備中の案内）・作戦会議 */
.kb-nl { margin: 24px 0; padding: 20px; border: 1px solid var(--kb-edge); border-radius: var(--radius); background: var(--kb-tint); }
.kb-nl__eyebrow { margin: 0 0 6px !important; font: 700 13px/1.4 var(--ff-head); letter-spacing: .12em; color: var(--kb-ink); }
.kb-nl__title { margin: 0 0 8px !important; font: 800 20px/1.5 var(--ff-head); }
.kb-nl__small { margin: 0 !important; color: var(--c-sub); font-size: 15px; }
.kb-consult a { display: inline-block; padding: 10px 0; }

/* 数字の出どころ */
.kb-source dl { margin: 0 0 16px; }
.kb-source dt { font-weight: 700; }
.kb-source dd { margin: 0 0 10px; }
.kb-small { font-size: 15px; color: var(--c-sub); line-height: 1.8; }

@media (max-width: 400px) {
  .kb-card { padding: 14px 12px 12px; }
  .kb-card__num.is-range { font-size: 28px; }
  .kb-card__unit { margin-left: 2px; }
}
@media (prefers-reduced-motion: reduce) {
  .kb *, .kb *::before { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* ---- 印刷（A4縦1枚）。生まれた年月は印刷しない（入力欄ごと隠し、印刷用の1枚には書かない） ----
   印刷用の1枚 .kb-print の見た目は @media print の外に書く（画面では display:none。印刷前に kb-app が A4 の印刷範囲の幅で測り、
   はみ出すときだけ zoom で縮めて1枚に収めるため）。 */
.kb-print { display: none; width: 186mm; box-sizing: border-box; color: #111; background: #fff; font-size: 12pt; line-height: 1.55; }
.kb-print.is-measure { display: block; position: absolute; left: -10000px; top: 0; visibility: hidden; }
.kb-print * { color: #111 !important; background: transparent !important; }
.kb-print h2 { margin: 0 !important; padding: 0 !important; border: 0 !important; font-size: 18pt !important; font-weight: 800 !important; line-height: 1.3 !important; }
.kb-print h2::after { display: none !important; }
.kb-print h3 { margin: 0 0 2mm !important; padding: 0 !important; border: 0 !important; font-size: 12pt !important; font-weight: 700 !important; line-height: 1.4 !important; }
.kb-print p { margin: 0; }
.kb-p-hd { display: flex; justify-content: space-between; align-items: baseline; border-bottom: 1px solid #555; padding-bottom: 2mm; margin-bottom: 3mm; }
.kb-p-date { font-size: 10.5pt; }
.kb-p-sec { margin: 0 0 2.5mm; padding-bottom: 2.5mm; border-bottom: 1px solid #bbb; }
.kb-p-summary { margin: 0 0 2mm !important; font-size: 10.5pt; }
.kb-p-cards { display: flex; gap: 3mm; margin: 0 0 2mm !important; padding: 0 !important; list-style: none; }
.kb-p-cards li { flex: 1; margin: 0 !important; padding: 2mm 3mm; border: 1px solid #555; border-radius: 3mm; font-size: 11pt; white-space: nowrap; }
.kb-p-cards b { font-size: 20pt; font-variant-numeric: tabular-nums; }
.kb-p-cards.is-range b { font-size: 15pt; }
.kb-p-notice { font-size: 10.5pt; }
.kb-p-tl { columns: 2; column-gap: 8mm; margin: 0 !important; padding: 0 !important; list-style: none; font-size: 10.5pt; line-height: 1.45; }
.kb-p-tl li { break-inside: avoid; margin: 0 !important; padding: .6mm 0; border-bottom: 1px dotted #888; }
.kb-p-tl li::marker { content: none; }
.kb-p-tl .kb-p-sub { display: inline; margin-left: 2.5mm; }   /* 1年を1行に詰める（長いときだけ折り返す） */
.kb-p-lines { height: 6.5mm; border-bottom: 1px solid #555; }
.kb-p-note { font-size: 12pt; white-space: pre-wrap; }
.kb-p-src { font-size: 9.5pt !important; line-height: 1.5; margin: 0 0 1mm !important; overflow-wrap: anywhere; }
@page { size: A4 portrait; margin: 12mm; }
@media print {
  html, body { background: #fff !important; color: #111 !important; }
  .hdr, .ftr, .nl-band, .skip, .post__hd, .crumbs { display: none !important; }
  .post__wrap, .prose { padding: 0 !important; margin: 0 !important; max-width: none !important; }
  .kb > :not(.kb-print) { display: none !important; }
  .kb-print { display: block !important; }
}
