:root{--bg:#f5f5f7;--bg-base:#f5f5f7;--bg-subtle:#fbfbfd;--surface:#ffffff;--surface-raised:#ffffff;--fg:#1d1d1f;--fg-secondary:#6e6e73;--muted:#a1a1a6;--neutral:#6e6e73;--border:#e2e2e6;--border-light:#ececef;--border-strong:#d0d0d5;--accent:#1d1d1f;--accent-hover:#3a3a3c;--accent-active:#000000;--accent-bg:rgba(29,29,31,0.08);--primary:#1d1d1f;--sidebar:rgba(13,24,42,0.94);--sidebar-fg:rgba(255,255,255,0.92);--sidebar-fg-muted:rgba(255,255,255,0.62);--sidebar-active-bg:rgba(255,255,255,0.13);--sidebar-hover-bg:rgba(255,255,255,0.07);--sidebar-active:#ffffff;--success:#34c759;--success-bg:#eefaf1;--success-text:#248a3d;--warn:#ff9f0a;--warn-bg:#fff7e8;--warn-text:#b26a00;--danger:#ff3b30;--danger-bg:#ffefee;--danger-text:#c62e25;--info:#0a84ff;--info-bg:#eaf4ff;--info-text:#0a63c9;--text-1:#1d1d1f;--text-2:#6e6e73;--text-3:#a1a1a6;--text-4:#c7c7cc;--surface-2:#f2f2f4;--shadow-1:0 1px 2px rgba(0,0,0,0.04);--shadow-2:0 2px 8px rgba(0,0,0,0.06);--kpi-blue:#0a84ff;--kpi-green:#34c759;--kpi-purple:#bf5af2;--kpi-warm:#ff9f0a;--focus-ring:#1d1d1f}[data-theme=dark]{--bg:#f5f5f7;--bg-base:#f5f5f7;--bg-subtle:#fbfbfd;--surface:#ffffff;--surface-raised:#ffffff;--fg:#1d1d1f;--fg-secondary:#6e6e73;--muted:#a1a1a6;--neutral:#6e6e73;--border:#e2e2e6;--border-light:#ececef;--border-strong:#d0d0d5;--accent:#1d1d1f;--accent-hover:#3a3a3c;--accent-active:#000000;--accent-bg:rgba(29,29,31,0.08);--primary:#1d1d1f;--sidebar:rgba(13,24,42,0.94);--sidebar-fg:rgba(255,255,255,0.92);--sidebar-fg-muted:rgba(255,255,255,0.62);--sidebar-active-bg:rgba(255,255,255,0.13);--sidebar-hover-bg:rgba(255,255,255,0.07);--sidebar-active:#ffffff;--success:#34c759;--success-bg:#eefaf1;--success-text:#248a3d;--warn:#ff9f0a;--warn-bg:#fff7e8;--warn-text:#b26a00;--danger:#ff3b30;--danger-bg:#ffefee;--danger-text:#c62e25;--info:#0a84ff;--info-bg:#eaf4ff;--info-text:#0a63c9;--text-1:#1d1d1f;--text-2:#6e6e73;--text-3:#a1a1a6;--text-4:#c7c7cc;--surface-2:#f2f2f4;--shadow-1:0 1px 2px rgba(0,0,0,0.04);--shadow-2:0 2px 8px rgba(0,0,0,0.06);--focus-ring:#1d1d1f}:root{--font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;--font-display:-apple-system,BlinkMacSystemFont,"SF Pro Display","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;--font-body:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;--font-mono:"SF Mono",ui-monospace,"SFMono-Regular",Menlo,monospace;--text-xs:11px;--text-sm:13px;--text-base:14px;--text-lg:15px;--text-xl:16px;--text-2xl:18px;--text-3xl:22px;--text-kpi:28px;--font-normal:400;--font-medium:500;--font-semibold:600;--font-bold:600;--leading-tight:1.2;--leading-snug:1.3;--leading-normal:1.5;--leading-relaxed:1.55;--tracking-tight:-0.015em;--tracking-normal:0;--tracking-wide:0.01em;--tracking-wider:0.02em;--tracking-caps:0.06em;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-10:40px;--space-12:48px;--space-kpi-y:22px;--radius-xs:6px;--radius-sm:8px;--radius-md:10px;--radius-lg:12px;--radius-xl:14px;--radius-2xl:18px;--radius-pill:100px;--radius-full:9999px;--shadow-xs:0 1px 2px rgba(0,0,0,0.04);--shadow-sm:0 1px 3px rgba(0,0,0,0.04);--shadow-md:0 2px 8px rgba(0,0,0,0.06);--shadow-lg:0 8px 32px rgba(0,0,0,0.08);--shadow-xl:0 12px 48px rgba(0,0,0,0.12);--shadow-dropdown:0 8px 24px rgba(0,0,0,0.10);--shadow-tooltip:0 4px 12px rgba(0,0,0,0.15);--shadow-dark-xs:0 1px 2px rgba(0,0,0,0.2);--shadow-dark-sm:0 1px 3px rgba(255,255,255,0.06);--shadow-dark-md:0 4px 16px rgba(255,255,255,0.08);--shadow-dark-lg:0 8px 32px rgba(255,255,255,0.1);--ease-out:cubic-bezier(0.23,1,0.32,1);--ease-in-out:cubic-bezier(0.77,0,0.175,1);--ease-spring:cubic-bezier(0.34,1.56,0.64,1);--duration-fast:120ms;--duration-normal:160ms;--duration-slow:200ms;--duration-slower:300ms;--duration-slowest:400ms;--btn-height-sm:30px;--btn-height:34px;--btn-height-lg:40px;--btn-padding-x:var(--space-4);--input-height:34px;--input-padding-x:var(--space-3);--icon-btn-sm:28px;--icon-btn:34px;--icon-btn-lg:44px;--label-gap:var(--space-2);--form-group-gap:var(--space-5);--table-row-height:40px;--table-header-height:36px;--table-cell-padding:var(--space-3);--nav-item-height:34px;--sidebar-width:232px;--topbar-height:52px;--z-base:0;--z-dropdown:100;--z-sticky:200;--z-overlay:300;--z-modal:400;--z-toast:500;--z-tooltip:600}*,:after,:before{box-sizing:border-box}body,html{height:100%;margin:0}body{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--leading-normal);color:var(--fg);background:var(--bg);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--info);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;cursor:pointer;border:none;background:none}input,select,textarea{font-family:inherit;font-size:var(--text-base);color:var(--fg)}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-xs)}::-webkit-scrollbar-thumb:hover{background:var(--muted)}.text-xs{font-size:var(--text-xs)}.text-sm{font-size:var(--text-sm)}.text-base{font-size:var(--text-base)}.text-lg{font-size:var(--text-lg)}.text-xl{font-size:var(--text-xl)}.text-2xl{font-size:var(--text-2xl)}.text-3xl{font-size:var(--text-3xl)}.text-kpi{font-size:var(--text-kpi)}.font-normal{font-weight:var(--font-normal)}.font-medium{font-weight:var(--font-medium)}.font-semibold{font-weight:var(--font-semibold)}.text-muted{color:var(--muted)}.text-secondary{color:var(--fg-secondary)}.text-accent{color:var(--accent)}.text-success{color:var(--success)}.text-warn{color:var(--warn)}.text-danger{color:var(--danger)}.text-info{color:var(--info)}.tnum{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.uppercase{text-transform:uppercase;letter-spacing:var(--tracking-caps)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:var(--btn-height);padding:0 var(--btn-padding-x);font-size:var(--text-sm);font-weight:var(--font-medium);border-radius:var(--radius-md);transition:all var(--duration-normal) var(--ease-out);white-space:nowrap;cursor:pointer;border:none}.btn:hover{text-decoration:none}.btn:active{transform:scale(.97);transition-duration:var(--duration-fast)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:disabled:active{transform:none}.btn-primary{background:var(--accent);color:oklch(100% 0 0)}.btn-primary:hover{background:var(--accent-hover)}.btn-secondary{background:var(--surface);color:var(--fg);border:1px solid var(--border-strong)}.btn-secondary:hover{background:var(--surface-2);border-color:var(--accent)}.btn-ghost{background:transparent;color:var(--fg-secondary)}.btn-ghost:hover{background:var(--surface-2);color:var(--fg)}.btn-danger{background:var(--danger);color:oklch(100% 0 0)}.btn-danger:hover{filter:brightness(1.1)}.btn-outline{background:transparent;color:var(--fg);border:1px solid var(--border)}.btn-outline:hover{background:var(--surface);border-color:var(--border-strong)}.btn-sm{height:var(--btn-height-sm);padding:0 var(--space-3);font-size:var(--text-xs)}.btn-lg{height:var(--btn-height-lg);padding:0 var(--space-5);font-size:var(--text-base)}.btn-icon{width:var(--icon-btn);height:var(--icon-btn);padding:0;border-radius:var(--radius-sm)}.btn-icon.btn-sm{width:var(--icon-btn-sm);height:var(--icon-btn-sm);border-radius:var(--radius-xs)}.btn-icon.btn-lg{width:var(--icon-btn-lg);height:var(--icon-btn-lg);border-radius:var(--radius-md)}.input{width:100%;height:var(--input-height);padding:0 var(--input-padding-x);font-size:var(--text-sm);background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--radius-md);color:var(--fg);transition:border-color var(--duration-slow) var(--ease-out),box-shadow var(--duration-slow) var(--ease-out),background var(--duration-slow) var(--ease-out)}.input::placeholder{color:var(--muted)}.input:hover:not(:disabled){border-color:var(--border-strong)}.input:focus{outline:none;background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}.input:disabled{opacity:.4;cursor:not-allowed;background:oklch(0 0 0/.03)}.input.error{border-color:var(--danger);background:var(--danger-bg)}.input.error:focus{box-shadow:0 0 0 3px var(--danger-bg)}.form-label{display:block;font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--fg);margin-bottom:var(--label-gap);letter-spacing:var(--tracking-wide)}.form-helper{color:var(--muted)}.form-error,.form-helper{font-size:var(--text-xs);margin-top:var(--space-1)}.form-error{font-weight:var(--font-medium);color:var(--danger)}.form-group{display:flex;flex-direction:column;margin-bottom:var(--form-group-gap)}.badge{display:inline-flex;align-items:center;gap:5px;height:22px;padding:2px var(--space-2);font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-pill);letter-spacing:var(--tracking-wide);white-space:nowrap}.badge:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.badge-success{background:var(--success-bg);color:var(--success-text)}.badge-warn{background:var(--warn-bg);color:var(--warn-text)}.badge-danger{background:var(--danger-bg);color:var(--danger-text)}.badge-info{background:var(--info-bg);color:var(--info-text)}.badge-neutral{background:var(--surface-2);color:var(--text-3)}.pill{display:inline-flex;align-items:center;gap:5px;height:22px;padding:2px var(--space-2);font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-pill);white-space:nowrap}.pill:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.pill-success{background:var(--success-bg);color:var(--success-text)}.pill-warn{background:var(--warn-bg);color:var(--warn-text)}.pill-danger{background:var(--danger-bg);color:var(--danger-text)}.pill-info{background:var(--info-bg);color:var(--info-text)}.pill-neutral{background:var(--surface-2);color:var(--text-3)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);padding:var(--space-7)}.card-sm{padding:var(--space-5);border-radius:var(--radius-md)}.card:hover{box-shadow:var(--shadow-sm)}.app-shell{display:grid;grid-template-columns:var(--sidebar-width) 1fr;min-height:100vh}.app-sidebar{background:var(--sidebar);border-right:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto;display:flex;flex-direction:column}.app-sidebar-header{height:var(--topbar-height);padding:0 var(--space-7);border-bottom:1px solid var(--border);gap:var(--space-3)}.app-sidebar-header,.app-sidebar-logo{display:flex;align-items:center;flex-shrink:0}.app-sidebar-logo{width:32px;height:32px;border-radius:var(--radius-sm);background:var(--accent);color:oklch(100% 0 0);justify-content:center}.app-sidebar-logo,.app-sidebar-title{font-weight:var(--font-semibold);font-size:var(--text-base)}.app-sidebar-title{color:var(--sidebar-active);line-height:var(--leading-tight)}.app-sidebar-subtitle{font-size:var(--text-xs);color:var(--sidebar-fg-muted);margin-top:2px;line-height:var(--leading-tight)}.app-sidebar-nav{flex:1 1;padding:var(--space-3) 0;overflow-y:auto}.app-sidebar-group{padding:var(--space-7) var(--space-7) var(--space-2);font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--sidebar-fg-muted);text-transform:uppercase;letter-spacing:var(--tracking-caps)}.app-sidebar-menu{list-style:none;padding:0 var(--space-3)}.app-sidebar-menu a,.app-sidebar-menu button{display:flex;align-items:center;gap:var(--space-3);height:var(--nav-item-height);padding:0 var(--space-3);border-radius:var(--radius-sm);color:var(--sidebar-fg);font-size:var(--text-base);font-weight:var(--font-medium);text-decoration:none;transition:background var(--duration-fast) var(--ease-out);width:100%;text-align:left;position:relative}.app-sidebar-menu a:hover,.app-sidebar-menu button:hover{background:var(--sidebar-hover-bg);color:var(--sidebar-active);text-decoration:none}.app-sidebar-menu a.active{background:var(--sidebar-active-bg);color:var(--sidebar-active);font-weight:var(--font-semibold)}.app-sidebar-menu a.active:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:3px;height:20px;background:var(--accent);border-radius:0 2px 2px 0}.app-main{display:flex;flex-direction:column;min-width:0}.app-topbar{background:rgba(245,245,247,.8);backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);border-bottom:1px solid var(--border);height:var(--topbar-height);padding:0 var(--space-7);display:flex;align-items:center;justify-content:space-between;position:-webkit-sticky;position:sticky;top:0;z-index:var(--z-sticky);gap:var(--space-4)}.app-topbar-title{font-size:var(--text-lg);font-weight:var(--font-semibold);color:var(--fg)}.topbar-search{flex:1 1;max-width:340px;margin-left:auto;display:flex;align-items:center;gap:8px;background:var(--surface-2);border:1px solid transparent;border-radius:999px;padding:6px 14px;color:var(--muted);font-size:13px;cursor:pointer;transition:border-color .12s,background .12s}.topbar-search:hover{background:var(--surface);border-color:var(--border-strong)}.topbar-search kbd{margin-left:auto;font-family:var(--font-sans);font-size:11px;color:var(--muted);background:var(--surface);border:1px solid var(--border);border-radius:5px;padding:1px 6px}.topbar-actions{display:flex;align-items:center;gap:var(--space-3)}.app-content{padding:var(--space-7) var(--space-8);flex:1 1}.page-header{margin-bottom:var(--space-7)}.page-title{font-size:26px;font-weight:650;color:var(--fg);letter-spacing:var(--tracking-tight);line-height:var(--leading-tight);margin-bottom:var(--space-1)}.page-subtitle{font-size:var(--text-sm);color:var(--muted)}.table-wrapper{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-1);overflow:hidden}.table{width:100%;border-collapse:collapse}.table th{height:var(--table-header-height);text-align:left;font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--text-3);letter-spacing:var(--tracking-caps);background:var(--bg-subtle);white-space:nowrap}.table td,.table th{padding:0 var(--table-cell-padding);border-bottom:1px solid var(--border)}.table td{height:var(--table-row-height);font-size:var(--text-sm);color:var(--fg)}.table tbody tr{transition:background var(--duration-fast) var(--ease-out)}.table tbody tr:hover{background:var(--surface-2)}.table tbody tr:last-child td{border-bottom:none}.table tbody tr.selected{background:var(--accent-bg)}.table-actions{opacity:0;transition:opacity var(--duration-fast) var(--ease-out)}.table tbody tr:hover .table-actions{opacity:1}.td-mono{font-family:var(--font-mono);color:var(--info);font-weight:var(--font-medium);font-size:var(--text-sm)}.td-amount{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:var(--font-medium);text-align:right}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:var(--space-5);gap:var(--space-5);margin-bottom:var(--space-7)}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-1);padding:var(--space-kpi-y) var(--space-6)}.stat-label{color:var(--text-2);font-size:var(--text-xs);font-weight:var(--font-medium);margin-bottom:var(--space-2)}.stat-value{font-size:var(--text-kpi);font-weight:var(--font-semibold);color:var(--fg);letter-spacing:-.025em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;line-height:var(--leading-tight)}.stat-trend{font-size:var(--text-xs);font-weight:var(--font-medium);margin-top:var(--space-1)}.stat-trend.up{color:var(--success)}.stat-trend.down{color:var(--danger)}.stat-trend.neutral{color:var(--muted)}.stat-card{position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px}.stat-card.accent-blue:before{background:var(--info)}.stat-card.accent-green:before{background:var(--success)}.stat-card.accent-purple:before{background:#bf5af2}.stat-card.accent-warm:before{background:var(--warn)}.callout{padding:var(--space-4);border-radius:var(--radius-md);margin-bottom:var(--space-5);font-size:var(--text-sm);line-height:var(--leading-relaxed);border-left:3px solid}.callout-info{background:var(--info-bg);border-color:var(--info);color:var(--fg)}.callout-success{background:var(--success-bg);border-color:var(--success);color:var(--fg)}.callout-warn{background:var(--warn-bg);border-color:var(--warn);color:var(--fg)}.callout-danger{background:var(--danger-bg);border-color:var(--danger);color:var(--fg)}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-end{justify-content:flex-end}.flex-1{flex:1 1}.flex-wrap{flex-wrap:wrap}.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)}.gap-8{gap:var(--space-8)}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-4{grid-template-columns:repeat(4,1fr)}.w-full{width:100%}.h-full{height:100%}.p-2{padding:var(--space-2)}.p-3{padding:var(--space-3)}.p-4{padding:var(--space-4)}.p-5{padding:var(--space-5)}.p-6{padding:var(--space-6)}.p-7{padding:var(--space-7)}.p-8{padding:var(--space-8)}.m-0{margin:0}.mb-2{margin-bottom:var(--space-2)}.mb-3{margin-bottom:var(--space-3)}.mb-4{margin-bottom:var(--space-4)}.mb-5{margin-bottom:var(--space-5)}.mb-6{margin-bottom:var(--space-6)}.mb-7{margin-bottom:var(--space-7)}.mb-8{margin-bottom:var(--space-8)}.mt-2{margin-top:var(--space-2)}.mt-4{margin-top:var(--space-4)}.mt-6{margin-top:var(--space-6)}.ml-auto{margin-left:auto}.mr-auto{margin-right:auto}.rounded-sm{border-radius:var(--radius-sm)}.rounded-md{border-radius:var(--radius-md)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-full{border-radius:var(--radius-full)}.shadow-sm{box-shadow:var(--shadow-sm)}.shadow-md{box-shadow:var(--shadow-md)}.shadow-lg{box-shadow:var(--shadow-lg)}.truncate{text-overflow:ellipsis}.sr-only,.truncate{overflow:hidden;white-space:nowrap}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;clip:rect(0,0,0,0);border:0}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton{background:linear-gradient(90deg,oklch(0 0 0/.04),oklch(0 0 0/.08) 50%,oklch(0 0 0/.04));background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite;border-radius:var(--radius-sm)}@media (max-width:1024px){.app-shell{grid-template-columns:1fr}.app-sidebar{display:none}.stat-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:640px){.app-content{padding:var(--space-5)}.stat-grid{grid-template-columns:1fr}.page-title{font-size:22px}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.sidebar{background:rgba(13,24,42,.94);backdrop-filter:blur(24px) saturate(1.4);-webkit-backdrop-filter:blur(24px) saturate(1.4);border-right:1px solid rgba(255,255,255,.06);position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto;display:flex;flex-direction:column;color:rgba(255,255,255,.85)}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.15);border-radius:2px}.sidebar-header{padding:18px 18px 14px;border-bottom:1px solid rgba(255,255,255,.06);gap:12px}.sidebar-header,.sidebar-logo{display:flex;align-items:center;flex-shrink:0}.sidebar-logo{width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,#1d3a5f,#0d182a);border:1px solid rgba(255,255,255,.14);color:#ffffff;justify-content:center;font-weight:600;font-size:15px}.sidebar-title{font-size:14px;font-weight:600;color:rgba(255,255,255,.92);line-height:1.2}.sidebar-subtitle{font-size:11px;color:rgba(255,255,255,.38);margin-top:2px}.sidebar-nav{flex:1 1;padding:8px 10px 12px;overflow-y:auto}.sidebar-group{margin-bottom:2px;border:none}.sidebar-group-title{font-size:11px;font-weight:600;color:rgba(255,255,255,.35);padding:8px 10px 6px;letter-spacing:.08em;text-transform:uppercase;display:flex;align-items:center;justify-content:space-between;cursor:pointer;border-radius:7px;margin:0;transition:background .12s,color .12s}.sidebar-group-title:hover{background:rgba(255,255,255,.07);color:rgba(255,255,255,.7)}.sidebar-group-title.active{color:rgba(255,255,255,.8)}.sidebar-group-left{display:flex;align-items:center;gap:8px}.sidebar-group-icon{opacity:.7;flex-shrink:0}.sidebar-group-title.active .sidebar-group-icon,.sidebar-group-title:hover .sidebar-group-icon{opacity:1}.sidebar-chevron{opacity:.4;transition:transform .2s;flex-shrink:0}.sidebar-group-title:hover .sidebar-chevron{opacity:.7}.sidebar-menu{list-style:none;padding:0 0 4px}.sidebar-menu a{display:flex;align-items:center;gap:8px;height:32px;padding:0 12px 0 32px;border-radius:7px;color:rgba(255,255,255,.62);font-size:13px;font-weight:500;text-decoration:none;transition:background .12s,color .12s;width:100%;text-align:left;position:relative}.sidebar-menu a:hover{background:rgba(255,255,255,.07);color:rgba(255,255,255,.9);text-decoration:none;opacity:1}.sidebar-menu a.active{background:rgba(255,255,255,.13);color:#ffffff;font-weight:500;opacity:1}.sidebar-menu a.active:before{content:"";position:absolute;left:10px;top:50%;transform:translateY(-50%);width:4px;height:4px;background:rgba(255,255,255,.6);border-radius:50%}.sidebar-top-item{display:flex;align-items:center;gap:10px;height:38px;padding:0 12px;border-radius:8px;color:rgba(255,255,255,.75);font-size:14px;font-weight:600;text-decoration:none;transition:background .12s,color .12s}.sidebar-top-item:hover{background:rgba(255,255,255,.07);color:rgba(255,255,255,.95);text-decoration:none}.sidebar-top-item.active{background:rgba(255,255,255,.13);color:#ffffff}.sidebar-user{padding:12px 14px;border-top:1px solid rgba(255,255,255,.08);gap:10px}.sidebar-user,.sidebar-user-avatar{display:flex;align-items:center;flex-shrink:0}.sidebar-user-avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#2c4a75,#16233a);border:1px solid rgba(255,255,255,.12);justify-content:center;font-size:12px;font-weight:600;color:#fff}.sidebar-user-info{min-width:0}.sidebar-user-name{font-size:13px;font-weight:500;color:rgba(255,255,255,.9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-user-role{font-size:11px;color:rgba(255,255,255,.4)}.app{display:grid;grid-template-columns:var(--sidebar-width) 1fr;min-height:100vh}.main{display:flex;flex-direction:column;min-width:0}.dashboard-grid{display:grid;grid-template-columns:3fr 2fr;grid-gap:var(--space-4);gap:var(--space-4)}.dashboard-grid-4{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:var(--space-4);gap:var(--space-4)}.card-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.card-title{font-size:var(--text-lg);font-weight:var(--font-semibold);color:var(--fg)}.dash-item{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);border-bottom:1px solid var(--border);text-decoration:none;transition:background var(--duration-fast) var(--ease-out);cursor:pointer}.dash-item:hover{background:var(--surface-2);text-decoration:none}.dash-item:last-child{border-bottom:none}.dash-item-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}.dash-item-dot.urgent{background:var(--danger);box-shadow:0 0 0 3px var(--danger-bg)}.dash-item-dot.normal{background:var(--info);box-shadow:0 0 0 3px var(--info-bg)}.dash-item-main{flex:1 1;min-width:0}.dash-item-title{font-size:13.5px;font-weight:500;color:var(--fg);display:flex;align-items:center;gap:6px}.dash-item-sub{font-size:12px;color:var(--text-3);margin-top:1px}.dash-item-arrow{color:var(--text-3);flex-shrink:0}.dash-foot{padding:var(--space-2) var(--space-3);border-top:1px solid var(--border)}.dash-empty{text-align:center;color:var(--text-3);padding:var(--space-6) var(--space-4);font-size:var(--text-sm)}.project-stages{display:flex;align-items:flex-start;overflow-x:auto;padding:var(--space-4) 0}.stage-item{flex-direction:column;min-width:80px}.stage-icon,.stage-item{display:flex;align-items:center}.stage-icon{width:36px;height:36px;border-radius:50%;justify-content:center;font-size:14px;font-weight:600;border:2px solid var(--border);background:var(--surface);color:var(--muted);margin-bottom:var(--space-2)}.stage-item.done .stage-icon{background:var(--success);border-color:var(--success);color:white}.stage-item.active .stage-icon{background:var(--accent);border-color:var(--accent);color:white}.stage-item.pending .stage-icon{background:var(--bg);border-color:var(--border)}.stage-label{font-size:12px;font-weight:600;color:var(--fg);text-align:center}.stage-date{font-size:10px;color:var(--muted);margin-top:2px}.stage-line{flex:1 1;height:2px;background:var(--border);margin-top:18px;min-width:40px}.stage-line.done{background:var(--success)}.stage-line.active{background:var(--accent)}.progress{height:6px;background:var(--border);overflow:hidden}.progress,.progress-bar{border-radius:var(--radius-pill)}.progress-bar{height:100%;background:var(--accent);transition:width .5s}.progress-sm{height:4px}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border);margin-bottom:var(--space-5)}.tabs .tab{padding:var(--space-3) var(--space-4);font-size:14px;font-weight:500;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;transition:all .16s}.tabs .tab:hover{color:var(--fg)}.tabs .tab.active{color:var(--fg);border-bottom-color:var(--accent)}.data-table{width:100%;border-collapse:collapse;font-size:var(--text-sm);color:var(--fg)}.data-table th{height:var(--table-header-height);text-align:left;font-size:var(--text-xs);font-weight:var(--font-semibold);color:var(--text-3);letter-spacing:var(--tracking-caps);background:var(--bg-subtle);white-space:nowrap}.data-table td,.data-table th{padding:0 var(--table-cell-padding);border-bottom:1px solid var(--border)}.data-table td{height:var(--table-row-height);font-size:var(--text-sm);color:var(--fg)}.data-table tbody tr{transition:background var(--duration-fast) var(--ease-out)}.data-table tbody tr:hover{background:var(--surface-2)}.data-table tbody tr:last-child td{border-bottom:none}.menu-btn{display:none;align-items:center;justify-content:center;width:34px;height:34px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--fg);cursor:pointer;flex-shrink:0}.topbar-left{display:flex;align-items:center;gap:var(--space-3);min-width:0}.sidebar-mask{display:none}@media (max-width:768px){.app{grid-template-columns:1fr}.sidebar{position:fixed;left:0;top:0;bottom:0;z-index:300;width:var(--sidebar-width);height:100vh;transform:translateX(-100%);transition:transform .25s ease}.sidebar.mobile-open{transform:translateX(0);box-shadow:0 0 40px rgba(0,0,0,.4)}.sidebar-mask{display:block;position:fixed;inset:0;z-index:290;background:rgba(0,0,0,.45)}.menu-btn{display:flex}.app-topbar{padding:0 var(--space-3);gap:var(--space-2)}.topbar-search{display:none}.topbar-actions{gap:var(--space-2);flex-shrink:0}.topbar-actions>span,.topbar-left .tnum{display:none}.app-topbar-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:50vw}.topbar-left>div{min-width:0;overflow:hidden}.topbar-actions .btn{padding:0 10px;height:30px;font-size:12px}.app-content{padding:var(--space-4)}.page-header{margin-bottom:var(--space-4)}.page-title{font-size:20px}.data-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}.login-brand{display:none!important}.login-form-panel{padding:24px 20px!important}.modal{max-width:calc(100vw - 32px)!important}}.contract-new-page{display:flex;flex-direction:column;min-height:100vh;background:#e8e8ec}.contract-toolbar{position:-webkit-sticky;position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:var(--space-4);padding:10px 20px;background:#fff;border-bottom:1px solid var(--border);box-shadow:var(--shadow-1)}.contract-toolbar-title{font-size:14px;font-weight:600;color:var(--fg)}.contract-stage{flex:1 1;display:flex;justify-content:center;padding:24px 16px 60px}.a4-sheet{width:210mm;min-height:297mm;background:#fff;box-shadow:0 2px 12px rgba(0,0,0,.12);padding:25mm 22mm;box-sizing:border-box;font-family:SimSun,Songti SC,serif;font-size:12pt;line-height:1.9;color:#1a1a1a}.contract-title{text-align:center;margin-bottom:24px}.contract-title h1{font-size:20pt;font-weight:700;letter-spacing:.05em;margin:0;cursor:pointer;padding:4px 8px;border-radius:4px}.contract-title h1:hover{background:#fff8e6}.contract-title-input{font-size:20pt;font-weight:700;text-align:center;width:100%;border:1px dashed var(--warn);border-radius:4px;padding:4px 8px;outline:none}.contract-clause{margin-bottom:12px}.contract-clause-fixed{color:#555}.contract-line{min-height:1.9em;word-break:break-word}.cf-field{transition:background .12s}@media (max-width:768px){.a4-sheet{width:100%;min-height:auto;padding:20px 16px;font-size:11pt}}.contract-doc{font-family:FangSong,仿宋,FangSong_GB2312,serif;font-size:12pt;line-height:1.8;color:#1a1a1a}.doc-title{font-size:20pt;font-weight:700;letter-spacing:.1em;margin:8px 0}.doc-subtitle{font-size:16pt;font-weight:700;letter-spacing:.05em;margin:4px 0}.clause-title{font-size:12pt;font-weight:700;margin:12px 0 6px}.clause-p{margin:2px 0;text-indent:0}.contract-table{width:100%;border-collapse:collapse;margin:8px 0;font-size:12pt}.contract-table td{border:1px solid #000;padding:4px 8px;text-align:center;vertical-align:middle}.contract-table .td-label{font-weight:700;text-align:center;white-space:nowrap;background:#fafafa}.contract-table .td-vertical{font-weight:700;text-align:center;width:28px}.sign-table td{text-align:left}.sign-table .td-label{width:160px}.cf-field{display:inline-block;min-width:40px;padding:0 6px;margin:0 2px;background:#fff8e6;border-bottom:1.5px solid #e6a700;border-radius:3px;color:#8a5a00;cursor:pointer;font-weight:500;text-align:center}.cf-field:hover{background:#ffefc2}.cf-auto{padding:0 6px;margin:0 2px;background:#f2f2f4;border-radius:3px;color:#555}.cf-auto,.cf-input{display:inline-block}.cf-input{padding:2px 8px;border:1.5px solid #e6a700;border-radius:4px;font-size:inherit;font-family:inherit;background:#fff;outline:none;min-width:80px;box-shadow:0 0 0 3px rgba(230,167,0,.15)}select.cf-input{min-width:100px}