/* ============================================================
   心元 · 数据导入模块（static/import/import.css）
   ------------------------------------------------------------
   令牌全部取自 /static/shared/demo-ui.css（勿私造颜色）。
   本文件只定义模块私有类，前缀 im- —— 老页面零影响。
   铁律：375-430px 手机画布硬要求 / 正文≥13px / 禁虚线 /
        卡片细金线圆角16px / 大数字衬线 + tabular-nums。
   ============================================================ */

/* ── 复位：demo-ui.css 不带 box-sizing/body 复位，页面自己带
      否则 .xy-wrap{width:100%;padding-inline:20px} 会撑出 32px 横向滚动
      （2026-09-13 实测 375/390/430 三档 docScrollW 均超视口 32px，已修） ── */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0}
body{-webkit-tap-highlight-color:transparent}

.im-wrap{padding:0 var(--sp-5) var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-4)}

/* ── 页头（模块内统一） ── */
.im-top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);
  padding:var(--sp-4) var(--sp-5) var(--sp-2)}
.im-top .im-title{font-size:var(--fs-card-t);font-weight:800;letter-spacing:.5px;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.im-ghost{border:1px solid var(--line);background:var(--card);color:var(--gold-deep);
  padding:0 var(--sp-3);min-height:var(--tap);min-width:var(--tap);border-radius:var(--r-pill);
  font-size:var(--fs-caption);font-weight:600;flex:none}

/* ── 卡片 ── */
.im-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r-card);
  padding:var(--sp-5);box-shadow:var(--shadow-1)}
.im-card>*:first-child{margin-top:0}
.im-card h2{font-size:var(--fs-sec-t);font-weight:800;letter-spacing:1px;margin-bottom:var(--sp-3);
  line-height:1.3}
.im-card h2 .im-cnt{font-size:var(--fs-caption);font-weight:600;color:var(--ink-3);margin-left:var(--sp-2)}
.im-card h3{font-size:var(--fs-body);font-weight:700;margin:var(--sp-4) 0 var(--sp-2)}
.im-hint{font-size:var(--fs-note);color:var(--ink-2);line-height:1.7}

/* ── 大数字（主角，衬线） ── */
.im-num{font-family:Georgia,"Songti SC","STSong",serif;font-weight:700;
  font-size:var(--fs-num);color:var(--ink);line-height:1.15;
  font-variant-numeric:lining-nums tabular-nums;font-feature-settings:"lnum" 1,"tnum" 1}
.im-num.unit{font-size:.36em;font-family:inherit;color:var(--ink-3);margin-left:5px;letter-spacing:0}

