    :root {
      --bg: #f4f6fb;
      --card: #ffffff;
      --fg: #1f2937;
      --muted: #6b7280;
      --line: #e5e7eb;
      --brand: #2563eb;
      --brand-soft: #dbeafe;
      --ok: #059669;
      --warn: #d97706;
      --chip: #eef2f7;
      --chip-on: #2563eb;
      --shadow: 0 1px 3px rgba(0,0,0,.08), 0 8px 24px rgba(0,0,0,.05);
    }
    @media (prefers-color-scheme: dark) {
      :root { --bg:#0f172a; --card:#1e293b; --fg:#e5e7eb; --muted:#94a3b8; --line:#334155; --brand:#60a5fa; --brand-soft:#1e3a8a; --chip:#273449; --chip-on:#3b82f6; --shadow:0 1px 3px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3); }
    }
    body.dark { --bg:#0f172a; --card:#1e293b; --fg:#e5e7eb; --muted:#94a3b8; --line:#334155; --brand:#60a5fa; --brand-soft:#1e3a8a; --chip:#273449; --chip-on:#3b82f6; --shadow:0 1px 3px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3); }
    * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
    html, body { margin: 0; padding: 0; }
    body {
      font-family: system-ui, -apple-system, "Segoe UI", "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", sans-serif;
      background: var(--bg); color: var(--fg); line-height: 1.5;
      -webkit-font-smoothing: antialiased;
      padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
    }
    .wrap { max-width: 680px; margin: 0 auto; padding: clamp(11px, 16px + 0.3vw, 21px) clamp(11px, 16px + 0.3vw, 21px) clamp(39px, 56px + 0.3vw, 73px); }
    header { display: flex; align-items: center; gap: clamp(8px, 10px + 0.2vw, 12px); padding: clamp(3px, 4px + 0.3vw, 5px) clamp(2px, 2px + 0.3vw, 3px) clamp(10px, 14px + 0.3vw, 18px); }
    header h1 { font-size: clamp(18px, 20px + 0.5vw, 23px); margin: 0; font-weight: 800; letter-spacing: .5px; }
    header .ver { font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); background: var(--chip); padding: clamp(2px, 2px + 0.3vw, 3px) clamp(6px, 8px + 0.3vw, 10px); border-radius: clamp(997px, 999px + 0.2vw, 1001px); }
    header .spacer { flex: 1; }
    .iconbtn { width: 40px; height: 40px; border: 1px solid var(--line); background: var(--card); color: var(--fg); border-radius: clamp(10px, 12px + 0.2vw, 14px); font-size: clamp(16px, 18px + 0.5vw, 21px); cursor: pointer; display: grid; place-items: center; }
    .iconbtn:active { transform: scale(.94); }
    .card { background: var(--card); border: 1px solid var(--line); border-radius: clamp(14px, 16px + 0.2vw, 18px); padding: clamp(10px, 14px + 0.3vw, 18px); box-shadow: var(--shadow); margin-bottom: 12px; }
    .card:last-child { margin-bottom: 0; }
    .label { font-size: clamp(11px, 12px + 0.25vw, 14px); color: var(--muted); margin-bottom: 9px; font-weight: 600; letter-spacing: .3px; }
    .sublabel { font-size: clamp(11px, 12px + 0.25vw, 14px); color: var(--muted); font-weight: 600; letter-spacing: .3px; margin: 14px 0 9px; padding-top: 12px; border-top: 1px solid var(--line); }
    .chips { display: flex; flex-wrap: wrap; gap: clamp(6px, 8px + 0.2vw, 10px); }
    .chip { padding: clamp(5px, 7px + 0.3vw, 9px) clamp(8px, 11px + 0.3vw, 14px); border-radius: clamp(8px, 10px + 0.2vw, 12px); background: var(--chip); color: var(--fg); border: 1px solid transparent; font-size: clamp(12px, 13px + 0.25vw, 15px); cursor: pointer; user-select: none; }
    .chip.on { background: var(--chip-on); color: #fff; border-color: var(--chip-on); font-weight: 600; }
    .chip:active { transform: scale(.96); }
    .seg { display: flex; background: var(--chip); border-radius: clamp(10px, 12px + 0.2vw, 14px); padding: clamp(3px, 4px + 0.3vw, 5px); gap: clamp(4px, 4px + 0.2vw, 6px); }
    .seg-item { flex: 1; text-align: center; padding: clamp(8px, 11px + 0.3vw, 14px); border-radius: clamp(7px, 9px + 0.2vw, 11px); font-size: clamp(14px, 15px + 0.25vw, 17px); font-weight: 600; color: var(--muted); cursor: pointer; transition: all .15s; }
    .seg-item.on { background: var(--card); color: var(--brand); box-shadow: 0 1px 3px rgba(0,0,0,.14); }
    .matscroll { display: flex; gap: clamp(6px, 8px + 0.2vw, 10px); overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; }
    .matscroll .chip { white-space: nowrap; flex: 0 0 auto; }
    .row { display: flex; gap: clamp(8px, 10px + 0.2vw, 12px); }
    .row > .field { flex: 1; }
    .field { margin-bottom: 4px; }
    .field label { display: block; font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); margin-bottom: 5px; }
    .field input { width: 100%; padding: clamp(8px, 12px + 0.3vw, 16px) clamp(8px, 12px + 0.3vw, 16px); border: 1px solid var(--line); border-radius: clamp(10px, 12px + 0.2vw, 14px); background: var(--bg); color: var(--fg); font-size: clamp(14px, 15px + 0.25vw, 17px); outline: none; transition: border-color .15s, box-shadow .15s; }
    .field input:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-soft); }
    .pricebox { text-align: center; padding: clamp(4px, 6px + 0.3vw, 8px) 0 clamp(2px, 2px + 0.3vw, 3px); }
    .pricebox .unit { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); }
    .pricebox .val { font-size: clamp(26px, 30px + 1.2vw, 36px); font-weight: 800; color: #e53935; letter-spacing: .5px; min-height: 34px; }
    .pricebox .val.empty { color: var(--muted); font-weight: 600; font-size: clamp(16px, 18px + 0.5vw, 21px); }
    .pricebox .sub { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); min-height: 12px; }
    .tierrow { display: flex; gap: clamp(6px, 8px + 0.2vw, 10px); justify-content: center; margin-top: 6px; }
    .tierchip { padding: clamp(4px, 5px + 0.3vw, 7px) clamp(7px, 10px + 0.3vw, 13px); border-radius: clamp(997px, 999px + 0.2vw, 1001px); background: var(--chip); color: var(--fg); font-size: clamp(10px, 11px + 0.25vw, 13px); cursor: pointer; border: 1px solid transparent; }
    .tierchip.on { background: var(--chip-on); color: #fff; font-weight: 600; }
    .variants { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(130px, 42vw, 190px), 1fr)); gap: clamp(6px, 8px + 0.2vw, 10px); margin-top: 6px; align-items: start; }
    .variant { border: 1px solid var(--line); border-radius: clamp(10px, 12px + 0.2vw, 14px); padding: clamp(7px, 10px + 0.3vw, 13px) clamp(8px, 11px + 0.3vw, 14px); background: var(--card); transition: background .15s, border-color .15s; }
    .variant:active { transform: scale(.99); }
    .variant.on { background: var(--brand-soft); box-shadow: inset 0 0 0 1px var(--brand); }
    .vhead { display: flex; align-items: center; gap: clamp(6px, 8px + 0.2vw, 10px); flex-wrap: wrap; }
    .vname { font-weight: 700; font-size: clamp(12px, 13px + 0.25vw, 15px); }
    .vsup { max-width: 100%; overflow-wrap: anywhere; font-size: clamp(9px, 10px + 0.25vw, 12px); color: #fff; background: var(--brand); font-weight: 700; flex-shrink: 0; padding: clamp(2px, 1px + 0.3vw, 1px) clamp(5px, 7px + 0.3vw, 9px); border-radius: clamp(997px, 999px + 0.2vw, 1001px); line-height: 1.5; }
    .vsup[data-sup="五湖绝缘材料"] { background: #1d4ed8; color: #fff; }
    .vsup[data-sup="东莞诚佰塑胶"] { background: #6d28d9; color: #fff; }
    .vsup[data-sup="东莞鸿图"] { background: #c2410c; color: #fff; }
    .vsup[data-sup="东莞市龙煌塑胶绝缘材料有限公司"] { background: #be185d; color: #fff; }
    .vsup[data-sup="戈睿特"] { background: #0e7490; color: #fff; }
    .vsup[data-sup="东莞市亿丰源塑胶制品有限公司"] { background: #475569; color: #fff; }
    .vsup[data-sup="美德源"] { background: #b45309; color: #fff; }
    .vsup[data-sup="丽诺"] { background: #15803d; color: #fff; }
    .vsup[data-sup="煌跃塑胶"] { background: #b91c1c; color: #fff; }
    .vsup[data-sup="恩佰源"] { background: #1e40af; color: #fff; }
    .vtiers { display: flex; gap: clamp(4px, 6px + 0.2vw, 8px); flex-wrap: wrap; margin-top: 6px; }
    .vtier { font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); background: var(--chip); border-radius: clamp(6px, 8px + 0.2vw, 10px); padding: clamp(3px, 4px + 0.3vw, 5px) clamp(6px, 8px + 0.3vw, 10px); cursor: pointer; transition: background .15s; }
    .vtier:hover { background: var(--brand-soft); }
    .vtier.match { color: #fff; background: var(--brand); }
    /* ---- 型号卡价表（竖向列式：每档位一列，厂价/单价/总价纵向排列） ---- */
    .vtier b { color: var(--fg); font-weight: 600; }
    .vtier.match { background: var(--brand-soft); color: var(--brand); }
    .vtier.note { background: transparent; color: var(--warn); }
    .vtier.note.warn { background: rgba(255,152,0,.18); color: #e65100; font-weight: 700; border: 1px solid rgba(255,152,0,.35); }
    .vtier.note.limit { background: rgba(33,150,243,.14); color: #1565c0; }
    body.dark .vtier.note.warn { background: rgba(255,152,0,.16); color: #ffb74d; }
    body.dark .vtier.note.limit { background: rgba(33,150,243,.14); color: #90caf9; }
    .status-badges { display:flex; flex-wrap:wrap; gap:4px; margin:5px 0 2px; }
    .status-badge { display:inline-flex; align-items:center; border-radius:999px; padding:3px 8px; font-size:clamp(9px,10px + .2vw,12px); font-weight:800; line-height:1.2; border:1px solid transparent; white-space:nowrap; }
    .status-badge.launch { background:rgba(229,57,53,.12); color:#c62828; border-color:rgba(229,57,53,.28); }
    .status-badge.preorder { background:rgba(255,152,0,.14); color:#e65100; border-color:rgba(255,152,0,.32); }
    .status-badge.clearance { background:rgba(156,39,176,.12); color:#7b1fa2; border-color:rgba(156,39,176,.28); }
    .status-badge.stock { background:rgba(0,150,136,.12); color:#00796b; border-color:rgba(0,150,136,.28); }
    .status-badge.limit { background:rgba(33,150,243,.12); color:#1565c0; border-color:rgba(33,150,243,.28); }
    .status-badge.info { background:var(--chip); color:var(--muted); border-color:var(--line); }
    .status-card { border-left:4px solid #f59e0b; background:rgba(245,158,11,.075); }
    .status-card .status-title { font-weight:800; margin-bottom:5px; }
    .status-card .status-desc { color:var(--muted); font-size:clamp(11px,12px+.25vw,14px); line-height:1.55; }
    body.dark .status-badge.launch { color:#ff8a80; }
    body.dark .status-badge.preorder { color:#ffb74d; }
    body.dark .status-badge.clearance { color:#ce93d8; }
    body.dark .status-badge.stock { color:#80cbc4; }
    body.dark .status-badge.limit { color:#90caf9; }
    /* ---- 报价单（批量报价汇总） ---- */
    .qbtn { width: 100%; padding: clamp(8px, 12px + 0.3vw, 16px); border: none; border-radius: clamp(10px, 12px + 0.2vw, 14px); font-size: clamp(14px, 15px + 0.25vw, 17px); font-weight: 700; cursor: pointer; background: var(--brand); color: #fff; margin-top: 10px; }
    .qbtn:active { transform: scale(.98); }
    .qbtn.ghost { background: var(--chip); color: var(--fg); }
    .qbtn.green { background: #1aae57; }
    /* 计算器底部浮动操作条：加入报价单 + 清空 */
    .calc-action-bar { position: fixed; left: 50%; transform: translateX(-50%); width: 100%; max-width: 760px; box-sizing: border-box; display: flex; gap: clamp(8px, 10px + 0.2vw, 12px); z-index: 50; bottom: 0; padding: clamp(7px, 10px + 0.3vw, 13px) clamp(10px, 14px + 0.3vw, 18px) calc(clamp(7px, 10px + 0.3vw, 13px) + env(safe-area-inset-bottom, 0)); background: var(--card); border-top: 1px solid var(--line); box-shadow: 0 -3px 12px rgba(20,40,80,.08); }
    .calc-action-bar .qbtn { width: auto; flex: 1; margin-top: 0; }
    .action-bar-spacer { height: 66px; }
    .qwrap { position: relative; }
    .qbadge { position: absolute; top: -4px; right: -4px; min-width: 17px; height: 17px; line-height: 17px; border-radius: clamp(997px, 999px + 0.2vw, 1001px); background: #e53935; color: #fff; font-size: clamp(9px, 10px + 0.25vw, 12px); font-weight: 700; text-align: center; padding: 0 clamp(3px, 4px + 0.3vw, 5px); display: none; }
    .qitem { display: flex; align-items: flex-start; gap: clamp(6px, 8px + 0.2vw, 10px); padding: clamp(7px, 10px + 0.3vw, 13px) 0; border-bottom: 1px dashed var(--line); }
    .qitem:last-child { border-bottom: none; }
    .qitem-main { flex: 1; min-width: 0; }
    .qitem-mat { font-size: clamp(11px, 12px + 0.25vw, 14px); font-weight: 700; display: flex; align-items: center; flex-wrap: wrap; gap: clamp(4px, 6px + 0.2vw, 8px); }
    .qitem-qty { width: 46px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); border: 1px solid var(--line); border-radius: clamp(6px, 8px + 0.2vw, 10px); background: var(--bg); color: var(--fg); font-size: clamp(12px, 13px + 0.25vw, 15px); font-weight: 700; text-align: center; -moz-appearance: textfield; }
    .qitem-qty::-webkit-outer-spin-button, .qitem-qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
    .qitem-qty:focus { outline: 2px solid var(--brand); outline-offset: 1px; border-color: var(--brand); }
    .qfee-inline { display: inline-flex; align-items: baseline; gap: clamp(2px, 2px + 0.2vw, 4px); vertical-align: middle; }
    .qfee-lbl { font-size: clamp(9px, 10px + 0.25vw, 11px); color: var(--muted); margin-left: clamp(2px, 2px + 0.2vw, 4px); }
    .qnum-lbl { font-size: clamp(9px, 10px + 0.25vw, 11px); color: var(--muted); margin-left: clamp(2px, 2px + 0.2vw, 4px); }
    .qitem-fee { width: 52px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); border: 1px solid var(--line); border-radius: clamp(6px, 8px + 0.2vw, 10px); background: var(--bg); color: var(--fg); font-size: clamp(11px, 12px + 0.25vw, 14px); font-weight: 700; text-align: center; -moz-appearance: textfield; }
    .qitem-fee::-webkit-outer-spin-button, .qitem-fee::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
    .qitem-fee:focus { outline: 2px solid var(--brand); outline-offset: 1px; border-color: var(--brand); }
    .qitem-pricerow { display: flex; flex-wrap: wrap; gap: clamp(4px, 4px + 0.3vw, 8px); align-items: baseline; margin-top: clamp(3px, 3px + 0.2vw, 5px); }
    .qitem-uprice, .qitem-ttl { width: clamp(64px, 64px + 1vw, 84px); padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); border: 1px solid var(--line); border-radius: clamp(6px, 8px + 0.2vw, 10px); background: var(--bg); color: #e53935; font-size: clamp(12px, 13px + 0.25vw, 15px); font-weight: 700; text-align: center; -moz-appearance: textfield; }
    .qitem-uprice::-webkit-outer-spin-button, .qitem-uprice::-webkit-inner-spin-button, .qitem-ttl::-webkit-outer-spin-button, .qitem-ttl::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
    .qitem-uprice:focus, .qitem-ttl:focus { outline: 2px solid var(--brand); outline-offset: 1px; border-color: var(--brand); }
    .markup-hint { font-size: clamp(10px, 11px + 0.25vw, 12px); color: var(--muted); margin: 2px 0 0; line-height: 1.4; }
    .qitem-name { font-size: clamp(11px, 12px + 0.25vw, 14px); color: var(--muted); margin-top: 2px; word-break: break-all; }
    .qitem-spec { font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); margin-top: 2px; }
    .qitem-tier-row { display: flex; align-items: center; gap: 6px; margin-top: 5px; flex-wrap: wrap; }
    .qitem-tier-label { font-size: clamp(9px, 10px + 0.2vw, 11px); color: var(--muted); }
    .qitem-tier-chips { display: flex; gap: 4px; flex-wrap: wrap; }
    .qtchip { padding: clamp(3px, 4px + 0.15vw, 5px) clamp(8px, 9px + 0.2vw, 12px); border-radius: 999px; border: 1px solid var(--line); background: var(--chip); color: var(--fg); font-size: clamp(10px, 11px + 0.2vw, 12px); line-height: 1.2; cursor: pointer; }
    .qtchip.on { background: var(--brand); border-color: var(--brand); color: #fff; font-weight: 600; }
    .qitem-price { font-size: clamp(12px, 13px + 0.25vw, 15px); font-weight: 700; color: #e53935; margin-top: 2px; }
    .qitem-del { flex: 0 0 auto; width: 30px; height: 30px; border-radius: clamp(7px, 9px + 0.2vw, 11px); border: 1px solid var(--line); background: transparent; color: var(--muted); font-size: clamp(14px, 15px + 0.25vw, 17px); cursor: pointer; }
    .qsum { display: flex; gap: clamp(6px, 8px + 0.2vw, 10px); margin-top: 12px; }
    .qsum > div { flex: 1; text-align: center; background: var(--chip); border-radius: clamp(10px, 12px + 0.2vw, 14px); padding: clamp(7px, 10px + 0.3vw, 13px) clamp(3px, 4px + 0.3vw, 5px); }
    .qsum-label { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); }
    .qsum-val { font-size: clamp(17px, 19px + 0.5vw, 22px); font-weight: 800; color: var(--brand); }
    .qsum-val.total { color: #e53935; }
    .qtext { width: 100%; min-height: 130px; border: 1px solid var(--line); border-radius: clamp(10px, 12px + 0.2vw, 14px); background: var(--bg); color: var(--fg); font-size: clamp(11px, 12px + 0.25vw, 14px); padding: clamp(7px, 10px + 0.3vw, 13px); font-family: inherit; white-space: pre-wrap; resize: vertical; }
    .qcopy-ok { font-size: clamp(10px, 11px + 0.25vw, 13px); color: #2e7d32; margin-top: 4px; display: none; }
    .banner { position: sticky; top: 0; z-index: 50; background: var(--brand); color: #fff; text-align: center; padding: clamp(7px, 10px + 0.3vw, 13px); font-size: clamp(13px, 14px + 0.25vw, 16px); cursor: pointer; display: none; }
    .banner.show { display: block; }
    .hint { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); margin-top: 3px; }
    .foot { text-align: center; font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); margin-top: 8px; }
    .loading { text-align:center; color: var(--muted); padding: clamp(28px, 40px + 0.3vw, 52px) 0; }

    /* ---- 材料库首页（视图一） ---- */
    .search { width: 100%; padding: clamp(8px, 11px + 0.3vw, 14px) clamp(8px, 12px + 0.3vw, 16px); border: 1px solid var(--line); border-radius: clamp(9px, 11px + 0.2vw, 13px); background: var(--bg); color: var(--fg); font-size: clamp(14px, 15px + 0.25vw, 17px); outline: none; }
    .search:focus { border-color: var(--brand); }
    .matgrid { display: grid; grid-template-columns: repeat(2, 1fr); gap: clamp(8px, 10px + 0.2vw, 12px); }
    .matcard { background: var(--card); border: 1px solid var(--line); border-radius: clamp(12px, 14px + 0.2vw, 16px); padding: clamp(10px, 14px + 0.3vw, 18px) clamp(8px, 12px + 0.3vw, 16px); display: flex; align-items: center; gap: clamp(8px, 10px + 0.2vw, 12px); cursor: pointer; box-shadow: var(--shadow); position: relative; }
    .matcard:active { transform: scale(.98); }
    .favstar { position: absolute; top: 6px; right: 8px; font-size: clamp(15px, 17px + 0.5vw, 20px); color: var(--muted); cursor: pointer; background: none; border: none; padding: clamp(2px, 2px + 0.3vw, 3px); line-height: 1; z-index: 2; }
    .favstar.on { color: #f5a623; }
    .favstar:active { transform: scale(1.25); }
    .matdot { width: 14px; height: 14px; border-radius: 50%; flex: 0 0 auto; }
    .matname { font-weight: 600; font-size: clamp(14px, 15px + 0.25vw, 17px); }
    .matcount { font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); }
    .curmat { display: flex; align-items: center; gap: clamp(8px, 10px + 0.2vw, 12px); cursor: pointer; }
    .curmat .arrow { margin-left: auto; color: var(--muted); font-size: clamp(16px, 18px + 0.5vw, 21px); }
    .curmat .meta { font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); margin-top: 2px; }
    .card.curmat { background: var(--brand-soft); border-color: transparent; padding: clamp(7px, 10px + 0.3vw, 13px) clamp(8px, 12px + 0.3vw, 16px); }
    .card.curmat .matname { font-size: clamp(14px, 15px + 0.25vw, 17px); font-weight: 800; }
    .card.curmat .matcount { margin-top: 3px; }
    .card.curmat .matdot { width: 16px; height: 16px; }
    .curinfo { flex: 1; min-width: 0; }
    .wgrid { display: flex; gap: clamp(6px, 8px + 0.2vw, 10px); margin-top: 4px; }
    .wgrid > div { flex: 1; text-align: center; background: var(--chip); border-radius: clamp(10px, 12px + 0.2vw, 14px); padding: clamp(6px, 8px + 0.3vw, 10px) clamp(3px, 4px + 0.3vw, 5px); }
    .wlabel2 { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); margin-bottom: 3px; }
    .wval { font-size: clamp(15px, 17px + 0.5vw, 20px); font-weight: 800; color: var(--brand); letter-spacing: .5px; }
    .wval.red { color: #e53935; }
    .wval.empty { color: var(--muted); font-weight: 600; font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .crow { display: flex; align-items: center; gap: clamp(6px, 8px + 0.2vw, 10px); margin-top: 6px; }
    .crow label { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); flex: 0 0 auto; white-space: nowrap; }
    .crow input { width: 88px; padding: clamp(3px, 4px + 0.3vw, 5px) clamp(6px, 8px + 0.3vw, 10px); border: 1px solid var(--line); border-radius: clamp(6px, 8px + 0.2vw, 10px); background: var(--bg); color: var(--fg); font-size: clamp(12px, 13px + 0.25vw, 15px); outline: none; }
    .crow input:focus { border-color: var(--brand); }
    .qline { display: flex; align-items: center; gap: clamp(6px, 8px + 0.2vw, 10px); margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); }
    .qline label { font-size: clamp(11px, 12px + 0.25vw, 14px); color: var(--muted); flex: 0 0 auto; }
    .qline input { width: 72px; padding: clamp(6px, 8px + 0.3vw, 10px) clamp(7px, 10px + 0.3vw, 13px); border: 1px solid var(--line); border-radius: clamp(8px, 10px + 0.2vw, 12px); background: var(--bg); color: var(--fg); font-size: clamp(14px, 15px + 0.25vw, 17px); outline: none; }
    .qline input:focus { border-color: var(--brand); }
    .qline .qspacer { flex: 1; }
    .sticky-total { position: sticky; top: 8px; z-index: 20; border-radius: clamp(14px, 16px + 0.2vw, 18px); overflow: hidden; box-shadow: var(--shadow); padding: 0; }
    .sticky-inner { display: flex; }
    .sticky-col { flex: 1; text-align: center; padding: clamp(8px, 11px + 0.3vw, 14px) clamp(3px, 4px + 0.3vw, 5px); display: flex; flex-direction: column; justify-content: center; background: var(--card); }
    .sticky-col:not(:last-child) { border-right: 1px solid var(--line); }
    .sticky-col-total { background: #fff5f5; }
    .sticky-label { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); margin-bottom: 3px; white-space: nowrap; }
    .sticky-qty { font-size: clamp(18px, 20px + 0.5vw, 23px); font-weight: 800; color: var(--brand); width: 100%; text-align: center; border: none; background: transparent; padding: 0; -moz-appearance: textfield; }
    .sticky-qty::-webkit-outer-spin-button, .sticky-qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
    .sticky-qty:focus { outline: 2px solid var(--brand); outline-offset: 2px; border-radius: clamp(6px, 4px + 0.2vw, 6px); }
    .sticky-line { display: flex; align-items: baseline; justify-content: center; gap: clamp(4px, 5px + 0.2vw, 7px); font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); white-space: nowrap; }
    .sticky-line .sv { font-size: clamp(14px, 16px + 0.5vw, 19px); font-weight: 800; color: var(--brand); }
    .sticky-col-total .sticky-line .sv { color: #e53935; }
    .sticky-line.empty .sv { color: var(--muted); font-weight: 600; font-size: clamp(12px, 13px + 0.25vw, 15px); }
    /* 微信横幅 —— 横排紧凑 */
    .wechat { background: linear-gradient(135deg, #0b8043, #1aae57); color: #fff; border: none; display: flex; align-items: center; gap: clamp(8px, 10px + 0.2vw, 12px); padding: clamp(7px, 10px + 0.3vw, 13px) clamp(8px, 12px + 0.3vw, 16px); }
    .wechat .wqrimg { width: 48px; height: 48px; border-radius: clamp(6px, 8px + 0.2vw, 10px); background: #fff; object-fit: cover; flex: 0 0 auto; }
    .wechat .winfo { flex: 1; min-width: 0; }
    .wechat .whead { font-weight: 700; font-size: clamp(11px, 12px + 0.25vw, 14px); line-height: 1.3; }
    .wechat .wrow { display: flex; align-items: center; gap: clamp(4px, 6px + 0.2vw, 8px); margin-top: 2px; }
    .wechat .wlabel { font-size: clamp(9px, 9px + 0.25vw, 11px); opacity: .8; }
    .wechat .wid { font-size: clamp(13px, 14px + 0.25vw, 16px); font-weight: 700; letter-spacing: .3px; }
    .net { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--ok); border: 1px solid var(--line); border-radius: clamp(997px, 999px + 0.2vw, 1001px); padding: clamp(2px, 2px + 0.3vw, 3px) clamp(5px, 7px + 0.3vw, 9px); }
    .net.offline { color: #dc2626; }
    .errorbox { border-color: #ef4444; background: rgba(239,68,68,.08); color: #b91c1c; font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .tier-status { margin-top: 8px; font-size: clamp(10px, 11px + 0.25vw, 13px); color: var(--muted); text-align: center; }
    .quick-specs { display:flex; flex-wrap:wrap; gap: clamp(5px, 7px + 0.2vw, 9px); margin-top:10px; }
    .quick-spec { border:1px solid var(--line); background:var(--chip); color:var(--fg); border-radius: clamp(8px, 10px + 0.2vw, 12px); padding: clamp(5px, 7px + 0.3vw, 9px) clamp(6px, 9px + 0.3vw, 12px); font-size: clamp(10px, 11px + 0.25vw, 13px); cursor:pointer; }
    .variant-search { width:100%; padding: clamp(8px, 11px + 0.3vw, 14px) clamp(8px, 12px + 0.3vw, 16px); border:1px solid var(--line); border-radius: clamp(10px, 12px + 0.2vw, 14px); background:var(--bg); color:var(--fg); font-size: clamp(13px, 14px + 0.25vw, 16px); outline:none; margin-bottom:8px; }
    .density-tag { font-size: clamp(9px, 10px + 0.25vw, 12px); color:var(--muted); margin-left:auto; }
    .data-status { font-size: clamp(10px, 11px + 0.25vw, 13px); color:var(--muted); text-align:center; margin:8px 0 0; }
    @media (max-width:520px) { .row { flex-wrap:wrap; } .row > .field { min-width:calc(50% - 6px); } .wrap { padding-left:10px; padding-right:10px; } }

    /* ===== v6.1 商务工业风 UI ===== */
    :root {
      --bg: #f5f7fb;
      --card: #ffffff;
      --fg: #172033;
      --muted: #7b8498;
      --line: #e7eaf0;
      --brand: #2457d6;
      --brand-2: #163ca4;
      --brand-soft: #eef3ff;
      --ok: #17946f;
      --warn: #c98218;
      --chip: #f3f5f8;
      --chip-on: #2457d6;
      --danger: #d73a49;
      --shadow: 0 10px 30px rgba(30, 50, 90, .06);
      --shadow-sm: 0 4px 16px rgba(30, 50, 90, .05);
    }
    @media (prefers-color-scheme: dark) {
      :root { --bg:#0d1320; --card:#151d2d; --fg:#edf2ff; --muted:#94a0b8; --line:#283247; --brand:#6f95ff; --brand-2:#8aa8ff; --brand-soft:#1c2b52; --chip:#202a3c; --chip-on:#567fe8; --shadow:0 12px 32px rgba(0,0,0,.28); --shadow-sm:0 5px 18px rgba(0,0,0,.22); }
    }
    body.dark { --bg:#0d1320; --card:#151d2d; --fg:#edf2ff; --muted:#94a0b8; --line:#283247; --brand:#6f95ff; --brand-2:#8aa8ff; --brand-soft:#1c2b52; --chip:#202a3c; --chip-on:#567fe8; --shadow:0 12px 32px rgba(0,0,0,.28); --shadow-sm:0 5px 18px rgba(0,0,0,.22); }
    body { background: radial-gradient(circle at 50% -180px, rgba(36,87,214,.10), transparent 430px), var(--bg); }
    .wrap { max-width: 920px; padding: clamp(13px, 18px + 0.3vw, 23px) clamp(13px, 18px + 0.3vw, 23px) clamp(45px, 64px + 0.3vw, 83px); }
    .app-header { min-height: 58px; padding: clamp(3px, 4px + 0.3vw, 5px) 0 clamp(11px, 16px + 0.3vw, 21px); gap: clamp(8px, 10px + 0.2vw, 12px); }
    .brandmark { width: 38px; height: 38px; border-radius: clamp(9px, 11px + 0.2vw, 13px); object-fit: cover; box-shadow:0 7px 16px rgba(36,87,214,.22); }
    .brandcopy h1 { font-size: clamp(16px, 18px + 0.5vw, 21px); line-height:1.2; letter-spacing:0; }
    .brand-sub { margin-top:3px; font-size: clamp(9px, 10px + 0.25vw, 12px); color:var(--muted); letter-spacing:.45px; }
    .header-status { display:flex; align-items:center; gap: clamp(4px, 6px + 0.2vw, 8px); margin-left:4px; }
    header .ver, .net { height:24px; display:inline-flex; align-items:center; padding: 0 clamp(6px, 8px + 0.3vw, 10px); border-radius: clamp(997px, 999px + 0.2vw, 1001px); border:1px solid var(--line); background:rgba(255,255,255,.58); font-size: clamp(9px, 10px + 0.25vw, 12px); }
    body.dark header .ver, body.dark .net { background:rgba(255,255,255,.03); }
    .net { color:var(--ok); }
    .net.offline { color:#dc2626; }
    .net::before { content:""; display:inline-block; width:6px; height:6px; border-radius:50%; background:currentColor; margin-right:5px; vertical-align:1px; }
    .iconbtn { width:38px; height:38px; border-radius: clamp(9px, 11px + 0.2vw, 13px); border-color:var(--line); box-shadow:var(--shadow-sm); font-size: clamp(16px, 18px + 0.5vw, 21px); font-weight:600; }
    .back-icon { font-size: clamp(24px, 28px + 1.2vw, 34px); font-weight:300; box-shadow:none; }
    .qbadge { background:var(--danger); top:-5px; right:-5px; }
    .card { border-radius: clamp(16px, 18px + 0.2vw, 20px); padding: clamp(11px, 16px + 0.3vw, 21px); box-shadow:var(--shadow-sm); margin-bottom:14px; }
    .label { font-size: clamp(11px, 12px + 0.25vw, 14px); color:#5f6b83; letter-spacing:.2px; margin-bottom:11px; }
    body.dark .label { color:var(--muted); }
    .home-hero { position:relative; overflow:hidden; background:linear-gradient(145deg,#fff,#f9fbff); border:1px solid var(--line); border-radius: clamp(22px, 24px + 0.2vw, 26px); padding: clamp(18px, 26px + 0.3vw, 34px); box-shadow:var(--shadow); margin-bottom:18px; }
    body.dark .home-hero { background:linear-gradient(145deg,#182236,#121a29); }
    .home-hero::after { content:""; position:absolute; width:260px; height:260px; border-radius:50%; right:-120px; top:-150px; background:rgba(36,87,214,.07); pointer-events:none; }
    .eyebrow { color:var(--brand); font-size: clamp(9px, 10px + 0.25vw, 12px); font-weight:800; letter-spacing:1.6px; }
    .home-title { font-size: clamp(24px, 28px + 1.2vw, 34px); font-weight:900; line-height:1.15; margin-top:7px; letter-spacing:-.4px; }
    .home-desc { max-width:560px; color:var(--muted); font-size: clamp(12px, 13px + 0.25vw, 15px); margin-top:9px; }
    .home-stats { display:flex; gap: clamp(8px, 10px + 0.2vw, 12px); margin:20px 0 16px; }
    .home-stats > div { flex:1; min-width:0; padding: clamp(8px, 11px + 0.3vw, 14px) clamp(9px, 13px + 0.3vw, 17px); border-radius: clamp(12px, 14px + 0.2vw, 16px); background:var(--chip); }
    .home-stats b { display:block; font-size: clamp(18px, 20px + 0.5vw, 23px); color:var(--fg); line-height:1.1; }
    .home-stats span { display:block; margin-top:4px; font-size: clamp(9px, 10px + 0.25vw, 12px); color:var(--muted); }
    .search-shell { position:relative; display:flex; align-items:center; gap: clamp(6px, 8px + 0.2vw, 10px); height:50px; border:1px solid #dbe2ee; border-radius: clamp(12px, 14px + 0.2vw, 16px); background:#fff; padding: 0 clamp(7px, 10px + 0.3vw, 13px) 0 clamp(10px, 14px + 0.3vw, 18px); box-shadow:0 5px 20px rgba(38,64,120,.05); }
    body.dark .search-shell { background:#111928; border-color:var(--line); }
    .search-icon { color:var(--muted); font-size: clamp(21px, 23px + 0.5vw, 26px); line-height:1; transform:rotate(-12deg); }
    .search { flex:1; border:0; padding: 0; background:transparent; border-radius:0; font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .search:focus { border:0; box-shadow:none; }
    .search-kbd { color:var(--muted); background:var(--chip); border:1px solid var(--line); border-radius: clamp(6px, 7px + 0.2vw, 9px); padding: clamp(3px, 4px + 0.3vw, 5px) clamp(5px, 7px + 0.3vw, 9px); font-size: clamp(9px, 10px + 0.25vw, 12px); }
    .section-head { display:flex; justify-content:space-between; align-items:flex-end; gap: clamp(10px, 12px + 0.2vw, 14px); margin:4px 2px 12px; }
    .section-title { font-size: clamp(14px, 16px + 0.5vw, 19px); font-weight:800; }
    .section-desc { font-size: clamp(9px, 10px + 0.25vw, 12px); color:var(--muted); margin-top:3px; }
    .section-count { font-size: clamp(10px, 11px + 0.25vw, 13px); color:var(--muted); }
    .matgrid { grid-template-columns:repeat(3,1fr); gap: clamp(10px, 12px + 0.2vw, 14px); }
    .matcard { min-height:96px; border-radius: clamp(15px, 17px + 0.2vw, 19px); padding: clamp(10px, 15px + 0.3vw, 19px) clamp(27px, 38px + 0.3vw, 49px) clamp(10px, 15px + 0.3vw, 19px) clamp(11px, 16px + 0.3vw, 21px); gap: clamp(10px, 12px + 0.2vw, 14px); box-shadow:var(--shadow-sm); overflow:hidden; transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease; }
    .matcard:hover { transform:translateY(-2px); border-color:#ccd7ed; box-shadow:var(--shadow); }
    .mat-accent { width:5px; height:40px; border-radius: clamp(997px, 999px + 0.2vw, 1001px); flex:0 0 auto; opacity:.78; }
    .matcard-copy { min-width:0; flex:1; }
    .matcard-top { display:flex; align-items:center; gap: clamp(5px, 7px + 0.2vw, 9px); min-width:0; }
    .mat-code { font-size: clamp(15px, 17px + 0.5vw, 20px); font-weight:900; letter-spacing:.2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .mat-badge { white-space:nowrap; color:var(--muted); background:var(--chip); border-radius: clamp(997px, 999px + 0.2vw, 1001px); padding: clamp(2px, 2px + 0.3vw, 3px) clamp(5px, 7px + 0.3vw, 9px); font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .mat-cn { color:var(--muted); font-size: clamp(10px, 11px + 0.25vw, 13px); margin-top:5px; overflow-wrap:anywhere; }
    .favstar { top:9px; right:10px; font-size: clamp(14px, 15px + 0.25vw, 17px); }
    .mat-arrow { position:absolute; right:12px; bottom:9px; color:#bbc2d0; font-size: clamp(18px, 20px + 0.5vw, 23px); }
    .curmat { position:relative; overflow:hidden; padding: clamp(12px, 17px + 0.3vw, 22px) clamp(13px, 18px + 0.3vw, 23px) clamp(12px, 17px + 0.3vw, 22px) clamp(15px, 22px + 0.3vw, 29px); background:linear-gradient(145deg,var(--card),var(--brand-soft)); border-color:rgba(36,87,214,.13); }
    .cur-accent { position:absolute; left:0; top:16px; bottom:16px; height:auto; width:4px; }
    .cur-kicker { font-size: clamp(9px, 9px + 0.25vw, 11px); color:var(--brand); font-weight:800; letter-spacing:1px; margin-bottom:3px; }
    .card.curmat .matname { font-size: clamp(15px, 17px + 0.5vw, 20px); }
    .change-mat { align-self:center; color:var(--brand); font-size: clamp(10px, 11px + 0.25vw, 13px); font-weight:700; white-space:nowrap; }
    .crow input, .field input, .variant-search, .qitem-qty, .qtext { background:var(--card); }
    .field input { min-height:46px; border-radius: clamp(9px, 11px + 0.2vw, 13px); font-size: clamp(14px, 16px + 0.5vw, 19px); font-weight:650; }
    .field label { font-size: clamp(9px, 10px + 0.25vw, 12px); margin-bottom:6px; }
    .seg { padding: clamp(2px, 3px + 0.3vw, 4px); border-radius: clamp(11px, 13px + 0.2vw, 15px); }
    .seg-item { padding: clamp(7px, 10px + 0.3vw, 13px); border-radius: clamp(8px, 10px + 0.2vw, 12px); font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .chip { border:1px solid var(--line); background:var(--card); padding: clamp(6px, 8px + 0.3vw, 10px) clamp(8px, 12px + 0.3vw, 16px); }
    .chip.on { box-shadow:0 5px 12px rgba(36,87,214,.12); }
    .quick-spec { background:var(--card); border-radius: clamp(7px, 9px + 0.2vw, 11px); color:#5c6680; }
    .sublabel { margin-top:16px; padding-top:14px; font-size: clamp(10px, 11px + 0.25vw, 13px); }
    .sticky-total { top:8px; padding: 0; border-color:rgba(36,87,214,.16); box-shadow:0 14px 34px rgba(36,72,150,.12); }
    .result-head { min-height:44px; display:flex; align-items:center; justify-content:space-between; gap: clamp(8px, 10px + 0.2vw, 12px); padding: clamp(7px, 10px + 0.3vw, 13px) clamp(10px, 14px + 0.3vw, 18px); border-bottom:1px solid var(--line); background:linear-gradient(90deg,var(--brand-soft),var(--card)); }
    .result-head > div { display:flex; align-items:center; gap: clamp(6px, 8px + 0.2vw, 10px); }
    .result-head b { font-size: clamp(12px, 13px + 0.25vw, 15px); }
    .result-kicker { font-size: clamp(9px, 9px + 0.25vw, 11px); color:var(--brand); font-weight:800; letter-spacing:.8px; }
    .result-tier { font-size: clamp(9px, 10px + 0.25vw, 12px); color:var(--brand); background:var(--brand-soft); border:1px solid rgba(36,87,214,.18); border-radius: clamp(997px, 999px + 0.2vw, 1001px); padding: clamp(2px, 3px + 0.3vw, 4px) clamp(6px, 8px + 0.3vw, 10px); }
    .result-size { display:flex; align-items:center; gap: clamp(6px, 8px + 0.2vw, 10px); padding: clamp(5px, 7px + 0.3vw, 9px) clamp(10px, 14px + 0.3vw, 18px); border-bottom:1px solid var(--line); background:var(--card); font-size: clamp(11px, 12px + 0.25vw, 14px); color:var(--text); }
    .result-size .muted { color:var(--muted); font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .sticky-inner { min-height:90px; }
    .sticky-col { padding: clamp(10px, 14px + 0.3vw, 18px) clamp(7px, 10px + 0.3vw, 13px); }
    .sticky-label { font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .qty-input-wrap { display:flex; align-items:baseline; justify-content:center; gap: clamp(4px, 3px + 0.2vw, 5px); color:var(--muted); font-size: clamp(9px, 10px + 0.25vw, 12px); }
    .sticky-qty { width:50px; font-size: clamp(20px, 22px + 0.5vw, 25px); }
    .sticky-line { justify-content:space-between; width:100%; gap: clamp(6px, 8px + 0.2vw, 10px); }
    .sticky-line + .sticky-line { margin-top:6px; }
    .sticky-line span { font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .sticky-line .sv { font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .sticky-col-total { background:linear-gradient(145deg,#fff9f9,#fff); }
    body.dark .sticky-col-total { background:linear-gradient(145deg,#281d26,#171d2c); }
    .sticky-col-total .total-line .sv { font-size: clamp(18px, 20px + 0.5vw, 23px); color:var(--danger); }
    .qbtn { min-height:46px; border-radius: clamp(10px, 12px + 0.2vw, 14px); font-size: clamp(13px, 14px + 0.25vw, 16px); box-shadow:0 7px 18px rgba(36,87,214,.16); }
    .qbtn.ghost { box-shadow:none; border:1px solid var(--line); background:var(--card); color:var(--muted); }
    .qbtn.green { background:var(--ok); box-shadow:0 7px 18px rgba(23,148,111,.14); }
    .variants { margin-top:8px; }
    .vgroup-title { margin-top:18px; color:var(--fg); font-size: clamp(10px, 11px + 0.25vw, 13px); }
    .variant { padding: clamp(9px, 13px + 0.3vw, 17px); }
    .variant.on { background:var(--brand-soft); }
    .vname { font-size: clamp(12px, 13px + 0.25vw, 15px); }
    .vsup { background:var(--chip); color:var(--muted); font-weight:700; }
    .pricebox .val, .qitem-price, .qsum-val.total { color:var(--danger); }
    .wechat { background:linear-gradient(145deg,#147b58,#159869); border-radius: clamp(16px, 18px + 0.2vw, 20px); box-shadow:var(--shadow-sm); }
    .errorbox { border-left:4px solid #e15c68; background:rgba(215,58,73,.055); color:#aa3440; }
    .foot, .data-status { opacity:.86; }
    @media (max-width:760px) {
      .wrap { max-width:680px; }
      .matgrid { grid-template-columns:repeat(2,1fr); }
      .header-status { display:flex; }
      .home-hero { padding: clamp(7px, 10px + 0.3vw, 13px) clamp(8px, 12px + 0.3vw, 16px); margin-bottom:7px; }
      .home-title { font-size: clamp(14px, 16px + 0.5vw, 19px); }
    }
    @media (max-width:520px) {
      .wrap { padding: clamp(7px, 10px + 0.3vw, 13px) clamp(7px, 10px + 0.3vw, 13px) clamp(34px, 48px + 0.3vw, 62px); }
      .app-header { padding-top:2px; padding-bottom:10px; }
      .brandmark { width:34px; height:34px; border-radius: clamp(8px, 10px + 0.2vw, 12px); }
      .brandcopy h1 { font-size: clamp(14px, 16px + 0.5vw, 19px); }
      .brand-sub { display:none; }
      .iconbtn { width:36px; height:36px; }
      .home-hero { border-radius: clamp(17px, 19px + 0.2vw, 21px); padding: clamp(13px, 19px + 0.3vw, 25px) clamp(10px, 15px + 0.3vw, 19px); margin-bottom:15px; }
      .home-desc { font-size: clamp(11px, 12px + 0.25vw, 14px); }
      .home-stats { margin-top:16px; gap: clamp(5px, 7px + 0.2vw, 9px); }
      .home-stats > div { padding: clamp(6px, 9px + 0.3vw, 12px); }
      .home-stats b { font-size: clamp(16px, 18px + 0.5vw, 21px); }
      .search-shell { height:47px; }
      .search-kbd { display:none; }
      .matgrid { gap: clamp(6px, 8px + 0.2vw, 10px); }
      .matcard { min-height:88px; padding: clamp(9px, 13px + 0.3vw, 17px) clamp(20px, 29px + 0.3vw, 38px) clamp(9px, 13px + 0.3vw, 17px) clamp(8px, 12px + 0.3vw, 16px); border-radius: clamp(13px, 15px + 0.2vw, 17px); }
      .mat-accent { width:4px; height:34px; }
      .mat-code { font-size: clamp(14px, 15px + 0.25vw, 17px); }
      .mat-badge { display:none; }
      .mat-cn { font-size: clamp(9px, 10px + 0.25vw, 12px); }
      .favstar { right:8px; top:7px; }
      .mat-arrow { right:9px; bottom:6px; }
      .card { border-radius: clamp(13px, 15px + 0.2vw, 17px); padding: clamp(10px, 14px + 0.3vw, 18px); margin-bottom:10px; }
      .row > .field { min-width:calc(50% - 6px); }
      .sticky-total { border-radius: clamp(14px, 16px + 0.2vw, 18px); }
      .result-head { padding: clamp(6px, 8px + 0.3vw, 10px) clamp(7px, 10px + 0.3vw, 13px); }
      .sticky-inner { min-height:82px; }
      .sticky-col { padding: clamp(8px, 11px + 0.3vw, 14px) clamp(5px, 7px + 0.3vw, 9px); }
      .sticky-line { flex-direction:column; align-items:center; gap: clamp(4px, 1px + 0.2vw, 3px); }
      .sticky-line + .sticky-line { margin-top:4px; }
      .sticky-line .sv { font-size: clamp(11px, 12px + 0.25vw, 14px); }
      .sticky-col-total .total-line .sv { font-size: clamp(15px, 17px + 0.5vw, 20px); }
      .result-size { padding: clamp(3px, 4px + 0.2vw, 5px) clamp(7px, 10px + 0.3vw, 13px); font-size: clamp(10px, 10px + 0.25vw, 12px); }
      .qty-col { flex:.72; }
      .variant { padding: clamp(8px, 11px + 0.3vw, 14px); }
    }
  
    /* ===== v6.2 Compact UI：高信息密度，小尺寸商务布局 ===== */
    .wrap { max-width: 760px; padding: clamp(4px, 6px + 0.3vw, 8px) clamp(6px, 8px + 0.3vw, 10px) clamp(28px, 40px + 0.3vw, 52px); }
    .app-header { min-height: 38px; padding: 0 0 clamp(4px, 5px + 0.3vw, 7px); gap: clamp(4px, 6px + 0.2vw, 8px); }
    .brandmark { width: 28px; height: 28px; border-radius: clamp(6px, 7px + 0.2vw, 9px); box-shadow: 0 2px 6px rgba(36,87,214,.12); }
    .brandcopy h1 { font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .brand-sub { margin-top: 0px; font-size: clamp(9px, 7px + 0.25vw, 9px); }
    header .ver, .net { height: 17px; padding: 0 clamp(3px, 4px + 0.3vw, 5px); font-size: clamp(9px, 7px + 0.25vw, 9px); }
    .iconbtn { width: 29px; height: 29px; border-radius: clamp(6px, 7px + 0.2vw, 9px); font-size: clamp(13px, 14px + 0.25vw, 16px); box-shadow: none; }
    .back-icon { font-size: clamp(20px, 22px + 0.5vw, 25px); }
    .card { border-radius: clamp(9px, 11px + 0.2vw, 13px); padding: clamp(6px, 8px + 0.3vw, 10px); margin-bottom: 5px; box-shadow: 0 1px 4px rgba(30,50,90,.025); }
    .label { font-size: clamp(9px, 9px + 0.25vw, 11px); margin-bottom: 4px; }
    .home-hero { border-radius: clamp(10px, 12px + 0.2vw, 14px); padding: clamp(6px, 9px + 0.3vw, 12px) clamp(7px, 10px + 0.3vw, 13px); margin-bottom: 6px; box-shadow: 0 2px 8px rgba(30,50,90,.03); }
    .home-hero::after { width: 140px; height: 140px; right: -75px; top: -90px; }
    .eyebrow { font-size: clamp(9px, 7px + 0.25vw, 9px); letter-spacing: 1px; }
    .home-title { font-size: clamp(14px, 16px + 0.5vw, 19px); margin-top: 1px; line-height: 1.1; }
    .home-desc { font-size: clamp(9px, 9px + 0.25vw, 11px); margin-top: 2px; }
    .home-stats { gap: clamp(4px, 4px + 0.2vw, 6px); margin: 6px 0 5px; }
    .home-stats > div { padding: clamp(3px, 4px + 0.3vw, 5px) clamp(4px, 6px + 0.3vw, 8px); border-radius: clamp(6px, 7px + 0.2vw, 9px); }
    .home-stats b { font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .home-stats span { margin-top: 1px; font-size: clamp(9px, 7px + 0.25vw, 9px); }
    .search-shell { height: 33px; border-radius: clamp(6px, 8px + 0.2vw, 10px); padding: 0 clamp(4px, 6px + 0.3vw, 8px) 0 clamp(6px, 8px + 0.3vw, 10px); box-shadow: none; }
    .search-icon { font-size: clamp(14px, 15px + 0.25vw, 17px); }
    .search { font-size: clamp(10px, 11px + 0.25vw, 13px); }
    .search-kbd { padding: clamp(2px, 2px + 0.3vw, 3px) clamp(3px, 4px + 0.3vw, 5px); font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .section-head { margin: 1px 0 5px; }
    .section-title { font-size: clamp(12px, 13px + 0.25vw, 15px); }
    .section-desc { font-size: clamp(9px, 8px + 0.25vw, 10px); margin-top: 0px; }
    .section-count { font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .matgrid { gap: clamp(4px, 5px + 0.2vw, 7px); }
    .matcard { min-height: 54px; border-radius: clamp(7px, 9px + 0.2vw, 11px); padding: clamp(4px, 6px + 0.3vw, 8px) clamp(14px, 20px + 0.3vw, 26px) clamp(4px, 6px + 0.3vw, 8px) clamp(6px, 8px + 0.3vw, 10px); gap: clamp(4px, 6px + 0.2vw, 8px); box-shadow: none; }
    .matcard:hover { transform: none; box-shadow: none; }
    .mat-accent { width: 3px; height: 20px; }
    .mat-code { font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .mat-badge { padding: clamp(2px, 1px + 0.3vw, 1px) clamp(2px, 3px + 0.3vw, 4px); font-size: clamp(9px, 7px + 0.25vw, 9px); }
    .mat-cn { font-size: clamp(9px, 7px + 0.25vw, 9px); margin-top: 1px; }
    .favstar { top: 4px; right: 6px; font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .mat-arrow { right: 6px; bottom: 3px; font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .curmat { padding: clamp(5px, 7px + 0.3vw, 9px) clamp(6px, 8px + 0.3vw, 10px) clamp(5px, 7px + 0.3vw, 9px) clamp(8px, 11px + 0.3vw, 14px); }
    .cur-accent { top: 6px; bottom: 6px; width: 3px; }
    .cur-kicker { font-size: clamp(9px, 6px + 0.25vw, 8px); margin-bottom: 0px; }
    .card.curmat .matname { font-size: clamp(12px, 13px + 0.25vw, 15px); }
    .change-mat { font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .field input { min-height: 34px; padding: clamp(4px, 6px + 0.3vw, 8px) clamp(5px, 7px + 0.3vw, 9px); border-radius: clamp(6px, 7px + 0.2vw, 9px); font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .field label { font-size: clamp(9px, 8px + 0.25vw, 10px); margin-bottom: 2px; }
    .row { gap: clamp(4px, 5px + 0.2vw, 7px); }
    /* 板料尺寸卡片：更紧凑的输入框与间距 */
    .board-size-card { padding: clamp(6px, 8px + 0.3vw, 10px) clamp(6px, 9px + 0.3vw, 12px); }
    .board-size-card .label { margin-bottom: 4px; font-size: clamp(9px, 10px + 0.25vw, 12px); }
    .board-size-card .row { gap: clamp(4px, 4px + 0.2vw, 6px); }
    .board-size-card .field { margin-bottom: 0; }
    .board-size-card .field label { font-size: clamp(9px, 8px + 0.25vw, 10px); margin-bottom: 2px; }
    .board-size-card .field input { min-height: 28px; padding: clamp(3px, 4px + 0.3vw, 5px) clamp(4px, 5px + 0.3vw, 7px); border-radius: clamp(6px, 6px + 0.2vw, 8px); font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .board-size-card .quick-specs { margin-top: 5px; }
    .board-size-card .sublabel { margin: 6px 0 3px; }
    .board-size-card .crow { gap: clamp(4px, 6px + 0.2vw, 8px); }
    .board-size-card .crow input { width: 70px; min-height: 28px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(6px, 8px + 0.3vw, 10px); border-radius: clamp(6px, 6px + 0.2vw, 8px); font-size: clamp(11px, 12px + 0.25vw, 14px); }
    /* 计价档位 + 数量 同行 */
    .tier-row-wrap { display: flex; align-items: center; gap: clamp(6px, 8px + 0.2vw, 10px); }
    .tier-row-wrap > .chips { flex: 1; }
    .tier-qty { display: flex; align-items: center; gap: clamp(4px, 3px + 0.2vw, 5px); flex-shrink: 0; }
    .tier-qty label { font-size: clamp(9px, 9px + 0.25vw, 11px); color: var(--muted); white-space: nowrap; }
    .tier-qty input { width: 52px; min-height: 28px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(4px, 6px + 0.3vw, 8px); border: 1.5px solid var(--brand); border-radius: clamp(6px, 6px + 0.2vw, 8px); background: var(--card); color: var(--fg); font-size: clamp(12px, 13px + 0.25vw, 15px); font-weight: 700; text-align: center; outline: none; -moz-appearance: textfield; }
    .tier-qty span { font-size: clamp(9px, 10px + 0.25vw, 12px); color: var(--muted); }
    .board-size-card .tier-status { font-size: clamp(9px, 9px + 0.25vw, 11px); margin-top: 4px; }
    .seg { border-radius: clamp(7px, 9px + 0.2vw, 11px); padding: clamp(2px, 1px + 0.3vw, 1px); }
    .seg-item { padding: clamp(4px, 5px + 0.3vw, 7px); border-radius: clamp(6px, 6px + 0.2vw, 8px); font-size: clamp(9px, 10px + 0.25vw, 12px); }
    .chips { gap: clamp(4px, 3px + 0.2vw, 5px); }
    .chip { padding: clamp(2px, 3px + 0.3vw, 4px) clamp(4px, 6px + 0.3vw, 8px); border-radius: clamp(6px, 6px + 0.2vw, 8px); font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .quick-specs { gap: clamp(4px, 3px + 0.2vw, 5px); margin-top: 4px; }
    .quick-spec { padding: clamp(2px, 3px + 0.3vw, 4px) clamp(4px, 5px + 0.3vw, 7px); border-radius: clamp(6px, 5px + 0.2vw, 7px); font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .sublabel { margin: 6px 0 4px; padding-top: 5px; font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .variant-search { padding: clamp(4px, 6px + 0.3vw, 8px) clamp(5px, 7px + 0.3vw, 9px); border-radius: clamp(6px, 7px + 0.2vw, 9px); font-size: clamp(9px, 10px + 0.25vw, 12px); margin-bottom: 3px; }
    .sticky-total { top: 3px; border-radius: clamp(9px, 11px + 0.2vw, 13px); box-shadow: 0 3px 10px rgba(36,72,150,.06); }
    .result-head { min-height: 26px; padding: clamp(3px, 4px + 0.3vw, 5px) clamp(5px, 7px + 0.3vw, 9px); }
    .result-head b { font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .result-kicker { font-size: clamp(9px, 6px + 0.25vw, 8px); }
    .result-tier { font-size: clamp(9px, 7px + 0.25vw, 9px); padding: clamp(2px, 1px + 0.3vw, 1px) clamp(3px, 4px + 0.3vw, 5px); }
    .result-size { padding: clamp(2px, 2px + 0.2vw, 3px) clamp(5px, 7px + 0.3vw, 9px); font-size: clamp(9px, 9px + 0.25vw, 11px); }
    .sticky-inner { min-height: 50px; }
    .sticky-col { padding: clamp(4px, 6px + 0.3vw, 8px) clamp(3px, 4px + 0.3vw, 5px); }
    .sticky-label { font-size: clamp(9px, 6px + 0.25vw, 8px); }
    .sticky-qty { width: 34px; font-size: clamp(13px, 14px + 0.25vw, 16px); }
    .sticky-line + .sticky-line { margin-top: 1px; }
    .sticky-line span { font-size: clamp(9px, 6px + 0.25vw, 8px); }
    .sticky-line .sv { font-size: clamp(9px, 10px + 0.25vw, 12px); }
    .sticky-col-total .total-line .sv { font-size: clamp(12px, 13px + 0.25vw, 15px); }
    /* ---- 独立数量编辑栏（报价结果卡片底部） ---- */
    .qty-edit-bar { display: flex; align-items: center; gap: clamp(6px, 8px + 0.2vw, 10px); padding: clamp(4px, 6px + 0.3vw, 8px) clamp(6px, 9px + 0.3vw, 12px); border-top: 1px solid var(--line); background: var(--chip); margin: 0 -9px -9px; border-radius: 0 0 11px 11px; }
    .qty-edit-label { font-size: clamp(9px, 8px + 0.25vw, 10px); color: var(--muted); font-weight: 600; white-space: nowrap; letter-spacing: .2px; }
    .qty-edit-input-wrap { display: flex; align-items: center; gap: clamp(4px, 3px + 0.2vw, 5px); flex: 1; }
    .qty-edit-input { width: 48px; min-width: 48px; padding: clamp(3px, 4px + 0.3vw, 5px) clamp(4px, 6px + 0.3vw, 8px); border: 1.5px solid var(--brand); border-radius: clamp(6px, 7px + 0.2vw, 9px); background: var(--card); color: var(--fg); font-size: clamp(13px, 14px + 0.25vw, 16px); font-weight: 700; text-align: center; outline: none; transition: border-color .15s, box-shadow .15s; -moz-appearance: textfield; }
    .qty-edit-input::-webkit-outer-spin-button, .qty-edit-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
    .qty-edit-input:focus { border-color: var(--brand); box-shadow: 0 0 0 3px var(--brand-soft); }
    .qty-edit-unit { font-size: clamp(9px, 9px + 0.25vw, 11px); color: var(--muted); }
    .pricebox { padding: clamp(2px, 0px + 0.3vw, 0px) 0 0; }
    .pricebox .val { font-size: clamp(16px, 18px + 0.5vw, 21px); min-height: 20px; }
    .pricebox .val.empty { font-size: clamp(11px, 12px + 0.25vw, 14px); }
    .tierrow { gap: clamp(4px, 3px + 0.2vw, 5px); margin-top: 2px; }
    .tierchip { padding: clamp(2px, 2px + 0.3vw, 3px) clamp(4px, 5px + 0.3vw, 7px); font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .qbtn { min-height: 32px; padding: clamp(4px, 6px + 0.3vw, 8px); border-radius: clamp(6px, 7px + 0.2vw, 9px); font-size: clamp(9px, 10px + 0.25vw, 12px); margin-top: 5px; box-shadow: none; }
    .variants { margin-top: 3px; }
    .vgroup-title { margin: 7px 0 2px; font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .variant { padding: clamp(6px, 8px + 0.3vw, 10px); border-radius: clamp(7px, 9px + 0.2vw, 11px); }
    .vhead { gap: clamp(4px, 3px + 0.2vw, 5px); }
    .vname { font-size: clamp(10px, 11px + 0.25vw, 13px); }
    .vsup { max-width: 100%; overflow-wrap: anywhere; font-size: clamp(9px, 8px + 0.25vw, 10px); }
    .vtiers { gap: clamp(4px, 2px + 0.2vw, 4px); margin-top: 2px; }
    .vtier { font-size: clamp(9px, 7px + 0.25vw, 9px); padding: clamp(2px, 2px + 0.3vw, 3px) clamp(2px, 3px + 0.3vw, 4px); border-radius: clamp(6px, 4px + 0.2vw, 6px); }
    /* ---- 型号竖排价表（单列全宽卡片，型号名可换行） ---- */
    .vhead { gap: clamp(4px, 4px + 0.2vw, 6px); margin-bottom: 2px; }
    .vname { min-width: 0; word-break: break-word; }

    /* 微信横幅保持原始大尺寸（用户要求巨大没事） */

    @media (max-width:520px) {
      .wrap { padding: clamp(3px, 4px + 0.3vw, 5px) clamp(3px, 4px + 0.3vw, 5px) clamp(24px, 34px + 0.3vw, 44px); }
      .app-header { min-height: 32px; padding-bottom: 3px; }
      .brandmark { width: 24px; height: 24px; border-radius: clamp(6px, 6px + 0.2vw, 8px); }
      .brandcopy h1 { font-size: clamp(11px, 12px + 0.25vw, 14px); }
      .iconbtn { width: 26px; height: 26px; border-radius: clamp(6px, 6px + 0.2vw, 8px); font-size: clamp(12px, 13px + 0.25vw, 15px); }
      .home-hero { border-radius: clamp(8px, 10px + 0.2vw, 12px); padding: clamp(5px, 7px + 0.3vw, 9px); margin-bottom: 5px; }
      .home-title { font-size: clamp(13px, 14px + 0.25vw, 16px); }
      .home-desc { display: none; }
      .home-stats { margin: 4px 0 4px; gap: clamp(4px, 2px + 0.2vw, 4px); }
      .home-stats > div { padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); border-radius: clamp(6px, 5px + 0.2vw, 7px); }
      .home-stats b { font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .home-stats span { font-size: clamp(9px, 6px + 0.25vw, 8px); }
      .search-shell { height: 30px; }
      .section-head { margin-bottom: 2px; }
      .section-title { font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .matgrid { gap: clamp(4px, 3px + 0.2vw, 5px); }
      .matcard { min-height: 46px; padding: clamp(4px, 5px + 0.3vw, 7px) clamp(12px, 17px + 0.3vw, 22px) clamp(4px, 5px + 0.3vw, 7px) clamp(4px, 6px + 0.3vw, 8px); border-radius: clamp(6px, 7px + 0.2vw, 9px); gap: clamp(4px, 4px + 0.2vw, 6px); }
      .mat-accent { height: 16px; }
      .mat-code { font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .mat-cn { font-size: clamp(9px, 6px + 0.25vw, 8px); }
      .card { border-radius: clamp(7px, 9px + 0.2vw, 11px); padding: clamp(5px, 7px + 0.3vw, 9px); margin-bottom: 4px; }
      .field input { min-height: 32px; padding: clamp(4px, 5px + 0.3vw, 7px) clamp(4px, 6px + 0.3vw, 8px); font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .board-size-card .field input { min-height: 26px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .board-size-card .crow input { width: 60px; min-height: 26px; font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .tier-row-wrap { gap: clamp(4px, 5px + 0.2vw, 7px); flex-wrap: nowrap; }
      .tier-qty input { width: 46px; min-height: 26px; padding: clamp(2px, 2px + 0.3vw, 3px) clamp(4px, 5px + 0.3vw, 7px); font-size: clamp(11px, 12px + 0.25vw, 14px); }
      .tier-qty label { font-size: clamp(9px, 8px + 0.25vw, 10px); }
      .board-size-card .label { font-size: clamp(9px, 9px + 0.25vw, 11px); margin-bottom: 3px; }
      .seg-item { padding: clamp(3px, 4px + 0.3vw, 5px); font-size: clamp(9px, 9px + 0.25vw, 11px); }
      .chip { padding: clamp(2px, 3px + 0.3vw, 4px) clamp(4px, 5px + 0.3vw, 7px); font-size: clamp(9px, 8px + 0.25vw, 10px); }
      .sticky-inner { min-height: 46px; }
      .sticky-col { padding: clamp(4px, 5px + 0.3vw, 7px) clamp(2px, 2px + 0.3vw, 3px); }
      .sticky-qty { font-size: clamp(11px, 12px + 0.25vw, 14px); }
      .sticky-line .sv { font-size: clamp(9px, 9px + 0.25vw, 11px); }
      .sticky-col-total .total-line .sv { font-size: clamp(10px, 11px + 0.25vw, 13px); }
      .qbtn { min-height: 30px; font-size: clamp(9px, 9px + 0.25vw, 11px); }
      .calc-action-bar { padding: clamp(4px, 6px + 0.3vw, 8px) clamp(7px, 10px + 0.3vw, 13px) calc(clamp(4px, 6px + 0.3vw, 8px) + env(safe-area-inset-bottom, 0)); gap: clamp(6px, 8px + 0.2vw, 10px); }
      .action-bar-spacer { height: 54px; }
      .variant { padding: clamp(5px, 7px + 0.3vw, 9px); }
      .qty-edit-bar { padding: clamp(4px, 5px + 0.3vw, 7px) clamp(5px, 7px + 0.3vw, 9px); margin: 0 -7px -7px; border-radius: 0 0 9px 9px; gap: clamp(4px, 5px + 0.2vw, 7px); }
      .qty-edit-input { width: 40px; min-width: 40px; padding: clamp(2px, 3px + 0.3vw, 4px) clamp(3px, 4px + 0.3vw, 5px); font-size: clamp(11px, 12px + 0.25vw, 14px); }
      /* 手机端微信横幅保持大尺寸（用户要求巨大没事） */
    }
    /* 报价单加价 */
    .markup-row { display: flex; gap: 8px; margin-top: 10px; align-items: center; }
    .qsel, .qinput { border: 1px solid var(--line); border-radius: clamp(8px, 10px + 0.2vw, 12px); background: var(--card); color: var(--fg); font-size: clamp(13px, 14px + 0.25vw, 16px); padding: clamp(7px, 9px + 0.3vw, 11px); font-family: inherit; }
    .qsel { flex: 0 0 auto; }
    .qinput { flex: 1; min-width: 0; }
    .mklbl { font-size: clamp(13px, 14px + 0.25vw, 16px); color: var(--muted); min-width: 64px; }
    .fee-unit { font-size: clamp(13px, 14px + 0.25vw, 16px); color: var(--muted); flex: 0 0 auto; }
    .fee-toggle { display: flex; align-items: center; gap: 6px; font-size: clamp(12px, 13px + 0.25vw, 15px); color: var(--muted); margin-top: 8px; cursor: pointer; }
    .fee-toggle input { width: 16px; height: 16px; flex: 0 0 auto; accent-color: var(--accent, #2f6fed); }
    .markup-out { margin-top: 12px; font-size: clamp(12px, 13px + 0.25vw, 15px); color: var(--muted); }
    .markup-out b { color: var(--fg); }
    .markup-out b.total { color: #e53935; font-size: clamp(15px, 16px + 0.4vw, 19px); }
    .qchk { display: flex; align-items: center; gap: 6px; margin-top: 8px; font-size: clamp(12px, 13px + 0.2vw, 14px); color: var(--muted); cursor: pointer; }
    .qchk input { width: 16px; height: 16px; }
    .qchk-group { margin-top: 12px; padding: 10px 12px; border: 1px solid var(--line); border-radius: clamp(8px, 10px + 0.2vw, 12px); background: var(--chip); }
    .qchk-group .qchk-title { display: block; font-size: clamp(11px, 12px + 0.2vw, 13px); font-weight: 700; color: var(--fg); margin-bottom: 2px; }
    .qchk-group .qchk { margin-top: 6px; color: var(--fg); }
    /* 导出列自选：多列网格，窄屏自动降为单列 */
    .qchk-cols { display: grid; grid-template-columns: repeat(auto-fill, minmax(clamp(110px, 34%, 150px), 1fr)); gap: 4px 10px; }
    .qchk-cols .qchk { margin-top: 0; }
    /* ---------- 自定义物料视图 ---------- */
    .custom-entry { cursor: pointer; }
    .custom-entry .mat-code { color: #2563eb; font-weight: 700; }
    .custom-entry:hover { box-shadow: 0 6px 16px rgba(37,99,235,.16); }
    .cust-head { margin-bottom: 4px; }
    .cust-head .home-title { color: var(--fg); }
    .cust-head .home-desc { margin-top: 4px; }
    .custom-sec-title { font-size: clamp(13px,14px+.25vw,16px); font-weight: 700; margin: 18px 0 8px; color: var(--fg); }
    .cust-list { display: flex; flex-direction: column; gap: 10px; }
    .cust-card .matname { font-size: clamp(15px,16px+.25vw,18px); font-weight: 700; }
    .cust-card .meta { font-size: clamp(11px,12px+.25vw,13px); color: var(--muted); margin-top: 3px; }
    .cust-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 10px; }
    .cust-qty { width: 62px; padding: 7px 8px; border: 1px solid var(--line); border-radius: 9px; background: var(--bg); color: var(--fg); font-size: 14px; text-align: center; }
    .mini-btn { padding: clamp(6px,8px+.3vw,9px) clamp(10px,12px+.3vw,14px); border-radius: clamp(8px,10px+.2vw,12px); border: 1px solid var(--line); background: var(--card); color: var(--fg); font-size: clamp(12px,13px+.25vw,14px); cursor: pointer; }
    .mini-btn.primary { background: var(--brand); color: #fff; border-color: var(--brand); }
    .mini-btn.danger { color: #e53935; border-color: #f3c0c0; }
    .mini-btn:active { transform: scale(.97); }
    .field select { width: 100%; padding: clamp(8px,12px+.3vw,16px); border: 1px solid var(--line); border-radius: clamp(10px,12px+.2vw,14px); background: var(--bg); color: var(--fg); font-size: clamp(14px,15px+.25vw,17px); outline: none; }
    .dark .field select { background: var(--card); }
    .dark .cust-qty { background: var(--card); }
    .cust-calc { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
    .cust-calc-label { font-size: 13px; color: var(--muted); white-space: nowrap; }
    .cust-calc .cust-qty { width: 92px; text-align: left; padding-left: 10px; }
    .cust-qty-row { margin-top: 6px; align-items: center; gap: 8px; }
    .cust-qty-label { font-size: 12px; color: var(--muted); font-weight: 600; white-space: nowrap; }
    .cust-qty-row .cust-qty { flex: 0 0 auto; width: 92px; }
    .cust-total { font-size: 14px; font-weight: 500; color: var(--fg); font-family: var(--mono, ui-monospace, Menlo, Consolas, monospace); }
    .cust-dim { flex: 1; min-width: 0; padding: 7px 9px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); color: var(--fg); font-size: 13px; width: 100%; box-sizing: border-box; }
    .dark .cust-dim { background: var(--card); }
    .cust-calc-result { display: flex; gap: 10px; align-items: baseline; margin-top: 6px; flex-wrap: wrap; }
    .cust-weight { font-size: 13px; color: var(--muted); }
    /* 新建表单里的即时试算（2026-10-05）：不保存也能出价，故用淡底色块与列表卡片区分开 */
    .cust-calc-active { background:var(--brand-soft); border:1px solid rgba(36,87,214,.12); border-radius:10px; padding:7px 10px; margin-top:0; }
    .cust-calc-active .cust-total { font-weight:800; }
    .cust-need { color:#b45309; }
    /* 表单分区小标题（2026-10-05）：把"算一笔价要填的量"（单价/密度/尺寸/件数）框成一块，
       与上面的"选计价单位/形状"（选模式）区分开，避免用户不知道该填哪几个框。 */
    .cust-sec-label { font-size:13px; font-weight:600; color:var(--muted); margin:16px 0 6px; display:flex; align-items:center; gap:8px; }
    .cust-sec-label::after { content:""; flex:1; height:1px; background:var(--line); }
    /* 首行「计价单位 + 名称」：同行。
       🔴 单位框定宽必须收窄 —— 实测（_build/custom_row_measure2.js）：
       390px 屏下单位框 190px 时名称只剩 153px（文字可用 133px，偏窄）；
       收到 130px 后名称有 197px（文字可用 177px），360/390/414 三档都够用。
       即：不必用「窄屏让名称独占一行」的断点，同行 + 窄单位框在所有手机宽度都更好。
       （曾用 @media(max-width:640px){flex:1 0 100%} 让名称独占一行，实测那是「把 197px 变 153px」的退步。）
       单位框用 clamp：<390px 自动收得更窄，极窄屏也不至于把名称挤没。
       下拉内文字比其它字段小一号（用户要求）——「元/kg（按重量核价）」这类长文案才塞得下，
       且给名称让出宽度。取值用 var(--fs-k) 缩放但**夹上限**，避免大字号档位把下拉又撑宽。 */
    /* 计价单位下拉内文字比其它字段小一号（用户要求）。
       选项文案已精简为「元/kg / 元/米 / 元/支」三个短词（实测 390px 下
       「元/kg（按重量）」即使缩到 11px 仍截断），故框宽可放宽回 130~160px，
       括注说明移至 select 的 title 悬停提示与下方 hint。
       字号乘 var(--fs-k) 跟档位缩放，但 min() 夹上限 1.14 —— 否则大字号档位又会把下拉撑宽挤掉名称。 */
    .cust-unit-field { flex:0 0 clamp(104px, 28vw, 160px); min-width:0; }
    .cust-unit-field select { font-size: calc(clamp(12px, 13px + 0.1vw, 15px) * min(var(--fs-k), 1.14)); padding-left: clamp(6px, 7px + 0.1vw, 9px); padding-right: clamp(4px, 5px + 0.1vw, 7px); }
    .cust-name-field { flex:1; min-width:0; }
    .cust-name-field input { width:auto; }
    /* 「适用形状」同计价单位：只有 板/棒/通用 三个短选项，下拉撑满整行纯属浪费，
       而同行的「单价（元）」被 .crow input{width:88px} 锁成一小条，一长一短很怪。
       形状定窄（比计价单位略宽，label「适用形状」四字需要更多宽度），
       单价吃掉剩余宽度，且必须覆写 input 的 88px 固定宽（只给 flex:1 不够 —— 2026-10-05 踩过）。*/
    .cust-shape-field { flex:0 0 clamp(96px, 26vw, 150px); min-width:0; }
    .cust-shape-field select { font-size: calc(clamp(12px, 13px + 0.1vw, 15px) * min(var(--fs-k), 1.14)); padding-left: clamp(6px, 7px + 0.1vw, 9px); padding-right: clamp(4px, 5px + 0.1vw, 7px); }
    /* 单价框用「吃剩余 + 上限」而不是无脑 flex:1 —— 桌面端 flex:1 会撑到近 600px，
       一个只填 1~3 位数字的框长成那样是浪费。max-width 让它在宽屏收住，
       而 390px 手机上剩余本来就不足 260px，依然吃满，无需另开媒体查询。 */
    .cust-rate-field { flex:1 1 0; min-width:0; max-width:260px; }
    .cust-rate-field input { width:auto; }
    /* 2026-10-05：输入框宽度改为「按内容伸缩」——
       用户原话「宽度有最小限，但是输入多了再自动大一点，而不是直接大的占地方」。
       边距策略：field 一律 flex:0 0 auto（不抢剩余宽度），input 的 inline width 由
       JS autoWidthInput() 按字体实测文本宽度写入，CSS 只做兜底 max-width 防溢出。
       🔴 原来给尺寸/件数 field 写的 inline style="flex:1" 会让「自适应」完全失效 ——
       那样等于把 input 拉满整行，JS 量出来的窄宽度被外层 flex 忽略。故全部改为语义 class。 */
    .cust-dim-field { flex:0 0 auto; }
    .cust-dim-field input { width:auto; max-width:150px; }
    .cust-qty-field { flex:0 0 auto; }
    .cust-qty-field input { width:auto; max-width:140px; }
    /* 卡片内联快算的框：同样按内容伸缩，空框最小、输入变长才变宽。
       🔴 必须写双类选择器 `.cust-dim.aw-dim`（特异度 0,2,0）而不是 `.aw-dim`（0,1,0）——
       下方 699px 断点里还有 `.cust-dim{flex:1 1 92px}` 和 `.cust-qty-row .cust-qty{width:92px}`，
       它们位置更靠后，单类选择器会被它们盖掉，自适应直接失效。 */
    .cust-dim.aw-dim, .cust-qty.aw-dim { flex:0 0 auto; width:auto; max-width:130px; }
    /* 几何量行：密度 + 厚度/宽/长 同处一个 .crow（2026-10-05 用户要求「不能放同一行吗？自动调」）。
       不写断点、不写独占 —— .crow 在 <=940px 已有 flex-wrap:wrap，放得下就一行，放不下自然折行。
       🔴 四个框能同行的前提是**输入框已按内容自适应**（inline width 由 JS 量真实文本宽写入）；
       若哪天又出现「长」落单，第一反应是查 input 的 inline width 有没有被 CSS 的固定宽盖掉，
       而不是给密度重新加独占行。 */
    .cust-geom-row { flex-wrap: wrap; row-gap: 6px; }
    .cust-geom-row > .field { flex:0 0 auto; }
    /* 密度 label「密度 g/cm³」比「厚度 (mm)」长，同行时它是第一个被挤的。
       允许收缩 + 允许收缩时换行内断点，窄屏下宁可标签折两行也不让整块溢出。 */
    .cust-geom-row .cust-density-field > label { white-space: normal; overflow-wrap: anywhere; }
    .cust-density-field { flex:0 0 auto; max-width:260px; min-width:0; }
    .cust-density-field input { width:auto; }
    @media (max-width:640px) {
      /* 触屏下限：min-width 永远压过 JS 写的 inline width，所以这是给自适应加的「好按下限」。
         🔴 不能设大 —— 实测 390px 下 4 位数字(2000) 才 56px 宽，min 设到 58/64 就等于
         把 2~4 位真实值全夹住，用户永远看不到框在变长，自适应白做。
         46~52px 配 42px 行高，够手指按，又能让 4 位数字起就看出变化。 */
      .cust-density-field input { min-width:52px; }
      .cust-dim-field input { min-width:48px; }
      .cust-qty-field input { min-width:46px; }
      .cust-rate-field input { min-width:50px; }
    }
    .qbtn.sm { width: auto; flex: 0 0 auto; margin-top: 0; padding: 5px 9px; font-size: 12px; font-weight: 600; border-radius: 8px; }
    .cust-link { color: #d6263a; cursor: pointer; text-decoration: underline; }
    .cust-link:hover { opacity: .8; }
    .cust-weight-input { width: 80px !important; flex: 0 0 auto !important; }
    .cust-weight-save { padding: 5px 8px; font-size: 12px; border-radius: 6px; border: 1px solid var(--line); background: var(--card); color: var(--fg); cursor: pointer; }
    .cust-weight-save:hover { background: var(--accent); color: #fff; border-color: var(--accent); }
    .cust-sec-title-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 18px 0 8px; }
    .cust-sec-title-row .custom-sec-title { margin: 0; }
    .cust-io { display: flex; gap: 8px; }
    /* 危险操作二次确认高亮态 */
    .mini-btn.danger-armed, .qbtn.danger-armed { background: #d73a49 !important; color: #fff !important; border-color: #d73a49 !important; }
    /* 视图切换淡入 */
    @keyframes appFadeIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
    #app.app-anim { animation: appFadeIn .22s ease both; }

    /* ===== v9.5.24 手机 / 平板 / 电脑自适应 ===== */
    html { min-width: 0; }
    body { overflow-x: hidden; }
    img, svg, canvas { max-width: 100%; }
    button, input, select, textarea { max-width: 100%; }

    /* 电脑：利用横向空间，但不让报价内容无限拉宽 */
    @media (min-width: 1024px) {
      .wrap { max-width: 1120px; padding: 14px 22px 92px; }
      .calc-action-bar { max-width: 1120px; padding-left: 22px; padding-right: 22px; }
      .app-header { min-height: 52px; padding-bottom: 10px; }
      .brandmark { width: 34px; height: 34px; }
      .brandcopy h1 { font-size: 17px; }
      .brand-sub { font-size: 11px; }
      .iconbtn { width: 36px; height: 36px; font-size: 18px; }
      header .ver, .net { height: 22px; font-size: 11px; }
      .home-hero { padding: 18px 22px; margin-bottom: 12px; }
      .home-title { font-size: 25px; }
      .home-desc { font-size: 13px; }
      .home-stats { margin: 12px 0 10px; }
      .search-shell { height: 42px; }
      .search { font-size: 14px; }
      .matgrid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
      .matcard { min-height: 72px; padding: 10px 28px 10px 12px; }
      .mat-code { font-size: 15px; }
      .mat-cn { font-size: 11px; }
      .card { padding: 12px 14px; margin-bottom: 8px; }
      .field input, .field select { font-size: 14px; min-height: 38px; }
      .field label, .label { font-size: 11px; }
      .seg-item { min-height: 36px; display: flex; align-items: center; justify-content: center; font-size: 12px; }
      .chip, .quick-spec { font-size: 11px; }
      .variants { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
      .variant { padding: 10px; }
      .vname { font-size: 13px; }
      .qbtn { min-height: 40px; font-size: 13px; }
      .qtext { font-size: 13px; }
    }

    /* 平板 / 小电脑 */
    @media (min-width: 700px) and (max-width: 1023px) {
      .wrap { max-width: 900px; padding: 10px 16px 86px; }
      .calc-action-bar { max-width: 900px; }
      .matgrid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
      .variants { grid-template-columns: repeat(2, minmax(0, 1fr)); }
      .iconbtn { width: 36px; height: 36px; }
      .qbtn { min-height: 40px; font-size: 13px; }
    }

    /* 手机：不追求极小字号，优先可读、可点、不卡横向 */
    @media (max-width: 699px) {
      .wrap { width: 100%; max-width: none; padding: 8px 10px 82px; }
      .app-header { min-height: 48px; padding: 0 0 7px; gap: 6px; }
      .brandmark { width: 32px; height: 32px; border-radius: 8px; }
      .brandcopy h1 { font-size: 15px; }
      .brand-sub { display: none; }
      .header-status { gap: 4px; margin-left: 2px; }
      .header-status .ver { display: none; }
      header .net { height: 24px; font-size: 11px; padding: 0 7px; }
      .iconbtn { width: 40px; height: 40px; min-width: 40px; border-radius: 10px; font-size: 18px; touch-action: manipulation; }
      .back-icon { font-size: 28px; }

      .home-hero { padding: 11px 12px; margin-bottom: 8px; border-radius: 12px; }
      .eyebrow { font-size: 10px; }
      .home-title { font-size: 19px; margin-top: 2px; }
      .home-desc { font-size: 12px; margin-top: 4px; }
      .home-stats { gap: 5px; margin: 8px 0 7px; }
      .home-stats > div { padding: 6px 7px; }
      .home-stats b { font-size: 15px; }
      .home-stats span { font-size: 10px; }
      .search-shell { height: 42px; padding: 0 10px; }
      .search { font-size: 16px; }
      .search-kbd { display: none; }
      .section-title { font-size: 14px; }
      .section-desc, .section-count { font-size: 11px; }

      .matgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }
      .matcard { min-height: 68px; padding: 8px 24px 8px 9px; gap: 7px; border-radius: 10px; }
      .mat-accent { height: 26px; }
      .mat-code { font-size: 14px; }
      .mat-cn { font-size: 11px; margin-top: 2px; }
      .mat-badge { font-size: 10px; }
      .favstar { font-size: 15px; top: 6px; }
      .mat-arrow { font-size: 17px; }

      .card { padding: 10px; margin-bottom: 7px; border-radius: 11px; }
      .label { font-size: 12px; margin-bottom: 6px; }
      .sublabel { font-size: 12px; }
      .field label { font-size: 12px; margin-bottom: 4px; }
      .field input, .field select, .variant-search, .qinput, .qsel, .cust-dim, .cust-qty {
        min-height: 42px; font-size: 16px; padding: 8px 9px;
      }
      .row { gap: 7px; }
      .row > .field { min-width: 0; }
      .board-size-card .field input, .board-size-card .crow input {
        min-height: 40px; font-size: 16px; padding: 7px 8px;
      }
      .board-size-card .crow input { width: 84px; }
      .seg-item { min-height: 40px; display: flex; align-items: center; justify-content: center; padding: 7px 5px; font-size: 13px; }
      .chip { min-height: 36px; display: inline-flex; align-items: center; justify-content: center; padding: 6px 8px; font-size: 12px; }
      .quick-spec { min-height: 34px; padding: 6px 8px; font-size: 11px; }
      .tier-row-wrap { flex-wrap: wrap; }
      .tier-row-wrap > .chips { min-width: 0; }
      .tier-qty { margin-left: auto; }
      .tier-qty label, .tier-qty span { font-size: 11px; }
      .tier-qty input, .qty-edit-input { min-height: 38px; font-size: 16px; }

      .sticky-inner { min-height: 62px; }
      .sticky-label, .sticky-line span, .result-kicker { font-size: 10px; }
      .sticky-qty { font-size: 15px; }
      .sticky-line .sv { font-size: 12px; }
      .sticky-col-total .total-line .sv { font-size: 15px; }
      .result-head b, .result-size, .result-tier { font-size: 11px; }

      .variants { grid-template-columns: 1fr; gap: 7px; }
      .variant { padding: 9px; }
      .vname { font-size: 13px; }

      .qitem { gap: 7px; }
      .qitem-mat { font-size: 13px; }
      .qitem-qty, .qitem-fee, .qitem-uprice, .qitem-ttl { min-height: 36px; font-size: 14px; }
      .qitem-del { width: 38px; height: 38px; font-size: 18px; }
      .qitem-pricerow { gap: 6px 8px; }
      .qsum { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }
      .qsum > div:last-child:nth-child(odd) { grid-column: 1 / -1; }
      .qsum-label { font-size: 11px; }
      .qsum-val { font-size: 18px; }
      .qtext { font-size: 13px; }
      .markup-row { flex-wrap: wrap; }
      .mklbl { min-width: 100%; font-size: 13px; }
      .qchk, .fee-toggle { font-size: 13px; }
      .qchk-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }

      .qbtn { min-height: 44px; padding: 9px 10px; font-size: 14px; border-radius: 10px; }
      .calc-action-bar { max-width: none; padding: 7px 10px calc(7px + env(safe-area-inset-bottom, 0)); gap: 7px; }
      .calc-action-bar .qbtn { min-height: 46px; font-size: 13px; }
      .action-bar-spacer { height: 72px; }

      .cust-actions, .cust-calc, .cust-io { gap: 7px; }
      .crow { flex-wrap: wrap; }
      .cust-dim { flex: 1 1 92px; min-width: 0; }
      .cust-weight-input { width: 96px !important; }
      .mini-btn { min-height: 40px; font-size: 13px; }
    }

    /* 很窄的手机：进一步防止头部和报价汇总横向溢出 */
    @media (max-width: 380px) {
      .wrap { padding-left: 8px; padding-right: 8px; }
      .brandmark { width: 30px; height: 30px; }
      .brandcopy h1 { font-size: 14px; }
      header .net { display: none; }
      .iconbtn { width: 38px; height: 38px; min-width: 38px; }
      .matgrid { gap: 6px; }
      .matcard { padding-left: 8px; padding-right: 21px; }
      .mat-code { font-size: 13px; }
      .mat-cn { font-size: 10px; }
      .board-size-card .row { flex-wrap: wrap; }
      .board-size-card .row > .field { flex: 1 1 calc(50% - 4px); }
      .qchk-cols { grid-template-columns: 1fr; }
    }

    /* 横屏手机：减少纵向占用，仍保留可点尺寸 */
    @media (max-height: 520px) and (orientation: landscape) {
      .wrap { padding-top: 4px; }
      .app-header { min-height: 42px; }
      .home-desc, .home-stats { display: none; }
      .matgrid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
      .calc-action-bar .qbtn { min-height: 40px; }
      .action-bar-spacer { height: 62px; }
    }


    /* ===== v9.5.41 页面增强：仅界面与交互层，不改价格/计算规则 ===== */
    :root {
      --surface-2: #f8fafc;
      --ring: rgba(37, 99, 235, .18);
      --brand-deep: #1d4ed8;
    }
    body.dark { --surface-2:#172033; --ring:rgba(96,165,250,.22); --brand-deep:#93c5fd; }
    html { scroll-behavior: smooth; }
    body { min-height:100vh; }
    button, input, select, textarea { font: inherit; }
    button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible {
      outline: 3px solid var(--ring); outline-offset: 2px;
    }
    .wrap { max-width: 1180px; }
    .app-header {
      position: sticky; top: 0; z-index: 45;
      margin: 0 calc(-1 * clamp(11px, 16px + 0.3vw, 21px));
      padding-left: clamp(11px, 16px + 0.3vw, 21px);
      padding-right: clamp(11px, 16px + 0.3vw, 21px);
      background: rgba(244,246,251,.92);
      backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
      border-bottom: 1px solid var(--line);
    }
    body.dark .app-header { background:rgba(15,23,42,.92); }
    .app-header .qwrap { position:relative; }
    .app-header .qwrap::after { content:"报价"; display:none; font-size:12px; font-weight:700; }
    .card { transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; }
    @media (hover:hover) {
      .matcard:hover, .variant:hover { border-color: var(--brand); box-shadow:0 8px 24px rgba(30,64,175,.09); }
      .quick-spec:hover, .chip:hover, .mini-btn:hover { border-color: var(--brand); }
    }

    .home-hero { border-color: var(--line); }
    .home-title { letter-spacing:-.8px; }
    .search-shell { box-shadow: inset 0 0 0 1px transparent; transition: box-shadow .15s ease; }
    .search-shell:focus-within { box-shadow:0 0 0 4px var(--ring); }
    .matcard { min-height:72px; overflow:hidden; }
    .matcard::after { content:"›"; position:absolute; right:10px; bottom:7px; color:var(--muted); opacity:.42; font-weight:800; }
    .matcard:active { transform:scale(.985); }

    .calc-layout { display:block; }
    .calc-left, .calc-right { min-width:0; }
    .calc-flow { display:flex; align-items:center; gap:6px; margin:0 0 8px; overflow:auto; scrollbar-width:none; }
    .calc-flow::-webkit-scrollbar { display:none; }
    .calc-flow span {
      flex:1 0 auto; min-width:max-content; text-align:center; padding:5px 8px; border-radius:999px;
      border:1px solid var(--line); background:var(--card); color:var(--muted); font-size:11px; font-weight:700;
    }
    .calc-flow span.on { color:var(--brand-deep); border-color:var(--brand); background:var(--brand-soft); }
    .step-label { display:flex; align-items:center; gap:8px; margin-bottom:9px; }
    .step-label > span {
      width:25px; height:25px; border-radius:8px; display:grid; place-items:center; flex:0 0 auto;
      background:var(--brand-soft); color:var(--brand-deep); font-size:10px; font-weight:900; letter-spacing:.2px;
    }
    .step-label > b { font-size:13px; letter-spacing:.1px; }
    .calc-step { position:relative; overflow:hidden; }
    .board-size-card .row { align-items:end; }
    .board-size-card .field label { font-weight:700; }
    .board-size-card .field input { font-variant-numeric:tabular-nums; }
    .board-size-card .field input:focus { background:var(--card); }
    .quick-spec { min-height:34px; }
    .tier-row-wrap { align-items:center; }
    .tier-status { padding:6px 8px; border-radius:8px; background:var(--surface-2); }

    .result-card { border-color:var(--brand); box-shadow:0 10px 30px rgba(30,64,175,.08); }
    .result-head { background:linear-gradient(90deg,var(--brand-soft),var(--card) 72%); }
    .result-tier { border:1px solid var(--line); }
    .sticky-col-total .total-line .sv { font-size:clamp(20px,23px + .6vw,30px); letter-spacing:-.6px; }
    .sticky-col-total { background:linear-gradient(180deg,#fffafa,#fff); }
    body.dark .sticky-col-total { background:linear-gradient(180deg,#2b2025,#1e293b); }
    .qty-edit-bar { background:var(--surface-2); }
    .surcharge-card { border-left:4px solid var(--warn); background:var(--card); }
    .errorbox { box-shadow:none; }

    .model-card .variant-search { margin-top:1px; }
    .variant { position:relative; }
    .variant.on { border-color:var(--brand); box-shadow:0 0 0 2px var(--ring); }
    .variant.on::before {
      content:"当前"; position:absolute; top:7px; right:7px; z-index:2;
      border-radius:999px; padding:2px 6px; background:var(--brand); color:#fff; font-size:9px; font-weight:800;
    }
    .variant.on .vhead { padding-right:36px; }

    .calc-action-bar { backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); background:rgba(255,255,255,.94); }
    body.dark .calc-action-bar { background:rgba(30,41,59,.94); }
    .calc-action-bar .qbtn:first-child:not(.ghost) { box-shadow:0 6px 18px rgba(37,99,235,.22); }
    .calc-action-bar .qbtn.ghost { background:var(--surface-2); }

    @media (min-width: 900px) {
      .app-header .qwrap { width:auto; padding:0 12px; gap:6px; grid-auto-flow:column; }
      .app-header .qwrap::after { display:inline; }
      .home-hero { padding:22px 26px; }
      .matgrid { grid-template-columns:repeat(4,minmax(0,1fr)); }
      .calc-layout { display:grid; grid-template-columns:minmax(330px,.82fr) minmax(0,1.18fr); gap:16px; align-items:start; }
      .calc-left { position:sticky; top:74px; }
      .calc-right .sticky-total { position:sticky; top:74px; z-index:18; }
      .calc-right .variants { grid-template-columns:repeat(2,minmax(0,1fr)); }
      .calc-flow span { font-size:12px; padding:6px 9px; }
      .board-size-card .field input { min-height:44px; font-size:15px; }
      .calc-action-bar { max-width:1180px; }
    }
    @media (min-width: 620px) and (max-width: 899px) {
      .matgrid { grid-template-columns:repeat(3,minmax(0,1fr)); }
    }

    @media (max-width: 619px) {
      .wrap { padding-bottom:96px; }
      .app-header { margin-left:-8px; margin-right:-8px; padding-left:8px; padding-right:8px; }
      .calc-flow { margin-top:2px; }
      .calc-flow span { font-size:10px; padding:4px 7px; }
      .step-label { margin-bottom:7px; }
      .step-label > span { width:23px; height:23px; }
      .board-size-card .field input, .tier-qty input, .qty-edit-input, .variant-search { min-height:42px; font-size:16px; }
      .chips .chip { min-height:38px; display:inline-flex; align-items:center; justify-content:center; }
      .quick-spec { min-height:36px; }
      .sticky-inner { min-height:70px; }
      .sticky-col-total .total-line .sv { font-size:20px; }
      .variant { padding:10px; }
      .calc-action-bar { display:grid; grid-template-columns:minmax(0,1.5fr) minmax(0,.8fr) minmax(0,.8fr); }
      .calc-action-bar .qbtn { min-width:0; padding-left:6px; padding-right:6px; }
      .calc-action-bar .qbtn.ghost { font-size:12px; }
    }
    @media (prefers-reduced-motion: reduce) {
      *, *::before, *::after { scroll-behavior:auto !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; }
    }

  

    /* ===== v9.8.02 型号卡精简：只展示供应商简称、型号与档位原始价 ===== */
    .variant { padding:8px 9px; }
    .variant .vhead { gap:5px; margin-bottom:4px; }
    .variant .density-tag { padding:1px 5px; font-size:9px; }
    /* 厚度/直径范围：紧跟型号名（其它 tag 靠 margin-left:auto 分散到右侧，
       但尺寸是"这个型号是什么"的一部分，应贴着名字而不是被推到最右）。
       用主色 + 加粗区别于灰色备注类标签，悬停有逐档明细。 */
    .variant .density-tag.spec-range { margin-left:0; color:var(--brand); font-weight:600; }
    .variant-prices { display:flex; flex-wrap:wrap; gap:4px 6px; margin-top:5px; }
    .variant-price { display:inline-flex; align-items:baseline; gap:3px; padding:3px 6px; border:1px solid var(--line); border-radius:7px; background:var(--surface-2); font-size:10px; color:var(--muted); line-height:1.25; }
    .variant-price b { color:var(--fg); font-size:11px; font-variant-numeric:tabular-nums; }
    .variant-price small { color:var(--muted); font-size:9px; }
    .model-card .hint.model-hint { margin-bottom:5px !important; }
    @media(max-width:619px){
      .variant { padding:7px 8px; }
      .variant-prices { gap:4px; }
      .variant-price { padding:3px 5px; }
    }

    /* ===== v9.5.52 PWA 状态中心：安装 / 离线 / 更新 ===== */
    .pwa-btn { position:relative; }
    .pwa-btn.ready::after, .pwa-btn.update-ready::after {
      content:""; position:absolute; width:8px; height:8px; right:3px; top:3px; border-radius:50%;
      background:var(--ok); box-shadow:0 0 0 2px var(--card);
    }
    .pwa-btn.update-ready::after { background:var(--warn); }
    .pwa-btn.installed { color:var(--ok); }
    .pwa-sheet { position:fixed; inset:0; z-index:12000; display:none; align-items:flex-end; justify-content:center; padding:16px; }
    .pwa-sheet.show { display:flex; }
    .pwa-sheet-backdrop { position:absolute; inset:0; width:100%; height:100%; border:0; background:rgba(8,15,30,.48); backdrop-filter:blur(5px); -webkit-backdrop-filter:blur(5px); cursor:default; }
    .pwa-panel {
      position:relative; width:min(100%,520px); max-height:min(86vh,720px); overflow:auto; background:var(--card); color:var(--fg);
      border:1px solid var(--line); border-radius:22px; padding:20px; box-shadow:0 24px 70px rgba(0,0,0,.28); animation:pwaUp .18s ease-out;
    }
    @keyframes pwaUp { from { transform:translateY(14px); opacity:.4; } to { transform:translateY(0); opacity:1; } }
    .pwa-panel-head { display:flex; align-items:flex-start; justify-content:space-between; gap:16px; }
    .pwa-panel-head h2 { margin:2px 0 0; font-size:21px; line-height:1.25; }
    .pwa-eyebrow { color:var(--brand); font-size:10px; font-weight:900; letter-spacing:1.4px; }
    .pwa-close { width:38px; height:38px; flex:0 0 auto; border:1px solid var(--line); border-radius:11px; background:var(--surface-2); color:var(--fg); font-size:25px; line-height:1; cursor:pointer; }
    .pwa-state-card { display:flex; align-items:center; gap:12px; margin-top:18px; padding:14px; border:1px solid var(--line); border-radius:16px; background:var(--surface-2); }
    .pwa-state-icon { width:44px; height:44px; flex:0 0 auto; display:grid; place-items:center; border-radius:13px; background:var(--brand-soft); color:var(--brand-deep); font-size:20px; font-weight:900; }
    .pwa-state-copy { min-width:0; display:flex; flex-direction:column; gap:3px; }
    .pwa-state-copy b { font-size:15px; }
    .pwa-state-copy span { color:var(--muted); font-size:12px; line-height:1.45; }
    .pwa-badges { display:flex; flex-wrap:wrap; gap:7px; margin-top:12px; }
    .pwa-badge { display:inline-flex; align-items:center; min-height:27px; padding:4px 9px; border:1px solid var(--line); border-radius:999px; background:var(--card); color:var(--muted); font-size:11px; font-weight:750; }
    .pwa-badge.ok { color:var(--ok); border-color:rgba(5,150,105,.28); background:rgba(5,150,105,.07); }
    .pwa-badge.warn { color:var(--warn); border-color:rgba(217,119,6,.28); background:rgba(217,119,6,.08); }
    .pwa-badge.bad { color:#dc2626; border-color:rgba(220,38,38,.25); background:rgba(220,38,38,.06); }
    .pwa-actions { display:grid; grid-template-columns:1.25fr 1fr; gap:9px; margin-top:16px; }
    .pwa-primary, .pwa-secondary { min-height:46px; border-radius:12px; padding:10px 14px; font-weight:800; cursor:pointer; }
    .pwa-primary { border:1px solid var(--brand); background:var(--brand); color:#fff; box-shadow:0 7px 18px rgba(37,99,235,.20); }
    .pwa-primary:disabled { opacity:.55; cursor:default; box-shadow:none; }
    .pwa-secondary { border:1px solid var(--line); background:var(--surface-2); color:var(--fg); }
    .pwa-secondary.danger { color:#b91c1c; border-color:rgba(185,28,28,.32); background:rgba(185,28,28,.05); }
    .pwa-secondary.danger:hover { color:#fff; background:#b91c1c; border-color:#b91c1c; }
    .pwa-note { margin-top:13px; padding:11px 12px; border-left:3px solid var(--brand); border-radius:8px; background:var(--brand-soft); color:var(--muted); font-size:12px; line-height:1.55; }
    .pwa-help-link { display:inline-block; margin-top:12px; color:var(--brand); text-decoration:none; font-size:12px; font-weight:800; }
    body.pwa-sheet-open { overflow:hidden; }
    @media(min-width:700px) { .pwa-sheet { align-items:center; } }
    @media(max-width:619px) {
      .pwa-sheet { padding:0; align-items:flex-end; }
      .pwa-panel { width:100%; max-height:88vh; border-radius:22px 22px 0 0; padding:18px 16px calc(18px + env(safe-area-inset-bottom)); }
      .pwa-actions { grid-template-columns:1fr; }
      .app-header .pwa-btn { display:grid; }
    }


    /* ===== v9.5.52 业务效率增强 ===== */
    .mini-btn { min-height:36px; border:1px solid var(--line); background:var(--chip); color:var(--fg); border-radius:9px; padding:6px 9px; font-size:11px; font-weight:750; cursor:pointer; }
    .mini-btn.primary { background:var(--brand); color:#fff; border-color:var(--brand); }
    .mini-btn.danger { color:#b91c1c; }
    .quote-quick-actions { display:grid; grid-template-columns:repeat(2,1fr); gap:8px; margin-top:10px; }
    .spec-fav-row { display:flex; align-items:center; gap:6px; margin-top:6px; flex-wrap:wrap; }
    .spec-fav-label { font-size:10px; color:var(--muted); font-weight:700; }
    .spec-fav-btn { border:1px solid var(--line); background:var(--card); color:var(--fg); border-radius:8px; padding:5px 8px; font-size:10px; cursor:pointer; }
    .spec-fav-btn.on { color:#d97706; border-color:rgba(217,119,6,.35); background:rgba(217,119,6,.08); }
    .undo-toast { position:fixed; left:50%; bottom:82px; transform:translateX(-50%); z-index:10030; display:flex; align-items:center; gap:10px; max-width:min(90vw,520px); background:rgba(17,24,39,.96); color:#fff; padding:10px 12px; border-radius:11px; box-shadow:0 8px 24px rgba(0,0,0,.28); font-size:13px; }
    .undo-toast button { border:0; background:#fff; color:#111827; border-radius:7px; padding:5px 9px; font-weight:800; cursor:pointer; }
    @media(max-width:480px){ .quote-quick-actions{grid-template-columns:1fr} }


    /* ===== v9.5.52 精简核价卡片 ===== */
    .result-card.compact-result { padding:0; overflow:hidden; box-shadow:0 3px 12px rgba(30,64,175,.06); }
    .compact-result-top { min-height:28px; display:flex; align-items:center; justify-content:space-between; gap:6px; padding:4px 8px; border-bottom:1px solid var(--line); background:linear-gradient(90deg,var(--brand-soft),var(--card) 78%); }
    .compact-result-title { display:flex; align-items:center; gap:5px; min-width:0; }
    .compact-result-title b { font-size:11px; }
    .compact-result-meta { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:4px 8px; border-bottom:1px solid var(--line); font-size:9px; color:var(--muted); min-width:0; }
    .compact-result-spec { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--fg); }
    .compact-result-source { flex:0 0 auto; white-space:nowrap; font-weight:700; color:var(--muted); }
    .compact-result-grid { display:grid; grid-template-columns:.72fr 1.05fr 1fr 1.08fr; min-height:46px; }
    .compact-metric { min-width:0; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; padding:5px 3px; border-right:1px solid var(--line); }
    .compact-metric:last-child { border-right:0; }
    .compact-metric span { font-size:8px; color:var(--muted); white-space:nowrap; }
    .compact-metric b { font-size:12px; line-height:1.15; color:var(--fg); white-space:nowrap; }
    .compact-metric.price b { color:#dc2626; }
    .compact-metric.total b { font-size:15px; color:#dc2626; }
    .compact-metric small { font-size:7px; line-height:1.1; color:var(--muted); white-space:nowrap; }
    @media(max-width:520px){
      .compact-result-top{min-height:25px;padding:3px 6px}
      .compact-result-meta{padding:3px 6px;font-size:8px;gap:5px}
      .compact-result-grid{min-height:42px}
      .compact-metric{padding:4px 2px}
      .compact-metric b{font-size:11px}
      .compact-metric.total b{font-size:14px}
    }


    /* ===== v9.5.52 报价单页面整理：紧凑、常用设置直接显示 ===== */
    .quote-topbar { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 11px; margin-bottom:6px; background:var(--card); border:1px solid var(--line); border-radius:11px; box-shadow:0 1px 4px rgba(30,50,90,.025); }
    .quote-topbar-title { min-width:0; }
    .quote-topbar-title b { display:block; font-size:15px; line-height:1.25; }
    .quote-topbar-title span { display:block; margin-top:2px; font-size:11px; color:var(--muted); }
    .quote-topbar-total { flex:0 0 auto; text-align:right; }
    .quote-topbar-total span { display:block; font-size:10px; color:var(--muted); }
    .quote-topbar-total b { display:block; margin-top:1px; color:#e53935; font-size:22px; line-height:1.05; }
    .quote-items-card { padding:7px 10px !important; }
    .quote-list-head { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:1px 1px 6px; border-bottom:1px solid var(--line); }
    .quote-list-head b { font-size:12px; }
    .quote-list-head span { font-size:10px; color:var(--muted); }
    .qitem { display:grid; grid-template-columns:minmax(190px,1fr) minmax(330px,auto) 28px; gap:9px; align-items:center; padding:8px 1px; }
    .qitem-main { align-self:center; }
    .qitem-mat { gap:5px; font-size:12px; line-height:1.25; }
    .qitem-index { display:inline-grid; place-items:center; width:20px; height:20px; border-radius:6px; background:var(--brand-soft); color:var(--brand); font-size:10px; font-weight:800; }
    .qitem-supplier { display:inline-flex; align-items:center; padding:2px 6px; border-radius:999px; background:var(--chip); color:var(--muted); font-size:10px; font-weight:700; }
    .qitem-name { margin-top:3px; font-size:11px; line-height:1.25; color:var(--fg); }
    .qitem-spec { margin-top:2px; font-size:10px; line-height:1.3; }
    .qitem .status-badges { margin:3px 0 0; gap:3px; }
    .qitem .status-badge { padding:2px 5px; font-size:9px; }
    .qedit-grid { display:grid; grid-template-columns:70px 78px 92px 96px 70px 88px 96px; gap:6px; align-items:end; }
    .qedit-cell { min-width:0; }
    .qedit-cell > span { display:block; margin:0 0 3px 2px; font-size:9px; color:var(--muted); line-height:1; }
    .qedit-box { display:flex; align-items:center; gap:3px; }
    .qedit-box small { flex:0 0 auto; font-size:9px; color:var(--muted); }
    .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { width:100%; min-width:0; box-sizing:border-box; height:32px; padding:3px 5px; border-radius:8px; font-size:12px; }
    .qedit-grid .qitem-ttl { background:rgba(229,57,53,.055); border-color:rgba(229,57,53,.22); font-weight:800; }
    .qitem-del { width:28px; height:28px; font-size:13px; border-radius:8px; }
    .quote-summarybar { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)) minmax(110px,1.25fr); gap:0; margin-top:6px; overflow:hidden; border:1px solid var(--line); border-radius:9px; background:var(--chip); }
    .quote-summarybar > div { min-width:0; padding:7px 8px; border-right:1px solid var(--line); text-align:center; }
    .quote-summarybar > div:last-child { border-right:0; }
    .quote-summarybar span { display:block; font-size:9px; color:var(--muted); }
    .quote-summarybar b { display:block; margin-top:2px; font-size:13px; color:var(--fg); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .quote-summarybar .grand { background:rgba(229,57,53,.055); }
    .quote-summarybar .grand b { color:#e53935; font-size:17px; }
    details.quote-fold { padding:0 !important; overflow:hidden; }
    details.quote-fold > summary { list-style:none; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:10px; padding:10px 11px; user-select:none; }
    details.quote-fold > summary::-webkit-details-marker { display:none; }
    details.quote-fold > summary::after { content:'⌄'; flex:0 0 auto; color:var(--muted); font-size:13px; transition:transform .15s ease; }
    details.quote-fold[open] > summary::after { transform:rotate(180deg); }
    .quote-fold-title { min-width:0; }
    .quote-fold-title b { display:block; font-size:12px; }
    .quote-fold-title small { display:block; margin-top:2px; color:var(--muted); font-size:9px; font-weight:400; }
    .quote-fold-amount { margin-left:auto; color:#e53935; font-size:15px; white-space:nowrap; }
    .quote-fold-body { padding:0 11px 10px; border-top:1px solid var(--line); }
    .quote-fold-body .markup-row { margin-top:8px; }
    .quote-fold-body .qsel, .quote-fold-body .qinput { min-height:34px; padding:5px 7px; font-size:12px; }
    .quote-fold-body .markup-hint { font-size:9px; }
    .quote-fold-body .fee-toggle { margin-top:8px; font-size:10px; }
    .quote-fold-body .markup-out { margin-top:8px; padding:7px 8px; font-size:10px; line-height:1.6; border-radius:8px; }
    .quote-settings-card { padding:0 !important; overflow:hidden; }
    .quote-settings-head { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 11px 7px; border-bottom:1px solid var(--line); }
    .quote-settings-head span { min-width:0; }
    .quote-settings-head b { display:block; font-size:12px; }
    .quote-settings-head small { display:block; margin-top:2px; color:var(--muted); font-size:9px; font-weight:400; }
    .quote-settings-body { padding:0 11px 10px; }
    .quote-settings-body .markup-row { margin-top:8px; }
    .quote-settings-body .qsel, .quote-settings-body .qinput { min-height:34px; padding:5px 7px; font-size:12px; }
    .quote-settings-body .markup-hint { font-size:9px; }
    .quote-settings-body .fee-toggle { margin-top:8px; font-size:10px; }
    .quote-settings-body .markup-out { margin-top:8px; padding:7px 8px; font-size:10px; line-height:1.6; border-radius:8px; }
    .quote-export-settings { margin-top:8px; }
    .quote-visible-settings { margin-top:0 !important; padding:7px 8px !important; border-radius:7px !important; background:var(--chip); }
    .quote-visible-settings .qchk { font-size:10px; }
    .quote-visible-settings .qchk input { width:14px; height:14px; }
    .quote-action-card { padding:9px 10px !important; }
    .quote-primary-actions { display:grid; grid-template-columns:1fr 1fr 1fr; gap:6px; }
    .quote-secondary-actions { display:grid; grid-template-columns:1fr; gap:6px; margin-top:6px; }
    .quote-export-actions { display:grid; grid-template-columns:repeat(3,1fr); gap:6px; margin-top:8px; }
    .quote-primary-actions .qbtn, .quote-secondary-actions .qbtn, .quote-export-actions .qbtn { margin:0; min-height:36px; padding:7px 6px; border-radius:8px; font-size:11px; }
    .quote-section-cap { display:flex; align-items:center; gap:7px; margin:9px 0 5px; font-size:10px; color:var(--muted); }
    .quote-section-cap::after { content:''; height:1px; flex:1; background:var(--line); }
    .quote-inline-fold { margin-top:7px; border:1px solid var(--line); border-radius:8px; background:var(--chip); }
    .quote-inline-fold > summary { padding:7px 9px !important; }
    .quote-inline-fold .quote-fold-title b { font-size:10px; }
    .quote-inline-fold .quote-fold-title small { font-size:8px; }
    .quote-inline-fold .quote-fold-body { padding:0 9px 8px; }
    .quote-inline-fold .qtext { min-height:92px; margin-top:8px; padding:7px 8px; border-radius:8px; font-size:10px; }
    .quote-inline-fold .qchk-group { margin-top:7px; padding:7px 8px; border-radius:7px; }
    .quote-inline-fold .qchk-group .qchk-title { font-size:10px; }
    .quote-inline-fold .qchk { font-size:10px; }
    .quote-inline-fold .qchk input { width:14px; height:14px; }
    .quote-clear-row { display:flex; justify-content:flex-end; margin-top:7px; }
    .quote-clear-row .qbtn { width:auto; margin:0; padding:5px 9px; background:transparent; color:var(--muted); border:1px solid var(--line); font-size:10px; }
    .quote-clear-row .qbtn:hover { color:#c62828; border-color:rgba(198,40,40,.35); }
    .quote-empty-card { text-align:center; padding:22px 14px !important; }
    .quote-empty-card .label { justify-content:center; }
    .quote-empty-card .qbtn { max-width:220px; margin:12px auto 0; }
    @media (max-width:760px) {
      .qitem { grid-template-columns:1fr 28px; gap:7px; }
      .qedit-grid { grid-column:1/-1; grid-row:2; grid-template-columns:repeat(4,minmax(0,1fr)); gap:5px; }
      .qitem-del { grid-column:2; grid-row:1; align-self:start; }
    }
    @media (max-width:520px) {
      .quote-topbar { padding:8px 9px; }
      .quote-topbar-total b { font-size:19px; }
      .quote-items-card { padding:6px 8px !important; }
      .qitem { padding:7px 0; }
      .qedit-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
      .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { height:31px; }
      .quote-summarybar { grid-template-columns:repeat(3,minmax(0,1fr)); }
      .quote-summarybar > div { padding:6px 3px; }
      .quote-summarybar b { font-size:11px; }
      .quote-summarybar .grand b { font-size:14px; }
      .quote-primary-actions { grid-template-columns:1.1fr 1fr 1fr; }
      .quote-secondary-actions { grid-template-columns:1fr; }
      
      .quote-primary-actions .qbtn, .quote-secondary-actions .qbtn, .quote-export-actions .qbtn { min-height:34px; font-size:10px; padding:6px 4px; }
      .quote-fold-body .markup-row { display:grid; grid-template-columns:82px 82px 1fr; gap:5px; }
      .quote-fold-body .markup-row .mklbl { min-width:0; }
    }


    /* ===== v9.5.52 报价单继续整理：双栏工作区 + 设置常显 + 更紧凑 ===== */
    .quote-page { max-width:1180px; }
    .quote-workspace { display:grid; grid-template-columns:minmax(300px,.82fr) minmax(420px,1.18fr); gap:8px; align-items:start; margin-top:8px; }
    .quote-workspace > .card { margin:0; }
    .quote-action-head { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:0 1px 7px; border-bottom:1px solid var(--line); margin-bottom:7px; }
    .quote-action-head b { display:block; font-size:12px; }
    .quote-action-head small { display:block; margin-top:2px; font-size:9px; color:var(--muted); font-weight:400; }
    .quote-topbar { margin-bottom:5px; padding:7px 10px; }
    .quote-topbar-title b { font-size:14px; }
    .quote-topbar-title span { font-size:10px; }
    .quote-topbar-total b { font-size:20px; }
    .quote-items-card { padding:6px 9px !important; }
    .quote-list-head { padding-bottom:5px; }
    .qitem { padding:6px 1px; gap:7px; }
    .qitem-name { margin-top:2px; }
    .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { height:30px; }
    .quote-summarybar { margin-top:5px; }
    .quote-summarybar > div { padding:6px 6px; }
    .quote-summarybar .grand b { font-size:15px; }
    .quote-settings-head { padding:8px 10px 6px; }
    .quote-settings-body { padding:0 10px 9px; }
    .quote-settings-body .markup-row { display:grid; grid-template-columns:78px 76px minmax(74px,1fr); gap:5px; align-items:center; margin-top:7px; }
    .quote-settings-body .markup-row .mklbl { min-width:0; font-size:10px; }
    .quote-settings-body .markup-row .fee-unit { font-size:9px; color:var(--muted); }
    .quote-settings-body .qsel, .quote-settings-body .qinput { min-height:31px; height:31px; padding:4px 6px; font-size:11px; }
    .quote-settings-body .markup-hint { margin-top:6px; line-height:1.45; }
    .quote-settings-body .fee-toggle { display:flex; align-items:flex-start; gap:5px; margin-top:7px; line-height:1.45; }
    .quote-settings-body .markup-out { margin-top:7px; padding:6px 7px; font-size:9px; }
    .quote-action-card { padding:8px 9px !important; }
    .quote-primary-actions .qbtn, .quote-secondary-actions .qbtn, .quote-export-actions .qbtn { min-height:33px; padding:5px 5px; font-size:10px; }
    .quote-section-cap { margin:8px 0 4px; }
    .quote-export-settings { display:grid; grid-template-columns:1fr; gap:5px; margin-top:6px; }
    .quote-setting-line { display:grid; grid-template-columns:82px minmax(0,1fr); gap:6px; align-items:start; }
    .quote-setting-label { padding-top:7px; font-size:9px; font-weight:700; color:var(--muted); white-space:nowrap; }
    .quote-visible-settings { padding:5px 6px !important; }
    .quote-visible-settings .qchk-cols { display:flex; flex-wrap:wrap; gap:4px 10px; }
    .quote-visible-settings .qchk { font-size:9px; white-space:nowrap; }
    .quote-visible-settings .qchk input { width:13px; height:13px; }
    .quote-inline-fold { margin-top:6px; }
    .quote-inline-fold > summary { padding:6px 8px !important; }
    .quote-clear-row { margin-top:6px; }
    .quote-clear-row .qbtn { padding:4px 8px; font-size:9px; }
    @media (max-width:900px) {
      .quote-workspace { grid-template-columns:1fr; }
      .quote-setting-line { grid-template-columns:90px minmax(0,1fr); }
    }
    @media (max-width:520px) {
      .quote-workspace { gap:6px; margin-top:6px; }
      .quote-topbar { padding:7px 8px; }
      .quote-topbar-title span { font-size:9px; }
      .quote-topbar-total b { font-size:18px; }
      .quote-summarybar span { font-size:8px; }
      .quote-summarybar b { font-size:10px; }
      .quote-summarybar .grand b { font-size:12px; }
      .quote-settings-body .markup-row { grid-template-columns:72px 70px minmax(66px,1fr); }
      .quote-setting-line { grid-template-columns:1fr; gap:2px; }
      .quote-setting-label { padding-top:1px; }
      .quote-visible-settings .qchk-cols { gap:4px 8px; }
      .quote-primary-actions { grid-template-columns:.9fr 1fr 1fr; }
      .quote-secondary-actions { grid-template-columns:1fr; }
      
    }


    /* ===== v9.5.52 报价单卡片尺寸收紧 ===== */
    .quote-page .card { border-radius:8px; box-shadow:0 1px 3px rgba(30,50,90,.02); }
    .quote-topbar { padding:5px 8px; margin-bottom:4px; border-radius:8px; min-height:0; }
    .quote-topbar-title b { font-size:13px; }
    .quote-topbar-title span { margin-top:1px; font-size:9px; }
    .quote-topbar-total span { font-size:9px; }
    .quote-topbar-total b { font-size:18px; }
    .quote-items-card { padding:4px 7px !important; }
    .quote-list-head { padding:0 0 4px; }
    .quote-list-head b { font-size:11px; }
    .quote-list-head span { font-size:9px; }
    .qitem { padding:4px 0; gap:5px; }
    .qitem-index { width:18px; height:18px; border-radius:5px; font-size:9px; }
    .qitem-mat { font-size:11px; }
    .qitem-name { margin-top:1px; font-size:10px; }
    .qitem-spec { margin-top:1px; font-size:9px; }
    .qedit-grid { gap:4px; }
    .qedit-cell > span { margin-bottom:2px; font-size:8px; }
    .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { height:28px; padding:2px 4px; border-radius:6px; font-size:11px; }
    .qitem-del { width:25px; height:25px; border-radius:6px; }
    .quote-summarybar { margin-top:4px; border-radius:7px; }
    .quote-summarybar > div { padding:4px 4px; }
    .quote-summarybar span { font-size:8px; }
    .quote-summarybar b { margin-top:1px; font-size:11px; }
    .quote-summarybar .grand b { font-size:13px; }
    .quote-workspace { gap:5px; margin-top:5px; }
    .quote-settings-head { padding:5px 8px 4px; }
    .quote-settings-head b, .quote-action-head b { font-size:11px; }
    .quote-settings-head small, .quote-action-head small { margin-top:1px; font-size:8px; }
    .quote-fold-amount { font-size:13px; }
    .quote-settings-body { padding:0 8px 6px; }
    .quote-settings-body .markup-row { margin-top:5px; gap:4px; }
    .quote-settings-body .qsel, .quote-settings-body .qinput { min-height:28px; height:28px; padding:3px 5px; font-size:10px; border-radius:6px; }
    .quote-settings-body .markup-hint { margin-top:4px; font-size:8px; }
    .quote-settings-body .fee-toggle { margin-top:5px; font-size:9px; }
    .quote-settings-body .markup-out { margin-top:5px; padding:5px 6px; font-size:8px; border-radius:6px; }
    .quote-action-card { padding:6px 7px !important; }
    .quote-action-head { padding-bottom:5px; margin-bottom:5px; }
    .quote-primary-actions, .quote-secondary-actions, .quote-export-actions { gap:4px; }
    .quote-secondary-actions { margin-top:4px; }
    .quote-export-actions { margin-top:5px; }
    .quote-primary-actions .qbtn, .quote-secondary-actions .qbtn, .quote-export-actions .qbtn { min-height:29px; padding:4px 4px; border-radius:6px; font-size:9px; }
    .quote-section-cap { margin:6px 0 3px; font-size:9px; }
    .quote-export-settings { gap:3px; margin-top:4px; }
    .quote-setting-line { gap:4px; }
    .quote-setting-label { padding-top:5px; font-size:8px; }
    .quote-visible-settings { padding:4px 5px !important; border-radius:6px !important; }
    .quote-visible-settings .qchk { font-size:8px; }
    .quote-inline-fold { margin-top:4px; border-radius:6px; }
    .quote-inline-fold > summary { padding:5px 7px !important; }
    .quote-clear-row { margin-top:4px; }
    @media (max-width:520px) {
      .quote-topbar { padding:5px 7px; }
      .quote-topbar-total b { font-size:17px; }
      .quote-items-card { padding:4px 6px !important; }
      .qitem { padding:4px 0; }
      .qedit-grid { gap:4px; }
      .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { height:28px; }
      .quote-workspace { gap:4px; margin-top:4px; }
      .quote-settings-head { padding:5px 7px 4px; }
      .quote-settings-body { padding:0 7px 6px; }
      .quote-action-card { padding:5px 6px !important; }
    }

/* ===== v10 UI Redesign Prototype：工业报价台 ===== */
:root {
  --bg: #f3f6fa;
  --card: #ffffff;
  --fg: #172033;
  --muted: #748096;
  --line: #e1e7ef;
  --brand: #1f5fd1;
  --brand-2: #1648a5;
  --brand-soft: #edf4ff;
  --chip: #f4f7fb;
  --chip-on: #1f5fd1;
  --danger: #d72f45;
  --shadow-sm: 0 1px 2px rgba(23,32,51,.03), 0 8px 24px rgba(23,32,51,.045);
  --shadow: 0 16px 46px rgba(23,32,51,.075);
  --surface-2: #f7f9fc;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg:#0b1220; --card:#121c2d; --fg:#eef3ff; --muted:#93a0b6; --line:#27344a;
    --brand:#77a2ff; --brand-2:#a8c1ff; --brand-soft:#192c51; --chip:#1a2638;
    --chip-on:#5f8ff1; --surface-2:#172236;
    --shadow-sm:0 1px 2px rgba(0,0,0,.15),0 8px 24px rgba(0,0,0,.15);
    --shadow:0 18px 48px rgba(0,0,0,.28);
  }
}
body.dark {
  --bg:#0b1220; --card:#121c2d; --fg:#eef3ff; --muted:#93a0b6; --line:#27344a;
  --brand:#77a2ff; --brand-2:#a8c1ff; --brand-soft:#192c51; --chip:#1a2638;
  --chip-on:#5f8ff1; --surface-2:#172236;
  --shadow-sm:0 1px 2px rgba(0,0,0,.15),0 8px 24px rgba(0,0,0,.15);
  --shadow:0 18px 48px rgba(0,0,0,.28);
}
body {
  background:
    linear-gradient(180deg, rgba(31,95,209,.055), transparent 260px),
    var(--bg);
}
.wrap { max-width:1180px; padding-top:10px; }

/* Header: product-like, quiet, always available */
.app-header {
  min-height:56px;
  margin-left:-14px; margin-right:-14px;
  padding:7px 14px 9px;
  gap:8px;
  background:color-mix(in srgb, var(--bg) 90%, transparent);
  border-bottom:1px solid color-mix(in srgb, var(--line) 82%, transparent);
  box-shadow:0 8px 24px rgba(23,32,51,.025);
}
.brandmark { width:34px; height:34px; border-radius:10px; box-shadow:none; border:1px solid var(--line); }
.brandcopy h1 { font-size:16px; font-weight:850; letter-spacing:-.2px; }
.brand-sub { font-size:10px; margin-top:1px; letter-spacing:.15px; }
.header-status { margin-left:2px; }
header .ver, .net { height:22px; padding:0 7px; font-size:10px; background:var(--card); }
.iconbtn {
  width:36px; height:36px; border-radius:10px; box-shadow:none;
  background:var(--card); border-color:var(--line); transition:transform .12s ease,border-color .15s ease,background .15s ease;
}
.iconbtn:hover { border-color:color-mix(in srgb,var(--brand) 45%,var(--line)); background:var(--brand-soft); }
.qbadge { min-width:17px; height:17px; line-height:17px; padding:0 4px; font-size:9px; top:-5px; right:-5px; }

/* Home: search-first command center */
.home-hero {
  padding:22px 24px 20px;
  margin:10px 0 10px;
  border-radius:20px;
  background:
    radial-gradient(circle at 92% 8%, rgba(31,95,209,.13), transparent 26%),
    linear-gradient(150deg, var(--card), color-mix(in srgb,var(--brand-soft) 38%,var(--card)));
  box-shadow:var(--shadow-sm);
}
body.dark .home-hero {
  background:radial-gradient(circle at 92% 8%,rgba(119,162,255,.13),transparent 28%),linear-gradient(150deg,#142035,#111a2b);
}
.home-hero::after { display:none; }
.eyebrow { font-size:10px; letter-spacing:1.8px; }
.home-title { margin-top:5px; font-size:clamp(25px,3vw,34px); letter-spacing:-1.15px; }
.home-desc { max-width:680px; margin-top:7px; font-size:13px; line-height:1.65; }
.home-stats { width:min(520px,100%); margin:16px 0 13px; gap:8px; }
.home-stats > div {
  padding:9px 11px; border:1px solid var(--line); border-radius:11px;
  background:color-mix(in srgb,var(--card) 72%,var(--surface-2));
}
.home-stats b { font-size:20px; font-variant-numeric:tabular-nums; }
.home-stats span { margin-top:2px; font-size:9px; }
.search-shell {
  height:48px; max-width:720px; padding:0 12px 0 14px;
  border-radius:13px; border:1px solid color-mix(in srgb,var(--brand) 20%,var(--line));
  background:var(--card); box-shadow:0 6px 20px rgba(23,32,51,.055);
}
.search-shell:focus-within { border-color:var(--brand); box-shadow:0 0 0 4px var(--ring),0 8px 24px rgba(23,32,51,.06); }
.search-icon { color:var(--brand); font-size:19px; }
.search { font-size:15px; }
.search-kbd { border-radius:7px; padding:3px 7px; background:var(--surface-2); }
.section-head { margin:6px 0 9px; }
.section-title { font-size:15px; font-weight:850; letter-spacing:-.2px; }
.section-desc { margin-top:2px; font-size:10px; }
.section-count { padding:4px 8px; border:1px solid var(--line); border-radius:999px; background:var(--card); }
.matgrid { gap:9px; }
.matcard {
  min-height:76px; padding:11px 34px 11px 13px; gap:9px;
  border-radius:13px; border-color:var(--line); background:var(--card); box-shadow:var(--shadow-sm);
  transition:border-color .15s ease,transform .12s ease;
}
.matcard:hover { transform:translateY(-1px); box-shadow:0 10px 28px rgba(23,32,51,.065); }
.matcard::after { display:none; }
.mat-accent { width:4px; height:34px; border-radius:999px; }
.mat-code { font-size:15px; font-weight:850; letter-spacing:-.15px; }
.mat-badge { background:var(--surface-2); border:1px solid var(--line); }
.mat-cn { margin-top:3px; font-size:10px; }
.favstar { right:10px; top:9px; width:24px; height:24px; border-radius:7px; }
.mat-arrow { right:12px; bottom:7px; opacity:.5; }

/* Calculator: workflow first, result second */
.calc-layout { gap:14px; }
.calc-flow { position:relative; gap:0; margin:10px 0 10px; padding:0 2px; overflow:visible; }
.calc-flow::before {
  content:""; position:absolute; left:8%; right:8%; top:14px; height:1px; background:var(--line); z-index:0;
}
.calc-flow span {
  position:relative; z-index:1; flex:1 1 25%; min-width:0; border:0; background:transparent;
  padding:27px 3px 0; border-radius:0; font-size:10px; font-weight:750; color:var(--muted);
}
.calc-flow span::before {
  content:""; position:absolute; left:50%; top:7px; width:13px; height:13px; transform:translateX(-50%);
  border-radius:50%; background:var(--card); border:2px solid var(--line); box-shadow:0 0 0 4px var(--bg);
}
.calc-flow span.done { color:var(--fg); }
.calc-flow span.done::before { background:var(--brand); border-color:var(--brand); }
.calc-flow span.on { color:var(--brand); background:transparent; border:0; }
.calc-flow span.on::before { width:15px; height:15px; top:6px; background:var(--card); border:4px solid var(--brand); }
.card { border-radius:13px; box-shadow:var(--shadow-sm); }
.calc-step { border-color:var(--line); }
.step-label { margin-bottom:10px; }
.step-label > span { width:26px; height:26px; border-radius:8px; font-size:9px; }
.step-label > b { font-size:13px; font-weight:850; }
.card.curmat { display:flex; align-items:center; min-height:88px; padding:12px 13px; }
.cur-accent { height:42px; }
.cur-kicker { font-size:9px; letter-spacing:.8px; text-transform:uppercase; }
.card.curmat .matname { font-size:17px; }
.change-mat { padding:5px 8px; border-radius:8px; background:var(--surface-2); color:var(--brand); font-weight:800; }
.seg { padding:4px; border:1px solid var(--line); background:var(--surface-2); }
.seg-item { min-height:39px; border-radius:9px; }
.seg-item.on { box-shadow:0 2px 8px rgba(23,32,51,.07); }
.field label { font-weight:700; }
.field input, .crow input, .variant-search {
  border-radius:10px; background:var(--surface-2); border-color:var(--line);
}
.quick-specs { gap:6px; margin-top:7px; }
.quick-spec { border:1px solid var(--line); background:var(--card); color:var(--muted); border-radius:8px; }
.quick-spec:hover { color:var(--brand); background:var(--brand-soft); }
.tier-status { margin-top:7px; border:1px solid var(--line); color:var(--muted); }

/* Live result: make the decision number unmistakable */
.result-card.compact-result {
  border:1px solid color-mix(in srgb,var(--brand) 40%,var(--line)); border-radius:15px;
  box-shadow:0 12px 34px rgba(31,95,209,.09); background:var(--card);
}
.compact-result-top { min-height:38px; padding:7px 10px; background:linear-gradient(90deg,var(--brand-soft),var(--card) 72%); }
.compact-result-title { gap:7px; }
.compact-result-title b { font-size:13px; }
.result-kicker { font-size:9px; letter-spacing:1px; }
.result-tier { font-size:10px; padding:3px 7px; }
.compact-result-meta { padding:6px 10px; font-size:10px; }
.compact-result-grid { grid-template-columns:.78fr 1.06fr 1fr 1.2fr; min-height:72px; }
.compact-metric { padding:9px 5px; gap:3px; }
.compact-metric span { font-size:9px; }
.compact-metric b { font-size:14px; }
.compact-metric.price b { color:var(--fg); }
.compact-metric.total {
  background:linear-gradient(160deg,rgba(215,47,69,.055),rgba(215,47,69,.015));
}
.compact-metric.total b { font-size:22px; letter-spacing:-.55px; color:var(--danger); }
.compact-metric small { font-size:8px; }

/* Model cards: compare faster */
.model-card .variant-search { height:42px; padding:8px 10px; }
.model-hint { margin:6px 0 2px !important; opacity:.82; }
.variants { gap:8px; }
.variant {
  padding:10px; border-radius:11px; border-color:var(--line); background:var(--card); box-shadow:none;
}
.variant:hover { box-shadow:0 6px 18px rgba(23,32,51,.05); }
.variant.on { background:linear-gradient(145deg,var(--brand-soft),var(--card)); box-shadow:0 0 0 2px var(--ring); }
.variant.on::before { top:8px; right:8px; padding:2px 7px; }
.vsup { border:1px solid var(--line); background:var(--surface-2); }
.vname { font-size:13px; font-weight:800; }
.variant-price { padding:4px 7px; border-radius:7px; background:var(--surface-2); }
.variant-price b { font-size:12px; }

/* Bottom bar: one obvious primary action */
.calc-action-bar {
  gap:7px; padding-top:8px; padding-bottom:calc(8px + env(safe-area-inset-bottom,0));
  border-top:1px solid var(--line); box-shadow:0 -10px 30px rgba(23,32,51,.07);
}
.calc-action-bar .qbtn { min-height:44px; border-radius:10px; }
.calc-action-bar .qbtn:first-child:not(.ghost) { flex:1.55; font-weight:850; }
.calc-action-bar .qbtn.ghost { color:var(--muted); }
.data-status { margin-top:10px; }
.wechat { margin-top:12px; }

@media (min-width:900px) {
  .calc-layout { grid-template-columns:minmax(340px,.8fr) minmax(0,1.2fr); gap:16px; }
  .calc-left { top:76px; }
  .calc-right .sticky-total { top:76px; }
  .variants { grid-template-columns:repeat(2,minmax(0,1fr)); }
}

@media (max-width:699px) {
  .wrap { padding:7px 10px 112px; }
  .app-header { min-height:50px; margin-left:-10px; margin-right:-10px; padding:5px 10px 7px; gap:5px; }
  .brandmark { width:32px; height:32px; }
  .brandcopy h1 { font-size:15px; }
  .header-status .ver { display:none; }
  header .net { height:22px; padding:0 6px; font-size:9px; }
  .iconbtn { width:38px; height:38px; min-width:38px; }

  .home-hero { margin:7px 0 8px; padding:16px 14px 14px; border-radius:16px; }
  .home-title { font-size:24px; line-height:1.15; }
  .home-desc { font-size:12px; line-height:1.55; }
  .home-stats { margin:12px 0 10px; }
  .home-stats > div { padding:7px 8px; }
  .home-stats b { font-size:17px; }
  .search-shell { height:46px; }
  .search { font-size:16px; }
  .matgrid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; }
  .matcard { min-height:72px; padding:9px 27px 9px 10px; border-radius:11px; }
  .mat-code { font-size:14px; }
  .mat-cn { font-size:10px; }
  .mat-badge { display:none; }

  .calc-flow { margin:7px 0 9px; }
  .calc-flow::before { top:13px; }
  .calc-flow span { padding-top:25px; font-size:9px; }
  .calc-flow span::before { top:6px; }
  .calc-flow span.on::before { top:5px; }
  .card.curmat { min-height:80px; }
  .board-size-card .row { gap:6px; }
  .compact-result-grid { min-height:66px; }
  .compact-metric { padding:8px 3px; }
  .compact-metric b { font-size:12px; }
  .compact-metric.total b { font-size:18px; }
  .compact-result-meta { font-size:9px; }

  .calc-action-bar {
    display:grid; grid-template-columns:1fr 1fr; max-width:none; padding:8px 10px calc(8px + env(safe-area-inset-bottom,0));
  }
  .calc-action-bar .qbtn:first-child:not(.ghost) { grid-column:1 / -1; min-height:48px; font-size:14px; }
  .calc-action-bar .qbtn.ghost { min-height:38px; font-size:11px; }
  .action-bar-spacer { height:104px; }
}

@media (max-width:380px) {
  .brandcopy { min-width:48px; }
  .header-status { display:none; }
  .home-title { font-size:22px; }
  .home-stats span { font-size:8px; }
  .matcard { padding-right:24px; }
  .compact-metric.total b { font-size:16px; }
}

/* ===== v10.1 报价工作台 + 统一图标系统 ===== */
.ui-icon,
.qbtn-icon {
  width:18px;
  height:18px;
  flex:0 0 auto;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
  pointer-events:none;
}
.back-icon .ui-icon { width:21px; height:21px; stroke-width:2; }
.iconbtn { display:grid; place-items:center; color:var(--fg); }
.app-header .qwrap { display:grid; place-items:center; }
.app-header .qwrap .ui-icon { grid-column:1; grid-row:1; }
.app-header .qwrap::after { grid-column:2; grid-row:1; }

.quote-page { padding-top:10px; }
.quote-page .card { border-radius:14px; box-shadow:var(--shadow-sm); }
.quote-topbar {
  min-height:96px;
  margin:0 0 10px;
  padding:16px 18px;
  border-radius:16px;
  border:1px solid color-mix(in srgb,var(--brand) 22%,var(--line));
  background:
    radial-gradient(circle at 84% -20%, color-mix(in srgb,var(--brand) 14%,transparent), transparent 42%),
    linear-gradient(140deg,var(--card),color-mix(in srgb,var(--brand-soft) 46%,var(--card)));
  box-shadow:0 12px 34px rgba(23,32,51,.055);
}
body.dark .quote-topbar {
  background:radial-gradient(circle at 84% -20%,rgba(119,162,255,.14),transparent 42%),linear-gradient(140deg,#142137,#111a2b);
}
.quote-topbar-title { display:flex; flex-direction:column; align-items:flex-start; min-width:0; }
.quote-eyebrow,
.quote-list-kicker,
.quote-settings-head em,
.quote-action-head em {
  display:block;
  margin:0 0 4px;
  color:var(--brand);
  font-size:9px;
  line-height:1.1;
  font-weight:900;
  font-style:normal;
  letter-spacing:1.15px;
}
.quote-topbar-title b { font-size:20px; line-height:1.2; letter-spacing:-.55px; }
.quote-topbar-title > span:last-child { margin-top:6px; font-size:11px; color:var(--muted); }
.quote-topbar-title > span:last-child strong { color:var(--fg); }
.quote-topbar-total {
  min-width:210px;
  padding:11px 13px 10px 18px;
  border-left:1px solid color-mix(in srgb,var(--brand) 18%,var(--line));
}
.quote-topbar-total > span { font-size:10px; font-weight:750; letter-spacing:.2px; }
.quote-topbar-total b {
  margin-top:3px;
  color:var(--danger);
  font-size:30px;
  font-weight:900;
  letter-spacing:-1px;
  font-variant-numeric:tabular-nums;
}
.quote-topbar-total small { display:block; margin-top:5px; color:var(--muted); font-size:9px; }

.quote-items-card { padding:12px !important; }
.quote-list-head {
  min-height:44px;
  padding:1px 2px 10px;
  border-bottom:1px solid var(--line);
}
.quote-list-head > div { min-width:0; }
.quote-list-head b { display:block; font-size:13px; line-height:1.2; }
.quote-list-head > span { max-width:55%; text-align:right; font-size:9px; line-height:1.45; }
.qitem {
  grid-template-columns:minmax(205px,1fr) minmax(350px,auto) 34px;
  gap:11px;
  margin-top:8px;
  padding:10px 10px;
  border:1px solid var(--line);
  border-radius:11px;
  background:var(--surface-2);
}
.qitem:last-child { border-bottom:1px solid var(--line); }
.qitem-main { padding:1px 0; }
.qitem-mat { gap:6px; font-size:12px; }
.qitem-index { width:24px; height:24px; border-radius:7px; font-size:10px; }
.qitem-supplier { padding:3px 7px; background:var(--card); border:1px solid var(--line); }
.qitem-name { margin-top:5px; font-size:11px; font-weight:750; line-height:1.35; }
.qitem-spec { margin-top:4px; font-size:9px; line-height:1.45; }
.qedit-grid { grid-template-columns:72px 82px 94px 104px 76px 96px 104px; gap:7px; }
.qedit-cell > span { margin:0 0 5px 1px; font-size:8px; font-weight:700; letter-spacing:.2px; }
.qedit-box { position:relative; }
.qedit-grid .qitem-qty,
.qedit-grid .qitem-fee,
.qedit-grid .qitem-uprice,
.qedit-grid .qitem-ttl,
.qedit-grid .qitem-taxrate,
.qedit-grid .qitem-taxamt,
.qedit-grid .qitem-total {
  height:36px;
  padding:5px 7px;
  border-radius:8px;
  border-color:var(--line);
  background:var(--card);
  font-size:12px;
  font-variant-numeric:tabular-nums;
}
.qedit-grid .qitem-ttl {
  color:var(--danger);
  background:color-mix(in srgb,var(--danger) 5%,var(--card));
  border-color:color-mix(in srgb,var(--danger) 21%,var(--line));
}
.qitem-del {
  width:34px;
  height:34px;
  display:grid;
  place-items:center;
  border-radius:9px;
  background:var(--card);
  border-color:var(--line);
}
.qitem-del .qbtn-icon { width:15px; height:15px; }
.qitem-del:hover { color:var(--danger); border-color:color-mix(in srgb,var(--danger) 38%,var(--line)); background:color-mix(in srgb,var(--danger) 5%,var(--card)); }
.quote-summarybar {
  margin-top:10px;
  border-radius:11px;
  background:var(--surface-2);
}
.quote-summarybar > div { padding:9px 8px; }
.quote-summarybar span { font-size:9px; }
.quote-summarybar b { margin-top:3px; font-size:13px; }
.quote-summarybar .grand { background:color-mix(in srgb,var(--danger) 5%,var(--card)); }
.quote-summarybar .grand b { font-size:17px; color:var(--danger); }

.quote-workspace {
  grid-template-columns:minmax(310px,.9fr) minmax(440px,1.1fr);
  gap:10px;
  margin-top:10px;
}
.quote-settings-card,
.quote-action-card { border:1px solid var(--line); overflow:hidden; }
.quote-settings-head,
.quote-action-head {
  min-height:64px;
  padding:11px 13px 10px;
  margin:0;
  border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,var(--card),var(--surface-2));
}
.quote-settings-head > span,
.quote-action-head > span { min-width:0; }
.quote-settings-head b,
.quote-action-head b { display:block; font-size:13px; line-height:1.2; }
.quote-settings-head small,
.quote-action-head small { display:block; margin-top:4px; font-size:9px; line-height:1.4; }
.quote-settings-total { flex:0 0 auto; text-align:right; }
.quote-settings-total small { margin:0 0 2px; font-size:8px; }
.quote-fold-amount { color:var(--danger); font-size:18px !important; letter-spacing:-.4px; }
.quote-settings-body { padding:5px 13px 12px; }
.quote-settings-body .markup-row {
  grid-template-columns:84px 78px minmax(80px,1fr);
  gap:7px;
  margin-top:8px;
}
.quote-settings-body .markup-row .mklbl { font-size:10px; font-weight:700; }
.quote-settings-body .qsel,
.quote-settings-body .qinput {
  min-height:36px;
  height:36px;
  padding:5px 8px;
  border-radius:8px;
  background:var(--surface-2);
  border-color:var(--line);
  font-size:11px;
}
.quote-settings-body .markup-hint { margin-top:8px; font-size:9px; line-height:1.55; }
.quote-settings-body .fee-toggle {
  margin-top:9px;
  padding:8px 9px;
  border:1px solid var(--line);
  border-radius:9px;
  background:var(--surface-2);
  font-size:9px;
  line-height:1.45;
}
.quote-settings-body .markup-out {
  margin-top:8px;
  padding:8px 9px;
  border:1px solid color-mix(in srgb,var(--brand) 18%,var(--line));
  border-radius:9px;
  background:var(--brand-soft);
  color:var(--muted);
  font-size:9px;
  line-height:1.65;
}
.quote-settings-body .markup-out b { color:var(--fg); }

.quote-action-card { padding:0 !important; }
.quote-action-head { padding-left:13px; padding-right:13px; }
.quote-primary-actions {
  grid-template-columns:.9fr 1fr 1.12fr;
  gap:7px;
  padding:11px 12px 0;
}
.quote-primary-actions .qbtn,
.quote-secondary-actions .qbtn,
.quote-export-actions .qbtn,
.quote-clear-row .qbtn,
.quote-empty-action {
  display:flex;
  align-items:center;
  justify-content:center;
  gap:7px;
}
.quote-primary-actions .qbtn {
  min-height:42px;
  padding:8px 9px;
  border-radius:9px;
  font-size:11px;
  font-weight:800;
}
.quote-primary-actions .qbtn.green { background:var(--brand); box-shadow:0 7px 18px rgba(31,95,209,.18); }
.quote-primary-actions #qshareBtn { background:var(--brand-2); }
.quote-primary-actions .ghost { background:var(--surface-2); color:var(--muted); }
.qcopy-ok { margin:7px 12px 0; }
.quote-section-cap { margin:11px 12px 5px; font-size:9px; letter-spacing:.2px; }
.quote-section-cap span { white-space:nowrap; }
.quote-export-actions { gap:7px; margin:0; padding:0 12px; }
.quote-export-actions .quote-export-btn {
  min-height:58px;
  justify-content:flex-start;
  gap:9px;
  padding:8px 10px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--surface-2);
  color:var(--fg);
  box-shadow:none;
}
.quote-export-btn .qbtn-icon { width:20px; height:20px; color:var(--brand); }
.quote-export-btn > span { display:flex; flex-direction:column; align-items:flex-start; gap:1px; }
.quote-export-btn b { font-size:11px; }
.quote-export-btn small { font-size:8px; color:var(--muted); font-weight:600; }
.quote-export-btn:hover { border-color:color-mix(in srgb,var(--brand) 35%,var(--line)); background:var(--brand-soft); }
.quote-export-settings { gap:5px; margin:8px 12px 0; }
.quote-setting-line { grid-template-columns:76px minmax(0,1fr); gap:7px; }
.quote-setting-label { padding-top:8px; font-size:8px; }
.quote-visible-settings {
  padding:7px 8px !important;
  border:1px solid var(--line);
  border-radius:9px !important;
  background:var(--surface-2);
}
.quote-visible-settings .qchk-cols { gap:5px 10px; }
.quote-visible-settings .qchk { font-size:9px; }
.quote-visible-settings .qchk input { width:14px; height:14px; }
.quote-secondary-actions { margin:0; padding:0 12px; }
.quote-secondary-actions .qbtn {
  min-height:38px;
  margin:0;
  border-radius:9px;
  background:var(--surface-2);
  color:var(--fg);
  font-size:10px;
}
.quote-clear-row { margin:7px 12px 11px; padding-top:7px; border-top:1px dashed var(--line); }
.quote-clear-row .qbtn {
  min-height:32px;
  padding:5px 8px;
  border:0;
  background:transparent;
  color:var(--muted);
  font-size:9px;
}
.quote-clear-row .qbtn .qbtn-icon { width:14px; height:14px; }
.quote-clear-row .qbtn:hover { background:color-mix(in srgb,var(--danger) 5%,transparent); color:var(--danger); }

.quote-empty-card {
  max-width:560px;
  margin:52px auto 0;
  padding:38px 28px 32px !important;
  text-align:center;
  border:1px solid color-mix(in srgb,var(--brand) 20%,var(--line));
  background:linear-gradient(145deg,var(--card),color-mix(in srgb,var(--brand-soft) 30%,var(--card)));
}
.quote-empty-icon {
  width:62px;
  height:62px;
  display:grid;
  place-items:center;
  margin:0 auto 14px;
  border-radius:18px;
  background:var(--brand-soft);
  color:var(--brand);
}
.quote-empty-icon .qbtn-icon { width:29px; height:29px; }
.quote-empty-kicker { color:var(--brand); font-size:9px; font-weight:900; letter-spacing:1.4px; }
.quote-empty-card h2 { margin:6px 0 0; font-size:21px; letter-spacing:-.5px; }
.quote-empty-card p { max-width:430px; margin:9px auto 0; color:var(--muted); font-size:11px; line-height:1.65; }
.quote-empty-action { width:auto; min-width:150px; margin:18px auto 0; padding:10px 16px; }

@media (max-width:900px) {
  .quote-workspace { grid-template-columns:1fr; gap:9px; }
  .qitem { grid-template-columns:minmax(0,1fr) 34px; align-items:start; }
  .qedit-grid { grid-column:1/-1; grid-row:2; grid-template-columns:repeat(4,minmax(0,1fr)); }
  .qitem-del { grid-column:2; grid-row:1; }
}

@media (max-width:619px) {
  .quote-page { padding-top:6px; }
  .quote-topbar { min-height:84px; padding:12px 12px; border-radius:13px; }
  .quote-topbar-title b { font-size:17px; }
  .quote-topbar-title > span:last-child { font-size:9px; }
  .quote-topbar-total { min-width:132px; padding:8px 0 8px 11px; }
  .quote-topbar-total > span { font-size:8px; }
  .quote-topbar-total b { font-size:21px; letter-spacing:-.6px; }
  .quote-topbar-total small { font-size:7px; }
  .quote-items-card { padding:8px !important; }
  .quote-list-head { min-height:38px; padding:0 1px 7px; }
  .quote-list-head > span { max-width:52%; font-size:8px; }
  .qitem { margin-top:6px; padding:8px; border-radius:9px; }
  .qitem-index { width:22px; height:22px; }
  .qitem-name { font-size:10px; }
  .qedit-grid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:6px; }
  .qedit-grid .qitem-qty,
  .qedit-grid .qitem-fee,
  .qedit-grid .qitem-uprice,
  .qedit-grid .qitem-ttl { height:38px; font-size:13px; }
  .quote-summarybar { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .quote-summarybar > div { border-bottom:1px solid var(--line); }
  .quote-summarybar > div:nth-child(2),
  .quote-summarybar > div:nth-child(4),
  .quote-summarybar > div:nth-child(6) { border-right:0; }
  .quote-summarybar > div:nth-child(3),
  .quote-summarybar > div:nth-child(4) { border-bottom:0; }
  .quote-summarybar > div:nth-child(5),
  .quote-summarybar > div:nth-child(6) { border-bottom:0; }
  .quote-summarybar .grand b { font-size:15px; }
  .quote-settings-head,
  .quote-action-head { min-height:58px; padding:9px 10px 8px; }
  .quote-settings-body { padding:4px 10px 10px; }
  .quote-settings-body .markup-row { grid-template-columns:76px 72px minmax(64px,1fr); gap:5px; }
  .quote-settings-body .qsel,
  .quote-settings-body .qinput { min-height:38px; height:38px; font-size:12px; }
  .quote-primary-actions { grid-template-columns:1fr 1fr; padding:9px 9px 0; }
  .quote-primary-actions .qbtn:first-child { grid-column:1/-1; min-height:36px; }
  .quote-primary-actions .qbtn:not(:first-child) { min-height:44px; font-size:11px; }
  .qcopy-ok { margin-left:9px; margin-right:9px; }
  .quote-section-cap { margin-left:9px; margin-right:9px; }
  .quote-export-actions { padding:0 9px; gap:5px; }
  .quote-export-actions .quote-export-btn { min-height:55px; padding:7px; gap:6px; }
  .quote-export-btn .qbtn-icon { width:18px; height:18px; }
  .quote-export-btn b { font-size:10px; }
  .quote-export-btn small { font-size:7px; }
  .quote-export-settings { margin-left:9px; margin-right:9px; }
  .quote-setting-line { grid-template-columns:1fr; gap:2px; }
  .quote-setting-label { padding-top:1px; }
  .quote-visible-settings .qchk-cols { gap:6px 9px; }
  .quote-secondary-actions { padding:0 9px; }
  .quote-secondary-actions .qbtn { min-height:40px; }
  .quote-clear-row { margin-left:9px; margin-right:9px; }
  .quote-empty-card { margin-top:26px; padding:30px 18px 26px !important; }
}

@media (max-width:380px) {
  .quote-eyebrow { display:none; }
  .quote-topbar { gap:7px; }
  .quote-topbar-title b { font-size:15px; }
  .quote-topbar-title > span:last-child { font-size:8px; }
  .quote-topbar-total { min-width:118px; }
  .quote-topbar-total b { font-size:18px; }
  .quote-export-actions .quote-export-btn { flex-direction:column; justify-content:center; gap:4px; }
  .quote-export-btn > span { align-items:center; }
}

/* ========================================================================== */
/* v10 Workspace UI — 2026 full redesign                                      */
/* ========================================================================== */
:root {
  --bg: #f3f6fb;
  --card: #ffffff;
  --fg: #152033;
  --muted: #748096;
  --line: #dde4ee;
  --brand: #1f5fd1;
  --brand-deep: #164cae;
  --brand-soft: #eaf1ff;
  --chip: #f0f3f8;
  --chip-on: #1f5fd1;
  --ok: #16845b;
  --warn: #b96b16;
  --danger: #d7484f;
  --surface-2: #f7f9fc;
  --shadow-sm: 0 1px 2px rgba(22,32,51,.035), 0 7px 20px rgba(22,32,51,.045);
  --shadow: 0 2px 6px rgba(22,32,51,.05), 0 18px 50px rgba(22,32,51,.07);
}
body.dark {
  --bg: #0b1220;
  --card: #121d2f;
  --fg: #eef3fb;
  --muted: #91a0b6;
  --line: #29384e;
  --brand: #6ea5ff;
  --brand-deep: #9fc2ff;
  --brand-soft: #192f52;
  --chip: #1a283c;
  --chip-on: #3479e8;
  --surface-2: #101a2a;
  --shadow-sm: 0 1px 3px rgba(0,0,0,.18), 0 8px 24px rgba(0,0,0,.16);
  --shadow: 0 2px 8px rgba(0,0,0,.22), 0 18px 54px rgba(0,0,0,.24);
}
@media (prefers-color-scheme: dark) {
  body:not(.light) {
    --bg: #0b1220;
    --card: #121d2f;
    --fg: #eef3fb;
    --muted: #91a0b6;
    --line: #29384e;
    --brand: #6ea5ff;
    --brand-deep: #9fc2ff;
    --brand-soft: #192f52;
    --chip: #1a283c;
    --chip-on: #3479e8;
    --surface-2: #101a2a;
  }
}

html { background: var(--bg); }
body {
  min-height: 100vh;
  background:
    radial-gradient(circle at 12% -5%, rgba(52,121,232,.08), transparent 32rem),
    var(--bg);
  letter-spacing: -.01em;
}
.wrap { max-width: 1240px; padding: 10px 22px 118px; }
.loading { min-height: 48vh; display:grid; place-items:center; color:var(--muted); font-weight:700; }

/* App chrome */
.app-header {
  position: sticky;
  top: 0;
  z-index: 80;
  min-height: 66px;
  margin: 0 -10px 12px;
  padding: 8px 10px;
  border-bottom: 1px solid color-mix(in srgb, var(--line) 82%, transparent);
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(18px) saturate(1.2);
  -webkit-backdrop-filter: blur(18px) saturate(1.2);
}
.header-brand-group { display:flex; align-items:center; gap:10px; min-width:0; }
.brandmark {
  width: 42px; height:42px; border-radius:12px;
  box-shadow: 0 7px 18px rgba(31,95,209,.16);
}
.brandcopy { min-width:0; }
.brandcopy h1 { margin:0; font-size:17px; font-weight:900; line-height:1.18; letter-spacing:-.3px; }
.brand-sub { margin-top:3px; color:var(--muted); font-size:10px; letter-spacing:.25px; }
.header-status { display:flex; gap:5px; align-items:center; margin-left:6px; }
.header-status .net,
.header-status .ver {
  border:1px solid var(--line); background:var(--card); color:var(--muted);
  border-radius:999px; padding:3px 7px; font-size:9px; font-weight:750;
}
.header-tools { display:flex; align-items:center; gap:5px; }
.iconbtn {
  width:auto; min-width:42px; height:42px; padding:0 10px;
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  border:1px solid var(--line); border-radius:11px; background:var(--card); color:var(--fg);
  box-shadow:0 1px 2px rgba(22,32,51,.02);
  transition:transform .15s ease, border-color .15s ease, background .15s ease;
}
.iconbtn:hover { border-color:color-mix(in srgb,var(--brand) 32%,var(--line)); background:var(--surface-2); }
.iconbtn::after { content:attr(data-label); font-size:10px; font-weight:750; color:var(--muted); white-space:nowrap; }
.iconbtn.back-icon { width:38px; min-width:38px; padding:0; }
.iconbtn.back-icon::after { display:none; }
.ui-icon { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.qwrap { position:relative; }
.qbadge { top:-5px; right:-5px; }
.banner { z-index:100; }

/* Shared surface language */
.card {
  border:1px solid var(--line);
  border-radius:16px;
  background:var(--card);
  box-shadow:var(--shadow-sm);
}
.qbtn {
  border-radius:11px;
  min-height:44px;
  font-weight:800;
  letter-spacing:-.1px;
}
.qbtn:not(.ghost) { box-shadow:0 8px 20px rgba(31,95,209,.13); }
.qbtn.ghost { background:var(--surface-2); color:var(--muted); border:1px solid var(--line); }
input, select, textarea { font-family:inherit; }
input:focus, select:focus, textarea:focus { outline:none; }

/* Home — command center */
.home-hero {
  display:grid;
  grid-template-columns:minmax(0,1.45fr) minmax(260px,.55fr);
  gap:18px;
  margin: 6px 0 24px;
  padding:26px;
  overflow:hidden;
  border:1px solid color-mix(in srgb,var(--brand) 13%,var(--line));
  border-radius:22px;
  background:
    linear-gradient(135deg, color-mix(in srgb,var(--brand-soft) 52%,var(--card)), var(--card) 58%),
    var(--card);
  box-shadow:var(--shadow);
}
body.dark .home-hero { background:linear-gradient(135deg,#14243c,var(--card) 58%); }
.home-hero-main { min-width:0; }
.eyebrow,
.section-kicker {
  color:var(--brand); font-size:9px; line-height:1; font-weight:900; letter-spacing:1.55px;
}
.home-title { margin-top:10px; font-size:clamp(26px,3.1vw,42px); line-height:1.08; font-weight:950; letter-spacing:-1.3px; }
.home-desc { max-width:660px; margin-top:10px; color:var(--muted); font-size:13px; line-height:1.65; }
.search-shell {
  height:54px;
  margin-top:22px;
  padding:0 12px 0 15px;
  display:flex; align-items:center; gap:10px;
  border:1px solid color-mix(in srgb,var(--brand) 22%,var(--line));
  border-radius:14px;
  background:var(--card);
  box-shadow:0 7px 24px rgba(31,95,209,.07);
}
.search-svg { width:19px; height:19px; flex:0 0 auto; fill:none; stroke:var(--muted); stroke-width:1.9; stroke-linecap:round; }
.search { min-width:0; flex:1; border:0!important; box-shadow:none!important; background:transparent!important; color:var(--fg); font-size:15px; }
.search::placeholder { color:color-mix(in srgb,var(--muted) 82%,transparent); }
.search-kbd { padding:4px 7px; border:1px solid var(--line); border-radius:7px; background:var(--surface-2); color:var(--muted); font-size:9px; font-weight:750; }
.home-overview {
  align-self:stretch;
  display:flex; flex-direction:column; justify-content:space-between;
  padding:17px;
  border:1px solid color-mix(in srgb,var(--brand) 14%,var(--line));
  border-radius:16px;
  background:color-mix(in srgb,var(--card) 78%,var(--brand-soft));
}
.overview-label { color:var(--muted); font-size:10px; font-weight:800; }
.overview-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:7px; margin:10px 0; }
.overview-grid > div { min-width:0; padding:12px 7px; border:1px solid var(--line); border-radius:12px; background:var(--card); text-align:center; }
.overview-grid span { display:block; color:var(--muted); font-size:8px; }
.overview-grid b { display:block; margin-top:4px; font-size:20px; line-height:1; font-variant-numeric:tabular-nums; }
.overview-grid .quote-stat b { color:var(--brand); }
.overview-note { color:var(--muted); font-size:9px; line-height:1.45; }
.section-head { margin:0 2px 12px; align-items:flex-end; }
.section-kicker { margin-bottom:6px; }
.section-title { font-size:20px; line-height:1.15; font-weight:900; letter-spacing:-.45px; }
.section-desc { margin-top:5px; font-size:10px; }
.section-count { padding:5px 8px; border:1px solid var(--line); border-radius:999px; background:var(--card); font-size:9px; }
.matgrid { grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; }
.matcard {
  min-height:110px;
  padding:15px 35px 15px 15px;
  border-radius:15px;
  box-shadow:none;
  background:var(--card);
}
.matcard:hover { transform:translateY(-2px); border-color:color-mix(in srgb,var(--brand) 28%,var(--line)); box-shadow:var(--shadow-sm); }
.mat-accent { height:46px; width:4px; }
.mat-code { font-size:17px; font-weight:950; }
.mat-cn { margin-top:7px; font-size:10px; }
.mat-badge { margin-left:auto; font-size:8px; background:var(--surface-2); }
.favstar { color:#a9b3c4; }
.favstar.on { color:#e6a31f; }
.mat-arrow { right:12px; bottom:11px; }
.custom-entry { background:linear-gradient(145deg,var(--brand-soft),var(--card)); }

/* Calculator — split editor / quote inspector */
.calc-layout { display:grid; grid-template-columns:minmax(360px,.86fr) minmax(0,1.14fr); gap:14px; align-items:start; }
.calc-left, .calc-right { min-width:0; }
.calc-left { position:sticky; top:82px; }
.calc-flow { margin:2px 0 10px; }
.calc-flow span { color:var(--muted); font-size:9px; font-weight:750; }
.curmat { margin-bottom:10px; padding:13px 14px 13px 20px; border-radius:14px; box-shadow:none; }
.cur-kicker { font-size:8px; }
.card.curmat .matname { font-size:17px; }
.curmat .crow { margin-top:8px; }
.curmat .crow label { font-size:9px; }
.curmat .crow input { height:32px; }
.calc-step { margin-bottom:10px; border-radius:14px; box-shadow:none; }
.step-label { margin-bottom:10px; display:flex; align-items:center; gap:8px; }
.step-label > span { width:22px; height:22px; display:grid; place-items:center; border-radius:7px; background:var(--brand-soft); color:var(--brand); font-size:8px; font-weight:900; }
.step-label > b { font-size:12px; }
.shape-card { padding:12px; }
.seg { border:1px solid var(--line); background:var(--surface-2); }
.seg-item { min-height:38px; display:grid; place-items:center; }
.seg-item.on { color:var(--brand); border:1px solid color-mix(in srgb,var(--brand) 18%,var(--line)); box-shadow:var(--shadow-sm); }
.board-size-card { padding:12px; }
.board-size-card .row { gap:7px; }
.board-size-card .field input,
.variant-search,
.tier-qty input,
.qty-edit-input { min-height:42px; border:1px solid var(--line); border-radius:10px; background:var(--surface-2); }
.board-size-card .field input { padding:7px 9px; font-size:15px; }
.quick-specs { gap:5px; }
.quick-spec { min-height:29px; padding:5px 8px; border-radius:8px; font-size:9px; background:var(--surface-2); }
.spec-fav-row { gap:5px; }
.spec-fav-btn { border-radius:8px; font-size:8px; }
.chip { border-radius:8px; font-size:10px; }

.result-card.compact-result {
  position:sticky;
  top:82px;
  z-index:20;
  margin-bottom:10px;
  border:1px solid color-mix(in srgb,var(--brand) 24%,var(--line));
  border-radius:16px;
  box-shadow:0 12px 36px rgba(31,95,209,.10);
}
.compact-result-top { min-height:42px; padding:8px 11px; background:linear-gradient(90deg,var(--brand-soft),var(--card) 68%); }
.compact-result-title b { font-size:14px; }
.result-kicker { font-size:8px; }
.result-tier { padding:3px 7px; font-size:9px; }
.compact-result-meta { min-height:34px; padding:7px 11px; font-size:10px; }
.compact-result-grid { min-height:84px; grid-template-columns:.72fr 1.08fr 1fr 1.25fr; }
.compact-metric { padding:12px 9px; border-right:1px solid var(--line); }
.compact-metric:last-child { border-right:0; }
.compact-metric span { color:var(--muted); font-size:8px; }
.compact-metric b { margin-top:5px; font-size:14px; }
.compact-metric.price b { color:var(--fg); }
.compact-metric.total { background:color-mix(in srgb,var(--brand-soft) 42%,var(--card)); }
.compact-metric.total b { color:var(--brand); font-size:22px; letter-spacing:-.7px; }
.compact-metric small { font-size:7px; }
.model-card { padding:12px; }
.model-card .variant-search { margin:0 0 8px; padding:8px 11px; }
.model-hint { font-size:9px!important; }
/* 03 卡：有条目但当前直径/长度不在其供货规格内的供应商提醒（v10.0.29） */
.hint.nomatch-tip { color: var(--warn); margin-bottom:5px; }
/* 需要用户做选择、但并非错误的提示（如"同规格命中多档、价格不同，已全部列出"）。
   刻意不用 .errorbox 的红色：红框会被读成"报不了价/这家不行"，而这里价格全都列出来了。 */
.notice-box { border-left:4px solid var(--brand); background:var(--brand-soft); color:var(--fg); font-size:clamp(11px, 12px + 0.25vw, 14px); }
/* 型号备注（供货规矩 / 原表规格限制）——用户铁律：只注明、照常算价、绝不拦截。
   中性灰 --muted 呈现，绝不用警示橙/红：那两种颜色会被读成"这家不能报"。
   noteClass 命中时仍保留语义色（加价=橙、限制=蓝），与档位备注 chip 口径一致。 */
.entry-note { margin-top:5px; font-size:clamp(11px, 12px + 0.2vw, 13px); line-height:1.55; color:var(--muted); word-break:break-word; }
.entry-note.warn { color:var(--warn); }
.entry-note.limit { color:#1565c0; }
body.dark .entry-note.limit { color:#90caf9; }
/* v0.0.5b：按用户要求备注一律整段直接显示，不折叠（<details> 相关样式已移除）。 */
/* 「该档无价」标记：这一档该供应商不接（不零切 / 不含切割费 / 仅大直径可零切…）。
   只是这一档不出单价，不是不报这家——所以用中性灰 chip，绝不用红/橙。 */
.variant-price-col.noprice .variant-price-values { opacity:.5; }
.variant-price-col.noprice .variant-price-values .unit,
.variant-price-col.noprice .variant-price-values .total { color:var(--muted); }
.price-rank.noprice { background:var(--chip); color:var(--muted); border:1px solid var(--line); }
/* 供应商起订规矩（一刀最小长度/最小重量等）只作备注标明，不拦截报价（v10.0.30） */
.variants { grid-template-columns:repeat(2,minmax(0,1fr)); gap:7px; }
.variant { padding:10px; border-radius:11px; box-shadow:none; cursor:pointer; }
.variant:hover { border-color:color-mix(in srgb,var(--brand) 28%,var(--line)); }
.variant.on { border-color:var(--brand); box-shadow:inset 0 0 0 1px var(--brand); }
.vhead { gap:5px; }
.vname { font-size:11px; }
.vsup, .density-tag { font-size:8px; }
.variant-prices { gap:4px; }
.variant-price { padding:5px 4px; border-radius:7px; }
.variant-price span, .variant-price small { font-size:7px; }
.variant-price b { font-size:10px; }
.status-card, .errorbox, .surcharge-card { border-radius:12px; box-shadow:none; }
.data-status { margin-top:9px; }

.calc-action-bar {
  max-width:1240px;
  padding:8px 22px calc(8px + env(safe-area-inset-bottom,0));
  border-top:1px solid var(--line);
  background:color-mix(in srgb,var(--card) 92%,transparent);
  box-shadow:0 -8px 28px rgba(22,32,51,.08);
}
.calc-action-bar .qbtn { min-height:44px; }
.calc-action-bar .qbtn:first-child:not(.ghost) { flex:1.8; }
.action-bar-spacer { height:68px; }

/* Quote workbench — stronger hierarchy, same controls */
.quote-page { padding-top:3px; }
.quote-topbar {
  min-height:104px;
  padding:17px 18px;
  border:1px solid color-mix(in srgb,var(--brand) 16%,var(--line));
  border-radius:18px;
  background:linear-gradient(130deg,color-mix(in srgb,var(--brand-soft) 62%,var(--card)),var(--card) 58%);
  box-shadow:var(--shadow);
}
.quote-topbar-title b { font-size:23px; font-weight:950; }
.quote-topbar-total { min-width:205px; }
.quote-topbar-total b { color:var(--brand); font-size:30px; font-weight:950; }
.quote-items-card { margin-top:12px; padding:14px!important; }
.quote-list-head { padding:2px 2px 11px; }
.quote-list-head b { font-size:14px; }
.qitem { position:relative; padding:12px 36px 12px 2px; border-bottom:1px solid var(--line); }
.qitem:last-of-type { border-bottom:0; }
.qitem-index { width:22px; height:22px; border-radius:7px; background:var(--surface-2); display:inline-grid; place-items:center; color:var(--muted); font-size:8px; }
.qitem-supplier { background:var(--brand-soft); color:var(--brand); }
.qedit-grid { grid-template-columns:repeat(7,minmax(0,1fr)); gap:6px; }
.qedit-cell > span { font-size:8px; }
.qedit-box { min-height:40px; border-radius:9px; background:var(--surface-2); }
.qedit-box input { min-height:38px; }
.qitem-del { position:absolute; right:0; top:12px; }
.quote-summarybar { border:1px solid var(--line); border-radius:12px; overflow:hidden; }
.quote-summarybar .grand { background:var(--brand-soft); }
.quote-summarybar .grand b { color:var(--brand); }
.quote-workspace { grid-template-columns:minmax(340px,.86fr) minmax(0,1.14fr); gap:10px; }
.quote-settings-card, .quote-action-card { border-radius:14px; box-shadow:none; }
.quote-settings-head, .quote-action-head { background:var(--surface-2); }
.quote-settings-body .qsel,
.quote-settings-body .qinput { background:var(--card); }
.quote-primary-actions .qbtn { min-height:44px; }
.quote-export-actions .quote-export-btn { min-height:58px; }
.quote-visible-settings { background:var(--surface-2); }
.quote-empty-card { border-radius:20px; box-shadow:var(--shadow); }

/* PWA center */
.pwa-panel { border-radius:20px 20px 0 0; border-color:var(--line); background:var(--card); }
.pwa-state-card { border:1px solid var(--line); background:var(--surface-2); }
.pwa-primary, .pwa-secondary { border-radius:11px; min-height:44px; }

/* Secondary cards */
.wechat { border:0; box-shadow:none; }
.foot { margin-top:18px; }

@media (max-width: 1040px) {
  .matgrid { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .calc-layout { grid-template-columns:minmax(330px,.92fr) minmax(0,1.08fr); }
  .iconbtn::after { display:none; }
  .iconbtn { width:42px; min-width:42px; padding:0; }
}

@media (max-width: 820px) {
  .wrap { padding-left:14px; padding-right:14px; }
  .home-hero { grid-template-columns:1fr; padding:20px; }
  .home-overview { display:grid; grid-template-columns:auto 1fr auto; gap:12px; align-items:center; }
  .overview-grid { margin:0; }
  .overview-note { text-align:right; }
  .matgrid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .calc-layout { display:block; }
  .calc-left { position:static; }
  .result-card.compact-result { top:68px; }
  .quote-workspace { grid-template-columns:1fr; }
}

@media (max-width: 620px) {
  body { background:var(--bg); }
  .wrap { padding:6px 10px 116px; }
  .app-header {
    min-height:54px; margin:0 -10px 8px; padding:5px 10px 7px;
    background:color-mix(in srgb,var(--bg) 94%,transparent);
  }
  .header-brand-group { gap:7px; }
  .brandmark { width:34px; height:34px; border-radius:9px; }
  .brandcopy h1 { font-size:14px; }
  .brand-sub, .header-status { display:none; }
  .header-tools { gap:3px; }
  .iconbtn { width:35px; min-width:35px; height:35px; border-radius:9px; }
  .ui-icon { width:17px; height:17px; }

  .home-hero { margin:5px 0 18px; padding:17px 14px 14px; gap:14px; border-radius:17px; }
  .home-title { margin-top:8px; font-size:27px; letter-spacing:-1px; }
  .home-desc { margin-top:8px; font-size:11px; }
  .search-shell { height:49px; margin-top:16px; border-radius:12px; }
  .search { font-size:14px; }
  .search-kbd { display:none; }
  .home-overview { grid-template-columns:1fr; padding:10px; gap:7px; }
  .overview-label, .overview-note { display:none; }
  .overview-grid { gap:5px; }
  .overview-grid > div { padding:9px 4px; border-radius:9px; }
  .overview-grid b { font-size:17px; }
  .section-head { align-items:flex-end; margin-bottom:9px; }
  .section-kicker { font-size:7px; }
  .section-title { font-size:17px; }
  .section-desc { font-size:9px; }
  .section-count { font-size:8px; }
  .matgrid { gap:7px; }
  .matcard { min-height:92px; padding:12px 28px 12px 11px; border-radius:12px; }
  .mat-accent { height:36px; }
  .mat-code { font-size:15px; }
  .mat-cn { margin-top:5px; font-size:9px; }
  .mat-badge { display:none; }

  .calc-flow { margin-top:4px; }
  .curmat, .calc-step, .result-card.compact-result, .model-card { border-radius:12px; }
  .calc-left { position:static; }
  .result-card.compact-result { position:relative; top:auto; }
  .compact-result-grid { min-height:72px; grid-template-columns:repeat(2,1fr); }
  .compact-metric { padding:9px 8px; border-bottom:1px solid var(--line); }
  .compact-metric:nth-child(2) { border-right:0; }
  .compact-metric:nth-child(3), .compact-metric:nth-child(4) { border-bottom:0; }
  .compact-metric.total b { font-size:20px; }
  .variants { grid-template-columns:1fr; }
  .variant { padding:9px; }
  .calc-action-bar { display:grid; grid-template-columns:1fr 1fr; gap:6px; padding:7px 10px calc(7px + env(safe-area-inset-bottom,0)); }
  .calc-action-bar .qbtn:first-child:not(.ghost) { grid-column:1/-1; min-height:48px; }
  .calc-action-bar .qbtn.ghost { min-height:38px; font-size:10px; }

  .quote-topbar { min-height:92px; padding:13px 12px; border-radius:14px; }
  .quote-topbar-title b { font-size:17px; }
  .quote-topbar-total { min-width:130px; }
  .quote-topbar-total b { font-size:21px; }
  .quote-items-card { padding:9px!important; }
  .qitem { padding:10px 30px 10px 0; }
  .qedit-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .quote-summarybar { grid-template-columns:repeat(2,1fr); }
  .quote-settings-card, .quote-action-card { border-radius:12px; }
}

@media (max-width: 380px) {
  .brandcopy h1 { font-size:13px; }
  .header-tools { gap:2px; }
  .iconbtn { width:32px; min-width:32px; height:32px; }
  .home-title { font-size:24px; }
  .matcard { min-height:86px; }
  .mat-code { font-size:14px; }
  .board-size-card .row { flex-wrap:wrap; }
  .board-size-card .row > .field { flex:1 1 calc(50% - 4px); }
}

/* ===== v10.0.00 density refinement — compact industrial workbench ===== */
/* Keep the v10 architecture/version; reduce decorative whitespace and surface size. */
.wrap { max-width:1240px; padding-top:8px; }
.app-header { min-height:58px; margin-bottom:8px; padding-top:6px; padding-bottom:6px; }
.brandmark { width:36px; height:36px; border-radius:10px; }
.iconbtn { min-width:38px; height:38px; padding:0 8px; border-radius:9px; }
.ui-icon { width:17px; height:17px; }
.card { border-radius:12px; }

/* Home: search remains primary, but hero no longer consumes a full screen band. */
.home-hero {
  grid-template-columns:minmax(0,1.7fr) minmax(250px,.55fr);
  gap:12px;
  margin:4px 0 9px;
  padding:15px 16px;
  border-radius:15px;
  box-shadow:var(--shadow-sm);
}
.home-title { margin-top:6px; font-size:clamp(23px,2.5vw,32px); letter-spacing:-.9px; }
.home-desc { margin-top:5px; font-size:11px; line-height:1.45; }
.search-shell { height:42px; margin-top:11px; padding:0 10px 0 12px; border-radius:10px; box-shadow:none; }
.search { font-size:13px; }
.home-overview { padding:10px; border-radius:11px; }
.overview-grid { gap:5px; margin:6px 0; }
.overview-grid > div { padding:7px 4px; border-radius:8px; }
.overview-grid b { margin-top:2px; font-size:16px; }
.overview-note, .overview-label { font-size:8px; }
.section-head { margin:9px 2px 7px; }
.section-kicker { margin-bottom:4px; font-size:8px; }
.section-title { font-size:17px; }
.section-desc { margin-top:3px; font-size:9px; }
.section-count { padding:4px 7px; font-size:8px; }

/* Material library: high-density cards. */
.matgrid { grid-template-columns:repeat(5,minmax(0,1fr)); gap:7px; }
.matcard {
  min-height:66px;
  padding:8px 27px 8px 9px;
  gap:7px;
  border-radius:10px;
}
.matcard:hover { transform:none; }
.mat-accent { width:3px; height:30px; }
.mat-code { font-size:13px; line-height:1.12; }
.mat-cn { margin-top:3px; font-size:8px; line-height:1.25; }
.mat-badge { font-size:7px; padding:2px 4px; }
.mat-arrow { right:8px; bottom:7px; font-size:15px; }
.favstar { top:5px; right:6px; font-size:13px; }

/* WeChat: compact contact bar at the bottom of the home flow. */
.wechat {
  margin:10px 0 8px;
  padding:7px 10px;
  min-height:60px;
  border-radius:10px;
  gap:10px;
  background:linear-gradient(135deg,#117d4e,#19975e);
}
.wechat .wqrimg { width:48px; height:48px; border-radius:8px; }
.wechat .winfo {
  flex:1;
  min-width:0;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
}
.wechat .wcopyblock { min-width:0; }
.wechat .whead { font-size:14px; line-height:1.2; font-weight:800; }
.wechat .wcopy { margin-top:3px; font-size:11px; line-height:1.3; opacity:.94; }
.wechat .wrow { flex:0 0 auto; margin:0; gap:7px; }
.wechat .wlabel { font-size:10px; opacity:.82; }
.wechat .wid { font-size:16px; line-height:1; font-weight:850; letter-spacing:.35px; }
.wechat .wcta { margin-left:2px; padding:5px 8px; border:1px solid rgba(255,255,255,.34); border-radius:999px; font-size:10px; font-weight:800; white-space:nowrap; }

/* Calculator: retain split workflow but tighten all supporting surfaces. */
.calc-layout { grid-template-columns:minmax(335px,.82fr) minmax(0,1.18fr); gap:9px; }
.calc-left { top:72px; }
.calc-flow { margin:0 0 6px; }
.curmat { margin-bottom:6px; padding:9px 10px 9px 16px; border-radius:10px; }
.card.curmat .matname { font-size:15px; }
.curmat .crow { margin-top:5px; }
.calc-step { margin-bottom:6px; border-radius:10px; }
.step-label { margin-bottom:6px; gap:6px; }
.step-label > span { width:19px; height:19px; border-radius:6px; }
.step-label > b { font-size:11px; }
.shape-card, .board-size-card, .model-card { padding:9px; }
.seg-item { min-height:33px; font-size:11px; }
.board-size-card .field input,
.variant-search,
.tier-qty input,
.qty-edit-input { min-height:35px; border-radius:8px; }
.board-size-card .field input { padding:5px 7px; font-size:13px; }
.quick-spec { min-height:25px; padding:4px 6px; border-radius:7px; font-size:8px; }
.result-card.compact-result { top:72px; margin-bottom:6px; border-radius:11px; box-shadow:var(--shadow-sm); }
.compact-result-top { min-height:36px; padding:6px 9px; }
.compact-result-meta { min-height:29px; padding:5px 9px; }
.compact-result-grid { min-height:66px; }
.compact-metric { padding:8px 7px; }
.compact-metric b { margin-top:3px; font-size:12px; }
.compact-metric.total b { font-size:19px; }
.model-card .variant-search { margin-bottom:6px; padding:6px 9px; }
.variants { gap:5px; }
.variant { padding:7px; border-radius:9px; }
.variant-price { padding:4px 3px; }

/* Quote page: less showcase, more editable quotation sheet. */
.quote-topbar { min-height:78px; padding:11px 12px; border-radius:12px; box-shadow:var(--shadow-sm); }
.quote-topbar-title b { font-size:19px; }
.quote-topbar-total { min-width:165px; }
.quote-topbar-total b { font-size:24px; }
.quote-items-card { margin-top:7px; padding:9px!important; }
.quote-list-head { padding-bottom:7px; }
.qitem { padding-top:8px; padding-bottom:8px; }
.qedit-box { min-height:35px; border-radius:8px; }
.qedit-box input { min-height:33px; }
.quote-workspace { gap:7px; }
.quote-settings-card, .quote-action-card { border-radius:10px; }
.quote-primary-actions .qbtn { min-height:38px; }
.quote-export-actions .quote-export-btn { min-height:48px; }

@media (max-width:1040px) {
  .matgrid { grid-template-columns:repeat(4,minmax(0,1fr)); }
}

@media (max-width:820px) {
  .home-hero { grid-template-columns:1fr; padding:13px; }
  .home-overview { grid-template-columns:auto 1fr auto; }
  .matgrid { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .calc-layout { display:block; }
}

@media (max-width:620px) {
  .wrap { padding:5px 8px 108px; }
  .app-header { min-height:48px; margin:0 -8px 6px; padding:4px 8px 5px; }
  .brandmark { width:31px; height:31px; border-radius:8px; }
  .iconbtn { width:33px; min-width:33px; height:33px; padding:0; border-radius:8px; }
  .home-hero { margin:3px 0 7px; padding:10px; gap:8px; border-radius:11px; }
  .eyebrow { font-size:7px; }
  .home-title { margin-top:4px; font-size:21px; letter-spacing:-.6px; }
  .home-desc { display:none; }
  .search-shell { height:38px; margin-top:8px; border-radius:9px; }
  .home-overview { display:none; }
  .wechat { min-height:58px; margin:9px 0 7px; padding:7px 8px; gap:8px; }
  .wechat .wqrimg { width:44px; height:44px; }
  .wechat .winfo { display:block; }
  .wechat .whead { font-size:13px; }
  .wechat .wcopy { margin-top:2px; font-size:10px; line-height:1.25; }
  .wechat .wrow { margin-top:4px; gap:5px; }
  .wechat .wlabel { font-size:9px; }
  .wechat .wid { font-size:14px; }
  .wechat .wcta { padding:3px 6px; font-size:9px; }
  .section-head { margin:7px 1px 6px; }
  .section-title { font-size:15px; }
  .section-desc { display:none; }
  .matgrid { grid-template-columns:repeat(2,minmax(0,1fr)); gap:5px; }
  .matcard { min-height:55px; padding:6px 23px 6px 7px; border-radius:8px; gap:5px; }
  .mat-accent { height:25px; }
  .mat-code { font-size:12px; }
  .mat-cn { margin-top:2px; font-size:8px; }
  .favstar { top:3px; right:4px; font-size:12px; }
  .mat-arrow { right:6px; bottom:5px; }

  .curmat { padding:8px 9px 8px 14px; }
  .calc-step { margin-bottom:5px; }
  .shape-card, .board-size-card, .model-card { padding:8px; }
  .compact-result-grid { min-height:60px; }
  .compact-metric { padding:7px 6px; }
  .compact-metric.total b { font-size:18px; }
  .variant { padding:7px; }

  .quote-topbar { min-height:68px; padding:9px; }
  .quote-topbar-title b { font-size:16px; }
  .quote-topbar-total { min-width:112px; }
  .quote-topbar-total b { font-size:20px; }
  .quote-items-card { padding:7px!important; }
}

@media (max-width:380px) {
  .matcard { min-height:52px; }
  .wechat .wcta { padding:2px 5px; font-size:8px; }
}


/* WeChat copy: one sentence only. */
.wechat .winfo { display:block; }
.wechat .wline { font-size:14px; line-height:1.45; font-weight:650; }
.wechat .wline .wid { font-size:16px; font-weight:850; letter-spacing:.25px; }
@media (max-width: 640px) {
  .wechat .wline { font-size:13px; line-height:1.4; }
  .wechat .wline .wid { font-size:14px; }
}

/* v10 型号卡：三档 × 三行价格矩阵（整板/一刀/零切 × 工厂价/单价/总价） */
.variant-price-matrix {
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  margin-top:7px;
  border:1px solid var(--line);
  border-radius:10px;
  overflow:hidden;
  background:var(--card);
  font-variant-numeric:tabular-nums;
}
.variant-price-col {
  min-width:0;
  text-align:center;
  border-right:1px solid var(--line);
  background:var(--surface-2);
}
.variant-price-col:last-child { border-right:0; }
.variant-price-col.low { background:rgba(239,68,68,.065); }
.variant-price-col.high { background:rgba(245,158,11,.085); }
.variant-price-col.active { box-shadow:inset 0 3px 0 var(--brand); }
.variant-price-col.unavailable { opacity:.58; }
/* 有价的档位列可点击切换计价档位（整板 / 一刀 / 零切） */
.variant-price-col[data-tierset] { cursor:pointer; }
.variant-price-col[data-tierset]:hover .variant-price-head { background:var(--brand-soft); }
.variant-price-col[data-tierset]:hover .variant-price-head > b { color:var(--brand); }
.variant-price-head {
  min-height:30px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:5px;
  padding:5px 4px 4px;
  border-bottom:1px solid var(--line);
  background:rgba(255,255,255,.22);
  white-space:nowrap;
}
body.dark .variant-price-head { background:rgba(255,255,255,.025); }
.variant-price-head > b { font-size:12px; line-height:1; font-weight:850; color:var(--fg); }
.price-rank {
  display:inline-flex;
  align-items:center;
  min-height:17px;
  padding:1px 4px;
  border-radius:4px;
  color:#fff;
  font-size:9px;
  line-height:1;
  font-weight:850;
}
.price-rank.low { background:#ef4444; }
.price-rank.high { background:#f59e0b; }
.variant-price-values { display:grid; grid-template-rows:repeat(3,minmax(24px,auto)); }
.variant-price-values > span {
  display:flex;
  align-items:center;
  justify-content:center;
  min-width:0;
  padding:4px 2px;
  font-size:12px;
  line-height:1.15;
  font-weight:800;
  color:#ef4444;
  white-space:nowrap;
}
.variant-price-values > span.factory { color:var(--muted); font-weight:750; }
.variant-price-col.low .variant-price-values > span.factory { color:#ef4444; }
.variant-price-values > span.total { font-weight:900; }
.variant-extra-prices { margin-top:5px; }
@media (max-width:760px) {
  .variant-price-matrix { margin-top:6px; border-radius:9px; }
  .variant-price-head { min-height:28px; gap:4px; padding:4px 2px; }
  .variant-price-head > b { font-size:12px; }
  .price-rank { min-height:16px; padding:1px 3px; font-size:8px; }
  .variant-price-values { grid-template-rows:repeat(3,minmax(23px,auto)); }
  .variant-price-values > span { padding:3px 1px; font-size:12px; }
}
@media (max-width:370px) {
  .variant-price-head > b { font-size:11px; }
  .variant-price-values > span { font-size:11px; }
}

/* ===== v10 Desktop Adaptive Typography =====
   电脑 / PWA 独立窗口自动放大文字；手机端继续保持紧凑。
   以视口宽度渐进放大，并设置上限，避免 2K / 4K 屏字号过小或过大。 */
@media (min-width: 900px) {
  body { font-size: clamp(14px, calc(11.5px + .20vw), 17px); }
  .wrap { max-width: clamp(820px, 66vw, 1040px); padding-left:18px; padding-right:18px; }

  .app-header { min-height:46px; gap:8px; padding-bottom:8px; }
  .brandmark { width:34px; height:34px; }
  .brandcopy h1 { font-size:clamp(16px, calc(12px + .32vw), 20px); }
  .brand-sub { font-size:clamp(11px, calc(9px + .18vw), 13px); }
  header .ver, .net { height:22px; font-size:clamp(11px, calc(9px + .16vw), 13px); }
  .iconbtn { width:36px; height:36px; font-size:clamp(15px, calc(12px + .22vw), 18px); }

  .home-title { font-size:clamp(20px, calc(14px + .48vw), 27px); line-height:1.18; }
  .home-desc { font-size:clamp(13px, calc(10px + .20vw), 16px); line-height:1.55; }
  .eyebrow { font-size:clamp(11px, calc(9px + .16vw), 13px); }
  .home-stats b { font-size:clamp(16px, calc(12px + .30vw), 20px); }
  .home-stats span { font-size:clamp(11px, calc(9px + .15vw), 13px); }
  .search-shell { height:42px; }
  .search { font-size:clamp(14px, calc(11px + .20vw), 17px); }
  .search-kbd { font-size:clamp(10px, calc(8px + .14vw), 12px); }

  .section-title { font-size:clamp(15px, calc(11px + .28vw), 19px); }
  .section-desc, .section-count { font-size:clamp(11px, calc(9px + .15vw), 13px); }
  .label, .sublabel { font-size:clamp(12px, calc(9px + .20vw), 14px); }

  .matcard { min-height:62px; }
  .mat-code { font-size:clamp(14px, calc(11px + .22vw), 17px); }
  .mat-cn, .mat-badge { font-size:clamp(10px, calc(8px + .15vw), 12px); }
  .favstar { font-size:clamp(14px, calc(11px + .20vw), 17px); }

  .cur-kicker, .change-mat { font-size:clamp(10px, calc(8px + .15vw), 12px); }
  .card.curmat .matname { font-size:clamp(15px, calc(11px + .28vw), 19px); }
  .field label, .board-size-card .field label, .tier-qty label {
    font-size:clamp(11px, calc(9px + .16vw), 13px);
  }
  .field input, .board-size-card .field input, .board-size-card .crow input,
  .tier-qty input, .qty-edit-input, .variant-search {
    font-size:clamp(14px, calc(11px + .20vw), 17px);
  }
  .field input { min-height:40px; }
  .board-size-card .field input, .board-size-card .crow input, .tier-qty input { min-height:34px; }

  .seg-item { font-size:clamp(13px, calc(10px + .19vw), 16px); }
  .chip, .quick-spec { font-size:clamp(11px, calc(9px + .15vw), 13px); }

  .result-head { min-height:34px; }
  .result-head b { font-size:clamp(13px, calc(10px + .19vw), 16px); }
  .result-kicker, .result-tier, .sticky-label, .sticky-line span, .qty-edit-label, .qty-edit-unit {
    font-size:clamp(10px, calc(8px + .14vw), 12px);
  }
  .result-size { font-size:clamp(12px, calc(9px + .18vw), 15px); }
  .sticky-qty { width:44px; font-size:clamp(17px, calc(13px + .28vw), 22px); }
  .sticky-line .sv { font-size:clamp(13px, calc(10px + .20vw), 16px); }
  .sticky-col-total .total-line .sv { font-size:clamp(18px, calc(13px + .36vw), 24px); }
  .pricebox .val { font-size:clamp(22px, calc(16px + .45vw), 30px); min-height:28px; }
  .pricebox .val.empty { font-size:clamp(14px, calc(11px + .20vw), 17px); }
  .tierchip { font-size:clamp(11px, calc(9px + .15vw), 13px); }
  .qbtn { min-height:40px; font-size:clamp(13px, calc(10px + .20vw), 16px); }

  .vgroup-title { font-size:clamp(12px, calc(9px + .18vw), 15px); }
  .variant { padding:10px 12px; }
  .vname { font-size:clamp(14px, calc(11px + .22vw), 17px); }
  .vsup { font-size:clamp(10px, calc(8px + .15vw), 12px); }
  .vtier { font-size:clamp(10px, calc(8px + .14vw), 12px); }

  /* 型号卡：整板 / 一刀 / 零切，每档工厂价 / 单价 / 总价 */
  .variant-price-head { min-height:34px; }
  .variant-price-head > b { font-size:clamp(13px, calc(10px + .20vw), 16px); }
  .price-rank { min-height:19px; font-size:clamp(10px, calc(8px + .13vw), 12px); }
  .variant-price-values { grid-template-rows:repeat(3,minmax(30px,auto)); }
  .variant-price-values > span { font-size:clamp(14px, calc(10px + .25vw), 18px); padding:5px 3px; }

  .qitem-mat, .qitem-name, .qitem-spec, .qitem-price, .qitem-qty,
  .qitem-fee, .qitem-uprice, .qitem-ttl, .qtext, .qsel, .qinput,
  .markup-out, .qchk, .custom-sec-title {
    font-size:clamp(12px, calc(9px + .18vw), 15px);
  }
  .qsum-label, .markup-hint, .hint, .foot { font-size:clamp(11px, calc(9px + .14vw), 13px); }
  .qsum-val { font-size:clamp(20px, calc(15px + .34vw), 25px); }

  .wechat, .wechat .wline, .wechat .wline .wid { font-size:clamp(14px, calc(11px + .20vw), 17px); }
}

@media (min-width: 1600px) {
  .wrap { max-width:1080px; }
}

/* ===== v10 Mobile Adaptive Typography =====
   手机端按视口宽度轻量渐进放大：320-360 保持紧凑，375-390 为标准，
   414-430 再放大一档。只调整可读性与触控尺寸，不把卡片重新做大。 */
@media (max-width: 899px) {
  body { font-size:clamp(13.5px, calc(9.8px + 1.05vw), 14.6px); }

  .brandcopy h1 { font-size:clamp(14px, calc(9.5px + 1.25vw), 15.2px); }
  .brand-sub { font-size:clamp(10.5px, calc(7.2px + .9vw), 11.5px); }
  header .ver, .net { font-size:clamp(10px, calc(7.2px + .8vw), 11px); }
  .iconbtn { font-size:clamp(14px, calc(10px + 1vw), 15.5px); }

  .eyebrow { font-size:clamp(10px, calc(7.1px + .8vw), 11px); }
  .home-title { font-size:clamp(22px, calc(14px + 2.35vw), 24.5px); line-height:1.16; }
  .home-desc { font-size:clamp(12.5px, calc(8.8px + 1.02vw), 13.8px); line-height:1.5; }
  .search { font-size:clamp(14px, calc(10.2px + 1vw), 15px); }
  .search-kbd { font-size:clamp(10px, calc(7px + .8vw), 11px); }

  .section-kicker { font-size:clamp(9px, calc(6.2px + .75vw), 10px); }
  .section-title { font-size:clamp(16px, calc(10.5px + 1.5vw), 17.5px); }
  .section-desc, .section-count { font-size:clamp(11px, calc(7.6px + .9vw), 12px); }
  .label, .sublabel { font-size:clamp(11.5px, calc(8px + .9vw), 12.5px); }

  .mat-code { font-size:clamp(13.5px, calc(9.4px + 1.1vw), 15px); }
  .mat-cn, .mat-badge { font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px); }
  .favstar { font-size:clamp(13px, calc(9px + 1vw), 14px); }

  .card.curmat .matname { font-size:clamp(15px, calc(10.5px + 1.2vw), 16.5px); }
  .cur-kicker, .change-mat, .field label, .board-size-card .field label, .tier-qty label {
    font-size:clamp(11px, calc(7.8px + .85vw), 12px);
  }
  .field input, .board-size-card .field input, .board-size-card .crow input,
  .tier-qty input, .qty-edit-input, .variant-search {
    font-size:clamp(14px, calc(10px + 1.05vw), 15px);
  }
  .field input { min-height:40px; }
  .board-size-card .field input, .board-size-card .crow input, .tier-qty input { min-height:36px; }
  .seg-item { font-size:clamp(12.5px, calc(8.8px + 1vw), 13.8px); }
  .chip, .quick-spec { font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px); }

  .result-head b { font-size:clamp(13.5px, calc(9.4px + 1.1vw), 15px); }
  .result-kicker, .result-tier, .sticky-label, .sticky-line span,
  .qty-edit-label, .qty-edit-unit {
    font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px);
  }
  .result-size { font-size:clamp(12px, calc(8.5px + .9vw), 13px); }
  .sticky-qty { font-size:clamp(17px, calc(11.5px + 1.45vw), 19px); }
  .sticky-line .sv { font-size:clamp(13px, calc(9px + 1.05vw), 14.5px); }
  .sticky-col-total .total-line .sv { font-size:clamp(18px, calc(12px + 1.6vw), 20.5px); }
  .pricebox .val { font-size:clamp(21px, calc(13.8px + 1.9vw), 24px); }
  .pricebox .val.empty { font-size:clamp(14px, calc(10px + 1vw), 15px); }
  .tierchip { font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px); }
  .qbtn { min-height:40px; font-size:clamp(13px, calc(9px + 1.05vw), 14.5px); }

  .vgroup-title { font-size:clamp(11.5px, calc(8px + .9vw), 12.8px); }
  .vname { font-size:clamp(13.5px, calc(9.5px + 1.05vw), 15px); }
  .vsup, .vtier { font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px); }

  /* 型号卡三档三行价：手机也保证可读，但不显著增加卡片高度。 */
  .variant-price-head > b { font-size:clamp(12.5px, calc(8.7px + 1vw), 13.8px); }
  .price-rank { min-height:17px; font-size:clamp(9px, calc(6.2px + .75vw), 10px); }
  .variant-price-values { grid-template-rows:repeat(3,minmax(25px,auto)); }
  .variant-price-values > span { font-size:clamp(13px, calc(8.8px + 1.1vw), 14.5px); padding:4px 1px; }

  .qitem-mat, .qitem-name, .qitem-spec, .qitem-price, .qitem-qty,
  .qitem-fee, .qitem-uprice, .qitem-ttl, .qtext, .qsel, .qinput,
  .markup-out, .qchk, .custom-sec-title {
    font-size:clamp(12px, calc(8.4px + .95vw), 13.2px);
  }
  .qsum-label, .markup-hint, .hint, .foot { font-size:clamp(10.5px, calc(7.4px + .8vw), 11.5px); }
  .qsum-val { font-size:clamp(18px, calc(12.5px + 1.45vw), 20.5px); }

  .wechat, .wechat .wline { font-size:clamp(13px, calc(9px + 1.05vw), 14.5px); }
  .wechat .wline .wid { font-size:clamp(14px, calc(9.8px + 1.1vw), 15.5px); }
}

/* 320-359px 超窄屏只收紧间距，不把文字压回 10px 以下。 */
@media (max-width: 359px) {
  .wrap { padding-left:10px; padding-right:10px; }
  .variant { padding-left:8px; padding-right:8px; }
  .variant-price-head { gap:2px; }
  .variant-price-values > span { letter-spacing:-.15px; }
}


/* ===== v10.0.02 Mobile Quote Quantity Stepper =====
   手机 PWA：在“加入报价单”旁直接改件数。桌面继续使用尺寸卡里的数量输入。 */
.mobile-quote-qty { display:none; }
#addQuoteBtn { display:flex; align-items:center; justify-content:center; gap:8px; }
#addQuoteBtn strong { font-size:1em; font-weight:950; white-space:nowrap; }

@media (max-width: 899px) {
  .calc-action-bar {
    grid-template-columns:minmax(104px,.9fr) minmax(0,1.4fr);
    align-items:stretch;
  }
  .mobile-quote-qty {
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:4px;
    min-width:0;
    min-height:48px;
    padding:4px 5px 4px 7px;
    border:1px solid var(--line);
    border-radius:10px;
    background:var(--surface-2);
  }
  .mobile-quote-qty-label {
    flex:0 0 auto;
    color:var(--muted);
    font-size:clamp(9px, calc(6px + .8vw), 11px);
    font-weight:750;
    white-space:nowrap;
  }
  /* v10.0.25: 原为固定 grid 30px/44px/30px，窄屏必然溢出，改为弹性收缩 */
  .mobile-quote-qty-stepper {
    display:flex;
    align-items:center;
    gap:3px;
    flex:1 1 auto;
    min-width:0;
  }
  .mobile-qty-btn {
    position:relative;
    flex:0 0 26px;
    width:26px;
    height:34px;
    padding:0;
    border:0;
    border-radius:7px;
    background:var(--card);
    color:var(--fg);
    box-shadow:inset 0 0 0 1px var(--line);
    font:850 17px/1 system-ui,-apple-system,"Segoe UI",sans-serif;
    touch-action:manipulation;
  }
  /* v10.0.25 起按钮为防窄屏溢出只保留 26px 视觉宽度（不能改回宽按钮，否则又会溢出）；
     用伪元素把可点区域向外扩到接近 44px，不占布局、不影响排列。 */
  .mobile-qty-btn::after {
    content:""; position:absolute; top:50%; left:50%;
    width:44px; height:44px; transform:translate(-50%,-50%);
  }
  .mobile-qty-btn:active { transform:scale(.96); background:var(--brand-soft); }
  .mobile-quote-qty input {
    flex:1 1 auto;
    width:100%;
    min-width:0;
    height:34px;
    padding:0 2px;
    border:1px solid color-mix(in srgb,var(--brand) 22%,var(--line));
    border-radius:8px;
    outline:0;
    background:var(--card);
    color:var(--fg);
    box-shadow:inset 0 1px 2px rgba(20,40,80,.04);
    text-align:center;
    font-size:16px;
    font-weight:900;
    font-variant-numeric:tabular-nums;
    -moz-appearance:textfield;
  }
  .mobile-quote-qty input:focus {
    border-color:var(--brand);
    box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 16%,transparent);
  }
  .mobile-quote-qty input::-webkit-outer-spin-button,
  .mobile-quote-qty input::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }
  #addQuoteBtn {
    grid-column:auto !important;
    min-width:0;
    min-height:48px;
    flex-direction:column;
    gap:1px;
    padding:5px 7px;
    line-height:1.1;
  }
  #addQuoteBtn span { font-size:clamp(12px, calc(8px + 1vw), 13px); font-weight:850; }
  #addQuoteBtn strong { font-size:clamp(14px, calc(9px + 1.3vw), 16px); }
  .calc-action-bar .qbtn.ghost { grid-column:auto; }
  .action-bar-spacer { height:108px; }
}

/* v10.0.25: 手机窄屏让“件数”两字退场，把宽度全留给 -/输入框/+ 三件套 */
@media (max-width: 480px) {
  .mobile-quote-qty-label { display:none; }
  .mobile-quote-qty { padding:4px 5px; }
}

@media (max-width: 359px) {
  .calc-action-bar { grid-template-columns:104px minmax(0,1fr); }
  .mobile-quote-qty { padding:4px 5px; }
  .mobile-quote-qty-label { display:none; }
  .mobile-quote-qty-stepper { width:100%; }
  .mobile-qty-btn { flex:0 0 24px; width:24px; height:32px; }
  .mobile-quote-qty input { min-width:0; height:32px; }
}

    /* 税率 / 税额（v10.0.12） */
    .qedit-grid .qitem-taxrate { font-weight:700; }
    .qedit-grid .qitem-taxamt,
.qedit-grid .qitem-total { background:var(--chip); color:var(--muted); font-weight:800; cursor:default; }
    .qedit-grid .qitem-taxamt:focus { outline:none; box-shadow:none; }
    .compact-tax-row { display:flex; align-items:center; gap:6px; padding:7px 11px; border-top:1px solid var(--line); }
    .compact-tax-label { flex:0 0 auto; font-size:10px; color:var(--muted); }
    .compact-tax-input { flex:0 0 auto; width:56px; height:26px; padding:2px 6px; border:1px solid var(--line); border-radius:7px; background:var(--card); color:var(--fg); font-size:12px; font-weight:800; text-align:center; }
    .compact-tax-unit { flex:0 0 auto; font-size:10px; color:var(--muted); }
    .compact-tax-metric { flex:1 1 0; min-width:0; display:flex; flex-direction:column; align-items:flex-end; gap:1px; }
    .compact-tax-metric i { font-style:normal; font-size:8px; color:var(--muted); }
    .compact-tax-metric b { font-size:13px; color:var(--fg); white-space:nowrap; }
    .compact-tax-metric.incl b { font-size:15px; color:var(--danger,#e53935); }

    /* 每条总价（含税）——只读强调 */
    .qedit-grid .qitem-total { background:rgba(229,57,53,.075); border-color:rgba(229,57,53,.28); color:#e53935; font-weight:900; cursor:default; }
    .qedit-grid .qitem-total:focus { outline:none; box-shadow:none; }

/* ===== v10 Desktop Readability (v10.0.15) =====
   电脑 / PWA 独立窗口（>=900px）：全量上调字号；手机端保持原样。
   档位：html[data-fs="lg"] -> --fs-k:1.14 ；html[data-fs="xl"] -> --fs-k:1.30 */
html { --fs-k: 1; }
html[data-fs="lg"] { --fs-k: 1.14; }
html[data-fs="xl"] { --fs-k: 1.30; }
@media (min-width: 900px) {
  body { font-size: clamp(17px, calc(13px + .32vw), 20px); }
  .wrap { max-width: clamp(920px, 76vw, 1280px); }
  .app-header .qwrap::after { font-size: calc(15px * var(--fs-k)); }
  .board-size-card .field input { font-size: calc(16px * var(--fs-k)); }
  .brand-sub { font-size: calc(14px * var(--fs-k)); }
  .brandcopy h1 { font-size: calc(20px * var(--fs-k)); }
  .calc-flow span { font-size: calc(13px * var(--fs-k)); }
  .card.curmat .matname { font-size: calc(18px * var(--fs-k)); }
  .chip { font-size: calc(14px * var(--fs-k)); }
  .chip, .quick-spec { font-size: calc(14.5px * var(--fs-k)); }
  .compact-metric b { font-size: calc(15px * var(--fs-k)); }
  .compact-metric small { font-size: calc(13px * var(--fs-k)); }
  .compact-metric span { font-size: calc(13px * var(--fs-k)); }
  .compact-metric.total b { font-size: calc(23px * var(--fs-k)); }
  .compact-result-meta { font-size: calc(14px * var(--fs-k)); }
  .compact-result-title b { font-size: calc(17px * var(--fs-k)); }
  .compact-tax-input { font-size: calc(15px * var(--fs-k)); }
  .compact-tax-label { font-size: calc(14px * var(--fs-k)); }
  .compact-tax-metric b { font-size: calc(16px * var(--fs-k)); }
  .compact-tax-metric i { font-size: calc(13px * var(--fs-k)); }
  .compact-tax-metric.incl b { font-size: calc(18px * var(--fs-k)); }
  .compact-tax-unit { font-size: calc(14px * var(--fs-k)); }
  .cur-kicker { font-size: calc(13px * var(--fs-k)); }
  .curmat .crow label { font-size: calc(13px * var(--fs-k)); }
  .cust-calc-label { font-size: calc(16px * var(--fs-k)); }
  .cust-dim { font-size: calc(16px * var(--fs-k)); }
  .cust-qty { font-size: calc(17px * var(--fs-k)); }
  .cust-qty-label { font-size: calc(15px * var(--fs-k)); }
  .cust-total { font-size: calc(17px * var(--fs-k)); }
  .cust-weight { font-size: calc(16px * var(--fs-k)); }
  .cust-weight-save { font-size: calc(15px * var(--fs-k)); }
  .eyebrow { font-size: calc(14px * var(--fs-k)); }
  .eyebrow, .section-kicker { font-size: calc(13px * var(--fs-k)); }
  .favstar { font-size: calc(16px * var(--fs-k)); }
  .field input, .field select { font-size: calc(17px * var(--fs-k)); }
  .field label, .label { font-size: calc(14.5px * var(--fs-k)); }
  .header-status .net, .header-status .ver { font-size: calc(13px * var(--fs-k)); }
  .home-desc { font-size: calc(14.5px * var(--fs-k)); }
  .home-stats b { font-size: calc(23px * var(--fs-k)); }
  .home-stats span { font-size: calc(13px * var(--fs-k)); }
  .home-title { font-size: calc(27.5px * var(--fs-k)); }
  .iconbtn { font-size: calc(21px * var(--fs-k)); }
  .iconbtn::after { font-size: calc(14px * var(--fs-k)); }
  .mat-arrow { font-size: calc(18px * var(--fs-k)); }
  .mat-badge { font-size: calc(13px * var(--fs-k)); }
  .mat-cn { font-size: calc(13px * var(--fs-k)); }
  .mat-code { font-size: calc(16px * var(--fs-k)); }
  .mini-btn { font-size: calc(14.5px * var(--fs-k)); }
  .model-hint { font-size: calc(13px * var(--fs-k)); }
  .overview-grid b { font-size: calc(19px * var(--fs-k)); }
  .overview-grid span { font-size: calc(13px * var(--fs-k)); }
  .overview-label { font-size: calc(14px * var(--fs-k)); }
  .overview-note { font-size: calc(13px * var(--fs-k)); }
  .overview-note, .overview-label { font-size: calc(13px * var(--fs-k)); }
  .price-rank { font-size: calc(13px * var(--fs-k)); }
  .pwa-badge { font-size: calc(14.5px * var(--fs-k)); }
  .pwa-close { font-size: calc(27.5px * var(--fs-k)); }
  .pwa-eyebrow { font-size: calc(14px * var(--fs-k)); }
  .pwa-help-link { font-size: calc(15px * var(--fs-k)); }
  .pwa-note { font-size: calc(15px * var(--fs-k)); }
  .pwa-panel-head h2 { font-size: calc(26px * var(--fs-k)); }
  .pwa-state-copy b { font-size: calc(18px * var(--fs-k)); }
  .pwa-state-copy span { font-size: calc(15px * var(--fs-k)); }
  .pwa-state-icon { font-size: calc(23px * var(--fs-k)); }
  .qbadge { font-size: calc(13px * var(--fs-k)); }
  .qbtn { font-size: calc(16px * var(--fs-k)); }
  .qbtn.sm { font-size: calc(15px * var(--fs-k)); }
  .qedit-box small { font-size: calc(13px * var(--fs-k)); }
  .qedit-cell > span { font-size: calc(13px * var(--fs-k)); }
  .qedit-grid .qitem-qty, .qedit-grid .qitem-fee, .qedit-grid .qitem-uprice, .qedit-grid .qitem-ttl, .qedit-grid .qitem-taxrate, .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { font-size: calc(15px * var(--fs-k)); }
  .qitem .status-badge { font-size: calc(13px * var(--fs-k)); }
  .qitem-del { font-size: calc(16px * var(--fs-k)); }
  .qitem-index { font-size: calc(13px * var(--fs-k)); }
  .qitem-mat { font-size: calc(15px * var(--fs-k)); }
  .qitem-name { font-size: calc(14.5px * var(--fs-k)); }
  .qitem-spec { font-size: calc(13px * var(--fs-k)); }
  .qitem-supplier { font-size: calc(14px * var(--fs-k)); }
  .qtext { font-size: calc(16px * var(--fs-k)); }
  .quick-spec { font-size: calc(13px * var(--fs-k)); }
  .quote-action-head b { font-size: calc(15px * var(--fs-k)); }
  .quote-action-head small { font-size: calc(13px * var(--fs-k)); }
  .quote-clear-row .qbtn { font-size: calc(13px * var(--fs-k)); }
  .quote-empty-card h2 { font-size: calc(26px * var(--fs-k)); }
  .quote-empty-card p { font-size: calc(14.5px * var(--fs-k)); }
  .quote-empty-kicker { font-size: calc(13px * var(--fs-k)); }
  .quote-export-btn b { font-size: calc(14.5px * var(--fs-k)); }
  .quote-export-btn small { font-size: calc(13px * var(--fs-k)); }
  .quote-eyebrow, .quote-list-kicker, .quote-settings-head em, .quote-action-head em { font-size: calc(13px * var(--fs-k)); }
  .quote-fold-amount { font-size: calc(21px * var(--fs-k)); }
  .quote-fold-body .fee-toggle { font-size: calc(14px * var(--fs-k)); }
  .quote-fold-body .markup-hint { font-size: calc(13px * var(--fs-k)); }
  .quote-fold-body .markup-out { font-size: calc(14px * var(--fs-k)); }
  .quote-fold-body .qsel, .quote-fold-body .qinput { font-size: calc(15px * var(--fs-k)); }
  .quote-fold-title b { font-size: calc(15px * var(--fs-k)); }
  .quote-fold-title small { font-size: calc(13px * var(--fs-k)); }
  .quote-inline-fold .qchk { font-size: calc(14px * var(--fs-k)); }
  .quote-inline-fold .qchk-group .qchk-title { font-size: calc(14px * var(--fs-k)); }
  .quote-inline-fold .qtext { font-size: calc(14px * var(--fs-k)); }
  .quote-inline-fold .quote-fold-title b { font-size: calc(14px * var(--fs-k)); }
  .quote-inline-fold .quote-fold-title small { font-size: calc(13px * var(--fs-k)); }
  .quote-list-head > span { font-size: calc(13px * var(--fs-k)); }
  .quote-list-head b { font-size: calc(17px * var(--fs-k)); }
  .quote-list-head span { font-size: calc(13px * var(--fs-k)); }
  .quote-primary-actions .qbtn { font-size: calc(14.5px * var(--fs-k)); }
  .quote-primary-actions .qbtn, .quote-secondary-actions .qbtn, .quote-export-actions .qbtn { font-size: calc(13px * var(--fs-k)); }
  .quote-secondary-actions .qbtn { font-size: calc(14px * var(--fs-k)); }
  .quote-section-cap { font-size: calc(13px * var(--fs-k)); }
  .quote-setting-label { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-body .fee-toggle { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-body .markup-hint { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-body .markup-out { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-body .markup-row .fee-unit { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-body .markup-row .mklbl { font-size: calc(14px * var(--fs-k)); }
  .quote-settings-body .qsel, .quote-settings-body .qinput { font-size: calc(14.5px * var(--fs-k)); }
  .quote-settings-head b { font-size: calc(15px * var(--fs-k)); }
  .quote-settings-head b, .quote-action-head b { font-size: calc(16px * var(--fs-k)); }
  .quote-settings-head small { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-head small, .quote-action-head small { font-size: calc(13px * var(--fs-k)); }
  .quote-settings-total small { font-size: calc(13px * var(--fs-k)); }
  .quote-summarybar .grand b { font-size: calc(20px * var(--fs-k)); }
  .quote-summarybar b { font-size: calc(16px * var(--fs-k)); }
  .quote-summarybar span { font-size: calc(13px * var(--fs-k)); }
  .quote-topbar-title > span:last-child { font-size: calc(14.5px * var(--fs-k)); }
  .quote-topbar-title b { font-size: calc(23px * var(--fs-k)); }
  .quote-topbar-title span { font-size: calc(13px * var(--fs-k)); }
  .quote-topbar-total > span { font-size: calc(14px * var(--fs-k)); }
  .quote-topbar-total b { font-size: calc(26px * var(--fs-k)); }
  .quote-topbar-total small { font-size: calc(13px * var(--fs-k)); }
  .quote-topbar-total span { font-size: calc(13px * var(--fs-k)); }
  .quote-visible-settings .qchk { font-size: calc(13px * var(--fs-k)); }
  .result-kicker { font-size: calc(13px * var(--fs-k)); }
  .result-tier { font-size: calc(13px * var(--fs-k)); }
  .search { font-size: calc(16px * var(--fs-k)); }
  .search-icon { font-size: calc(23px * var(--fs-k)); }
  .search-kbd { font-size: calc(13px * var(--fs-k)); }
  .section-count { font-size: calc(13px * var(--fs-k)); }
  .section-desc { font-size: calc(13px * var(--fs-k)); }
  .section-kicker { font-size: calc(13px * var(--fs-k)); }
  .section-title { font-size: calc(20px * var(--fs-k)); }
  .seg-item { font-size: calc(14.5px * var(--fs-k)); }
  .spec-fav-btn { font-size: calc(13px * var(--fs-k)); }
  .spec-fav-label { font-size: calc(14px * var(--fs-k)); }
  .step-label > b { font-size: calc(14.5px * var(--fs-k)); }
  .step-label > span { font-size: calc(13px * var(--fs-k)); }
  .undo-toast { font-size: calc(16px * var(--fs-k)); }
  .variant .density-tag { font-size: calc(13px * var(--fs-k)); }
  .variant-price b { font-size: calc(14px * var(--fs-k)); }
  .variant-price small { font-size: calc(13px * var(--fs-k)); }
  .variant-price span, .variant-price small { font-size: calc(13px * var(--fs-k)); }
  .variant-price { font-size: calc(14px * var(--fs-k)); }
  .variant-price-head > b { font-size: calc(15px * var(--fs-k)); }
  .variant-price-values > span { font-size: calc(15px * var(--fs-k)); }
  .variant.on::before { font-size: calc(13px * var(--fs-k)); }
  .vname { font-size: calc(14.5px * var(--fs-k)); }
  .vsup, .density-tag { font-size: calc(13px * var(--fs-k)); }
  .wechat .wcopy { font-size: calc(14.5px * var(--fs-k)); }
  .wechat .wcta { font-size: calc(14px * var(--fs-k)); }
  .wechat .whead { font-size: calc(17px * var(--fs-k)); }
  .wechat .wid { font-size: calc(19px * var(--fs-k)); }
  .wechat .wlabel { font-size: calc(14px * var(--fs-k)); }
  .wechat .wline .wid { font-size: calc(19px * var(--fs-k)); }
  .wechat .wline { font-size: calc(17px * var(--fs-k)); }
  details.quote-fold > summary::after { font-size: calc(16px * var(--fs-k)); }
  header .ver, .net { font-size: calc(14px * var(--fs-k)); }
  /* 控件高度与内边距同步抬高，避免大字挤在矮框里 */
  .qedit-grid input { height:42px; }
  .qedit-grid .qitem-taxamt, .qedit-grid .qitem-total { height:42px; }
  .field input { padding:11px 14px; }
  .field input, .qinput, .qsel, .quote-settings-body .qsel, .quote-settings-body .qinput { height:42px; }
  .qbtn, .mini-btn, .seg-item { min-height:38px; }
  .qedit-grid { gap:7px; }
}
@media (min-width: 1600px) {
  .wrap { max-width: 1360px; }
}
