:root{--bg-deep: #0f1117;--bg-panel: #1a1f35;--bg-elevated: #1e2d4a;--bg-hover: #243352;--border: #1e3a5f;--border-light:#2a4a7f;--primary: #60a5fa;--primary-glow: rgba(96, 165, 250, .25);--primary-dim: #3b82f6;--primary-dark: #1d4ed8;--success: #34d399;--warning: #fbbf24;--danger: #f87171;--info: #60a5fa;--purple: #a78bfa;--orange: #fb923c;--text-primary: #e2e8f0;--text-secondary: #94a3b8;--text-muted: #64748b;--text-inverse: #0f172a;--font-sans: "PingFang SC", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "JetBrains Mono", "SF Mono", monospace;--space-xs: 4px;--space-sm: 8px;--space-md: 16px;--space-lg: 20px;--space-xl: 28px;--space-2xl: 40px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--shadow-sm: 0 1px 3px rgba(0,0,0,.4);--shadow-md: 0 4px 12px rgba(0,0,0,.5);--shadow-lg: 0 8px 32px rgba(0,0,0,.6);--shadow-glow: 0 0 20px var(--primary-glow);--ease-out: cubic-bezier(.16, 1, .3, 1);--duration-fast: .15s;--duration-normal: .3s}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;background:var(--bg-deep);color:var(--text-primary);font-family:var(--font-sans);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;overflow:hidden}#app{height:100%}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-light);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--primary-dim)}.kpi-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-lg);text-align:center;transition:transform var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out)}.kpi-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.kpi-card .kpi-val{font-size:30px;font-weight:700;color:var(--primary);font-family:var(--font-mono);line-height:1.2}.kpi-card .kpi-lbl{font-size:12px;color:var(--text-muted);margin-top:6px}.kpi-card .kpi-sub{font-size:11px;color:var(--text-muted);margin-top:3px}.kpi-card.green .kpi-val{color:var(--success)}.kpi-card.orange .kpi-val{color:var(--orange)}.kpi-card.red .kpi-val{color:var(--danger)}.kpi-card.purple .kpi-val{color:var(--purple)}.kpi-card.yellow .kpi-val{color:var(--warning)}.insight-card{background:var(--bg-panel);border-left:4px solid var(--primary);border-radius:var(--radius-md);padding:18px}.insight-card h4{font-size:14px;font-weight:600;color:var(--primary);margin-bottom:8px}.insight-card p{font-size:13px;color:var(--text-secondary);line-height:1.7}.insight-card.warn{border-left-color:var(--warning)}.insight-card.warn h4{color:var(--warning)}.insight-card.danger{border-left-color:var(--danger)}.insight-card.danger h4{color:var(--danger)}.insight-card.success{border-left-color:var(--success)}.insight-card.success h4{color:var(--success)}.insight-card.purple{border-left-color:var(--purple)}.insight-card.purple h4{color:var(--purple)}.note-box{background:#0d1b2e;border-radius:var(--radius-md);padding:14px;margin-top:14px}.note-box p{font-size:13px;color:var(--text-secondary);line-height:1.8}.note-box strong{color:var(--text-primary)}.tag{display:inline-block;padding:2px 10px;border-radius:4px;font-size:11px;font-weight:500}.tag-primary{background:#60a5fa26;color:var(--primary);border:1px solid var(--primary-dim)}.tag-success{background:#34d39926;color:var(--success);border:1px solid var(--success)}.tag-warning{background:#fbbf2426;color:var(--warning);border:1px solid var(--warning)}.tag-danger{background:#f8717126;color:var(--danger);border:1px solid var(--danger)}.tag-purple{background:#a78bfa26;color:var(--purple);border:1px solid var(--purple)}.progress-gradient{height:8px;border-radius:4px;overflow:hidden;background:#1e2d4a}.progress-gradient .bar{height:100%;border-radius:4px;transition:width .5s var(--ease-out)}.progress-gradient .bar.blue{background:linear-gradient(90deg,var(--primary-dark),var(--primary))}.progress-gradient .bar.green{background:linear-gradient(90deg,#059669,var(--success))}.progress-gradient .bar.orange{background:linear-gradient(90deg,#ea580c,var(--orange))}.progress-gradient .bar.red{background:linear-gradient(90deg,#dc2626,var(--danger))}.badge{display:inline-flex;align-items:center;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:600}.badge-primary{background:#60a5fa26;color:var(--primary)}.badge-success{background:#34d39926;color:var(--success)}.badge-warning{background:#fbbf2426;color:var(--warning)}.badge-danger{background:#f8717126;color:var(--danger)}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.status-dot.active{background:var(--success);box-shadow:0 0 6px #34d39980}.status-dot.inactive{background:var(--text-muted)}.status-dot.warning{background:var(--warning);box-shadow:0 0 6px #fbbf2466}.btn{display:inline-flex;align-items:center;gap:var(--space-sm);padding:8px 18px;border:none;border-radius:var(--radius-sm);font-family:var(--font-sans);font-size:13px;font-weight:600;cursor:pointer;transition:all var(--duration-fast) var(--ease-out)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-dim);box-shadow:var(--shadow-glow)}.btn-outline{background:transparent;border:1px solid var(--border-light);color:var(--text-secondary)}.btn-outline:hover{border-color:var(--primary);color:var(--primary)}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg-elevated);color:var(--text-primary)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#ef4444}.btn-sm{padding:6px 14px;font-size:12px}.btn:disabled{opacity:.5;cursor:not-allowed}.input{width:100%;padding:9px 14px;background:#0d1117;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-family:var(--font-sans);font-size:13px;transition:border-color var(--duration-fast)}.input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-glow)}.input::placeholder{color:var(--text-muted)}textarea.input{resize:vertical}.filter-select{padding:9px 12px;background:#0d1117;border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-primary);font-size:13px;font-family:var(--font-sans);min-width:140px;cursor:pointer}.filter-select:focus{outline:none;border-color:var(--primary)}.tech-table{width:100%;border-collapse:collapse;font-size:13px}.tech-table th{text-align:left;padding:10px 14px;background:#1e293b;color:var(--text-secondary);font-size:12px;font-weight:500;border-bottom:1px solid var(--border);text-transform:uppercase;letter-spacing:.05em}.tech-table td{padding:10px 14px;border-bottom:1px solid var(--border);color:var(--text-primary)}.tech-table tr:hover td{background:var(--bg-elevated)}.pagination{display:flex;justify-content:center;align-items:center;gap:16px;margin-top:20px}.pagination .page-num{color:var(--text-secondary);font-size:13px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000a6;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000}.modal-card{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-xl);padding:24px;width:500px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg)}.modal-sm{width:400px}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.modal-header h3{font-size:17px;color:var(--text-primary);font-weight:700;margin:0}.modal-close{background:none;border:none;color:var(--text-secondary);font-size:18px;cursor:pointer;padding:4px 8px;border-radius:4px}.modal-close:hover{background:var(--bg-elevated);color:var(--danger)}.modal-footer{display:flex;justify-content:flex-end;gap:12px;margin-top:12px}.toast{position:fixed;top:24px;right:24px;padding:12px 24px;border-radius:var(--radius-md);font-size:14px;font-weight:600;z-index:2000;animation:toastIn .3s var(--ease-out)}.toast.success{background:#34d39926;color:var(--success);border:1px solid rgba(52,211,153,.3)}.toast.error{background:#f8717126;color:var(--danger);border:1px solid rgba(248,113,113,.3)}.toast.warning{background:#fbbf2426;color:var(--warning);border:1px solid rgba(251,191,36,.3)}@keyframes toastIn{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}.text-muted{color:var(--text-muted)}.text-sm{font-size:12px}.text-xs{font-size:11px}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-danger{color:var(--danger)}.text-purple{color:var(--purple)}.text-orange{color:var(--orange)}.fw-500{font-weight:500}.fw-600{font-weight:600}.fw-700{font-weight:700}.p-4{padding:16px 0}.mt-4{margin-top:16px}.flex-center{display:flex;align-items:center;justify-content:center;@keyframes scanAnim{0%{top:-2px;opacity:1}to{top:100%;opacity:0}}@keyframes glowPulse{0%,to{box-shadow:0 0 8px var(--primary-glow)}50%{box-shadow:0 0 24px var(--primary-glow),0 0 48px #60a5fa26}}@keyframes borderBreathe{0%,to{border-color:var(--border)}50%{border-color:var(--primary)}}@keyframes numberPop{0%{transform:scale(1)}50%{transform:scale(1.15);color:var(--primary)}to{transform:scale(1)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes dataFlow{0%{left:-100%}to{left:100%}}@keyframes gridFlash{0%,to{background-size:30px 30px}50%{background-size:30px 30px,30px 30px}}}.flex-center .chart-container{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-md);position:relative}.flex-center .chart-container canvas{border-radius:var(--radius-md)}.flex-center .chart-container :deep(.echarts-tooltip){background:var(--bg-elevated)!important;border:1px solid var(--border-light)!important;border-radius:var(--radius-sm)!important;padding:8px 12px!important;color:var(--text-primary)!important;font-family:var(--font-sans)!important;font-size:12px!important;box-shadow:var(--shadow-md)!important}.flex-center .dark-chart{--echarts-bg: var(--bg-panel);--echarts-axis: var(--border-light);--echarts-text: var(--text-secondary);--echarts-split: var(--border);--echarts-primary: var(--primary);--echarts-primary-light: rgba(96,165,250,.3);--echarts-success: var(--success);--echarts-warning: var(--warning);--echarts-danger: var(--danger)}.flex-center .chart-colors{--chart-c1: #60a5fa;--chart-c2: #34d399;--chart-c3: #fbbf24;--chart-c4: #a78bfa;--chart-c5: #fb923c}.flex-center .scan-line{position:fixed;top:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,transparent,var(--primary),transparent);animation:scanAnim 2s ease-out 1 forwards;z-index:9999;pointer-events:none;opacity:0}.flex-center .scan-line.active{opacity:1;animation:scanAnim 2s ease-out 1 forwards}.flex-center .glow-pulse{animation:glowPulse 2s ease-in-out infinite}.flex-center .border-breathe{animation:borderBreathe 3s ease-in-out infinite}.flex-center .number-pop{animation:numberPop .5s var(--ease-out)}.flex-center .fade-in-up{animation:fadeInUp .5s var(--ease-out) both}.flex-center .data-stream{position:relative;overflow:hidden}.flex-center .data-stream:after{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(96,165,250,.05),transparent);animation:dataFlow 3s ease-in-out infinite}.flex-center .grid-flash{animation:gridFlash 4s ease-in-out infinite}@media(max-width:768px){.kpi-grid{grid-template-columns:repeat(2,1fr);gap:8px}.kpi-card{padding:12px}.kpi-val{font-size:24px}.kpi-lbl,.tech-table{font-size:12px}.tech-table th,.tech-table td{padding:8px 10px;white-space:nowrap}.btn{padding:8px 14px;font-size:13px}.btn-sm{padding:4px 10px;font-size:12px}.input,.filter-select{font-size:14px;padding:8px 10px}.modal-card{width:95vw;max-width:95vw;margin:10px;padding:16px}.modal-sm{width:90vw}.quick-actions{grid-template-columns:repeat(2,1fr);gap:8px}.action-card{padding:14px 8px}.script-layout,.diag-grid{grid-template-columns:1fr}.page-title{font-size:22px}.scan-line,.collapse-btn,.header-right .user-detail{display:none}.toast{top:auto;bottom:70px;right:12px;left:12px}}.progress-bar-bg{width:100%;height:8px;background:var(--border);border-radius:4px;overflow:hidden}.progress-bar-fill{height:100%;border-radius:4px;transition:width .5s ease}.fill-success{background:linear-gradient(90deg,#34d399,#10b981)}.fill-warning{background:linear-gradient(90deg,#fbbf24,#f59e0b)}.fill-danger{background:linear-gradient(90deg,#f87171,#ef4444)}.fill-primary{background:linear-gradient(90deg,#60a5fa,#3b82f6)}.state-green{color:#22c55e}.state-yellow{color:#f59e0b}.state-red{color:#ef4444}.state-blue{color:#60a5fa}.state-gray{color:#94a3b8}.bg-state-green{background:#0a2e0a;border:1px solid #166534}.bg-state-yellow{background:#2a1f00;border:1px solid #78350f}.bg-state-red{background:#2e0a0a;border:1px solid #7f1d1d}.bg-state-blue{background:#1a2940;border:1px solid #1e40af}.bg-state-gray{background:#1e1e2e;border:1px solid #334155}.status-badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:600}.status-badge.green{background:#0a2e0a;color:#4ade80}.status-badge.yellow{background:#2a1f00;color:#fbbf24}.status-badge.red{background:#2e0a0a;color:#f87171}.status-badge.blue{background:#1a2940;color:#60a5fa}.status-badge.gray{background:#1e1e2e;color:#94a3b8}.trend-up{color:#22c55e}.trend-down{color:#ef4444}.trend-flat{color:#94a3b8}.empty-state{text-align:center;padding:60px 24px}.empty-state-icon{font-size:48px;margin-bottom:16px}.empty-state-title{font-size:18px;color:#e2e8f0;margin-bottom:8px;font-weight:600}.empty-state-desc{font-size:14px;color:#64748b;margin-bottom:24px;line-height:1.5}.empty-state-action{display:inline-block;padding:10px 24px;background:#1d4ed8;color:#fff;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;border:none}.empty-state-action:hover{background:#2563eb}.btn-action{display:inline-flex;align-items:center;gap:6px;padding:8px 18px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;border:none;transition:all .2s}.btn-action.primary{background:#1d4ed8;color:#fff}.btn-action.primary:hover{background:#2563eb}.btn-action.success{background:#166534;color:#4ade80}.btn-action.success:hover{background:#15803d}.btn-action.danger{background:#7f1d1d;color:#f87171}.btn-action.danger:hover{background:#991b1b}
