/* ==========================================================================
   迪粉社区 DiFansClub · Design System v3 ——「工业档案室 / Industrial Archive」
   --------------------------------------------------------------------------
   方向（Direction Lock）：档案柜的秩序感。
     · 层次靠「线」与「底色明暗」，不靠投影 —— 阴影系数由 1 降到近 0
     · 圆角 0–2px（硬边），结构线一律 1px 实线
     · 档案编号系统（01–07）用等宽字体承载，是全站识别符号
     · 竖向标签条（writing-mode）作为分节标题
     · 非对称网格（7:5 / 跨行跨列），拒绝 3 等分卡片阵
   作用范围：前台（A1–A9）+ 后台控制台（A10，覆盖 app.css 的 v2 后台视觉）。
   加载顺序：app.css → archive.css（本文件负责覆盖 token、新增结构、重绘后台）
   ========================================================================== */

/* ==========================================================================
   A1. 前台 Design Tokens（覆盖 app.css 的 :root）
   ========================================================================== */
:root {
  /* —— 字体 —— */
  --font-display: "IBM Plex Sans", "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  --font-body: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
  --font-mono: "IBM Plex Mono", "JetBrains Mono", Consolas, "Courier New", monospace;
  /* 覆盖 app.css 的 .mono / 各处硬编码 Consolas */
  --mono: var(--font-mono);

  /* —— 墨蓝调中性色（浅色主题） —— */
  --ink: #101828;        /* 15.2:1 on paper —— 主文字 */
  --ink-2: #475467;      /* 7.4:1 —— 次文字 */
  --ink-3: #7a869a;      /* 4.6:1 —— 弱文字，满足 AA */
  --ink-4: #9aa4b2;      /* 仅用于装饰性图形，不承载文本 */

  --paper: #fdfdfc;      /* 页面底色（微暖灰，非纯白） */
  --paper-2: #f5f5f2;    /* 次级面 */
  --paper-3: #ecece8;    /* 三级面（表头等） */

  --rule: #e0e3e7;       /* 结构线 */
  --rule-2: #c9cfd6;     /* 强调线 */
  --rule-3: #aab2bd;     /* 重线 */

  /* —— 品牌 / 语义 —— */
  --blue: #1d4ed8;
  --blue-ink: #1e3a8a;
  --blue-wash: #eef2ff;
  --amber: #b45309;
  --amber-wash: #fdf4e7;
  --green: #157f3d;
  --green-wash: #e9f7ee;
  --red: #b91c1c;
  --red-wash: #fdecec;

  /* —— 覆盖 app.css 的兼容变量名（前台全部指向新 token） —— */
  --acc: var(--blue);
  --acc-h: #2563eb;
  --acc-2: #6d28d9;
  --text: var(--ink);
  --dim: var(--ink-2);
  --faint: var(--ink-3);
  --bg: var(--paper);
  --panel: #ffffff;
  --panel-2: var(--paper);
  --panel-3: var(--paper-2);
  --line: var(--rule);
  --line-2: var(--rule-2);
  --border: var(--rule);
  --ok: var(--green);
  --warn: var(--amber);
  --err: var(--red);
  --success: var(--green);
  --warning: var(--amber);
  --danger: var(--red);
  --accent: var(--blue);
  --text-dim: var(--ink-2);

  /* —— 干掉渐变（anti-AI-slop：禁止白/紫渐变） —— */
  --grad: var(--blue);
  --grad-deep: var(--blue-ink);

  /* —— 硬边几何 —— */
  --radius-sm: 0px;
  --radius: 2px;
  --radius-lg: 2px;
  --radius-xl: 2px;

  /* —— 阴影：前台近乎取消，只保留 1px 位移线 —— */
  --shadow: none;
  --shadow-md: 0 1px 0 var(--rule);
  --shadow-lg: 0 12px 40px rgba(16, 24, 40, .18);

  /* —— 栅格节奏 —— */
  --gutter: 18px;
  --rail: 76px;          /* 左侧档案编号栏宽度 */
  --measure: 1360px;     /* 内容最大宽度（比原 1180 更宽，档案感更足） */
}

/* —— 深色主题（墨黑档案柜） —— */
[data-theme="dark"] {
  --ink: #edf0f4;
  --ink-2: #b3bcc9;
  --ink-3: #8b95a5;
  --ink-4: #5b6675;

  --paper: #0d1014;
  --paper-2: #14181d;
  --paper-3: #1b2026;

  --rule: #262d35;
  --rule-2: #37404a;
  --rule-3: #4b5563;

  --blue: #6f9bff;
  --blue-ink: #a8c2ff;
  --blue-wash: #141c2e;
  --amber: #e0a458;
  --amber-wash: #241b0e;
  --green: #5fc98a;
  --green-wash: #0f2117;
  --red: #f08080;
  --red-wash: #2a1212;

  --panel: #14181d;
  --panel-2: #0d1014;
  --panel-3: #1b2026;
  --bg: #0d1014;

  --acc: var(--blue);
  --acc-h: #8fb3ff;
  --accent: var(--blue);
  --text: var(--ink);
  --dim: var(--ink-2);
  --faint: var(--ink-3);
  --line: var(--rule);
  --line-2: var(--rule-2);
  --border: var(--rule);
  --ok: var(--green);
  --warn: var(--amber);
  --err: var(--red);
  --success: var(--green);
  --warning: var(--amber);
  --danger: var(--red);
  --grad: var(--blue);
  --grad-deep: var(--blue-ink);
  --shadow-md: 0 1px 0 var(--rule);
}

/* ==========================================================================
   A2. Base 覆盖（前台字体 / 底色 / 背景纹理）
   ========================================================================== */
body {
  font-family: var(--font-body);
  font-size: 13.5px;
  background: var(--paper);
  color: var(--ink);
  /* 档案纸的细网格底面（极低对比，仅提供质感） */
  background-image:
    linear-gradient(to right, var(--rule) 1px, transparent 1px),
    linear-gradient(to bottom, var(--rule) 1px, transparent 1px);
  background-size: 96px 96px;
  background-position: -1px -1px;
}
[data-theme="dark"] body {
  background-image:
    linear-gradient(to right, rgba(255,255,255,.022) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(255,255,255,.022) 1px, transparent 1px);
}
/* 后台模式：取消纹理，保持 app.css 的后台视觉 */
body.admin-mode { background-image: none !important; }

h1, h2, h3, h4, .display {
  font-family: var(--font-display);
  letter-spacing: -0.015em;
}

/* 跳过导航 */
.skip-link {
  position: absolute; left: -9999px; top: 0; z-index: 999;
  background: var(--blue); color: #fff; padding: 10px 16px;
  font-family: var(--font-mono); font-size: 12px; letter-spacing: .06em;
}
.skip-link:focus { left: 0; }

/* 覆盖 app.css 的 .mono 与所有硬编码 Consolas */
.mono,
.arch-num, .arch-tag, .ribbon-val, .ribbon-key,
.folder-row .sub, .folder-head,
.crumb-text, .version-badge, .ts {
  font-family: var(--font-mono);
}

/* ==========================================================================
   A3. 报头 Masthead（替代原顶栏）—— 绝对定位浮层，不占文档流
   ========================================================================== */
#masthead {
  position: absolute; top: 0; left: 0; right: 0; z-index: 80;
  display: flex; align-items: flex-start; justify-content: space-between;
  padding: 20px 28px 0;
  pointer-events: none;   /* 容器穿透，仅子元素可点 */
}
#masthead > * { pointer-events: auto; }

/* —— 品牌铭牌 —— */
.masthead-brand {
  display: inline-flex; align-items: center; gap: 11px;
  padding: 7px 14px 7px 7px;
  background: var(--panel);
  border: 1px solid var(--rule-2);
  transition: border-color .15s;
}
.masthead-brand:hover { border-color: var(--blue); }
/* 未配置 Logo 时方块被隐藏：同步收掉 flex gap 与左侧为图标预留的内边距，
   避免铭牌左侧留出一段空白（比原来更紧凑、居中对齐）。 */
.masthead-brand:not(:has(.brand-mark:not(.hidden))) {
  gap: 0;
  padding-left: 12px;
}
.brand-mark {
  width: 30px; height: 30px; flex: 0 0 30px;
  /* 文字型标识（如 "BYD"）用深蓝底 + 白字衬托 */
  background: var(--blue-ink); color: #fff;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600; letter-spacing: .02em;
  overflow: hidden;
}
/* 图片型标识：去掉深蓝底，让图片本身作为图标（避免图片周围露出蓝框） */
.brand-mark:has(img) {
  background: transparent;
}
.brand-mark img { width: 100%; height: 100%; object-fit: contain; }
.brand-text { display: flex; flex-direction: column; line-height: 1.15; }
.brand-name {
  font-family: var(--font-display); font-size: 14px; font-weight: 700;
  color: var(--ink); letter-spacing: -0.01em;
}
.brand-sub {
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 500;
  color: var(--ink-3); letter-spacing: .14em; text-transform: uppercase;
}

/* —— 极简导航 —— */
.masthead-nav { display: flex; align-items: center; gap: 0; }
.nav-panel {
  display: flex; align-items: center;
  background: var(--panel);
  border: 1px solid var(--rule-2);
}
.nav-panel > a {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 10px 15px; font-size: 12.5px; font-weight: 500;
  color: var(--ink-2); border-right: 1px solid var(--rule);
  transition: color .13s, background .13s;
  position: relative;
}
.nav-panel > a:last-child { border-right: 0; }
.nav-panel > a:hover { color: var(--blue); background: var(--blue-wash); }
/* 当前页：底部 2px 实线标记（档案索引签） */
.nav-panel > a.active { color: var(--ink); font-weight: 600; background: var(--paper-2); }
.nav-panel > a.active::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px;
  height: 2px; background: var(--blue);
}
.nav-sep { width: 1px; height: 16px; background: var(--rule-2); }
.nav-user { padding-right: 14px !important; }
.nav-user-dot {
  width: 6px; height: 6px; flex: 0 0 6px;
  border: 1px solid var(--rule-3); border-radius: 50%;
  background: transparent;
}
.nav-user.is-in .nav-user-dot { background: var(--green); border-color: var(--green); }
.nav-user-text { max-width: 90px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* —— 状态条（SYNC · 时间） —— */
#statusRibbon {
  position: absolute; top: 68px; left: 28px; z-index: 79;
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .06em;
  color: var(--ink-3); pointer-events: none;
}
.ribbon-key {
  color: var(--blue); font-weight: 600;
  border: 1px solid var(--rule-2); padding: 1px 5px;
}
.ribbon-val { color: var(--ink-3); }
body.admin-mode #statusRibbon { display: none; }
/* 后台模式下隐藏前台报头（后台自带 admin-v2 侧栏与顶条） */
body.admin-mode #masthead { display: none; }

/* —— 汉堡按钮（窄屏） —— */
.nav-toggle {
  display: none;
  width: 42px; height: 42px;
  flex-direction: column; align-items: center; justify-content: center; gap: 5px;
  background: var(--panel); border: 1px solid var(--rule-2);
}
.nav-toggle-bar {
  display: block; width: 16px; height: 1.5px; background: var(--ink);
  transition: transform .18s, opacity .18s;
}
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:first-child { transform: translateY(3.25px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] .nav-toggle-bar:last-child { transform: translateY(-3.25px) rotate(-45deg); }

/* ==========================================================================
   A4. 主区（前台）—— 顶部留白给报头，左右罗列档案栏
   ========================================================================== */
#app {
  max-width: var(--measure);
  margin: 0 auto;
  padding: 92px 28px 72px;
  width: 100%; flex: 1;
}
body.admin-mode #app { padding: 0 !important; max-width: none !important; }

footer {
  background: var(--panel);
  border-top: 1px solid var(--rule-2);
  color: var(--ink-3); font-size: 11.5px;
  padding: 20px 28px;
  font-family: var(--font-mono); letter-spacing: .02em;
}
footer a { color: var(--ink-2); }
footer a:hover { color: var(--blue); }
.foot-sep { color: var(--rule-3); margin: 0 2px; }

/* 公告条：改为档案「通知卡」形态，非渐变条 */
#noticeBar {
  background: var(--amber-wash);
  border-bottom: 1px solid var(--amber);
  color: var(--ink);
  box-shadow: none;
  position: relative;
}
.notice-inner {
  max-width: var(--measure);
  color: var(--ink);
  font-size: 12.5px;
}
.notice-tag {
  background: var(--amber); color: #fff;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .1em; border-radius: 0; padding: 2px 8px;
}
.notice-inner .btn {
  background: var(--panel); color: var(--ink);
  border: 1px solid var(--rule-2); border-radius: 0;
  font-size: 11.5px;
}

/* ==========================================================================
   A5. 组件：覆盖 app.css 的圆角/渐变/阴影 → 硬边线框
   ========================================================================== */
