/* SalesBase — 販売管理
   情報の並びは弥生販売に合わせ、見た目は今どきの Web に寄せている */
:root{
  /* 色。
     緑は「深い森」を基調に、明度差をはっきり付ける。
     もとは中間色ばかりで、見出しと本文の差が出ず、のっぺり見えていた。 */
  --green:#116b41; --green-d:#0a4c2e; --green-dd:#06381f; --green-l:#eaf5ee; --green-2:#12925233;
  --ink:#101815; --ink-2:#38443e; --sub:#657570; --line:#e3e9e6; --line-2:#ccd8d2;
  --bg:#f5f7f6; --white:#fff; --red:#c8402f; --amber:#b5790f; --blue:#2563eb;
  /* 入力欄の枠。--line-2 は面の区切り用で薄く、**打てる欄の輪郭には弱すぎた**。
     打てる = 白＋この枠 / 打てない = --in-off、で見分けられるようにする。
     2026-08-21 ktec 指摘「入力可能位置が見にくい」 */
  --in-line:#93a99e; --in-off:#cbd3cf; --in-off-ink:#46534d;
  --accent:#116b41;

  /* 形。角の丸みを少し大きくして、今どきの見た目に寄せる */
  --radius:14px; --radius-sm:10px; --radius-xs:7px;
  /* 影は 2 枚重ね（近い影＋遠い影）。1 枚だとべたっとして奥行きが出ない */
  --shadow-1:0 1px 2px rgba(12,32,22,.06), 0 1px 1px rgba(12,32,22,.04);
  --shadow-2:0 6px 16px rgba(12,32,22,.09), 0 2px 4px rgba(12,32,22,.05);
  --shadow-3:0 18px 40px rgba(12,32,22,.16), 0 4px 10px rgba(12,32,22,.08);

  /* 文字。ここを直せば全体の大きさが揃って動く */
  --fs:15px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  /* 和文が主なので、和文フォントを先に置く。
     游ゴシックは細すぎて業務画面では読みにくいので、Hiragino → Noto → Meiryo の順。 */
  font-family:"Hiragino Kaku Gothic ProN","Noto Sans JP","Meiryo","Yu Gothic Medium",
              system-ui,-apple-system,sans-serif;
  background:var(--bg); color:var(--ink); font-size:var(--fs); line-height:1.7;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  font-feature-settings:"palt" 1;      /* 和文の字詰め */
  letter-spacing:.01em;
}
/* 数字は等幅にして桁を揃える。金額が並ぶ画面なので、ここが揃うと一気に読みやすい */
.num,.table .num,input.num,.yf-value,.yout.num{font-variant-numeric:tabular-nums}
a{color:var(--green); text-decoration:none}
a:hover{text-decoration:underline}

