/* ============================================================
   N1NU 收單系統 — 精品 × 科技（編輯時尚的留白排版 + SaaS 的互動流暢）
   只有 白 / 灰 / 黑；英數標題與金額用系統襯線，中文維持黑體；中等流暢動畫
   ============================================================ */
:root{
  /* 墨色 / 前景（三階文字） */
  --ink:#161616; --ink-2:#3a3c42; --ink-3:#6b6e76;
  /* 表面（5 階） */
  --surface-0:#ffffff; --surface-1:#fbfbfc; --surface-2:#f5f6f7; --surface-3:#eceef0;
  --surface-inset:#f7f8f9; --paper:#fbfbfc;
  /* 髮絲線（3 階） */
  --hairline:#e9eaec; --hairline-strong:#dcdee1; --hairline-contrast:#c7cacd;
  /* 灰階補充 */
  --muted:#9a9da3; --muted2:#bcbfc4;
  /* 字型堆疊（全系統字，零下載） */
  --font-sans:"Helvetica Neue",Helvetica,Arial,"PingFang TC","Microsoft JhengHei","微軟正黑體","Noto Sans CJK TC","Noto Sans TC",sans-serif;
  /* 英數襯線；結尾 fallback 到「黑體」→ 中文不會變成醜明體，維持黑體 */
  --font-serif:Georgia,Cambria,"Times New Roman","Noto Serif","Microsoft JhengHei","微軟正黑體","PingFang TC","Noto Sans CJK TC",sans-serif;
  --font-mono:"SFMono-Regular",ui-monospace,Menlo,Consolas,"Courier New",monospace;
  /* 字級階（基準 13px） */
  --fs-2xs:.625rem; --fs-xs:.6875rem; --fs-sm:.75rem; --fs-base:.8125rem;
  --fs-md:.9375rem; --fs-lg:1.0625rem; --fs-xl:1.4375rem; --fs-2xl:1.5rem; --fs-3xl:2rem;
  /* 間距階（封頂 64） */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:24px; --s-6:32px; --s-7:48px; --s-8:64px;
  --container:1240px; --gutter:var(--s-6); --gutter-sm:var(--s-5);
  /* 圓角 */
  --r-0:0; --r-1:2px;
  /* 動畫 */
  --t-fast:120ms; --t-base:200ms; --t-slow:380ms;
  --ease:cubic-bezier(.16,1,.3,1); --ease-soft:cubic-bezier(.4,0,.2,1); --stagger:45ms;
  /* 陰影 */
  --shadow-rest:0 1px 2px rgba(20,22,26,.04),0 1px 1px rgba(20,22,26,.03);
  --shadow-raised:0 1px 2px rgba(20,22,26,.05),0 4px 12px rgba(20,22,26,.05);
  --shadow-hover:0 2px 4px rgba(20,22,26,.06),0 16px 32px rgba(20,22,26,.10);
  --shadow-overlay:0 4px 8px rgba(20,22,26,.08),0 24px 48px rgba(20,22,26,.16);
  /* focus 環 */
  --focus-ring:0 0 0 2px var(--surface-0),0 0 0 4px rgba(22,22,22,.22);
  --focus-ring-inset:0 0 0 1px var(--ink),0 0 0 4px rgba(22,22,22,.08);
  /* 舊名稱相容別名（零破壞） */
  --bg:var(--surface-0); --soft:var(--surface-1); --soft2:var(--surface-2);
  --line:var(--hairline); --line2:var(--hairline-strong); --lift:var(--shadow-hover);
}

*{box-sizing:border-box}
body{margin:0;background:var(--surface-0);color:var(--ink);font-weight:400;letter-spacing:.01em;
  font-family:var(--font-sans);font-size:var(--fs-base);line-height:1.65;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:inherit;text-decoration:none}

@keyframes pageIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes cardIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes riseIn{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

/* 英數襯線 + 等高等寬數字（金額直欄不抖）；中文自動 fallback 回黑體 */
.cp-name,.sv,.cc-amt,.ci-amt,.price,.cart-tot b,.cart-tot .grand,.page-head h1,.brand,.cc-name{
  font-family:var(--font-serif);font-weight:400;
  font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum" 1,"tnum" 1;letter-spacing:.01em}
.cc-last5,.folder-in{font-family:var(--font-mono)}
.tbl .num{font-family:var(--font-serif);font-variant-numeric:lining-nums tabular-nums;text-align:right;letter-spacing:.01em}

/* ---- 頂欄 ---- */
.topbar{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.85);
  border-bottom:1px solid var(--hairline);display:flex;align-items:center;gap:var(--s-7);
  padding:16px var(--gutter);flex-wrap:wrap;transition:box-shadow var(--t-base) var(--ease-soft)}
.topbar.is-scrolled{box-shadow:0 1px 0 var(--hairline),0 6px 20px rgba(22,22,26,.05)}
.brand{font-size:var(--fs-md);letter-spacing:.22em;text-transform:uppercase;font-weight:400;color:var(--ink)}
.brand span{font-family:var(--font-sans);font-weight:300;color:var(--muted);letter-spacing:.06em}
.nav{display:flex;gap:var(--s-5);flex-wrap:wrap}
.nav a{position:relative;font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  font-weight:500;padding:4px 0;transition:color var(--t-base) var(--ease-soft)}
.nav a::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ink);
  transform:scaleX(0);transform-origin:right;transition:transform var(--t-base) var(--ease-soft)}
.nav a:hover{color:var(--ink)}
.nav a:hover::after,.nav a.active::after{transform:scaleX(1);transform-origin:left;transition:transform var(--t-slow) var(--ease)}
.nav a.active{color:var(--ink)}

/* ---- 容器 / 頁標 / 面板 ---- */
.content{max-width:var(--container);margin:40px auto var(--s-8);padding:0 var(--gutter);animation:pageIn var(--t-slow) var(--ease) both}
.foot{text-align:center;color:var(--muted2);font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;padding:var(--s-8) var(--gutter)}
.page-head{display:flex;align-items:baseline;gap:var(--s-4);margin-bottom:var(--s-7);padding-bottom:var(--s-4);
  border-bottom:1px solid var(--hairline);flex-wrap:wrap;animation:pageIn var(--t-base) var(--ease) both}
