:root{--bg-primary:#0f1117;--bg-secondary:#1a1d2e;--bg-card:#1e2235;--bg-card-hover:#252a40;--bg-sidebar:#141624;--bg-input:#252a40;--text-primary:#e8eaf0;--text-secondary:#9ca3b8;--text-muted:#6b7394;--text-inverse:#0f1117;--accent-green:#34d399;--accent-green-dim:#34d39926;--accent-red:#f87171;--accent-red-dim:#f8717126;--accent-blue:#60a5fa;--accent-blue-dim:#60a5fa26;--accent-purple:#a78bfa;--accent-purple-dim:#a78bfa26;--accent-amber:#fbbf24;--accent-amber-dim:#fbbf2426;--accent-cyan:#22d3ee;--accent-cyan-dim:#22d3ee26;--accent-pink:#f472b6;--accent-pink-dim:#f472b626;--border-color:#2a2f45;--border-hover:#3d4463;--gradient-green:linear-gradient(135deg, #34d399, #059669);--gradient-red:linear-gradient(135deg, #f87171, #dc2626);--gradient-blue:linear-gradient(135deg, #60a5fa, #3b82f6);--gradient-purple:linear-gradient(135deg, #a78bfa, #7c3aed);--gradient-amber:linear-gradient(135deg, #fbbf24, #f59e0b);--gradient-hero:linear-gradient(135deg, #667eea 0%, #764ba2 100%);--font-main:"Noto Sans TC", "Inter", sans-serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--font-size-xs:.75rem;--font-size-sm:.8125rem;--font-size-base:.9375rem;--font-size-lg:1.125rem;--font-size-xl:1.375rem;--font-size-2xl:1.75rem;--font-size-3xl:2.25rem;--font-size-4xl:3rem;--space-xs:.375rem;--space-sm:.75rem;--space-md:1.25rem;--space-lg:2rem;--space-xl:3rem;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:24px;--radius-full:9999px;--shadow-sm:0 1px 3px #0000004d;--shadow-md:0 4px 12px #0006;--shadow-lg:0 8px 32px #00000080;--shadow-glow-green:0 0 20px #34d39933;--shadow-glow-blue:0 0 20px #60a5fa33;--sidebar-width:260px;--sidebar-collapsed:72px;--transition-fast:.15s ease;--transition-base:.25s ease;--transition-slow:.4s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px}body{font-family:var(--font-main);background:var(--bg-primary);color:var(--text-primary);line-height:1.6;overflow-x:hidden}a{color:inherit;text-decoration:none}button{cursor:pointer;color:inherit;background:0 0;border:none;font-family:inherit}input,select,textarea{color:inherit;font-family:inherit}img{max-width:100%;display:block}#app{min-height:100vh;display:flex}#sidebar{width:var(--sidebar-width);background:var(--bg-sidebar);border-right:1px solid var(--border-color);z-index:100;height:100vh;transition:width var(--transition-base);flex-direction:column;display:flex;position:fixed;top:0;left:0;overflow:hidden auto}#main-content{margin-left:var(--sidebar-width);min-height:100vh;transition:margin-left var(--transition-base);flex:1;min-width:0}#page-container{padding:var(--space-lg);width:100%;max-width:1400px;margin:0 auto;animation:.3s fadeIn}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.sidebar-header{padding:var(--space-lg) var(--space-md);border-bottom:1px solid var(--border-color)}.sidebar-logo{align-items:center;gap:var(--space-sm);display:flex}.sidebar-logo .logo-icon{background:var(--gradient-hero);border-radius:var(--radius-md);flex-shrink:0;justify-content:center;align-items:center;width:40px;height:40px;font-size:1.25rem;display:flex}.sidebar-logo .logo-text{font-size:var(--font-size-lg);letter-spacing:-.3px;font-weight:700}.sidebar-logo .logo-sub{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:2px}.sidebar-nav{padding:var(--space-md) var(--space-sm);flex:1}.nav-section-title{font-size:var(--font-size-xs);color:var(--text-muted);text-transform:uppercase;letter-spacing:1.5px;padding:var(--space-sm) var(--space-sm);margin-top:var(--space-md)}.nav-section-title:first-child{margin-top:0}.nav-item{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-sm);color:var(--text-secondary);transition:all var(--transition-fast);white-space:nowrap;margin-bottom:2px;font-weight:500;display:flex}.nav-item:hover{background:var(--bg-card);color:var(--text-primary)}.nav-item.active{background:var(--accent-blue-dim);color:var(--accent-blue);font-weight:600}.nav-item .nav-icon{text-align:center;flex-shrink:0;width:24px;font-size:1.125rem}.sidebar-footer{padding:var(--space-md);border-top:1px solid var(--border-color)}.sidebar-footer-info{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;line-height:1.8}#mobile-bottom-nav{display:none}.page-header{margin-bottom:var(--space-lg)}.page-header h1{font-size:var(--font-size-2xl);letter-spacing:-.5px;margin-bottom:var(--space-xs);font-weight:800}.page-header .page-subtitle{color:var(--text-secondary);font-size:var(--font-size-base)}.card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:var(--space-lg);transition:all var(--transition-fast)}.card:hover{border-color:var(--border-hover);box-shadow:var(--shadow-md)}.card-title{font-size:var(--font-size-sm);color:var(--text-secondary);margin-bottom:var(--space-xs);align-items:center;gap:var(--space-xs);font-weight:500;display:flex}.card-value{font-size:var(--font-size-2xl);letter-spacing:-.5px;font-weight:800;line-height:1.2}.card-change{font-size:var(--font-size-xs);border-radius:var(--radius-full);margin-top:var(--space-xs);align-items:center;gap:4px;padding:2px 8px;font-weight:600;display:inline-flex}.card-change.positive{background:var(--accent-green-dim);color:var(--accent-green)}.card-change.negative{background:var(--accent-red-dim);color:var(--accent-red)}.stat-cards{gap:var(--space-md);margin-bottom:var(--space-lg);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.stat-card{position:relative;overflow:hidden}.stat-card .stat-icon{top:var(--space-md);right:var(--space-md);border-radius:var(--radius-md);justify-content:center;align-items:center;width:44px;height:44px;font-size:1.25rem;display:flex;position:absolute}.chart-container{width:100%;position:relative}.chart-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:var(--space-lg)}.chart-card .chart-header{margin-bottom:var(--space-md);justify-content:space-between;align-items:center;display:flex}.chart-card .chart-title{font-size:var(--font-size-lg);font-weight:700}.charts-grid{gap:var(--space-md);margin-bottom:var(--space-lg);grid-template-columns:repeat(auto-fit,minmax(400px,1fr));display:grid}.data-table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.data-table th{text-align:left;color:var(--text-muted);font-weight:600;font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.5px;padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border-color)}.data-table td{padding:var(--space-sm) var(--space-md);border-bottom:1px solid var(--border-color);vertical-align:middle}.data-table tbody tr{transition:background var(--transition-fast)}.data-table tbody tr:hover{background:var(--bg-card-hover)}.data-table .amount{font-variant-numeric:tabular-nums;font-weight:600}.data-table .amount.positive{color:var(--accent-green)}.data-table .amount.negative{color:var(--accent-red)}.badge{border-radius:var(--radius-full);font-size:var(--font-size-xs);align-items:center;padding:2px 10px;font-weight:600;display:inline-flex}.badge-green{background:var(--accent-green-dim);color:var(--accent-green)}.badge-red{background:var(--accent-red-dim);color:var(--accent-red)}.badge-blue{background:var(--accent-blue-dim);color:var(--accent-blue)}.badge-amber{background:var(--accent-amber-dim);color:var(--accent-amber)}.badge-purple{background:var(--accent-purple-dim);color:var(--accent-purple)}.btn{align-items:center;gap:var(--space-xs);padding:var(--space-sm) var(--space-md);border-radius:var(--radius-md);font-size:var(--font-size-sm);transition:all var(--transition-fast);font-weight:600;display:inline-flex}.btn-primary{background:var(--gradient-blue);color:#fff}.btn-primary:hover{box-shadow:var(--shadow-glow-blue);transform:translateY(-1px)}.btn-success{background:var(--gradient-green);color:var(--text-inverse)}.btn-success:hover{box-shadow:var(--shadow-glow-green);transform:translateY(-1px)}.btn-outline{border:1px solid var(--border-color);background:0 0}.btn-outline:hover{border-color:var(--accent-blue);color:var(--accent-blue)}.year-select{background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--space-xs) var(--space-sm);font-size:var(--font-size-sm);color:var(--text-primary);cursor:pointer}.year-select:focus{border-color:var(--accent-blue);outline:none}.import-zone{border:2px dashed var(--border-color);border-radius:var(--radius-lg);padding:var(--space-xl);text-align:center;transition:all var(--transition-base);cursor:pointer}.import-zone:hover,.import-zone.dragover{border-color:var(--accent-blue);background:var(--accent-blue-dim)}.import-zone .import-icon{margin-bottom:var(--space-md);font-size:3rem;display:block}.import-zone .import-text{color:var(--text-secondary);font-size:var(--font-size-base);margin-bottom:var(--space-sm)}.import-zone .import-hint{color:var(--text-muted);font-size:var(--font-size-xs)}.form-grid{gap:var(--space-md);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.form-group{gap:var(--space-xs);flex-direction:column;display:flex}.form-group label{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;font-weight:600}.form-group input,.form-group select{background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);transition:border-color var(--transition-fast)}.form-group input:focus,.form-group select:focus{border-color:var(--accent-blue);outline:none}.tabs{gap:var(--space-xs);margin-bottom:var(--space-lg);border-bottom:1px solid var(--border-color);padding-bottom:0;display:flex}.tab-btn{padding:var(--space-sm) var(--space-md);font-size:var(--font-size-sm);color:var(--text-secondary);transition:all var(--transition-fast);border-bottom:2px solid #0000;margin-bottom:-1px;font-weight:500}.tab-btn:hover{color:var(--text-primary)}.tab-btn.active{color:var(--accent-blue);border-bottom-color:var(--accent-blue);font-weight:600}.csv-textarea{resize:vertical;background:var(--bg-input);border:1px solid var(--border-color);border-radius:var(--radius-md);width:100%;min-height:220px;padding:var(--space-md);font-size:var(--font-size-sm);line-height:1.7}.csv-textarea:focus{border-color:var(--accent-blue);outline:none}.summary-chips{gap:var(--space-sm);margin-top:var(--space-sm);flex-wrap:wrap;display:flex}.summary-chip{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-secondary);color:var(--text-secondary);font-size:var(--font-size-sm);align-items:center;gap:6px;padding:6px 10px;display:inline-flex}.text-green{color:var(--accent-green)}.text-red{color:var(--accent-red)}.text-blue{color:var(--accent-blue)}.text-amber{color:var(--accent-amber)}.text-purple{color:var(--accent-purple)}.text-muted{color:var(--text-muted)}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-sm{gap:var(--space-sm)}.gap-md{gap:var(--space-md)}.mb-md{margin-bottom:var(--space-md)}.mb-lg{margin-bottom:var(--space-lg)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}.toast{padding:var(--space-sm) var(--space-lg);background:var(--accent-green);color:var(--text-inverse);border-radius:var(--radius-md);font-weight:600;font-size:var(--font-size-sm);box-shadow:var(--shadow-lg);z-index:9999;animation:.3s toastIn,.3s 2.5s forwards toastOut;position:fixed;bottom:24px;right:24px}@keyframes toastIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes toastOut{0%{opacity:1}to{opacity:0;transform:translateY(20px)}}@media (width<=1024px){#sidebar{width:var(--sidebar-collapsed)}#main-content{margin-left:var(--sidebar-collapsed)}.nav-item span:not(.nav-icon),.sidebar-logo .logo-text,.sidebar-logo .logo-sub,.nav-section-title,.sidebar-footer-info{display:none}.sidebar-header{padding:var(--space-md)}.nav-item{padding:var(--space-sm);justify-content:center}}@media (width<=768px){.charts-grid{grid-template-columns:1fr}.stat-cards{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}#page-container{padding:var(--space-md)}}@media (width<=767px){body{overflow-x:hidden}#app{display:block}#sidebar{display:none}#main-content{width:100%;margin-left:0;padding-bottom:70px}#page-container{padding:var(--space-md);overflow-x:hidden}#mobile-bottom-nav{z-index:900;min-height:64px;padding:6px max(8px, env(safe-area-inset-left)) calc(6px + env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-right));border-top:1px solid var(--border-color);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#141624f5;grid-template-columns:repeat(6,minmax(0,1fr));display:grid;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -8px 24px #00000059}#mobile-bottom-nav .mobile-nav-item{border-radius:var(--radius-sm);text-align:center;flex-direction:column;justify-content:center;gap:2px;min-width:0;min-height:52px;margin:0;padding:4px 2px;font-size:.68rem;line-height:1.1}#mobile-bottom-nav .nav-icon{width:auto;font-size:1.1rem}.stat-cards{gap:var(--space-sm);grid-template-columns:repeat(2,minmax(0,1fr))}.stat-card .stat-icon{width:34px;height:34px;margin-bottom:var(--space-sm);position:static}.card,.chart-card{border-radius:var(--radius-md);padding:var(--space-sm)}.chart-card{overflow-x:auto}.chart-card .chart-header{align-items:flex-start;gap:var(--space-sm);flex-direction:column}.chart-container{height:220px}.chart-container[style*=max-width]{height:auto}.charts-grid{grid-template-columns:1fr}.data-table{min-width:640px}.tabs{white-space:nowrap;padding-bottom:var(--space-xs);overflow-x:auto}.tab-btn{flex:none}input,select,textarea{min-height:44px;font-size:16px}.btn{min-height:44px;padding:10px 16px}.flex{flex-wrap:wrap}}
