:root{--bg:#f3f4f8;--surface:#fff;--ink:#141a2a;--muted:#6a7387;--line:#e6e9f0;--fill:#e9ecf3;--accent:#3d4df0;--accent-ink:#fff;--accent-soft:#3d4df01f;--minus:#d93f35;--plus:#178a55;--minus-soft:#d93f3517;--plus-soft:#178a551a;--on-color:#fff;--glow:#3d4df01a;--radius:20px;--shadow:0 1px 2px #141a2a0d, 0 8px 24px #141a2a0d;--font-num:ui-rounded, "SF Pro Rounded", -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", system-ui, sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0d1117;--surface:#161c25;--ink:#eef2f7;--muted:#8f9bad;--line:#242d3a;--fill:#1f2733;--accent:#8392ff;--accent-ink:#0d1117;--accent-soft:#8392ff29;--minus:#f27a6f;--plus:#4ccb8c;--minus-soft:#f27a6f1f;--plus-soft:#4ccb8c1f;--on-color:#0d1117;--glow:#8392ff24;--shadow:0 1px 0 #ffffff08 inset, 0 8px 24px #00000047}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{background:var(--bg)}html,body{overscroll-behavior:none;touch-action:manipulation;height:100%;color:var(--ink);margin:0;overflow:hidden}body{background:radial-gradient(120% 340px at 50% -80px, var(--glow), transparent 70%) no-repeat, var(--bg);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,system-ui,sans-serif;font-size:16px;line-height:1.35}#root{flex-direction:column;height:100%;display:flex}.screen{flex-direction:column;flex:auto;min-height:0;animation:.24s ease-out screenIn;display:flex}.screen.off{display:none}.card{overscroll-behavior:none;touch-action:pan-y;min-height:0;padding:calc(16px + env(safe-area-inset-top)) max(16px, calc((100% - 488px) / 2)) calc(190px + env(safe-area-inset-bottom));flex:auto;overflow-y:auto}.topbar{padding:calc(8px + env(safe-area-inset-top)) max(16px, calc((100% - 488px) / 2)) 0;flex:none}.topbar+.card{padding-top:8px}.center{text-align:center;margin-top:40px}header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}h1{font-family:var(--font-num);letter-spacing:-.02em;margin:0;font-size:30px;font-weight:750}h2{margin:0;font-size:19px;font-weight:650}.muted{color:var(--muted);font-size:13px}.hint{margin:4px 4px 14px;font-size:14px}.error{color:var(--minus);margin:10px 0 0;font-size:14px}.plus{color:var(--plus)}.minus{color:var(--minus)}.dim{opacity:.5;transition:opacity .15s}input,select{width:100%;min-width:0;font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:13px 14px;font-size:16px;transition:border-color .2s,box-shadow .2s}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}button{font:inherit;color:var(--accent-ink);background:var(--accent);cursor:pointer;border:0;border-radius:14px;padding:13px 16px;font-size:16px;font-weight:600;transition:transform .14s,background-color .2s,color .2s,opacity .2s,box-shadow .2s}button:active{transform:scale(.97)}button:disabled{opacity:.4;cursor:default}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button.link{color:var(--muted);background:0 0;padding:8px 12px;font-weight:500}button.danger,button.link.danger{color:var(--minus)}button.secondary{color:var(--ink);background:var(--fill)}button.add{width:100%;margin-top:14px}button.back{color:var(--accent);background:0 0;padding:8px 0;font-weight:600}.field-label{color:var(--muted);margin:14px 4px 6px;font-size:13px}.card>form{flex-direction:column;gap:10px;margin-top:16px;display:flex}.login{text-align:center;flex-direction:column;justify-content:center;padding-bottom:80px;display:flex}.login h1{margin:0;font-size:28px}.login .hint{margin:6px 0 8px}.login>form{text-align:left}.brand{filter:drop-shadow(0 10px 18px #3d4df059);width:76px;height:76px;margin:0 auto 18px;animation:.5s cubic-bezier(.3,1.3,.5,1) both pop}.tabs{background:var(--fill);isolation:isolate;border-radius:16px;padding:4px;display:flex;position:relative}.tabs:before{content:"";z-index:-1;width:calc((100% - 8px) / var(--n,2));background:var(--surface);transform:translateX(calc(var(--i,0) * 100%));border-radius:12px;transition:transform .3s cubic-bezier(.3,.9,.3,1);position:absolute;top:4px;bottom:4px;left:4px;box-shadow:0 1px 3px #00000024}.tabs button{color:var(--muted);background:0 0;flex:1;padding:10px 4px;font-size:15px}.tabs button.active{color:var(--ink)}.daybar{justify-content:space-between;align-items:center;gap:8px;margin:2px 0 4px;display:flex}.daybar>button{width:44px;height:44px;color:var(--ink);background:var(--surface);box-shadow:var(--shadow);border-radius:50%;flex:none;padding:0;font-size:24px;line-height:1}.day-pick{text-align:center;cursor:pointer;flex:1;padding:4px 0;position:relative}.day-pick strong{font-family:var(--font-num);letter-spacing:-.02em;font-size:30px;font-weight:750;line-height:1.1;display:block}.day-pick span{color:var(--muted);margin-top:2px;font-size:14px;display:block}.day-pick span:after{content:" ▾";font-size:10px}.day-pick input{opacity:0;cursor:pointer;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.now{margin:0 auto;display:block}.weekstrip{grid-template-columns:repeat(7,1fr);gap:2px;margin:8px 0 12px;display:grid}.wd{color:var(--ink);background:0 0;border-radius:16px;flex-direction:column;align-items:center;gap:3px;padding:8px 0 7px;display:flex}.wd-name{color:var(--muted);font-size:11px;font-weight:600}.wd-num{font-family:var(--font-num);font-size:18px;font-weight:700;line-height:1.1}.wd-dots{gap:3px;height:5px;display:flex}.wd-dots i{border-radius:50%;width:5px;height:5px}.wd-dots .e{background:var(--minus)}.wd-dots .i{background:var(--plus)}.wd.today .wd-num{color:var(--accent)}.wd.active{color:var(--accent-ink);background:var(--accent);box-shadow:0 6px 14px var(--accent-soft)}.wd.active .wd-name{color:inherit;opacity:.8}.wd.active .wd-num{color:inherit}.wd.active .wd-dots i{background:var(--accent-ink);opacity:.9}.wd:disabled{opacity:.35}.sumcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);grid-template-columns:1fr 1fr;margin:6px 0 12px;display:grid;overflow:hidden}.sumcard>div{min-width:0;padding:14px 16px}.sumcard>div:first-child{background:linear-gradient(135deg, var(--minus-soft), transparent 75%)}.sumcard>div:last-child{background:linear-gradient(225deg, var(--plus-soft), transparent 75%);border-left:1px solid var(--line)}.sumcard .label{color:var(--muted);font-size:13px}.sumcard .num{font-family:var(--font-num);letter-spacing:-.02em;white-space:nowrap;margin-top:2px;font-size:clamp(19px,5.8vw,25px);font-weight:750}.sumcard .num.zero{color:var(--muted);font-weight:600}.modebar{background:var(--fill);isolation:isolate;border-radius:18px;grid-template-columns:1fr 1fr;margin-bottom:14px;padding:4px;display:grid;position:relative}.modebar:before{content:"";z-index:-1;background:var(--minus);border-radius:14px;width:calc(50% - 4px);transition:transform .32s cubic-bezier(.3,.9,.3,1),background-color .3s,box-shadow .3s;position:absolute;top:4px;bottom:4px;left:4px;box-shadow:0 6px 14px #d93f354d}.modebar[data-section=income]:before{background:var(--plus);transform:translate(100%);box-shadow:0 6px 14px #178a554d}.modebtn{color:var(--muted);background:0 0;border-radius:14px;padding:12px}.modebtn.active{color:var(--on-color)}.list-anim{animation-duration:.34s;animation-timing-function:cubic-bezier(.2,.8,.2,1);animation-fill-mode:both}.list-anim.next{animation-name:slideNext}.list-anim.prev{animation-name:slidePrev}.list-anim.fade{animation-name:listFade}.rows{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.item+.item{border-top:1px solid var(--line)}.row{text-align:left;width:100%;color:var(--ink);border-top:1px solid var(--line);background:0 0;border-radius:0;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;font-weight:400;display:flex}.row:first-child{border-top:0}.row:active{background:var(--fill);transform:none}.row .lead{align-items:center;gap:12px;min-width:0;display:flex}.row .info{min-width:0}.row .title{font-weight:600}.row .meta{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;font-size:13px;overflow:hidden}.row .amt{font-family:var(--font-num);white-space:nowrap;font-weight:700}.row .chev{color:var(--muted);font-size:22px}.subops{padding:0 14px 8px 66px}.op{text-align:left;width:100%;color:var(--ink);border-top:1px solid var(--line);background:0 0;border-radius:0;justify-content:space-between;align-items:center;gap:12px;padding:9px 0;font-size:15px;font-weight:400;display:flex}.op:first-child{border-top:0}.op:active{background:var(--fill);transform:none}.op .note{min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dot{border-radius:50%;flex:none;place-items:center;width:42px;height:42px;font-size:21px;font-weight:700;display:grid}.dot.sm{width:34px;height:34px;font-size:17px}.empty{text-align:center;color:var(--muted);padding:28px 16px}.empty p{margin:0 0 6px}.empty-ico{background:var(--fill);border-radius:50%;place-items:center;width:68px;height:68px;margin:0 auto 14px;font-size:32px;display:grid}.skel-row{border-top:1px solid var(--line);align-items:center;gap:12px;padding:12px 14px;display:flex}.skel-row:first-child{border-top:0}.skel{background:linear-gradient(90deg, var(--fill) 25%, var(--line) 50%, var(--fill) 75%);background-size:200% 100%;border-radius:8px;animation:1.3s linear infinite shimmer;display:block}.skel-dot{border-radius:50%;flex:none;width:42px;height:42px}.skel-lines{flex:1;gap:8px;display:grid}.skel-lines .skel{height:12px}.skel-lines .skel:first-child{width:55%}.skel-lines .skel:last-child{width:35%}.skel-amt{width:64px;height:14px}.addbar{left:0;right:0;bottom:calc(66px + env(safe-area-inset-bottom));z-index:20;background:linear-gradient(to top, var(--bg) 55%, transparent);pointer-events:none;max-width:520px;margin:0 auto;padding:30px 16px 10px;position:fixed}.addbtn{width:100%;color:var(--on-color);pointer-events:auto;border-radius:18px;padding:16px;font-size:17px}.addbtn.expense,.save.expense{color:var(--on-color);background:var(--minus);background:linear-gradient(180deg, color-mix(in srgb, var(--minus) 82%, #fff), var(--minus));box-shadow:0 10px 22px #d93f3552}.addbtn.income,.save.income{color:var(--on-color);background:var(--plus);background:linear-gradient(180deg, color-mix(in srgb, var(--plus) 82%, #fff), var(--plus));box-shadow:0 10px 22px #178a554d}.bottom-nav{z-index:30;padding:6px 8px calc(6px + env(safe-area-inset-bottom));background:var(--surface);background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:saturate(180%)blur(18px);backdrop-filter:saturate(180%)blur(18px);border-top:1px solid var(--line);display:flex;position:fixed;bottom:0;left:0;right:0}.bottom-nav button{color:var(--muted);background:0 0;border-radius:12px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:4px 0;font-size:11px;font-weight:600;display:flex}.bottom-nav .ico{border-radius:15px;place-items:center;width:58px;height:30px;transition:background-color .25s,color .25s,transform .2s;display:grid}.bottom-nav button.active{color:var(--accent)}.bottom-nav button.active .ico{background:var(--accent-soft)}.bottom-nav button:active .ico{transform:scale(.92)}.bottom-nav svg{width:23px;height:23px}.overlay{z-index:100;background:var(--bg);height:100%;animation:.15s ease-out fade;position:fixed;top:0;left:0;right:0}.sheet{background:var(--bg);flex-direction:column;width:100%;max-width:520px;height:100%;margin:0 auto;animation:.2s ease-out fade;display:flex;overflow:hidden}.sheet-head{padding:calc(12px + env(safe-area-inset-top)) 16px 8px;flex:none;justify-content:space-between;align-items:center;display:flex}.sheet-head .link{background:var(--fill);border-radius:50%;width:36px;height:36px;padding:0;font-size:16px}.sheet-body{overscroll-behavior:contain;touch-action:pan-y;flex:auto;min-height:0;padding:0 16px 12px;overflow-y:auto}.sheet-body form{flex-direction:column;display:flex}.sheet-foot{padding:10px 16px calc(12px + env(safe-area-inset-bottom));background:var(--bg);border-top:1px solid var(--line);flex-direction:column;gap:6px;display:flex}.overlay.kb .sheet-foot{padding-bottom:12px}.foot-row{gap:10px;display:flex}.save{border-radius:16px;padding:16px;font-size:17px}.foot-row .save{flex:1}.foot-error{margin:0 0 4px}.done{color:var(--ink);background:var(--fill);border-radius:16px;flex:0 0 34%;padding:16px 8px;font-size:17px}.sheet-day{margin:0 0 4px}.notice{color:var(--plus);background:var(--plus-soft);border-radius:14px;margin:4px 0 2px;padding:10px 12px;font-size:14px;font-weight:500;animation:.35s cubic-bezier(.3,1.3,.5,1) both pop}.amount-field{align-items:baseline;gap:8px;margin:8px 0 10px;display:flex}.amount-field input{font-family:var(--font-num);letter-spacing:-.02em;border:0;border-bottom:2px solid var(--line);box-shadow:none;background:0 0;border-radius:0;padding:0 0 6px;font-size:46px;font-weight:750}.amount-field input:focus{border-bottom-color:var(--accent);box-shadow:none}.amount-field .cur{color:var(--muted);font-size:28px}.note-input{margin-bottom:14px}.cat-grid{grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.tile{text-align:center;color:var(--ink);background:var(--surface);border:2px solid #0000;border-radius:16px;flex-direction:column;align-items:center;gap:6px;padding:11px 4px 9px;font-size:12px;font-weight:500;line-height:1.15;display:flex;position:relative}.tile span:last-child{overflow-wrap:anywhere}.tile.active{background:var(--surface);background:color-mix(in srgb, var(--c) 12%, var(--surface));border-color:var(--c)}.tile.active:after{content:"✓";color:#fff;background:var(--c);border-radius:50%;place-items:center;width:17px;height:17px;font-size:10px;font-weight:800;animation:.25s cubic-bezier(.3,1.4,.5,1) both pop;display:grid;position:absolute;top:5px;right:5px}.chips{flex-wrap:wrap;gap:8px;margin:10px 0 0;display:flex}.chip{color:var(--ink);background:var(--fill);border-radius:999px;padding:9px 15px;font-size:15px;font-weight:500}.chip.active{color:var(--accent-ink);background:var(--accent)}.period,.period .tabs{margin-bottom:12px}.month-switch{justify-content:space-between;align-items:center;margin:4px 0 6px;display:flex}.month-switch strong{text-align:center;padding:0 8px;font-size:17px;line-height:1.25}.month-switch button{width:40px;height:40px;color:var(--ink);background:var(--surface);box-shadow:var(--shadow);border-radius:50%;padding:0;font-size:22px;line-height:1}.range{grid-template-columns:1fr 1fr;gap:10px;display:grid}.result-wrap{margin:-2px 0 14px}.result-pill{border-radius:999px;padding:7px 14px;font-size:15px;font-weight:650;display:inline-block}.result-pill.plus{background:var(--plus-soft)}.result-pill.minus{background:var(--minus-soft)}.donut-wrap{justify-content:center;margin:18px 0 16px;transition:opacity .2s;display:flex}.donut-box{aspect-ratio:1;width:min(230px,64vw);position:relative}.donut{border-radius:50%;width:100%;height:100%;animation:.65s cubic-bezier(.2,.8,.2,1) both donutIn;-webkit-mask:radial-gradient(farthest-side,#0000 66%,#000 67%);mask:radial-gradient(farthest-side,#0000 66%,#000 67%)}.donut-center{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex;position:absolute;inset:0}.donut-center strong{font-family:var(--font-num);letter-spacing:-.02em;font-size:24px;font-weight:750}.sum-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:8px;overflow:hidden}.sum-head{text-align:left;width:100%;color:var(--ink);background:0 0;border-radius:0;align-items:flex-start;gap:12px;padding:12px 14px;font-weight:400;display:flex}.sum-head:active{background:var(--fill);transform:none}.sum-main{flex:1;min-width:0}.sum-line{justify-content:space-between;gap:8px;display:flex}.sum-line.muted{margin-top:2px;font-size:13px}.sum-card .bar{background:var(--fill);border-radius:3px;height:6px;margin-top:8px;overflow:hidden}.sum-card .bar>div{transform-origin:0;border-radius:3px;height:100%;animation:.7s cubic-bezier(.2,.8,.2,1) both grow}.sum-body{border-top:1px solid var(--line)}.sub-row{border-top:1px solid var(--line);justify-content:space-between;gap:8px;padding:9px 14px;font-size:15px;display:flex}.sub-row span:last-child{color:var(--muted)}.sub-btn{text-align:left;width:100%;color:var(--ink);background:0 0;border-radius:0;align-items:center;font-weight:500}.sub-btn:active,.op-row:active{background:var(--fill);transform:none}.sub-label{color:var(--muted);padding:8px 14px 2px;font-size:12px;font-weight:600}.op-row{text-align:left;width:100%;color:var(--ink);border-top:1px solid var(--line);background:0 0;border-radius:0;align-items:center;gap:10px;padding:9px 14px;font-size:15px;font-weight:400;display:flex}.op-date{width:52px;color:var(--muted);flex:none;font-size:13px}.op-note{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.op-amt{white-space:nowrap;font-weight:600}.menu{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.menu.spaced{margin-top:16px}.menu button{text-align:left;width:100%;color:var(--ink);border-top:1px solid var(--line);background:0 0;border-radius:0;justify-content:space-between;align-items:center;padding:12px 16px;font-weight:500;display:flex}.menu button:first-child{border-top:0}.menu button:active{background:var(--fill);transform:none}.menu button.danger{color:var(--minus)}.menu .lead{align-items:center;gap:12px;display:flex}.menu .chev{color:var(--muted);font-size:22px}.emoji-grid{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.emoji{background:var(--fill);border-radius:12px;padding:8px 0;font-size:22px;font-weight:400}.emoji.active{outline:2px solid var(--accent)}.own-emoji{margin-top:8px}.swatches{flex-wrap:wrap;gap:10px;display:flex}.swatch{border:0;border-radius:50%;width:34px;height:34px;padding:0}.swatch.active{box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--ink)}@keyframes screenIn{0%{opacity:0}}@keyframes fade{0%{opacity:0}}@keyframes slideNext{0%{opacity:0;transform:translate(28px)}}@keyframes slidePrev{0%{opacity:0;transform:translate(-28px)}}@keyframes listFade{0%{opacity:0;transform:translateY(8px)}}@keyframes pop{0%{opacity:0;transform:scale(.9)}}@keyframes donutIn{0%{opacity:0;transform:scale(.86)rotate(-30deg)}}@keyframes grow{0%{transform:scaleX(0)}}@keyframes shimmer{to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}
