/* 矩阵云信 · 本地样式表
   替代 Tailwind CDN：断网、内网、离线部署都能正常显示（CDN 一断样式全裸）。
   类名沿用 Tailwind 命名，HTML 与 JS 无需改动即可生效。
   设计口径：slate 中性灰 + indigo 主色 + 12px 圆角卡片 + 柔和阴影。
*/

/* ============ 设计变量 ============ */
:root{
  --brand:#4f46e5;  --brand-700:#4338ca;  --brand-600:#4f46e5;  --brand-50:#eef2ff;
  --ink:#0f172a;    --ink-2:#475569;      --ink-3:#94a3b8;      --ink-4:#cbd5e1;
  --line:#e2e8f0;   --line-2:#cbd5e1;
  --bg:#f1f5f9;     --card:#ffffff;
  --ok:#16a34a;     --ok-700:#15803d;     --ok-50:#f0fdf4;
  --warn:#d97706;   --warn-700:#b45309;   --warn-50:#fffbeb;    --warn-500:#f59e0b;
  --danger:#dc2626; --danger-700:#b91c1c; --danger-50:#fef2f2;  --danger-500:#ef4444;
  --side:#0f172a;   --side-2:#1e293b;
  --r-sm:6px; --r:10px; --r-lg:14px;
  --sh-1:0 1px 2px rgba(15,23,42,.04), 0 1px 3px rgba(15,23,42,.06);
  --sh-2:0 10px 30px rgba(15,23,42,.12), 0 2px 8px rgba(15,23,42,.06);
}

/* ============ 基础重置 ============ */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{
  background:var(--bg); color:var(--ink);
  font-family:system-ui,-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",
              "Hiragino Sans GB",sans-serif;
  font-size:14px; line-height:1.6; -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4,p{margin:0}
img{display:block;max-width:100%}
a{color:inherit}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--ink-4);border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}
::-webkit-scrollbar-track{background:transparent}

/* ============ 表单控件统一（改版自动生效，无需改 HTML） ============ */
button{
  font:inherit; font-size:13px; font-weight:500;
  border-radius:var(--r-sm); border:1px solid transparent;
  cursor:pointer; transition:background .15s,color .15s,box-shadow .15s,transform .06s;
  line-height:1.4;
}
button:active{transform:translateY(1px)}
button:disabled{cursor:not-allowed;opacity:.5}
input,select,textarea{
  font:inherit; font-size:13px; color:var(--ink);
  background:#fff; border:1px solid var(--line-2); border-radius:var(--r-sm);
  padding:6px 10px; outline:none; transition:border-color .15s,box-shadow .15s;
}
input:focus,select:focus,textarea:focus{
  border-color:var(--brand); box-shadow:0 0 0 3px rgba(79,70,229,.14);
}
input::placeholder{color:var(--ink-3)}
input[type=checkbox]{width:15px;height:15px;accent-color:var(--brand);cursor:pointer;padding:0}

/* ============ 布局 ============ */
.flex{display:flex} .grid{display:grid} .hidden{display:none!important}
.flex-1{flex:1 1 0%;min-width:0} .flex-col{flex-direction:column} .flex-wrap{flex-wrap:wrap}
.items-center{align-items:center} .items-start{align-items:flex-start} .items-end{align-items:flex-end}
.justify-center{justify-content:center} .justify-between{justify-content:space-between}
.shrink-0{flex-shrink:0} .self-center{align-self:center}
.relative{position:relative} .absolute{position:absolute} .fixed{position:fixed}
.inset-0{top:0;right:0;bottom:0;left:0} .left-0{left:0} .bottom-12{bottom:3rem}
.z-10{z-index:10} .z-50{z-index:50}
.min-h-0{min-height:0} .min-h-screen{min-height:100vh} .min-h-\[3rem\]{min-height:3rem}
.h-full{height:100%} .h-screen{height:100vh}
.overflow-hidden{overflow:hidden} .overflow-y-auto{overflow-y:auto}
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.break-all{word-break:break-all}
.whitespace-nowrap{white-space:nowrap}
.object-cover{object-fit:cover}
.select-none{user-select:none} .select-all{user-select:all}
.cursor-pointer{cursor:pointer} .cursor-zoom-in{cursor:zoom-in}
.mx-auto{margin-left:auto;margin-right:auto}

