
/* ============================================================
   デザイン規約v2（2026-09-03・ユーザー指摘「フォントとかすげーAIっぽいし安っぽい」対応。
   2026-09-01全面リスキンの上に追改訂）。参照する空気は日本のB2Bデータメディア
   （日経・帝国データバンク・建設通信新聞のような「硬くて信頼できる」情報製品）。
   可愛さ・スタートアップ風グラデーション・絵文字・角丸カード乱用・汎用ブルー基調は禁止。
   - 色・サイズは必ずこの:root変数を参照する。テンプレート側・このファイルの他の場所を含め、
     16進の生値を直書きしない（例外: このトークン定義そのもの）。それ以外は全部var()参照にする
   - パレット: 本文は墨(--ink)・ブランドとリンクは濃紺1色(--primaryと--linkを同値に統一。
     「クリック可能」の記号はリンクの色そのものではなく、hoverの下線で示す＝色数を絞る)。
     --accent(朱)は「有料」「締切」等の強調表示など限定用途のみに使い、通常のリンクhover・
     タブhover等の汎用インタラクションには使わない（focus-visibleのアウトリングのみ、
     キーボード操作可視化という別目的の慣習として例外的に維持する）
   - 非活性要素（例: 未実装のタブ）は--faint色+cursor:default+「準備中」バッジで、
     クリックできるように見える見た目を絶対に与えない（hrefも付けない）
   - 間隔（margin/padding/gap）は4pxの倍数のみ。唯一の例外は主要/副次ボタンのpadding
     （9px 16pxに統一。ボタン角丸カ所は別途デザイン規約で固定値として明記）
   - 行間: 本文(.lead/.about-list/.gap-list/.side-box等)は1.7、表・高密度リスト
     (.data-table/.cat-card__subs/.pref-detail__list)は1.5
   - 見出しの序列: h1(--fs-h1)=ページ名のみ・1ページに1個(トップのみ例外でヒーロー
     タグラインをh1として使う)。h2(--fs-h2)=節の見出し。2026-09-04デザインv3で見出しの書体を
     本文と分離した: 見出し(.h1/.h2/.hero-tagline)は明朝(--font-serif=Noto Serif JP)+
     太さ700+letter-spacing .01em、本文は游ゴシック優先(--font-sans)。書体差そのものが
     「本文と違う特別な要素」の記号になる（2026-09-01〜2026-09-03は書体を変えず太さだけで
     差をつけていたが、公開後もユーザーから丸さの指摘が続いたため書体を変える判断に切替）。
     タイルの数字(--fs-num)は見出しではなくデータなのでh1/h2は使わずただの大きい文字として
     扱う（書体は本文の游ゴシックのまま・letter-spacingも付けない）。数値を表示する要素は
     必ずfont-variant-numeric: tabular-numsにする
   - 面と線: カード類（.tile/.region-card/.filter-block/.side-box/.ladder-step等）は
     角丸4px以下・影は原則使わない（水平罫線+余白で区切る「表組み中心」の見た目を基本形とする。
     ピル/バッジ(border-radius:999px)はカードではないため対象外）
   - 案件ページ(/case/)のロック表示: 2026-09-05 DECISION_LOG「原本公開の最終形」で予算・見通し
     段は公告・落札を1件以上持つ案件では無料の全件表示に変わった（旧SPEC「予算・見通し層の
     行は課金者のみ表示」は撤回）。.ladder-step--lockedは公告・落札が1件も無い「公告前案件」
     専用ページ(_render_locked_case_page())にのみ残る（--bg-soft地に--faint文字+鍵アイコン、
     中身は見せない。理由は課金ではなく案件の存在自体が未確認なため）
   ============================================================ */
/* 色と文字の token（2026-09-26 トップ第6版の見本・PO了承。入札ページの見本 9/25 21:17 と同じ）。
   光(:root)と闇（OS の設定が闇のとき=@media prefers-color-scheme、または <html data-theme="dark">）の
   両方で同じ名前の token を定義する。色の生値はこの3か所の定義にだけ書き、他は全部 var() で参照する。
   文字の大きさは 40 / 30 / 22 / 18 / 16 / 14 / 13 の7段だけ（旧名 --fs-hero/--fs-h1/--fs-num/--fs-pill は
   この7段への別名）。見出しは明朝(--font-serif)、本文はゴシック(--font-sans)。 */
:root {
  color-scheme: light;
  --ink: #1a1a1a;
  --ink-2: #3b3a37;
  --muted: #5a5854;
  --faint: #6f6b64;
  --line: #e6e4e0;
  --line-soft: #eeece7;
  --line-strong: #8a857d;
  --primary: #17315c;
  --primary-soft: #3d5982;
  --primary-tint: #e9eef6;
  --link: #17315c;
  --accent: #b0392e;
  --accent-line: #efd7d5;
  --bg: #fcfcfa;
  --bg-soft: #f5f3ef;
  --paper: #ffffff;
  --ok: #166534;
  --ok-line: #c8e2d2;
  --ok-bg: #eaf5ee;
  --warn: #8a3b3b;
  --warn-line: #e3c7c7;
  --warn-bg: #f8ecec;
  --heat-0: #eef1f6;
  --heat-1: #cdd8ea;
  --heat-2: #9fb3d4;
  --heat-3: #5f7fae;
  --heat-4: #17315c;
  --map-daily: var(--primary);
  --map-partial: #5b7ba6;
  --map-forecast: #c7d3e3;
  --map-none-fill: #f1f4f8;
  --map-hard-base: #eef1f4;
  --map-hard-line: #a7b1ba;
  --fs-display: 40px;
  --fs-title: 30px;
  --fs-h2: 22px;
  --fs-lead: 18px;
  --fs-body: 16px;
  --fs-meta: 14px;
  --fs-caption: 13px;
  --fs-hero: var(--fs-display);
  --fs-h1: var(--fs-title);
  --fs-num: var(--fs-title);
  --fs-pill: var(--fs-caption);
  --font-sans: "Yu Gothic Medium", "YuGothic", "Hiragino Kaku Gothic ProN", "Hiragino Sans", "Noto Sans JP", sans-serif;
  --font-serif: "Noto Serif JP", "Hiragino Mincho ProN", serif;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --ink: #ece9e3;
    --ink-2: #d6d2ca;
    --muted: #b8b3aa;
    --faint: #a29d94;
    --line: #34312c;
    --line-soft: #2a2824;
    --line-strong: #6e695f;
    --primary: #9fbbea;
    --primary-soft: #7f9dcf;
    --primary-tint: #1d2638;
    --link: #9fbbea;
    --accent: #f19185;
    --accent-line: #4a2723;
    --bg: #161513;
    --bg-soft: #211f1b;
    --paper: #1b1a17;
    --ok: #86d4a0;
    --ok-line: #2a4a34;
    --ok-bg: #15271b;
    --warn: #f2a7a7;
    --warn-line: #4a2c2c;
    --warn-bg: #2a1c1c;
    --heat-0: #23262d;
    --heat-1: #2c3a55;
    --heat-2: #3d5580;
    --heat-3: #6a89c0;
    --heat-4: #9fbbea;
    --map-partial: #6a89c0;
    --map-forecast: #3d5580;
    --map-none-fill: #23262d;
    --map-hard-base: #25272b;
    --map-hard-line: #5a626b;
  }
}
:root[data-theme="dark"] {
    color-scheme: dark;
    --ink: #ece9e3;
    --ink-2: #d6d2ca;
    --muted: #b8b3aa;
    --faint: #a29d94;
    --line: #34312c;
    --line-soft: #2a2824;
    --line-strong: #6e695f;
    --primary: #9fbbea;
    --primary-soft: #7f9dcf;
    --primary-tint: #1d2638;
    --link: #9fbbea;
    --accent: #f19185;
    --accent-line: #4a2723;
    --bg: #161513;
    --bg-soft: #211f1b;
    --paper: #1b1a17;
    --ok: #86d4a0;
    --ok-line: #2a4a34;
    --ok-bg: #15271b;
    --warn: #f2a7a7;
    --warn-line: #4a2c2c;
    --warn-bg: #2a1c1c;
    --heat-0: #23262d;
    --heat-1: #2c3a55;
    --heat-2: #3d5580;
    --heat-3: #6a89c0;
    --heat-4: #9fbbea;
    --map-partial: #6a89c0;
    --map-forecast: #3d5580;
    --map-none-fill: #23262d;
    --map-hard-base: #25272b;
    --map-hard-line: #5a626b;
}
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: 1.7; /* 本文の行間は1.7 */
  color: var(--ink);
  background: var(--bg);
  font-variant-numeric: tabular-nums; /* 数値は等幅（データ製品の要。全要素の既定にする） */
  overflow-wrap: break-word;
  -webkit-text-size-adjust: 100%;
}
/* リンク=--linkを独占させる（クリック可能の記号は色そのもの）。--accentは「有料」「締切」等の
   限定用途に予約するため、hoverは色を変えず下線だけを足す（色数を絞るデザインv2方針） */
a { color: var(--link); text-decoration: none; }
a:hover { text-decoration: underline; }
/* フォーカス可視（キーボード操作）。ここだけはキーボード操作の可視化という別目的の慣習として
   --accentを維持する（コンテンツの強調用途ではないため「限定用途のみ」の対象外とする） */
a:focus-visible, button:focus-visible, input:focus-visible,
select:focus-visible, summary:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
table { border-collapse: collapse; width: 100%; }
.page-wrap { max-width: 1120px; margin: 0 auto; padding: 24px 24px 48px 24px; }

/* ベータ版のお知らせ（2026-09-24 PO指示・同日改稿）。全ページの1行は警告色の薄い帯、トップの箱は同色の枠。新しい色・pxは足さない */
/* 2026-09-28 PO「もっと目立たせて」: 無彩色のまま黒地に白の太字（闇の設定では白地に黒）。 */
.dev-notice { background: var(--ink); color: var(--bg); font-size: var(--fs-body); line-height: 1.6; font-weight: 700; }
.dev-notice__inner { max-width: 1120px; margin: 0 auto; padding: 12px 24px; color: var(--bg); }
.dev-notice__inner strong { font-weight: 900; }
.dev-notice__link { color: var(--bg); text-decoration: underline; font-weight: 700; white-space: nowrap; }
.dev-notice__sep { color: var(--bg); margin: 0 8px; }
.dev-notice-box { background: var(--bg-soft); border: 1px solid var(--line); border-radius: 4px; padding: 16px 20px; margin: 0 0 24px 0; }
.dev-notice-box .h2 { margin: 0 0 8px 0; color: var(--ink); }
.dev-notice-box p { margin: 0 0 8px 0; font-size: var(--fs-body); line-height: 1.7; }
.dev-notice-box__actions { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 0; }
@media (max-width: 600px) {
  .dev-notice__inner { padding: 8px 16px; }
  .dev-notice__link { display: block; white-space: normal; }
  .dev-notice__sep { display: none; }
  .dev-notice-box { padding: 12px 16px; }
  .dev-notice-box__actions .btn { flex: 1 1 100%; }
}

