:root{--bg:#f3f6f8;--panel:#fff;--text:#17232d;--muted:#667684;--line:#dce3e8;--primary:#0b7a4b;--primary-dark:#075c38;--danger:#b42318;--warning:#a15c00;--shadow:0 10px 30px rgba(23,35,45,.08);--radius:16px}*{box-sizing:border-box}[hidden]{display:none!important}html{font-family:Inter,"Noto Sans TC","PingFang TC","Microsoft JhengHei",sans-serif;color:var(--text);background:var(--bg);line-height:1.55}body{margin:0;min-height:100vh}a{color:var(--primary);text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-columns:248px minmax(0,1fr);min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;background:#0f1e26;color:#fff;padding:22px 16px;display:flex;flex-direction:column;z-index:20}.brand{display:flex;align-items:center;gap:12px;color:#fff;padding:4px 8px 24px}.brand strong,.brand small{display:block}.brand small{opacity:.65;font-size:12px}.brand-mark{width:58px;height:58px;border-radius:18px;background:linear-gradient(135deg,#0f925b,#075b38);display:grid;place-items:center;color:#fff;font-weight:800;font-size:28px;box-shadow:0 10px 25px rgba(11,122,75,.25);margin:0 auto 16px}.brand-mark.small{width:40px;height:40px;border-radius:12px;font-size:20px;margin:0}.sidebar nav{display:grid;gap:6px}.nav-link{display:flex;align-items:center;gap:12px;color:#dce5e9;padding:11px 13px;border-radius:10px}.nav-link:hover,.nav-link.active{background:#183440;color:#fff}.nav-link span{width:22px;text-align:center}.sidebar-user{margin-top:auto;border-top:1px solid rgba(255,255,255,.12);padding:16px 8px 0}.sidebar-user strong,.sidebar-user small{display:block}.sidebar-user small{color:#9db0ba;margin:3px 0 9px}.sidebar-user a{color:#9fe1c3;font-size:14px}.main-area{min-width:0}.topbar{height:88px;padding:18px 30px;display:flex;align-items:center;gap:16px;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.topbar h1{font-size:22px;margin:0}.topbar p{margin:2px 0 0;color:var(--muted);font-size:13px}.top-actions{margin-left:auto;display:flex;gap:8px}.content{padding:28px;max-width:1500px;width:100%;margin:0 auto}.menu-btn{display:none}.btn{border:1px solid var(--line);background:#fff;color:var(--text);border-radius:10px;padding:9px 14px;display:inline-flex;align-items:center;justify-content:center;gap:6px;font-weight:650}.btn:hover{border-color:#afbbc3}.btn.primary{background:var(--primary);border-color:var(--primary);color:#fff}.btn.primary:hover{background:var(--primary-dark)}.btn.danger{background:#fff4f3;color:var(--danger);border-color:#f1b4ae}.btn.ghost{background:transparent}.btn.wide{width:100%}.btn.tiny{padding:5px 9px;font-size:13px}.icon-btn{border:0;background:transparent;padding:8px;font-size:20px;border-radius:8px}.danger-text{color:var(--danger)}.alert{padding:12px 15px;border-radius:10px;margin:0 0 18px;border:1px solid}.alert.success{background:#effaf4;border-color:#b7e4ca;color:#16643d}.alert.danger{background:#fff2f1;border-color:#f2b8b3;color:#8e1d15}.alert.warning{background:#fff8eb;border-color:#ecd49d;color:#80500a}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px}.stat-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:20px;display:flex;align-items:center;gap:14px;box-shadow:var(--shadow)}.stat-icon{width:44px;height:44px;border-radius:13px;background:#e8f6ef;color:var(--primary);display:grid;place-items:center;font-size:20px;font-weight:800}.stat-card small,.stat-card strong{display:block}.stat-card small{color:var(--muted)}.stat-card strong{font-size:23px;margin-top:3px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;margin-bottom:20px}.panel.narrow{max-width:900px;margin-inline:auto}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}.panel-head h2{font-size:18px;margin:0}.panel-head p{color:var(--muted);font-size:13px;margin:2px 0 0}.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:12px}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:12px 13px;border-bottom:1px solid var(--line);vertical-align:middle}th{background:#f7f9fa;color:#53636f;font-size:13px;white-space:nowrap}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#fbfcfd}td small{display:block;color:var(--muted);margin-top:2px}.table-title{display:block}.empty{text-align:center;color:var(--muted);padding:34px}.badge{display:inline-block;padding:4px 8px;border-radius:999px;font-size:12px;font-weight:700}.badge.success{background:#e8f7ef;color:#17683f}.badge.danger{background:#fff0ef;color:#9a2117}.badge.warning{background:#fff6e5;color:#8b570a}.badge.neutral{background:#edf1f3;color:#53636f}.toolbar{display:flex;gap:8px;margin-bottom:14px}.toolbar input{max-width:360px}.form-grid{display:grid;gap:16px}.form-grid.two-col{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid.three-col{grid-template-columns:repeat(3,minmax(0,1fr))}.form-grid .full{grid-column:1/-1}.stack-form,.stack-lg{display:grid;gap:16px}.stack-lg{gap:20px}label{display:grid;gap:6px;font-size:14px;font-weight:650;color:#34444f}input,select,textarea{width:100%;border:1px solid #cfd8de;border-radius:9px;padding:10px 11px;background:#fff;color:var(--text);outline:none}input:focus,select:focus,textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(11,122,75,.12)}textarea{resize:vertical}.check{display:flex;align-items:center;gap:8px}.check input{width:auto}.form-actions{display:flex;justify-content:flex-end;gap:9px}.sticky-actions{position:sticky;bottom:14px;display:flex;justify-content:flex-end;gap:8px;background:rgba(255,255,255,.92);border:1px solid var(--line);padding:10px;border-radius:13px;box-shadow:var(--shadow);backdrop-filter:blur(10px);z-index:9}.auth-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 20% 10%,#dff4e8,transparent 35%),var(--bg)}.auth-card{width:min(430px,100%);background:#fff;border:1px solid var(--line);border-radius:22px;padding:30px;box-shadow:0 24px 70px rgba(23,35,45,.13)}.auth-card.wide-card{width:min(820px,100%)}.auth-card h1{text-align:center;margin:0}.muted{color:var(--muted)}.center{text-align:center}.auth-card>p{text-align:center}.auth-links{display:flex;justify-content:space-between;margin-top:18px;font-size:14px}.quote-items{display:grid;gap:12px}.quote-row{display:grid;grid-template-columns:36px minmax(160px,1.1fr) minmax(160px,1.2fr) minmax(200px,1.6fr) 80px 75px 110px 105px 115px 34px;gap:8px;align-items:end;padding:12px;background:#f8fafb;border:1px solid var(--line);border-radius:12px}.quote-row label{font-size:12px}.quote-row input,.quote-row select,.quote-row textarea{padding:8px}.row-index{align-self:center;text-align:center;font-weight:800;color:var(--muted)}.line-total{align-self:center;text-align:right;font-weight:800;white-space:nowrap}.quote-summary{margin-left:auto;margin-top:18px;width:min(390px,100%);display:grid;gap:8px}.quote-summary>div{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line)}.quote-summary .grand{font-size:18px;border-bottom:0}.document-toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.inline-form{display:flex;gap:8px}.inline-form select{min-width:130px}.paper{width:min(210mm,100%);min-height:297mm;margin:0 auto;background:#fff;border:1px solid #dfe4e8;box-shadow:0 20px 60px rgba(23,35,45,.12);padding:15mm;position:relative}.paper-head{display:flex;justify-content:space-between;gap:20px;border-bottom:3px solid var(--primary);padding-bottom:14px}.paper-head h1{margin:0;font-size:24px}.paper-head p{margin:2px 0;color:#596975;font-size:12px}.doc-title{text-align:right}.doc-title strong,.doc-title span{display:block}.doc-title strong{font-size:30px;letter-spacing:4px}.doc-title span{font-size:11px;color:var(--muted);letter-spacing:2px}.doc-meta{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:18px 0}.doc-meta>div span,.doc-meta>div strong,.doc-meta>div small{display:block}.doc-meta>div span{color:var(--muted);font-size:12px}.doc-meta>div strong{font-size:18px;margin:3px 0}.doc-meta dl{display:grid;grid-template-columns:90px 1fr;margin:0;font-size:13px}.doc-meta dt,.doc-meta dd{padding:3px 0;margin:0}.doc-meta dt{color:var(--muted)}.project-name{background:#edf7f2;border-left:4px solid var(--primary);padding:9px 12px;margin-bottom:12px}.doc-table{font-size:13px}.doc-table th{background:#143b2d;color:#fff}.doc-table td:nth-last-child(-n+2),.doc-table th:nth-last-child(-n+2){text-align:right}.doc-table td:nth-child(1),.doc-table td:nth-child(3),.doc-table td:nth-child(4),.doc-table th:nth-child(1),.doc-table th:nth-child(3),.doc-table th:nth-child(4){text-align:center}.doc-bottom{display:grid;grid-template-columns:1fr 260px;gap:24px;margin-top:18px}.terms p{margin:5px 0;font-size:13px}.totals>div{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--line)}.totals .grand{font-size:18px;border-top:2px solid #22333d;border-bottom:0;margin-top:4px}.paper-foot{display:flex;justify-content:space-between;align-items:end;gap:20px;margin-top:34px;border-top:1px solid var(--line);padding-top:16px}.stamp-box{width:210px;height:92px;border:1px dashed #aab5bc;display:grid;place-items:center;text-align:center;color:#7a8892}.signature-info{max-width:390px;display:grid;gap:3px;text-align:right;font-size:11px;color:var(--muted);overflow-wrap:anywhere}.signature-info strong{color:var(--primary)}.receipt-total{display:flex;justify-content:space-between;align-items:center;border:2px solid var(--text);padding:14px;margin-top:20px}.receipt-total strong{font-size:20px}.receipt-notice{font-size:12px;color:#4f606b;background:#f7f9fa;padding:10px}.void-watermark{position:absolute;inset:40% 0 auto;transform:rotate(-18deg);font-size:90px;font-weight:900;color:rgba(180,20,20,.18);text-align:center;z-index:2}.summary-box{display:grid;gap:4px;background:#f4f8f6;padding:15px;border-radius:12px;margin-bottom:18px}.summary-box strong{font-size:18px}.summary-box span{color:var(--muted)}dialog{border:0;border-radius:16px;padding:22px;width:min(480px,calc(100% - 32px));box-shadow:0 25px 80px rgba(0,0,0,.22)}dialog::backdrop{background:rgba(12,24,31,.55)}dialog h3{margin-top:0}.public-container{min-height:100vh;padding:30px;display:grid;place-items:start center}.verify-card{width:min(680px,100%);background:#fff;border:1px solid var(--line);border-radius:20px;padding:26px;box-shadow:var(--shadow)}.verify-card h1{text-align:center}.verify-form{display:flex;gap:8px}.verify-result{margin-top:20px;border-radius:14px;padding:18px;border:1px solid}.verify-result.valid{background:#effaf4;border-color:#b7e4ca}.verify-result.invalid{background:#fff2f1;border-color:#f2b8b3}.verify-result>strong{font-size:20px}.verify-result dl{display:grid;grid-template-columns:120px 1fr;margin-bottom:0}.verify-result dt,.verify-result dd{padding:7px;border-bottom:1px solid rgba(0,0,0,.08);margin:0}.pagination{display:flex;gap:5px;margin-top:18px}.pagination a{padding:6px 10px;border:1px solid var(--line);border-radius:8px}.pagination a.active{background:var(--primary);color:#fff}.no-print{}@media(max-width:1180px){.stats-grid{grid-template-columns:repeat(2,1fr)}.quote-row{grid-template-columns:36px repeat(4,minmax(120px,1fr));align-items:end}.quote-row .grow2{grid-column:3/5}.quote-row .line-total{grid-column:4}.cost-field{display:none}}@media(max-width:820px){.app-shell{grid-template-columns:1fr}.sidebar{position:fixed;left:-270px;width:248px;transition:left .2s}.sidebar.open{left:0;box-shadow:20px 0 60px rgba(0,0,0,.25)}.menu-btn{display:block}.topbar{height:auto;min-height:74px;padding:14px 16px}.topbar h1{font-size:19px}.content{padding:16px}.stats-grid{grid-template-columns:1fr 1fr}.form-grid.two-col,.form-grid.three-col{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.quote-row{grid-template-columns:32px 1fr 1fr}.quote-row label{grid-column:auto}.quote-row .grow,.quote-row .grow2{grid-column:2/4}.quote-row .line-total{grid-column:2/3;text-align:left}.document-toolbar{overflow:auto}.paper{padding:22px;min-height:0}.doc-bottom{grid-template-columns:1fr}.doc-meta{grid-template-columns:1fr}.paper-foot{align-items:stretch;flex-direction:column}.signature-info{text-align:left}.doc-table{min-width:650px}.paper .doc-table{display:block;overflow:auto}.top-actions .btn{padding:8px 10px}.auth-card{padding:22px}}@media(max-width:520px){.stats-grid{grid-template-columns:1fr}.panel{padding:14px}.topbar p{display:none}.top-actions{gap:4px}.quote-row{grid-template-columns:28px 1fr}.quote-row>*{grid-column:2}.quote-row .row-index{grid-column:1;grid-row:1/3}.quote-row .grow,.quote-row .grow2,.quote-row .line-total{grid-column:2}.verify-form{display:grid}.auth-links{display:grid;gap:8px}.receipt-total{display:grid;gap:6px}.receipt-total strong{font-size:16px}}@media print{html,body{background:#fff}.app-shell{display:block}.sidebar,.topbar,.no-print,.document-toolbar,.sticky-actions{display:none!important}.content{padding:0;max-width:none}.paper{width:100%;min-height:auto;border:0;box-shadow:none;margin:0;padding:8mm}.paper-head{break-inside:avoid}.doc-table{font-size:11px}.paper-foot{break-inside:avoid}@page{size:A4;margin:8mm}}
.table-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;white-space:nowrap}.table-actions form{margin:0}.request-items{display:grid;gap:12px}.request-row{display:grid;grid-template-columns:36px minmax(170px,1.1fr) minmax(170px,1.1fr) minmax(230px,1.6fr) 100px 90px 36px;gap:9px;align-items:end;padding:12px;background:#f8fafb;border:1px solid var(--line);border-radius:12px}.request-row label{font-size:12px}.request-row input,.request-row select,.request-row textarea{padding:8px}.inquiry-waiting{align-self:start;background:#fff8eb;border:1px solid #ecd49d;color:#80500a;border-radius:12px;padding:14px;display:grid;gap:4px}.inquiry-waiting span{font-size:13px}@media(max-width:1100px){.request-row{grid-template-columns:36px repeat(3,minmax(130px,1fr))}.request-row .request-spec{grid-column:2/4}.request-row .icon-btn{grid-column:4}}@media(max-width:820px){.request-row{grid-template-columns:32px 1fr 1fr}.request-row .request-spec{grid-column:2/4}.request-row .icon-btn{grid-column:3}.table-actions{min-width:128px}}@media(max-width:520px){.request-row{grid-template-columns:28px 1fr}.request-row>*{grid-column:2}.request-row .row-index{grid-column:1;grid-row:1/3}.request-row .request-spec,.request-row .icon-btn{grid-column:2}.table-actions{min-width:0}}

/* v1.1.4 - 客戶詢價頁排版 */
.quote-request-form{max-width:1280px;margin-inline:auto}
.request-overview-panel{padding:22px}
.request-overview-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(280px,.85fr);gap:18px}
.request-overview-grid .request-notes{grid-column:1/-1}
.request-overview-grid textarea{min-height:112px}

