:root{--bg: #1a1a2e;--bg-2: #20203a;--panel: #25254a;--panel-2: #2c2c55;--line: #38386a;--text: #eef0ff;--muted: #9a9ac4;--accent: #f0c040;--in: #4ade80;--out: #e94560;--radius: 16px;--tap: 48px;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:IBM Plex Sans,system-ui,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none;-webkit-tap-highlight-color:transparent}button,input,select{font-family:inherit;font-size:1rem;color:inherit}.mono,.cell-amounts,.cell-balance,.stat-value,.row-amt,.entry-amt{font-family:IBM Plex Mono,monospace}.muted{color:var(--muted)}.center{text-align:center}.splash{display:grid;place-items:center;height:100%;min-height:60vh}.spinner{width:44px;height:44px;border:4px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.login{display:grid;place-items:center;height:100%;padding:24px}.login-card{background:var(--panel);border:1px solid var(--line);border-radius:24px;padding:40px;max-width:420px;text-align:center}.login-card h1{margin:16px 0 8px;font-size:1.8rem}.login-error{color:var(--out);background:#e945601f;border-radius:12px;padding:10px}.btn-github{margin-top:20px;display:inline-flex;align-items:center;gap:10px;background:var(--accent);color:#1a1a2e;font-weight:700;text-decoration:none;padding:14px 24px;border-radius:14px;min-height:var(--tap)}.app{display:flex;flex-direction:column;height:100%}.topbar{display:flex;align-items:center;gap:16px;padding:12px 20px;background:var(--bg-2);border-bottom:1px solid var(--line);padding-top:max(12px,env(safe-area-inset-top))}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.1rem}.brand-dot{width:14px;height:14px;border-radius:50%;background:var(--accent);box-shadow:0 0 12px var(--accent)}.tabs{display:flex;gap:6px;margin-left:auto}.tab{background:transparent;border:none;color:var(--muted);padding:10px 18px;border-radius:12px;min-height:var(--tap);cursor:pointer}.tab.active{background:var(--panel);color:var(--text)}.who{width:var(--tap);height:var(--tap);border-radius:50%;border:1px solid var(--line);background:var(--panel);padding:0;overflow:hidden;cursor:pointer}.who img{width:100%;height:100%;object-fit:cover;display:block}.who-fallback{display:block;width:100%;height:100%;background:var(--accent)}.content{flex:1;overflow:auto;padding:16px 20px 40px}.banner.error{background:#e9456026;color:var(--out);padding:10px 16px}.cal-toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.cal-title{display:flex;align-items:center;gap:14px}.cal-title h1{margin:0;font-size:1.6rem}.today-btn{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:10px;padding:8px 14px;min-height:40px;cursor:pointer}.nav-btn{width:var(--tap);height:var(--tap);font-size:1.6rem;line-height:1;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:14px;cursor:pointer}.forecast{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}.stat-label{display:block;font-size:.8rem;color:var(--muted)}.stat-value{display:block;font-size:1.25rem;font-weight:600;margin-top:4px}.stat.in .stat-value{color:var(--in)}.stat.out .stat-value{color:var(--out)}.dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;margin-bottom:8px}.dow{text-align:center;color:var(--muted);font-size:.85rem;font-weight:600}.grid{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:1fr;gap:8px}.cell{position:relative;display:flex;flex-direction:column;align-items:stretch;min-height:92px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:8px;text-align:left;color:var(--text);cursor:pointer;transition:background .1s}.cell:active{background:var(--panel-2)}.cell.out{opacity:.4}.cell.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.cell.negative{background:#e9456024;border-color:var(--out)}.cell-day{font-weight:600;font-size:1.05rem}.cell-amounts{display:flex;flex-direction:column;gap:2px;margin-top:4px;font-size:.82rem}.cell-amounts .in{color:var(--in)}.cell-amounts .out-amt{color:var(--out)}.cell-balance{margin-top:auto;font-size:.82rem;color:var(--muted);text-align:right}.cell-balance.neg{color:var(--out)}.sheet-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:flex-end;justify-content:center;z-index:50;animation:fade .15s ease}@keyframes fade{0%{opacity:0}}.sheet{width:100%;max-width:560px;background:var(--bg-2);border:1px solid var(--line);border-bottom:none;border-radius:24px 24px 0 0;padding:14px 20px calc(24px + env(safe-area-inset-bottom));max-height:88vh;overflow:auto;animation:slideup .2s ease}@keyframes slideup{0%{transform:translateY(30px)}}.sheet-grip{width:44px;height:5px;border-radius:3px;background:var(--line);margin:0 auto 12px}.sheet-head{display:flex;align-items:center;justify-content:space-between}.sheet-head h2{margin:0;font-size:1.25rem}.sheet-close{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--panel);cursor:pointer}.sheet-body{margin-top:14px}.entry-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.entry{display:flex;align-items:center;gap:12px;background:var(--panel);border-radius:12px;padding:12px 14px}.entry-dot,.row-dot{width:12px;height:12px;border-radius:50%;flex:0 0 auto}.entry-name{flex:1}.entry-cat{color:var(--muted)}.entry-amt.in,.row-amt.in,.day-totals .in,.form-preview.in{color:var(--in)}.entry-amt.out,.row-amt.out,.day-totals .out{color:var(--out)}.day-totals{display:flex;gap:18px;justify-content:flex-end;margin:14px 2px;font-family:IBM Plex Mono,monospace}.sheet-actions{display:flex;gap:10px;margin-top:16px;align-items:center}.btn{flex:1;min-height:var(--tap);border-radius:14px;border:1px solid var(--line);background:var(--panel);color:var(--text);font-weight:600;cursor:pointer}.btn.primary{background:var(--accent);color:#1a1a2e;border-color:var(--accent)}.btn:disabled{opacity:.5}.form,.form-card{display:flex;flex-direction:column;gap:12px}.field{display:flex;flex-direction:column;gap:6px}.field>span{color:var(--muted);font-size:.85rem}input,select{background:var(--panel-2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;min-height:var(--tap);width:100%}input:focus,select:focus{outline:2px solid var(--accent);outline-offset:0}.seg{display:flex;gap:8px}.seg-btn{flex:1;min-height:var(--tap);border-radius:12px;border:1px solid var(--line);background:var(--panel-2);cursor:pointer}.seg-btn.active{background:var(--accent);color:#1a1a2e;border-color:var(--accent)}.form-preview{font-weight:600}.subtabs,.tabs-scroll{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}.subtab{background:var(--panel);border:1px solid var(--line);color:var(--muted);padding:10px 16px;border-radius:12px;min-height:var(--tap);cursor:pointer}.subtab.active{background:var(--accent);color:#1a1a2e;border-color:var(--accent)}.section{display:flex;flex-direction:column;gap:16px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px}.card h3{margin:0 0 4px}.form-card{max-width:720px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.inline{display:flex;align-items:center;gap:8px;color:var(--muted)}.inline input{width:80px}.list{display:flex;flex-direction:column;gap:8px}.row{display:flex;align-items:center;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}.row-main{display:flex;flex-direction:column;flex:1;min-width:0}.row-main .muted{font-size:.82rem}.row-amt{font-weight:600;white-space:nowrap}.icon-btn{width:40px;height:40px;border-radius:10px;border:1px solid var(--line);background:var(--panel-2);cursor:pointer;flex:0 0 auto}.settings-view{display:flex;flex-direction:column;gap:16px;max-width:560px}.saved-pill{color:var(--in);font-weight:600}@media (max-width: 760px){.forecast{grid-template-columns:repeat(2,1fr)}.brand{display:none}.tabs{margin-left:0}.cell{min-height:76px}.form-grid{grid-template-columns:1fr}}
