* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', sans-serif;
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3, p { margin: 0; }
select, input, textarea, button { font-family: inherit; font-size: inherit; }
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb { background: rgba(120, 160, 220, 0.35); border-radius: 3px; }
::-webkit-scrollbar-track { background: transparent; }

.cm-toast-wrap {
  position: fixed;
  top: 18px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 9999;
  display: flex;
  flex-direction: column;
  gap: 8px;
  align-items: center;
  pointer-events: none;
}
.cm-toast {
  padding: 10px 18px;
  border-radius: 8px;
  color: #fff;
  background: rgba(23, 43, 77, 0.95);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28);
  font-size: 14px;
  animation: cmToastIn 0.18s ease;
}
.cm-toast.success { background: rgba(16, 122, 87, 0.96); }
.cm-toast.error { background: rgba(179, 38, 30, 0.96); }
.cm-toast.out { opacity: 0; transform: translateY(-8px); transition: 0.15s; }
@keyframes cmToastIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: none; } }

.chart-empty {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  color: rgba(160, 180, 210, 0.55);
  font-size: 13px;
}

/* ---------- 迷你折线图（renderLineChart） ---------- */
.cm-chart .grid { stroke: #eef2f7; stroke-width: 1; }
.cm-chart .axis { font-size: 10.5px; fill: #94a3b8; }
.cm-chart .line { fill: none; stroke: #2f8fd6; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.cm-chart .dot { fill: #fff; stroke: #2f8fd6; stroke-width: 2; }
.cm-chart .dot.bad { stroke: #e5484d; fill: #fff5f4; }
.cm-chart .ref { stroke-width: 1; stroke-dasharray: 4 4; }
.cm-chart .ref-high { stroke: #e5484d; }
.cm-chart .ref-low { stroke: #e5484d; }
.cm-chart .ref-label { font-size: 10.5px; fill: #b42318; }
/* 每个检测点上方标注的实测值 */
.cm-chart .vlabel { font-size: 10px; font-weight: 600; fill: #64748b; }
.cm-chart .vlabel.bad { fill: #d92d20; }
