/* BusinessEngine Server WebUI 自前CSS(project-authored・vendored assetではない)。
   便H-3(0563-auditor起票)で新設・便J1(0701/0702-auditor起票・WebUI第3期波)で全面再構成。

   【便J1方針(0702裁定)】docs/Design/keiyaku-4screens.html(fixture)をgolden(視覚基準)とし、
   fixtureのCSS体系(:root変数群+部品スタイル)をそのまま移植する。従来の「変数実測値を固定値
   として転記」方式(H-3〜H-6ab)は廃止し、fixture原文の変数参照へ揃える(値は同一・保守性で
   fixture との diff 照合を容易にするため)。fixture専用装飾(.doc-head/.frame/.browser-bar/
   .ann/.notes/details.decl等のモック枠・注記系)は移植対象外(分類表=0703-producer便 §2)。
   primer.css(.markdown-body)の英文向け既定(16px基準・h1 2em・table width:max-content)は
   本ファイル後段の「markdown-body打ち消し層」でfixture体系へ上書きする。 */

/* ===== fixture :root変数(keiyaku-4screens.html逐語移植・便J1) =====
   便UX-033b(0995-auditor起票・2026-08-26): `--border-muted`は元々fixture原文どおりの命名
   だったが、Primer CSS(`primer.css`)側にも同名変数(`--border-muted: var(--borderWidth-default)
   solid var(--borderColor-muted)`・borderショートハンド全体を保持)が定義されておりCSS変数名が
   衝突していた。`:root`(詳細度0,1,0)よりPrimer側の属性セレクタ(`[data-color-mode=light]
   [data-light-theme=light]`等・詳細度0,2,0)の方が高いため、`<html>`要素上ではPrimer側の値が
   常に勝ち、本fileの色値定義は一切適用されない。`var(--border-muted)`をcolor値として使う
   箇所(`border-bottom:1px solid var(--border-muted)`等)は、実際には
   `border-bottom:1px solid (0.0625rem solid #d1d9e0b3)`という構文不正な値に展開され、
   invalid at computed-value timeとなり宣言全体(border-bottom)が無効化される実害があった
   (ref検索候補の罫線区切りが0pxになる・ux線0048実測)。`--be-border-muted`(project-authored
   接頭辞)へ改名しPrimer側の変数を一切参照しない構造へ是正した——fixture視覚体系との差分は
   変数名のみで値は無変更(diff照合可能性を保つ便J1方針は維持)。他17変数(`--canvas`等)は
   Primer側に同名定義が存在しないことを全数確認済み(棚卸し・0995 §2-3)。 ===== */
:root{
  --canvas:#ffffff; --subtle:#f6f8fa; --inset:#eff2f5;
  --border:#d1d9e0; --be-border-muted:#e4e9ee;
  --fg:#1f2328; --muted:#59636e; --faint:#818b98;
  --accent:#0969da;
  --success:#1a7f37; --success-bg:#dafbe1;
  --attention:#9a6700; --attention-bg:#fff8c5;
  --danger:#d1242f; --danger-bg:#ffebe9;
  --done:#8250df; --done-bg:#fbefff;
  --shadow:0 1px 2px rgba(31,35,40,.06);
}
*{box-sizing:border-box}

/* 全体基準(fixture body逐語+H-6ab密度13px維持)。font-familyの日本語stack明示は
   便J1の中核fix——app.cssに従来font-family指定が無くprimer.cssの英文向けstackに依存して
   いたため、ブラウザごとの日本語フォント選択・合成差(Safari顕在化・指摘③)を招いていた。
   背景はfixtureの.page(アプリ画面本体)=canvas白を採用(fixture body=insetはモック枠外の
   台紙色であり実機の全画面アプリには適用しない・0703 §2判断表)。 */
body{margin:0;background:var(--canvas);color:var(--fg);
  font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Yu Gothic UI",Meiryo,system-ui,sans-serif;
  font-size:13px;line-height:1.5}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}

/* ===== markdown-body打ち消し層(便J1) =====
   primer.cssの.markdown-bodyはGitHub Markdown文書向けの既定(font-size:16px・h1 2em=32px・
   h2 1.5em=24px・table{display:block;width:max-content}=内容幅に縮む)を持ち、これが
   指摘①(タイトル過大)・③(サイズまちまち=main内16px基準とapp.css密度13pxの2系統混在)・
   ④(表がウィンドウ幅に広がらない)の直接原因だった(0703 §3実測)。fixtureの視覚体系
   (基準13px・h1 16px/h2 15px・表は全幅)へ上書きする。 */