.btn {
  border-radius: 0;
  border: 1px solid var(--rule-2);
  background: var(--panel);
  font-family: var(--font-body);
  font-size: 12.5px; font-weight: 500;
  padding: 8px 16px;
  transition: border-color .13s, background .13s, color .13s;
}
.btn:hover {
  border-color: var(--blue);
  color: var(--blue);
  background: var(--blue-wash);
  box-shadow: none;
  filter: none;
}
.btn:active { transform: none; }
.btn.primary {
  background: var(--blue); color: #fff; border-color: var(--blue);
  box-shadow: none;
}
.btn.primary:hover { background: var(--blue-ink); border-color: var(--blue-ink); color: #fff; }
.btn.danger {
  background: var(--red); border-color: var(--red); color: #fff;
  box-shadow: none;
}
.btn.danger:hover { background: #991b1b; border-color: #991b1b; color: #fff; }
.btn.ghost { background: transparent; border-color: transparent; color: var(--blue); }
.btn.ghost:hover { background: var(--blue-wash); border-color: transparent; }
.btn.sm { padding: 5px 12px; font-size: 11.5px; }

/* 卡片 → 档案抽斗（硬边 + 无投影） */
.card {
  border-radius: 0;
  border: 1px solid var(--rule-2);
  box-shadow: none;
  background: var(--panel);
}
.card-hover:hover { transform: none; border-color: var(--rule-3); box-shadow: none; }

/* 徽标 / 标签 */
.badge {
  border-radius: 0; font-family: var(--font-mono);
  font-size: 10px; letter-spacing: .04em;
  border: 1px solid var(--rule-2); background: var(--paper-2); color: var(--ink-2);
  padding: 2px 7px;
}
.badge.warn { background: var(--amber-wash); color: var(--amber); border-color: var(--amber); }
.tag { border-radius: 0; font-size: 11px; }
.tag::before { border-radius: 0; }
.pill {
  border-radius: 0; border: 1px solid var(--rule-2); background: var(--panel);
  font-family: var(--font-mono); font-size: 11px; letter-spacing: .03em;
}

/* 弹窗：硬边 + 顶部 3px 蓝线 */
.modal-mask { background: rgba(16, 24, 40, .55); backdrop-filter: none; }
.modal {
  border-radius: 0;
  border: 1px solid var(--rule-3);
  border-top: 3px solid var(--blue);
  box-shadow: var(--shadow-lg);
  padding: 24px 26px;
}
.modal h3 { font-family: var(--font-display); letter-spacing: -0.01em; }
.modal-close { color: var(--ink-3); border-radius: 0; font-size: 20px; }
.modal-close:hover { color: var(--ink); }
.modal-row .btn { border-radius: 0; }

/* 表单 */
.form-row label {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 500;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
  margin-bottom: 7px;
}
.form-row input, .form-row select,
.form-input, .search-input {
  border-radius: 0; border: 1px solid var(--rule-2);
  background: var(--panel); box-shadow: none;
  font-family: var(--font-body); font-size: 13.5px;
  padding: 10px 12px;
}
.form-row input:focus, .form-row select:focus,
.form-input:focus, .search-input:focus {
  border-color: var(--blue);
  box-shadow: 0 0 0 1px var(--blue);
  outline: none;
}

/* 分段选择器 / Tabs */
.tabs, .admin-tabs {
  border-radius: 0; border: 1px solid var(--rule-2); background: var(--paper-2); padding: 2px;
  gap: 2px;
}
.tabs button, .admin-tabs button { border-radius: 0; font-size: 12.5px; font-weight: 500; }
.tabs button.active, .admin-tabs button.active {
  background: var(--panel); color: var(--blue); font-weight: 600;
  box-shadow: inset 0 -2px 0 var(--blue);
}

/* 侧栏导航（个人中心） */
.side-nav {
  border-radius: 0; border: 1px solid var(--rule-2); box-shadow: none; padding: 0;
  background: var(--panel);
}
.side-nav button {
  border-radius: 0; font-size: 12.5px; font-weight: 500;
  border-bottom: 1px solid var(--rule);
  padding: 12px 16px;
}
.side-nav button:last-child { border-bottom: 0; }
.side-nav button:hover { background: var(--blue-wash); color: var(--blue); }
.side-nav button.active {
  background: var(--blue-wash); color: var(--blue-ink); font-weight: 600;
  box-shadow: inset 2px 0 0 var(--blue);
}
.section {
  border-radius: 0; border: 1px solid var(--rule-2); box-shadow: none;
  padding: 22px 26px;
}
.section h3 {
  font-family: var(--font-display); font-size: 15px; letter-spacing: -0.01em;
  padding-bottom: 12px; border-bottom: 1px solid var(--rule); margin: 0 0 18px;
}
.kv { font-size: 13px; }
.kv dt {
  font-family: var(--font-mono); font-size: 10.5px;
  letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3);
}

/* 文件列表（硬边表格感） */
.folder-head {
  background: var(--paper-2);
  border-bottom: 1px solid var(--rule-2);
  font-family: var(--font-mono); font-size: 10.5px;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
  padding: 11px 16px;
}
.folder-row {
  border-top: 1px solid var(--rule);
  font-size: 13px; padding: 12px 16px;
}
.folder-row:hover { background: var(--blue-wash); }
.folder-row .name { font-weight: 500; }
.folder-row .sub { color: var(--ink-3); font-size: 11.5px; }
.row-icon.folder { color: var(--amber); }
.row-icon.file { color: var(--ink-4); }

/* 操作列：两个按钮必须同排且不换行。
   原「操作」列固定 90px，放不下「下载 + 复制直链」（含图标与内边距约需 150px），
   flex 挤压后按钮内文字会逐字折行（下/载、复/制/直/链）。改为按内容自适应列宽。 */
.folder-head, .folder-row {
  grid-template-columns: minmax(0, 1fr) 128px 100px max-content;
}
.folder-head > :last-child, .folder-row > :last-child { justify-self: end; }
.row-actions { flex-wrap: nowrap; gap: 6px; }
.row-actions .btn {
  white-space: nowrap;    /* 禁止按钮内文字折行 */
  flex: 0 0 auto;         /* 拒绝被压缩 */
  padding: 5px 9px;
}
.row-actions .btn svg { flex: 0 0 auto; }

/* 窄屏：时间/大小列已隐藏（见 app.css 720px 断点），操作列改用内容宽度，
   避免仍被固定 90px 挤压导致按钮折行。 */
@media (max-width: 900px) {
  .folder-head, .folder-row { grid-template-columns: minmax(0, 1fr) max-content; }
}
@media (max-width: 640px) {
  /* 极窄屏：按钮只留图标，省出空间给文件名 */
  .folder-row .row-actions .btn .btn-text { display: none; }
  .folder-row .row-actions .btn { padding: 5px 8px; }
}

/* 空状态 */
.empty-state { color: var(--ink-3); font-size: 13px; }
.empty-state .empty-icon { color: var(--rule-3); font-size: 30px; }
.empty-title {
  font-family: var(--font-display); font-size: 17px; font-weight: 700;
  color: var(--ink); letter-spacing: -0.01em;
}
/* 空态操作区：两按钮必须等大 —— 主按钮带图标 + 次按钮纯文字，
   各自按内容撑宽会差出近 20px（实测 102.5 vs 84），视觉一大一小。 */
.empty-actions { align-items: center; }
.empty-actions .btn {
  min-width: 118px; min-height: 38px;
  justify-content: center; padding: 8px 18px;
}

/* 表单卡片（登录等） */
.form-card {
  border-radius: 0; border: 1px solid var(--rule-2);
  box-shadow: none; border-top: 3px solid var(--blue);
}

/* Toast */
.toast {
  border-radius: 0;
  border: 1px solid var(--rule-3);
  font-family: var(--font-mono); font-size: 12px; letter-spacing: .02em;
  background: var(--ink); color: var(--paper);
  box-shadow: var(--shadow-lg);
  top: 84px;
}

/* 骨架屏 / spinner */
.skeleton { border-radius: 0; }
.spinner { border-radius: 50%; }

/* ==========================================================================
   A6. 档案编号与竖向标签（本设计的识别符号）
   ========================================================================== */
.arch-num {
  font-family: var(--font-mono); font-size: 11px; font-weight: 600;
  letter-spacing: .08em; color: var(--blue);
  display: inline-block;
}
.arch-tag {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 500;
  letter-spacing: .14em; text-transform: uppercase;
  color: var(--ink-3);
  padding: 3px 8px; border: 1px solid var(--rule);
}
/* 竖向分节标题（档案柜抽屉标签） */
.arch-label {
  writing-mode: vertical-rl;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .28em; text-transform: uppercase;
  color: var(--ink-4);
  padding: 10px 0;
  user-select: none;
}

/* 分节头：编号 + 标题 + 横贯线 */
.sect-head {
  display: flex; align-items: flex-end; gap: 14px;
  margin-bottom: 18px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--rule-2);
}
.sect-head .sect-idx {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
  color: var(--blue); letter-spacing: .1em;
  padding-bottom: 2px;
}
.sect-head h2 {
  margin: 0; font-size: 21px; font-weight: 700;
  color: var(--ink); letter-spacing: -0.02em;
}
.sect-head .sect-desc {
  margin-left: auto; font-size: 12px; color: var(--ink-3);
  font-family: var(--font-mono); letter-spacing: .02em;
  text-align: right;
}

/* 页头（独立页面用） */
.page-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 20px; flex-wrap: wrap;
  margin-bottom: 22px;
  padding-bottom: 16px;
  border-bottom: 2px solid var(--ink);
}
.page-head-main { min-width: 0; }
.page-title {
  margin: 0 0 6px;
  font-family: var(--font-display);
  font-size: 27px; font-weight: 700; letter-spacing: -0.025em;
  color: var(--ink); line-height: 1.15;
}
.page-desc { margin: 0; font-size: 13px; color: var(--ink-2); line-height: 1.6; }
.page-head-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }

/* 返回首页路径（清晰可辨） */
.back-home {
  display: inline-flex; align-items: center; gap: 7px;
  font-family: var(--font-mono); font-size: 11px; font-weight: 500;
  letter-spacing: .06em;
  color: var(--ink-3);
  border: 1px solid var(--rule);
  padding: 5px 11px;
  transition: border-color .13s, color .13s;
}
.back-home:hover { border-color: var(--blue); color: var(--blue); }
.back-home .icon { width: 13px; height: 13px; }

/* ==========================================================================
   A7. 首页：功能入口矩阵（非对称档案网格）
   ========================================================================== */
.landing-hero {
  display: grid;
  grid-template-columns: 7fr 5fr;
  gap: 0;
  border: 1px solid var(--rule-2);
  border-top: 3px solid var(--ink);
  background: var(--panel);
  margin-bottom: 34px;
}
.landing-hero-main {
  padding: 34px 34px 30px;
  border-right: 1px solid var(--rule-2);
  min-width: 0;
}
.landing-eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .18em; text-transform: uppercase; color: var(--blue);
  margin-bottom: 16px;
}
.landing-eyebrow::before {
  content: ""; width: 22px; height: 1px; background: var(--blue);
}
.landing-hero h1 {
  margin: 0 0 14px;
  font-family: var(--font-display);
  font-size: 38px; font-weight: 700; line-height: 1.1;
  letter-spacing: -0.03em; color: var(--ink);
}
.landing-hero h1 em {
  font-style: normal; color: var(--blue);
}
.landing-lead {
  margin: 0 0 22px; font-size: 14px; line-height: 1.7;
  color: var(--ink-2); max-width: 46ch;
}
.landing-cta { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
.landing-cta .btn { padding: 11px 22px; font-size: 13px; }

/* 右侧：档案数据面板 */
.landing-hero-side {
  padding: 30px 28px;
  background: var(--paper-2);
  display: flex; flex-direction: column; gap: 0;
  min-width: 0;
}
.rec-row {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; padding: 13px 0;
  border-bottom: 1px dashed var(--rule-2);
}
.rec-row:last-child { border-bottom: 0; padding-bottom: 0; }
.rec-key {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 500;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
}
.rec-val {
  font-family: var(--font-mono); font-size: 17px; font-weight: 600;
  color: var(--ink); letter-spacing: -0.01em;
  font-variant-numeric: tabular-nums;
}
.rec-val.accent { color: var(--blue); }

/* —— 入口矩阵 —— */
.entry-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 1px;
  background: var(--rule-2);       /* 用背景色做 1px 分隔线 */
  border: 1px solid var(--rule-2);
  margin-bottom: 34px;
}
.entry {
  position: relative;
  display: flex; flex-direction: column; gap: 10px;
  background: var(--panel);
  padding: 22px 20px 20px;
  min-height: 158px;
  transition: background .15s;
  text-align: left;
}
.entry:hover { background: var(--blue-wash); }
.entry:focus-visible { outline: 2px solid var(--blue); outline-offset: -3px; }
/* 跨列尺寸：12 列网格，刻意不等宽 —— 主次分明，拒绝均匀卡片阵 */
.entry.span-3 { grid-column: span 3; }
.entry.span-4 { grid-column: span 4; }
.entry.span-5 { grid-column: span 5; }
.entry.span-7 { grid-column: span 7; }
.entry.span-row { grid-row: span 2; }

