/* ============================================================
   Nova AI · 一站式企业管理系统 — 高保真设计系统 v2.0
   配色基准：社媒矩阵 (sns) 靛蓝体系 #3b30e8
   ============================================================ */

/* ---------- 1. 设计令牌 ---------- */
:root{
  /* 品牌色 */
  --brand:#3b30e8;
  --brand-hover:#4d43ea;
  --brand-deep:#2f26c4;
  --brand-shadow:rgba(59,48,232,.22);
  --brand-gradient:linear-gradient(135deg,#3b30e8 0%,#5b4ff0 55%,#7b6bf5 100%);

  /* 中性灰阶 */
  --text-dark:#0f172a;
  --text-mid:#334155;
  --sidebar-text:#475569;
  --text-soft:#64748b;
  --text-faint:#94a3b8;
  --border:#e2e8f0;
  --border-soft:rgba(226,232,240,.85);
  --bg-page:#f8fafc;
  --bg-soft:#f8fafc;
  --bg-soft2:#f1f5f9;
  --sidebar-bg:#f1f3f9;
  --surface:#ffffff;

  /* 语义色 */
  --success:#059669; --success-bg:#ecfdf5; --success-border:#a7f3d0;
  --warn:#d97706;    --warn-bg:#fffbeb;    --warn-border:#fde68a;
  --danger:#dc2626;  --danger-bg:#fef2f2;  --danger-border:#fecaca;
  --info-bg:#eef2ff; --info-border:#e0e7ff;

  /* 系统识别色 */
  --sys-wa:#3b30e8; --sys-sns:#7b6bf5; --sys-geo:#0891b2;
  --sys-biz:#059669; --sys-supplier:#94a3b8; --sys-kb:#d97706;

  /* 间距 */
  --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px;
  --sp-5:20px; --sp-6:24px; --sp-8:32px;

  /* 圆角 */
  --radius-sm:8px; --radius-md:12px; --radius-lg:16px;
  --radius-xl:20px; --radius-pill:999px;

  /* 阴影 */
  --sh-sm:0 2px 8px rgba(15,23,42,.06);
  --sh-md:0 4px 14px rgba(15,23,42,.08);
  --sh-lg:0 8px 24px rgba(15,23,42,.08);
  --sh-brand:0 3px 10px rgba(59,48,232,.22);

  /* 布局 */
  --topbar-h:60px;
  --sidebar-w:224px;
  --sidebar-w-collapsed:64px;
}

/* ---------- 2. 基础 ---------- */
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  background:var(--bg-page);
  color:var(--text-mid);
  font-size:13px;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none;}
