*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{color:#1a1a1a;background:#f5f4f0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;overflow-x:hidden}.page{max-width:900px;padding:max(40px, env(safe-area-inset-top)) max(24px, env(safe-area-inset-right)) max(80px, calc(env(safe-area-inset-bottom) + 40px)) max(24px, env(safe-area-inset-left));margin:0 auto}.auth-page{min-height:100dvh;padding:max(24px, env(safe-area-inset-top)) max(20px, env(safe-area-inset-right)) max(24px, calc(env(safe-area-inset-bottom) + 16px)) max(20px, env(safe-area-inset-left));justify-content:center;align-items:center;display:flex}.auth-card>p{color:#888;margin-bottom:24px;font-size:.88rem}.auth-card label{color:#555;letter-spacing:.3px;margin-top:18px;margin-bottom:6px;font-size:.78rem;font-weight:700;display:block}.auth-card input{color:#1a1a1a;-webkit-appearance:none;background:#f7f6f3;border:1.5px solid #e8e8e8;border-radius:10px;outline:none;width:100%;padding:12px 14px;font-family:inherit;font-size:1rem;transition:border-color .15s,box-shadow .15s;display:block}.auth-card input:focus{border-color:#863bff;box-shadow:0 0 0 3px #863bff1f}.auth-card button[type=submit]{color:#fff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#863bff;border:none;border-radius:12px;width:100%;margin-top:24px;padding:14px;font-family:inherit;font-size:1rem;font-weight:700;transition:background .15s,opacity .15s;display:block}.error-state{text-align:center;padding-top:6rem}.error-state p{color:#555;margin-bottom:1.25rem}.error-state button{color:#1a1a1a;cursor:pointer;background:0 0;border:1.5px solid #999;border-radius:6px;padding:.5rem 1.25rem;font-size:.95rem}.error-state button:hover{background:#eee}h1{font-size:clamp(1.5rem,5vw,1.8rem);font-weight:800;line-height:1.15}.date{color:#888;margin-top:4px;margin-bottom:36px;font-size:1rem;font-weight:600}.chart-card{background:#fff;border-radius:16px;margin-bottom:16px;padding:24px}.chart-canvas-wrap{width:100%;height:300px;position:relative}.chart-canvas-wrap canvas{width:100%!important;height:100%!important}.chart-header{justify-content:space-between;align-items:flex-start;margin-bottom:16px;display:flex}.chart-title{color:#444;font-size:.85rem;font-weight:700}.chart-sub{color:#aaa;margin-top:3px;font-size:.75rem}.floor-note{color:#888;align-items:center;gap:6px;font-size:.75rem;display:flex}.floor-rule{vertical-align:middle;border-top:2px dashed #f43f5e8c;width:22px;height:0;display:inline-block}.min-card{background:#fff;border-radius:16px;margin-bottom:20px;padding:22px 26px}.min-card-label{letter-spacing:1.5px;text-transform:uppercase;color:#999;margin-bottom:16px;font-size:.68rem;font-weight:700}.min-months{grid-template-columns:1fr 1fr 1fr;gap:0;display:grid}.min-month{min-width:0;padding:0 16px 0 0}.min-month:first-child{padding-left:0}.min-month+.min-month{border-left:1px solid #f0f0f0;padding-left:16px}.min-month-name{color:#bbb;text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;font-size:.7rem;font-weight:700}.min-month-value{font-size:clamp(1.25rem,5.5vw,1.6rem);font-weight:800;line-height:1}.min-month-sub{color:#999;margin-top:5px;font-size:.72rem}.floor-label{color:#aaa;border-top:1px solid #f5f5f5;margin-top:14px;padding-top:10px;font-size:.72rem}.sources-grid{grid-template-columns:1fr 1fr;gap:14px;margin-bottom:32px;display:grid}.source-card{background:#fff;border-radius:14px;padding:18px 20px}.source-card.ynab{border-top:3px solid #22c55e}.source-card.manual{border-top:3px solid #f59e0b}.source-heading{letter-spacing:1.5px;text-transform:uppercase;margin-bottom:12px;font-size:.68rem;font-weight:800}.source-card.ynab .source-heading{color:#16a34a}.source-card.manual .source-heading{color:#b45309}.source-item{color:#555;align-items:baseline;gap:6px;padding:3px 0;font-size:.78rem;line-height:1.5;display:flex}.source-item+.source-item{border-top:1px solid #f5f5f5}.badge{white-space:nowrap;border-radius:4px;flex-shrink:0;padding:1px 5px;font-size:.62rem;font-weight:700}.badge.committed{color:#15803d;background:#f0fdf4}.badge.planned{color:#92400e;background:#fef3c7}.badge.assumed{color:#6b7280;background:#f3f4f6}.badge.live{color:#15803d;background:#dcfce7}.source-group-label{color:#bbb;text-transform:uppercase;letter-spacing:1px;margin:10px 0 4px;font-size:.62rem;font-weight:700}.source-heading-toggle{cursor:pointer;text-align:left;width:100%;min-height:44px;font:inherit;letter-spacing:inherit;text-transform:inherit;-webkit-tap-highlight-color:transparent;background:0 0;border:none;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px;padding:0;display:flex}.source-card.manual .source-heading-toggle{color:#b45309}.toggle-icon{flex-shrink:0}.source-card.collapsible .source-body{opacity:1;max-height:1600px;transition:max-height .32s,opacity .22s;overflow:hidden}.source-card.collapsible.collapsed .source-body{opacity:0;max-height:0}.section-title{color:#1a1a1a;margin-bottom:4px;font-size:1.1rem;font-weight:800}.section-sub{color:#aaa;margin-bottom:18px;font-size:.78rem}.groups-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}.group-card{background:#fff;border-radius:14px;padding:18px 20px}.group-name{letter-spacing:1.5px;text-transform:uppercase;color:#bbb;margin-bottom:12px;font-size:.65rem;font-weight:800}.cat-row{margin-bottom:10px}.cat-row:last-child{margin-bottom:0}.cat-meta{justify-content:space-between;align-items:baseline;margin-bottom:4px;display:flex}.cat-name{color:#333;font-size:.82rem;font-weight:600}.cat-nums{color:#999;white-space:nowrap;margin-left:8px;font-size:.75rem}.cat-nums .left{font-weight:700}.cat-nums .left.green{color:#22c55e}.cat-nums .left.amber{color:#f59e0b}.cat-nums .left.red{color:#f43f5e}.bar-track{background:#f0f0f0;border-radius:99px;height:5px;overflow:hidden}.bar-fill{border-radius:99px;height:100%}.bar-fill.green{background:#22c55e}.bar-fill.amber{background:#f59e0b}.bar-fill.red{background:#f43f5e}.app-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:36px;display:flex}.app-header-main{align-items:flex-start;gap:12px;min-width:0;display:flex}.app-mark{color:#863bff;flex-shrink:0;margin-top:2px}.app-header-text{min-width:0}.app-header .date{margin-bottom:0}.app-updated{color:#aaa;margin-top:6px;font-size:.72rem;font-weight:600}.app-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}.icon-btn{color:#863bff;cursor:pointer;-webkit-tap-highlight-color:transparent;background:#f1ecff;border:none;border-radius:12px;justify-content:center;align-items:center;width:44px;min-width:44px;height:44px;transition:background .15s;display:inline-flex}.icon-btn:hover{background:#e7dcff}.icon-btn:active{background:#dcf}.icon-btn:disabled{opacity:.55;cursor:default}.action-icon{color:#863bff;flex-shrink:0}.ptr-indicator{top:max(8px, env(safe-area-inset-top));z-index:50;color:#863bff;pointer-events:none;background:#fff;border-radius:999px;align-items:center;gap:8px;padding:8px 16px;font-size:.74rem;font-weight:700;transition:opacity .15s;display:flex;position:fixed;left:50%;box-shadow:0 4px 16px #0000001f}.ptr-spinner{color:#863bff;flex-shrink:0}.spin{animation:.7s linear infinite money-spin}@keyframes money-spin{to{transform:rotate(360deg)}}.note-icon{vertical-align:-.15em;flex-shrink:0;width:1.05em;height:1.05em;margin-left:.1em;display:inline-block}.note-icon-ok{color:#22c55e}.note-icon-warn{color:#f59e0b}.note-icon-bad{color:#f43f5e}@media screen and (width<=768px){.chart-card{padding:18px 16px}.chart-canvas-wrap{height:280px}.sources-grid,.groups-grid{grid-template-columns:1fr}.min-card{padding:20px}.source-card,.group-card{padding:16px 18px}.app-header{flex-wrap:wrap;align-items:flex-start}.app-header-main{flex:100%}.app-actions{flex:none;margin-left:auto}}@media screen and (width<=480px){.chart-canvas-wrap{height:260px}.date{margin-bottom:24px}.min-months{gap:0}.min-month{padding-right:10px}.min-month+.min-month{padding-left:10px}.min-month-name{letter-spacing:.5px;font-size:.62rem}.min-month-sub{font-size:.66rem}}@page{size:Letter;margin:.5in}@media print{body{background:#fff}.page{width:100%;max-width:100%;margin:0;padding:0}.sources-grid,.groups-grid{gap:8px}.group-card,.source-card{border:1px solid #e5e5e5;border-radius:8px;padding:9px 12px}.chart-canvas-wrap{height:150px!important}canvas{max-height:150px!important}.chart-card{margin-bottom:6px;padding:10px 12px}.chart-header{margin-bottom:8px}.min-card{margin-bottom:8px;padding:10px 14px}.min-card-label{margin-bottom:8px}.sources-grid{margin-bottom:0}.source-heading{margin-bottom:7px;font-size:.62rem}.source-group-label{margin:4px 0 1px;font-size:.58rem}.source-item{padding:1px 0;font-size:.68rem;line-height:1.25}.page-break{break-before:page;page-break-before:always;padding-top:0}.section-title{margin-bottom:2px;font-size:1rem}.section-sub{margin-bottom:8px}.group-card{padding:8px 11px}.group-name{letter-spacing:1px;margin-bottom:6px;font-size:.6rem}.cat-row{margin-bottom:5px}.cat-meta{margin-bottom:3px}.cat-name{font-size:.74rem;line-height:1.2}.cat-nums{font-size:.66rem}.bar-track{height:4px}.app-header{margin-bottom:12px}.app-actions,.ptr-indicator{display:none!important}.app-updated{color:#555!important;display:block!important}.source-card.collapsible .source-body,.source-card.collapsible.collapsed .source-body{opacity:1!important;max-height:none!important;transition:none!important;overflow:visible!important}.source-heading-toggle{min-height:0;margin-bottom:7px}.toggle-icon{display:none!important}}.auth-page{background:#f5f4f0;justify-content:center;align-items:center;min-height:100vh;padding:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;display:flex}.auth-card{background:#fff;border-radius:16px;width:100%;max-width:400px;padding:40px 36px;box-shadow:0 4px 24px #00000012}.auth-card h1{color:#1a1a1a;margin-bottom:8px;font-size:1.5rem;font-weight:800}.auth-card p{color:#555;margin-bottom:28px;font-size:.88rem}.auth-card label{color:#555;margin-top:18px;margin-bottom:6px;font-size:.78rem;font-weight:700;display:block}.auth-card label:first-of-type{margin-top:0}.auth-card input[type=text],.auth-card input[type=email],.auth-card input[type=password]{color:#1a1a1a;background:#fafafa;border:1.5px solid #e0e0e0;border-radius:10px;outline:none;width:100%;padding:10px 14px;font-family:inherit;font-size:.95rem;transition:border-color .15s;display:block}.auth-card input[type=text]:focus,.auth-card input[type=email]:focus,.auth-card input[type=password]:focus{background:#fff;border-color:#863bff}.auth-card button[type=submit]{color:#fff;cursor:pointer;background:#863bff;border:none;border-radius:10px;width:100%;margin-top:28px;padding:12px;font-family:inherit;font-size:1rem;font-weight:700;transition:background .15s;display:block}.auth-card button[type=submit]:hover{background:#7429f0}.auth-card button[type=submit]:active{background:#6618e0}.auth-card button[type=submit]:disabled{opacity:.6;cursor:default}.auth-error{color:#be123c;background:#fff1f3;border:1.5px solid #fda4af;border-radius:10px;margin-top:20px;padding:12px 16px;font-size:.85rem;font-weight:600}@media screen and (width<=480px){.auth-card{padding:32px 24px}}.totp-qr{justify-content:center;padding:16px;display:flex}.totp-qr svg{width:200px;height:200px}.totp-secret{letter-spacing:1px;word-break:break-all;color:#1a1a1a;background:#f5f5f5;border-radius:8px;margin-top:4px;padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;display:block}.totp-code-input{letter-spacing:8px;text-align:center;font-variant-numeric:tabular-nums;box-sizing:border-box;border:1px solid #ddd;border-radius:8px;width:100%;margin-top:4px;padding:12px;font-size:24px}.totp-code-input:focus{border-color:#0000;outline:2px solid #863bff}.backup-codes-grid{grid-template-columns:1fr 1fr;gap:6px;margin:12px 0;display:grid}.copy-btn{color:#863bff;cursor:pointer;background:#f0e8ff;border:none;border-radius:8px;width:100%;margin-top:8px;padding:8px 14px;font-size:.875rem;font-weight:600}.copy-btn:hover{background:#e0d0ff}.tab-switcher{gap:8px;max-width:900px;margin:0 auto;padding:16px 24px 0;display:flex}.seg-toggle{gap:4px;display:flex}.tab-btn,.seg-btn{color:#888;cursor:pointer;background:#fff;border:1.5px solid #ddd;border-radius:999px;padding:8px 18px;font-size:.9rem;font-weight:600}.tab-btn.active,.seg-btn.active{color:#1a1a1a;border-color:#1a1a1a}.cal-toolbar{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.cal-title{font-size:1.1rem;font-weight:800}.cal-nav-btn{cursor:pointer;color:#1a1a1a;background:0 0;border:none;padding:4px 8px;font-size:1.2rem}.cal-grid{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.cal-weekday{text-transform:uppercase;color:#999;text-align:center;padding-bottom:4px;font-size:.7rem;font-weight:700}.cal-cell{background:#fff;border-radius:12px;min-height:84px;padding:6px 8px;position:relative;overflow:hidden}.cal-grid.week .cal-cell{min-height:200px}.cal-cell.outside{background:#faf9f6}.cal-cell.today .cal-daynum{color:#fff;background:#1a1a1a;border-radius:999px;padding:1px 7px;display:inline-block}.cal-daynum{color:#444;font-size:.8rem;font-weight:700}.cal-event{color:#888;white-space:nowrap;text-overflow:ellipsis;margin-top:3px;font-size:.68rem;overflow:hidden}.cal-more{color:#aaa;font-size:.65rem}.day-dot{cursor:pointer;background:#f43f5e;border:none;border-radius:999px;width:10px;height:10px;padding:0;position:absolute;top:8px;right:8px}.day-dot:focus-visible{outline-offset:2px;outline:2px solid #f43f5e}.drill{background:#fff;border-radius:16px;margin-top:16px;padding:22px 26px}.drill-head{justify-content:space-between;align-items:flex-start;margin-bottom:12px;display:flex}.drill-cat{font-size:1rem;font-weight:800}.drill-group{color:#999;text-transform:uppercase;letter-spacing:1px;margin-top:2px;font-size:.72rem}.drill-over{color:#f43f5e;font-size:1.1rem;font-weight:800}.tx-row{border-top:1px solid #f0efec;justify-content:space-between;gap:12px;padding:8px 0;font-size:.85rem;display:flex}.tx-row.triggered{background:#f43f5e0a;border-left:3px solid #f43f5e;padding-left:10px}.tx-badge{color:#f43f5e;text-transform:uppercase;margin-top:2px;font-size:.62rem;font-weight:700}@media (width>=769px){.drill.slide{z-index:40;border-radius:0;width:380px;height:100%;margin:0;position:fixed;top:0;right:0;overflow-y:auto;box-shadow:-8px 0 24px #00000014}}
