/* ============================================================
   轻上箱包 ERP · 皮肤 A「品牌蓝清爽工作台」
   覆盖层样式 —— 放在 base.html 原有 <style> 之后加载即可生效
   依赖：无外部字体 / 无 CDN，纯系统字体栈，断网也能用
   改皮肤只需改 :root 这一段变量
   ============================================================ */

:root{
  /* 主色 —— 取自公司 LOGO 品牌蓝 */
  --brand:#2B3BB4;
  --brand-dark:#1F2C99;
  --brand-soft:#EEF1FD;      /* 浅蓝底：选中行 / 标签背景 */
  --brand-soft-line:#D4DAFB;

  /* 中性色 */
  --bg:#F5F7FB;              /* 页面底 */
  --panel:#FFFFFF;           /* 卡片底 */
  --line:#E5E9F2;            /* 描边 */
  --line-soft:#EEF1F6;
  --text:#1A2233;            /* 主文字 */
  --muted:#7A8296;           /* 次级文字 */
  --muted-2:#9AA2B4;         /* 占位提示 */

  /* 侧边栏 */
  --sidebar:#1E2A78;
  --sidebar-line:rgba(255,255,255,.13);
  --sidebar-hover:rgba(255,255,255,.10);
  --sidebar-active:rgba(255,255,255,.14);
  --sidebar-text:rgba(255,255,255,.75);

  /* 状态色 —— 全厂统一语义 */
  --green:#16A34A;           /* 成功 / 已入库 / 已完工 */
  --green-bg:#ECFDF5;
  --amber:#F59E0B;           /* 警告 / 部分齐套 */
  --amber-text:#B45309;
  --amber-bg:#FFFBEB;
  --red:#DC2626;             /* 严重 / 逾期 / 欠料 */
  --red-bg:#FEF2F2;
  --orange:#B45309;
  --grey:#94A3B8;            /* 草稿 / 停用 */

  /* 表格 */
  --th-bg:#F8FAFC;
  --row-hover:#F7F9FE;
  --row-stripe:#FAFBFE;

  /* 通用填充色（避免硬编码浅色在暗模式下漏白） */
  --fill-soft:#F1F5F9;
  --fill-hover:#F2F5FB;
  --fill-disabled:#E9ECF3;
  --tag-text:#5A6274;

  /* 圆角 / 间距 / 阴影 */
  --r-card:10px;
  --r-ctl:8px;
  --r-pill:14px;
  --shadow:0 1px 3px rgba(26,35,51,.06), 0 2px 8px rgba(26,35,51,.05);
  --shadow-lg:0 4px 16px rgba(26,35,51,.10);
  --pad-card:18px 20px;
  --gap-block:16px;
}

/* ============================================================
   【已停用 · 2026-10-23】方案 B「深夜仓房」暗色主题
   现在只跑一套亮色；下面这段留着，将来要恢复暗色可直接启用
   ============================================================
   （原说明）方案 B「深夜仓房」暗色主题 —— 车间大屏 / 厂长看板
   切换方式：<html data-theme="dark">（由 static/theme.js 控制）
   ============================================================ */
