/* 結帳、結果與訂單查詢共用；tokens.css 必須先載入。 */

/* file:// 預覽或共用 token 載入失敗時仍可閱讀；正式頁面的未分層 tokens.css 優先。 */
@layer checkout-token-fallback{
  :root{
    --bg:#eef1f3;--card:#fff;
    --ink:#16191c;--ink-2:#3d444a;--ink-3:#667079;--muted:#8b9298;--line:#e6eaed;
    --lime:#abf24e;--lime-soft:#e3f4cd;--lime-ink:#25340a;
    --bar:#1a1e21;--bar-dim:#d6dade;
    --pos:#029d4d;--warn:#9a6a00;--danger:#d32f2f;
    --r:24px;--r-sm:16px;--gap:14px;--pad:22px;
    --font:'Geist','Noto Sans TC','PingFang TC','Microsoft JhengHei',system-ui,sans-serif;
  }
}

*{box-sizing:border-box;margin:0;padding:0;letter-spacing:normal}
body{background:var(--bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;line-height:1.4}
.tnum{font-variant-numeric:tabular-nums}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none}
svg.ico{fill:currentColor;flex:none;display:block}

/* ---- 版面 ---- */
main{max-width:1100px;margin:0 auto;padding:22px 28px 48px}
.checkout-header{margin:2px 0 18px}
.site-brand{display:inline-flex;align-items:center;gap:9px;min-width:0;padding:2px 0}
.site-brand img{display:block;width:auto;height:26px;flex:none}
.site-brand span{font-size:15px;font-weight:700;color:var(--ink);white-space:nowrap}
.site-brand:focus-visible{outline:3px solid var(--lime);outline-offset:4px;border-radius:4px}
h1{font-size:30px;font-weight:800;margin-top:4px}
.checkout-header p{color:var(--muted);font-size:14px;font-weight:500;margin-top:4px;max-width:680px}
.checkout-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:var(--gap);align-items:start}
.checkout-card{background:var(--card);border-radius:var(--r);padding:var(--pad)}
.summary-card{background:var(--card);border-radius:var(--r);padding:var(--pad);position:sticky;top:18px}

/* ---- 區塊標題（步驟）---- */
.section-heading{display:flex;align-items:center;gap:9px;margin:24px 0 12px}
.section-heading:first-child{margin-top:0}
.step-badge{width:24px;height:24px;border-radius:50%;background:var(--lime);color:var(--lime-ink);display:grid;place-items:center;font-size:12px;font-weight:800;flex:none}
h2{font-size:15px;font-weight:700}

/* ---- 訂單摘要 ---- */
.summary-title{font-size:13px;color:var(--muted);font-weight:600}
.summary-name{font-size:18px;font-weight:800;margin:4px 0 16px}
.summary-row{display:flex;justify-content:space-between;gap:16px;border-top:1px solid var(--line);padding:12px 0;color:var(--ink-3);font-size:13px;font-weight:500}
.summary-row strong{color:var(--ink);font-weight:700;text-align:right}
.summary-row small{color:var(--muted);font-size:12px}
.summary-amount{display:block;border-top:1px solid var(--line);padding:16px 0 4px}
.summary-amount span{display:block;color:var(--muted);font-size:13px;font-weight:600}
.summary-amount strong{display:block;margin-top:6px;font-size:30px;font-weight:800;line-height:1.1}

