/* ===== v0892_lib.css — fe-lib（item 11 / 17 / 18 / 19 / 20）=====
   只含 v92- 前缀新组件样式；桌面与手机共用（Lead 统一在 index.html / m.html 末尾挂载）。
   规则：① 不覆盖既有 class；② 只用 style.css/m.html 已声明的 token（不写 fallback 兜底）；
        ③ 字号只走 8 档字阶、圆角只走 4 档 token；④ 窄屏用 @media 回退单列。
   v0.8.9.2 整改：`--line` 全站未定义 → 统一改 `var(--hair)`（发丝线）/ `var(--border)`（需更明显处）；
   字号 10/11.5/12.5/13.5/17px → `--fs-1/--fs-2/--fs-3/--fs-5`；圆角 12px → `--r-m`、999px → `--r-full`；
   所有 `var(--x, fallback)` 的假兜底已删除。 */

/* ---------- 通用：详情弹窗 ---------- */
.v92-detail { display: flex; flex-direction: column; gap: 12px; }
.v92-sec { border: 1px solid var(--hair); border-radius: var(--r-s); padding: 10px 12px; background: var(--card); }
.v92-sec-t { font-size: var(--fs-2); font-weight: 700; color: var(--text-sub); margin-bottom: 7px; letter-spacing: .3px; }
.v92-kv { display: flex; gap: 10px; padding: 5px 0; border-bottom: 1px dashed var(--hair); font-size: var(--fs-3); align-items: flex-start; }
.v92-kv:last-child { border-bottom: none; }
.v92-kv > .k { flex: 0 0 92px; color: var(--text-sub); font-size: var(--fs-2); }
.v92-kv > .v { flex: 1; min-width: 0; word-break: break-word; }
.v92-kv > .v.mono { font-family: ui-monospace, Consolas, monospace; font-size: var(--fs-2); }
.v92-kv .v92-muted { color: var(--text-light); }
.v92-tagrow { display: flex; flex-wrap: wrap; gap: 5px; }
/* v0.8.9.2 去灰：地图框底色只是「瓦片未加载 / 无坐标」时的骨架底，用中性色（text 5%），不用蓝灰 */
.v92-map { height: 260px; border-radius: var(--r-s); overflow: hidden; background: color-mix(in srgb, var(--text) 5%, transparent); position: relative; z-index: 1; }
.v92-map-empty { height: 96px; display: flex; align-items: center; justify-content: center; border: 1px dashed var(--border); border-radius: var(--r-s); color: var(--text-sub); font-size: var(--fs-2); }
/* 提示卡：卡片内部不铺灰底 → 发丝线 + 主题浅色（primary 6%）强调 */
.v92-hint-card { font-size: var(--fs-2); line-height: 1.7; color: var(--text-sub); background: color-mix(in srgb, var(--primary) 6%, transparent); border: 1px solid var(--hair); border-radius: var(--r-s); padding: 9px 12px; }
.v92-danger { color: var(--danger); }
.v92-nowrap { white-space: nowrap; }

/* 列表行可点（详情弹窗入口）；hover 走全站口径 primary 5% */
tr.v92-row-click { cursor: pointer; }
tr.v92-row-click:hover { background: color-mix(in srgb, var(--primary) 5%, transparent); }

/* ---------- 角色 / 服装道具库（item 19） ---------- */
.v92-rolebar { display: flex; flex-wrap: wrap; gap: 7px; margin: 0 0 12px; align-items: center; }
.v92-role-chip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; border-radius: var(--r-full);
  border: 1px solid var(--border); background: var(--card); cursor: pointer;
  font-size: var(--fs-2); color: var(--text); user-select: none; }
.v92-role-chip.on { border-color: var(--primary-ink); color: var(--primary-ink); background: color-mix(in srgb, var(--primary) 8%, transparent); font-weight: 600; }
.v92-role-chip small { color: var(--text-light); font-weight: 400; }
.v92-cos-groups { display: flex; flex-direction: column; gap: 12px; }
.v92-cos-group { border: 1px solid var(--hair); border-radius: var(--r-m); padding: 10px 12px; }
.v92-cos-group-t { display: flex; align-items: center; gap: 7px; font-size: var(--fs-2); font-weight: 700; color: var(--text-sub); margin-bottom: 9px; }
.v92-cos-group-t .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--primary); }
.v92-cos-group-t small { color: var(--text-light); font-weight: 400; }
.v92-cos-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 9px; }
.v92-cos-card { border: 1px solid var(--hair); border-radius: var(--r-s); padding: 9px 11px; cursor: pointer;
  background: var(--card); transition: border-color .15s; }