.page-head h1{font-size:var(--fs-xl);margin:0;font-weight:400;letter-spacing:.02em;text-transform:none;
  animation:riseIn var(--t-slow) var(--ease) both;animation-delay:40ms}
.hint{color:var(--ink-3);font-size:var(--fs-sm);letter-spacing:.01em}
.batch-chip{margin-left:auto;border:1px solid var(--ink);border-radius:var(--r-1);padding:6px 16px;
  font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;background:#fff;color:var(--ink);
  transition:background var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft)}
.batch-chip:hover{background:var(--ink);color:#fff}
.panel{background:var(--surface-0);border:1px solid var(--hairline);border-radius:var(--r-0);
  padding:28px;margin-bottom:var(--s-5);box-shadow:var(--shadow-rest);
  transition:box-shadow var(--t-slow) var(--ease-soft),border-color var(--t-base) var(--ease-soft);
  animation:riseIn var(--t-slow) var(--ease) both}
.content > .panel:nth-of-type(1){animation-delay:60ms}
.content > .panel:nth-of-type(2){animation-delay:130ms}
.content > .panel:nth-of-type(3){animation-delay:200ms}
.panel-head{display:flex;align-items:center;gap:var(--s-4);margin-bottom:var(--s-5);padding-bottom:var(--s-4);
  border-bottom:1px solid var(--hairline);flex-wrap:wrap}
.panel-head h2{font-size:var(--fs-xs);margin:0;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}

/* ---- 表單輸入（統一凹陷感 + focus 環） ---- */
.search,.order-input,.folder-in,.spec select,.edit-num,.edit-txt,.edit-sort,.form-panel input{
  font-family:inherit;background:var(--surface-inset);color:var(--ink);
  border:1px solid var(--hairline-strong);border-radius:var(--r-1);
  box-shadow:inset 0 1px 2px rgba(22,22,26,.04);
  transition:border-color var(--t-base) var(--ease-soft),box-shadow var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft)}
.search{padding:var(--s-3) var(--s-4);font-size:var(--fs-base);width:280px;max-width:100%;margin-left:auto;letter-spacing:.02em}
.search::placeholder,.folder-in::placeholder,.order-input::placeholder{color:var(--muted2);letter-spacing:.02em}
.search:hover,.folder-in:hover,.order-input:hover,.edit-txt:hover{border-color:var(--hairline-contrast);background:var(--surface-0)}
.search:focus,.order-input:focus,.folder-in:focus,.spec select:focus,
.edit-num:focus,.edit-txt:focus,.edit-sort:focus,.form-panel input:focus{
  outline:none;border-color:var(--ink);background:var(--surface-0);box-shadow:var(--focus-ring-inset)}

/* ---- 按鈕 ---- */
button.primary,a.primary,.cart .primary{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  border:1px solid var(--ink);background:var(--ink);color:#fff;font-family:var(--font-sans);font-weight:500;border-radius:var(--r-1);
  padding:var(--s-3) var(--s-5);font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;
  text-decoration:none;box-shadow:var(--shadow-rest);
  transition:background var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),box-shadow var(--t-base) var(--ease-soft),transform var(--t-fast) var(--ease-soft)}
button.primary:hover,a.primary:hover,.cart .primary:hover{background:#fff;color:var(--ink);box-shadow:var(--shadow-raised);transform:translateY(-1px)}
button.primary:active,a.primary:active,.cart .primary:active{transform:translateY(1px);box-shadow:none}
button.primary:disabled{background:#dcdcdc;border-color:#dcdcdc;color:#fff;cursor:not-allowed;transform:none;box-shadow:none}
.btn-ghost{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--hairline-contrast);background:#fff;color:var(--ink-2);
  padding:var(--s-3) var(--s-4);border-radius:var(--r-1);font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;
  cursor:pointer;text-decoration:none;
  transition:border-color var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft),transform var(--t-fast) var(--ease-soft)}
.btn-ghost:hover{background:var(--ink);color:#fff;border-color:var(--ink)}
.btn-ghost:active{transform:translateY(1px)}

/* ---- 收單台 ---- */
.desk{display:grid;grid-template-columns:1fr 400px;gap:var(--s-6);align-items:start}
.import-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-5);align-items:start}
.catalog{max-height:calc(100vh - 160px);overflow:auto}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--s-5)}
.card{border:1px solid var(--hairline);background:var(--surface-0);border-radius:var(--r-0);overflow:hidden;
  display:flex;flex-direction:column;gap:var(--s-3);cursor:pointer;padding-bottom:var(--s-3);box-shadow:var(--shadow-rest);
  transition:transform var(--t-slow) var(--ease),box-shadow var(--t-slow) var(--ease),border-color var(--t-base) var(--ease-soft);
  animation:cardIn var(--t-slow) var(--ease) both}
.card:hover{border-color:var(--hairline-contrast);transform:translateY(-4px);box-shadow:var(--shadow-hover)}
.card:active{transform:translateY(-2px);box-shadow:var(--shadow-raised)}
.cards .card:nth-child(1){animation-delay:0ms}.cards .card:nth-child(2){animation-delay:30ms}
.cards .card:nth-child(3){animation-delay:60ms}.cards .card:nth-child(4){animation-delay:90ms}
.cards .card:nth-child(5){animation-delay:120ms}.cards .card:nth-child(6){animation-delay:150ms}
.cards .card:nth-child(7){animation-delay:180ms}.cards .card:nth-child(8){animation-delay:210ms}
.cards .card:nth-child(n+9){animation-delay:240ms}
.thumb{height:208px;overflow:hidden;background:var(--surface-2);position:relative;display:flex;align-items:center;justify-content:center}
.thumb img{width:100%;height:100%;object-fit:cover;transition:transform 600ms var(--ease)}
.card:hover .thumb img{transform:scale(1.045)}
.thumb .noimg{color:var(--muted2);font-family:var(--font-serif);font-style:italic;font-size:var(--fs-sm);letter-spacing:.08em}
.card-name{font-size:var(--fs-sm);font-weight:400;min-height:34px;text-align:center;letter-spacing:.01em;line-height:1.5;padding:0 var(--s-2);color:var(--ink-2)}
.card-meta{display:flex;justify-content:center;align-items:center}
.price{color:var(--ink);font-weight:500;font-size:var(--fs-base);letter-spacing:.02em}

