:root {
  --ink: #211d18;
  --muted: #6f675e;
  --paper: #f7f2e8;
  --sheet: #fffdf8;
  --line: #d9cebc;
  --vermilion: #a83a2a;
  --vermilion-dark: #7d281d;
  --jade: #17685f;
  --gold: #9c7318;
  --danger: #9e2828;
  --shadow: 0 14px 38px rgba(54, 40, 24, 0.09);
  font-family: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", system-ui, sans-serif;
  color: var(--ink);
  background: var(--paper);
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
html { min-width: 320px; background: var(--paper); }
body { margin: 0; min-height: 100vh; background: linear-gradient(180deg, #f4ecde 0, var(--paper) 18rem); }
button, input, select, textarea { font: inherit; }
a { color: var(--vermilion-dark); }
button, a { -webkit-tap-highlight-color: transparent; }
:focus-visible { outline: 3px solid #177d99; outline-offset: 3px; }

.skip-link { position: fixed; left: 1rem; top: -5rem; z-index: 99; background: var(--ink); color: white; padding: .8rem; }
.skip-link:focus { top: 1rem; }
.topbar { min-height: 72px; padding: 12px clamp(16px, 4vw, 48px); display: flex; align-items: center; justify-content: space-between; gap: 16px; border-bottom: 1px solid rgba(112, 91, 62, .18); }
.brand { display: inline-flex; align-items: center; gap: 10px; color: var(--ink); text-decoration: none; }
.brand-mark { width: 42px; height: 42px; display: grid; place-items: center; border-radius: 12px 12px 12px 3px; background: var(--vermilion); color: #fff8ed; font-family: serif; font-size: 1.45rem; }
.brand strong, .brand small { display: block; }
.brand small { color: var(--muted); font-size: .72rem; letter-spacing: .08em; margin-top: 2px; }
.identity { display: flex; align-items: center; justify-content: flex-end; gap: 10px; text-align: right; font-size: .86rem; color: var(--muted); }
.identity strong { color: var(--ink); display: block; }
.identity a { display: inline-block; margin-top: 3px; font-size: .76rem; }
.notification-toggle { position: relative; min-height: 42px; padding: 8px 11px; border: 1px solid var(--line); border-radius: 999px; background: var(--paper); color: var(--ink); font: inherit; cursor: pointer; }
.notification-toggle span { position: absolute; inset: -7px -5px auto auto; min-width: 22px; padding: 2px 5px; border-radius: 999px; background: var(--danger); color: white; font-size: .72rem; text-align: center; }
.notification-dialog { width: min(620px, calc(100vw - 24px)); max-height: min(760px, calc(100dvh - 24px)); border: 0; border-radius: 16px; padding: 18px; box-shadow: 0 24px 80px rgba(31, 24, 16, .28); }
.notification-dialog::backdrop { background: rgba(31, 24, 16, .44); }
.notification-dialog > header, .notification-card { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; }
.notification-list { display: grid; gap: 10px; margin-top: 14px; }
.notification-card { padding: 13px; border: 1px solid var(--line); border-radius: 12px; }
.notification-card.unread { border-left: 5px solid var(--accent); }
.notification-card h3 { margin: 6px 0; font-size: 1rem; overflow-wrap: anywhere; }
.notification-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }

.desktop-nav { max-width: 1180px; margin: 14px auto 0; padding: 0 24px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
/* 「更多」分組下拉（後台改善 H 帳4）：放不下時整排換行，不出現水平捲動 */
.nav-group { position: relative; }
.nav-group > summary { list-style: none; cursor: pointer; padding: 9px 14px; border-radius: 999px; color: var(--muted); font-weight: 700; }
.nav-group > summary::-webkit-details-marker { display: none; }
.nav-group > summary::after { content: " ▾"; font-size: .8em; }
.nav-group > summary[aria-current="true"] { background: var(--ink); color: white; }
.nav-group-menu { position: absolute; z-index: 20; top: calc(100% + 4px); left: 0; min-width: 11rem; display: grid; gap: 2px; padding: 6px; background: var(--sheet); border: 1px solid var(--line); border-radius: 12px; box-shadow: var(--shadow); }
.nav-group-menu a { border-radius: 8px; }
.more-dialog nav h3 { margin: 8px 0 0; font-size: .85rem; color: var(--muted); }
.identity .logout-button { min-height: 0; padding: 6px 12px; }
.desktop-nav a, .mobile-nav a, .mobile-nav button { color: var(--muted); text-decoration: none; font-weight: 700; }
.desktop-nav a { padding: 9px 14px; border-radius: 999px; }
.desktop-nav a[aria-current="page"] { background: var(--ink); color: white; }
main { width: min(100% - 32px, 1132px); margin: 30px auto 100px; }
.loading-panel, .sheet, .empty-state { background: var(--sheet); border: 1px solid var(--line); border-radius: 18px; box-shadow: var(--shadow); padding: clamp(20px, 4vw, 38px); }
.eyebrow { margin: 0 0 7px; color: var(--vermilion); font-size: .76rem; font-weight: 800; letter-spacing: .16em; text-transform: uppercase; }
h1, h2, h3 { font-family: "Noto Serif TC", "Songti TC", serif; line-height: 1.25; }
h1 { margin: 0; font-size: clamp(1.7rem, 5vw, 2.7rem); }
h2 { margin: 0 0 14px; font-size: clamp(1.2rem, 3vw, 1.55rem); }
p { line-height: 1.65; }
.page-head { display: flex; align-items: end; justify-content: space-between; gap: 18px; margin-bottom: 22px; }
.page-head p { color: var(--muted); margin: 8px 0 0; }
.grid { display: grid; gap: 18px; }
.grid.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.stack { display: grid; gap: 14px; }
.workbook { border-left: 4px solid var(--vermilion); }
.rule { height: 1px; background: var(--line); margin: 12px 0; }

label { display: grid; gap: 7px; font-weight: 700; font-size: .9rem; }
input, select, textarea { width: 100%; min-height: 46px; border: 1px solid #b8aa96; border-radius: 10px; background: #fff; color: var(--ink); padding: 10px 12px; }
textarea { min-height: 130px; resize: vertical; line-height: 1.6; }
input::placeholder, textarea::placeholder { color: #877d72; }
.field-note { margin: -2px 0 0; color: var(--muted); font-size: .8rem; font-weight: 400; }
.actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 8px; }
.button { min-height: 44px; border: 1px solid var(--ink); border-radius: 10px; background: transparent; color: var(--ink); padding: 9px 16px; font-weight: 800; cursor: pointer; text-decoration: none; display: inline-grid; place-items: center; }
.button.primary { border-color: var(--vermilion); background: var(--vermilion); color: white; }
.button.primary:hover { background: var(--vermilion-dark); }
.button.quiet { border-color: var(--line); color: var(--muted); }
.button:disabled { opacity: .55; cursor: wait; }

.filter-bar { display: grid; grid-template-columns: minmax(0, 1fr) minmax(180px, .35fr) auto; gap: 10px; align-items: end; }
.product-list, .change-list, .user-list, .audit-list { display: grid; gap: 10px; margin-top: 18px; }
.product-select-row { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 8px; align-items: center; min-width: 0; }
.product-check { display: grid; place-items: center; min-width: 44px; min-height: 44px; }
.product-check input { width: 20px; height: 20px; }
.product-select-row .product-row { min-width: 0; }
.order-list { display: grid; gap: 10px; margin-top: 18px; }
.inquiry-list { display: grid; gap: 10px; margin-top: 18px; }
.inquiry-workspace { grid-template-columns: minmax(0, 1.55fr) minmax(280px, .65fr); align-items: start; }
.inquiry-workspace > *, .inquiry-row > * { min-width: 0; }
/* 記一筆洽詢：桌機放右欄，手機排最上面（2026-10-19 後台檢討 A4） */
.inquiry-workspace > .inquiry-quick { order: 2; }
.inquiry-more summary { min-height: 44px; display: flex; align-items: center; cursor: pointer; font-weight: 700; color: var(--vermilion); }
.inquiry-more[open] summary { margin-bottom: 8px; }
.inquiry-more summary::before { content: "＋"; margin-right: 6px; }
.inquiry-more[open] summary::before { content: "－"; }
.picked-products { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.picked-products:empty { display: none; }
.picked-products li { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 6px 6px 12px; border: 1px solid var(--line); border-radius: 10px; background: #fff; }
.picked-products span { min-width: 0; overflow-wrap: anywhere; }
.inquiry-row { display: grid; grid-template-columns: minmax(130px, 1fr) minmax(150px, 1fr) minmax(170px, 1fr) auto; gap: 14px; align-items: center; padding: 14px; border: 1px solid var(--line); border-radius: 13px; background: #fff; color: var(--ink); text-decoration: none; }
.inquiry-row:hover { border-color: var(--vermilion); }
.inquiry-row small { display: block; margin-top: 4px; color: var(--muted); }
.inquiry-row strong, .inquiry-row small { overflow-wrap: anywhere; }
.pre-wrap { white-space: pre-wrap; }
.order-row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(150px, 1fr) minmax(180px, 2fr) auto auto; gap: 14px; align-items: center; padding: 14px; border: 1px solid var(--line); border-radius: 13px; background: #fff; color: var(--ink); text-decoration: none; }
.order-row:hover { border-color: var(--vermilion); }
.order-row small { display: block; margin-top: 4px; color: var(--muted); }
.order-items { display: flex; align-items: center; gap: 10px; min-width: 0; color: var(--muted); }
.order-items > span { display: -webkit-box; min-width: 0; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; }
.order-thumb { flex: none; display: block; width: 56px; height: 56px; border-radius: 9px; object-fit: cover; background: #f3ede2; }
.order-item-list { display: grid; margin: 0; padding: 0; list-style: none; }
.order-item { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: 12px; align-items: start; padding: 12px 0; border-bottom: 1px solid var(--line); }
.order-item:last-child { border-bottom: 0; }
.order-item .order-thumb { width: 64px; height: 64px; }
.order-item strong { overflow-wrap: anywhere; }
.order-item a { color: var(--vermilion-dark); }
.order-item small { display: block; margin-top: 4px; color: var(--muted); overflow-wrap: anywhere; }
.order-item b { color: var(--ink); }
.summary-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
.summary-grid article { padding: 15px; border: 1px solid var(--line); border-radius: 13px; background: var(--sheet); }
.summary-grid span, .summary-grid strong { display: block; }
.summary-grid span { color: var(--muted); font-size: .82rem; }
.summary-grid strong { margin-top: 5px; font-size: 1.25rem; }
.filter-chips { display: flex; gap: 7px; overflow-x: auto; padding: 2px 0 8px; }
.filter-chip { flex: 0 0 auto; min-height: 40px; border: 1px solid var(--line); border-radius: 999px; padding: 7px 13px; background: #fff; color: var(--ink); cursor: pointer; }
.filter-chip[aria-pressed="true"] { border-color: var(--ink); background: var(--ink); color: #fff; }
.detail-list { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 10px 16px; }
.detail-list dt { color: var(--muted); }
.detail-list dd { margin: 0; overflow-wrap: anywhere; }
.table-scroll { max-width: 100%; overflow-x: auto; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 11px 10px; border-bottom: 1px solid var(--line); text-align: left; }
.action-panel { border-left: 4px solid var(--gold); }
.task-list { display: grid; gap: 12px; }
.task-card { display: grid; grid-template-columns: 42px minmax(0, 1fr); gap: 14px; padding: 18px; border: 1px solid var(--line); border-left: 5px solid var(--ink); border-radius: 14px; background: var(--sheet); color: var(--ink); text-decoration: none; }
.task-card > span { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 50%; background: #eee8dc; font-weight: 800; }
.task-card h2, .task-card p { margin: 0; }
.task-card p { margin-top: 6px; color: var(--muted); }
.task-card.danger { border-left-color: var(--danger); }
.task-card.warning { border-left-color: var(--gold); }
.refresh-meta { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.today-summary { margin-bottom: 16px; }
.today-summary h2 { margin: 0 0 10px; font-size: 1.05rem; }
.today-summary .summary-grid { margin-bottom: 0; }
[data-no-tasks] { margin-bottom: 12px; }
.funnel-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; }
.funnel-grid article { padding: 14px; border-radius: 11px; background: #f3ede2; }
.funnel-grid span, .funnel-grid strong { display: block; }
.funnel-grid strong { margin-top: 4px; font-size: 1.4rem; }
.plain-headline { margin: 4px 0 14px; font-size: 1.22rem; font-weight: 700; line-height: 1.6; }
.plain-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.plain-grid article { padding: 14px; border: 1px solid var(--line); border-radius: 13px; background: #fff; }
.plain-grid span, .plain-grid strong { display: block; }
.plain-grid span { color: var(--muted); font-size: .86rem; }
.plain-grid strong { margin-top: 4px; font-size: 1.5rem; overflow-wrap: anywhere; }
.plain-grid p { margin: 6px 0 0; }
.range-chips { flex-wrap: wrap; overflow-x: visible; }
.range-form { display: flex; flex-wrap: wrap; align-items: end; gap: 8px 10px; margin: 0 0 12px; padding: 12px; border: 1px solid var(--line); border-radius: 13px; background: #fff; }
.range-form[hidden] { display: none; }
.range-form label { display: grid; gap: 4px; font-size: .86rem; color: var(--muted); }
.range-form input { min-height: 40px; font-size: 1rem; }
.range-form .meta { flex-basis: 100%; margin: 0; }
.search-table { width: 100%; border-collapse: collapse; }
.search-list { list-style: none; margin: 0; padding: 0; }
.search-list > li { padding: 12px 0; border-top: 1px solid var(--line); }
.search-list > li:first-child { border-top: 0; }
.search-word { display: flex; justify-content: space-between; gap: 8px; align-items: baseline; }
.search-word strong { font-size: 1.1rem; word-break: break-all; }
.search-word .count { flex: 0 0 auto; font-variant-numeric: tabular-nums; }
.search-facts { display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 4px 0 0; color: var(--muted); font-size: .86rem; }
.search-facts .is-none { color: #b42318; font-weight: 600; }
.search-clicks { margin: 6px 0 0; padding-left: 1.1em; font-size: .9rem; }
.search-clicks a { color: inherit; }
.plain-delta { color: var(--jade); font-size: .9rem; font-weight: 700; }
/* 自然流量（admin-organic.js）：讀不到、資料舊了的那句要看得見，不用表格（手機每列一張卡片） */
.organic-missing { margin: 8px 0; padding: 10px 12px; border-radius: 10px; background: #fff4e5; color: #8a4b00; font-weight: 600; }
.step-list, .visit-list { margin: 0; padding: 0; list-style: none; }
.step { display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.step-no { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 50%; background: #eee8dc; font-weight: 800; }
.step-name { display: block; color: var(--muted); font-size: .9rem; }
.step strong { display: inline-block; margin-right: 10px; font-size: 1.25rem; }
.step-drop { color: var(--vermilion-dark); font-size: .9rem; }
.step-bar { display: block; height: 8px; margin-top: 6px; border-radius: 99px; background: #f3ede2; overflow: hidden; }
.step-bar i { display: block; height: 100%; background: var(--gold); }
.step.is-missing strong { color: var(--muted); font-size: 1rem; }
.visit { padding: 12px 0; border-bottom: 1px solid var(--line); }
.visit p { margin: 6px 0 0; overflow-wrap: anywhere; }
.visit-head { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; }
.visit-head span { color: var(--muted); }
.visit-flags { display: flex; flex-wrap: wrap; gap: 6px; }
.visit-flags span { padding: 2px 9px; border-radius: 99px; background: #f3ede2; font-size: .86rem; }
.chart { display: block; width: 100%; height: auto; margin-top: 6px; }
.chart-axis { fill: var(--muted); font-size: 10px; }
.chart-grid { stroke: var(--line); stroke-width: 1; }
.chart-hit { cursor: pointer; }
.chart-hit:hover, .chart-hit.is-picked { fill: rgba(33, 29, 24, .07); }
.heat-cell { cursor: pointer; }
.heat-cell.is-picked { stroke: var(--ink); stroke-width: 1.5; }
.chart-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 6px 0 0; font-size: .84rem; color: var(--muted); }
.chart-legend span { display: inline-flex; align-items: center; gap: 5px; }
.chart-legend i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; }
.chart-legend i.is-line { height: 3px; border-radius: 2px; }
.chart-detail { margin: 8px 0 0; padding: 8px 10px; border-radius: 9px; background: #f3ede2; font-size: .92rem; font-weight: 700; overflow-wrap: anywhere; }
.chart-note { margin: 10px 0 0; line-height: 1.6; }
.chart-table { font-size: .86rem; white-space: nowrap; }
.chart-table th, .chart-table td { padding: 6px 8px; }
.chart-box details { margin-top: 10px; }
.chart-box summary { cursor: pointer; color: var(--vermilion-dark); font-weight: 700; }
.bar-rank { margin: 0; padding: 0; list-style: none; }
.bar-rank li { padding: 8px 0; border-bottom: 1px solid var(--line); }
.bar-rank li div { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; overflow-wrap: anywhere; }
.bar-rank strong { margin-left: auto; font-size: .9rem; }
.rank-bar { display: block; height: 6px; margin-top: 5px; border-radius: 99px; background: #f3ede2; overflow: hidden; }
.rank-bar i { display: block; height: 100%; background: var(--gold); }
.tag-miss, .tag-unknown { padding: 1px 7px; border-radius: 99px; font-size: .78rem; }
.tag-miss { background: #f6dcd7; color: var(--vermilion-dark); }
.tag-unknown { background: #eee8dc; color: var(--muted); }
.rank-list, .health-list { margin: 0; padding: 0; list-style: none; }
.rank-list li, .health-list li { display: flex; justify-content: space-between; gap: 14px; padding: 10px 0; border-bottom: 1px solid var(--line); }
/* 系統頁每列底下一行白話說明（後台改善 H 帳15） */
.health-list li { flex-wrap: wrap; }
.health-list li > p { flex-basis: 100%; margin: 0; }
.health-list li.is-problem strong { color: var(--danger); }
.rank-list span { min-width: 0; overflow-wrap: anywhere; }
.product-row { display: grid; grid-template-columns: 68px minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 12px; border: 1px solid var(--line); border-radius: 13px; background: #fff; text-decoration: none; color: var(--ink); }
.product-row:hover { border-color: var(--vermilion); }
.product-row img { width: 68px; height: 68px; object-fit: cover; border-radius: 9px; background: #eee8dc; }
.product-row strong, .product-row small { display: block; }
.product-row small { margin-top: 4px; color: var(--muted); }
.price { white-space: nowrap; font-weight: 800; color: var(--vermilion-dark); }
.badge { display: inline-flex; align-items: center; min-height: 28px; border-radius: 999px; padding: 4px 10px; font-size: .78rem; font-weight: 800; background: #eee8dc; }
.badge.success { color: var(--jade); background: #e0f0eb; }
.badge.warning { color: #7d5812; background: #f6e8bd; }
.badge.danger { color: var(--danger); background: #f8dddd; }
/* 商品列表小標籤、還沒上線的改動、編輯頁固定在底部的存檔列（2026-10-19 後台檢討 B4～B6、B15） */
.product-flags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
.product-flags .badge { min-height: 22px; padding: 2px 8px; font-size: .72rem; }
.pending-change { border-left: 4px solid #d9a23a; }
.pending-change h2 { margin: 4px 0 8px; }
.form-actions-sticky { position: sticky; bottom: 0; z-index: 5; display: grid; gap: 8px; margin-top: 12px; padding: 12px 0; border-top: 1px solid var(--line); background: var(--sheet); }
.form-actions-sticky .actions { margin: 0; }
.form-actions-sticky .message { margin: 0; }
input[aria-invalid="true"] { border-color: var(--danger); outline: 3px solid #fae6e3; }
.button.danger { border-color: var(--danger); color: var(--danger); }
.change-card, .user-card, .audit-card { border: 1px solid var(--line); border-radius: 13px; padding: 16px; background: white; }
.linked-card { display: block; color: var(--ink); text-decoration: none; }
.linked-card:hover { border-color: var(--vermilion); }
.change-card header, .user-card header, .audit-card header { display: flex; justify-content: space-between; gap: 12px; align-items: start; }
.change-card h3, .user-card h3, .audit-card h3 { margin: 0; }
.change-card dl { display: grid; grid-template-columns: max-content 1fr; gap: 7px 12px; margin: 14px 0; }
.change-card dt { color: var(--muted); }
.change-card dd { margin: 0; overflow-wrap: anywhere; }
.official { border-top: 4px solid var(--ink); }
.draft { border-top: 4px solid var(--gold); }
.release { border-top: 4px solid var(--jade); }
.product-photo { width: min(180px, 42vw); aspect-ratio: 1; object-fit: cover; border-radius: 14px; background: #eee8dc; }
.title-with-photo { display: flex; gap: 20px; align-items: center; }
.price-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; }
.spec-editor { display: grid; gap: 10px; margin-bottom: 10px; }
.spec-editor-row { display: grid; grid-template-columns: minmax(120px, .7fr) minmax(180px, 1.3fr) auto; gap: 10px; align-items: end; min-width: 0; }
.spec-editor-row label, .spec-editor-row input { min-width: 0; }
.unit-editor { display: grid; gap: 10px; }
.unit-editor-row { display: grid; grid-template-columns: minmax(100px, 1fr) minmax(130px, 1fr) auto; gap: 10px; align-items: end; min-width: 0; }
.unit-editor-row label, .unit-editor-row input { min-width: 0; }
.admin-image-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 12px; }
.admin-image-grid figure { margin: 0; min-width: 0; }
.admin-image-grid img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 10px; background: #eee8dc; }
.admin-image-grid figcaption { margin-top: 5px; color: var(--muted); font-size: .82rem; }
.image-editor [data-image-rows] { display: grid; gap: 12px; }
.image-editor-row { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 14px; padding: 12px; border: 1px solid var(--line); border-radius: 12px; background: var(--paper); }
.image-editor-row > img { width: 96px; height: 96px; object-fit: cover; border-radius: 10px; background: #eee8dc; }
.image-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.image-upload { display: block; margin-top: 14px; }
.image-upload input { margin-top: 7px; }
.message { border-left: 4px solid var(--jade); background: #e9f4f1; padding: 11px 14px; border-radius: 5px 10px 10px 5px; }
.message.error { border-color: var(--danger); background: #fae6e3; }
.message.warning { border-color: var(--gold); background: #f8efd2; }
.audit-card dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 7px 12px; }
.audit-card dd { margin: 0; overflow-wrap: anywhere; }
.audit-detail { display: flex; flex-wrap: wrap; gap: 7px 14px; color: var(--muted); font-size: .84rem; }
.audit-detail span { overflow-wrap: anywhere; }
.recovery-code-panel { margin-top: 18px; }
.recovery-code-panel ol { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 28px; padding-left: 28px; }
.recovery-code-panel code { font-size: .82rem; overflow-wrap: anywhere; }
.change-detail, .preview-grid, .catalog-preview, .release-card { min-width: 0; }
.change-detail > header, .release-card > header { display: flex; align-items: start; justify-content: space-between; gap: 14px; }
.change-detail > header h1, .release-card h3 { margin: 0; }
.diff-table { display: grid; gap: 0; margin: 18px 0 26px; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
.diff-head, .diff-row { display: grid; grid-template-columns: minmax(110px, .55fr) minmax(0, 1fr) minmax(0, 1fr); }
.diff-head { background: var(--ink); color: white; }
.diff-head > *, .diff-row > * { margin: 0; padding: 11px 12px; overflow-wrap: anywhere; white-space: pre-wrap; }
.diff-row { border-top: 1px solid var(--line); }
.diff-row > :last-child { background: #f0f6f2; }
.impact-list { display: flex; flex-wrap: wrap; gap: 8px; padding: 0; list-style: none; }
.impact-list li { border: 1px solid var(--line); border-radius: 999px; padding: 6px 10px; background: #fff; }
.preview-grid { display: grid; grid-template-columns: minmax(250px, .7fr) minmax(360px, 1.3fr); gap: 16px; align-items: start; }
.catalog-preview { display: grid; gap: 12px; border: 1px solid var(--line); border-radius: 15px; padding: 16px; background: white; box-shadow: var(--shadow); }
.catalog-preview img { width: 120px; height: 120px; object-fit: cover; border-radius: 10px; background: #eee8dc; }
.catalog-preview h3, .catalog-preview p { margin: 4px 0; overflow-wrap: anywhere; }
.preview-mobile { width: min(100%, 330px); grid-template-columns: 82px minmax(0, 1fr); }
.preview-mobile > .eyebrow { grid-column: 1 / -1; }
.preview-mobile img { width: 82px; height: 82px; }
.preview-mobile .preview-copy { display: none; }
.preview-desktop { grid-template-columns: 120px minmax(0, 1fr); }
.preview-desktop > .eyebrow { grid-column: 1 / -1; }
.release-list { display: grid; gap: 12px; }
.storefront-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; }
.storefront-card { display: block; padding: 18px; border: 1px solid var(--line); border-radius: 16px; }
.storefront-card h2 { margin: .2rem 0; }
.storefront-card.locked { background: #f1efe9; color: var(--muted); border-style: dashed; }
.special-hours-editor { display: grid; gap: 10px; min-width: 0; }
/* 選項清單（前台管理 商品標籤 → 紙紮配件選項）：一列一項，手機上名稱一行、勾選與刪除一行 */
.option-list-editor { display: grid; gap: 10px; min-width: 0; }
.option-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 8px 10px; align-items: end;
  padding: 10px 0; border-top: 1px solid var(--line); min-width: 0; }
.option-row[hidden] { display: none; }
.option-row label, .option-row input { min-width: 0; }
.special-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 8px 10px; align-items: end;
  padding: 10px 0; border-top: 1px solid var(--line); min-width: 0; }
.special-row label, .special-row input { min-width: 0; }
.live-state.review { border-left: 6px solid #2b6cb0; }
.switch { display: flex; align-items: center; gap: 12px; min-height: 44px; }
.switch input { width: 22px; height: 22px; }
.release-card { border: 1px solid var(--line); border-radius: 13px; padding: 16px; background: white; }
.release-card dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 7px 12px; }
.release-card dt { color: var(--muted); }
.release-card dd { margin: 0; overflow-wrap: anywhere; }
.meta { color: var(--muted); font-size: .86rem; }
/* 修改紀錄（2026-10-25 品8、品10、品13） */
.history-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 16px; }
.history-tabs a { min-height: 44px; display: inline-flex; align-items: center; padding: 0 16px; border: 1px solid var(--line); border-radius: 999px; color: var(--ink); text-decoration: none; }
.history-tabs a[aria-current="page"] { background: var(--ink); color: white; border-color: var(--ink); }
.history-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.change-sentence { margin: 10px 0 4px; overflow-wrap: anywhere; }
.history-technical { margin-top: 10px; color: var(--muted); font-size: .86rem; }
.history-technical dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 4px 12px; margin: 8px 0 0; }
.history-technical dd { margin: 0; overflow-wrap: anywhere; }
.live-state { margin: 0 0 16px; padding: 14px 16px; border: 1px solid var(--line); border-radius: 13px; background: var(--sheet); }
.live-state.publishing { border-left: 6px solid #b7791f; }
.live-state.failed { border: 2px solid var(--danger); background: #fae6e3; }
.live-state h2 { margin: 0 0 6px; font-size: 1.05rem; }
.live-state p { margin: 4px 0; overflow-wrap: anywhere; }
/* 門市憑證、轉盤讀數（member-wheel） */
.choice-row { display: flex; flex-wrap: wrap; gap: 8px 18px; margin: 0; padding: 0; border: 0; }
.choice-row legend { padding: 0; margin-bottom: 6px; font-weight: 700; font-size: .9rem; }
.choice { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; font-weight: 700; }
.choice input { width: 20px; height: 20px; min-height: 0; }
.coupon-check form input[name="code"] { font-family: ui-monospace, monospace; font-size: 1.3rem; letter-spacing: .12em; text-transform: uppercase; }
.coupon-scanner { display: grid; gap: 10px; margin-top: 14px; }
.coupon-scanner video { width: 100%; max-height: 60vh; border-radius: 12px; background: #000; }
.coupon-result { margin-top: 18px; }
.coupon-card { display: grid; gap: 14px; border: 1px solid var(--line); border-radius: 13px; padding: 16px; background: white; }
.coupon-card header { display: flex; justify-content: space-between; gap: 12px; align-items: start; }
.coupon-card h2 { margin: 0; }
.coupon-action { padding-top: 12px; border-top: 1px solid var(--line); }
.coupon-action h3 { margin: 0; }
.wheel-range { display: flex; flex-wrap: wrap; align-items: end; gap: 12px; margin: 18px 0; }
.wheel-range > label:not(.choice) { flex: 1 1 150px; }
.wheel-section, .wheel-campaign { margin-top: 16px; }
.wheel-summary { grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); margin-top: 12px; }
.members-filter { display: grid; gap: 12px; margin: 18px 0; }
.members-dates { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.members-list { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 10px; }
@media (min-width: 900px) { .members-list { grid-template-columns: 1fr 1fr; align-items: start; } }
.member-row { display: grid; gap: 4px; width: 100%; min-height: 44px; padding: 12px 14px; text-align: left; font: inherit;
  color: var(--ink); background: white; border: 1px solid var(--line); border-radius: 13px; cursor: pointer; }
.member-row[aria-expanded="true"] { border-color: var(--vermilion); border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.member-row-head { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: 1.05rem; }
.member-row-email, .member-row-meta { color: var(--muted); font-size: .92rem; overflow-wrap: anywhere; }
.member-detail .member-detail-sheet { margin: 0; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; }
.member-coupons { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 8px; }
.member-coupons li { padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px; }
.member-coupons strong { letter-spacing: .08em; }
.announcer { position: fixed; right: 16px; bottom: 90px; z-index: 20; max-width: min(360px, calc(100vw - 32px)); }
.announcer:not(:empty) { background: var(--ink); color: white; border-radius: 11px; padding: 12px 15px; box-shadow: var(--shadow); }
.more-dialog { width: min(420px, calc(100vw - 28px)); border: 0; border-radius: 18px; padding: 20px; box-shadow: var(--shadow); }
.more-dialog::backdrop { background: rgba(27, 25, 23, .48); }
.more-dialog header { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.more-dialog h2 { margin: 0; }
.more-dialog nav { display: grid; gap: 8px; margin-top: 18px; }
.more-dialog nav a { padding: 13px 14px; border: 1px solid var(--line); border-radius: 10px; color: var(--ink); text-decoration: none; font-weight: 700; }
.mobile-nav { display: none; }

/* 今日廣告（admin-ads-live.js）：搜尋廣告金色、曝光廣告玉綠、其他灰，分開不疊加〔S019〕。
   後台 CSP 是 style-src 'self'，顏色只能走 class，不能寫 style 屬性。 */
.ads-head { display: grid; gap: 6px; margin-bottom: 14px; }
.ads-fresh { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0; color: var(--muted); }
.ads-campaigns { margin-bottom: 18px; }
.ads-today { margin-bottom: 18px; }
.ads-today > h2 { margin: 0 0 8px; font-size: 1.05rem; }
.ads-today-card { border-top: 4px solid var(--muted); }
.ads-today-card.ads-today-search { border-top-color: var(--gold); }
.ads-today-card.ads-today-pmax { border-top-color: var(--jade); }
.ads-today-card ul { display: grid; gap: 4px; margin: 0; padding-left: 1.1em; }
.ads-campaign { border-top: 4px solid var(--muted); }
.ads-campaign.ads-search { border-top-color: var(--gold); }
.ads-campaign.ads-pmax { border-top-color: var(--jade); }
.ads-campaign h2 { overflow-wrap: anywhere; }
.ads-legend { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0 0 8px; color: var(--muted); font-size: .85rem; }
.ads-swatch { display: inline-block; width: 10px; height: 10px; margin-right: 5px; border-radius: 2px; background: var(--muted); }
.ads-swatch.ads-search { background: var(--gold); }
.ads-swatch.ads-pmax { background: var(--jade); }
.ads-chart-box { max-width: 100%; overflow-x: auto; }
.ads-chart { display: block; width: 100%; min-width: 34rem; height: auto; }
.ads-chart text { fill: var(--muted); font-size: 10px; }
.ads-chart .ads-click { fill: var(--ink); font-weight: 700; }
.ads-gridline { stroke: var(--line); }
.ads-bar-search { fill: var(--gold); }
.ads-bar-pmax { fill: var(--jade); }
.ads-bar-other { fill: var(--muted); }
.ads-section-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px; }
.ads-terms table { min-width: 34rem; }
.ads-n { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ads-hit td { font-weight: 800; }
.ads-log { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.ads-log li { display: flex; gap: 10px; min-width: 0; overflow-wrap: anywhere; }
.ads-time { flex: none; color: var(--muted); font-variant-numeric: tabular-nums; }
.ads-auto { color: var(--vermilion-dark); }

.order-search { display: grid; gap: 6px; margin: 0 0 14px; }
.order-search label { font-weight: 700; }
.order-search div { display: flex; gap: 8px; }
.order-search input { flex: 1; min-width: 0; min-height: 44px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 10px; font: inherit; background: var(--paper); color: var(--ink); }
.order-search small { color: var(--muted); }
.order-badges { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
/* 退貨退款區（2026-10-20）：「客人要退貨」收合成一顆按鈕，點開才是表單 */
.return-form > summary { list-style: none; width: fit-content; }
.return-form > summary::-webkit-details-marker { display: none; }
.return-form[open] > summary { margin-bottom: 14px; }
.return-items { margin: 0; padding: 0; border: 0; }
.return-items legend { padding: 0; margin-bottom: 6px; font-weight: 700; font-size: .9rem; }
.return-item { display: grid; grid-template-columns: minmax(0, 1fr) 96px; gap: 10px; align-items: end; }
.summary-grid article small { display: block; margin-top: 4px; color: var(--muted); font-size: .78rem; }
.badge.danger.urgency { color: #fff; background: var(--danger); }
.search-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 10px; }

@media (max-width: 700px) {
  body { padding-bottom: calc(80px + env(safe-area-inset-bottom)); }
  .topbar { min-height: 64px; padding: 10px 16px; }
  .brand small { display: none; }
  /* 只藏權限名稱；通知按鈕上的未讀數字不能一起藏（2026-10-19 會漏單第 1 項） */
  .identity div > span { display: none; }
  .identity a { display: block; }
  .desktop-nav { display: none !important; }
  main { width: min(100% - 24px, 620px); margin-top: 20px; margin-bottom: 100px; }
  .grid.two { grid-template-columns: 1fr; }
  .page-head { display: block; }
  .filter-bar { grid-template-columns: 1fr; }
  .filter-bar .button { width: 100%; }
  .product-row { grid-template-columns: 58px minmax(0, 1fr); }
  .product-row img { width: 58px; height: 58px; }
  .product-row .price { grid-column: 2; }
  .summary-grid { grid-template-columns: 1fr; }
  .plain-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .summary-grid.orders-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .summary-grid.history-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .today-summary .summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .funnel-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .refresh-meta { align-items: stretch; flex-direction: column; }
  .order-row { grid-template-columns: minmax(0, 1fr) auto; }
  .inquiry-workspace { grid-template-columns: 1fr; }
  .inquiry-workspace > .inquiry-quick { order: 0; }
  .form-actions-sticky { bottom: calc(64px + env(safe-area-inset-bottom)); }
  .inquiry-row { grid-template-columns: minmax(0, 1fr) auto; }
  .inquiry-row > :nth-child(2), .inquiry-row > :nth-child(3) { grid-column: 1 / -1; }
  .order-row > :nth-child(2), .order-row > :nth-child(3) { grid-column: 1 / -1; }
  .order-row .price { grid-column: 1; }
  .title-with-photo { align-items: start; }
  .recovery-code-panel ol { grid-template-columns: 1fr; }
  .preview-grid { grid-template-columns: 1fr; }
  .diff-head { display: none; }
  .diff-row { grid-template-columns: 1fr; gap: 0; padding: 10px 0; }
  .diff-row > * { padding: 5px 12px; }
  .diff-row > :nth-child(2)::before { content: "目前："; color: var(--muted); }
  .diff-row > :nth-child(3)::before { content: "變更後："; color: var(--muted); }
  .product-photo { width: 96px; }
  .spec-editor-row { grid-template-columns: 1fr; }
  .spec-editor-row .button { justify-self: start; }
  .unit-editor-row { grid-template-columns: 1fr; }
  .unit-editor-row .button { justify-self: start; }
  .notification-card { display: grid; }
  .notification-actions { justify-content: flex-start; }
  .mobile-nav { position: fixed; inset: auto 0 0; z-index: 15; display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; background: rgba(255, 253, 248, .97); border-top: 1px solid var(--line); padding: 7px max(6px, env(safe-area-inset-right)) calc(7px + env(safe-area-inset-bottom)) max(6px, env(safe-area-inset-left)); }
  .mobile-nav a, .mobile-nav button { min-height: 48px; display: grid; place-items: center; font-size: .78rem; border: 0; border-radius: 9px; background: transparent; font-family: inherit; }
  .mobile-nav a[aria-current="page"] { color: white; background: var(--ink); }
  .announcer { bottom: calc(78px + env(safe-area-inset-bottom)); }
}

/* 手機窄於 420px 時兩欄卡片放不下「NT$18,600」這種大數字（320px 時字寬比卡片多約 40px，
   CI 的字型再寬一點就撐出整頁橫向捲動），改一欄 */
@media (max-width: 420px) {
  .plain-grid { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }
}

/* 讀數的「去處理」（後台改善 H 帳3、帳19） */
.zero-view { margin-top: 12px; }
.zero-view summary { cursor: pointer; font-weight: 700; }
.zero-view-list { margin: 8px 0 0; padding-left: 1.2rem; columns: 2 14rem; }
.zero-view-list small, .audit-card dd small { color: var(--muted); }
.search-todo, .search-link { margin: 6px 0 0; font-size: .9rem; }
.store-network-hint { border-left: 4px solid var(--gold); }
.environment-banner { padding: .65rem 1rem; background: #fff1c2; color: #382b00; font-weight: 700; overflow-wrap: anywhere; }

/* 查價頁（quotes-and-margin）：搜尋框＋第一張卡在 390 寬第一屏放得下 */
.price-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; margin-bottom: 10px; }
.price-search input { min-height: 44px; border: 1px solid var(--line); border-radius: 10px; padding: 8px 12px; }
.price-tabs { display: flex; gap: 6px; margin-bottom: 10px; }
.price-tabs .button { flex: 1; min-height: 36px; padding: 4px 8px; }
.price-card { padding: 14px 16px; }
.price-card-head h3 { margin: 0 0 2px; font-size: 1.1rem; }
.price-card-head .muted { margin: 0 0 4px; color: var(--muted); font-size: .82rem; }
.price-units { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 4px; }
.price-unit { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "unit price add" "cost cost add"; align-items: center; gap: 0 10px; padding: 6px 0; border-top: 1px solid var(--line); }
.price-unit .unit-name { grid-area: unit; font-weight: 700; }
.price-unit .price { grid-area: price; font-size: 1.25rem; line-height: 1.2; }
.price-unit .cost-line { grid-area: cost; color: var(--muted); font-size: .8rem; }
.price-unit .badge { grid-area: cost; justify-self: end; }
.price-unit .button { grid-area: add; min-height: 36px; padding: 4px 10px; font-size: .85rem; }
.price-unit.is-low { background: #fbf4df; border-radius: 8px; padding-inline: 8px; }
.cost-entry { margin-top: 10px; }
.cost-entry summary { cursor: pointer; font-weight: 700; color: var(--muted); }
.cost-form { display: grid; gap: 8px; margin-top: 8px; }
.cost-form label { display: grid; gap: 4px; font-size: .85rem; }
.cost-form input, .cost-form select { min-height: 40px; border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; }
.basket-bar { position: sticky; top: 0; z-index: 6; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; padding: 10px 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--sheet); box-shadow: var(--shadow); }
.basket-bar span { flex: 1; font-weight: 800; }
.missing-list { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.missing-list li { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 8px; align-items: center; padding: 6px 0; border-top: 1px solid var(--line); }
.missing-list small, .missing-list .muted { color: var(--muted); font-size: .8rem; }
.sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* 報價單頁（quotes-and-margin） */
.quote-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 10px; }
.quote-month { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; font-size: .85rem; }
.quote-month input { min-height: 36px; border: 1px solid var(--line); border-radius: 8px; padding: 4px 8px; }
.quote-list { display: grid; gap: 8px; }
.quote-row { display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; grid-template-areas: "no badge who price" "meta meta meta price"; gap: 2px 10px; align-items: center; padding: 12px 14px; border: 1px solid var(--line); border-radius: 12px; background: var(--sheet); color: var(--ink); text-decoration: none; }
.quote-row .quote-no { grid-area: no; font-weight: 800; }
.quote-row .badge { grid-area: badge; }
.quote-row .quote-who { grid-area: who; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.quote-row .price { grid-area: price; font-size: 1.1rem; }
.quote-row .muted { grid-area: meta; color: var(--muted); font-size: .8rem; }
.quote-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 14px; }
.internal-box { border: 2px dashed var(--danger); background: #fff8f6; }
.internal-box h2 { display: flex; align-items: center; gap: 8px; font-size: 1.05rem; }
table td.n, table th.n { text-align: right; white-space: nowrap; }
table th, table td { padding: 6px 8px; border-bottom: 1px solid var(--line); text-align: left; }
.version-links a[aria-current="true"] { font-weight: 800; text-decoration: none; }
.radio-row { display: flex; flex-wrap: wrap; gap: 8px 14px; }
.radio { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; }
.quote-editor fieldset { border: 0; margin: 0 0 10px; padding: 0; }
.quote-editor legend { font-weight: 700; margin-bottom: 4px; }
.quote-editor label { display: grid; gap: 4px; font-size: .9rem; }
.quote-editor input:not([type="radio"]), .quote-editor select, .quote-editor textarea { min-height: 40px; border: 1px solid var(--line); border-radius: 8px; padding: 6px 10px; }
.item-list { list-style: none; margin: 10px 0; padding: 0; display: grid; gap: 8px; }
.item-row { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto auto; gap: 8px; align-items: end; padding: 8px; border: 1px solid var(--line); border-radius: 10px; }
.item-row .item-name { align-self: center; font-weight: 700; }
.item-row input[name="qty"] { width: 5em; }
.item-row input[name="unit_price"] { width: 7em; }
.item-row input[name="unit"], .item-row select[name="unit"] { width: 5em; }
.item-pick { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 6px; }
.item-pick li { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px; align-items: center; padding: 6px 0; border-top: 1px solid var(--line); }
.item-pick-units { display: flex; flex-wrap: wrap; gap: 4px; justify-content: flex-end; }
.item-pick-units .button { min-height: 32px; padding: 2px 8px; font-size: .82rem; }
.quote-total { margin: 0; font-size: 1.05rem; }
.print-dialog { border: 1px solid var(--line); border-radius: 14px; padding: 18px; max-width: 28rem; }
.print-dialog::backdrop { background: rgba(0, 0, 0, .35); }
@media (max-width: 640px) {
  .item-row { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .item-row .item-name, .item-row input[name="name"] { grid-column: 1 / -1; }
  .item-row input[name="qty"], .item-row input[name="unit_price"], .item-row input[name="unit"], .item-row select[name="unit"] { width: 100%; }
  .quote-row { grid-template-columns: auto auto minmax(0, 1fr); grid-template-areas: "no badge price" "who who who" "meta meta meta"; }
}
.pnl-block h3 { margin: 12px 0 6px; font-size: .95rem; color: var(--muted); }
.pnl-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 640px) { .pnl-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* 回覆按送出、伺服器還沒回時先畫的泡泡（chat-latency） */
[data-message-pending] { opacity: .6; }

/* 提醒設定頁的裝置清單（admin-push-alerts） */
.push-settings, .push-devices { display: grid; gap: 12px; }
.push-device-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.push-device { display: grid; gap: 6px; padding: 10px 0; border-bottom: 1px solid #eee8dc; }
.push-device .button { justify-self: start; }

/* 今日來客頁（daily-report-push）：手機好按、長輩看得懂，按鈕與字都放大 */
.daily-ask { display: grid; gap: 14px; }
.daily-ask h2 { font-size: 1.5rem; margin: 0; }
.daily-now { font-size: 1.25rem; margin: 0; }
.daily-buttons { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.daily-buttons .button { min-height: 64px; font-size: 1.5rem; font-weight: 700; justify-content: center; }
.daily-buttons .button.wide { grid-column: span 3; font-size: 1.3rem; }
.daily-buttons .button[aria-pressed="true"] { border-color: var(--vermilion); background: var(--vermilion); color: white; }
.daily-days { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.daily-day { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 0; border-bottom: 1px solid #eee8dc; font-size: 1.15rem; }
.daily-day.missing .daily-value { color: var(--vermilion-dark); font-weight: 700; }
.daily-day .button { min-height: 48px; min-width: 72px; justify-content: center; }
