/* 必填标记：label 直接包含 required 字段时在标签左侧加红星
   （弹窗多为 innerHTML + type=button，原生校验不触发，这里只作视觉提示；
   form-grid 的 label 是 display:grid，伪元素会被当成独立网格项另起一行，故用绝对定位贴左） */
label:has(> :required){position:relative;padding-left:8px}
label:has(> :required)::before{content:'*';position:absolute;left:0;top:0;color:#c0392b;font-size:12px;line-height:1}

/* 本页特有：状态步骤 mini 指示 */
.flow-steps{margin-bottom:16px}
.empty-hint{padding:26px 0;text-align:center;color:var(--muted);font-size:12px}
.cred-box{background:var(--warning-bg);border:1px solid #ecd9ae;border-radius:8px;padding:14px 16px}
.cred-box b{font-size:18px;letter-spacing:.08em;font-variant-numeric:tabular-nums}
.cred-box p{margin:6px 0 0;color:var(--warning);font-size:11px}
.ops{display:flex;gap:6px;flex-wrap:wrap}
.item-editor input{width:100%;border:1px solid var(--border);border-radius:5px;padding:6px 8px;font-size:12px;background:#fff}
.item-editor input:focus{border-color:var(--blue-500);box-shadow:var(--focus);outline:none}
.item-editor td{vertical-align:middle}
.register-codes{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.register-codes .code-chip{background:var(--blue-50);color:var(--blue-700);border-radius:99px;padding:3px 10px;font-size:11px;font-variant-numeric:tabular-nums}
.package-list{display:grid;gap:8px}
.package-list .package-card{border:1px solid var(--line);border-radius:6px;padding:10px 12px;background:#f8fafb}
.package-card .package-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.package-card small{display:block;color:var(--muted);font-size:11px;margin-top:4px}
.package-card .ops{margin-top:8px}
.acceptance-conclusion{grid-column:1/-1;width:100%;border:0;padding:0;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:center;color:var(--text);font-size:12px}
.acceptance-conclusion.registration-type-group{grid-template-columns:repeat(3,1fr)}
.acceptance-conclusion legend{grid-column:1/-1;font-size:12px;font-weight:600;margin:0}
.acceptance-conclusion .acceptance-radio{display:flex!important;align-items:center;gap:6px;width:100%;white-space:nowrap}
.acceptance-radio input{width:14px;height:14px;accent-color:var(--primary)}
.disposal-samples{display:grid;gap:10px}
.disposal-sample{border:1px solid var(--line);border-radius:6px;padding:10px 12px}
.disposal-sample .ds-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:12px}
.disposal-methods{display:grid;gap:6px;margin-top:9px;padding-left:22px}
/* 内联 display:grid 会压过 [hidden] 的 UA 规则，这里显式兜住 */
.disposal-methods[hidden]{display:none}
.disposal-method{display:grid;grid-template-columns:120px 110px 1fr;gap:7px;align-items:center;font-size:11px}
.disposal-method input[type="text"],.disposal-method input[type="number"]{height:30px;border:1px solid var(--border);border-radius:5px;padding:0 7px;font-size:11px;width:100%}
.confirm-item{border:1px solid var(--warning);background:var(--warning-bg);border-radius:6px;padding:9px 11px;margin-bottom:8px;font-size:12px}
.confirm-item .confirm-reason{display:grid;gap:5px;margin-top:7px}
.confirm-item .confirm-reason input{height:32px;border:1px solid var(--border);border-radius:5px;padding:0 8px;font-size:12px;width:100%}
.warn-item{font-size:12px;padding:6px 0;border-top:1px solid var(--line);display:flex;gap:8px;align-items:flex-start}
.warn-item:first-child{border-top:0}
.memo-list{display:grid;gap:8px}
.memo-card{border:1px solid var(--line);border-radius:6px;padding:10px 12px;background:#f8fafb;font-size:12px}
.memo-card .memo-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.memo-card small{display:block;color:var(--muted);font-size:10px;margin-top:4px}
.disposal-intention{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.disposal-intention select{height:34px;border:1px solid var(--border);border-radius:6px;padding:0 9px;background:#fff;font-size:12px}
/* 检测项目选择：2026-10 起由库面板改为一行「下拉 + 添加」，样式只留选择器本身
   （.quote-item-library / .quote-item-option / .quote-item-price 及其滚动条 gutter 规则随面板一并移除） */
.quote-item-picker{display:grid;gap:10px;margin-bottom:12px}
.quote-item-picker .form-grid{margin-bottom:0}
/* inline display:flex 会压过 [hidden] 的 UA 规则，报价明细的溢价提醒空盒会露出来（与 .disposal-methods 同因），显式兜住 */
#modal-new-quote .inline-note[hidden],#modal-quote-detail .inline-note[hidden]{display:none}
.quote-item-add{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.quote-selected-empty{padding:16px 0;text-align:center;color:var(--muted);font-size:12px}
.quote-item-id{display:block;color:var(--muted);font-size:10px;margin-top:3px}
/* 报价弹窗比通用 modal-wide 更宽：明细表 min-width:900px、档位表要占满面板，
   880px 会让明细表被挤到出横向滚动（backlog 第 5/6 项） */
#modal-new-quote .modal-wide,#modal-quote-detail .modal-wide{width:min(1180px,100%)}
/* 报价弹窗头部常驻（2026-10）：lims2.css 的 .modal 是整窗 overflow-y:auto，头部会跟着内容一起滚走。
   这里只对两个报价弹窗做 scoped 覆盖 —— 弹窗自身不滚，头/尾固定，滚动只发生在 .modal-body。
   刻意不碰 lims2.css：那是全站弹窗基座，改它会波及所有页面（全站统一由 M10 另做）。 */
#modal-new-quote .modal,#modal-quote-detail .modal{display:flex;flex-direction:column;max-height:calc(100vh - 80px);overflow:hidden}
#modal-new-quote .modal-header,#modal-quote-detail .modal-header{flex:0 0 auto}
#modal-new-quote .modal-body,#modal-quote-detail .modal-body{flex:1 1 auto;min-height:0;overflow-y:auto}
#modal-new-quote .modal-footer,#modal-quote-detail .modal-footer{flex:0 0 auto;background:#fff}
/* 阶梯档位表：档位行不在 .item-editor 内，拿不到那条 input 样式，百分比列需要自带 100% 宽，
   否则 number 输入框的默认 20 字符宽会撑破列宽（backlog 第 5 项「档位界面元素未占满面板」） */
.qi-tier input{width:100%;border:1px solid var(--border);border-radius:5px;padding:6px 8px;font-size:12px;background:#fff}
.qi-tier input:focus{border-color:var(--blue-500);box-shadow:var(--focus);outline:none}
.qi-tier input:disabled{background:#f4f6f9;color:var(--muted)}
.qi-tier td{vertical-align:middle}
/* select 与 input 观感统一（2026-10）：报价明细里的下拉此前继承浏览器原生外观，和同表的 input
   在边框/圆角/内边距/高度上都对不上。这里按 .item-editor input 的同一套取值补齐，并换掉原生 caret。
   与 M10 的 lims2.css select 基座的关系：那边用 `!important` 声明三角 background 与 padding-right，
   合并后会自动压过本段（important 优先于普通选择器），本段只剩几何对齐的兜底，无需手工删改。
   写成与 .item-editor input 完全同值的形态，也是为了让 M10 收编时逐条对得上。 */
.item-editor select,.qi-tier select,.quote-item-select{
  appearance:none;-webkit-appearance:none;
  width:100%;border:1px solid var(--border);border-radius:5px;padding:6px 24px 6px 8px;
  font-size:12px;background:#fff;color:var(--text);
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%236b7280' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center;background-size:10px 6px;
}
.item-editor select:focus,.qi-tier select:focus,.quote-item-select:focus{border-color:var(--blue-500);box-shadow:var(--focus);outline:none}
select option:disabled{color:var(--muted)}
/* 回款与卡口（合同回款条款 x/y/z） */
.pay-panel{border:1px solid var(--line);border-radius:6px;padding:11px 12px;background:#f8fafb}
.pay-track{position:relative;height:10px;background:#edf0f4;border-radius:8px;overflow:hidden;margin:8px 0 6px}
.pay-fill{height:100%;background:var(--blue-500);border-radius:8px;transition:width .2s}
.pay-line{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:11px;color:var(--muted)}
.pay-line b{color:var(--ink);font-variant-numeric:tabular-nums}
.pay-gates{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
.pay-gate{display:grid;gap:2px;border:1px solid var(--line);border-radius:6px;padding:7px 9px;background:#fff;font-size:11px;min-width:150px}
.pay-gate.reached{border-color:#b9dfc1;background:#f3fbf5}
.pay-gate.missed{border-color:#ecd9ae;background:var(--warning-bg)}
.pay-gate strong{font-size:11px;color:var(--ink)}
.pay-gate small{color:var(--muted);font-size:10px}
/* 回款档位配色（委托进度总览「回款进度」列）。灰=空态（未关联合同或 0 回款——没有回款就谈不上
   档位，涂红会让一屏空单子像出了事故）、红=未达标、黄=接近达标、绿=达标；比例数字与进度条同色。
   只在带档位修饰类的轨道上生效，共用的 .pay-fill（合同页回款面板等）保持蓝色。
   档位判定在 public/business/progress/page.js 的 paymentTier()，与同页表头「回款档位」筛选同源。 */
.pay-track-met{background:#d9efe4}
.pay-track-near{background:#fdf0d5}
.pay-track-behind{background:#fadcd9}
.pay-track-none{background:#eef1f5}
.pay-track-met>.pay-fill{background:var(--success)}
.pay-track-near>.pay-fill{background:var(--warning)}
.pay-track-behind>.pay-fill{background:var(--danger)}
.pay-track-none>.pay-fill{background:var(--muted)}
/* 比例数字随档位同色。带上 .pay-line 前缀是为了压过上面 .pay-line b{color:var(--ink)}
   （那条是 0,1,1，只写 .pay-pct-met 是 0,1,0，会被它吃掉）。取色与 .status 同源，
   橙档用的是 --warning，与全站警示色一致。 */
.pay-line .pay-pct-met{color:var(--success)}
.pay-line .pay-pct-near{color:var(--warning)}
.pay-line .pay-pct-behind{color:var(--danger)}
.pay-line .pay-pct-none{color:var(--muted)}
/* 三卡口状态点（进度条上方一排）：实心=已达标、空心=未达标、中性=无回款；
   门槛与「还差多少」在 title 里。打印态的可读性另有一笔账，见 r1 评审 P2-2
   （.tower/comms/reviews/review-feat-progress-payment-bar-restyle-pgbar01-reviewer-pgbar-01-r1.md）：
   黑白打印不输出背景色时 reached 只剩色块、missed 是圆环，实心=已达标正好反过来；
   阈值与还差金额也只存在于 title、不进打印。塔预裁决归后续小修批，此处仅留指引。 */
.pay-dots{display:flex;align-items:center;gap:4px}
.pay-dot{width:7px;height:7px;border-radius:50%;box-sizing:border-box}
.pay-dot-reached{background:var(--success)}
.pay-dot-missed{border:1.5px solid var(--danger);background:transparent}
.pay-dot-none{border:1.5px solid var(--muted);background:transparent}
.pay-register{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:10px}
.pay-register label{display:grid;gap:5px;color:var(--text);font-size:11px}
.pay-register input,.pay-register select{width:100%;height:34px;border:1px solid var(--border);border-radius:6px;padding:0 9px;background:#fff;font-size:12px}
@media(max-width:720px){.pay-register{grid-template-columns:1fr}}
.non-standard-review-list{display:grid;gap:10px}
.non-standard-review-item{border:1px solid var(--warning);background:var(--warning-bg);border-radius:6px;padding:10px 12px}
.non-standard-review-item .ns-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px}
.non-standard-review-item .ns-description{margin:6px 0;color:var(--text);font-size:12px;white-space:pre-wrap}
.ns-decision-options{display:flex;gap:14px;flex-wrap:wrap;margin-top:8px;font-size:12px}
.ns-decision-options label{display:flex;align-items:center;gap:5px}
.ns-replace-picker{display:grid;gap:8px;margin-top:10px;padding:9px;background:#fff;border:1px solid var(--line);border-radius:5px}
.ns-replace-picker[hidden]{display:none}
.ns-replace-picker .form-grid{margin:0}
.ns-replace-picker input[type=number]{width:100%;height:30px;border:1px solid var(--border);border-radius:5px;padding:0 7px;font-size:11px}
.ns-library-list{display:grid;gap:5px;max-height:180px;overflow:auto}
.ns-library-option{display:flex;align-items:flex-start;gap:7px;padding:6px 8px;border:1px solid var(--line);border-radius:5px;background:#fff;font-size:11px}
.ns-library-option small{display:block;color:var(--muted);font-size:10px;margin-top:2px}
.guided-demo-entry{position:fixed;top:12px;right:16px;z-index:90;display:flex;align-items:center;gap:8px}
.guided-demo-entry[hidden]{display:none}
.guided-demo-entry button[data-guide-state="error"]{border-color:var(--danger);color:var(--danger)}
.guided-demo-entry-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
#app-view .top-actions{padding-right:150px}
@media(max-width:720px){.guided-demo-entry{top:8px;right:8px}.guided-demo-entry .button{padding:6px 8px;font-size:11px}#app-view .top-actions{padding-right:126px}}

/* 委托回款与卡口总览那张表自己声明了 min-width:900px（8 列，仍比包裹层宽：1140px 视口下
   包裹层可用宽约 800px = 1140 − 236 侧栏 − 内边距），横向滚动仍是它的设计，豁免要留着。
   M93 把三卡口列并进回款进度列（9 → 8 列、1040 → 900px），故随列数更新了这段注释。
   lims2.css 的粘性表头在 ≥1140px 把 .table-wrap 摘成 overflow:visible（不摘表头就粘不住），
   这一处把它加回去，表头一并交回 static。登记口径见 lims2.css 粘性表头段。 */
@media(min-width:1140px){
  .table-wrap:has(> table > tbody#payment-overview-tbody){overflow:auto}
  .table-wrap:has(> table > tbody#payment-overview-tbody)>table>thead{position:static}
}

/* ═══ M211：/business/ 报价管理页 · Apple 默认视觉 + 8 档字体字号 ═══════════
   Apple 即默认：business/index.html 固定挂 data-theme="apple"（无主题切换开关），
   视觉全部来自共享件——theme-apple.css（M179 变量别名层）、nav-icons（M181 浅色
   侧栏 + 彩色图标）、theme-apple-overlay.css（M183 选择器覆盖层），三者逐条以
   [data-theme="apple"] 作用域，其余商务页不引这些文件、不挂该属性，零影响。
   本段只补两件事：① 覆盖层没盖到的本页控件在 Apple 态下的观感对齐；
   ② M190 口径的 8 档字体字号（18/19 × 小/中/大/特大）。 */

/* overlay ⑧ 只把 .form-grid/.filter-row/.fk-filter-field 与裸 select 抬到 8px 圆角；
   报价明细行内控件的容器类不在其列——同表里 select 会被覆盖层抬到 8px 而 input
   仍是 5px，出现两套圆角。这里在 Apple 态下把报价编辑器的几类控件一并抬平。
   （.item-editor/.qi-tier/.quote-item-select 的基础规则见上文「select 与 input 观感统一」段。） */
[data-theme="apple"] .item-editor input,[data-theme="apple"] .item-editor select,
[data-theme="apple"] .qi-tier input,[data-theme="apple"] .qi-tier select,
[data-theme="apple"] .quote-item-select{border-radius:8px}

/* 必填星号随 Apple 主题换 systemRed（--danger）：只在上方共享基座规则之上加
   html[data-theme="apple"] 作用域的覆盖——基座那条（含 #c0392b）保持原样，
   不挂 data-theme="apple" 的七个商务页颜色不变（评审 P2）。 */
html[data-theme="apple"] label:has(> :required)::before{color:var(--danger)}

/* ── 8 档字体字号（M190 口径，references/apple-preview 同源）──────────────
   html[data-font] 定方案：18 = 中文宋体（SimSun / Songti SC）+ 英文 Cambria（默认）；
   19 = 中文黑体（Microsoft YaHei / PingFang SC / Heiti SC）+ 英文 Segoe UI / Arial。
   18/19 是字体样张编号，不是字号。html[data-font-size] 把 --font-size-scale 覆写为
   1（小，基座原字号，无需规则）/ 1.1（中）/ 1.2（大）/ 1.35（特大）。
   作用域全部锁 html[data-font] / html[data-font-size]：只有挂了这组属性的页面
   （当前 = 报价管理页，index.html 标记 + head 内联脚本双保险）才生效；其余商务页
   不设属性、--font-size-scale 未定义，下方 calc 里的 var() 恒取 fallback 1，
   逐像素不变——「接入公共字号变量但不让其它页面默认字号改变」就落在这一点上。 */
html[data-font="18"] body{font-family:"Cambria","SimSun","Songti SC",serif}
html[data-font="19"] body{font-family:"Segoe UI",Arial,"Microsoft YaHei","PingFang SC","Heiti SC",sans-serif}
html[data-font-size="m"]{--font-size-scale:1.1}
html[data-font-size="l"]{--font-size-scale:1.2}
html[data-font-size="xl"]{--font-size-scale:1.35}
/* choices 渲染引擎的字号 token：vendor 只消费、从不定义（choices.min.css 里是
   var(--choices-font-size-md,14px) / sm 12px / lg 16px 三个 fallback），接到整页同一
   倍率上；小档（=1）时与 vendor fallback 逐像素相等。消费点：.choices=lg、
   .choices__inner 与 .choices__input=md、多选芯片=sm、下拉选项=md。 */
html[data-font]{--choices-font-size-md:calc(14px*var(--font-size-scale,1));--choices-font-size-sm:calc(12px*var(--font-size-scale,1));--choices-font-size-lg:calc(16px*var(--font-size-scale,1))}

/* 内容字号接倍率（写法同 lims2.css 参考快照的 M190 段）：值与基座字面量一一相同，
   只是换成 calc(Npx*var(--font-size-scale,1))。html[data-font] 前缀抬高特异度，
   压过 lims2.css 与本文件里的同名字面量规则；侧栏/顶栏/身份切换/演示入口等导航
   框架的字号保持字面量、不参与倍率（口径同 apple-preview）。 */
html[data-font] body{font-size:calc(14px*var(--font-size-scale,1))}
html[data-font] .page-head h1{font-size:calc(22px*var(--font-size-scale,1))}
html[data-font] .page-head .kicker{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .page-head p{font-size:calc(13px*var(--font-size-scale,1))}
html[data-font] .panel-heading h3{font-size:calc(15px*var(--font-size-scale,1))}
html[data-font] .panel-heading .muted{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .count-badge{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .button{font-size:calc(13px*var(--font-size-scale,1))}
html[data-font] .text-button{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .small-button{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] th{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] td{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] td strong{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] td small{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .status{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .timeline-item{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .timeline-item .t-time{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .timeline-item .t-body strong{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .timeline-item .t-body small{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .inline-note{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .inline-note .n-icon{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .modal-header h2{font-size:calc(18px*var(--font-size-scale,1))}
html[data-font] .modal-header .kicker{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .close-button{font-size:calc(22px*var(--font-size-scale,1))}
html[data-font] .form-grid label{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .form-grid input,html[data-font] .form-grid select,html[data-font] .form-grid textarea{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .form-grid label:has(:required)::before{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .field-error{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .choice-row label{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .form-grid .fk-group{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .fk-legend{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .fk-field .hint{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .fk-filter-field{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .filter-clear{font-size:calc(13px*var(--font-size-scale,1))}
html[data-font] .kv-grid .kv span{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .kv-grid .kv b{font-size:calc(13px*var(--font-size-scale,1))}
html[data-font] .toast span{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .toast p{font-size:calc(12px*var(--font-size-scale,1))}
/* 本文件的页级内容类（报价编辑器与商务各页共用的卡片/行编辑控件）一并接倍率 */
html[data-font] .empty-hint,html[data-font] .quote-selected-empty{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .quote-item-id{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .item-editor input{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .item-editor select,html[data-font] .qi-tier select,html[data-font] .quote-item-select{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .qi-tier input{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .cred-box b{font-size:calc(18px*var(--font-size-scale,1))}
html[data-font] .cred-box p{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .register-codes .code-chip{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .package-card .package-head{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .package-card small{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .acceptance-conclusion{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .acceptance-conclusion legend{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .disposal-sample .ds-head{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .disposal-method{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .disposal-method input[type="text"],html[data-font] .disposal-method input[type="number"]{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .disposal-intention select{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .confirm-item{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .confirm-item .confirm-reason input{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .warn-item{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .memo-card{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .memo-card small{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .pay-line{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .pay-gate{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .pay-gate strong{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .pay-gate small{font-size:calc(10px*var(--font-size-scale,1))}
html[data-font] .pay-register label{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .pay-register input,html[data-font] .pay-register select{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .non-standard-review-item{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .non-standard-review-item .ns-description{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .ns-decision-options{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .ns-replace-picker input[type=number]{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .ns-library-option{font-size:calc(11px*var(--font-size-scale,1))}
html[data-font] .ns-library-option small{font-size:calc(10px*var(--font-size-scale,1))}

/* ── 8 格分段控件（页面脚手架样式，非主题规则；写法同 apple-preview）────────
   桌面档（≥768px）在顶栏 .top-actions（.font-switch--d），并允许整条收缩——
   顶栏右侧还有演示入口预留（#app-view .top-actions 的 padding-right）、面包屑与
   身份切换，放不下时控件整条横向滚动而不是把顶栏撑破。手机档（<768px）换到
   内容区顶部（.font-switch--m，纯媒体查询换位）。控件自身文字保持 12px/11px
   固定，不参与字号倍率（导航小文字口径）。 */
.font-switch{display:inline-flex;align-items:center;gap:2px;padding:3px 4px;border:1px solid var(--line);border-radius:999px;background:var(--surface);max-width:100%;overflow-x:auto;scrollbar-width:none}
.font-switch::-webkit-scrollbar{display:none}
.font-switch-sep{flex:none;width:1px;align-self:stretch;margin:1px 4px;background:var(--line)}
.font-opt{flex:none;border:0;background:transparent;padding:5px 13px;border-radius:999px;font-size:12px;line-height:1.4;color:var(--muted);cursor:pointer;white-space:nowrap;transition:color .15s,background-color .15s,box-shadow .15s}
.font-opt:hover{color:var(--text)}
.font-opt.active{background:var(--blue-600);color:#fff;font-weight:600;box-shadow:0 1px 4px rgba(23,32,51,.18)}
.font-opt:focus-visible{outline:2px solid var(--blue-500);outline-offset:1px}
.font-switch--d{flex:0 1 auto;min-width:180px}
/* 顶栏一行制：桌面字体控件进顶栏后，右侧（profile + 身份切换 + 演示入口预留）比原来宽，
   space-between 下面包屑与身份触发器会被压到换行。这里只对挂了字体档的页面
   （html[data-font] = 报价管理页）收紧——面包屑让位收缩（省略号），profile 与身份
   触发器不许收缩，字体控件收缩到 min-width 后内部横滚。其余商务页零命中。 */
html[data-font] .topbar{gap:12px}
/* 面包屑保持 auto 基准、可收缩（省略号）：不能用 flex:1 —— basis 0 会让这一行
   「正好放下」，右侧永不触发收缩，面包屑自己反而恒为 0 宽。 */
html[data-font] .topbar .breadcrumb{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
html[data-font] .top-actions{flex-wrap:nowrap;min-width:0}
html[data-font] .top-actions .profile,html[data-font] .top-actions #identity-mount{flex:none}
html[data-font] .top-actions .identity-trigger{white-space:nowrap}
.font-switch--m{display:none}
@media(max-width:767.98px){
  .font-switch--d{display:none}
  .font-switch--m{display:inline-flex;margin:0 0 14px}
  .font-switch--m .font-opt{font-size:11px;padding:4px 10px}
}

/* ═══ M212：/business/ 报价列表 · 方案 C 顶部连续检索条 + 精确筛面板 ══════════
   形态抄自 references/apple-preview（filter-lab/c.html · M201 迁入）：一枚连续 Apple
   胶囊管检索——左漏斗开精确筛面板｜竖线分隔｜关键词输入占满中段｜右放大镜执行检索
   （Enter 同效）；生效条件摊平成可逐个 × 的 chip；表头零控件。类名 qs-*（检索条）与
   qf-*（面板 / chip）为本页新增，不与共享样式冲突。颜色走基座变量 + iOS 语义灰
   #f2f2f7/#8e8e93（systemGray6 / systemGray，与 Apple 默认皮肤同源）；内容字号全部
   接入 --font-size-scale（8 档字体×字号随动，其余商务页无该变量时恒取 fallback 1）；
   浮层 z 走 --z-page-panel(45) 页面级浮层档，fixed 定位挂 body 直下，不被表格裁剪。 */
.qs-search{display:flex;align-items:center;height:36px;margin:0 0 12px;background:#f2f2f7;border-radius:999px;padding:0 3px;transition:background .15s ease,box-shadow .15s ease}
.qs-search:focus-within{background:#ebebf0;box-shadow:var(--focus)}
.qs-ico{flex:none;display:inline-flex;align-items:center;justify-content:center;gap:3px;min-width:32px;height:30px;border:0;border-radius:999px;background:transparent;color:#8e8e93;padding:0 5px;cursor:pointer;transition:background .15s ease,color .15s ease}
.qs-ico:hover{background:rgba(120,120,128,.12);color:#6e6e73}
.qs-ico:active{background:rgba(120,120,128,.2)}
.qs-ico:focus{outline:none}
/* 胶囊内层按钮的焦点态用内描边：外圈 var(--focus) 已由容器 focus-within 出 */
.qs-ico:focus-visible{box-shadow:inset 0 0 0 2px rgba(0,113,227,.5)}
.qs-ico svg{display:block;flex:none}
/* 漏斗描边空心；有精确条件时描实变蓝（page.js 加 .is-active），面板展开时垫蓝底 */
.qs-ico-filter path{fill:none;stroke:currentColor;stroke-width:1.7;stroke-linejoin:round;stroke-linecap:round}
.qs-ico-filter.is-active{color:var(--blue-500)}
.qs-ico-filter.is-active path{fill:currentColor}
.qs-ico-filter[aria-expanded="true"]{background:rgba(0,113,227,.1)}
.qs-sep{flex:none;width:1px;height:16px;margin:0 2px;background:rgba(60,60,67,.29)}
.qs-search input{flex:1;min-width:0;border:0;background:transparent;font-size:calc(13px*var(--font-size-scale,1));color:var(--ink);padding:0 6px}
.qs-search input::placeholder{color:#8e8e93}
.qs-search input:focus{outline:none;box-shadow:none}
.qs-fbadge{display:inline-grid;place-items:center;min-width:15px;height:15px;padding:0 4px;border-radius:999px;background:var(--blue-500);color:#fff;font-size:calc(9px*var(--font-size-scale,1));font-weight:600}
.qs-fbadge[hidden]{display:none}
/* chip 条：生效条件的可见清单，每 chip 可单独 ×，右侧「全部清除」。
   margin 用负上距收紧与检索条的间距，同时兜住 flex-wrap 换行后的空隙。 */
.qf-chips{display:flex;align-items:flex-start;gap:8px;flex-wrap:wrap;margin:-2px 0 12px}
.qf-chips[hidden]{display:none}
#quote-chip-list{display:contents}
.qf-chip{display:inline-flex;align-items:center;gap:4px;max-width:100%;background:var(--blue-50);color:var(--blue-700);border-radius:999px;padding:3px 5px 3px 10px;font-size:calc(11px*var(--font-size-scale,1));font-weight:500}
.qf-chip>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.qf-chip button{display:grid;place-items:center;width:16px;height:16px;border:0;border-radius:50%;background:transparent;color:inherit;font-size:calc(12px*var(--font-size-scale,1));line-height:1;padding:0;cursor:pointer}
.qf-chip button:hover{background:rgba(0,113,227,.15)}
.qf-clear-all{flex:none;margin-left:auto}
/* 精确筛面板（锚定漏斗按钮下方；fixed + body 直下，z=页面级浮层 45 档）。
   桌面档刻意 overflow:visible：面板里的三态下拉是 form-kit 默认的 choices 增强
   （业务页禁 enhance:false），其下拉面板画在组件内部，overflow 裁剪会让第三档
   滚进滚动区才看得到；放它溢出去盖住表格才是下拉的本分。短视口的兜底是 JS
   定位里的 maxHeight + choices 自己的向上翻转。手机全屏档（≤560px）面板本身
   是滚动容器，overflow-y:auto 在那里恢复。 */
.qf-pop{position:fixed;z-index:var(--z-page-panel,45);width:300px;max-width:calc(100vw - 16px);max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 32px rgba(0,0,0,.16);padding:12px}
.qf-pop[hidden]{display:none}
.qf-pop-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 8px}
.qf-pop-head strong{font-size:calc(13px*var(--font-size-scale,1));color:var(--ink)}
.qf-pop-close{display:none}
/* 面板内的 form-kit 筛选行：基座 .filter-row 是横排筛选条（align-items:end、label
   min-width:170px），面板里要的是字段占满、提交按钮（完成）落右下的竖排形态，逐条改回。 */
.qf-pop .filter-row{display:block}
.qf-pop .filter-row label{min-width:0}
.qf-pop .filter-row .fk-filter-field{display:grid;gap:5px}
.qf-pop #btn-quote-filter{display:block;margin:12px 0 0 auto}
@media(max-width:560px){
  /* 手机进入精确筛选后改为全屏操作面板：不再受 300px 浮层宽度限制，键盘弹出时
     由 dvh 跟随可视高度收缩；safe-area 给刘海屏和底部手势条留出操作空间。JS
     仍负责桌面锚定与手机打开前的定位，四条 !important 覆盖打开时写入的内联 left/top。 */
  .qf-pop{left:0!important;top:0!important;right:0!important;bottom:0!important;width:100vw;max-width:none;height:100vh;height:100dvh;max-height:100vh!important;max-height:100dvh!important;overflow-y:auto;overscroll-behavior:contain;border:0;border-radius:0;padding:max(58px,calc(12px + env(safe-area-inset-top))) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left))}
  /* 手机档关闭钮放**左上**：右上被演示入口（.guided-demo-entry，fixed 右上、z=90）
     占着——面板 z 走 45 档，任何面板内元素都压不过它，右上叠放只会互相盖住。
     左上是空的，点击目标还大；面板本体是全屏的，× 绝对定位于面板内即可。 */
  .qf-pop-close{display:grid;place-items:center;position:absolute;top:max(10px,env(safe-area-inset-top));left:max(10px,env(safe-area-inset-left));z-index:2;width:32px;height:32px;padding:0;border:1px solid #d1d1d6;border-radius:50%;background:#f2f2f7;color:#6e6e73;font:400 20px/1 system-ui,sans-serif;cursor:pointer}
  .qf-pop-close:hover{background:#e5e5ea;color:#3a3a3c}
  .qf-pop-close:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,113,227,.25)}
  .qs-search{height:34px}
}
/* 检索条 / 面板 / chip 的字号接 8 档倍率（html[data-font] 前缀抬高特异度，压过
   lims2.css 的字面量字号；其余商务页无 data-font 属性、逐像素不变）。
   .fk-filter-field 的 label 已有 M190 段的倍率规则，这里补齐 select 与 hint。 */
html[data-font] .qf-pop .filter-row select{font-size:calc(12px*var(--font-size-scale,1))}
html[data-font] .qf-pop .filter-row .hint{font-size:calc(11px*var(--font-size-scale,1))}

/* 打印态：方案 C 三件交互控件整组摘掉，打印只留筛选后的七列数据表
   （评审 r1 P2-1：旧契约是 lims2.css:183 的 @media print{.filter-head-row{display:none}}，
   M212 撤掉表头筛选行后该规则不再命中，这里补上等价物）。!important 压过
   .qs-search 的 flex、.qf-chips 的 flex 与 .qf-pop 的 fixed（含手机全屏档的
   !important 几何覆盖），漏斗打开时打印也不会把浮层打进去。 */
@media print{.qs-search,.qf-chips,.qf-pop{display:none!important}}

/* ═══ M225：商务八页 Apple 接入（报价页之外的七页 + 全页壳层件）══════════════
   七页接入同一套共享件：theme-apple.css / nav-icons / theme-apple-overlay.css /
   apple-font-preferences.css / apple-mobile-nav.css / apple-list-filter.css，
   全部由共享文件自带 [data-theme="apple"] / html[data-font] 作用域，本段只补
   共享层管不到的两件事。 */

  /* ── ① 方案 C 面板的 form-kit 水合形态 ──────────────────────────────────
   M221 共享面板的「面板内唯一滚动区」语义在 form-kit 页面由 .filter-row 承担：
   hydrateFilter 清空面板表单后只落一个 .filter-row（字段竖排，共享层已有
   面板内 display:block 的竖排规则），这里经页面自有类 .biz-filter-form 给它接上
   滚动区三件套（不写共享 alf 类名——共享层与页内副本零冲突的审计口径）；
   「完成」按钮在 form 之外用 form= 关联（type=submit），落面板脚部常驻条（共享层的
   pop-foot）不随字段滚走——与表头筛选行「按钮在壳外靠 form= 关联」同一契约。 */
.biz-filter-form .filter-row{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain}

/* ── ② Apple 手机档顶栏让位（与 apple-mobile-nav.css 的壳层让位同门）───────
   底栏在场（html[data-apple-mobar]）且 Apple 主题的手机档（<768px）下，顶栏
   右侧整组撤掉：字体控件手机档本就在内容区顶部（.font-switch--m），样式切换
   归底栏「切换」格，身份归底栏「我的」格（apple-shell.js 把 #identity-mount
   搬进槽内）——同一批信息不该在顶栏再挂一份。切回默认主题或回桌面档时门自动
   关闭，顶栏恢复现网形态。口径同 references/apple-preview（M185 手机档藏
   .top-actions）。 */
@media(max-width:767.98px){
  html[data-apple-mobar][data-theme="apple"] #app-view .top-actions{display:none}
}