/* ヘッダー（2026-09-26 トップ第6版の見本）: 紙の地に下罫線1px。ロゴは明朝900の紺、ナビは<ul>、
   右端に登録の小さい主ボタン(.btn-s)。860px以下はナビを2行目に回して横にスクロールする
   （見本はナビを隠すが、内側のページで行き先を失わないように残す）。 */
.site-header { background: var(--bg); border-bottom: 1px solid var(--line); }
.site-header__inner {
  max-width: 1120px; margin: 0 auto; padding: 0 24px; min-height: 64px;
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px 28px;
}
.logo {
  font-family: var(--font-serif); font-size: var(--fs-h2); font-weight: 900; color: var(--primary);
  letter-spacing: .02em; text-decoration: none;
}
/* ロゴはリンクの色の規約から外す（hover で下線を付けない＝ヘッダーが点滅して見えないように） */
.logo:hover { color: var(--primary); text-decoration: none; }
.site-nav ul { display: flex; gap: 0 20px; list-style: none; margin: 0; padding: 0; font-size: var(--fs-meta); }
.site-nav a { display: inline-block; padding: 8px 0; color: var(--ink-2); border-bottom: 2px solid transparent; white-space: nowrap; }
.site-nav a:hover { color: var(--primary); text-decoration: underline; }
.site-nav a.active { color: var(--primary); border-bottom-color: var(--primary); font-weight: 700; }
.spacer { flex-grow: 1; }
.head-actions { display: flex; align-items: center; gap: 16px; }
.last-crawl-badge { font-size: var(--fs-caption); color: var(--muted); white-space: nowrap; }

/* 見出し（2026-09-04デザインv3・明朝(--font-serif)。本文の游ゴシックと書体そのものを変えて
   「特別な要素」の記号にする。太さ700+letter-spacingは従来どおり併用） */
.h1 { font-family: var(--font-serif); font-size: var(--fs-h1); font-weight: 700; letter-spacing: .01em; margin: 8px 0 4px 0; }
/* h2は単独でも(.section-titleでラップされていなくても)節見出しとして下線が付く。
   .section-title内で使う場合は下線を親のflex行全幅の罫線に譲る(下のオーバーライド参照) */
.h2 {
  font-family: var(--font-serif);
  font-size: var(--fs-h2); font-weight: 700; letter-spacing: .01em; margin: 0;
  border-bottom: 1px solid var(--line); padding-bottom: 8px;
}
.breadcrumb { font-size: var(--fs-meta); color: var(--muted); margin-top: 4px; }
.breadcrumb a { color: var(--link); }

/* パンくず〜見出しの下線 */
.org-header {
  display: flex; align-items: flex-end; gap: 20px; margin-top: 12px;
  border-bottom: 1px solid var(--line); padding-bottom: 16px;
}
.org-header__meta { font-size: var(--fs-meta); color: var(--muted); margin-top: 8px; }

.lead { font-size: var(--fs-body); color: var(--ink); line-height: 1.7; max-width: 900px; }
.lead--warn { color: var(--warn); }

.section-title {
  display: flex; align-items: baseline; gap: 12px; border-bottom: 1px solid var(--line);
  padding-bottom: 8px; margin-top: 48px;
}
.section-title .h2 { border-bottom: none; padding-bottom: 0; } /* 下線は.section-title側が全幅で引く */
.section-title--lg-gap { margin-top: 64px; } /* 表など内容量の多い節の直後に使う広め間隔 */
.section-title__note { font-size: var(--fs-meta); color: var(--muted); }

/* ヒーロー（トップページ）: タグラインを大きく、直下に検索窓を主役サイズで */
.hero-search { margin-top: 20px; }
.hero-tagline {
  font-family: var(--font-serif); font-size: var(--fs-hero); font-weight: 700;
  letter-spacing: .01em; color: var(--ink); margin: 8px 0 24px 0;
} /* トップページのh1代わり（見出し扱い＝明朝） */
/* エンティティタブ（2026-08-31 指摘1で実体化。案件=活性表示／団体・商材=実リンク／
   企業=非活性。非活性の見た目規約は下の.is-disabled/.badge-wipを参照）。下線タブ形式 */
.search-tabs {
  display: flex; gap: 24px; max-width: 820px; font-size: var(--fs-body); font-weight: 700;
  border-bottom: 1px solid var(--line); overflow-x: auto;
}
/* white-space:nowrapで狭い画面でもタブの文字が途中で折り返さないようにする
   （収まらない分は.search-tabsのoverflow-x:autoで横スクロール） */
.search-tab { color: var(--muted); padding: 8px 4px; display: inline-block; border-bottom: 2px solid transparent; white-space: nowrap; }
/* タブはリンクでも下線を付けない。hoverは--accentではなく活性色(--primary)を先取りして見せる
   （--accentは「有料」「締切」等の限定用途に予約するデザインv2方針） */
a.search-tab:hover { color: var(--primary); text-decoration: none; }
.search-tab.active { color: var(--primary); border-bottom-color: var(--primary); }
.search-tab.is-disabled {
  color: var(--faint); cursor: default; display: inline-flex; align-items: center; gap: 8px;
}
.badge-wip {
  font-size: var(--fs-pill); color: var(--faint); border: 1px solid var(--line);
  background: var(--bg-soft); border-radius: 999px; padding: 0 8px; line-height: 1.6;
}
/* 検索窓（2026-09-26 トップ第6版の見本）: 紺の枠1.5px・高さ52の入力・薄い地の選択・紺の検索ボタン */
.search-box {
  display: flex; align-items: stretch; gap: 4px; max-width: 820px; margin-top: 16px; padding: 4px;
  background: var(--paper); border: 1.5px solid var(--primary); border-radius: 4px;
}
.search-input {
  flex-grow: 1; min-width: 0; height: 52px; border: none; border-radius: 4px;
  background: transparent; color: var(--ink); padding: 0 16px; font-family: inherit; font-size: var(--fs-lead);
}
.search-select {
  height: 52px; border: none; border-radius: 4px; background: var(--bg-soft); color: var(--ink);
  padding: 0 12px; font-family: inherit; font-size: var(--fs-body);
}
.search-submit { flex: 0 0 auto; }
/* 開発中の選択（押せない）: 非活性の規約どおり --faint の文字・cursor:default（2026-09-26 PO 指示） */
.search-select:disabled { color: var(--faint); cursor: default; }
@media (max-width: 640px) {
  .search-box { flex-wrap: wrap; }
  .search-input { flex-basis: 100%; }
  .search-select, .search-submit { flex: 1 1 0; }
}
.stats-line { display: flex; gap: 24px; margin-top: 16px; font-size: var(--fs-meta); color: var(--muted); flex-wrap: wrap; }
.stats-line strong { color: var(--ink); }
/* 「全行に出典リンクつき」はリンクではない強調テキストなので--accent（--linkは使わない） */
.stats-line .accent { color: var(--accent); }

/* ボタンの3段（2026-09-26 トップ第6版の見本・PO了承）: 主=紺の塗り（高さ52・1画面に1つ）／
   次=枠線（同じ高さ）／3段目=矢印つきの文字のリンク(.go)。.btn-s は高さ40の小さい版（ヘッダー用） */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 52px; padding: 0 24px; border-radius: 4px; border: 1.5px solid var(--primary);
  font-family: inherit; font-weight: 700; font-size: var(--fs-body); line-height: 1.4; text-align: center;
  text-decoration: none; cursor: pointer; transition: background .15s, color .15s;
}
.btn:hover { text-decoration: none; }
.btn-primary { background: var(--primary); color: var(--bg); }
.btn-primary:hover { background: var(--primary-soft); border-color: var(--primary-soft); color: var(--bg); }
.btn-secondary { background: transparent; color: var(--primary); }
.btn-secondary:hover { background: var(--primary-tint); }
.btn-s { min-height: 40px; padding: 0 16px; font-size: var(--fs-meta); }
.go { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; font-weight: 700; text-decoration: none; }
.go::after { content: "→"; transition: transform .15s; }
.go:hover { text-decoration: underline; }
.go:hover::after { transform: translateX(3px); }

/* 絞り込みブロック（地域ナビ・カテゴリナビ＝カードグリッドで整列。角丸4px・影なし） */
.filter-row { display: flex; gap: 24px; margin-top: 48px; flex-wrap: wrap; }
.filter-block {
  flex: 1 1 360px; background: var(--bg-soft); border: 1px solid var(--line);
  border-radius: 4px; padding: 24px;
}
.filter-block__title { font-size: var(--fs-meta); font-weight: 700; color: var(--ink); }
/* 地域カード（関東1都6県の固定7枚。2026-08-31 SYSTEM_BLUEPRINT「表示ポリシー」対応）。
   影は使わず、hoverは罫線の色替えだけで示す */
.region-cards { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; }
.region-card {
  flex: 1 1 140px; display: block; background: var(--bg); border: 1px solid var(--line);
  border-radius: 4px; padding: 16px; text-decoration: none;
}
.region-card:hover { border-color: var(--primary); text-decoration: none; }
.region-card__pref {
  font-size: var(--fs-h2); font-weight: 700; color: var(--link);
}
.region-card__count { font-size: var(--fs-meta); color: var(--muted); margin-top: 8px; }
/* 稼働ゼロの県: 非活性規約(--faint+cursor:default)。hrefを持たない<div>で描画する */
.region-card--pending { cursor: default; border-style: dashed; }
.region-card--pending .region-card__pref { color: var(--faint); }
.region-card--pending .region-card__count { color: var(--faint); }
/* 商材カテゴリのカードグリッド（2026-09-04デザインv3・ユーザー実指摘4「／区切りリンク羅列」
   対応。site_templates.render_category_card_grid()参照。以前の.cat-grid/.cat-col__parent/
   .cat-col__childrenは' ／ '.join()の1本のキャプション文字列を並べる方式でしかなく、
   カード化に伴い構造ごと置き換えたため削除した）。大分類7枚を想定した自動折返しグリッド。 */
.cat-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; margin-top: 12px; }
.cat-card { background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 16px; }
.cat-card__head {
  display: flex; align-items: baseline; justify-content: space-between; gap: 8px;
  border-bottom: 1px solid var(--line-soft); padding-bottom: 8px;
}
.cat-card__title { font-weight: 700; color: var(--link); }
.cat-card__count { font-size: var(--fs-caption); color: var(--muted); white-space: nowrap; }
.cat-card__subs {
  list-style: none; margin: 8px 0 0 0; padding: 0; display: flex; flex-direction: column;
  gap: 4px; font-size: var(--fs-meta); line-height: 1.5;
}
.cat-card__subcount { color: var(--faint); font-size: var(--fs-caption); }