/* C7（task-19）：hover 不得改变 getBoundingClientRect → 只变描边，不做位移 */
.v92-cos-card:hover { border-color: var(--primary); }
.v92-cos-card > b { display: block; font-size: var(--fs-3); margin-bottom: 4px; }
.v92-cos-card > p { margin: 0; font-size: var(--fs-1); color: var(--text-sub); line-height: 1.6; }
.v92-cos-card .m { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
/* 中性徽章不铺蓝灰 → 主题浅色（primary 6%）；语义状态色（ok/warn/bad）保留自身色系 */
.v92-cos-badge { font-size: var(--fs-1); padding: 1px 7px; border-radius: var(--r-full); background: color-mix(in srgb, var(--primary) 6%, transparent); color: var(--text-sub); white-space: nowrap; }
.v92-cos-badge.ok { background: rgba(47,158,99,.14); color: #2f9e63; }
.v92-cos-badge.warn { background: rgba(217,154,6,.16); color: #b9820a; }
.v92-cos-badge.bad { background: rgba(214,69,69,.14); color: var(--danger); }
.v92-locked { font-size: var(--fs-1); color: var(--text-light); }
.v92-item-list { display: flex; flex-direction: column; gap: 6px; }
/* 行内列表：不铺灰底，用发丝线分组；hover 走全站口径 primary 5% */
.v92-item-row { display: flex; align-items: center; gap: 9px; padding: 7px 9px; border-radius: var(--r-s); background: transparent; border: 1px solid var(--hair); cursor: pointer; }
.v92-item-row:hover { background: color-mix(in srgb, var(--primary) 5%, transparent); }
.v92-item-row .nm { flex: 1; min-width: 0; }
.v92-item-row .nm b { font-size: var(--fs-2); }
.v92-item-row .nm p { margin: 2px 0 0; font-size: var(--fs-1); color: var(--text-sub); }

/* ---------- 素材库按类别分栏（item 11） ---------- */
.v92-mat-sections { display: flex; flex-direction: column; gap: 16px; }

/* ---------- task-16 / v0.8.9.2：素材 7 档固定帧 + 按档位分组排列 ----------
   老板 2026-10-04：「排列中间空的位置停车用吗？根据大小排列啊」
   → 按 ratio_key 分成 7 组，**组内等尺寸 flex-wrap 网格**（同组帧宽相同 ⇒ 每行严丝合缝、中间无空洞）；
     组间顺序 = 帧宽降序；组内最后一行不满靠左（唯一允许的空位）。
   本文件不定义帧尺寸（归 v0892_ratio.css），只做容器与「卡片贴帧宽」。 */
.v92-grp + .v92-grp { margin-top: 14px; }
.v92-grp-t { font-size: var(--fs-1); color: var(--text-light); margin: 0 0 8px; }
.v92-grp-grid { --ggap: 12px; display: flex; flex-wrap: wrap; gap: var(--ggap); align-items: flex-start; width: 100%; }

/* ══ v0.8.9.3（老板 2026-10-04 第二次口径）══
   老板原话：「大小像素应该基本差不多，16:9、3:2、2:3 的就差不多，其他的尺寸只改比例相关的像素，
   而不是现在一个图占全宽，三四张图占全宽；现在要求竖图 7 张、横图 6 张，同一比例的图一样大，
   不同比例按竖图横图划分也基本保持一样大，不留左右宽，如果一行只有一张图的时候允许后方留空位。」

   旧实现（G6）是 `flex: 1 1 calc(--fw × --mrs)`：**一律 flex-grow 铺满整行** →
   ① 末行只剩 1 张时被拉成整行宽（"一个图占全宽"）；
   ② 末行剩 3~4 张时各自放大到 1/3、1/4 宽（"三四张图占全宽"）；
   ③ 每行几张由帧宽与窗口宽现算 → 同一档位在不同窗口下 6 张/7 张乱变。
   → 改为 **固定行容量 + 等分宽 + 不拉伸**： */
.v92-grp-grid[data-rk="16:9"], .v92-grp-grid[data-rk="3:2"],
.v92-grp-grid[data-rk="4:3"],  .v92-grp-grid[data-rk="unknown"] { --per: 6; }   /* 横图：6 张/行 */
.v92-grp-grid[data-rk="1:1"],  .v92-grp-grid[data-rk="3:4"],
.v92-grp-grid[data-rk="2:3"],  .v92-grp-grid[data-rk="9:16"]    { --per: 7; }   /* 竖图/方图：7 张/行 */

/* 窄窗口按同比例降档，**行数不变**，只保证单张不会被压得太小
   （实测：不降档时内容宽 1100px 下横图仅 167px、竖图 141px —— 比旧版还难看清）。
   阈值按「视口宽」给（内容宽 ≈ 视口 − 侧栏 185 − 内边距 40）：≥2000 用老板口径 6/7。 */
@media (max-width: 1999px) {
  .v92-grp-grid[data-rk="16:9"], .v92-grp-grid[data-rk="3:2"],
  .v92-grp-grid[data-rk="4:3"],  .v92-grp-grid[data-rk="unknown"] { --per: 5; }
  .v92-grp-grid[data-rk="1:1"],  .v92-grp-grid[data-rk="3:4"],
  .v92-grp-grid[data-rk="2:3"],  .v92-grp-grid[data-rk="9:16"]    { --per: 6; }
}
@media (max-width: 1499px) {
  .v92-grp-grid[data-rk="16:9"], .v92-grp-grid[data-rk="3:2"],
  .v92-grp-grid[data-rk="4:3"],  .v92-grp-grid[data-rk="unknown"] { --per: 4; }
  .v92-grp-grid[data-rk="1:1"],  .v92-grp-grid[data-rk="3:4"],
  .v92-grp-grid[data-rk="2:3"],  .v92-grp-grid[data-rk="9:16"]    { --per: 5; }
}

.v92-grp-grid > .mcard {
  /* 等分宽 = (100% − (n−1)·gap) / n：
     ① `flex-grow: 0`（旧值 1）→ 末行 1~4 张不再被拉伸，**保持与满行同样的尺寸**，右侧留空（老板明确允许）；
     ② 宽度只跟"一行几张 + 容器宽"有关，与窗口档位 --mrs 解耦 → 同一比例**跨行跨窗口都一样大**；
     ③ 满行时 n·w + (n−1)·gap = 100% → 严丝合缝，不留左右空。 */
  flex: 0 0 calc((100% - (var(--per, 7) - 1) * var(--ggap)) / var(--per, 7));
  min-width: 0;
  max-width: none;
  width: auto;
  margin: 0;
}
.v92-grp-grid > .mcard .mcard-img.v92-frame { width: 100%; height: auto; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-16x9 { aspect-ratio: 16 / 9; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-3x2 { aspect-ratio: 3 / 2; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-4x3 { aspect-ratio: 4 / 3; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-1x1 { aspect-ratio: 1 / 1; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-3x4 { aspect-ratio: 3 / 4; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-2x3 { aspect-ratio: 2 / 3; }
.v92-grp-grid > .mcard .mcard-img.v92-frame.v92-r-9x16 { aspect-ratio: 9 / 16; }
.v92-grp-grid > .mcard .mcap { width: 100%; box-sizing: border-box; overflow: hidden; padding: 6px 8px 7px; }
/* 卡片说明压到两行以内（名称 1 行省略 + 徽章 1 行横排），减少竖向浪费、提高面积占用率 */
.v92-grp-grid > .mcard .mname { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.v92-grp-grid > .mcard .mtags { flex-wrap: nowrap; overflow: hidden; }
/* 窄屏：间距与说明再收一档（说明比例更占竖向空间，直接影响面积占用率） */
@media (max-width: 767px) {
  .v92-grp-grid { --ggap: 8px; }
  .v92-grp-grid > .mcard .mcap { padding: 3px 6px 4px; line-height: 1.3; }
  .v92-grp-grid > .mcard .mname { font-size: var(--fs-1); line-height: 1.25; }
  .v92-grp-grid > .mcard .mtags { gap: 3px; margin-top: 2px; }
  .v92-grp-grid > .mcard .mtags .badge { font-size: var(--fs-1); padding: 0 4px; line-height: 1.4; }
}
.mcard .mcard-img.v92-frame { position: relative; overflow: hidden; }
.mcard .mcard-img.v92-frame[class*="v92-r-"] > img {
  width: 100%; height: 100%; aspect-ratio: auto; object-fit: contain; display: block;
}
.mcard .mcard-img.v92-frame[class*="v92-r-"] > .mnoimg { width: 100%; height: 100%; }
/* L1（audit round3 高）：素材详情「无附件」空态容器不得塌成 0 高 —— 否则提示被整段裁掉。 */
#matview .mview-left { min-height: 120px; }
#matview .mview-empty { min-height: 120px; display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: 8px; }
.v92-mat-sec > .v92-mat-sec-t { display: flex; align-items: center; gap: 8px; font-size: var(--fs-3); font-weight: 700;
  color: var(--text-sub); margin: 0 0 9px; padding-bottom: 6px; border-bottom: 1px solid var(--hair); }
.v92-mat-sec > .v92-mat-sec-t .n { font-size: var(--fs-1); font-weight: 400; color: var(--text-light); }
.v92-ownerbar { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }

/* v0.8.9.2 v2: 「参考类型 + 归属」合并为同一行（老板反馈：个人作品筛选不准再多占一行）。
   - .v92-mfb 取消换行，筛选区恒为一行；类型 chips 放在可横向滚动的 .v92-mfb-scroll 内；
   - 放不下时 JS 加 .v92-collapsed → 归属内联 chips 收成右端紧凑下拉；再不够加 .v92-hint-off 隐藏提示；
   - chip 与下拉统一 29px 高 + align-items:center → 「归属 top 与类型 top」差值恒为 0；
   - select 必须显式 width:auto —— style.css 有 `input,select,textarea{width:100%}`，否则下拉会撑满整行。 */
.mat-filter-bar.v92-mfb { flex-wrap: nowrap; gap: 6px; overflow: hidden; }
.mat-filter-bar.v92-mfb .v92-mfb-scroll {
  display: flex; align-items: center; gap: 7px; flex: 1 1 auto; min-width: 0;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; padding: 1px 0;
}
.mat-filter-bar.v92-mfb .v92-mfb-scroll::-webkit-scrollbar { height: 5px; }
.mat-filter-bar.v92-mfb .v92-mfb-scroll::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--text) 18%, transparent); border-radius: 3px; }
.mat-filter-bar.v92-mfb .v92-mfb-scroll > * { flex: 0 0 auto; }
.mat-filter-bar.v92-mfb .mfb-label { white-space: nowrap; }
.mat-filter-bar.v92-mfb .v92-mfb-sep { width: 1px; height: 16px; margin: 0 3px; background: var(--border); }
.mat-filter-bar.v92-mfb .v92-owner-inline { display: inline-flex; align-items: center; gap: 7px; }
.mat-filter-bar.v92-mfb .v92-mfb-hint { flex: 0 0 auto; margin-left: 4px; white-space: nowrap; }
.mat-filter-bar.v92-mfb .chip { height: 29px; display: inline-flex; align-items: center; box-sizing: border-box; }
.mat-filter-bar.v92-mfb .v92-owner-sel {
  display: none; flex: 0 0 auto; width: auto; height: 29px; box-sizing: border-box; padding: 0 8px;
  border: 1px solid var(--border); border-radius: var(--r-s);
  background: var(--card); color: var(--text); font-size: var(--fs-2); cursor: pointer;
}
.mat-filter-bar.v92-mfb.v92-collapsed .v92-owner-inline,
.mat-filter-bar.v92-mfb.v92-collapsed .v92-mfb-nlabel { display: none; }
.mat-filter-bar.v92-mfb.v92-collapsed .v92-owner-sel { display: inline-block; }
.mat-filter-bar.v92-mfb.v92-hint-off .v92-mfb-hint { display: none; }

/* 手机端（m/lib.js）：类型 chips 横滑 + 归属紧凑下拉，仍为同一行，不新增整行 */
#scr-lib .v92m-matfilter { display: flex; align-items: center; gap: 6px; flex-wrap: nowrap; }
#scr-lib .v92m-matfilter .v92m-mfc-scroll {
  display: flex; align-items: center; gap: 6px; flex: 1 1 auto; min-width: 0;
  overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
}
#scr-lib .v92m-matfilter .v92m-mfc-scroll::-webkit-scrollbar { display: none; }
#scr-lib .v92m-matfilter .v92-owner-sel {
  flex: 0 0 auto; width: auto; height: 28px; box-sizing: border-box; padding: 0 8px;
  border: 1px solid var(--hair); border-radius: var(--r-full);
  background: var(--card); color: var(--text); font-size: var(--fs-1);
}

/* ---------- 物料规划（item 20） ---------- */
.v92-cos-hint { display: flex; align-items: center; gap: 9px; font-size: var(--fs-2); line-height: 1.6;
  border-radius: var(--r-s); padding: 10px 13px; margin-bottom: 12px;
  background: color-mix(in srgb, var(--primary) 6%, transparent); border: 1px solid color-mix(in srgb, var(--primary) 25%, transparent); color: var(--text); }
.v92-cos-hint .ic { flex: 0 0 auto; width: 18px; height: 18px; }
.v92-cos-hint b { color: var(--primary-ink); }
.v92-cosplan-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 9px; }
.v92-cosplan-card { border: 1px solid var(--hair); border-radius: var(--r-s); padding: 9px 11px; }
.v92-cosplan-card b { font-size: var(--fs-2); display: block; margin-bottom: 3px; }
.v92-cosplan-card p { margin: 0; font-size: var(--fs-1); color: var(--text-sub); }

/* ---------- 通用看图器 V92Viewer ---------- */
.v92v-mask { position: fixed; inset: 0; z-index: 99999; background: rgba(10,14,22,.86);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 22px; }
.v92v-stage { position: relative; max-width: 92vw; max-height: 74vh; display: flex; align-items: center; justify-content: center; }
.v92v-stage img { max-width: 92vw; max-height: 74vh; object-fit: contain; border-radius: var(--r-s); background: rgba(255,255,255,.04); }
.v92v-fail { color: #c8d2e0; font-size: var(--fs-3); padding: 60px 30px; border: 1px dashed rgba(200,210,224,.35); border-radius: var(--r-s); }
.v92v-cap { color: #eef2f8; font-size: var(--fs-3); text-align: center; max-width: 88vw; }
.v92v-cap .sub { display: block; margin-top: 4px; font-size: var(--fs-1); color: #a8b4c6; }
.v92v-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 42px; height: 42px; border-radius: 50%;
  border: none; cursor: pointer; background: rgba(255,255,255,.16); color: #fff; font-size: var(--fs-7); line-height: 1; }
.v92v-nav.prev { left: -56px; } .v92v-nav.next { right: -56px; }
.v92v-nav:disabled { opacity: .3; cursor: default; }
.v92v-close { position: fixed; top: 16px; right: 20px; width: 38px; height: 38px; border-radius: 50%; border: none;
  cursor: pointer; background: rgba(255,255,255,.16); color: #fff; font-size: var(--fs-5); }
.v92v-idx { color: #a8b4c6; font-size: var(--fs-2); }

@media (max-width: 720px) {
  .v92-cos-grid, .v92-cosplan-grid { grid-template-columns: 1fr; }
  .v92-kv > .k { flex: 0 0 78px; }
  .v92-map { height: 180px; }
  .v92v-nav.prev { left: 4px; } .v92v-nav.next { right: 4px; }
  .v92v-nav { background: rgba(255,255,255,.24); }
}

/* ══════════ item 21-1：计划详情「📦 物料清单」══════════
   与 _ui_preview_site/v0892_关联物料至计划详情_预览.html 的 B 段一致（预览已确认）。 */
.v92-mat-plan { display: flex; flex-direction: column; gap: 10px; }
.v92-mat-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.v92-mat-bar .sp { flex: 1; }
.v92-mat-sum { display: flex; gap: 6px; flex-wrap: wrap; }
.v92-mat-group { border: 1px solid var(--hair); border-radius: 12px; padding: 10px 12px; }
.v92-mat-group-t { display: flex; align-items: center; gap: 7px; font-size: var(--fs-3); font-weight: 700;
                   color: var(--text-sub); margin-bottom: 9px; }
.v92-mat-group-t .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--primary); }
.v92-mat-group-t small { color: var(--text-light); font-weight: 400; }
.v92-mat-row { display: flex; align-items: center; gap: 9px; padding: 8px 10px; border-radius: 9px;
               background: rgba(120, 140, 180, .07); }
.v92-mat-row + .v92-mat-row { margin-top: 6px; }
.v92-mat-row.is-missing { background: rgba(176, 42, 46, .07); }
.v92-mat-row .nm { flex: 1; min-width: 0; }
.v92-mat-row .nm b { font-size: var(--fs-3); display: block; }
.v92-mat-row .nm p { margin: 2px 0 0; font-size: 11px; color: var(--text-sub); line-height: 1.6; }
.v92-mat-owner { display: inline-flex; align-items: center; gap: 5px; font-size: 11px;
                 color: var(--text-sub); white-space: nowrap; }
.v92-mat-owner .av { width: 16px; height: 16px; border-radius: 50%; background: rgba(120, 140, 180, .2);
                     display: inline-flex; align-items: center; justify-content: center; font-size: var(--fs-1); }
.v92-mat-pill { font-size: var(--fs-1); padding: 2px 8px; border-radius: 999px; white-space: nowrap;
                background: rgba(120, 140, 180, .14); color: var(--text-sub); flex: none; }
.v92-mat-pill.s-in { background: rgba(43, 138, 62, .14); color: var(--ok-ink); }
.v92-mat-pill.s-out { background: rgba(120, 140, 180, .16); color: var(--text-sub); }
.v92-mat-pill.s-book { background: rgba(42, 99, 216, .12); color: var(--primary-ink); }
.v92-mat-pill.s-fix { background: rgba(150, 105, 12, .16); color: var(--gold-ink); }
.v92-mat-pill.s-lost { background: rgba(176, 42, 46, .13); color: var(--danger-ink); }
.v92-mat-warn { font-size: var(--fs-1); color: var(--gold-ink); display: inline-flex; align-items: center; gap: 4px; }
.v92-mat-warn.bad { color: var(--danger-ink); }
.v92-mat-locked { display: flex; align-items: center; gap: 8px; font-size: 12px; padding: 8px 12px;
                  border-radius: 10px; background: rgba(120, 140, 180, .10);
                  border: 1px dashed var(--hair); color: var(--text-sub); }
/* 选择弹窗里的候选行 */
.v92-mat-pick { display: flex; align-items: center; gap: 9px; padding: 7px 10px; border-radius: 9px;
                cursor: pointer; }
.v92-mat-pick:hover { background: rgba(120, 140, 180, .08); }
.v92-mat-pick input { flex: none; }
/* v0.8.10.9（老板：选项框位置不对）——通用输入框规则（如 .modal-body input{width:100%}）
   会把这里的复选框也撑成整行宽，于是"框"被挤到文字下方（实测 Y 偏移 30~50px）。
   显式把复选框钉回 16px 并居中，避免继承表单输入框的宽度。 */
.v92-mat-pick > input[type="checkbox"], .v92-mat-pick > input[type="radio"] {
  width: 16px; height: 16px; min-width: 16px; flex: 0 0 16px; margin: 0; box-sizing: border-box;
}
.v92-mat-pick { align-items: center; }
.v92-mat-pick span { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.v92-mat-pick b { font-size: var(--fs-3); font-weight: 600; }
.v92-mat-pick small { font-size: 11px; color: var(--text-light); }
@media (max-width: 720px) {
  .v92-mat-row { flex-wrap: wrap; }
  .v92-mat-row .nm { flex: 1 1 100%; }
}