[data-theme="dark"]{
  --brand:#5B6CFF;
  --brand-dark:#4A5AE8;
  --brand-soft:rgba(91,108,255,.16);
  --brand-soft-line:#38458F;

  --bg:#0F1420;
  --panel:#171E2E;
  --line:#26304A;
  --line-soft:#202A3F;
  --text:#E6EBF5;
  --muted:#8C99B4;
  --muted-2:#6C7893;

  --sidebar:#0B1120;
  --sidebar-line:rgba(255,255,255,.10);
  --sidebar-hover:rgba(255,255,255,.07);
  --sidebar-active:rgba(255,255,255,.10);
  --sidebar-text:rgba(226,232,240,.72);

  --green:#34D399;
  --green-bg:rgba(52,211,153,.14);
  --amber:#FBBF24;
  --amber-text:#FBBF24;
  --amber-bg:rgba(251,191,36,.14);
  --red:#F87171;
  --red-bg:rgba(248,113,113,.14);
  --orange:#FBBF24;
  --grey:#7E8CA8;

  --th-bg:#141C2B;
  --row-hover:#1B2436;
  --row-stripe:#151D2C;

  --fill-soft:rgba(255,255,255,.09);
  --fill-hover:rgba(255,255,255,.11);
  --fill-disabled:rgba(255,255,255,.07);
  --tag-text:#A8B4CC;

  --shadow:0 1px 3px rgba(0,0,0,.45), 0 2px 10px rgba(0,0,0,.28);
  --shadow-lg:0 6px 24px rgba(0,0,0,.5);
  color-scheme:dark;
}
/* 暗色下 8 类物料徽标整体提亮，避免深色底上看不清 */
[data-theme="dark"] .cat-XK{background:#5B6CFF}
[data-theme="dark"] .cat-LG{background:#8B7BE8}
[data-theme="dark"] .cat-LZ{background:#22A9C7}
[data-theme="dark"] .cat-SJ{background:#2BB07A}
[data-theme="dark"] .cat-WJ{background:#D98A1F}
[data-theme="dark"] .cat-LL{background:#DB4E90}
[data-theme="dark"] .cat-FL{background:#C99A2A}
[data-theme="dark"] .cat-BZ{background:#7E8CA8}

/* ---------- 基础 ---------- */
*{box-sizing:border-box}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);
  color:var(--text);
  font-size:14px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:none;opacity:.88}
::selection{background:rgba(43,59,180,.16)}
/* 全站数字等宽对齐（库存 / 金额 / 数量） */
.num,.cat-badge,.stat .v,.tag{font-variant-numeric:tabular-nums}

/* 滚动条 */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#CFD6E4;border-radius:6px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:#B4BECE;background-clip:padding-box}

/* ---------- 侧边栏 ---------- */
.sidebar{
  background:var(--sidebar);
  padding:14px 0 0;
  width:240px;
  border-right:1px solid rgba(0,0,0,.06);
}
.sidebar .logo{
  display:flex;align-items:center;gap:10px;
  padding:0 16px 14px;border-bottom:1px solid var(--sidebar-line);
  margin-bottom:10px;
}
.sidebar .logo img{
  width:40px;height:40px;border-radius:8px;background:#fff;object-fit:cover;flex:none;
  box-shadow:0 1px 4px rgba(0,0,0,.18);
}
.sidebar .logo-txt{min-width:0;flex:1}
.sidebar .logo-txt strong{
  display:block;color:#fff;font-size:15px;font-weight:600;letter-spacing:.2px;line-height:1.3;
}
.sidebar .logo small{
  display:block;font-size:10.5px;color:rgba(255,255,255,.60);font-weight:400;
  line-height:1.35;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.sidebar a{
  color:var(--sidebar-text);
  padding:9px 12px;
  margin:1px 10px;
  border-radius:8px;
  border-left:none;
  font-size:13.5px;
  font-weight:500;
  transition:background .12s,color .12s;
}
.sidebar a:hover{background:var(--sidebar-hover);color:#fff}
.sidebar a.active{
  background:var(--sidebar-active);color:#fff;font-weight:600;border-left:none;
  box-shadow:inset 2px 0 0 rgba(255,255,255,.85);
}
.sidebar .group{
  color:rgba(255,255,255,.42);
  padding:14px 20px 4px;
  font-size:10.5px;letter-spacing:1.2px;
  text-transform:none;
}
.user-bar{
  margin-top:20px;padding:12px 14px;
  border-top:1px solid var(--sidebar-line);
}
.user-bar .u-name{font-size:13px;font-weight:600}
.user-bar .u-role{color:rgba(255,255,255,.55);font-size:11px}
.user-bar .u-logout{
  color:var(--sidebar-text);font-size:12px;margin-top:6px;
  padding:4px 8px;border-radius:6px;background:rgba(255,255,255,.08);display:inline-block;
}
.user-bar .u-logout:hover{background:rgba(255,255,255,.16);color:#fff}

/* ---------- 主区 ---------- */
.main{margin-left:240px;padding:24px 26px;max-width:1560px}
.fs-toggle{
  border:1px solid var(--line);background:var(--panel);color:var(--muted);
  border-radius:8px;padding:6px 12px;font-size:12px;box-shadow:var(--shadow);
}
.fs-toggle:hover{color:var(--brand);border-color:var(--brand-soft-line);background:var(--brand-soft)}
.topbar{margin-bottom:18px}
.topbar h1{font-size:19px;font-weight:600;letter-spacing:.2px}
.topbar .actions{gap:10px}

/* ---------- 卡片 ---------- */
.card{
  background:var(--panel);
  border:1px solid var(--line);
  border-radius:var(--r-card);
  padding:var(--pad-card);
  margin-bottom:var(--gap-block);
  box-shadow:var(--shadow);
}
.card h2{font-size:14px;font-weight:600;margin:0 0 14px}
.detail-side{position:sticky;top:16px}
.summary-row{padding:7px 0;font-size:13px}
.summary-row:hover{color:var(--brand);background:var(--brand-soft);border-radius:6px;padding-left:6px;padding-right:6px}
.summary-row .amt{font-weight:600}

/* ---------- 指标卡 ---------- */
.stats{gap:16px;margin-bottom:18px}
.stat{
  border:1px solid var(--line);border-radius:var(--r-card);
  padding:16px 18px;background:var(--panel);box-shadow:var(--shadow);
}
.stat .v{font-size:26px;font-weight:700;letter-spacing:-.3px;line-height:1.2}
.stat .l{color:var(--muted);font-size:12px;margin-top:4px}

/* ---------- 按钮 ---------- */
.btn{
  border-radius:var(--r-ctl);border:1px solid var(--line);
  background:var(--panel);color:var(--text);
  padding:7px 14px;font-size:13px;font-weight:500;transition:.12s;
}
.btn:hover{background:var(--fill-hover);border-color:var(--brand-soft-line);color:var(--brand);text-decoration:none}
.btn:active{transform:translateY(1px)}
.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}
.btn-primary:hover{background:var(--brand-dark);border-color:var(--brand-dark);color:#fff}
.btn-green{background:var(--green);border-color:var(--green);color:#fff;font-weight:600}
.btn-green:hover{background:#12833C;border-color:#12833C;color:#fff}
.btn-sm{padding:4px 10px;font-size:12px;border-radius:6px}
.btn:disabled,.btn[disabled]{background:var(--fill-disabled);color:var(--muted-2);border-color:var(--fill-disabled);cursor:not-allowed}
.btn-danger{background:var(--panel);border-color:#F3CFCF;color:var(--red);font-weight:600}
.btn-danger:hover{background:var(--red-bg);border-color:var(--red);color:var(--red)}

/* ---------- 表格 ---------- */
table{
  width:100%;border-collapse:separate;border-spacing:0;
  background:var(--panel);font-size:13px;
  border:1px solid var(--line);border-radius:var(--r-card);
  overflow:visible;
}
th,td{padding:10px 12px;border-bottom:1px solid var(--line-soft);text-align:left;vertical-align:middle}
th{
  background:var(--th-bg);font-weight:600;white-space:nowrap;
  color:var(--muted);font-size:12px;letter-spacing:.3px;
  border-bottom:1px solid var(--line);
}
tbody tr:last-child td{border-bottom:none}
tr:hover td{background:var(--row-hover)}
th.sortable:hover{color:var(--brand)}
th.sortable.asc,th.sortable.desc{color:var(--brand)}
.num{text-align:right}
.muted{color:var(--muted)}

/* ---------- 状态标签 ---------- */
.tag{
  display:inline-block;padding:2px 10px;border-radius:var(--r-pill);
  font-size:12px;font-weight:600;background:var(--fill-soft);color:var(--tag-text);white-space:nowrap;
}
.tag-red{background:var(--red-bg);color:var(--red)}
.tag-amber{background:var(--amber-bg);color:var(--amber-text)}
.tag-green{background:var(--green-bg);color:var(--green)}
.tag-blue{background:var(--brand-soft);color:var(--brand)}
.tag-grey{background:var(--fill-soft);color:var(--tag-text)}

/* ---------- 分类徽标：降饱和统一质感，保留 8 类识别度 ---------- */
.cat-badge{
  min-width:34px;text-align:center;padding:2px 8px;border-radius:6px;
  font-weight:600;font-size:12px;color:#fff;letter-spacing:.3px;
}
.cat-XK{background:#2B3BB4}.cat-LG{background:#6D5BD0}.cat-LZ{background:#0E8CA8}
.cat-SJ{background:#12833C}.cat-WJ{background:#C2740C}.cat-LL{background:#C42E72}
.cat-FL{background:#A87A0E}.cat-BZ{background:#5A6274}

/* ---------- 表单 ---------- */
input,select,textarea{
  font-family:inherit;font-size:13px;
}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--brand)!important;
  box-shadow:0 0 0 3px rgba(43,59,180,.12)!important;
}
.filterbar input,.filterbar select,
.tbl-tools input,.form-grid input,.form-grid select{
  border:1px solid var(--line);border-radius:var(--r-ctl);transition:.12s;
}
.filterbar input:hover,.tbl-tools input:hover{border-color:var(--brand-soft-line)}
.filterbar input,.filterbar select{padding:7px 10px}
.search,.tbl-tools input{width:250px}

/* ---------- 页签 ---------- */
.tabs{gap:6px;border-bottom:1px solid var(--line);margin-bottom:14px}
.tab{
  padding:8px 16px;font-size:13.5px;color:var(--muted);border-radius:var(--r-ctl) var(--r-ctl) 0 0;
  margin-bottom:-1px;border-bottom:2px solid transparent;
}
.tab:hover{color:var(--brand);background:var(--brand-soft)}
.tab.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600;background:var(--brand-soft)}

/* ---------- 弹窗 / 提示 ---------- */
.modal{border-radius:12px;padding:22px;border:1px solid var(--line);box-shadow:var(--shadow-lg)}
.modal h3{font-size:16px;font-weight:600}
.modal-back{background:rgba(15,20,32,.45)}
.flash div{border-radius:var(--r-ctl);box-shadow:var(--shadow-lg);font-size:13px}
.flash .success{background:var(--green)}
.flash .error{background:var(--red)}

/* ---------- 折叠分组头 ---------- */
details.group-head > summary{cursor:pointer;list-style:none;padding:8px 10px;border-radius:var(--r-ctl)}
details.group-head > summary:hover{background:var(--row-hover)}

/* ---------- 登录页：左品牌画布 + 右表单 ---------- */
body.login-body{
  background:var(--bg);
  min-height:100vh;display:flex;align-items:stretch;justify-content:center;
}
.login-wrap{display:flex;width:100%;min-height:100vh}

/* 左：品牌画布（55%，内容整体居中） */
.login-brand{
  flex:0 0 55%;position:relative;overflow:hidden;
  background:linear-gradient(150deg,var(--banner-1) 0%,var(--banner-2) 100%);
  color:#fff;padding:56px 48px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;
}
/* 白色考拉 LOGO（透明底，直接铺在深蓝画布上，不套白底徽章） */
.lb-logo{
  width:150px;height:auto;display:block;margin:0 auto 28px;
  filter:drop-shadow(0 4px 14px rgba(0,0,0,.22));
}
.lb-name{font-size:26px;font-weight:700;letter-spacing:.5px;line-height:1.35}
.lb-rule{width:64px;height:2px;background:rgba(255,255,255,.45);border-radius:2px;margin:20px auto 0}
.lb-sys{font-size:19px;font-weight:600;letter-spacing:1.5px;margin-top:24px}
.lb-slogan{font-size:13px;color:rgba(255,255,255,.75);margin-top:9px;letter-spacing:1.5px}

/* 底纹：居中一排行李箱轮廓（纯 CSS，无图片依赖，断网也在） */
.lb-art{
  display:flex;align-items:flex-end;justify-content:center;gap:20px;
  margin-top:56px;opacity:.38;
}
.lb-art i{position:relative;display:block;border:3px solid #fff;border-radius:9px}
/* 提手 */
.lb-art i::before{
  content:'';position:absolute;top:-11px;left:50%;transform:translateX(-50%);
  width:16px;height:8px;border:3px solid #fff;border-bottom:none;border-radius:6px 6px 0 0;
}
/* 五只箱子：小 → 中 → 大 → 中 → 小 */
.lb-art i:nth-child(1){width:42px;height:50px}
.lb-art i:nth-child(2){width:56px;height:66px}
.lb-art i:nth-child(3){width:86px;height:78px}
.lb-art i:nth-child(3)::after{         /* 大箱中间一道竖线（拉杆感） */
  content:'';position:absolute;left:50%;top:10px;bottom:10px;width:3px;
  background:#fff;border-radius:2px;transform:translateX(-50%);opacity:.7;
}
.lb-art i:nth-child(4){width:54px;height:56px}
.lb-art i:nth-child(5){width:40px;height:46px}

/* 右：表单（45%） */
.login-panel{
  flex:1;background:var(--panel);display:flex;align-items:center;justify-content:center;
  padding:48px 40px;
}
.login-form{width:100%;max-width:320px}
.login-form .lf-h{font-size:21px;font-weight:600;margin:0 0 6px;color:var(--text)}
.login-form .lf-s{color:var(--muted);font-size:12.5px;margin:0 0 26px}
.login-form label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.login-form input[type=text],.login-form input[type=password]{
  width:100%;padding:12px 13px;border:1px solid var(--line);border-radius:var(--r-ctl);
  font-size:14px;margin-bottom:16px;
}
.login-form button{
  width:100%;padding:13px;background:var(--brand);color:#fff;border:none;
  border-radius:var(--r-ctl);font-size:15px;cursor:pointer;font-weight:600;letter-spacing:3px;
  margin-top:4px;
}
.login-form button:hover{background:var(--brand-dark)}
.login-form .err{
  background:var(--red-bg);color:var(--red);padding:10px 12px;border-radius:var(--r-ctl);
  font-size:13px;margin-bottom:16px;
}
.login-form .lf-tip{color:var(--muted-2);font-size:11.5px;text-align:center;margin-top:20px;line-height:1.7}
.login-theme{
  position:fixed;right:18px;top:16px;
  background:rgba(255,255,255,.14);color:#fff;
  border:1px solid rgba(255,255,255,.24);border-radius:20px;
  padding:6px 14px;font-size:12.5px;cursor:pointer;
}
.login-theme:hover{background:rgba(255,255,255,.26)}

@media(max-width:900px){
  .login-brand{flex:0 0 42%;padding:40px 32px}
  .lb-logo{width:110px;margin-bottom:18px}
  .lb-name{font-size:20px}
  .lb-sys{font-size:16px}
  .lb-art{margin-top:36px;gap:14px}
}
@media(max-width:640px){
  .login-wrap{flex-direction:column}
  .login-brand{flex:none;padding:28px 24px}
  .lb-art{display:none}
  .login-panel{padding:32px 24px}
}

/* ============================================================
   暗色适配补丁 —— 统一接管原生控件的默认白底
   ============================================================ */
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=button]):not([type=submit]):not([type=reset]),
select,textarea{
  background:var(--panel);
  color:var(--text);
  border:1px solid var(--line);
}
select option{background:var(--panel);color:var(--text)}
input::placeholder,textarea::placeholder{color:var(--muted-2);opacity:1}
input:disabled,select:disabled,textarea:disabled{
  background:var(--line-soft);color:var(--muted-2);cursor:not-allowed;
}
input[type=checkbox],input[type=radio]{accent-color:var(--brand);cursor:pointer}
input[type=file]{color:var(--muted)}
::file-selector-button{
  background:var(--brand-soft);color:var(--brand);border:1px solid var(--brand-soft-line);
  border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;
}
.modal{background:var(--panel);color:var(--text)}
.modal h3{color:var(--text)}
/* 自动填充时不让浏览器强行刷成黄色 */
input:-webkit-autofill{
  -webkit-text-fill-color:var(--text);
  -webkit-box-shadow:0 0 0 1000px var(--panel) inset;
}

/* ============================================================
   主题切换按钮（侧边栏底部）
   ============================================================ */
.theme-toggle{
  display:flex;align-items:center;gap:8px;
  margin:0 10px 4px;padding:9px 12px;
  border-radius:var(--r-ctl);
  background:var(--sidebar-hover);
  color:var(--sidebar-text);
  font-size:13px;font-weight:500;cursor:pointer;
  user-select:none;
  border:1px solid var(--sidebar-line);
}
/* ---------- 通用类名：替代子模板里的内联硬编码色，使暗模式生效 ---------- */
.grp-head,.grp-row{background:var(--brand-soft)}
.track{background:var(--fill-hover)}
.warn-box{background:var(--amber-bg);border-color:var(--amber)}
[data-theme="dark"] .warn-box{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.35)}
/* ============================================================
   首页看板（方案二 深蓝大时钟横幅 + 方案一 卡片网格）
   ============================================================ */
:root{
  --banner-1:#1E2A78;
  --banner-2:#2B3BB4;
  --banner-ink:rgba(255,255,255,.72);
  --banner-line:rgba(255,255,255,.14);
}
[data-theme="dark"]{
  --banner-1:#111A34;
  --banner-2:#232F6B;
  --banner-ink:rgba(226,232,240,.68);
  --banner-line:rgba(255,255,255,.10);
}

.banner{
  display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:28px;
  background:linear-gradient(118deg,var(--banner-1) 0%,var(--banner-2) 100%);
  color:#fff;border-radius:12px;padding:20px 28px;margin-bottom:14px;
  box-shadow:var(--shadow-lg);
}
.bd-clock{
  font-size:46px;font-weight:700;line-height:1;letter-spacing:1px;
  font-variant-numeric:tabular-nums;
}
.bd-date{color:var(--banner-ink);font-size:13px;margin-top:8px;letter-spacing:.3px}
.bd-week{background:rgba(255,255,255,.16);border-radius:6px;padding:1px 8px;margin-left:6px}
.bd-mid{display:flex;justify-content:center}
.bd-weather{
  display:flex;align-items:center;gap:12px;
  padding:8px 20px;border-left:1px solid var(--banner-line);border-right:1px solid var(--banner-line);
}
.bd-w-ico{font-size:30px;line-height:1}
.bd-w-temp{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.2}
.bd-w-desc{font-size:13px;font-weight:500;margin-left:8px;color:rgba(255,255,255,.86)}
.bd-w-sub{color:var(--banner-ink);font-size:11.5px;margin-top:2px}
.bd-right{display:flex;align-items:center;gap:20px}
.bd-kpi{text-align:center;min-width:96px}
.bd-k-v{font-size:28px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
.bd-k-u{font-size:13px;font-weight:500;margin-left:3px;opacity:.85}
.bd-k-l{color:var(--banner-ink);font-size:11.5px;margin-top:4px;white-space:nowrap}
.bd-sep{width:1px;height:38px;background:var(--banner-line)}
.banner-note{
  background:var(--amber-bg);color:var(--amber-text);border:1px solid var(--amber);
  border-radius:8px;padding:8px 14px;font-size:12.5px;margin-bottom:18px;
}
@media(max-width:1180px){
  .banner{grid-template-columns:1fr;gap:14px;text-align:center}
  .bd-mid{justify-content:center}
  .bd-right{justify-content:center;flex-wrap:wrap}
  .bd-sep{display:none}
}

/* 区块小标题 */
.sec-title{
  display:flex;align-items:baseline;gap:10px;
  font-size:15px;font-weight:600;margin:22px 0 12px;letter-spacing:.2px;
}
.sec-sub{font-size:12px;font-weight:400;color:var(--muted)}

/* 产线三卡 */
.line-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:6px}
@media(max-width:1100px){.line-grid{grid-template-columns:1fr}}
.line-card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);
  padding:16px 18px;box-shadow:var(--shadow);
}
.line-card.line-idle{border-color:var(--amber);background:var(--amber-bg)}
.line-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.line-badge{
  width:26px;height:26px;border-radius:7px;background:var(--brand);color:#fff;
  font-weight:700;font-size:14px;display:flex;align-items:center;justify-content:center;flex:none;
}
.line-name{font-weight:600;font-size:14px;flex:1}
.line-num{margin:2px 0 10px}
.ln-v{font-size:34px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;color:var(--green)}
.line-idle .ln-v{color:var(--amber-text)}
.ln-u{font-size:13px;color:var(--muted);margin-left:4px}
.line-meta{border-top:1px dashed var(--line-soft);padding-top:8px}
.ln-row{display:flex;align-items:center;gap:8px;font-size:12.5px;padding:3px 0}
.ln-row .muted{font-size:11.5px}
.ln-good{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--green)}
.ln-defect{color:var(--red);font-weight:600}
.ln-empty{color:var(--amber-text);font-size:12.5px;padding:4px 0}

/* 完工度进度条 */
.prog{display:flex;align-items:center;gap:8px}
.track{flex:1;height:8px;border-radius:4px;overflow:hidden}
.bar{height:100%;border-radius:4px}
.prog-txt{font-size:12px;font-weight:600;min-width:34px;text-align:right;font-variant-numeric:tabular-nums}
.prog-idle{color:var(--muted-2);font-weight:500;font-size:11.5px}
.prog-q{font-size:11.5px;min-width:56px;text-align:left}

/* 左右两栏（物料库存 / 公告板） */
.board-2col{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
@media(max-width:1100px){.board-2col{grid-template-columns:1fr}}
.board-2col .card{margin-bottom:0}
.mini-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:4px}
.mini{background:var(--fill-soft);border-radius:8px;padding:10px 8px;text-align:center}
.mv{font-size:20px;font-weight:700;line-height:1.2;font-variant-numeric:tabular-nums}
.ml{font-size:11px;color:var(--muted);margin-top:2px}
.quick-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}

/* 公告板 */
.ann{border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:var(--panel)}
.ann-pin{border-color:var(--brand-soft-line);background:var(--brand-soft)}
.ann-h{display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.ann-t{font-size:13.5px}
.ann-del{margin-left:auto}
.ann-del button{
  border:none;background:transparent;color:var(--muted-2);font-size:16px;cursor:pointer;
  line-height:1;padding:0 4px;border-radius:4px;
}
.ann-del button:hover{color:var(--red);background:var(--red-bg)}
.ann-b{font-size:12.5px;color:var(--muted);margin-top:5px;white-space:pre-wrap}
.ann-f{font-size:11px;margin-top:6px}
.ann-form{margin-top:12px;border-top:1px dashed var(--line);padding-top:10px}
.ann-form summary{cursor:pointer;color:var(--brand);font-size:13px;font-weight:500;padding:2px 0}
.ann-form form{margin-top:10px}
.ann-form input[name=title],.ann-form textarea{
  width:100%;border:1px solid var(--line);border-radius:var(--r-ctl);
  padding:8px 10px;margin-bottom:8px;resize:vertical;
}
.ann-form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ann-form-row select,.ann-form-row input[type=date]{
  border:1px solid var(--line);border-radius:var(--r-ctl);padding:6px 8px;background:var(--panel);color:var(--text);
}
.ann-pin-ck{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--muted)}

/* 待办与异常 */
.todo-list{display:flex;flex-direction:column;gap:8px}
.todo{
  display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:8px;
  border:1px solid var(--line);background:var(--panel);font-size:13.5px;color:var(--text);
}
.todo:hover{text-decoration:none;border-color:var(--brand);background:var(--brand-soft)}
.todo-red{border-left:4px solid var(--red);background:var(--red-bg)}
.todo-amber{border-left:4px solid var(--amber);background:var(--amber-bg)}
.todo-grey{border-left:4px solid var(--grey)}
.todo-ico{font-size:16px;flex:none}
.todo-txt{flex:1}
.todo-go{color:var(--brand);font-size:12px;font-weight:600;flex:none}
.board-foot{font-size:11.5px;text-align:center;margin:6px 0 0}

.theme-toggle .t-ico{font-size:14px;line-height:1}
/* 切换时柔和过渡，不刺眼 */
body,.sidebar,.card,.stat,.main,.topbar,.theme-toggle{
  transition:background-color .18s ease,color .18s ease,border-color .18s ease;
}