.entry-top {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px;
}
.entry-idx {
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
  letter-spacing: .1em; color: var(--blue);
}
.entry-icon {
  width: 26px; height: 26px;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--rule-2); color: var(--ink-2);
  transition: border-color .15s, color .15s;
}
.entry:hover .entry-icon { border-color: var(--blue); color: var(--blue); }
.entry-icon .icon { width: 15px; height: 15px; }
.entry-name {
  font-family: var(--font-display); font-size: 16px; font-weight: 600;
  color: var(--ink); letter-spacing: -0.015em;
  margin-top: auto;
}
.entry.span-5 .entry-name, .entry.span-7 .entry-name { font-size: 20px; }
.entry-note {
  font-size: 12px; line-height: 1.6; color: var(--ink-2);
}
.entry-meta {
  font-family: var(--font-mono); font-size: 10.5px;
  letter-spacing: .06em; color: var(--ink-3);
  display: flex; align-items: center; gap: 6px;
}
.entry-meta::before { content: ""; width: 12px; height: 1px; background: var(--rule-3); }

/* 大入口：右侧缩略图（占位）—— 凡带 art 的卡片通用（不再绑定某一档跨度） */
.entry.has-art { flex-direction: row; align-items: stretch; gap: 0; padding: 0; min-height: 190px; }
.entry.has-art .entry-body {
  flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column;
  gap: 10px; padding: 22px 20px 20px;
}
.entry.has-art .entry-art {
  flex: 0 0 38%; border-left: 1px solid var(--rule);
  background: var(--paper-2); position: relative; overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 10px; letter-spacing: .2em;
  color: var(--ink-4); text-transform: uppercase;
}
.entry.has-art .entry-art::after {
  content: ""; position: absolute; inset: 0;
  background: repeating-linear-gradient(
    45deg, transparent 0 9px, var(--rule) 9px 10px
  );
  opacity: .55;
  pointer-events: none;
}
.entry.has-art .entry-art span { position: relative; z-index: 1; }

/* —— 个人档案卡（独立卡片，替代原顶栏用户区） —— */
.id-card {
  border: 1px solid var(--rule-2);
  border-left: 3px solid var(--blue);
  background: var(--panel);
  padding: 20px 22px;
  display: flex; align-items: center; gap: 18px;
  margin-bottom: 34px;
}
.id-card-avatar {
  width: 56px; height: 56px; flex: 0 0 56px;
  border: 1px solid var(--rule-2);
  background: var(--paper-2);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-size: 22px; font-weight: 700;
  color: var(--ink-2); overflow: hidden;
}
.id-card-avatar img { width: 100%; height: 100%; object-fit: cover; }
.id-card-main { flex: 1 1 auto; min-width: 0; }
.id-card-name {
  font-family: var(--font-display); font-size: 16.5px; font-weight: 700;
  color: var(--ink); letter-spacing: -0.015em;
  margin: 0 0 3px;
  display: flex; align-items: center; gap: 9px; flex-wrap: wrap;
}
.id-card-sub {
  font-family: var(--font-mono); font-size: 11px;
  letter-spacing: .05em; color: var(--ink-3);
}
.id-card-stats {
  display: flex; gap: 0; align-items: stretch;
  border-left: 1px solid var(--rule);
}
.id-stat {
  padding: 0 18px; text-align: right;
  border-right: 1px solid var(--rule);
}
.id-stat:last-child { border-right: 0; }
.id-stat b {
  display: block; font-family: var(--font-mono); font-size: 17px;
  font-weight: 600; color: var(--ink); font-variant-numeric: tabular-nums;
}
.id-stat span {
  font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .12em;
  text-transform: uppercase; color: var(--ink-3);
}
.id-card-actions { display: flex; gap: 8px; flex-wrap: wrap; }

/* ==========================================================================
   A8. 首页：最新同步文件（表格式，非卡片）
   --------------------------------------------------------------------------
   列宽：[类型 74] [文件名 1fr] [归属 1fr] [大小 84] [时间 132] [操作 92]
   归属单独占一列（不是塞进 meta 里），这样才能和文件名等分剩余空间；
   窄屏（<=980px）把归属下沉到第二行，避免与文件名互相挤压。
   ========================================================================== */
.upd-list { border: 1px solid var(--rule-2); background: var(--panel); }
.upd-item {
  display: grid;
  grid-template-columns: 74px minmax(0, 1.05fr) minmax(0, 1fr) 84px 132px 92px;
  gap: 12px; align-items: center;
  padding: 13px 18px;
  border-bottom: 1px solid var(--rule);
  font-size: 13px;
  transition: background .13s;
}
.upd-item:last-child { border-bottom: 0; }
.upd-item:hover { background: var(--blue-wash); }
.upd-kind {
  display: inline-flex; align-items: center; gap: 5px; justify-content: center;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--blue);
  border: 1px solid var(--rule-2); padding: 2px 6px; text-align: center;
  white-space: nowrap;
}
.upd-kind svg { width: 12px; height: 12px; flex: none; }
.upd-kind.file { color: var(--ink-3); }
.upd-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink); }
.upd-title:hover { color: var(--blue); }

/* 归属：分区名 + 次级目录 */
.upd-meta {
  display: flex; align-items: baseline; gap: 6px;
  min-width: 0;
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-3);
}
.upd-group {
  display: flex; align-items: baseline; gap: 6px;
  min-width: 0; overflow: hidden; white-space: nowrap;
  color: var(--ink-3);
}
/* 分区名：主信息，**不参与收缩**（flex: 0 0 auto）。
   为什么：品牌名可能有 90+ 字符，若参与收缩分配，flexbox 会按 base size 比例把它和
   次级信息一起削，导致品牌被压成 "(比..." 而次级反而完整 —— 主次颠倒。
   改为不收缩后，次级信息（em，唯一可收缩项）先被挤到 0，品牌拿到全部剩余宽度；
   只有当品牌自身就超宽时，才由 .upd-group 的 overflow:hidden 裁切（tooltip 兜底）。 */
.upd-group > span {
  flex: 0 0 auto;
  white-space: nowrap;
}
/* 次级归属（车型 / 固件目录）：唯一可收缩项，空间不足时优先被压缩至 0 */
.upd-group em {
  font-style: normal; opacity: .66;
  flex: 0 1 auto; min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.upd-group em::before { content: '· '; opacity: .6; }

/* 大小 / 时间：等宽数字，各自独立成列右对齐 */
.upd-size, .upd-when {
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-3);
  font-variant-numeric: tabular-nums;
  text-align: right; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
.upd-act { display: flex; gap: 8px; justify-content: flex-end; }

@media (max-width: 980px) {
  .upd-item {
    grid-template-columns: 74px minmax(0, 1fr) 84px 132px 92px;
    row-gap: 5px;
  }
  /* 归属下沉到第二行，跨过文件名与大小两列 */
  .upd-meta { grid-column: 2 / 4; grid-row: 2; }
  .upd-size { grid-column: 3; grid-row: 1; }
}

/* ==========================================================================
   A9. /disk 网盘页
   ========================================================================== */
.disk-layout {
  display: grid; grid-template-columns: 268px 1fr;
  gap: 0;
  border: 1px solid var(--rule-2);
  background: var(--panel);
  min-height: 520px;
}
.disk-tree {
  border-right: 1px solid var(--rule-2);
  background: var(--paper-2);
  display: flex; flex-direction: column;
  min-width: 0;
}
.disk-tree-head {
  padding: 12px 14px;
  border-bottom: 1px solid var(--rule-2);
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
}
.disk-tree-title {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3);
}
.disk-tree-body { padding: 8px 0 14px; overflow-y: auto; max-height: 640px; }
.tree-node {
  display: flex; align-items: center; gap: 7px;
  width: 100%; text-align: left;
  padding: 7px 12px;
  border: 0; background: transparent;
  font-size: 12.5px; color: var(--ink-2);
  border-left: 2px solid transparent;
  transition: background .12s, color .12s, border-color .12s;
}
.tree-node:hover { background: var(--panel); color: var(--blue); }
.tree-node.active {
  background: var(--panel); color: var(--blue-ink); font-weight: 600;
  border-left-color: var(--blue);
}
.tree-node .icon { width: 14px; height: 14px; flex: 0 0 14px; color: var(--ink-4); }
.tree-node.active .icon { color: var(--blue); }
.tree-node .tn-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tree-node .tn-count {
  font-family: var(--font-mono); font-size: 10px; color: var(--ink-4);
  font-variant-numeric: tabular-nums;
}
.tree-node.lv-1 { padding-left: 26px; }
.tree-node.lv-2 { padding-left: 40px; font-size: 12px; }

.disk-main { min-width: 0; display: flex; flex-direction: column; }
.disk-toolbar {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 12px 16px;
  border-bottom: 1px solid var(--rule-2);
  background: var(--panel);
}
.disk-crumb {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  font-family: var(--font-mono); font-size: 11.5px;
  color: var(--ink-3); margin-right: auto; min-width: 0;
}
.disk-crumb a { color: var(--ink-2); }
.disk-crumb a:hover { color: var(--blue); }
.disk-crumb .sep { color: var(--rule-3); }
.disk-crumb .cur { color: var(--ink); font-weight: 600; }
/* 树形折叠（移动端） */
.disk-tree-toggle { display: none; }

/* ==========================================================================
   A10. /profile 个人中心
   ========================================================================== */
.profile-layout {
  display: grid; grid-template-columns: 236px 1fr;
  gap: 0;
  border: 1px solid var(--rule-2);
  background: var(--panel);
}
.profile-aside {
  border-right: 1px solid var(--rule-2);
  background: var(--paper-2);
  display: flex; flex-direction: column;
  min-width: 0;
}
.profile-aside-id {
  padding: 22px 20px;
  border-bottom: 1px solid var(--rule-2);
  display: flex; align-items: center; gap: 13px;
}
.profile-aside-id .avatar-lg {
  width: 46px; height: 46px; flex: 0 0 46px;
  border: 1px solid var(--rule-2); background: var(--panel);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-size: 18px; font-weight: 700;
  color: var(--ink-2); overflow: hidden;
}
.profile-aside-id .avatar-lg img { width: 100%; height: 100%; object-fit: cover; }
.profile-aside-name {
  font-family: var(--font-display); font-size: 14.5px; font-weight: 700;
  color: var(--ink); margin: 0 0 2px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.profile-aside-role {
  font-family: var(--font-mono); font-size: 10px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--ink-3);
}
.profile-nav { padding: 8px 0 14px; }
.profile-nav button {
  display: flex; align-items: center; gap: 10px;
  width: 100%; text-align: left;
  padding: 11px 18px;
  border: 0; background: transparent;
  font-size: 12.5px; font-weight: 500; color: var(--ink-2);
  border-left: 2px solid transparent;
  transition: background .12s, color .12s, border-color .12s;
}
.profile-nav button .icon { width: 15px; height: 15px; flex: 0 0 15px; color: var(--ink-4); }
.profile-nav button:hover { background: var(--panel); color: var(--blue); }
.profile-nav button.active {
  background: var(--panel); color: var(--blue-ink); font-weight: 600;
  border-left-color: var(--blue);
}
.profile-nav button.active .icon { color: var(--blue); }
.profile-nav .nav-group {
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 600;
  letter-spacing: .16em; text-transform: uppercase; color: var(--ink-4);
  padding: 14px 18px 6px;
}
.profile-main { padding: 24px 28px 32px; min-width: 0; }