/* ---- 按鈕 ---- */
.btn,.primary-cta,.secondary-cta,.danger-cta{padding:13px 20px;border-radius:30px;font-size:14px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;gap:7px}
.primary-cta{width:100%;background:var(--bar);color:#fff;margin-top:16px;padding:15px 20px}
/* 停用色刻意比底色深一階（#eef1f3 底上仍清楚是一顆鈕），避免與畫面融合 */
.primary-cta:disabled{background:#a7b0b7;color:#fff;cursor:not-allowed}
.secondary-cta{background:#f4f6f7;color:var(--ink-2)}
.danger-cta{background:#fbe9e9;color:var(--danger)}
.secondary-cta:focus-visible,.danger-cta:focus-visible,.primary-cta:focus-visible,.text-button:focus-visible{outline:3px solid var(--lime);outline-offset:2px}
.text-button{font-size:13px;font-weight:700;color:var(--ink-3);text-decoration:underline;padding:6px 0;display:inline-block}
.text-button:hover{color:var(--ink)}
.checkout-secondary-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:22px}
.checkout-secondary-actions.is-single{grid-template-columns:1fr}

/* ---- 已存卡片 ---- */
.saved-grid{display:grid;gap:10px;margin:12px 0}
.saved-card{display:grid;grid-template-columns:auto auto 1fr auto;gap:2px 10px;align-items:center;border:1px solid var(--line);border-radius:var(--r-sm);padding:14px;background:#fff;cursor:pointer;font-size:14px;font-weight:700}
.saved-card input{width:auto;accent-color:var(--bar);grid-row:1/span 2}
.saved-card:has(input:checked){border-color:var(--bar);box-shadow:0 0 0 1px var(--bar) inset}
.saved-card:focus-within{outline:3px solid var(--lime);outline-offset:2px}
.saved-card .mask{color:var(--ink-3);font-variant-numeric:tabular-nums;font-weight:600}
.saved-card .name{grid-column:3;color:var(--muted);font-size:12px;font-weight:600}
.saved-card .badge{grid-row:1;grid-column:4;justify-self:end}
.saved-card.is-unusable{opacity:.65;cursor:not-allowed;background:#fafbfb}
.saved-card .unusable{grid-column:3/5;color:var(--danger);font-size:12px;font-weight:600}

/* 狀態標籤：沿用 Consumer .badge */
.badge{font-size:12px;font-weight:700;padding:3px 9px;border-radius:20px;background:var(--lime-soft);color:var(--lime-ink);display:inline-flex;align-items:center;gap:3px}
.badge.dz{background:#fbe9e9;color:var(--danger)}

/* ---- 面板（站內付／同意／表單）---- */
.payment-panel,.consent-panel,.newform{background:#f7f9fa;border:1px solid var(--line);border-radius:var(--r-sm);padding:18px;margin:12px 0}
.ecpay-payment-frame{min-height:180px;margin:14px 0;border:1px dashed var(--line);border-radius:var(--r-sm);background:#fff;padding:14px;display:grid;place-items:center;color:var(--muted);font-size:13px;text-align:center;line-height:1.7}
.note{color:var(--muted);font-size:13px;line-height:1.6;margin:10px 0 0}
fieldset{border:0;padding:0;margin:8px 0 0}
.check{display:flex;gap:10px;align-items:flex-start;padding:9px 0;font-size:14px;font-weight:600;color:var(--ink-2);line-height:1.6;cursor:pointer;margin:0}
.check input{width:18px;height:18px;margin-top:2px;accent-color:var(--pos);flex:none}

/* 付款模式切換 */
.paymode{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px}
.paymode label{margin:0;border:1px solid var(--line);border-radius:var(--r-sm);padding:12px;text-align:center;background:#fff;cursor:pointer;font-size:14px;font-weight:700;color:var(--ink-2)}
.paymode label:has(input:checked){border-color:var(--bar);background:#fff;color:var(--ink);box-shadow:0 0 0 1px var(--bar) inset}
.paymode label:focus-within,.invoice-choice:focus-within,.payer-type label:focus-within{outline:3px solid var(--lime);outline-offset:2px}
.paymode input{position:absolute;opacity:0}

.terms{margin-top:10px;font-size:13px;color:var(--ink-3);line-height:1.7;border-left:2px solid var(--line);padding-left:12px}
.warn{background:#fff8e6;border:1px solid #f0e0b8;color:var(--warn);border-radius:var(--r-sm);padding:12px 14px;font-size:13px;line-height:1.6;margin-top:10px;font-weight:600}

/* ---- 選項卡（發票／付款人）---- */
.invoice-choice-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:12px 0}
.invoice-choice{border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;padding:14px;cursor:pointer;margin:0;font-size:14px;font-weight:600;color:var(--ink-2);display:flex;align-items:flex-start;gap:8px}
.invoice-choice input{width:auto;margin:2px 0 0;flex:none;accent-color:var(--bar)}
.ic-text{display:flex;flex-direction:column;gap:2px;min-width:0}
.ic-type{font-weight:600;line-height:1.35}
.ic-name{font-weight:400;font-size:13px;color:var(--ink-2);line-height:1.35;word-break:break-word}
.invoice-choice:has(input:checked){border-color:var(--bar);color:var(--ink);box-shadow:0 0 0 1px var(--bar) inset}

/* ---- 表單：沿用 Consumer .field ---- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field:last-child{margin-bottom:0}
.field label{font-size:13px;color:var(--ink-2);font-weight:600}
.field input,.field select,.newform input,.newform select{font:inherit;font-size:14px;padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:#fff;color:var(--ink);width:100%}
.field input:focus,.field select:focus,.newform input:focus,.newform select:focus{outline:2px solid var(--lime);outline-offset:-1px;border-color:var(--lime)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.field-err{color:var(--danger);font-size:12px;font-weight:600;margin-top:4px}
.payer-type{display:flex;gap:10px;margin-bottom:12px}
.payer-type label{flex:1;border:1px solid var(--line);border-radius:var(--r-sm);padding:11px;text-align:center;font-size:14px;font-weight:700;cursor:pointer;margin:0;background:#fff;color:var(--ink-2)}
.payer-type label:has(input:checked){border-color:var(--bar);color:var(--ink);box-shadow:0 0 0 1px var(--bar) inset}
/* 視覺上隱藏 radio（外觀由 label 呈現）。必須一併歸零尺寸：上方
   `.newform input` 的 width:100% 同樣命中這裡，而 label 沒有定位脈絡，
   絕對定位的 radio 會以視窗寬度撐出頁面級水平捲動（390px 時最明顯）。
   鍵盤焦點仍由 `.payer-type label:focus-within` 的外框呈現。 */
.payer-type input{position:absolute;opacity:0;width:0;height:0;margin:0}

/* ---- 結果列 ---- */
.result-rows{display:grid;gap:10px;margin:16px 0}
.result-row{display:flex;justify-content:space-between;gap:16px;border:1px solid var(--line);border-radius:var(--r-sm);padding:14px 16px;font-size:14px;background:#fff}
.result-row span:first-child{color:var(--ink-3);font-weight:600}
.result-row span:last-child{font-weight:700;text-align:right}

.secure-note{margin-top:14px;padding:12px 14px;border-radius:var(--r-sm);background:#f4f6f7;color:var(--ink-3);font-size:13px;line-height:1.6;font-weight:500}
.error{color:var(--danger);font-weight:600}
[hidden]{display:none !important}

/* ECPay inserts its controls directly under this container. The merchant-account
   capability remains authoritative even when a shared Stage merchant exposes more. */
#ECPayPayment[data-installment-enabled="false"] .ecpay-Installment,
#ECPayPayment[data-installment-enabled="false"] .ecpay-icon-ic,
#ECPayPayment[data-installment-enabled="false"] .ecpay-pay-check:has(.ecpay-pay-check-BuyerInstallment),
#ECPayPayment[data-installment-enabled="false"] .ecpay-pay-check:has([name="BuyerInstallmentStatus"]),
#ECPayPayment[data-installment-enabled="false"] [data-ecpay-installment-control]{
  display:none !important;
}

/* ---- RWD ---- */
@media(max-width:900px){
  main{padding:20px 16px 40px}
  .checkout-layout{grid-template-columns:1fr}
  .summary-card{position:static;order:-1}
}
@media(max-width:640px){
  h1{font-size:24px}
  .invoice-choice-grid,.row2,.paymode,.checkout-secondary-actions{grid-template-columns:1fr}
  .summary-amount strong{font-size:26px}
}



/* ---- 載入骨架：JS 渲染前不再是空白卡片 ---- */
body[data-checkout-state="loading"] #checkoutBody::before,
body[data-checkout-state="loading"] #summaryCard::before,
body[data-result-state="loading"] #resultBody::before,
body[data-result-state="loading"] #resultSummary::before{
  content:"";display:block;height:180px;border-radius:var(--r-sm);
  background:linear-gradient(90deg,#eef1f3 25%,#f7f9fa 45%,#eef1f3 65%);
  background-size:200% 100%;animation:ck-shimmer 1.1s linear infinite;
}
@keyframes ck-shimmer{from{background-position:200% 0}to{background-position:-200% 0}}

/* ---- 付款處理中：主按鈕加 spinner（僅 processing 狀態）---- */
body[data-checkout-state="processing"] .primary-cta::before{
  content:"";width:15px;height:15px;border-radius:50%;flex:none;
  border:2px solid rgba(255,255,255,.35);border-top-color:#fff;
  animation:ck-spin .7s linear infinite;
}
@keyframes ck-spin{to{transform:rotate(1turn)}}

/* ---- CTA 未達成條件提示（aria-live）---- */
.cta-hint{margin-top:9px;font-size:12px;font-weight:600;color:var(--muted);text-align:center}

/* ---- 金額與卡號一律等寬數字，直欄對齊 ---- */
.summary-amount strong,.summary-row strong,.result-row span:last-child,.saved-card .mask{font-variant-numeric:tabular-nums}

/* ---- 結果狀態視覺強化：首個狀態徽章放大並依結果著色 ---- */
body[data-result-state] .section-heading:first-child .step-badge,
body[data-checkout-state="success"] .section-heading:first-child .step-badge,
body[data-checkout-state="one-time-success"] .section-heading:first-child .step-badge{
  width:40px;height:40px;font-size:18px;
}
body[data-result-state="failed"] .section-heading:first-child .step-badge,
body[data-checkout-state="failed"] .section-heading:first-child .step-badge{background:#fbe9e9;color:var(--danger)}
body[data-result-state="confirming"] .section-heading:first-child .step-badge{background:#f4f6f7;color:var(--ink-3)}

/* ---- 行動版：確認付款固定在畫面底部（僅結帳頁；查詢頁表單不適用）----
   摘要卡在行動版排在最上方，填完表單後不必再捲回頂端。 ---- */
@media(max-width:900px){
  body[data-checkout-mode] main{padding-bottom:110px}
  /* 左右對齊 main 的 16px 內容邊距，避免固定鈕比卡片寬而凸出 */
  body[data-checkout-mode] .summary-card .primary-cta{
    position:fixed;left:16px;right:16px;bottom:calc(12px + env(safe-area-inset-bottom));
    width:auto;z-index:60;margin-top:0;box-shadow:0 10px 28px rgba(0,0,0,.22);
  }
  /* 提示改深色藥丸，與淺底明確區隔；置於固定鈕上方 */
  body[data-checkout-mode] .summary-card .cta-hint{
    position:fixed;left:16px;right:16px;bottom:calc(70px + env(safe-area-inset-bottom));
    z-index:60;background:rgba(26,30,33,.92);color:#fff;border-radius:10px;padding:7px 12px;margin:0;
    box-shadow:0 4px 14px rgba(0,0,0,.18);
  }

  body[data-checkout-mode]:not([data-checkout-state="success"]):not([data-checkout-state="one-time-success"]):not([data-checkout-state="failed"]):not([data-checkout-state="session-expired"])::after{
    content:"";position:fixed;left:0;right:0;bottom:0;z-index:55;pointer-events:none;
    height:calc(112px + env(safe-area-inset-bottom));
    background:linear-gradient(180deg,rgba(238,241,243,0),rgba(238,241,243,.96) 42%);
  }
}

/* ---- 尊重減少動態偏好 ---- */
@media (prefers-reduced-motion: reduce){
  .primary-cta::before{animation:none}
  body[data-checkout-state="loading"] #checkoutBody::before,
  body[data-checkout-state="loading"] #summaryCard::before,
  body[data-result-state="loading"] #resultBody::before,
  body[data-result-state="loading"] #resultSummary::before{animation:none}
}

/* ---- 頁尾公司資訊（與 Consumer 總覽一致）----
   付款頁無側欄，單列所需寬度約 750px，故直排斷點設 780px（總覽因側欄用 1020px）。 */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.page-foot{margin-top:36px;display:flex;flex-direction:column;align-items:center;gap:8px}
.foot-org{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 0;font-size:13px;color:var(--ink)}
.foot-org .fi{position:relative;padding:0 12px;line-height:1.5;color:var(--ink);text-decoration:none}
.foot-org .fi + .fi::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:1px;height:12px;background:var(--muted)}
.foot-org .fi:first-child{padding-left:0}
.foot-org .fi:last-child{padding-right:0}
.foot-org a.fi:hover .ft{text-decoration:underline}
@media(max-width:780px){
  .foot-org{flex-direction:column;gap:8px}
  .foot-org .fi{padding:0}
  .foot-org .fi + .fi::before{display:none}
}
