:root{--accent:#0071e3;--accent-hover:#0077ed;--accent-soft:#0071e314;--accent-press:#006edb;--text-on-accent:#fff;--bg:#fbfbfd;--bg-elevated:#fff;--bg-gray-50:#f5f5f7;--bg-gray-100:#f0f0f3;--bg-hover:#00000008;--bg-overlay:#ffffffb8;--text:#1d1d1f;--text-2:#1d1d1fb8;--text-3:#1d1d1f80;--text-4:#1d1d1f52;--text-inverse:#fff;--border:#00000014;--border-2:#0000001f;--border-strong:#0003;--border-accent:#0071e352;--success:#34c759;--success-soft:#34c7591f;--warning:#ff9f0a;--warning-soft:#ff9f0a1f;--danger:#ff453a;--danger-soft:#ff453a1a;--info:#5ac8fa;--font-body:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-chinese:"Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;--font-mono:"JetBrains Mono", "SF Mono", Consolas, monospace;--fs-xs:11px;--fs-sm:12px;--fs-base:13px;--fs-md:14px;--fs-lg:16px;--fs-xl:20px;--fs-2xl:24px;--fs-3xl:32px;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--r-sm:6px;--r-md:8px;--r-lg:12px;--r-xl:16px;--r-2xl:20px;--r-full:50px;--shadow-sm:0 1px 2px #0000000a;--shadow-md:0 4px 12px #0000000f;--shadow-lg:0 12px 32px #00000014;--shadow-xl:0 24px 60px #0000001f;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;--ease-apple:cubic-bezier(.4, 0, .2, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--sidebar-w:240px;--sidebar-w-collapsed:72px;--topbar-h:60px;--content-max:1440px;--z-sidebar:100;--z-topbar:200;--z-dropdown:300;--z-modal-backdrop:400;--z-modal:1000;--z-toast:9999}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#app{width:100%;height:100%}body{font-family:var(--font-body), var(--font-chinese);font-size:var(--fs-md);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;line-height:1.5;overflow:hidden}#app{flex-direction:column;display:flex}a{color:inherit;text-decoration:none}button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer;background:0 0;border:none}input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}ul,ol{list-style:none}img{max-width:100%;display:block}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#0000004d}::selection{background:var(--accent-soft);color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}.card{background:var(--bg-elevated);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);transition:box-shadow .3s var(--ease-apple), transform .3s var(--ease-apple)}.card:hover{box-shadow:var(--shadow-md)}.card-pad{padding:var(--sp-6)}.btn{justify-content:center;align-items:center;gap:var(--sp-2);height:36px;padding:0 var(--sp-4);border-radius:var(--r-md);font-size:var(--fs-md);font-weight:var(--fw-medium);letter-spacing:-.01em;transition:all .2s var(--ease-apple);white-space:nowrap;user-select:none;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--text-on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px);box-shadow:0 4px 12px #0071e34d}.btn-primary:active:not(:disabled){transform:scale(.97)}.btn-ghost{color:var(--text-2);background:0 0}.btn-ghost:hover:not(:disabled),.btn-soft{background:var(--bg-gray-100);color:var(--text)}.btn-soft:hover:not(:disabled){background:var(--bg-gray-50)}.btn-danger{background:var(--danger-soft);color:var(--danger)}.btn-danger:hover:not(:disabled){background:var(--danger);color:#fff}.btn-sm{height:30px;padding:0 var(--sp-3);font-size:var(--fs-sm)}.btn-lg{height:44px;padding:0 var(--sp-6);font-size:var(--fs-lg)}.input{width:100%;height:38px;padding:0 var(--sp-3);background:var(--bg-gray-50);border-radius:var(--r-md);font-size:var(--fs-md);color:var(--text);transition:all .2s var(--ease-apple);border:1px solid #0000}.input::placeholder{color:var(--text-4)}.input:hover{background:var(--bg-gray-100)}.input:focus{background:var(--bg-elevated);border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft);outline:none}.tag{align-items:center;gap:var(--sp-1);padding:2px var(--sp-2);border-radius:var(--r-sm);font-size:var(--fs-xs);font-weight:var(--fw-medium);background:var(--bg-gray-100);color:var(--text-2);display:inline-flex}.tag-success{background:var(--success-soft);color:var(--success)}.tag-warning{background:var(--warning-soft);color:var(--warning)}.tag-danger{background:var(--danger-soft);color:var(--danger)}.tag-accent{background:var(--accent-soft);color:var(--accent)}.table{border-collapse:collapse;width:100%;font-size:var(--fs-md)}.table th{text-align:left;padding:var(--sp-3) var(--sp-4);font-weight:var(--fw-medium);color:var(--text-3);font-size:var(--fs-sm);border-bottom:1px solid var(--border);white-space:nowrap}.table td{padding:var(--sp-4);color:var(--text);border-bottom:1px solid var(--border)}.table tbody tr{transition:background .15s var(--ease-apple)}.table tbody tr:hover{background:var(--bg-gray-50)}.table tbody tr:last-child td{border-bottom:none}.page{padding:var(--sp-6) var(--sp-8);max-width:var(--content-max);width:100%;margin:0 auto}.page-header{margin-bottom:var(--sp-6);justify-content:space-between;align-items:center;gap:var(--sp-4);display:flex}.page-title{font-size:var(--fs-2xl);font-weight:var(--fw-semibold);letter-spacing:-.02em;color:var(--text)}.page-subtitle{font-size:var(--fs-md);color:var(--text-3);margin-top:var(--sp-1)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .4s var(--ease-apple)}.fade-up{animation:fadeUp .5s var(--ease-out)}.flex{display:flex}.flex-1{flex:1}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:var(--sp-2)}.gap-3{gap:var(--sp-3)}.gap-4{gap:var(--sp-4)}.text-2{color:var(--text-2)}.text-3{color:var(--text-3)}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}