/* 侧栏底部：退出登录常驻 */
.profile-aside-foot {
  margin-top: auto;
  padding: 12px 14px 16px;
  border-top: 1px solid var(--rule-2);
}
.profile-logout {
  display: flex; align-items: center; gap: 9px;
  width: 100%; text-align: left;
  padding: 10px 12px;
  border: 1px solid var(--rule-2); background: var(--panel);
  font-family: var(--font-display); font-size: 12.5px; font-weight: 600;
  color: var(--ink-2); cursor: pointer;
  transition: background .12s, color .12s, border-color .12s;
}
.profile-logout .icon { width: 15px; height: 15px; flex: 0 0 15px; color: var(--ink-4); }
.profile-logout:hover:not(:disabled) {
  color: var(--danger, #b91c1c);
  border-color: var(--danger, #b91c1c);
  background: var(--paper-2);
}
.profile-logout:hover:not(:disabled) .icon { color: var(--danger, #b91c1c); }
.profile-logout:disabled { opacity: .55; cursor: default; }

/* ==========================================================================
   A11. /changelog 版本与更新记录
   ========================================================================== */
.cl-log { border: 1px solid var(--rule-2); background: var(--panel); }
.cl-item {
  position: relative;
  padding: 20px 24px 20px 62px;
  border-bottom: 1px solid var(--rule);
}
.cl-item:last-child { border-bottom: 0; }
.cl-item::before {
  content: ""; position: absolute; left: 27px; top: 0; bottom: 0;
  width: 1px; background: var(--rule-2);
}
.cl-item:first-child::before { top: 26px; }
.cl-item:last-child::before { bottom: auto; height: 26px; }
.cl-dot {
  position: absolute; left: 22px; top: 23px;
  width: 11px; height: 11px; border-radius: 50%;
  background: var(--panel); border: 2px solid var(--rule-3);
  z-index: 1;
}
.cl-item.latest .cl-dot { background: var(--blue); border-color: var(--blue); }
.cl-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.cl-ver {
  font-family: var(--font-mono); font-size: 12px; font-weight: 600;
  letter-spacing: .04em; padding: 3px 10px;
  border: 1px solid var(--rule-2); background: var(--paper-2); color: var(--ink-2);
}
.cl-item.latest .cl-ver { background: var(--blue); border-color: var(--blue); color: #fff; }
.cl-latest-tag {
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--green); border: 1px solid var(--green); padding: 2px 7px;
}
.cl-date {
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-3);
  margin-left: auto; font-variant-numeric: tabular-nums;
}
.cl-title {
  font-family: var(--font-display); font-size: 15.5px; font-weight: 600;
  color: var(--ink); margin: 0 0 8px; letter-spacing: -0.01em;
}
.cl-body {
  font-size: 13px; line-height: 1.75; color: var(--ink-2);
  white-space: pre-wrap; word-break: break-word;
}
.cl-empty { font-size: 12.5px; color: var(--ink-3); font-style: italic; }

/* 同步运行记录（表格式） */
.run-table {
  width: 100%; border-collapse: collapse;
  font-size: 12.5px;
  border: 1px solid var(--rule-2);
  background: var(--panel);
}
.run-table th {
  text-align: left; padding: 10px 14px;
  background: var(--paper-2);
  border-bottom: 1px solid var(--rule-2);
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
  white-space: nowrap;
}
.run-table td {
  padding: 11px 14px; border-bottom: 1px solid var(--rule);
  color: var(--ink-2); vertical-align: middle;
}
.run-table tr:last-child td { border-bottom: 0; }
.run-table tr:hover td { background: var(--blue-wash); }
.run-table .num {
  font-family: var(--font-mono); font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.run-status {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase;
  padding: 2px 7px; border: 1px solid var(--rule-2); color: var(--ink-2);
}
.run-status.ok { color: var(--green); border-color: var(--green); background: var(--green-wash); }
.run-status.err { color: var(--red); border-color: var(--red); background: var(--red-wash); }
.run-diff {
  font-size: 11.5px; color: var(--ink-3); margin-top: 4px;
  font-family: var(--font-mono);
}

/* --------------------------------------------------------------------------
   更新记录（时间线 + 变更清单）
   结构：每条 run 一个 .rec-item，头部一行「时间 · 状态 · 指标」，下方分「新增 N 项 / 移除 N 项」两组清单。
   清单项向左缩进 + 圆点引导，路径用等宽字以保持层级可读、长路径可省略。
   -------------------------------------------------------------------------- */
.rec-list { border: 1px solid var(--rule-2); background: var(--panel); }
.rec-item { padding: 18px 22px; border-bottom: 1px solid var(--rule); }
.rec-item:last-child { border-bottom: 0; }
.rec-item.latest { background: var(--blue-wash); }
.rec-head {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  margin-bottom: 12px;
}
.rec-time {
  font-family: var(--font-mono); font-size: 14px; font-weight: 600;
  color: var(--ink); font-variant-numeric: tabular-nums;
}
.rec-tag {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .08em; text-transform: uppercase;
  padding: 2px 7px; border: 1px solid var(--rule-2); color: var(--ink-2);
  background: var(--paper-2);
}
.rec-tag.ok { color: var(--green); border-color: var(--green); background: var(--green-wash); }
.rec-tag.err { color: var(--red); border-color: var(--red); background: var(--red-wash); }
/* 状态说明文字（如「源站有变化，镜像已更新」） */
.rec-note { font-size: 12.5px; color: var(--blue-ink); font-weight: 500; }
.rec-note.calm { color: var(--ink-3); font-weight: 400; }
/* 右侧指标串：自动 · 1222 秒 · 快照 #39 · 目录 4028 / 文件 5449 */
.rec-metrics {
  margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-family: var(--font-mono); font-size: 11px; color: var(--ink-3);
  font-variant-numeric: tabular-nums;
}
.rec-metrics span.sep { color: var(--rule-2); }

/* 变更分组：新增 / 移除 */
.rec-group { margin-top: 12px; }
.rec-group:first-of-type { margin-top: 0; }
.rec-group-head {
  display: flex; align-items: baseline; gap: 8px;
  font-size: 13px; font-weight: 600; color: var(--ink);
  margin-bottom: 8px;
}
.rec-group-head .cnt {
  font-family: var(--font-mono); font-size: 12px; font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.rec-group-head.add .cnt { color: var(--green); }
.rec-group-head.del .cnt { color: var(--red); }
.rec-group-head .hint { font-size: 11.5px; color: var(--ink-3); font-weight: 400; }

/* 清单：圆点在左，路径缩进对齐 */
.rec-paths { list-style: none; margin: 0; padding: 0 0 0 4px; }
.rec-paths li {
  position: relative; padding: 3px 0 3px 18px;
  font-family: var(--font-mono); font-size: 12.5px; line-height: 1.55;
  color: var(--ink-2);
  word-break: break-word;
}
.rec-paths li::before {
  content: ""; position: absolute; left: 4px; top: 11px;
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--rule-3);
}
.rec-group-head.add ~ .rec-paths li::before { background: var(--green); }
.rec-group-head.del ~ .rec-paths li::before { background: var(--red); }
/* 目录项用文件夹色区分文件项 */
.rec-paths li.is-dir { color: var(--ink); font-weight: 500; }
.rec-paths li.more {
  font-family: var(--font-body); font-size: 12px; color: var(--ink-3);
  font-style: italic;
}
.rec-paths li.more::before { background: transparent; border: 1px dashed var(--rule-3); }

/* 无变化 / 失败态 */
.rec-flat {
  font-size: 12.5px; color: var(--ink-3); font-style: italic;
  padding: 2px 0 2px 18px; position: relative;
}
.rec-flat::before {
  content: ""; position: absolute; left: 4px; top: 10px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--rule-2);
}
.rec-fail {
  font-size: 12.5px; color: var(--red);
  background: var(--red-wash); border: 1px solid var(--red);
  padding: 8px 12px; margin-top: 8px;
  font-family: var(--font-mono); word-break: break-word;
}

/* ==========================================================================
   A12. 社区模块（资源分享 / 讨论 / 技巧）
   ========================================================================== */
.comm-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 1px; background: var(--rule-2);
  border: 1px solid var(--rule-2);
}
.comm-card {
  background: var(--panel);
  padding: 20px 20px 18px;
  display: flex; flex-direction: column; gap: 11px;
  min-height: 200px;
  transition: background .14s;
}
.comm-card:hover { background: var(--blue-wash); }
.comm-top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.comm-cat {
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--ink-3); border: 1px solid var(--rule); padding: 2px 7px;
}
.comm-title {
  font-family: var(--font-display); font-size: 15px; font-weight: 600;
  color: var(--ink); letter-spacing: -0.012em; line-height: 1.4;
  margin: 0;
}
.comm-excerpt {
  font-size: 12.5px; line-height: 1.65; color: var(--ink-2);
  flex: 1;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
  overflow: hidden;
}
.comm-foot {
  display: flex; align-items: center; gap: 12px;
  padding-top: 11px; border-top: 1px solid var(--rule);
  font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-3);
}
.comm-author {
  display: inline-flex; align-items: center; gap: 6px;
  margin-right: auto; min-width: 0;
}
.comm-author .ca-dot {
  width: 16px; height: 16px; flex: 0 0 16px;
  border: 1px solid var(--rule-2); background: var(--paper-2);
  display: flex; align-items: center; justify-content: center;
  font-size: 8.5px; color: var(--ink-3);
}
.comm-stat { display: inline-flex; align-items: center; gap: 4px; }
.comm-stat .icon { width: 12px; height: 12px; }

/* 占位数据提示条 */
.placeholder-note {
  display: flex; align-items: flex-start; gap: 9px;
  padding: 11px 14px;
  background: var(--amber-wash);
  border: 1px solid var(--amber);
  border-left-width: 3px;
  font-size: 12px; line-height: 1.6; color: var(--ink-2);
  margin-bottom: 22px;
}
.placeholder-note .icon { width: 14px; height: 14px; flex: 0 0 14px; color: var(--amber); margin-top: 1px; }
.placeholder-note b { color: var(--ink); }

/* 筛选条 */
.filter-bar {
  display: flex; align-items: center; gap: 0; flex-wrap: wrap;
  border: 1px solid var(--rule-2); background: var(--panel);
  margin-bottom: 20px;
}
.filter-bar .fb-label {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3);
  padding: 11px 14px; border-right: 1px solid var(--rule);
}
.filter-bar button {
  border: 0; background: transparent;
  border-right: 1px solid var(--rule);
  padding: 11px 16px; font-size: 12.5px; color: var(--ink-2);
  transition: background .12s, color .12s;
}
.filter-bar button:hover { background: var(--blue-wash); color: var(--blue); }
.filter-bar button.active {
  background: var(--blue-wash); color: var(--blue-ink); font-weight: 600;
  box-shadow: inset 0 -2px 0 var(--blue);
}

/* ==========================================================================
   A13. 入场编排动画（有序、克制、尊重 prefers-reduced-motion）
   ========================================================================== */
@keyframes arch-rise {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: none; }
}
@keyframes arch-wipe {
  from { opacity: 0; transform: scaleX(.94); transform-origin: left; }
  to   { opacity: 1; transform: none; }
}

/* 编排：hero → 数据面板 → 入口矩阵 → 个人卡 → 更新流，逐级 70ms 递进 */
.anim { opacity: 0; }
.js-anim-ready .anim {
  animation: arch-rise .5s cubic-bezier(.22, .68, .32, 1) both;
}
.js-anim-ready .anim-d1 { animation-delay: .05s; }
.js-anim-ready .anim-d2 { animation-delay: .12s; }
.js-anim-ready .anim-d3 { animation-delay: .19s; }
.js-anim-ready .anim-d4 { animation-delay: .26s; }
.js-anim-ready .anim-d5 { animation-delay: .33s; }
.js-anim-ready .anim-d6 { animation-delay: .40s; }
/* 入口逐项进入（依赖 --i 序号） */
.js-anim-ready .entry {
  opacity: 0;
  animation: arch-rise .42s cubic-bezier(.22, .68, .32, 1) both;
  animation-delay: calc(.16s + var(--i, 0) * 0.045s);
}
/* 页头线：横扫展开 */
.js-anim-ready .page-head { animation: arch-wipe .45s cubic-bezier(.22,.68,.32,1) both; }
.js-anim-ready .sect-head { animation: arch-wipe .45s cubic-bezier(.22,.68,.32,1) both; }

/* 无障碍：尊重系统「减弱动态效果」 */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-delay: 0ms !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  .anim, .js-anim-ready .anim, .js-anim-ready .entry { opacity: 1 !important; }
  .js-anim-ready .page-head, .js-anim-ready .sect-head { opacity: 1 !important; }
  .spinner { animation: spin .6s linear infinite !important; }
}

/* ==========================================================================
   A15. 弹窗内部的表单结构类（替代 app.js 里的内联样式）
   ========================================================================== */