/* ── 类型选择卡（2×2 网格，375 也放得下） ── */
.im-flows{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
/* 【2026-09-14 出界扫描修复】网格子项默认 min-width:auto，会被自身内容顶住不许缩
   （实测 360px 下两个按钮各 160px + 间距 > 容器 → 整体右出 6px）。加 min-width:0 才让它真缩。 */
.im-flows > *{min-width:0}
.im-flow{position:relative;text-align:left;background:var(--card);border:1.5px solid var(--line);
  border-radius:14px;padding:var(--sp-4);min-height:96px;display:flex;flex-direction:column;
  gap:4px;justify-content:flex-start}
.im-flow .im-fk{font-size:var(--fs-body);font-weight:800;color:var(--ink);letter-spacing:.5px}
.im-flow .im-fs{font-size:var(--fs-caption);color:var(--ink-3);line-height:1.5}
.im-flow .im-fe{font-size:var(--fs-caption);color:var(--gold-deep);font-weight:700}
.im-flow.on{border-color:var(--gold);background:#fffaf0;box-shadow:0 0 0 3px rgba(176,141,62,.12)}
.im-flow.on::after{content:"✓";position:absolute;top:8px;right:10px;font-size:14px;
  font-weight:800;color:var(--bud)}

/* ── 上传区 ── */
.im-drop{border:1.5px solid var(--gold-line);border-radius:var(--r-card);background:var(--paper);
  padding:var(--sp-5) var(--sp-4);text-align:center;display:flex;flex-direction:column;
  align-items:center;gap:var(--sp-3)}
.im-drop.hot{border-color:var(--gold);background:#fffaf0}
.im-drop .im-dt{font-size:var(--fs-body);font-weight:700;color:var(--ink)}
.im-drop .im-ds{font-size:var(--fs-caption);color:var(--ink-3);line-height:1.6}
.im-drop input[type=file]{display:none}
.im-fname{font-size:var(--fs-note);color:var(--ink);font-weight:600;word-break:break-all;
  max-width:100%;text-align:center}

/* ── 按钮 ── */
.im-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  min-height:52px;border:none;border-radius:var(--r-btn,12px);font-size:var(--fs-body);
  font-weight:700;letter-spacing:1px;background:linear-gradient(135deg,var(--bud),#186a44);
  color:#fff}
.im-btn:disabled{background:var(--gray-soft);color:var(--ink-3)}
.im-btn.line{background:transparent;border:1.5px solid var(--gold);color:var(--gold-deep)}
.im-btn.sm{min-height:44px;font-size:var(--fs-note);letter-spacing:.5px;width:auto;padding:0 var(--sp-4)}
.im-row{display:flex;gap:var(--sp-3);align-items:stretch}
.im-row>*{flex:1}

/* ── 进度条 ── */
.im-bar{height:10px;border-radius:var(--r-pill);background:var(--gray-soft);overflow:hidden;width:100%}
.im-bar>i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--bud),#2aa06a);
  border-radius:var(--r-pill);transition:width .2s ease}
.im-barlb{font-size:var(--fs-caption);color:var(--ink-2);text-align:center;
  font-variant-numeric:lining-nums tabular-nums}

/* ── 校验三档计数 ── */
.im-tally{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin:var(--sp-2) 0 0}
.im-tally .t{background:var(--card);border:1px solid var(--line);border-radius:var(--r-sm);
  padding:var(--sp-3);text-align:center}
.im-tally .t .v{font-family:Georgia,"Songti SC",serif;font-weight:800;font-size:26px;line-height:1.1;
  font-variant-numeric:lining-nums tabular-nums}
.im-tally .t .l{font-size:var(--fs-caption);color:var(--ink-3);margin-top:2px}
.im-tally .t.ok .v{color:var(--bud)}
.im-tally .t.warn .v{color:var(--yellow)}
.im-tally .t.err .v{color:var(--red)}

/* ── 状态胶囊（零英文） ── */
.im-chip{display:inline-block;padding:3px 10px;border-radius:var(--r-pill);
  font-size:var(--fs-caption);font-weight:700;white-space:nowrap}
.im-chip.ok{background:var(--bud-soft);color:var(--bud)}
.im-chip.warn{background:var(--yellow-soft);color:var(--yellow)}
.im-chip.err{background:var(--red-soft);color:var(--red)}
.im-chip.gray{background:var(--gray-soft);color:var(--ink-2)}

/* ── 表头 → 字段 映射（chips） ── */
.im-map{display:flex;flex-wrap:wrap;gap:var(--sp-2)}
.im-map .m{display:flex;align-items:baseline;gap:6px;background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r-pill);padding:5px 12px;max-width:100%}
.im-map .m .c{font-size:var(--fs-note);font-weight:700;color:var(--ink)}
.im-map .m .a{font-size:var(--fs-caption);color:var(--ink-3)}
.im-map .m .f{font-size:var(--fs-caption);font-weight:700;color:var(--bud)}
.im-map .m.none .f{color:var(--red)}

/* ── 映射编辑器 ── */
.im-mapedit{display:flex;flex-direction:column;gap:var(--sp-2)}
.im-mr{display:flex;align-items:center;gap:var(--sp-3);justify-content:space-between;
  padding:var(--sp-2) 0;border-top:1px solid var(--line)}
.im-mr:first-child{border-top:none}
.im-mr .k{font-size:var(--fs-note);font-weight:700;color:var(--ink);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1 1 auto}
.im-mr select{flex:0 0 46%;max-width:46%;min-height:44px;font-size:var(--fs-note);
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--card);color:var(--ink);
  padding:0 var(--sp-2);font-family:inherit}

