:root{--primary-50: #f0f5ff;--primary-100: #e0ecff;--primary-200: #c2d8ff;--primary-300: #9ebeff;--primary-400: #78a1ff;--primary-500: #3370ff;--primary-600: #285fdb;--primary-700: #1e4db8;--primary-800: #153d94;--primary-900: #0d2d70;--success-50: #f0fcf5;--success-100: #d9f5e5;--success-500: #34d399;--success-600: #27ae60;--warning-50: #fff9f0;--warning-100: #ffefd6;--warning-500: #f5a623;--warning-600: #d98612;--error-50: #fff2f0;--error-100: #ffdcd6;--error-500: #f54a45;--error-600: #d93935;--info-50: #f0f5ff;--info-100: #e0ecff;--info-500: #3370ff;--gray-0: #ffffff;--gray-50: #f5f6f7;--gray-100: #f2f3f5;--gray-200: #ebecef;--gray-300: #dee0e3;--gray-400: #bbbfc4;--gray-500: #8f959e;--gray-600: #646a73;--gray-700: #414851;--gray-800: #1f2329;--gray-900: #0a0c0f;--color-primary: var(--primary-500);--color-primary-hover: var(--primary-600);--color-primary-light: var(--primary-50);--color-success: var(--success-500);--color-warning: var(--warning-500);--color-error: var(--error-500);--color-bg: var(--gray-50);--color-surface: var(--gray-0);--color-border: var(--gray-300);--color-border-light: var(--gray-200);--color-text: var(--gray-800);--color-text-secondary: var(--gray-600);--color-text-tertiary: var(--gray-500);--color-text-disabled: var(--gray-400);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;--font-size-xs: 12px;--font-size-sm: 13px;--font-size-base: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--font-size-2xl: 20px;--font-size-3xl: 24px;--font-size-4xl: 32px;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--spacing-0: 0;--spacing-1: 4px;--spacing-2: 8px;--spacing-3: 12px;--spacing-4: 16px;--spacing-5: 20px;--spacing-6: 24px;--spacing-7: 28px;--spacing-8: 32px;--spacing-10: 40px;--spacing-12: 48px;--spacing-16: 64px;--radius-none: 0;--radius-sm: 4px;--radius-base: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--shadow-none: none;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .04);--shadow-base: 0 2px 4px 0 rgba(0, 0, 0, .06);--shadow-md: 0 4px 8px 0 rgba(0, 0, 0, .08);--shadow-lg: 0 8px 16px 0 rgba(0, 0, 0, .1);--shadow-xl: 0 16px 32px 0 rgba(0, 0, 0, .12);--shadow-focus: 0 0 0 3px var(--primary-100);--transition-fast: .15s ease;--transition-base: .2s ease;--transition-slow: .3s ease;--header-height: 60px;--sidebar-width: 240px;--sidebar-collapsed-width: 72px;--content-max-width: 1440px}[data-theme=dark]{--color-bg: #0a0c0f;--color-surface: #1f2329;--color-border: #414851;--color-text: #f2f3f5;--color-text-secondary: #bbbfc4}*,*:before,*:after{box-sizing:border-box}html{font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{margin:0;padding:0;font-family:var(--font-sans);font-size:var(--font-size-base);color:var(--color-text);background-color:var(--color-bg);min-height:100vh}#root{min-height:100vh}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--gray-400);border-radius:var(--radius-full);transition:background var(--transition-fast)}::-webkit-scrollbar-thumb:hover{background:var(--gray-500)}*{scrollbar-width:thin;scrollbar-color:var(--gray-400) transparent}::selection{background:var(--primary-100);color:var(--primary-900)}a{color:var(--color-primary);text-decoration:none;transition:color var(--transition-fast)}a:hover{color:var(--color-primary-hover)}input,textarea,select{font-family:inherit;font-size:inherit}img{max-width:100%;height:auto}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-fade-in{animation:fadeIn .3s ease-out}.animate-slide-in-right{animation:slideInRight .3s ease-out}.animate-slide-in-left{animation:slideInLeft .3s ease-out}.animate-scale-in{animation:scaleIn .2s ease-out}.animate-spin{animation:spin 1s linear infinite}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.truncate-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-1{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:var(--spacing-2)}.gap-3{gap:var(--spacing-3)}.gap-4{gap:var(--spacing-4)}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-normal{font-weight:var(--font-weight-normal)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.ant-layout-sider{background:#fff}.ant-menu-inline{border-right:none}.ant-menu-item{border-radius:var(--radius-base);margin:4px 12px;width:calc(100% - 24px);height:40px;line-height:40px}.ant-menu-item-selected:after{display:none}.ant-menu-item:hover:not(.ant-menu-item-selected){background:var(--gray-50)}.ant-menu-item .anticon{font-size:16px}.ant-table-thead>tr>th{background:var(--gray-50);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary)}.ant-table-tbody>tr:hover>td{background:var(--gray-50)}.ant-descriptions-bordered .ant-descriptions-item-label{background:var(--gray-50);font-weight:500}.ant-badge-count{box-shadow:0 0 0 2px #fff}