ul,ol{list-style:none;margin:0;padding:0;}
button{font-family:inherit;border:none;background:none;cursor:pointer;}
input,select,textarea{font-family:inherit;}
::-webkit-scrollbar{width:8px;height:8px;}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:999px;}
::-webkit-scrollbar-thumb:hover{background:#94a3b8;}
::-webkit-scrollbar-track{background:transparent;}
.material-symbols-outlined{
  font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 22;
  vertical-align:middle;line-height:1;user-select:none;
}

/* ---------- 3. Topbar ---------- */
.topbar{
  position:fixed;top:0;left:0;right:0;height:var(--topbar-h);
  background:#fff;border-bottom:1px solid var(--border-soft);
  display:flex;align-items:center;justify-content:space-between;
  padding:0 18px;z-index:200;
}
.topbar-left{display:flex;align-items:center;gap:22px;min-width:0;}
.topbar-logo{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.topbar-logo .mark{
  width:34px;height:34px;border-radius:10px;background:var(--brand);
  display:flex;align-items:center;justify-content:center;color:#fff;
  box-shadow:0 4px 10px var(--brand-shadow);transition:transform .15s;
}
.topbar-logo:hover .mark{transform:scale(1.05);}
.topbar-logo .name{font-weight:700;font-size:15px;color:var(--text-dark);white-space:nowrap;letter-spacing:-.01em;}
.topbar-logo .slogan{font-size:10px;color:var(--text-faint);font-weight:500;white-space:nowrap;}
.system-switcher{display:flex;align-items:center;gap:2px;overflow-x:auto;}
.system-switcher::-webkit-scrollbar{display:none;}
.system-switcher a{
  display:flex;align-items:center;gap:6px;padding:8px 11px;border-radius:10px;
  font-size:13px;font-weight:500;color:var(--sidebar-text);transition:all .15s;white-space:nowrap;
}
.system-switcher a .material-symbols-outlined{font-size:18px;}
.system-switcher a:hover{background:var(--bg-soft2);color:var(--text-dark);}
.system-switcher a.active{background:var(--brand);color:#fff;font-weight:600;box-shadow:var(--sh-brand);}
.topbar-right{display:flex;align-items:center;gap:2px;flex-shrink:0;}
.icon-btn{
  width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  color:var(--text-soft);transition:all .15s;position:relative;
}
.icon-btn:hover{background:var(--bg-soft2);color:var(--text-dark);}
.icon-btn.active{background:var(--info-bg);color:var(--brand);}
.icon-btn .material-symbols-outlined{font-size:20px;}
.icon-btn .badge{
  position:absolute;top:5px;right:5px;min-width:15px;height:15px;padding:0 4px;
  background:var(--danger);color:#fff;font-size:9px;font-weight:700;border-radius:999px;
  display:flex;align-items:center;justify-content:center;border:2px solid #fff;
}
.topbar-divider{width:1px;height:24px;background:var(--border);margin:0 8px;}
.user-chip{display:flex;align-items:center;gap:8px;padding:5px 8px 5px 5px;border-radius:999px;cursor:pointer;transition:background .15s;}
.user-chip:hover{background:var(--bg-soft2);}
.user-avatar{width:28px;height:28px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0;}
.user-chip .uname{font-size:13px;font-weight:600;color:var(--text-dark);}
.user-chip .material-symbols-outlined{font-size:18px;color:var(--text-faint);}

/* ---------- 4. Shell / Sidebar ---------- */
.app-shell{display:flex;padding-top:var(--topbar-h);min-height:100vh;}
.sidebar{
  position:fixed;top:var(--topbar-h);left:0;bottom:0;width:var(--sidebar-w);
  background:var(--sidebar-bg);border-right:1px solid var(--border-soft);
  padding:12px 10px;overflow-y:auto;display:flex;flex-direction:column;
  transition:width .2s ease;z-index:150;
}
body.sidebar-collapsed .sidebar{width:var(--sidebar-w-collapsed);padding:12px 8px;}
body.sidebar-collapsed .main{margin-left:var(--sidebar-w-collapsed);}
body.sidebar-collapsed .sidebar-item span:not(.material-symbols-outlined),
body.sidebar-collapsed .sidebar-group-title,
body.sidebar-collapsed .sidebar-note{display:none;}
body.sidebar-collapsed .sidebar-item{justify-content:center;padding:9px 0;}
.sidebar-group-title{
  padding:14px 10px 6px;font-size:11px;font-weight:700;color:var(--text-faint);
  text-transform:uppercase;letter-spacing:.06em;
}
.sidebar-group-title:first-child{padding-top:4px;}
.sidebar-item{
  display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:10px;
  font-size:13.5px;font-weight:500;color:var(--sidebar-text);margin-bottom:2px;transition:all .15s;
}
.sidebar-item .material-symbols-outlined{font-size:19px;color:var(--text-faint);flex-shrink:0;}
.sidebar-item:hover{background:rgba(148,163,184,.16);color:var(--text-dark);}
.sidebar-item:hover .material-symbols-outlined{color:var(--text-soft);}
.sidebar-item.active{background:var(--brand);color:#fff;font-weight:600;box-shadow:var(--sh-brand);}
.sidebar-item.active .material-symbols-outlined{color:#fff;}
.sidebar-item .count{margin-left:auto;font-size:11px;font-weight:700;background:rgba(148,163,184,.2);padding:1px 6px;border-radius:999px;color:var(--text-soft);}
.sidebar-item.active .count{background:rgba(255,255,255,.25);color:#fff;}
.sidebar-spacer{flex:1;}
.sidebar-note{
  margin:12px 6px 4px;padding:11px;background:#fff;border:1px solid var(--border-soft);
  border-radius:10px;font-size:11.5px;color:var(--text-soft);line-height:1.65;
}
.sidebar-note .material-symbols-outlined{font-size:14px;color:var(--brand);}
.sidebar-toggle{
  display:flex;align-items:center;justify-content:center;gap:8px;padding:8px;margin-top:4px;
  border-radius:9px;color:var(--text-faint);font-size:12px;transition:all .15s;
}
.sidebar-toggle:hover{background:rgba(148,163,184,.16);color:var(--text-dark);}
.sidebar-toggle .material-symbols-outlined{font-size:18px;transition:transform .2s;}
body.sidebar-collapsed .sidebar-toggle .material-symbols-outlined{transform:rotate(180deg);}
body.sidebar-collapsed .sidebar-toggle span:not(.material-symbols-outlined){display:none;}

/* ---------- 5. Main ---------- */
.main{
  flex:1;margin-left:var(--sidebar-w);padding:20px 26px 60px;min-width:0;
  transition:margin-left .2s ease,opacity .12s ease;
}
.main.full{margin-left:0;}
.main.wide{max-width:1560px;}
/* 无侧边栏时内容整体居中 */
.main.full.wide{margin-left:auto;margin-right:auto;}
.main.flush{padding:0;}
.main.is-swapping{opacity:0;}

/* SPA 导航顶部进度条 */
#novaProgress{
  position:fixed;top:0;left:0;height:2.5px;width:0;background:var(--brand);
  z-index:1000;opacity:0;box-shadow:0 0 8px var(--brand-shadow);pointer-events:none;
}

.breadcrumb{font-size:12px;color:var(--text-faint);margin-bottom:8px;display:flex;align-items:center;gap:4px;}
.breadcrumb .material-symbols-outlined{font-size:14px;}
.breadcrumb a:hover{color:var(--brand);}

.page-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:20px;flex-wrap:wrap;gap:12px;}
.page-title{font-size:22px;font-weight:700;color:var(--text-dark);margin:0 0 4px;letter-spacing:-.02em;}
.page-desc{font-size:12.5px;color:var(--text-soft);margin:0;max-width:820px;line-height:1.7;}
.page-actions{display:flex;gap:8px;flex-wrap:wrap;}

/* ---------- 6. 按钮 ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 16px;
  border-radius:10px;font-size:13px;font-weight:600;cursor:pointer;
  border:1px solid transparent;transition:all .15s;white-space:nowrap;
}
.btn .material-symbols-outlined{font-size:17px;}
.btn-primary{background:var(--brand);color:#fff;box-shadow:var(--sh-brand);}
.btn-primary:hover{background:var(--brand-hover);transform:translateY(-1px);}
.btn-primary:active{transform:translateY(0);}
.btn-ghost{background:#fff;color:var(--text-mid);border-color:var(--border);}
.btn-ghost:hover{background:var(--bg-soft2);color:var(--text-dark);}
.btn-soft{background:var(--info-bg);color:var(--brand);}
.btn-soft:hover{background:var(--info-border);}
.btn-danger{background:var(--danger);color:#fff;}
.btn-danger:hover{filter:brightness(1.08);}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:8px;}
.btn-sm .material-symbols-outlined{font-size:15px;}
.btn-lg{padding:11px 22px;font-size:14px;}
.btn-block{width:100%;}
.btn-link{color:var(--brand);font-weight:600;padding:0;background:none;}
.btn-link:hover{text-decoration:underline;}
.btn:disabled,.btn.disabled{opacity:.5;cursor:not-allowed;pointer-events:none;}

/* ---------- 7. 卡片 / 栅格 ---------- */
.card{background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius-lg);padding:18px 20px;}
.card.pad-sm{padding:14px 16px;}
.card.pad-0{padding:0;overflow:hidden;}
.card-title{font-size:14.5px;font-weight:700;color:var(--text-dark);margin:0;display:flex;align-items:center;gap:8px;}
.card-title .material-symbols-outlined{font-size:19px;color:var(--brand);}
.card-sub{font-size:11.5px;color:var(--text-faint);margin:3px 0 0;line-height:1.6;}
.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px;}
.card-head-actions{display:flex;gap:6px;align-items:center;flex-shrink:0;}
.card-body{}
.card-foot{margin-top:14px;padding-top:12px;border-top:1px solid var(--border-soft);display:flex;justify-content:space-between;align-items:center;}

.grid{display:grid;gap:14px;}
.grid-2{grid-template-columns:repeat(2,1fr);}
.grid-3{grid-template-columns:repeat(3,1fr);}
.grid-4{grid-template-columns:repeat(4,1fr);}
.grid-5{grid-template-columns:repeat(5,1fr);}
.grid-6{grid-template-columns:repeat(6,1fr);}
.span-2{grid-column:span 2;}
.span-3{grid-column:span 3;}
.span-4{grid-column:span 4;}
.row{display:flex;gap:14px;}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:12px;}
.row-center{display:flex;align-items:center;gap:8px;}
.section{margin-bottom:18px;}
.flex-1{flex:1;min-width:0;}
@media(max-width:1280px){
  .grid-5,.grid-6{grid-template-columns:repeat(3,1fr);}
}
@media(max-width:1100px){
  .grid-3,.grid-4,.grid-5,.grid-6{grid-template-columns:repeat(2,1fr);}
  .span-2,.span-3,.span-4{grid-column:span 2;}
}

/* ---------- 8. KPI ---------- */
.kpi{background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius-md);padding:15px 17px;transition:all .15s;}
.kpi:hover{box-shadow:var(--sh-md);transform:translateY(-1px);}
.kpi-label{font-size:12px;color:var(--text-soft);font-weight:500;display:flex;align-items:center;gap:6px;margin-bottom:7px;}
.kpi-label .material-symbols-outlined{font-size:16px;color:var(--text-faint);}
.kpi-value{font-size:24px;font-weight:800;color:var(--text-dark);letter-spacing:-.025em;line-height:1.1;}
.kpi-value .unit{font-size:13px;font-weight:600;color:var(--text-soft);margin-left:2px;}
.kpi-trend{font-size:11.5px;font-weight:600;margin-top:6px;display:flex;align-items:center;gap:3px;}
.kpi-trend.up{color:var(--success);}
.kpi-trend.down{color:var(--danger);}
.kpi-trend.flat{color:var(--text-faint);}
.kpi-trend .material-symbols-outlined{font-size:14px;}
.kpi-trend .cmp{color:var(--text-faint);font-weight:500;margin-left:2px;}
.kpi.accent{border-left:3px solid var(--brand);}