/* 料金プランカード（/pricing/。2026-09-18 19:33 JST PO実指摘「料金ページ CSS が壊れてる、
   読みにくい」対応）: 従来は.cat-card/.cat-card__head（商材カテゴリ用のflexヘッダ行。
   .cat-card__countがwhite-space:nowrap）を転用していたため、プラン名(「基本」)と長い価格
   文字列(「月2,980円（税込）・月契約・いつでも解約」)が同じ横並び行に押し込まれ、
   プラン名が「基」「本」の2行に割れ、価格もヘッダに詰め込まれて読みにくかった。
   縦積み(プラン名→価格→注記→状態バッジ→機能一覧)の専用クラスに置き換える。
   3枚を#plan-gridで等高に揃え（900px以下は.tile-grid等と同じ既存の@media(max-width:900px)
   ブロックで1カラムに畳む）、状態バッジは既存の.badge-ok/.status-tag--liveと同じ緑系
   (--ok/--ok-bg)・.status-tag--planned等と同じグレー系(--muted/--bg-soft)の配色パターンを
   踏襲する（新しい色は増やさない）。 */
/* 先行登録（旧 早期アクセス登録）のフォーム。inline styleを使わず本番CSPの下でも適用する。 */
#waitlist-form { max-width: 640px; margin-top: 24px; padding: 28px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); display: grid; gap: 24px; }
#waitlist-form p { margin: 0; }
.waitlist-field { min-width: 0; margin: 0; padding: 0; border: 0; }
.waitlist-field > label, .waitlist-field legend { display: block; padding: 0; margin-bottom: 12px; font-weight: 700; }
#waitlist-email { display: block; width: 100%; min-height: 48px; padding: 12px; border: 1px solid var(--faint); border-radius: 4px; background: var(--bg); color: var(--ink); font: inherit; }
.waitlist-plans { display: flex; flex-wrap: wrap; gap: 12px; }
.waitlist-plan { display: flex; flex: 1 1 130px; align-items: center; gap: 12px; min-height: 48px; padding: 12px 16px; border: 1px solid var(--line); border-radius: 4px; cursor: pointer; }
.waitlist-plan:has(input:checked) { border-color: var(--primary); background: var(--bg-soft); box-shadow: inset 0 0 0 1px var(--primary); }
.waitlist-plan input, .waitlist-consent input { width: 18px; height: 18px; flex: 0 0 18px; margin: 0; accent-color: var(--primary); }
.waitlist-consent { display: flex; align-items: flex-start; gap: 12px; cursor: pointer; line-height: 1.8; }
.waitlist-consent input { margin-top: 4px; }
#waitlist-form .waitlist-hp { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }
#waitlist-form button { width: 100%; min-height: 48px; padding: 12px 20px; border: 1px solid var(--primary); border-radius: 4px; background: var(--primary); color: var(--bg); font: inherit; font-weight: 700; cursor: pointer; }
#waitlist-form button:hover { background: var(--primary-soft); }
#waitlist-form button:disabled { opacity: .65; cursor: wait; }
#waitlist-msg { max-width: 640px; overflow-wrap: anywhere; }
.pricing-contact { max-width: 640px; }
.pricing-contact p { margin: 0 0 12px; }
.pricing-contact a { display: inline-block; font-weight: 700; text-decoration: underline; overflow-wrap: anywhere; }
@media(max-width:640px) { #waitlist-form { padding: 20px; } .waitlist-plan { flex-basis: 100%; } }

.plan-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-top: 12px; }
.plan-card {
  display: flex; flex-direction: column; background: var(--bg); border: 1px solid var(--line);
  border-radius: 4px; padding: 20px;
}
/* 基本プランを主推奨として太枠で強調（PO実指摘対応の一部・2026-09-18） */
.plan-card--highlight { border: 2px solid var(--primary); }
.plan-card__name {
  font-family: var(--font-serif); font-size: var(--fs-h2); font-weight: 700; letter-spacing: .01em;
}
.plan-card__price {
  font-size: var(--fs-num); font-weight: 700; font-variant-numeric: tabular-nums;
  color: var(--ink); margin-top: 8px;
}
/* 税込・月契約・いつでも解約等の注記。通常改行(nowrapにしない)で狭い画面でも折り返す */
.plan-card__price-note { font-size: var(--fs-caption); color: var(--muted); line-height: 1.5; margin-top: 4px; }
.plan-card__offer { margin: 8px 0 0 0; font-size: var(--fs-meta); font-weight: 700; color: var(--primary); line-height: 1.6; }
.plan-card__status {
  align-self: flex-start; font-size: var(--fs-pill); border-radius: 999px; padding: 0 8px;
  line-height: 1.8; font-weight: 500; margin-top: 12px;
}
.plan-card__status--ok { color: var(--ok); background: var(--ok-bg); }
.plan-card__status--pending { color: var(--muted); background: var(--bg-soft); }
.plan-card__list { list-style: none; margin: 12px 0 0 0; padding: 0; font-size: var(--fs-body); line-height: 1.7; }
.plan-card__list li { position: relative; padding-left: 24px; margin-top: 8px; }
.plan-card__list li:first-child { margin-top: 0; }
/* チェックマーク(絵文字は使わず罫線2本の疑似要素で作る。.ladder-step::beforeと同じ流儀) */
.plan-card__list li::before {
  content: ""; position: absolute; left: 2px; top: 6px; width: 9px; height: 5px;
  border-left: 2px solid var(--ok); border-bottom: 2px solid var(--ok); transform: rotate(-45deg);
}
.plan-card__footnote { font-size: var(--fs-caption); color: var(--faint); margin-top: 12px; line-height: 1.7; }

/* 本文2カラム */
.content-columns { display: flex; gap: 36px; margin-top: 48px; flex-wrap: wrap; }
.col-main { flex-grow: 1; min-width: 0; flex-basis: 640px; }
.col-side { width: 320px; flex-shrink: 0; display: flex; flex-direction: column; gap: 24px; }
/* Top-page notices use the page width; secondary information follows below. */
.content-columns--home { flex-direction: column; }
.content-columns--home .col-main { flex-basis: auto; width: 100%; }
.content-columns--home .col-side { width: 100%; }
@media (min-width: 901px) {
  .content-columns--home .data-table { display: table; width: 100%; table-layout: fixed; }
  .content-columns--home .data-table > tbody > tr > td { white-space: normal; overflow-wrap: anywhere; }
  .content-columns--home .data-table > thead > tr > th:nth-child(1) { width: 7%; }
  .content-columns--home .data-table > thead > tr > th:nth-child(2) { width: 12%; }
  .content-columns--home .data-table > thead > tr > th:nth-child(3) { width: 51%; }
  .content-columns--home .data-table > thead > tr > th:nth-child(4) { width: 15%; }
  .content-columns--home .data-table > thead > tr > th:nth-child(5) { width: 15%; }
}
.side-box {
  background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 24px;
  font-size: var(--fs-meta); color: var(--muted); line-height: 1.7;
}
.side-box strong { color: var(--ink); }
.side-box--dashed { border: 1px dashed var(--faint); }

/* テーブル（ヘッダ行=薄グレー地+600・行=下罫線のみ・hoverで淡い背景・行間1.5）。
   モバイルはoverflow-x:autoの包み＝<table>自身をdisplay:blockのスクロールコンテナにし、
   子要素だけ明示的にtable役割へ戻す(HTML側にラップ用divを追加せずCSSだけで実現) */
.data-table {
  font-size: var(--fs-body); line-height: 1.5; margin-top: 8px;
  display: block; overflow-x: auto; -webkit-overflow-scrolling: touch;
}
.data-table thead { display: table-header-group; }
.data-table tbody { display: table-row-group; }
.data-table tr { display: table-row; }
.data-table th, .data-table td { display: table-cell; }
.data-table th {
  /* デザイン指定書は上下10px・左右12pxだが、4pxグリッド規約(唯一の例外は.btn)を優先し
     最も近い4の倍数(12px/12px)に丸める（規則の緩和はしない） */
  text-align: left; padding: 12px 12px 12px 4px; font-size: var(--fs-caption); color: var(--muted);
  font-weight: 600; background: var(--bg-soft); border-bottom: 1px solid var(--line); white-space: nowrap;
}
.data-table th.num { text-align: right; }
/* セル内改行を禁止し、はみ出た分は.data-table自身のoverflow-x:autoで横スクロールさせる
   （改行させると狭い画面で1文字だけの縦積み表示になり、日本語では特に読めなくなるため） */
.data-table td { padding: 12px 12px 12px 4px; border-bottom: 1px solid var(--line-soft); white-space: nowrap; }
.data-table td.num { text-align: right; font-variant-numeric: tabular-nums; }
.data-table tbody tr:hover td { background: var(--bg-soft); }
.data-table .c-date { color: var(--muted); font-variant-numeric: tabular-nums; }
.data-table .c-amount { text-align: right; font-variant-numeric: tabular-nums; }
.data-table .c-source { font-size: var(--fs-caption); }
/* 団体一覧（/org/・/area/共通。2026-09-04デザインv3・ユーザー実指摘2「団体一覧（36団体）が
   縦長すぎる」対応）: <table>の縦1列から、CSS columnsで横方向にも流し込む多段組へ変更した
   （render_pref_org_table()参照。<table>はcolumn-countに対応しないため構造自体をdivへ変えた）。
   column-widthとcolumn-countを併用し、画面幅に応じて自然に3〜4段・2段・1段へ収束させる
   （@mediaでの明示的な段数指定はしない＝column-widthの下限で自動的に決まる）。
   1団体=1.org-tile。break-inside:avoidで段の境目に団体が分断されるのを防ぐ。 */
.org-columns { column-width: 240px; column-count: 4; column-gap: 24px; margin-top: 12px; }
.org-tile {
  break-inside: avoid; padding: 8px 0; border-bottom: 1px solid var(--line-soft);
}
.org-tile__name { color: var(--link); font-weight: 500; display: block; }
.org-tile__depth {
  display: block; font-size: var(--fs-caption); color: var(--muted); margin-top: 4px;
}
.w-date { width: 92px; } .w-org { width: 100px; } .w-cat { width: 110px; }
.w-src { width: 80px; } .w-status { width: 90px; } .w-vendor { width: 220px; } .w-amount { width: 130px; }

/* 修正1「全行クリック可能化」(2026-09-01・ユーザー実指摘「案件名クリックできないよ」対応):
   公告・落札一覧の件名は常に<details><summary>にし、クリックでその場に展開する(JSなし)。
   .pref-detail summary/.quote-details summaryと同じ規約(マーカーはブラウザ既定のまま・
   cursor:pointerだけで「開閉できる」ことを示す。--linkは実際に別ページへ遷移するリンク専用の
   ため、展開トリガーである件名自体には使わない)。案件ページがある行はsummary内の
   「案件」ピル(実際の<a>・--link色)で/case/{public_id}/への直リンクを別途持つ。 */
