/* ============================================================
   全安应急 · 设计系统 V3 — 政务稳重风
   主色：深藏青 #1B3A6B；点缀：金 #C9A227；底：暖纸 #F4F3EE
   ============================================================ */
:root {
  /* 品牌：海军蓝梯度（顶栏 / 侧栏 / 主按钮 / 标题） */
  --brand-900: #1B3A6B;
  --brand-800: #1B3A6B;
  --brand-700: #3B5C8F;
  --brand-600: #2A4A7C;
  --brand-500: #3B5C8F;
  --brand-100: #E8EDF5;
  --brand-50:  #EEF2F8;

  /* 金（关键数字 / 徽标） */
  --gold-500: #C9A227;
  --gold-700: #A8841A;

  /* 文字 / 边框 */
  --text:   #1A1B1C;
  --text-2: #6B7280;
  --border: #E4E3DD;

  --ink-900: #1A1B1C;
  --ink-600: #6B7280;
  --ink-400: #9AA3B0;
  --line:   #E4E3DD;
  --bg:     #F4F3EE;
  --card:   #FFFFFF;

  --ok: #52C41A;
  --warn: #FAAD14;
  --danger: #EA6668;
  --orange: #F97316;

  --radius: 14px;
  --radius-sm: 10px;
  --shadow: 0 1px 3px rgba(27,58,107,.06), 0 6px 20px rgba(27,58,107,.05);
  --shadow-lg: 0 12px 40px rgba(19,48,90,.18);
  --font: "PingFang SC", "Microsoft YaHei", -apple-system, sans-serif;
}

* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { height: 100%; }
body {
  font-family: var(--font);
  background: var(--bg);
  color: var(--ink-900);
  font-size: 14px;
  line-height: 1.6;
}
a { color: var(--brand-600); text-decoration: none; }

/* ---------- 顶栏 ---------- */
.topbar {
  height: 64px; display: flex; align-items: center; gap: 16px;
  padding: 0 24px; background: linear-gradient(90deg, var(--brand-900), var(--brand-700) 60%, var(--brand-600));
  color: #fff; position: sticky; top: 0; z-index: 50;
}
.topbar .logo { display: flex; align-items: center; gap: 10px; font-size: 17px; font-weight: 700; letter-spacing: .5px; }
.topbar .logo .mark {
  width: 32px; height: 32px; border-radius: 9px; display: grid; place-items: center;
  background: rgba(255,255,255,.16); font-size: 17px; box-shadow: 0 2px 0 rgba(0,0,0,.15);
}
.topbar .spacer { flex: 1; }
.topbar .userbox { display: flex; align-items: center; gap: 10px; font-size: 13px; opacity: .95; }
.topbar .userbox .avatar {
  width: 32px; height: 32px; border-radius: 50%; background: rgba(255,255,255,.2);
  display: grid; place-items: center; font-size: 13px; box-shadow: 0 2px 0 rgba(0,0,0,.12);
}
.topbar .userbox a { color: rgba(255,255,255,.85); cursor: pointer; }