/* ── 问题明细 ── */
.im-issues{display:flex;flex-direction:column;gap:var(--sp-2)}
.im-is{display:flex;align-items:flex-start;gap:var(--sp-3);border-radius:var(--r-sm);
  padding:var(--sp-3);border-left:4px solid transparent;background:var(--card);
  border-top:1px solid var(--line);border-right:1px solid var(--line);border-bottom:1px solid var(--line)}
.im-is.err{background:var(--red-soft);border-left-color:var(--red)}
.im-is.warn{background:var(--yellow-soft);border-left-color:var(--gold)}
.im-is .ln{font-family:Georgia,"Songti SC",serif;font-weight:800;font-size:var(--fs-body);
  color:var(--ink);flex:none;min-width:44px;font-variant-numeric:lining-nums tabular-nums}
.im-is .tx{font-size:var(--fs-note);color:var(--ink-2);line-height:1.6;min-width:0;word-break:break-word}
.im-is .tx b{font-weight:700}
.im-is .tx .lv{font-weight:800}
.im-is.err .tx .lv{color:var(--red)}
.im-is.warn .tx .lv{color:var(--yellow)}

/* ── 数据预览（横向滚动容器；页面本体永不横滚） ── */
.im-scroll{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--card)}
.im-tbl{border-collapse:collapse;font-size:var(--fs-caption);min-width:100%;white-space:nowrap}
.im-tbl th{background:var(--paper-2);color:var(--ink-2);font-weight:700;text-align:left;
  padding:8px 12px;position:sticky;top:0}
.im-tbl td{padding:8px 12px;border-top:1px solid var(--line);color:var(--ink);
  font-variant-numeric:lining-nums tabular-nums}
.im-tbl tr.warn td{background:var(--yellow-soft)}
.im-tbl tr.error td{background:var(--red-soft)}
.im-scrolltip{font-size:var(--fs-caption);color:var(--ink-3);margin-top:6px;line-height:1.6}

/* ── 维度计数 ── */
.im-dims{display:flex;flex-wrap:wrap;gap:var(--sp-2)}
.im-dim{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-pill);
  padding:4px 12px;font-size:var(--fs-caption);color:var(--ink-2)}
.im-dim b{color:var(--ink);font-weight:800}

/* ── 批次列表 ── */
.im-batch{border-top:1px solid var(--line);padding:var(--sp-3) 0;display:flex;
  flex-direction:column;gap:6px}
.im-batch:first-child{border-top:none}
.im-batch .l1{display:flex;align-items:center;gap:var(--sp-2);justify-content:space-between}
.im-batch .no{font-size:var(--fs-note);font-weight:700;color:var(--ink);min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.im-batch .fn{font-size:var(--fs-caption);color:var(--ink-3);word-break:break-all}
.im-batch .l3{display:flex;flex-wrap:wrap;gap:6px var(--sp-3);font-size:var(--fs-caption);
  color:var(--ink-2);font-variant-numeric:lining-nums tabular-nums}
.im-batch .l3 b{font-weight:800;color:var(--ink)}
.im-batch .l3 .e b{color:var(--red)}
.im-batch .l3 .w b{color:var(--yellow)}
.im-detail{margin-top:6px;background:var(--paper);border-radius:var(--r-sm);
  padding:var(--sp-3);font-size:var(--fs-caption);color:var(--ink-2);line-height:1.7}

/* ── 汇总行 ── */
.im-kv{display:flex;flex-direction:column;gap:var(--sp-3)}
.im-kv .r{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);
  padding-bottom:var(--sp-3);border-bottom:1px solid var(--line)}