.row-expand summary { cursor: pointer; }
.row-expand__title { color: var(--ink); font-weight: 500; }
.case-pill {
  display: inline-flex; align-items: center; font-size: var(--fs-pill); color: var(--link);
  border: 1px solid var(--link); border-radius: 999px; padding: 0 8px; line-height: 1.8;
  margin-left: 8px; font-weight: 500;
}
/* hoverは--accentを使わず地色を薄く敷くだけにする（--accentは「有料」「締切」等の限定用途に予約） */
.case-pill:hover { background: var(--bg-soft); text-decoration: none; }
.row-expand__body {
  margin-top: 8px; padding: 12px 16px; background: var(--bg-soft); border-radius: 4px;
  font-size: var(--fs-caption); color: var(--muted); line-height: 1.5; white-space: normal;
}
.row-expand__meta { color: var(--muted); }
/* ラベル:値の整列表（2026-09-03デザインv2追改訂・ユーザー実指摘「詳細ページの文字が
   読みにくい」対応）: 行展開(.row-expand__meta)・時間の梯子(.ladder-step__meta)の付帯情報
   （方式・工種・締切・落札金額・落札者など）は、以前は「方式: 一般競争入札 ／ 工種: 工事」の
   ように"／"区切りの1本のキャプション文字列だった。折り返された行が任意の位置で切れて
   読みにくいため、ラベル列を揃えた2列の表(render_meta_table())へ組み替えた。ラベルは--muted・
   値は本文と同じ--ink（墨）にしてコントラストを確保する（数値項目はtabular-nums）。
   widthは全称の`table`規則(width:100%)を打ち消し、内容ぶんだけの幅に留める。 */
.meta-table { width: auto; border-collapse: collapse; margin-top: 4px; }
.meta-table th, .meta-table td { text-align: left; padding: 0 12px 4px 0; font-size: var(--fs-meta); font-weight: 400; vertical-align: top; }
.meta-table th { color: var(--muted); white-space: nowrap; }
.meta-table td { color: var(--ink); font-variant-numeric: tabular-nums; }
/* 落札金額の下に添える掲載元の注記の原文（2026-09-26 PO決定 docs/DECISION_LOG.md同日14:2x節(1)。
   award_amount_value_html()参照）。数値ではないためtabular-numsは掛けず、通常の行間に戻す。 */
.meta-table .amount-note { display: block; margin-top: 4px; color: var(--muted); font-weight: 400; font-variant-numeric: normal; white-space: normal; }
.row-expand__sources { margin-top: 8px; display: flex; flex-direction: column; gap: 4px; }
.case-history-link { display: inline-block; margin-top: 8px; font-weight: 500; }

/* タイル（数字は見出しではなくデータ。h1/h2の書体・letter-spacing・下線を持たせない。統計カード:
   数値28px/700・ラベル13px・桁区切りはfmt_count/fmt_yen(呼び出し側)が付与。tabular-numsは
   body既定で継承済みだが、データ表示要素であることを明示するためここでも明示指定する。
   auto-fitで3枚(団体ページ等)・4枚(トップの実績カード)双方に対応。角丸4px・影なし） */
.tile-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 16px; margin-top: 16px; }
.tile { background: var(--bg); border: 1px solid var(--line); border-radius: 4px; padding: 24px; }
.tile__label { font-size: var(--fs-meta); color: var(--muted); }
.tile__value {
  font-family: inherit; font-size: var(--fs-num); font-weight: 700; margin-top: 4px;
  font-variant-numeric: tabular-nums;
}
.tile-note { font-size: var(--fs-caption); color: var(--faint); margin-top: 8px; }

/* 落札率カード（団体ページ・試作。2026-09-15実装 SPEC_award_ratio_card_2026-09-15.md第5節）。
   新しい色・生のpx値は追加しない: 枠線は.pref-detailと同じvar(--line)1px・角丸4px・
   padding 12px 16px（.pref-detailと同値）、外側の間隔はtile-gridと同じmargin-top 16px。
   本文行は.leadと同じ1.7行間・var(--fs-body)、定義文・出典は.footnoteと同じ
   var(--fs-caption)+var(--faint)にする。数値は必ずtabular-nums（body既定を継承）。 */
.award-ratio-card {
  background: var(--bg); border: 1px solid var(--line); border-radius: 4px;
  padding: 12px 16px; margin-top: 16px; font-size: var(--fs-body); line-height: 1.7;
}
.award-ratio-card__title { font-weight: 700; font-size: var(--fs-meta); color: var(--muted); }
.award-ratio-card__line { margin: 8px 0 0 0; color: var(--ink); }
.award-ratio-card__line strong { font-weight: 700; font-variant-numeric: tabular-nums; }
.award-ratio-card__note, .award-ratio-card__source {
  margin: 8px 0 0 0; font-size: var(--fs-caption); color: var(--faint); line-height: 1.5;
}

/* バッジ・ステータスタグ（小さめピル: 12px・角丸999px・薄地+濃文字。
   padding縦は0にしline-heightで高さを作る=4pxグリッド順守） */
.badge {
  font-size: var(--fs-pill); border-radius: 999px; padding: 0 8px; line-height: 1.8;
  border: none; font-weight: 500;
}
.badge-ok { color: var(--ok); background: var(--ok-bg); }
.badge-warn { color: var(--warn); background: var(--warn-bg); }

/* coverage表・ステータスタグ */
.coverage-table td, .coverage-table th { padding: 8px; }
.footnote { font-size: var(--fs-caption); color: var(--faint); margin-top: 12px; line-height: 1.7; }
.gap-list { font-size: var(--fs-body); line-height: 1.7; }
.pref-detail { margin-top: 12px; border: 1px solid var(--line); border-radius: 4px; padding: 12px 16px; }
.pref-detail summary { cursor: pointer; font-weight: 700; font-size: var(--fs-meta); }
.pref-detail__list { margin: 12px 0 0 0; padding-left: 20px; font-size: var(--fs-meta); line-height: 1.5; }
.status-tag {
  font-size: var(--fs-pill); border-radius: 999px; padding: 0 8px; line-height: 1.8;
  border: none; font-weight: 500; margin-left: 4px;
}
.status-tag--live { color: var(--ok); background: var(--ok-bg); }
/* 実装待ち/未実査は「クリック不能な中立ステータス」であり、--linkはリンク専用のため使わない */
.status-tag--planned { color: var(--muted); background: var(--bg-soft); }
.status-tag--survey { color: var(--muted); background: var(--bg-soft); }
.status-tag--gap { color: var(--warn); background: var(--warn-bg); }

/* 日本地図UI（2026-09-01新設。BACKLOG「日本地図UI」節の確定仕様。タイルグリッド型
   インラインSVG・依存ゼロ。色は全て:root変数参照＝生の16進色をここに書かない。
   紺系グラデーション濃→中→薄→白で統一・タイルに1px罫線+2px角丸・hoverは影ではなく
   罫線の色替え+太さで示す（デザインv2「影は原則なし」方針） */