.quote-request-form .panel-head{align-items:flex-start}
.quote-request-form .panel-head .btn{flex:0 0 auto}
.request-items{gap:14px}
.request-row{
  grid-template-columns:42px minmax(220px,1.05fr) minmax(240px,1.15fr) 110px 92px 42px;
  grid-template-areas:
    "index material name quantity unit remove"
    "index spec spec spec spec remove";
  column-gap:12px;
  row-gap:10px;
  align-items:end;
  padding:16px;
  background:#fbfcfd;
  border-color:#d8e1e6;
  box-shadow:0 3px 12px rgba(23,35,45,.035)
}
.request-row .row-index{grid-area:index;align-self:stretch;display:grid;place-items:center;background:#edf7f2;border-radius:10px;color:var(--primary);font-size:15px}
.request-row>label:nth-of-type(1){grid-area:material}
.request-row>label:nth-of-type(2){grid-area:name}
.request-row>.request-spec{grid-area:spec}
.request-row>label:nth-of-type(4){grid-area:quantity}
.request-row>label:nth-of-type(5){grid-area:unit}
.request-row>[data-remove-request-row]{grid-area:remove;align-self:stretch;min-height:42px;border:1px solid #f2c4bf;background:#fff7f6}
.request-row>[data-remove-request-row]:hover{background:#ffefed}
.request-row label{gap:7px;font-size:13px}
.request-row input,.request-row select,.request-row textarea{min-height:42px;padding:9px 10px;background:#fff}
.request-row textarea{min-height:76px}
.quote-request-form .sticky-actions{padding:12px 14px}

@media(max-width:1100px){
  .request-overview-grid{grid-template-columns:1fr 1fr}
  .request-row{
    grid-template-columns:40px minmax(0,1fr) minmax(0,1fr) 42px;
    grid-template-areas:
      "index material material remove"
      "index name name remove"
      "index spec spec remove"
      "index quantity unit remove"
  }
}
@media(max-width:760px){
  .quote-request-form{max-width:none}
  .request-overview-panel{padding:16px}
  .request-overview-grid{grid-template-columns:1fr;gap:14px}
  .request-overview-grid .request-notes{grid-column:auto}
  .quote-request-form .panel-head{align-items:stretch;flex-direction:column}
  .quote-request-form .panel-head .btn{width:100%}
  .request-row{
    grid-template-columns:34px minmax(0,1fr) 38px;
    grid-template-areas:
      "index material remove"
      "index name remove"
      "index spec remove"
      "index quantity remove"
      "index unit remove";
    padding:12px;
    column-gap:9px
  }
  .request-row .row-index{align-self:start;min-height:42px}
  .request-row>[data-remove-request-row]{align-self:start;min-height:42px}
  .quote-request-form .sticky-actions{position:static;display:grid;grid-template-columns:1fr 1.4fr}
  .quote-request-form .sticky-actions .btn{width:100%}
}
@media(max-width:430px){
  .content{padding:16px 12px}
  .request-row{grid-template-columns:30px minmax(0,1fr) 36px;padding:10px}
  .request-row input,.request-row select,.request-row textarea{font-size:16px}
}

/* v1.1.5 - 估價流程、數量與單位欄位 */
.estimate-notice{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 18px;border:1px solid #e3bd69;border-radius:14px;background:#fff8e8;color:#744800;box-shadow:0 5px 18px rgba(98,67,0,.06)}
.estimate-notice>div{display:grid;gap:4px}.estimate-notice strong{font-size:17px}.estimate-notice span{font-size:13px;line-height:1.55}.estimate-status{flex:0 0 auto;padding:7px 11px;border-radius:999px;background:#fff;color:#80500a;border:1px solid #ecd49d;font-weight:800}
.quote-estimate-panel .panel-head p{max-width:720px}.quote-row{grid-template-columns:42px minmax(200px,1fr) minmax(220px,1.15fr) 100px 105px 118px 42px;grid-template-areas:"index material name quantity unit total remove" "index spec spec price cost total remove";column-gap:12px;row-gap:10px;align-items:end;padding:16px}
.quote-row .row-index{grid-area:index;align-self:stretch;display:grid;place-items:center;background:#edf7f2;border-radius:10px;color:var(--primary)}
.quote-row>label:nth-of-type(1){grid-area:material}.quote-row>.grow{grid-area:name}.quote-row>.grow2{grid-area:spec}.quote-row>.quantity-field{grid-area:quantity}.quote-row>.unit-field{grid-area:unit}.quote-row>.price-field{grid-area:price}.quote-row>.cost-field{grid-area:cost}.quote-row>.line-total{grid-area:total;align-self:stretch;display:flex;align-items:center;justify-content:flex-end;padding:10px;border-radius:10px;background:#edf7f2;color:#0a6840}.quote-row>[data-remove-row]{grid-area:remove;align-self:stretch;min-height:42px}
.quote-row .price-field{padding:9px;border:1px solid #8bc8a8;border-radius:10px;background:#f0faf5;color:#075b37;font-weight:800}.quote-row .price-field input{background:#fff;border-color:#6eb58f}.quote-row input,.quote-row select,.quote-row textarea{min-height:42px}.quote-row textarea{min-height:76px}
.quantity-input{-moz-appearance:textfield}.quantity-input::-webkit-inner-spin-button,.quantity-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.document-toolbar{align-items:center;padding:10px 0}.document-toolbar .inline-form{align-items:stretch}.document-toolbar .inline-form select,.document-toolbar .btn{min-height:44px}
@media(max-width:1180px){.quote-row{grid-template-columns:40px minmax(0,1fr) minmax(0,1fr) 110px 42px;grid-template-areas:"index material material total remove" "index name name total remove" "index spec spec total remove" "index quantity unit total remove" "index price cost total remove"}.quote-row .grow,.quote-row .grow2,.quote-row .line-total{grid-column:auto}.cost-field{display:grid}}
@media(max-width:760px){.estimate-notice{align-items:stretch;flex-direction:column}.estimate-notice .btn{width:100%}.estimate-status{align-self:flex-start}.quote-row{grid-template-columns:34px minmax(0,1fr) 40px;grid-template-areas:"index material remove" "index name remove" "index spec remove" "index quantity remove" "index unit remove" "index price remove" "index cost remove" "index total remove"}.quote-row .row-index,.quote-row>[data-remove-row]{align-self:start;min-height:42px}.quote-row>.line-total{min-height:48px;justify-content:flex-start}.quote-row input,.quote-row select,.quote-row textarea{font-size:16px}.document-toolbar{display:grid;grid-template-columns:1fr}.document-toolbar .inline-form{display:grid;grid-template-columns:1fr auto}.document-toolbar>.btn,.document-toolbar>a.btn,.document-toolbar>form:not(.inline-form) .btn{width:100%}}

/* v1.1.6 - 即時估價、優惠、稅率、毛利與自訂單位選單 */
.unit-picker{position:relative;min-width:0}
.unit-picker>select[data-unit]{display:none}
.unit-picker-button{width:100%;min-height:42px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--text);padding:9px 11px;display:flex;align-items:center;justify-content:space-between;gap:8px;font:inherit;font-weight:700;text-align:left;cursor:pointer}
.unit-picker-button:hover,.unit-picker-button:focus{border-color:#69ad8b;box-shadow:0 0 0 4px rgba(12,128,77,.09);outline:0}
.unit-caret{color:var(--primary);font-size:18px;line-height:1}
.unit-picker-menu{position:absolute;z-index:80;right:0;top:calc(100% + 7px);width:292px;padding:10px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:7px;border:1px solid #d2dde2;border-radius:13px;background:#fff;box-shadow:0 16px 42px rgba(22,38,48,.2)}
.unit-picker-menu[hidden]{display:none}
.unit-picker-menu button{min-height:37px;border:1px solid #dce6e9;border-radius:9px;background:#f8fbfa;color:#21313b;font:inherit;font-size:13px;font-weight:800;cursor:pointer}
.unit-picker-menu button:hover,.unit-picker-menu button:focus{border-color:#58a77f;background:#edf8f2;color:#08633d;outline:0}
.unit-picker-menu .unit-custom-button{grid-column:1/-1;background:#0b7d4c;color:#fff;border-color:#0b7d4c}

.quote-estimate-panel{overflow:visible}
.quote-items{overflow:visible}
.quote-row{overflow:visible;grid-template-columns:42px minmax(190px,1fr) minmax(220px,1.1fr) 96px 108px 190px 42px;grid-template-areas:"index material name quantity unit metrics remove" "index spec spec price cost metrics remove";column-gap:12px;row-gap:10px;align-items:end;padding:16px}
.quote-row .row-index{grid-area:index}
.quote-row>label:nth-of-type(1){grid-area:material}
.quote-row>.grow{grid-area:name}
.quote-row>.grow2{grid-area:spec}
.quote-row>.quantity-field{grid-area:quantity}
.quote-row>.unit-field{grid-area:unit}
.quote-row>.price-field{grid-area:price}
.quote-row>.cost-field{grid-area:cost;display:grid}
.quote-row>.line-metrics{grid-area:metrics}
.quote-row>[data-remove-row]{grid-area:remove}
.quote-row .price-field,.quote-row .cost-field{padding:9px;border-radius:10px;font-weight:800}
.quote-row .price-field{border:1px solid #76bd98;background:#edf9f3;color:#075b37}
.quote-row .cost-field{border:1px solid #b9c8cf;background:#f5f8f9;color:#34434b}
.quote-row .price-field input,.quote-row .cost-field input{background:#fff}
.line-metrics{align-self:stretch;display:grid;align-content:center;gap:11px;padding:12px;border:1px solid #cfe3d8;border-radius:12px;background:#edf7f2}
.line-metrics>div{display:grid;gap:3px}
.line-metrics>div+div{padding-top:9px;border-top:1px solid #d4e6dc}
.line-metrics span{font-size:11px;color:#61716a;font-weight:800}
.line-metrics strong{font-size:14px;color:#075f3a;line-height:1.3;word-break:break-word}
.line-metrics small{font-size:11px;color:#65756d}
.positive{color:#087343!important}
.negative{color:#bd2e24!important}

.pricing-panel{overflow:visible}
.pricing-controls{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:18px}
.pricing-controls>label{display:grid;gap:7px;font-size:13px;font-weight:800}
.input-with-suffix{display:grid;grid-template-columns:minmax(0,1fr) 48px;align-items:stretch}
.input-with-suffix input{border-radius:10px 0 0 10px}
.input-with-suffix>span{display:grid;place-items:center;border:1px solid var(--line);border-left:0;border-radius:0 10px 10px 0;background:#f3f7f5;color:#456056;font-weight:900}
.input-with-suffix input:disabled{background:#f1f4f5;color:#8b979d}
.pricing-dashboard{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(300px,.8fr);gap:16px}
.pricing-card{padding:17px 18px;border:1px solid #d8e2e6;border-radius:14px;background:#fbfcfd;display:grid;gap:0}
.pricing-card h3{margin:0 0 8px;font-size:16px}
.pricing-card>div{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 0;border-bottom:1px solid #e4eaed}
.pricing-card>div:last-of-type{border-bottom:0}
.pricing-card span{color:#5d6d76}
.pricing-card strong{font-size:16px}
.pricing-card .grand{margin-top:4px;padding-top:13px;border-top:2px solid #42535b}
.pricing-card .grand strong{font-size:21px;color:#087345}
.profit-card{background:#f0f8f4;border-color:#c9e0d4}
.profit-card p{margin:10px 0 0;color:#65776e;font-size:12px;line-height:1.55}
.customer-total-card [data-discount-amount]{color:#b14d20}
.totals .discount-row strong{color:#b14d20}

@media(max-width:1180px){
  .quote-row{grid-template-columns:40px minmax(0,1fr) minmax(0,1fr) 190px 42px;grid-template-areas:"index material material metrics remove" "index name name metrics remove" "index spec spec metrics remove" "index quantity unit metrics remove" "index price cost metrics remove"}
  .quote-row .grow,.quote-row .grow2{grid-column:auto}
  .pricing-dashboard{grid-template-columns:1fr 1fr}
}
@media(max-width:820px){
  .pricing-controls{grid-template-columns:1fr 1fr}
  .pricing-controls>label:last-child{grid-column:1/-1}
  .pricing-dashboard{grid-template-columns:1fr}
  .unit-picker-menu{left:0;right:auto}
}
@media(max-width:760px){
  .quote-row{grid-template-columns:34px minmax(0,1fr) 40px;grid-template-areas:"index material remove" "index name remove" "index spec remove" "index quantity remove" "index unit remove" "index price remove" "index cost remove" "index metrics remove"}
  .quote-row>.line-metrics{min-height:0}
  .pricing-controls{grid-template-columns:1fr}
  .pricing-controls>label:last-child{grid-column:auto}
  .unit-picker-menu{position:fixed;left:12px;right:12px;top:auto;bottom:12px;width:auto;grid-template-columns:repeat(4,minmax(0,1fr));max-height:54vh;overflow:auto}
}
@media(max-width:430px){
  .unit-picker-menu{grid-template-columns:repeat(3,minmax(0,1fr))}
  .pricing-card{padding:14px}
  .pricing-card>div{align-items:flex-start}
}


/* v1.1.7 公司章圖片 */
.seal-setting{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:18px;align-items:center;padding:16px;border:1px solid var(--line);border-radius:12px;background:#f8fafb}.seal-setting strong{display:block;margin-bottom:4px}.seal-setting p{margin:0 0 10px;color:var(--muted);font-size:13px;font-weight:400}.seal-preview{min-height:150px;border:1px dashed #aab5bc;border-radius:10px;background:#fff;display:grid;place-items:center;padding:12px;color:var(--muted);text-align:center}.seal-preview img{display:block;max-width:100%;max-height:115px;object-fit:contain;margin:auto}.seal-preview .check{margin-top:8px;font-size:13px}.stamp-box.has-image{border:0;padding:0;background:transparent}.stamp-box.has-image img{width:100%;height:100%;object-fit:contain;display:block}.stamp-box img{-webkit-print-color-adjust:exact;print-color-adjust:exact}@media(max-width:700px){.seal-setting{grid-template-columns:1fr}.seal-preview{min-height:120px}}@media print{.stamp-box.has-image{border:0!important}.stamp-box.has-image img{max-width:210px;max-height:92px}}