.im-kv .r:last-child{border-bottom:none;padding-bottom:0}
.im-kv .k{font-size:var(--fs-body);color:var(--ink-2)}
.im-kv .v{font-family:Georgia,"Songti SC",serif;font-weight:700;font-size:20px;
  font-variant-numeric:lining-nums tabular-nums;flex:none}

/* ── 提醒条（复用共享三态） ── */
.im-note{margin-top:var(--sp-4);padding:var(--sp-3) var(--sp-4);background:var(--paper);
  border-left:3px solid var(--gold-line);border-radius:var(--r-sm);font-size:var(--fs-note);
  color:var(--ink-2);line-height:1.7}
.im-warn{background:var(--yellow-soft);border-left-color:var(--gold)}
.im-bad{background:var(--red-soft);border-left-color:var(--red)}
.im-good{background:var(--bud-soft);border-left-color:var(--bud)}

/* ── 表单（人工录入） ── */
.im-field{display:flex;flex-direction:column;gap:6px;margin-bottom:var(--sp-3)}
.im-field label{font-size:var(--fs-caption);font-weight:700;color:var(--ink-2);letter-spacing:.5px}
.im-field input,.im-field select{min-height:48px;font-size:var(--fs-body);font-family:inherit;
  border:1px solid var(--line);border-radius:var(--r-sm);background:var(--card);color:var(--ink);
  padding:0 var(--sp-3);width:100%;min-width:0}
.im-field input::placeholder{color:var(--ink-3)}
.im-field .u{font-size:var(--fs-caption);color:var(--ink-3);font-weight:500}
.im-grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}
.im-entry{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--paper);
  padding:var(--sp-3);margin-bottom:var(--sp-3)}
.im-entry .hd{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);
  margin-bottom:var(--sp-3)}
.im-entry .hd .n{font-size:var(--fs-caption);font-weight:800;color:var(--gold-deep);letter-spacing:.5px}
.im-entry .hd button{background:none;border:1px solid var(--line);border-radius:var(--r-pill);
  color:var(--ink-2);font-size:var(--fs-caption);min-height:36px;padding:0 12px}

/* ── 页签 ── */
.im-tabs{display:flex;gap:var(--sp-2);background:var(--paper);border:1px solid var(--line);
  border-radius:var(--r-pill);padding:4px}
.im-tabs button{flex:1;min-height:44px;border:none;background:none;border-radius:var(--r-pill);
  font-size:var(--fs-note);font-weight:700;color:var(--ink-2);font-family:inherit}
.im-tabs button.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow-1)}

.im-empty{text-align:center;color:var(--ink-3);font-size:var(--fs-note);padding:var(--sp-5) 0;line-height:1.8}
.im-foot{text-align:center;padding:var(--sp-3) 0 var(--sp-2);color:#6f6859;font-size:var(--fs-caption)}

/* ── 吐司 ── */
.im-toast{position:fixed;left:50%;bottom:calc(96px + env(safe-area-inset-bottom,0px));
  transform:translateX(-50%) translateY(10px);z-index:99;background:linear-gradient(150deg,#232c44,#1a2238);
  color:#f3ead2;font-size:var(--fs-note);font-weight:600;border-radius:var(--r-pill);
  padding:11px 20px;max-width:calc(100vw - 40px);text-align:center;line-height:1.5;
  opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;border:1px solid rgba(230,201,121,.45)}
.im-toast.on{opacity:1;transform:translateX(-50%) translateY(0)}

/* 🔴 触达兜底：demo-ui.css 有 button:not(:disabled){min-height:32px}，
   特异性高会压掉单类规则（实测 32px < 44px 触达标准）—— 这一条管住模块内全部按钮。 */
button,[onclick]{min-height:44px !important}