.map-lead { font-size: var(--fs-body); line-height: 1.7; max-width: 900px; margin-top: 16px; }
.pref-map-wrap { max-width: 680px; margin-top: 16px; }
.pref-map { width: 100%; height: auto; display: block; }
.pref-tile { cursor: pointer; }
.pref-tile:hover .pref-tile__rect { stroke: var(--primary); stroke-width: 2; }
.pref-tile__rect { stroke: var(--line); stroke-width: 1; }
.pref-tile__label { font-size: var(--fs-caption); font-weight: 700; text-anchor: middle; fill: var(--ink); }
.pref-tile__ratio { font-size: var(--fs-caption); text-anchor: middle; fill: var(--muted); }
.pref-tile--daily .pref-tile__rect { fill: var(--map-daily); }
.pref-tile--daily .pref-tile__label, .pref-tile--daily .pref-tile__ratio { fill: var(--bg); }
.pref-tile--partial .pref-tile__rect { fill: var(--map-partial); }
.pref-tile--partial .pref-tile__label, .pref-tile--partial .pref-tile__ratio { fill: var(--bg); }
.pref-tile--forecast .pref-tile__rect { fill: var(--map-forecast); }
.pref-tile--none .pref-tile__rect { fill: var(--map-none-fill); }
.pref-tile--hard .pref-tile__rect { fill: url(#pref-hatch); }
.pref-hatch__bg { fill: var(--map-hard-base); }
.pref-hatch__line { stroke: var(--map-hard-line); stroke-width: 2; }
.map-legend { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 12px; font-size: var(--fs-meta); color: var(--muted); }
.map-legend__item { display: flex; align-items: center; gap: 8px; }
.map-legend__swatch { width: 16px; height: 16px; flex-shrink: 0; }
.map-legend__swatch .pref-tile__rect { stroke: var(--line); }
.corp-lead { font-size: var(--fs-meta); color: var(--muted); margin-top: 24px; }
.corp-table { margin-top: 16px; }
.master-table { margin-top: 16px; }
.master-table td, .master-table th { padding: 8px; }
/* 発注主体マスタ(3,951機関)基準の収録状況（2026-09-05新設）。既存のmaster-table/coverage-tableと
   同じ余白規約を流用し、見た目のパターンを増やさない。 */
.entity-type-table { margin-top: 16px; }
.entity-type-table td, .entity-type-table th { padding: 8px; }
/* 団体×層の深さ表示（2026-09-05新設）。pref-breakdown__metaと同じ控えめな小文字にし、
   既存の団体<li>の下にぶら下がる入れ子リストとして視覚的に区別する。 */
.pref-breakdown__depth { list-style: none; margin: 4px 0 0 16px; padding: 0; }
.pref-breakdown__depth li { font-size: var(--fs-caption); color: var(--faint); }
.stage-badge {
  font-size: var(--fs-pill); border-radius: 999px; padding: 0 8px; line-height: 1.8;
  border: none; font-weight: 500; margin-left: 4px;
}
.stage-badge--daily { color: var(--ok); background: var(--ok-bg); }
.stage-badge--partial { color: var(--muted); background: var(--bg-soft); }
.stage-badge--forecast { color: var(--muted); background: var(--bg-soft); }
.stage-badge--hard { color: var(--warn); background: var(--warn-bg); }
.stage-badge--none { color: var(--faint); background: var(--bg-soft); }
/* 「正直な収録状況」5値バッジ（2026-09-18新設）。stage-badgeの見た目をそのまま流用する。
   'none'は既存の.stage-badge--noneと共有（同じ「未対応」の意味のため新設しない）。 */
.stage-badge--full { color: var(--ok); background: var(--ok-bg); }
.stage-badge--genpon_no_award { color: var(--muted); background: var(--bg-soft); }
.stage-badge--award_no_genpon { color: var(--muted); background: var(--bg-soft); }
.stage-badge--notices_only { color: var(--muted); background: var(--bg-soft); }
.pref-breakdown__meta { font-size: var(--fs-caption); color: var(--faint); }

/* 団体別「添付原本」取得状況バッジ（2026-09-04新設・タスク4）。控えめな表示に留める＝
   stage-badgeと同じ小ピル型を流用し、新しい見た目のパターンは増やさない。 */
.genpon-badge {
  font-size: var(--fs-pill); border-radius: 999px; padding: 0 8px; line-height: 1.8;
  border: none; font-weight: 500; margin-left: 4px;
}
.genpon-badge--obtained { color: var(--ok); background: var(--ok-bg); }
.genpon-badge--listing_only { color: var(--muted); background: var(--bg-soft); }
.genpon-badge--uncollected { color: var(--faint); background: var(--bg-soft); }

.about-list { font-size: var(--fs-body); line-height: 1.7; padding-left: 20px; max-width: 900px; }

/* 案件ページ(/case/)の時間の梯子: タイムライン風（左に縦線+段丸ポチ）。
   段の色: 予算・見通し=グレー(.ladder-step--locked＝既存の錠前色をそのまま流用)・
   公告=紺(既定)・落札=緑系(.ladder-step--award)。縦線・丸ポチはどちらも新規のHTML要素を
   増やさず::beforeの疑似要素だけで作る（2026-08-31実装順2の構造・課金壁ロジックは不変）。 */
.ladder { display: flex; flex-direction: column; gap: 16px; margin-top: 16px; position: relative; padding-left: 28px; }
.ladder::before {
  content: ""; position: absolute; left: 9px; top: 6px; bottom: 6px; width: 2px; background: var(--line);
}
.ladder-step {
  position: relative; background: var(--bg); border: 1px solid var(--line);
  border-radius: 4px; padding: 16px;
}
.ladder-step::before {
  content: ""; position: absolute; left: -23px; top: 20px; width: 10px; height: 10px;
  border-radius: 999px; background: var(--primary); border: 2px solid var(--bg); box-shadow: 0 0 0 1px var(--line);
}
.ladder-step--award::before { background: var(--ok); }
.ladder-step__stage { font-size: var(--fs-meta); font-weight: 700; color: var(--primary); }
.ladder-step--award .ladder-step__stage { color: var(--ok); }
.ladder-step__title { font-size: var(--fs-body); font-weight: 500; margin-top: 4px; }
.ladder-step__meta { font-size: var(--fs-caption); color: var(--muted); margin-top: 8px; }
.ladder-step__source { font-size: var(--fs-caption); margin-top: 8px; }
/* 引用文の折りたたみ（2026-09-01決定「引用文・詳細メタの展開表示」・JSなしのdetails要素）。
   薄地ボックス+引用らしい左ボーダー */
.quote-details { margin-top: 8px; font-size: var(--fs-caption); }
.quote-details summary { cursor: pointer; font-weight: 700; } /* .pref-detail summaryと同じ規約(--linkはリンク専用) */
/* 引用文(最大2000字・QUOTE_DISPLAY_LIMIT)は行が伸びると読みにくくなるため、行長を
   42em程度の可読な範囲に収める（2026-09-03デザインv2追改訂・ユーザー実指摘「詳細ページの
   文字が読みにくい」対応）。 */
.quote-text {
  margin: 8px 0 0 0; padding: 12px 16px; background: var(--bg-soft); border-left: 4px solid var(--primary-soft);
  border-radius: 0 4px 4px 0; font-size: var(--fs-meta); color: var(--ink); line-height: 1.7; white-space: pre-wrap;
  max-width: 42em;
}
/* 原本と添付（2026-09-02実装「原本と添付をサイトへ配線」）: 公告詳細ページの保存版・
   スクリーンショット・添付ファイル一覧。quote-textと同じ薄地ボックスの流儀に揃える。
   スクリーンショットは404時にプレースホルダを出さず要素自体を作らない設計
   （site_queries.screenshot_path_forがディスク上の実在を確認してから渡す）ので、
   ここでは「表示された場合」の見た目だけを定義すればよい。 */
.case-documents {
  margin-top: 8px; padding: 12px 16px; background: var(--bg-soft); border-radius: 4px;
  font-size: var(--fs-caption);
}
.case-documents__title { font-weight: 700; color: var(--ink); margin-bottom: 8px; }
.case-documents__shot {
  display: block; max-width: 240px; width: 100%; border: 1px solid var(--line); border-radius: 4px;
  margin-bottom: 8px;
}
.case-documents__detail { margin-bottom: 4px; }
.case-documents__attachments { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
/* 「公告前案件」ロック段（_render_locked_case_page()専用。2026-09-05 DECISION_LOG
   「原本公開の最終形」で文言は「有料プラン会員のみ表示」から「案件確定前のため非公開」へ
   変わったが、見た目自体は変更していない）: 錠前アイコン(🔒)の落ち着いた表示。グレーの丸ポチ */
.ladder-step--locked { border-color: var(--line); background: var(--bg-soft); }
.ladder-step--locked::before { background: var(--faint); }
.ladder-step--locked .ladder-step__stage { color: var(--faint); }
.ladder-step--locked .ladder-step__title { color: var(--faint); }
.lock-badge {
  display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-pill);
  color: var(--faint); background: var(--bg); border: 1px solid var(--line);
  border-radius: 999px; padding: 0 8px; line-height: 1.8;
}
/* 原本ビューアへの導線（2026-09-04実装「原本ビューア」）。2026-09-05 DECISION_LOG
   「原本公開の最終形」で「有料プランで原本を確認」系の文言・演出は全廃したため、
   「有料」「締切」等の限定用途に予約された--accentは使わず、.case-pillと同じ
   クリック可能リンクの配色(--link)にする（原本ビューアは今や無料公開が既定であり、
   特別な強調をする理由が無い）。 */
.genpon-cta {
  display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-pill);
  color: var(--link); background: var(--bg); border: 1px solid var(--link);
  border-radius: 999px; padding: 0 8px; line-height: 1.8; text-decoration: none;
  white-space: nowrap;
}
.genpon-cta:hover { background: var(--bg-soft); }
/* 仕様書・図面グレーアウトゲート（2026-09-05実装「原本層グレーアウトゲート」）: 著作権リスクの
   ある第三者作成物の疑いがあるファイルは「存在は見せる・中身は出さない」= リンク自体は残すが
   文字色を落とし「当サイトでは非公開」の控えめなバッジ（掲載元へのリンク）を添える。
   lock-badgeと同じ落ち着いた配色（--faint）に揃える（非公開の理由が課金ではなく著作権
   リスクであっても、「まだ見せられない」という見た目のトーンは統一する）。 */
.case-documents__attachment--pending > a { color: var(--faint); }
/* 2026-09-15実装「非公開カードの表示」: バッジの文面が役割別の理由文（最長で
   「入札参加者向けの資料（仕様書・図面）のため当サイトでは非公開です。掲載元で
   確認してください」程度）に伸びたため、1行ピル前提のinline-flex/border-radius:999pxを
   やめ折り返し可能なinline-blockにする（旧「当サイトでは非公開」7文字専用の見た目だった）。 */
.case-documents__pending-badge {
  display: inline-block; font-size: var(--fs-pill);
  color: var(--faint); background: var(--bg); border: 1px solid var(--line);
  border-radius: 4px; padding: 0 8px; line-height: 1.8; margin-left: 4px;
}
.case-documents__role-badge {
  display: inline-flex; align-items: center; font-size: var(--fs-pill);
  color: var(--faint); background: var(--bg); border: 1px solid var(--line);
  border-radius: 999px; padding: 0 8px; line-height: 1.8; margin-left: 4px;
}
.case-documents__section { color: var(--faint); font-size: var(--fs-pill); }
.genpon-cta--pending {
  color: var(--faint); border-color: var(--line);
}
.genpon-cta--pending:hover { background: var(--bg-soft); }
/* 欠陥1（2026-09-11修正）: 0バイト添付(掲載元の添付欄が空)しか無かった案件は、file1/file2/
   file3のような内部連番の空リンクを並べず、この1行だけを出す。 */
.case-documents__empty-note { color: var(--faint); font-size: var(--fs-pill); }
.ladder-step__documents { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
/* 「予算・見通しを確認してからN日で公告」の強調（2026-09-03デザインv2・ユーザー実指摘
   「巨大な数字演出」対応）: 以前はここのstrongをタイル数値と同じ28pxまで拡大していたが、
   本文中の一語だけが極端に肥大化する演出は「安っぽい」印象の一因だったため落ち着かせた。
   文中の太字+朱（--accent。締切系の強調という限定用途に該当）だけでNを目立たせる */
.days-highlight {
  background: var(--bg); border: 1px solid var(--accent-line); border-radius: 4px;
  padding: 16px; margin-top: 16px; font-size: var(--fs-body);
}
.days-highlight strong { color: var(--accent); font-weight: 700; font-variant-numeric: tabular-nums; }

/* 公告単独ページ(/notice/<id>/。2026-09-04実装「公告単独ページ」サンプル・基盤タスク)専用:
   案件へ昇格済みの案内バナー・出典（複数観測）一覧。days-highlight/case-documentsと同じ
   薄地ボックスの流儀に揃える。 */
.notice-promoted-banner {
  background: var(--bg-soft); border: 1px solid var(--accent-line); border-radius: 4px;
  padding: 12px 16px; margin-top: 12px; font-size: var(--fs-meta); color: var(--ink);
}
.notice-promoted-banner a { color: var(--link); font-weight: 700; }
.notice-sources { margin-top: 16px; }
.notice-sources__title { font-weight: 700; color: var(--ink); margin-bottom: 8px; font-size: var(--fs-caption); }

/* 公告ハブ（/notice/・/notice/pref/{NN}/・/notice/org/{code}/。2026-09-11実装
   「SEO: 公告ハブ・内部リンク」）: 都道府県・団体のリンク一覧、団体別ページングと
   「他の公告」節。一覧表自体は既存の.data-tableをそのまま使い回すため専用CSSは無い。 */
.notice-hub-list { list-style: none; margin: 8px 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 16px; }
.notice-hub-list li { font-size: var(--fs-meta); }
.notice-hub-list a { color: var(--link); }
.notice-other-list { margin: 8px 0; padding-left: 20px; font-size: var(--fs-meta); }
.notice-other-list a { color: var(--link); }
.pagination { display: flex; gap: 12px; align-items: center; margin: 16px 0; font-size: var(--fs-meta); color: var(--muted); }
.pagination a { color: var(--link); font-weight: 700; }

/* フッター（2026-09-26 トップ第6版の見本）: 4列（サイト名／サービス／サポート／運営と規約）と
   最下行の注記。まだ無いページは .is-pending（--faint・リンクにしない） */
.site-footer { border-top: 1px solid var(--line); background: var(--bg); font-size: var(--fs-meta); color: var(--muted); }
.site-footer__inner { max-width: 1120px; margin: 0 auto; padding: 40px 24px 32px 24px; }
.site-footer__cols { display: grid; grid-template-columns: 1.3fr repeat(3, minmax(0, 1fr)); gap: 28px; }
.site-footer__col p { margin: 8px 0 0 0; }
.site-footer h4 { margin: 0 0 8px 0; font-size: var(--fs-caption); color: var(--ink); }
.site-footer ul { list-style: none; margin: 0; padding: 0; }
.site-footer li { padding: 4px 0; }
.site-footer a { color: var(--muted); text-decoration: underline; text-underline-offset: 3px; }
.site-footer a.logo { color: var(--primary); text-decoration: none; }
.site-footer .is-pending { color: var(--faint); cursor: default; display: inline-flex; align-items: center; gap: 8px; }
.site-footer__legal {
  margin: 28px 0 0 0; padding-top: 16px; border-top: 1px solid var(--line);
  font-size: var(--fs-caption); line-height: 1.7;
}
@media (max-width: 760px) {
  .site-footer__cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ============================================================
   トップページ第6版（2026-09-26 PO了承の見本 top_page_v6_mock.html）。全部 .top の中に閉じる。
   見本の文字の大きさ・間隔は、このファイルの規約（7段の文字・4pxの倍数の間隔）に寄せた。
   本番の CSP はインラインの style を許さないため、見本の style="..." はここのクラスに移した。
   ============================================================ */
.top [hidden] { display: none !important; }
.top .wrap { max-width: 1120px; margin: 0 auto; padding-left: 24px; padding-right: 24px; }
.top .nw { white-space: nowrap; }
.top .vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.top a { text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
.top a:hover { text-decoration-thickness: 2px; }
.top a.btn, .top a.go, .top .top-tabs a, .top a.top-it__t, .top .prefs a { text-decoration: none; }
.top a.go:hover, .top a.top-it__t:hover { text-decoration: underline; }

/* 最初の画面: 左に約束と主ボタン、右に料金の一言、下に検索 */
.top .first { border-bottom: 1px solid var(--line-strong); }
.top .first .wrap { padding-top: 48px; padding-bottom: 32px; }
.top .first-grid { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 40px; align-items: end; }
.top .kick { margin: 0 0 12px 0; font-size: var(--fs-meta); color: var(--muted); letter-spacing: .04em; }
.top .top-h1 {
  font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-display); line-height: 1.35;
  margin: 0; letter-spacing: .01em;
}
.top .lede { font-size: var(--fs-lead); line-height: 1.85; color: var(--ink-2); margin: 16px 0 0 0; max-width: 36em; }
.top .cta-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px; margin-top: 28px; }
.top .price-note { padding: 16px 20px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 4px; }
.top .price-note .l { margin: 0; font-size: var(--fs-caption); color: var(--muted); }
.top .price-note .v {
  margin: 4px 0 0 0; font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-title);
  line-height: 1.2; color: var(--ink);
}
.top .price-note .v small { font-family: var(--font-sans); font-size: var(--fs-meta); color: var(--muted); font-weight: 700; margin-left: 4px; }
.top .price-note .c { margin: 8px 0 0 0; font-size: var(--fs-meta); color: var(--ink-2); }
.top .price-note .c b { color: var(--primary); }
.top .hero-search { margin-top: 32px; }
.top .search-box { max-width: none; border-radius: 8px; }
.top .quick { display: flex; flex-wrap: wrap; gap: 4px 16px; margin: 12px 0 0 0; font-size: var(--fs-meta); color: var(--muted); }
.top .quick a { display: inline-block; padding: 4px 0; }
.top .top-notice { margin-top: 32px; }
.top .top-notice .dev-notice-box { margin: 0; }

/* 新着と入口 */
.top .work { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 48px; padding: 40px 0 8px 0; }
.top .top-h2 {
  font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-title); line-height: 1.4;
  margin: 0; letter-spacing: .01em;
}
.top .h2s { font-family: var(--font-serif); font-weight: 700; font-size: var(--fs-h2); line-height: 1.4; margin: 0; }
.top .head-line {
  display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 8px 16px;
  padding-bottom: 12px; border-bottom: 2px solid var(--ink);
}
.top .head-line .meta { font-size: var(--fs-caption); color: var(--muted); }
.top .top-tabs { display: flex; flex-wrap: wrap; margin: 0; border-bottom: 1px solid var(--line); }
.top .top-tabs a {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px; font-size: var(--fs-meta);
  color: var(--muted); border-bottom: 3px solid transparent;
}
.top .top-tabs a[aria-current="page"] { color: var(--ink); font-weight: 700; border-bottom-color: var(--primary); }
.top .top-list { list-style: none; margin: 0; padding: 0; }
.top .top-it {
  display: grid; grid-template-columns: 84px minmax(0, 1fr) 124px; gap: 4px 16px; padding: 12px 0;
  border-bottom: 1px solid var(--line); align-items: start;
}
.top .top-it__d { font-size: var(--fs-meta); color: var(--muted); white-space: nowrap; }
.top .top-it__d small { display: block; font-size: var(--fs-caption); white-space: normal; line-height: 1.4; }
.top .top-it__t { font-weight: 700; font-size: var(--fs-body); line-height: 1.55; color: var(--ink); }
.top a.top-it__t:hover { color: var(--primary); }
.top .top-it__o { display: block; font-size: var(--fs-meta); color: var(--muted); margin-top: 4px; }
.top .top-it__s {
  display: flex; flex-direction: column; align-items: flex-end; gap: 4px; font-size: var(--fs-meta);
  color: var(--ink-2); text-align: right;
}
.top .top-empty { padding: 16px 0; color: var(--muted); }
.top .more { margin: 16px 0 0 0; display: flex; flex-wrap: wrap; gap: 4px 28px; }