/* ---- 購物清單 ---- */
.cart{position:sticky;top:80px;display:flex;flex-direction:column;max-height:calc(100vh - 100px);
  background:var(--surface-0);border:1px solid var(--hairline);border-radius:var(--r-0);padding:var(--s-5);box-shadow:var(--shadow-overlay)}
.cart-cust{margin-bottom:var(--s-4)}
.cart-cust select,.cart-cust input{width:100%;padding:var(--s-3) var(--s-4);border:1px solid var(--hairline-strong);border-radius:var(--r-1);
  font-size:var(--fs-base);font-weight:500;background:var(--surface-inset);letter-spacing:.04em;font-family:inherit;
  transition:border-color var(--t-base) var(--ease-soft),box-shadow var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft)}
.cart-cust input:focus,.cart-cust select:focus{outline:none;border-color:var(--ink);background:var(--surface-0);box-shadow:var(--focus-ring-inset)}
.cart-cust select{appearance:none;-webkit-appearance:none;padding-right:30px;background-position:right 12px center;background-repeat:no-repeat;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23161616' stroke-width='1.2'/></svg>")}
.cart-items{flex:1;overflow:auto;display:flex;flex-direction:column;min-height:80px}
.cart-empty{border:1px dashed var(--hairline-strong);border-radius:var(--r-1);padding:var(--s-5);color:var(--muted);font-size:var(--fs-sm);text-align:center;letter-spacing:.04em}
.ci{display:flex;gap:var(--s-3);border-bottom:1px solid var(--hairline);padding:var(--s-4) 0;align-items:flex-start;animation:cardIn var(--t-base) var(--ease) both}
.ci-img{width:58px;height:58px;object-fit:cover;flex:none;background:var(--surface-2)}
.ci-main{flex:1;min-width:0}
.ci-top{display:flex;align-items:center;gap:8px}
.ci-name{font-size:var(--fs-sm);font-weight:500;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
.ci-del{border:0;background:none;color:var(--muted);padding:2px 4px;font-size:var(--fs-2xs);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;flex:none;transition:color var(--t-base) var(--ease-soft)}
.ci-del:hover{color:var(--ink);text-decoration:underline}
.ci-row2{display:flex;align-items:center;justify-content:space-between;margin-top:8px}
.qty{display:flex;align-items:center;border:1px solid var(--hairline-strong);border-radius:var(--r-1);overflow:hidden;transition:border-color var(--t-base) var(--ease-soft)}
.qty:hover{border-color:var(--hairline-contrast)}
.qty button{width:28px;height:28px;border:0;background:#fff;cursor:pointer;font-size:14px;color:var(--ink-3);transition:background var(--t-fast) var(--ease-soft),color var(--t-fast) var(--ease-soft)}
.qty button:hover{background:var(--ink);color:#fff}
.qty button:active{transform:scale(.92)}
.qty span{min-width:30px;text-align:center;font-family:var(--font-serif);font-size:var(--fs-sm);line-height:28px;
  border-left:1px solid var(--hairline-strong);border-right:1px solid var(--hairline-strong);font-variant-numeric:tabular-nums}
.ci-amt{font-weight:500;font-size:var(--fs-base);letter-spacing:.02em}
.ci-specs{margin-top:8px;display:flex;flex-direction:column;gap:6px}
.spec{display:flex;align-items:center;gap:6px}
.spec-no{color:var(--ink-3);font-size:var(--fs-xs);width:16px;flex:none}
.spec select{flex:1;min-width:0;padding:6px 26px 6px 6px;font-size:var(--fs-sm);appearance:none;-webkit-appearance:none;
  background-position:right 8px center;background-repeat:no-repeat;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='6'><path d='M1 1l4 4 4-4' fill='none' stroke='%23161616' stroke-width='1.2'/></svg>")}
.cart-tot{margin-top:var(--s-4);border-top:1px solid var(--ink);padding-top:var(--s-4)}
.cart-tot div{display:flex;justify-content:space-between;padding:5px 0;color:var(--ink-3);font-size:var(--fs-sm);letter-spacing:.04em}
.cart-tot .fee b{color:var(--ink);font-weight:400}
.cart-tot .grand{color:var(--ink);font-size:var(--fs-md);border-top:1px solid var(--hairline);margin-top:10px;padding-top:14px;letter-spacing:.02em}
.cart-tot .grand b{font-size:1.125rem;font-weight:600}
.cart .primary{margin-top:var(--s-4);width:100%}
.muted{color:var(--muted);font-size:var(--fs-xs);letter-spacing:.04em}

/* ---- 批次匯入 ---- */
.order-input{width:100%;height:340px;padding:15px;font-size:var(--fs-base);line-height:1.75;resize:vertical}
.import-btns{display:flex;gap:10px;margin-top:12px;flex-wrap:wrap}
.stats{margin-left:auto;font-size:var(--fs-xs);color:var(--ink-3);letter-spacing:.05em}
.stats b{color:var(--ink)}
.stats .warn,.stats .danger{color:var(--ink);font-weight:600}
.result-empty{color:var(--muted);font-size:var(--fs-sm);padding:var(--s-5);text-align:center;letter-spacing:.04em}
.cust{border:1px solid var(--hairline);border-radius:var(--r-0);padding:var(--s-3) var(--s-4);margin-bottom:10px}
.cust-name{font-weight:600;margin-bottom:8px;font-size:var(--fs-base);letter-spacing:.04em}
.danger-box{border-color:var(--ink)}
.warn-line{color:var(--ink-3);font-size:var(--fs-sm);padding:3px 0}
.note-row td{color:var(--ink-3);font-size:var(--fs-xs);background:var(--surface-1)}

/* ---- 表格 ---- */
.tbl{width:100%;border-collapse:collapse;font-size:var(--fs-base)}
.tbl th,.tbl td{text-align:left;padding:var(--s-3) var(--s-4);border-bottom:1px solid var(--hairline)}
.tbl th{color:var(--ink-3);font-weight:500;font-size:var(--fs-2xs);letter-spacing:.16em;text-transform:uppercase;
  padding-top:var(--s-2);padding-bottom:var(--s-2);border-bottom:1px solid var(--ink)}
.tbl td{vertical-align:middle}
.tbl tr{position:relative;transition:background var(--t-base) var(--ease-soft)}
.tbl tr:hover td{background:var(--surface-1)}
.tbl td:first-child{box-shadow:inset 2px 0 0 transparent;transition:box-shadow var(--t-base) var(--ease-soft)}
.tbl tr:hover td:first-child{box-shadow:inset 2px 0 0 var(--ink)}
.tbl th:first-child,.tbl td:first-child{padding-left:0}
.tbl th:last-child,.tbl td:last-child{padding-right:0}
.status{display:inline-block;padding:4px 12px;border:1px solid var(--hairline-strong);border-radius:var(--r-1);
  font-size:var(--fs-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);background:#fff}
.status.paid{background:var(--ink);border-color:var(--ink);color:#fff}
.row-active{background:var(--surface-3)}

/* ---- 銷售紀錄：每客戶一格 ---- */
.cust-card{border:1px solid var(--hairline);margin-bottom:var(--s-4);background:#fff;overflow:hidden;border-radius:var(--r-0);
  box-shadow:var(--shadow-raised);
  transition:transform var(--t-slow) var(--ease),box-shadow var(--t-slow) var(--ease),border-color var(--t-base) var(--ease-soft),opacity var(--t-slow);
  animation:cardIn var(--t-slow) var(--ease) both}
.cust-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-hover);border-color:var(--hairline-contrast)}
.cust-card.is-paid{opacity:.55}
.cust-card.is-paid:hover{opacity:.9}
.cc-head{display:flex;align-items:center;gap:var(--s-4);padding:var(--s-4) var(--s-5);border-bottom:1px solid var(--hairline);
  background:linear-gradient(180deg,var(--surface-0),var(--surface-1))}
.cc-name{font-size:var(--fs-lg);font-weight:400;letter-spacing:.01em;display:flex;align-items:baseline;gap:10px;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cc-count{font-family:var(--font-sans);font-size:var(--fs-2xs);color:var(--ink-3);font-weight:500;letter-spacing:.14em;text-transform:uppercase;flex:none}
.cc-right{display:flex;align-items:center;gap:var(--s-3);flex:none}
.cc-amt{font-size:var(--fs-md);font-weight:400;letter-spacing:.01em;min-width:96px;text-align:right}
.cc-last5{width:96px;padding:8px 9px;border:1px solid var(--hairline-strong);border-radius:var(--r-1);font-size:var(--fs-base);
  text-align:center;letter-spacing:.18em;background:#fff;transition:border-color var(--t-base) var(--ease-soft),box-shadow var(--t-base) var(--ease-soft)}
.cc-last5:focus{outline:none;border-color:var(--ink);box-shadow:var(--focus-ring-inset)}
.cc-last5::placeholder{font-family:var(--font-sans);letter-spacing:.04em;color:var(--muted2)}
.cc-right .badge-btn.on{background:var(--ink);border-color:var(--ink);color:#fff}
.tbl.mini{font-size:var(--fs-sm)}
.tbl.mini th,.tbl.mini td{padding:var(--s-3) var(--s-5)}
.tbl.mini tr{transition:background var(--t-base) var(--ease-soft)}
.tbl.mini tr:hover td{background:var(--surface-1)}
.tbl.mini tr:last-child td{border-bottom:0}
.tbl.mini th:first-child,.tbl.mini td:first-child{padding-left:var(--s-5)}
.tbl.mini th:last-child,.tbl.mini td:last-child{padding-right:var(--s-5)}
.x-btn{border:0;background:none;color:var(--muted2);cursor:pointer;font-size:var(--fs-base);padding:2px 8px;line-height:1;
  opacity:.3;transition:opacity var(--t-base) var(--ease-soft),color var(--t-base),transform var(--t-base) var(--ease)}
.cust-card:hover .x-btn{opacity:.6}
.x-btn:hover{opacity:1;color:var(--ink);transform:scale(1.18)}
.x-btn:active{transform:scale(.9)}

/* ---- 晶片 / 表單面板 ---- */
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{border:1px solid var(--ink);border-radius:var(--r-1);padding:6px 16px;font-size:var(--fs-xs);letter-spacing:.12em;text-transform:uppercase}
.form-panel .field{display:block;margin:var(--s-4) 0;font-size:var(--fs-2xs);color:var(--ink-3);max-width:520px;letter-spacing:.1em;text-transform:uppercase}
.form-panel input{display:block;width:100%;margin-top:6px;padding:var(--s-3);text-transform:none;letter-spacing:0}

/* ---- 商品同步 / 編輯 ---- */
.sync-bar{background:var(--surface-1);border-color:var(--hairline)}
.sync-head{font-weight:600;margin-bottom:14px;font-size:var(--fs-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.sync-row{display:flex;gap:var(--s-3);align-items:center;flex-wrap:wrap}
.folder-in{flex:1;min-width:280px;padding:var(--s-3) var(--s-4);font-size:var(--fs-base);letter-spacing:.01em}
.sync-bar .primary{margin-top:0}
.sync-msg{margin-top:14px;font-size:var(--fs-sm);letter-spacing:.02em}
.sync-msg.ok{color:var(--ink-2)} .sync-msg.err{color:var(--ink);font-weight:600}
.pthumb{width:46px;height:46px;object-fit:cover;background:var(--surface-2)}
.thumb-up{cursor:pointer;display:inline-block;width:46px;height:46px;position:relative;background:var(--surface-2);
  border:1px dashed var(--hairline-strong);border-radius:var(--r-1);transition:border-color var(--t-base) var(--ease-soft)}
.thumb-up:hover{border-color:var(--ink)}
.thumb-up::after{content:"＋";position:absolute;inset:0;display:grid;place-items:center;color:var(--muted2);font-size:16px}
.thumb-up img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.thumb-up img.noimg{display:none}
.edit-num{width:80px;padding:6px 8px;font-size:var(--fs-base)}
.edit-txt{width:100%;min-width:120px;padding:6px 8px;font-size:var(--fs-base)}
.edit-sort{width:52px;padding:6px;font-size:var(--fs-base);text-align:center}
.add-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.add-row .edit-txt{min-width:160px;flex:1}
.add-row .primary{margin-top:0}
.badge-btn{border:1px solid var(--hairline-strong);border-radius:var(--r-1);padding:4px 14px;font-size:var(--fs-2xs);letter-spacing:.12em;
  text-transform:uppercase;cursor:pointer;background:#fff;color:var(--muted);
  transition:border-color var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft),transform var(--t-fast) var(--ease-soft)}
.badge-btn:hover{border-color:var(--ink-2);color:var(--ink-2)}
.badge-btn.on{background:var(--ink);border-color:var(--ink);color:#fff}
.badge-btn.off{color:var(--muted2)}
.badge-btn:active{transform:scale(.94)}
.danger-btn{border:1px solid var(--hairline-strong);border-radius:var(--r-1);background:#fff;padding:6px 12px;font-size:var(--fs-2xs);letter-spacing:.1em;
  text-transform:uppercase;cursor:pointer;color:var(--muted);
  transition:border-color var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft),transform var(--t-fast) var(--ease-soft)}
.danger-btn:hover{border-color:var(--ink);color:var(--ink);background:var(--surface-1)}
.danger-btn:active{transform:scale(.94)}
.danger-btn.small{padding:5px 10px}
.pdf-link{font-family:var(--font-serif);font-size:var(--fs-sm);letter-spacing:.01em;color:var(--ink);
  border-bottom:1px solid var(--hairline-strong);padding-bottom:1px;transition:border-color var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft)}
.pdf-link:hover{color:var(--ink);border-bottom-color:var(--ink)}

/* ---- 訂單管理 dashboard / 本期分析 ---- */
.cur-period{background:linear-gradient(180deg,var(--surface-0),var(--surface-1));border:1px solid var(--hairline-strong);border-radius:var(--r-0);
  padding:var(--s-7) var(--s-6);box-shadow:var(--shadow-raised);animation:riseIn var(--t-slow) var(--ease) both;animation-delay:60ms}
.cp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--s-5);flex-wrap:wrap}
.cp-label{color:var(--ink-3);font-size:var(--fs-2xs);font-weight:500;letter-spacing:.24em;text-transform:uppercase}
.cp-name{font-size:var(--fs-3xl);font-weight:400;color:var(--ink);letter-spacing:.01em;margin-top:var(--s-2);line-height:1.05}
.cp-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.cp-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;margin-top:var(--s-6);background:var(--hairline);border:1px solid var(--hairline)}
.cp-stats.four{grid-template-columns:repeat(4,1fr)}
.cp-stats.three{grid-template-columns:repeat(3,1fr);margin-top:var(--s-4)}
.stat{background:var(--surface-0);border:0;padding:var(--s-5);text-align:center;transition:background var(--t-base) var(--ease-soft)}
.stat:hover{background:var(--surface-1)}
.cp-stats .stat:nth-child(1){animation:cardIn var(--t-base) var(--ease) both;animation-delay:120ms}
.cp-stats .stat:nth-child(2){animation:cardIn var(--t-base) var(--ease) both;animation-delay:165ms}
.cp-stats .stat:nth-child(3){animation:cardIn var(--t-base) var(--ease) both;animation-delay:210ms}
.cp-stats .stat:nth-child(4){animation:cardIn var(--t-base) var(--ease) both;animation-delay:255ms}
.cp-stats .stat:nth-child(5){animation:cardIn var(--t-base) var(--ease) both;animation-delay:300ms}
.sv{font-size:var(--fs-2xl);font-weight:400;letter-spacing:0;line-height:1.1;color:var(--ink)}
.sv.ok{color:var(--ink)}
.sl{color:var(--ink-3);font-size:var(--fs-2xs);margin-top:var(--s-2);letter-spacing:.14em;text-transform:uppercase;font-family:var(--font-sans)}
/* 分析分頁 */
.tabs{display:flex;gap:var(--s-6);border-bottom:1px solid var(--hairline);margin-bottom:var(--s-5)}
.tab{background:none;border:0;padding:12px 0;font-family:inherit;font-size:var(--fs-sm);letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);cursor:pointer;position:relative;transition:color var(--t-base) var(--ease-soft)}
.tab::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ink);
  transform:scaleX(0);transform-origin:left;transition:transform var(--t-base) var(--ease)}
.tab:hover{color:var(--ink-2)}
.tab.active{color:var(--ink)}
.tab.active::after{transform:scaleX(1)}
/* 營收趨勢長條 */
.bar-row{display:flex;align-items:center;gap:var(--s-4);padding:9px 0}
.bar-label{width:130px;flex:none;font-size:var(--fs-sm);color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar-track{flex:1;height:10px;background:var(--surface-2);border-radius:var(--r-1);overflow:hidden}
.bar-fill{height:100%;background:var(--ink);border-radius:var(--r-1);transition:width var(--t-slow) var(--ease)}
.bar-val{width:120px;flex:none;text-align:right;font-size:var(--fs-sm);color:var(--ink)}
.analysis-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-6);margin-top:var(--s-6)}
.mini-title{font-size:var(--fs-xs);font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2);padding-bottom:10px;margin-bottom:2px;border-bottom:1px solid var(--ink)}
.new-period{display:flex;gap:8px;margin-left:auto;flex-wrap:wrap}
.new-period .search{margin-left:0;width:260px}
.period-link{cursor:pointer;border-bottom:1px solid transparent;transition:border-color var(--t-base) var(--ease-soft)}
.period-link:hover{border-bottom-color:var(--ink)}
.tag-cur{background:var(--ink);color:#fff;font-size:9px;padding:2px 9px;letter-spacing:.14em;text-transform:uppercase;margin-left:8px}
.row-ops{display:flex;gap:8px;flex-wrap:wrap}
.row-ops button{border:1px solid var(--hairline-strong);border-radius:var(--r-1);background:#fff;padding:6px 12px;font-size:var(--fs-2xs);
  letter-spacing:.1em;text-transform:uppercase;cursor:pointer;color:var(--ink-3);
  transition:border-color var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),background var(--t-base) var(--ease-soft),transform var(--t-fast) var(--ease-soft)}
