/* ========== 科技蓝主题 ========== */
:root {
  --primary: #1a73e8;
  --primary-dark: #0d47a1;
  --primary-light: #4a9af5;
  --primary-bg: #e8f0fe;
  --accent: #00bcd4;
  --success: #00c853;
  --warning: #ff9800;
  --danger: #f44336;
  --bg-main: #f0f4fa;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #0d2b5e 0%, #1a3a7a 100%);
  --bg-header: linear-gradient(90deg, #0d47a1 0%, #1565c0 50%, #1a73e8 100%);
  --text-primary: #1a2533;
  --text-secondary: #5a6a85;
  --text-light: #ffffff;
  --text-sidebar: rgba(255,255,255,0.85);
  --border: #dce3f0;
  --shadow-sm: 0 2px 8px rgba(13,71,161,0.08);
  --shadow-md: 0 4px 20px rgba(13,71,161,0.12);
  --shadow-lg: 0 8px 32px rgba(13,71,161,0.16);
  --radius: 10px;
  --radius-sm: 6px;
  --transition: all 0.25s ease;
  --primary-deep: #123a63;
  --border-strong: #c5cfe0;
  --bg-page-soft: #f8faff;
  --bg-auth: linear-gradient(135deg, #0a2351 0%, #0d47a1 40%, #1976d2 100%);
  --grad-avatar: linear-gradient(135deg, #1a73e8, #00bcd4);
  /* Element Plus 主题联动（默认教育蓝） */
  --el-color-primary: #1a73e8;
  --el-color-primary-light-3: #5f9def;
  --el-color-primary-light-5: #8cb9f3;
  --el-color-primary-light-7: #bad5f8;
  --el-color-primary-light-8: #d1e3fa;
  --el-color-primary-light-9: #e8f1fc;
  --el-color-primary-dark-2: #155cba;
}

/* ========== 五套界面主题（账号级，body[data-theme] 覆盖） ========== */
body[data-theme='blue'] {
  --primary: #1a73e8;
  --primary-dark: #1456ae;
  --primary-light: #5396ee;
  --primary-deep: #0e3f80;
  --primary-bg: #e4eefc;
  --accent: #00bcd4;
  --bg-main: #f4f8fe;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #0d3871 0%, #1456ae 100%);
  --bg-header: linear-gradient(90deg, #1456ae 0%, #1764cb 50%, #1a73e8 100%);
  --bg-auth: linear-gradient(135deg, #0a2c5a 0%, #1456ae 40%, #1a73e8 100%);
  --grad-avatar: linear-gradient(135deg, #1a73e8, #00bcd4);
  --bg-page-soft: #f4f8fe;
  --border-strong: #d1e3fa;
  --border: #e4eefc;
  --shadow-sm: 0 2px 8px rgba(14,63,128,0.08);
  --shadow-md: 0 4px 20px rgba(14,63,128,0.12);
  --shadow-lg: 0 8px 32px rgba(14,63,128,0.16);
  --el-color-primary: #1a73e8;
  --el-color-primary-light-3: #5f9def;
  --el-color-primary-light-5: #8cb9f4;
  --el-color-primary-light-7: #bad5f8;
  --el-color-primary-light-8: #d1e3fa;
  --el-color-primary-light-9: #e8f1fd;
  --el-color-primary-dark-2: #155cba;
}

body[data-theme='green'] {
  --primary: #10b981;
  --primary-dark: #0c8b61;
  --primary-light: #4ccaa0;
  --primary-deep: #096647;
  --primary-bg: #e2f7f0;
  --accent: #34d399;
  --bg-main: #f3fcf9;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #085a3f 0%, #0c8b61 100%);
  --bg-header: linear-gradient(90deg, #0c8b61 0%, #0ea271 50%, #10b981 100%);
  --bg-auth: linear-gradient(135deg, #064732 0%, #0c8b61 40%, #10b981 100%);
  --grad-avatar: linear-gradient(135deg, #10b981, #34d399);
  --bg-page-soft: #f3fcf9;
  --border-strong: #cff1e6;
  --border: #e2f7f0;
  --shadow-sm: 0 2px 8px rgba(9,102,71,0.08);
  --shadow-md: 0 4px 20px rgba(9,102,71,0.12);
  --shadow-lg: 0 8px 32px rgba(9,102,71,0.16);
  --el-color-primary: #10b981;
  --el-color-primary-light-3: #58cea7;
  --el-color-primary-light-5: #88dcc0;
  --el-color-primary-light-7: #b7ead9;
  --el-color-primary-light-8: #cff1e6;
  --el-color-primary-light-9: #e7f8f2;
  --el-color-primary-dark-2: #0d9467;
}

body[data-theme='red'] {
  --primary: #cf1322;
  --primary-dark: #9b0e1a;
  --primary-light: #db4e59;
  --primary-deep: #720a13;
  --primary-bg: #f9e3e4;
  --accent: #ff9c8f;
  --bg-main: #fdf3f4;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #650911 0%, #9b0e1a 100%);
  --bg-header: linear-gradient(90deg, #9b0e1a 0%, #b5101e 50%, #cf1322 100%);
  --bg-auth: linear-gradient(135deg, #50070d 0%, #9b0e1a 40%, #cf1322 100%);
  --grad-avatar: linear-gradient(135deg, #cf1322, #ff9c8f);
  --bg-page-soft: #fdf3f4;
  --border-strong: #f5d0d3;
  --border: #f9e3e4;
  --shadow-sm: 0 2px 8px rgba(114,10,19,0.08);
  --shadow-md: 0 4px 20px rgba(114,10,19,0.12);
  --shadow-lg: 0 8px 32px rgba(114,10,19,0.16);
  --el-color-primary: #cf1322;
  --el-color-primary-light-3: #dd5a64;
  --el-color-primary-light-5: #e78990;
  --el-color-primary-light-7: #f1b8bd;
  --el-color-primary-light-8: #f5d0d3;
  --el-color-primary-light-9: #fae7e9;
  --el-color-primary-dark-2: #a60f1b;
}

body[data-theme='purple'] {
  --primary: #6d28d9;
  --primary-dark: #521ea3;
  --primary-light: #925ee2;
  --primary-deep: #3c1677;
  --primary-bg: #ede5fa;
  --accent: #a78bfa;
  --bg-main: #f8f4fd;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #35146a 0%, #521ea3 100%);
  --bg-header: linear-gradient(90deg, #521ea3 0%, #6023be 50%, #6d28d9 100%);
  --bg-auth: linear-gradient(135deg, #2a0f53 0%, #521ea3 40%, #6d28d9 100%);
  --grad-avatar: linear-gradient(135deg, #6d28d9, #a78bfa);
  --bg-page-soft: #f8f4fd;
  --border-strong: #e2d4f7;
  --border: #ede5fa;
  --shadow-sm: 0 2px 8px rgba(60,22,119,0.08);
  --shadow-md: 0 4px 20px rgba(60,22,119,0.12);
  --shadow-lg: 0 8px 32px rgba(60,22,119,0.16);
  --el-color-primary: #6d28d9;
  --el-color-primary-light-3: #9968e4;
  --el-color-primary-light-5: #b694ec;
  --el-color-primary-light-7: #d3bef4;
  --el-color-primary-light-8: #e2d4f7;
  --el-color-primary-light-9: #f0eafb;
  --el-color-primary-dark-2: #5720ae;
}

body[data-theme='teal'] {
  --primary: #0f766e;
  --primary-dark: #0b5852;
  --primary-light: #4b9892;
  --primary-deep: #08413c;
  --primary-bg: #e2efee;
  --accent: #2dd4bf;
  --bg-main: #f3f8f8;
  --bg-card: #ffffff;
  --bg-sidebar: linear-gradient(180deg, #073935 0%, #0b5852 100%);
  --bg-header: linear-gradient(90deg, #0b5852 0%, #0d6760 50%, #0f766e 100%);
  --bg-auth: linear-gradient(135deg, #062e2a 0%, #0b5852 40%, #0f766e 100%);
  --grad-avatar: linear-gradient(135deg, #0f766e, #2dd4bf);
  --bg-page-soft: #f3f8f8;
  --border-strong: #cfe4e2;
  --border: #e2efee;
  --shadow-sm: 0 2px 8px rgba(8,65,60,0.08);
  --shadow-md: 0 4px 20px rgba(8,65,60,0.12);
  --shadow-lg: 0 8px 32px rgba(8,65,60,0.16);
  --el-color-primary: #0f766e;
  --el-color-primary-light-3: #579f9a;
  --el-color-primary-light-5: #87bab6;
  --el-color-primary-light-7: #b7d6d4;
  --el-color-primary-light-8: #cfe4e2;
  --el-color-primary-light-9: #e7f1f0;
  --el-color-primary-dark-2: #0c5e58;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 14px; color: var(--text-primary); background: var(--bg-main); }
a { color: var(--primary); text-decoration: none; }
a:hover { color: var(--primary-dark); }

/* ===== Element Plus 主题覆盖 ===== */
.el-button--primary {
  --el-button-bg-color: var(--primary);
  --el-button-border-color: var(--primary);
  --el-button-hover-bg-color: var(--primary-light);
  --el-button-hover-border-color: var(--primary-light);
  --el-button-active-bg-color: var(--primary-dark);
  --el-button-active-border-color: var(--primary-dark);
}
.el-menu-item.is-active { color: var(--primary) !important; }
.el-tree-node.is-current > .el-tree-node__content { background: var(--primary-bg) !important; color: var(--primary) !important; }

/* ===== 登录页 ===== */
.login-page {
  height: 100vh;
  background: var(--bg-auth);
  display: flex; align-items: center; justify-content: center;
  position: relative; overflow: hidden;
}
.login-page::before {
  content: ''; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%;
  background: radial-gradient(circle at 30% 50%, rgba(0,188,212,0.15) 0%, transparent 50%),
              radial-gradient(circle at 70% 80%, rgba(26,115,232,0.2) 0%, transparent 50%);
  animation: bgFloat 20s ease-in-out infinite;
}
@keyframes bgFloat { 0%,100%{transform:translate(0,0)} 50%{transform:translate(-30px,20px)} }

.login-card {
  position: relative; z-index: 1;
  background: rgba(255,255,255,0.97);
  border-radius: 16px; padding: 48px 40px; width: 420px;
  box-shadow: 0 20px 60px rgba(0,0,0,0.3);
  backdrop-filter: blur(10px);
}
.login-logo {
  text-align: center; margin-bottom: 32px;
}
.login-logo .icon {
  width: 72px; height: 72px; margin: 0 auto 16px;
  background: linear-gradient(135deg, var(--primary), var(--accent));
  border-radius: 18px; display: flex; align-items: center; justify-content: center;
  font-size: 36px; color: #fff;
  box-shadow: 0 8px 24px rgba(26,115,232,0.4);
}
.login-logo h1 { font-size: 22px; color: var(--primary-dark); font-weight: 700; margin-bottom: 6px; }
.login-logo p { font-size: 13px; color: var(--text-secondary); }
.login-form .el-input { margin-bottom: 20px; }
.login-btn { width: 100%; height: 44px; font-size: 16px; border-radius: 8px !important;
  background: linear-gradient(135deg, var(--primary), var(--primary-light)) !important; border: none !important; }
.login-tip { text-align: center; font-size: 12px; color: #999; margin-top: 20px; }
.login-divider { display: flex; align-items: center; margin: 18px 0 14px; color: #bbb; font-size: 13px; }
.login-divider::before, .login-divider::after { content: ''; flex: 1; height: 1px; background: #eee; }
.login-divider span { padding: 0 12px; }
.wecom-btn { width: 100%; height: 44px; font-size: 16px; border-radius: 8px !important;
  background: #07C160 !important; border: none !important; color: #fff !important; }
.wecom-btn:hover { background: #06ad56 !important; }
.bind-head { text-align: center; font-size: 15px; font-weight: 600; color: #333; margin-bottom: 8px; }
.bind-name { text-align: center; font-size: 18px; color: #07C160; font-weight: 600; margin: 0 0 4px; }
.bind-tip { text-align: center; font-size: 12px; color: #999; margin: 0 0 18px; line-height: 1.6; }

/* ===== 主布局 ===== */
.layout { height: 100vh; display: flex; flex-direction: column; }

/* 顶部导航 */
.header {
  height: 56px; background: var(--bg-header);
  display: flex; align-items: center; padding: 0 24px;
  color: var(--text-light); box-shadow: 0 2px 12px rgba(0,0,0,0.15);
  z-index: 100;
}
.header-logo { display: flex; align-items: center; gap: 10px; font-size: 18px; font-weight: 600; min-width: 240px; }
.header-logo .logo-icon {
  width: 36px; height: 36px; background: rgba(255,255,255,0.2); border-radius: 8px;
  display: flex; align-items: center; justify-content: center; font-size: 20px;
  backdrop-filter: blur(4px);
}
.header-year { flex: 1; display: flex; align-items: center; gap: 8px; padding-left: 24px; }
.header-year .year-tag {
  padding: 6px 16px; border-radius: 20px; cursor: pointer; font-size: 13px;
  background: rgba(255,255,255,0.15); transition: var(--transition);
  border: 1px solid rgba(255,255,255,0.2);
}
.header-year .year-tag:hover { background: rgba(255,255,255,0.25); }
.header-year .year-tag.active {
  background: #fff; color: var(--primary-dark); font-weight: 600;
  box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.header-year .year-tag.archived { opacity: 0.6; font-size: 12px; }
.header-year .year-tag.current-year-tag { cursor: default; }
.header-year .year-tag.current-year-tag.archived { opacity: 1; font-size: 13px; }
.header-year .archive-dropdown-btn {
  padding: 6px 14px; border-radius: 20px; cursor: pointer; font-size: 12px;
  background: rgba(255,255,255,0.15); border: 1px dashed rgba(255,255,255,0.35);
  color: #fff; display: inline-flex; align-items: center; gap: 4px;
  transition: var(--transition); outline: none;
}
.header-year .archive-dropdown-btn:hover { background: rgba(255,255,255,0.25); }
.header-year .add-year-btn {
  background: rgba(255,255,255,0.15); border: 1px dashed rgba(255,255,255,0.4);
  color: #fff; width: 32px; height: 32px; border-radius: 50%; cursor: pointer;
  display: flex; align-items: center; justify-content: center; transition: var(--transition);
}
.header-year .add-year-btn:hover { background: rgba(255,255,255,0.3); transform: scale(1.1); }
.header-clock {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.35;
  margin-right: 18px;
}
.header-clock .clock-date {
  font-size: 11px;
  color: rgba(255,255,255,0.75);
  letter-spacing: 0.5px;
}
.header-clock .clock-time {
  font-size: 15px;
  font-weight: 700;
  color: #fff;
  font-family: Consolas, 'Courier New', monospace;
  letter-spacing: 1px;
}
.header-user { display: flex; align-items: center; gap: 12px; }
.header-user .user-avatar {
  width: 34px; height: 34px; border-radius: 50%;
  background: linear-gradient(135deg, var(--accent), var(--primary-light));
  display: flex; align-items: center; justify-content: center; font-weight: 600;
}
.header-user .el-dropdown-link { color: #fff; cursor: pointer; display: flex; align-items: center; gap: 6px; }
.header-user .role-badge {
  font-size: 11px; padding: 2px 8px; border-radius: 10px;
  background: rgba(255,255,255,0.2); margin-left: 4px;
}

/* 主体 */
.main { flex: 1; display: flex; overflow: hidden; }

/* 侧边栏 */
.sidebar {
  width: 300px; background: var(--bg-card); border-right: 1px solid var(--border);
  display: flex; flex-direction: column; box-shadow: var(--shadow-sm);
}
.sidebar-header {
  padding: 16px; border-bottom: 1px solid var(--border);
  display: flex; align-items: center; gap: 8px;
  background: linear-gradient(135deg, var(--bg-page-soft), var(--primary-bg));
}
.sidebar-header h3 { font-size: 15px; color: var(--primary-dark); flex: 1; }
.sidebar-search { padding: 12px 16px; border-bottom: 1px solid var(--border); }
.sidebar-tree { flex: 1; overflow-y: auto; padding: 8px; }
.sidebar-tree::-webkit-scrollbar { width: 6px; }
.sidebar-tree::-webkit-scrollbar-thumb { background: #c0c8d8; border-radius: 3px; }

/* 树节点自定义 */
.tree-node {
  display: flex; align-items: center; width: 100%; gap: 6px;
  padding: 4px 0; font-size: 14px;
}
.tree-node .node-icon { font-size: 16px; flex-shrink: 0; }
.tree-node .node-icon.folder { color: #f9a825; }
.tree-node .node-icon.doc { color: var(--primary); }
.tree-node .node-icon.sheet { color: var(--success); }
.node-icon.link { color: var(--accent); }
.tree-node .node-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tree-node .node-count { font-size: 11px; color: #999; background: #f0f2f5; padding: 0 6px; border-radius: 8px; }
.tree-node .lock-badge { font-size: 12px; color: var(--warning); }
.tree-node .archived-badge { font-size: 10px; color: var(--danger); }

/* 右键菜单 */
.context-menu {
  position: fixed; z-index: 9999; background: #fff; border-radius: 8px;
  box-shadow: var(--shadow-lg); padding: 6px 0; min-width: 160px;
  border: 1px solid var(--border);
}
.context-menu-item {
  padding: 8px 16px; cursor: pointer; font-size: 13px; display: flex; align-items: center; gap: 8px;
  transition: var(--transition);
}
.context-menu-item:hover { background: var(--primary-bg); color: var(--primary); }
.context-menu-item.danger:hover { background: #fee; color: var(--danger); }
.context-menu-divider { height: 1px; background: var(--border); margin: 4px 0; }

/* 内容区 */
.content { flex: 1; display: flex; flex-direction: column; overflow: visible; background: var(--bg-main); position: relative; }
.breadcrumb-bar {
  padding: 12px 24px; background: #fff; border-bottom: 1px solid var(--border);
  display: flex; align-items: center; justify-content: space-between;
}
.breadcrumb-bar .crumb { font-size: 14px; color: var(--text-secondary); }
.breadcrumb-bar .crumb .current { color: var(--primary-dark); font-weight: 600; font-size: 16px; }
.breadcrumb-bar .actions { display: flex; gap: 8px; }

.content-body { flex: 1; overflow-y: auto; overflow-x: visible; padding: 24px; position: relative; }
.content-body::-webkit-scrollbar { width: 8px; }
.content-body::-webkit-scrollbar-thumb { background: #c0c8d8; border-radius: 4px; }

/* 空状态 */
.empty-state {
  text-align: center; padding: 80px 20px; color: var(--text-secondary);
}
.empty-state .empty-icon { font-size: 72px; margin-bottom: 16px; opacity: 0.45; color: var(--primary); }
.empty-state h3 { font-size: 18px; margin-bottom: 8px; color: var(--text-primary); }
.empty-state p { font-size: 13px; margin-bottom: 24px; }

/* 节点内容展示 */
.node-info-card {
  background: #fff; border-radius: var(--radius); padding: 20px 24px;
  box-shadow: var(--shadow-sm); margin-bottom: 16px;
  border-left: 4px solid var(--primary);
}
.node-info-card .node-title {
  display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
}
.node-info-card .node-title h2 { font-size: 20px; color: var(--primary-dark); }
.node-info-card .node-title .type-tag {
  font-size: 12px; padding: 2px 10px; border-radius: 10px;
  background: var(--primary-bg); color: var(--primary);
}
.node-info-card .node-meta { font-size: 12px; color: #999; }
.node-info-card .node-desc {
  margin-top: 12px; padding: 12px; background: var(--bg-page-soft); border-radius: 6px;
  font-size: 13px; color: var(--text-secondary); line-height: 1.8;
  border-left: 3px solid var(--primary-light);
}

/* 文件列表 */
.file-list-card {
  background: #fff; border-radius: var(--radius); padding: 20px 24px;
  box-shadow: var(--shadow-sm); margin-bottom: 16px;
}
.file-list-card h3 {
  font-size: 15px; color: var(--primary-dark); margin-bottom: 16px;
  display: flex; align-items: center; gap: 8px;
}
.file-item {
  display: flex; align-items: center; padding: 12px; border-radius: var(--radius-sm);
  transition: var(--transition); border: 1px solid transparent;
}
.file-item:hover { background: var(--primary-bg); border-color: #d0e0f8; }
.file-icon {
  width: 36px; height: 42px;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: 6px; font-size: 14px; font-weight: 700;
  user-select: none; flex-shrink: 0;
}
.file-item .file-icon { margin-right: 14px; }
.file-item .file-info { flex: 1; min-width: 0; }
.file-item .file-name { font-size: 14px; font-weight: 500; color: var(--text-primary); margin-bottom: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.file-item .file-name-link { color: var(--primary); transition: color .2s; }
.file-item:hover .file-name-link { color: var(--primary-dark); text-decoration: underline; }
.file-item .file-meta { font-size: 12px; color: #999; }
.file-item .file-actions { display: flex; gap: 8px; opacity: 0; transition: var(--transition); }
.file-item:hover .file-actions { opacity: 1; }

/* 子文件夹列表 */
.subfolder-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px;
  margin-bottom: 16px;
}
.subfolder-card {
  background: #fff; border-radius: var(--radius); padding: 16px;
  box-shadow: var(--shadow-sm); cursor: pointer; transition: var(--transition);
  border: 1px solid var(--border); display: flex; align-items: center; gap: 12px;
}
.subfolder-card:hover {
  transform: translateY(-2px); box-shadow: var(--shadow-md);
  border-color: var(--primary-light);
}
.subfolder-card .sf-icon { font-size: 32px; }
.subfolder-card .sf-name { font-size: 14px; font-weight: 500; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* 文档编辑 */
.doc-editor {
  background: #fff; border-radius: var(--radius); padding: 24px;
  box-shadow: var(--shadow-sm);
}
.editor-toolbar {
  display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;
  padding-bottom: 16px; border-bottom: 1px solid var(--border);
}
.editor-toolbar .left { display: flex; align-items: center; gap: 10px; }
.editor-toolbar .lock-warning {
  background: #fff3e0; color: #e65100; padding: 6px 12px; border-radius: 6px;
  font-size: 12px; display: flex; align-items: center; gap: 6px;
}
.editor-readonly-tip {
  background: #e3f2fd; color: var(--primary-dark); padding: 10px 16px;
  border-radius: 6px; margin-bottom: 16px; font-size: 13px;
  display: flex; align-items: center; gap: 8px;
}

/* WangEditor 覆盖 */
#editor—wrapper { border: 1px solid var(--border); border-radius: var(--radius-sm); z-index: 10; }
.w-e-toolbar { border-radius: var(--radius-sm) var(--radius-sm) 0 0 !important; background: var(--bg-page-soft) !important; }
.w-e-text-container { border-radius: 0 0 var(--radius-sm) var(--radius-sm) !important; min-height: 400px !important; }
.w-e-text-container [data-slate-editor] { min-height: 400px !important; padding: 16px 20px !important; }

/* 文件图标颜色 */
.fi-word { color: #2b579a; background: #e8f0fe; }
.fi-excel { color: #217346; background: #e6f4ea; }
.fi-ppt { color: #d24726; background: #fdeae4; }
.fi-pdf { color: #d32f2f; background: #fdeaea; }
.fi-image { color: #4caf50; background: #e9f6ea; }
.fi-default { color: #78909c; background: #f0f2f5; }

/* 模态框细节 */
.form-tip { font-size: 12px; color: #999; margin-top: 4px; }

/* 系统管理页 */
.admin-tabs {
  background: #fff; border-radius: var(--radius); padding: 20px; box-shadow: var(--shadow-sm);
}
.admin-tabs .el-tabs__item { font-size: 15px; }

/* 通用工具类 */
.flex { display: flex; }
.flex-center { display: flex; align-items: center; justify-content: center; }
.gap-8 { gap: 8px; }
.gap-12 { gap: 12px; }
.mt-16 { margin-top: 16px; }
.mb-16 { margin-bottom: 16px; }
.text-muted { color: var(--text-secondary); }
.text-primary-color { color: var(--primary); }

/* 拖拽指示 */
.drop-indicator { height: 2px; background: var(--primary); margin: 2px 0; border-radius: 1px; }

/* 滚动条美化 */
*::-webkit-scrollbar { width: 6px; height: 6px; }
*::-webkit-scrollbar-thumb { background: #c0c8d8; border-radius: 3px; }
*::-webkit-scrollbar-track { background: transparent; }

/* 内部链接选择器 */
.link-picker { max-height: 300px; overflow-y: auto; }
.link-item {
  padding: 8px 12px; cursor: pointer; border-radius: 4px; font-size: 13px;
  display: flex; align-items: center; gap: 8px; transition: var(--transition);
}
.link-item:hover { background: var(--primary-bg); color: var(--primary); }

/* 文件预览 */
.preview-dialog .el-dialog__body { padding: 10px 20px 20px; }
.preview-wrapper { min-height:300px; }
.preview-toolbar { display:flex; align-items:center; padding-bottom:10px; border-bottom:1px solid var(--border); margin-bottom:16px; }
.preview-meta { font-size:13px; color:#999; }
.preview-content { max-height:75vh; overflow:auto; background:#f5f7fa; padding:20px; border-radius:8px; }
.preview-error,.preview-unsupported { text-align:center; padding:60px 20px; }
.preview-docx { background:#fff; padding:40px 50px; min-height:500px; line-height:1.8; font-size:14px; box-shadow:0 2px 8px rgba(0,0,0,0.08); max-width:900px; margin:0 auto; }
.preview-docx h1,.preview-docx h2,.preview-docx h3 { color:#1a2533; margin:16px 0 12px; }
.preview-docx h1 { font-size:24px; border-bottom:2px solid var(--primary); padding-bottom:8px; }
.preview-docx h2 { font-size:20px; }
.preview-docx h3 { font-size:17px; }
.preview-docx p { margin:8px 0; text-indent:2em; }
.preview-docx table { border-collapse:collapse; width:100%; margin:12px 0; }
.preview-docx table td,.preview-docx table th { border:1px solid #bfc8d6; padding:6px 10px; }
.preview-docx table th { background:#f0f4fa; }
.preview-docx img { max-width:100%; }
.preview-xlsx { background:#fff; padding:16px; }
.xlsx-sheet { margin-bottom:24px; }
.xlsx-sheet-name { font-size:15px; font-weight:600; color:var(--primary-dark); margin-bottom:8px; padding:6px 12px; background:var(--primary-bg); border-left:3px solid var(--primary); }
.xlsx-table-wrap { overflow:auto; }
.xlsx-table-wrap table { border-collapse:collapse; font-size:13px; width:auto !important; }
.xlsx-table-wrap td,.xlsx-table-wrap th { border:1px solid #d0d7e2; padding:5px 10px; white-space:nowrap; min-width:60px; }
.xlsx-table-wrap th { background:#f0f4fa; font-weight:600; text-align:center; }
.xlsx-table-wrap tr:nth-child(even) td { background:#fafbfd; }
.preview-txt { background:#fff; padding:20px; font-family:Consolas,'Courier New',monospace; font-size:13px; white-space:pre-wrap; word-break:break-all; line-height:1.6; }
.preview-image-wrap,.preview-video-wrap { text-align:center; }

/* ===== Word风格编辑器 ===== */
.doc-editor-word {
  background: #e8ecf1;
  padding: 0;
  box-shadow: none;
  border-radius: 0;
  display: flex;
  flex-direction: column;
  height: calc(100vh - 200px);
  min-height: 600px;
}
.word-toolbar-wrap {
  background: linear-gradient(180deg,#f3f6fb,#e8edf5);
  border-bottom: 1px solid var(--border-strong);
  padding: 6px 8px;
  flex-shrink: 0;
  overflow: visible;
  position: relative;
  z-index: 100;
}
.word-toolbar-wrap .w-e-toolbar {
  background: transparent !important;
  border: none !important;
  flex-wrap: wrap;
}
.word-toolbar-wrap .w-e-bar-item {
  margin: 2px 1px !important;
  border-radius: 4px !important;
}
.word-toolbar-wrap .w-e-bar-item button:hover {
  background: #d0dcf0 !important;
}
.word-toolbar-wrap .w-e-bar-item button.active {
  background: #b8ccea !important;
  color: var(--primary-dark) !important;
}
/* 菜单分隔线 */
.word-toolbar-wrap .w-e-bar-divider {
  background: var(--border-strong);
  margin: 4px 4px;
}
.word-paper-area {
  flex: 1;
  overflow: auto;
  background: #d4dae5;
  display: flex;
  align-items: flex-start;
}
/* 垂直标尺 */
.v-ruler {
  width: 22px;
  flex-shrink: 0;
  position: sticky;
  left: 0;
  top: 0;
  z-index: 30;
  background: #f3f6fb;
  border-right: 1px solid var(--border-strong);
  overflow: hidden;
  height: 2000px;
}
.v-ruler-inner {
  position: absolute;
  left: 0;
  top: 0;
  width: 22px;
  height: 3000mm;
  background-image:
    repeating-linear-gradient(to bottom, #9aa7b8 0, #9aa7b8 1px, transparent 1px, transparent 3.7795px),
    repeating-linear-gradient(to bottom, #5a6b80 0, #5a6b80 1.5px, transparent 1.5px, transparent 18.897px);
  will-change: transform;
}
.vr-num {
  position: absolute;
  right: 3px;
  font-size: 8px;
  color: #5a6b80;
  transform: translateY(-50%);
  pointer-events: none;
  user-select: none;
  line-height: 1;
}
.paper-col {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 24px 24px 40px;
}
/* 水平标尺 */
.h-ruler {
  position: relative;
  width: 210mm;
  min-width: 210mm;
  height: 24px;
  flex-shrink: 0;
  background: #f3f6fb;
  border-bottom: 1px solid var(--border-strong);
  box-shadow: 0 1px 2px rgba(0,0,0,0.06);
}
.h-ruler.landscape {
  width: 297mm;
  min-width: 297mm;
}
.h-ruler::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: linear-gradient(to right,
    #dde3ee 0, #dde3ee 25mm,
    transparent 25mm, transparent calc(100% - 25mm),
    #dde3ee calc(100% - 25mm), #dde3ee 100%);
}
.h-ruler-inner {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 25mm;
  right: 25mm;
  background-image:
    repeating-linear-gradient(to right, #9aa7b8 0, #9aa7b8 1px, transparent 1px, transparent 3.7795px),
    repeating-linear-gradient(to right, #5a6b80 0, #5a6b80 1.5px, transparent 1.5px, transparent 18.897px);
}
.hr-num {
  position: absolute;
  top: 8px;
  font-size: 9px;
  color: #5a6b80;
  transform: translateX(-50%);
  pointer-events: none;
  user-select: none;
  line-height: 1;
}
.hr-indent-first {
  position: absolute;
  top: 1px;
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 9px solid var(--primary);
  cursor: pointer;
  z-index: 6;
  display: none;
  pointer-events: auto;
}
.hr-indent-left {
  position: absolute;
  top: 10px;
  width: 11px;
  height: 11px;
  background: var(--primary);
  border-radius: 2px;
  cursor: ew-resize;
  z-index: 6;
  display: none;
  transform-origin: left center;
}
.paper-dir-switch {
  display: inline-flex;
  border: 1px solid var(--border-strong);
  border-radius: 6px;
  overflow: hidden;
}
.paper-dir-switch .dir-btn {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 3px 12px;
  font-size: 12px;
  cursor: pointer;
  color: #5a6b80;
  background: #f5f8fc;
  user-select: none;
}
.paper-dir-switch .dir-btn + .dir-btn {
  border-left: 1px solid var(--border-strong);
}
.paper-dir-switch .dir-btn.active {
  background: var(--primary-deep);
  color: #fff;
}
.paper-dir-switch .dir-btn:hover {
  background: #e3ebf7;
}
.paper-dir-switch .dir-btn.active:hover {
  background: var(--primary-deep);
}
.word-paper {
  width: 210mm;
  min-width: 210mm;
  min-height: 297mm;
  padding: 25mm; /* 页边距：上下左右各2.5cm */
  box-shadow: 0 2px 12px rgba(0,0,0,0.2);
  margin-top: 12px;
  margin-bottom: 24px;
  position: relative;
  box-sizing: border-box;
  background-color: #fff; /* 网页视图：单张连续纸，内容自动撑高，无分页周期 */
}
.word-paper.landscape {
  width: 297mm;
  min-width: 297mm;
  min-height: 210mm;
}
.word-paper.landscape .w-e-text-container [data-slate-editor] {
  min-height: 150mm !important;
}
.word-paper .w-e-text-container {
  border: none !important;
  min-height: auto !important;
  background: #fff;
}
.word-paper .w-e-text-container [data-slate-editor] {
  min-height: 247mm !important;
  padding: 0 !important;
  font-size: 14px;
  line-height: 1.8;
  outline: none;
}
.word-paper .w-e-text-container [data-slate-editor] p {
  margin: 0 0 6pt 0;
  text-indent: 2em;
}
.word-paper .w-e-text-container [data-slate-editor] h1 {
  font-size: 22pt; text-align: center; margin: 12pt 0 18pt; font-weight: bold;
}
.word-paper .w-e-text-container [data-slate-editor] h2 {
  font-size: 16pt; margin: 12pt 0 6pt; font-weight: bold;
  border-bottom: 1px solid #ccc; padding-bottom: 4pt;
}
.word-paper .w-e-text-container [data-slate-editor] h3 {
  font-size: 14pt; margin: 8pt 0 4pt; font-weight: bold;
}
.word-paper .w-e-text-container [data-slate-editor] table {
  border-collapse: collapse;
  margin: 8pt 0;
}
.word-paper .w-e-text-container [data-slate-editor] table td,
.word-paper .w-e-text-container [data-slate-editor] table th {
  border: 1px solid #333;
  padding: 4pt 8pt;
}
.word-paper .w-e-text-container [data-slate-editor] table th {
  background: #f0f0f0;
  font-weight: bold;
}
.word-paper .w-e-text-container [data-slate-editor] img {
  max-width: 100%;
}
.word-status-bar {
  background: #f3f6fb;
  border-top: 1px solid var(--border-strong);
  padding: 4px 16px;
  font-size: 12px;
  color: #666;
  display: flex;
  justify-content: space-between;
  flex-shrink: 0;
}
/* 下拉菜单字体样式 */
.w-e-dropdown-list .w-e-dropdown-item[aria-label] {
  padding: 6px 12px;
}
/* 编辑区整体背景 */
.doc-editor-word {
  display: flex;
  flex-direction: column;
  height: calc(100vh - 200px);
  min-height: 600px;
  background: #f0f2f5;
  overflow: visible;
  position: relative;
}
/* 下拉菜单必须在最高层 */
.w-e-dropdown-list,
.w-e-panel-container,
.w-e-modal {
  z-index: 10000 !important;
}
.w-e-toolbar {
  z-index: 100 !important;
  position: relative;
}
/* 下拉面板宽度 */
.w-e-dropdown-list {
  max-height: 400px;
  overflow-y: auto;
}
/* 公共素材库侧栏入口 */
.sidebar-public-entry {
  padding: 12px 14px;
  border-top: 1px solid #e0e6ef;
  display: flex;
  align-items: center;
  cursor: pointer;
  transition: background .2s;
  font-size: 14px;
  color: var(--text-primary);
  background: var(--bg-page-soft);
}
.sidebar-public-entry:hover { background: var(--primary-bg); color: var(--primary); }
.sidebar-public-entry.active { background: var(--primary); color: #fff; }
.sidebar-public-entry.active .el-tag { background: rgba(255,255,255,0.2); border-color: rgba(255,255,255,0.3); color: #fff; }
/* 引用项 */
.ref-item {
  display: flex;
  align-items: center;
  padding: 10px 12px;
  border: 1px solid #e8ecf1;
  border-radius: 6px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: all .15s;
}
.ref-item:hover { border-color: var(--primary); background: #f4f8ff; }
.ref-item.selected { border-color: var(--primary); background: var(--primary-bg); }
/* 文档编辑历史列表项 */
.hist-item {
  padding: 10px 12px;
  border: 1px solid #e8ecf1;
  border-radius: 6px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: all .15s;
}
.hist-item:hover { border-color: var(--primary); background: #f4f8ff; }
.hist-item.active { border-color: var(--primary); background: var(--primary-bg); box-shadow: 0 0 0 1px var(--primary) inset; }
/* 滚动条美化 */
.word-paper-area::-webkit-scrollbar { width: 10px; }
.word-paper-area::-webkit-scrollbar-thumb { background: #a8b4c8; border-radius: 5px; }
.word-paper-area::-webkit-scrollbar-track { background: var(--border-strong); }

/* ========== 视图切换按钮 ========== */
.view-switch {
  display: inline-flex;
  border: 1px solid var(--primary-deep);
  border-radius: 6px;
  overflow: hidden;
}
.view-switch .dir-btn {
  padding: 3px 12px;
  font-size: 12px;
  cursor: pointer;
  color: var(--primary-deep);
  background: #f5f8fc;
  user-select: none;
}
.view-switch .dir-btn + .dir-btn {
  border-left: 1px solid var(--border-strong);
}
.view-switch .dir-btn.active {
  background: var(--primary-deep);
  color: #fff;
}
.view-switch .dir-btn:hover {
  background: #e3ebf7;
}
.view-switch .dir-btn.active:hover {
  background: var(--primary-deep);
}

/* ========== 页面视图（A4 分页预览，与打印一致） ========== */
.page-view-container {
  flex: 1;
  overflow: auto;
  background: #d4dae5;
  padding: 24px 24px 64px;
  box-sizing: border-box;
  min-height: 0;
}
.page-sheet {
  width: 210mm;
  min-width: 210mm;
  height: 297mm;      /* 固定 A4 页高：屏幕所见即打印所得（页码距纸底恒定） */
  overflow: hidden;   /* 内容按分页引擎限制已不溢出，兜底裁切防纸张变形 */
  margin: 0 auto 20px;
  background: #fff;
  box-shadow: 0 2px 12px rgba(0,0,0,0.18);
  position: relative;
  box-sizing: border-box;
}
.page-sheet.landscape {
  width: 297mm;
  min-width: 297mm;
  height: 210mm;
}
.page-sheet .page-content {
  padding: 25mm;
  box-sizing: border-box;
}
.page-sheet .page-footer {
  position: absolute;
  bottom: 15mm; /* 页码距页底 1.5cm，固定不变 */
  left: 0;
  right: 0;
  text-align: center;
  font-size: 12px;
  color: #888;
  user-select: none;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.5mm;
}
/* 页眉：页面视图/打印每页顶部固定（页边距内，不随正文移动） */
.page-sheet .page-header {
  position: absolute;
  top: 8mm;
  left: 25mm;
  right: 25mm;
  text-align: center;
  font-size: 12px;
  color: #555;
  user-select: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.page-sheet .page-footer-text {
  font-size: 12px;
  color: #555;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

/* 页面内容排版（与网页视图编辑器排版一致） */
.page-measure,
.page-sheet .page-content {
  font-family: "宋体","SimSun","Microsoft YaHei",serif;
  color: #222;
  font-size: 14px;
  line-height: 1.8;
}
.page-measure p,
.page-sheet .page-content p { margin: 0 0 6pt 0; text-indent: 2em; }
.page-measure h1,
.page-sheet .page-content h1 { font-size: 22pt; text-align: center; margin: 12pt 0 18pt; font-weight: bold; text-indent: 0; }
.page-measure h2,
.page-sheet .page-content h2 { font-size: 16pt; margin: 12pt 0 6pt; font-weight: bold; border-bottom: 1px solid #ccc; padding-bottom: 4pt; text-indent: 0; }
.page-measure h3,
.page-sheet .page-content h3 { font-size: 14pt; margin: 8pt 0 4pt; font-weight: bold; text-indent: 0; }
.page-measure table,
.page-sheet .page-content table { border-collapse: collapse; margin: 8pt 0; width: 100%; }
.page-measure table td,
.page-measure table th,
.page-sheet .page-content table td,
.page-sheet .page-content table th { border: 1px solid #333; padding: 4pt 8pt; }
.page-measure table th,
.page-sheet .page-content table th { background: #f0f0f0; font-weight: bold; }
.page-measure img,
.page-sheet .page-content img { max-width: 100%; }

/* 分页测量容器（仅测量用，屏幕外） */
.page-measure {
  position: absolute;
  left: -99999px;
  top: 0;
  z-index: -1;
  pointer-events: none;
}

/* ========== 打印：只输出临时分页容器（body 直接子级 .print-host） ========== */
@media print {
  /* 隐藏除打印容器外的全部主体：display:none 不占布局空间，避免空白页与内容错位 */
  body > :not(.print-host) { display: none !important; }
  .print-host {
    display: block !important;
    position: static !important;
    width: 100% !important;
    padding: 0 !important;
    margin: 0 !important;
    background: #fff !important;
    overflow: visible !important;
  }
  .print-host .page-sheet {
    box-shadow: none !important;
    margin: 0 auto !important;
    border-radius: 0 !important;
    height: 296.5mm !important;
    min-height: 0 !important;
    overflow: hidden !important;
    page-break-after: always;
  }
  .print-host .page-sheet.landscape { height: 209.5mm !important; }
  .print-host .page-sheet:last-child { page-break-after: auto; }
}

/* 确保MessageBox、Dialog在编辑器下拉之上 */
.el-overlay { z-index: 30000 !important; }
.el-popper { z-index: 30010 !important; }
.el-message-box { z-index: 30001 !important; }
.el-dialog { z-index: 30002 !important; }
.el-message { z-index: 30003 !important; }
.super-msgbox { z-index: 30001 !important; }


/* 查看态文档窗口：固定高度内部滚动（佐证材料无需长距离下拉） */
.doc-view-window {
  max-height: 60vh;
  min-height: 300px;
  overflow-y: auto;
  overflow-x: auto;
  padding: 2px;
  border-radius: 8px;
  scrollbar-width: thin;
}





/* ========== 电子表格编辑器（Univer 全屏） ========== */

.sheet-editor-fullscreen {

  position: fixed;

  inset: 0;

  z-index: 2000;

  background: #f5f7fa;

  display: flex;

  flex-direction: column;

}

.sheet-editor-bar {

  display: flex;

  align-items: center;

  gap: 8px;

  background: #fff;

  padding: 8px 16px;

  border-bottom: 1px solid #dce3f0;

  flex-shrink: 0;

}

.sheet-editor-bar .flex-1 { flex: 1; }

/* ========== 界面主题选择 ========== */
.theme-pick { display: flex; flex-direction: column; gap: 8px; }
.theme-item {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 14px; border: 1px solid var(--border);
  border-radius: 8px; cursor: pointer;
  transition: var(--transition);
}
.theme-item:hover { border-color: var(--primary); background: var(--primary-bg); }
.theme-item.active { border-color: var(--primary); box-shadow: 0 0 0 1px var(--primary) inset; }
.theme-dot {
  width: 22px; height: 22px; border-radius: 50%;
  box-shadow: 0 0 0 3px rgba(255,255,255,1), 0 0 0 4px var(--border);
}
.theme-label { font-size: 14px; font-weight: 500; color: var(--text-primary); }

.univer-holder {

  flex: 1;

  min-height: 0;

  position: relative;

  overflow: hidden;

}



/* ===== 第92轮：PPT预览 + 移动到对话框 ===== */

.preview-pptx-wrap { min-height: 200px; padding-bottom: 20px; }

.preview-pptx-wrap .pptx-loading { text-align: center; color: #999; padding: 40px 0; }

.preview-pptx-wrap .slide { margin: 16px auto; background: #fff; box-shadow: 0 2px 12px rgba(0,0,0,0.12); position: relative; overflow: hidden; border: none !important; }

.preview-pptx-wrap .slide .slide-content { position: relative; }

.move-to-box { border: 1px solid var(--border-strong, #e0e0e0); border-radius: 8px; padding: 8px; max-height: 380px; overflow-y: auto; }

.move-to-root { display: flex; align-items: center; padding: 7px 10px; border-radius: 6px; cursor: pointer; color: var(--primary, #2F9E63); font-weight: 500; }

.move-to-root:hover { background: var(--primary-bg, #f0f9f4); }

.move-to-root.selected { background: var(--primary, #2F9E63); color: #fff; }