/* 迷你统计行 */
.stat-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--border-soft);}
.stat-row:last-child{border-bottom:none;}
.stat-row .l{font-size:12.5px;color:var(--text-soft);display:flex;align-items:center;gap:6px;}
.stat-row .l .material-symbols-outlined{font-size:16px;color:var(--text-faint);}
.stat-row .v{font-size:15px;font-weight:700;color:var(--text-dark);}
.stat-row.clickable{cursor:pointer;border-radius:8px;padding:9px 8px;margin:0 -8px;}
.stat-row.clickable:hover{background:var(--bg-soft);}

/* ---------- 9. 表格 ---------- */
.table-wrap{overflow-x:auto;margin:0 -20px;padding:0 20px;}
.card.pad-0 .table-wrap{margin:0;padding:0;}
table{width:100%;border-collapse:collapse;font-size:13px;}
th{
  text-align:left;padding:10px 12px;color:var(--text-faint);font-weight:600;font-size:11.5px;
  text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--border);white-space:nowrap;
  background:transparent;
}
td{padding:11px 12px;border-bottom:1px solid var(--border-soft);color:var(--text-mid);white-space:nowrap;vertical-align:middle;}
tr:last-child td{border-bottom:none;}
tbody tr{transition:background .12s;}
tbody tr:hover{background:var(--bg-soft);}
tbody tr.selected{background:var(--info-bg);}
td.strong{font-weight:600;color:var(--text-dark);}
td.num{font-variant-numeric:tabular-nums;font-weight:600;color:var(--text-dark);}
td.wrap{white-space:normal;min-width:200px;}
.table-actions{display:flex;gap:6px;}
.tbl-link{color:var(--brand);font-weight:600;cursor:pointer;}
.tbl-link:hover{text-decoration:underline;}

/* ---------- 10. 标签 / 徽章 ---------- */
.tag{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:999px;font-size:11.5px;font-weight:600;white-space:nowrap;}
.tag .material-symbols-outlined{font-size:13px;}
.tag-brand{background:var(--info-bg);color:var(--brand);}
.tag-success{background:var(--success-bg);color:var(--success);}
.tag-warn{background:var(--warn-bg);color:var(--warn);}
.tag-danger{background:var(--danger-bg);color:var(--danger);}
.tag-gray{background:var(--bg-soft2);color:var(--text-soft);}
.tag-outline{background:#fff;border:1px solid var(--border);color:var(--text-soft);}
.dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex-shrink:0;}
.dot-success{background:var(--success);}
.dot-warn{background:var(--warn);}
.dot-danger{background:var(--danger);}
.dot-brand{background:var(--brand);}
.dot-gray{background:var(--text-faint);}
.pulse{animation:pulse 1.8s infinite;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.35;}}

/* ---------- 11. Tabs ---------- */
.tabs{display:flex;border-bottom:1px solid var(--border);margin-bottom:16px;gap:0;overflow-x:auto;}
.tabs::-webkit-scrollbar{display:none;}
.tab{
  padding:10px 2px;margin-right:24px;font-size:13.5px;font-weight:600;color:var(--text-faint);
  border-bottom:2px solid transparent;cursor:pointer;transition:all .15s;white-space:nowrap;
}
.tab:hover{color:var(--text-mid);}
.tab.active{color:var(--brand);border-color:var(--brand);}
.tab .cnt{font-size:11px;background:var(--bg-soft2);padding:1px 6px;border-radius:999px;margin-left:5px;}
.tab.active .cnt{background:var(--info-bg);color:var(--brand);}
.tab-pane{display:none;}
.tab-pane.active{display:block;}

/* 胶囊分段控件 */
.segment{display:inline-flex;background:var(--bg-soft2);border:1px solid var(--border);border-radius:999px;padding:3px;gap:2px;}
.segment button{padding:5px 14px;border-radius:999px;font-size:12px;font-weight:600;color:var(--text-soft);transition:all .15s;}
.segment button.active{background:var(--brand);color:#fff;box-shadow:0 1px 4px var(--brand-shadow);}
.segment button:not(.active):hover{color:var(--text-dark);}

/* ---------- 12. 表单 ---------- */
.field{margin-bottom:14px;}
.field:last-child{margin-bottom:0;}
.field label{display:block;font-size:12.5px;font-weight:600;color:var(--text-mid);margin-bottom:6px;}
.field label .req{color:var(--danger);margin-left:2px;}

/* 全局 select 基础样式：保证不论出现在 .field / .toolbar 还是任意容器（如 .cal-toolbar、
   .row-center 里的裸 select）都有一致外观，不回退到浏览器原生样式 */
select{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  padding:8px 30px 8px 12px;border:1px solid var(--border);border-radius:9px;
  font-size:12.5px;font-family:inherit;color:var(--text-mid);background:#fff;
  cursor:pointer;transition:all .15s;
  background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e");
  background-repeat:no-repeat;background-position:right 8px center;background-size:16px;
}
select:hover{border-color:#cbd5e1;}
select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.1);}

/* 全局 input / textarea 基础样式：同上，避免只在 .field 里才生效，
   裸放在卡片、div 里的输入框/文本域也要有一致外观 */