/* ---- ヘッダ ---- */
.topbar{
  display:flex; align-items:center; gap:24px;
  /* 平らな一色だと安っぽいので、上から下へわずかに沈ませる */
  background:linear-gradient(180deg, #14764a 0%, var(--green) 55%, #0e6039 100%);
  color:#fff; padding:0 24px; height:58px;
  box-shadow:0 1px 0 rgba(255,255,255,.08) inset, 0 2px 10px rgba(8,48,28,.22);
  position:sticky; top:0; z-index:50;
}
/* ───────── ロゴ ─────────
   もとは白い文字だけ・19px で、しるしも色も無く、メニューの文字とベースラインも
   1px ずれていた。しるしを足し、文字を大きくし、ベースラインを合わせる。2026-08-17 */
.brand{flex:none}
.brand a{display:flex; align-items:center; gap:10px; height:58px; text-decoration:none}
.brand a:hover{text-decoration:none}
.brand-mark{width:34px; height:34px; flex:none;
  filter:drop-shadow(0 2px 4px rgba(0,0,0,.3));
  transition:transform .14s ease}
.brand a:hover .brand-mark{transform:translateY(-1px) scale(1.03)}
.brand-word{font-weight:700; font-size:24px; letter-spacing:.005em; line-height:1;
  text-shadow:0 1px 3px rgba(0,0,0,.22)}
.brand-word .bw-1{color:#fff}
.brand-word .bw-2{color:#a8ecc4}          /* 明るい緑。暗い帯の上で色が乗る */
@media (max-width:1100px){ .brand-word{font-size:20px} .brand-mark{width:30px;height:30px} }
@media (max-width:760px){ .brand-word{display:none} }
.mainnav{display:flex; gap:1px; flex:1}
.navitem{position:relative}
.navitem > a{
  color:#dcefe3; padding:0 16px; height:58px; display:flex; align-items:center; gap:5px;
  white-space:nowrap; border-bottom:3px solid transparent; font-size:15px; font-weight:500;
  transition:background .12s, color .12s;
}
.navitem > a:hover{background:rgba(255,255,255,.12); text-decoration:none}
.navitem.active > a{color:#fff; border-bottom-color:#fff; font-weight:600; background:rgba(0,0,0,.12)}
.navitem .caret{font-size:12px; opacity:.7}
.submenu{
  display:none; position:absolute; left:0; top:58px; min-width:206px; z-index:60;
  background:#fff; border:1px solid var(--line); border-radius:0 0 var(--radius-sm) var(--radius-sm);
  box-shadow:var(--shadow-3); padding:6px;
  /* 項目が多いメニューは 2 列に流す。1 列だと 753px の帯になり、
     下のほうは画面からはみ出して押せなかった */
  max-height:calc(100vh - 70px); overflow:auto;
}
/* まとまり（見出し＋その中身）ごとに列にする。
   columns で流すと見出しだけ取り残されるので使わない */
.navitem.has-sub.open .submenu.cols{display:flex; align-items:flex-start; gap:6px}
.submenu.cols .sub-group{min-width:186px}
.submenu.cols .sub-group + .sub-group{border-left:1px solid var(--line); padding-left:6px}
/* 右端の項目は、開くと画面の外に出る。右寄せにする */
.navitem.flip .submenu{left:auto; right:0}
/* もとは :hover で開いていた。マウスが通り過ぎただけで開き、
   1px でも外れると閉じるので、下の項目を押しに行く途中で消えていた。
   **押して開く**に変える（開いたままなので、選ぶまで消えない）。
   2026-08-17 ktec 指摘「メニューが非常に使いづらい」より */
.navitem.has-sub.open .submenu{display:block}
.navitem.has-sub.open > a{background:#fff; color:var(--green-d); border-bottom-color:#fff}
.navitem.has-sub.open .caret{transform:rotate(180deg)}
.navitem .caret{transition:transform .12s}
.submenu a{
  display:block; padding:9px 12px; color:var(--ink); font-size:14px; white-space:nowrap;
  border-radius:var(--radius-xs);
}
.submenu a:hover{background:var(--green-l); color:var(--green-d); text-decoration:none}
.submenu a.cur{background:var(--green-l); color:var(--green-d); font-weight:600}
.navtoggle{
  display:none; background:none; border:1px solid rgba(255,255,255,.5); color:#fff;
  font-size:16px; border-radius:4px; padding:2px 9px; cursor:pointer;
}
.userbox{display:flex; align-items:center; gap:12px; white-space:nowrap; flex:none}
/* メニューの項目名が長くなると（帳票レイアウト編集）、右側の店舗名・ログアウトが
   画面の外へ押し出されていた。狭いときは順に畳む。2026-08-18
   ※ ここに overflow:hidden を書いてはいけない。
     ドロップダウンは .mainnav の中の position:absolute なので、**丸ごと切り取られる**。
     一度これでメニューが全部開かなくなった。幅は min-width:0 と項目の省略だけで抑える。 */
.mainnav{min-width:0}
.navitem > a{overflow:hidden; text-overflow:ellipsis}
/* 帳票をトップから設定の中へ移して余裕ができたので、畳む幅を下げた。
   1280px でも項目 393px に対して余り 308px あり、利用者名を出しても入る。2026-08-18 */
/* 🔴 プロ版は項目が 9 個（ホーム/見積/売上/レポート/仕入/在庫/台帳/設定/承認）あり、
   1349px では **メニューが「画面を探す」欄と店舗名の上に重なっていた**
   （実測: .mainnav の幅 534px に対して中身は 673px）。
   `.navitem` に min-width:0 が無いので縮まず、そのまま外へはみ出していた。
   幅が足りないときは **詰める → 検索欄を細く → それでも足りなければ省略** の順で畳む。
   2026-08-31 */
.navitem{min-width:0}
@media (max-width:1460px){
  .navitem > a{padding:0 11px; font-size:14px}
  .topbar{gap:16px}
}
@media (max-width:1240px){ .navitem > a{padding:0 8px} }

@media (max-width:1150px){ .plan-tag{display:none} .topbar{gap:16px; padding:0 18px} }
@media (max-width:1060px){ .uname{display:none} }
@media (max-width:1000px){ .shop-name{max-width:120px; overflow:hidden; text-overflow:ellipsis;
  display:inline-block; vertical-align:bottom} }

/* ───────── 画面を打って探す ───────── */
.navfind{position:relative; flex:none}
.navfind input{width:170px; height:30px; margin:0; padding:0 10px; font-size:13px;
  border:1px solid rgba(255,255,255,.35); border-radius:15px;
  background:rgba(255,255,255,.14); color:#fff}
.navfind input::placeholder{color:rgba(255,255,255,.7)}
.navfind input:focus{width:250px; background:#fff; color:var(--ink); outline:none;
  border-color:#fff; transition:width .12s}
.navfind input:focus::placeholder{color:var(--sub)}
/* 上の width:170px より後ろに置くこと。前に書くと負ける（2026-08-31 実測）。
   1349px（FWXGA）はメニューを詰めるだけで収まるので、細くするのは 1240px から。 */
@media (max-width:1240px){ .navfind input{width:118px} .navfind input:focus{width:230px} }
.navfind-list{position:absolute; top:36px; right:0; min-width:290px; z-index:70;
  background:#fff; border:1px solid var(--line); border-radius:var(--radius-sm);
  box-shadow:var(--shadow-3); padding:5px; overflow:hidden}
.nf-row{display:flex; align-items:baseline; gap:10px; padding:8px 11px; border-radius:var(--radius-xs);
  color:var(--ink); font-size:14px}
.nf-row:hover,.nf-row.nf-on{background:var(--green-l); color:var(--green-d); text-decoration:none}
.nf-name{flex:1; white-space:nowrap}
.nf-where{flex:none; font-size:13px; color:var(--sub)}
.nf-empty{padding:10px 12px; font-size:13px; color:var(--sub)}
@media (max-width:1100px){ .navfind{display:none} }
.uname{color:#dff0e5; font-size:14px}
.logout{color:#fff; font-size:13px; border:1px solid rgba(255,255,255,.5); padding:3px 10px; border-radius:4px}
.logout:hover{background:rgba(255,255,255,.15); text-decoration:none}

/* 器の幅は **どの画面でも同じ**にして、真ん中に置く。
   幅が画面ごとに違う（伝票 1700px / 台帳 1280px）と、
   真ん中寄せでは左端も変わり、**画面を移るたびに中身が 160px 横へ跳ぶ**。
   一度これを「左寄せ」で直したが、右に余白が全部寄って見た目が悪くなった
   （2026-08-26 ktec 指摘）。**幅を揃えれば、真ん中寄せのままで跳ねない。**
   1700px は明細の広い伝票に合わせた値。狭い画面では max-width が効かず
   画面いっぱいになるので、1368px のノートでもそのまま収まる。 */
.container{max-width:1700px; margin:0 auto; padding:24px 20px 100px}
/* 下の余白 100px は、画面の下に貼り付けた操作バーのぶん。
   これが無いと、明細のヒントや［＋ 行を追加］がバーの下に隠れる */
/* 画面の名前。左に緑の縦棒を置いて、どの画面にいるかが一目で分かるようにする */
.page-title{font-size:24px; margin:0 0 18px; font-weight:700; letter-spacing:.01em;
  display:flex; align-items:center; gap:11px; line-height:1.35}
.page-title::before{content:""; width:5px; height:26px; border-radius:3px;
  background:linear-gradient(180deg, var(--green) 0%, var(--green-d) 100%)}
.foot{text-align:center; color:var(--sub); font-size:13px; padding:24px}

/* ---- カード ---- */
.card{background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow-1); padding:24px; margin-bottom:16px}
/* 見出しと右のボタンを 1 行に並べる */
.card-head{display:flex; align-items:flex-start; justify-content:space-between; gap:16px;
  margin-bottom:16px; padding-bottom:12px; border-bottom:1px solid var(--line); flex-wrap:wrap}
.card-head .btn{flex:none}
.card h2{font-size:16px; margin:0 0 16px; padding-bottom:12px; border-bottom:1px solid var(--line);
  color:var(--ink); letter-spacing:.02em; font-weight:700}
.center{text-align:center}
.empty{color:var(--sub); padding:20px 0; text-align:center}

/* ---- 統計 ---- */
.stat-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:16px; margin-bottom:16px}
.stat{
  background:var(--white); border:1px solid var(--line); border-left:4px solid var(--green);
  border-radius:var(--radius); padding:14px 16px; display:flex; flex-direction:column; gap:4px;
}
.stat:hover{text-decoration:none; box-shadow:0 2px 8px rgba(0,0,0,.07)}
.stat-label{font-size:13px; color:var(--sub)}
.stat-value{font-size:28px; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums}

/* ---- テーブル ---- */
.table{width:100%; border-collapse:collapse; font-size:14px}
/* 一覧の行。padding 11px で 1 行 47〜68px あり、**伝票一覧は 1 画面に 18 行**しか出なかった。
   台帳は探して選ぶ画面で、たくさん見えるほど速い（弥生の一覧は 1 行 18px 前後）。
   押せる高さ（24px）は保ちつつ詰める。2026-08-21 */
.table th,.table td{padding:5px 10px; border-bottom:1px solid var(--line); text-align:left; vertical-align:middle}
.table tbody tr{height:30px}
/* 一覧の中のボタンも小さすぎない大きさに（実測 51 個が 24px 未満だった） */
.table .btn,.table a.btn{min-height:24px; padding:2px 8px; font-size:12px; line-height:1.5}
/* 行を選ぶチェックは 17px。**印を大きくすると行が太る**ので、
   印はそのままに **押せる範囲をセルいっぱい**に広げる（WCAG 2.5.8 の「対象の大きさ」）。 */
.table td:has(> input[type=checkbox]),
.table th:has(> input[type=checkbox]){padding:0; position:relative; width:34px; text-align:center}
.table td > input[type=checkbox],
.table th > input[type=checkbox]{position:relative; z-index:1; margin:0}
.table td:has(> input[type=checkbox])::after,
.table th:has(> input[type=checkbox])::after{content:''; position:absolute; inset:0; cursor:pointer}
.table td:has(> input[type=checkbox]):hover{background:var(--green-l)}
.table thead th{background:#f2f6f4; color:#4a5a54; font-weight:700; font-size:13px;
  letter-spacing:.04em; white-space:nowrap; border-bottom:2px solid var(--line-2)}
/* ※ 見出しを画面に貼り付ける（position:sticky）のはやめた。
   表は横スクロールする器（.table-wrap）の中にあり、貼り付く相手がその器になるため、
   見出しが器の中で 58px 下がり、表の上に空の帯ができていた。2026-08-17 */
/* 行が多い一覧は目が滑るので、1 行おきにごく薄く敷く */
.table tbody tr:nth-child(even){background:#fbfcfb}
.table tbody tr{transition:background .1s ease}
.table tbody tr:hover{background:var(--green-l); box-shadow:inset 3px 0 0 var(--green)}
.table .num{text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap}
/* 主と従（件名と摘要）を上下に置く。空のほうは出さないので行が沈まない */
.cell-main{display:block; line-height:1.5}
.cell-sub{display:block; line-height:1.45; margin-top:1px}
.table .ellipsis{max-width:280px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.table-wrap{overflow-x:auto}
/* 長い表で見出しを画面に貼り付ける。
   137 行の売上明細表で下までスクロールすると、**どの列が何か分からなくなっていた。**
   `.table-wrap{overflow-x:auto}` があると器がスクロールの基準になり sticky が効かないので、
   **横スクロールが要らない表だけ** overflow を戻す（判定は ux.js）。
   上に貼り付く相手は画面。トップバー（sticky・高さ 56px）の下に置く。2026-08-21 */
.table-wrap.no-hscroll{overflow:visible}
.table-wrap.no-hscroll thead th{position:sticky; top:56px; z-index:6;
  box-shadow:0 1px 0 var(--line-2)}

/* ---- フォーム ---- */
label{display:block; margin-bottom:12px; font-size:14px; color:var(--sub)}
input[type=text],input[type=password],input[type=email],input[type=date],input[type=number],select,textarea{
  width:100%; padding:8px 11px; border:1px solid var(--in-line); border-radius:var(--radius-xs);
  font-family:inherit; font-size:15px; color:var(--ink); background:#fff; margin-top:4px;
  transition:border-color .12s ease, box-shadow .12s ease;
}
input:focus,select:focus,textarea:focus{outline:none; border-color:var(--green);
  box-shadow:0 0 0 3px var(--green-2)}
/* 打てない欄は沈ませる。白いままだと「打てるのに反応しない」と思われる */
input[readonly],input:disabled,select:disabled,textarea[readonly],textarea:disabled{
  background:var(--in-off); color:var(--in-off-ink); border-color:var(--line-2)}
input::placeholder,textarea::placeholder{color:#a9b5b0}
textarea{resize:vertical; line-height:1.5}
/* 台帳（商品・得意先など）の入力フォーム。
   ------------------------------------------------------------
   もとは `minmax(300px,1fr)` の均等割りで、**敬称も郵便番号も会社名も全部 385px**。
   実データで測った「要る幅」はこれだけ違う:
     敬称 39px / 単位 47px / 役職 54px / 色 77px / 〒 84px / コード 99px
     TEL 122px / 型番 174px / 略称 197px / メール 249px / 会社名 317px
   全部を最大の欄に合わせていたので、画面が縦に伸び（得意先で 3,719px＝画面 3 枚半）、
   目が左右に大きく振られて打ちにくかった。
   **12 列に割って、欄ごとに要るぶんだけ取る。**
   2026-08-21 ktec 指摘「枠の大きさが必要なサイズと一致していない…コンパクトにまとまっていない」 */
/* 余白は 4 の倍数で揃える（8px グリッド）。
   6px / 14px / 18px / 22px が混ざっていて、行ごとの間隔がわずかに揺れていた。
   目には「揃っていない」としか映らないので、刻みを決める。2026-08-21 */
.form-grid{display:grid; grid-template-columns:repeat(12,minmax(0,1fr)); gap:8px 16px}
.form-grid > label,.form-grid > .fld{grid-column:span 4; min-width:0}

/* ── 列の取り分は **4 / 8 / 12 の 3 つだけ** ──
   S=3列 / M=4列 / L=5列 / 一部 6列 と混ぜていたら、次の項目の開始位置が
   205 / 507 / 607 / 808 / 909 / 1009px と **6 か所**に散らばり、
   緑のラベル帯が島のように点在して、目が左右にジグザグしていた。
   取り分を 4 の倍数だけにすると、開始位置は **3 か所**（0 / 4 / 8 列目）に定まり、
   縦のラインが 3 本通る。1 列 = (カード内 1184 − 余白 32) ÷ 3 ≒ 384px、
   その中に ラベル 80px ＋ 欄（最大 300px）が収まる。
   2026-08-21 ktec 指摘「センスのかけらの１つもない」 */
.form-grid > label,.form-grid > .fld{grid-column:span 4}
/* 2 列ぶん使う物（選択肢や中身が長い） */
.form-grid > label:has(select[name=doc_number_mode]),
.form-grid > label:has(input[name=email]),
.form-grid > label:has(input[name=url]),
.form-grid > label:has(input[name=address1]),
.form-grid > label:has(input[name=name]){grid-column:span 8}
/* 3 列ぶん（1 行を丸ごと） */
.form-grid > label:has(input[name=note]),
.form-grid > label:has(textarea),
.form-grid > label.wide{grid-column:span 12}
.form-grid > label.wide > select:not([name]),
.form-grid > label.wide > input:not([name]){max-width:var(--fw-l)}

/* ── 欄の幅は **3 段階だけ** ──
   実測の「要る幅」にぴったり合わせたら、39/47/54/62/77/84/99/114/122/129/152/174/
   197/212/249/287/294/317/324px と **全部ばらばら**になり、縦のラインがどこにも通らなくなった。
   数字は満たしていても、目には「揃っていない」としか映らない。
   要る幅を **上の段階に丸める**。幅が 3 種類しかなければ、それだけで秩序が生まれる。
     S = 120px（〜114: 敬称・単位・役職・サイズ・色・〒・コード・担当者・FAX・桁数）
     M = 200px（〜197: TEL・商品コード・カナ・型番・略称・金額）
     L = 320px（〜317: 住所・部署・メール・URL・会社名・商品名）
   2026-08-21 ktec 指摘「枠の大きさの規則性…どれをとってもセンスがない」 */
/* ラベル帯 96px。13px の字で **6 文字**が 1 行に収まる幅（78px＋左右の余白 16px）。
   80px にしていたら 5 文字でも折り返して、帯の高さ 32px から溢れていた
   （横幅は足りているのに縦に 2 行になる。実測 要る高 35px > 高 30px）。 */
:root{--fw-s:120px; --fw-m:200px; --fw-l:300px; --lbl-w:96px}
/* ラベル帯は 96px を基本にしつつ、**3 段だけ**広げられるようにする。
   96px 決め打ちだと「和文フォント（既定）」のような欄名が折り返してしまい、
   意味を削って短くするしかなくなっていた（弥生も、台帳ごとにラベル列の幅が違う）。
   段を 3 つに限るので、画面が変わっても目に映る規則性は保たれる。2026-08-25 */
.lbl-m{--lbl-w:128px}
.lbl-l{--lbl-w:160px}

.form-grid input[name=honorific],.form-grid input[name=title],
.form-grid input[name=unit],.form-grid input[name=size],.form-grid input[name=color],
.form-grid input[name=zip],.form-grid input[name=pack_qty],
.form-grid input[name=qty_decimals],.form-grid input[name=price_decimals],
.form-grid input[name=price_rate],.form-grid input[name=sort_no],
.form-grid input[name=order_lot],.form-grid input[name=lead_time_days],
.form-grid input[name=stock_optimal],.form-grid input[name=payment_day],
.form-grid input[name=note_site],.form-grid input[name=credit_limit],
.form-grid input[name=closing_day],.form-grid input[name=collect_day],
.form-grid input[name=code]{max-width:var(--fw-s)}

.form-grid input[name=tel],.form-grid input[name=fax],
.form-grid input[name=contact_name],.form-grid input[name=name_kana],
.form-grid input[name=model_number],.form-grid input[name=short_name],
.form-grid input[name=client_code],.form-grid input[name=account_no],
.form-grid input[name=bank_code],.form-grid input[name=branch_code],
.form-grid input[name^=price],.form-grid input[name^=cost],
.form-grid input[name^=list_price]{max-width:var(--fw-m)}
.form-grid input[name^=price],.form-grid input[name^=cost],
.form-grid input[name^=list_price]{text-align:right}

.form-grid input[name=name],.form-grid input[name=address1],
.form-grid input[name=address2],.form-grid input[name=department],
.form-grid input[name=email],.form-grid input[name=url]{max-width:var(--fw-l)}

/* 選ぶ欄も同じ段階に寄せる */
.form-grid select{max-width:var(--fw-l)}
.form-grid select[name=deal_type],.form-grid select[name=price_type],
.form-grid select[name=tax_class],.form-grid select[name=valuation],
.form-grid select[name=staff_id],.form-grid select[name=category_id],
.form-grid select[name=main_supplier_id],
.form-grid select[name=line_type_hint]{max-width:var(--fw-m)}
.form-grid textarea{max-width:calc(var(--fw-l) * 2); min-height:64px}
/* メモなどの textarea は帯を上端に合わせる（中央に浮くと欄とずれて見える） */
.form-grid > label:has(textarea) > .fl{align-self:flex-start}
/* 取りこぼしていた欄も段階に寄せる（391px / 290px という半端な幅が残っていた） */
.form-grid select[name$=_rounding],.form-grid select[name=tax_mode],
.form-grid select[name=closing_group_id]{max-width:var(--fw-l)}
.form-grid select[name=fee_bearer]{max-width:var(--fw-m)}
/* ※ ここにあった `billing_mode` の例外（span 6 と max-width）は消した。
     請求方式は得意先台帳を弥生の作りに組み直したときに `.ydaicho` へ移っており、
     `.form-grid` の中にはもう無い＝**効いていない残骸**だった（画面で確認済み）。
     こういう置き去りが、あとで新しい指定を後ろから打ち消す事故のもとになる。2026-08-25 */
.form-grid input[name=receipt_day],.form-grid input[name=note_site_days],
.form-grid input[name=company_code],.form-grid input[name=price_rate]{max-width:var(--fw-s)}

/* ── 伝票画面と同じ「ラベル（緑の帯）＋欄」に揃える ──
   ktec 指摘「売上伝票の入力画面と統一感が全くない」。
   伝票は `.ylbl` + `.yin` を横に並べる作り。台帳だけラベルが上に付く
   別のデザインで、同じアプリに見えなかった。
   ラベルの文字は裸のテキストノードなので、`ux.js` が `<span class="fl">` に包む。
   2026-08-21 */
.form-grid > label{display:flex; align-items:stretch; gap:0;
  font-size:13px; color:var(--ink-2); line-height:1.2; min-width:0}
.form-grid > label > .fl{
  background:linear-gradient(180deg,#c4dbcb 0%,var(--y-lbl) 100%);
  border:1px solid var(--y-line); border-right:none; color:#12301c;
  font-size:13px; line-height:1.2; padding:5px 10px 5px 6px; flex:none;
  display:flex; align-items:center; justify-content:flex-end; text-align:right;
  /* **幅も高さも固定する。**
     幅: 文字数なりに 72〜104px で伸び縮みし、欄の左端が行ごとにずれていた。
     高さ: 説明文のある行で帯だけ 44〜62px に伸び、欄（32px）と上下が合っていなかった。 */
  width:var(--lbl-w); height:32px; flex:none; align-self:flex-start;
  white-space:normal; word-break:auto-phrase; overflow:hidden}
/* 6 文字を超える名前は字間を詰めて 1 行に収める（折り返して切れるより読める） */
.form-grid > label > .fl{font-size:13px; letter-spacing:-0.02em}
.form-grid > label > .fl:has(> *),.form-grid > label > .fl{line-height:1.15}

/* 欄は伝票の `.yin` と同じ。角丸なし・白・濃いめの枠。
   **高さは 32px に固定。** input 30px / select 32px と揃っておらず、
   さらにラベルが 2 行になる項目では欄まで 43〜62px に伸びて、行がガタガタだった。
   （`align-items:stretch` で欄がラベルの高さに引きずられていた） */
.form-grid > label > input,
.form-grid > label > select{height:32px; align-self:flex-start}
.form-grid > label > input,
.form-grid > label > select,
.form-grid > label > textarea{
  margin-top:0; padding:4px 8px; border-radius:0; border:1px solid var(--y-line-2);
  background:var(--y-in); font-size:14px; box-sizing:border-box;
  /* **basis を 0 にする。** auto のままだと欄が自分の幅を主張して、
     ラベル帯と並ばず下に折り返していた（max-width が列幅より広い欄で必ず起きる）。
     0 にすると列に入るだけ縮み、max-width は「これ以上は広げない」上限として効く。 */
  flex:1 1 0; min-width:0}
.form-grid > label > input:hover:not([readonly]):not(:disabled),
.form-grid > label > select:hover:not(:disabled){border-color:var(--green)}
.form-grid > label > input:focus,
.form-grid > label > select:focus,
.form-grid > label > textarea:focus{outline:2px solid var(--green); outline-offset:-2px; box-shadow:none}
/* 欄の下に出す説明は、ラベルのぶん字下げして欄の真下に置く */
.form-grid > label{flex-wrap:wrap}
.form-grid > label > .hint,.form-grid > label > small{
  flex-basis:100%; margin-left:var(--lbl-w); font-size:12px; color:var(--sub); margin-top:1px}
/* ラベル・欄のあとにボタンが続く物（郵便番号の［住所を入れる］など）。
   ボタンが幅を主張して欄が下に折り返していた */
/* 選ぶ欄は、いちばん短い選択肢すら読めない幅まで縮ませない
   （「（自分自身）」が「（自分自」で切れていた） */
.form-grid > label > select{min-width:120px}
.form-grid > label > .btn{flex:none; margin-left:6px; align-self:center; white-space:nowrap}
.form-grid > label:has(> .btn) > input{flex:1 1 0}

/* チェックボックスなど、包めなかった物は今までどおり */
.form-grid > label.fl-skip{display:flex; align-items:center; gap:6px; font-size:13px}
.form-grid > label.fl-skip input[type=checkbox]{flex:none; margin:0}
/* 欄の下に出す小さな説明は、欄にくっつける */
.form-grid > label .hint,.form-grid > label small{font-size:12px; color:var(--sub); margin-top:1px}

/* 単価の表。
   ここだけ「罫線の表」で、ほかの欄（緑のラベル帯＋白い欄）と様式が違い、
   同じカードの中で別の画面のように見えていた。**帯の様式に合わせる。**
   金額は実データの最大が 450,000 なので 9 桁も要らない。2026-08-21 */
.card table.table:has(input[name$="_ex"]){width:auto; min-width:0; border-collapse:separate; border-spacing:0 4px}
.card table.table:has(input[name$="_ex"]) input{
  max-width:var(--fw-m); text-align:right; margin-top:0; height:32px; box-sizing:border-box;
  border:1px solid var(--y-line-2); border-radius:0; background:var(--y-in); padding:4px 8px}
.card table.table:has(input[name$="_ex"]) td,
.card table.table:has(input[name$="_ex"]) th{padding:0 0 0 8px; border:none; vertical-align:middle}
.card table.table:has(input[name$="_ex"]) th{
  font-size:13px; color:var(--sub); font-weight:600; padding-bottom:4px; text-align:right}
.card table.table:has(input[name$="_ex"]) th:first-child{text-align:right; padding-right:8px}
/* 種別の名前を、ほかの欄と同じ緑の帯にする */
.card table.table:has(input[name$="_ex"]) td:first-child{
  width:var(--lbl-w); min-width:var(--lbl-w); padding:0;
  background:linear-gradient(180deg,#c4dbcb 0%,var(--y-lbl) 100%);
  border:1px solid var(--y-line); border-right:none; color:#12301c;
  font-size:13px; line-height:1.15; text-align:right; height:32px; padding-right:10px}
.card table.table:has(input[name$="_ex"]) td:first-child .hint{display:none}
.card table.table:has(input[name$="_ex"]) td:nth-child(2) input,
.card table.table:has(input[name$="_ex"]) td:nth-child(3) input{margin-left:0}
.card table.table:has(input[name$="_ex"]) td:nth-child(2){padding-left:0}
.card table.table:has(input[name$="_ex"]) th:first-child,
.card table.table:has(input[name$="_ex"]) td:first-child{min-width:130px; white-space:nowrap}

/* 「必須」の印。
   ・流し込むと、その項目だけ右にずれて縦のラインが崩れる（左端 205px → 237px）
   ・絶対配置で帯に重ねたら、今度は **ラベルの文字と重なって読めなくなった**
     （「得意先コード」が「先コード」に見える）
   → **場所を食わない赤い縦線**にする。帯の左端 3px。一目で分かり、文字を邪魔しない。
   2026-08-21 */
.form-grid > label.required{position:relative}
.form-grid > label.required::before{content:none}
.form-grid > label.required > .fl{
  border-left:3px solid var(--red); padding-left:6px; font-weight:700}

@media (max-width:900px){
  /* 狭い画面では 4 列に割り直す（2→2、3→4、6→4、12→4 相当） */
  .form-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
  .form-grid > label,.form-grid > .fld{grid-column:span 2}
  .form-grid > label:has(input[name=name]),
  .form-grid > label:has(input[name=address1]),
  .form-grid > label:has(input[name=email]),
  .form-grid > label:has(input[name=url]),
  .form-grid > label:has(textarea){grid-column:span 4}
}
.form-actions{display:flex; flex-wrap:wrap; align-items:center; gap:10px; padding:14px 12px 12px;
  border-top:1px solid var(--line); margin:8px -12px 0;
  /* ［登録］が画面の外にあると、伝票 1 枚ごとに下までスクロールすることになる。
     画面の下に貼り付けて、いつでも押せるようにする。2026-08-17 */
  background:var(--white)}
/* 画面の下に貼り付けるのは、［登録］があるときだけ。
   ［戻る］しか無いバーまで貼り付くと、その上の内容に覆いかぶさる */
.form-actions:has(button[type=submit]){position:sticky; bottom:0; z-index:40;
  box-shadow:0 -3px 10px rgba(20,40,30,.06)}
/* 1024px 幅では［登録］から［様式］までが 1 行に並びきらず、画面ごと横スクロールになっていた。
   折り返して縦に伸ばす。押せる物が画面の外に出るのがいちばん困る。2026-08-17 */
@media (max-width:1150px){
  .form-actions > span[style*="flex:1"]{flex-basis:100%; height:0}
}
.hint{font-size:13px; color:var(--sub); margin-top:2px}
.required::before{content:"必須"; display:inline-block; margin-right:5px; padding:1px 5px;
  background:var(--red); color:#fff; font-size:12px; line-height:1.5; border-radius:3px; vertical-align:1px}

/* ---- ボタン ---- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  padding:9px 18px; border-radius:var(--radius-sm); border:1px solid var(--line-2);
  background:linear-gradient(180deg,#fff 0%,#f8faf9 100%); color:var(--ink-2);
  cursor:pointer; font-size:15px; font-family:inherit;
  font-weight:600; white-space:nowrap; box-shadow:var(--shadow-1);
  transition:background .12s ease, border-color .12s ease, box-shadow .12s ease, transform .08s ease;
}
.btn:hover{background:#f7faf8; border-color:var(--line-2); text-decoration:none; box-shadow:var(--shadow-2)}
.btn:active{transform:translateY(1px); box-shadow:var(--shadow-1)}
/* 押してほしいボタンは、地の色と文字の太さで一段はっきりさせる */
.btn-primary{background:linear-gradient(180deg,#158049 0%,var(--green) 60%,#0d6039 100%);
  border-color:#0d6039; color:#fff; font-weight:700;
  box-shadow:0 1px 0 rgba(255,255,255,.22) inset, var(--shadow-2)}
.btn-primary:hover{background:linear-gradient(180deg,#127045 0%,var(--green-d) 100%); border-color:var(--green-dd)}
.btn-danger{background:#fff; border-color:var(--red); color:var(--red)}
.btn-danger:hover{background:var(--red); color:#fff}
.btn-sm{padding:5px 11px; font-size:13px; border-radius:var(--radius-xs)}
.btn-block{width:100%}

/* ---- フラッシュ ---- */
.flash{padding:11px 15px; border-radius:var(--radius-sm); margin-bottom:14px; font-size:14px;
  border-left:3px solid; box-shadow:var(--shadow-1)}
.flash-info{background:#eef6ff; border-color:var(--blue); color:#14417a}
.flash-success{background:var(--green-l); border-color:var(--green); color:var(--green-d)}
.flash-error{background:#fdecea; border-color:var(--red); color:#8c2318}
.flash-warn{background:#fff8e6; border-color:var(--amber); color:#7a5210}

/* ---- バッジ ---- */
.badge{display:inline-block; padding:1px 7px; border-radius:10px; font-size:13px; background:var(--green-l); color:var(--green-d); border:1px solid var(--green)}

/* ---- ログイン ---- */
.login-wrap{min-height:100vh; display:flex; align-items:center; justify-content:center; background:linear-gradient(160deg,var(--green) 0%,var(--green-d) 100%); padding:20px}
.login-card{background:#fff; padding:32px; border-radius:8px; width:100%; max-width:370px; box-shadow:0 10px 40px rgba(0,0,0,.25)}
.login-card h1{margin:0; font-size:28px; color:var(--green); text-align:center; letter-spacing:.05em}
.login-card .sub{margin:2px 0 22px; text-align:center; color:var(--sub); font-size:13px}

/* ---- 棒グラフ ---- */
.bars{display:flex; flex-direction:column; gap:5px}
.bar-row{display:grid; grid-template-columns:70px minmax(0,1fr) 110px; align-items:center; gap:10px; font-size:13px}
.bar{background:#eef2f0; border-radius:3px; height:16px; overflow:hidden}
.bar-fill{display:block; height:100%; background:linear-gradient(90deg,var(--green),#3aa35f)}
.bar-value{text-align:right; font-variant-numeric:tabular-nums; color:var(--sub)}
.bar-label{color:var(--sub)}

/* ---- 明細エディタ ---- */
.lines{width:100%; border-collapse:collapse; font-size:14px}
.lines th{background:var(--green-l); color:var(--green-d); padding:6px; font-size:13px; border:1px solid var(--line); white-space:nowrap}
.lines td{border:1px solid var(--line); padding:0}
.lines input,.lines select,.lines textarea{border:none; margin:0; border-radius:0; padding:6px}
.lines input:focus,.lines select:focus{outline:2px solid var(--green); outline-offset:-2px}
.lines .num input{text-align:right}
.line-type-note{background:#fffdf2}
.line-type-discount{background:#fdf3f2}
.line-type-memo{background:#f2f6fd; color:var(--sub)}
.line-type-subtotal{background:#eef2f0; font-weight:600}

.toolbar{display:flex; gap:8px; align-items:center; margin-bottom:14px; flex-wrap:wrap}
.toolbar .spacer{flex:1}
.search-box{display:flex; gap:6px; align-items:center}
.search-box input{width:220px}

.totals{display:flex; justify-content:flex-end; gap:26px; padding:12px 4px; font-size:15px}
.totals .t-item{text-align:right}
.totals .t-label{font-size:13px; color:var(--sub); display:block}
.totals .t-value{font-size:20px; font-weight:700; font-variant-numeric:tabular-nums}
.totals .t-main .t-value{color:var(--green-d); font-size:24px}

@media (max-width:980px){
  .topbar{gap:10px; padding:0 10px; flex-wrap:wrap; height:auto; min-height:52px}
  .navtoggle{display:block; order:2; margin-left:auto}
  .userbox{order:3}
  .mainnav{order:4; flex-basis:100%; display:none; flex-direction:column;
    background:var(--green-d); margin:0 -10px; padding:4px 0}
  .mainnav.open{display:flex}
  .navitem > a{height:42px; padding:0 16px}
  .submenu{position:static; display:block; box-shadow:none; border:none;
    background:rgba(0,0,0,.18); border-radius:0; padding:0}
  .submenu a{color:#dff0e5; padding:7px 30px; font-size:13px}
  .submenu a:hover,.submenu a.cur{background:rgba(255,255,255,.12); color:#fff; box-shadow:none}
  .navitem .caret{display:none}
  .container{padding:12px}
  .uname{display:none}
  .form-grid{grid-template-columns:1fr}
}
@media print{
  .topbar,.foot,.toolbar,.form-actions{display:none}
  body{background:#fff}
  .container{max-width:none; padding:0}
}

/* ---- 認証（ログイン／店舗選択）---- */
/* 左半分は一色の緑で寂しかったので、光の当たり方を足して奥行きを出す */
.auth-wrap{min-height:100vh;display:grid;grid-template-columns:1fr 440px;
  background:
    radial-gradient(1100px 700px at 18% 22%, rgba(255,255,255,.13) 0%, transparent 60%),
    radial-gradient(800px 600px at 85% 90%, rgba(0,0,0,.22) 0%, transparent 65%),
    linear-gradient(155deg,#178451 0%,var(--green) 42%,var(--green-dd) 100%)}
.auth-wrap.single{grid-template-columns:1fr;place-items:center;padding:20px}
.auth-brand{display:flex;flex-direction:column;justify-content:center;padding:0 8vw;color:#fff}
.auth-brand .logo{display:flex;align-items:center;gap:16px;
  font-size:52px;font-weight:700;letter-spacing:.01em;line-height:1;
  text-shadow:0 2px 12px rgba(0,0,0,.22)}
.auth-mark{width:64px;height:64px;flex:none;filter:drop-shadow(0 4px 12px rgba(0,0,0,.3))}
.auth-brand .logo .bw-1{color:#fff}
.auth-brand .logo .bw-2{color:#a8ecc4}
.auth-brand .tag{margin:8px 0 32px;opacity:.9;font-size:16px;letter-spacing:.22em}
.auth-brand .feat{list-style:none;padding:0;margin:0;opacity:.92;font-size:15px}
.auth-brand .feat li{padding:9px 0 9px 26px;position:relative}
.auth-brand .feat li::before{content:"";position:absolute;left:2px;top:16px;width:7px;height:7px;
  border-radius:50%;background:#8fe0b2;box-shadow:0 0 0 3px rgba(143,224,178,.22)}
.auth-card{background:#fff;display:flex;flex-direction:column;justify-content:center;padding:44px 40px;box-shadow:-6px 0 30px rgba(0,0,0,.2)}
.auth-wrap.single .auth-card{border-radius:10px;box-shadow:0 12px 44px rgba(0,0,0,.28);width:100%;max-width:440px;padding:36px}
.auth-card.wide{max-width:560px}
.auth-card h1{font-size:28px;margin:0 0 6px;color:var(--green-d);letter-spacing:.01em}
.auth-card .sub{margin:0 0 20px;color:var(--sub);font-size:14px}
.auth-note{margin-top:16px;font-size:13px;color:var(--sub);text-align:center}
.chk{display:flex;align-items:center;gap:6px;font-size:14px;margin:14px 0}
.chk input{width:auto}

/* 店舗リスト */
.tenant-list{display:flex;flex-direction:column;gap:8px;margin:6px 0 4px;max-height:52vh;overflow-y:auto}
.tenant-item{display:flex;align-items:center;gap:12px;margin:0;padding:13px 15px;border:1px solid var(--line);border-radius:6px;cursor:pointer;transition:.12s}
.tenant-item:hover{border-color:var(--green);background:var(--green-l)}
.tenant-item input{width:auto;margin:0;flex:none}
.tenant-item:has(input:checked){border-color:var(--green);background:var(--green-l);box-shadow:inset 0 0 0 1px var(--green)}
.ti-body{display:flex;flex-direction:column}
.ti-name{font-size:16px;font-weight:600;color:var(--ink)}
.ti-sub{font-size:13px;color:var(--sub)}

/* ヘッダの店舗表示 */
.shop{display:flex;align-items:center;gap:6px;background:rgba(0,0,0,.18);padding:3px 8px 3px 10px;border-radius:12px}
.shop-name{color:#fff;font-size:13px;font-weight:600;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shop-switch{color:#dff0e5;font-size:13px;border:1px solid rgba(255,255,255,.45);padding:1px 6px;border-radius:8px}
.shop-switch:hover{background:rgba(255,255,255,.18);text-decoration:none}

@media (max-width:900px){
  .auth-wrap{grid-template-columns:1fr}
  .auth-brand{display:none}
  .auth-card{box-shadow:none}
}

.plan-tag{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:8px;font-size:12px;
  background:rgba(255,255,255,.2);color:#fff;vertical-align:middle}

/* ---- ホーム（ダッシュボード）---- */
.dash-head{display:flex; align-items:flex-end; justify-content:space-between; gap:12px; margin-bottom:16px; flex-wrap:wrap}
.quick{display:flex; gap:8px; flex-wrap:wrap}

.alerts{display:flex; flex-direction:column; gap:6px; margin-bottom:16px}
.alert-item{display:flex; align-items:center; gap:9px; background:#fffaf0; border:1px solid #f0e2c0;
  border-left:3px solid var(--amber); border-radius:var(--radius-sm); padding:10px 15px;
  color:#7a5210; font-size:14px; box-shadow:var(--shadow-1)}
.alert-item:hover{background:#fff3d6; text-decoration:none}
.alert-dot{width:7px; height:7px; border-radius:50%; background:var(--amber); flex:none}
.alert-go{margin-left:auto; font-size:16px; opacity:.6}

.kpi-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:16px; margin-bottom:16px}
/* 4 枚が同じ見た目で並ぶと、どれが大事か分からない。
   上に細い色の線を入れて、数字そのものは大きく、説明は小さく。抑揚を付ける。2026-08-17 */
.kpi{background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow-1); padding:17px 19px 16px; display:flex; flex-direction:column; gap:4px;
  position:relative; overflow:hidden;
  transition:transform .12s ease, box-shadow .12s ease, border-color .12s ease}
.kpi::before{content:""; position:absolute; inset:0 0 auto 0; height:3px;
  background:linear-gradient(90deg, var(--green) 0%, #4fb07c 100%); opacity:.5}
.kpi:nth-child(2)::before{background:linear-gradient(90deg,#2f7fbf 0%,#63add8 100%)}
.kpi:nth-child(3)::before{background:linear-gradient(90deg,#b5790f 0%,#e0b45c 100%)}
.kpi:nth-child(4)::before{background:linear-gradient(90deg,#6b7a74 0%,#a8b5b0 100%)}
a.kpi:hover{text-decoration:none; transform:translateY(-2px); box-shadow:var(--shadow-2); border-color:var(--green)}
.kpi-label{font-size:13px; color:var(--sub); font-weight:600; letter-spacing:.02em}
.kpi-value{font-size:32px; font-weight:700; color:var(--ink); font-variant-numeric:tabular-nums;
  line-height:1.2; letter-spacing:-.02em}
.kpi-unit{font-size:15px; font-weight:400; color:var(--sub); margin-left:3px}
.kpi-sub{font-size:13px; color:var(--sub); line-height:1.55}
.kpi-main{background:linear-gradient(155deg,var(--green-l) 0%,#fff 62%); border-color:#bcdfc9}
/* 伝票の上に出す小さい版。ダッシュボードの 32px は伝票の中では大きすぎて、
   入力欄より数字のほうが目立ってしまう。2026-08-27 */
.kpi-grid.kpi-sm{grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:10px; margin:4px 0 0}
.kpi-sm .kpi{padding:9px 12px 10px; gap:1px}
.kpi-sm .kpi::before{height:2px}
.kpi-sm .kpi-label{font-size:12px}
.kpi-sm .kpi-value{font-size:21px}
.kpi-sm .hint{font-size:11px; line-height:1.4}
.kpi-main::before{opacity:1; height:4px}
.kpi-main .kpi-value{color:var(--green-d); font-size:37px}
.kpi-sub .up{color:var(--green); font-weight:600}
.kpi-sub .down{color:var(--red); font-weight:600}

.dash-cols{display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,1fr); gap:16px; align-items:start}
@media (max-width:980px){ .dash-cols{grid-template-columns:minmax(0,1fr)} }

/* ---- ログイン等の認証画面 ---- */
.auth-body{background:var(--green-d)}
.flash-float{position:fixed; top:14px; left:50%; transform:translateX(-50%);
  z-index:50; min-width:280px; max-width:90vw; box-shadow:0 4px 16px rgba(0,0,0,.25)}


/* ==================================================================
   伝票入力画面（弥生販売の伝票画面に合わせた配置）
   ================================================================== */
:root{
  /* 面を 3 つに分けて、**打てる所が一目で分かる**ようにする。
       打てる  = 純白 ＋ はっきりした枠
       打てない = 灰（読み取り・自動計算）
       ラベル  = 緑
     もとは罫線もラベルも入力欄も似た明るさで、どこに打てるのか分からなかった。
     2026-08-21 ktec 指摘「入力可能位置が見にくい。コントラストをはっきり」 */
  --y-line:#8aa697;        /* 罫線。薄すぎてグリッドが消えていたので濃くした */
  --y-line-2:#6b8d7a;      /* 入力欄の枠。罫線よりさらに濃く＝ここが箱だと分かる */
  --y-lbl:#b9d2c1;         /* ラベル地。入力欄の白との差を広げた */
  --y-bar:#0f6640;         /* 見出し帯 */
  --y-head:#d3e4d8;        /* 明細ヘッダ地 */
  --y-alt:#f7faf8;         /* 明細の交互色。入力欄を白にしたぶん、ごく薄く */
  --y-in:#ffffff;          /* 打てる欄。**純白**（もとは薄クリームで地と紛れていた） */
  --y-ro:#c2cec8;          /* 打てない欄（読み取り・自動計算）。はっきり沈ませる */
  --y-ro-ink:#5a6b62;      /* 打てない欄の文字 */
}
.ytitle{display:flex; align-items:baseline; gap:10px; margin-bottom:8px}
.ytitle h1{font-size:20px; margin:0}
.ytitle .ymode{font-size:15px; font-weight:400; color:var(--sub)}
.ytitle .ydocno{font-family:ui-monospace,monospace; font-size:16px; color:var(--sub)}

.ybar{background:linear-gradient(180deg,#12744a 0%,var(--y-bar) 100%); color:#fff;
  font-weight:700; font-size:14px;
  padding:7px 14px; border-radius:var(--radius-xs) var(--radius-xs) 0 0; letter-spacing:.1em;
  box-shadow:0 1px 0 rgba(255,255,255,.16) inset}

/* ---- ヘッダ 2 ブロック ---- */
.yhead{display:grid; grid-template-columns:minmax(0,1fr) 330px; gap:8px; align-items:start;
  border:1px solid var(--y-line); border-top:none; background:#f4f8f5; padding:6px; margin-bottom:10px}
.yhead-l{display:flex; flex-direction:column; gap:1px; min-width:0}
.yhead-r{display:flex; flex-direction:column; gap:8px}

.yrow{display:flex; align-items:stretch; gap:2px; min-width:0}
.yrow.ytop{margin-bottom:4px}
.ylbl{background:linear-gradient(180deg,#c4dbcb 0%,var(--y-lbl) 100%); border:1px solid var(--y-line); color:#12301c;
  font-size:13px; line-height:1.2; padding:5px 9px; min-width:86px; text-align:right;
  display:flex; align-items:center; justify-content:flex-end; gap:3px; white-space:nowrap; flex:none}
.ylbl.block{justify-content:flex-start; text-align:left; width:100%}
.ylbl i{font-style:normal; color:#4c7a5c; font-size:12px}

/* `input[type=text]` は属性セレクタのぶん .yin より強い。
   要素名を付けて詳細度で勝たせないと、枠の色が効かなかった。2026-08-21 */
input.yin,select.yin,textarea.yin,.yin{
  border:1px solid var(--y-line-2); background:var(--y-in); font-size:14px;
  padding:4px 8px; margin:0; border-radius:0; min-width:0; height:auto}
.yin:focus{outline:2px solid var(--green); outline-offset:-2px; background:#fff}
.yin:hover:not([readonly]):not(:disabled){border-color:var(--green); background:#fbfefc}
/* 打てない欄は、打てる欄と見間違えないよう沈ませる */
input.yin[readonly],input.yin:disabled,textarea.yin[readonly],select.yin:disabled,
.yin[readonly],.yin:disabled,.yin[readonly]:focus{
  background:var(--y-ro); color:var(--y-ro-ink); border-color:var(--y-line)}
/* 🔴 幅も `.yin` と同じで、**要素名を付けないと詳細度で負ける**。
      上の 248 行あたりの `input[type=text]{width:100%}` は属性セレクタ（0-1-1）で、
      クラスだけの `.w-mid`（0-1-0）より強い。そのため
      **`<input type=text>` の欄がすべて枠いっぱいに伸びていた**
      （伝票番号 108px→582px／敬称 104px→515px／請求書番号 168px→834px）。
      `<select>` は要素セレクタ（0-0-1）なので負けず、選ぶ欄だけ正しい幅だった
      ＝「選ぶ欄は普通なのに打つ欄だけ異常に広い」という見え方になっていた。
      2026-08-21 に `.yin` で同じ直し方をしたが、幅クラスは直し漏れていた。
      2026-09-01 ktec 指摘「入力の枠サイズが異常に広かったり」より */
input.w-no,select.w-no,textarea.w-no,.w-no{width:108px; font-family:ui-monospace,monospace}
input.w-date,select.w-date,textarea.w-date,.w-date{width:178px}
input.w-cust,select.w-cust,textarea.w-cust,.w-cust{width:280px; flex:none}
input.w-mid,select.w-mid,textarea.w-mid,.w-mid{width:168px}
input.w-hon,select.w-hon,textarea.w-hon,.w-hon{width:104px}
input.w-rate,select.w-rate,textarea.w-rate,.w-rate{width:74px}
/* 見積の条件欄（納入期限・取引方法・有効期限・納入場所）。
   実データは最長 18 字なのに枠いっぱい（全角 78 字ぶん）だった。2026-09-01 */
input.w-cond,select.w-cond,textarea.w-cond,.w-cond{width:260px}
input.w-cond2,select.w-cond2,textarea.w-cond2,.w-cond2{width:420px}
.w-grow{flex:1 1 auto}
.w-full{flex:1 1 auto; width:100%}
.yrate{display:flex; align-items:center; gap:3px; font-size:13px; color:var(--sub)}

.ystamp{display:flex; border:1px solid var(--y-line); background:#fff}
.ystamp label{margin:0; display:flex}
.ystamp input{position:absolute; opacity:0; width:0; height:0}
.ystamp span{display:block; padding:5px 13px; font-size:13px; color:#333;
  border-right:1px solid var(--y-line); cursor:pointer; user-select:none}
.ystamp label:last-child span{border-right:none}
.ystamp input:checked + span{background:var(--y-bar); color:#fff; font-weight:700}
.ystamp input:focus-visible + span{outline:2px solid var(--green); outline-offset:-2px}

.ybox{border:1px solid var(--y-line); background:#fff; padding:5px}
.ybox .yrow{gap:2px}
.ybox .ylbl{min-width:88px}
/* 打てない表示専用の欄（入力者・売掛残高など）。打てる欄と同じ見た目だと迷う */
.yout{border:1px solid var(--y-line); background:var(--y-ro); font-size:13px;
  padding:5px 9px; flex:1 1 auto; min-width:0; color:var(--y-ro-ink)}
.yout.num{text-align:right; font-variant-numeric:tabular-nums}

/* ---- 明細行の右外に出す「商品新規登録 / 商品登録修正」----
   打ったコードが台帳に無ければ登録へ、あれば修正へ。**その行の真横**に出す。
   表の中に列を足すと、ただでさえ詰まっている明細がさらに狭くなるので、
   表の右の余白に浮かせる。2026-08-21 ktec 指示 */
.table-wrap:has(.ylines){position:relative; padding-right:118px}
.row-prod{position:absolute; right:0; width:104px; box-sizing:border-box;
  display:inline-flex; align-items:center; justify-content:center; gap:4px;
  height:24px; padding:0 6px; border-radius:var(--radius-xs);
  border:1px solid var(--green); background:#fff; color:var(--green-d);
  font-size:12px; font-weight:700; line-height:1; text-decoration:none;
  white-space:nowrap; cursor:pointer; z-index:2;
  box-shadow:var(--shadow-1); transition:background .12s ease, transform .12s ease}
.row-prod:hover{background:var(--green-l); transform:translateX(-1px)}
.row-prod:focus-visible{outline:2px solid var(--green); outline-offset:2px}
/* 台帳に無いコード = これから作る。色を変えて「まだ無い」と分かるようにする */
.row-prod.is-new{border-color:var(--amber); color:#7a5208; background:#fffaf0}
.row-prod.is-new:hover{background:#fff3d9}
.row-prod::after{content:'↗'; font-size:11px; opacity:.75}
@media (max-width:1100px){
  /* 狭い画面では表を横に送るので、置き場を作らず行の中に重ねる */
  .table-wrap:has(.ylines){padding-right:0}
  .row-prod{right:4px; opacity:.94}
}

/* ---- 明細（上下 2 段組み）---- */
/* 明細の表。1080px で頭打ちにしていたので、画面が広くても
   商品名が狭いままだった。広い画面ではそのぶん商品名に回す。 */
.ylines{width:100%; max-width:1600px; border-collapse:collapse; background:#fff;
  border:1px solid var(--y-line); font-size:14px; table-layout:fixed}
.ylines th{background:linear-gradient(180deg,#e0eee5 0%,var(--y-head) 100%); border:1px solid var(--y-line); color:#183a22;
  font-weight:700; font-size:13px; padding:5px 4px; text-align:center; white-space:nowrap;
  letter-spacing:.02em}
.ylines td{border:1px solid var(--y-line); padding:0; vertical-align:middle}
.ylines select{font-size:13px}
/* 明細の欄は、もとは枠も地も無く（transparent）、罫線しか手がかりがなかった。
   **打てる所を白く浮かせて、打てない所を灰に沈める。** 2026-08-21 */
.ylines input,.ylines select,.ylines textarea{border:none; background:var(--y-in); width:100%;
  font-size:14px; padding:1px 5px; line-height:1.45; margin:0; border-radius:0; height:auto}
.ylines input:focus,.ylines select:focus,.ylines textarea:focus{
  outline:2px solid var(--green); outline-offset:-2px; background:#fff}
/* **打てる欄はマウスを乗せると色が変わる。** 打てない欄は変わらない。
   明細は枠を出すと線だらけになるので、色の変化で「ここは打てる」と示す。
   2026-08-21 ktec 指摘「入力可能位置が見にくい」 */
.ylines input:hover:not([readonly]):not(:disabled),
.ylines select:hover:not(:disabled),
.ylines textarea:hover:not([readonly]){background:#eef6f1; cursor:text}
.ylines select:hover:not(:disabled){cursor:pointer}
.ylines input[readonly],.ylines input:disabled,
.ylines select:disabled,.ylines textarea[readonly]{
  background:var(--y-ro); color:var(--y-ro-ink)}
/* 打てないセルそのもの（小計行の単価欄など、中に欄が無い所）も同じ灰にする */
.ylines td.is-off{background:var(--y-ro)}
.ylines .num{text-align:right; font-variant-numeric:tabular-nums}
.ylines tbody.line-row:nth-of-type(even){background:var(--y-alt)}
.ylines tbody.line-row.dragging{opacity:.5; background:var(--green-l)}
.ylines tr.r1 td{border-bottom-style:dotted}
/* 上下 2 段にまたがるセル（No. と内訳）だけは、段の切れ目の点線を引かない。
   数量・金額は下段へ移したので、ここから外した。2026-08-25 */
.ylines td.c-no,.ylines td.c-lt{border-bottom-style:solid}
/* 上段の空セル（数量・金額の真上）。弥生も同じ位置が空欄になっている。
   見出しの空セルは他の見出しと同じ地のまま（弥生も緑のまま）なので何もしない。 */

/* 明細の列幅。**実データ 12,407 行の使われ方**に合わせてある。
     商品名・摘要 99.7% 最長 40 文字 ／ 規格・型番 18.2% 最長 20 文字
     色 3.2% 最長 7 文字 ／ サイズ 0.6% 最長 5 文字 ／ 備考 10.0% 最長 14 文字
   もとは規格・型番が `auto` で余りを全部吸い、
   **いちばん使う商品名 229px に対して、ほとんど使わないサイズが 211px** だった。
   余りは商品名（下段）と規格・型番（上段）に回す。 */
/* ※ セル（th/td）側には幅を書かない。
   `<col>` と両方に書くと競合し、指定した幅がそのまま出なくなる
   （44px と書いた No. が 74px で描かれていた）。幅は colgroup に一本化する。
   2026-08-18 */

/* 列幅は colgroup の 11 本で決める（th のクラスでは 1 行目しか効かない）。
   上段: No. 内訳 |コード 単位 ケース| 型番 ×2 |数量 原単価 金額 課税区分
   下段: No. 内訳 |商品名・摘要 ×3   | 色      |数量 単価   金額 備考
   → 3〜5 本目が「商品名の大半」、6〜7 本目が「型番／色」にあたる。
     いちばん使う商品名（99.7%・最長 40 文字）に広く回す。 */
/* 実測でセルと列の対応を確かめた結果:
     3〜5 本目 = 上段の「コード・単位・ケース」／下段の「商品名・摘要」
     6〜7 本目 = 上段の「規格・型番」／下段の「色」
   もとは 6〜7 本目に余りを寄せていたので、
   **下段では色が 793px、商品名が 230px** という配分になっていた。
   商品名は実データ 99.7%・最長 40 文字。色は 3.2%・最長 7 文字。
   → **余りは 3〜5 本目（＝商品名）に回す。** */
/* `table-layout:fixed` では、`auto` の列は余りを**均等に**分け合う。
   そのせいでコード欄まで一緒に太ってしまうので、**% で配る。**
   3〜5 本目の合計 = 下段の商品名の幅。ここを厚くする。 */
/* 文字を大きくしたぶん（12→14px）、固定幅の列も同じだけ広げる。
   広げないと「課税10.0%」や金額の桁が欄からはみ出す。2026-08-17 */
.ylines .w-no{width:44px}    .ylines .w-lt{width:80px}
/* 3〜5 本目の合計が、下段の商品名の幅になる。
   余りは **商品コード側（3 本目）** に持たせる。
   5 本目（上段のケース欄）に寄せると、**一度も使われていない欄**（実データ 0/12,407）が
   画面でいちばん広くなってしまい、見た目が不自然になる。 */
/* 3 本目で残りを全部吸う。
   ※ auto にしても駄目だった。table-layout:fixed は、指定幅の合計が表の幅より
     小さいと **余りを全列に配ってしまう**（44px の No. が 64px になっていた）。
     calc で「表の幅 − ほかの列の合計」を明示すると、狙いどおり 3 本目だけが伸びる。 */
.ylines .w-code{width:max(200px, calc(100% - 800px))}
.ylines .w-unit{width:54px}   .ylines .w-case{width:52px}
/* 色 88 + サイズ 80 = 168px。下段の「規格・型番」がこの 2 本にまたがるので、
   合計は規格・型番の実測必要幅（20 半角＝154px）で決める。
   色・サイズ単体は「ｸﾞﾗﾌｧｲﾄ」7 半角／「ｼﾙﾊﾞｰ」5 半角が最長で、それぞれ 63px・49px あれば足りる。 */
.ylines .w-model1{width:88px} .ylines .w-model2{width:80px}
.ylines .w-qty{width:76px}    .ylines .w-cost{width:96px}
.ylines .w-amt{width:106px}   .ylines .w-tax{width:124px}
/* 商品コードの欄そのものは広げない。欄が 700px あっても打ちにくいだけで、
   14 桁の JAN が入れば足りる。空いた所は下段の商品名が使う。 */
.ylines input.pcode{max-width:150px}

/* 上下段の中身は、その列の幅いっぱいに広げる */
.ylines .c-name, .ylines .c-model, .ylines .c-color,
.ylines .c-size, .ylines .c-note{width:auto}

td.c-no{position:relative; text-align:center; cursor:grab; user-select:none; background:var(--y-head)}
td.c-no:hover{background:#cbdfd0}
tbody.dragging td.c-no{cursor:grabbing}
td.c-no .rno{font-size:12px; color:#456}
td.c-no .delRow{position:absolute; inset:auto 1px 1px 1px; border:none; background:transparent;
  color:#b06; font-size:13px; line-height:1; cursor:pointer; opacity:0; padding:1px}
tbody.line-row:hover td.c-no .delRow{opacity:.75}
td.c-no .delRow:hover{opacity:1}

/* ヒストは 1 行に収まらないので折り返す。
   横一列に置いていたため、右のほうが画面の外に出て読めなかった。2026-08-17 */
.ylines-bar{display:flex; align-items:flex-start; gap:12px; margin:9px 0 12px; flex-wrap:wrap}
.ylines-bar .btn{flex:none}
.ylines-bar .hint{flex:1 1 420px; min-width:0; line-height:1.75; padding-top:3px}

/* 内訳による行の色分け。
   弥生は値引・返品でも「数量と金額だけ」を赤にする（単価や商品コードは黒のまま）ので合わせる */
.ylines tbody.line-type-discount .qty,
.ylines tbody.line-type-discount .amount,
.ylines tbody.line-type-return   .qty,
.ylines tbody.line-type-return   .amount{color:var(--red)}
.ylines tbody.line-type-note     input,
.ylines tbody.line-type-memo     input{color:#555; font-style:italic}
.ylines tbody.line-type-subtotal{background:#eaf2ff}
.ylines tbody.line-type-tax{background:#f6f0ff}
.ylines tbody.line-type-pagebreak{background:#f0f0f0}

/* ---- フッタ合計 ---- */
.yfoot{display:flex; justify-content:flex-end; align-items:stretch; gap:0; flex-wrap:wrap}
.yf-item{display:flex; flex-direction:column; border:1px solid var(--y-line); border-left:none; min-width:120px}
.yf-item:first-child{border-left:1px solid var(--y-line)}
.yf-label{background:var(--y-lbl); color:#173a22; font-size:13px; text-align:center; padding:5px 9px;
  font-weight:600; letter-spacing:.03em;
  border-bottom:1px solid var(--y-line)}
.yf-value{background:#fff; font-size:16px; font-weight:700; text-align:right; padding:6px 11px;
  font-variant-numeric:tabular-nums}
.yf-main .yf-label{background:var(--y-bar); color:#fff}
.yf-main .yf-value{color:var(--green-d); font-size:20px; letter-spacing:-.01em}
.yf-note{display:block; font-size:12px; color:var(--sub); text-align:right; margin-top:-2px}
.yf-cost{order:-1; align-self:flex-end; margin-right:auto; font-size:13px; color:var(--sub); padding-bottom:5px}

@media (max-width:1100px){
  .yhead{grid-template-columns:1fr}
  .yhead-r{flex-direction:row; flex-wrap:wrap}
  .yhead-r .ybox{flex:1 1 240px}
  .table-wrap{overflow-x:auto}
  .ylines{min-width:980px}
}

/* ==================================================================
   ホームのクイックナビゲータ（弥生の業務フローを Web で）
   ================================================================== */
.navi{background:var(--white); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow-1); padding:20px; margin-bottom:16px}
.navi-head{display:flex; align-items:baseline; gap:10px; margin-bottom:14px}
.navi-head h2{font-size:15px; margin:0; letter-spacing:.02em}
.navi-quiet{background:transparent; box-shadow:none; border-style:dashed}

.flow{display:flex; align-items:stretch; gap:6px; flex-wrap:wrap}
.flow-arrow{align-self:center; color:var(--line-2); font-size:24px; line-height:1; flex:none}
.flow-item{flex:1 1 150px; min-width:132px; display:flex; flex-direction:column; gap:5px;
  padding:15px 14px; border:1px solid var(--line); border-radius:var(--radius-sm);
  background:linear-gradient(180deg,#fff 0%,#fbfdfc 100%); color:var(--ink);
  transition:transform .12s ease, box-shadow .12s ease, border-color .12s ease}
.flow-item:hover{text-decoration:none; transform:translateY(-2px);
  border-color:var(--green); box-shadow:var(--shadow-2)}
.flow-ic{width:34px; height:34px; border-radius:9px; background:var(--green-l); color:var(--green-d);
  display:flex; align-items:center; justify-content:center}
.flow-ic svg{width:19px; height:19px}
.flow-label{font-weight:600; font-size:15px; line-height:1.35}
.flow-note{font-size:13px; color:var(--sub); line-height:1.4}

.navi-sub{display:flex; gap:7px; flex-wrap:wrap; margin-top:14px}
.navi-quiet .navi-sub{margin-top:0}
.chip{display:inline-flex; align-items:center; padding:6px 13px; border:1px solid var(--line);
  border-radius:999px; background:var(--white); font-size:14px; color:var(--ink-2);
  transition:border-color .12s ease, color .12s ease, background .12s ease}
.chip:hover{text-decoration:none; border-color:var(--green); color:var(--green-d); background:var(--green-l)}

@media (max-width:820px){
  .flow{flex-direction:column}
  .flow-arrow{align-self:flex-start; transform:rotate(90deg); margin-left:24px}
}

/* ---- 明細の商品名・摘要は書いた分だけ伸びる（弥生の 14 文字制限を外した箇所）---- */
.ylines textarea{border:none; background:var(--y-in); width:100%; display:block;
  font-family:inherit; font-size:13px; line-height:1.4; padding:1px 4px; margin:0;
  resize:none; overflow:hidden; min-height:17px; border-radius:0}
.ylines textarea:focus{outline:2px solid var(--green); outline-offset:-2px; background:#fff}
.ylines textarea::placeholder{color:#c2ccc7; font-size:13px}
.ylines td.c-name{vertical-align:top}
.ylines tbody.line-type-note td.c-name textarea,
.ylines tbody.line-type-memo td.c-name textarea{color:#3c4a43}

/* ---- ページ送り ---- */
.pager{display:flex; align-items:center; gap:14px; flex-wrap:wrap; margin-top:14px}
.pager-count{font-size:13px; color:var(--sub); font-variant-numeric:tabular-nums}
.pager-nav{display:flex; gap:4px; margin-left:auto; flex-wrap:wrap}
.pg{display:inline-flex; align-items:center; justify-content:center; min-width:32px; height:32px;
  padding:0 9px; border:1px solid var(--line-2); border-radius:var(--radius-xs); background:#fff;
  font-size:14px; color:var(--ink-2); font-variant-numeric:tabular-nums;
  transition:background .12s ease, border-color .12s ease}
a.pg:hover{background:var(--green-l); border-color:var(--green); color:var(--green-d); text-decoration:none}
.pg.cur{background:var(--green); border-color:var(--green); color:#fff; font-weight:700}
.pg.off{opacity:.4}
.pg.gap{border:none; background:transparent; min-width:18px; padding:0; color:var(--sub)}
.w-code{width:108px; font-family:ui-monospace,monospace}

/* ---- 一覧の絞り込みバー ---- */
/* 絞り込み欄は中で折り返す。条件が増えて（金額の範囲・商品）2 行になったとき、
   道具立て（CSV・新規作成）まで 3 行目に押し出されて散らかっていた。
   折り返すのは絞り込み欄の中だけにして、右の道具立ては 1 行目のままにする。2026-08-25 */
.toolbar:has(> .filterbar){flex-wrap:nowrap; align-items:flex-start}
.toolbar > .filterbar{flex:1 1 auto; min-width:0}
.toolbar:has(> .filterbar) > .btn,
.toolbar:has(> .filterbar) > .count-badge{margin-top:1px}
.filterbar{display:flex; align-items:center; gap:7px; flex-wrap:wrap}
.filterbar input,.filterbar select{margin:0; width:auto}
.filterbar input[type=date]{width:150px}
.filterbar select{max-width:230px}
.filterbar .fl{display:flex; align-items:center; gap:5px; font-size:13px; color:var(--sub)}

/* ---- 商品を探す小窓 ---- */
.finder{width:min(680px,92vw); max-height:76vh; padding:0; border:none;
  border-radius:var(--radius); box-shadow:var(--shadow-3); overflow:hidden}
.finder::backdrop{background:rgba(16,32,24,.38)}
.finder-head{display:flex; gap:8px; padding:12px; border-bottom:1px solid var(--line); background:#fff}
.finder-head input{margin:0; flex:1}
.finder-list{overflow-y:auto; max-height:60vh; background:#fff}
.finder-row{display:flex; align-items:center; gap:12px; width:100%; padding:9px 14px;
  border:none; border-bottom:1px solid var(--line); background:#fff; cursor:pointer;
  font-family:inherit; font-size:14px; text-align:left}
.finder-row:hover{background:var(--green-l)}
/* ↑↓ で選んでいる 1 本。マウスのホバーと違って**確実に目に入る**必要があるので、
   地の色だけでなく左端に帯を出す。2026-08-21 */
.finder-row.on{background:var(--green-l); box-shadow:inset 3px 0 0 var(--green)}
.finder-row.on .fr-code{color:var(--green-d); font-weight:700}
.finder-head .hint{font-size:12px; color:var(--sub); align-self:center; white-space:nowrap}
.fr-code{font-family:ui-monospace,monospace; font-size:13px; color:var(--sub); min-width:118px}
.fr-name{flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.fr-price{font-variant-numeric:tabular-nums; color:var(--sub)}

/* 表の下に添える注記と、値が無いことを示す「—」 */
.tbl-note{caption-side:bottom; text-align:left; padding:8px 4px 0;
  font-size:13px; color:var(--muted,#6b7280); line-height:1.6}
.muted{color:var(--muted,#9ca3af)}

/* 商品台帳に無いコードは薄く色を付けて気づけるようにする（入力は妨げない） */
.ylines input.code-unknown{background:#fff6e5; box-shadow:inset 0 -2px 0 #e5a13a}
/* 値引・返品の行の数量。知らせは数秒で消えるので、行そのものに印を残す */
/* 階層（積み上げ見積）。内訳の下に小さく置く */
.ylines select.lv{width:100%; font-size:12px; margin-top:1px; color:#5b6770}
.ylines tbody.lv-1 .c-name input,.ylines tbody.lv-1 .c-name textarea{font-weight:700}
.ylines tbody.lv-2 .c-name input,.ylines tbody.lv-2 .c-name textarea{padding-left:14px}
.ylines tbody.lv-3 .c-name input,.ylines tbody.lv-3 .c-name textarea{padding-left:28px}
.ylines input.qty-minus{background:#fff2f2; color:#b3261e; font-weight:600}

/* 決まり方の説明に使う番号付きリスト */
.rule-list{margin:6px 0 0 20px; padding:0; font-size:14px; line-height:1.9; color:#374151}
.rule-list li{margin:0}

/* チェックボックスと文章を横に並べる */
.chk-line{display:flex; align-items:center; gap:8px; font-size:15px}
.chk-line input{width:auto; margin:0}

/* 小中計の行など、入力できない欄 */
.ylines input.locked{background:#eef1f4; color:#6b7280; cursor:not-allowed}

/* 古い伝票を複写したときの知らせ */
.copy-diff{border:1px solid #e5a13a; background:#fff8ec; border-radius:8px;
  padding:12px 14px; margin:0 0 14px; font-size:15px}
.copy-diff.cd-done{border-color:var(--green); background:var(--green-l)}
.copy-diff .cd-head{margin-bottom:8px}
.copy-diff .cd-list{margin:0 0 10px; padding-left:0; list-style:none}
.copy-diff .cd-list li{margin:4px 0; line-height:1.7}
.copy-diff .cd-tag{display:inline-block; min-width:70px; margin-right:8px; padding:1px 8px;
  background:#e5a13a; color:#fff; border-radius:4px; font-size:13px; text-align:center}
.copy-diff.cd-done .cd-tag{background:var(--green)}
.copy-diff .cd-actions{display:flex; gap:8px; align-items:center}
.copy-diff .cd-note{margin:8px 0 0; font-size:13px; color:#6b7280}

/* 売上推移の棒グラフ（外の部品を使わず幅だけで描く） */
.bar-chart{margin:6px 0 4px}
.bc-row{display:flex; align-items:center; gap:10px; margin:3px 0}
.bc-label{width:34px; font-size:13px; color:#6b7280; text-align:right}
.bc-bars{flex:1; display:flex; flex-direction:column; gap:2px}
.bc-bar{display:block; height:9px; border-radius:2px; min-width:1px}
.bc-cur{background:var(--green)}
.bc-prev{background:#c7d2d9}
.bc-value{width:110px; text-align:right; font-size:14px; font-variant-numeric:tabular-nums}
.bc-key{display:inline-block; width:14px; height:9px; border-radius:2px; vertical-align:middle; margin-right:3px}

/* 売上分析の順位バーと ABC */
.mini-bar{display:block; height:10px; background:var(--green); border-radius:2px; min-width:1px}
.abc{display:inline-block; width:17px; margin-right:6px; padding:1px 0; border-radius:3px;
  font-size:13px; font-weight:600; text-align:center; color:#fff}
.abc-A{background:#2f7a4d} .abc-B{background:#8aa87c} .abc-C{background:#b9c2c7}

/* 入金予定表で、回収条件が未設定の行に付ける印 */
.sch-guess{display:inline-block; margin-left:6px; padding:0 6px; border-radius:3px;
  background:#e5a13a; color:#fff; font-size:12px; vertical-align:middle}

/* はじめの設定 */
.setup-progress{display:flex; align-items:center; gap:12px; margin-top:12px}
.sp-bar{flex:1; height:8px; background:#e5e9ec; border-radius:4px; overflow:hidden}
.sp-bar span{display:block; height:100%; background:var(--green); border-radius:4px}
.sp-text{font-size:14px; color:#6b7280; white-space:nowrap}
.setup-list{display:flex; flex-direction:column; gap:8px; margin:14px 0}
.setup-item{display:flex; align-items:flex-start; gap:12px; padding:12px 14px;
  background:#fff; border:1px solid var(--line,#e3e8ea); border-radius:8px}
.setup-item.su-done{background:#f7faf8; border-color:#cfe3d5}
.su-no{flex:none; width:24px; height:24px; border-radius:50%; background:#e5e9ec; color:#5b6770;
  font-size:14px; font-weight:600; display:flex; align-items:center; justify-content:center}
.su-done .su-no{background:var(--green); color:#fff}
.su-body{flex:1; min-width:0}
.su-title{font-weight:600; font-size:15px}
.su-count{margin-left:8px; padding:1px 8px; background:#eef2f4; border-radius:10px;
  font-size:13px; font-weight:400; color:#5b6770}
.su-why{margin:3px 0 0; font-size:14px; color:#6b7280; line-height:1.7}
.su-note{margin:4px 0 0; font-size:14px; color:#b06a00}

/* 契約者の管理 */
.su-badge{display:inline-block; padding:1px 9px; border-radius:10px; font-size:13px; color:#fff}
.su-trial{background:#e5a13a} .su-active{background:var(--green)}
.su-susp{background:var(--red,#c0392b)} .su-closed{background:#9aa5ab}
.stat-sub{display:block; margin-top:3px; font-size:13px; color:#6b7280; font-weight:400}

/* ───────── 打ちながら絞り込む小窓 ───────── */
.picker{position:absolute; z-index:900; display:none; max-height:340px; overflow-y:auto;
  background:#fff; border:1px solid #c8d3d8; border-radius:8px;
  box-shadow:0 8px 24px rgba(20,40,30,.16); font-size:14px}
.picker.picker-open{display:block}
.pk-row{display:flex; align-items:baseline; gap:10px; padding:7px 12px; cursor:pointer; border-bottom:1px solid #f0f3f4}
.pk-row:last-of-type{border-bottom:none}
.pk-row:hover{background:var(--green-l)}
/* ↑↓ で選んでいる 1 本。ホバーと同じ色だと、どちらが「今の選択」か分からない */
.pk-row.pk-on{background:var(--green-l); box-shadow:inset 3px 0 0 var(--green)}
.pk-row.pk-on .pk-code{color:var(--green-d); font-weight:700}
.pk-code{flex:none; min-width:98px; font-family:ui-monospace,monospace; font-size:13px; color:#5b6770}
.pk-name{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.pk-sub{flex:none; font-size:13px; color:#8b969c}
.pk-foot{display:flex; justify-content:space-between; gap:10px; align-items:center;
  padding:5px 12px; background:#f6f8f9; border-top:1px solid #e6ebed;
  font-size:13px; color:var(--sub); position:sticky; bottom:0}
.pk-count{white-space:nowrap}
.pk-count b{margin-left:6px; color:#b06a00; font-weight:600}
.pk-keys{white-space:nowrap; opacity:.8}
.pk-add{display:block; margin-top:6px; font-size:13px; font-weight:600; color:var(--green-d)}
.picker mark{background:#fdf0c8; color:inherit; padding:0 1px; border-radius:2px}
.pk-empty{padding:12px; color:#6b7280}
.pk-empty .pk-hint{display:block; margin-top:3px; font-size:13px; color:#9aa5ab}
.pk-foot{padding:5px 12px; background:#f7f9fa; border-top:1px solid #eef2f3;
  font-size:13px; color:#8b969c; position:sticky; bottom:0}

/* ───────── 保存中・知らせ ───────── */
.btn.is-saving{opacity:.65; cursor:progress}
.flash-toast{position:fixed; right:18px; bottom:18px; z-index:950; min-width:240px;
  padding:12px 16px; border-radius:8px; box-shadow:0 6px 20px rgba(20,40,30,.18);
  animation:toast-in .22s ease-out}
.flash-toast.flash-out{animation:toast-out .5s ease-in forwards}
@keyframes toast-in{from{opacity:0; transform:translateY(10px)}to{opacity:1; transform:none}}
@keyframes toast-out{to{opacity:0; transform:translateY(8px)}}

/* ───────── 変わった数字を一瞬光らせる ───────── */
.val-changed{animation:val-flash .7s ease-out}
@keyframes val-flash{
  0%{background:#fdf0c8; box-shadow:0 0 0 4px #fdf0c8}
  100%{background:transparent; box-shadow:none}
}

/* ───────── 一覧の行 ───────── */
tr.row-clickable{cursor:pointer}
tr.row-clickable:hover{background:var(--green-l)}

/* ───────── 読み込み中の線 ───────── */
.load-bar{position:fixed; top:0; left:0; height:2px; width:0; z-index:999;
  background:linear-gradient(90deg,var(--green),#7ec99b); transition:width .3s ease-out; opacity:0}
.load-bar.on{width:85%; opacity:1; transition:width 2.4s cubic-bezier(.1,.6,.2,1)}

/* ───────── 入力欄を分かりやすく ───────── */
.yin:focus, .ylines input:focus, .ylines select:focus,
.form-grid input:focus, .form-grid select:focus, .form-grid textarea:focus{
  outline:2px solid var(--green); outline-offset:-2px; background:#fff}
.ylines tbody.line-row:focus-within{background:#f4faf6}
.ylines tbody.line-row:focus-within td.c-no{background:var(--green); color:#fff}

/* ───────── 帳票レイアウトを紙の上で直す ───────── */
.lc-bar{display:flex; align-items:center; gap:16px; flex-wrap:wrap; margin:0 0 10px;
  padding:8px 10px; background:#f5f8f9; border-radius:6px}
.lc-keys{font-size:13px; color:#6b7280; line-height:1.6}
.lc-wrap{overflow:auto; max-height:640px; padding:16px; background:#5b6770; border-radius:8px;
  display:flex; justify-content:center}
.lc-paper{position:relative; flex:none; background:#fff;
  box-shadow:0 3px 18px rgba(0,0,0,.35); user-select:none}
/* 方眼は 10mm ごと。紙のどこかが分かる程度に薄く */
.lc-paper.lc-grid{
  background-image:
    linear-gradient(to right, rgba(80,120,100,.13) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(80,120,100,.13) 1px, transparent 1px);
  background-size:26.5px 26.5px;
}
.lc-box{position:absolute; box-sizing:border-box; cursor:move;
  border:1px solid rgba(19,122,63,.75); background:rgba(19,122,63,.09);
  font-size:12px; line-height:1.25; color:#14532d; overflow:hidden}
.lc-box:hover{background:rgba(19,122,63,.18)}
.lc-box.lc-on{border:2px solid #137a3f; background:rgba(19,122,63,.22); z-index:5}
.lc-box.lc-hidden{opacity:.28; border-style:dotted}
.lc-label{display:block; padding:1px 3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  pointer-events:none}
.lc-box.lc-tiny .lc-label{font-size:12px}
.lc-handle{position:absolute; right:-4px; bottom:-4px; width:10px; height:10px;
  background:#137a3f; border:1px solid #fff; border-radius:2px; cursor:nwse-resize}
.lc-box:not(.lc-on) .lc-handle{opacity:0}
.lc-box:hover .lc-handle{opacity:1}
.lc-info{margin:10px 0 0; padding:8px 12px; background:#f5f8f9; border-radius:6px;
  font-size:14px; color:#374151; font-variant-numeric:tabular-nums}
.lc-multi{color:#6b7280}
/* 表側で、紙で選んだ行を光らせる */
tr.lc-row-on > td{background:var(--green-l) !important}
tr.lc-row-hidden{opacity:.5}

/* ───────── HTML 帳票の編集 ───────── */
/* この画面だけは横をめいっぱい使う。
   1280px に収めると A4（210mm ≒ 794px）が入らず、
   プレビューの右端（自社の住所）が切れて横スクロールが出ていた。 */
body.page-html-template .container{max-width:1800px}
/* 紙のほうを少し広く取る。書く欄は狭くても困らない */
.ht-split{display:grid; grid-template-columns:minmax(380px,1fr) minmax(560px,1.15fr); gap:12px; margin:14px 0}
/* class で display を書くと、ブラウザ既定の [hidden]{display:none} に勝ってしまい、
   隠したはずの物が見えたままになる（組み立てとコードが同時に出ていた）。
   display を上書きするときは hidden を必ず立て直す。2026-08-18 */
.ht-split[hidden]{display:none}
@media (max-width:1200px){.ht-split{grid-template-columns:1fr}}
.ht-editor,.ht-preview{background:#fff; border:1px solid var(--line,#e3e8ea); border-radius:8px; overflow:hidden}
.ht-tabs{display:flex; align-items:center; gap:6px; padding:6px 8px; background:#f5f8f9; border-bottom:1px solid #e3e8ea}
.ht-tab{padding:4px 14px; border:1px solid transparent; border-radius:5px; background:none;
  font-size:14px; cursor:pointer; color:#5b6770}
.ht-tab.on{background:#fff; border-color:#d5dee1; color:#14532d; font-weight:600}
.ht-code{width:100%; height:460px; border:none; padding:12px; resize:vertical; display:block;
  font-family:ui-monospace,"SF Mono",Consolas,monospace; font-size:14px; line-height:1.65;
  tab-size:2; white-space:pre; overflow-wrap:normal; overflow-x:auto}
.ht-code:focus{outline:2px solid var(--green); outline-offset:-2px}
#htFrame{width:100%; height:660px; border:none; background:#5b6770; display:block}

/* ───────── 帳票の「組み立て」ビュー ─────────
   画面の物をクリックして直す。右が直す欄。2026-08-18 */
.ht-mode{display:flex; align-items:center; gap:8px; margin:14px 0 0}
.ht-mode-btn{padding:8px 18px; border:1px solid var(--line-2); background:#fff; color:var(--ink-2);
  border-radius:var(--radius-sm); cursor:pointer; font-family:inherit; font-size:14px; font-weight:600}
.ht-mode-btn.on{background:linear-gradient(180deg,#158049 0%,var(--green) 100%); color:#fff;
  border-color:#0d6039; box-shadow:var(--shadow-1)}
.ht-build{grid-template-columns:minmax(520px,1.5fr) minmax(300px,340px)}
.ht-stage,.ht-panel{background:#fff; border:1px solid var(--line); border-radius:var(--radius-sm); overflow:hidden}
#bdFrame{width:100%; height:660px; border:none; background:#5b6770; display:block}
.ht-panel{padding:0; overflow-y:auto; max-height:700px}
.bd-none{padding:18px; color:var(--sub); font-size:13px}
.bd-sec{padding:12px 14px; border-bottom:1px solid var(--line)}
.bd-h{font-weight:700; font-size:13px; margin-bottom:8px; color:var(--ink)}
.bd-h em{font-style:normal; font-weight:400; color:var(--sub); font-size:12px;
  font-family:ui-monospace,monospace}
.bd-sec label{display:flex; align-items:center; gap:8px; font-size:13px; margin:0 0 6px; color:var(--ink-2)}
.bd-sec label input{flex:1; min-width:0; margin:0; padding:5px 8px; font-size:13px}
.bd-sec label input[type=color]{flex:none; width:44px; padding:2px; height:30px}
.bd-sec label input[type=number]{flex:none; width:82px}
.bd-row{display:flex; align-items:center; gap:4px; margin-top:8px}
.bd-gap{flex:1}
.bd-t{padding:5px 11px; border:1px solid var(--line-2); background:#fff; border-radius:var(--radius-xs);
  cursor:pointer; font-family:inherit; font-size:13px}
.bd-t:hover{background:var(--green-l); border-color:var(--green)}
.bd-sec .btn{margin:0 4px 4px 0}
.bd-fg{margin-bottom:8px}
.bd-fgn{display:block; font-size:12px; color:var(--sub); margin-bottom:3px}
.bd-chip{margin:0 4px 4px 0; padding:4px 9px; border:1px solid #b9d0f0; background:#e7f0ff;
  color:#1f4f9c; border-radius:var(--radius-xs); cursor:pointer; font-family:inherit; font-size:12px}
.bd-chip:hover{background:#d3e4fb}
/* 変数名は小さく添えるだけ。読むのは日本語のほう */
.bd-align{display:inline-flex; gap:1px; margin-right:10px; border:1px solid var(--line-2);
  border-radius:var(--radius-xs); overflow:hidden; background:#fff}
.bd-a{width:26px; height:26px; border:none; background:#fff; cursor:pointer; font-size:12px;
  color:var(--ink-2); border-right:1px solid var(--line)}
.bd-a:last-child{border-right:none}
.bd-a:hover{background:var(--green-l); color:var(--green-d)}
.bd-inline{display:inline-flex !important; align-items:center; gap:5px; font-size:12px;
  margin:0 10px 0 0 !important; color:var(--ink-2)}
.bd-inline input,.bd-inline select{flex:none !important; width:auto !important; margin:0 !important;
  padding:2px 6px !important; font-size:12px}
.bd-pos{font-size:12px; color:var(--sub); font-variant-numeric:tabular-nums}
.bd-part{margin:0 4px 4px 0; padding:5px 10px; border:1px solid var(--line-2); background:#fff;
  border-radius:var(--radius-xs); cursor:pointer; font-family:inherit; font-size:13px; color:var(--ink-2)}
.bd-part:hover{background:var(--green-l); border-color:var(--green); color:var(--green-d)}
.bd-scope{background:#f7faf8}
.bd-radio{display:flex !important; align-items:flex-start; gap:8px; margin:0 0 6px; cursor:pointer}
.bd-radio input{flex:none !important; width:auto !important; margin:3px 0 0 !important}
.bd-radio span{font-size:13px; line-height:1.45}
.bd-radio em{display:block; font-style:normal; font-size:12px; color:var(--sub)}
.bd-chip em,.ht-chip em{display:block; font-style:normal; font-size:10.5px; opacity:.62;
  font-family:ui-monospace,monospace; line-height:1.3}
@media (max-width:1200px){ .ht-build{grid-template-columns:1fr} }
/* 枠に入りきらないときは、紙のほうを縮めて全体を見せる（切らない） */
.ht-preview{position:relative}
.ht-zoom{display:flex; align-items:center; gap:6px; font-size:13px; color:#5b6770}
.ht-zoom input{width:96px}
.ht-fields{border-top:1px solid #eef2f3; padding:8px 12px; font-size:14px}
.ht-fields summary{cursor:pointer; color:#14532d}
.ht-group{margin:8px 0; display:flex; flex-wrap:wrap; gap:4px; align-items:center}
.ht-gname{font-size:13px; color:#6b7280; min-width:150px}
.ht-chip{padding:4px 10px; border:1px solid #d5dee1; border-radius:8px; background:#fff;
  font-size:13px; cursor:pointer; color:#14532d; text-align:left; line-height:1.35}
.ht-chip:hover{background:var(--green-l); border-color:var(--green)}

/* 帳票に使う画像 */
.img-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px}
.img-card{border:1px solid var(--line,#e3e8ea); border-radius:8px; padding:10px; background:#fff}
.img-thumb{height:110px; display:flex; align-items:center; justify-content:center;
  background:repeating-conic-gradient(#f4f6f7 0% 25%, #fff 0% 50%) 50%/16px 16px; border-radius:5px}
.img-thumb img{max-width:100%; max-height:106px; object-fit:contain}
.img-name{margin-top:8px; font-size:14px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.img-meta{font-size:13px; color:#6b7280}
.img-tag{display:block; margin:6px 0; padding:4px 6px; background:#f5f8f9; border-radius:4px;
  font-size:12px; overflow-x:auto; white-space:nowrap}
.img-act{display:flex; gap:6px}

/* 帳票の作り方の案内 */
/* ───────── 帳票の中のメニュー ─────────
   入口は［帳票レイアウト編集］1 つだけにして、行き来はここでする。2026-08-18 */
.form-nav{display:flex; align-items:center; flex-wrap:wrap; gap:4px; margin:0 0 14px;
  padding:6px; background:var(--white); border:1px solid var(--line);
  border-radius:var(--radius-sm); box-shadow:var(--shadow-1)}
.fn-home{flex:none; padding:7px 12px; font-weight:700; color:var(--green-d); white-space:nowrap}
.fn-home:hover{text-decoration:none; color:var(--green)}
.fn-sep{color:var(--line-2); padding:0 2px}
.fn-tab{padding:8px 14px; border-radius:var(--radius-xs); color:var(--ink-2);
  font-size:14px; white-space:nowrap; transition:background .12s, color .12s}
.fn-tab:hover{background:var(--green-l); color:var(--green-d); text-decoration:none}
.fn-tab.cur{background:linear-gradient(180deg,#158049 0%,var(--green) 100%); color:#fff;
  font-weight:700; box-shadow:var(--shadow-1)}
.fn-tab.cur:hover{color:#fff}

/* ───────── 入口の大きな選択肢 ───────── */
.hub-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:14px}
.hub-grid-sm{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.hub{display:flex; gap:14px; padding:18px; border:1px solid var(--line); border-radius:var(--radius);
  background:var(--white); box-shadow:var(--shadow-1); color:var(--ink);
  transition:transform .12s, box-shadow .12s, border-color .12s}
.hub:hover{text-decoration:none; transform:translateY(-2px); box-shadow:var(--shadow-2);
  border-color:var(--green)}
.hub-main{border-color:#bcdfc9; background:linear-gradient(155deg,var(--green-l) 0%,#fff 62%)}
.hub-ic{flex:none; width:42px; height:42px; display:flex; align-items:center; justify-content:center;
  border-radius:11px; background:var(--green-l); color:var(--green-d)}
.hub-main .hub-ic{background:var(--green); color:#fff}
.hub-ic svg{width:22px; height:22px}
.hub-body{display:flex; flex-direction:column; gap:3px; min-width:0}
.hub-name{font-weight:700; font-size:16px; display:flex; align-items:baseline; gap:8px}
.hub-n{font-style:normal; font-size:12px; font-weight:600; color:var(--sub);
  background:#f1f5f3; border-radius:10px; padding:1px 8px; white-space:nowrap}
.hub-lead{font-size:13px; font-weight:600; color:var(--green-d)}
.hub-desc{font-size:13px; color:var(--sub); line-height:1.6}
.hub-sm{padding:15px 16px}
.hub-sm .hub-ic{width:36px; height:36px}
.hub-sm .hub-name{font-size:14px}
.form-nav-hint{margin:0 0 14px; padding:10px 12px; background:#f5f8f9; border-radius:6px;
  font-size:14px; line-height:1.9; color:#374151}

/* HTML 帳票の下敷き */
.bg-row{display:flex; align-items:center; gap:20px; flex-wrap:wrap}
.bg-row label{margin:0; display:flex; align-items:center; gap:8px; font-size:14px}
.bg-row select{width:auto; min-width:220px}

/* ユーザーごとの機能制限。制限をかけた行だけ色を変えて分かるようにする */
.perm-row td { vertical-align: middle; }
.perm-row:not(.on) .perm-act { opacity: .35; }
.perm-row.on { background: #fff8e6; }
.perm-row.on td:first-child { font-weight: 600; }

/* 粗利益率が 0〜100% の外。原価がマイナスのときに出る＝打ち間違いのことが多い */
.yf-value.is-odd{color:#b45309; background:#fef3c7; border-radius:4px; padding:0 6px}

/* 導入メニューの区切り見出し（押せない） */
.submenu-head{display:block; padding:8px 14px 3px; font-size:13px; color:#9aa5ab;
  letter-spacing:.06em; border-top:1px solid #eef2f3; margin-top:4px}
.submenu-head:first-child{border-top:none; margin-top:0}

/* 知らせの出し方は .flash-toast に一本化した（同じものを 2 つ作っていた） */

/* 桁が多くて欄に入りきらない数字。
   まず字を詰め、それでも入らないときは欄そのものを広げる。
   1 兆を超える金額でも最後の桁まで読めるようにする。 */
input.num.is-tight{font-size:12px; letter-spacing:-.03em}
input.num.is-wide{position:relative; z-index:2; min-width:150px;
  box-shadow:0 0 0 2px #fef3c7; background:#fffdf5}

/* 単価変更の予約と記録 */
.badge-wait{background:#fef3c7; color:#92400e}
.badge-done{background:var(--green-l); color:var(--green-d)}
.badge-off {background:#f1f5f6; color:#6b7280}
.badge-ng  {background:#fdecea; color:#8c2318}

/* 入力欄のそばに出す一言（数字以外を入れたとき など） */
.field-tip{position:absolute; z-index:70; padding:3px 8px; border-radius:4px;
  background:#8c2318; color:#fff; font-size:13px; white-space:nowrap;
  opacity:0; pointer-events:none; transition:opacity .15s}
.field-tip.on{opacity:1}

/* 入れ忘れている欄。得意先のように「隣の無名の欄」にエラーが出ると
   何を直せばよいか分からないので、打ち込む欄そのものを目立たせる */
.is-missing{background:#fdecea !important; border-color:var(--red) !important;
  box-shadow:0 0 0 2px rgba(140,35,24,.15)}

/* 単価の履歴（単価欄で F8） */
.ph-dlg{width:min(760px, 94vw)}
.ph-dlg .finder-body{max-height:60vh; overflow:auto}
.ph-suggest{display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:10px 12px; background:var(--green-l); border-bottom:1px solid #d5dee1}
.ph-suggest .ph-lead{font-size:14px; color:var(--green-d)}
.ph-suggest .ph-price{font-size:20px; color:var(--green-d)}

/* 入れ忘れを知らせる吹き出し。ブラウザの標準は、
   別の欄にカーソルを移すと消えてしまうので自前で出す */
.field-bubble{position:absolute; z-index:80; max-width:420px; padding:8px 12px;
  border-radius:6px; background:#8c2318; color:#fff; font-size:14px; line-height:1.5;
  box-shadow:0 6px 20px rgba(0,0,0,.25); opacity:0; pointer-events:none;
  transition:opacity .15s; cursor:pointer}
.field-bubble.on{opacity:1; pointer-events:auto}
.field-bubble::before{content:""; position:absolute; top:-5px; left:16px;
  border-left:5px solid transparent; border-right:5px solid transparent;
  border-bottom:5px solid #8c2318}

/* 伝票の入力画面は、明細の列が多い。
   1280px の器に収めると商品名がいちばん割を食うので、この画面だけ広げる。 */
/* ※ ここにあった `body.page-doc .container{max-width:1700px}` は消した。
     器の幅は全画面 1700px に揃えたので、画面ごとの上書きは要らない。2026-08-26 */

/* 単価履歴の下の帯。弥生は［前へ］［次へ］が一覧の左下、［OK］が右にある */
.ph-foot{display:flex; align-items:center; gap:8px; padding:8px 12px;
  border-top:1px solid #e3e8ea; background:#f5f8f9}
.ph-foot .ph-pos{font-size:13px; color:#6b7280}
.ph-dlg tr.ph-on > td{background:var(--green-l)}

/* 日付欄。日本の書き方（2026/08/17）で見せる。
   本物の日付欄は右端に重ねて、カレンダーのボタンだけ使えるようにする */
.ja-date{position:relative; display:inline-flex; align-items:center; width:196px; flex:none}
.ja-date .ja-date-view{width:100%; padding-right:32px}
/* 本物の日付欄は、カレンダーのボタンだけが見えるように右端へ寄せる。
   中の文字（mm/dd/yyyy）は隠す。重ねると読めなくなるので位置をずらす。 */
.ja-date .ja-date-real{position:absolute; right:2px; top:50%; transform:translateY(-50%);
  width:24px; height:22px; border:none; background:transparent; padding:0;
  overflow:hidden; color:transparent}
.ja-date .ja-date-real::-webkit-datetime-edit,
.ja-date .ja-date-real::-webkit-inner-spin-button,
.ja-date .ja-date-real::-webkit-clear-button{display:none; -webkit-appearance:none}
.ja-date .ja-date-real::-webkit-calendar-picker-indicator{
  position:absolute; right:0; top:0; margin:0; padding:0; width:22px; height:22px;
  opacity:.5; cursor:pointer}
.ja-date .ja-date-real::-webkit-calendar-picker-indicator:hover{opacity:.9}

/* ※ ここにあった `.form-grid > label.wide{grid-column:span 2}` と
   `.form-grid select{max-width:100%}` は **1 枠 240px だった頃の名残**。
   いまは 12 列で組んでいるので span 2 は狭すぎ、`max-width:100%` は
   後ろから効いて **3 段階（S/M/L）の指定を全部打ち消していた**
   （「請求方式」を span 6 にしても 320px のままだった原因）。
   取りやめる。取り分と幅は上のブロックで一元管理する。2026-08-21 */

/* 得意先を一覧から選ぶ欄。
   長い名前（㈲悠々福祉サービス グループホーム…）が 260px に入りきらない。
   ふだんは狭いままで邪魔をせず、**開いたときだけ**中身が読める幅にする。
   （打ち込みの欄が主で、これは補助なので、常時広げると画面を圧迫する） */
.w-cust:focus{width:min(560px, 46vw); position:relative; z-index:5}

/* ── 押せる物の大きさ（WCAG 2.5.8 は 24px 以上）──
   測ったら、明細の欄 21〜22px／削除の × 16px／チェックボックス 13px だった。
   小さいほど狙うのに時間がかかる（Fitts の法則）。密度は保ちつつ 24px に上げる。
   2026-08-21 */
.form-grid input,.form-grid select,.form-grid textarea{min-height:26px}
.yin,.yout{min-height:26px}
.ylines input,.ylines select,.ylines textarea{min-height:24px}
.ylines td.c-no .delRow{min-width:24px; min-height:24px; font-size:13px}
/* チェックボックスは見た目を大きくし、押せる範囲をラベル全体に広げる */
input[type=checkbox],input[type=radio]{width:17px; height:17px; accent-color:var(--green)}
label:has(> input[type=checkbox]),label:has(> input[type=radio]),
.chk,.chk-line{display:inline-flex; align-items:center; gap:7px;
  min-height:26px; cursor:pointer; padding:2px 0}

/* 保存ボタンはどの画面でも同じ位置に（運動記憶で押せるように）。
   台帳では左 180px、伝票では左 20px と、画面ごとにずれていた */
.form-actions{padding-left:20px}
.form-actions > :first-child{margin-left:0}

/* ================================================================
   台帳（弥生の［商品台帳］と同じ組み方）
   ----------------------------------------------------------------
   ktec 指示（2026-08-21）「まずは、弥生販売の真似をしろ」

   弥生の商品台帳は **725×460px に全項目が収まり、スクロールしない。**
   こちらはカードを縦に 4 枚積んでいて 1.7 画面ぶんスクロールしていた。
   毎日何十件も打つ画面なので、**手が止まらないこと**を最優先にする。

     上段  コード / 名称 / フリガナ（横いっぱい）
     中段  左＝品目と在庫の欄／右＝単価の表
     下段  分類・メモ
   部品（帯・欄）は伝票画面と同じ `.ylbl` `.yin` `.ybar` を使う。
   ================================================================ */
/* 台帳の枠は **中身のぶんだけ** 広げる。
   画面いっぱいに広げていたので、商品台帳は左パネル 838px に中身 430px = 408px が空き、
   反対に得意先台帳は右パネルを 400px に決め打ちしていたせいで
   掛率と税端数が 102px はみ出していた。
   弥生の台帳は中身に合った大きさの窓で、余った所は窓の外（＝デスクトップ）。
   grid を max-content にすると、どちらも中身に合う。2026-08-25 */
.ydaicho{border:1px solid var(--y-line); background:#f4f8f5; margin-bottom:12px;
  width:max-content; max-width:100%}
.ydaicho .ybar{border-radius:0; margin:0}

.yd-top{padding:6px 8px 4px; border-bottom:1px solid var(--y-line)}
.yd-mid{display:grid; grid-template-columns:max-content max-content; gap:0;
  border-bottom:1px solid var(--y-line)}
.yd-l{padding:6px 8px; border-right:1px solid var(--y-line)}
.yd-r{padding:6px 8px}
.yd-bottom{padding:6px 8px}

/* 1 行 = ラベル帯 ＋ 欄。行の間はほとんど空けない（弥生は約 2px） */
.ydaicho .yrow{display:flex; align-items:center; gap:0; margin-bottom:3px}
.ydaicho .ylbl{min-width:92px; width:92px; font-size:13px; padding:4px 8px 4px 6px}
.ydaicho .ylbl.req{border-left:3px solid var(--red); font-weight:700}
.ydaicho .yin{height:26px; box-sizing:border-box; font-size:13px; padding:3px 7px}
.ydaicho select.yin{height:26px}
.ydaicho .w-xs{width:64px; flex:none}
.ydaicho .w-s{width:104px; flex:none}
.ydaicho .w-m{width:176px; flex:none}
.ydaicho .w-code{width:176px; flex:none}
.ydaicho .w-grow{flex:1 1 auto; min-width:0; max-width:520px}
.ydaicho .yhint{font-size:11px; color:var(--sub); margin-left:8px; white-space:nowrap}
.ydaicho .ychk{display:inline-flex; align-items:center; gap:6px; font-size:13px;
  min-height:26px; cursor:pointer}
.ydaicho .ychk input{width:15px; height:15px; margin:0; flex:none}

/* 単価の表。弥生と同じ「種別 / 税抜 / 税込」*/
.ytani{border-collapse:collapse; width:100%}
.ytani th,.ytani td{padding:0; border:none}
.ytani thead th{font-size:12px; color:#183a22; font-weight:700; padding:0 0 4px;
  text-align:center; background:none}
.ytani thead th:first-child{text-align:right; padding-right:8px}
.ytani tbody th{width:92px; font-size:13px; font-weight:400; text-align:right;
  background:linear-gradient(180deg,#c4dbcb 0%,var(--y-lbl) 100%);
  border:1px solid var(--y-line); border-right:none; color:#12301c;
  padding:4px 8px 4px 6px; height:26px; box-sizing:border-box}
.ytani tbody td{padding:0}
.ytani tbody tr{height:29px}
.ytani .yin{width:100%; text-align:right}
.ytani tbody td:first-of-type .yin{border-right-width:0}

@media (max-width:1100px){
  .yd-mid{grid-template-columns:minmax(0,1fr)}
  .yd-l{border-right:none; border-bottom:1px solid var(--y-line)}
}

/* 設定のように「独立した塊」が縦に続く画面は、2 列に流して縦を半分にする。
   1 塊ずつ縦に積むと、設定 35 項目で 1.9 画面ぶんスクロールしていた。
   塊の途中で切れないよう break-inside:avoid を付ける。2026-08-21 */
.card-cols{column-count:2; column-gap:16px}
.card-cols > .card{break-inside:avoid; margin-bottom:16px; display:inline-block; width:100%}
/* 列が半分の幅になるので、中の取り分も半分（12→6 列ぶん）で数え直す。
   そのままだと ラベル 96px ＋ 欄 が入らず、欄が下に折り返す */
.card-cols .form-grid > label,
.card-cols .form-grid > .fld{grid-column:span 6}
.card-cols .form-grid > label.wide,
.card-cols .form-grid > label:has(textarea){grid-column:span 12}
.card-cols .form-grid > label > input,
.card-cols .form-grid > label > select{max-width:none}
.card-cols .form-grid input[name^=seq_]{max-width:var(--fw-s)}
/* 選択肢が長い物は 1 行を丸ごと使う（「空のまま（弥生と同じ）」が切れていた） */
.card-cols .form-grid > label:has(select[name=line_qty_default]),
.card-cols .form-grid > label:has(select[name=doc_number_mode]),
.card-cols .form-grid > label:has(select[name=default_tax_mode]){grid-column:span 12}
@media (max-width:1100px){ .card-cols{column-count:1}
  .card-cols .form-grid > label,.card-cols .form-grid > .fld{grid-column:span 4} }

/* ── 一覧の列幅 ──
   列の指定が無く、ブラウザ任せで配られていた。実測すると
   「締グループ」が中身 16px に対し 127px、「請求先」が 249px に対し 540px と、
   **中身の 8 倍広い列**があり、そのぶん名称・商品名が押し出されていた。
   探して選ぶ画面なので、**名前にいちばん幅を割く**。2026-08-21 */
.table th,.table td{overflow:hidden; text-overflow:ellipsis}
/* 短い列は内容なりで止める（伸びないようにする） */
.table th.num,.table td.num{white-space:nowrap}
.table .c-narrow,.table th.c-narrow{width:1%; white-space:nowrap}
/* 日付・コード・金額・区分は内容なり。名前だけが余りを取る */
.list-table{table-layout:auto}
.list-table th:not(.grow),.list-table td:not(.grow){width:1%; white-space:nowrap}
.list-table th.grow,.list-table td.grow{width:auto; white-space:normal}

/* ── 一覧の見出しを押して並べ替える（弥生の［表示順］に当たる）2026-08-25 ── */
.table th .sort-th{display:flex; align-items:center; justify-content:inherit; gap:4px;
  color:inherit; text-decoration:none; margin:-5px -10px; padding:5px 10px}
.table th.num .sort-th{justify-content:flex-end}
.table th .sort-th:hover{background:rgba(0,0,0,.05)}
.table th .sort-th:focus-visible{outline:2px solid var(--green); outline-offset:-2px}
.table th.is-sorted{background:var(--green-l)}
.sort-mark{font-size:10px; line-height:1; opacity:.85}

/* 絞った件数 / 登録件数（弥生の「189/189」） */
.count-badge{font-size:13px; color:var(--sub); font-variant-numeric:tabular-nums;
  border:1px solid var(--line); border-radius:4px; padding:3px 8px; background:#fff}
.count-badge .of{margin:0 2px; opacity:.6}

/* ── 税率が伝票の日付と食い違う行の印（弥生は何も言わない）2026-08-25 ── */
.ylines tbody.line-row.tax-gap td{background:#fff7e6}
.ylines tbody.line-row.tax-gap:nth-of-type(even) td{background:#fff3d6}
/* 印は課税区分の欄と**並べて**置く。重ねると、プルダウンの矢印を隠してしまう */
.ylines td.c-tax{display:flex; align-items:center; gap:3px}
.ylines td.c-tax > select{flex:1 1 auto; min-width:0}
.tax-gap-mark{flex:none;
  font-size:10px; line-height:1; padding:3px 4px; border-radius:3px; cursor:pointer;
  border:1px solid #d98c00; background:#ffe9b8; color:#7a4c00; font-weight:700}
.tax-gap-mark::before{content:'⚠ '}
.tax-gap-mark:hover{background:#ffd98a}
.tax-gap-mark:focus-visible{outline:2px solid var(--green); outline-offset:1px}

/* 既定の期間に中身が無くて、別の期に寄せたときの知らせ 2026-08-25 */
.period-note{margin:-6px 0 14px; font-size:13px; color:#7a4c00;
  background:#fff7e6; border:1px solid #f0d9a8; border-radius:5px; padding:7px 11px}
.period-note::before{content:'ℹ '; font-weight:700}

/* 器そのものが縦スクロールする表は、見出しを **器の上端** に貼る（画面の帯は関係ない）2026-08-25 */
.table-wrap.own-scroll thead th{position:sticky; top:0; z-index:6}

/* 台帳の商品名と、その行に書いた文が違うときの添え書き 2026-08-25 */
.ylines td.c-name{position:relative}
.master-name{position:absolute; right:6px; bottom:1px; z-index:1; pointer-events:none;
  font-size:10px; line-height:1.4; color:#6b7a70; background:rgba(255,255,255,.86);
  padding:0 4px; border-radius:3px; max-width:46%; overflow:hidden;
  text-overflow:ellipsis; white-space:nowrap}