/* 栅格 */
.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}
.col-span-2{grid-column:span 2/span 2}
.col-span-3{grid-column:span 3/span 3}
.col-span-4{grid-column:span 4/span 4}
@media(min-width:768px){
  .md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}
}

/* ============ 间距 ============ */
.p-1{padding:.25rem} .p-2{padding:.5rem} .p-3{padding:.75rem}
.p-4{padding:1rem} .p-6{padding:1.5rem} .p-7{padding:1.75rem}
.px-1{padding-left:.25rem;padding-right:.25rem}
.px-1\.5{padding-left:.375rem;padding-right:.375rem}
.px-2{padding-left:.5rem;padding-right:.5rem}
.px-3{padding-left:.75rem;padding-right:.75rem}
.px-4{padding-left:1rem;padding-right:1rem}
.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}
.py-1{padding-top:.25rem;padding-bottom:.25rem}
.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}
.py-2{padding-top:.5rem;padding-bottom:.5rem}
.py-3{padding-top:.75rem;padding-bottom:.75rem}
.py-8{padding-top:2rem;padding-bottom:2rem}
.pt-1\.5{padding-top:.375rem} .pt-2{padding-top:.5rem}
.pt-3{padding-top:.75rem} .pt-4{padding-top:1rem}
.pb-1{padding-bottom:.25rem} .pb-2{padding-bottom:.5rem}
.mt-0\.5{margin-top:.125rem}
.mt-1{margin-top:.25rem} .mt-2{margin-top:.5rem}
.mt-3{margin-top:.75rem} .mt-4{margin-top:1rem}
.mb-0\.5{margin-bottom:.125rem} .mb-1{margin-bottom:.25rem}
.mb-1\.5{margin-bottom:.375rem} .mb-2{margin-bottom:.5rem}
.mb-3{margin-bottom:.75rem} .mb-4{margin-bottom:1rem}
.mb-5{margin-bottom:1.25rem} .mb-6{margin-bottom:1.5rem}
.ml-2{margin-left:.5rem} .mr-2{margin-right:.5rem}
.gap-1{gap:.25rem} .gap-1\.5{gap:.375rem} .gap-2{gap:.5rem}
.gap-2\.5{gap:.625rem} .gap-3{gap:.75rem} .gap-4{gap:1rem}
.space-y-0\.5>*{margin-top:.125rem} .space-y-1>*+*{margin-top:.25rem}
.space-y-2>*+*{margin-top:.5rem} .space-y-3>*+*{margin-top:.75rem}

/* ============ 尺寸 ============ */
.w-full{width:100%}
.w-9{width:2.25rem} .w-10{width:2.5rem} .w-12{width:3rem} .w-14{width:3.5rem}
.w-20{width:5rem} .w-24{width:6rem} .w-36{width:9rem} .w-40{width:10rem}
.w-44{width:11rem} .w-56{width:14rem} .w-72{width:18rem}
.w-\[240px\]{width:240px} .w-\[340px\]{width:340px}
.w-\[520px\]{width:520px} .w-\[560px\]{width:560px}
.h-9{height:2.25rem} .h-10{height:2.5rem} .h-12{height:3rem}
.h-14{height:3.5rem} .h-16{height:4rem} .h-20{height:5rem}
.h-\[240px\]{height:240px}
.min-w-0{min-width:0}
.min-w-\[140px\]{min-width:140px} .min-w-\[160px\]{min-width:160px}
.min-w-\[180px\]{min-width:180px}
.max-w-full{max-width:100%} .max-w-\[70\%\]{max-width:70%}
.max-w-\[220px\]{max-width:220px}
.max-w-md{max-width:28rem} .max-w-xl{max-width:36rem}
.max-w-3xl{max-width:48rem} .max-w-4xl{max-width:56rem}
.max-h-full{max-height:100%} .max-h-\[80vh\]{max-height:80vh}
.max-h-\[260px\]{max-height:260px}
.max-h-32{max-height:8rem} .max-h-40{max-height:10rem}
.max-h-52{max-height:13rem} .max-h-64{max-height:16rem}