input[type=text],input[type=number],input[type=date],input[type=time],
input[type=email],input[type=password]{
  padding:9px 12px;border:1px solid var(--border);border-radius:9px;font-size:13px;
  color:var(--text-dark);background:#fff;font-family:inherit;transition:all .15s;
}
input[type=text]:focus,input[type=number]:focus,input[type=date]:focus,input[type=time]:focus,
input[type=email]:focus,input[type=password]:focus{
  outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.12);
}
textarea{
  display:block;width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:9px;font-size:13px;
  color:var(--text-dark);background:#fff;font-family:inherit;line-height:1.6;
  resize:vertical;min-height:78px;transition:all .15s;
}
textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.12);}
textarea::placeholder,input::placeholder{color:var(--text-faint);}

.field input[type=text],.field input[type=number],.field input[type=date],.field input[type=time],
.field input[type=email],.field input[type=password],.field select,.field textarea{
  width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:9px;font-size:13px;
  color:var(--text-dark);background:#fff;transition:all .15s;
}
.field select{padding-right:32px;}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.12);
}
.field input:disabled,.field textarea:disabled{background:var(--bg-soft2);color:var(--text-soft);cursor:not-allowed;}
.field textarea{resize:vertical;min-height:78px;line-height:1.6;}
.field-hint{font-size:11px;color:var(--text-faint);margin-top:5px;line-height:1.5;}
.field-row{display:flex;gap:10px;align-items:flex-end;}
.field-row>.field{flex:1;margin-bottom:0;}
.input-group{display:flex;gap:8px;}
.input-group input{flex:1;}
.search-box{position:relative;}
.search-box .material-symbols-outlined{position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:18px;color:var(--text-faint);pointer-events:none;}
.search-box input{padding-left:36px !important;}

/* 开关 */
.switch{width:38px;height:22px;border-radius:999px;background:var(--border);position:relative;cursor:pointer;display:inline-block;flex-shrink:0;transition:background .18s;}
.switch.on{background:var(--brand);}
.switch::after{content:'';position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .18s;box-shadow:0 1px 3px rgba(0,0,0,.2);}
.switch.on::after{left:18px;}
.switch-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:12px 0;border-bottom:1px solid var(--border-soft);}
.switch-row:last-child{border-bottom:none;}
.switch-row .sr-t{font-size:13px;font-weight:600;color:var(--text-dark);}
.switch-row .sr-d{font-size:11.5px;color:var(--text-faint);margin-top:3px;line-height:1.55;}

