:root{--c-bg: #F7F8F9;--c-surface: #FFFFFF;--c-surface-sunken: #F2F4F7;--c-hairline: #E4E7EC;--c-border-control: #667085;--c-ink: #1A1D21;--c-ink-secondary: #5B6470;--c-ink-muted: #6B7280;--c-on-fill: #FFFFFF;--c-pos-text: #067647;--c-pos-fill: #067647;--c-pos-tint: #ECFDF3;--c-neg-text: #B42318;--c-neg-fill: #B42318;--c-neg-tint: #FEF3F2;--c-warn-text: #B54708;--c-warn-fill: #B54708;--c-warn-tint: #FFFAEB;--c-action: #1A1D21;--c-accent: #175CD3;--c-focus-ring: #175CD3;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--t-hero: 40px;--t-number: 28px;--t-h1: 24px;--t-h2: 20px;--t-body-lg: 18px;--t-body: 16px;--t-label: 14px;--t-caption: 13px;--w-regular: 400;--w-medium: 500;--w-semibold: 600;--w-bold: 700;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 20px;--s-6: 24px;--s-8: 32px;--s-10: 40px;--s-12: 48px;--s-16: 64px;--r-sm: 8px;--r-md: 12px;--r-lg: 16px;--r-pill: 999px;--tap-min: 44px;--h-input: 48px;--h-btn: 48px;--h-btn-giant: 56px;--fab: 56px;--icon: 24px;--icon-sm: 20px;--shadow-card: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .1);--shadow-raised: 0 4px 8px rgba(16, 24, 40, .08), 0 2px 4px rgba(16, 24, 40, .06);--shadow-none: none;--focus-ring-width: 2px;--focus-ring-offset: 2px;--motion-fast: .12s;--motion-base: .2s;--motion-ease: cubic-bezier(.2, 0, 0, 1);--bp-md: 768px;--bp-lg: 1024px;--maxw-content: 640px}*{box-sizing:border-box;margin:0;padding:0}html{font-size:16px}body{font-family:var(--font-sans);background:var(--c-bg);color:var(--c-ink);line-height:1.5;-webkit-font-smoothing:antialiased}button{font-family:inherit;cursor:pointer}a{color:inherit;text-decoration:none}:focus-visible{outline:var(--focus-ring-width) solid var(--c-focus-ring);outline-offset:var(--focus-ring-offset)}.num{font-variant-numeric:tabular-nums}.app{min-height:100vh;display:flex;flex-direction:column}.sidebar{display:none}.main{flex:1;display:flex;flex-direction:column;min-width:0}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:10;background:var(--c-surface);border-top:1px solid var(--c-hairline);display:flex;padding:var(--s-2) 0 var(--s-3)}.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;color:var(--c-ink-muted);min-height:44px;justify-content:center;background:none;border:none}.tab svg{width:24px;height:24px}.tab--active{color:var(--c-ink);font-weight:600}.topbar{background:var(--c-surface);padding:var(--s-4) var(--s-4) var(--s-3);border-bottom:1px solid var(--c-hairline);display:flex;align-items:center;gap:var(--s-3)}.topbar h1{font-size:var(--t-h1);line-height:1.25;font-weight:700}.topbar .sub{font-size:var(--t-label);color:var(--c-ink-secondary);font-weight:400}.topbar .spacer{flex:1}.iconbtn{width:44px;height:44px;display:flex;align-items:center;justify-content:center;margin:-8px 0;color:var(--c-ink);background:none;border:none;flex:none}.content{flex:1;padding:var(--s-4) var(--s-4) calc(var(--s-16) + var(--s-8));display:flex;flex-direction:column;gap:var(--s-4)}.card{background:var(--c-surface);border-radius:var(--r-md);padding:var(--s-5);box-shadow:var(--shadow-card)}.card--lg{border-radius:var(--r-lg)}.card-label{font-size:var(--t-label);font-weight:500;color:var(--c-ink-secondary)}.card-sublabel{font-size:var(--t-caption);color:var(--c-ink-muted)}.hero{font-size:var(--t-hero);line-height:1.1;font-weight:700;letter-spacing:-.5px}.hero--neg{color:var(--c-neg-text)}.numbig{font-size:var(--t-number);line-height:1.2;font-weight:700}.section-title{font-size:var(--t-h2);font-weight:600;margin-top:var(--s-2)}.btn{height:48px;border-radius:var(--r-md);font-size:16px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:var(--s-2);border:1px solid transparent;width:100%}.btn--giant{height:56px;font-size:18px}.btn--sm{height:44px;font-size:15px}.btn--pos{background:var(--c-pos-fill);color:var(--c-on-fill)}.btn--primary{background:var(--c-action);color:var(--c-on-fill)}.btn--outline{background:var(--c-surface);color:var(--c-ink);border-color:var(--c-border-control)}.btn--danger{color:var(--c-neg-text);border-color:var(--c-neg-text);background:var(--c-surface)}.btn--auto{width:auto;padding:0 var(--s-6)}.fab{position:fixed;right:var(--s-5);bottom:calc(var(--s-16) + var(--s-6));width:56px;height:56px;border-radius:var(--r-pill);z-index:11;background:var(--c-action);color:var(--c-on-fill);display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-raised);border:none}.fab svg{width:28px;height:28px}.chips{display:flex;gap:var(--s-2);overflow-x:auto;padding-bottom:var(--s-1)}.chip{flex:none;height:36px;padding:0 var(--s-4);border-radius:var(--r-pill);border:1px solid var(--c-border-control);background:var(--c-surface);color:var(--c-ink);font-size:14px;font-weight:500;display:flex;align-items:center}.chip--active{background:var(--c-accent);color:var(--c-on-fill);border-color:var(--c-accent)}.segmented{display:flex;background:var(--c-surface-sunken);border-radius:var(--r-md);padding:4px;gap:2px}.seg{flex:1;height:40px;display:flex;align-items:center;justify-content:center;gap:6px;font-size:12px;font-weight:600;color:var(--c-ink-secondary);border-radius:var(--r-sm);white-space:nowrap;background:none;border:none}.seg--active{background:var(--c-surface);color:var(--c-ink);box-shadow:var(--shadow-card)}.count-line{font-size:13px;font-weight:600;color:var(--c-ink-muted);padding:0 var(--s-1)}.row-actions{display:flex;gap:var(--s-3)}.row-actions .btn{flex:1}.pend-note{font-size:12px;color:var(--c-warn-text);background:var(--c-warn-tint);border-radius:var(--r-sm);padding:var(--s-2) var(--s-3)}.badge{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 var(--s-2);border-radius:var(--r-sm);font-size:13px;font-weight:600}.badge--pos{background:var(--c-pos-tint);color:var(--c-pos-text)}.badge--neg{background:var(--c-neg-tint);color:var(--c-neg-text)}.badge--warn{background:var(--c-warn-tint);color:var(--c-warn-text)}.badge--neutral{background:var(--c-surface-sunken);color:var(--c-ink-secondary)}.dot{width:8px;height:8px;border-radius:var(--r-pill)}.dot--pos{background:var(--c-pos-text)}.dot--neg{background:var(--c-neg-text)}.dot--warn{background:var(--c-warn-text)}.search{display:flex;align-items:center;gap:var(--s-2);height:48px;padding:0 var(--s-4);background:var(--c-surface);border:1px solid var(--c-border-control);border-radius:var(--r-md);color:var(--c-ink-muted)}.search input{border:none;outline:none;font-size:16px;font-family:inherit;flex:1;color:var(--c-ink);background:none}.rowcard{background:var(--c-surface);border-radius:var(--r-md);padding:var(--s-4);box-shadow:var(--shadow-card);display:flex;align-items:center;gap:var(--s-3);width:100%;text-align:left}.rowcard--stack{flex-direction:column;align-items:stretch}.rowcard-head{display:flex;align-items:center;gap:var(--s-3)}.avatar{width:44px;height:44px;border-radius:var(--r-pill);background:var(--c-surface-sunken);display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--c-ink-secondary);flex:none}.rowmain{flex:1;min-width:0}.rowmain .name{font-size:18px;font-weight:600}.rowmain .meta{font-size:14px;color:var(--c-ink-secondary);margin-top:2px}.rowend{text-align:right;flex:none}.session{background:var(--c-surface);border-radius:var(--r-md);box-shadow:var(--shadow-card);overflow:hidden}.session-top{padding:var(--s-4);display:flex;gap:var(--s-4);align-items:baseline;border-bottom:1px solid var(--c-hairline)}.session-time{font-size:28px;font-weight:700;line-height:1}.session-info .name{font-size:18px;font-weight:600}.session-info .plan{font-size:14px;color:var(--c-ink-secondary);margin-top:2px}.session-actions{padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-3)}.plan-table{background:var(--c-surface);border-radius:var(--r-md);box-shadow:var(--shadow-card);overflow:hidden}.plan-row{display:flex;justify-content:space-between;align-items:center;padding:var(--s-3) var(--s-4);font-size:16px;border-bottom:1px solid var(--c-hairline)}.plan-row:last-child{border-bottom:none}.plan-row .k{color:var(--c-ink-secondary)}.plan-row .v{font-weight:600}.plan-row--total{background:var(--c-surface-sunken)}.plan-row--total .k{color:var(--c-ink)}.plan-row--total .v{color:var(--c-pos-text)}.tl-date{font-size:13px;font-weight:600;color:var(--c-ink-muted);margin:var(--s-2) 0 var(--s-1);text-transform:uppercase;letter-spacing:.4px}.tl-item{display:grid;grid-template-columns:auto 1fr;gap:var(--s-3);padding:var(--s-2) 0}.tl-rail{display:flex;flex-direction:column;align-items:center;padding-top:6px}.tl-node{width:10px;height:10px;border-radius:var(--r-pill);background:var(--c-ink-muted);flex:none}.tl-node--pos{background:var(--c-pos-text)}.tl-node--neg{background:var(--c-neg-text)}.tl-node--warn{background:var(--c-warn-text)}.tl-line{width:2px;flex:1;background:var(--c-hairline);margin-top:4px}.tl-body .tl-title{font-size:16px;font-weight:500}.tl-body .tl-value{font-weight:600}.tl-body .tl-meta{font-size:13px;color:var(--c-ink-muted);margin-top:2px}.tl-body .tl-detail{font-size:14px;color:var(--c-ink-secondary);margin-top:2px}.month-pill{align-self:flex-start;display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 var(--s-3);background:var(--c-surface);border:1px solid var(--c-border-control);border-radius:var(--r-pill);font-size:14px;font-weight:500}.stat-row{display:flex;justify-content:space-between;font-size:14px;color:var(--c-ink-secondary);margin-top:var(--s-2)}.stat-row .v{color:var(--c-ink);font-weight:600}.rank-row{display:flex;justify-content:space-between;align-items:center;font-size:16px}.stat-group{display:flex;gap:var(--s-6);margin-top:var(--s-3)}.data-table{width:100%;border-collapse:collapse;font-size:14px}.data-table th{text-align:right;font-weight:500;color:var(--c-ink-secondary);padding:var(--s-2);border-bottom:1px solid var(--c-hairline)}.data-table th:first-child{text-align:left}.data-table td{text-align:right;padding:var(--s-2);border-bottom:1px solid var(--c-hairline)}.data-table td:first-child{text-align:left;color:var(--c-ink-secondary)}.data-table tr:last-child td{border-bottom:none}.data-table .tr-total td{font-weight:700;background:var(--c-surface-sunken)}.empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:var(--s-8) var(--s-6);gap:var(--s-3)}.empty-icon{width:64px;height:64px;border-radius:var(--r-pill);background:var(--c-surface-sunken);display:flex;align-items:center;justify-content:center;color:var(--c-ink-muted);margin-bottom:var(--s-2)}.empty h2{font-size:20px;font-weight:600}.empty p{font-size:16px;color:var(--c-ink-secondary);max-width:34ch}.field{display:flex;flex-direction:column;gap:var(--s-2)}.field label{font-size:14px;font-weight:500;color:var(--c-ink-secondary)}.field .amount{height:56px;border:1px solid var(--c-border-control);border-radius:var(--r-md);display:flex;align-items:center;padding:0 var(--s-4);font-size:28px;font-weight:700}.field .amount .cur{font-size:18px;color:var(--c-ink-muted);margin-right:var(--s-2);font-weight:500}.field .chips{margin:0;padding:0}.input{height:48px;border:1px solid var(--c-border-control);border-radius:var(--r-md);padding:0 var(--s-4);font-size:16px;display:flex;align-items:center;color:var(--c-ink);background:var(--c-surface)}.switch-row{display:flex;align-items:center;justify-content:space-between;height:48px}.switch{width:52px;height:32px;border-radius:var(--r-pill);background:var(--c-pos-fill);position:relative;flex:none}.switch:after{content:"";position:absolute;top:4px;left:24px;width:24px;height:24px;border-radius:var(--r-pill);background:#fff}.muted-note{font-size:13px;color:var(--c-ink-muted)}.center-note{font-size:13px;color:var(--c-ink-muted);text-align:center;margin-top:var(--s-2)}.stack{display:flex;flex-direction:column;gap:var(--s-4)}.calendar{background:var(--c-surface);border-radius:var(--r-md);box-shadow:var(--shadow-card);padding:var(--s-4)}.cal-head{display:flex;align-items:center;gap:var(--s-2);margin-bottom:var(--s-3)}.cal-head .spacer{flex:1}.cal-head .cal-title{margin-bottom:0}.cal-head .btn{font-size:18px;line-height:1}.cal-title{font-size:var(--t-h2);font-weight:600;margin-bottom:var(--s-3)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--s-1)}.cal-dow{text-align:center;font-size:12px;font-weight:600;color:var(--c-ink-muted);padding:var(--s-1) 0}.cal-day{position:relative;aspect-ratio:1;min-height:44px;border:none;background:none;border-radius:var(--r-sm);font-size:15px;color:var(--c-ink);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}.cal-day--selected{background:var(--c-accent);color:var(--c-on-fill);font-weight:600}.cal-dot{width:5px;height:5px;border-radius:var(--r-pill);background:var(--c-pos-text)}.cal-day--selected .cal-dot{background:var(--c-on-fill)}@media (min-width: 1024px){body{background:var(--c-surface-sunken)}.app{flex-direction:row}.tabbar,.fab{display:none}.sidebar{width:240px;background:var(--c-surface);border-right:1px solid var(--c-hairline);display:flex;flex-direction:column;padding:var(--s-5) var(--s-3);flex:none;height:100vh;position:sticky;top:0}.brand{font-size:18px;font-weight:700;padding:0 var(--s-3) var(--s-6)}.navitem{display:flex;align-items:center;gap:var(--s-3);height:44px;padding:0 var(--s-3);border-radius:var(--r-md);color:var(--c-ink-secondary);font-size:15px;font-weight:500;margin-bottom:var(--s-1);background:none;border:none;width:100%;text-align:left}.navitem svg{width:22px;height:22px}.navitem--active{background:var(--c-surface-sunken);color:var(--c-ink);font-weight:600}.sidebar-foot{margin-top:auto;display:flex;align-items:center;gap:var(--s-3);padding:var(--s-3)}.topbar{padding:var(--s-5) var(--s-6);justify-content:space-between;position:sticky;top:0;z-index:5}.content{padding:var(--s-6);max-width:calc(var(--maxw-content) + var(--s-6) * 2);margin:0 auto;width:100%}.content--wide{max-width:960px}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-4)}.session-actions{flex-direction:row}}.login{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--s-4)}.login-card{width:100%;max-width:360px;background:var(--c-surface);border-radius:var(--r-lg);padding:var(--s-6);box-shadow:var(--shadow-card)}.login-card .brand{font-size:20px;font-weight:700;text-align:center;margin-bottom:var(--s-2)}.state-note{padding:var(--s-6);text-align:center;color:var(--c-ink-secondary)}@media (prefers-reduced-motion: reduce){*{transition-duration:0ms!important}}
