@charset "UTF-8";:root{--brand-50: #eff6ff;--brand-100: #dbeafe;--brand-200: #bfdbfe;--brand-300: #93c5fd;--brand-400: #60a5fa;--brand-500: #3b82f6;--brand-600: #2563eb;--brand-700: #1d4ed8;--brand-800: #1e40af;--brand-900: #1e3a8a;--n-0: #ffffff;--n-50: #f8fafc;--n-100: #f1f5f9;--n-200: #e2e8f0;--n-300: #cbd5e1;--n-400: #94a3b8;--n-500: #64748b;--n-600: #475569;--n-700: #334155;--n-800: #1e293b;--n-900: #0f172a;--n-950: #0b1120;--success-50: #f0fdf4;--success-100: #dcfce7;--success-500: #22c55e;--success-600: #16a34a;--success-700: #15803d;--warning-50: #fffbeb;--warning-100: #fef3c7;--warning-500: #f59e0b;--warning-600: #d97706;--warning-700: #b45309;--danger-50: #fef2f2;--danger-100: #fee2e2;--danger-500: #ef4444;--danger-600: #dc2626;--danger-700: #b91c1c;--info-50: #eff6ff;--info-500: #0ea5e9;--info-600: #0284c7;--color-bg: var(--n-50);--color-surface: var(--n-0);--color-surface-2: var(--n-50);--color-surface-3: var(--n-100);--color-border: var(--n-200);--color-border-strong: var(--n-300);--color-text: var(--n-900);--color-text-muted: var(--n-500);--color-text-subtle: var(--n-400);--color-text-invert: var(--n-0);--color-primary: var(--brand-600);--color-primary-hover: var(--brand-700);--color-primary-bg: var(--brand-50);--color-primary-border: var(--brand-200);--color-success: var(--success-600);--color-success-bg: var(--success-50);--color-success-border: var(--success-500);--color-warning: var(--warning-600);--color-warning-bg: var(--warning-50);--color-warning-border: var(--warning-500);--color-danger: var(--danger-600);--color-danger-bg: var(--danger-50);--color-danger-border: var(--danger-500);--color-link: var(--brand-600);--color-link-hover: var(--brand-700);--sidebar-bg: var(--n-900);--sidebar-bg-elevated: var(--n-800);--sidebar-text: #cbd5e1;--sidebar-text-muted: #64748b;--sidebar-text-strong: var(--n-0);--sidebar-hover-bg: rgba(255, 255, 255, .04);--sidebar-active-bg: rgba(59, 130, 246, .16);--sidebar-active-text: var(--n-0);--sidebar-accent: var(--brand-500);--sidebar-border: rgba(255, 255, 255, .06);--sidebar-section-header: #94a3b8;--r-xs: 3px;--r-sm: 4px;--r-md: 6px;--r-lg: 10px;--r-xl: 14px;--r-2xl: 20px;--r-full: 9999px;--shadow-1: 0 1px 2px rgba(15, 23, 42, .04), 0 1px 3px rgba(15, 23, 42, .06);--shadow-2: 0 4px 6px -1px rgba(15, 23, 42, .08), 0 2px 4px -2px rgba(15, 23, 42, .05);--shadow-3: 0 10px 15px -3px rgba(15, 23, 42, .1), 0 4px 6px -4px rgba(15, 23, 42, .06);--shadow-4: 0 20px 25px -5px rgba(15, 23, 42, .12), 0 8px 10px -6px rgba(15, 23, 42, .08);--shadow-inset: inset 0 1px 2px rgba(15, 23, 42, .06);--focus-ring: 0 0 0 3px rgba(59, 130, 246, .25);--s-0: 0;--s-0-5: 2px;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-7: 28px;--s-8: 32px;--s-10: 40px;--s-12: 48px;--s-16: 64px;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--fs-xs: .75rem;--fs-sm: .875rem;--fs-md: 1rem;--fs-lg: 1.125rem;--fs-xl: 1.25rem;--fs-2xl: 1.5rem;--fs-3xl: 1.875rem;--lh-tight: 1.25;--lh-snug: 1.4;--lh-normal: 1.5;--lh-relaxed: 1.625;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--sidebar-width: 250px;--header-height: 60px;--content-max: 1200px;--t-fast: .12s;--t-normal: .2s;--t-slow: .32s;--ease-out: cubic-bezier(.22, .61, .36, 1)}[data-theme=dark]{--color-bg: var(--n-950);--color-surface: var(--n-900);--color-surface-2: var(--n-800);--color-surface-3: var(--n-700);--color-border: var(--n-700);--color-border-strong: var(--n-600);--color-text: var(--n-50);--color-text-muted: var(--n-400);--color-text-subtle: var(--n-500);--color-primary-bg: rgba(59, 130, 246, .15);--color-primary-border: var(--brand-800);--color-success-bg: rgba(34, 197, 94, .12);--color-warning-bg: rgba(245, 158, 11, .12);--color-danger-bg: rgba(239, 68, 68, .12);--shadow-1: 0 1px 2px rgba(0, 0, 0, .35), 0 1px 3px rgba(0, 0, 0, .3);--shadow-2: 0 4px 6px rgba(0, 0, 0, .4);--shadow-3: 0 10px 15px rgba(0, 0, 0, .45)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;font-family:var(--font-sans);font-size:var(--fs-md);line-height:var(--lh-normal);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--color-link);text-decoration:none;transition:color var(--t-fast) var(--ease-out)}a:hover{color:var(--color-link-hover);text-decoration:underline}button{font-family:inherit}:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--r-sm)}.text-center{text-align:center}.text-right{text-align:right}.mt-1{margin-top:var(--s-2)}.mt-2{margin-top:var(--s-4)}.mt-3{margin-top:var(--s-6)}.mb-1{margin-bottom:var(--s-2)}.mb-2{margin-bottom:var(--s-4)}.mb-3{margin-bottom:var(--s-6)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s-2);padding:var(--s-2) var(--s-4);border:1px solid transparent;border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:var(--fw-medium);cursor:pointer;transition:background var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out);-webkit-user-select:none;user-select:none}.btn-primary{background:var(--color-primary);color:var(--color-text-invert)}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border-strong)}.btn-secondary:hover:not(:disabled){background:var(--color-surface-2)}.btn-success{background:var(--color-success);color:var(--color-text-invert)}.btn-danger{background:var(--color-danger);color:var(--color-text-invert)}.btn-danger:hover:not(:disabled){background:var(--danger-700)}.btn-ghost{background:transparent;color:var(--color-text)}.btn-ghost:hover:not(:disabled){background:var(--color-surface-3)}.btn:disabled{opacity:.55;cursor:not-allowed}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--r-lg);padding:var(--s-5);box-shadow:var(--shadow-1)}.card-header{margin:calc(var(--s-5) * -1) calc(var(--s-5) * -1) var(--s-5);padding:var(--s-3) var(--s-5);background:var(--color-surface-2);border-bottom:1px solid var(--color-border);border-radius:var(--r-lg) var(--r-lg) 0 0}.card-title{margin:0;font-size:var(--fs-lg);font-weight:var(--fw-semibold)}.form-group{margin-bottom:var(--s-4)}.form-group label{display:block;margin-bottom:var(--s-2);font-weight:var(--fw-medium);color:var(--color-text);font-size:var(--fs-sm)}.form-control{width:100%;padding:var(--s-2) var(--s-3);border:1px solid var(--color-border-strong);border-radius:var(--r-md);font-size:var(--fs-md);background:var(--color-surface);color:var(--color-text);transition:border-color var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out)}.form-control:focus{outline:none;border-color:var(--color-primary);box-shadow:var(--focus-ring)}.form-control:disabled{background:var(--color-surface-2);color:var(--color-text-muted)}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:var(--s-3) var(--s-4);text-align:left;border-bottom:1px solid var(--color-border)}.table th{background:var(--color-surface-2);font-weight:var(--fw-semibold);color:var(--color-text-muted);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em}.table tbody tr:hover{background:var(--color-surface-2)}.alert{padding:var(--s-3) var(--s-4);border-radius:var(--r-md);margin-bottom:var(--s-4);border:1px solid transparent;font-size:var(--fs-sm)}.alert-success{background:var(--color-success-bg);color:var(--success-700);border-color:var(--color-success-border)}.alert-danger{background:var(--color-danger-bg);color:var(--danger-700);border-color:var(--color-danger-border)}.alert-warning{background:var(--color-warning-bg);color:var(--warning-700);border-color:var(--color-warning-border)}.alert-info{background:var(--info-50);color:var(--info-600);border-color:var(--info-500)}.badge{display:inline-block;padding:var(--s-0-5) var(--s-2);font-size:var(--fs-xs);font-weight:var(--fw-semibold);border-radius:var(--r-sm)}.badge-success{background:var(--color-success-bg);color:var(--color-success)}.badge-danger{background:var(--color-danger-bg);color:var(--color-danger)}.badge-warning{background:var(--color-warning-bg);color:var(--color-warning)}.badge-info{background:var(--info-50);color:var(--info-600)}.empty-block{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--s-12) var(--s-6);background:var(--color-surface);border:1px dashed var(--color-border-strong);border-radius:var(--r-lg);color:var(--color-text-muted)}.empty-block-icon{width:64px;height:64px;border-radius:var(--r-full);background:var(--color-primary-bg);color:var(--color-primary);display:grid;place-items:center;font-size:28px;margin-bottom:var(--s-4)}.empty-block-title{margin:0 0 var(--s-2);color:var(--color-text);font-size:var(--fs-lg);font-weight:var(--fw-semibold)}.empty-block-hint{margin:0 0 var(--s-5);max-width:440px;font-size:var(--fs-sm);line-height:var(--lh-normal)}.empty-block.inline{padding:var(--s-8) var(--s-5)}.empty-block.inline .empty-block-icon{width:48px;height:48px;font-size:22px;margin-bottom:var(--s-3)}.empty-block.inline .empty-block-title{font-size:var(--fs-md)}.spinner{width:40px;height:40px;border:3px solid var(--color-border);border-top:3px solid var(--color-primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:var(--r-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-subtle)}@media (max-width: 520px){.modal-overlay{align-items:flex-end!important;padding:0!important}.modal{width:100%!important;max-width:100%!important;max-height:92vh;overflow-y:auto;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.modal-footer{flex-wrap:wrap;gap:8px}.modal-footer .btn,.modal-footer button{flex:1 1 auto}}