.auth-title {
  margin: 0 0 6px; text-align: center;
  font-family: var(--font-display); font-size: 19px; font-weight: 700;
  letter-spacing: -0.02em; color: var(--ink);
}
.auth-sub {
  text-align: center; font-size: 12.5px; color: var(--ink-3);
  margin: 0 0 18px; line-height: 1.6;
}
/* 密码框：右侧留出眼睛图标位 */
.pwd-wrap { position: relative; }
.pwd-wrap input { padding-right: 38px; }
.pwd-eye {
  position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  cursor: pointer; user-select: none; display: inline-flex;
  color: var(--ink-3);
}
.pwd-eye:hover { color: var(--ink); }
/* 记住账号密码 */
.remember-row {
  display: flex; align-items: center; gap: 7px;
  margin: 4px 0 14px; font-size: 12.5px; color: var(--ink-2);
  cursor: pointer;
}
.remember-row input { accent-color: var(--blue); }
/* 弹窗内的链接行（注册/忘记密码/找回账号） */
.auth-links {
  display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap;
  margin: 10px 0 18px; font-size: 12.5px;
  padding-bottom: 14px; border-bottom: 1px solid var(--rule);
}
.auth-links a { color: var(--blue); }
.auth-links a:hover { color: var(--blue-ink); text-decoration: underline; }
/* 弹窗内的返回链接 */
.auth-back { margin: 0 0 12px; }
.auth-back a { color: var(--blue); font-size: 12.5px; }
.auth-back a:hover { text-decoration: underline; }
/* 弹窗底部的说明 */
.auth-foot {
  margin: 18px 0 0; text-align: center;
  font-size: 11.5px; color: var(--ink-3); line-height: 1.6;
}
/* 注册码/验证身份的头 */
.auth-head {
  display: flex; align-items: center; gap: 9px; margin-bottom: 4px;
}
.auth-head h3 {
  margin: 0; font-family: var(--font-display); font-size: 18px; font-weight: 700;
}
.auth-head .back-arrow {
  cursor: pointer; font-size: 16px; color: var(--ink-2);
  padding: 3px 7px; border: 1px solid transparent;
}
.auth-head .back-arrow:hover { border-color: var(--rule-2); color: var(--blue); }
.auth-badge {
  margin-left: auto;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .1em; text-transform: uppercase;
  color: var(--blue); border: 1px solid var(--blue); padding: 2px 8px;
}
/* 验证码输入行 */
.code-row { display: flex; gap: 8px; width: 100%; }
.code-row input { flex: 1 1 auto; min-width: 0; }
.code-row .btn { flex: 0 0 auto; white-space: nowrap; }
/* 居中提示块（注册码引导等） */
.auth-center { text-align: center; margin: 8px 0 16px; }
.auth-center .empty-icon { color: var(--blue); font-size: 30px; margin-bottom: 10px; line-height: 1; }
.auth-center h3 {
  margin: 0 0 6px; font-family: var(--font-display); font-size: 17px; font-weight: 700;
}
.auth-center .lead { margin: 0; color: var(--ink); font-size: 13.5px; }
.auth-center .hint { margin: 7px 0 0; color: var(--ink-3); font-size: 11.5px; line-height: 1.6; }
/* 注册按钮：满宽主色（替代原内联 red 背景） */
.btn.primary.btn-register { width: 100%; padding: 11px; }

/* ==========================================================================
   A16. 页面基础结构工具类（前台通用）
   ========================================================================== */
.stack-14 { display: flex; flex-direction: column; gap: 14px; }
.stack-18 { display: flex; flex-direction: column; gap: 18px; }
.row-gap { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.mt-24 { margin-top: 24px; }
.mt-32 { margin-top: 32px; }
.mb-20 { margin-bottom: 20px; }
.mb-28 { margin-bottom: 28px; }
.txt-dim { color: var(--ink-2); }
.txt-faint { color: var(--ink-3); }

/* 加载态：档案式行 */
.loading-row {
  display: flex; align-items: center; gap: 10px;
  padding: 40px 0; justify-content: center;
  font-family: var(--font-mono); font-size: 11.5px;
  letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3);
}

/* ==========================================================================
   A14. 前台响应式
   ========================================================================== */
@media (max-width: 1240px) {
  #app { padding-left: 22px; padding-right: 22px; }
  #masthead { padding-left: 22px; padding-right: 22px; }
  #statusRibbon { left: 22px; }
  .landing-hero-main { padding: 28px 26px 26px; }
  .landing-hero h1 { font-size: 32px; }
  .entry-grid { grid-template-columns: repeat(4, 1fr); }
  .entry.span-3, .entry.span-4, .entry.span-5, .entry.span-7 { grid-column: span 2; }
  .entry.has-art { grid-column: span 4; }  /* 带图大卡独占一行，其余两两并排（5 张正好 3 行无空洞） */
  .disk-layout { grid-template-columns: 230px 1fr; }
}

@media (max-width: 1024px) {
  .landing-hero { grid-template-columns: 1fr; }
  .landing-hero-main { border-right: 0; border-bottom: 1px solid var(--rule-2); }
  .landing-hero-side {
    display: grid; grid-template-columns: 1fr 1fr;
  }
  .rec-row:nth-child(odd) { border-right: 1px solid var(--rule-2); padding-right: 16px; }
  .rec-row:nth-child(even) { padding-left: 16px; }
  .entry-grid { grid-template-columns: repeat(2, 1fr); }
  .entry.span-3, .entry.span-4, .entry.span-5, .entry.span-7, .entry.has-art { grid-column: span 2; }
  .entry.span-row { grid-row: span 1; }
  .comm-grid { grid-template-columns: repeat(2, 1fr); }
  .disk-layout { grid-template-columns: 1fr; }
  .disk-tree { border-right: 0; border-bottom: 1px solid var(--rule-2); }
  .disk-tree-body { max-height: 260px; }
  .disk-tree-toggle { display: inline-flex; }
  .profile-layout { grid-template-columns: 1fr; }
  .profile-aside { border-right: 0; border-bottom: 1px solid var(--rule-2); }
  .profile-nav { display: flex; overflow-x: auto; padding: 6px; gap: 2px; }
  .profile-nav button {
    white-space: nowrap; flex: 0 0 auto;
    border-left: 0; border-bottom: 2px solid transparent; padding: 10px 14px;
  }
  .profile-nav button.active { border-left: 0; border-bottom-color: var(--blue); }
  .profile-nav .nav-group { display: none; }
}

@media (max-width: 768px) {
  /* 报头：品牌铭牌 + 汉堡 */
  #masthead { padding: 14px 14px 0; align-items: center; }
  .brand-text { display: none; }
  .masthead-brand { padding: 6px; }
  #statusRibbon { display: none; }
  .nav-toggle { display: flex; }
  .nav-panel {
    position: absolute; top: 62px; right: 14px;
    flex-direction: column; align-items: stretch;
    min-width: 190px;
    border: 1px solid var(--rule-3);
    box-shadow: var(--shadow-lg);
    display: none;
  }
  .nav-panel.open { display: flex; }
  .nav-panel > a {
    border-right: 0; border-bottom: 1px solid var(--rule);
    padding: 14px 18px; min-height: 44px;
  }
  .nav-panel > a:last-child { border-bottom: 0; }
  .nav-panel > a.active::after { display: none; }
  .nav-panel > a.active { box-shadow: inset 3px 0 0 var(--blue); }
  .nav-sep { display: none; }

  #app { padding: 76px 14px 56px; }

  /* 首页 */
  .landing-hero-main { padding: 22px 18px; }
  .landing-hero h1 { font-size: 26px; }
  .landing-lead { font-size: 13px; }
  .landing-hero-side { grid-template-columns: 1fr; padding: 20px 18px; }
  .rec-row:nth-child(odd), .rec-row:nth-child(even) { padding-left: 0; padding-right: 0; border-right: 0; }
  .entry-grid { grid-template-columns: 1fr; }
  .entry.span-3, .entry.span-4, .entry.span-5, .entry.span-7, .entry.has-art { grid-column: span 1; }
  .entry { min-height: 0; padding: 18px 16px; }
  .entry.has-art { flex-direction: column; padding: 0; }
  .entry.has-art .entry-body { padding: 18px 16px; }
  .entry.has-art .entry-art { flex: 0 0 84px; border-left: 0; border-top: 1px solid var(--rule); }
  .entry.has-art .entry-name { font-size: 17px; }

  /* 个人档案卡：纵向堆叠 */
  .id-card { flex-wrap: wrap; gap: 14px; padding: 16px; }
  .id-card-stats {
    width: 100%; border-left: 0; border-top: 1px solid var(--rule);
    padding-top: 14px; justify-content: space-around;
  }
  .id-stat { border-right: 0; padding: 0 6px; text-align: center; flex: 1; }
  .id-card-actions { width: 100%; }
  .id-card-actions .btn { flex: 1; justify-content: center; }

  /* 更新流：转两列 */
  .upd-item { grid-template-columns: 62px 1fr; gap: 10px 12px; padding: 12px 14px; }
  .upd-item .upd-meta { grid-column: 1 / -1; }
  .upd-item .upd-act { grid-column: 1 / -1; justify-content: flex-start; }

  /* 网盘 */
  .disk-toolbar { padding: 10px 12px; }
  .disk-crumb { width: 100%; margin-bottom: 6px; }

  /* 社区 */
  .comm-grid { grid-template-columns: 1fr; }

  /* 日志 */
  .cl-item { padding: 16px 16px 16px 48px; }
  .cl-item::before { left: 21px; }
  .cl-dot { left: 16px; }
  .cl-date { margin-left: 0; width: 100%; }
  .run-table { min-width: 620px; }
  .run-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--rule-2); }
  .run-table-wrap .run-table { border: 0; }

  /* 更新记录：指标串换行到下一行，路径字号收一档 */
  .rec-item { padding: 15px 16px; }
  .rec-metrics { margin-left: 0; width: 100%; }
  .rec-paths li { font-size: 12px; }

  /* 档案网格降级 */
  .page-title { font-size: 22px; }
  .sect-head { flex-wrap: wrap; }
  .sect-head .sect-desc { margin-left: 0; width: 100%; text-align: left; }

  /* 触控目标 ≥44px */
  .nav-panel > a, .tree-node, .profile-nav button { min-height: 44px; }
  .entry { min-height: 88px; }
  .masthead-brand { min-height: 42px; }
}

@media (max-width: 480px) {
  .landing-hero h1 { font-size: 22px; }
  .landing-cta .btn { width: 100%; justify-content: center; }
  .filter-bar button { min-height: 44px; }
  .entry.has-art .entry-art { flex-basis: 66px; }
}

/* 打印：去掉浮层与纹理 */
@media print {
  #masthead, #statusRibbon, footer, .nav-toggle { display: none !important; }
  body { background-image: none; }
  #app { padding-top: 0; }
}

/* ==========================================================================
   A10. 后台控制台（body.admin-mode）——「档案室 · 控制台」Design System v3
   --------------------------------------------------------------------------
   设计定调（与前台同源，密度更高）：
     · 调性：Industrial / utilitarian —— 档案柜的秩序感，但信息密度更高
     · 层次靠「1px 结构线 + 底色明暗」，投影全部取消（与前台一致）
     · 圆角 2px 硬边；等宽字体承载一切数字 / ID / 编号
     · 记忆点：侧栏「分组编号 01–08」+ 竖排分组标签，与前台档案编号同构
     · 单一强调色 --blue，只用于当前选中与关键动作
   加载顺序：app.css → archive.css → 本段（覆盖 app.css 的后台 v2 视觉）
   ========================================================================== */

/* ---------- A10.1 后台 token：复用前台一套，仅调密度与底色 ---------- */
body.admin-mode {
  /* 后台用比前台更冷的纸色，区分「工作台」与「阅览区」 */
  --paper:   #f7f7f4;
  --paper-2: #efefea;
  --paper-3: #e6e6e0;
  --adm-rail: 264px;   /* 侧栏宽 */
  --adm-top: 58px;     /* 顶条高 */
  --adm-pad: 26px;     /* 内容内边距 */

  background: var(--paper) !important;
  /* 与前台同款极淡网格纹理，保持档案室的血统 */
  background-image:
    linear-gradient(to right, rgba(16, 24, 40, .028) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(16, 24, 40, .028) 1px, transparent 1px);
  background-size: 88px 88px;
}
[data-theme="dark"] body.admin-mode {
  --paper:   #0d1014;
  --paper-2: #14181d;
  --paper-3: #1b2026;
  background-image:
    linear-gradient(to right, rgba(255,255,255,.028) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(255,255,255,.028) 1px, transparent 1px);
}

/* ---------- A10.2 骨架：侧栏 + 主区 ---------- */
.admin-v2-layout { display: flex; min-height: 100vh; background: transparent; }

.admin-v2-side {
  width: var(--adm-rail); flex: 0 0 var(--adm-rail);
  background: var(--panel);
  border-right: 1px solid var(--rule-2);
  display: flex; flex-direction: column;
  position: sticky; top: 0; height: 100vh; overflow: hidden;
}