/* 芯片 */
.chip{
  display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:9px;
  background:var(--bg-soft2);color:var(--text-mid);font-size:12.5px;font-weight:500;
  border:1px solid var(--border);cursor:pointer;transition:all .15s;user-select:none;
}
.chip .material-symbols-outlined{font-size:15px;}
.chip:hover{border-color:#cbd5e1;}
.chip.active{background:var(--info-bg);color:var(--brand);border-color:var(--info-border);font-weight:600;}
.chip-group{display:flex;gap:8px;flex-wrap:wrap;}

/* 复选/单选卡 */
.check-card{
  display:flex;align-items:flex-start;gap:10px;padding:12px 14px;border:1px solid var(--border);
  border-radius:11px;cursor:pointer;transition:all .15s;background:#fff;
}
.check-card:hover{border-color:#cbd5e1;background:var(--bg-soft);}
.check-card.active{border-color:var(--brand);background:var(--info-bg);}
.check-card .cbox{
  width:18px;height:18px;border:1.5px solid var(--border);border-radius:5px;flex-shrink:0;margin-top:1px;
  display:flex;align-items:center;justify-content:center;transition:all .15s;background:#fff;
}
.check-card.active .cbox{background:var(--brand);border-color:var(--brand);}
.check-card .cbox .material-symbols-outlined{font-size:14px;color:#fff;opacity:0;}
.check-card.active .cbox .material-symbols-outlined{opacity:1;}
.check-card .cc-t{font-size:13px;font-weight:600;color:var(--text-dark);}
.check-card.active .cc-t{color:var(--brand);}
.check-card .cc-d{font-size:11.5px;color:var(--text-faint);margin-top:2px;line-height:1.5;}

/* 模式选择卡（sns 文生图风格） */
.mode-card{
  padding:16px 12px;border-radius:14px;border:1px solid var(--border-soft);background:#fff;
  cursor:pointer;transition:all .15s;display:flex;flex-direction:column;align-items:center;
  justify-content:center;text-align:center;gap:7px;
}
.mode-card:hover{border-color:#cbd5e1;background:var(--bg-soft);}
.mode-card.active{background:var(--info-bg);border-color:var(--brand);box-shadow:var(--sh-sm);}
.mode-card .material-symbols-outlined{font-size:28px;color:var(--text-faint);}
.mode-card.active .material-symbols-outlined{color:var(--brand);}
.mode-card .mc-t{font-size:13px;font-weight:700;color:var(--text-dark);}
.mode-card.active .mc-t{color:var(--brand);}
.mode-card .mc-d{font-size:11px;color:var(--text-faint);line-height:1.4;}

/* ---------- 13. 上传区 ---------- */
.dropzone{
  border:2px dashed var(--border);border-radius:var(--radius-md);padding:28px 16px;text-align:center;
  color:var(--text-faint);background:var(--bg-soft);cursor:pointer;transition:all .15s;
}
.dropzone:hover{border-color:var(--brand);background:var(--info-bg);}
.dropzone .material-symbols-outlined{font-size:30px;color:var(--text-faint);margin-bottom:6px;display:block;}
.dropzone:hover .material-symbols-outlined{color:var(--brand);}
.dropzone .dz-title{font-size:13px;font-weight:600;color:var(--text-soft);}
.dropzone .dz-sub{font-size:11.5px;margin-top:4px;}
.dropzone.sm{padding:18px 12px;}

/* ---------- 14. 图表 ---------- */
.bars{display:flex;align-items:flex-end;gap:8px;height:150px;padding-top:8px;}
.bars .bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;height:100%;justify-content:flex-end;}
.bars .bar{width:100%;max-width:38px;background:linear-gradient(180deg,#5b4ff0,var(--brand));border-radius:6px 6px 0 0;transition:opacity .15s;position:relative;}
.bars .bar-col:hover .bar{opacity:.82;}
.bars .bar.alt{background:linear-gradient(180deg,#a5b4fc,#818cf8);}
.bars .bar-label{font-size:10.5px;color:var(--text-faint);white-space:nowrap;}
.bars .bar-val{font-size:10px;font-weight:700;color:var(--text-soft);}

.hbar-row{display:flex;align-items:center;gap:10px;margin-bottom:11px;}
.hbar-row:last-child{margin-bottom:0;}
.hbar-label{width:104px;font-size:12px;color:var(--text-soft);flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hbar-track{flex:1;height:9px;background:var(--bg-soft2);border-radius:999px;overflow:hidden;}
.hbar-fill{height:100%;background:var(--brand);border-radius:999px;transition:width .4s ease;}
.hbar-fill.c2{background:#7b6bf5;}
.hbar-fill.c3{background:#0891b2;}
.hbar-fill.c4{background:var(--success);}
.hbar-fill.c5{background:var(--warn);}
.hbar-value{width:66px;text-align:right;font-size:12px;font-weight:700;color:var(--text-dark);font-variant-numeric:tabular-nums;}

.donut-wrap{display:flex;align-items:center;gap:20px;}
.donut{width:132px;height:132px;border-radius:50%;flex-shrink:0;position:relative;}
.donut::after{content:'';position:absolute;inset:26px;background:#fff;border-radius:50%;}
.donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:1;}
.donut-center .dv{font-size:19px;font-weight:800;color:var(--text-dark);}
.donut-center .dl{font-size:10.5px;color:var(--text-faint);}
.legend{flex:1;display:flex;flex-direction:column;gap:9px;}
.legend-item{display:flex;align-items:center;gap:8px;font-size:12px;}
.legend-item .sw{width:9px;height:9px;border-radius:3px;flex-shrink:0;}
.legend-item .lb{flex:1;color:var(--text-soft);}
.legend-item .vl{font-weight:700;color:var(--text-dark);}

.sparkline{display:flex;align-items:flex-end;gap:3px;height:38px;}
.sparkline i{flex:1;background:var(--info-border);border-radius:2px 2px 0 0;}
.sparkline i.hi{background:var(--brand);}

/* 折线图（纯 CSS/SVG 容器） */
.linechart{width:100%;height:170px;}
.linechart svg{width:100%;height:100%;overflow:visible;}

/* ---------- 15. 日历 ---------- */
.cal-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px;flex-wrap:wrap;}
.cal-month{font-size:19px;font-weight:800;color:var(--text-dark);letter-spacing:-.02em;}
.cal-nav{display:flex;align-items:center;gap:2px;background:var(--bg-soft2);border:1px solid var(--border);border-radius:10px;padding:3px;}
.cal-nav button{padding:4px 8px;border-radius:7px;color:var(--text-soft);display:flex;align-items:center;transition:all .15s;font-size:12px;font-weight:700;}
.cal-nav button:hover{background:#fff;color:var(--text-dark);}
.cal-nav .material-symbols-outlined{font-size:18px;}

.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--border);border:1px solid var(--border);border-radius:14px;overflow:hidden;}
.cal-dow{font-size:11px;font-weight:700;color:var(--text-faint);text-transform:uppercase;letter-spacing:.05em;padding:9px 10px;background:#fff;text-align:right;}
.cal-cell{min-height:106px;padding:7px;background:#fff;position:relative;display:flex;flex-direction:column;gap:4px;transition:background .12s;}
.cal-cell:hover{background:var(--bg-soft);}
.cal-cell.muted{background:var(--bg-soft);opacity:.5;}
.cal-cell.today{background:rgba(59,48,232,.04);box-shadow:inset 0 0 0 2px rgba(59,48,232,.28);}
.cal-cell.dragover{background:var(--info-bg);box-shadow:inset 0 0 0 2px var(--brand);}
.cal-date{position:absolute;top:6px;right:8px;font-size:11.5px;font-weight:700;color:var(--text-mid);}
.cal-cell.today .cal-date{color:var(--brand);background:rgba(59,48,232,.12);width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;top:5px;right:5px;}
.cal-posts{margin-top:22px;display:flex;flex-direction:column;gap:4px;}
.cal-post{
  background:#fff;border:1px solid var(--border);border-radius:8px;padding:4px 6px 4px 8px;
  display:flex;align-items:center;gap:6px;cursor:pointer;position:relative;overflow:hidden;
  transition:all .15s;box-shadow:0 1px 2px rgba(15,23,42,.04);
}
.cal-post:hover{box-shadow:var(--sh-md);border-color:rgba(59,48,232,.4);}
.cal-post::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--brand);}
.cal-post.st-published::before{background:var(--success);}
.cal-post.st-review::before{background:var(--warn);}
.cal-post.st-failed::before{background:var(--danger);}
.cal-post .thumb{width:18px;height:18px;border-radius:4px;background:var(--info-bg);color:var(--brand);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.cal-post .thumb .material-symbols-outlined{font-size:12px;}
.cal-post .ttl{font-size:10.5px;font-weight:600;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;}
.cal-post .plat{font-size:9.5px;font-weight:700;color:var(--text-faint);flex-shrink:0;}
.cal-drop-hint{
  border:2px dashed rgba(59,48,232,.3);background:rgba(59,48,232,.05);border-radius:8px;
  padding:6px;text-align:center;font-size:10.5px;font-weight:600;color:var(--brand);
}

/* 草稿箱 */
.draft-card{
  background:#fff;border:1px solid var(--border);border-radius:11px;padding:11px;cursor:grab;
  transition:all .15s;box-shadow:var(--sh-sm);
}
.draft-card:hover{box-shadow:var(--sh-md);border-color:rgba(59,48,232,.35);}
.draft-card:active{cursor:grabbing;}
.draft-card.dragging{opacity:.45;}
.draft-head{display:flex;gap:10px;margin-bottom:8px;}
.draft-thumb{width:42px;height:42px;border-radius:9px;flex-shrink:0;background:linear-gradient(135deg,#e0e7ff,#c7d2fe);display:flex;align-items:center;justify-content:center;color:var(--brand);}
.draft-thumb .material-symbols-outlined{font-size:20px;}
.draft-meta{flex:1;min-width:0;}
.draft-badges{display:flex;align-items:center;gap:5px;margin-bottom:3px;}
.draft-badge{padding:1px 6px;border-radius:5px;background:var(--info-bg);font-size:9.5px;font-weight:700;color:var(--brand);text-transform:uppercase;letter-spacing:.03em;}
.draft-plat{font-size:10.5px;color:var(--text-faint);}
.draft-title{font-size:12px;font-weight:700;color:var(--text-dark);line-height:1.35;}
.draft-foot{display:flex;justify-content:space-between;align-items:center;padding-top:8px;border-top:1px solid var(--bg-soft2);}
.draft-foot .hint{font-size:10px;color:var(--text-faint);}

/* ---------- 16. 会话 / 消息 ---------- */
.msg-list{display:flex;flex-direction:column;gap:1px;}
.msg-item{display:flex;gap:11px;padding:11px;border-radius:10px;cursor:pointer;transition:background .12s;position:relative;}
.msg-item:hover{background:var(--bg-soft);}
.msg-item.active{background:var(--info-bg);}
.msg-item.active::before{content:'';position:absolute;left:0;top:9px;bottom:9px;width:3px;background:var(--brand);border-radius:0 3px 3px 0;}
.msg-avatar{width:38px;height:38px;border-radius:50%;background:var(--bg-soft2);color:var(--text-soft);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:12.5px;flex-shrink:0;}
.msg-avatar.brand{background:var(--info-bg);color:var(--brand);}
.msg-body{flex:1;min-width:0;}
.msg-top{display:flex;justify-content:space-between;gap:8px;align-items:center;}
.msg-name{font-size:13px;font-weight:700;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.msg-time{font-size:10.5px;color:var(--text-faint);flex-shrink:0;}
.msg-preview{font-size:11.5px;color:var(--text-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:3px;}
.msg-tags{display:flex;gap:4px;margin-top:5px;flex-wrap:wrap;}
.msg-unread{width:16px;height:16px;border-radius:999px;background:var(--brand);color:#fff;font-size:9.5px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;}

/* 聊天气泡 */
.chat-scroll{display:flex;flex-direction:column;gap:14px;padding:4px 2px;max-height:340px;overflow-y:auto;}
.bubble-row{display:flex;gap:9px;}
.bubble-row.out{flex-direction:row-reverse;}
.bubble{max-width:78%;padding:10px 13px;font-size:12.5px;line-height:1.65;border-radius:13px;}
.bubble-row.in .bubble{background:#fff;border:1px solid var(--border);color:var(--text-mid);border-bottom-left-radius:4px;}
.bubble-row.out .bubble{background:var(--brand);color:#fff;border-bottom-right-radius:4px;box-shadow:var(--sh-brand);}
.bubble-meta{font-size:10px;color:var(--text-faint);margin-top:5px;}
.bubble-row.out .bubble-meta{text-align:right;}
.bubble .trans{margin-top:7px;padding-top:7px;border-top:1px dashed rgba(148,163,184,.4);font-size:11.5px;opacity:.85;}

/* ---------- 17. AI 提示区 ---------- */
.ai-box{background:var(--info-bg);border:1px solid var(--info-border);border-radius:var(--radius-md);padding:14px 16px;}
.ai-box-title{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:700;color:var(--brand);margin-bottom:8px;}
.ai-box-title .material-symbols-outlined{font-size:18px;}
.ai-box p{font-size:12.5px;line-height:1.85;color:var(--text-mid);margin:0;}
.ai-box p b{color:var(--text-dark);font-weight:700;}
.ai-disclaimer{
  display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--warn);
  background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:9px;padding:8px 11px;
}
.ai-disclaimer .material-symbols-outlined{font-size:15px;}
.ai-prompt-bar{display:flex;gap:8px;margin-top:12px;}
.ai-prompt-bar input{
  flex:1;padding:10px 14px;border:1px solid var(--info-border);border-radius:10px;font-size:13px;background:#fff;
}
.ai-prompt-bar input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.1);}

/* ---------- 18. 空状态 ---------- */
.empty-state{min-height:calc(100vh - 200px);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;}
.empty-state .icon-wrap{width:88px;height:88px;border-radius:24px;background:var(--info-bg);display:flex;align-items:center;justify-content:center;margin-bottom:22px;}
.empty-state .icon-wrap .material-symbols-outlined{font-size:44px;color:var(--brand);}
.empty-state .icon-wrap.gray{background:var(--bg-soft2);}
.empty-state .icon-wrap.gray .material-symbols-outlined{color:var(--text-faint);}
.empty-state h2{font-size:19px;color:var(--text-dark);margin:0 0 8px;font-weight:700;}
.empty-state p{font-size:13.5px;color:var(--text-soft);max-width:460px;line-height:1.75;margin:0 0 22px;}
.empty-inline{padding:32px 16px;text-align:center;color:var(--text-faint);}
.empty-inline .material-symbols-outlined{font-size:34px;display:block;margin-bottom:8px;}
.empty-inline .ei-t{font-size:12.5px;}

/* ---------- 19. 入口页 ---------- */
.hero{
  background:var(--brand-gradient);border-radius:var(--radius-xl);padding:28px 32px;color:#fff;
  margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:22px;
  position:relative;overflow:hidden;
}
.hero::after{
  content:'';position:absolute;right:-60px;top:-60px;width:240px;height:240px;
  background:rgba(255,255,255,.08);border-radius:50%;
}
.hero-text{position:relative;z-index:1;}
.hero h1{font-size:24px;margin:0 0 7px;font-weight:800;letter-spacing:-.02em;}
.hero p{font-size:13px;opacity:.88;margin:0;max-width:560px;line-height:1.7;}
.hero-kpis{display:flex;gap:30px;position:relative;z-index:1;}
.hero-kpi .v{font-size:23px;font-weight:800;letter-spacing:-.02em;}
.hero-kpi .l{font-size:11.5px;opacity:.82;margin-top:2px;}

.sys-card{
  background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius-lg);padding:18px;
  display:flex;flex-direction:column;gap:13px;transition:all .18s;
}
.sys-card:hover{box-shadow:var(--sh-lg);transform:translateY(-3px);border-color:rgba(59,48,232,.2);}
.sys-card.disabled{opacity:.72;}
.sys-card.disabled:hover{transform:none;box-shadow:var(--sh-sm);}
.sys-card-head{display:flex;align-items:center;gap:12px;}
.sys-card-icon{width:42px;height:42px;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#fff;flex-shrink:0;}
.sys-card-icon .material-symbols-outlined{font-size:23px;}
.sys-card-title{font-size:14.5px;font-weight:700;color:var(--text-dark);}
.sys-card-desc{font-size:11.5px;color:var(--text-faint);margin-top:1px;}
.sys-card-metrics{display:flex;gap:14px;padding:12px 0;border-top:1px dashed var(--border);border-bottom:1px dashed var(--border);}
.sys-card-metrics .m{flex:1;min-width:0;}
.sys-card-metrics .m .v{font-size:16px;font-weight:800;color:var(--text-dark);letter-spacing:-.02em;}
.sys-card-metrics .m .l{font-size:10.5px;color:var(--text-faint);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sys-card-footer{display:flex;justify-content:space-between;align-items:center;}

.common-strip{display:flex;gap:12px;flex-wrap:wrap;}
.common-strip a{
  flex:1;min-width:170px;background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius-md);
  padding:15px;display:flex;align-items:center;gap:12px;transition:all .15s;
}
.common-strip a:hover{border-color:var(--brand);box-shadow:0 4px 14px var(--brand-shadow);transform:translateY(-2px);}
.common-strip .ic{width:38px;height:38px;border-radius:10px;background:var(--info-bg);color:var(--brand);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.common-strip .t{font-size:13px;font-weight:700;color:var(--text-dark);}
.common-strip .s{font-size:10.5px;color:var(--text-faint);margin-top:1px;}

/* 待办聚合 */
.todo-item{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--border-soft);}
.todo-item:last-child{border-bottom:none;}
.todo-ic{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.todo-ic .material-symbols-outlined{font-size:17px;}
.todo-ic.danger{background:var(--danger-bg);color:var(--danger);}
.todo-ic.warn{background:var(--warn-bg);color:var(--warn);}
.todo-ic.info{background:var(--info-bg);color:var(--brand);}
.todo-body{flex:1;min-width:0;}
.todo-t{font-size:12.5px;font-weight:600;color:var(--text-dark);}
.todo-d{font-size:11px;color:var(--text-faint);margin-top:2px;}

/* ---------- 20. 素材 / 结果网格 ---------- */
.asset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:13px;}
.asset{border:1px solid var(--border-soft);border-radius:12px;overflow:hidden;background:#fff;cursor:pointer;transition:all .15s;position:relative;}
.asset:hover{box-shadow:var(--sh-md);border-color:rgba(59,48,232,.3);transform:translateY(-2px);}
.asset.selected{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-shadow);}
.asset-thumb{height:104px;display:flex;align-items:center;justify-content:center;position:relative;}
.asset-thumb .material-symbols-outlined{font-size:30px;opacity:.75;}
.asset-thumb .dur{position:absolute;right:6px;bottom:6px;background:rgba(15,23,42,.72);color:#fff;font-size:10px;font-weight:600;padding:2px 6px;border-radius:5px;}
.asset-thumb .ratio{position:absolute;left:6px;top:6px;background:rgba(15,23,42,.6);color:#fff;font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:5px;}
.asset-info{padding:9px 10px;}
.asset-name{font-size:11.5px;font-weight:600;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.asset-meta{font-size:10px;color:var(--text-faint);margin-top:2px;display:flex;justify-content:space-between;gap:6px;}
.asset-check{position:absolute;top:7px;right:7px;width:19px;height:19px;border-radius:6px;background:rgba(255,255,255,.92);border:1.5px solid var(--border);display:flex;align-items:center;justify-content:center;}
.asset.selected .asset-check{background:var(--brand);border-color:var(--brand);}
.asset-check .material-symbols-outlined{font-size:14px;color:#fff;opacity:0;}
.asset.selected .asset-check .material-symbols-outlined{opacity:1;}

/* 渐变缩略图色板 */
.g1{background:linear-gradient(135deg,#e0e7ff,#c7d2fe);color:#4338ca;}
.g2{background:linear-gradient(135deg,#fce7f3,#fbcfe8);color:#be185d;}
.g3{background:linear-gradient(135deg,#d1fae5,#a7f3d0);color:#047857;}
.g4{background:linear-gradient(135deg,#fef3c7,#fde68a);color:#b45309;}
.g5{background:linear-gradient(135deg,#cffafe,#a5f3fc);color:#0e7490;}
.g6{background:linear-gradient(135deg,#ede9fe,#ddd6fe);color:#6d28d9;}
.g7{background:linear-gradient(135deg,#ffe4e6,#fecdd3);color:#be123c;}
.g8{background:linear-gradient(135deg,#f1f5f9,#e2e8f0);color:#475569;}

/* ---------- 21. 平台图标 ---------- */
.plat-badge{
  width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:#fff;flex-shrink:0;letter-spacing:-.02em;
}
.p-ig{background:linear-gradient(135deg,#f58529,#dd2a7b,#8134af);}
.p-fb{background:#1877f2;}
.p-tk{background:#010101;}
.p-yt{background:#ff0000;}
.p-tw{background:#0f172a;}
.p-li{background:#0a66c2;}
.p-pt{background:#e60023;}
.p-th{background:#0f172a;}
.p-wa{background:#25d366;}
.p-ms{background:#0084ff;}
.p-em{background:#64748b;}

/* ---------- 22. 弹窗 ---------- */
.modal-mask{
  position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:500;
  display:none;align-items:center;justify-content:center;padding:24px;backdrop-filter:blur(2px);
}
.modal-mask.open{display:flex;}
.modal{
  background:#fff;border-radius:var(--radius-lg);width:100%;max-height:88vh;overflow-y:auto;
  box-shadow:0 24px 60px rgba(15,23,42,.24);animation:modalIn .18s ease;
}
@keyframes modalIn{from{opacity:0;transform:translateY(12px) scale(.98);}to{opacity:1;transform:none;}}
.modal.s{max-width:480px;}
.modal.m{max-width:680px;}
.modal.l{max-width:980px;}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--border-soft);position:sticky;top:0;background:#fff;z-index:2;border-radius:var(--radius-lg) var(--radius-lg) 0 0;}
.modal-head h3{margin:0;font-size:16px;font-weight:700;color:var(--text-dark);}
.modal-body{padding:20px 22px;}
.modal-foot{padding:14px 22px;border-top:1px solid var(--border-soft);display:flex;justify-content:flex-end;gap:9px;position:sticky;bottom:0;background:#fff;}

/* ---------- 23. Toast ---------- */
.toast-wrap{position:fixed;top:74px;right:20px;z-index:900;display:flex;flex-direction:column;gap:9px;}
.toast{
  background:var(--text-dark);color:#fff;padding:11px 16px;border-radius:11px;font-size:12.5px;font-weight:500;
  box-shadow:0 8px 26px rgba(15,23,42,.28);display:flex;align-items:center;gap:8px;
  animation:toastIn .2s ease;max-width:360px;
}
@keyframes toastIn{from{opacity:0;transform:translateX(24px);}to{opacity:1;transform:none;}}
.toast.success{background:var(--success);}
.toast.error{background:var(--danger);}
.toast.info{background:var(--brand);}
.toast .material-symbols-outlined{font-size:17px;}

/* ---------- 24. 两栏 / 三栏工作区 ---------- */
.split{display:grid;gap:14px;}
.split-340{grid-template-columns:340px 1fr;}
.split-300{grid-template-columns:300px 1fr;}
.split-3{grid-template-columns:300px 1fr 320px;}
.split-r320{grid-template-columns:1fr 320px;}
.split-r360{grid-template-columns:1fr 360px;}
@media(max-width:1280px){
  .split-3{grid-template-columns:280px 1fr;}
  .split-3 > :last-child{grid-column:1/-1;}
}
@media(max-width:1100px){
  .split-340,.split-300,.split-r320,.split-r360,.split-3{grid-template-columns:1fr;}
}
.pane{background:#fff;border:1px solid var(--border-soft);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden;}
.pane-head{padding:14px 16px;border-bottom:1px solid var(--border-soft);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-shrink:0;}
.pane-head h3{margin:0;font-size:14px;font-weight:700;color:var(--text-dark);}
.pane-head .ph-sub{font-size:11px;color:var(--text-faint);margin-top:2px;}
.pane-body{padding:12px;overflow-y:auto;flex:1;}
.pane-body.flush{padding:0;}
.pane-foot{padding:12px 16px;border-top:1px solid var(--border-soft);flex-shrink:0;}
.pane-scroll{max-height:600px;}

/* ---------- 25. 详情字段 ---------- */
.detail-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px 18px;}
@media(max-width:900px){.detail-grid{grid-template-columns:repeat(2,1fr);}}
.detail-item .dl{font-size:11px;color:var(--text-faint);margin-bottom:3px;}
.detail-item .dv{font-size:13px;font-weight:600;color:var(--text-dark);}
.detail-section{border-top:1px solid var(--border-soft);margin-top:16px;padding-top:14px;}
.detail-section-title{font-size:12.5px;font-weight:700;color:var(--text-dark);margin-bottom:10px;display:flex;align-items:center;gap:6px;}
.detail-section-title .material-symbols-outlined{font-size:16px;color:var(--brand);}

/* 时间线 */
.timeline{position:relative;padding-left:20px;}
.timeline::before{content:'';position:absolute;left:5px;top:6px;bottom:6px;width:1.5px;background:var(--border);}
.tl-item{position:relative;padding-bottom:15px;}
.tl-item:last-child{padding-bottom:0;}
.tl-item::before{content:'';position:absolute;left:-18px;top:4px;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--brand);}
.tl-item.done::before{background:var(--success);border-color:var(--success);}
.tl-item.pending::before{border-color:var(--text-faint);}
.tl-t{font-size:12.5px;font-weight:600;color:var(--text-dark);}
.tl-d{font-size:11.5px;color:var(--text-soft);margin-top:3px;line-height:1.6;}
.tl-time{font-size:10.5px;color:var(--text-faint);margin-top:3px;}

/* 步骤条 */
.steps{display:flex;align-items:center;gap:0;margin-bottom:20px;}
.step{display:flex;align-items:center;gap:9px;flex:1;}
.step-num{
  width:26px;height:26px;border-radius:50%;background:var(--bg-soft2);color:var(--text-faint);
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;
}
.step.active .step-num{background:var(--brand);color:#fff;box-shadow:var(--sh-brand);}
.step.done .step-num{background:var(--success);color:#fff;}
.step-label{font-size:12.5px;font-weight:600;color:var(--text-faint);white-space:nowrap;}
.step.active .step-label{color:var(--brand);}
.step.done .step-label{color:var(--text-mid);}
.step-line{flex:1;height:1.5px;background:var(--border);margin:0 12px;}
.step.done + .step .step-line,.step.done .step-line{background:var(--success);}

/* 进度条 */
.progress{height:7px;background:var(--bg-soft2);border-radius:999px;overflow:hidden;}
.progress-fill{height:100%;background:var(--brand);border-radius:999px;transition:width .4s;}
.progress-fill.success{background:var(--success);}
.progress-fill.warn{background:var(--warn);}
.progress-fill.danger{background:var(--danger);}

/* 折叠面板 */
.accordion{border:1px solid var(--border-soft);border-radius:11px;overflow:hidden;margin-bottom:9px;}
.acc-head{padding:12px 14px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;background:#fff;transition:background .12s;gap:10px;}
.acc-head:hover{background:var(--bg-soft);}
.acc-head .acc-t{font-size:12.5px;font-weight:600;color:var(--text-dark);display:flex;align-items:center;gap:8px;}
.acc-head .material-symbols-outlined.arrow{font-size:19px;color:var(--text-faint);transition:transform .18s;}
.accordion.open .acc-head .material-symbols-outlined.arrow{transform:rotate(180deg);}
.acc-body{display:none;padding:0 14px 14px;border-top:1px solid var(--border-soft);}
.accordion.open .acc-body{display:block;padding-top:12px;}

/* 工具条 */
.toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:14px;}
.toolbar-left{display:flex;align-items:center;gap:9px;flex-wrap:wrap;flex:1;}
.toolbar-right{display:flex;gap:8px;flex-shrink:0;}
.toolbar select,.toolbar input[type=text],.toolbar input[type=date]{
  padding:8px 11px;border:1px solid var(--border);border-radius:9px;font-size:12.5px;color:var(--text-mid);background:#fff;
}
.toolbar select{padding-right:30px;}
.toolbar select:focus,.toolbar input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px rgba(59,48,232,.1);}

/* 分页 */
.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font-size:12.5px;color:var(--text-soft);}
.pager{display:flex;gap:4px;}
.pager button{min-width:30px;height:30px;border-radius:8px;border:1px solid var(--border);background:#fff;font-size:12.5px;font-weight:600;color:var(--text-mid);display:flex;align-items:center;justify-content:center;transition:all .15s;}
.pager button:hover{border-color:var(--brand);color:var(--brand);}
.pager button.active{background:var(--brand);border-color:var(--brand);color:#fff;}
.pager button .material-symbols-outlined{font-size:16px;}

/* 通用工具类 */
.mt-0{margin-top:0;} .mt-2{margin-top:8px;} .mt-3{margin-top:12px;} .mt-4{margin-top:16px;}
.mb-0{margin-bottom:0;} .mb-2{margin-bottom:8px;} .mb-3{margin-bottom:12px;} .mb-4{margin-bottom:16px;}
.text-soft{color:var(--text-soft);} .text-faint{color:var(--text-faint);} .text-dark{color:var(--text-dark);}
.text-brand{color:var(--brand);} .text-success{color:var(--success);} .text-danger{color:var(--danger);} .text-warn{color:var(--warn);}
.fs-10{font-size:10px;} .fs-11{font-size:11px;} .fs-12{font-size:12px;}
.fs-12\.5{font-size:12.5px;} .fs-13{font-size:13px;} .fs-15{font-size:15px;} .fs-18{font-size:18px;}
.text-mid{color:var(--text-mid);}
.text-center{text-align:center;}
.mt-1{margin-top:4px;}
.fw-6{font-weight:600;} .fw-7{font-weight:700;} .fw-8{font-weight:800;}
.lh-17{line-height:1.7;}
.nowrap{white-space:nowrap;}
.divider{height:1px;background:var(--border-soft);margin:14px 0;}
.scroll-y{overflow-y:auto;}
.max-360{max-height:360px;} .max-460{max-height:460px;} .max-560{max-height:560px;}