.top .top-aside { display: flex; flex-direction: column; gap: 32px; }
.top .top-aside .h2s { padding-bottom: 8px; border-bottom: 2px solid var(--ink); font-size: var(--fs-lead); }
.top .join { background: var(--primary); color: var(--bg); border-radius: 8px; padding: 20px; }
.top .join .h2s { color: var(--bg); border: 0; padding: 0; }
.top .join ul, .top .join .join-text { margin: 8px 0 16px 0; padding-left: 20px; font-size: var(--fs-meta); line-height: 1.7; }
.top .join .btn { width: 100%; background: var(--bg); color: var(--primary); border-color: var(--bg); }
.top .join .btn:hover { background: var(--primary-tint); }
.top .join .fine { margin: 8px 0 0 0; font-size: var(--fs-caption); opacity: .85; }
.top .top-aside .tile-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 12px; }
.top .top-aside .tile { padding: 12px; }
.top .top-aside .tile__value { font-size: var(--fs-lead); }
.top .top-aside .lead { font-size: var(--fs-caption); line-height: 1.7; margin: 8px 0 0 0; }
.top .prefs {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); margin-top: 12px;
  border-left: 1px solid var(--line); border-top: 1px solid var(--line);
}
.top .prefs a, .top .prefs span {
  display: flex; align-items: center; justify-content: center; min-height: 44px; font-size: var(--fs-caption);
  border-right: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.top .prefs a { color: var(--ink); }
.top .prefs a:hover { background: var(--primary-tint); color: var(--primary); }
.top .prefs span { color: var(--faint); cursor: default; }
.top .cats { list-style: none; margin: 12px 0 0 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; font-size: var(--fs-meta); }
.top .cats a { display: inline-block; padding: 4px 0; }
.top .small { font-size: var(--fs-caption); color: var(--faint); margin: 8px 0 0 0; }

/* 機能の紹介: 1つの機能に1行、左に言葉・右に画面の縮図（例） */
.top .tour { padding-top: 72px; }
.top .tour-head { max-width: 44em; }
.top .tour-head p { margin: 12px 0 0 0; font-size: var(--fs-lead); color: var(--ink-2); }
.top .feature {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); gap: 48px; align-items: center;
  padding: 44px 0; border-bottom: 1px solid var(--line);
}
.top .feature:nth-of-type(even) .fx { order: -1; }
.top .ftag { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 0 0 12px 0; font-size: var(--fs-caption); color: var(--muted); }
.top .plan, .top .dev {
  display: inline-flex; align-items: center; min-height: 24px; padding: 0 8px; border-radius: 2px;
  font-size: var(--fs-caption); font-weight: 700;
}
.top .plan { border: 1px solid var(--line-strong); color: var(--ink-2); background: var(--bg); }
.top .plan--paid { border-color: var(--primary); color: var(--primary); }
.top .dev { border: 1px dashed var(--line-strong); color: var(--muted); }
.top .feature h3 { font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-h2); line-height: 1.45; margin: 0; }
.top .feature p.fd { margin: 12px 0 0 0; font-size: var(--fs-body); color: var(--ink-2); max-width: 30em; }
.top .feature ul.pts { margin: 16px 0 0 0; padding: 0; list-style: none; font-size: var(--fs-meta); }
.top .feature ul.pts li { padding: 4px 0 4px 20px; position: relative; }
.top .feature ul.pts li::before { content: ""; position: absolute; left: 0; top: 14px; width: 8px; height: 2px; background: var(--primary); }
.top .frame { border: 1px solid var(--line-strong); border-radius: 8px; background: var(--paper); overflow: hidden; }
.top .frame-cap {
  display: flex; justify-content: space-between; gap: 8px; padding: 8px 16px; border-bottom: 1px solid var(--line);
  font-size: var(--fs-caption); color: var(--muted); background: var(--bg-soft);
}
.top .frame-body { padding: 16px; }
.top .chip {
  display: inline-flex; align-items: center; min-height: 24px; padding: 0 12px; border-radius: 999px;
  font-size: var(--fs-caption); font-weight: 700; white-space: nowrap;
}
.top .chip--open { color: var(--ok); background: var(--ok-bg); border: 2px solid var(--ok); }
/* 縮図: 入札ページ */
.top .bp h4 { font-family: var(--font-serif); font-size: var(--fs-lead); line-height: 1.5; margin: 8px 0 4px 0; }
.top .bp .o { font-size: var(--fs-caption); color: var(--muted); margin: 0; }
.top .bp .now { margin-top: 12px; padding: 8px 12px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 4px; }
.top .bp .now small { display: block; font-size: var(--fs-caption); color: var(--muted); }
.top .bp .now b { font-size: var(--fs-lead); }
.top .bp .now b span { font-size: var(--fs-meta); color: var(--ok); margin-left: 8px; }
.top .bp dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 16px; margin: 12px 0 0 0; font-size: var(--fs-meta); }
.top .bp dt { color: var(--muted); }
.top .bp dd { margin: 0; }
.top .bp ol { margin: 12px 0 0 0; padding: 0; list-style: none; font-size: var(--fs-caption); border-top: 1px solid var(--line); }
.top .bp ol li { display: flex; gap: 12px; padding: 4px 0; border-bottom: 1px solid var(--line); }
.top .bp ol li span { color: var(--muted); width: 44px; flex: none; }
/* 縮図: 業界マップ（升目の地図） */
.top .mapx .sel { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.top .mapx .sel span { font-size: var(--fs-caption); padding: 4px 12px; border: 1px solid var(--line-strong); border-radius: 999px; color: var(--ink-2); }
.top .mapx .sel span.on { background: var(--primary); color: var(--bg); border-color: var(--primary); }
.top .tiles { display: grid; grid-template-columns: repeat(11, minmax(0, 1fr)); gap: 4px; }
.top .tiles i { display: block; aspect-ratio: 1; border-radius: 2px; background: var(--heat-0); }
.top .tiles i.x { visibility: hidden; }
.top .legend { display: flex; align-items: center; gap: 8px; margin-top: 12px; font-size: var(--fs-caption); color: var(--muted); }
.top .legend b { display: inline-block; width: 18px; height: 10px; border-radius: 2px; }
.top .tiles i.t1, .top .legend b.t1 { background: var(--heat-1); }
.top .tiles i.t2, .top .legend b.t2 { background: var(--heat-2); }
.top .tiles i.t3, .top .legend b.t3 { background: var(--heat-3); }
.top .tiles i.t4, .top .legend b.t4 { background: var(--heat-4); }
/* 縮図: 企業ページ（四半期の落札） */
.top .co .name { font-family: var(--font-serif); font-weight: 700; font-size: var(--fs-lead); }
.top .co .id { font-size: var(--fs-caption); color: var(--muted); }
.top .qbars {
  display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 8px; align-items: end; height: 120px;
  margin-top: 16px; border-bottom: 1px solid var(--line-strong);
}
.top .qbars div { background: var(--primary-soft); border-radius: 2px 2px 0 0; }
.top .qbars div.now { background: var(--primary); }
.top .qbars div:nth-child(1) { height: 38%; }
.top .qbars div:nth-child(2) { height: 52%; }
.top .qbars div:nth-child(3) { height: 30%; }
.top .qbars div:nth-child(4) { height: 64%; }
.top .qbars div:nth-child(5) { height: 58%; }
.top .qbars div:nth-child(6) { height: 88%; }
.top .qbars div:nth-child(7) { height: 47%; }
.top .qbars div:nth-child(8) { height: 72%; }
.top .qlab {
  display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 8px; font-size: var(--fs-caption);
  color: var(--muted); text-align: center; margin-top: 4px;
}
.top .co table { width: 100%; border-collapse: collapse; font-size: var(--fs-caption); margin-top: 12px; }
.top .co td { padding: 4px 0; border-bottom: 1px solid var(--line); }
.top .co td:last-child { text-align: right; white-space: nowrap; }
/* 縮図: 予算→見通し→公告→落札 */
.top .flowx { list-style: none; margin: 0; padding: 0; position: relative; }
.top .flowx::before { content: ""; position: absolute; left: 9px; top: 8px; bottom: 8px; width: 2px; background: var(--line-strong); }
.top .flowx li { position: relative; padding: 0 0 16px 32px; }
.top .flowx li::before {
  content: ""; position: absolute; left: 3px; top: 6px; width: 14px; height: 14px; border-radius: 50%;
  background: var(--bg); border: 2px solid var(--line-strong);
}
.top .flowx li.hit::before { background: var(--primary); border-color: var(--primary); }
.top .flowx b { display: block; font-size: var(--fs-body); }
.top .flowx small { font-size: var(--fs-caption); color: var(--muted); }
.top .flowx .when { float: right; font-size: var(--fs-caption); color: var(--muted); }
/* 縮図: メール */
.top .mail .h { padding: 8px 16px; border-bottom: 1px solid var(--line); background: var(--bg-soft); }
.top .mail .h small { display: block; font-size: var(--fs-caption); color: var(--muted); }
.top .mail .h b { font-size: var(--fs-body); }
.top .mail ul { list-style: none; margin: 0; padding: 0; font-size: var(--fs-meta); }
.top .mail li { display: flex; justify-content: space-between; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--line); }
.top .mail li:last-child { border-bottom: 0; }
.top .mail li span { color: var(--muted); white-space: nowrap; }
.top .mail li em { font-style: normal; font-size: var(--fs-caption); font-weight: 700; color: var(--accent); margin-right: 8px; }
/* 縮図: AI の読み取り */
.top .ai dl { margin: 0; font-size: var(--fs-meta); }
.top .ai dt { font-weight: 700; margin-top: 12px; }
.top .ai dt:first-child { margin-top: 0; }
.top .ai dd { margin: 4px 0 0 0; }
.top .ai q {
  display: block; margin-top: 4px; padding: 4px 12px; background: var(--bg-soft); border-radius: 2px;
  font-size: var(--fs-caption); color: var(--muted); quotes: "「" "」";
}