/* ---------- 布局 ---------- */
.layout { display: flex; min-height: calc(100vh - 64px); }
.sidebar {
  width: 220px; background: var(--card); border-right: 1px solid var(--border);
  padding: 14px 12px; flex-shrink: 0; display: flex; flex-direction: column;
  transition: width .18s ease;
}
.layout.collapsed .sidebar { width: 64px; }
.nav-scroll { flex: 1; overflow-y: auto; overflow-x: hidden; }
.nav-group { margin-bottom: 4px; }
.nav-group-title {
  font-size: 11px; font-weight: 700; color: var(--text-2); letter-spacing: .6px;
  padding: 14px 14px 6px; white-space: nowrap;
}
.layout.collapsed .nav-group-title { height: 1px; padding: 8px 0 0; margin: 8px 14px; background: var(--border); overflow: hidden; }
.sidebar .nav-item {
  display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--radius-sm);
  color: var(--text-2); cursor: pointer; margin-bottom: 4px; font-size: 14px; white-space: nowrap;
  transition: background .15s, color .15s, transform .1s;
}
.sidebar .nav-item:hover { background: var(--brand-100); color: var(--brand-900); }
.sidebar .nav-item:active { transform: translateY(1px); }
.sidebar .nav-item.active { background: var(--brand-900); color: #fff; font-weight: 600; box-shadow: 0 2px 0 var(--brand-700); }
.sidebar .nav-item .nav-ico { flex: 0 0 auto; width: 20px; text-align: center; font-size: 16px; }
.layout.collapsed .sidebar .nav-item { justify-content: center; padding-left: 0; padding-right: 0; gap: 0; }
.layout.collapsed .nav-label { display: none; }
.sidebar-toggle {
  display: flex; align-items: center; gap: 10px; margin-top: 6px; padding: 10px 14px;
  border-top: 1px solid var(--border); color: var(--text-2); cursor: pointer; font-size: 13px;
  border-radius: var(--radius-sm); white-space: nowrap;
}
.sidebar-toggle:hover { background: var(--brand-100); color: var(--brand-900); }
.sidebar-toggle .nav-ico { flex: 0 0 auto; width: 20px; text-align: center; }
.layout.collapsed .sidebar-toggle { justify-content: center; padding-left: 0; padding-right: 0; gap: 0; }
.layout.collapsed .sidebar-toggle .nav-label { display: none; }
.main { flex: 1; padding: 24px 28px; max-width: 1400px; min-width: 0; }

/* ---------- 卡片 ---------- */
.card { background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow); padding: 20px; border: 1px solid var(--border); }
.card + .card { margin-top: 16px; }
.card-title { font-size: 16px; font-weight: 700; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
.card-title .more { margin-left: auto; font-size: 12px; font-weight: 400; color: var(--ink-400); cursor: pointer; }

/* ---------- 统计块（关键数字金色） ---------- */
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 16px; margin-bottom: 16px; }
.stat {
  background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow); padding: 18px 20px;
  position: relative; overflow: hidden; border: 1px solid var(--border);
}
.stat::after {
  content: ""; position: absolute; right: -20px; top: -20px; width: 80px; height: 80px;
  border-radius: 50%; background: var(--brand-100);
}
.stat .num {
  font-size: 30px; font-weight: 800; line-height: 1.2; position: relative;
  background: linear-gradient(135deg, #D8B24A, var(--gold-500));
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.stat .label { font-size: 12px; color: var(--text-2); position: relative; }

/* ---------- 登录页（政务稳重风：海军蓝顶饰） ---------- */
#loginPage .card { border-top: 4px solid var(--brand-900); box-shadow: var(--shadow-lg); }

/* ---------- 按钮：统一「实体按键」质感 ----------
   老板 2026-09-29：「每一个界面的按键都做一些按键的效果」——
   按钮底边加一条实色边（box-shadow 0 2px 0），鼠标按下去整块往下沉 2px，
   和真键盘按键一样有行程，一眼就能看出"这是个能按的东西"。 */
.btn {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  padding: 8px 16px; border-radius: 9px; font-size: 13px; font-family: var(--font);
  line-height: 1.5; background: var(--brand-800); color: #fff;
  border: 1px solid var(--brand-900);
  box-shadow: 0 2px 0 var(--brand-900);
  transition: background .15s, border-color .15s, box-shadow .08s, transform .08s;
  user-select: none; -webkit-user-select: none;
}
.btn:hover { background: var(--brand-600); border-color: var(--brand-800); box-shadow: 0 2px 0 var(--brand-800); }
.btn:active { transform: translateY(2px); box-shadow: 0 0 0 var(--brand-900); }
.btn:focus-visible { outline: 3px solid var(--brand-100); outline-offset: 1px; }

.btn.ghost { background: var(--brand-50); color: var(--brand-800); border-color: #C9DBF8; box-shadow: 0 2px 0 #C9DBF8; }
.btn.ghost:hover { background: var(--brand-100); border-color: #A9C5F2; box-shadow: 0 2px 0 #A9C5F2; }
.btn.ghost:active { box-shadow: 0 0 0 #C9DBF8; }

.btn.plain { background: #fff; color: var(--ink-600); border-color: var(--line); box-shadow: 0 2px 0 #DDE4F0; }
.btn.plain:hover { background: var(--brand-50); border-color: var(--brand-500); color: var(--brand-800); box-shadow: 0 2px 0 #BBD2F5; }
.btn.plain:active { box-shadow: 0 0 0 #DDE4F0; }

.btn.danger { background: #FEF2F2; color: var(--danger); border-color: #FCA5A5; box-shadow: 0 2px 0 #FCA5A5; }
.btn.danger:hover { background: #FEE2E2; border-color: #F87171; box-shadow: 0 2px 0 #F87171; }
.btn.danger:active { box-shadow: 0 0 0 #FCA5A5; }

/* 绿色确认键（知识库「保存分类修改」等）：同样给一条深绿底边 */
.btn.ok { background: #16A34A; color: #fff; border-color: #15803D; box-shadow: 0 2px 0 #15803D; }
.btn.ok:hover { background: #15803D; border-color: #166534; box-shadow: 0 2px 0 #166534; }
.btn.ok:active { transform: translateY(2px); box-shadow: 0 0 0 #15803D; }

.btn.sm { padding: 5px 11px; font-size: 12px; border-radius: 8px; }
.btn:disabled, .btn:disabled:hover {
  opacity: .55; cursor: not-allowed; transform: none;
  background: #C9D2E0; color: #fff; border-color: #B6C2D4; box-shadow: 0 2px 0 #B6C2D4;
}
.btn.ghost:disabled, .btn.plain:disabled { background: #EFF2F7; color: var(--ink-400); border-color: var(--line); box-shadow: 0 2px 0 #E2E7F0; }

/* 返回键：箭头单独放进一个小方块里，蓝底白字 + 立体边 —— 一眼就是「回去」 */
.btn.back {
  gap: 9px; padding: 6px 16px 6px 7px; font-weight: 600;
  background: #fff; color: var(--brand-800);
  border-color: #BBD2F5; box-shadow: 0 2px 0 #BBD2F5;
}
.btn.back:hover { background: var(--brand-50); border-color: var(--brand-500); box-shadow: 0 2px 0 var(--brand-500); }
.btn.back:active { transform: translateY(2px); box-shadow: 0 0 0 #BBD2F5; }
.btn.back .bk {
  display: inline-flex; align-items: center; justify-content: center;
  width: 27px; height: 27px; border-radius: 7px; line-height: 1;
  font-size: 15px; font-weight: 700;
  background: var(--brand-100); color: var(--brand-800);
}

/* ---------- 表单 ---------- */
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px 16px; }
.field label { display: block; font-size: 12px; color: var(--ink-600); margin-bottom: 4px; }
.field input, .field select, .field textarea {
  width: 100%; padding: 8px 12px; border: 1px solid var(--line); border-radius: var(--radius-sm);
  font-size: 13px; font-family: var(--font); background: #fff; outline: none; transition: .15s;
}
.field input:focus, .field select:focus, .field textarea:focus {
  border-color: var(--brand-500); box-shadow: 0 0 0 3px var(--brand-100);
}

/* 密码框 + 显示密码切换（老板 2026-10-04：设置/修改密码都要能确认录入是否正确） */
.pw-wrap { position: relative; }
.pw-wrap input { width: 100%; padding-right: 42px; }
.pw-eye {
  position: absolute; right: 6px; top: 50%; transform: translateY(-50%);
  border: none; background: transparent; cursor: pointer; font-size: 16px; line-height: 1;
  padding: 4px 6px; color: var(--ink-400); border-radius: 6px;
}
.pw-eye:hover { background: var(--brand-50); color: var(--brand-600); }

/* ---------- 表格 ----------
   老板 2026-09-30：全系统表格「字全部显示」——单元格一律换行、不截断、不省字 */
table.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.tbl th { text-align: left; padding: 11px 12px; color: var(--ink-600); font-weight: 700; font-size: 12px;
  border-bottom: 2px solid var(--brand-100); background: var(--brand-50); white-space: nowrap; }
.tbl td { padding: 10px 12px; border-bottom: 1px solid var(--bg); vertical-align: middle;
          white-space: normal; word-break: break-word; overflow-wrap: anywhere; }
.tbl tr:hover td { background: var(--brand-50); }
.tbl .link { color: var(--brand-600); cursor: pointer; font-weight: 500; }
/* 产出件编辑网格：单元格统一顶对齐、行高贴着文字（长短格混排时不散） */
.dlv-grid td { vertical-align: top; }
.dlv-grid .cell-sel { min-width: 0; max-width: none; width: 100%; }
/* 表格内可编辑下拉（人工确认资料类型 / 行业） */
.cell-sel {
  padding: 5px 8px; font-size: 12px; min-width: 132px; max-width: 190px;
  border: 1px solid var(--line); border-radius: 6px; background: #fff;
  color: var(--ink-700); font-family: inherit;
}
.cell-sel:hover { border-color: var(--brand-500); }
.cell-sel option[value=""] { color: var(--ink-400); }

/* ---------- 徽标 ---------- */
.badge { display: inline-flex; align-items: center; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 500; }
.badge.blue { background: var(--brand-100); color: var(--brand-800); }
.badge.green { background: #ECFDF5; color: var(--ok); }
.badge.orange { background: #FFF7ED; color: var(--warn); }
.badge.red { background: #FEF2F2; color: var(--danger); }
.badge.gray { background: #F1F3F8; color: var(--ink-600); }
/* 可点击的分类徽章（知识库「分类分布」）：也做成小按键，一眼看出能点进去 */
.badge.chip {
  height: 30px; padding: 0 14px; font-size: 12.5px; font-weight: 600; font-family: inherit;
  cursor: pointer; border: 1px solid transparent; box-shadow: 0 2px 0 transparent;
  transition: background .15s, border-color .15s, box-shadow .08s, transform .08s;
}
.badge.chip .arw { opacity: .55; margin-left: 3px; }
.badge.blue.chip { border-color: #B9CFF5; box-shadow: 0 2px 0 #B9CFF5; }
.badge.gray.chip { border-color: #D5DBE8; box-shadow: 0 2px 0 #D5DBE8; }
.badge.chip:hover { border-color: var(--brand-500); box-shadow: 0 2px 0 var(--brand-500); }
.badge.chip:active { transform: translateY(2px); box-shadow: 0 0 0 var(--brand-500); }
.badge.blue.chip:hover { background: #D3E2FB; }
.badge.gray.chip:hover { background: #E5E9F3; }

/* ---------- V4.0 项目归属标记（总部直管 / 省公司） ---------- */
/* 总部开设的项目 = 总部直管：橙色小标，醒目但不抢戏 */
.pill-hq {
  display: inline-flex; align-items: center; gap: 3px; white-space: nowrap;
  padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 600;
  background: #FFF7ED; color: #C2410C; border: 1px solid #FED7AA;
}
/* 省公司归属：蓝灰小标，仅在总部视角显示（省内看了没有意义） */
.pill-owner {
  display: inline-flex; align-items: center; white-space: nowrap;
  padding: 1px 8px; border-radius: 999px; font-size: 11px; font-weight: 500;
  background: var(--brand-100); color: var(--brand-800); border: 1px solid #D6E2FA;
}
/* V4.0 审批状态徽标：草稿/待批/已批/驳回 四态配色 */
.pill-appr-草稿 { background: #F1F5F9; color: #64748B; border: 1px solid #E2E8F0; }
.pill-appr-待批 { background: #FEF9C3; color: #A16207; border: 1px solid #FDE68A; }
.pill-appr-已批 { background: #DCFCE7; color: #15803D; border: 1px solid #BBF7D0; }
.pill-appr-驳回 { background: #FEE2E2; color: #B91C1C; border: 1px solid #FECACA; }

/* ---------- 弹窗 ---------- */
.modal-mask {
  position: fixed; inset: 0; background: rgba(15,30,55,.45); z-index: 200;
  display: none; align-items: flex-start; justify-content: center; padding: 60px 20px;
  backdrop-filter: blur(2px); overflow: auto;
}
.modal-mask.show { display: flex; }
.modal {
  background: #fff; border-radius: 16px; box-shadow: var(--shadow-lg); width: 780px; max-width: 100%;
  animation: pop .18s ease;
}
/* 大窗口：编辑/录入类弹窗统一放大，接近浏览器可视宽度 */
.modal.lg { width: 1120px; max-width: 96vw; }
.modal.lg .modal-body { max-height: 78vh; }
.modal .modal-head {
  display: flex; align-items: center; gap: 10px; padding: 16px 24px;
  border-bottom: 1px solid var(--line); font-size: 16px; font-weight: 700;
}
.modal .modal-head .ttl { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.modal .modal-head .ico {
  flex: 0 0 auto; cursor: pointer; color: var(--ink-400); font-size: 16px; line-height: 1;
  padding: 5px 8px; border-radius: 6px; user-select: none;
}
.modal .modal-head .ico:hover { background: var(--brand-50); color: var(--brand-600); }

/* ---------- 弹窗右上角两个动作按钮（老板 2026-09-29）----------
   要求：放大、各自独立成一个按键、带明显方框、关闭用红色，并写字标注，
   让人一眼看得出哪个是全屏、哪个是关掉，不会点错。 */
.macts { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; }
.mact {
  height: 42px; min-width: 46px; padding: 0 14px 0 12px; flex: 0 0 auto;
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  font-family: inherit; font-size: 14px; font-weight: 700; line-height: 1;
  border-radius: 10px; border: 2px solid transparent; background: #fff;
  cursor: pointer; user-select: none; white-space: nowrap;
  transition: transform .12s ease, background .12s ease, border-color .12s ease, box-shadow .12s ease;
}
.mact .mi { font-size: 21px; line-height: 1; font-weight: 700; }
.mact:active { transform: translateY(2px); box-shadow: 0 0 0 transparent; }
/* 放大 / 还原：蓝色方框 */
.mact.max { color: #1D4ED8; border-color: #BFDBFE; background: #EFF6FF; box-shadow: 0 2px 0 #BFDBFE; }
.mact.max:hover { background: #DBEAFE; border-color: #3B82F6; box-shadow: 0 2px 0 #3B82F6; }
/* 关闭：红色方框（最显眼，独立按键） */
.mact.close { color: #DC2626; border-color: #FCA5A5; background: #FEF2F2; box-shadow: 0 2px 0 #FCA5A5; }
.mact.close:hover { background: #FEE2E2; border-color: #EF4444; color: #B91C1C; box-shadow: 0 2px 0 #EF4444; }
/* 窄屏只留图标，避免挤掉标题 */
@media (max-width: 620px) {
  .mact { padding: 0 10px; height: 40px; gap: 0; }
  .mact span:not(.mi) { display: none; }
  .macts { gap: 8px; }
}
.modal .modal-body { padding: 20px 24px; max-height: 70vh; overflow: auto; }
.modal .modal-foot { padding: 14px 24px; border-top: 1px solid var(--line); display: flex; justify-content: flex-end; gap: 10px; }
@keyframes pop { from { transform: scale(.96); opacity: 0; } to { transform: scale(1); opacity: 1; } }

/* ---------- 弹窗全屏（铺满浏览器窗口）---------- */
.modal-mask.has-full { padding: 0; align-items: stretch; overflow: hidden; }
.modal.full {
  width: 100%; max-width: 100%; height: 100vh; border-radius: 0;
  display: flex; flex-direction: column; animation: none;
}
.modal.full .modal-head, .modal.full .modal-foot { flex: 0 0 auto; }
.modal.full .modal-body { flex: 1 1 auto; max-height: none; overflow: auto; }
/* 全屏时公文纸不再自己滚（避免双层滚动条），交给 modal-body 统一滚；
   并限制阅读宽度居中，避免通栏导致每行过长、不好读 */
.modal.full .word-page {
  max-height: none; overflow: visible;
  max-width: 1040px; margin: 0 auto;
  box-shadow: 0 1px 3px rgba(23,35,61,.08);
}
@media (max-width: 980px) {
  .modal.full .modal-body { padding: 14px; }
}

/* ---------- toast ---------- */
#toast { position: fixed; top: 70px; left: 50%; transform: translateX(-50%); z-index: 999; display: none; }
#toast .inner {
  background: var(--ink-900); color: #fff; padding: 10px 20px; border-radius: 999px; font-size: 13px;
  box-shadow: var(--shadow-lg);
}
#toast.ok .inner { background: var(--ok); }
#toast.err .inner { background: var(--danger); }

/* ---------- 流程步骤条（项目详情） ---------- */
.flow-steps { display: flex; gap: 0; margin-bottom: 20px; overflow-x: auto; }
.flow-step { flex: 1; min-width: 120px; text-align: center; position: relative; padding: 12px 8px; cursor: pointer; }
.flow-step::before {
  content: ""; position: absolute; top: 22px; left: 0; right: 0; height: 2px; background: var(--line); z-index: 0;
}
.flow-step:first-child::before { left: 50%; }
.flow-step:last-child::before { right: 50%; }
.flow-step .dot {
  width: 26px; height: 26px; border-radius: 50%; background: #fff; border: 2px solid var(--line);
  margin: 0 auto 6px; display: grid; place-items: center; font-size: 12px; position: relative; z-index: 1; color: var(--ink-400);
  transition: transform .12s, border-color .15s, color .15s, background .15s;
}
.flow-step:hover .dot { border-color: var(--brand-500); color: var(--brand-600); }
.flow-step:active .dot { transform: translateY(2px); }
.flow-step.active .dot { background: var(--brand-800); border-color: var(--brand-800); color: #fff; box-shadow: 0 2px 0 var(--brand-900); }
.flow-step.done .dot { background: var(--ok); border-color: var(--ok); color: #fff; }
.flow-step .lbl { font-size: 12px; color: var(--ink-600); font-weight: 500; }
.flow-step.active .lbl { color: var(--brand-800); font-weight: 700; }

/* ---------- 资料夹网格 ---------- */
.folder-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; }
.folder-item {
  border: 1px solid #D8E3F6; border-radius: var(--radius-sm); padding: 10px 12px; cursor: pointer;
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  background: linear-gradient(180deg, #F6FAFF 0%, #EAF1FB 100%);
  box-shadow: 0 2px 0 #D8E3F6;
  transition: border-color .15s, box-shadow .12s, transform .12s;
}
.folder-item:hover { border-color: var(--brand-500); box-shadow: 0 2px 0 #BBD2F5; }
.folder-item:active { transform: translateY(2px); box-shadow: 0 0 0 #BBD2F5; }
.folder-item .cnt { margin-left: auto; font-size: 11px; color: var(--ink-400); }
.folder-item .key { font-size: 11px; color: var(--brand-600); font-weight: 700; min-width: 28px; }

/* ---------- 生成区 ---------- */
.gen-panel { display: flex; flex-wrap: wrap; gap: 10px; }
.gen-panel .btn { min-width: 130px; justify-content: center; }

/* ══════════ 项目详情页（老板 2026-09-30 重构）══════════ */

/* ---------- 页头：返回 + 项目名 + 补充资料 ---------- */
.proj-head { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.proj-head .btn.back { flex: none; margin-top: 2px; }

/* ---------- 五阶段自动进度条（只读，不由人点） ---------- */
.pstage-wrap { width: 100%; }
.pstage-skel { height: 54px; border-radius: 10px; background: linear-gradient(90deg, #EEF3FB 25%, #F7FAFF 37%, #EEF3FB 63%);
  background-size: 400% 100%; animation: kbSkel 1.3s ease-in-out infinite; }
.blk-skel { border-radius: 10px; background: linear-gradient(90deg, #E9EEF6 25%, #F7FAFF 37%, #E9EEF6 63%);
  background-size: 400% 100%; animation: kbSkel 1.1s ease-in-out infinite; }
.pstage { display: flex; align-items: flex-start; }
.pstage-node { flex: none; width: 84px; text-align: center; }
.pstage-dot {
  width: 30px; height: 30px; border-radius: 50%; margin: 0 auto 6px; display: grid; place-items: center;
  font-size: 12px; font-weight: 700; background: #fff; color: var(--ink-400);
  border: 2px solid var(--line); transition: background .2s, color .2s, border-color .2s, box-shadow .2s;
}
.pstage-lbl { font-size: 12.5px; color: var(--ink-400); font-weight: 600; }
.pstage-cnt { font-size: 11px; color: var(--ink-400); margin-top: 2px; }
.pstage-node.done .pstage-dot { background: #E8FAF0; border-color: #16A34A; color: #15803D; }
.pstage-node.done .pstage-lbl { color: #15803D; }
.pstage-node.cur .pstage-dot { background: var(--brand-800); border-color: var(--brand-800); color: #fff; box-shadow: 0 2px 0 var(--brand-900); }
.pstage-node.cur .pstage-lbl { color: var(--brand-800); font-weight: 800; }
.pstage-node.cur .pstage-cnt { color: var(--brand-700, #1D4ED8); font-weight: 700; }
.pstage-line {
  flex: 1; height: 3px; border-radius: 2px; background: var(--line); margin-top: 14px; min-width: 16px;
  transition: background .2s;
}
.pstage-line.done { background: #16A34A; }
.pstage-hint { font-size: 12px; color: var(--ink-400); margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--line); }
.pstage-hint b { color: var(--ink-600); }

/* ---------- 标准资料夹：页头 + 视图切换 ---------- */
.fld-bar { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; margin-bottom: 4px; }
.fld-bar > div:first-child { flex: 1; min-width: 220px; }
.fld-sub { font-size: 12px; color: var(--ink-400); margin-top: 3px; }
.fld-sub b { color: var(--brand-700, #1D4ED8); }
.fld-switch { display: flex; gap: 8px; }
.fld-tip {
  font-size: 12px; color: var(--ink-600); background: var(--brand-50, #F3F7FE);
  border: 1px solid var(--brand-100, #DCE8FB); border-radius: 10px; padding: 9px 12px; margin: 12px 0 4px;
}
.fld-series { margin-bottom: 16px; }
.fld-series-t { font-size: 12px; font-weight: 800; color: var(--ink-400); margin: 10px 0 6px; }
.fld-note { font-size: 10px; color: var(--brand-600, #2563eb); margin-top: 2px; flex-basis: 100%; }

/* ---------- 标准产出件卡（独立页签已取消，随所属资料夹出现） ---------- */
.dlv-card {
  border: 1px solid var(--line, #e8edf5); border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; background: #fff;
}
.dlv-card-h { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.fld-embed .dlv-card { background: #FCFDFF; }

/* 从 4-1 / 4-2 资料夹进入「方案脚本的生成」时的聚焦提示 */
.gen-focus { border-left: 4px solid var(--brand-500, #3B82F6); }
.gen-zone { border-radius: 10px; padding: 4px 8px 8px; transition: background .3s, box-shadow .3s; }
.gen-zone.flash { background: #FFF7E6; box-shadow: 0 0 0 2px #FCD34D inset; }

/* ---------- 文档预览（公文纸） ---------- */
.word-page {
  background: #fff; border: 1px solid var(--line); border-radius: 4px;
  padding: 40px 48px; font-size: 14px; line-height: 1.9; color: #1a1a1a;
  max-height: 60vh; overflow: auto;
}
.word-page h1 { font-size: 20px; text-align: center; margin-bottom: 18px; }
.word-page h2 { font-size: 16px; margin: 16px 0 8px; }
.word-page h3 { font-size: 14px; margin: 12px 0 6px; }
.word-page table { border-collapse: collapse; width: 100%; margin: 10px 0; font-size: 13px; }
.word-page td, .word-page th { border: 1px solid #bbb; padding: 6px 10px; }
.word-page blockquote { color: #666; border-left: 3px solid var(--brand-100); padding-left: 12px; margin: 8px 0; }
/* 老板 2026-09-30：表头加粗居中；阶段 / 科目这类「通栏行」合并成一格后要看得出来是分隔带 */
.word-page thead th, .we-paper thead th { background: #EEF2F7; font-weight: 700; text-align: center; }
.word-page td.band, .we-paper td.band { background: #F7F9FC; font-weight: 700; text-align: center; }

/* ---------- 空状态 ---------- */
.empty { text-align: center; color: var(--ink-400); padding: 40px 0; font-size: 13px; }
.empty .ico { font-size: 34px; display: block; margin-bottom: 8px; opacity: .5; }

/* ---------- 项目列表 ---------- */
.proj-toolbar { display: flex; gap: 10px; align-items: center; margin-bottom: 16px; flex-wrap: wrap; }
.proj-toolbar input[type=text], .proj-toolbar select {
  padding: 8px 12px; border: 1px solid var(--line); border-radius: var(--radius-sm); font-size: 13px; outline: none; background: #fff;
}
.proj-toolbar input[type=text]:focus { border-color: var(--brand-500); box-shadow: 0 0 0 3px var(--brand-100); }

/* 政务稳重风：页标题加金色左栏 + 海军蓝，统一提升非驾驶舱页面的「大气感」 */
h1.page-title {
  font-size: 22px; font-weight: 800; margin: 2px 0 6px; padding-left: 13px;
  border-left: 4px solid var(--gold-500); line-height: 1.32; color: var(--brand-900);
  letter-spacing: .3px;
}
.page-sub { color: var(--ink-400); font-size: 13px; margin-bottom: 20px; }

/* 评估打分条 */
.score-row { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px dashed var(--line); }
.score-row .name { width: 90px; font-weight: 600; font-size: 13px; }
.score-row .desc { flex: 1; font-size: 12px; color: var(--ink-400); }
.score-row input[type=number] { width: 76px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 6px; font-size: 14px; text-align: center; }
.score-row input:focus { outline: none; border-color: var(--brand-500); }

/* 量化评估（A+B+C 八要素） */
.eval-note { font-size: 12px; color: var(--ink-400); background: #EEF2F8; border: 1px solid var(--line);
  border-radius: 8px; padding: 10px 12px; margin-bottom: 12px; line-height: 1.6; }
.score-block { padding: 10px 0; border-bottom: 1px dashed var(--line); }
.sb-head { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.sb-idx { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px;
  border-radius: 50%; background: var(--brand-500); color: #fff; font-size: 11px; font-weight: 700; }
.sb-desc { font-size: 12px; color: var(--ink-400); margin: 4px 0 8px 28px; line-height: 1.5; }
.sb-inputs { display: flex; flex-wrap: wrap; gap: 14px; margin-left: 28px; }
.sb-inputs label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--ink-400); }
.sb-inputs select, .sb-inputs input { padding: 6px 8px; border: 1px solid var(--line); border-radius: 6px;
  font-size: 13px; background: var(--bg); color: var(--ink-900); }
.sb-inputs input[type=number] { width: 70px; text-align: center; }
.sb-inputs input[type=text] { width: 150px; }
.sb-inputs select:focus, .sb-inputs input:focus { outline: none; border-color: var(--brand-500); }
.eval-summary { margin-top: 14px; }
.es-score { font-size: 14px; }
.es-score b { font-size: 20px; color: var(--brand-500); }
.es-bench { font-size: 12px; color: var(--ink-400); margin-top: 4px; }

/* ============================================================
   经营驾驶舱 · 深色玻璃域（沿用 v1 视觉：深蓝底 + 毛玻璃 + 渐变数字）
   仅在 .cockpit 容器内生效，其它页面保持浅色科技蓝
   ============================================================ */
.cockpit {
  --ck-bg:    #0B1733;
  --ck-card:  rgba(255, 255, 255, .055);
  --ck-border: rgba(148, 163, 184, .18);
  --ck-text:  #E6EEFB;
  --ck-text2: #9FB0CC;
  --ck-text3: #6B7C9B;
  background:
    radial-gradient(1200px 600px at 12% -10%, rgba(43,107,214,.28), transparent 60%),
    radial-gradient(900px 500px at 100% 0%, rgba(249,115,22,.14), transparent 55%),
    linear-gradient(160deg, #0A1530 0%, #0B1733 45%, #081026 100%);
  color: var(--ck-text);
  border-radius: 14px;
  padding: 22px;
  margin: -8px -8px 0;
}

.cockpit .stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 20px; }
.cockpit .stat-card {
  background: linear-gradient(135deg, rgba(255,255,255,.07), rgba(255,255,255,.025));
  border: 1px solid var(--ck-border); border-radius: 14px; padding: 18px;
  position: relative; overflow: hidden; transition: .25s;
}
.cockpit .stat-card:hover { transform: translateY(-2px); border-color: rgba(59,130,246,.45); box-shadow: 0 10px 28px rgba(0,0,0,.35); }
.cockpit .stat-card.clickable { cursor: pointer; }
.cockpit .stat-card.clickable:hover .stat-label { color: #93BBF8; }
.cockpit .stat-card::before {
  content: ''; position: absolute; top: 0; right: 0; width: 84px; height: 84px; border-radius: 50%;
  background: radial-gradient(circle, rgba(59,130,246,.20), transparent 70%); transform: translate(22%,-22%);
}
.cockpit .stat-card.s2::before { background: radial-gradient(circle, rgba(249,115,22,.20), transparent 70%); }
.cockpit .stat-card.s3::before { background: radial-gradient(circle, rgba(16,185,129,.20), transparent 70%); }
.cockpit .stat-card.s4::before { background: radial-gradient(circle, rgba(139,92,246,.20), transparent 70%); }
.cockpit .stat-head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 12px; }
.cockpit .stat-label { font-size: 12px; color: var(--ck-text2); font-weight: 500; }
.cockpit .stat-icon {
  width: 36px; height: 36px; border-radius: 10px; display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, rgba(59,130,246,.28), rgba(59,130,246,.06)); font-size: 16px;
}
.cockpit .stat-card.s2 .stat-icon { background: linear-gradient(135deg, rgba(249,115,22,.28), rgba(249,115,22,.06)); }
.cockpit .stat-card.s3 .stat-icon { background: linear-gradient(135deg, rgba(16,185,129,.28), rgba(16,185,129,.06)); }
.cockpit .stat-card.s4 .stat-icon { background: linear-gradient(135deg, rgba(139,92,246,.28), rgba(139,92,246,.06)); }
.cockpit .stat-value {
  font-size: 30px; font-weight: 800; letter-spacing: -.5px; margin-bottom: 4px; line-height: 1.15;
  background: linear-gradient(135deg, #F4D58A, var(--gold-500)); -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent;
}
.cockpit .stat-trend { font-size: 11px; color: #4ADE80; font-weight: 500; }

.cockpit .glass {
  background: linear-gradient(135deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border: 1px solid var(--ck-border); border-radius: 14px; backdrop-filter: blur(20px);
}
.cockpit .glass-head { padding: 15px 18px; border-bottom: 1px solid var(--ck-border); display: flex; align-items: center; justify-content: space-between; }
.cockpit .glass-title { font-size: 14px; font-weight: 600; }
.cockpit .glass-body { padding: 18px; }
.cockpit .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.cockpit .badge { font-size: 11px; padding: 2px 9px; border-radius: 20px; border: 1px solid transparent; }
.cockpit .badge-blue   { color: #7CB0FF; background: rgba(59,130,246,.15); border-color: rgba(59,130,246,.35); }
.cockpit .badge-green  { color: #4ADE80; background: rgba(16,185,129,.15); border-color: rgba(16,185,129,.35); }
.cockpit .badge-orange { color: #FDBA74; background: rgba(249,115,22,.15); border-color: rgba(249,115,22,.35); }

/* 趋势柱状图（数据点少时限制柱宽，避免拉伸成整块色块） */
.cockpit .chart-bars { display: flex; align-items: flex-end; justify-content: space-around; gap: 10px; height: 152px; }
.cockpit .chart-bars > div {
  flex: 1 1 0; max-width: 72px; min-height: 4px; border-radius: 6px 6px 0 0;
  background: linear-gradient(180deg, #60A5FA, #2563EB); transition: .3s;
  box-shadow: 0 0 18px rgba(59,130,246,.28);
}
.cockpit .chart-bars > div:hover { filter: brightness(1.18); }
.cockpit .chart-labels { display: flex; gap: 10px; margin-top: 8px; }
.cockpit .chart-labels span { flex: 1; text-align: center; font-size: 11px; color: var(--ck-text3); }

/* 环形健康度 */
.cockpit .ring-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.cockpit .ring-grid svg { display: block; }
.cockpit .ring-lbl { font-size: 12px; color: var(--ck-text2); }

/* 行业分布条 */
.cockpit .ind-row { display: flex; align-items: center; gap: 10px; margin: 7px 0; }
.cockpit .ind-row .nm { width: 84px; font-size: 12px; color: var(--ck-text2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cockpit .ind-row .bar { flex: 1; height: 10px; background: rgba(148,163,184,.16); border-radius: 5px; overflow: hidden; }
.cockpit .ind-row .bar > i { display: block; height: 100%; background: linear-gradient(90deg, #3B82F6, #22D3EE); border-radius: 5px; }
.cockpit .ind-row .vv { width: 34px; text-align: right; font-size: 12px; color: var(--ck-text2); }

/* ---------- 工作台（驾驶舱同款深色玻璃 · 老板 2026-09-30）---------- */
.cockpit .ck-tbl { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.cockpit .ck-tbl th {
  text-align: left; font-weight: 600; color: var(--ck-text3); font-size: 11px;
  padding: 6px 8px; border-bottom: 1px solid var(--ck-border); white-space: nowrap;
}
.cockpit .ck-tbl td { padding: 8px; color: var(--ck-text2); border-bottom: 1px solid rgba(148,163,184,.10); }
.cockpit .ck-tbl tr:last-child td { border-bottom: none; }
.cockpit .ck-tbl tbody tr:hover td, .cockpit .ck-tbl tr[onclick]:hover td { background: rgba(59,130,246,.10); color: var(--ck-text); }
.cockpit .ck-tbl .ck-tbl-link { color: #7CB0FF; font-weight: 500; }
.cockpit .ck-tbl td .badge { font-size: 10px; padding: 1px 7px; }

/* 操作日志 */
.cockpit .ck-log { max-height: 430px; overflow: auto; padding-right: 6px; }
.cockpit .ck-log::-webkit-scrollbar { width: 6px; }
.cockpit .ck-log::-webkit-scrollbar-thumb { background: rgba(148,163,184,.3); border-radius: 3px; }
.cockpit .ck-log-row { display: flex; align-items: flex-start; gap: 10px; padding: 7px 0; border-bottom: 1px dashed rgba(148,163,184,.12); }
.cockpit .ck-log-row:last-child { border-bottom: none; }
.cockpit .ck-log-user {
  flex: none; min-width: 52px; max-width: 60px; text-align: center; font-size: 11px; font-weight: 700;
  color: #7CB0FF; background: rgba(59,130,246,.14); border: 1px solid rgba(59,130,246,.3);
  border-radius: 6px; padding: 2px 4px; margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cockpit .ck-log-main { flex: 1; min-width: 0; font-size: 12.5px; color: var(--ck-text); line-height: 1.45; }
.cockpit .ck-log-main b { font-weight: 600; }
.cockpit .ck-log-main i { display: block; font-style: normal; font-size: 11px; color: var(--ck-text3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cockpit .ck-log-time { flex: none; font-size: 11px; color: var(--ck-text3); margin-top: 2px; }

/* 项目现阶段分布（横向条） */
.cockpit .ck-stage-row { display: flex; align-items: center; gap: 10px; margin: 8px 0; }
.cockpit .ck-stage-nm { flex: none; width: 108px; font-size: 12px; color: var(--ck-text2); white-space: nowrap; }
.cockpit .ck-stage-bar { flex: 1; height: 12px; background: rgba(148,163,184,.16); border-radius: 6px; overflow: hidden; }
.cockpit .ck-stage-bar > i { display: block; height: 100%; width: 0; border-radius: 6px;
  background: linear-gradient(90deg, #3B82F6, #22D3EE); transition: width .5s ease; }
.cockpit .ck-stage-vv { flex: none; width: 30px; text-align: right; font-size: 12px; color: var(--ck-text2); font-weight: 600; }

/* ---------- 全国省级地图（总部工作台 · 老板 2026-10-04）---------- */
.cockpit .map-wrap { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(300px, .95fr); gap: 18px; align-items: start; }
.cockpit .map-box { position: relative; max-width: 560px; margin: 0 auto; width: 100%; }
.cockpit .cn-map { width: 100%; height: auto; display: block; overflow: visible; }
.cockpit .cn-map path.prov {
  stroke: rgba(9, 19, 42, .9); stroke-width: .7; transition: filter .15s, stroke .15s;
}
.cockpit .cn-map path.prov.on { cursor: pointer; }
.cockpit .cn-map path.prov.on:hover { filter: brightness(1.45) saturate(1.2); stroke: #fff; stroke-width: 1.4; }
.cockpit .cn-map path.bnd { fill: none; stroke: rgba(226, 236, 255, .6); stroke-width: 1.6; stroke-linecap: round; }
.cockpit .cn-map text.plbl { font-size: 8.2px; font-weight: 700; pointer-events: none; text-anchor: middle; }
.cockpit .map-tip {
  position: absolute; z-index: 5; pointer-events: none; min-width: 168px; max-width: 250px;
  background: rgba(9, 19, 42, .96); border: 1px solid rgba(124, 176, 255, .45); border-radius: 10px;
  padding: 9px 11px; font-size: 12px; color: var(--ck-text); line-height: 1.6;
  box-shadow: 0 12px 30px rgba(0, 0, 0, .45); display: none;
}
.cockpit .map-tip b { font-size: 13px; }
.cockpit .map-tip .k { color: var(--ck-text3); }
.cockpit .map-tip .v { color: #7CB0FF; font-weight: 700; }
.cockpit .map-legend { max-height: 430px; overflow: auto; padding-right: 4px; }
.cockpit .map-legend::-webkit-scrollbar { width: 6px; }
.cockpit .map-legend::-webkit-scrollbar-thumb { background: rgba(148, 163, 184, .3); border-radius: 3px; }
.cockpit .map-lg-row {
  display: flex; align-items: center; gap: 9px; padding: 7px 8px; border-radius: 8px;
  border-bottom: 1px dashed rgba(148, 163, 184, .12); transition: .15s;
}
.cockpit .map-lg-row.last { border-bottom: none; }
.cockpit .map-lg-row:hover { background: rgba(59, 130, 246, .12); }
.cockpit .map-lg-row.on { cursor: pointer; }
.cockpit .map-lg-dot { flex: none; width: 11px; height: 11px; border-radius: 3px; border: 1px solid rgba(255, 255, 255, .35); }
.cockpit .map-lg-nm { flex: 1; min-width: 0; font-size: 12.5px; color: var(--ck-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cockpit .map-lg-nm em { font-style: normal; color: var(--ck-text3); font-size: 11px; }
.cockpit .map-lg-vv { flex: none; font-size: 12px; font-weight: 700; color: #7CB0FF; }
.cockpit .map-lg-vv small { font-weight: 400; color: var(--ck-text3); font-size: 10.5px; }
.cockpit .map-kpi { display: flex; gap: 20px; flex-wrap: wrap; margin-bottom: 14px; }
.cockpit .map-kpi > div { min-width: 96px; }
.cockpit .map-kpi .k { font-size: 11px; color: var(--ck-text3); }
.cockpit .map-kpi .v { font-size: 19px; font-weight: 800; letter-spacing: -.3px; color: #E6C25A; }
.cockpit .map-flag { display: inline-block; font-size: 10px; padding: 0 6px; border-radius: 20px;
  color: #FDBA74; background: rgba(249, 115, 22, .16); border: 1px solid rgba(249, 115, 22, .38); }

.cockpit .map-tbl { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 6px; }
.cockpit .map-tbl th {
  text-align: left; font-weight: 600; color: var(--ck-text3); font-size: 11px; padding: 5px 7px;
  border-bottom: 1px solid var(--ck-border); white-space: nowrap;
}
.cockpit .map-tbl td { padding: 6px 7px; color: var(--ck-text2); border-bottom: 1px solid rgba(148,163,184,.1); white-space: nowrap; }
.cockpit .map-tbl tbody tr:hover td { background: rgba(59,130,246,.1); color: var(--ck-text); }
.cockpit .map-tbl tr.on { cursor: pointer; }
.cockpit .map-tbl .num { text-align: right; font-variant-numeric: tabular-nums; }
.cockpit .map-tbl .nm { color: var(--ck-text); font-weight: 600; }
.cockpit .map-tbl .dot { display: inline-block; width: 9px; height: 9px; border-radius: 2px; margin-right: 6px; vertical-align: middle; }

@media (max-width: 1180px) {
  .cockpit .map-wrap { grid-template-columns: 1fr; }
  .cockpit .map-legend { max-height: none; }
}

@media (max-width: 980px) {
  .cockpit .stat-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; }
  .cockpit .grid-2 { grid-template-columns: 1fr; }
}

/* ============================================================
   Word 风格所见即所得编辑器（.we）
   ============================================================ */
.modal.we { background: #EEF1F6; }
.modal.we .modal-head { display: none; }

.we-ribbon {
  flex: 0 0 auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 8px 14px; background: #fff; border-bottom: 1px solid var(--line);
  box-shadow: 0 1px 4px rgba(23,35,61,.06);
}
.we-group { display: flex; align-items: center; gap: 4px; }
.we-sep { width: 1px; height: 22px; background: var(--line); margin: 0 4px; }
.we-spacer { flex: 1; }
.we-b {
  min-width: 30px; height: 30px; padding: 0 8px; border-radius: 6px;
  background: #fff; border: 1px solid var(--line); color: var(--ink-600);
  font-size: 13px; cursor: pointer; line-height: 1;
  box-shadow: 0 1px 0 #DDE4F0;
  transition: background .15s, color .15s, border-color .15s, box-shadow .08s, transform .08s;
}
.we-b:hover { background: var(--brand-50); border-color: var(--brand-400); color: var(--brand-800); box-shadow: 0 1px 0 #BBD2F5; }
.we-b:active { transform: translateY(1px); box-shadow: 0 0 0 #BBD2F5; }
.we-sel {
  height: 30px; padding: 0 6px; border: 1px solid var(--line); border-radius: 6px;
  background: #fff; font-size: 12px; color: var(--ink-600); cursor: pointer;
}
.we-count { font-size: 12px; color: var(--ink-400); margin-right: 8px; }
.we-ribbon .ico {
  cursor: pointer; color: var(--ink-600); font-size: 15px; padding: 5px 7px; border-radius: 6px;
  background: #fff; border: 1px solid var(--line); box-shadow: 0 1px 0 #DDE4F0;
  transition: background .15s, color .15s, border-color .15s, box-shadow .08s, transform .08s;
}
.we-ribbon .ico:hover { background: var(--brand-50); color: var(--brand-800); border-color: var(--brand-400); box-shadow: 0 1px 0 #BBD2F5; }
.we-ribbon .ico:active { transform: translateY(1px); box-shadow: 0 0 0 #BBD2F5; }

/* 画布 + A4 纸张（多页分页：内容自动切到一张张 A4 纸，像 Word 分页预览） */
.we-canvas { flex: 1 1 auto; overflow: auto; padding: 24px 20px 60px; display: flex; flex-direction: column; align-items: center; }
.we-doc { outline: none; width: 100%; display: flex; flex-direction: column; align-items: center; }
.we-paper {
  width: 210mm; max-width: 100%; min-height: 297mm; background: #fff; color: #1a1a1a;
  padding: 28mm 26mm; box-shadow: 0 2px 14px rgba(23,35,61,.16); border-radius: 2px;
  font-family: "仿宋", "FangSong", "仿宋_GB2312", "宋体", serif; font-size: 16pt; line-height: 1.75;
  outline: none; box-sizing: border-box;
}
.we-pagegap {
  width: 210mm; max-width: 100%; margin: 14px auto 10px; text-align: center;
  color: #9aa4b5; font-size: 12px; user-select: none; font-family: var(--font);
}
.we-paper.we-measure { position: absolute; left: -99999px; top: 0; visibility: hidden; min-height: 0; box-shadow: none; }
.we-paper:focus { box-shadow: 0 2px 14px rgba(43,107,214,.28); }
/* A4 横向纸张（老板 2026-09-30：脚本类预览/编辑也要横版 A4，与导出 Word 一致） */
.we-paper.we-land { width: 297mm; min-height: 210mm; padding: 18mm 20mm; }
.we-doc.we-land .we-pagegap { width: 297mm; }
.we-paper h1 { font-family: "黑体", "SimHei", sans-serif; font-size: 22pt; text-align: center; margin: 0 0 22px; font-weight: 700; }
.we-paper h2 { font-family: "黑体", "SimHei", sans-serif; font-size: 18pt; margin: 20px 0 10px; font-weight: 700; }
.we-paper h3 { font-family: "楷体", "KaiTi", serif; font-size: 16pt; margin: 14px 0 8px; font-weight: 700; }
.we-paper p { margin: 0 0 8px; text-indent: 2em; }
.we-paper li { margin: 0 0 6px; margin-left: 2em; }
.we-paper blockquote { color: #666; border-left: 3px solid var(--brand-100); padding-left: 12px; margin: 10px 0; font-size: 12pt; }
.we-paper table { border-collapse: collapse; width: 100%; margin: 12px 0; font-size: 11pt; font-family: var(--font); }
.we-paper td, .we-paper th { border: 1px solid #999; padding: 6px 9px; vertical-align: top; }
.we-paper td:empty::before { content: " "; }
.we-paper img { max-width: 100%; }

/* ── 知识库在线预览（老板 2026-09-30）：Word 就按 Word 版面看，Excel 就按表格看 ── */
.kbv-wrap { background: #EEF1F6; padding: 18px; border-radius: 10px; }
.kbv-meta { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; font-size: 12px;
  color: var(--ink-500); margin-bottom: 10px; }
.kbv-meta .tag { background: #fff; border: 1px solid var(--line); border-radius: 6px; padding: 2px 8px; }
/* Word 版面：白纸 + 宋体 + 页码感 */
.kbv-page {
  background: #fff; color: #111; max-width: 860px; margin: 0 auto; padding: 54px 62px;
  box-shadow: 0 2px 14px rgba(23, 35, 61, .14); border-radius: 2px;
  font-family: "宋体", SimSun, "Times New Roman", serif; font-size: 16px; line-height: 1.9;
}
.kbv-page p { margin: 0 0 6px; }
.kbv-page .h1 { font-family: "黑体", SimHei, sans-serif; font-size: 22px; font-weight: 700; }
.kbv-page .h2 { font-family: "黑体", SimHei, sans-serif; font-size: 18px; font-weight: 700; margin-top: 14px; }
.kbv-page .h3 { font-family: "楷体", KaiTi, serif; font-size: 16px; font-weight: 700; margin-top: 10px; }
.kbv-page table { border-collapse: collapse; width: 100%; margin: 12px 0; font-size: 13px;
  font-family: var(--font); }
.kbv-page td, .kbv-page th { border: 1px solid #9AA4B5; padding: 5px 8px; vertical-align: top; }
.kbv-page td:empty::before { content: " "; }
/* Excel 版面：工作表页签 + 行号列标 + 网格线 */
.kbv-sheets { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.kbv-sheets button {
  border: 1px solid var(--line); background: #fff; color: var(--ink-600);
  border-radius: 6px 6px 0 0; padding: 5px 12px; font-size: 12px; cursor: pointer;
  box-shadow: 0 2px 0 var(--line);
}
.kbv-sheets button.on { background: var(--brand-500, #2563EB); color: #fff; border-color: var(--brand-600, #1D4ED8); }
.kbv-grid { background: #fff; border: 1px solid #C8D0DC; overflow: auto; max-height: 56vh; }
.kbv-grid table { border-collapse: collapse; font-size: 12px; font-family: var(--font); }
.kbv-grid th {
  background: #F3F6FB; border: 1px solid #D6DEE9; padding: 3px 7px; font-weight: 600;
  color: var(--ink-600); position: sticky; top: 0; z-index: 2; white-space: nowrap;
}
.kbv-grid th.rowh { left: 0; z-index: 3; }
/* 老板 09-30：资料预览表也照 Excel 换行显示，不再 nowrap 截掉长文 */
.kbv-grid td { border: 1px solid #E1E7F0; padding: 3px 7px; color: #1F2937;
  white-space: normal; word-break: break-word; overflow-wrap: anywhere; vertical-align: top; }
.kbv-grid tr:nth-child(even) td { background: #FAFCFF; }
.kbv-note { font-size: 12px; color: #92400E; background: #FFFBEB; border: 1px solid #FDE68A;
  border-radius: 8px; padding: 6px 10px; margin-top: 8px; }
/* 导入进度条 */
.kbup-bar { height: 8px; background: #E5EAF3; border-radius: 4px; overflow: hidden; margin-top: 8px; }
.kbup-bar i { display: block; height: 100%; background: var(--brand-500, #2563EB); width: 0; transition: width .2s; }
.kbup-log { max-height: 180px; overflow: auto; font-size: 12px; margin-top: 8px;
  border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; background: #FAFBFE; }
.kbup-log div { padding: 1px 0; }
.kbup-log .bad { color: #B91C1C; }
.kbup-log .good { color: #15803D; }

/* ── 知识库首屏骨架（老板 2026-09-29：点进来要立刻有界面，别白屏对着"加载中"） ── */
.kb-skel { display: flex; flex-wrap: wrap; gap: 8px; }
.kb-skel i { display: block; width: 116px; height: 26px; border-radius: 13px;
  background: linear-gradient(90deg, #E9EEF6 25%, #F7FAFF 37%, #E9EEF6 63%);
  background-size: 400% 100%; animation: kbSkel 1.1s ease-in-out infinite; }
.kb-skel i:nth-child(4n) { width: 92px; }
.kb-skel i:nth-child(5n) { width: 140px; }
@keyframes kbSkel { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

@media print {
  .we-ribbon, .topbar, .sidebar { display: none !important; }
  .we-canvas { padding: 0; overflow: visible; display: block; }
  .we-pagegap, .we-paper.we-measure { display: none !important; }
  .we-paper { box-shadow: none; width: auto; min-height: auto; padding: 0; page-break-after: always; }
}

/* ════════════════════════════════════════════════════════════════
   预案修编中心（独立模块 · 方案 B）
   ════════════════════════════════════════════════════════════════ */
.pr-alert {
  background: #FFF7E6; border: 1px solid #F2C77B; color: #8A5A00;
  border-radius: var(--radius-sm); padding: 10px 14px; margin: 12px 0;
  font-size: 13px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.pr-zone { font-size: 15px; margin: 22px 0 10px; padding-left: 12px; border-left: 4px solid var(--brand-500); }
.pr-zone.free { border-color: var(--brand-500); color: var(--brand-800); }
.pr-zone.paid { border-color: var(--orange); color: #B45309; }
.pr-zone.sm { font-size: 13px; margin: 10px 0 6px; display: inline-block; background: #FFF4E8;
  padding: 4px 10px; border-radius: 20px; border-left: none; }
.pr-card { padding: 12px 14px; }
.pr-meta { display: flex; flex-wrap: wrap; gap: 8px 22px; font-size: 13px; color: var(--ink-600); margin: 8px 0; }
.pr-meta > div { min-width: 120px; }
.pr-divider { margin: 16px 0 8px; padding-bottom: 6px; border-bottom: 1px dashed var(--line); color: var(--ink-900); font-size: 14px; }
.pr-disclaimer { margin-top: 10px; font-size: 12px; color: #B45309; background: #FFF7ED;
  border: 1px solid #FED7AA; border-radius: var(--radius-sm); padding: 8px 12px; }
.pr-ok { margin: 6px 0 6px 18px; color: var(--ok); font-size: 13px; line-height: 1.9; }
.pr-nogo { margin: 8px 0; color: var(--danger); font-size: 13px; background: #FEF2F2;
  border: 1px solid #FECACA; border-radius: var(--radius-sm); padding: 8px 12px; }
.pr-form-row { display: flex; gap: 14px; flex-wrap: wrap; }
.pr-form-row .field { flex: 1; min-width: 180px; }


/* ── 项目推进看板（全局项目总览）── */
.act-wrap { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 8px; }
.act-chip { display: inline-flex; align-items: center; gap: 3px; font-size: 11.5px; line-height: 1.5;
  padding: 2px 8px; border-radius: 20px; cursor: pointer; user-select: none; border: 1px solid transparent;
  transition: all .12s ease; white-space: nowrap; }
.act-chip.on { background: #ECFDF3; color: #15803D; border-color: #BBF7D0; }
.act-chip.off { background: #F1F5F9; color: #64748B; border-color: #E2E8F0; }
.act-chip.off:hover { background: #E2E8F0; }
/* V4.0 质量门禁：被阻断的「正式演练」未完态显示红框 🔒，不可点 */
.act-chip.locked { background: #FEF2F2; color: #DC2626; border-color: #FCA5A5; cursor: not-allowed; }
.act-check { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; line-height: 1.5;
  padding: 4px 10px; border-radius: 8px; cursor: pointer; user-select: none; border: 1px solid transparent; }
.act-check.on { background: #ECFDF3; color: #15803D; border-color: #BBF7D0; }
.act-check.off { background: #F8FAFC; color: #475569; border-color: #E2E8F0; }
.act-check input { accent-color: #16a34a; }
/* 自动/人工来源徽标（⚡自动点亮 / ✋人工覆盖）与环节小标：补全 chip 内细节，让「自动变绿」一目了然 */
.act-chip .src { font-size: 10px; line-height: 1; margin-left: 1px; filter: saturate(1.1); }
.act-chip .act-stage { font-size: 10px; opacity: .62; margin-left: 3px; font-weight: 500; }
.act-chip.on.manual { background: #FEF9E7; color: #92600A; border-color: #F5D98B; }
.act-chip.on.manual .src { color: #B7791F; }
.act-chip .mark { font-weight: 800; }
