:root{--primary:#0891b2;--primary-dark:#0e7490;--primary-light:#22d3ee;--primary-bg:#ecfeff;--primary-gradient:linear-gradient(135deg,#0891b2 0%,#0e7490 100%);--accent:#1e3a8a;--text-primary:#1e293b;--text-secondary:#64748b;--text-muted:#94a3b8;--bg-primary:#fff;--bg-secondary:#f8fafc;--bg-tertiary:#f1f5f9;--bg-card:#fff;--border:#e2e8f0;--border-light:#f1f5f9;--success:#10b981;--success-bg:#ecfdf5;--warning:#f59e0b;--warning-bg:#fffbeb;--danger:#ef4444;--danger-bg:#fef2f2;--info:#3b82f6;--info-bg:#eff6ff;--shadow-sm:0 1px 2px rgba(0,0,0,.05);--shadow:0 1px 3px rgba(0,0,0,.1);--shadow-md:0 4px 6px -1px rgba(0,0,0,.1);--shadow-lg:0 10px 15px -3px rgba(0,0,0,.1);--radius-sm:6px;--radius:8px;--radius-md:12px;--radius-lg:16px;--spacing-xs:4px;--spacing-sm:8px;--spacing:16px;--spacing-md:24px;--spacing-lg:32px;--font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;--font-size-xs:12px;--font-size-sm:13px;--font-size:14px;--font-size-md:16px;--font-size-lg:18px;--font-size-xl:20px;--font-size-2xl:24px;--sidebar-width:240px;--header-height:64px;--transition:all .2s ease}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:var(--font-family);font-size:var(--font-size);color:var(--text-primary);background:var(--bg-secondary);line-height:1.6;-webkit-font-smoothing:antialiased}
a{color:var(--primary);text-decoration:none;transition:var(--transition)}
a:hover{color:var(--primary-dark)}
button{cursor:pointer;font-family:inherit;border:none;outline:none;transition:var(--transition)}
input,select,textarea{font-family:inherit;font-size:var(--font-size);outline:none;transition:var(--transition)}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border-radius:var(--radius);font-size:var(--font-size);font-weight:500;white-space:nowrap}
.btn-primary{background:var(--primary-gradient);color:#fff;box-shadow:var(--shadow-sm)}
.btn-primary:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}
.btn-secondary{background:var(--bg-tertiary);color:var(--text-primary)}
.btn-secondary:hover{background:var(--border)}
.btn-outline{background:transparent;border:1px solid var(--border);color:var(--text-primary)}
.btn-outline:hover{border-color:var(--primary);color:var(--primary)}
.btn-danger{background:var(--danger);color:#fff}
.btn-sm{padding:5px 12px;font-size:var(--font-size-sm)}
.btn-lg{padding:12px 24px;font-size:var(--font-size-md)}
.btn-block{width:100%}
.card{background:var(--bg-card);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);border:1px solid var(--border-light);transition:var(--transition)}
.card:hover{box-shadow:var(--shadow)}
.card-header{padding:var(--spacing) var(--spacing-md);border-bottom:1px solid var(--border-light);display:flex;align-items:center;justify-content:space-between}
.card-title{font-size:var(--font-size-md);font-weight:600}
.card-body{padding:var(--spacing-md)}
.tag{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--radius-sm);font-size:var(--font-size-xs);font-weight:500}
.tag-primary{background:var(--primary-bg);color:var(--primary-dark)}
.tag-success{background:var(--success-bg);color:var(--success)}
.tag-warning{background:var(--warning-bg);color:var(--warning)}
.tag-danger{background:var(--danger-bg);color:var(--danger)}
.tag-info{background:var(--info-bg);color:var(--info)}
.tag-muted{background:var(--bg-tertiary);color:var(--text-secondary)}
.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.status-dot.success{background:var(--success);box-shadow:0 0 0 3px var(--success-bg)}
.status-dot.warning{background:var(--warning);box-shadow:0 0 0 3px var(--warning-bg)}
.status-dot.danger{background:var(--danger);box-shadow:0 0 0 3px var(--danger-bg)}
.status-dot.muted{background:var(--text-muted);box-shadow:0 0 0 3px var(--bg-tertiary)}
.form-group{margin-bottom:var(--spacing)}
.form-label{display:block;margin-bottom:6px;font-size:var(--font-size-sm);font-weight:500}
.form-input,.form-select,.form-textarea{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-primary);color:var(--text-primary)}
.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-bg)}
.form-textarea{resize:vertical;min-height:80px}
.table{width:100%;border-collapse:collapse}
.table th,.table td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--border-light)}
.table th{font-size:var(--font-size-sm);font-weight:600;color:var(--text-secondary);background:var(--bg-secondary)}
.table tbody tr{transition:var(--transition-fast)}
.table tbody tr:hover{background:var(--bg-secondary)}
.progress{width:100%;height:6px;background:var(--bg-tertiary);border-radius:3px;overflow:hidden}
.progress-bar{height:100%;background:var(--primary-gradient);border-radius:3px;transition:width .3s ease}
.empty-state{text-align:center;padding:var(--spacing-xl) var(--spacing);color:var(--text-muted)}
.empty-state-icon{font-size:48px;margin-bottom:var(--spacing);opacity:.5}
@keyframes fadeIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
.fade-in{animation:fadeIn .3s ease}
@media(max-width:768px){:root{--sidebar-width:0}.hide-mobile{display:none!important}}

/* ========== 深色主题（与诊断平台对齐） ========== */
[data-theme="dark"] {
  --bg-primary: #0f172a;
  --bg-secondary: #111827;
  --bg-tertiary: #1e293b;
  --bg-card: #1e293b;
  --border: #334155;
  --border-light: #2a3648;
  --text-primary: #e2e8f0;
  --text-secondary: #94a3b8;
  --text-muted: #64748b;
  --primary-bg: rgba(8, 145, 178, 0.16);
  --success-bg: rgba(16, 185, 129, 0.14);
  --warning-bg: rgba(245, 158, 11, 0.14);
  --danger-bg: rgba(239, 68, 68, 0.14);
  --info-bg: rgba(59, 130, 246, 0.14);
  --shadow-sm: 0 1px 2px rgba(0,0,0,.4);
  --shadow: 0 1px 3px rgba(0,0,0,.5);
  --shadow-md: 0 4px 6px -1px rgba(0,0,0,.5);
  --shadow-lg: 0 10px 15px -3px rgba(0,0,0,.55);
}