/* 品牌头：等宽「BUILD」标签 + 硬边方块 logo */
.admin-v2-brand {
  display: flex; align-items: center; gap: 11px;
  padding: 16px 18px 15px;
  border-bottom: 1px solid var(--rule-2);
  position: relative;
}
/* 品牌头右下角的小三角切口 —— 档案标签的视觉记号 */
.admin-v2-brand::after {
  content: ""; position: absolute; right: 0; bottom: -1px;
  width: 0; height: 0; border-style: solid;
  border-width: 0 0 9px 9px;
  border-color: transparent transparent var(--rule-2) transparent;
}
.admin-v2-brand-logo {
  width: 32px; height: 32px; border-radius: var(--radius);
  background: var(--blue-ink);
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
  border: 1px solid var(--blue-ink);
}
.admin-v2-brand-logo img { border-radius: var(--radius) !important; object-fit: contain !important; }
.admin-v2-brand-name {
  font-family: var(--font-display); font-size: 14px; font-weight: 700;
  color: var(--ink); letter-spacing: -0.01em; line-height: 1.2;
}
.admin-v2-brand-sub {
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 500;
  color: var(--ink-3); letter-spacing: .14em; text-transform: uppercase;
  margin-top: 3px;
}

/* ---------- A10.3 侧栏导航：分组编号 + 竖排标签 ---------- */
.admin-v2-nav {
  padding: 4px 0 14px;
  flex: 0 1 auto; min-height: 0;
  overflow-y: auto; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: var(--rule-2) transparent;
}
.admin-v2-nav::-webkit-scrollbar { width: 6px; }
.admin-v2-nav::-webkit-scrollbar-track { background: transparent; }
.admin-v2-nav::-webkit-scrollbar-thumb { background: var(--rule-2); border-radius: 0; }
.admin-v2-nav:hover::-webkit-scrollbar-thumb { background: var(--rule-3); }
/* 侧栏整体也是一条滚动轨（导航不足时仍能触达全部） */
.admin-v2-side { overflow-y: auto; scrollbar-width: none; }
.admin-v2-side::-webkit-scrollbar { width: 0; height: 0; }

/* 分组标题：编号做成「档案抽屉号」灰块，名称紧随其后 + 右侧延伸细线 */
.admin-v2-nav-group {
  display: flex; align-items: center; gap: 7px;
  font-family: var(--font-display); font-size: 11px; font-weight: 600;
  letter-spacing: .04em;
  color: var(--ink-2);
  margin: 17px 14px 5px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--rule);
  white-space: nowrap;
}
.admin-v2-nav-group::before {
  counter-increment: admgrp;
  content: counter(admgrp, decimal-leading-zero);
  font-family: var(--font-mono); font-size: 9.5px; font-weight: 700;
  letter-spacing: 0; line-height: 1;
  color: var(--blue-ink); background: var(--blue-wash);
  border: 1px solid color-mix(in srgb, var(--blue) 28%, transparent);
  padding: 3px 4px 2px; border-radius: 0;
  flex: 0 0 auto; min-width: 20px; text-align: center;
  box-sizing: border-box;
}
.admin-v2-nav-group::after {
  content: ""; flex: 1; height: 0; min-width: 6px;
  border-top: 1px solid var(--rule-2);
}
.admin-v2-nav { counter-reset: admgrp; }

/* 菜单项：左侧 2px 选中指示条 + 硬边悬停底色 */
.admin-v2-nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 16px 8px 14px; margin: 0;
  border-left: 2px solid transparent;
  border-radius: 0;
  color: var(--ink-2); cursor: pointer;
  font-size: 13px; line-height: 1.35;
  transition: background .14s ease-out, color .14s ease-out, border-color .14s ease-out;
  position: relative;
}
.admin-v2-nav-item:hover { background: var(--paper-2); color: var(--ink); }
.admin-v2-nav-item.active {
  background: var(--blue-wash); color: var(--blue-ink);
  border-left-color: var(--blue); font-weight: 600;
}
.admin-v2-nav-item.active svg { opacity: 1; }
.admin-v2-nav-item svg {
  width: 16px; height: 16px; flex: 0 0 16px; opacity: .78;
  stroke-width: 1.7;
}
/* 选中项右侧的「当前」刻度线 —— 档案抽斗的标签位 */
.admin-v2-nav-item.active::after {
  content: ""; position: absolute; right: 0; top: 0; bottom: 0;
  width: 3px; background: var(--blue);
}

/* 侧栏底部：等宽 build 号 */
.admin-v2-side-foot {
  margin: auto 0 0; padding: 12px 16px 16px;
  border-top: 1px solid var(--rule-2);
  background: var(--paper-2);
  display: flex; flex-direction: column; align-items: flex-start; gap: 3px;
  text-align: left !important;
}
.admin-v2-side-foot #aBuild {
  font-family: var(--font-mono) !important; font-size: 10px !important;
  color: var(--ink-2) !important; letter-spacing: .04em; white-space: nowrap;
}
.admin-v2-side-foot #aCopy {
  font-size: 10px !important; color: var(--ink-3) !important; white-space: nowrap;
}

/* ---------- A10.4 主区 + 顶条 ---------- */
.admin-v2-main {
  flex: 1; min-width: 0; display: flex; flex-direction: column;
  background: transparent; min-height: 0;
}
.admin-v2-top {
  height: var(--adm-top); flex: 0 0 var(--adm-top);
  display: flex; align-items: center; gap: 14px;
  padding: 0 var(--adm-pad);
  background: color-mix(in srgb, var(--panel) 88%, transparent);
  backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--rule-2);
  position: sticky; top: 0; z-index: 20;
}
/* 面包屑：等宽小字 + 斜杠分隔，档案索引感 */
.admin-v2-crumb {
  font-family: var(--font-mono); font-size: 11px; letter-spacing: .06em;
  color: var(--ink-3); text-transform: uppercase;
}
.admin-v2-crumb b {
  font-family: var(--font-display); font-size: 13px; font-weight: 600;
  color: var(--ink); letter-spacing: 0; text-transform: none;
  margin-left: 2px;
}
.admin-v2-content { padding: var(--adm-pad); width: 100%; flex: 1; }

/* 顶条图标按钮：硬边方形，悬停描边加深 */
.admin-v2-top .admin-top-icon,
.admin-v2-top > div > .admin-top-icon,
.admin-v2-top button[class*="admin-top-icon"] {
  width: 34px !important; height: 34px !important;
  border-radius: var(--radius) !important;
  border: 1px solid var(--rule-2) !important;
  background: #fff !important;
  background-image: none !important;
  box-shadow: none !important;
  display: inline-flex !important; align-items: center !important; justify-content: center !important;
  cursor: pointer;
  transition: border-color .14s ease-out, background .14s ease-out;
  padding: 0 !important;
}
[data-theme="dark"] .admin-v2-top .admin-top-icon { background: var(--panel) !important; }
.admin-v2-top .admin-top-icon:hover { border-color: var(--blue) !important; background: var(--blue-wash) !important; }
.admin-v2-top .admin-top-icon svg { stroke: var(--ink-2) !important; }
.admin-v2-top .admin-top-icon:hover svg { stroke: var(--blue) !important; }

/* 用户胶囊：视图里写死了圆角与边框，这里按结构收敛为硬边方块 */
.admin-v2-top > div > div[style*="border-radius:999px"],
.admin-v2-top > div > div[style*="border-radius: 999px"] {
  border-radius: var(--radius) !important;
  border: 1px solid var(--rule-2) !important;
  background: var(--panel) !important;
  padding: 4px 11px 4px 4px !important;
}
/* 头像：渐变圆 → 墨蓝实心方 */
.admin-v2-top > div > div[style*="border-radius:999px"] > div:first-child,
.admin-v2-top > div > div[style*="border-radius: 999px"] > div:first-child {
  border-radius: 0 !important;
  background: var(--blue-ink) !important;
  font-family: var(--font-mono) !important;
}

/* ---------- A10.5 内容区基础组件（覆盖 app.css 的 v2） ---------- */

/* 卡片：取消投影，改用 1px 结构线 + 顶部强调刻度 */
.admin-v2-content .card {
  background: var(--panel);
  border: 1px solid var(--rule-2);
  border-radius: var(--radius);
  box-shadow: none;
  overflow: hidden;
  position: relative;
}
/* 卡片左上角的方向记号（仅大卡片，避免全场噪音） */
.admin-v2-content .card > .card-title {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap;
  margin: 0; padding: 13px 18px;
  border-bottom: 1px solid var(--rule);
  background: var(--paper-2);
}
.admin-v2-content .card > .card-title b {
  font-family: var(--font-display);
  font-size: 13.5px; font-weight: 700; color: var(--ink);
  letter-spacing: -0.005em;
  display: inline-flex; align-items: center; gap: 8px;
}
/* 卡片标题前的等宽方括号记号 —— 档案标签 */
.admin-v2-content .card > .card-title b::before {
  content: ""; width: 3px; height: 13px; background: var(--blue);
  flex: 0 0 3px; border-radius: 0;
}
.admin-v2-content .card > .card-title .meta {
  font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .04em;
  color: var(--ink-3);
}
/* 卡片体（标题之外的直接子元素）留白 */
.admin-v2-content .card > *:not(.card-title) { margin-left: 18px; margin-right: 18px; }
.admin-v2-content .card > *:not(.card-title):first-of-type { margin-top: 16px; }
.admin-v2-content .card > *:not(.card-title):last-child { margin-bottom: 18px; }
/* 表格式卡片：表格贴边，不受上面的留白影响 */
.admin-v2-content .card > .admin-table,
.admin-v2-content .card > .data-table,
.admin-v2-content .card > .table-wrap { margin-left: 0 !important; margin-right: 0 !important; }
.admin-v2-content .card > .admin-table:last-child,
.admin-v2-content .card > .data-table:last-child { margin-bottom: 0 !important; }

/* 页头：标题 + 说明，左侧加档案竖条 */
.admin-v2-content .page-head {
  display: flex; justify-content: space-between; align-items: flex-start;
  margin: 0 0 20px; flex-wrap: wrap; gap: 14px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--rule-2);
}
.admin-v2-content .page-title {
  font-family: var(--font-display);
  font-size: 19px; font-weight: 700; color: var(--ink);
  letter-spacing: -0.015em;
  display: inline-flex; align-items: center; gap: 10px;
}
.admin-v2-content .page-title::before {
  content: ""; width: 4px; height: 17px; background: var(--blue);
}
.admin-v2-content .page-desc {
  font-size: 12px; color: var(--ink-3); margin-top: 6px;
  padding-left: 14px;
  font-family: var(--font-mono); letter-spacing: .01em;
}

