/* 餐飲營運（櫃檯結帳、出餐看板、訂位、估清、查單、日結）共用樣式：/admin 與平板 POS（pos.emoji.tw）都載入。
   依賴 /style.css 的 CIS token（--ink/--paper/--line…）與宿主頁的 .btn/.pill/.a-sec/.a-tbl 基礎樣式。
   版面原則：一條右對齊線（金額、操作鍵都靠右）、主動作獨佔一列、破壞性動作紅字、狀態用語意色。 */

/* 語意色 token（只給營運畫面；CIS 的 --ink／--paper／--line／--accent 在 /style.css）：紅＝破壞性／異常、綠＝完成／帳對、琥珀＝進行中／提醒。
   規格籤的溫度／糖度／冰塊／飯量／麵量是分類色票，不是語意色，維持各自色碼 */
:root{--danger:#b42318;--danger-line:#f3c6c0;--danger-soft:#fff5f3;--danger-faint:#fff9f8;--ok:#1b5e2a;--ok-line:#bfe3c6;--ok-soft:#eaf7ec;--ok-faint:#f2fbf4;--warn:#d59f00;--warn-ink:#7a5a00;--warn-line:#f1dc9a;--warn-soft:#fff6dc;--warn-faint:#fff8e6}
/* 觸控目標：獨立按鈕／膠囊／輸入框 48px，表格列內與頂欄的小鍵最少 44px（Apple HIG 44pt），不再出現更小的 */

/* ── 共用：按鈕尺寸、紅字按鈕、勾選框、區塊標題 ── */
.btn-xs{min-height:44px;padding:4px 12px}
.btn.btn--danger{color:var(--danger);border-color:var(--danger-line)}.btn.btn--danger:active{background:var(--danger-soft)}
/* 破壞性主鍵（清桌、刪除、停用）：實心紅，只在確認對話框用 */
.btn.btn--solid.btn--danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn.btn--solid.btn--danger:active{filter:brightness(.85)}
/* 宿主頁的 .pill 排在本檔之後，異常狀態要用複合選擇器才蓋得過 */
.pill.pill-bad{color:var(--danger);border-color:var(--danger-line);background:var(--danger-soft)}.pill.pill-bad::before{background:var(--danger);opacity:1}
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body) input[type=checkbox]{accent-color:var(--ink)}
.pos-tables h2,.pos-panel h2{font-size:1.25rem}
:is(#pos-body,#sales-body,#history-body,#shifts-body,#att-body,#clock-body,#staff-body) h3{margin:24px 0 10px;padding-top:18px;border-top:1px solid var(--line);font-size:1.05rem}
/* 狀態色：綠＝完成／可取／帳對、琥珀＝進行中、灰＝閒置、紅＝異常（只在營運畫面內，不動 /admin 其他分頁） */
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body,#staff-body) .pill-ok{background:var(--ok-soft);border-color:var(--ok-line);color:var(--ok)}
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body,#staff-body) .pill-ok::before{background:var(--ok);opacity:1}
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body,#staff-body) .pill-wait{background:var(--warn-soft);border-color:var(--warn-line);color:var(--warn-ink)}
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body,#staff-body) .pill-wait::before{background:var(--warn);opacity:1}
:is(#pos-body,#orders-body,#history-body,#sales-body,#resv-body,#shifts-body,#att-body,#clock-body,#staff-body) .pill-draft{color:var(--muted)}
/* 表格：操作欄靠右、寬度剛好一行放下三顆（收據明細／出餐單／作廢），列高才一致 */
.a-tbl td.ops-actions{width:1%;min-width:270px;text-align:right;line-height:1}.a-tbl th.ops-th{text-align:right}
.a-tbl td.ops-actions .ops-btns{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.a-tbl td.ops-actions .btn{margin:0;flex:0 0 auto;padding-left:14px;padding-right:14px}
.pos-lines td.ops-actions{min-width:200px}
.a-tbl td.ops-pay .inv-fix{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;margin-top:4px}.a-tbl td.ops-pay .btn-xs{min-height:44px;padding:2px 10px}
.a-tbl td.ops-item{min-width:12em}.a-tbl td.ops-pay{min-width:13em}.a-tbl td.ops-item .hint,.a-tbl td.ops-pay .hint{white-space:nowrap}
tr.resv-off td{color:var(--muted)}tr.resv-off .btn{opacity:.75}
.resv-internal{display:inline-block;padding:0 6px;border-radius:4px;background:#FFF1C2;color:#6B4E00;font-weight:600;line-height:1.5;overflow-wrap:anywhere}.pos-table.on .resv-internal{background:#FFDE34;color:#1a1a1a}.resv-tbl td:nth-child(3){min-width:10em}.resv-tbl .resv-internal{margin-top:4px}
/* 出餐看板：已取消的品項劃線、灰階，不再搶走視覺焦點 */
.line-cancelled{text-decoration:line-through;color:var(--muted)}
/* 部分出餐：同一張送單裡已出的那幾道劃線，沒出的照常顯示並留「出餐」鍵 */
.line-served{text-decoration:line-through;color:var(--muted)}

/* ── 桌況格 ── */
.pos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.pos-table{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:6px;min-height:92px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:1rem;color:var(--ink)}
.pos-table b{font-size:1.375rem;line-height:1.1}.pos-table small{font-size:1rem;color:var(--muted)}
.pos-table.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}.pos-table.on small{color:rgba(255,255,255,.75)}
.pos-table:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.pos-table.takeout{background:var(--paper-alt)}.pos-table.takeout.on{background:var(--ink)}
.pos-table.empty{border-style:dashed;background:transparent;color:var(--muted)}.pos-table.empty b{color:var(--ink)}
.pos-table.reserved{border-style:solid;border-color:var(--ink)}.pos-table .pos-resv{color:var(--ink);line-height:1.3;overflow-wrap:anywhere}.pos-table .pos-resv-tag{display:inline-block;padding:0 6px;border:1px solid currentColor;border-radius:999px;font-size:1rem;line-height:1.4}.pos-table.on .pos-resv{color:var(--paper)}
/* 客人手機按「通知櫃檯我要結帳」：桌況格標黃、桌號畫面列成一顆顆按鈕，一點就把那幾項勾好 */
.pos-table.payreq{border-color:var(--warn-line);background:var(--warn-soft)}.pos-table.payreq.on{background:var(--ink)}.pos-table .pos-payreq-tag{color:var(--warn-ink);font-weight:600;overflow-wrap:anywhere}.pos-table.on .pos-payreq-tag{color:var(--warn-line)}
.pos-payreqs{display:flex;flex-direction:column;gap:8px;margin:10px 0}.pos-payreq{display:flex;align-items:center;gap:8px}.pos-payreq.on .pos-payreq-apply{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.pos-payreq-apply{all:unset;box-sizing:border-box;cursor:pointer;flex:1;display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;min-height:52px;padding:10px 14px;border:1px solid var(--warn-line);border-radius:10px;background:var(--warn-soft);font-size:1rem;color:var(--ink)}.pos-payreq-apply b{font-size:1.15em}.pos-payreq-apply small{margin-left:auto;color:var(--muted)}.pos-payreq-apply:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.pos-panel h2{flex-wrap:wrap}
/* 桌況在左、這桌的帳在右：平板橫式（≥1000px，iPad 10 吋起）就啟用，左欄佔 34%（桌況 2–3 欄），右欄吃剩下全部；直式／窄螢幕上下排、各自滿版 */
.pos-layout{display:grid;gap:16px;align-items:start}
.pos-layout>*{min-width:0}
@media(min-width:1000px){.pos-layout.has-panel{grid-template-columns:minmax(280px,30%) minmax(0,1fr)}.pos-layout.has-panel .pos-grid{grid-template-columns:repeat(auto-fill,minmax(124px,1fr))}}
/* 直向平板／手機：選桌後只看帳單，桌況格收起來；「← 桌況」回到格子。橫向雙欄時這顆鍵藏起來。 */
.btn.pos-back{display:none;min-height:48px;padding:6px 12px;margin-right:6px;flex:none}
@media(max-width:999px){.pos-layout.has-panel .pos-tables{display:none}.btn.pos-back{display:inline-flex}}
/* 兩欄模式的右欄只有 600–900px：表格一律用緊湊欄距（不管視窗多寬），避免橫捲 */
.pos-layout.has-panel .pos-panel .a-tbl th,.pos-layout.has-panel .pos-panel .a-tbl td{padding-left:8px;padding-right:8px}
.pos-layout.has-panel .pos-panel .a-tbl td.ops-item{min-width:9em}.pos-layout.has-panel .pos-panel .a-tbl td.ops-pay{min-width:8em}
.pos-layout.has-panel .pos-panel .a-tbl td.ops-pay .inv-fix{flex-wrap:wrap;white-space:normal}.pos-layout.has-panel .pos-panel .a-tbl td.ops-pay .inv-fix .btn-xs{flex-basis:100%;justify-content:flex-start;padding-left:0}
.pos-layout.has-panel .pos-panel .a-tbl td.ops-actions{min-width:216px;padding-left:6px}.pos-layout.has-panel .pos-panel .a-tbl td.ops-actions .btn{padding-left:10px;padding-right:10px}
.pos-layout.has-panel .pos-panel .pos-lines td.ops-actions{min-width:180px}
/* 這桌已結帳的單：四欄（品項＋時間＋狀態合一格），品項格吃剩餘寬 */
.pos-paid td.ops-item{min-width:0;width:auto}.pos-paid td.ops-item b{font-weight:500}.pos-paid td.ops-item .pill{vertical-align:middle}
/* 櫃檯開桌／外帶：桌號輸入＋兩顆鍵同一列 */
.pos-open{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:16px 0 0}
.pos-open input{flex:1 1 110px;min-width:0;font:inherit;font-size:1rem;min-height:48px;padding:8px 12px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink);text-transform:uppercase}
.pos-open .btn{min-height:48px;padding:10px 14px}

/* ── 未結帳品項：數量 ± 大鍵置中、贈送列淡綠 ── */
.pos-lines th:first-child,.pos-lines td:first-child{width:1%}
.pos-lines th.pos-qty-col,.pos-lines td.pos-qty-col{text-align:center;width:1%;white-space:nowrap}
.pos-qty{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:999px;background:var(--card)}
.pos-qty button{all:unset;cursor:pointer;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;font-size:1.375rem;line-height:1;color:var(--ink);border-radius:999px}
.pos-qty button:active{background:var(--paper-alt)}.pos-qty button:focus-visible{outline:2px solid var(--ink)}
.pos-qty b{min-width:2ch;text-align:center;font-size:1.1rem;font-variant-numeric:tabular-nums}
tr.pos-comp td{background:var(--ok-faint)}
.pos-panel input[data-pick]{width:24px;height:24px;cursor:pointer}

/* ── 加點：分類籤 ＋ 菜單磁貼 ── */
.pos-menu-box{margin-top:14px}.pos-menu-box summary{list-style:none;display:inline-flex;cursor:pointer;min-height:48px;align-items:center}.pos-menu-box summary::-webkit-details-marker{display:none}.pos-menu-box[open] summary{margin-bottom:10px}
.pos-cats{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.pos-cats button{all:unset;box-sizing:border-box;cursor:pointer;display:inline-flex;align-items:center;min-height:48px;padding:0 16px;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:1rem;color:var(--ink)}
.pos-cats button[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.pos-cats button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.pos-menu{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
.pos-item{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:4px;min-height:76px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);font-size:1rem}
.pos-item b{font-weight:600;line-height:1.3}.pos-item span{color:var(--muted);font-variant-numeric:tabular-nums}.pos-item small{color:var(--danger)}
.pos-item.off{background:var(--paper-alt);border-style:dashed}.pos-item:active{background:var(--paper-alt)}.pos-item:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
.pos-add{margin-top:10px}

/* ── 付款區：付款方式 → 金額卡（小計／會員價／折扣／應收／現金找零）→ 發票（收合）→ 收款 ── */
.pos-pay{display:grid;gap:14px;margin-top:16px;padding-top:16px;border-top:1px dashed var(--line)}
.pos-methods{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:8px}
.pos-method{position:relative}.pos-method input{position:absolute;opacity:0;inset:0;margin:0}.pos-method span{display:flex;align-items:center;justify-content:center;min-height:56px;padding:0 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:1rem;cursor:pointer;text-align:center;width:100%}
.pos-method input:checked+span{background:var(--ink);color:var(--paper);border-color:var(--ink)}.pos-method input:focus-visible+span{outline:2px solid var(--ink);outline-offset:2px}
.pos-sum{width:100%;border:1px solid var(--line);border-radius:10px;background:var(--paper-alt);overflow:hidden;font-size:1rem;font-variant-numeric:tabular-nums}
.pos-sum>div{display:flex;justify-content:space-between;align-items:center;gap:12px;min-height:54px;padding:4px 14px}
.pos-sum>div+div{border-top:1px solid var(--line)}
.pos-sum>div>span:first-child{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
.pos-member{display:inline-flex;align-items:center;gap:.5em;font-size:1rem;cursor:pointer}.pos-member input{width:22px;height:22px}
.pos-sum .pos-discount-form{display:flex;flex-wrap:wrap;gap:8px;padding:10px 14px;background:var(--card)}
.pos-discount-form select,.pos-discount-form input{min-height:48px;font:inherit;font-size:1rem;padding:8px 10px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink)}
.pos-discount-form #pos-disc-value{width:90px}.pos-discount-form #pos-disc-reason{flex:1;min-width:160px}
/* 應收：白底、粗頂線、最大字；黑色留給「收款」鍵 */
.pos-sum .pos-total{background:var(--card);min-height:68px;padding:8px 14px;border-top:2px solid var(--ink);font-weight:600}
.pos-total b{font-size:2rem;font-variant-numeric:tabular-nums;line-height:1.1}
/* 現金：實收＋快速面額（等寬）一列；找零獨立一列、右對齊跟應收同一條線 */
.pos-sum .pos-cash{justify-content:flex-start;flex-wrap:wrap;gap:10px 14px;padding:10px 14px;background:var(--card)}
.pos-cash label{display:inline-flex;align-items:center;gap:10px;font-size:1rem}.pos-cash input{width:150px;min-height:48px;font:inherit;font-size:1.2rem;padding:8px 12px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink);font-variant-numeric:tabular-nums}
.pos-cash-quick{display:flex;flex:1 1 240px;gap:8px}.pos-cash-quick button{all:unset;box-sizing:border-box;cursor:pointer;flex:1 1 0;min-height:48px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:1rem;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.pos-cash-quick button:active{background:var(--paper-alt)}.pos-cash-quick button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.pos-sum .pos-change{background:var(--ok-soft);min-height:68px}.pos-sum .pos-change b{font-size:2rem;font-weight:700;font-variant-numeric:tabular-nums}.pos-sum .pos-change.has b{color:var(--ok)}
.pos-sum-aa{flex-wrap:wrap}.pos-sum-aa>span:last-child{display:inline-flex;align-items:center;gap:8px}
.pos-sum-member{flex-wrap:wrap;align-items:center}.pos-sum-member label{display:flex;flex:1 1 220px;align-items:center;gap:8px;min-width:0}.pos-sum-member input[type=tel],.pos-sum-member #pos-yan-phone{flex:1;min-width:0;min-height:48px;font:inherit;font-size:1rem;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink)}.pos-sum-member #pos-yan-lookup{flex:none}
/* 發票：預設收起只有一行，展開才有底色 */
.pos-invoice{width:100%;border-top:1px solid var(--line)}
.pos-invoice-head{min-height:48px;display:flex;align-items:center;gap:8px}.pos-invoice-head b{font-size:1rem;font-weight:500}
.pos-invoice-head .pos-inv-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:999px;background:var(--ink);color:var(--paper);font-size:1rem;font-weight:500}.pos-invoice-head .pos-inv-badge[data-off="1"]{background:var(--warn-soft);color:var(--warn-ink);border:1px solid var(--warn-line)}
.pos-inv-warn{font-size:1rem;color:var(--warn-ink)}
.pos-ubn-result{font-size:1rem;margin-top:.4rem;min-height:1.2em}.pos-ubn-result[data-state=ok]{color:var(--ok-ink,#1b6b3a);font-weight:700}.pos-ubn-result[data-state=warn]{color:var(--warn-ink)}
.pos-invoice-body{display:grid;gap:12px;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--card);margin-bottom:8px}
.pos-invoice-types{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.pos-invoice-types label{position:relative;display:block}.pos-invoice-types input{position:absolute;opacity:0;inset:0}.pos-invoice-types span{display:flex;align-items:center;justify-content:center;text-align:center;min-height:48px;padding:0 8px;border:1px solid var(--line);border-radius:10px;background:var(--paper-alt);font-size:1rem;cursor:pointer}.pos-invoice-types input:checked+span{background:var(--ink);color:var(--paper);border-color:var(--ink);font-weight:600}.pos-invoice-types input[value=""]:checked+span{background:var(--warn-soft);color:var(--warn-ink);border-color:var(--warn-line)}.pos-invoice-types input:focus-visible+span{outline:2px solid var(--ink);outline-offset:2px}
.pos-invoice-fields{display:grid;grid-template-columns:1fr 1fr;gap:8px}.pos-invoice-fields .pos-inv-row{min-width:0}.pos-invoice-fields .pos-inv-row:has(input[name=buyer_ubn],input[name=carrier_num],input[name=love_code]),.pos-invoice-fields .pos-inv-row:has(input[name=comment]),.pos-invoice-fields .pos-inv-row:has(.pos-inv-scan-row){grid-column:1/-1}.pos-invoice-fields input{width:100%;box-sizing:border-box;min-height:48px;font:inherit;font-size:1rem;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--ink)}.pos-invoice-fields input:focus{outline:2px solid var(--ink);outline-offset:1px}.pos-invoice-fields input[name=buyer_ubn],.pos-invoice-fields input[name=carrier_num],.pos-invoice-fields input[name=love_code]{border-color:var(--ink);font-size:1.125rem}
@media(max-width:520px){.pos-invoice-fields{grid-template-columns:1fr}}
/* 發票欄位：點選對應類型才出現那一格；手機載具多一顆相機掃描鍵 */
.pos-inv-row[hidden]{display:none}
.pos-inv-scan-row{display:flex;gap:6px;align-items:center}.pos-inv-scan-row input{flex:1;min-width:0}.pos-inv-scan-row #pos-invoice-scan{flex:none;min-height:48px}
#pos-invoice-video,#pos-carrier-video{display:none;width:100%;max-width:320px;border-radius:8px;margin-top:6px}.pos-move-box .pos-inv-scan-row input{min-height:48px;font-size:1.125rem;padding:0 10px}.pos-move-box .pos-inv-scan-row #pos-carrier-scan{flex:none;min-height:48px}
/* 收款獨佔一列最大；換桌／清桌縮小放下面 */
/* 動作列一排：列印類靠左，換桌／清桌靠右；窄螢幕才換行 */
.pos-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;width:100%}
.pos-actions-sub{display:flex;flex-wrap:wrap;gap:10px}.pos-actions-sub .btn{min-height:48px}
.pos-actions-end{margin-left:auto}
/* 結帳面板高度固定（符合平板操作，不隨品項數伸縮）；內容自己捲，收款列釘在底部。 */
/* 帳單面板自己捲：收款列 sticky 在面板底，第一屏就能按。直向選桌後面板吃滿可視高度。 */
.pos-layout.has-panel .pos-panel{display:flex;flex-direction:column;height:calc(100dvh - var(--p-top,60px) - 48px);overflow:hidden;padding-bottom:0;margin-bottom:0}
/* 48px = main 上下留白 16+32；.a-sec 預設 margin-bottom:14px 會讓整頁多出 14px 可捲，所以固定高度的兩欄外距歸零。 */
@media(max-width:999px){.pos-layout.has-panel .pos-panel{height:calc(100dvh - 13rem)}}
/* 桌況區同樣固定高度：桌號格自己捲，外帶／開桌與工具列釘在底部。 */
@media(min-width:1000px){.pos-layout .pos-tables{display:flex;flex-direction:column;height:calc(100dvh - var(--p-top,60px) - 48px);overflow:hidden;margin-bottom:0}.pos-layout .pos-tables .ops-head,.pos-layout .pos-tables .pos-open,.pos-layout .pos-tables .pos-sub{flex:none}.pos-layout .pos-tables .pos-grid{flex:1;min-height:0;overflow:auto;align-content:start;padding-bottom:4px}}
.pos-panel-scroll{flex:1;min-height:0;overflow:auto}
.pos-dock{flex:none;position:sticky;bottom:0;z-index:12;display:flex;align-items:center;gap:12px;margin:12px 0 0;padding:10px 0 calc(6px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--line)}
.pos-dock-change,.pos-dock-due{display:flex;flex-direction:column;gap:0;min-width:7em;font-variant-numeric:tabular-nums}
.pos-dock-change span,.pos-dock-due span{font-size:1rem;color:var(--muted);line-height:1.2}
.pos-dock-change b,.pos-dock-due b{font-size:1.75rem;line-height:1.1;font-weight:700}
.pos-dock-change.has b{color:var(--ok)}
.pos-dock #pos-checkout{flex:1;min-height:64px;font-size:1.25rem;font-weight:600}

/* ── 開關帳：結帳頁一條狀態列（每品牌一顆晶片）；日結頁每品牌一張卡 ── */
.reg-bar{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.reg-chip{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px 10px;min-height:48px;padding:6px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:1rem}
.reg-chip.reg-closed{border-color:var(--danger-line);background:var(--danger-soft)}.reg-chip .reg-exp{color:var(--muted);font-variant-numeric:tabular-nums}
.reg-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,360px),1fr));gap:14px}
.reg-card{padding:14px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.reg-card.reg-closed{border-style:dashed;background:var(--paper-alt)}.reg-card.reg-done{opacity:.9}
.reg-card h4{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;font-size:1.1rem}
.reg-cash{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px;margin-bottom:12px}
.reg-cash>div{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}
.reg-cash span{font-size:1rem;color:var(--muted)}.reg-cash b{font-size:1.2rem;font-variant-numeric:tabular-nums}
.reg-cash .reg-expected{border-top:3px solid var(--ink)}.reg-cash .reg-expected b{font-size:1.4rem}
.reg-shift-list{list-style:none;margin:-4px 0 12px;padding:0;display:flex;flex-wrap:wrap;gap:6px 16px}.reg-shift-list li{font-size:1rem;font-variant-numeric:tabular-nums}
.reg-cash .reg-diff b,#reg-diff-show.reg-diff{color:var(--danger)}
/* 各帳戶確認表：數字欄不換行、欄間留白，核對鈕整顆不折行（手機 375px 也放得下） */
.reg-acct th,.reg-acct td{white-space:nowrap;padding-left:8px;padding-right:8px}.reg-acct td.num,.reg-acct th.num{font-variant-numeric:tabular-nums}.reg-acct .btn{white-space:nowrap;min-height:44px}.reg-acct tr.lp-diff td.num:nth-child(4){color:var(--danger);font-weight:700}
.reg-actions{justify-content:flex-end;margin-top:12px}.reg-actions .btn{min-height:48px}
.reg-cash-form{align-items:flex-end;margin-top:10px}.reg-cash-form select,.reg-cash-form input{min-height:48px;font-size:1rem}.reg-cash-form #reg-cash-amount{width:130px}.reg-cash-form #reg-cash-reason{flex:1 1 220px}
.a-tbl td.reg-move-acts{width:1%;white-space:nowrap;text-align:right}.a-tbl td.reg-move-acts .btn{margin:0 0 0 6px}.reg-move-editing td{background:#FFF7D6}.reg-cash-edit-hint{flex:1 1 100%;margin:0}
.reg-moves td:nth-child(2){white-space:nowrap}.reg-moves td.num{white-space:nowrap}
@media (max-width:600px){.reg-moves thead{display:none}.reg-moves tbody tr{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;align-items:start}.reg-moves tbody td{border-bottom:0}.reg-moves tbody tr+tr{border-top:1px solid #E4E0D6;padding-top:6px}.reg-moves tbody td.a-empty{grid-column:1/-1}.reg-moves tbody td.reg-move-acts{grid-column:1/-1;width:auto;text-align:right;border-top:0;padding-top:0}.reg-moves tbody td.reg-move-acts:empty{display:none}}
.reg-close-form,.reg-open-form{margin-top:12px;padding:12px;border:1px dashed var(--line);border-radius:10px;background:var(--paper-alt)}
.reg-close-form fieldset{min-width:0;margin:18px 0;padding:12px;border:1px solid var(--line);border-radius:10px}.reg-close-form legend{font-size:1rem;font-weight:700;padding:0 6px}.reg-close-form fieldset:disabled{opacity:.6}.reg-close-form fieldset>label{display:flex;align-items:center;gap:8px;min-height:48px;font-size:1rem}.reg-close-form input[type=checkbox]{width:24px;height:24px;flex:none}.reg-close-form [data-account-actual],.reg-close-form [data-account-reason],#reg-total-reason{max-width:100%;font-size:1rem;min-height:48px}.reg-close-form [hidden]{display:none!important}
.reg-bar+.reg-open-form{margin:0 0 12px;background:var(--card)}.reg-card .reg-open-form{margin-top:0;padding:0;border:0;background:none}
.reg-denoms{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;margin-bottom:10px}
.reg-denoms label{display:flex;flex-direction:column;gap:4px;font-size:1rem;color:var(--muted)}.reg-denoms input{min-height:48px;font-size:1.1rem;padding:6px 10px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink);font-variant-numeric:tabular-nums;width:100%}
.reg-close-form .a-form,.reg-open-form .a-form{align-items:flex-end}.reg-close-form #reg-counted,.reg-close-form #reg-keep,.reg-open-form #reg-open-total{width:150px;font-size:1.1rem}.reg-close-form .reg-note{flex:1 1 220px}
.reg-close-sum{display:flex;flex-wrap:wrap;gap:8px 24px;margin:10px 0;font-size:1rem}.reg-close-sum b{font-size:1.2rem;font-variant-numeric:tabular-nums}

/* ── 出餐看板、暫停點餐 ── */
/* 標題列：標題靠左、「操作說明」摺疊鍵靠右同一列；展開後說明文字落到下一列整寬 */
.ops-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 12px}.ops-head{flex-wrap:nowrap;gap:0 4px}.ops-head h2,.ops-head h3,.ops-head h4{margin:0;padding-top:0;border-top:0;flex:0 1 auto}
.tip-q{display:inline-grid;place-items:center;flex:none;min-width:44px;min-height:44px;margin:0 0 0 2px;padding:0;border:0;background:transparent;color:inherit;font:inherit;cursor:pointer;vertical-align:middle;position:relative}.tip-q:before{content:'?';display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:1rem;font-weight:700;line-height:1;font-family:system-ui,-apple-system,'Helvetica Neue',Arial,sans-serif}.tip-q[aria-expanded=true]:before{background:var(--paper);color:var(--ink);box-shadow:0 0 0 2px var(--ink) inset}.ops-head .tip-q{margin-right:auto}
.tip-pop{position:fixed;z-index:10000;box-sizing:border-box;max-height:min(70vh,520px);overflow:auto;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card,var(--paper));color:var(--ink);box-shadow:0 8px 24px rgba(20,18,16,.18);font-size:1rem;line-height:1.6;font-weight:400}.tip-pop b{font-weight:600}.tip-pop a{color:inherit;text-decoration:underline}
:is(#pos-body,#sales-body,#history-body,#shifts-body,#att-body,#clock-body,#staff-body) .ops-head{margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}:is(#pos-body,#sales-body,#history-body,#shifts-body,#att-body,#clock-body,#staff-body) .ops-head:first-child,:is(#pos-body,#sales-body,#history-body,#shifts-body,#att-body,#clock-body,#staff-body) .ops-head:has(h2){margin-top:0;padding-top:0;border-top:0}
/* 原本 :is(#…-body) h3 自帶上邊線＋上內距（ID 權重高），包進 .ops-head 後要用同權重蓋掉，否則標題會比說明鍵低一截、邊線只畫到標題寬 */
:is(#pos-body,#sales-body,#history-body,#shifts-body,#att-body,#clock-body,#staff-body) .ops-head h3{margin:0;padding-top:0;border-top:0}
.btn-xs,.a-tbl td.ops-actions .btn{white-space:nowrap}
.ops-pauses{display:grid;gap:8px;margin-bottom:14px}
.ops-pause{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--paper)}
.ops-pause.on{border-color:var(--danger);background:var(--danger-soft)}.ops-pause label{display:inline-flex;align-items:center;gap:.5em;font-size:1rem}.ops-pause label input{width:22px;height:22px}.ops-pause input[data-pause-msg]{flex:1;min-width:220px;min-height:48px;font-size:1rem}.ops-pause .pill{flex-basis:100%}
.a-tbl td.a-mono,.a-tbl .resv-id{white-space:nowrap}
/* 出餐看板品項：每道一個區塊（類別籤｜品名＋數量＋規格籤＋鍵），道與道之間虛線分隔；目標是現場一眼辨識、不做錯。
   類別欄用 auto 而非 max-content：直向平板（820px）表格放不下時膠囊可換行，不把整張表撐出橫向捲軸 */
.ops-lines{display:grid;gap:0}
.ops-line{display:grid;grid-template-columns:auto 1fr;gap:4px 8px;align-items:start;padding:7px 0;border-top:1px dashed var(--line)}
.ops-line:first-child{border-top:0;padding-top:0}.ops-line:last-child{padding-bottom:0}
.ops-cat{font-size:1rem;line-height:1.3;color:var(--muted);padding:2px 6px;border:1px solid var(--line);border-radius:999px;background:var(--paper);text-align:center;margin-top:2px}
.ops-line.done .ops-cat{opacity:.5}
.ops-line-body{min-width:0}
.ops-line-top{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.ops-name{font-size:1.15rem;font-weight:700;line-height:1.3}
.ops-line.done .ops-name{font-weight:400}
.ops-qty{font-size:1.15rem;font-weight:700;line-height:1.3;font-variant-numeric:tabular-nums}
.ops-qty.many{background:var(--ink);color:var(--paper);padding:0 8px;border-radius:6px}
.ops-line-btns{margin-left:auto;display:inline-flex;gap:6px}.ops-line-btns:empty{display:none}
.ops-specs{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.ops-spec{font-size:1rem;line-height:1.3;padding:2px 8px;border-radius:6px;border:1px solid var(--ink);color:var(--ink);font-weight:600;background:var(--card)}
.ops-spec-default{border-color:var(--line);color:var(--muted);font-weight:400}
.ops-spec-custom{border-color:var(--warn);background:var(--warn-soft);color:var(--warn-ink);font-weight:700}
/* 規格固定色碼：溫度紅、糖度黃、冰塊藍、飯量綠、麵量紫、自由需求琥珀；出餐時不必逐字讀標籤 */
.ops-spec-temperature{border-color:#e5a39a;background:#ffe7e2;color:#7f2d22}.ops-spec-sugar{border-color:#ddbd45;background:#fff3bd;color:#6f5300}.ops-spec-ice{border-color:#92c5e8;background:#e1f2ff;color:#155378}.ops-spec-rice{border-color:#9dc68d;background:#e6f4df;color:#315e27}.ops-spec-noodle{border-color:#b9a0dd;background:#f0e7ff;color:#563487}.ops-spec-serve{border-color:#e0a35c;background:#ffeedd;color:#7a3d00}
/* 類別籤維持單行；品名與規格可能來自菜單／自由備註，必須在卡片邊界換行，否則會被 .kds-card 的 overflow:hidden 裁掉。
   直向平板（≤1000px）類別籤改放品名上方，品名才有整行可用。 */
.ops-cat{white-space:nowrap}
.ops-name,.ops-spec{white-space:normal;overflow-wrap:anywhere;max-width:100%}
@media(max-width:1000px){.ops-line{grid-template-columns:1fr;gap:2px}.ops-cat{justify-self:start;margin-top:0}}
tr.ops-ready td{background:var(--ok-faint)}
tr.ops-placed td{background:var(--warn-faint)}
tr.resv-day td{background:var(--paper-alt);font-weight:600}
/* 櫃檯登記訂位：收合表單 */
.resv-add{margin-bottom:12px}.resv-add summary{list-style:none;display:inline-flex;cursor:pointer}.resv-add summary::-webkit-details-marker{display:none}.resv-add[open] summary{margin-bottom:10px}
.resv-add .a-form{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}
/* 訂位「今天」看板（KK 11/7） */
.resv-today{margin:0 0 16px;padding:14px;border:2px solid var(--ink);border-radius:12px;background:var(--paper)}
.resv-today .rt-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px}
.resv-today .rt-head h3{margin:0;font-size:1.25rem}
.resv-today .rt-sum{font-size:1.125rem}.resv-today .rt-sum b{font-size:1.5rem}
.resv-today .rt-stats{display:flex;flex-wrap:wrap;gap:4px 14px;margin:6px 0 0;color:var(--muted)}
.resv-today .rt-stats b{color:var(--ink)}.resv-today .rt-bad,.resv-today .rt-bad b{color:var(--danger)}.resv-today .rt-warn,.resv-today .rt-warn b{color:var(--warn)}.resv-today .rt-muted{opacity:.8}
.resv-today .rt-next{margin:10px 0 0;padding:8px 12px;border-radius:8px;background:var(--paper-alt);line-height:1.5}
.resv-today .rt-list{list-style:none;margin:10px 0 0;padding:0}
.resv-today .rt-item{display:grid;grid-template-columns:4.2em minmax(0,1fr) auto auto;align-items:center;gap:6px 12px;padding:10px 0;border-top:1px solid var(--line)}
.resv-today .rt-time{font-size:1.25rem;font-variant-numeric:tabular-nums}
.resv-today .rt-who{min-width:0;overflow-wrap:anywhere;line-height:1.45}
.resv-today .rt-note{color:var(--muted)}
.resv-today .rt-tbl{display:inline-block;padding:0 6px;border:1px solid var(--ink);border-radius:4px;font-weight:600}
.resv-today .rt-acts{display:flex;gap:6px;justify-content:flex-end}.resv-today .rt-acts .btn{min-height:44px;white-space:nowrap}
.resv-today .rt-eta{white-space:nowrap;color:var(--muted)}
.resv-today .rt-eta--soon,.resv-today .rt-eta--due{color:var(--warn);font-weight:600}
.resv-today .rt-eta--late,.resv-today .rt-eta--bad{color:var(--danger);font-weight:600}
.resv-today .rt-eta--ok{color:var(--ok);font-weight:600}
.resv-today .rt-item.is-next{background:var(--warn-soft);border-radius:8px;margin:0 -8px;padding-left:8px;padding-right:8px}
.resv-today .rt-arrived .rt-who,.resv-today .rt-arrived .rt-time,.resv-today .rt-no_show .rt-who,.resv-today .rt-no_show .rt-time{opacity:.6}
@media(max-width:600px){.resv-today .rt-item{grid-template-columns:3.6em minmax(0,1fr);grid-template-areas:"t w" "t e" "a a";align-items:start}.resv-today .rt-time{grid-area:t}.resv-today .rt-who{grid-area:w}.resv-today .rt-eta{grid-area:e;white-space:normal}.resv-today .rt-eta--none{display:none}.resv-today .rt-acts{grid-area:a;justify-content:stretch}.resv-today .rt-acts .btn{flex:1 1 0}}
.resv-actions{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
@media(max-width:600px){.resv-actions{flex-wrap:nowrap}.resv-actions .btn{flex:1 1 0;min-width:0;padding-left:10px;padding-right:10px;white-space:nowrap}.resv-act-sub{display:none}}
.resv-panel{margin:0 0 14px;padding:14px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}
.resv-panel .a-form{margin-bottom:0}
.resv-panel .rh-h:first-of-type{margin-top:0}
.rh-strip{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0 0 14px;padding:10px 12px;border:1px solid var(--danger-line);border-radius:10px;background:var(--danger-faint)}
.rh-strip-h{font-weight:600;color:var(--danger);white-space:nowrap}
.rh-strip .rh-dates{flex:1 1 0;min-width:0}
@media(max-width:600px){.rh-strip-h{flex-basis:100%}.rh-strip .rh-dates{flex-basis:100%}}
.rh-date.is-week{border-style:dashed}
.rh-date:not(.is-off){border-color:var(--line);background:var(--card)}.rh-date:not(.is-off)>button{color:var(--ink)}
.rh-h{display:flex;align-items:baseline;gap:8px;margin:14px 0 8px;font-weight:600}
.rh-h .hint{margin:0}
.rh-add{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px;margin:0 0 10px}
.rh-add label{font-size:1rem;color:var(--muted);display:flex;flex-direction:column;gap:4px}
.rh-add input[type=date]{font:inherit;font-size:1rem;padding:8px 12px;min-height:48px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink)}
.rh-add .btn{min-height:48px;align-self:flex-end}
.rh-dates{display:flex;flex-wrap:wrap;gap:8px}
.rh-date{display:inline-flex;align-items:stretch;border:1px solid var(--danger-line);border-radius:999px;background:var(--danger-soft);overflow:hidden}
.rh-date>button{all:unset;box-sizing:border-box;cursor:pointer;min-height:44px;padding:6px 12px;font:inherit;font-size:1rem;line-height:1.25;color:var(--danger)}
.rh-date .rh-x{padding:6px 12px 6px 8px;border-left:1px solid var(--danger-line);font-weight:700;color:var(--danger)}
.rh-weeks{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.rh-week{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:56px;padding:8px 4px;border:1px solid var(--line);border-radius:10px;background:var(--card);text-align:center}
.rh-week b{font-size:1rem;font-weight:600;line-height:1.2}
.rh-week small{font-size:1rem;color:var(--muted);line-height:1.2}
.rh-week.is-off{border-color:var(--danger-line);background:var(--danger-soft)}
.rh-week.is-off small{color:var(--danger);font-weight:500}
.rh-ov{align-items:center;background:rgba(20,18,16,.62)}
.rh-card{max-width:min(720px,100%);width:min(720px,100%);max-height:92dvh;display:flex;flex-direction:column;padding:0;overflow:hidden}
.rh-card-body{overflow:auto;padding:20px 20px 12px;flex:1 1 auto;min-height:0}
@media(max-width:420px){.rh-card-body{padding:16px 14px 10px}.rh-card-actions{padding:10px 14px 14px}}
.rh-card-title{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:0 0 6px}
.rh-card-title b{font-size:1.125rem}
.rh-legend{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:1rem}
.rh-legend i{width:16px;height:16px;border-radius:4px;border:1px solid var(--muted);background:var(--card);display:inline-block}
.rh-legend i.on{background:var(--danger);border-color:var(--danger)}
.rh-presets{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 14px}
.rh-presets .btn[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.rh-group{margin:0 0 14px}
.rh-group-h{display:flex;align-items:baseline;gap:8px;font-weight:600;margin:0 0 8px}
.rh-group-h span{font-weight:400;color:var(--muted)}
.rh-slots{display:grid;grid-template-columns:repeat(auto-fill,minmax(68px,1fr));gap:6px}
.rh-chip{all:unset;box-sizing:border-box;cursor:pointer;display:grid;place-items:center;min-height:44px;padding:6px 4px;border:1px solid var(--line);border-radius:10px;background:var(--card);font:inherit;font-size:1rem;font-variant-numeric:tabular-nums;text-align:center;color:var(--ink)}
.rh-chip[aria-pressed=true]{background:var(--danger);border-color:var(--danger);color:#fff;text-decoration:line-through}
.rh-card-actions{flex:none;display:flex;flex-wrap:wrap;gap:8px;padding:12px 20px 18px;border-top:1px solid var(--line)}
.rh-card-actions .btn{min-height:52px}
.rh-card-actions .btn--solid{flex:1 1 120px}
#resv-body .a-toolbar{align-items:center}
#resv-body .a-toolbar>label{display:flex;align-items:center;gap:8px;color:var(--muted)}
@media(max-width:720px){.rh-weeks{grid-template-columns:repeat(4,minmax(0,1fr))}.rh-ov{padding:0}.rh-card{max-width:100%;max-height:100dvh;border-radius:16px 16px 0 0}}
@media(max-width:420px){.rh-weeks{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ── 日結：KPI 五張一列（窄螢幕自動折）、第二行小字 ── */
.sales-kpis{grid-template-columns:repeat(auto-fit,minmax(min(100%,136px),1fr))}
.a-kpi .ks{color:var(--muted);font-size:1rem;margin-top:4px;line-height:1.35}
.lp-kpis .a-kpi.lp-diff{border-color:var(--danger);background:var(--danger-soft)}.lp-kpis .a-kpi.lp-diff .kv{color:var(--danger)}
tr.lp-refund td{color:var(--danger)}
.sales-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:16px 28px;margin-top:24px;padding-top:18px;border-top:1px solid var(--line)}
.sales-cols>div{display:flex;flex-direction:column}
/* 兩欄各自的標題不再各畫一條線（會變成左右兩段），改由 .sales-cols 畫一條貫通線；權重要壓過上面的 :is(#…) h3 */
:is(#pos-body,#sales-body) .sales-cols h3{margin-top:0;padding-top:0;border-top:0}
.sales-bars{flex:1;display:grid;align-content:space-evenly;gap:12px;padding:6px 0}.sales-bar{display:grid;grid-template-columns:6ch 1fr 9ch;gap:8px;align-items:center;font-size:1rem}.sales-bar i{display:block;height:36px;background:var(--ink);border-radius:4px;min-width:2px}

/* ── 估清：品項大格，點一下切換 ── */
.so-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin-bottom:18px}
.so-item{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;gap:4px;min-height:92px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--ink);font-size:1rem}
.so-item b{font-weight:600;line-height:1.3}.so-item span{color:var(--muted);font-variant-numeric:tabular-nums}.so-item small{margin-top:auto;font-size:1rem;color:var(--muted)}
.so-item.off{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}.so-item.off small{color:var(--danger)}
.so-item:focus-visible{outline:3px solid var(--ink);outline-offset:2px}
/* 估清格加圖片：上圖下字；沒圖用品名首字佔位（itemThumb） */
.so-item{padding:8px 8px 10px;min-height:0}
.so-item__img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:7px;background:var(--paper-alt);margin-bottom:4px}
.so-item__img--ph{display:flex;align-items:center;justify-content:center;font-size:1.8rem;font-weight:600;color:var(--muted)}
.so-item.off .so-item__img{filter:grayscale(1);opacity:.55}
.so-item.limited small{color:var(--ink);font-weight:600}
.so-item.low{border-color:#d9a400;background:#fff8dc}.so-item.low small{color:#8a5a00;font-weight:700}
.pos-item small.pos-item__left{color:#8a5a00;font-weight:600}
/* 份數設定框：數字鍵盤，站著單手按 */
.so-edit{width:min(420px,100%);max-height:calc(100dvh - 24px);overflow:auto}
.so-edit-head{display:flex;gap:12px;align-items:center;margin-bottom:10px}.so-edit-head h2{margin:0}
.so-edit__img{width:64px;height:64px;flex:none;object-fit:cover;border-radius:8px;background:var(--paper-alt)}
.so-edit__img--ph{display:flex;align-items:center;justify-content:center;font-size:1.6rem;font-weight:600;color:var(--muted)}
.so-edit-label{margin:4px 0 6px;font-weight:600;display:flex;flex-direction:column;gap:2px}
.so-edit-val{display:flex;align-items:baseline;justify-content:center;gap:6px;margin:4px 0 8px}.so-edit-val b{font-size:2.4rem;font-variant-numeric:tabular-nums;min-width:3ch;text-align:center}
.so-quick{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:8px}
.so-quick button,.so-pad button{all:unset;box-sizing:border-box;cursor:pointer;display:grid;place-items:center;min-height:52px;border:1px solid var(--line);border-radius:10px;background:var(--card);font-size:1.25rem;font-weight:600;font-variant-numeric:tabular-nums}
.so-quick button{min-height:44px;font-size:1rem;background:var(--paper-alt)}
.so-pad{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.so-pad button:active,.so-quick button:active{background:var(--paper-alt)}
.so-pad [data-k=clr]{font-size:1rem}
.so-edit-actions{flex-wrap:wrap}.so-edit-actions .btn{flex:1 1 140px;min-height:52px}
/* 打卡：大數字鍵盤＋ 4 點識別碼，站著單手按得到；結果卡片大字 */

/* PIN 鍵盤共用（登入／打卡／認人／蓋板）：鍵越大越不容易按錯，三欄滿版到 440px、鍵高 84px、數字 2rem */
.clock-pad{width:100%;max-width:440px;margin:0 auto} /* width:100%：登入卡是 grid 容器，grid item 配 margin:auto 會縮成內容寬 */
.clock-pin{display:flex;justify-content:center;gap:22px;margin:12px 0 20px}.clock-pin i{width:22px;height:22px;border-radius:50%;border:2px solid var(--ink);background:transparent}.clock-pin i.on{background:var(--ink)}
.clock-keys{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.clock-key{all:unset;box-sizing:border-box;cursor:pointer;display:flex;align-items:center;justify-content:center;min-height:84px;border:1px solid var(--line);border-radius:14px;background:var(--card);font-size:2rem;font-weight:500;font-variant-numeric:tabular-nums;user-select:none;-webkit-user-select:none}.clock-key[data-key="⌫"],.clock-key[data-key="清除"]{font-size:1.25rem;color:var(--ink-soft)}.clock-key:active{background:var(--paper-alt)}.clock-key:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
/* 四顆鍵：上班／下班一排（大）、開始休息／結束休息一排 */
.clock-go{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:14px}.clock-go .btn{min-height:60px;font-size:1.2rem;margin:0;white-space:nowrap}.clock-go #clock-break-start,.clock-go #clock-break-end{min-height:52px;font-size:1.05rem}
.clock-list li.on-break{border-color:var(--warn-line);background:var(--warn-faint)}.clock-list li.needs-break{border-color:var(--danger-line);background:var(--danger-soft)}.clock-list li em{font-style:normal;font-size:1rem;color:var(--danger)}.clock-list li.on-break em{color:var(--warn-ink)}
/* 排班：排休列（灰）、自動排班排不滿的警示、人力需求表單 */
.shift-item.shift-off{background:var(--paper-alt);color:var(--muted);border-style:dashed}
.shift-warn{margin:0 0 12px;padding:12px 14px;border:1px solid var(--danger-line);background:var(--danger-soft);border-radius:12px;color:var(--danger)}.shift-warn ul{margin:6px 0 0;padding-left:20px}
.staffing-row{display:flex;align-items:center;gap:8px;flex:1 1 100%}.staffing-row input[type=number]{width:64px}.staffing-row select,.staffing-row input{min-height:48px}
.clock-msg{max-width:560px;margin:16px auto 0;padding:14px 16px;border:1px solid;border-radius:12px;font-size:1.15rem;text-align:center}.clock-msg.ok{background:var(--ok-soft);border-color:var(--ok-line);color:var(--ok)}.clock-msg.bad{background:var(--danger-soft);border-color:var(--danger-line);color:var(--danger)}
.clock-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}.clock-list li{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--card)}.clock-list li span{color:var(--muted);font-size:1rem;font-variant-numeric:tabular-nums}
/* 操作人員：全螢幕遮罩＋卡片，疊在整個 App 上面認人（不是登入帳密），結帳前自動跳出 */
.op-overlay{position:fixed;inset:0;background:rgba(20,18,16,.55);display:grid;place-items:center;z-index:60;padding:16px}
.op-card{max-width:480px;width:100%;background:var(--card);border-radius:16px;padding:24px 20px;box-shadow:0 10px 40px rgba(0,0,0,.3)}
.op-card h2{margin:0 0 .25rem;font-size:1.125rem;font-weight:600}
.op-card-actions{display:flex;gap:10px;justify-content:center;margin-top:14px}
/* 確認對話框（posConfirm，取代瀏覽器 confirm）：同一張 .op-card，訊息 1.1rem、兩顆鍵各半、主鍵在右；破壞性動作用實心紅 */
.op-card.pos-confirm{max-width:440px}.pos-confirm-msg{margin:6px 0 0;font-size:1.1rem;line-height:1.5;overflow-wrap:anywhere}.pos-confirm .op-card-actions{margin-top:20px}.pos-confirm .op-card-actions .btn{flex:1;min-height:52px}
.op-card--wide{max-width:720px;max-height:90vh;overflow:auto}
/* .hint 變體：--tight 不留下邊距（表格格內、卡片內一行說明）；--end 靠右（標題列右側的小字）；--row 在 flex 表單裡獨佔一列。
   寫成 .hint.hint--x（兩個 class）：宿主頁 pos.html／admin.html 的 .hint{margin…} 排在本檔之後，單 class 權重相同會被蓋掉 */
.hint.hint--tight{margin:0}.hint.hint--end{margin:0 0 0 auto;font-weight:400}.hint.hint--row{flex:1 1 100%;margin:0}.a-form .f-grow{flex:1;min-width:200px}
/* 桌號 QR 卡（螢幕版；列印視窗另有同構樣式） */
.qr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-top:12px}.qr-card{text-align:center;border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--card)}.qr-card img{width:100%}.qr-card b{display:block;font-size:1.6rem;font-weight:700}.qr-card small{display:block;font-size:1rem;color:var(--muted)}
/* 原因預設選項：膠囊鍵一按就填／就送，48px 觸控目標；覆蓋式卡片（.pos-reason）與表單內嵌（.reason-chips--inline，占整列）共用 */
.reason-chips{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 4px}
.reason-chips button{all:unset;box-sizing:border-box;cursor:pointer;min-height:48px;padding:8px 16px;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:1rem;line-height:1.25;color:var(--ink)}
.reason-chips button:active,.reason-chips button[aria-pressed="true"]{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);background:var(--accent-soft)}
.reason-chips--inline{flex-basis:100%;margin:4px 0 0}
.pos-sum .pos-disc-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;justify-content:stretch;margin:0;padding:4px 14px 10px;background:var(--card)}
.pos-sum .pos-disc-presets button{text-align:center;padding:8px 6px}
.op-card.pos-reason{max-width:520px}
.pos-notice-hint,.pos-notice-last{margin:4px 0 0;color:var(--muted,#6b6760);font-size:1rem;line-height:1.5}
.pos-notice-preview{margin:12px 0 0;padding:12px 14px;border-radius:12px;background:var(--accent-soft);font-size:1rem;line-height:1.5;overflow-wrap:anywhere}
.pos-notice-preview[hidden],.reason-chips[hidden],.reason-other[hidden]{display:none}
.reason-other{display:flex;flex-direction:column;gap:6px;margin-top:12px;font-size:1rem;color:var(--muted)}
.reason-other input{min-height:48px;font:inherit;font-size:1rem;padding:8px 12px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink)}
/* 加點選項面板（跟桌邊點餐同一套：溫度／糖度／冰塊／飯量／麵量）：選項多時中間可捲、按鈕固定在底部，不會被捲出畫面 */
.op-card.pos-opt{max-width:520px;display:flex;flex-direction:column;max-height:92dvh;padding:0}
.pos-opt-body{overflow:auto;padding:22px 20px 10px;flex:1 1 auto;min-height:0}
.pos-opt-actions{flex:none;padding:12px 20px 18px;border-top:1px solid var(--line);margin-top:0}.pos-opt-actions .btn{flex:1;min-height:52px}
.pos-opt-group{display:block;margin:16px 0 0}
.pos-opt-title{display:flex;justify-content:space-between;gap:8px;font-weight:600;margin-bottom:8px}
.pos-opt-choices{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.pos-opt-choices label{position:relative;display:flex;align-items:center;justify-content:center;min-height:48px;text-align:center;border:1px solid var(--line);background:var(--card);border-radius:999px;padding:8px 10px;line-height:1.25;cursor:pointer}
.pos-opt-choices label:has(input:checked){border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);background:var(--accent-soft)}
.pos-opt-group[data-opt=temperature] label:has(input:checked){background:#ffe7e2}.pos-opt-group[data-opt=sugar] label:has(input:checked){background:#fff3bd}.pos-opt-group[data-opt=ice] label:has(input:checked){background:#e1f2ff}.pos-opt-group[data-opt=rice] label:has(input:checked){background:#e6f4df}.pos-opt-group[data-opt=noodle] label:has(input:checked){background:#f0e7ff}.pos-opt-group[data-opt=serve] label:has(input:checked){background:#ffeedd}
.pos-opt-choices input{position:absolute;opacity:0;pointer-events:none}
.pos-opt-qty{display:flex;align-items:center;gap:12px}.pos-opt-qty button{all:unset;box-sizing:border-box;cursor:pointer;width:48px;height:48px;border-radius:50%;border:1.5px solid var(--ink);background:var(--card);font-size:1.3rem;display:grid;place-items:center}.pos-opt-qty button:active{background:var(--paper-alt)}.pos-opt-qty b{min-width:2ch;text-align:center;font-size:1.2rem}
.pos-opt textarea{width:100%;min-height:64px;padding:10px 12px;border:1px solid var(--muted);border-radius:8px;background:var(--card);resize:vertical;font:inherit}
/* 排班：週一起七欄（手機自動折成多列）；在咖啡琥珀邊、三點水藍邊 */
.shift-week{min-width:14em;text-align:center;font-variant-numeric:tabular-nums}
.shift-week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;margin-top:12px}@media(max-width:900px){.shift-week-grid{grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}}
.shift-day{display:flex;flex-direction:column;gap:6px;min-height:120px;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--card)}.shift-day.today{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.shift-day h4{display:flex;justify-content:space-between;align-items:baseline;margin:0 0 4px;font-size:1rem}.shift-day h4 small{color:var(--muted);font-weight:400}
.shift-day .a-empty{margin:0;padding:6px 0}.shift-day .shift-add{margin:auto 0 0;align-self:flex-start}
.shift-item{position:relative;display:flex;flex-direction:column;gap:2px;padding:8px 46px 8px 10px;border-left:4px solid var(--line);border-radius:8px;background:var(--paper-alt)}.shift-item.v-CAFE{border-left-color:var(--warn)}.shift-item.v-BAR{border-left-color:#2e5fa3}
.shift-item span,.shift-item small{color:var(--muted);font-variant-numeric:tabular-nums;font-size:1rem}
.shift-del{all:unset;box-sizing:border-box;cursor:pointer;position:absolute;top:0;right:0;width:44px;height:44px;display:grid;place-items:center;border-radius:50%;color:var(--muted);font-size:1.2rem}.shift-del:hover{background:var(--line);color:var(--ink)}.shift-del:focus-visible{outline:2px solid var(--ink)}
.shift-new,.staff-form{align-items:flex-end;margin:12px 0}.shift-new select,.shift-new input,.staff-form select,.staff-form input{min-height:48px}.staff-form #st-pin{width:6em;font-variant-numeric:tabular-nums}
.a-tbl tr.staff-off td{color:var(--muted)}.a-tbl tr.att-open td{background:var(--danger-faint)}
.ops-tablet-hint{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;padding:10px 12px;border:1px dashed var(--line);border-radius:8px;background:var(--paper-alt);margin-bottom:12px}

/* 平板：觸控目標放大；查單／已結帳表在直式時縮欄距、發票異常的「補開發票」鍵換到膠囊下面，整張表塞進 768px 不橫捲 */
@media(max-width:1020px){.pos-table{min-height:104px}.pos-pay .btn{min-height:56px}.ops-pause input[data-pause-msg]{min-height:48px}.pos-panel input[data-pick]{width:28px;height:28px}
  :is(#history-body,.pos-panel) .a-tbl th,:is(#history-body,.pos-panel) .a-tbl td{padding-left:8px;padding-right:8px}
  .a-tbl td.ops-item{min-width:8em}.a-tbl td.ops-pay{min-width:8em}
  .a-tbl td.ops-pay .inv-fix{flex-wrap:wrap;white-space:normal}.a-tbl td.ops-pay .inv-fix .btn-xs{flex-basis:100%;justify-content:flex-start;padding-left:0}
  .a-tbl td.ops-actions{min-width:214px;padding-left:6px}.a-tbl td.ops-actions .btn{padding-left:10px;padding-right:10px}
  }
/* 補打卡 */
.clock-makeup{all:unset;box-sizing:border-box;display:block;width:100%;max-width:440px;text-align:center;white-space:nowrap;margin:14px auto 0;min-height:48px;padding:0 18px;cursor:pointer;font-size:1rem;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.clock-makeup:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.mk-field input{width:100%;box-sizing:border-box;min-height:48px;font:inherit;font-size:1rem;padding:8px 12px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink)}
.mk-field[hidden]{display:none}
.mk-presets{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.mk-presets button{all:unset;box-sizing:border-box;cursor:pointer;min-height:48px;padding:0 14px;display:flex;align-items:center;border:1px solid var(--line);border-radius:999px;background:var(--card);font-size:1rem}.mk-presets button:active{background:var(--paper-alt)}
.mk-types{grid-template-columns:1fr}
#mk-err{margin-top:14px;max-width:none}

.pos-part{margin-top:4px;border-style:dashed}.pos-part small{padding:0 6px;color:var(--muted)}

.pos-move-ov{position:fixed;inset:0;background:rgba(20,18,16,.55);z-index:9999;display:flex;align-items:center;justify-content:center;padding:16px}
.pos-move-box{background:var(--card);border-radius:16px;padding:24px 20px;max-width:520px;width:100%;max-height:90vh;overflow:auto}
.pos-move-box h3{margin:0 0 .25rem;font-size:1.125rem;font-weight:600}
.pos-move-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0}
.pos-move-opt{min-height:64px;border:1px solid var(--line);border-radius:10px;background:var(--paper);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font:inherit;cursor:pointer}
.pos-move-opt b{font-size:1.2em}.pos-move-opt small{color:var(--muted)}
.pos-move-opt.busy{background:var(--warn-soft);border-color:var(--warn)}
.pos-party-grid{grid-template-columns:repeat(5,1fr)}.pos-party-grid[data-row]{grid-template-columns:repeat(6,1fr);margin:6px 0 12px}.pos-move-box h3+.hint{margin-top:12px}.pos-party-grid .pos-move-opt.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}.pos-party-grid .pos-move-opt.on small{color:var(--paper)}
.pos-move-foot{display:flex;justify-content:space-between;gap:8px}

/* 混合付款：各方式各收多少 */
.pos-split{display:flex;flex-wrap:wrap;gap:8px 12px;width:100%;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--paper-alt)}
.pos-split-row{display:inline-flex;align-items:center;gap:8px;min-height:48px}.pos-split-row>span{min-width:5em}
.pos-split-row input{width:110px;min-height:48px;font:inherit;font-size:1.1rem;padding:6px 10px;border:1px solid var(--muted);border-radius:8px;background:var(--card);color:var(--ink);font-variant-numeric:tabular-nums}
.pos-split-left{display:flex;align-items:center;gap:10px;flex-basis:100%;min-height:44px;font-weight:600}.pos-split-left b{font-size:1.2rem;color:var(--danger)}.pos-split-left.ok b{color:var(--ok)}
.pos-lines tr.pos-credit td{background:var(--paper-alt)}
/* ── 現場輸入用點的：桌號（區＋號碼鍵盤）、金額鍵盤、備註／數值膠囊、時間膠囊 ── */
.pos-move-box .reason-chips{margin:10px 0}
.pos-tno,.pos-amt{display:flex;align-items:baseline;justify-content:center;gap:6px;min-height:56px;margin:8px 0;padding:6px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper-alt);font-variant-numeric:tabular-nums}
.pos-tno b,.pos-amt b{font-size:2rem;line-height:1.1;letter-spacing:.04em}.pos-amt span{color:var(--muted);font-size:1rem}
.pos-tno-zones button[aria-pressed="true"],.note-chips button[aria-pressed="true"],.fill-chips button[aria-pressed="true"],.stamp-chips button[aria-pressed="true"],[data-disc-quick][aria-pressed="true"],[data-shift-quick][aria-pressed="true"]{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);background:var(--accent-soft)}
.pos-tno-keys,.pos-amt-keys{margin:10px 0 4px}.pos-tno-keys .clock-key,.pos-amt-keys .clock-key{min-height:64px;font-size:1.5rem}
/* 「確定」鍵用主色，跟數字鍵分開；A–F 區六等分撐滿一列 */
.pos-tno-keys .clock-key[data-key="確定"],.pos-amt-keys .clock-key[data-key="確定"]{background:var(--ink);color:var(--paper);border-color:var(--ink);font-size:1.15rem}
.pos-tno-zones{display:grid;grid-template-columns:repeat(6,1fr)}.pos-tno-zones button{justify-content:center;min-height:52px;padding:8px 6px;text-align:center}
/* 面板底部主次按鈕：與加點選項面板一致，各佔一半、52px 高、上方留線 */
.pos-move-box .op-card-actions{margin-top:18px;padding-top:14px;border-top:1px solid var(--line)}.pos-move-box .op-card-actions .btn{flex:1;min-height:52px}
.pos-move-box .pos-move-foot{margin-top:14px}.pos-move-box .pos-move-foot .btn{min-height:48px}
.pos-amt-presets button{font-variant-numeric:tabular-nums}
/* 時間膠囊：48 格橫向捲，不撐高面板；目前選到的那格會捲進視野 */
.stamp-chips{margin-top:6px}.stamp-chips .stamp-times{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px;scrollbar-width:thin}.stamp-chips .stamp-times button{flex:0 0 auto}
.pos-move-box .mk-field{display:block;margin:14px 0 0}
.pos-move-box .reason-other{margin-top:4px}
/* 面板在平板直式也放得下：寬一點、內容可捲 */
.pos-move-box{max-width:600px}
/* 開桌人數與一次開多桌：現場先看完整桌位，不讓新桌往下堆到必須捲動 */
.pos-move-box.pos-party-box,.pos-move-box.pos-open-tables-box{max-width:min(960px,100%);max-height:none;overflow:visible;padding:20px 24px}
.pos-party-box .pos-party-grid[data-row]{grid-template-columns:repeat(13,minmax(0,1fr));gap:8px;margin:4px 0 10px}
.pos-party-box .pos-move-opt,.pos-open-tables-box .pos-move-opt{min-height:56px}
.pos-open-tables-box .pos-open-tables-grid{grid-template-columns:repeat(8,minmax(0,1fr));gap:8px;margin:12px 0}
@media (max-width:760px){.pos-party-box .pos-party-grid[data-row]{grid-template-columns:repeat(7,minmax(0,1fr))}.pos-open-tables-box .pos-open-tables-grid{grid-template-columns:repeat(6,minmax(0,1fr))}.pos-move-box.pos-party-box,.pos-move-box.pos-open-tables-box{padding:16px}}
@media (max-width:480px){.pos-open-tables-box .pos-open-tables-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* 出餐頁：低頻功能（暫停點餐、桌號 QR）預設收折 */
.ops-fold{margin:0 0 14px}.ops-fold>summary{cursor:pointer;min-height:48px;display:flex;align-items:center;color:var(--muted);font-size:1rem;list-style:none}.ops-fold>summary::-webkit-details-marker{display:none}.ops-fold[open]>summary{margin-bottom:8px}.ops-fold[open]:has(.ops-pause.on)>summary{color:var(--danger);font-weight:700}
/* 出餐看板卡片（參考市售 KDS）：一單一卡、舊單在前；卡頭桌號大字＋等候分鐘，8 分琥珀、15 分紅；可取餐的卡淡化；卡尾一顆主鍵（52px） */
/* 多欄用 CSS columns（瀑布式）而不是 grid：卡高不一時 grid 會整列對齊留大片空白；columns 由上往下、再換欄，和 Toast／Square KDS 的閱讀順序一致 */
.kds-grid{columns:300px;column-gap:12px}
.kds-card{display:flex;flex-direction:column;break-inside:avoid;margin-bottom:12px;border:1px solid var(--line);border-radius:12px;background:var(--card);overflow:hidden}
.kds-card [data-cancel-item]{color:var(--muted);border-color:transparent}
.kds-head{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--paper-alt);border-bottom:1px solid var(--line)}
.kds-table{font-size:1.7rem;font-weight:700;line-height:1.1;white-space:nowrap}.kds-table small{font-size:1rem;font-weight:600;margin-right:4px;color:var(--muted)}
.kds-state{font-size:1rem;color:var(--muted);white-space:nowrap}
.kds-age{margin-left:auto;font-size:1.15rem;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.kds-card.kds-warn .kds-head{background:var(--warn-soft)}.kds-card.kds-warn .kds-age{color:var(--warn-ink)}
.kds-card.kds-late .kds-head{background:var(--danger-line)}.kds-card.kds-late .kds-age{color:var(--danger)}.kds-card.kds-late{border-color:var(--danger-line)}
.kds-card.ops-ready{opacity:.7}.kds-card.ops-ready .kds-head{background:var(--ok-soft)}
.kds-card .ops-lines{padding:8px 12px;flex:1}.kds-card .ops-line{padding:8px 0}.kds-card .ops-line-btns .btn{min-height:44px}
.kds-foot{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--line)}.kds-foot .btn{margin:0;min-height:52px}.kds-foot .btn--solid{flex:1;font-size:1.1rem}.kds-foot .btn--ghost:only-child{flex:1}
.kds-count{display:inline-grid;place-items:center;min-width:26px;height:26px;padding:0 8px;border-radius:999px;background:var(--ink);color:var(--paper);font-size:1rem;font-weight:600}
@media(max-width:700px){.kds-grid{columns:1}}

.pos-table.idlewarn{border-color:#d9822b;background:#fff1e0}.pos-table.idlewarn.on{background:var(--ink)}.pos-table .pos-idlewarn-tag{color:#9a4a00;font-weight:600;overflow-wrap:anywhere}
.pos-open .btn--solid{flex:1 1 160px;min-height:56px;font-size:1.05rem}
.pos-open .btn--ghost{flex:0 0 auto;min-height:48px}
.pos-sub{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end;margin-top:12px}.pos-sub .a-toolbar{margin:0}
/* 結帳面板精簡：品項操作收進 ⋯、次要資訊縮小，避免橫向與多餘垂直捲動 */
.pos-lines td.ops-actions,.pos-layout.has-panel .pos-panel .pos-lines td.ops-actions{min-width:0;width:1%;text-align:right;position:relative}
.ops-more{display:inline-block}.ops-more>summary{list-style:none;cursor:pointer;min-width:48px;min-height:48px;justify-content:center}.ops-more>summary::-webkit-details-marker{display:none}
.ops-more[open]>.ops-btns{position:absolute;right:0;top:100%;z-index:20;flex-direction:column;align-items:stretch;min-width:160px;padding:8px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(20,18,16,.16)}
.ops-more>.ops-btns .btn{min-height:48px;justify-content:center}
.pos-layout.has-panel .pos-panel .pos-lines td.ops-item{min-width:0}
.pos-pay{gap:10px;margin-top:10px;padding-top:10px}
.pos-method span{min-height:48px}
.pos-sum>div{min-height:48px}
.pos-layout.has-panel .pos-panel h2 .hint--end{display:none}
.pos-actions{display:block}.pos-actions-sub{align-items:center}.pos-more{position:relative}.pos-more>summary{min-height:48px;display:inline-flex;align-items:center}
.pos-more[open]>.pos-more-menu{position:absolute;bottom:100%;left:0;z-index:20;display:flex;flex-direction:column;min-width:200px;gap:6px;padding:8px;margin-bottom:6px;background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(20,18,16,.16)}
.pos-more-menu .btn{min-height:48px;justify-content:center}
.pos-actions #pos-close{justify-self:auto}
.pos-sum>div.pos-sum-member{min-height:48px;padding-top:2px;padding-bottom:2px}
.pos-sum>div[hidden]{display:none}
@media(min-width:1000px){
.pos-layout.has-panel .pos-panel-scroll{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,.9fr);column-gap:16px;grid-template-rows:auto auto auto 1fr;align-content:start;overflow:auto}
.pos-panel-scroll>*{grid-column:1/-1;min-height:0}
.pos-panel-scroll>.pos-lines-wrap{grid-column:1;grid-row:2;overflow:auto;max-height:100%}
.pos-panel-scroll>.pos-menu-box{grid-column:1;grid-row:3}
.pos-panel-scroll>.pos-pay{grid-column:2;grid-row:2/span 3;margin-top:0;padding-top:0;border-top:0;overflow:auto;align-content:start}
.pos-panel-scroll>.pos-payreqs{grid-row:auto}
}
.pos-lines{table-layout:auto;width:100%}.pos-lines td.ops-item,.pos-layout.has-panel .pos-panel .pos-lines td.ops-item{min-width:0;white-space:normal;overflow-wrap:anywhere}
.pos-lines .hint{white-space:normal}
@media(min-width:1000px){.pos-layout.has-panel .pos-panel-scroll{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr)}}
.a-tbl.pos-lines td.ops-item .hint{white-space:normal}
.a-tbl.pos-lines td.ops-item{min-width:0}
@media(max-width:600px){.pos-lines th,.pos-lines td{padding-left:4px!important;padding-right:4px!important}.pos-lines td.pos-qty-col .pos-qty button{width:44px}.pos-lines td:first-child{width:28px}.pos-lines .num{font-size:1rem}}
@media(min-width:1000px){
.pos-layout.has-panel .pos-panel-scroll{grid-template-rows:auto minmax(0,1fr) auto auto auto;overflow:hidden;align-content:stretch}
.pos-panel-scroll>.pos-lines-wrap{grid-row:2;max-height:none;height:100%;min-height:0}
.pos-panel-scroll>.pos-menu-box{grid-column:1;grid-row:3}
.pos-panel-scroll>.pos-table-actions{grid-column:1;grid-row:5;align-self:end}
.pos-panel-scroll>.pos-dock{grid-column:2;grid-row:5;align-self:end;position:static;margin-top:0}
.pos-panel-scroll>.pos-pay{grid-column:2;grid-row:2/span 3;display:grid;overflow:auto;margin-top:0;padding-top:0;border-top:0;align-content:start}
.pos-pay>.pos-methods{grid-template-columns:repeat(2,1fr)}
}
.pos-more,.pos-more-menu{display:none}

.pos-table-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}.pos-table-actions .btn{min-height:48px}
.pos-method span{min-height:44px;padding:0 8px}
.pos-methods{grid-template-columns:repeat(auto-fit,minmax(110px,1fr))}
.pos-sum-member label{flex:1 1 0}.pos-sum-member:has(label){flex-wrap:wrap}.pos-sum-member #pos-yan-scan{flex:none}.pos-sum-member:has(label)>span:last-child{flex:1 0 100%}
.pos-pay>.pos-invoice{border:1px solid var(--line);border-radius:10px;padding:0 12px}
@media(min-width:1000px){.pos-pay>.pos-methods{grid-template-columns:repeat(3,1fr)}}
.pos-panel h2 .pos-qr-btn{flex:none;min-height:44px;padding:0 12px}
.pos-table .pos-dwell{font-variant-numeric:tabular-nums}

.pos-qty-col .pos-qty{vertical-align:middle}
.pos-part-wrap{margin-top:8px;padding:6px 8px;border:1px dashed var(--line);border-radius:12px;background:var(--paper-alt);display:flex;flex-direction:column;align-items:center;gap:4px}
.pos-part-lbl{font-size:1rem;color:var(--muted);white-space:nowrap}
.pos-part-wrap .pos-qty.pos-part{margin-top:0;border-style:solid}
.pos-lines td.pos-amt{text-align:right;white-space:nowrap;vertical-align:top;font-size:1.1rem}
.pos-lines td.ops-item{vertical-align:top}.pos-lines td.pos-qty-col{vertical-align:top}.pos-lines td.ops-actions{vertical-align:top}
.pos-lines td.ops-item b{font-size:1.1rem}

.pos-table .pos-detail{display:flex;flex-direction:column;gap:2px;margin-top:2px;padding-top:6px;border-top:1px dashed var(--line)}
.pos-table .pos-detail small{line-height:1.3;overflow-wrap:anywhere}
.pos-table .pos-detail-items{color:var(--ink);font-weight:600}
.pos-table.on .pos-detail{border-top-color:rgba(255,255,255,.35)}.pos-table.on .pos-detail-items{color:var(--paper)}
.pos-open .pos-pause-btn{flex:0 0 auto;min-height:48px;padding:10px 14px}

/* 桌位平面圖：自由擺放（座標為畫布百分比）。桌況欄夠寬（≥600px）才畫平面圖；窄欄（手機、已選桌的側欄）退回格子，順序＝平面圖由上到下、由左到右 */
.pos-board{container-type:inline-size}
.pos-floor{position:relative;width:100%;height:min(75cqw,calc(100dvh - var(--p-top,60px) - 250px));min-height:360px;margin-bottom:10px;border:1px dashed var(--line);border-radius:12px;background:var(--paper-alt)}
.pos-floor-slot{position:absolute;width:23%}.pos-floor-slot:has(.pos-table.on){z-index:3}.pos-floor-slot:hover{z-index:2}
.pos-floor-slot .pos-table,.pos-floor-slot .pos-table.empty{width:100%;background:var(--card)}
.pos-floor-edit{touch-action:none;user-select:none;-webkit-user-select:none}
.pos-floor-edit .pos-drag{position:absolute;width:23%;cursor:grab;border:2px dashed var(--ink);background:var(--card);touch-action:none;min-height:128px}
.pos-floor-edit .pos-drag{box-sizing:border-box;padding-right:52px;padding-bottom:48px}
.pos-floor-edit .pos-del-table{position:absolute;top:-2px;right:-2px;width:44px;height:44px;border:0;border-radius:0 8px 0 12px;background:var(--ink);color:var(--card);font-size:1.5rem;line-height:1;cursor:pointer;touch-action:manipulation;opacity:.85}
.pos-floor-edit .pos-ren-table{position:absolute;left:-2px;bottom:-2px;right:44px;max-width:96px;height:44px;padding:0;border:0;border-radius:12px 0 12px 8px;background:var(--ink);color:var(--card);font-size:1rem;line-height:1;cursor:pointer;touch-action:manipulation;opacity:.85}
.pos-floor-edit .pos-rz{position:absolute;right:-2px;bottom:-2px;width:44px;height:44px;border-radius:12px 0 8px 0;background:var(--ink);opacity:.85;cursor:nwse-resize;touch-action:none}
.pos-floor-edit .pos-rz::after{content:'';position:absolute;right:9px;bottom:9px;width:14px;height:14px;border-right:3px solid var(--card);border-bottom:3px solid var(--card)}
.pos-floor-edit .pos-drag.is-narrow{padding:4px 4px 0;min-width:0;min-height:180px}.pos-floor-edit .pos-drag.is-narrow .pill{display:none}.pos-floor-edit .pos-drag.is-narrow .pos-del-table{top:auto;bottom:88px;border-radius:12px 0 0 12px}.pos-floor-edit .pos-drag.is-narrow .pos-ren-table{left:auto;right:-2px;bottom:44px;width:44px;max-width:none;border-radius:12px 0 0 12px;font-size:1rem;white-space:normal;line-height:1.1}
.pos-floor-slot.is-sized{display:flex}.pos-floor-slot.is-sized .pos-table{height:100%}
.pos-floor-edit .pos-drag.is-new{z-index:4;border:3px solid var(--ink);box-shadow:0 6px 18px rgba(0,0,0,.25)}
.pos-floor-edit .pos-drag.dragging{z-index:5;opacity:.9;box-shadow:0 8px 24px rgba(0,0,0,.25);cursor:grabbing}
.pos-editing .hint{margin:0 0 12px}

/* 查單表格：一單一列（時間／桌號／單號／品項／付款／發票／金額／狀態），點列展開詳情卡與操作鍵；手機改兩行卡片列 */
.hist-list{overflow-x:auto}
.hist-sheet{width:100%;border-collapse:collapse;font-size:1rem;font-variant-numeric:tabular-nums}
.hist-sheet th{position:sticky;top:0;z-index:1;text-align:left;font-weight:600;color:var(--muted);padding:8px 10px;border-bottom:2px solid var(--line);background:var(--paper);white-space:nowrap}
.hist-sheet td{padding:0 10px;border-bottom:1px solid var(--line);vertical-align:middle}
.hist-row{cursor:pointer;height:56px}.hist-row:hover td,.hist-row:active td{background:var(--paper-alt)}.hist-row:focus-visible{outline:3px solid var(--ink);outline-offset:-3px}
.hist-row.is-open td{background:var(--paper-alt);border-bottom-color:transparent}
.hist-row.is-void td{color:var(--muted)}.hist-row.is-void .hist-amount{text-decoration:line-through}
.hist-time,.hist-id{color:var(--muted);white-space:nowrap}
.hist-table{white-space:nowrap}.hist-table b{font-size:1.2rem}.hist-table small{font-size:1rem;margin-right:4px;color:var(--muted)}
.hist-items{max-width:22em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hist-paycol,.hist-invcol{white-space:nowrap}
.hist-sheet .hist-amount{text-align:right;font-weight:700;white-space:nowrap}
.hist-state{white-space:nowrap}
.hist-chev{display:inline-block;width:.6em;height:.6em;margin-left:10px;border-right:2px solid var(--ink-soft);border-bottom:2px solid var(--ink-soft);transform:translateY(-3px) rotate(45deg);transition:transform .15s}
.hist-row.is-open .hist-chev{transform:translateY(2px) rotate(-135deg)}
.hist-detail>td{padding:0 10px 12px;background:var(--paper-alt);border-bottom:1px solid var(--line)}
.hist-card{display:flex;flex-direction:column;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--card)}
.hist-card.is-void{border-color:var(--danger-line)}.hist-card.is-void .hist-lines{opacity:.6}
.hist-lines{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.hist-line{display:grid;grid-template-columns:2.6em 1fr auto;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
.hist-line.is-off .hist-name b{text-decoration:line-through}
.hist-qty{font-weight:700;font-variant-numeric:tabular-nums}.hist-qty.many{color:var(--warn-ink)}
.hist-name{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0}.hist-name .hint{color:var(--ink-soft)}.hist-sub{font-variant-numeric:tabular-nums;color:var(--ink-soft)}
.hist-pay{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px}.hist-inv{text-align:right}
.hist-void{color:var(--danger);font-weight:600}
.hist-actions{display:flex;flex-wrap:wrap;gap:8px}
.hist-actions>.btn{min-height:48px}.hist-actions [data-void]{margin-left:auto}
@media(max-width:700px){
.hist-sheet thead{display:none}
.hist-sheet,.hist-sheet tbody{display:block}
.hist-row{display:grid;grid-template-columns:auto auto 1fr auto;grid-template-areas:"time table state amount" "items items items items";gap:4px 10px;align-items:center;height:auto;padding:10px 4px;border-bottom:1px solid var(--line)}
.hist-row td{display:block;padding:0;border:0;background:none}
.hist-row.is-open,.hist-row:active{background:var(--paper-alt)}
.hist-time{grid-area:time}.hist-table{grid-area:table}.hist-state{grid-area:state}.hist-sheet .hist-amount{grid-area:amount}
.hist-items{grid-area:items;max-width:none;color:var(--ink-soft)}
.hist-id,.hist-paycol,.hist-invcol{display:none!important}
.hist-detail{display:block}.hist-detail[hidden]{display:none}.hist-detail>td{display:block;padding:0 0 12px}
}
/* 結帳三欄（≥1000px）：左＝菜單、中＝已點品項、右＝結帳資訊；各欄內容自己捲，底部資訊釘住 */
.pos-menu-body{display:contents}
@media(min-width:1000px){
.pos-layout.has-panel{grid-template-columns:minmax(0,1fr)}
.pos-layout.has-panel .pos-tables{display:none}
.btn.pos-back{display:inline-flex}
.pos-layout.has-panel .pos-panel-scroll{grid-template-columns:minmax(290px,1fr) minmax(0,1.1fr) minmax(320px,.95fr);grid-template-rows:auto minmax(0,1fr) auto;column-gap:16px;overflow:hidden;align-content:stretch}
.pos-panel-scroll>.pos-payreqs{grid-column:1/-1;grid-row:1}
.pos-panel-scroll>.pos-menu-box{grid-column:1;grid-row:2/span 2;margin-top:0;display:block;height:100%;min-height:0;overflow:hidden;border-right:1px solid var(--line);padding-right:12px}
.pos-menu-box>summary{display:none}
.pos-menu-box{position:relative}.pos-menu-box .pos-menu-body{position:absolute;inset:0 12px 0 0;display:flex;flex-direction:column;min-height:0}
.pos-menu-box .pos-cats{flex:none}
.pos-menu-box .pos-menu{flex:1;min-height:0;overflow:auto}
.pos-menu-box .pos-add{flex:none;margin-top:8px;padding-top:8px;border-top:1px solid var(--line);max-height:40%;overflow:auto}
.pos-panel-scroll>.pos-mid{grid-column:2;grid-row:2;min-height:0;overflow:auto}
.pos-mid>.pos-lines-wrap{height:auto;max-height:none;overflow:visible}
.pos-panel-scroll>.pos-table-actions{grid-column:2;grid-row:3;align-self:end}
.pos-panel-scroll>.pos-pay{grid-column:3;grid-row:2;overflow:auto;min-height:0}
.pos-panel-scroll>.pos-dock{grid-column:3;grid-row:3;align-self:end}
}
/* 會員手機輸入框至少要看得到號碼：右欄變窄時，查會員／掃會員換到下一行 */
.pos-sum-member label{flex:1 1 12em}.pos-sum-member #pos-yan-phone{min-width:8em}
/* 結帳品項依點餐人分組：組頭一列＝稱呼、幾項、小計、「只結這組」（各付各的一點就勾好） */
.pos-lines tr.pos-group td{background:var(--paper-alt);border-top:2px solid var(--line);padding:6px 10px}
.pos-lines tr.pos-group.on td{background:var(--ok-faint)}
.pos-lines tr.pos-group .pos-group-wrap{display:flex;align-items:center;flex-wrap:wrap;gap:6px 12px}
.pos-lines tr.pos-group .pos-group-name{font-weight:700;font-size:1.1rem}
.pos-lines tr.pos-group .pos-group-meta{color:var(--muted);font-variant-numeric:tabular-nums}
.pos-lines tr.pos-group .pos-group-btns{margin-left:auto;display:flex;flex-wrap:wrap;gap:6px}

/* 品項圖片：POS 菜單磚（上圖下字）與已點品項（左縮圖） */
.pos-menu{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
.pos-item__img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:7px;background:var(--paper-alt);margin-bottom:2px}
.pos-item__img--ph{display:flex;align-items:center;justify-content:center;font-size:1.8rem;font-weight:600;color:var(--muted)}
.pos-item{min-height:0;padding:8px}
.pos-line__img{float:left;width:44px;height:44px;margin-right:10px;border-radius:8px;object-fit:cover;background:var(--paper-alt)}
.pos-line__img--ph{display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--muted)}
.pos-lines .ops-item::after{content:"";display:block;clear:both}
.pos-item>span:last-of-type{margin-top:auto}
/* 約書旅空間方案：大字用途卡，現場一眼分辨場域、時數與超時，不倚賴相近插圖細節。 */
.rest-plan-art{position:relative;overflow:hidden;isolation:isolate;display:grid!important;grid-template-columns:1fr auto;grid-template-rows:auto 1fr auto;align-items:center;width:100%;aspect-ratio:4/3;padding:12px 14px!important;border-radius:8px;background:#365e5c!important;color:#fff!important;margin-bottom:2px}.rest-plan-art::before{content:"";position:absolute;z-index:-1;width:150px;height:150px;right:-55px;bottom:-78px;border-radius:50%;background:rgba(255,255,255,.13)}.rest-plan-art--quiet{background:#31506d!important}.rest-plan-art--private{background:#79513d!important}.rest-plan-art--lounge-overtime{background:#bd5b22!important}.rest-plan-art--quiet-overtime{background:#63416f!important}.rest-plan-art__top{grid-column:1;grid-row:1;color:#fff!important;font-size:1.02rem;font-weight:800;letter-spacing:.08em}.rest-plan-art svg{grid-column:1;grid-row:2;width:52px;height:52px;fill:none;stroke:currentColor;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;color:#fff}.rest-plan-art strong{grid-column:2;grid-row:1/span 2;color:#fff!important;font-size:2.65rem;line-height:1;font-variant-numeric:tabular-nums;font-weight:900;letter-spacing:-.06em}.rest-plan-art small{grid-column:1/3;grid-row:3;justify-self:start;color:#fff!important;background:rgba(0,0,0,.22);border-radius:999px;padding:3px 9px;font-size:1rem;font-weight:800;letter-spacing:.08em}.pos-menu-box .rest-plan-art{grid-row:auto;width:100%;height:auto;aspect-ratio:4/3;margin:0 0 4px}.pos-menu-box .rest-plan-art svg{width:52px;height:52px}.pos-menu-box .rest-plan-art strong{font-size:2.65rem}.so-item__img.rest-plan-art,.so-edit__img.rest-plan-art{width:100%;height:auto;min-height:0;aspect-ratio:4/3}.so-edit__img.rest-plan-art{width:64px;height:64px;padding:6px}.so-edit__img.rest-plan-art svg,.so-edit__img.rest-plan-art small,.so-edit__img.rest-plan-art__top{display:none}.so-edit__img.rest-plan-art strong{font-size:1.25rem}.so-item__img.rest-plan-art strong{font-size:1.7rem}
@container (min-width:600px){.pos-grid .pos-slot:has(.pos-table.is-placed){display:none}}
@container (max-width:599px){.pos-floor:not(.pos-floor-edit){display:none}}
/* 桌況欄：平面圖＋格子一起在 .pos-board 內捲動（原本只有 .pos-grid 捲） */
@media(min-width:1000px){.pos-layout .pos-tables .pos-board{flex:1;min-height:0;overflow:auto;padding-bottom:4px}.pos-layout .pos-tables .pos-board .pos-grid{flex:none;min-height:0;overflow:visible;padding-bottom:0}}

/* 銷量／客群圖表 */
.chart-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;margin:14px 0 22px}
.chart-card{border:1px solid var(--line,#e5e5e5);border-radius:12px;padding:14px 16px;background:#fff;min-width:0}.chart-card h3{margin:0 0 10px;font-size:1.05rem}
.chart-hbar{grid-template-columns:minmax(5em,9em) 1fr auto}.chart-lbl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chart-hbar i{height:1.4rem}.chart-hbars{gap:8px}.chart-card small{color:var(--muted);font-size:1rem}
.chart-vbars{display:grid;grid-template-columns:repeat(var(--n),1fr);gap:4px;align-items:end;height:12.5rem;padding-top:18px}
.chart-vcol{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0;position:relative}.chart-vcol i{display:block;width:100%;max-width:2.2rem;background:var(--ink);border-radius:4px 4px 0 0}
.chart-vval{font-size:1rem;color:var(--muted);white-space:nowrap}.chart-vlbl{font-size:1rem;color:var(--muted);margin-top:4px;white-space:nowrap}
.chart-donut-wrap{display:flex;gap:18px;align-items:center;flex-wrap:wrap}.chart-donut{width:10rem;height:10rem;border-radius:50%;display:grid;place-items:center;flex:none;position:relative}
.chart-donut::after{content:"";position:absolute;inset:30px;background:#fff;border-radius:50%}.chart-donut span{position:relative;z-index:1;font-weight:700;font-size:1rem;text-align:center}
.chart-legend{list-style:none;margin:0;padding:0;flex:1;min-width:150px;display:grid;gap:6px}.chart-legend li{display:flex;align-items:center;gap:8px;font-size:1rem}.chart-legend b{width:12px;height:12px;border-radius:3px;flex:none}.chart-legend .num{margin-left:auto}

/* ── 手機（≤600px，以 375 寬驗收）──
   桌況兩欄；結帳品項／這桌已結帳的單／訂位表改成卡片列，不再要橫向滑才看得到金額與操作；
   結帳面板改用整頁捲動（原本固定高度的內捲動在手機只剩 440px，一次看不到一個品項），收款列 sticky 在畫面底。 */
@media(max-width:600px){
  .pos-grid,.pos-layout.has-panel .pos-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .pos-table{min-height:88px;padding:10px 12px}
  .pos-layout.has-panel .pos-panel{height:auto;overflow:visible}
  .pos-layout.has-panel .pos-panel-scroll,.pos-panel-scroll{overflow:visible}
  .pos-dock{margin-left:-12px;margin-right:-12px;padding-left:12px;padding-right:12px;gap:10px}
  .pos-dock-change,.pos-dock-due{min-width:0;flex:none}.pos-dock-change b,.pos-dock-due b{font-size:1.5rem}
  .pos-dock #pos-checkout{min-width:0;white-space:nowrap;padding-left:12px;padding-right:12px}
  .pos-panel h2{flex-wrap:wrap;row-gap:6px}

  /* 品項：勾選｜品名＋金額＋⋯ 一行，數量（與「這次只結」）在下一行 */
  .pos-lines-wrap{border:0;border-radius:0;overflow:visible}
  .a-tbl.pos-lines,.a-tbl.pos-lines tbody{display:block}
  .a-tbl.pos-lines thead{display:none}
  .a-tbl.pos-lines tr{display:grid;grid-template-columns:32px minmax(0,1fr) auto 48px;grid-template-areas:"pick item amt more" "pick qty qty qty";align-items:start;column-gap:6px;row-gap:6px;padding:10px 0;border-bottom:1px solid var(--line)}
  .a-tbl.pos-lines tr>td{display:block;border:0;padding:0!important;min-width:0;width:auto}
  .a-tbl.pos-lines tr>td:first-child{grid-area:pick;width:auto;padding-top:8px!important}
  .a-tbl.pos-lines td.ops-item{grid-area:item}
  .a-tbl.pos-lines td.pos-amt{grid-area:amt;display:block;min-height:0;margin:0;border:0;background:none;text-align:right;white-space:nowrap;font-size:1.1rem}
  .a-tbl.pos-lines td.pos-amt b{font-size:1.1rem;letter-spacing:0}
  .a-tbl.pos-lines td.ops-actions{grid-area:more;text-align:right}
  .a-tbl.pos-lines td.pos-qty-col{grid-area:qty;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
  .a-tbl.pos-lines td.pos-qty-col:empty{display:none}
  .pos-part-wrap{margin-top:0;flex-direction:row;flex-wrap:wrap;gap:6px;padding:2px 4px 2px 10px}
  .pos-line__img{width:36px;height:36px;margin-right:8px}
  .a-tbl.pos-lines tr.pos-group{display:block;padding:0;border-bottom:0}
  .a-tbl.pos-lines tr.pos-group>td{padding:8px 10px!important;border-radius:8px}
  .a-tbl.pos-lines tr>td[colspan]{grid-column:1/-1}
  .a-tbl.pos-lines tr.pos-comp,.a-tbl.pos-lines tr.pos-credit{background:var(--ok-faint)}
  .a-tbl.pos-lines tr.pos-comp td,.a-tbl.pos-lines tr.pos-credit td{background:none}

  /* 這桌已結帳的單：品項＋金額一行，付款／發票一行，操作一行 */
  .a-wrap2:has(>.a-tbl.pos-paid),.a-wrap2:has(>.a-tbl.resv-tbl){border:0;overflow:visible}
  .a-tbl.pos-paid,.a-tbl.pos-paid tbody,.a-tbl.resv-tbl,.a-tbl.resv-tbl tbody{display:block}
  .a-tbl.pos-paid thead,.a-tbl.resv-tbl thead{display:none}
  .a-tbl.pos-paid tr{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"item amt" "pay pay" "act act";gap:6px;padding:10px 0;border-bottom:1px solid var(--line)}
  .a-tbl.pos-paid tr>td{display:block;border:0;padding:0;min-width:0;width:auto}
  .a-tbl.pos-paid td.ops-item{grid-area:item}.a-tbl.pos-paid td.num{grid-area:amt;font-weight:600}
  .a-tbl.pos-paid td.ops-pay{grid-area:pay;min-width:0}
  .a-tbl.pos-paid td.ops-actions,.pos-layout.has-panel .pos-panel .a-tbl.pos-paid td.ops-actions{grid-area:act;min-width:0;padding:0;text-align:left}
  .a-tbl.pos-paid td.ops-actions .ops-btns{justify-content:flex-start}

  /* 訂位：時間｜客人｜狀態 一行，備註，桌號＋編號，操作 */
  .a-tbl.resv-tbl tr{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"time guest state" "note note note" "tbl tbl id" "act act act";gap:6px 10px;padding:12px 0;border-bottom:1px solid var(--line)}
  .a-tbl.resv-tbl tr>td{display:block;border:0;padding:0;min-width:0;width:auto}
  .a-tbl.resv-tbl tr>td:nth-child(1){grid-area:time}.a-tbl.resv-tbl tr>td:nth-child(2){grid-area:guest;overflow-wrap:anywhere}
  .a-tbl.resv-tbl tr>td:nth-child(3){grid-area:note}.a-tbl.resv-tbl tr>td:nth-child(3):empty{display:none}
  .a-tbl.resv-tbl tr>td:nth-child(4){grid-area:tbl}.a-tbl.resv-tbl tr>td:nth-child(5){grid-area:state;text-align:right}
  .a-tbl.resv-tbl tr>td:nth-child(6){grid-area:id;align-self:center;text-align:right;color:var(--muted)}
  .a-tbl.resv-tbl td.ops-actions{grid-area:act;min-width:0;text-align:left;white-space:normal!important;display:flex;flex-wrap:wrap;gap:6px;line-height:1.2}
  .a-tbl.resv-tbl td.ops-actions .btn{min-height:44px}
  .a-tbl.resv-tbl tr.resv-day,.a-tbl.resv-tbl tr:has(>td[colspan]){display:block;padding:0;border-bottom:0}
  .a-tbl.resv-tbl tr.resv-day>td,.a-tbl.resv-tbl tr>td[colspan]{padding:8px 10px;border-radius:8px}
}
/* 右欄固定高度時，各區塊（會員、發票…）依內容高度排列、整欄自己捲；不被壓成 0 高而互相覆蓋 */
.pos-panel-scroll>.pos-pay{grid-auto-rows:max-content}
.pos-pay>.pos-sum,.pos-pay>.pos-invoice{flex:none}
@media(min-width:1000px){.pos-menu-box .pos-menu{grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;grid-auto-rows:max-content}}
/* iPad 橫向優先：右欄最上面是會員列（一行：手機＋查會員＋掃會員），左欄菜單用橫式小卡，一屏看得到更多品項 */
.pos-panel-scroll>.pos-pay{grid-template-columns:minmax(0,1fr)}.pos-pay>*{min-width:0}
.pos-member-bar{display:flex;align-items:center;gap:8px}
.pos-cash-quick{flex:1 1 100%;min-width:0}.pos-cash-quick button{min-width:0;padding:0 6px}
.pos-member-bar #pos-yan-phone{flex:1;min-width:6em;min-height:48px;font:inherit;font-size:1.05rem;padding:8px 12px;border:1px solid var(--ink);border-radius:8px;background:var(--card);color:var(--ink);font-variant-numeric:tabular-nums}
.pos-member-bar .btn{flex:none;min-height:48px;padding:0 12px}
.pos-member-who{padding:8px 12px;border:1px solid var(--ok-line);border-radius:8px;background:var(--ok-soft);color:var(--ok)}
.pos-table-members{margin:10px 0}.pos-table-members__list{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.pos-lp>summary{list-style:none;cursor:pointer;min-height:44px;display:flex;align-items:center;gap:8px}.pos-lp>summary::-webkit-details-marker{display:none}
.pos-pay>.pos-lp{margin:0;padding:4px 12px}.pos-pay>.pos-lp h3{margin:0}
@media(min-width:1000px){
.pos-menu-box .pos-item{display:grid;grid-template-columns:52px minmax(0,1fr);grid-auto-rows:auto;column-gap:10px;row-gap:2px;align-items:center;min-height:68px;padding:8px}
.pos-menu-box .pos-item__img{grid-row:1/span 3;width:52px;height:52px;aspect-ratio:auto;margin:0}
.pos-menu-box .pos-item__img--ph{font-size:1.4rem}
.pos-menu-box .pos-item>b{grid-column:2;overflow-wrap:anywhere}
.pos-menu-box .pos-item>span:not(.pos-item__img),.pos-menu-box .pos-item>small{grid-column:2;margin-top:0}
.pos-menu-box .pos-add{max-height:none}
.pos-menu-box .pos-add .note-chips{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:2px}
.pos-menu-box .pos-add .note-chips button{flex:0 0 auto}
}
/* iPad 橫向中欄只有 320–390px：已點品項改卡片列（勾選｜品名＋金額＋⋯ 一行、數量下一行），品名不再被擠成一字一行、操作鍵不被裁 */
@media(min-width:1000px){
.pos-mid .pos-lines-wrap{border:0;border-radius:0;overflow:visible}
.pos-mid .a-tbl.pos-lines,.pos-mid .a-tbl.pos-lines tbody{display:block}
.pos-mid .a-tbl.pos-lines thead{display:none}
.pos-mid .a-tbl.pos-lines tr{display:grid;grid-template-columns:32px minmax(0,1fr) auto 48px;grid-template-areas:"pick item amt more" "pick qty qty qty";align-items:start;column-gap:6px;row-gap:6px;padding:10px 0;border-bottom:1px solid var(--line)}
.pos-mid .a-tbl.pos-lines tr>td{display:block;border:0;padding:0!important;min-width:0;width:auto}
.pos-mid .a-tbl.pos-lines tr>td:first-child{grid-area:pick;width:auto;padding-top:8px!important}
.pos-mid .a-tbl.pos-lines td.ops-item{grid-area:item}
.pos-mid .a-tbl.pos-lines td.pos-amt{grid-area:amt;display:block;min-height:0;margin:0;border:0;background:none;text-align:right;white-space:nowrap;font-size:1.1rem}
.pos-mid .a-tbl.pos-lines td.pos-amt b{font-size:1.1rem;letter-spacing:0}
.pos-mid .a-tbl.pos-lines td.ops-actions{grid-area:more;text-align:right}
.pos-mid .a-tbl.pos-lines td.pos-qty-col{grid-area:qty;display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.pos-mid .a-tbl.pos-lines td.pos-qty-col:empty{display:none}
.pos-mid .pos-part-wrap{margin-top:0;flex-direction:row;flex-wrap:wrap;gap:6px;padding:2px 4px 2px 10px}
.pos-mid .pos-line__img{width:36px;height:36px;margin-right:8px}
.pos-mid .a-tbl.pos-lines tr.pos-group{display:block;padding:0;border-bottom:0}
.pos-mid .a-tbl.pos-lines tr.pos-group>td{padding:8px 10px!important;border-radius:8px}
.pos-mid .a-tbl.pos-lines tr>td[colspan]{grid-column:1/-1}
.pos-mid .a-tbl.pos-lines tr.pos-comp,.pos-mid .a-tbl.pos-lines tr.pos-credit{background:var(--ok-faint)}
.pos-mid .a-tbl.pos-lines tr.pos-comp td,.pos-mid .a-tbl.pos-lines tr.pos-credit td{background:none}
.pos-mid .pos-lines-wrap{overflow:visible}
.pos-invoice-head b,.pos-invoice-head .pos-inv-badge{white-space:nowrap;flex:none}.pos-invoice-head{flex-wrap:wrap;row-gap:4px}
}

/* ===== 結帳頁三欄重排（iPad 橫向）：左＝已點清單＋出餐單／換桌／清桌；中＝分類單排橫滑＋餐點／細項；右＝付款單排＋會員入口＋收款 ===== */
.pos-left{display:flex;flex-direction:column;min-height:0}
.pos-left .pos-mid{flex:1;min-height:0;overflow:auto}
.pos-line-note{display:inline-block;margin-top:2px;padding:2px 8px;border-radius:6px;background:var(--accent-soft);font-size:1rem;font-weight:600;overflow-wrap:anywhere}
.pos-lines tr[data-edit-line]{cursor:pointer}
.pos-lines tr.is-editing{outline:2px solid var(--ink);outline-offset:-2px;background:var(--accent-soft)}
.pos-cats{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;max-width:100%;-webkit-overflow-scrolling:touch;touch-action:pan-x;scrollbar-width:none;padding-bottom:2px}
.pos-cats::-webkit-scrollbar{display:none}
.pos-cats button{flex:0 0 auto;white-space:nowrap}
.pos-methods{display:grid;grid-template-columns:repeat(auto-fill,minmax(4.5rem,1fr))!important;gap:6px}
.pos-method span{flex-direction:column;gap:2px;min-height:60px;padding:4px 2px;font-size:1rem;line-height:1.15}
.pos-method span i{font-style:normal;font-size:1.35rem;line-height:1}
.pos-method span b{font-weight:600;font-size:1rem;white-space:nowrap}
.pos-member-entry{all:unset;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;min-height:52px;padding:6px 14px;border:1px solid var(--ink);border-radius:10px;background:var(--card);cursor:pointer}
.pos-member-entry b{display:block;font-weight:600}.pos-member-entry small{display:block;color:var(--muted);font-size:1rem}
.pos-member-entry.has{border-color:var(--ok-line);background:var(--ok-soft)}.pos-member-entry i{font-style:normal;font-size:1.5rem;color:var(--muted)}
.pos-member-entry:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.pos-member-ov .pos-move-box .pos-member-bar{margin:12px 0;flex-wrap:wrap}
.pos-member-ov .pos-move-box .pos-member-who{margin:10px 0}
.pos-menu-box .pos-opt-pane{display:flex;flex-direction:column;min-height:0;height:100%}
.pos-opt-pane .pos-opt-body{padding:4px 4px 10px}
.pos-opt-pane .pos-opt-actions{padding:12px 4px 4px}
.pos-dock{gap:8px}.pos-dock #pos-print-receipt{flex:none;min-height:64px;padding:0 14px;white-space:nowrap}
/* 左欄底部動作鍵（KK 11/5）：一排等寬、圖示在上＋短字在下，不換第二排；完整說明放 title／aria-label */
.pos-table-actions{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:6px}
.pos-table-actions .btn{width:auto;min-width:0;min-height:60px;padding:6px 2px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;white-space:nowrap;line-height:1.1}
.pos-table-actions .btn .ic{margin:0}
.pos-table-actions .btn span{overflow:hidden;text-overflow:clip;max-width:100%}
@media(min-width:1000px){
.pos-layout.has-panel .pos-panel-scroll{grid-template-columns:minmax(300px,1fr) minmax(0,1.25fr) minmax(320px,.9fr);grid-template-rows:auto minmax(0,1fr) auto}
.pos-panel-scroll>.pos-left{grid-column:1;grid-row:2/span 2;padding-right:12px;border-right:1px solid var(--line);overflow:hidden}
.pos-panel-scroll>.pos-menu-box{grid-column:2;grid-row:2/span 2;border-right:0;padding-right:0;position:relative;display:block;height:100%;min-height:0;overflow:hidden;margin-top:0}
.pos-menu-box .pos-menu-body{position:absolute;inset:0;display:flex;flex-direction:column;min-height:0}
.pos-menu-box .pos-menu{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;flex:1;min-height:0;overflow:auto;align-content:start;grid-auto-rows:max-content}
.pos-menu-box .pos-item{display:flex;flex-direction:column;align-items:stretch;min-height:0;padding:6px}
.pos-menu-box .pos-item__img{grid-row:auto;width:100%;height:auto;aspect-ratio:4/3;margin:0 0 4px}
.pos-menu-box .pos-item>b,.pos-menu-box .pos-item>span:not(.pos-item__img),.pos-menu-box .pos-item>small{grid-column:auto}
.pos-menu-box .pos-opt-pane{overflow:hidden}.pos-menu-box .pos-opt-pane .pos-opt-body{overflow:auto;flex:1;min-height:0}
.pos-panel-scroll>.pos-pay{grid-column:3;grid-row:2;grid-template-rows:none}
.pos-panel-scroll>.pos-dock{grid-column:3;grid-row:3;align-self:end;position:static;margin-top:0}
.pos-left .pos-table-actions{flex:none;margin-top:10px}
}
.pos-method span i{display:block;width:1.5rem;height:1.5rem}.pos-method span i svg{display:block;width:100%;height:100%}
.pos-dock{flex-wrap:wrap;row-gap:6px}
.pos-dock>.pos-dock-change,.pos-dock>.pos-dock-due{flex:1 1 100%;flex-direction:row;align-items:baseline;justify-content:space-between;min-width:0}
.pos-dock #pos-checkout{flex:1 1 0;min-width:0;white-space:nowrap}
.pos-dock #pos-print-receipt{flex:0 0 auto;min-width:6.5em}
.pos-left .pos-mid{padding-bottom:4px}

/* 桌位固定＋單卡可拖＋右側外帶直欄 */
.pos-board{display:flex;gap:12px;align-items:flex-start}
.pos-board-tables{flex:1;min-width:0}
.pos-takeouts{flex:0 0 clamp(150px,22%,210px);display:flex;flex-direction:column;gap:8px;padding-left:12px;border-left:1px dashed var(--line)}
.pos-takeouts h3{margin:0;font-size:1rem}.pos-takeouts .pos-table{width:100%}
.pos-slot{display:flex;flex-direction:column;gap:4px;padding:6px;border:1px dashed var(--line);border-radius:12px;background:var(--paper-alt);min-width:0;height:100%;box-sizing:border-box}
.pos-slot-name{font-weight:700;font-size:1rem;color:var(--ink);line-height:1}
.pos-slot .pos-table{width:100%;flex:1}.pos-slot .pos-table>b{display:none}
.pos-slot.drop-ok,.pos-takeouts.drop-ok{outline:3px solid var(--ink);outline-offset:1px;background:var(--card)}
.pos-table[data-pos-table]{touch-action:pan-y;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.pos-table.dragging-src{opacity:.35}
.pos-ghost{position:fixed!important;z-index:1000;pointer-events:none;box-shadow:0 10px 28px rgba(0,0,0,.3);opacity:.95;transform:rotate(-2deg)}
.pos-table .pos-order-time{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:600}.pos-table.on .pos-order-time{color:var(--paper)}
.pos-floor-slot .pos-slot{height:100%}
@container (max-width:599px){.pos-floor:not(.pos-floor-edit){display:none}}
@media(max-width:700px){.pos-board{flex-direction:column}.pos-takeouts{flex:none;width:100%;border-left:0;border-top:1px dashed var(--line);padding:10px 0 0;flex-direction:row;flex-wrap:wrap}.pos-takeouts .pos-table{width:calc(50% - 4px)}}
/* 套餐內容：出餐看板／查單逐項列出（主餐、飲品各一行，規格標籤沿用 .ops-spec） */
.ops-parts{display:grid;gap:4px;margin:4px 0 0 10px;padding-left:10px;border-left:3px solid var(--ink)}
.ops-part{font-size:1.15rem;line-height:1.35}.ops-part b{font-weight:700}
.pos-line-parts{display:inline-block;margin-top:2px;font-size:1rem;font-weight:600;color:var(--ink);overflow-wrap:anywhere}

/* 單卡＝單子：票頭（桌號＋狀態）／虛線／內容／票尾（時間）；內容不換行爆版，過長省略 */
.pos-ticket{overflow:hidden;gap:0!important;padding:0!important;min-height:0!important;border-radius:6px;background:#fffdf7;box-shadow:0 1px 2px rgba(0,0,0,.12);position:relative}
.pos-ticket.takeout{background:#fffdf7}
.pos-ticket .tk-head{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:6px 8px;background:var(--paper-alt);border-bottom:2px dashed var(--line);white-space:nowrap}
.pos-ticket .tk-head b{display:block!important;font-size:1.125rem;overflow:hidden;text-overflow:ellipsis}
.pos-ticket .tk-head .pill{font-size:1rem;padding:1px 6px;flex:none}
.pos-ticket .tk-head .tk-party{flex:none;font-size:1rem;font-weight:700}
.pos-ticket .tk-body{display:flex;flex-direction:column;gap:2px;padding:6px 8px;min-width:0}
.pos-ticket .tk-body>*{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:1rem;color:var(--muted)}
.pos-ticket .tk-amt{font-size:1.125rem!important;font-weight:700;color:var(--ink)}
.pos-ticket .tk-pay{color:var(--warn-ink)!important;font-weight:600}.pos-ticket .tk-warn{color:#9a4a00!important;font-weight:600}
.pos-ticket .tk-foot{display:block;padding:4px 8px;border-top:1px dashed var(--line);font-size:1rem;white-space:nowrap;color:var(--muted);font-variant-numeric:tabular-nums}
.pos-ticket .pos-resv{white-space:nowrap}
.pos-ticket.on{background:var(--ink)}.pos-ticket.on .tk-head{background:rgba(255,255,255,.12);border-bottom-color:rgba(255,255,255,.35)}.pos-ticket.on .tk-body>*,.pos-ticket.on .tk-foot,.pos-ticket.on .tk-head b{color:var(--paper)!important}.pos-ticket.on .tk-foot{border-top-color:rgba(255,255,255,.35)}
.pos-ticket.payreq{background:var(--warn-soft)}.pos-ticket.payreq.on{background:var(--ink)}
.pos-ticket.idlewarn{background:#fff1e0}.pos-ticket.idlewarn.on{background:var(--ink)}
.pos-slot .pos-ticket{flex:0 0 auto;align-self:stretch}
.pos-slot{height:auto;min-height:100%}
/* 外帶欄縮小 */
.pos-takeouts{flex:0 0 clamp(104px,13%,132px)!important;padding-left:8px!important;gap:6px!important}
.pos-takeouts h3{font-size:1rem!important}
.pos-takeouts .pos-ticket .tk-head b{font-size:1rem}
@media(max-width:700px){.pos-takeouts .pos-table{width:calc(50% - 3px)}}
/* 最下排按鈕：等高、等寬、同一列對齊（外帶／加開桌號／編輯桌位） */
.pos-open{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;align-items:stretch}
@media (max-width:600px){.pos-open{grid-template-columns:repeat(2,minmax(0,1fr))}} /* 手機底列 2×2（寫成帶空白，避免被 test-pos-phone-375 當成主手機區塊） */
.pos-open .btn,.pos-open .btn--solid,.pos-open .btn--ghost{flex:none;min-height:56px;padding:10px 8px;display:flex;align-items:center;justify-content:center;font-size:1rem;white-space:nowrap}
.pos-sub{justify-content:stretch}.pos-sub .a-toolbar,.pos-sub .a-toolbar .btn{width:100%}.pos-sub .a-toolbar .btn{min-height:56px}

/* v3：外帶欄與「櫃檯結帳」同一列標題；桌況與外帶各自捲動 */
.pos-tables-row{display:flex;gap:12px;align-items:stretch;min-height:0}
.pos-tables-main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}
.pos-takeouts{flex:0 0 clamp(112px,13%,140px)!important;display:flex;flex-direction:column;gap:0!important;min-height:0;padding-left:10px!important;border-left:1px dashed var(--line)}
.pos-takeouts>.ops-head h2{white-space:nowrap}
.pos-takeout-list{display:flex;flex-direction:column;gap:8px;min-height:0;overflow:auto;padding-bottom:4px}
.pos-takeout-list .pos-table{width:100%}
@media(min-width:1000px){.pos-layout .pos-tables .pos-tables-row{flex:1}.pos-layout .pos-tables .pos-tables-main .pos-board{flex:1;min-height:0;overflow:auto}}
/* 有平面圖時，格子裡已擺在平面圖上的桌不再重複出現 */
@container (min-width:600px){.pos-grid .pos-slot.is-placed{display:none}}
.pos-board{display:block}
/* 單子不裁切：每一段是不可拆的小塊，放不下就整塊換行；高度跟內容走 */
.pos-ticket{overflow:visible}
.pos-ticket .tk-head{flex-wrap:wrap;white-space:normal;row-gap:2px}
.pos-ticket .tk-head .pill{white-space:nowrap}
.pos-ticket .tk-body>*{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}
.pos-ticket .tk-foot{display:flex;flex-wrap:wrap;column-gap:6px;white-space:normal}.pos-ticket .tk-foot>span{white-space:nowrap}
.pos-floor-slot.is-sized .pos-slot{height:auto;min-height:100%}
.pos-floor-slot.is-sized .pos-table.pos-ticket{height:auto}
.pos-slot .pos-ticket>.tk-head>b{display:none}
/* 空桌＝同一個桌位框，裡面是「＋ 開桌」虛線單 */
.pos-table.empty{align-items:center;justify-content:center;min-height:64px;border:2px dashed var(--line);border-radius:6px;background:transparent}
.pos-table.empty .tk-open{color:var(--muted);font-weight:600;white-space:nowrap}
.pos-slot .pos-table.empty>b{display:none}
.pos-table.empty.reserved{border-color:var(--ink)}
@media(max-width:700px){.pos-tables-row{flex-direction:column}.pos-takeouts{flex:none!important;width:100%;border-left:0;border-top:1px dashed var(--line);padding:10px 0 0!important}.pos-takeout-list{flex-direction:row;flex-wrap:wrap}.pos-takeout-list .pos-table{width:calc(50% - 4px)}}
/* 兩欄標題同高：都固定 44px、垂直置中 */
.pos-tables-row .ops-head{min-height:44px;margin-bottom:12px}
.pos-tables-row .ops-head h2{line-height:1.2}
.pos-tables-row .ops-head .tip-q{margin-right:0}.pos-tables-row .ops-head .pos-edit-head{flex:none;margin:0 auto 0 8px;min-height:44px;white-space:nowrap}
.pos-floor-slot.is-sized{display:flex;align-items:stretch}.pos-floor-slot.is-sized>.pos-slot{flex:1;min-width:0;min-height:0;height:auto}
/* 單子只顯示時間 */
.pos-ticket .tk-time{display:block;padding:10px 8px;font-size:1.25rem;font-weight:700;text-align:center;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.pos-ticket.on .tk-time{color:var(--paper)}
.pos-ticket .tk-head{justify-content:center}
.pos-slot-resv:empty{display:none}.pos-slot-resv .pos-resv{display:block;white-space:normal;overflow-wrap:anywhere}
/* 單子上的點餐人 */
.pos-ticket .tk-time{padding-bottom:4px}
.pos-ticket .tk-who{display:block;padding:0 8px 8px;font-size:1rem;text-align:center;color:var(--ink);overflow-wrap:anywhere;line-height:1.3}
.pos-ticket.on .tk-who{color:var(--paper)}
.pos-ticket .tk-head{justify-content:center;gap:6px}.pos-slot .pos-ticket>.tk-head{display:flex}.pos-slot .pos-ticket>.tk-head>b{display:none}
.pos-ticket .tk-head .pill{font-size:1rem}
/* 手機載具全螢幕掃描：整個畫面給相機，下方保留手動輸入 */
.pos-scan-full{position:fixed;inset:0;z-index:10000;background:#000;color:#fff;display:flex;flex-direction:column;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
.pos-scan-full-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;font-size:1.25rem}
.pos-scan-full-head .btn{min-height:48px;min-width:88px;color:#fff;border-color:rgba(255,255,255,.6);background:transparent}
.pos-scan-full-cam{position:relative;flex:1;min-height:0;overflow:hidden}
.pos-scan-full-cam video{display:block;width:100%;height:100%;object-fit:cover}
.pos-scan-full-frame{position:absolute;left:50%;top:50%;width:min(80%,560px);height:min(30%,200px);transform:translate(-50%,-50%);border:3px solid #FFDE34;border-radius:12px;box-shadow:0 0 0 100vmax rgba(0,0,0,.35);pointer-events:none}
.pos-scan-full-hint{margin:0;padding:12px 16px 4px;text-align:center;font-size:1.125rem}
.pos-scan-full-foot{display:flex;gap:8px;padding:8px 16px 16px}
.pos-scan-full-foot input{flex:1;min-width:0;min-height:56px;font-size:1.25rem;padding:0 12px;border-radius:8px;border:0}
.pos-scan-full-foot .btn{flex:none;min-height:56px;min-width:96px}
.pos-scan-full-foot .btn--solid{background:#FFDE34;color:#111;border-color:#FFDE34;font-weight:700}
/* 點餐人：字級已是 16px 下限，改用淡色、細字、較緊行高讓它退後；時間放大做主角 */
.pos-ticket .tk-time{font-size:1.5rem}
.pos-ticket .tk-who{font-weight:400;color:var(--muted);line-height:1.2;letter-spacing:-.01em}
.pos-ticket.on .tk-who{color:rgba(255,255,255,.7)}
/* 座席時間大字；開桌時刻、點餐人小字淡色 */
.pos-ticket .tk-time{padding:8px 8px 0;font-size:1.5rem}
.pos-ticket .tk-open{display:block;padding:0 8px 2px;font-size:1rem;text-align:center;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.pos-ticket .tk-who{padding:0 8px 8px}
.pos-ticket .tk-open:last-child{padding-bottom:8px}
.pos-ticket.on .tk-open{color:rgba(255,255,255,.7)}
/* 結帳桌況：平面圖填滿畫面高度、不捲動；單子一律在桌位框內（JS fit() 依空間加 tk-c1..c4 逐級精簡） */
@media(min-width:1000px){.pos-layout .pos-tables .pos-tables-main .pos-board{display:flex;flex-direction:column}.pos-layout .pos-tables .pos-board>.pos-floor:not(.pos-floor-edit){flex:1 1 auto;height:auto;min-height:300px;margin-bottom:0}}
.pos-floor-slot{overflow:hidden}
.pos-floor-slot.tk-c1 .pos-slot{padding:4px;gap:2px}.pos-floor-slot.tk-c1 .pos-ticket .tk-head{padding:2px 6px}.pos-floor-slot.tk-c1 .pos-ticket .tk-time{font-size:1.25rem;padding:2px 6px 0}.pos-floor-slot.tk-c1 .pos-ticket .tk-who{padding:0 6px 4px}.pos-floor-slot.tk-c1 .pos-table.empty{min-height:44px}
.pos-floor-slot.tk-c2 .pos-ticket .tk-who{display:none}
.pos-floor-slot.tk-c3 .pos-ticket .tk-open{display:none}.pos-floor-slot.tk-c3 .pos-ticket .tk-time{padding-bottom:4px}
.pos-floor-slot.tk-c4 .pos-ticket .tk-time{font-size:1.125rem;padding-top:0;padding-bottom:2px}.pos-floor-slot.tk-c4 .pos-ticket .tk-head .pill{padding:0 6px}
/* 下方按鈕矮一點（仍 ≥44px 觸控） */
.pos-open{margin-top:8px}
.pos-open .btn,.pos-open .btn--solid,.pos-open .btn--ghost,.pos-open .pos-pause-btn{min-height:44px;padding:6px 8px}
.pos-sub .a-toolbar .btn{min-height:44px}
/* 座席時間字級縮小；點餐人改膠囊（每人一顆，超過 3 人顯示 +N） */
.pos-ticket .tk-time,.pos-floor-slot.tk-c1 .pos-ticket .tk-time{font-size:1.125rem}
.pos-floor-slot.tk-c4 .pos-ticket .tk-time{font-size:1rem}
.pos-ticket .tk-who{display:flex;flex-wrap:wrap;justify-content:center;gap:4px;line-height:1.2}
.pos-ticket .tk-who-pill{display:inline-block;max-width:100%;padding:1px 8px;border-radius:999px;background:var(--paper-alt);border:1px solid var(--line);color:var(--ink);font-size:1rem;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pos-ticket .tk-who-more{color:var(--muted)}
.pos-ticket.on .tk-who-pill{background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.35);color:var(--paper)}
/* 開桌時刻不超出桌位寬度：字級守 16px 下限（test-public-typography），放不下就截斷 */
.pos-floor-slot{container-type:inline-size}
.pos-ticket .tk-open{font-size:1rem;max-width:100%;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis}
.pos-floor-slot .pos-ticket .tk-open{padding-left:4px;padding-right:4px}
/* 會員卡是 QR：掃描框改正方形 */
.pos-scan-full-frame--qr{width:min(70vmin,420px);height:min(70vmin,420px)}
/* 數字輸入框：用 type=number 叫出數字鍵盤，隱藏桌機版上下微調箭頭 */
input[type=number]{-moz-appearance:textfield;appearance:textfield}
input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

/* 編輯桌位：完成／還原／取消放在標題列（iPad 橫放 .pos-tables 鎖一個畫面高，按鈕放在平面圖下方會被裁掉，KK 11/2）；靠左，避開右上角客人呼叫卡；平面圖過高時整區可捲動 */
.pos-edit-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px}.pos-edit-acts{display:flex;flex-wrap:wrap;gap:8px}
@media(min-width:1000px){.pos-layout .pos-tables.pos-editing{overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.pos-layout .pos-tables.pos-editing .pos-floor-edit{flex:none}.pos-layout .pos-tables.pos-editing .pos-edit-bar{position:sticky;top:0;z-index:6;background:var(--card,var(--paper));padding:6px 0;margin-top:-6px}}

/* 自動出單狀態（結帳頁底部）：運行中／未接只是一行小字，不佔版面（KK 11/2）；暫停維持醒目 */
.pos-sub .pos-print-mini{display:inline-flex;align-items:center;gap:6px;width:auto;margin:0 auto 0 0;font-size:1rem;color:#9a958a;line-height:1.3;white-space:nowrap}
.pos-print-dot{width:7px;height:7px;border-radius:50%;background:#b9b4a6;flex:none}.pos-print-dot.is-ok{background:#2e9e5b}.pos-print-dot.is-bad{background:#c0392b}.pos-sub .pos-print-off{color:#b03a2e}
.pos-print-link{background:none;border:0;padding:4px 2px;margin-left:4px;font:inherit;color:inherit;text-decoration:underline;cursor:pointer}

/* 結帳右欄（KK 11/5）：會員 → 發票 → 支付方式 → 結帳內容。每區一個小標題、區塊之間只用細線分隔，不再框中框；應收在結帳內容最後一列 */
.pos-pay{gap:0}
.pos-pay>.pos-member-entry{margin-bottom:4px}
.pos-blk{display:grid;gap:8px;padding:12px 0;border-top:1px solid var(--line)}
.pos-pay>.pos-blk:first-of-type{border-top:0}
.pos-blk-h,.pos-blk>.pos-invoice-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:0;padding:4px 0}
.pos-blk-h>b,.pos-blk>.pos-invoice-head>b{font-size:1rem;font-weight:600;color:var(--muted);letter-spacing:.04em}
.pos-pay>.pos-invoice.pos-blk{border:0;border-top:1px solid var(--line);border-radius:0;padding:12px 0}
.pos-invoice .pos-invoice-body{padding:0;border:0;border-radius:0;background:none;margin:0;gap:8px}
.pos-invoice .pos-invoice-fields:not(:has(.pos-inv-row:not([hidden]))){display:none}
.pos-link{all:unset;box-sizing:border-box;cursor:pointer;min-height:44px;padding:0 4px;display:inline-flex;align-items:center;font-size:1rem;color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.pos-link:disabled{color:var(--muted);cursor:default;text-decoration:none}
.pos-link:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.pos-blk--pay .pos-cash{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.pos-blk--pay .pos-cash label{flex:1 1 100%;display:flex;align-items:center;gap:10px}
.pos-blk--pay .pos-cash input{flex:1;width:auto;min-width:0}
.pos-blk--pay .pos-cash-quick{flex:1 1 100%}
.pos-blk--pay .pos-split{border:0;padding:0;background:none}
.pos-blk--sum .pos-sum{border:0;border-radius:0;background:none}
.pos-blk--sum .pos-sum>div{padding:2px 0;min-height:44px}
.pos-blk--sum .pos-sum>div+div{border-top:1px dashed var(--line)}
.pos-blk--sum .pos-sum .pos-disc-presets,.pos-blk--sum .pos-sum .pos-discount-form{padding:0 0 8px;background:none}
.pos-blk--sum .pos-sum .pos-disc-presets{border-top:0}
/* 支付方式（KK 11/9）：依右欄寬自動排欄（每格至少 4.5rem：320px 右欄 4 欄、362px 以上 5 欄），長名稱在格內換行，不撐寬右欄 */
.pos-blk--pay .pos-method{min-width:0}
.pos-blk--pay .pos-method span{min-width:0;max-width:100%}
.pos-blk--pay .pos-method span b{white-space:normal;word-break:normal;overflow-wrap:anywhere;text-align:center;line-height:1.05;max-width:100%}
.pos-blk--sum .pos-sum:not(:has(>div:not([hidden]))){display:none}
/* 訂位帶位選桌（KK 11/7）：使用中的桌停用 */
.pos-seat-grid .pos-move-opt:disabled{opacity:.45;cursor:not-allowed;background:var(--line)}
.pos-seat-grid .pos-move-opt.busy{background:var(--ink);border-color:var(--ink);color:var(--paper)}.pos-seat-grid .pos-move-opt.busy small{color:inherit}
.pos-seat-foot{display:flex;flex-wrap:wrap;gap:8px}.pos-seat-foot .btn{white-space:nowrap;flex:1 1 auto}.pos-seat-foot [data-ok]{flex:1 1 100%}

/* 桌況（KK 11/7）：外帶單＋「＋ 加開桌號」橫向一排可滾動，放在置底按鈕上方；底列置底；列印狀態放「編輯桌位」旁 */
.pos-foot>.pos-takeouts{flex:none!important;display:flex;flex-direction:row!important;flex-wrap:nowrap!important;width:100%!important;align-items:center;gap:8px!important;width:auto;padding:8px 0 0!important;border-left:0!important;border-top:1px dashed var(--line);overflow:visible;min-width:0;max-width:100%}
.pos-foot>.pos-takeouts>.ops-head{flex:none;margin:0!important;min-height:44px}
.pos-foot>.pos-takeouts>.ops-head h2{margin:0;white-space:nowrap}
.pos-foot>.pos-takeouts .pos-takeout-list{display:flex;flex-direction:row!important;flex-wrap:nowrap!important;align-items:stretch;gap:8px;flex:1 1 auto;min-width:0;overflow-x:auto;overflow-y:hidden;padding:2px 0 4px;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;scrollbar-width:thin}
.pos-foot>.pos-takeouts .pos-takeout-list .pos-table{flex:0 0 auto;width:120px!important;min-height:52px;height:auto}
.pos-foot>.pos-takeouts .pos-takeout-list .hint{margin:0;white-space:nowrap}
.pos-foot>.pos-takeouts .pos-extra-btn{flex:0 0 auto;min-height:48px;padding:8px 14px;white-space:nowrap;margin-left:0}
.pos-tables-row .ops-head .pos-edit-head{margin-right:0}
.pos-tables-row .ops-head .pos-print-status{margin:0 auto 0 4px;min-width:0}
.pos-tables-row .ops-head .pos-print-mini{display:inline-flex;align-items:center;gap:6px;font-size:1rem;color:#9a958a;line-height:1.3;white-space:nowrap}
.pos-tables-row .ops-head .pos-print-off{color:#b03a2e}
.pos-tables-row .ops-head .pos-print-paused{margin:0 auto 0 4px;flex-wrap:nowrap}
.pos-foot{flex:none;margin-top:auto}.pos-foot .pos-open{margin-top:8px}
@media (max-width:999px){.pos-layout .pos-tables:not(.pos-editing){display:flex;flex-direction:column;min-height:calc(100dvh - var(--p-top,60px) - 48px)}.pos-foot{position:sticky;bottom:0;z-index:5;background:var(--card,#fff);padding-bottom:calc(8px + env(safe-area-inset-bottom));box-shadow:0 40px 0 var(--card,#fff)}}
@media (max-width:600px){.pos-open #pos-takeout{grid-column:1/-1}}
@media (max-width:700px){.pos-foot>.pos-takeouts{border-top:1px dashed var(--line)!important;padding:8px 0 0!important}.pos-foot>.pos-takeouts .pos-takeout-list .pos-table{width:92px!important}.pos-tables-row .ops-head{flex-wrap:wrap;row-gap:4px}.pos-tables-row .ops-head .pos-print-mini{white-space:normal}}
.pos-sub:empty{display:none}
/* 窄桌牌（一排 12 桌，iPad 直放約 60px，KK 11/7）：狀態膠囊與單卡內距收窄、文字可換行，不超出桌框 */
@container (max-width:84px){.pos-slot{padding:3px;gap:2px}.pos-floor-slot .pos-ticket .tk-head .pill,.pos-floor-slot .pos-slot .pill{flex:0 1 auto;min-width:0;padding:0 4px;white-space:normal;max-width:100%;box-sizing:border-box;text-align:center}.pos-ticket .tk-head{padding:2px 4px;flex-wrap:wrap}.pos-ticket .tk-time,.pos-ticket .tk-who,.pos-ticket .tk-open{padding-left:4px;padding-right:4px}}

/* 來源調查（KK 11/8）：一排 4 顆、選中反黑 */
.pos-blk--source .pos-blk-h{display:flex;align-items:baseline;gap:8px}
.pos-source-chips{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0}
.pos-source-chips button{text-align:center;padding:8px 4px}

/* 出餐分頁（pos-serve.js，KK 11/9）：桌位同結帳頁；有待出的桌亮起，點桌開右側（手機為底部）出餐清單 */
.serve-board .pos-table.serve-idle{cursor:default;opacity:.55;background:var(--paper-alt)}
.serve-board .pos-table.serve-idle .serve-none{color:var(--muted)}
.serve-board .pos-table.serve-has{border:2px solid var(--accent,var(--ink));box-shadow:0 2px 10px rgba(0,0,0,.08)}
.serve-board .pos-table.serve-has .pill{font-size:1.05rem;font-weight:700}
.serve-board .pos-table.serve-warn{background:var(--warn-soft)}.serve-board .pos-table.serve-warn .serve-age{color:var(--warn-ink);font-weight:700}
.serve-board .pos-table.serve-late{background:var(--danger-line);border-color:var(--danger)}.serve-board .pos-table.serve-late .serve-age{color:var(--danger);font-weight:700}
.serve-sheet-bg{position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.35)}
.serve-sheet{position:fixed;z-index:41;top:0;right:0;bottom:0;width:min(520px,100%);display:flex;flex-direction:column;background:var(--card);box-shadow:-8px 0 24px rgba(0,0,0,.18)}
.serve-sheet-head{display:flex;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line)}
.serve-sheet-head h2{margin:0;font-size:1.6rem}.serve-sheet-head .serve-close{margin-left:auto;min-height:48px}
.serve-lines{list-style:none;margin:0;padding:4px 16px;overflow:auto;flex:1}
.serve-line,.serve-order{display:flex;align-items:center;gap:10px;padding:12px 0;border-bottom:1px solid var(--line)}
.serve-line-body{flex:1;min-width:0}.serve-line .ops-line-top{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.serve-line .ops-name{font-size:1.2rem}
.serve-line.serve-warn .hint{color:var(--warn-ink)}.serve-line.serve-late .hint{color:var(--danger)}
.serve-btn{flex:none;min-width:96px;min-height:56px;font-size:1.1rem}
.serve-sheet-foot{padding:12px 16px;border-top:1px solid var(--line)}.serve-sheet-foot .serve-all{width:100%;min-height:56px}
@media(max-width:599px){.serve-sheet{top:auto;left:0;width:100%;max-height:85dvh;border-radius:16px 16px 0 0}}
/* 結帳右欄不可橫向捲動（KK 11/9）：只留上下捲動，內容一律在欄寬內折行 */
.pos-panel-scroll>.pos-pay,.pos-pay{overflow-x:hidden;overscroll-behavior-x:none;touch-action:pan-y}
/* 桌位內的字不要遮擋（KK 11/9）：編輯模式桌號／狀態不被 ×、改號蓋住（上面 min-height 已預留按鈕區）；
   桌況窄卡「點餐中」不直排（拿掉圓點、不換行）；高度不夠時依序藏人數、座席時間，一律不裁字 */
.pos-floor-edit .pos-drag>b,.pos-floor-edit .pos-drag>.pill{position:relative;z-index:1;display:inline-block;max-width:100%}
.pos-floor-edit .pos-drag.is-narrow{padding:4px 4px 0}.pos-floor-edit .pos-drag.is-narrow>b{display:block;overflow-wrap:anywhere;line-height:1.1}
.pos-floor-edit .pos-drag.is-narrow .pos-del-table,.pos-floor-edit .pos-drag.is-narrow .pos-ren-table,.pos-floor-edit .pos-drag.is-narrow .pos-rz{left:-2px;right:-2px;width:auto;max-width:none;border-radius:0}.pos-floor-edit .pos-drag.is-narrow .pos-rz{border-radius:0 0 8px 8px}
@container (max-width:84px){.pos-floor .pos-floor-slot[class] .pos-ticket .tk-head .pill,.pos-floor .pos-floor-slot[class] .pos-slot .pill{white-space:nowrap;padding:0 2px}.pos-floor .pos-floor-slot[class] .pos-ticket .tk-head .pill::before,.pos-floor .pos-floor-slot[class] .pos-slot .pill::before{display:none}}
@container (max-width:64px){.pos-floor .pos-floor-slot[class] .pos-slot{padding:2px}.pos-floor .pos-floor-slot[class] .pos-ticket .tk-head{padding:2px 0}.pos-floor .pos-floor-slot[class] .pos-ticket .tk-head .pill,.pos-floor .pos-floor-slot[class] .pos-slot .pill{padding:0}}
@container (max-width:84px){.pos-floor-slot .pos-ticket .tk-who-pill{white-space:normal;overflow-wrap:anywhere;text-overflow:clip}}
.pos-floor-slot.tk-c5 .pos-ticket .tk-party{display:none}
.pos-floor-slot.tk-c6 .pos-ticket .tk-time{display:none}
.pos-floor-slot.tk-c7 .pos-slot-resv{display:none}