.row-ops button:hover{border-color:var(--ink);color:var(--ink);background:var(--surface-1)}
.row-ops button:active{transform:scale(.94)}

/* ---- 登入頁 ---- */
body.login-bg{display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:var(--paper)}
.login-card{width:340px;text-align:center;padding:40px 36px;border-radius:var(--r-0);border:1px solid var(--hairline);box-shadow:var(--shadow-hover);animation:cardIn var(--t-slow) var(--ease) both}
.login-card .brand{display:block;font-size:var(--fs-xl);letter-spacing:.18em;margin-bottom:24px}
.login-card input[type=password]{width:100%;padding:13px 14px;border:1px solid var(--hairline-strong);border-radius:var(--r-1);
  font-family:inherit;font-size:var(--fs-base);letter-spacing:.18em;text-align:center;margin-bottom:14px;background:var(--surface-inset);
  transition:border-color var(--t-base) var(--ease-soft),box-shadow var(--t-base) var(--ease-soft)}
.login-card input[type=password]:focus{outline:none;border-color:var(--ink);background:#fff;box-shadow:var(--focus-ring-inset)}
.login-card .primary{width:100%;margin-top:4px}

/* ---- 全域鍵盤 focus ---- */
:where(button,a,select,[tabindex],.period-link,.card):focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--r-1)}