/* ============ 字号字重 ============ */
.text-\[10px\]{font-size:10px} .text-\[11px\]{font-size:11px}
.text-xs{font-size:12px} .text-sm{font-size:13px} .text-base{font-size:14px}
.text-lg{font-size:16px} .text-xl{font-size:18px} .text-2xl{font-size:22px}
.font-medium{font-weight:500} .font-semibold{font-weight:600} .font-bold{font-weight:700}
.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}
.text-left{text-align:left} .text-center{text-align:center} .text-right{text-align:right}
.underline{text-decoration:underline} .hover\:underline:hover{text-decoration:underline}
.leading-5{line-height:1.25rem} .leading-relaxed{line-height:1.75}

/* ============ 圆角阴影 ============ */
.rounded{border-radius:var(--r-sm)} .rounded-lg{border-radius:var(--r)}
.rounded-xl{border-radius:var(--r-lg)} .rounded-full{border-radius:9999px}
.shadow-sm{box-shadow:var(--sh-1)} .shadow-lg{box-shadow:var(--sh-2)}
.opacity-60{opacity:.6} .opacity-70{opacity:.7} .opacity-80{opacity:.8}
.hover\:opacity-100:hover{opacity:1}
.disabled\:opacity-50:disabled{opacity:.5}

/* ============ 边框 ============ */
.border{border:1px solid var(--line)}
.border-t{border-top:1px solid var(--line)}
.border-b{border-bottom:1px solid var(--line)}
.border-gray-300{border-color:var(--line-2)}
.hover\:border-blue-500:hover{border-color:var(--brand)}

