:root{--c-primary: #4f7cff;--c-primary-hover: #6b92ff;--c-primary-active: #3a63e8;--c-primary-soft: rgba(79, 124, 255, .14);--c-primary-glow: rgba(79, 124, 255, .45);--c-success: #34d399;--c-success-soft: rgba(52, 211, 153, .14);--c-warning: #f59e0b;--c-warning-soft: rgba(245, 158, 11, .14);--c-danger: #f43f5e;--c-danger-soft: rgba(244, 63, 94, .14);--c-info: #38bdf8;--c-info-soft: rgba(56, 189, 248, .14);--c-bg: #0b1220;--c-bg-deep: #070d18;--c-surface: #101a2e;--c-surface-hover: #16233d;--c-surface-2: #182540;--c-border: rgba(148, 163, 184, .14);--c-border-strong: rgba(148, 163, 184, .28);--c-text-1: #e8eef7;--c-text-2: #a9b6cd;--c-text-3: #8494ab;--shadow-card: 0 1px 2px rgba(0, 0, 0, .3), 0 8px 24px rgba(0, 0, 0, .28);--shadow-card-hover: 0 4px 12px rgba(0, 0, 0, .35), 0 16px 40px rgba(0, 0, 0, .4);--shadow-pop: 0 8px 24px rgba(0, 0, 0, .5), 0 24px 64px rgba(0, 0, 0, .55);--glow-primary: 0 0 0 1px rgba(79, 124, 255, .35), 0 0 24px rgba(79, 124, 255, .25);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--radius-full: 999px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--font-display: "Inter", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;--font-mono: "JetBrains Mono", "Consolas", monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 13px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 18px;--fs-2xl: 22px;--fs-3xl: 28px;--fs-hero: clamp(28px, 3vw, 40px);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--ease-standard: cubic-bezier(.2, 0, 0, 1);--dur-short: .15s;--dur-mid: .25s;--dur-long: .4s;--sidebar-w: 232px;--header-h: 60px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}body{font-family:var(--font-display);font-size:var(--fs-base);color:var(--c-text-1);background:var(--c-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;background:radial-gradient(ellipse 60% 40% at 15% -5%,rgba(79,124,255,.12),transparent),radial-gradient(ellipse 50% 35% at 90% 0%,rgba(52,211,153,.06),transparent),radial-gradient(ellipse 45% 40% at 50% 110%,rgba(56,189,248,.05),transparent);pointer-events:none}a{color:var(--c-primary);text-decoration:none;transition:color var(--dur-short) var(--ease-standard)}a:hover{color:var(--c-primary-hover)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#94a3b840;border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:#94a3b866}.text-1{color:var(--c-text-1)}.text-2{color:var(--c-text-2)}.text-3{color:var(--c-text-3)}.text-success{color:var(--c-success)}.text-warning{color:var(--c-warning)}.text-danger{color:var(--c-danger)}.text-info{color:var(--c-info)}.text-primary{color:var(--c-primary)}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.flex-1{flex:1;min-width:0}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.gap-5{gap:var(--space-5)}.gap-6{gap:var(--space-6)}.mt-2{margin-top:var(--space-2)}.mt-3{margin-top:var(--space-3)}.mt-4{margin-top:var(--space-4)}.mt-6{margin-top:var(--space-6)}.mb-2{margin-bottom:var(--space-2)}.mb-3{margin-bottom:var(--space-3)}.mb-4{margin-bottom:var(--space-4)}.mb-6{margin-bottom:var(--space-6)}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:.02em}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-6);animation:page-in var(--dur-mid) var(--ease-standard) both}.page-title{font-size:var(--fs-xl);font-weight:700;letter-spacing:-.01em}.page-desc{font-size:var(--fs-sm);color:var(--c-text-3)}@keyframes page-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}@keyframes breathe{0%,to{opacity:.5}50%{opacity:1}}@keyframes fade-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