/* ---- 減少動態 ---- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
  .card,.cust-card,.stat,.panel,.content,.page-head,.page-head h1,.ci,.cur-period{opacity:1!important;transform:none!important}
  .card:hover,.cust-card:hover,.stat:hover{transform:none!important}
}

/* ---- 響應式 ---- */
@media (max-width:1180px){
  .content{padding:0 var(--gutter-sm)}
  .topbar{padding:16px var(--gutter-sm)}
  .desk{grid-template-columns:1fr 360px;gap:var(--s-5)}
}
@media (max-width:900px){
  .content{margin:var(--s-6) auto var(--s-8)}
  .page-head{margin-bottom:var(--s-6)}
  .desk,.import-grid{grid-template-columns:1fr}
  .cart{position:static;max-height:none;margin-top:var(--s-5)}
  .catalog{max-height:none}
  .cp-stats,.cp-stats.four{grid-template-columns:repeat(3,1fr)}
  .analysis-grid{grid-template-columns:1fr;gap:var(--s-5)}
}
@media (max-width:600px){
  .content{padding:0 var(--s-4);margin:var(--s-5) auto var(--s-7)}
  .topbar{gap:var(--s-3);padding:var(--s-4)}
  .panel{padding:var(--s-5)}
  .cur-period{padding:var(--s-6) var(--s-5)}
  .page-head{margin-bottom:var(--s-5)}
  .cp-stats,.cp-stats.four{grid-template-columns:repeat(2,1fr)}
  .nav{gap:var(--s-4)}
  .search{margin-left:0;width:100%}
  .cards{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--s-4)}
}

