:root{--bg:#f3f1fb;--card:#fff;--surface-2:#efeafb;--ink:#1a1330;--muted:#6b6391;--brand:#6d45f0;--brand-700:#5a34d6;--income:#0fb6b9;--expense:#d6379f;--warn:#cf8a17;--danger:#d4453e;--gold:#8b6cff;--line:#6d45f029;--shadow:0 1px 2px #1a13300d,0 12px 34px #1a13301a;--grad-brand:linear-gradient(135deg,#7c5cff,#e84bc9);--grad-cool:linear-gradient(135deg,#19c6d8,#7c5cff);--radius:16px;--control-h:46px;--rail:linear-gradient(180deg,#241652,#170d39);--rail-ink:#ece8ff;--rail-muted:#9b8fce;--forest:#241652;--forest-2:#170d39}[data-theme=dark]{--bg:#110a24;--card:#1a1238;--surface-2:#241a48;--ink:#ece8ff;--muted:#9f93c9;--brand:#8b6cff;--brand-700:#7c5cff;--income:#2de2e6;--expense:#f05bd0;--warn:#ffc24d;--danger:#ff6b6b;--gold:#ffce6a;--line:#9682e62e;--shadow:0 1px 2px #0006,0 16px 40px #00000080;--rail:linear-gradient(180deg,#1c1142,#130a30);--rail-ink:#ece8ff;--rail-muted:#8d80c0;--forest:#1c1142;--forest-2:#130a30}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--ink);-webkit-font-smoothing:antialiased;background:radial-gradient(1100px 560px at 12% -8%, #7c5cff33, transparent 60%), radial-gradient(900px 520px at 112% 4%, #2de2e61f, transparent 60%), var(--bg);background-attachment:fixed;font-family:Manrope,system-ui,sans-serif;font-size:15px;line-height:1.5}a{color:var(--brand);text-decoration:none}h1,h2,h3{letter-spacing:-.02em;margin:0;font-weight:800}.mono{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,monospace}.money{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,monospace;font-weight:700}.pos{color:var(--income)}.neg{color:var(--expense)}.app{grid-template-columns:252px 1fr;min-height:100%;display:grid}.rail{background:var(--rail);color:var(--rail-ink);flex-direction:column;gap:4px;height:100vh;padding:24px 16px;display:flex;position:sticky;top:0}.brand{letter-spacing:-.02em;align-items:center;gap:11px;margin:4px 8px 24px;font-size:18px;font-weight:800;display:flex}.brand .dot{background:var(--brand);color:#fff;border-radius:9px;place-items:center;width:30px;height:30px;display:grid}.nav a{color:var(--rail-muted);border-radius:11px;align-items:center;gap:11px;padding:11px 12px;font-weight:600;transition:background .15s,color .15s;display:flex}.nav a svg{flex:none;width:18px;height:18px}.nav a:hover{color:var(--rail-ink);background:#ffffff0f}.nav a.active{color:#fff;box-shadow:inset 3px 0 0 var(--gold);background:#ffffff1a}.rail-foot{color:var(--rail-muted);border-top:1px solid #ffffff1a;flex-direction:column;gap:10px;margin-top:auto;padding-top:16px;font-size:13px;display:flex}.rail-foot .email{color:var(--rail-ink);word-break:break-all;font-weight:600}.content{max-width:1140px;padding:34px 44px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:22px;display:flex}.page-head h1{font-size:27px}.page-head p{color:var(--muted);margin:5px 0 0}.hero{background:linear-gradient(135deg,var(--forest),var(--forest-2));color:#fff;box-shadow:var(--shadow);border-radius:20px;margin-bottom:22px;padding:26px 30px;position:relative;overflow:hidden}.hero:after{content:"";background:radial-gradient(circle,#7c5cff47,#0000 70%);border-radius:50%;width:220px;height:220px;position:absolute;top:-60px;right:-60px}.hero .eyebrow{color:var(--income);text-transform:uppercase;letter-spacing:.14em;font-size:12px;font-weight:700}.hero-grid{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:28px;display:flex}.hero .net-label{color:var(--rail-muted);font-size:13px;font-weight:600}.hero .net{margin-top:2px;font-size:30px;font-weight:700}.hero .balance{font-size:46px;font-weight:700;line-height:1}.hero .balance .u{color:var(--gold)}.flow{margin-top:18px}.flow-bar{background:#ffffff14;border-radius:99px;height:12px;display:flex;overflow:hidden}.flow-bar .in{background:var(--income)}.flow-bar .out{background:var(--expense)}.flow-legend{color:var(--rail-ink);gap:20px;margin-top:10px;font-size:13px;display:flex}.flow-legend .k{color:var(--rail-muted)}.flow-legend b{font-family:JetBrains Mono,monospace}.kpis{grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:22px;display:grid}.kpi{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;padding:16px 18px}.kpi .k{color:var(--muted);align-items:center;gap:7px;font-size:13px;font-weight:600;display:flex}.kpi .k .tick{border-radius:3px;width:8px;height:8px}.kpi .v{margin-top:7px;font-size:22px}.grid{grid-template-columns:1fr 1fr;gap:20px;display:grid}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:22px}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:16px;display:flex}.card-head h3{font-size:16px}.card-head .sub{color:var(--muted);white-space:nowrap;flex:none;font-size:13px}.card.span-2{grid-column:1/-1}.donut{height:240px;position:relative}.donut .center{pointer-events:none;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.donut .center .c-k{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:12px;font-weight:600}.donut .center .c-v{margin-top:2px;font-family:JetBrains Mono,monospace;font-size:19px;font-weight:700}.row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:13px 0;display:flex}.row:last-child{border-bottom:none}.row .t{font-weight:600}.row .s{color:var(--muted);font-size:13px}.chip{color:var(--brand);background:#6d45f01f;border-radius:7px;padding:2px 8px;font-family:JetBrains Mono,monospace;font-size:12px;font-weight:700}.bgt{border-bottom:1px solid var(--line);padding:13px 0}.bgt:last-child{border-bottom:none}.bgt-top{justify-content:space-between;align-items:center;display:flex}.bar{background:var(--line);border-radius:99px;height:9px;margin-top:9px;overflow:hidden}.bar>span{background:var(--brand);border-radius:99px;height:100%;transition:width .6s cubic-bezier(.2,.8,.2,1);display:block}.bar.warn>span{background:var(--warn)}.bar.danger>span{background:var(--danger)}.badge{border-radius:99px;padding:2px 9px;font-size:12px;font-weight:700;display:inline-block}.badge.warn{color:#8a5f0d;background:#faf0d8}.badge.danger{color:#8f271c;background:#f7dcd8}.field{flex-direction:column;gap:6px;display:flex}.field label{color:var(--muted);font-size:13px;font-weight:600}.input,select.input{font:inherit;height:var(--control-h);border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:11px;padding:0 12px;transition:border-color .15s,box-shadow .15s}.input:focus,select.input:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px #6d45f026}.form-row{flex-wrap:wrap;align-items:end;gap:12px;display:flex}.btn{font:inherit;height:var(--control-h);cursor:pointer;border:1px solid #0000;border-radius:11px;justify-content:center;align-items:center;padding:0 20px;font-weight:700;transition:background .15s,transform 50ms,box-shadow .15s;display:inline-flex}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-700);box-shadow:0 6px 16px #6d45f059}.btn-primary:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.btn-ghost{color:var(--rail-ink);background:#ffffff0f;border-color:#ffffff2e}.btn-ghost:hover{background:#ffffff1f}.empty{color:var(--muted);text-align:center;padding:26px 0}.empty a{font-weight:700}table.tbl{border-collapse:collapse;width:100%}.tbl th{text-align:left;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--line);padding:9px 8px;font-size:12px}.tbl td{border-bottom:1px solid var(--line);padding:12px 8px}.tbl tr:last-child td{border-bottom:none}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.fade{animation:.4s both fadeUp}.fade-1{animation-delay:40ms}.fade-2{animation-delay:.1s}.fade-3{animation-delay:.16s}.fade-4{animation-delay:.22s}@media (width>=769px) and (width<=820px){.app{grid-template-columns:1fr}.rail{flex-flow:wrap;align-items:center;height:auto;position:static}.rail-foot{border:none;flex-direction:row;align-items:center;margin:0 0 0 auto;padding:0}.nav{gap:4px;display:flex}.content{padding:20px}.grid,.kpis{grid-template-columns:1fr}.hero .balance{font-size:38px}}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.input,select.input{background:var(--card);color:var(--ink)}.chip{color:var(--brand);background:#6d45f01f}.theme-toggle{cursor:pointer;width:100%;color:var(--rail-ink);font:inherit;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:8px;padding:0;display:flex}.theme-toggle .sw{background:#7d8c8273;border-radius:99px;flex:none;width:34px;height:20px;transition:background .2s;position:relative}.theme-toggle .sw i{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .2s;display:block;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0000004d}[data-theme=dark] .theme-toggle .sw{background:var(--gold)}[data-theme=dark] .theme-toggle .sw i{transform:translate(14px)}input[type=file].input{height:auto;min-height:var(--control-h);padding:7px 10px;line-height:1.7}input[type=file]::file-selector-button{font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--ink);cursor:pointer;border-radius:9px;margin-right:12px;padding:8px 14px;font-weight:600;transition:background .15s,color .15s,border-color .15s}input[type=file]::file-selector-button:hover{background:var(--brand);color:#fff;border-color:var(--brand)}.quick{grid-template-columns:auto 1.1fr 1.1fr 1.1fr auto auto;align-items:center;gap:10px;display:grid}.seg{height:var(--control-h);background:#6d45f014;border-radius:12px;align-items:center;padding:4px;display:inline-flex}[data-theme=dark] .seg{background:#ffffff12}.seg button{height:calc(var(--control-h) - 8px);font:inherit;cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:9px;align-items:center;padding:0 16px;font-weight:700;transition:background .15s,color .15s;display:inline-flex}.seg button.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow)}.seg button.on.inc{color:var(--income)}.seg button.on.exp{color:var(--expense)}.icon-btn{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:8px;padding:6px;font-size:14px;transition:background .15s,color .15s}.icon-btn:hover{color:var(--danger);background:#d4453e24}.settings-sec{margin-bottom:22px}.settings-sec h2{margin-bottom:12px;font-size:16px}@media (width>=769px) and (width<=820px){.quick{grid-template-columns:1fr 1fr}}.toasts{z-index:1000;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:20px;right:20px}.toast{color:#fff;box-shadow:var(--shadow);border-radius:12px;max-width:320px;padding:12px 16px;font-weight:600;animation:.25s both toastIn}.toast.ok{background:var(--brand)}.toast.err{background:var(--danger)}@keyframes toastIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.ws{background:#ffffff0d;border-radius:11px;margin:6px 0 4px;padding:10px 12px}.ws .cap{color:var(--rail-muted);text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px;font-size:11px;font-weight:700}.ws .name{color:var(--rail-ink);font-weight:700}select.ws-switch{width:100%;font:inherit;background:var(--forest-2);height:38px;color:var(--rail-ink);border:1px solid #ffffff2e;border-radius:9px;padding:0 8px;font-weight:700}.skel{background:linear-gradient(90deg,#8b6cff1f 25%,#8b6cff38 37%,#8b6cff1f 63%) 0 0/400% 100%;border-radius:8px;animation:1.3s infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.monthnav{align-items:center;gap:12px;display:inline-flex}.monthnav button{border:1px solid var(--line);background:var(--card);width:36px;height:36px;color:var(--ink);cursor:pointer;border-radius:10px;font-size:17px;transition:background .15s}.monthnav button:hover{background:var(--surface-2)}.monthnav .m{text-align:center;text-transform:capitalize;min-width:160px;font-family:Space Grotesk,Manrope,sans-serif;font-size:19px;font-weight:600}.kpi-row{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:18px;display:grid}.kpi-tile{background:linear-gradient(var(--card),var(--card)) padding-box, var(--grad-brand) border-box;box-shadow:var(--shadow);border:1px solid #0000;border-radius:16px;padding:16px 18px;position:relative}.kpi-tile .label{letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-size:11px;font-weight:700}.kpi-tile .val{letter-spacing:-.01em;margin-top:6px;font-family:Space Grotesk,Manrope,sans-serif;font-size:25px;font-weight:600}.kpi-tile .sub{color:var(--muted);margin-top:3px;font-size:12px}.kpi-tile .pbar{background:var(--surface-2);border-radius:99px;height:6px;margin-top:12px;overflow:hidden}.kpi-tile .pbar>span{background:var(--grad-brand);border-radius:99px;height:100%;transition:width .6s cubic-bezier(.2,.8,.2,1);display:block}.kpi-tile .pbar.over>span{background:linear-gradient(135deg,var(--expense),#ff6b6b)}.ring-wrap{flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.ring{filter:drop-shadow(0 0 22px #8b6cff73);background:conic-gradient(from 210deg,#2de2e6,#8b6cff,#f05bd0,#2de2e6);border-radius:50%;place-items:center;width:188px;height:188px;display:grid;position:relative}.ring:before{content:"";background:var(--card);border-radius:50%;position:absolute;inset:14px}.ring .rc{text-align:center;padding:0 14px;position:relative}.ring .rc .k{text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-size:11px;font-weight:700}.ring .rc .v{word-break:break-word;margin-top:4px;font-family:Space Grotesk,Manrope,sans-serif;font-size:24px;font-weight:600}.dash-2{grid-template-columns:300px 1fr;align-items:stretch;gap:20px;margin-bottom:18px;display:grid}.dash-2b{grid-template-columns:1fr 1fr;gap:20px;margin-bottom:18px;display:grid}.dash-2c{grid-template-columns:1.3fr 1fr;gap:20px;display:grid}@media (width<=900px){.kpi-row{grid-template-columns:1fr 1fr}.dash-2,.dash-2b,.dash-2c{grid-template-columns:1fr}}.cal{grid-template-columns:repeat(7,1fr);gap:8px;display:grid}.cal .dow{text-align:center;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding-bottom:2px;font-size:11px;font-weight:700}.cal .day{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:12px;flex-direction:column;gap:3px;min-height:96px;padding:8px;transition:border-color .15s,box-shadow .15s;display:flex}.cal .day:hover{border-color:var(--brand)}.cal .day.sel{border-color:var(--brand);box-shadow:0 0 0 2px #7c5cff40}.cal .day.empty{cursor:default;background:0 0;border:none}.cal .day .dn{font-size:13px;font-weight:700}.cal .day .amt{font-family:JetBrains Mono,monospace;font-size:11px;line-height:1.3}.cal .ev{white-space:nowrap;text-overflow:ellipsis;border-radius:6px;padding:1px 5px;font-size:10px;overflow:hidden}.cal .ev.recurring{color:var(--brand);background:#8b6cff33}.cal .ev.planned{color:var(--expense);background:#f05bd02e}.cal-detail{margin-top:18px}@media (width<=700px){.cal{gap:4px}.cal .day{min-height:62px;padding:5px}.cal .ev{display:none}.cal .day .amt{font-size:10px}.cal .dow{font-size:9px}}@media (width<=768px){.app{grid-template-columns:1fr}.rail{z-index:60;height:auto;padding:6px 6px calc(6px + env(safe-area-inset-bottom));background:var(--rail);border-top:1px solid #ffffff1f;flex-direction:row;gap:0;position:fixed;inset:auto 0 0}.rail .brand,.rail .rail-foot,.rail .ws{display:none}.nav{flex:1;gap:0;display:flex}.nav a{border-radius:10px;flex-direction:column;flex:1;align-items:center;gap:3px;padding:7px 4px;font-size:10px}.nav a.active{box-shadow:none;background:#ffffff1a}.nav a svg{width:22px;height:22px}.content{padding:18px 14px calc(86px + env(safe-area-inset-bottom));max-width:none}.page-head h1{font-size:23px}.kpi-row{grid-template-columns:1fr 1fr;gap:12px}.grid,.kpis,.dash-2,.dash-2b,.dash-2c{grid-template-columns:1fr}.card{padding:18px}table.tbl{white-space:nowrap;-webkit-overflow-scrolling:touch;display:block;overflow-x:auto}.form-row{flex-direction:column;align-items:stretch;gap:12px}.form-row>.field,.form-row>.input,.form-row>select.input,.form-row>.btn,.field{width:100%}.quick{grid-template-columns:1fr}}@media (width<=430px){.kpi-row{grid-template-columns:1fr}.ring{width:160px;height:160px}}.bar2{background:var(--surface-2);border-radius:99px;height:9px;margin-top:9px;display:flex;overflow:hidden}.bar2 .seg-actual{background:var(--expense)}.bar2 .seg-planned{background:#f05bd059}.minical{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.minical .dow{text-align:center;text-transform:uppercase;color:var(--muted);font-size:10px;font-weight:700}.minical .d{aspect-ratio:1;color:var(--ink);cursor:pointer;border-radius:9px;flex-direction:column;justify-content:center;align-items:center;font-size:12px;font-weight:600;transition:background .15s;display:flex;position:relative}.minical .d:hover{background:var(--surface-2)}.minical .d.empty{visibility:hidden}.minical .d.today{outline:2px solid var(--brand)}.minical .dots{gap:2px;height:5px;margin-top:2px;display:flex}.minical .dot{border-radius:50%;width:5px;height:5px}.minical .dot.inc{background:var(--income)}.minical .dot.exp{background:var(--expense)}.minical .dot.plan{background:var(--brand)}.dash-3{grid-template-columns:280px 280px 1fr;align-items:stretch;gap:20px;margin-bottom:18px;display:grid}@media (width<=1000px){.dash-3{grid-template-columns:1fr}}