.markdown-body{font-size:13px;line-height:1.5;
  font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN","Yu Gothic UI",Meiryo,system-ui,sans-serif}
.markdown-body h1{font-size:16px;font-weight:600;margin:0 0 6px;padding-bottom:0;border-bottom:0}
.markdown-body h2{font-size:15px;font-weight:600;margin:10px 0 4px;padding-bottom:0;border-bottom:0}
.markdown-body table{display:table;width:100%;max-width:100%}
main.markdown-body{padding:10px 18px 16px}

/* ===== ボタン・入力(fixture逐語・便J1で:hover/btn-primary/btn-danger/focus/select補完) ===== */
.btn{display:inline-block;padding:3px 11px;font-size:12.5px;font-weight:500;line-height:1.5;
  border:1px solid var(--border);border-radius:6px;background:var(--subtle);color:var(--fg);cursor:pointer}
.btn:hover{background:#eef1f4;text-decoration:none}
.btn-primary{background:#1f883d;border-color:rgba(31,35,40,.15);color:#fff}
.btn-primary:hover{background:#1a7f37}
.btn-danger{color:var(--danger)}
/* 便CT-DASH-srv-2a(0629/0632-auditor起票): 頁3「講義プログラム（準備中）」ボタンの無効表示
   (srv-4まで実際のリンク先を作らない・クリック不可を視覚的に示す)。 */
.btn.disabled{cursor:default;opacity:.55;pointer-events:none}
.form-control{width:100%;padding:3px 8px;font-size:13px;border:1px solid var(--border);
  border-radius:5px;background:var(--canvas);color:var(--fg)}
.form-control:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}
select.form-control{appearance:auto}
.num{text-align:right;font-variant-numeric:tabular-nums}
.req{color:var(--danger);font-weight:600;margin-left:2px}

/* 便U1(0732-auditor起票・系統A-1・UX-002/004/005/007/008): Primer `.form-group`のform系規則
   (`.form-group .form-control{width:440px;background-color:muted}`・
   `.form-group textarea.form-control{height:200px;min-height:200px}`)を打ち消す。実装は`FIV-7`の
   `div.form-group`(label+制御要素の対)を全画面で使うため、Primerのform-group規則が常に効いてしまい、
   固定440px幅がgrid(`repeat(N,1fr)`)の暗黙最小値(min-content)を発火させてref列を圧縮していた
   (詳細は`docs/Design/UI-Design-Backlog.md` §9 UX-002/007・A-2のgrid修正とセットで解消)。
   両セレクタとも詳細度がPrimer側と同一(0,2,0/0,2,1)——app.cssはprimer.cssの後に読み込まれるため
   source order勝ちで上書きできる(`PageLayout.swift`の`<link>`順)。 */
.form-group .form-control{width:100%;max-width:100%;margin-right:0;background-color:var(--canvas)}
.form-group textarea.form-control{width:100%;height:auto;min-height:0}

/* 便FORM-1(UX-087・1851-auditor起票): 上記`width:100%`は日時・数値系入力欄まで親幅いっぱいに
   伸ばしてしまう(formSections未宣言formの親幅1330pxでそのまま伸長・ux 0231実測)。型別に
   `max-width`の上限を設け、値の桁数に対して不自然に広い入力欄を防ぐ(最重要原則#7の趣旨=
   数値は右揃え+桁を視覚的に確認できる密度を保つ、と整合)。text/select/ref型は対象外
   (自由記述・選択式で長さの妥当な上限が型から一意に決まらないため)。詳細度(0,3,0)で
   `.form-group .form-control`(0,2,0)に勝つ。em値は1366×768のヘッドレスブラウザ実測
   (`.form-control`のcomputed font・canvas measureTextによる値文字列の実描画幅測定)で
   「符号+小数点付き最悪ケース値がスクロールなしで収まる最小幅+視覚的余白」として確定した
   (fact申告・1851裁定原文の目安〔金額14em/日付12em/日時16em〕より実測値は小さい——
   money/quantity/decimal/unitPriceの実際の入力値はカンマ区切りを持たない生の数字列
   〔`numeric-input-init.js`が全角→半角変換のみ行いカンマ整形はしない〕ため、想定より
   短い文字幅で足りる)。 */
.form-group .form-control[inputmode="decimal"]{max-width:12em}
.form-group .form-control[data-flatpickr="date"]{max-width:10em}
.form-group .form-control[data-flatpickr="datetime"]{max-width:15em}

/* 便U3-f(0802-auditor起票UX-024・ユーザー裁定「全画面一律で直す」): Primer
   `.form-group.errored .error{position:absolute;z-index:10;...}`(吹き出し様式)はform-group内で
   入力欄直下に浮かせ、その下に別要素が続かない前提の様式。BADP-14/15(`BackdateAwareDatePicker.md`)が
   日付欄・理由欄を同一セルへ縦積みした構造と噛み合わず、絶対配置ゆえ後続要素を押し下げないため
   後続ラベルへ重なっていた(UX-024)。`.note.error`(`<p class="note error">`)へ`position:static`を
   当て通常フローへ戻し後続要素を押し下げる——BADP配下限定にせず全画面一律(浮かぶ表示は後続要素が
   ある限り常に同種の重なりを起こすため)。枠線装飾(primerの`::before`/`::after`三角形)は残る。 */
/* 便UX-078b(1602-auditor起票・ユーザー裁定「全画面一律で直す」・UX-024と同型の考え方):
   primerの`.form-group.errored .error`もPrimer本体の`.note`(muted色)も文字色を明示せず、
   `.note.error`は既定文字色(黒)のまま表示されていた——ラベル・入力枠はdanger赤になるのに
   メッセージ本文だけ黒という不一致(便UX-078・実機視覚確認で発見)。`--danger`(#d1242f)は
   実測したラベル色(rgb(209,36,47))と同一値のため、ラベル・枠・文字を揃える。 */
.form-group.errored .note.error{position:static;color:var(--danger)}

/* 便UX-079(1605-auditor起票・ユーザー裁定A): 素の`class="error"`(複数画面に散在していた
   Primer未対応の無装飾エラー段落・12箇所)を`.flash.flash-error`(便UX-046で確立済み)へ
   統一し、`.error`はPrimer本来のfield帰属専用(`.form-group.errored .error`/`.note.error`)へ
   役割を戻した。念のため、素の`.error`が将来再導入されても無装飾で沈黙させないfallback
   (danger文字色のみ)を置く——詳細度(0,1,0)は`.form-group .error{display:none}`
   (primer.css・0,2,0)にも`.form-group.errored .error{…}`(primer.css・0,3,0)にも負けるため、
   既存のPrimer挙動(非errored時は非表示・errored時は吹き出し様式)には一切影響しない。 */
.error{color:var(--danger)}

/* 便UX-079(1605-auditor起票・ユーザー裁定B): `.dating-warning`(`BackdateAwareDatePicker`の
   forbidden系事前警告——入力エラーではなく「未来/過去日時は入力できません」という案内)は
   親div.form-group内への帰属は既に満たされており(BADP-10)、欠けていたのは色のみだった。
   `.note.error`(便UX-078b)と同型に文字色のみを与える(エラーではなく事前警告であることを
   danger赤と区別するためattentionトーンを使う・背景/枠は付けない)。DOM位置・親構造は
   変えない(色のみのfix)。 */
.dating-warning{color:var(--attention)}

/* 便UX-038(1004/1006-auditor起票・ux線0058): Primer`.form-group{margin:15px 0}`が
   `BackdateAwareDatePicker.render`(BADP-14)の内側`div.form-group`(日付欄自体のサブgroup・
   `errored`時の理由欄サブgroupも同型)にも適用され、外側`div.form-group`(grid item本体)内で
   独自のmarginを持ってしまう。実機実測(1366×768)で「適用日時」ラベルが「摘要」(単一階層の
   `.form-group`)より15px下にずれる原因(外側grid item自体のtopは両者一致=grid配置は正しい)。
   `.form-group`が`.form-group`の直接の子として出現するのは本file(BADP)構造のみ
   (`grep -rn 'class="form-group'` 全画面横断で確認済み)のため、直接子孫セレクタで
   ネストされた内側`.form-group`のmarginのみを打ち消す(他画面の単一階層`.form-group`には
   一切影響しない)。BADP-16と同様、Swiftコード(HTML構造)は無改修——CSS側の根治。 */
.form-group > .form-group{margin:0}

/* stateTones バッジ(§10.4.7〔#dsl-state-tones〕)。クラス名はtone値そのもの
   (attention/positive/critical/neutral/done・閉じた5値)。fixtureの日本語state名セレクタ
   (.st-申込等)は採らず、既存tone 5値方式を維持する(0627裁定・意図的差分——色値はfixtureの
   対応変数と同一)。 */
.st{display:inline-block;padding:0 9px;font-size:11px;font-weight:600;border-radius:11px}
.st-attention{background:var(--attention-bg);color:var(--attention)}
.st-positive{background:var(--success-bg);color:var(--success)}
.st-critical{background:var(--danger-bg);color:var(--danger)}
.st-neutral{background:var(--inset);color:var(--muted)}
.st-done{background:var(--done-bg);color:var(--done)}

/* 行トーン(便UXB-9a・1354裁定・ユーザー裁定㉒): stateTonesのtoneがcritical/attentionの
   行のみ左太線+背景色で強調する(positive/done/neutralは行反映なし・全塗りは一覧が色で
   埋まり緊急行が埋没するため不採用)。既存tone変数を流用し`.flash-error`と同型のパターン
   (左太線+背景色)を踏襲する。クラス名は`.st-*`(stateバッジ)と対になる`tone-*`。 */
tr.tone-critical td{background:var(--danger-bg);border-left:4px solid var(--danger)}
tr.tone-attention td{background:var(--attention-bg);border-left:4px solid var(--attention)}

/* ===== 一覧(fixture逐語・§10.4.8〔#dsl-search-filter〕) ===== */
.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:8px;flex-wrap:wrap}
/* toolbar内form=検索窓+チェックボックスの横並び(便J2・0701指摘⑨)。labelはnowrapで
   折り返しを止める(fixtureはtoolbar内のform/checkbox構造を規定しないためproducer裁量)。 */
.toolbar form{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.toolbar label.chk{white-space:nowrap;display:inline-flex;align-items:center;gap:4px;
  font-size:12.5px;color:var(--muted)}
.toolbar .search{flex:0 1 260px;position:relative}
.toolbar .search input{padding-left:26px}
.toolbar .search::before{content:"⌕";position:absolute;left:8px;top:2px;color:var(--faint);font-size:14px;pointer-events:none}
/* 一覧の新規作成ボタン右端寄せ(便J3・0703指摘⑬)。fixture第2弾(SCREEN 1一覧)の
   span[style=margin-left:auto]写像をclass化したもの。 */
.toolbar .new-act{margin-left:auto}
.chips{display:flex;gap:5px;flex-wrap:wrap}
/* 便SEARCH-POST-1(0420/0422/0424-auditor起票): 絞り込みchip(「廃止済みも表示」トグル・filterBy
   チップ)は検索語等がURLへ残らないよう`<a href>`から`<form method="POST">`+`<button class="chip">`
   へ改めた(`cursor:pointer`は`.btn`と同じくbutton要素向けに明示追加)。`display:contents`でform
   自体をレイアウトボックスから外し、内側のbuttonが直接`.toolbar`/`.chips`のflex itemとして
   振る舞うようにする(`.toolbar form{display:flex}`〔上記〕をこのform固有に上書きするため
   `.toolbar form.chip-form`のセレクタ詳細度で明示的に勝たせる)。*/
.toolbar form.chip-form{display:contents}
.chip{padding:1px 9px;font-size:11.5px;border:1px solid var(--border);border-radius:12px;
  background:var(--canvas);color:var(--muted);text-decoration:none;display:inline-block;cursor:pointer}
.chip .cnt{font-size:10px;background:var(--inset);border-radius:7px;padding:0 5px;margin-left:3px}
.chip.cur{background:var(--fg);color:#fff;border-color:var(--fg)}
.chip.cur .cnt{background:rgba(255,255,255,.25);color:#fff}

/* 一覧テーブル。table-layout:fixed+overflow-wrapは指摘⑤(データの有無で列幅が変わっては
   いけない)への設計判断(便J1・fixtureに指定は無いがgolden超過分として0703 §2判断表に明示)
   ——fixedで列幅は第1行(th)から均等確定しデータ内容に依存しなくなる。長い値は切らず折り返す
   (業務値の欠落表示は監査上不可のためellipsisは採らない)。 */
table.list{width:100%;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
/* 0532裁定§2(便LIST-WIDTH-2・要是正・ux 0779実害): 一覧は`main.markdown-body`の子孫のため、
   Primerの`.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid …}`
   (詳細度0,1,2)が単純な`.list th`/`.list td`(詳細度0,1,1)に勝ち、意図した`padding:4px 8px`が
   一度も効いていなかった(td実効paddingは左右26px・date/datetime/boolean列の値が2行に
   折り返る実害・266132cb配備後にux 0779実機で発覚)。`.markdown-body table.list th`/
   `…td`(詳細度0,2,2)へ書き換え、Primerより確実に優先させる。*/
.markdown-body table.list th{font-size:11.5px;color:var(--muted);font-weight:600;text-align:left;
  border-bottom:1px solid var(--border);padding:4px 8px;background:var(--subtle)}
.markdown-body table.list th.num{text-align:right}
/* 0529裁定§3(要是正2): nowrapは固定幅列(.col-*)のみへ限定する——可変幅列(text/ref/
   先頭表示名リンク)は残り等分で幅が決まり見出し長を考慮しないため、nowrapを一律に
   適用すると列幅より長い見出しが隣のthへはみ出す。可変列の見出しは従来どおり折り返す。 */
.markdown-body table.list th[class*="col-"]{white-space:nowrap}
.markdown-body table.list td{border-bottom:1px solid var(--be-border-muted);padding:4px 8px;vertical-align:middle;overflow-wrap:break-word}
.markdown-body table.list td.num{text-align:right;font-variant-numeric:tabular-nums}
/* 便LIST-WIDTH-3(0536-auditor起票・ux 0788実害是正): 固定幅列の`td`にもnowrapを当てる。
   `th`側のnowrap(上記)だけでは、値幅が型既定幅にサブピクセル差(0.34px程度)で収まらない
   場合に改行機会(`-`/空白)でtdの`overflow-wrap:break-word`が発動し2行化する実害があった
   (`01bfcb0a`配備後にux 0788実機で発覚・date/datetime列で頻発)。`td`のclass自体は幅指定
   ではなくnowrapの目印(幅の権威は`th`側の`.col-*`のまま・`ListColumnWidth.dataAttributes`
   が返す)。**既知のtrade-off**: 数値系5型で型既定の実用上限を超える値が入ってきた場合、
   nowrapにより数字が列右側へ折り返さずはみ出す(セル外へ突出)——是正前の「途中で折り返す」
   よりは桁が最後まで読める分マシだが、はみ出し自体は解消しない(最重要原則#7優先の判断・
   `ListColumnWidth.md`§9決定記録参照)。 */
.markdown-body table.list td[class*="col-"]{white-space:nowrap}
.markdown-body table.list tbody tr:hover{background:#f6f8fa}

/* 便LIST-WIDTH-1(0521/0522/0523-auditor起票・UX-157): 一覧の列幅を型で固定する(指摘=
   「日付・日時・数値・単価・金額の最大幅を設定してほしい。項目数の少ない一覧画面はこれらの
   幅が無駄に広く見苦しい」+ユーザー裁定「指摘した型に加え、区分など表示内容が決まっている列も
   絞り、残りを全て自由文字列の列に回す」)。table-layout:fixedは第1行(th)のwidthのみを見るため
   幅の権威は`th`側の`.col-*`のまま(`<td>`側の型classは便LIST-WIDTH-3でnowrapの目印として
   追加=上記)。数値の実際に採る値は`ListColumnWidth.swift`の`defaultWidth(for:)`と手動同期する
   (producerがheadlessで検算=0526便§4のfact申告参照・ズレた場合の実害はheader override判定の
   精度低下のみで実描画幅はこのCSS側が権威)。
   choicesは宣言(field.choices)ごとに最長label幅が異なるため既定幅を持たず、常にServer側の
   inline style(下限80px)で上書きする——`.col-choice{width:80px}`はJSやSSR結線不備時の
   最低限floorとしてのみ機能する。
   **数値系5型は実corpus最大値ではなく実用上限の最長値基準(0529裁定§2・要是正1)**:
   money=`¥9,999,999,999`(10桁)・unitPrice=`¥12,345.67`・quantity/decimal=`12,345.678`・
   integer=`999,999`を基準に採用幅を広げた——実corpus最大値(money=`¥123,456,789`等)を
   基準にすると、それを超える値が入力された際に`overflow-wrap:break-word`により**数字の
   途中で折り返され**(例:`¥1,234,567,890`が2行に割れる)、最重要原則#7(桁数の視覚的確認)を
   損なう既知の問題があったため是正した(是正前の値=money105/unitPrice80/quantity71/
   integer52/decimal68)。上限を超える値が入力された場合も同じ理由で数字の途中折り返しが
   起きる余地は残る(ellipsis不採用の既存方針・§9決定記録参照・既知のtrade-off)。 */
.col-date{width:91px}
.col-datetime{width:131px}
.col-money{width:120px}
.col-unitprice{width:100px}
.col-quantity{width:90px}
.col-integer{width:70px}
.col-decimal{width:90px}
.col-boolean{width:70px}
.col-state{width:100px}
.col-choice{width:80px}

/* 固定幅の合計が一覧の容器幅(現行フォーム最大幅1330px)を超える一覧(現corpusで0件・
   0522§2-4「固定幅の合計が容器幅を超える一覧は表が容器より広くなり得る」への備え)は
   page本体を横スクロールさせず一覧の容器のみスクロールする(既存規約)。値は折り返し
   (ellipsis不採用は不変)。 */
.list-scroll{overflow-x:auto}

/* ===== 詳細(fixture逐語・便J1で.d-head .who/.d-actions/.row系/.empty補完) ===== */
.crumb{color:var(--muted);font-size:11.5px;margin:0 0 4px}
.d-head{display:flex;align-items:center;gap:10px;margin-bottom:2px;flex-wrap:wrap}
.d-head .who{color:var(--muted);font-size:12.5px}
.d-actions{margin-left:auto;display:flex;gap:6px}
.d-meta{color:var(--faint);font-size:11px;margin:0 0 10px}
.sections{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:8px}
.sections>.f-sec:only-of-type{grid-column:1/-1}
/* 便FORM-3(1861-auditor起票§5): form3箇所(create/edit/master-create)は区分を縦積みにする
   (detail3箇所は2列のまま是正不要)。`.sections`単体クラスの2列gridを`.form-sections`併記時
   のみ1列へ上書きする(2class=詳細度2でtie-break不要)。 */
.sections.form-sections{grid-template-columns:1fr}
.sec{border:1px solid var(--border);border-radius:6px;overflow:hidden;background:var(--canvas)}
.sec.wide{grid-column:1/-1}
.sec h3{margin:0;padding:4px 12px;font-size:11.5px;background:var(--subtle);
  border-bottom:1px solid var(--be-border-muted);color:var(--fg)}
.sec .rows{padding:2px 12px 8px}

/* 項目行(caption+値のペア・EDV-9パターン)。caption=.cap はfixtureの.sec dt相当
   (実機DOMはdl/dt/ddでなくdiv構造のため、dtスタイルを.capへ写像・便J1)。 */
.row{display:grid;grid-template-columns:118px 1fr;padding:2px 0;gap:4px}
.row .cap{color:var(--muted);font-size:12px}

/* 積み上げ用(子3要素以上のwidget行・便UI-ADVICE-1・0544-auditor起票(1))。`.row`(ラベル+値の
   2要素専用grid・118px固定列)を子3要素以上のwidgetへ流用していた誤用を解く受け皿。 */
.stack{display:block}
.empty{color:var(--faint)}

/* 空section自動折り畳み(§10.4.5「未使用項目のみのsectionを折り畳み表示」)。
   .rows(実機DOM)へfixtureのdetails.sec-fold .inner(3列grid)を写像(便J1)。 */
details.sec-fold{grid-column:1/-1;border:1px dashed var(--border);border-radius:6px;background:var(--subtle)}
details.sec-fold summary{padding:4px 12px;font-size:11.5px;color:var(--muted);cursor:pointer;list-style:none}
details.sec-fold summary::before{content:"▸ ";color:var(--faint)}
details.sec-fold[open] summary::before{content:"▾ "}
details.sec-fold .rows{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0 10px;padding:2px 12px 8px;font-size:12.5px}

/* 詳細画面の見出し脇の副題(§10.4.6〔#dsl-title-subtitle-fields〕・実機固有=fixtureのd-head .who系)。 */
.subtitle{color:var(--muted);font-size:12.5px}

/* ===== フォーム(fixture逐語・§10.4.5〔#dsl-form-detail-sections〕) ===== */
.f-sec{border:1px solid var(--border);border-radius:6px;margin-bottom:10px;overflow:hidden}
.f-sec h3{margin:0;padding:4px 12px;font-size:11.5px;background:var(--subtle);border-bottom:1px solid var(--be-border-muted)}
.f-sec.ro-sec{background:var(--subtle);border-color:var(--be-border-muted)}
.f-sec.ro-sec h3{background:var(--inset);color:var(--muted)}
.f-sec.ro-sec .ro{color:var(--muted)}
/* grid本体(grid-template-columns)はcolumns宣言値(1〜3にclamp・0560裁定)ごとにSwift側が
   inline styleで指定する(実機要件によるfixtureとの意図的差分——fixtureは3列固定CSS)。
   padding/gapのCSS側既定はfixture値。 */
.f-grid{padding:8px 12px 10px;gap:8px 16px}
.fg label,.form-group label{display:block;font-size:11.5px;font-weight:600;margin-bottom:2px}
.fg .hint{font-size:10.5px;color:var(--faint);margin-top:2px}
.fg .ro{padding:3px 0;font-size:13px}
.f-foot{display:flex;gap:8px;align-items:center;padding:2px}
.f-foot .right{margin-left:auto;display:flex;gap:8px}
.state-banner{border:1px solid var(--border);background:var(--subtle);border-radius:6px;
  padding:4px 12px;margin-bottom:10px;font-size:12px;color:var(--muted)}

/* ref-pick(searchModal方式の選択済みラベルchip・H-6c-1・RefSelectInput.md RSI-9)。 */
.ref-pick{display:flex;gap:6px}
.ref-pick .picked{flex:1;display:flex;align-items:center;gap:6px;border:1px solid var(--border);
  border-radius:5px;padding:3px 8px;background:var(--subtle);font-size:13px}
.ref-pick .picked .x{color:var(--faint);margin-left:auto;cursor:pointer}

/* 便REQUIRED-ERROR-UNIFY-1(0562-auditor起票UX-164・§7(c)受入基準): Primerの
   `.form-group.errored .form-control{border-color:...}`(primer.css)は`class="form-control"`を
   持つ要素にしか効かないが、searchModal方式の可視部分(`.ref-pick .picked`)は`form-control`を
   持たない独自クラスのため、このrouteだけerrored時に枠線が赤くならない非対称があった
   (select方式の`<select class="form-control">`は自動的に赤枠になる・実装調査で発見)。
   `.note.error`(便UX-078b・上記参照)と同型の個別上書きで揃える。 */
.form-group.errored .ref-pick .picked{border-color:var(--danger)}

/* ===== 全ページ共通ナビ帯(fixture逐語・便I-A) ===== */
.app-head{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--be-border-muted);
  padding-bottom:6px;margin-bottom:10px}
.app-head .brand{font-weight:700;font-size:12.5px}
.app-head nav{display:flex;gap:2px}
.app-head nav a{padding:2px 9px;border-radius:5px;color:var(--muted);font-size:12.5px;text-decoration:none}
.app-head nav a.cur{color:var(--fg);font-weight:600;background:var(--subtle)}
.app-head .user{margin-left:auto;color:var(--muted);font-size:11.5px}

/* ===== 実機固有(fixture第2弾 saas-other-screens.html 由来・便J1で変数参照化のみ) ===== */
/* 超過一覧の遅延固定幅バッジ(H-5a・SCREEN D実測値)。 */
.late-h,.late-m{display:inline-block;min-width:56px;text-align:center;font-weight:600;
  padding:0 8px;border-radius:10px;font-size:11.5px;font-variant-numeric:tabular-nums}
.late-h{background:var(--danger-bg);color:var(--danger)}
.late-m{background:var(--attention-bg);color:var(--attention)}

/* ホーム画面3カードgrid(H-5b・SCREEN A実測値)。 */
.home-grid{display:grid;grid-template-columns:1.2fr .8fr 1fr;gap:10px}
.hcard{border:1px solid var(--border);border-radius:6px;background:var(--canvas);overflow:hidden}
.hcard h3{margin:0;padding:4px 12px;font-size:11.5px;background:var(--subtle);border-bottom:1px solid var(--be-border-muted)}
.hcard .bd{padding:8px 12px}
.hcard .big{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
.hcard .big a{color:var(--fg)}
.hcard .big .unit{font-size:12px;font-weight:400;color:var(--muted)}
.hcard .big.danger a,.hcard .big.danger .unit{color:var(--danger)}
.hcard .ebl+.ebl{margin-top:10px;padding-top:8px;border-top:1px solid #f0f3f6}
.hcard .chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:6px}
.alert-grid{display:grid;grid-template-columns:56px 1fr;gap:3px 8px;align-items:center;margin-top:4px}
.alert-grid .late-h,.alert-grid .late-m{display:block;text-align:center}
.mrow{display:flex;justify-content:space-between;padding:2px 0;font-size:12.5px;border-bottom:1px solid #f0f3f6}
.mrow:last-child{border-bottom:0}
.mrow .n{font-variant-numeric:tabular-nums;color:var(--muted)}

/* 講義ダッシュボード(便CT-DASH-srv-1・0618-auditor起票・頁2)。1366×768で縦スクロール無しに
   収まる密度を意図(feedback_dense_ui_design_principles・実機での見た目確認はforward)。 */
.ct-dash-header{display:grid;grid-template-columns:1fr 1fr;gap:2px 24px;margin-bottom:12px}
.ct-dash-col{display:flex;flex-direction:column}
.ct-dash-row{display:flex;gap:8px;padding:1px 0;font-size:13px;align-items:baseline}
.ct-dash-label{width:88px;flex-shrink:0;color:var(--muted);font-size:11.5px}
.ct-dash-body{display:grid;grid-template-columns:1fr 2fr;gap:16px;align-items:start}
.ct-dash-trainees{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.ct-dash-trainee{padding:1px 0;font-size:12.5px;border-bottom:1px solid var(--be-border-muted)}
.ct-dash-footer{margin-top:12px}

/* マスタ詳細画面(便I-D3b-2・SCREEN C実測値)。状態バッジは既存tone 5値を再利用(0627裁定)。 */
.btn-sm{padding:1px 8px;font-size:11.5px}
.dim-line{display:flex;align-items:center;gap:10px;padding:4px 12px;border-bottom:1px solid #f0f3f6;font-size:12.5px}
.dim-line:last-child{border-bottom:0}
.dim-line .k{width:130px;color:var(--muted);font-size:12px}
.dim-line .v{font-weight:600;font-variant-numeric:tabular-nums}
.dim-line .since{color:var(--faint);font-size:11px}
.dim-hist{font-size:11.5px;color:var(--muted);padding:2px 12px 6px 152px}

/* rev-details(便I-D3b-3): 改定formの<details>展開(fixture未規定・producer裁量のnative disclosure)。 */
/* 便UX-084-5(ux線0223実測・1654-auditor起票案A): .markdown-body detailsの既定margin-bottom
   (var(--base-size-16)=16px)を打ち消す。INV SKU詳細(13 field+1 dimension・5行)で
   scrollHeightが1366×768を12px超過していた主因(.f-gridセル1つあたりrev-detailsのmb 16px)。
   改定ボタン直下の16px余白は業務上不要——行間は.f-gridのrow-gap:8pxが担保する。 */
details.rev-details{position:relative;margin-bottom:0}
details.rev-details summary{list-style:none;cursor:pointer}
details.rev-details summary::-webkit-details-marker{display:none}
details.rev-details[open] summary{display:none}
details.rev-details form{display:flex;align-items:flex-end;gap:8px;flex-wrap:wrap;padding:6px 0}
/* 便UX-081(1608-auditor起票・ux線0174実測): `align-items:flex-end`はflex項目のmargin boxの
   底辺を揃えるため、理由側`div.fg`(本行でmargin:0リセット済み)と確定ボタン(margin:0)は
   揃うが、値側wrapperの`FieldInputView.labeled`/`RefSelectInput.render`が返す
   `div.form-group`はPrimerの`.form-group{margin:15px 0}`が生きたまま(リセット対象を`.fg`
   だけに絞り`.form-group`を落としていた)——値側の中身だけ15px上へずれる欠陥だった
   (0172 §7型の3例目=UX-046で`.flash-error`使用箇所に絞り`class="error"`を落とし・
   UX-078/079でその残りを是正した後、本件は`.fg`に絞り`.form-group`を落としていた形)。
   `details.rev-details`配下限定のセレクタのため、UX-038の`.form-group > .form-group{margin:0}`
   や作成/編集フォームの`.form-group`には一切影響しない。 */
details.rev-details .fg,details.rev-details .form-group{margin:0}
/* 便FORM-1(UX-090・1851-auditor起票): `details.rev-details form`は`flex-wrap:wrap`だが子
   (値`.form-group`/理由`.fg`/「確定」`.btn`)がいずれも既定`flex:0 1 auto`のまま伸縮しないため、
   3つの合計幅(値+理由+gap×2+確定)が`.rev-slot`の実効幅(実測400px)を1px超えると「確定」が
   まるごと2行目へ折り返す(SaaS顧客改定form5/5本・EC商品改定form2/3本で発生・ux実測)。
   値・理由の入力欄(グループ単位)を`flex:1 1 120px;min-width:0`にして縮小可能にし、
   「確定」ボタンのみ`flex:0 0 auto`(内容幅を維持)にすることで、2つの入力が縮んで1行に
   収まるようにする(400pxスロットで343pxを2等分程度に縮小・全幅1304pxでも見た目は
   従来と同等)。ヘッドレスブラウザ実測(400px幅コンテナでform高さが2行相当94px→
   1行相当59.25pxへ縮小)で単一行化を確認した(fact申告)。`align-items:flex-end`(UX-081)は
   不変——底辺揃えの意図はそのまま維持する。 */
details.rev-details form .form-group,details.rev-details form .fg{flex:1 1 120px;min-width:0}
details.rev-details form .btn{flex:0 0 auto}
/* 改定formスロット(便J3・0701指摘⑪)。旧inline style(margin-left:auto)のclass化。
   probe実測(2026-08-21)で幅650px以下のdim-line(flex nowrap)では改定form展開時に
   確定ボタンが入力欄の下段へ途中折り返し+「から適用」が2行化する崩れを確認——
   展開時は行のwrapを許可しformスロットを全幅の下段帯へ逃がすことで、上段(名称/値/適用)
   の幅圧迫と途中折り返しの両方を解消する。`:has()`非対応の旧ブラウザでは従来挙動へ縮退。 */
.dim-line .rev-slot{margin-left:auto}
.dim-line:has(.rev-details[open]){flex-wrap:wrap}
.dim-line .rev-slot:has(> .rev-details[open]){flex-basis:100%;margin-left:0}
/* 便UX-084-6(ux線0227実測・1657-auditor起票案a): 改定form展開時、上記規則で.rev-slotが
   右端(閉時)から全幅の左端(開時)へ移動する。「新しい値」ⓘの方向は1645裁定で.nw固定
   (サーバはdetailsの開閉状態を知り得ないため切替不可)だが、.nwは左へ伸長するため
   全幅左端では画面外にはみ出す(CD顧客118.7px・INV SKU 155.3px)。展開時のみ.tooltipped-nwの
   ::afterをPrimerの.tooltipped-ne相当(右へ伸長)へ上書きする。詳細度がPrimerの
   .tooltipped-nw::after(0,1,1)より高いため後勝ちで有効(::beforeはn/ne/nwで個別上書きが
   無く共通のため変更不要)。 */
.dim-line .rev-slot:has(> .rev-details[open]) .tooltipped-nw::after{right:auto;left:50%;margin-left:calc(var(--base-size-16)*-1);margin-right:0}

@media (max-width:860px){.sections,.home-grid,details.sec-fold .rows{grid-template-columns:1fr !important}}

/* ===== ログインフォーム(便UX-029・0984-auditor起票・ux線0040実測由来) =====
   ユーザー指摘(2026-08-26)「利用者ID/パスワード欄が横に長すぎる。両方とも画面中央寄せで
   15文字程度入力できる長さが望ましい」。実機実測=両inputとも幅1330px(main全幅)・中央寄せなし
   ——原因は`.form-control{width:100%}`(上記)が効く一方、ログインformには業務画面
   (`.form-group`系)のような列幅制御コンテナが存在しないため。
   input単体へmax-widthを当てるだけでは中央寄せにならない(親formが全幅のままだと
   labelもinputも左詰めのまま)——form自体にmax-width+margin:autoを与えることで、中の
   input(width:100%継承により相対的に縮む)・label・submitボタンをまとめて画面中央の
   適正幅ブロックへ収める(0984 §2-2の分析を採用)。20em(基準13px×20≈260px)は
   「15文字程度+余白」の目安値(厳密なpx換算はユーザー指摘の趣旨ではないため不要・
   0984 §2-3)。セレクタは`.login-form`限定のため既存`.form-group`系画面への影響はない。 */
.login-form{max-width:20em;margin:24px auto 0}

/* 見出しの中央寄せ(汎用ユーティリティ・便UX-034・1000-auditor起票)。ログイン画面(.login-form)は
   画面全体が中央寄せ幅で構成されるため、見出し(<h1>)も左寄せのままだと視覚的に浮いて見える
   (ux線0054実測)。`PageLayout.heading(_:centered:)`のcentered=true時にのみ付与されるclassで、
   既存の左寄せ見出し(業務一覧画面等)には一切影響しない。 */
.h1-center{text-align:center}

/* ===== ref検索候補の縦表形式化(便UX-033・0985-auditor起票) =====
   ユーザー指摘(0042 §2)「ref検索候補が横並びで見づらい(売掛消し込みに限らず全ref検索共通)」。
   原因=`.btn{display:inline-block}`(既存)のまま候補buttonを単純連結していたため横並び折り返し
   になっていた——`.ref-candidates`が候補buttonをブロック化し1候補=1行の縦積みへ変える。行間は
   1本の罫線区切りのカードリスト風にまとめ、既存`.btn:hover`(色変化)がそのまま行単位のhover
   領域として機能する。クリック機構(data-target/data-id/data-label・ref-search-init.js)・button
   自体のclass(btn ref-candidate)は無改修——コンテナの追加のみ。 */
.ref-candidates{display:flex;flex-direction:column;border:1px solid var(--border);
  border-radius:6px;overflow:hidden}
.ref-candidates .ref-candidate{display:block;width:100%;text-align:left;border-radius:0;
  border:0;border-bottom:1px solid var(--be-border-muted)}
.ref-candidates .ref-candidate:last-child{border-bottom:0}

/* ===== flashメッセージ(便UX-046・1022-auditor起票・ux線0072派生指摘) =====
   `.flash.flash-error`(`Views/EntityCreateForm.swift`のcreationGuard等エラー時表示)は
   app.css/primer.css双方でCSS定義0件のまま使われており(監査役grep追認・0072 §2)、無強調の
   ままerrorHTMLがフォーム先頭に埋もれて見落とされやすかった。既存のdanger系トーン変数
   (`--danger`/`--danger-bg`・`.st-critical`と同型)を流用し、左太線+背景色で視認性を上げる。 */
.flash{padding:8px 12px;border-radius:6px;margin-bottom:10px;font-size:13px}
.flash-error{background:var(--danger-bg);color:var(--danger);
  border:1px solid var(--danger);border-left:4px solid var(--danger)}
/* 便TRIGGER-FAIL-SCREEN-1(0582-auditor起票§3(4)): trigger失敗(best-effort・主操作は成功済み)を
   `.flash-error`(実際の失敗)と同トーンで出すと「成功を失敗に見せない」に反するため、既存の
   `--attention`系トーン(`.st-attention`/`tr.tone-attention`と同型)を流用した専用classを新設した。 */
.flash-attention{background:var(--attention-bg);color:var(--attention);
  border:1px solid var(--attention);border-left:4px solid var(--attention)}

/* ===== list型fieldの入力欄(便UX-103・1738-auditor起票・IMPL §4.2.8) =====
   `list.elementSchema`付きfieldの繰り返し編集部(`FieldInputView.renderElementSchemaList`)は
   1要素=1行のsub-field群を横並びで出す。`.list-rows`が行のコンテナ、`.list-row`が1行分の
   sub-field群を横並び(既存`.f-grid`と同様のflex)にまとめ、行間を罫線で区切る。
   `.checkbox-group`(`RefSelectInput.renderCheckboxes`・`list<ref>`の複数選択チェックボックス群)は
   候補を縦積みにし、既存`.ref-candidates`と同型の視覚(1候補=1行)を踏襲する。 */
.list-rows{display:flex;flex-direction:column;gap:8px}
.list-row{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0;
  border-bottom:1px solid var(--be-border-muted)}
.list-row:last-child{border-bottom:0}
.list-row .form-group{flex:1 1 160px;margin-bottom:0}
.checkbox-group{display:flex;flex-direction:column;gap:4px}