/* ============================================================
   手機版整合修正（≤600px / ≤430px 生效；桌機 >600px 不受影響）
   零彩色（白/灰/黑）、全用 :root token
   ============================================================ */

/* ===== (0) 殼層：全站水平溢出兜底 ===== */
@media (max-width:600px){
  html{overflow-x:clip}
  body{overflow-x:hidden}                 /* topbar 為 body 直接子層 → 仍可 sticky */
  .content{overflow-x:clip;max-width:100%}
  .content > *{min-width:0;max-width:100%}
}

/* ===== (1) topbar 壓成單行 ~56px + nav 橫向滑動 ===== */
@media (max-width:600px){
  .topbar{flex-wrap:nowrap;gap:var(--s-4);padding:10px var(--s-4);min-height:56px;background:var(--surface-0)}
  .brand{flex:none;font-size:var(--fs-base);letter-spacing:.12em;white-space:nowrap}
  .nav{flex:1;min-width:0;flex-wrap:nowrap;gap:var(--s-4);overflow-x:auto;-webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent);
            mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent);
    padding-bottom:2px}
  .nav::-webkit-scrollbar{display:none}
  .nav a{flex:none;min-height:44px;display:inline-flex;align-items:center;padding:0 2px;white-space:nowrap;letter-spacing:.1em}
  .nav a::after{bottom:8px}
  .foot{padding:var(--s-6) var(--s-4)}
}

/* ===== (2) 全站共用：唯讀寬表 → 直式堆疊卡片（.tbl-stack）=====
   模板：<table class="tbl tbl-stack">，每個資料 <td> 加 data-label */
@media (max-width:600px){
  .tbl-stack,.tbl-stack thead,.tbl-stack tbody,.tbl-stack tr,.tbl-stack td{display:block;width:100%}
  .tbl-stack thead,
  .tbl-stack > tbody > tr:first-child:has(th),
  .tbl-stack > tr:first-child:has(th){display:none}
  .tbl-stack tr{border:1px solid var(--hairline);border-radius:var(--r-1);background:var(--surface-0);
    box-shadow:var(--shadow-rest);padding:var(--s-3) var(--s-4);margin-bottom:var(--s-3)}
  .tbl-stack tr.row-active{background:var(--surface-1);border-color:var(--hairline-contrast)}
  .tbl-stack tr:hover td{background:transparent}
  .tbl-stack tr:hover td:first-child{box-shadow:none}
  .tbl-stack td{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);
    padding:6px 0;border:0;border-bottom:1px solid var(--hairline);text-align:right;overflow-wrap:anywhere}
  .tbl-stack td:last-child{border-bottom:0;padding-bottom:0}
  .tbl-stack td:first-child{padding-top:0}
  .tbl-stack td:first-child,.tbl-stack td:last-child{padding-left:0;padding-right:0}
  .tbl-stack td::before{content:attr(data-label);flex:none;text-align:left;color:var(--ink-3);
    font-family:var(--font-sans);font-weight:500;font-size:var(--fs-2xs);letter-spacing:.14em;
    text-transform:uppercase;font-variant-numeric:normal}
  .tbl-stack td.num{font-family:var(--font-serif);font-variant-numeric:lining-nums tabular-nums}
  .tbl-stack td.cell-name{justify-content:flex-start;align-items:center;gap:var(--s-3);font-size:var(--fs-md)}
  .tbl-stack td.cell-name::before{display:none}
  .tbl-stack td.cell-name b{font-weight:500}
  .tbl-stack td.row-ops{flex-wrap:wrap;align-items:stretch;gap:var(--s-2);padding-top:var(--s-3)}
  .tbl-stack td.row-ops::before{width:100%;margin-bottom:2px;flex-basis:100%}
  .tbl-stack td.row-ops button{flex:1 1 calc(50% - var(--s-2));min-height:44px}
  .tbl-stack img,.tbl-stack input,.tbl-stack button,.tbl-stack select{max-width:100%}
}
@media (max-width:430px){
  .tbl-stack td::before{width:auto}
}