/* 料金 */
.top .price { padding-top: 72px; }
.top .price-head { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 16px 32px; align-items: end; }
.top .price-head p { margin: 12px 0 0 0; font-size: var(--fs-lead); color: var(--ink-2); }
.top .price-head .early { margin: 8px 0 0 0; font-size: var(--fs-body); font-weight: 700; color: var(--primary); }
.top .period { display: inline-flex; border: 1.5px solid var(--primary); border-radius: 4px; overflow: hidden; }
.top .seg {
  min-height: 40px; padding: 0 20px; border: 0; background: transparent; color: var(--primary);
  font-family: inherit; font-size: var(--fs-meta); font-weight: 700; cursor: pointer;
}
.top .seg + .seg { border-left: 1.5px solid var(--primary); }
.top .seg[aria-pressed="true"] { background: var(--primary); color: var(--bg); }
.top .cmp { margin-top: 28px; display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 40px; align-items: center; }
.top .cmp figure { margin: 0; }
/* 料金の比較: 縦棒3本と他社の料金の下限の線（2026-09-26 PO 提案）。高さ = 金額 ÷ 34,000円
   （1年間にしても比は変わらないので固定で書く）。線の高さ 80.2% = 27,280 ÷ 34,000。
   基本 14.6% = 4,980 ÷ 34,000（2026-09-26 11:58 PO決定で 2,980円の 8.8% から改めた）。 */
.top .vplot {
  position: relative; height: 240px; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px;
  border-bottom: 1.5px solid var(--line-strong);
}
.top .vcol { position: relative; height: 100%; }
.top .vfill {
  position: absolute; left: 18%; right: 18%; bottom: 0; border-radius: 6px 6px 0 0; transform-origin: bottom;
  animation: top-vbar-grow .8s cubic-bezier(.2, .7, .2, 1);
}
.top .vcol.us .vfill { height: 14.6%; background: var(--primary); }
.top .vcol.us2 .vfill { height: 28.8%; background: var(--primary-soft); }
.top .vcol.other .vfill { height: 96.4%; background: var(--line-strong); }
.top .vcol.other .vrng { position: absolute; left: 0; right: 0; top: 0; height: 16.8%; background: var(--faint); border-radius: 6px 6px 0 0; }
.top .vline { position: absolute; left: 0; right: 0; bottom: 80.2%; border-top: 2px dashed var(--ink); z-index: 1; }
.top .vline > span {
  position: absolute; left: 0; bottom: 4px; padding: 0 8px 0 0; background: var(--bg);
  font-size: var(--fs-meta); font-weight: 700; color: var(--ink); white-space: nowrap;
}
.top .vline .v small { font-size: var(--fs-caption); margin-left: 4px; }
.top .vlabels { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 12px; text-align: center; }
.top .vlabels .brow { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.top .vlabels .v { font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-lead); line-height: 1.3; overflow-wrap: anywhere; }
.top .vlabels .v small { font-family: var(--font-sans); font-size: var(--fs-caption); font-weight: 700; color: var(--muted); margin-left: 4px; }
.top .vlabels .brow.us .v { color: var(--primary); }
.top .vlabels b { font-size: var(--fs-meta); }
.top .vlabels .sub { font-size: var(--fs-caption); color: var(--muted); }
@keyframes top-vbar-grow { from { transform: scaleY(0); } }
@media (prefers-reduced-motion: reduce) { .top .vfill { animation: none; } }
.top .ratio .big {
  font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-display); line-height: 1;
  color: var(--primary); letter-spacing: -.02em;
}
.top .ratio .big small { font-size: var(--fs-h2); }
.top .ratio p { margin: 12px 0 0 0; font-size: var(--fs-body); color: var(--ink-2); }
.top .ratio .src { font-size: var(--fs-caption); color: var(--faint); margin-top: 12px; }
.top .pick-wrap { margin-top: 48px; }
.top .picks { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 16px; }
.top .pick {
  position: relative; min-height: 96px; padding: 12px 16px; border: 1.5px solid var(--line-strong); border-radius: 8px;
  background: var(--paper); color: var(--ink); font-family: inherit; text-align: left; cursor: pointer;
  display: flex; flex-direction: column; gap: 4px;
}
.top .pick:hover { border-color: var(--primary); }
.top .pick b { font-size: var(--fs-meta); }
.top .pick span { font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-h2); line-height: 1.2; }
.top .pick span small { font-family: var(--font-sans); font-size: var(--fs-caption); color: var(--muted); font-weight: 700; }
.top .pick em { position: absolute; right: 12px; top: 12px; font-style: normal; font-size: var(--fs-caption); font-weight: 700; color: var(--accent); }
.top .pick[aria-pressed="true"] { border-color: var(--primary); background: var(--primary); color: var(--bg); }
.top .pick[aria-pressed="true"] span small, .top .pick[aria-pressed="true"] em { color: var(--bg); }
.top .feat { list-style: none; margin: 20px 0 0 0; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 28px; }
.top .feat li {
  display: grid; grid-template-columns: 22px minmax(0, 1fr); column-gap: 12px; padding: 12px 0;
  border-bottom: 1px solid var(--line); transition: opacity .2s;
}
.top .feat li::before {
  content: ""; grid-row: 1 / span 2; width: 18px; height: 18px; margin-top: 4px; border-radius: 50%;
  border: 2px solid var(--line-strong); box-sizing: border-box;
}
.top .feat li.on::before { border-color: var(--primary); background: var(--primary); box-shadow: inset 0 0 0 4px var(--paper); }
.top .feat li.off { opacity: .4; }
.top .feat .fk { font-weight: 700; font-size: var(--fs-meta); }
.top .feat .fd { font-size: var(--fs-caption); color: var(--muted); }
.top .pick-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-top: 20px; }
.top .pick-foot b { font-size: var(--fs-body); }
.top .corp {
  margin: 28px 0 0 0; padding: 20px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg-soft);
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px 24px; align-items: center;
}
.top .corp b { font-family: var(--font-serif); font-size: var(--fs-lead); }
.top .corp p { margin: 4px 0 0 0; font-size: var(--fs-meta); color: var(--ink-2); }

/* よくある質問・最後の呼びかけ */
.top .faq { padding-top: 72px; }
.top .faq details { border-bottom: 1px solid var(--line); }
.top .faq summary { cursor: pointer; padding: 16px 0; font-weight: 700; font-size: var(--fs-body); min-height: 44px; }
.top .faq p { margin: 0 0 16px 0; max-width: 44em; color: var(--ink-2); }
.top .closing { margin-top: 72px; background: var(--bg-soft); border-top: 2px solid var(--ink); }
.top .closing .wrap {
  padding-top: 48px; padding-bottom: 48px; display: flex; flex-wrap: wrap; align-items: center;
  justify-content: space-between; gap: 20px 40px;
}
.top .closing .big { font-family: var(--font-serif); font-weight: 900; font-size: var(--fs-title); line-height: 1.4; margin: 0; }
.top .closing p.s { margin: 4px 0 0 0; color: var(--ink-2); }

