* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
:root, body[data-theme="dark"] { --bg:#0f1115; --card:#1a1e26; --card2:#232833; --line:#2f3542; --txt:#eef1f6; --sub:#9aa4b2; --accent:#e8b923; --accent2:#3a7afe; --ok:#2fbf71; --danger:#e2504a; --onacc:#241c00;  --pay-cash:#38e0f5; --pay-card:#4ade80; --pay-cred:#ff7ab8; }
body[data-theme="light"] { --bg:#f3f4fa; --card:#ffffff; --card2:#eef0f8; --line:#e1e3ef; --txt:#2b2e38; --sub:#8b91a3; --accent:#f4a8c8; --accent2:#8fb6f0; --ok:#3fb389; --danger:#e2687f; --onacc:#4a1029;  --pay-cash:#0d7f95; --pay-card:#1f8f57; --pay-cred:#c2185b; }
body[data-theme="pink"] { --bg:#2a0a1e; --card:#3d1130; --card2:#4c1a3d; --line:#5e2a4d; --txt:#ffe9f4; --sub:#e6aecb; --accent:#ff4fa0; --accent2:#ff89c2; --ok:#59d3a2; --danger:#ff6f8e; --onacc:#3d0022;  --pay-cash:#38e0f5; --pay-card:#4ade80; --pay-cred:#ff7ab8; }
/* ↓2026-08-09 追加。明るい系は文字を濃くして、暗い店内でも読めるコントラストを確保している。 */
body[data-theme="sakura"] { --bg:#fdf2f6; --card:#ffffff; --card2:#fce8ef; --line:#f4d5e0; --txt:#4a2b38; --sub:#a0788a; --accent:#e8879f; --accent2:#f2b8c6; --ok:#4bb894; --danger:#d9536b; --onacc:#ffffff;  --pay-cash:#0d7f95; --pay-card:#1f8f57; --pay-cred:#c2185b; }
body[data-theme="aqua"]   { --bg:#eef7fb; --card:#ffffff; --card2:#e2f1f8; --line:#cfe4ee; --txt:#233c47; --sub:#6f909e; --accent:#4aa8c9; --accent2:#8fd0e6; --ok:#3fae8e; --danger:#dd6070; --onacc:#ffffff;  --pay-cash:#0d7f95; --pay-card:#1f8f57; --pay-cred:#c2185b; }
/* ↓2026-08-09 追加。多色系は「背景・カードは無彩色、差し色だけ多色」にして文字を読みやすく保つ。 */
/* 白×銀 */
body[data-theme="silver"]   { --bg:#f2f4f6; --card:#ffffff; --card2:#e9ecef; --line:#d6dbe1; --txt:#22262c; --sub:#79818c; --accent:#6b7683; --accent2:#a8b2bd; --ok:#3fae8e; --danger:#d9536b; --onacc:#ffffff;  --pay-cash:#0d7f95; --pay-card:#1f8f57; --pay-cred:#c2185b; }
/* 黒×銀 */
body[data-theme="onyx"]     { --bg:#0c0d10; --card:#16181d; --card2:#1e2128; --line:#2d3138; --txt:#eceef2; --sub:#98a0ac; --accent:#c6ccd4; --accent2:#7f8896; --ok:#2fbf71; --danger:#e2504a; --onacc:#14161a; }
/* 赤×青×白（トリコロール）＝白地に赤と青の差し色 */
body[data-theme="tricolor"] { --bg:#f4f6fa; --card:#ffffff; --card2:#e9eef7; --line:#d5dded; --txt:#1b2130; --sub:#737f97; --accent:#c8102e; --accent2:#12409a; --ok:#2f9e6e; --danger:#c8102e; --onacc:#ffffff; }
body[data-theme="tricolor"] .bill-head { border-left:4px solid var(--accent2); padding-left:8px; }
/* 緑×黄×赤＝黒地に3色の差し色 */
body[data-theme="rasta"]    { --bg:#0e130f; --card:#182019; --card2:#202b21; --line:#2f3d31; --txt:#f0f4ee; --sub:#9fb3a2; --accent:#f5c518; --accent2:#1f9d55; --ok:#1f9d55; --danger:#d64430; --onacc:#241f00; }

/* ===== やさしい白（初心者向け）2026-08-28 =====
   ★ねらい＝「はじめて触る人が、どこを押せばいいか迷わない」。他の白テーマとの違いは3つ。
     ①枠線を濃くした（#c9d1da）。既存の白テーマは線が薄く、カードと入力欄の境目が見えない。
     ②説明文の色を濃くした（--sub #55606c）。他の白は #8b91a3 前後で、明るい店内だとほぼ読めない。
     ③強調色を1色（青）に統一。金・ピンク・水色を混ぜず、【青＝押す】【赤＝消す】【緑＝終わった】だけにする。
   ⚠ 色は下の1行だけ。見やすさの調整は body[data-theme="plain"] の追加ルールでやる（他テーマに影響しない）。 */
body[data-theme="plain"]    { --bg:#f4f6f8; --card:#ffffff; --card2:#eef1f5; --line:#c9d1da; --txt:#14181d; --sub:#55606c; --accent:#0b63d6; --accent2:#0b63d6; --ok:#1a7f4b; --danger:#c62828; --onacc:#ffffff;  --pay-cash:#0d7f95; --pay-card:#1f8f57; --pay-cred:#c2185b; }

/* --- ここから下は「やさしい白」を選んだときだけ効く（他の店の見た目は変わらない）--- */
/* カードを白く浮かせる。背景がうっすら灰色なので、白い面＝中身の入れ物だと分かる */
body[data-theme="plain"] .card { box-shadow:0 1px 2px rgba(16,24,40,.06); }
/* ★入力欄は「白い穴」にする。既定は card2（灰）で、白いカードの上だと押せる場所に見えない */
body[data-theme="plain"] input,
body[data-theme="plain"] select { background:#ffffff; }
/* ★今どこを触っているかを、枠だけでなく光でも示す（初心者はカーソルを見失う） */
body[data-theme="plain"] input:focus,
body[data-theme="plain"] select:focus { border-color:var(--accent); box-shadow:0 0 0 3px rgba(11,99,214,.18); }
/* ★押せるボタンは白地＋濃い枠にして、文字（押せない説明文）とはっきり分ける */
body[data-theme="plain"] .mini,
body[data-theme="plain"] .ghost { background:#ffffff; }
/* ★一番やってほしい操作＝青い面。下に濃い青の影を付けて「押せる立体」に見せる */
body[data-theme="plain"] .primary { box-shadow:0 2px 0 #0a4fa8; }
body[data-theme="plain"] .primary:disabled { box-shadow:none; }
/* ★消す系は赤い枠。押す前に色で気づけるようにする */
body[data-theme="plain"] .del-chg { border-color:var(--danger); color:var(--danger); background:#ffffff; }
/* ★下メニューの「今いる場所」を、色だけでなく面で示す */
body[data-theme="plain"] #botnav button.active { background:#e7f0fd; }
/* ⚠ 管理者用のボタンを薄くしすぎない。初心者には「壊れている・押せない」に見えるため */
body[data-theme="plain"] #botnav button.nav-admin { opacity:.8; }
/* ★伝票一覧の「進行中／会計済」の札（2026-08-28 ユーザー指摘で修正）。
   ⚠ 元の指定は背景が暗い色の【直書き】（進行中 #173d2a・会計済 #3a2020）で、暗いテーマ専用だった。
     白地に置くと黒い札が浮いて、文字も読めない。
   ★色の意味：進行中＝まだ席にいる＝目を引く緑／会計済＝終わった＝静かな灰色。
     ⚠ 元は会計済が【赤】だったが、このテーマでは赤を「消す」に使うと決めたので灰色にした。
        終わった伝票は危険でも間違いでもないので、赤で驚かせない。 */
body[data-theme="plain"] .badge.open   { background:#e6f4ec; color:#14663c; border:1px solid #b7e0c8; }
body[data-theme="plain"] .badge.closed { background:#eef1f5; color:#4a5560; border:1px solid #c9d1da; }
/* ⚠ 金額の文字サイズは変えない（2026-08-25 の実測どおり。大きくすると桁が多い月に切れる） */
body[data-theme="rasta"] .bill-head { border-left:4px solid var(--accent2); padding-left:8px; }
body[data-theme="rasta"] #topbar { border-bottom:2px solid var(--accent); }
html,body { margin:0; padding:0; background:var(--bg); color:var(--txt); font-family:Meiryo,"メイリオ","Hiragino Kaku Gothic ProN",sans-serif; font-size:15px;
  /* ★iOSで画面の端を超えて引っぱる（ラバーバンド）と、position:fixed の下ナビも一緒に持ち上がって
     伝票の「合計」が隠れる。ここで跳ね返りを止める（2026-08-18・実機で発覚）。 */
  overscroll-behavior-y: none; }
/* ⚠ 下余白は下メニューの高さ＋ホームバー。足りないと最後のカードが隠れて押せない。 */
#app { max-width:720px; margin:0 auto; padding-bottom:calc(168px + env(safe-area-inset-bottom)); }

#topbar { position:sticky; top:0; z-index:5; display:flex; justify-content:space-between; align-items:center; padding:10px 14px; background:var(--card); border-bottom:1px solid var(--line); }
#storeName { font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.top-left { display:flex; align-items:baseline; gap:8px; min-width:0; }
.bizday { font-size:15px; font-weight:700; white-space:nowrap; color:var(--accent); }
#saveState { font-size:11px; color:var(--sub); white-space:nowrap; }
.save-idle { color:var(--sub); } .save-saving { color:var(--accent); } .save-done { color:var(--ok); }

.page { padding:10px; }
.hidden { display:none !important; }
.card { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:10px; }

.row2 { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.row3 { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; }
.fld { display:flex; flex-direction:column; gap:4px; font-size:12px; color:var(--sub); margin-bottom:8px; }
input,select { width:100%; padding:10px; border:1px solid var(--line); border-radius:8px; background:var(--card2); color:var(--txt); font-size:16px; }
input:focus,select:focus { outline:none; border-color:var(--accent2); }

.cust-wrap { position:relative; }
.suggest { position:absolute; top:100%; left:0; right:0; z-index:9; background:var(--card2); border:1px solid var(--line); border-radius:8px; overflow:hidden; }
.suggest div { padding:10px; border-bottom:1px solid var(--line); font-size:14px; color:var(--txt); }
.suggest div:last-child { border-bottom:0; }
.suggest .st { color:var(--sub); font-size:12px; margin-left:6px; }

.sets { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-top:4px; }
.setbox { background:var(--card2); border:1px solid var(--line); border-radius:10px; padding:8px; text-align:center; }
.setbox .nm { font-size:12px; color:var(--sub); }
.setbox .pr { font-size:11px; color:var(--sub); margin:2px 0 6px; }
.stepper { display:flex; align-items:center; justify-content:space-between; }
.stepper button { width:34px; height:34px; border-radius:50%; border:1px solid var(--line); background:var(--card); color:var(--txt); font-size:20px; }
.stepper .qty { font-size:18px; font-weight:600; min-width:22px; }

.charges { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-top:8px; }
.chg { display:flex; align-items:center; gap:6px; background:var(--card2); border:1px solid var(--line); border-radius:20px; padding:6px 12px; font-size:13px; }
.chg.on { border-color:var(--accent); color:var(--accent); }

.cat-tabs { display:flex; gap:6px; overflow-x:auto; padding-bottom:6px; }
.cat-tabs button { flex:0 0 auto; padding:8px 12px; border-radius:20px; border:1px solid var(--line); background:var(--card2); color:var(--sub); font-size:13px; }
.cat-tabs button.active { background:var(--accent2); border-color:var(--accent2); color:#fff; }
.menu-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:8px; margin-top:8px; }
.mbtn { background:var(--card2); border:1px solid var(--line); border-radius:10px; padding:10px 8px; text-align:left; color:var(--txt); font-size:13px; line-height:1.3; }
.mbtn .p { color:var(--sub); font-size:12px; margin-top:3px; }
.mbtn-amt { border-color:var(--accent2); }
.mbtn-amt .p { color:var(--accent2); }

.bill-head { display:flex; justify-content:space-between; align-items:center; font-weight:600; margin-bottom:8px; }
.bill-lines { min-height:40px; }
.bline { display:flex; justify-content:space-between; align-items:center; padding:6px 0; border-bottom:1px solid var(--line); font-size:14px; }
.bline .ctrl { display:flex; align-items:center; gap:8px; }
.bline .ctrl button { width:28px; height:28px; border-radius:50%; border:1px solid var(--line); background:var(--card2); color:var(--txt); font-size:16px; }
.bline .amt { min-width:74px; text-align:right; }
.empty { color:var(--sub); font-size:13px; padding:8px 0; }
.bill-totals { border-top:1px solid var(--line); margin-top:8px; padding-top:8px; }
.trow { display:flex; justify-content:space-between; padding:3px 0; color:var(--sub); font-size:14px; }
.trow.total { color:var(--txt); font-size:20px; font-weight:700; padding-top:8px; }

button { cursor:pointer; }
.primary { width:100%; padding:12px; border:0; border-radius:10px; background:var(--accent); color:var(--onacc); font-weight:700; font-size:16px; }
.primary:disabled { background:var(--line); color:var(--sub); }
.primary.big { padding:14px; font-size:17px; margin-top:10px; }
.ghost { width:100%; padding:12px; border:1px solid var(--line); border-radius:10px; background:transparent; color:var(--txt); font-size:15px; }
.mini { padding:6px 10px; border:1px solid var(--line); border-radius:8px; background:var(--card2); color:var(--txt); font-size:13px; }

/* 3段（1段目=2つ／2・3段目=3つずつ）＝6分割グリッドで割り付ける */
#botnav { position:fixed; bottom:0; left:0; right:0; z-index:6; display:grid; grid-template-columns:repeat(6,1fr); gap:1px; background:var(--line); border-top:1px solid var(--line); border-bottom:4px solid var(--accent); max-width:720px; margin:0 auto; }
#botnav button { grid-column: span 2; }
#botnav button.nav-half { grid-column: span 3; }
/* 長い項目名も入るように折り返し可＋2行分の高さを確保 */
#botnav button { padding:10px 2px; border:0; background:var(--card); color:var(--txt); font-size:12px; line-height:1.25;
  white-space:normal; word-break:keep-all; min-height:48px; opacity:1; font-weight:600; }
#botnav button.nav-admin { opacity:.55; color:var(--sub); font-weight:400; }   /* 管理パスワードが要るボタンは淡く */
#botnav button.active { color:var(--accent); font-weight:700; opacity:1; }
.stepper-inline { justify-content:flex-start; gap:14px; padding:2px 0; }
.cust { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:8px; }
.cust-top { display:flex; justify-content:space-between; align-items:baseline; }
.cust-name { font-size:17px; font-weight:700; }
.cust-meta { color:var(--sub); font-size:12px; margin:4px 0 8px; display:flex; gap:12px; flex-wrap:wrap; }
.cust textarea { width:100%; min-height:48px; padding:8px; border:1px solid var(--line); border-radius:8px; background:var(--card2); color:var(--txt); font-size:14px; font-family:inherit; resize:vertical; }
.cust-row { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:8px; }
.cust-actions { display:flex; gap:8px; margin-top:8px; }
.cust-actions button { flex:1; }
/* ===== メンバーリスト：既定は閉じた状態（2026-08-24 ユーザー指定）=====
   ⚠ 入力欄は「編集」を押すまで出さない。開きっぱなしだと、担当やメモを直して保存しただけで
      顧客名まで一緒に書き換わってしまう（伝票との食い違いの元だった）。 */
.cust { padding:9px 12px; }
.cust-meta { margin:3px 0 6px; gap:10px; }
.cust-memo { color:var(--sub); font-size:12px; margin:0 0 6px;
             white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cust-actions { margin-top:0; }
.cust-actions .mini.on { border-color:var(--accent); color:var(--accent); }
.cust-edit { margin-top:10px; padding-top:10px; border-top:1px solid var(--line); }
.cust-edit .cust-actions { margin-top:8px; }
/* 同業のお客様の店舗名＝名前の右に小さく出す（2026-08-24） */
/* 同業のお客様の店舗名。⚠ 灰色だと暗くて読めなかったので金色に（2026-08-25 ユーザー指定） */
.cust-shop { margin-left:6px; font-size:11px; font-weight:600; color:var(--accent);
             border:1px solid var(--accent); border-radius:6px; padding:1px 5px; white-space:nowrap; }

/* ===== 清算済伝票のかんたん検索（2026-08-24 ユーザー指定）=====
   タッチで絞り込み／もう一度タッチで解除。押されているものだけ枠と文字が色づく。 */
.lf-card { padding:8px 10px; margin-bottom:8px; }
.lf-card:empty { display:none; }
.lf-head { display:flex; justify-content:space-between; align-items:baseline;
           font-size:13px; font-weight:700; margin-bottom:6px; }
/* かんたん検索＝1行3カラムのプルダウン（2026-08-25 ユーザー指定・旧チップ方式は廃止）
   ⚠ 素の 1fr だと【列の最小幅＝中身の最小幅】になり、長い名前で横にはみ出す。必ず minmax(0,1fr)。 */
.lf-cols { display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px; }
.lf-cols .fld { margin-bottom:0; min-width:0; font-size:11px; }
.lf-cols select { min-width:0; padding:8px 4px; font-size:14px; }
.lf-cols select.on { border-color:var(--accent); color:var(--accent); font-weight:700; }
.lf-cols select:disabled { opacity:.45; }
.day-head.lf-hit { color:var(--accent); }

/* 二重計上の確認（経費フォーム・2026-08-24）。止めずに知らせるだけ。 */
.dup-box { margin-top:8px; padding:8px 10px; border:1px solid var(--danger); border-radius:10px; background:var(--card2); }
.dup-t { color:var(--danger); font-weight:700; font-size:13px; }
.dup-b { color:var(--sub); font-size:12px; margin-top:3px; }
.dup-a { display:flex; gap:8px; margin-top:8px; }
.dup-a .mini { flex:1; }
.dup-a #e-dup-yes { border-color:var(--danger); color:var(--danger); }

/* 月初の目標設定の案内（テーブル一覧の上・管理者だけ）2026-08-24 */
.goal-notice { border:1px solid var(--accent); border-radius:12px; padding:10px 12px; margin-bottom:10px; background:var(--card2); }
.goal-notice.hidden { display:none; }
.gn-t { color:var(--accent); font-weight:700; font-size:14px; }
.gn-b { color:var(--sub); font-size:12px; margin:3px 0 8px; }
.goal-notice .mini { width:100%; }
/* 日別支払い一覧：振込の行は薄く出す（小計には入れない） */
.erow-bank { opacity:.72; }
.bank-tag { font-size:10px; color:var(--sub); border:1px solid var(--line);
            border-radius:5px; padding:0 4px; margin-left:4px; white-space:nowrap; }
/* 必須の印（経費の使用者など）2026-08-24 */
.req { color:var(--danger); font-size:10px; border:1px solid var(--danger); border-radius:4px; padding:0 3px; }
/* 経費の支払い方法（現金／会社振込／売掛）2026-08-25 */
.pay3 { display:flex; gap:6px; flex-wrap:wrap; }
.pay3-o { flex:1 1 auto; display:flex; align-items:center; gap:5px; padding:8px 6px; font-size:13px;
          border:1px solid var(--line); border-radius:8px; background:var(--card2); white-space:nowrap; }
.pay3-o input { width:auto; padding:0; margin:0; }
.pay3-o:has(input:checked) { border-color:var(--accent); color:var(--accent); font-weight:700; }

/* ===== 削除済み伝票の一覧（2026-08-24 ユーザー指定：4カラムでコンパクトに）=====
   日付・名前・金額・作成者→削除者 ＋ 復元。理由があるときだけ2行目に出す。 */
.dl-card { padding:8px 10px; }
.dl-row { display:grid; grid-template-columns:52px 1fr 70px 68px 40px; gap:5px;
          align-items:center; padding:6px 0; border-bottom:1px solid var(--line); font-size:12px; }
.dl-row:last-child { border-bottom:0; }
.dl-head { color:var(--sub); font-size:10.5px; padding-top:0; }
.dl-n { font-weight:700; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dl-a { text-align:right; font-variant-numeric:tabular-nums; }
.dl-p { color:var(--sub); font-size:10.5px; min-width:0;
        white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dl-row .mini { padding:4px 6px; font-size:11px; }
.dl-r { grid-column:1 / -1; color:var(--sub); font-size:10.5px;
        white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.day-head { display:flex; justify-content:space-between; align-items:baseline; margin:14px 4px 6px; color:var(--accent); font-weight:600; font-size:14px; }
.rcpt-btn { margin-top:8px; padding:8px; width:100%; border:1px solid var(--accent); border-radius:8px; background:transparent; color:var(--accent); font-size:14px; }

.tk { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:8px; }
/* ===== 清算済伝票を2カラムに（2026-08-25 ユーザー指定）=====
   ⚠ 日付の見出し・削除済み一覧・「ありません」は横いっぱいに広げる。
   ⚠ 高さは伝票ごとに違う（ボタンの数が違う）ので align-items:start で上を揃える。 */
/* ⚠ minmax(0,1fr) にしないと、列の最小幅が「中身の最小幅」になって横にはみ出す
   （tk-cust が nowrap なので、長い名前がそのまま列幅の下限になる）。実測で確認済み。 */
#list-wrap { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:8px; align-items:start; }
#list-wrap > .day-head, #list-wrap > .day-pay, #list-wrap > .card, #list-wrap > .dl-card { grid-column:1 / -1; }
#list-wrap > .tk { margin-bottom:0; padding:9px 10px; }
/* 2カラムは幅が狭いので、卓と金額を1行目・顧客名を2行目に落として全幅で見せる。
   ⚠ 1行に詰めると名前が「…」で切れる（実測で確認）。 */
#list-wrap .tk-top { flex-wrap:wrap; gap:2px 8px; }
#list-wrap .tk-table { font-size:15px; }
#list-wrap .tk-total { font-size:16px; margin-left:auto; }
#list-wrap .tk-cust { order:3; flex:1 0 100%; font-size:14px; }
#list-wrap .tk-sub { font-size:11.5px; gap:6px; margin-top:3px; }
#list-wrap .tk-no { font-size:11px; margin-top:3px; }
/* ボタンは2列（会計伝票／領収書／バック印刷／サイン写真）2026-08-25 ユーザー指定 */
.tk-btns { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:5px; margin-top:7px; }
.tk-btns .rcpt-btn { margin-top:0; width:100%; }
.rcpt-btn.wide { width:100%; }
/* 再印刷はひと目で分かるように色を変える（押し間違いを減らす） */
.rcpt-btn.is-again { border-color:var(--sub); color:var(--sub); }
/* 精算伝票のボタンは枠を濃いめの紫に（2026-10-04 ユーザー指定）。一覧と伝票画面の両方 */
.settle-btn { border-color:#7e22ce !important; color:#fff !important; }
/* ⚠ 明るいテーマで白文字は消えるので、そこだけ普段の文字色に戻す */
body[data-theme="light"] .settle-btn, body[data-theme="sakura"] .settle-btn, body[data-theme="aqua"] .settle-btn,
body[data-theme="silver"] .settle-btn, body[data-theme="tricolor"] .settle-btn, body[data-theme="plain"] .settle-btn { color:var(--txt) !important; }
#list-wrap .rcpt-btn { margin-top:6px; padding:6px 4px; font-size:12px; }
#list-wrap .tk-btns .rcpt-btn { margin-top:0; padding:6px 2px; font-size:11.5px; }
/* 集計→紹介料の一覧（2026-08-28 ユーザー指定）。
   ★1行に 日付・顧客名・紹介者・金額・📒・📸 を並べる。
   ⚠ ボタンは行の文字（12px）と同じ大きさ。別の行に大きく出さない。 */
#dash-ref-list .ref-mini { padding:0; border:1px solid var(--line); border-radius:6px;
  background:transparent; color:var(--txt); font-size:12px; line-height:1; height:22px; min-height:0; }
#dash-ref-list .ref-mini:active { opacity:.6; }
/* 支払い方法のチップ（カード＝青／現金＝緑／売掛＝黄）。経費の3カラムと同じ色にそろえる。 */
/* 1日の内訳は縦1列（2026-08-25 ユーザー指定）。この下に伝票のカードが2列で並ぶ。 */
/* 1日の内訳は【3カラム・1行】（2026-08-25 ユーザー指定）。この下に伝票のカードが2列で並ぶ。
   ⚠ minmax(0,1fr) にしないと列の最小幅が中身に引っぱられてはみ出す。 */
.day-pay { display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:4px; margin:0 4px 8px; }
.dp-row { display:flex; justify-content:space-between; align-items:baseline; gap:3px;
          font-size:12px; font-weight:700; padding:3px 6px; border-radius:7px;
          border:1px solid currentColor; font-variant-numeric:tabular-nums;
          letter-spacing:-0.3px; white-space:nowrap; overflow:hidden; }
.dp-row span:first-child { font-size:10.5px; font-weight:600; flex:0 0 auto; }
.dp-row span:last-child { min-width:0; overflow:hidden; text-overflow:ellipsis; }
.tk-pay { display:flex; gap:4px; flex-wrap:wrap; margin-top:4px; }
.pay-chip { font-size:10.5px; padding:1px 6px; border-radius:999px; white-space:nowrap;
            border:1px solid var(--line); color:var(--sub); font-variant-numeric:tabular-nums; }
/* ★現金＝黄／カード＝緑／売掛＝ピンク（2026-08-25 ユーザー指定）。
   ⚠ 黒地に青は見づらいという実測。緑と蛍光ブルーは色相が近くて見分けにくいのでピンクにした。 */
.pc-cash { border-color:var(--pay-cash); color:var(--pay-cash); }
.pc-card { border-color:var(--pay-card); color:var(--pay-card); }
.pc-cred { border-color:var(--pay-cred); color:var(--pay-cred); }
.pc-done { border-color:var(--pay-card); color:var(--pay-card); }
/* 金額の前に出す支払い方法。★丸で囲む（2026-08-25 ユーザー指定） */
.pm { display:inline-block; font-size:10px; font-weight:700; margin-right:5px; vertical-align:2px;
      padding:2px 8px; border-radius:999px; border:1.5px solid currentColor; line-height:1.2; }
.pm.pc-cash { color:var(--pay-cash); }
.pm.pc-card { color:var(--pay-card); }
.pm.pc-cred { color:var(--pay-cred); }
#list-wrap .del-mini { margin-top:6px; padding:5px; font-size:11.5px; }
/* 幅が狭い端末では1カラムに戻す（2列だと文字が潰れるため） */
@media (max-width:359px) { #list-wrap { grid-template-columns:1fr; } }
.tk.closed { opacity:.6; }
.tk-top { display:flex; justify-content:space-between; align-items:baseline; gap:10px; min-width:0; }
.tk-table { font-size:18px; font-weight:700; white-space:nowrap; }
.tk-cust { font-size:18px; font-weight:600; flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tk-total { font-size:18px; font-weight:700; color:var(--accent); white-space:nowrap; }
.tk-sub { color:var(--sub); font-size:13px; margin-top:4px; display:flex; gap:10px; flex-wrap:wrap; }
.badge { font-size:11px; padding:2px 8px; border-radius:10px; }
.badge.open { background:#173d2a; color:var(--ok); } .badge.closed { background:#3a2020; color:var(--danger); }

/* 卓ボード（未会計） */
.board-head { display:flex; justify-content:space-between; align-items:baseline; margin:2px 4px 4px; }
.board-title { font-size:16px; font-weight:700; }
.board-sum { font-size:18px; font-weight:800; color:var(--accent); }
.board-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:10px; margin-top:12px; }
.tcard { display:flex; flex-direction:column; gap:8px; min-width:0; background:var(--card); border:1px solid var(--line); border-radius:14px; padding:10px; color:var(--txt); }
.tcard:active { border-color:var(--accent); }
.tcard-main { min-width:0; display:flex; flex-direction:column; gap:6px; text-align:left; }
.tcard-row { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:baseline; gap:2px 8px; min-width:0; }
/* 卓ボードの文字は全部おなじ大きさ */
/* 2カラムに収める都合で16px（1カラムなら20pxにできる） */
.tcard-table, .tcard-guests, .tcard-time, .tcard-name, .tcard-amt { font-size:var(--tcard-fs, 16px); }
.tcard-table { font-weight:800; white-space:nowrap; }
.tcard-guests, .tcard-time { color:var(--sub); white-space:nowrap; }
.tcard-name { font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.tcard-amt { font-weight:800; color:var(--accent); white-space:nowrap; margin-left:auto; }
.tcard-print { width:100%; border:1px solid var(--accent); border-radius:10px; background:transparent; color:var(--accent); font-size:14px; font-weight:700; padding:9px 4px; white-space:nowrap; }

/* セット料金（6枠・税込・延長） */
.setbox .incl { display:inline-block; font-size:9px; color:var(--onacc); background:var(--accent); border-radius:6px; padding:1px 5px; margin-left:4px; vertical-align:middle; }
.setbox .stepper.ext { margin-top:6px; }
.setbox .stepper.ext .exl { font-size:11px; color:var(--sub); }
.setbox .stepper.ext button { width:28px; height:28px; font-size:16px; }
.setedit { background:var(--card2); border:1px solid var(--line); border-radius:10px; padding:8px; margin-bottom:8px; }
.setedit .nm { margin-bottom:6px; }
.setedit-row { display:flex; align-items:center; gap:8px; }
/* 退勤まわり＝押す物だとひと目で分かるように、はっきりしたボタンにする（2026-08-09） */
.btn-out { flex:1; padding:11px 12px; border:0; border-radius:10px; background:var(--accent); color:var(--onacc); font-weight:700; font-size:15px; }
.btn-out2 { flex:1; padding:11px 12px; border:2px solid var(--accent); border-radius:10px; background:transparent; color:var(--accent); font-weight:700; font-size:15px; }
.time-in { flex:0 0 92px; text-align:center; font-size:17px; font-weight:700; letter-spacing:1px; }
.setedit-row .pr, .setedit-row .ex { flex:1; min-width:0; }
.setedit-row .incl-chk { display:flex; align-items:center; gap:4px; font-size:13px; color:var(--sub); white-space:nowrap; }
.setedit-row .incl-chk input { width:auto; }
/* 経費の編集行＝支払い方法の3択（2026-08-25）。
   ⚠ input,select は既定で width:100% なので、指定しないと行が縦に潰れる。 */
.setedit-row .incl-chk select { width:auto; padding:3px 4px; font-size:12px; }
.setedit-row .del-chg { flex:0 0 auto; width:40px; height:40px; border-radius:8px; border:1px solid var(--line); background:var(--card); color:var(--danger); }

/* 削除ボタン類 */
.ghost.danger-btn { border-color:var(--danger); color:var(--danger); }
.primary.danger-btn { background:var(--danger); color:#fff; }
.del-mini { margin-top:8px; padding:7px; width:100%; border:1px solid var(--line); border-radius:8px; background:transparent; color:var(--danger); font-size:13px; }

.medit { display:flex; align-items:center; gap:6px; margin-bottom:6px; }
.medit .cat { width:84px; color:var(--sub); font-size:12px; }
.medit input.nm { flex:1; } .medit input.pr { width:82px; }
.medit button { width:38px; height:40px; border-radius:8px; border:1px solid var(--line); background:var(--card2); color:var(--danger); }
.mcat-h { color:var(--accent); font-size:13px; margin:12px 0 6px; }

.hint { color:var(--sub); font-size:12px; margin:4px 0; }
.mono-url { font-family:ui-monospace,Menlo,monospace; font-size:13px; background:var(--card2); border:1px solid var(--line); border-radius:8px; padding:10px; word-break:break-all; }

.modal { position:fixed; inset:0; z-index:20; background:rgba(0,0,0,.55); display:flex; align-items:flex-end; }
.sheet { width:100%; max-width:720px; margin:0 auto; background:var(--card); border-radius:16px 16px 0 0; padding:16px; max-height:92vh; overflow:auto; }
.charged-line { text-align:right; font-size:22px; font-weight:700; margin:8px 0; }
.chk-row { display:flex; align-items:center; gap:8px; font-size:15px; margin:10px 0; color:var(--txt); }
.chk-row input { width:auto; transform:scale(1.2); }
.ref-row { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
.ref-row .ref-inp { flex:1; }
.ref-row .ref-del { flex:0 0 auto; width:40px; height:40px; border-radius:8px; border:1px solid var(--line); background:var(--card2); color:var(--danger); font-size:18px; }
.ref-row .amt-lbl { flex:0 0 62px; color:var(--sub); font-size:13px; }
.ref-row .amt-val { flex:1; text-align:right; font-weight:600; }
.ref-row .amt-inp, .ref-row .payee-inp { flex:1; min-width:0; }
.diff-line { text-align:center; font-size:14px; margin:8px 0; }
.diff-ok { color:var(--ok); } .diff-ng { color:var(--danger); }

.toast { position:fixed; bottom:80px; left:50%; transform:translateX(-50%); z-index:40; background:#000; color:#fff; padding:10px 16px; border-radius:20px; font-size:14px; }

.sub { color:var(--sub); font-size:13px; font-weight:400; }
.dash-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:10px; }
.mcard { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:12px; }
.mcard.big { grid-column:1 / -1; }
/* 売上月報のまとめ＝3つ並び（2026-08-24）。狭い画面でも3つ入るよう文字を少し小さく */
.dash-grid.g3 { grid-template-columns:1fr 1fr 1fr; }
.dash-grid.g3 .mcard { padding:10px 8px; }
.dash-grid.g3 .mcard .lbl { font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash-grid.g3 .mcard .val { font-size:clamp(13px, 4.1vw, 17px); }
/* ★桁が増えても崩れないように（2026-08-24）。数字は等幅・折り返さない・はみ出さない */
.mcard .val { font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; text-overflow:clip; letter-spacing:-0.2px; text-align:right; }
.mcard .val.long { font-size:clamp(11px, 3.4vw, 15px); letter-spacing:-0.5px; }
.mcard .val.xlong { font-size:clamp(10px, 3.0vw, 13px); letter-spacing:-0.6px; }
/* カードの高さ違い（2026-08-24）。h70＝控えめ／h140＝主役の数字 */
.mcard.h70 { padding:7px 8px; }
.mcard.h70 .lbl { font-size:10.5px; }
.mcard.h70 .val { font-size:clamp(12px, 3.5vw, 15px); margin-top:2px; }
.mcard.h140 { padding:18px 8px; }
.mcard.h140 .val { font-size:clamp(17px, 5.6vw, 26px); margin-top:6px; }
.mcard.h140 .val.long { font-size:clamp(14px, 4.6vw, 21px); }
.mcard.h140 .val.xlong { font-size:clamp(12px, 3.8vw, 18px); }
.dash-grid.g3 .mcard.w2 { grid-column:span 2; }
/* ===== 年間収支の表（2026-08-25 ユーザー指定）=====
   月／売上／経費／給与／利益 の5カラム。行の背景の帯＝その月の売上の大きさ。
   ⚠ 素の 1fr だと【列の最小幅＝金額の幅】になり、8桁で横にはみ出す。必ず minmax(0,1fr)。 */
.yr-head, .yr-row { display:grid; grid-template-columns:2.4em repeat(4, minmax(0,1fr)); gap:2px;
                    align-items:center; font-variant-numeric:tabular-nums; }
.yr-head { font-size:10px; color:var(--sub); padding:2px 4px 4px; }
.yr-head span + span, .yr-row span + span { text-align:right; }
.yr-row { position:relative; font-size:11.5px; padding:8px 4px; border-bottom:1px solid var(--line); letter-spacing:-0.3px; }
.yr-row::before { content:''; position:absolute; left:0; top:2px; bottom:2px; width:var(--w,0%);
                  background:var(--accent2); opacity:.16; border-radius:4px; pointer-events:none; }
.yr-row > span { position:relative; overflow:hidden; text-overflow:clip; white-space:nowrap; }
.yr-row .m { color:var(--sub); text-align:left; }
.yr-row .p.ok { color:var(--ok); } .yr-row .p.ng { color:var(--danger); }
.yr-row.yr-none { opacity:.42; }
.yr-row.yr-ng { color:var(--danger); }
.yr-row.yr-ng::before, .yr-row.yr-total::before { display:none; }
.yr-row.yr-total { border-top:2px solid var(--line); border-bottom:0; margin-top:4px;
                   font-weight:700; }
/* ⚠ 合計行を大きくしない（2026-08-25 実測）。太字12.5pxだと年間売上が1億を超えたとき
   375px で「123,456,78」と切れた。区別は太字＋上の罫線だけで足りる。 */
/* 経費：左2カラム＝現金／右2カラム＝振込（合計4カラム）2026-08-24 */
/* ===== 誕生日（2026-08-28 ユーザー指定）=====
   ★今月が誕生月の人は、メンバーリストのカードの背景を変える。
   ⚠ テーマが8種類あるので固定色にしない。そのテーマのアクセント色を薄く敷く。 */
/* ⚠ 土台は必ず効く指定にする（--card2 とアクセント色の枠）。
   color-mix は古いiPhoneで効かないので、効く端末だけ更に色が乗る「おまけ」にしてある。 */
.cust.cust-bd { background:var(--card2); border-color:var(--accent); border-width:2px; }
.cust.cust-bd { background:color-mix(in srgb, var(--accent) 14%, var(--card)); }
.cust-bday { color:var(--sub); }
.cust-bday.on { color:var(--accent); font-weight:700; }

/* プリンタの見張り番の赤帯（2026-08-27）。応答が無いときだけ出す。
   ★営業中に見落とさないよう、画面の一番上に固定色で出す。 */
#prn-warn { background:var(--danger); color:#fff; font-size:13px; font-weight:700;
            padding:8px 10px; text-align:center; line-height:1.4; }

/* 経費をひとまとまりに囲む（2026-08-25 ユーザー指定）。
   ★見出し・3枚のカード・支払い方法べつの内訳を1つの枠に入れて、
     「売掛」が“経費の売掛”だと分かるようにする。
   ⚠ 背景は --card2。中の .mcard が --card なので、同じ色にすると枠の中でカードが消える。 */
.exp-box { background:var(--card2); border:1px solid var(--line); border-radius:12px;
           padding:0 10px 10px; margin-bottom:10px; }
.exp-box > .dash-grid { margin-bottom:8px; }
.exp-box > .dash-grid:last-child { margin-bottom:0; }
.exp-cap { color:var(--sub); font-size:10.5px; margin:0 2px 4px; }
.exp-split { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:10px; }
/* 現金・振込・売掛の3カラム（2026-08-25）。狭い画面では2列に折る。 */
/* ⚠ minmax(0,1fr) にしないと列の最小幅が「中身の最小幅」になってはみ出す（実測で確認）。
   ⚠ 2カラムに折り返す指定は入れない＝3カラムのまま（ユーザー指定）。 */
.exp-split.c3 { grid-template-columns:repeat(3, minmax(0, 1fr)); gap:0; }
/* ===== 経費の内訳を3カラムの一覧にする（2026-08-25 ユーザー指定）=====
   カード型をやめて「項目名 … 金額」の行に。縦線と色で3つを読み分ける。 */
.exp-split.c3 .exp-col { padding:0 7px; border-left:1px solid var(--line); }
.exp-split.c3 .exp-col:first-child { padding-left:2px; border-left:0; }
.exp-split.c3 .exp-col > .lbl { font-size:11px; font-weight:700; margin:0 0 2px;
                                border-bottom:2px solid var(--line); padding-bottom:3px; }
.ex3-sum { font-size:13px; font-weight:700; text-align:right; margin:0 0 5px;
           font-variant-numeric:tabular-nums; letter-spacing:-0.3px; }
.ex3-row { display:flex; justify-content:space-between; align-items:baseline; gap:3px;
           font-size:10.5px; padding:2px 0; border-bottom:1px dashed var(--line); }
.ex3-row:last-child { border-bottom:0; }
.ex3-row .n { color:var(--sub); min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ex3-row .v { font-variant-numeric:tabular-nums; white-space:nowrap; font-weight:600; letter-spacing:-0.3px; }
.ex3-none { color:var(--sub); font-size:10.5px; padding:2px 0; }
/* 3つを色で見分ける（現金＝緑／振込＝青／売掛＝黄） */
/* ⚠ .exp-split.c3 .exp-col > .lbl の方が詳細度が高いので、同じ強さで書かないと色が効かない（実測で確認） */
/* 経費も同じ色の考え方にそろえる：現金＝黄／振込＝緑／売掛＝ピンク（黒地に青は見づらいため） */
.exp-split.c3 .exp-col.ex-cash > .lbl { color:var(--pay-cash); border-bottom-color:var(--pay-cash); }
.exp-split.c3 .exp-col.ex-bank > .lbl { color:var(--pay-card); border-bottom-color:var(--pay-card); }
.exp-split.c3 .exp-col.ex-pay  > .lbl { color:var(--pay-cred); border-bottom-color:var(--pay-cred); }
.ex-cash .ex3-sum { color:var(--pay-cash); }
.ex-bank .ex3-sum { color:var(--pay-card); }
.ex-pay  .ex3-sum { color:var(--pay-cred); }
.exp-split .exp-col > .lbl { color:var(--sub); font-size:12px; font-weight:700; margin:0 2px 6px; display:flex; justify-content:space-between; }
.exp-split .dash-grid { margin-bottom:0; gap:6px; }
.exp-split .mcard { padding:6px; }
.exp-split .mcard .lbl { font-size:10px; }
.exp-split .mcard .val { font-size:clamp(11px, 3.2vw, 14px); margin-top:2px; }
.exp-split .empty { font-size:12px; padding:8px; }
.mcard .lbl { color:var(--sub); font-size:12px; }
.mcard .val { font-size:22px; font-weight:700; margin-top:4px; }
.mcard .val.accent { color:var(--accent); }
.mcard .val.ok { color:var(--ok); } .mcard .val.ng { color:var(--danger); }

/* ===== 集計ページのカードを詰める（2026-08-24 ユーザー指定：高さを約70%に）=====
   ★文字の大きさは変えない（ユーザー指定）。上下の余白・行の高さ・項目名と金額のあいだだけを詰める。
   ⚠ 効かせるのは集計ページの4つの入れ物だけ。経費精算ページ（#exp-*）のカードには一切かからない。
   ⚠ 見出し（mkHead）は style= で余白を直に書いているので、ここでは変わらない＝見出しの間隔は今のまま。 */
#dash-cards .mcard, #dash-staff-cards .mcard, #dash-exp-top .mcard, #dash-profit .mcard { padding:6px 8px; }
#dash-cards .mcard .lbl, #dash-staff-cards .mcard .lbl,
#dash-exp-top .mcard .lbl, #dash-profit .mcard .lbl { line-height:1.15; }
#dash-cards .mcard .val, #dash-staff-cards .mcard .val,
#dash-exp-top .mcard .val, #dash-profit .mcard .val { line-height:1.15; margin-top:2px; }
#dash-cards .mcard.h70, #dash-profit .mcard.h70 { padding:5px 8px; }
#dash-cards .mcard.h140 { padding:6px 8px; }
#dash-cards .mcard.h140 .val { margin-top:3px; }
#dash-exp-top .mcard { padding:7px 8px; }
/* ===== 売上月報の見出し行（〇月度目標＋対象月＋目標設定）2026-08-24 ユーザー指定 =====
   ⚠ input,select は既定で width:100% なので、ここでは幅を持たせない指定に上書きしている。 */
.dash-head { display:flex; align-items:center; gap:6px; padding:10px 2px 0; margin-bottom:2px; }
.dash-head > span { flex:1 1 auto; min-width:0; font-size:14px; font-weight:700; color:var(--txt);
                    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dash-head select { flex:0 0 auto; width:auto; padding:5px 6px; font-size:13px; border-radius:8px; }
.dash-head .mini { flex:0 0 auto; }
.dash-head .mini.on { border-color:var(--accent); color:var(--accent); }
/* 月間売上合計だけ数字を中央に置く（2026-08-24 ユーザー指定）。ほかの金額は右寄せのまま。 */
#dash-cards .mcard.h140.w2 .val { text-align:center; }
/* 経費のまとめの上の塊（経費合計・現金・振込・売掛）も数字を中央に（2026-08-28 ユーザー指定）。
   ⚠ 摘要ごとの3カラム（2つ目の .dash-grid）は右寄せのまま＝金額を縦に見比べられるように。 */
#exp-summary .dash-grid:first-child .mcard .val { text-align:center; }

/* ===== 〇月度目標（帯グラフ付き）2026-08-24 ユーザー指定 =====
   目標／達成率の帯／今の売上／残り を1枚にまとめたカード。
   ★％は右端の同じ位置に揃える（.gp を固定幅にする）＝数字が縦に並んで読みやすい。 */
.goal-card .gline { display:flex; align-items:baseline; gap:8px; }
.goal-card .gline + .gline { margin-top:4px; }
.goal-card .gl { color:var(--sub); font-size:11px; flex:0 0 auto; white-space:nowrap; }
.goal-card .gv { flex:1 1 auto; min-width:0; text-align:right; font-weight:700; font-size:15px;
                 font-variant-numeric:tabular-nums; white-space:nowrap; overflow:hidden; letter-spacing:-0.2px; }
.goal-card .gv-big { font-size:clamp(16px, 5.2vw, 22px); }
.goal-card .gv.accent { color:var(--accent); }
.goal-card .gp { flex:0 0 52px; text-align:right; color:var(--sub); font-size:11px; font-variant-numeric:tabular-nums; }
.goal-card .gp-on { color:var(--accent); font-weight:700; }
.goal-card .gbar { flex:1 1 auto; height:8px; border-radius:999px; background:var(--card2);
                   overflow:hidden; align-self:center; border:1px solid var(--line); }
.goal-card .gbar i { display:block; height:100%; background:var(--accent); border-radius:999px; }
/* 値の下の小さな％（営業日数・残り日数などのカード） */
.gpct { color:var(--sub); font-size:11px; text-align:right; line-height:1.15;
        font-variant-numeric:tabular-nums; margin-top:1px; }
.erow { display:flex; justify-content:space-between; align-items:center; padding:8px 0; border-bottom:1px solid var(--line); font-size:14px; }
.erow .ec { color:var(--sub); font-size:12px; }
.erow .ea { font-weight:600; }
.erow button { width:32px; height:32px; border-radius:8px; border:1px solid var(--line); background:var(--card2); color:var(--danger); }
.drow { display:flex; justify-content:space-between; padding:6px 0; border-bottom:1px solid var(--line); font-size:14px; }
/* タイムカードの人ごとの内訳＝最後の「支給額」（2026-08-25 ユーザー指定）。
   ★給与総額も太字なので、支給額は色を変えて最終行だと分かるようにする。 */
.drow.tm-net { border-bottom:0; padding-top:8px; font-size:16px; font-weight:700; color:var(--accent); }
.logo-prev { display:flex; align-items:center; gap:12px; margin-top:8px; }
.logo-prev img { max-width:120px; max-height:64px; background:#fff; border-radius:6px; padding:4px; }

/* ===== 打ち込み中のオーダー（カート）＝伝票入力を押すまで伝票に入らない ===== */
.card.cart { border:1px solid var(--accent); }
.cart-total { text-align:right; font-size:16px; font-weight:bold; padding:8px 0; }
.big-btn { width:100%; padding:16px; font-size:18px; }
.big-btn:disabled { opacity:.45; }
/* ===== オーダー修正 ===== */
#of-list .of-order { margin-top:10px; }
#of-list .of-order.is-cancelled { opacity:.55; }
#of-list .of-order.is-cancelled .bline span { text-decoration:line-through; }
.of-cancelled { color:var(--sub); font-size:13px; }
/* 伝票一覧カードの伝票番号 */
.tk-no { color:var(--sub); font-size:12px; margin-top:4px; }

/* ===== パスワード入力 ===== */
#pingate .sheet { max-width:340px; }
.pin-input { width:100%; padding:16px; font-size:32px; letter-spacing:14px; text-align:center; border:1px solid var(--line); border-radius:10px; background:var(--card2); color:var(--txt); font-family:inherit; }

/* ===== 押した感（ボタンのモーション） ===== */
button { transition: transform .08s ease, opacity .08s ease; }
button:active { transform: scale(.95); }
#botnav button:active { transform: scale(.92); }
/* ===== 下メニューの位置ズレ対策（2026-08-28 ユーザー報告「たまにバグる」）=====
   ★iOS Safari は position:fixed の要素が、ネイティブの確認ダイアログの後や
     アドレスバーの開閉で【ときどき本来と違う位置に取り残される】癖がある。
   ★専用のレイヤーに載せる（translateZ）と、この症状が出にくくなる。定番の対処。
   ⚠ transform を付けてよいのは【固定する要素そのもの】。先祖に付けると逆に fixed が壊れる。
   ⚠ 再現できていないので「たぶんこれ」の対処。直らなければ、下メニューを fixed をやめて
     画面全体を flex（縦）にして一番下に置く作りへ変える（そちらは確実だが影響が大きい）。 */
#botnav { transform: translateZ(0); -webkit-transform: translateZ(0); will-change: transform;
          padding-bottom: env(safe-area-inset-bottom); }
.mbtn:active, .tcard:active, .tcard-print:active { transform: scale(.95); }
button:disabled { transform:none; }

/* ===== 処理中の表示 ===== */
.busy { position:fixed; inset:0; z-index:60; background:rgba(0,0,0,.45); display:flex; align-items:center; justify-content:center; }
.busy-box { background:var(--card); border:1px solid var(--line); border-radius:14px; padding:22px 28px; text-align:center; color:var(--txt); font-size:16px; font-weight:700; min-width:200px; }
.busy-spin { width:34px; height:34px; margin:0 auto 12px; border:4px solid var(--line); border-top-color:var(--accent); border-radius:50%; animation: busyspin .8s linear infinite; }
@keyframes busyspin { to { transform: rotate(360deg); } }

/* ===== メンバーリストから選ぶ ===== */
#memberpick .sheet { max-height:82vh; display:flex; flex-direction:column; }
#mp-search { width:100%; padding:12px; font-size:16px; border:1px solid var(--line); border-radius:8px; background:var(--card2); color:var(--txt); font-family:inherit; }
.mp-list { flex:1; overflow-y:auto; margin-top:10px; min-height:180px; max-height:52vh; }
.mp-row { display:flex; align-items:center; gap:10px; padding:11px 4px; border-bottom:1px solid var(--line); font-size:16px; }
.mp-row input { width:20px; height:20px; flex:0 0 auto; }
.mp-name { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mp-sub { color:var(--sub); font-size:12px; white-space:nowrap; }

/* ===== お客様用メニューページの構成エディタ ===== */
.mpb-row { display:flex; align-items:center; gap:8px; padding:8px 0; border-bottom:1px solid var(--line); }
.mpb-row .mini { flex:0 0 auto; width:40px; }

/* ===== お客様用メニューのQR ===== */
#storeName { cursor:pointer; }
.qr-wrap { display:flex; justify-content:center; padding:12px 0; }
.qr-wrap canvas { background:#fff; border-radius:8px; max-width:100%; height:auto; }
.qr-url { word-break:break-all; text-align:center; color:var(--sub); font-size:13px; padding:6px 0 12px; }
.menu-chk { display:flex; align-items:center; gap:6px; margin-top:8px; font-size:13px; color:var(--sub); white-space:nowrap; }
/* 全体の input は width:100% なので、チェックボックスだけ元に戻す（これが無いと文字が縦積みになる） */
.menu-chk input[type=checkbox] { width:18px; height:18px; flex:0 0 auto; padding:0; margin:0; }
.setedit-row .mi, .setedit-row .exm { flex:0 0 96px; }

/* ===== 紹介料（バック）の計算ルール ===== */
.bk-row { margin-bottom:8px; }
.bk-row .bmin { flex:1 1 90px; min-width:0; }
.bk-row .brate { flex:0 0 62px; min-width:0; }
.bk-row .bbase { flex:0 0 96px; min-width:0; }
.bk-u { flex:0 0 auto; color:var(--sub); font-size:12px; white-space:nowrap; }
.bk-preview { background:var(--card2); border:1px solid var(--line); border-radius:10px; padding:10px 12px; margin-top:6px; }
.bkp-row { display:flex; justify-content:space-between; gap:12px; padding:5px 0; font-size:14px; border-bottom:1px dashed var(--line); }
.bkp-row:last-child { border-bottom:0; }
.bkp-row span:last-child { white-space:nowrap; }
.bkp-row.b { font-weight:700; font-size:16px; color:var(--accent); padding-top:8px; }
.bkp-row.ng { color:var(--danger); }

/* ===== スタッフ（個人別パスワード） ===== */
.whoami { font-size:13px; font-weight:700; color:var(--accent2); white-space:nowrap; padding:0 8px; }
.stf-row .snm { flex:1 1 90px; min-width:0; }
.stf-row .spin { flex:0 0 76px; min-width:0; text-align:center; letter-spacing:.18em; }
.stf-chk { display:flex; align-items:center; gap:4px; font-size:12px; color:var(--sub); white-space:nowrap; }
.stf-chk input[type=checkbox] { width:18px; height:18px; flex:0 0 auto; padding:0; margin:0; }
.stf-off { opacity:.5; }

/* ===== 画像（ロゴ・マスコット・店内写真） ===== */
.sub-head { margin-top:14px; }
.img-slot { display:flex; align-items:center; justify-content:center; min-height:96px; padding:8px;
  background:var(--card2); border:1px solid var(--line); border-radius:10px; margin-bottom:6px; overflow:hidden; }
.img-slot img { max-width:100%; max-height:150px; height:auto; object-fit:contain; }
.img-slot.sm { min-height:56px; width:84px; flex:0 0 84px; margin:0; padding:4px; }
.img-slot.sm img { max-height:52px; }
.img-none { color:var(--sub); font-size:13px; }
.photo-row { display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.photo-row .mini { flex:0 0 auto; width:40px; }
.photo-row .del-chg { flex:0 0 auto; width:40px; height:40px; border-radius:8px; border:1px solid var(--line); background:var(--card); color:var(--danger); }

/* ===== メニューの多言語欄 ===== */
.ml-row { background:var(--card2); opacity:.92; }
.ml-row .cat { flex:0 0 28px; font-size:11px; color:var(--sub); }
.ml-row input { flex:1; min-width:0; font-size:14px; }

/* ===== 店サイトのボタンの並び ===== */
.sl-row .sl-name { flex:1; min-width:0; font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sl-row .lt { flex:1; min-width:0; font-size:14px; }
.sl-row .mini { flex:0 0 auto; width:38px; }
.sl-row .del-chg { flex:0 0 auto; width:38px; height:40px; border-radius:8px; border:1px solid var(--line); background:var(--card); color:var(--danger); }
.sl-row .stf-chk { flex:0 0 auto; }

/* ===== 会計済み伝票のロック ===== */
.closed-lock { border-color:var(--accent); background:var(--card2); }
.cl-head { font-size:15px; font-weight:700; color:var(--accent); margin-bottom:6px; }
#page-register input:disabled, #page-register select:disabled,
#page-register textarea:disabled, #page-register button:disabled { opacity:.45; }

/* ===== 月次の〆（A4・印刷してPDF保存）2026-08-09 =====
   画面ではふつうの全画面オーバーレイ。印刷のときだけ #pdf-paper の中身だけを紙に出す。
   ★紙は白・文字は黒で固定する（テーマが黒地でもインクを食わない・コピーしても読める）。 */
#pdfsheet { position:fixed; inset:0; z-index:60; background:var(--bg); overflow:auto; }
.pdf-bar { position:sticky; top:0; z-index:2; display:flex; gap:8px; padding:10px;
           background:var(--card); border-bottom:1px solid var(--line); }
.pdf-bar button { flex:1; }
.pdf-paper { max-width:820px; margin:12px auto; padding:22px 26px; background:#ffffff; color:#1a1a1a;
             border-radius:4px; box-shadow:0 2px 14px rgba(0,0,0,.25); font-size:13px; line-height:1.5; }
.pdf-paper * { color:inherit; }
.pdf-h1 { font-size:22px; font-weight:700; letter-spacing:.06em; margin:0; }
.pdf-sub { font-size:12px; color:#6b7280; margin:2px 0 0; }
.pdf-head { display:flex; justify-content:space-between; align-items:flex-end;
            border-bottom:2px solid #1a1a1a; padding-bottom:8px; margin-bottom:16px; }
.pdf-kpi { display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:16px; }
/* ★grid の子は既定で「中身より小さくならない」ので、金額が長いと紙ごと横にはみ出す。
   min-width:0 を入れて、狭い画面では縮んで折り返すようにする。 */
.pdf-kpi > div, .pdf-2col > div { min-width:0; }
.pdf-kpi div { border:1px solid #d8dce2; border-radius:6px; padding:8px 10px; }
.pdf-kpi b { display:block; font-size:18px; font-weight:700; }
.pdf-kpi span { font-size:10px; color:#6b7280; letter-spacing:.04em; }
.pdf-kpi .big { font-size:20px; }
.pdf-net { border:2px solid #1a1a1a !important; }
.pdf-sec { font-size:12px; font-weight:700; letter-spacing:.08em; color:#374151;
           border-bottom:1px solid #d8dce2; padding-bottom:4px; margin:16px 0 8px; }
.pdf-2col { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
table.pdf-t { width:100%; border-collapse:collapse; font-size:12px; }
table.pdf-t th, table.pdf-t td { padding:4px 6px; border-bottom:1px solid #e6e9ee; text-align:right; }
table.pdf-t th { font-size:10px; color:#6b7280; font-weight:600; border-bottom:1px solid #b8bec7; }
table.pdf-t th:first-child, table.pdf-t td:first-child { text-align:left; }
table.pdf-t tr.sum td { font-weight:700; border-top:1.5px solid #1a1a1a; border-bottom:0; }
.pdf-foot { margin-top:18px; padding-top:8px; border-top:1px solid #d8dce2; font-size:10px; color:#6b7280; }
.pdf-empty { font-size:12px; color:#6b7280; padding:6px 0; }

@media print {
  @page { size:A4 portrait; margin:12mm; }
  body { background:#fff !important; }
  body > *, #app { display:none !important; }
  #pdfsheet { display:block !important; position:static; overflow:visible; background:#fff; }
  .pdf-bar { display:none !important; }
  .pdf-paper { max-width:none; margin:0; padding:0; box-shadow:none; border-radius:0; }
  .pdf-sec, .pdf-kpi, table.pdf-t { break-inside:avoid; }
  tr { break-inside:avoid; }
}

/* ===== 見るのは誰でも／変えるのは管理者（2026-08-09）=====
   通常パスワードを廃止したので、変更する操作は画面からも隠す。
   ★これは押し間違いを防ぐための見た目で、実際の判定はサーバー側（worker.js）でしている。 */
body:not(.is-admin) [data-adminonly] { display:none !important; }
/* ★導入モード＝CSVの「読み込み」を出す隠しモード。URLに ?setup=1 を付けたときだけ出る。
   ホーム画面のアイコンは素のURLで開くので、普段の営業では絶対に出ない（2026-08-21）。 */
body:not(.is-setup) [data-setuponly] { display:none !important; }
#setup-bar { background:var(--danger); color:#fff; text-align:center; font-size:12px; padding:4px; font-weight:600; }
body.is-admin #menu-viewonly, body.is-admin #closed-adminonly { display:none; }
/* メニュー設定は「見えるが触れない」にする（何が登録されているかは見せたいため） */
body:not(.is-admin) #page-menu input,
body:not(.is-admin) #page-menu select,
body:not(.is-admin) #page-menu button { pointer-events:none; opacity:.45; }
/* 月次の〆：経費の大分類（太字の見出し行）とその下の摘要 */
table.pdf-t tr.gsum td { border-top:1px solid #b8bec7; }
table.pdf-t tr.gsub td { color:#5b636e; border-bottom:1px dotted #e6e9ee; }

/* ===== 月次の〆：スマホで見るとき（画面だけ・印刷には効かない）=====
   紙の幅(820px)のままだと、スマホでは右端の「収支」が切れて横スクロールになる。 */
@media screen and (max-width: 760px) {
  .pdf-paper { padding:16px 14px; margin:8px; font-size:12px; }
  .pdf-kpi { grid-template-columns:1fr 1fr; gap:6px; margin-bottom:12px; }
  .pdf-kpi b { font-size:16px; }
  .pdf-kpi .big { font-size:17px; }
  .pdf-kpi span { font-size:9px; }
  .pdf-2col { grid-template-columns:1fr; gap:0; }
  .pdf-h1 { font-size:18px; }
  table.pdf-t { font-size:11px; }
  table.pdf-t th, table.pdf-t td { padding:3px 4px; }
}
/* 金額は途中で折り返さない（¥17/5,000 のような無様な折れ方を防ぐ）。名前や摘要だけ折り返す。 */
table.pdf-t td + td, table.pdf-t th + th { white-space:nowrap; }
table.pdf-t td:first-child { word-break:break-word; }
#pdfsheet { overflow-x:hidden; }   /* 紙ごと横に動かさない */

/* サイン写真の「見る」ボタン：管理として入っていないときは押せない見た目にする */
.sign-view:disabled { opacity:.4; cursor:not-allowed; }

/* サイン写真の拡大表示（画面に重ねる） */
#sign-viewer { position:fixed; inset:0; z-index:9999; background:#000; padding:12px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; }
#sign-viewer.hidden { display:none; }
#sign-viewer-body { flex:1; width:100%; min-height:0; display:flex; align-items:center;
  justify-content:center; overflow:auto; color:#eee; text-align:center; line-height:1.7; }
#sign-viewer-body img { max-width:100%; max-height:100%; object-fit:contain; }
#sign-viewer-close { margin-top:12px; width:100%; max-width:420px; padding:14px; font-size:17px; }

/* アコーディオン：見出しを押すと中身を開閉する（項目が多い画面用・2026-08-18） */
.acc > .acc-head { cursor:pointer; user-select:none; }
.acc > .acc-head::after { content:'▾'; margin-left:8px; opacity:.55; font-size:13px; }
.acc.collapsed > .acc-head::after { content:'▸'; }
.acc.collapsed > *:not(.acc-head) { display:none !important; }

/* 閉じているアコーディオンを2列のタイルに並べる（2026-08-18）
   ・閉じたタイルだけ2列。開いたものは横いっぱいに広がって中身を出す
   ・題名は2行まで折り返し、タイルの高さを揃える */
.page-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; align-items:start; }
.page-grid > * { grid-column:1 / -1; }
.page-grid > .card { margin-bottom:0; }
.page-grid > .acc.collapsed { grid-column:auto; }
.page-grid > .acc.collapsed:not(.card) { border:1px solid var(--line); border-radius:10px; padding:10px; }
.page-grid > .acc.collapsed > .acc-head {
  flex-wrap:wrap; align-items:flex-start; font-size:13px; line-height:1.35;
  min-height:2.7em; margin:0; word-break:break-word;
}
.page-grid > .acc.collapsed > .acc-head > span { white-space:normal; }
.page-grid > .acc.collapsed > .acc-head::after { margin-left:auto; }

/* カテゴリ設定の1行（名前／🔒／編集／削除／↑／↓）2026-08-18 */
.mc-row { display:flex; align-items:center; gap:5px; margin-bottom:6px; }
.mc-row .nm { flex:1; font-size:14px; word-break:break-word; }
.mc-row .lk { display:flex; align-items:center; gap:2px; font-size:14px; }
.mc-row .lk input { width:18px; height:18px; }
.mc-row button { padding:8px 9px; font-size:12px; border-radius:8px; border:1px solid var(--line); background:var(--card2); color:var(--txt); }
.mc-row button.del { color:var(--danger); }
/* カテゴリ削除の確認（画面の中に出す。ブラウザのダイアログに頼らない） */
.mc-row.mc-ask { background:var(--card2); border:1px solid var(--danger); border-radius:8px; padding:6px 8px; }
.mc-row.mc-ask .nm { font-size:13px; }
.medit button.mv { width:32px; color:var(--txt); }
/* カテゴリー追加／編集：選択中のボタンに色を付ける */
#mc-add.on, #mc-edit.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
/* 自分のタイムカード／売上の一覧（2026-08-18） */
.tcv-head, .tcv { display:grid; grid-template-columns:1.3fr 1fr 1fr .8fr 1.2fr; gap:4px; font-size:12px; padding:5px 0; border-bottom:1px solid var(--line); }
.tcv-head { color:var(--sub); font-size:11px; }
.tcv span:not(:first-child), .tcv-head span:not(:first-child) { text-align:right; }
.tcv.v3, .tcv-head.v3 { grid-template-columns:1.4fr 1fr 1.4fr; }
/* 紹介料のまとめ計上の一覧（2026-08-28）。日付・顧客名・紹介者・金額の4列。
   ⚠ `.v4` は #me-sales の中だけの指定なのでここでは使えない（使うと5列の既定に落ちる）。 */
#ref-todo .tcv, #ref-todo .tcv-head { grid-template-columns:0.9fr 1.2fr 1.2fr 0.9fr; }
/* 集計→紹介料の「この月の紹介の伝票」も同じ4列（日付・顧客名・紹介者・紹介料）2026-08-28 */
/* 6列：日付／顧客名／紹介者／金額／📒／📸（2026-08-28）。ボタン2つは固定幅で細く */
#dash-ref-list .tcv, #dash-ref-list .tcv-head { grid-template-columns:0.85fr 1.1fr 1.1fr 0.9fr 26px 30px; align-items:center; }
/* 自分の今月の「売上」＝日付・顧客名・人数・売上の4カラム（2026-08-25 ユーザー指定）
   ⚠ 素の 1fr だと列の最小幅が中身の幅になり、長い顧客名で横にはみ出す。必ず minmax(0,1fr)。 */
#me-sales .tcv-head.v4, #me-sales .tcv.v4 {
  grid-template-columns:minmax(0,1.2fr) minmax(0,1.7fr) minmax(0,.8fr) minmax(0,1.3fr);
}
/* ⚠ 見出しと値の両方に .cn を付けて寄せを揃える（2026-08-25 実測でズレていた）。
   .tcv-head span:not(:first-child) が右寄せなので、見出しだけ右・名前だけ左になっていた。 */
#me-sales .tcv .cn, #me-sales .tcv-head .cn { text-align:left; }
#me-sales .tcv .cn { color:var(--txt);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
/* 売上月報のスタッフ＝支給予定額。桁が多いときは自動で縮める（2026-08-25）
   ⚠ 以前は HTML に style="font-size:18px" を直書きしていたので、この自動縮小が効かなかった。 */
.mcard .val.staff-net { font-size:18px; flex:0 0 auto; }
/* ⚠ flex:0 0 auto が肝（2026-08-25 実測）。これが無いと金額側が縮められて
   6桁でも 要90px／枠85px で切れた。金額は縮ませず、左のラベルを折り返させる。 */
.mcard .val.staff-net.long { font-size:clamp(11px, 3.6vw, 15px); letter-spacing:-0.5px; }
.mcard .val.staff-net.xlong { font-size:clamp(10px, 3.2vw, 13px); letter-spacing:-0.6px; }
/* タイムカードの入口ボタン：選択中に色を付ける */
#tm-nav-roster.on, #tm-nav-help.on, #tm-nav-edit.on, #tm-nav-pay.on,
#pay-nav-base.on, #pay-nav-cast.on, #pay-nav-bonus.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
#sg-store.on,#sg-site.on,#sg-ref.on,#sg-detail.on,#eg-now.on,#eg-past.on,#eg-cat.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
/* 経費：種別ごとの見出し */
.exp-cat-h { display:flex; justify-content:space-between; align-items:center; color:var(--accent); font-size:13px; font-weight:600; margin:10px 0 4px; padding-bottom:3px; border-bottom:1px solid var(--line); }
.te-edit { background:var(--card2); border:1px solid var(--line); border-radius:8px; padding:8px; margin:-2px 0 8px; }
#te-today.on, #te-day.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
#dg-rep.on,#dg-pay.on,#dg-ref.on,#dg-sum.on,#dg-year.on,#dg-report.on,#dg-cash.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
/* メンバーリストの並び替えボタン（2026-08-25）。押している1つだけ色が付く。 */
/* 契約していない機能は下ナビから消す（2026-08-28）。
   ⚠ .hidden を使うと paintNav の出し分けと喧嘩するので専用クラスにした。 */
#botnav button.feat-off { display:none !important; }

/* 担当で絞り込む（2026-08-28）。選んでいる間だけ色が付く。 */
#c-staff-filter.on { border-color:var(--accent); color:var(--accent); font-weight:700; }

/* メンバーリストの並び替えは4つ（2026-08-28 誕生日を追加）。
   ⚠ 素の 1fr だと列の最小幅が文字幅になり、375px で横にはみ出す。必ず minmax(0,1fr)。 */
.cust-sort { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:6px; }
.cust-sort .mini { padding:6px 2px; font-size:11px; white-space:nowrap;
                   overflow:hidden; text-overflow:ellipsis; }
#cs-last.on,#cs-visits.on,#cs-spend.on,#cs-bday.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }
/* ログイン／ログアウトは細く */
button.slim { padding:7px 10px; font-size:13px; min-height:0; line-height:1.2; }
#tm-nav-dpay.on { background:var(--accent2); border-color:var(--accent2); color:#fff; font-weight:600; }

/* ===== 勤怠編集のカレンダー（2026-08-28 ユーザー指定）=====
   ★日を押すだけでその日の出勤が下に開く。管理者だけの画面。
   ⚠ 7列。狭い画面でも1マスが押せる大きさ（44px前後）を確保する。 */
.te-cal-head { display:flex; align-items:center; justify-content:space-between; gap:6px; margin-bottom:6px; }
.te-cal-head #te-cal-title { font-weight:700; font-size:15px; }
#te-cal { display:grid; grid-template-columns:repeat(7, 1fr); gap:3px; }
.te-cal-w { text-align:center; font-size:11px; color:var(--sub); padding:2px 0; }
.te-cal-c { min-height:42px; border:1px solid var(--line); border-radius:8px; background:var(--card2);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; cursor:pointer; }
.te-cal-c .d { font-size:13px; }
.te-cal-c .n { font-size:10px; color:var(--sub); white-space:nowrap; }
.te-cal-c.has { background:var(--card); border-color:var(--accent2); }
.te-cal-c.has .n { color:var(--txt); }
.te-cal-c.today { font-weight:700; }
.te-cal-c.on { border-color:var(--accent); border-width:2px; }
.te-cal-c.te-cal-empty { border:0; background:transparent; cursor:default; min-height:0; }
/* よく使う時刻のボタン。⚠ 押しても入れるだけ（確定するまで保存しない） */
.te-qrow { display:flex; flex-wrap:wrap; align-items:center; gap:5px; margin-top:6px; }
.te-q { padding:3px 8px; border:1px solid var(--line); border-radius:6px; background:var(--card);
  color:var(--txt); font-size:12px; min-height:0; }