/* ===== (3) 全站共用：可水平捲動容器（.table-wrap）===== */
@media (max-width:600px){
  .table-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
}

/* ===== (4) 全站共用：tap target + 輸入框 iOS 防縮放 ===== */
@media (max-width:600px){
  .search{margin-left:0;width:100%;min-height:44px;font-size:16px}
  .order-input,.folder-in,.form-panel input{font-size:16px}
  .badge-btn,.danger-btn,.danger-btn.small,.row-ops button{
    min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 16px}
  .x-btn{opacity:1;min-height:44px;min-width:44px;padding:0 10px;color:var(--ink-3)}
  .cust-card:hover .x-btn{opacity:1}
}

/* ===== (5) dashboard (/) ===== */
@media (max-width:600px){
  .cur-period{padding:var(--s-5)}
  .cp-head{gap:var(--s-4)}
  .cp-actions{width:100%;flex-direction:column;align-items:stretch;gap:var(--s-2)}
  .cp-actions a.primary,.cp-actions a.btn-ghost{width:100%;min-height:44px;justify-content:center}
  .new-period{margin-left:0;width:100%;flex-direction:column;align-items:stretch;gap:var(--s-2)}
  .new-period .search{width:100%;min-height:44px}
  .new-period .btn-ghost,.new-period .primary{width:100%;min-height:44px;justify-content:center}
}
@media (max-width:430px){
  .cp-stats,.cp-stats.four{display:flex;grid-template-columns:none;gap:1px;
    overflow-x:auto;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}
  .cp-stats .stat{flex:0 0 38%;scroll-snap-align:start;padding:var(--s-4) var(--s-3)}
  .cp-name{font-size:var(--fs-2xl);line-height:1.1}
}

/* ===== (6) products (/products) — 堆疊可編輯卡（#ptbl 限定）===== */
@media (max-width:600px){
  .sync-row{flex-direction:column;align-items:stretch;gap:var(--s-3)}
  .sync-row .folder-in{min-width:0;width:100%;word-break:break-all;min-height:44px}
  .sync-bar .primary{width:100%;min-height:44px}
  .add-row{flex-direction:column;align-items:stretch;gap:var(--s-3)}
  .add-row > .edit-txt,.add-row > .edit-num,.add-row > .primary{width:100%;min-width:0;min-height:44px}
  #ptbl,#ptbl tbody,#ptbl tr,#ptbl td{display:block;width:100%}
  #ptbl tr:first-child{display:none}
  #ptbl tr{border:1px solid var(--hairline);border-radius:var(--r-0);box-shadow:var(--shadow-rest);
    background:var(--surface-0);padding:var(--s-4);margin-bottom:var(--s-4)}
  #ptbl tr:hover td{background:transparent}
  #ptbl tr:hover td:first-child{box-shadow:none}
  #ptbl td{border:0;border-bottom:1px solid var(--hairline);padding:var(--s-3) 0;
    display:flex;align-items:center;gap:var(--s-3)}
  #ptbl td:last-child{border-bottom:0}
  #ptbl td:first-child,#ptbl td:last-child{padding-left:0;padding-right:0}
  #ptbl td::before{content:attr(data-label);flex:none;width:84px;color:var(--ink-3);
    font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase;font-family:var(--font-sans)}
  #ptbl td[data-label=""]::before,#ptbl td:not([data-label])::before{content:none}
  #ptbl .edit-txt,#ptbl .edit-num{width:100%;min-width:0;flex:1;min-height:44px;font-size:var(--fs-base)}
  #ptbl td.muted{font-family:var(--font-serif);font-variant-numeric:lining-nums tabular-nums;color:var(--ink-2)}
  #ptbl .thumb-up{width:56px;height:56px}
  #ptbl .badge-btn,#ptbl .danger-btn.small{min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 16px}
  #ptbl img,#ptbl input,#ptbl button{max-width:100%}
}
@media (max-width:430px){
  #ptbl td::before{width:72px}
}

/* ===== (7) sales (/sales) ===== */
@media (max-width:600px){
  .cc-head{flex-wrap:wrap;align-items:center;gap:var(--s-3);padding:var(--s-4)}
  .cc-name{flex:1 1 100%;min-width:0;white-space:normal;overflow:visible;text-overflow:clip;font-size:var(--fs-md);line-height:1.4}
  .cc-right{flex:1 1 100%;flex-wrap:wrap;gap:var(--s-2);align-items:center}
  .cc-amt{min-width:0;flex:1 1 auto;text-align:left;font-size:var(--fs-md)}
  .cc-last5{width:96px;flex:none;min-height:44px;padding:0 10px}
  .cc-right .badge-btn{min-height:44px;padding:0 16px;flex:none}
  .cc-right .x-btn{opacity:1;min-height:44px;min-width:44px;padding:0 10px;color:var(--ink-3)}
  .cust-card{overflow:visible}
  .tbl.mini.tbl-stack tr{border:0;border-bottom:1px solid var(--hairline);box-shadow:none;border-radius:0;
    padding:var(--s-3) var(--s-4);margin-bottom:0;background:transparent}
  .tbl.mini.tbl-stack tr:last-child{border-bottom:0}
  .tbl.mini.tbl-stack td{padding:6px 0}
  .tbl.mini.tbl-stack td:last-child{justify-content:flex-end}
  .tbl.mini.tbl-stack td:last-child::before{content:none}
  .tbl.mini.tbl-stack td .x-btn{opacity:1;min-height:44px;min-width:44px;padding:0 10px;color:var(--ink-3)}
}