@media (max-width: 960px) {
  .top .work { grid-template-columns: 1fr; gap: 32px; }
  .top .prefs { grid-template-columns: repeat(8, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
  .top .feature { grid-template-columns: 1fr; gap: 20px; padding: 32px 0; }
  .top .feature:nth-of-type(even) .fx { order: 0; }
  .top .cmp { grid-template-columns: 1fr; gap: 24px; }
  .top .feat { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .top .price-head { grid-template-columns: 1fr; }
  .top .picks { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .top .wrap { padding-left: 16px; padding-right: 16px; }
  .top .top-h1 { font-size: var(--fs-title); }
  .top .lede { font-size: var(--fs-body); }
  .top .top-h2, .top .closing .big { font-size: var(--fs-h2); }
  .top .top-it { grid-template-columns: 1fr; gap: 4px; }
  .top .top-it__s { flex-direction: row; align-items: center; gap: 12px; justify-content: flex-start; text-align: left; }
  .top .corp { grid-template-columns: 1fr; }
}
@media (max-width: 520px) {
  .top .feat { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
  .top .prefs { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}

/* ユーティリティ（他のコンポーネント色より必ず勝たせるため、意図的にファイル末尾に置く） */
.c-muted { color: var(--muted) !important; }
.c-faint { color: var(--faint) !important; }

@media (max-width: 900px) {
  .content-columns { flex-direction: column; }
  .col-side { width: 100%; }
  .tile-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .filter-row { flex-direction: column; }
  .plan-grid { grid-template-columns: 1fr; }
  .top .first-grid { grid-template-columns: 1fr; gap: 24px; }
}
/* ヘッダーの狭い画面（2026-09-26 トップ第6版）: ナビを2行目に回し、折り返さず横スクロール。
   最終巡回の表示は隠す（副次情報） */
@media (max-width: 860px) {
  .site-nav { order: 3; flex-basis: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .site-nav ul { flex-wrap: nowrap; }
}
@media (max-width: 640px) {
  .last-crawl-badge { display: none; }
  .site-header__inner, .page-wrap, .site-footer__inner, .dev-notice__inner { padding-left: 16px; padding-right: 16px; }
}

/* ============================================================
   入札ページ（1入札=1ページ・Issue 132・単位5「HTML と CSS」）。bp-プレフィックスの
   新規クラスだけを足す（既存クラスへの変更なし）。色・書体・サイズは既存の:root変数
   だけを使う（新しいトークンは足さない。トークン定義そのものの変更・ヘッダー/フッター
   の改訂は別の担当がfeat/newlook-20260926で行っている）。見出し(h1/h2)・breadcrumbは
   既存の.h1/.h2/.breadcrumbをそのまま使う（重複定義しない）。ボタンは既存の
   .btn/.btn-primary/.btn-secondaryをそのまま使う（新しいbtn系クラスを増やさない）。
   現在の状況の箱・引用に片側だけの色の帯を使わない（PO 2026-09-25指示。全周の細い枠＋
   薄い地。確認できていない状態だけ枠を点線にする）。 */
.bp-page { max-width: 760px; margin: 0 auto; padding: 24px 24px 48px 24px; }
/* スクリーンリーダー専用（状態の印の前に読み上げる「状態: 」）。視覚的には隠す */
.bp-vh { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.bp-nw { white-space: nowrap; }

.bp-marks { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
.bp-marks__state { margin: 0; }
/* 状態の印: 1ページに1つ・丸い形。グループごとに形と色の両方を変える（色だけに頼らない・
   画面の設計§12.1「状態の印は文字」）。受付中=太い実線(緑/朱)／受付後・結果待ち=細い実線
   (無彩色)／確認できていない=点線(無彩色)／終わった=塗りつぶし(無彩色の濃い地/赤茶の地)。
   進行中の印と終わった印は色も形も共有しない。 */
.bp-chip {
  display: inline-flex; align-items: center; min-height: 28px; padding: 0 12px;
  border-radius: 999px; font-size: var(--fs-pill); font-weight: 700;
  border: 1px solid var(--line); color: var(--ink); background: var(--bg);
}
.bp-chip--open { color: var(--ok); background: var(--ok-bg); border: 2px solid var(--ok); }
.bp-chip--soon { color: var(--accent); background: var(--bg); border: 2px solid var(--accent); }
.bp-chip--wait { color: var(--ink); background: var(--bg); border: 1px solid var(--line); }
.bp-chip--unknown { color: var(--ink); background: var(--bg); border: 2px dashed var(--faint); }
.bp-chip--done { color: var(--bg); background: var(--ink); border: 1px solid var(--ink); }
.bp-chip--stop { color: var(--bg); background: var(--warn); border: 1px solid var(--warn); }
/* 補足の印: 状態ではない・0個以上・角の四角い形。状態の印の色は使わない */
.bp-flags { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.bp-flag {
  display: inline-flex; align-items: center; min-height: 28px; padding: 0 8px; border-radius: 2px;
  font-size: var(--fs-pill); border: 1px solid var(--line); color: var(--ink); background: var(--bg-soft);
}
.bp-orderer { margin: 8px 0 0 0; color: var(--muted); font-size: var(--fs-meta); }

.bp-now { margin-top: 16px; padding: 16px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 4px; }
.bp-now--unknown { border: 1px dashed var(--faint); }
.bp-now__head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 12px; }
.bp-now__title { margin: 0; font-size: var(--fs-meta); font-weight: 700; color: var(--ink); }
.bp-now__asof { margin: 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-now__label { margin: 8px 0 0 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-now__big { margin: 0; font-size: var(--fs-h2); font-weight: 700; line-height: 1.5; }
.bp-now__kv { margin: 8px 0 0 0; }
.bp-now__kv > div { display: flex; flex-wrap: wrap; gap: 0 12px; align-items: baseline; padding: 4px 0; }
.bp-now__kv dt { font-size: var(--fs-meta); color: var(--muted); min-width: 5em; }
.bp-now__kv dd { margin: 0; font-weight: 700; }
.bp-now__kv dd.big { font-size: var(--fs-h2); }
.bp-now__kv .tax { font-size: var(--fs-body); font-weight: 700; }
.bp-now__list { margin: 8px 0 0 0; padding: 0; list-style: none; font-size: var(--fs-meta); }
.bp-now__list li { padding: 4px 0; border-top: 1px solid var(--line); }
.bp-now__list li:first-child { border-top: 0; }
.bp-now__msg { margin: 8px 0 0 0; }
.bp-now__fix { margin: 12px 0 0 0; padding-top: 8px; border-top: 1px solid var(--line); font-size: var(--fs-meta); }
.bp-sub { margin: 8px 0 0 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-left { display: inline-block; font-size: var(--fs-body); font-weight: 700; margin-left: 4px; }
.bp-left--open { color: var(--ok); }
.bp-left--soon { color: var(--accent); }
.bp-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }

.bp-toc { margin-top: 20px; }
.bp-toc ul { display: flex; flex-wrap: wrap; gap: 4px 16px; list-style: none; margin: 0; padding: 0; font-size: var(--fs-meta); }
.bp-toc a { display: inline-block; padding: 4px 0; min-height: 32px; }

.bp-sec { margin-top: 40px; }
.bp-sec__lead { margin: 0 0 8px 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-h3 { font-size: var(--fs-body); font-weight: 700; margin: 20px 0 4px 0; }

.bp-kv { margin: 0; }
.bp-kv > div { padding: 12px 0; border-bottom: 1px solid var(--line-soft); }
.bp-kv dt { font-size: var(--fs-meta); color: var(--muted); }
.bp-kv dd { margin: 0; }
.bp-cert { display: inline-block; margin-left: 8px; font-size: var(--fs-meta); color: var(--muted); white-space: nowrap; }
.bp-src { margin: 8px 0 0 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-sched .bp-nw { font-weight: 700; }

.bp-docs__count { margin: 0; font-size: var(--fs-body); }
.bp-doc-list { list-style: none; margin: 0; padding: 0; }
.bp-doc-list--nested { margin-top: 8px; padding-left: 20px; }
.bp-doc { padding: 12px 0; border-bottom: 1px solid var(--line-soft); }
.bp-doc__name { font-weight: 700; }
.bp-doc__meta { font-size: var(--fs-meta); color: var(--muted); }
.bp-doc__link { display: inline-block; margin-top: 4px; padding: 4px 0; font-size: var(--fs-meta); font-weight: 700; }
.bp-doc--closed { margin-top: 8px; padding: 12px 16px; background: var(--bg-soft); border: 1px solid var(--line); border-radius: 4px; }
.bp-docs__rule { margin: 12px 0 0 0; font-size: var(--fs-meta); color: var(--muted); }
.bp-more { margin: 8px 0 0 0; border: 1px solid var(--line); border-radius: 4px; padding: 0 12px; }
.bp-more > summary { cursor: pointer; min-height: 44px; padding: 12px 0; font-size: var(--fs-meta); font-weight: 700; }
.bp-more[open] > summary { border-bottom: 1px solid var(--line-soft); }

/* 経過: 古い順の縦のタイムライン。点=公告・訂正は既定色(--primary)／落札=無彩色の濃い
   塗り／中止=赤茶／予算・見通し=灰／予定・未確認=中空の点線。緑と朱は使わない
   （受付中の状態だけの色。画面の設計§5.6と色を共有しない） */
.bp-tl { list-style: none; margin: 8px 0 0 0; padding: 0 0 0 28px; position: relative; }
.bp-tl::before { content: ""; position: absolute; left: 9px; top: 8px; bottom: 8px; width: 2px; background: var(--line); }
.bp-tl__li { position: relative; padding: 0 0 20px; }
.bp-tl__li::before {
  content: ""; position: absolute; left: -25px; top: 6px; width: 12px; height: 12px; border-radius: 50%;
  background: var(--primary); box-shadow: 0 0 0 3px var(--bg-soft);
}
.bp-tl__li--award::before { background: var(--ink); }
.bp-tl__li--cancel::before { background: var(--warn); }
.bp-tl__li--plan::before { background: var(--muted); }
.bp-tl__li--group::before { background: var(--bg); border: 2px solid var(--primary); }
.bp-tl__li--future::before, .bp-tl__li--unknown::before { background: var(--bg); border: 2px dashed var(--faint); }
.bp-tl__date { font-size: var(--fs-meta); color: var(--muted); }
.bp-tl__kind { font-weight: 700; }
.bp-tl__body { margin: 4px 0 0 0; font-size: var(--fs-meta); }
.bp-tl__box { margin-top: 8px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 4px; font-size: var(--fs-meta); }
.bp-tl__li--unknown .bp-tl__box, .bp-tl__li--future .bp-tl__box { border-style: dashed; border-color: var(--faint); }

.bp-rows-count { margin: 12px 0 0 0; font-size: var(--fs-meta); }
.bp-award-list { list-style: none; margin: 8px 0 0 0; padding: 0; font-size: var(--fs-meta); }
.bp-award-list li { padding: 4px 0; border-top: 1px solid var(--line-soft); }
.bp-award-list li:first-child { border-top: 0; }

.bp-legend { margin-top: 40px; border: 1px solid var(--line); border-radius: 4px; padding: 0 16px; }
.bp-legend summary { cursor: pointer; font-weight: 700; padding: 12px 0; min-height: 44px; }
.bp-legend dl { margin: 0 0 16px 0; font-size: var(--fs-meta); }
.bp-legend dt { font-weight: 700; margin-top: 8px; }
.bp-legend dd { margin: 0; color: var(--ink); }

.bp-choice-list { list-style: none; margin: 16px 0 0 0; padding: 0; }
.bp-choice__item { padding: 12px 0; border-bottom: 1px solid var(--line-soft); }
.bp-choice__meta { display: block; font-size: var(--fs-meta); color: var(--muted); }
.bp-empty__org { margin-top: 16px; font-size: var(--fs-body); }

@media (min-width: 520px) {
  .bp-kv > div, .bp-now__kv > div { display: grid; grid-template-columns: 10em 1fr; gap: 16px; }
}