/* —— 表格：发丝线 + 等宽数字列 —— */
.admin-v2-content .admin-table,
.admin-v2-content .data-table {
  width: 100%; border-collapse: collapse; font-size: 12.5px;
}
.admin-v2-content .admin-table th,
.admin-v2-content .admin-table td,
.admin-v2-content .data-table th,
.admin-v2-content .data-table td {
  padding: 10px 14px; border-bottom: 1px solid var(--rule);
  text-align: left; vertical-align: middle;
}
.admin-v2-content .admin-table th,
.admin-v2-content .data-table th {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--ink-3); background: var(--paper-3);
  border-bottom: 1px solid var(--rule-2);
  white-space: nowrap;
}
.admin-v2-content .admin-table tr:last-child td,
.admin-v2-content .data-table tr:last-child td { border-bottom: 0; }
/* 表格首列的账号 / ID 用等宽，便于逐行比对 */
.admin-v2-content .admin-table td:first-child,
.admin-v2-content .data-table td:first-child { font-variant-numeric: tabular-nums; }
.admin-v2-content .admin-table tbody tr:hover td,
.admin-v2-content .data-table tbody tr:hover td { background: var(--blue-wash); }
/* 表格里的数字/时间自动等宽 */
.admin-v2-content .admin-table .num,
.admin-v2-content .data-table .num,
.admin-v2-content .admin-table td[data-num],
.admin-v2-content .admin-table td.mono {
  font-family: var(--font-mono); font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.admin-v2-content .admin-table .btn.sm { white-space: nowrap; }

/* —— 按钮：硬边、无投影、主色实心 —— */
.admin-v2-content .btn, .admin-top-icon + .btn {
  border-radius: var(--radius);
  transition: background .14s ease-out, border-color .14s ease-out, color .14s ease-out;
}
.admin-v2-content .btn {
  border: 1px solid var(--rule-2); background: var(--panel); color: var(--ink-2);
  font-weight: 600; box-shadow: none;
}
.admin-v2-content .btn:hover {
  border-color: var(--blue); color: var(--blue-ink); background: var(--blue-wash);
  filter: none; box-shadow: none;
}
.admin-v2-content .btn:active { transform: translateY(0); }
.admin-v2-content .btn.primary {
  background: var(--blue); color: #fff; border-color: var(--blue);
  box-shadow: none;
}
.admin-v2-content .btn.primary:hover { background: var(--blue-ink); border-color: var(--blue-ink); color: #fff; }
.admin-v2-content .btn.danger {
  background: var(--panel); color: var(--red); border-color: var(--red);
  box-shadow: none;
}
.admin-v2-content .btn.danger:hover { background: var(--red-wash); color: var(--red); }
.admin-v2-content .btn.ghost { background: transparent; border-color: transparent; color: var(--blue); }
.admin-v2-content .btn.ghost:hover { background: var(--blue-wash); }
.admin-v2-content .btn:disabled, .admin-v2-content .btn[disabled] {
  opacity: .42; box-shadow: none; pointer-events: none;
}

/* 视图中以内联样式写死的圆角控件（seg / switch / 状态胶囊）统一收敛 */
.admin-v2-content [style*="border-radius:999px"]:not(.tag):not(.badge),
.admin-v2-content [style*="border-radius: 999px"]:not(.tag):not(.badge) {
  border-radius: var(--radius) !important;
  box-shadow: none !important;
}
/* 内联的彩色胶囊统计（如「封禁账号 N 个」）统一为中性方标 */
.admin-v2-content span[style*="border-radius:999px"][style*="padding"] {
  font-family: var(--font-mono) !important;
  letter-spacing: .03em;
}

/* —— 表单控件：硬边 + 聚焦只换描边色（无光晕） —— */
.admin-v2-content .form-input,
.admin-v2-content input[type="text"],
.admin-v2-content input[type="number"],
.admin-v2-content input[type="email"],
.admin-v2-content input[type="password"],
.admin-v2-content input[type="search"],
.admin-v2-content select,
.admin-v2-content textarea {
  border-radius: var(--radius);
  border: 1px solid var(--rule-2);
  background: var(--panel);
  color: var(--ink);
  box-shadow: none;
  transition: border-color .14s ease-out;
}
.admin-v2-content .form-input:focus,
.admin-v2-content input:focus,
.admin-v2-content select:focus,
.admin-v2-content textarea:focus {
  border-color: var(--blue);
  box-shadow: none;
  outline: 2px solid var(--blue);
  outline-offset: 1px;
}
.admin-v2-content .form-err { color: var(--red); font-size: 12px; }
.admin-v2-content .search-input {
  border-radius: var(--radius); border: 1px solid var(--rule-2);
  background: var(--panel); box-shadow: none;
}

/* —— 开关：硬边轨道，无投影 —— */
.admin-v2-content .switch {
  width: 38px; height: 20px; border-radius: 999px;
  background: var(--rule-2); box-shadow: none;
  border: 1px solid var(--rule-3);
}
.admin-v2-content .switch::after {
  width: 14px; height: 14px; top: 2px; left: 2px;
  background: #fff; box-shadow: none; border: 1px solid var(--rule-2);
}
.admin-v2-content .switch.on { background: var(--blue); border-color: var(--blue); }
.admin-v2-content .switch.on::after { left: 20px; border-color: var(--blue); }

/* —— 分段控件（seg） —— */
.admin-v2-content .seg {
  display: inline-flex; background: var(--paper-2);
  border: 1px solid var(--rule-2); border-radius: var(--radius); padding: 2px;
}
.admin-v2-content .seg span {
  padding: 3px 11px; font-size: 11.5px; color: var(--ink-2);
  border-radius: 0; cursor: pointer;
  font-family: var(--font-mono); letter-spacing: .03em;
  transition: background .14s, color .14s;
}
.admin-v2-content .seg span.on { background: var(--blue); color: #fff; font-weight: 600; box-shadow: none; }

/* —— 标签（tag / badge）：方角 + 前置圆点 —— */
.admin-v2-content .tag {
  border-radius: var(--radius);
  font-family: var(--font-mono); font-size: 10.5px; font-weight: 600;
  letter-spacing: .05em; text-transform: uppercase;
  padding: 2px 8px; gap: 6px; margin-top: 0;
  border: 1px solid transparent;
}
.admin-v2-content .tag::before { width: 4px; height: 4px; flex: 0 0 4px; border-radius: 50%; }
.admin-v2-content .tag.ok { background: var(--green-wash); color: var(--green); border-color: var(--green); }
.admin-v2-content .tag.wait { background: var(--amber-wash); color: var(--amber); border-color: var(--amber); }
.admin-v2-content .tag.err { background: var(--red-wash); color: var(--red); border-color: var(--red); }
.admin-v2-content .tag.vip { background: var(--blue-wash); color: var(--blue-ink); border-color: var(--blue); }
.admin-v2-content .tag.vip.solid { background: var(--blue-ink); color: #fff; border-color: var(--blue-ink); }
/* 无状态类的基础 tag：灰描边中性标签 */
.admin-v2-content .tag:not(.ok):not(.wait):not(.err):not(.vip) {
  background: var(--paper-2); color: var(--ink-2); border-color: var(--rule-2);
}
.admin-v2-content .tag:not(.ok):not(.wait):not(.err):not(.vip)::before { background: var(--ink-4); }
.admin-v2-content .badge {
  border-radius: var(--radius); font-family: var(--font-mono);
  font-size: 10.5px; letter-spacing: .04em;
}

/* —— 说明文字（stats-line）：等宽小字 —— */
.admin-v2-content .stats-line {
  font-size: 12px; color: var(--ink-3); margin: 6px 0 12px;
  letter-spacing: .01em;
}
.admin-v2-content .stats-line b { color: var(--ink); font-weight: 600; }

/* —— 次级标签页（admin-tabs） —— */
.admin-v2-content .admin-tabs {
  display: flex; gap: 0; flex-wrap: wrap; margin-bottom: 18px;
  background: transparent; border: 0; border-bottom: 1px solid var(--rule-2);
  border-radius: 0; padding: 0; width: 100%;
}
.admin-v2-content .admin-tabs button {
  padding: 9px 15px; border: 0; border-bottom: 2px solid transparent;
  border-radius: 0; background: transparent; color: var(--ink-3);
  font-size: 12.5px; font-weight: 600; margin-bottom: -1px;
  transition: color .14s, border-color .14s;
}
.admin-v2-content .admin-tabs button:hover { color: var(--ink); }
.admin-v2-content .admin-tabs button.active {
  color: var(--blue); border-bottom-color: var(--blue); background: transparent;
  box-shadow: none;
}

/* ---------- A10.6 结构化条目 / 统计 / 反馈态 ---------- */

/* 后台内的近期更新流（复用前台 .upd-* 结构）窄化为「抽屉清单」 */
.admin-v2-content .upd-list { border-radius: var(--radius); }
.admin-v2-content .upd-item { border-bottom: 1px solid var(--rule); }
.admin-v2-content .upd-item:last-child { border-bottom: 0; }

/* 键值表：等宽键名 */
.admin-v2-content .kv {
  display: grid; grid-template-columns: 92px 1fr;
  gap: 9px 14px; font-size: 12.5px; margin-bottom: 14px;
}
.admin-v2-content .kv dt {
  font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .08em;
  text-transform: uppercase; color: var(--ink-3); padding-top: 2px;
}
.admin-v2-content .kv dd { color: var(--ink); min-width: 0; word-break: break-word; }

/* 统计数字块（KPI）：硬边 + 顶部刻度，无投影 */
.admin-v2-content .stat-tiles {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(168px, 1fr)); gap: 0;
  border: 1px solid var(--rule-2); background: var(--panel);
  margin-bottom: 16px;
}
/* 统计条与下一区块共用一条 1px 线，不叠加成 2px */
.admin-v2-content .stat-tiles + * { margin-top: 0 !important; }
.admin-v2-content .stat-tile { padding: 15px 18px 16px; border-right: 1px solid var(--rule); position: relative; }
.admin-v2-content .stat-tile:last-child { border-right: 0; }
.admin-v2-content .stat-tile::before {
  content: ""; position: absolute; left: 0; top: 0; width: 100%; height: 2px; background: var(--blue);
  transform: scaleX(0); transform-origin: left; transition: transform .2s ease-out;
}
.admin-v2-content .stat-tile:hover::before { transform: scaleX(1); }
.admin-v2-content .stat-tile .k {
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3);
}
.admin-v2-content .stat-tile .v {
  font-family: var(--font-mono); font-size: 25px; font-weight: 600;
  color: var(--ink); line-height: 1.1; margin-top: 7px;
  font-variant-numeric: tabular-nums; letter-spacing: -0.02em;
}
.admin-v2-content .stat-tile .d { font-size: 11.5px; color: var(--ink-3); margin-top: 5px; }

/* 反馈：空态 / 加载 / 骨架 */
.admin-v2-content .empty-state { padding: 46px 20px; color: var(--ink-3); font-size: 12.5px; }
.admin-v2-content .empty-state .empty-icon { font-size: 26px; opacity: .5; margin-bottom: 10px; }
.admin-v2-content .empty-title { font-family: var(--font-display); font-size: 14px; font-weight: 600; color: var(--ink-2); }
.admin-v2-content .loading-line { font-family: var(--font-mono); font-size: 11.5px; letter-spacing: .06em; color: var(--ink-3); text-transform: uppercase; }
.admin-v2-content .skeleton {
  background: linear-gradient(90deg, var(--paper-2) 25%, var(--paper-3) 50%, var(--paper-2) 75%);
  background-size: 200% 100%; border-radius: var(--radius);
}
.admin-v2-content .spinner { border-color: var(--rule-3); border-top-color: var(--blue); }

/* 顶条与内容区之间的细分割：内容首行不再紧贴 */
.admin-v2-content > .page-head:first-child { margin-top: 0; }

/* 长表格容器 */
.admin-v2-content .table-wrap { border: 1px solid var(--rule-2); background: var(--panel); border-radius: var(--radius); }
.admin-v2-content .table-wrap table { min-width: 640px; }

/* 分页 / 批量操作条 */
.admin-v2-content .pager { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.admin-v2-content .pager button {
  min-width: 30px; height: 30px; padding: 0 9px;
  border: 1px solid var(--rule-2); background: var(--panel); color: var(--ink-2);
  border-radius: var(--radius); font-family: var(--font-mono); font-size: 12px;
}
.admin-v2-content .pager button:hover { border-color: var(--blue); color: var(--blue-ink); background: var(--blue-wash); }
.admin-v2-content .pager button.active { background: var(--blue); border-color: var(--blue); color: #fff; }

/* 提示条（notice / alert）硬边化 */
.admin-v2-content .alert,
.admin-v2-content .notice {
  border-radius: var(--radius); border: 1px solid var(--rule-2);
  border-left: 3px solid var(--blue); background: var(--blue-wash);
  padding: 11px 14px; font-size: 12.5px; color: var(--ink-2);
}


/* ---------- A10.9 旧视图残留样式归一（32 个后台视图共用同一套内联写法） ----------
   这些视图把「渐变圆形图标徽标 / 圆角进度条 / 圆角统计胶囊」写成了内联样式。
   逐文件改写风险大且易漏，这里按特征统一收敛为档案室语汇：
     · 页头圆形渐变徽标 → 硬边方形 + 中性面 + 蓝描边
     · 圆角进度条 → 硬边方条
     · 圆角胶囊统计 → 方角等宽标签
   注：属性选择器需与视图里字面量一致（注意有/无空格两种写法）。
--------------------------------------------------------------------------- */

/* 页头 / 卡片内的图标徽标：一律变为硬边方块 */
.admin-v2-content [style*="border-radius:10px"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:9px"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:8px"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:50%"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:12px"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:14px"][style*="linear-gradient"] {
  border-radius: var(--radius) !important;
  background-image: none !important;
  background-color: var(--blue-wash) !important;
  border: 1px solid var(--rule-2) !important;
  box-shadow: none !important;
  color: var(--blue-ink) !important;
}
/* 徽标里的 SVG 描边跟随文字色 */
.admin-v2-content [style*="border-radius:10px"][style*="linear-gradient"] svg,
.admin-v2-content [style*="border-radius:9px"][style*="linear-gradient"] svg,
.admin-v2-content [style*="border-radius:50%"][style*="linear-gradient"] svg {
  stroke: var(--blue-ink) !important;
}
/* 内联写死 stroke 的图标 */
.admin-v2-content svg[stroke="#fff"], .admin-v2-content svg[style*="stroke: #fff"] { stroke: var(--blue-ink) !important; }

/* 圆角进度条（report / storage）→ 硬边方条 */
.admin-v2-content [style*="border-radius:99px"],
.admin-v2-content [style*="border-radius: 99px"] {
  border-radius: 0 !important;
}
.admin-v2-content [style*="border-radius:99px"][style*="linear-gradient"],
.admin-v2-content [style*="border-radius:99px"][style*="linear-gradient"]:first-child {
  background: var(--blue) !important;
  background-image: none !important;
}
/* 进度条轨道（内联的浅蓝底）统一为中性面 */
.admin-v2-content [style*="height:14px"][style*="overflow:hidden"],
.admin-v2-content [style*="height:7px"][style*="overflow:hidden"] {
  background: var(--paper-3) !important;
  border: 1px solid var(--rule) !important;
}

/* 内联写死的旧色值 → token 化（文字/边框/底色） */
.admin-v2-content [style*="color:#1b2438"], .admin-v2-content [style*="color: #1b2438"],
.admin-v2-content [style*="color:#1f2430"], .admin-v2-content [style*="color: #1f2430"] { color: var(--ink) !important; }
.admin-v2-content [style*="color:#5e6a7c"], .admin-v2-content [style*="color: #5e6a7c"],
.admin-v2-content [style*="color:#66738f"], .admin-v2-content [style*="color: #66738f"] { color: var(--ink-2) !important; }
.admin-v2-content [style*="color:#98a3b8"], .admin-v2-content [style*="color: #98a3b8"],
.admin-v2-content [style*="color:#9aa3b2"], .admin-v2-content [style*="color: #9aa3b2"] { color: var(--ink-3) !important; }
.admin-v2-content [style*="color:#3b5bdb"], .admin-v2-content [style*="color: #3b5bdb"] { color: var(--blue) !important; }
.admin-v2-content [style*="border:1px solid #e6eaf2"], .admin-v2-content [style*="border: 1px solid #e6eaf2"],
.admin-v2-content [style*="border:1px solid #e5eaf4"], .admin-v2-content [style*="border: 1px solid #e5eaf4"] {
  border-color: var(--rule-2) !important;
}
.admin-v2-content [style*="background:#f6f8fc"], .admin-v2-content [style*="background: #f6f8fc"],
.admin-v2-content [style*="background:#eef1fb"], .admin-v2-content [style*="background: #eef1fb"],
.admin-v2-content [style*="background:#fafbfe"], .admin-v2-content [style*="background: #fafbfe"] {
  background: var(--paper-2) !important;
}

/* 内联写死 Consolas 的地方统一到等宽 token */
.admin-v2-content [style*="Consolas"], .admin-v2-content [style*="consolas"] {
  font-family: var(--font-mono) !important;
  font-variant-numeric: tabular-nums;
}

/* 深色下上述归一同样生效：中性面改用深色纸 */
[data-theme="dark"] .admin-v2-content [style*="border-radius:10px"][style*="linear-gradient"],
[data-theme="dark"] .admin-v2-content [style*="border-radius:9px"][style*="linear-gradient"],
[data-theme="dark"] .admin-v2-content [style*="border-radius:50%"][style*="linear-gradient"],
[data-theme="dark"] .admin-v2-content [style*="border-radius:12px"][style*="linear-gradient"] {
  background-color: var(--blue-wash) !important;
  border-color: var(--rule-2) !important;
  color: var(--blue) !important;
}
[data-theme="dark"] .admin-v2-content [style*="border-radius:99px"][style*="linear-gradient"] { background: var(--blue) !important; }

/* ---------- A10.7 后台响应式（必须在 app.css 之后，覆盖其后台断点） ---------- */
@media (max-width: 1180px) {
  body.admin-mode { --adm-rail: 216px; --adm-pad: 20px; }
  .admin-v2-content .stat-tile { padding: 13px 15px 14px; }
  .admin-v2-content .stat-tile .v { font-size: 22px; }
}

@media (max-width: 1024px) {
  body.admin-mode { --adm-pad: 18px; }
  .admin-v2-content .admin-grid-4 { grid-template-columns: repeat(2, 1fr); }
  .admin-v2-content .admin-grid-3 { grid-template-columns: repeat(2, 1fr); }
}

/* 侧栏收缩为「图标轨」：分组编号变成唯一的层级线索 */
@media (max-width: 900px) {
  body.admin-mode { --adm-rail: 62px; }
  .admin-v2-brand { justify-content: center; padding: 14px 0 13px; }
  .admin-v2-nav { padding: 2px 0 14px; }
  .admin-v2-nav-group {
    margin: 15px 0 5px; padding: 0 0 5px;
    justify-content: center; gap: 0;
    border-bottom: 0;
  }
  .admin-v2-nav-group::before { font-size: 9px; letter-spacing: .04em; }
  .admin-v2-nav-item { justify-content: center; padding: 9px 0; border-left-width: 2px; }
  .admin-v2-nav-item svg { width: 18px; height: 18px; flex: 0 0 18px; }
  .admin-v2-nav-item.active::after { width: 2px; height: 20px; }
  .admin-v2-side-foot { padding: 10px 0 12px; align-items: center; }
  .admin-v2-side-foot #aBuild { font-size: 9px !important; letter-spacing: 0; }
  .admin-v2-side-foot #aCopy { display: none !important; }
  .admin-v2-content { padding: 16px 16px 34px; }
  .admin-v2-content .admin-grid-2,
  .admin-v2-content .admin-grid-3,
  .admin-v2-content .admin-grid-4,
  .admin-v2-content .admin-grid-wide,
  .admin-v2-content .admin-grid-narrow { grid-template-columns: 1fr; }
}

@media (max-width: 768px) {
  body.admin-mode { --adm-top: 52px; --adm-pad: 13px; }
  .admin-v2-content .stat-tiles { grid-template-columns: repeat(2, 1fr); }
  .admin-v2-content .stat-tile { border-right: 1px solid var(--rule); border-bottom: 1px solid var(--rule); }
  .admin-v2-content .stat-tile:nth-child(2n) { border-right: 0; }
  .admin-v2-content .stat-tiles > .stat-tile:last-child { border-bottom: 0; }
  .admin-v2-content .page-title { font-size: 17px; }
  .admin-v2-content .page-head { margin-bottom: 15px; padding-bottom: 11px; }
  .admin-v2-content .card > .card-title { padding: 11px 14px; }
  .admin-v2-content .card > *:not(.card-title) { margin-left: 14px; margin-right: 14px; }
  .admin-v2-content .card > *:not(.card-title):first-of-type { margin-top: 13px; }
  .admin-v2-content .card > *:not(.card-title):last-child { margin-bottom: 14px; }
  /* 表格允许横向滚动而不撑破内容区 */
  .admin-v2-content .card > .admin-table,
  .admin-v2-content .card > .data-table { overflow-x: auto; display: block; }
  .admin-v2-content .admin-table th,
  .admin-v2-content .admin-table td,
  .admin-v2-content .data-table th,
  .admin-v2-content .data-table td { padding: 9px 11px; }
  .admin-v2-content .admin-tabs { overflow-x: auto; flex-wrap: nowrap; }
  .admin-v2-content .admin-tabs button { white-space: nowrap; flex: 0 0 auto; }
  .admin-v2-content .kv { grid-template-columns: 84px 1fr; font-size: 12px; }
}

/* 极窄屏：侧栏整体隐藏，靠顶条面包屑导航 */
@media (max-width: 640px) {
  body.admin-mode { --adm-pad: 11px; }
  .admin-v2-side { display: none; }
  .admin-v2-top { padding: 0 12px; gap: 9px; }
  .admin-v2-crumb { font-size: 10.5px; }
  .admin-v2-crumb b { font-size: 12.5px; }
  .admin-v2-content .stat-tiles { grid-template-columns: 1fr; }
  .admin-v2-content .stat-tile { border-right: 0; }
  .admin-v2-content .page-desc { padding-left: 0; }
  .admin-v2-content .page-title::before { height: 15px; }
}


/* ---------- A10.8 看板专用的结构组件（替换旧的 gradient 内联样式） ---------- */

/* 趋势柱：硬边轨道 + 等宽日期 */
.admin-v2-content .adm-trend { display: flex; flex-direction: column; gap: 17px; }
.admin-v2-content .adm-trend-row { display: flex; flex-direction: column; gap: 8px; }
.admin-v2-content .adm-trend-key { display: flex; align-items: center; gap: 7px; }
.admin-v2-content .adm-trend-key .dot { width: 8px; height: 8px; flex: 0 0 8px; border-radius: 0; }
.admin-v2-content .adm-trend-key b { font-size: 12px; color: var(--ink); font-weight: 600; }
.admin-v2-content .adm-bars { display: flex; gap: 5px; }
.admin-v2-content .adm-bar { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 5px; }
.admin-v2-content .adm-bar-track {
  width: 100%; max-width: 26px; height: 68px;
  display: flex; align-items: flex-end;
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-bottom: 2px solid var(--rule-2);
  border-radius: 0;
}
.admin-v2-content .adm-bar-fill { width: 100%; border-radius: 0; min-height: 2px; }
.admin-v2-content .adm-bar-day {
  font-family: var(--font-mono); font-size: 9.5px; color: var(--ink-4);
  letter-spacing: .02em;
}

/* 同步状态清单：抽屉式行 */
.admin-v2-content .adm-status-list { display: flex; flex-direction: column; }
.admin-v2-content .adm-status-row {
  display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 11px 18px; border-bottom: 1px solid var(--rule);
}
.admin-v2-content .adm-status-list > .adm-status-row:last-child { border-bottom: 0; }
.admin-v2-content .adm-status-row .label { font-size: 12.5px; color: var(--ink); font-weight: 500; }
.admin-v2-content .adm-status-row .right { display: inline-flex; align-items: center; gap: 9px; }
.admin-v2-content .adm-status-row .when {
  font-family: var(--font-mono); font-size: 10.5px; color: var(--ink-3);
}

/* 待办清单 */
.admin-v2-content .adm-todo-list { display: flex; flex-direction: column; }
.admin-v2-content .adm-todo {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 18px; border-bottom: 1px solid var(--rule);
}
.admin-v2-content .adm-todo-list > .adm-todo:last-child { border-bottom: 0; }
.admin-v2-content .adm-todo .ico {
  width: 30px; height: 30px; flex: 0 0 30px; border-radius: var(--radius);
  border: 1px solid var(--rule-2); background: var(--paper-2);
  display: flex; align-items: center; justify-content: center; color: var(--ink-2);
}
.admin-v2-content .adm-todo .ico svg { width: 15px; height: 15px; }
.admin-v2-content .adm-todo .ico.wait { border-color: var(--amber); background: var(--amber-wash); color: var(--amber); }
.admin-v2-content .adm-todo .ico.err  { border-color: var(--red);   background: var(--red-wash);   color: var(--red); }
.admin-v2-content .adm-todo .ico.ok   { border-color: var(--green); background: var(--green-wash); color: var(--green); }
.admin-v2-content .adm-todo .txt { flex: 1; min-width: 0; }
.admin-v2-content .adm-todo .txt b { display: block; font-size: 12.5px; color: var(--ink); font-weight: 600; }
.admin-v2-content .adm-todo .txt span { display: block; font-size: 11px; color: var(--ink-3); margin-top: 2px; }
.admin-v2-content .adm-todo .val {
  font-family: var(--font-mono); font-size: 12.5px; color: var(--ink); font-weight: 600;
  white-space: nowrap;
}
.admin-v2-content .adm-todo .val.ok { color: var(--green); }
.admin-v2-content .adm-todo .val.warn { color: var(--amber); }
.admin-v2-content .adm-todo .val.bad { color: var(--red); }

/* 卡片若无 card-title，通体留白由内边距承担 */
.admin-v2-content .card { padding: 0; }
.admin-v2-content .card > .card-title:first-child { margin-top: 0; }
.admin-v2-content .card:not(:has(> .card-title)) { padding: 16px 18px; }
.admin-v2-content .card:not(:has(> .card-title)) > * { margin-left: 0; margin-right: 0; }
.admin-v2-content .card:not(:has(> .card-title)) > *:first-child { margin-top: 0; }
.admin-v2-content .card:not(:has(> .card-title)) > *:last-child { margin-bottom: 0; }
.admin-v2-content .card:not(:has(> .card-title)) > .admin-table,
.admin-v2-content .card:not(:has(> .card-title)) > .data-table { margin: -16px -18px; width: calc(100% + 36px); }

/* 深色主题下的后台微调：网格纹理更弱，表头更沉 */
[data-theme="dark"] body.admin-mode {
  --paper:   #0a0d11;
  --paper-2: #12161b;
  --paper-3: #1b2027;
  --panel:   #161b21;
  background-size: 88px 88px;
}
[data-theme="dark"] .admin-v2-content .admin-table th,
[data-theme="dark"] .admin-v2-content .data-table th { background: var(--paper-3); }
[data-theme="dark"] .admin-top-icon svg { stroke: var(--ink-2) !important; }
[data-theme="dark"] .admin-v2-top .admin-top-icon { background: var(--panel) !important; }
/* 深色下图表轨道需要可见的底色与更亮的边线 */
[data-theme="dark"] .admin-v2-content .adm-bar-track {
  background: #1e242c; border-color: var(--rule-2); border-bottom-color: var(--rule-3);
}
/* 深色下墨蓝实心标签改用亮蓝，保证对比度 */
[data-theme="dark"] .admin-v2-content .tag.vip.solid {
  background: #2a3f6b; color: #dce7ff; border-color: #3b5486;
}
[data-theme="dark"] .admin-v2-content .stat-tiles { background: var(--panel); }
