:root{--bg: #f0ede8;--card: #ffffff;--card-2: #f4f1ec;--border: rgba(0, 0, 0, .07);--shadow: 0 2px 16px rgba(0, 0, 0, .07), 0 1px 3px rgba(0, 0, 0, .05);--shadow-sm: 0 1px 6px rgba(0, 0, 0, .08);--text: #1a1814;--text-2: #5a5650;--text-3: #767066;--accent: #e8622a;--accent-lo: #fdf0ea;--accent-txt: #b8460f;--green: #2cb67d;--green-txt: #17805a;--green-lo: #edfbf4;--yellow: #d4920f;--yellow-lo: #fef8e6;--red: #e63946;--red-lo: #feecee;--denis: #2f6cde;--denis-lo: #eef3fd;--nastya: #d4486a;--nastya-lo: #fdeef2;--r: 18px;--r-sm: 12px;--font: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace}*,*:before,*:after{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}html{font-size:16px;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;min-height:100dvh}body{background:var(--bg);color:var(--text);font-family:var(--font);font-weight:600;-webkit-font-smoothing:antialiased}#root{max-width:560px;margin:0 auto;padding:22px 16px calc(96px + env(safe-area-inset-bottom));overflow-x:hidden}h1,h2,h3{margin:0;font-weight:800;letter-spacing:-.01em}button{font-family:inherit;cursor:pointer}.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}@keyframes slideD{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}@keyframes slideU{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes pop{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.app-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;animation:slideD .45s cubic-bezier(.34,1.4,.64,1) both}.header-left{display:flex;align-items:center;gap:12px}.logo{width:46px;height:46px;background:var(--accent);border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0;box-shadow:0 4px 14px #e8622a61}.app-header h1{font-size:22px;font-weight:800;line-height:1}.app-sub{color:var(--text-3);font-size:13px;font-weight:700;margin-top:3px}.tabs{display:flex;gap:5px;background:var(--card);padding:5px;border-radius:14px;box-shadow:var(--shadow-sm);margin-bottom:16px;animation:slideD .45s .05s cubic-bezier(.34,1.2,.64,1) both}.tabs button{flex:1;padding:11px;border:none;border-radius:10px;background:transparent;color:var(--text-2);font-size:14px;font-weight:800;transition:color .18s,background .18s}.tabs button.active{background:var(--accent);color:#fff;box-shadow:0 3px 10px #e8622a52}.active-filters{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:12px}.active-filters .chip{min-height:36px;padding:6px 12px}.reveal{animation:slideU .5s cubic-bezier(.34,1.1,.64,1) both}.reveal-1{animation-delay:.06s}.reveal-2{animation-delay:.13s}.reveal-3{animation-delay:.2s}.reveal-4{animation-delay:.27s}.section-label{font-size:11px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--text-3);margin:0 0 8px 4px}.period-bar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.chip{display:inline-flex;align-items:center;min-height:44px;padding:8px 14px;border:1.5px solid var(--border);border-radius:999px;background:var(--card);color:var(--text-2);font-size:13px;font-weight:800;transition:all .15s;box-shadow:var(--shadow-sm)}.chip:active{transform:scale(.95)}.chip.active{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 3px 10px #e8622a4d}.chip.who-denis.active{background:var(--denis);border-color:var(--denis);box-shadow:0 3px 10px #2f6cde4d}.chip.who-nastya.active{background:var(--nastya);border-color:var(--nastya);box-shadow:0 3px 10px #d4486a4d}.date-row{display:flex;align-items:center;gap:8px;margin-bottom:16px}.date-row .dash{color:var(--text-3);font-weight:800}.card,.panel{background:var(--card);border-radius:var(--r);padding:18px;box-shadow:var(--shadow);margin-bottom:12px}.panel h2{font-size:16px;margin-bottom:14px}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px}.stat-big{width:100%;background:var(--accent-lo);border-radius:var(--r);padding:18px;box-shadow:var(--shadow);margin-bottom:12px}.stat-big-num{font-family:var(--mono);font-size:clamp(26px,8.6vw,38px);font-weight:700;color:var(--accent);line-height:1.05;letter-spacing:-1.5px;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-big-lbl{font-size:11px;font-weight:800;color:var(--accent-txt);text-transform:uppercase;letter-spacing:.5px;margin-top:6px}.mini-row{display:flex;gap:10px;margin-bottom:12px}.mini-row>.stat-mini{flex:1}.stat-mini{background:var(--card);border-radius:var(--r);padding:12px 14px;box-shadow:var(--shadow);display:flex;flex-direction:column;justify-content:center;min-width:0;overflow:hidden}.stat-mini-lbl{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:var(--text-3);margin-bottom:4px}.stat-mini-num{font-family:var(--mono);font-size:clamp(14px,4.6vw,19px);font-weight:700;line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap}.stat-mini.income .stat-mini-num,.stat-mini.income .stat-mini-lbl,.stat-mini.balance .stat-mini-num.pos{color:var(--green-txt)}.stat-mini.balance .stat-mini-num.neg{color:var(--red)}.person-grid{display:flex;gap:10px}.person-chip{flex:1;border-radius:var(--r-sm);padding:12px 14px;min-width:0;overflow:hidden}.person-chip.denis{background:var(--denis-lo)}.person-chip.nastya{background:var(--nastya-lo)}.person-chip .pc-name{font-size:11px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;margin-bottom:4px}.person-chip.denis .pc-name{color:#2f6cde9e}.person-chip.nastya .pc-name{color:#d4486a9e}.person-chip .pc-num{font-family:var(--mono);font-size:clamp(14px,4.4vw,19px);font-weight:700;line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap}.person-chip.denis .pc-num{color:var(--denis)}.person-chip.nastya .pc-num{color:var(--nastya)}.person-chip .pc-income{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--green-txt);margin-top:4px}.catbar{margin-bottom:14px}.catbar:last-child{margin-bottom:0}.catbar-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px}.catbar-name{display:flex;align-items:baseline;gap:4px;min-width:0;font-size:14px;font-weight:800;color:var(--text)}.catbar-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.catbar-cnt{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--text-3);white-space:nowrap}.catbar-amt{font-family:var(--mono);font-size:13px;font-weight:700;color:var(--text-2);white-space:nowrap}.catbar-share{color:var(--text-3);font-weight:600}.catbar-track{height:10px;background:var(--card-2);border-radius:5px;overflow:hidden}.catbar-fill{height:100%;border-radius:5px}.donut-wrap{display:flex;justify-content:center;margin-bottom:6px}.donut-center{text-align:center}.donut-center .dc-num{font-family:var(--mono);font-size:17px;font-weight:700;color:var(--text);line-height:1;font-variant-numeric:tabular-nums;white-space:nowrap}.donut-center .dc-lbl{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.6px;color:var(--text-3);margin-top:4px}.daystrip-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x;padding-bottom:4px}.daystrip{display:flex;align-items:flex-end;gap:6px;min-height:150px}.day-col{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1 0 auto;min-width:30px}.day-amt{font-family:var(--mono);font-size:11px;font-weight:700;color:var(--text-2);line-height:1;min-height:12px;text-align:center}.day-amt.zero{color:var(--text-3);opacity:.5}.day-wrap{width:100%;height:110px;display:flex;align-items:flex-end}.day-bar{width:100%;border-radius:6px 6px 3px 3px;overflow:hidden;display:flex;flex-direction:column-reverse;min-height:2px;background:var(--card-2)}.day-bar-seg.denis{background:var(--denis)}.day-bar-seg.nastya{background:var(--nastya)}.day-bar-seg.solo{background:#c9c2ba}.day-bar.today{box-shadow:0 2px 10px #e8622a59}.day-bar.today .day-bar-seg.solo{background:var(--accent)}.day-lbl{font-size:11px;font-weight:800;color:var(--text-3);letter-spacing:.2px;white-space:nowrap}.day-col.is-today .day-lbl{color:var(--accent)}.daystrip-legend{display:flex;gap:14px;margin-top:12px}.daystrip-legend .lg{display:flex;align-items:center;gap:5px;font-size:11px;font-weight:800}.daystrip-legend .lg .dot{width:9px;height:9px;border-radius:3px}.mchart-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;touch-action:pan-x;padding-bottom:4px}.mchart{display:flex;align-items:flex-end;gap:8px;min-height:200px;padding-top:8px}.daystrip:after,.mchart:after{content:"";flex:0 0 78px;align-self:stretch}.mcol{flex:0 0 auto;width:46px;display:flex;flex-direction:column;align-items:center;gap:5px}.mcol-bars{width:100%;height:150px;display:flex;align-items:flex-end;justify-content:center;gap:4px}.mbar{flex:1;max-width:26px;border-radius:5px 5px 2px 2px;position:relative;min-height:2px}.mbar.expense{background:var(--accent)}.mbar.income{background:var(--green)}.mbar-lbl{position:absolute;top:-17px;left:-6px;right:-6px;text-align:center;font-family:var(--mono);font-size:11px;font-weight:700;color:var(--text-2);white-space:nowrap}.mcol-lbl{font-size:11px;font-weight:800;color:var(--text-3);text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}.mchart-legend{display:flex;gap:14px;margin-top:14px}.mchart-legend .lg{display:flex;align-items:center;gap:5px;font-size:12px;font-weight:800}.mchart-legend .lg .dot{width:10px;height:10px;border-radius:3px}.filters{display:flex;flex-direction:column;gap:14px}.filter-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.filter-label{font-size:11px;font-weight:800;color:var(--text-3);width:100%;text-transform:uppercase;letter-spacing:.8px}.tx{display:flex;align-items:center;gap:12px;padding:13px 2px;border-top:1.5px solid var(--card-2)}.tx:first-child{border-top:none}.tx-main{flex:1;min-width:0}.tx-cat{font-size:15px;font-weight:800}.tx-cat .income-tag{color:var(--green-txt);font-size:11px;font-weight:800;margin-left:6px}.tx-meta{font-family:var(--mono);font-size:12px;color:var(--text-3);margin-top:3px;font-weight:600;word-break:break-word}.tx-amount{font-family:var(--mono);font-size:15px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--text)}.tx-amount.income{color:var(--green-txt)}.tx-actions{display:flex;gap:10px}.icon-btn{background:var(--card-2);border:none;color:var(--text-2);border-radius:11px;width:44px;height:44px;font-size:15px;display:flex;align-items:center;justify-content:center;transition:all .15s}.icon-btn:hover{background:#e9e3da;color:var(--text)}.icon-btn:active{transform:scale(.9)}input,select,textarea{font-family:inherit;font-size:16px;font-weight:700;padding:12px 13px;border:1.5px solid var(--border);border-radius:var(--r-sm);background:var(--card-2);color:var(--text);outline:none;width:100%;transition:border-color .15s,background .15s}input::placeholder{color:var(--text-3);font-weight:600}input:focus,select:focus,textarea:focus{border-color:var(--accent);background:var(--card)}input[type=date]{font-family:var(--mono)}label.field{display:block}label.field>span{display:block;font-size:11px;font-weight:800;color:var(--text-3);margin-bottom:6px;text-transform:uppercase;letter-spacing:.5px}.btn{padding:13px 16px;border:none;border-radius:var(--r-sm);font-size:15px;font-weight:800;transition:all .15s}.btn:active{transform:scale(.97)}.btn.primary{background:var(--accent);color:#fff;box-shadow:0 4px 12px #e8622a52}.btn.primary:hover{background:#d9551f}.btn.ghost{background:var(--card-2);color:var(--text-2)}.btn.ghost:hover{background:#e9e3da}.btn.danger{background:var(--red-lo);color:var(--red)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.fab{position:fixed;right:max(20px,calc((100vw - 560px)/2 + 20px));bottom:calc(22px + env(safe-area-inset-bottom));width:58px;height:58px;border-radius:50%;border:none;background:var(--accent);color:#fff;font-size:30px;line-height:1;box-shadow:0 8px 24px #e8622a73;z-index:50;transition:transform .15s;animation:pop .4s .3s cubic-bezier(.34,1.5,.64,1) both}.fab:hover{transform:scale(1.06)}.fab:active{transform:scale(.92)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#1a181466;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:flex-end;justify-content:center;z-index:100;animation:fadeIn .2s ease both}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--card);border-radius:var(--r) var(--r) 0 0;width:100%;max-width:520px;padding:22px 18px calc(22px + env(safe-area-inset-bottom));max-height:92dvh;overflow-y:auto;touch-action:pan-y;box-shadow:0 -8px 40px #0000002e;animation:slideU .32s cubic-bezier(.34,1.2,.64,1) both}.modal h2{font-size:19px;margin-bottom:18px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:13px}.form-grid .full{grid-column:1 / -1}.preview{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:700}.seg{display:flex;gap:6px}.seg button{flex:1;padding:12px;border-radius:var(--r-sm);border:1.5px solid var(--border);background:var(--card-2);color:var(--text-3);font-weight:800;font-size:14px;transition:all .15s}.seg button.active.expense{background:var(--accent-lo);border-color:var(--accent);color:var(--accent)}.seg button.active.income{background:var(--green-lo);border-color:var(--green);color:var(--green)}.muted{color:var(--text-3)}.center{text-align:center;padding:28px 0}.err{color:var(--red);font-size:13px;font-weight:700}.spin{color:var(--text-3);text-align:center;padding:28px;font-weight:800}.skel{background:linear-gradient(90deg,#ece8e0,#f6f3ee 48%,#ece8e0);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:10px}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.login-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:18px}.login-card{background:var(--card);border-radius:var(--r);padding:34px 28px;width:100%;max-width:360px;box-shadow:var(--shadow);animation:slideU .5s cubic-bezier(.34,1.2,.64,1) both}.login-logo{width:56px;height:56px;background:var(--accent);border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:28px;margin:0 auto 16px;box-shadow:0 6px 18px #e8622a66}.login-card h2{text-align:center;margin-bottom:4px;font-size:22px}.login-card .sub{text-align:center;color:var(--text-3);font-size:13px;margin-bottom:24px;font-weight:700}.login-card input{margin-bottom:12px}@media(min-width:560px){.modal-overlay{align-items:center}.modal{border-radius:var(--r)}}