/* ============ 文字颜色 ============ */
.text-white{color:#fff}
.text-gray-300{color:var(--ink-4)} .text-gray-400{color:var(--ink-3)}
.text-gray-500{color:#64748b} .text-gray-600{color:var(--ink-2)}
.text-gray-800{color:#1e293b}
.text-blue-600{color:var(--brand)} .text-blue-700{color:var(--brand-700)}
.text-red-500{color:var(--danger-500)} .text-red-600{color:var(--danger)}
.text-red-700{color:var(--danger-700)}
.text-green-600{color:var(--ok)} .text-green-700{color:var(--ok-700)}
.text-amber-600{color:var(--warn)} .text-amber-700{color:var(--warn-700)}
.hover\:text-blue-700:hover{color:var(--brand-700)}
.hover\:text-gray-700:hover{color:#334155}

/* ============ 背景色 ============ */
.bg-white{background:#fff}
.bg-gray-50{background:#f8fafc} .bg-gray-100{background:var(--bg)}
.bg-gray-200{background:var(--line)} .bg-gray-800{background:var(--side-2)}
.bg-blue-50{background:var(--brand-50)} .bg-blue-600{background:var(--brand)}
.bg-red-50{background:var(--danger-50)}
/* 阶段40：中转「已开启」时按钮变红（点它是关闭，红=危险动作） */
.bg-red-600{background:var(--danger)} .bg-red-700{background:var(--danger-700)}
button.bg-red-600:hover{background:var(--danger-700)}
.bg-amber-50{background:var(--warn-50)} .bg-amber-500{background:var(--warn-500)}
.bg-black\/40{background:rgba(15,23,42,.4)} .bg-black\/5{background:rgba(15,23,42,.05)}
.hover\:bg-gray-50:hover{background:#f8fafc}
.hover\:bg-gray-100:hover{background:var(--bg)}
.hover\:bg-gray-200:hover{background:var(--line)}
.hover\:bg-gray-700:hover{background:#334155}
.hover\:bg-blue-50:hover{background:var(--brand-50)}
.hover\:bg-blue-700:hover{background:var(--brand-700)}
.hover\:bg-red-100:hover{background:#fee2e2}

/* 主色按钮态：bg-blue-600 + text-white 就是主按钮，统一观感 */
button.bg-blue-600{box-shadow:0 1px 2px rgba(79,70,229,.25)}
button.bg-blue-600:hover{background:var(--brand-700)}

/* 群发勾选框 */
.bc-cb{margin:0;cursor:pointer;width:15px;height:15px;accent-color:var(--brand)}

/* 补：JS 三元表达式里拼出来的动态类（静态提取扫不到，容易漏样式） */
.bg-blue-100{background:#c7d2fe}     .bg-indigo-100{background:#c7d2fe}
.bg-green-100{background:#dcfce7}    .bg-green-50{background:var(--ok-50)}
.bg-red-100{background:#fee2e2}
.bg-yellow-100{background:#fef9c3}   .bg-amber-100{background:#fef3c7}
.bg-gray-900{background:var(--side)}
.text-gray-700{color:#334155}        .text-indigo-700{color:var(--brand-700)}
.text-yellow-700{color:#a16207}      .text-red-200{color:#fecaca}
.border-blue-500{border-color:var(--brand)}

/* ============ 业务组件 ============ */
.panel{
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--r-lg); box-shadow:var(--sh-1);
}
.panel>.border-b:first-child,
.panel>div:first-child.border-b{border-radius:var(--r-lg) var(--r-lg) 0 0}

/* 会话项 */
.conv-item{
  padding:10px 12px; cursor:pointer; border-radius:var(--r);
  transition:background .12s; position:relative;
  border-bottom:1px solid #f1f5f9;
}
.conv-item:last-child{border-bottom:none}
.conv-item:hover{background:#f8fafc}
.conv-item.active{background:var(--brand-50);box-shadow:inset 3px 0 0 var(--brand)}
.conv-name{font-weight:600;font-size:13px;color:var(--ink)}
.conv-item.active .conv-name{color:var(--brand-700)}

/* 消息气泡 */
.msg-out{
  background:var(--brand); color:#fff; border-radius:14px 14px 4px 14px;
  box-shadow:0 1px 2px rgba(79,70,229,.2);
}
.msg-in{
  background:#fff; border:1px solid var(--line); border-radius:14px 14px 14px 4px;
  box-shadow:var(--sh-1);
}
.msg-row{display:flex;align-items:flex-end;gap:8px;margin-bottom:14px}
.msg-row.out{flex-direction:row-reverse}
.msg-col{max-width:70%;min-width:0}
.msg-meta{
  font-size:10px;color:var(--ink-3);margin-top:3px;padding:0 2px;
}
.msg-row.out .msg-meta{text-align:right}
/* 群系统通知：居中灰字条 */
.notice-line{
  text-align:center;font-size:11px;color:var(--ink-3);
  padding:2px 48px;margin-bottom:14px;line-height:1.7;
}

/* ============ 侧栏导航（改版新增） ============ */
.sidebar{
  width:212px; flex-shrink:0; background:var(--side); color:#cbd5e1;
  display:flex; flex-direction:column; padding:14px 10px; gap:2px;
}
.sidebar-brand{
  display:flex; align-items:center; gap:9px; padding:6px 8px 16px;
  font-weight:700; font-size:15px; color:#fff; letter-spacing:.3px;
}
.sidebar-brand .logo{
  width:28px;height:28px;border-radius:8px;flex-shrink:0;
  background:linear-gradient(135deg,#6366f1,#8b5cf6);
  display:flex;align-items:center;justify-content:center;font-size:14px;
}
.sidebar-brand small{display:block;font-size:10px;font-weight:500;color:#64748b;letter-spacing:.5px}
.nav-group{padding:14px 10px 6px;font-size:10px;color:#64748b;letter-spacing:1px;font-weight:600}
.nav-item{
  display:flex; align-items:center; gap:9px; padding:8px 10px;
  border-radius:8px; font-size:13px; color:#cbd5e1;
  cursor:pointer; transition:background .12s,color .12s; border:none; width:100%;
  text-align:left; background:transparent; font-weight:500;
}
.nav-item:hover{background:rgba(255,255,255,.07); color:#fff}
.nav-item.active{background:var(--brand); color:#fff; box-shadow:0 2px 8px rgba(79,70,229,.35)}
.nav-item .ico{width:16px;text-align:center;font-size:14px;opacity:.9}
.nav-item .badge{
  margin-left:auto; background:var(--danger); color:#fff; font-size:10px;
  min-width:16px; height:16px; border-radius:8px; padding:0 5px;
  display:inline-flex; align-items:center; justify-content:center; font-weight:600;
}
.nav-item.danger{color:#fca5a5}
.nav-item.danger.active{background:var(--danger);color:#fff}
.sidebar-foot{margin-top:auto;padding-top:12px;border-top:1px solid rgba(255,255,255,.08)}

/* 顶栏 */
.topbar{
  height:56px; background:#fff; border-bottom:1px solid var(--line);
  display:flex; align-items:center; gap:12px; padding:0 18px; flex-shrink:0;
}
.topbar .title{font-weight:600;font-size:15px;color:var(--ink)}
.search-box{position:relative;width:260px}
.search-box input{padding-left:30px;background:var(--bg);border-color:transparent}
.search-box input:focus{background:#fff}
.search-box .s-ico{position:absolute;left:9px;top:50%;transform:translateY(-50%);color:var(--ink-3);font-size:12px}
.dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.dot.ok{background:var(--ok);box-shadow:0 0 0 3px rgba(22,163,74,.15)}
.dot.bad{background:var(--danger);box-shadow:0 0 0 3px rgba(220,38,38,.15)}
.dot.warn{background:var(--warn);box-shadow:0 0 0 3px rgba(217,119,6,.15)}

/* 顶栏统计 */
#stats .stat{
  font-size:11px;color:var(--ink-3);
  padding:3px 9px;background:var(--bg);border-radius:999px;
  display:inline-flex;align-items:center;gap:4px;
}
#stats .stat b{color:var(--ink);font-weight:600;font-size:12px}

/* 头像 */
.avatar{
  width:38px;height:38px;border-radius:50%;flex-shrink:0;object-fit:cover;
  background:var(--line);display:flex;align-items:center;justify-content:center;
  color:var(--ink-2);font-weight:600;font-size:14px;
}
.avatar.sm{width:30px;height:30px;font-size:12px}
.avatar.lg{width:48px;height:48px;font-size:16px}

/* 徽章 / 标签 */
.tag{
  display:inline-flex;align-items:center;gap:4px;
  font-size:11px;padding:1px 7px;border-radius:999px;font-weight:500;line-height:1.7;
}
.tag.gray{background:var(--bg);color:var(--ink-2)}
.tag.blue{background:var(--brand-50);color:var(--brand-700)}
.tag.green{background:var(--ok-50);color:var(--ok-700)}
.tag.red{background:var(--danger-50);color:var(--danger-700)}
.tag.amber{background:var(--warn-50);color:var(--warn-700)}
/* 阶段28：用户与设备页用的写法是 tag tag-green，两套都留着 */
.tag-blue{background:var(--brand-50);color:var(--brand-700)}
.tag-green{background:var(--ok-50);color:var(--ok-700)}
.tag-red{background:var(--danger-50);color:var(--danger-700)}
.tag-amber{background:var(--warn-50);color:var(--warn-700)}

/* 阶段28：提示条 / 危险按钮描边 */
.border-green-200{border-color:#a7f3d0}
.border-red-200{border-color:#fecaca}
.border-amber-200{border-color:#fde68a}
.text-green-800{color:#166534}
.bg-amber-50{background:#fffbeb}

/* 阶段31：自动回复总闸 / 账号隐藏开关用到的描边与底色 */
.border-gray-200{border-color:#e5e7eb}
.border-red-300{border-color:#fca5a5}
.bg-purple-50{background:#faf5ff}
.bg-purple-100{background:#f3e8ff}
.text-purple-700{color:#7e22ce}

/* 卡片标题 */
.card-title{
  font-size:13px;font-weight:600;color:var(--ink);
  display:flex;align-items:center;gap:6px;
}

/* 空态 */
.empty{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:8px;padding:48px 20px;color:var(--ink-3);text-align:center;
}
.empty .e-ico{font-size:34px;opacity:.35}
.empty .e-t{font-size:14px;font-weight:600;color:var(--ink-2)}
.empty .e-d{font-size:12px;color:var(--ink-3);max-width:280px}

/* 分区标题 */
.section-h{font-size:12px;font-weight:600;color:var(--ink-2);margin-bottom:8px}

/* 表格 */
.table{width:100%;border-collapse:collapse;font-size:13px}
.table th{
  text-align:left;font-size:11px;font-weight:600;color:var(--ink-3);
  padding:8px 10px;border-bottom:1px solid var(--line);background:#f8fafc;
  letter-spacing:.3px;
}
.table td{padding:9px 10px;border-bottom:1px solid #f1f5f9;vertical-align:middle}
.table tr:hover td{background:#f8fafc}
.table tr:last-child td{border-bottom:none}

/* ============ 阶段39：配额进度条（限速面板） ============ */
.meter{
  height:6px;border-radius:999px;background:var(--bg);
  overflow:hidden;min-width:60px;
}
.meter>i{
  display:block;height:100%;border-radius:999px;
  background:var(--brand);transition:width .35s ease;
}
.meter.ok>i{background:var(--ok)}
.meter.warn>i{background:var(--warn)}
.meter.full>i{background:var(--danger)}
/* 表格里的迷你条：比面板窄一号，不抢数字的风头 */
.meter.sm{height:4px}

/* ============ 阶段39：KPI 数字卡（报表页） ============ */
.kpi{
  border:1px solid var(--line);border-radius:var(--r);
  padding:10px 12px;background:#fff;
}
.kpi .k-l{font-size:11px;color:var(--ink-3);margin-bottom:2px}
.kpi .k-v{font-size:20px;font-weight:700;color:var(--ink);line-height:1.25}
.kpi .k-s{font-size:11px;color:var(--ink-3);margin-top:2px}
.kpi.accent-green .k-v{color:var(--ok-700)}
.kpi.accent-red .k-v{color:var(--danger-700)}
.kpi.accent-amber .k-v{color:var(--warn-700)}

/* ============ 阶段39：限速卡片（每账号一张） ============ */
.rate-card{
  border:1px solid var(--line);border-radius:var(--r);
  padding:12px;background:#fff;
}
.rate-card+.rate-card{margin-top:8px}
.rate-card .rc-head{
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;
}
.rate-card .rc-name{font-weight:600;font-size:13px;color:var(--ink)}
.rate-card .rc-quota{
  display:flex;align-items:baseline;justify-content:space-between;
  font-size:11px;color:var(--ink-3);margin-bottom:4px;
}
.rate-card .rc-quota b{font-size:13px;color:var(--ink);font-weight:600}

/* 弹层 */
.modal-mask{
  position:fixed;inset:0;background:rgba(15,23,42,.45);
  display:flex;align-items:center;justify-content:center;z-index:100;
  backdrop-filter:blur(2px);
}
.modal{
  background:#fff;border-radius:var(--r-lg);box-shadow:var(--sh-2);
  max-height:86vh;overflow:auto;
}

/* 提示条 */
.alert{
  padding:9px 12px;border-radius:var(--r);font-size:12px;
  display:flex;align-items:flex-start;gap:7px;line-height:1.5;
}
.alert.info{background:var(--brand-50);color:#3730a3}
.alert.ok{background:var(--ok-50);color:var(--ok-700)}
.alert.warn{background:var(--warn-50);color:var(--warn-700)}
.alert.danger{background:var(--danger-50);color:var(--danger-700)}

/* ============ 阶段39：全量类名扫描补漏 ============
   来源：_re/check_dynamic_classes.py 扫出「页面在用但 CSS 从没定义」的类。
   这些不报错、只静默失效（间距/透明度/尺寸悄悄不对），之前一直没人发现。 */
.accent-blue-600{accent-color:var(--brand)} .accent-red-600{accent-color:var(--danger)}
.bg-black\/10{background:rgba(15,23,42,.1)} .bg-black\/60{background:rgba(15,23,42,.6)}
.bg-purple-600{background:#9333ea} .hover\:bg-purple-700:hover{background:#7e22ce}
.hover\:bg-red-50:hover{background:var(--danger-50)}
.border-2{border-width:2px}
.bottom-0{bottom:0} .right-0{right:0}
.font-normal{font-weight:400}
.font-sans{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif}
.h-5{height:1.25rem} .w-5{width:1.25rem}
.inline-block{display:inline-block}
.leading-6{line-height:1.5rem}
.line-through{text-decoration:line-through}
.min-w-\[120px\]{min-width:120px} .min-w-\[240px\]{min-width:240px}
.opacity-50{opacity:.5} .opacity-75{opacity:.75}
.p-2\.5{padding:.625rem}
.pl-1{padding-left:.25rem}
.px-2\.5{padding-left:.625rem;padding-right:.625rem}
.text-\[9px\]{font-size:9px}
