.layout{grid-template:"topbar topbar"64px"sidebar main"1fr/240px 1fr;min-height:100vh;display:grid}.topbar{background:var(--color-primary);height:64px;padding:0 var(--space-6);z-index:100;grid-area:topbar;justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.topbar-brand{color:var(--color-text-inverse);font-size:var(--font-size-lg);letter-spacing:.5px;font-weight:700}.topbar-user{align-items:center;gap:var(--space-4);display:flex}.topbar-email{color:var(--color-text-inverse);font-size:var(--font-size-sm);opacity:.85}.topbar-logout{color:var(--color-text-inverse);padding:var(--space-1) var(--space-3);border-radius:var(--radius-md);cursor:pointer;font-size:var(--font-size-sm);transition:var(--transition-fast);background:0 0;border:1px solid #ffffff4d}.topbar-logout:hover{background:#ffffff1a;border-color:#ffffff80}.sidebar{background:var(--color-bg-card);border-right:1px solid var(--color-border);width:240px;padding:var(--space-4) 0;grid-area:sidebar;height:calc(100vh - 64px);position:sticky;top:64px;overflow-y:auto}.sidebar-nav{gap:var(--space-1);flex-direction:column;display:flex}.sidebar-link{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-6);color:var(--color-text-secondary);font-size:var(--font-size-sm);transition:var(--transition-fast);border-left:3px solid #0000;font-weight:500;text-decoration:none;display:flex}.sidebar-link:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.sidebar-link.active{background:var(--color-accent-bg);color:var(--color-accent-dark);border-left-color:var(--color-accent);font-weight:600}.sidebar-icon{font-size:var(--font-size-lg);text-align:center;width:24px}.main-content{padding:var(--space-6);background:var(--color-bg-page);grid-area:main;max-width:100%;min-height:calc(100vh - 64px);overflow-y:auto}.hamburger{cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-shrink:0;width:44px;height:44px;display:none;position:relative}.hamburger-line,.hamburger:before,.hamburger:after{content:"";background:var(--color-text-inverse);border-radius:2px;width:20px;height:2px;transition:transform .3s ease-in-out,opacity .3s ease-in-out;display:block;position:absolute;left:12px}.hamburger:before{top:16px}.hamburger-line{top:21px}.hamburger:after{top:26px}.hamburger[aria-expanded=true]:before{top:21px;transform:rotate(45deg)}.hamburger[aria-expanded=true] .hamburger-line{opacity:0}.hamburger[aria-expanded=true]:after{top:21px;transform:rotate(-45deg)}.drawer-overlay{z-index:150;opacity:0;pointer-events:none;visibility:hidden;background:#0f172a80;transition:opacity .2s ease-out,visibility 0s linear .2s;position:fixed;inset:0}.drawer-overlay.open{opacity:1;pointer-events:auto;visibility:visible;transition:opacity .2s ease-out,visibility linear}.drawer{width:var(--drawer-width);background:var(--color-bg-card);z-index:200;visibility:hidden;-webkit-overflow-scrolling:touch;flex-direction:column;height:100%;transition:transform .28s cubic-bezier(.4,0,1,1),visibility 0s linear .28s;display:flex;position:fixed;top:0;left:0;overflow-y:auto;transform:translate(-100%)}.drawer.open{visibility:visible;transition:transform .32s cubic-bezier(.32,.72,0,1),visibility linear;transform:translate(0)}.drawer-header{background:linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-light) 100%);padding:var(--space-6);align-items:center;gap:var(--space-4);display:flex}.drawer-avatar{border-radius:var(--radius-full);background:var(--color-accent);width:44px;height:44px;color:var(--color-text-inverse);font-size:var(--font-size-lg);flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:flex}.drawer-email{color:var(--color-text-inverse);font-size:var(--font-size-sm);opacity:.85;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.drawer-nav{gap:var(--space-1);padding:var(--space-4) 0;flex-direction:column;flex:1;display:flex}.drawer-link{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-6);color:var(--color-text-secondary);font-size:var(--font-size-sm);transition:var(--transition-fast);border-left:3px solid #0000;font-weight:500;text-decoration:none;display:flex}.drawer-link:hover{background:var(--color-bg-hover);color:var(--color-text-primary)}.drawer-link.active{background:var(--color-accent-bg);color:var(--color-accent-dark);border-left-color:var(--color-accent);font-weight:600}.drawer-link-icon{font-size:var(--font-size-lg);text-align:center;width:24px}.drawer-footer{border-top:1px solid var(--color-border);padding:var(--space-4) var(--space-6)}.drawer-logout{border:1px solid var(--color-border);border-radius:var(--radius-md);width:100%;min-height:44px;color:var(--color-text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:var(--transition-fast);background:0 0;justify-content:center;align-items:center;display:flex}.drawer-logout:hover{background:var(--color-error-bg);color:var(--color-error);border-color:var(--color-error)}.fab{border-radius:var(--radius-full);background:var(--color-accent);width:56px;height:56px;color:var(--color-text-inverse);font-size:var(--font-size-xl);cursor:pointer;box-shadow:var(--shadow-float);z-index:120;border:none;justify-content:center;align-items:center;font-weight:700;transition:opacity .2s,transform .2s;display:flex;position:fixed;bottom:32px;right:32px}.fab.hidden{opacity:0;pointer-events:none}.topbar-inner{display:contents}@media (width<=1023px){.layout{grid-template-columns:1fr;grid-template-areas:"topbar""main"}.sidebar{display:none}.hamburger{display:block}.topbar-inner{display:contents}.topbar{position:relative}.topbar-brand{pointer-events:none;position:absolute;left:50%;transform:translate(-50%)}.topbar-email{display:none}.topbar-logout{min-width:44px;min-height:44px;padding:0 var(--space-3);justify-content:center;align-items:center;display:flex}.main-content{padding:var(--space-4)}.fab{bottom:24px;right:24px}}@media (width>=1024px){.drawer,.drawer-overlay{display:none!important}}.auth-page{background:var(--color-bg-page);min-height:100vh;padding:var(--space-4);justify-content:center;align-items:center;display:flex}.auth-title{font-size:var(--font-size-2xl);color:var(--color-text-primary);margin-bottom:var(--space-1);font-weight:700}.auth-subtitle{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin-bottom:var(--space-6)}.auth-form{gap:var(--space-4);flex-direction:column;display:flex}.auth-error{background:var(--color-error-bg);color:var(--color-error);padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.auth-switch{text-align:center;margin-top:var(--space-6);font-size:var(--font-size-sm);color:var(--color-text-secondary)}.dashboard{width:100%}.dashboard-row{gap:var(--space-4);grid-template-columns:1fr 1fr;align-items:start;display:grid}@media (width<=900px){.dashboard-row{grid-template-columns:1fr}}.page-title{font-size:var(--font-size-2xl);margin-bottom:var(--space-6);font-weight:700}.month-selector{align-items:center;gap:var(--space-2);margin-bottom:var(--space-6);display:flex}.month-arrow{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-card);cursor:pointer;width:36px;height:36px;font-size:var(--font-size-lg);color:var(--color-text-primary);transition:var(--transition-fast);justify-content:center;align-items:center;display:flex}.month-arrow:hover{background:var(--color-bg-hover)}.month-select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-primary);cursor:pointer;font-weight:500}.summary-cards{gap:var(--space-4);margin-bottom:var(--space-6);grid-template-columns:repeat(auto-fit,minmax(200px,1fr));display:grid}.summary-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-1)}.summary-value{font-size:var(--font-size-2xl);font-weight:700}.summary-value.accent{color:var(--color-accent-dark)}.chip-row{gap:var(--space-2);margin-bottom:var(--space-4);flex-wrap:wrap;display:flex}.chart-container{width:100%;min-height:350px}.empty-chart{min-height:200px;color:var(--color-text-secondary);font-size:var(--font-size-sm);justify-content:center;align-items:center;display:flex}.dashboard-table{border-collapse:collapse;width:100%}.dashboard-table th,.dashboard-table td{padding:var(--space-3) var(--space-4);text-align:left}.dashboard-table th{background:var(--color-primary);color:var(--color-text-inverse);font-size:var(--font-size-sm);font-weight:600}.dashboard-table th:last-child,.dashboard-table td.amount-cell{text-align:right}.dashboard-table tbody tr:nth-child(2n){background:var(--color-bg-hover)}.dashboard-table tbody tr:hover{background:var(--color-bg-highlight)}.empty-cell{color:var(--color-text-secondary);text-align:center!important;padding:var(--space-8)!important}.report{gap:var(--space-4);flex-direction:column;width:100%;display:flex}.chart-title{font-size:var(--font-size-base);margin-bottom:var(--space-2);color:var(--color-text-primary);font-weight:600}.report-chart-container{width:100%;min-height:400px}.annual-summary{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.annual-summary-item{background:var(--color-bg-card);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-6);gap:var(--space-1);flex-direction:column;display:flex}.annual-summary-label{font-size:var(--font-size-sm);color:var(--color-text-secondary)}.annual-summary-value{font-size:var(--font-size-2xl);color:var(--color-accent-dark);font-feature-settings:"tnum";font-weight:700}.report-controls{align-items:center;gap:var(--space-4);margin-bottom:var(--space-6);flex-wrap:wrap;display:flex}.year-selector{align-items:center;gap:var(--space-2);display:flex}.year-arrow{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-card);cursor:pointer;width:36px;height:36px;font-size:var(--font-size-lg);color:var(--color-text-primary);transition:var(--transition-fast);justify-content:center;align-items:center;display:flex}.year-arrow:hover:not(:disabled){background:var(--color-bg-hover)}.year-arrow:disabled{opacity:.3;cursor:not-allowed}.report-select{padding:var(--space-2) var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg-card);color:var(--color-text-primary);cursor:pointer;font-weight:500}.report-table-wrapper{overflow-x:auto}.report-table{border-collapse:collapse;width:100%}.report-table th,.report-table td{padding:var(--space-3) var(--space-4);white-space:nowrap}.report-table th{background:var(--color-primary);color:var(--color-text-inverse);font-size:var(--font-size-sm);text-align:right;font-weight:600}.report-table th:first-child{text-align:left}.report-table .month-cell{text-align:left;font-weight:500}.report-table .amount-cell{text-align:right;font-variant-numeric:tabular-nums}.report-table .total-cell{color:var(--color-accent-dark);font-weight:600}.report-table tbody tr:nth-child(2n){background:var(--color-bg-hover)}.report-table tbody tr:hover{background:var(--color-bg-highlight)}.report-table .total-row{font-weight:600;background:var(--color-accent-bg)!important}@media (width<=1023px){.annual-summary{grid-template-columns:1fr}}.record{max-width:640px}.record-tabs{gap:var(--space-1);margin-bottom:var(--space-4);border-bottom:2px solid var(--color-border);display:flex}.record-tab{padding:var(--space-3) var(--space-6);font-size:var(--font-size-base);color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-fast);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;font-weight:500}.record-tab.active{color:var(--color-accent-dark);border-bottom-color:var(--color-accent)}.record-tab:hover{color:var(--color-text-primary)}.record-form{gap:var(--space-4);flex-direction:column;display:flex}.form-field{gap:var(--space-1);flex-direction:column;display:flex}.form-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);font-weight:500}.msg{padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.msg.success{background:var(--color-success-bg);color:var(--color-success)}.msg.error{background:var(--color-error-bg);color:var(--color-error)}.pdf-preview{background:var(--color-accent-bg);padding:var(--space-4);border-radius:var(--radius-md);gap:var(--space-2);flex-direction:column;display:flex}.import-excel{max-width:1000px}.import-hint{color:var(--color-text-secondary);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.import-hint strong{color:var(--color-accent)}.import-loading{text-align:center;color:var(--color-accent);margin-top:var(--space-4)}.import-error{background:var(--color-error-bg);color:var(--color-error);padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.step-title{font-size:var(--font-size-lg);margin-bottom:var(--space-2);font-weight:600}.detected-info{background:var(--color-bg-page);padding:var(--space-4);border-radius:var(--radius-md);gap:var(--space-2);flex-direction:column;display:flex}.info-row{font-size:var(--font-size-sm);gap:var(--space-2);display:flex}.info-label{color:var(--color-text-secondary);min-width:60px}.amount-highlight{color:var(--color-accent);font-weight:700}.step-actions{gap:var(--space-3);margin-top:var(--space-4);justify-content:flex-end;display:flex}.year-section{margin-bottom:var(--space-6)}.year-title{font-size:var(--font-size-base);margin-bottom:var(--space-2);color:var(--color-text-primary);font-weight:600}.preview-table-wrapper{margin-bottom:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-md);overflow-x:auto}.preview-table{border-collapse:collapse;width:100%}.preview-table th,.preview-table td{padding:var(--space-2) var(--space-3);text-align:left;font-size:var(--font-size-sm);white-space:nowrap}.preview-table th{background:var(--color-primary);color:var(--color-text-inverse);font-weight:600}.preview-table tbody tr:nth-child(2n){background:var(--color-bg-hover)}.preview-table .amount-cell{text-align:right;font-feature-settings:"tnum"}.preview-table .total-cell{color:var(--color-accent);font-weight:700}.import-done{text-align:center;padding:var(--space-8)}.done-icon{border-radius:var(--radius-full);background:var(--color-success-bg);width:64px;height:64px;color:var(--color-success);font-size:var(--font-size-2xl);margin:0 auto var(--space-4);justify-content:center;align-items:center;display:flex}.import-done h2{font-size:var(--font-size-xl);margin-bottom:var(--space-2)}.import-done p{color:var(--color-text-secondary);margin-bottom:var(--space-3)}.banks-info{font-size:var(--font-size-sm)}.done-actions{gap:var(--space-3);margin-top:var(--space-4);justify-content:center;display:flex}.management{max-width:720px}.management-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.management-header .page-title{margin-bottom:0}.management-loading{text-align:center;padding:var(--space-8);color:var(--color-text-secondary)}.management-table{border-collapse:collapse;width:100%}.management-table th,.management-table td{padding:var(--space-3) var(--space-4);text-align:left}.management-table th{background:var(--color-primary);color:var(--color-text-inverse);font-size:var(--font-size-sm);font-weight:600}.management-table tbody tr:nth-child(2n){background:var(--color-bg-hover)}.management-table tbody tr:hover{background:var(--color-bg-highlight)}.management-table .empty-cell{text-align:center;color:var(--color-text-secondary);padding:var(--space-8)}.action-btns{gap:var(--space-2);display:flex}.modal-error{background:var(--color-error-bg);color:var(--color-error);padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-bottom:var(--space-4)}.modal-actions{gap:var(--space-3);margin-top:var(--space-4);justify-content:flex-end;display:flex}.bank-color-dot{border-radius:var(--radius-full);border:2px solid var(--color-border);vertical-align:middle;width:20px;height:20px;display:inline-block}.color-field{margin-top:var(--space-4)}.color-label{font-size:var(--font-size-sm);color:var(--color-text-secondary);margin-bottom:var(--space-2);font-weight:500;display:block}.color-presets{gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.color-swatch{border-radius:var(--radius-full);cursor:pointer;width:28px;height:28px;transition:var(--transition-fast);border:2px solid #0000;padding:0}.color-swatch:hover{transform:scale(1.15)}.color-swatch.active{border-color:var(--color-text-primary);box-shadow:0 0 0 2px var(--color-bg-card), 0 0 0 4px var(--color-text-primary)}.color-custom{align-items:center;gap:var(--space-2);display:flex}.color-input{border:1px solid var(--color-border);border-radius:var(--radius-md);cursor:pointer;background:0 0;width:36px;height:36px;padding:0}.color-input::-webkit-color-swatch-wrapper{padding:2px}.color-input::-webkit-color-swatch{border-radius:var(--radius-sm);border:none}.color-hex{font-size:var(--font-size-sm);color:var(--color-text-secondary);font-family:monospace}:root{--color-primary:#1e293b;--color-primary-light:#334155;--color-accent:#0ea5e9;--color-accent-light:#38bdf8;--color-accent-dark:#0284c7;--color-accent-bg:#e0f2fe;--color-bg-page:#f1f5f9;--color-bg-card:#fff;--color-bg-hover:#f8fafc;--color-bg-highlight:#e0f2fe;--color-text-primary:#1e293b;--color-text-secondary:#64748b;--color-text-placeholder:#94a3b8;--color-text-inverse:#fff;--color-error:#ef4444;--color-error-bg:#fef2f2;--color-success:#22c55e;--color-success-bg:#f0fdf4;--color-border:#e2e8f0;--color-border-focus:#0ea5e9;--font-family:"Inter", "Noto Sans TC", system-ui, sans-serif;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-base:1rem;--font-size-lg:1.25rem;--font-size-xl:1.5rem;--font-size-2xl:2rem;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 4px 6px -1px #00000012, 0 2px 4px -2px #0000000d;--shadow-float:0 8px 24px #0000001f;--transition-fast:.15s ease;--transition-base:.2s ease;--drawer-width:min(80vw, 280px)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);font-size:var(--font-size-base);color:var(--color-text-primary);background:var(--color-bg-page);-webkit-font-smoothing:antialiased;line-height:1.5}a{color:var(--color-accent);text-decoration:none}a:hover{color:var(--color-accent-dark)}input,select,button,textarea{font-family:inherit;font-size:inherit}body.drawer-open{width:100%;position:fixed;overflow:hidden}
