:root{--bg: #f5f6fb;--bg-card: #ffffff;--bg-elev: #fafbff;--text: #1a1c2e;--text-muted: #6b7088;--border: #e6e8f0;--border-strong: #d4d7e3;--primary: #5b6cff;--primary-hover: #4a5bef;--primary-soft: #eef0ff;--danger: #ff4757;--danger-soft: #ffe6e8;--warn: #ffa94d;--success: #51cf66;--shadow: 0 1px 3px rgba(20, 22, 50, .04), 0 4px 16px rgba(20, 22, 50, .06);--shadow-strong: 0 4px 12px rgba(20, 22, 50, .08), 0 12px 32px rgba(20, 22, 50, .1);--radius: 14px;--radius-sm: 10px;--radius-lg: 20px;--transition: .2s ease}@media (prefers-color-scheme: dark){:root{--bg: #0f111a;--bg-card: #181b29;--bg-elev: #1f2336;--text: #e8ebff;--text-muted: #8a90a8;--border: #2a2f47;--border-strong: #3a4060;--primary: #7c8aff;--primary-hover: #8b97ff;--primary-soft: #232844;--danger-soft: #3a1d23;--shadow: 0 1px 3px rgba(0, 0, 0, .3), 0 4px 16px rgba(0, 0, 0, .4);--shadow-strong: 0 4px 12px rgba(0, 0, 0, .4), 0 12px 32px rgba(0, 0, 0, .5)}}*{box-sizing:border-box}html,body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:15px;line-height:1.5;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}button{font-family:inherit;cursor:pointer}input,select,button{font-family:inherit;font-size:inherit}#root{min-height:100vh}.app{max-width:1200px;margin:0 auto;padding:24px;display:flex;flex-direction:column;gap:20px;min-height:100vh}.header{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.header__brand{display:flex;align-items:center;gap:14px}.header__logo{width:48px;height:48px;display:flex;align-items:center;justify-content:center;font-size:28px;background:linear-gradient(135deg,var(--primary),#845ef7);border-radius:var(--radius);box-shadow:var(--shadow)}.header__title{margin:0;font-size:22px;font-weight:700;letter-spacing:-.02em}.header__subtitle{margin:0;font-size:12px;color:var(--text-muted);letter-spacing:.05em;text-transform:uppercase}.header__actions{display:flex;gap:8px;flex-wrap:wrap}.tabs{display:flex;background:var(--bg-card);padding:6px;border-radius:var(--radius);gap:4px;box-shadow:var(--shadow);border:1px solid var(--border)}.tab{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 14px;border:none;background:transparent;color:var(--text-muted);border-radius:var(--radius-sm);font-weight:500;transition:all var(--transition)}.tab:hover{color:var(--text);background:var(--bg-elev)}.tab--active{background:var(--primary);color:#fff;box-shadow:0 4px 12px #5b6cff4d}.tab--active:hover{background:var(--primary-hover);color:#fff}.tab__icon{font-size:16px}.main{flex:1}.grid{display:grid;gap:20px}.grid--dashboard{grid-template-columns:1fr 1fr}.grid--list{grid-template-columns:380px 1fr}.grid--budgets{grid-template-columns:1fr 1fr}.card{background:var(--bg-card);border-radius:var(--radius-lg);padding:22px;border:1px solid var(--border);box-shadow:var(--shadow);display:flex;flex-direction:column;gap:16px}.card--span-2{grid-column:span 2}.card__head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.card__title{margin:0;font-size:17px;font-weight:600;letter-spacing:-.01em}.footer{text-align:center;color:var(--text-muted);font-size:13px;padding:8px 0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 16px;border-radius:var(--radius-sm);border:1px solid transparent;font-weight:500;transition:all var(--transition);white-space:nowrap}.btn:disabled{opacity:.55;cursor:not-allowed}.btn--primary{background:var(--primary);color:#fff;box-shadow:0 2px 6px #5b6cff40}.btn--primary:hover:not(:disabled){background:var(--primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px #5b6cff59}.btn--ghost{background:var(--bg-elev);color:var(--text);border-color:var(--border)}.btn--ghost:hover:not(:disabled){background:var(--primary-soft);border-color:var(--primary);color:var(--primary)}.btn--full{width:100%}.btn--sm{padding:6px 12px;font-size:13px}.icon-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-muted);font-size:16px;transition:all var(--transition)}.icon-btn:hover{background:var(--danger-soft);color:var(--danger)}.form{display:flex;flex-direction:column;gap:16px}.form__row{display:flex;flex-direction:column;gap:6px}.form__grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form__label{font-size:13px;font-weight:500;color:var(--text-muted)}.form__error{font-size:12px;color:var(--danger)}.input,.select{padding:10px 14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg-elev);color:var(--text);outline:none;width:100%;transition:all var(--transition)}.input:focus,.select:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.input--error{border-color:var(--danger)}.input--sm,.select--sm{padding:8px 12px;font-size:13px}.input-wrap{position:relative;display:block;width:100%}.input-wrap--inline{width:auto;display:inline-block}.input-wrap__prefix{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted);pointer-events:none;font-weight:500}.input--with-prefix{padding-left:28px}.category-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.category-chip{display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 6px;border:1.5px solid var(--border);background:var(--bg-elev);border-radius:var(--radius-sm);color:var(--text);transition:all var(--transition)}.category-chip:hover{border-color:var(--chip-color, var(--primary));transform:translateY(-1px)}.category-chip--active{border-color:var(--chip-color);background:color-mix(in srgb,var(--chip-color) 10%,transparent);box-shadow:0 2px 8px color-mix(in srgb,var(--chip-color) 25%,transparent)}.category-chip__icon{font-size:20px}.category-chip__name{font-size:12px;font-weight:500}.dashboard{display:flex;flex-direction:column;gap:18px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.stat{display:flex;flex-direction:column;gap:4px;padding:14px 16px;background:var(--bg-elev);border-radius:var(--radius-sm);border:1px solid var(--border)}.stat__label{font-size:12px;color:var(--text-muted)}.stat__value{font-size:22px;font-weight:700;letter-spacing:-.02em}.stat__value--sm{font-size:16px}.dashboard__chart{position:relative}.chart-wrap{position:relative;width:100%}.chart-center{position:absolute;top:130px;left:0;right:0;display:flex;flex-direction:column;align-items:center;pointer-events:none}.chart-center__label{font-size:12px;color:var(--text-muted)}.chart-center__value{font-size:22px;font-weight:700;letter-spacing:-.02em}.tooltip{background:var(--bg-card);border:1px solid var(--border-strong);border-radius:var(--radius-sm);padding:10px 14px;box-shadow:var(--shadow-strong);font-size:13px;min-width:140px}.tooltip__head{display:flex;align-items:center;gap:6px;margin-bottom:4px}.tooltip__icon{font-size:16px}.tooltip__row{font-weight:600;font-size:15px}.tooltip__muted{color:var(--text-muted);font-size:12px}.legend-item{font-size:12px;color:var(--text)}.recharts-default-legend{margin-top:8px!important}.expense-list{display:flex;flex-direction:column;gap:14px}.expense-list__filters{display:grid;grid-template-columns:1fr 160px;gap:8px}.expense-list__items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:560px;overflow-y:auto}.expense-item{display:grid;grid-template-columns:40px 1fr auto auto;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--radius-sm);background:var(--bg-elev);border:1px solid transparent;transition:all var(--transition);animation:slideIn .25s ease}.expense-item:hover{border-color:var(--border-strong);transform:translate(2px)}.expense-item__icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);font-size:20px}.expense-item__main{display:flex;flex-direction:column;min-width:0}.expense-item__desc{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.expense-item__meta{font-size:12px;color:var(--text-muted)}.expense-item__amount{font-weight:600;color:var(--danger);font-variant-numeric:tabular-nums}.budgets{display:flex;flex-direction:column;gap:14px}.budgets__hint{margin:0;font-size:13px;color:var(--text-muted)}.budgets__list{display:flex;flex-direction:column;gap:12px}.budget-row{padding:14px;background:var(--bg-elev);border-radius:var(--radius-sm);border:1px solid var(--border);display:flex;flex-direction:column;gap:10px;transition:all var(--transition)}.budget-row--over{border-color:var(--danger);background:var(--danger-soft)}.budget-row__head{display:grid;grid-template-columns:32px 1fr auto;align-items:center;gap:10px}.budget-row__icon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);font-size:16px}.budget-row__name{font-weight:500}.budget-row__spent{font-variant-numeric:tabular-nums;font-weight:600}.budget-row__limit{color:var(--text-muted);font-weight:400}.budget-row__edit{display:flex;gap:8px;align-items:center}.budget-row__edit .input-wrap{flex:1}.progress-bars{display:flex;flex-direction:column;gap:18px}.goal{padding:16px;background:linear-gradient(135deg,var(--primary-soft),transparent);border-radius:var(--radius);border:1px solid var(--border);display:flex;flex-direction:column;gap:10px}.goal__head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.goal__label{font-weight:500}.goal__input{width:120px}.goal__meta{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--text-muted)}.goal__pct{font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}.progress{position:relative;height:10px;background:var(--border);border-radius:999px;overflow:hidden}.progress__bar{height:100%;border-radius:999px;background:var(--primary);width:0%;transition:width 1s cubic-bezier(.22,1,.36,1);position:relative;overflow:hidden}.progress__bar:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);animation:shimmer 2s infinite}.progress__bar--over{background:linear-gradient(90deg,var(--warn),var(--danger))}.progress__badge{position:absolute;right:0;top:-22px;font-size:11px;background:var(--danger);color:#fff;padding:2px 8px;border-radius:999px;white-space:nowrap;font-weight:500}.progress-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.progress-list__item{display:flex;flex-direction:column;gap:6px}.progress-list__head{display:flex;align-items:center;justify-content:space-between;font-size:13px}.progress-list__name{font-weight:500}.progress-list__amount{color:var(--text-muted);font-variant-numeric:tabular-nums}.progress-list__amount--over{color:var(--danger);font-weight:600}.empty{text-align:center;padding:36px 20px;color:var(--text-muted);display:flex;flex-direction:column;align-items:center;gap:6px}.empty--small{padding:20px}.empty__icon{font-size:36px;opacity:.7}.empty p{margin:0;font-weight:500;color:var(--text)}.empty__hint{font-size:13px}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--bg-card);color:var(--text);padding:12px 20px;border-radius:var(--radius-sm);box-shadow:var(--shadow-strong);border:1px solid var(--border-strong);font-size:14px;font-weight:500;z-index:100;animation:toastIn .3s ease;max-width:calc(100vw - 32px)}.toast--success{border-color:var(--success);border-left:4px solid var(--success)}.toast--warn{border-color:var(--warn);border-left:4px solid var(--warn)}.toast--info{border-left:4px solid var(--primary)}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes toastIn{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media (max-width: 960px){.grid--dashboard,.grid--list,.grid--budgets{grid-template-columns:1fr}.card--span-2{grid-column:auto}}@media (max-width: 640px){.app{padding:14px;gap:14px}.header{align-items:stretch}.header__actions{width:100%}.header__actions .btn{flex:1}.tab__label{font-size:13px}.tab{padding:10px 8px;flex-direction:column;gap:2px}.stats,.form__grid{grid-template-columns:1fr}.category-grid{grid-template-columns:repeat(3,1fr)}.expense-list__filters{grid-template-columns:1fr}.card{padding:16px}.header__title,.stat__value{font-size:19px}}@media (max-width: 380px){.category-grid{grid-template-columns:repeat(2,1fr)}}