/* ===== (8) analysis (/analysis) ===== */
@media (max-width:600px){
  .cp-stats,.cp-stats.four,.cp-stats.three{grid-template-columns:repeat(2,1fr)}
  .cp-stats.three{margin-top:var(--s-4)}
  .bar-row{flex-wrap:wrap;gap:var(--s-2);padding:var(--s-3) 0;border-bottom:1px solid var(--hairline)}
  .bar-label{width:auto;flex:1 1 60%;order:1;font-size:var(--fs-base)}
  .bar-val{width:auto;flex:0 0 auto;order:2;margin-left:auto;font-size:var(--fs-base)}
  .bar-track{flex:1 1 100%;order:3;width:100%;height:8px;margin-top:2px}
  .tabs{gap:var(--s-5)}
  .tab{padding:14px 0}
}

/* ===== (9) desk (home.html) — 商品卡 2 欄 + 購物車好按 ===== */
@media (max-width:600px){
  .panel{padding:var(--s-4)}
  .cards{grid-template-columns:repeat(2,1fr);gap:var(--s-3)}
  .thumb{height:auto;aspect-ratio:1/1}
  .card-name{min-height:0;font-size:var(--fs-xs);padding:0 var(--s-2);line-height:1.45}
  .card{gap:var(--s-2);padding-bottom:var(--s-2)}
  .qty button{width:40px;height:40px;font-size:16px}
  .qty span{line-height:40px;min-width:36px;font-size:var(--fs-base)}
  .ci-img{width:52px;height:52px}
  .ci-del{padding:8px 6px}
  .spec{gap:var(--s-2)}
  .spec select{padding:10px 26px 10px 8px;font-size:var(--fs-sm)}
  .cart .primary{padding:var(--s-4) var(--s-5)}
}
@media (max-width:430px){
  .cards{gap:var(--s-2)}
}

/* ===== (10) import (/import) — 兩表堆疊 + 長路徑換行 ===== */
@media (max-width:600px){
  .hint code,.panel code{word-break:break-all;overflow-wrap:anywhere;white-space:normal}
  .import-grid .primary{width:100%;min-height:44px}
  .panel-head .stats{margin-left:0;width:100%;margin-top:var(--s-2)}
  .order-input{height:240px}
  #btbl td:last-child .pdf-link{display:block;width:100%;min-height:44px;line-height:44px;text-align:center;
    border:1px solid var(--hairline-strong);border-radius:var(--r-1)}
  #btbl td:last-child{justify-content:center}
  #btbl td:last-child::before{display:none}
  #result .tbl{display:block;width:100%}
  #result .tbl tr:first-child{display:none}
  #result .tbl tr{display:block;border:1px solid var(--hairline);border-radius:var(--r-0);
    margin-bottom:var(--s-3);padding:var(--s-2) var(--s-3);background:var(--surface-0)}
  #result .tbl tr:hover td{background:transparent}
  #result .tbl td{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s-4);
    padding:var(--s-2) 0;border:0;border-bottom:1px solid var(--hairline);text-align:right;overflow-wrap:anywhere}
  #result .tbl tr td:last-child{border-bottom:0}
  #result .tbl td::before{content:attr(data-label);flex:none;text-align:left;color:var(--ink-3);
    font-family:var(--font-sans);font-size:var(--fs-2xs);letter-spacing:.14em;text-transform:uppercase}
  #result .tbl td.num{font-family:var(--font-serif);font-variant-numeric:lining-nums tabular-nums}
}

/* ===== (12) settings — 輸入框 + 檔案上傳鈕 ===== */
@media (max-width:600px){
  .form-panel input{min-height:44px;padding:var(--s-3) var(--s-4);font-size:var(--fs-md)}
  .form-panel input[type="file"]{min-height:44px;padding:var(--s-3) var(--s-4);line-height:1.4;font-size:var(--fs-sm);color:var(--ink-2)}
  .form-panel input[type="file"]::file-selector-button,
  .form-panel input[type="file"]::-webkit-file-upload-button{
    margin-right:var(--s-3);border:1px solid var(--hairline-contrast);border-radius:var(--r-1);
    background:#fff;color:var(--ink);font-family:var(--font-sans);font-size:var(--fs-xs);
    letter-spacing:.12em;text-transform:uppercase;padding:var(--s-2) var(--s-4);min-height:36px;cursor:pointer;
    transition:background var(--t-base) var(--ease-soft),color var(--t-base) var(--ease-soft),border-color var(--t-base) var(--ease-soft)}
  .form-panel input[type="file"]:hover::file-selector-button,
  .form-panel input[type="file"]:hover::-webkit-file-upload-button{background:var(--ink);color:#fff;border-color:var(--ink)}
  #saveMsg.sync-msg{right:var(--s-4);bottom:var(--s-4)}
  .form-panel .field{margin:var(--s-3) 0}
}

/* ===== (13) sizes — 晶片觸控 ===== */
@media (max-width:600px){
  .chips{gap:var(--s-3)}
  .chips .chip{min-height:44px;display:inline-flex;align-items:center;padding:0 var(--s-4);letter-spacing:.1em}
}
@media (max-width:430px){
  .content{padding:0 var(--s-3)}
  .panel{padding:var(--s-4)}
  .page-head{margin-bottom:var(--s-4)}
}

/* ===== (14) login — 流動寬卡片 + 安全邊界 ===== */
@media (max-width:600px){
  body.login-bg{padding:var(--s-5);align-items:flex-start;padding-top:var(--s-8)}
  .login-card{width:100%;max-width:340px;padding:var(--s-6) var(--s-5)}
  .login-card input[type=password]{min-height:44px;padding:var(--s-3) var(--s-4);font-size:var(--fs-md)}
  .login-card .primary{min-height:44px;width:100%;padding:var(--s-3) var(--s-5)}
}
@media (max-width:360px){
  body.login-bg{padding:var(--s-4)}
  .login-card{padding:var(--s-5) var(--s-4)}
}
