:root{--tg-bg: #ffffff;--tg-secondary-bg: #eef1f4;--tg-text: #0f1419;--tg-hint: #7d8590;--tg-button: #2f9e44;--tg-button-text: #ffffff;--tg-border: rgba(15, 20, 25, .12);--radius: 14px;--green: #2f9e44;--red: #e03131;--orange: #f08c00;--green-bg: rgba(47, 158, 68, .12);--danger-bg: rgba(224, 49, 49, .12);--warn-bg: rgba(240, 140, 0, .15);--nav-height: 60px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--tg-bg);color:var(--tg-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}#root{min-height:100dvh}.app{max-width:480px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column;background:var(--tg-bg)}.app__header{display:flex;align-items:center;gap:8px;padding:14px 16px 10px;position:sticky;top:0;background:var(--tg-bg);z-index:50}.app__logo{font-size:20px}.app__title{font-weight:700;font-size:16px;flex:1}.app__user{font-size:12px;color:var(--tg-hint);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.app__main{flex:1;padding:8px 12px calc(var(--nav-height) + 96px + env(safe-area-inset-bottom))}.screen{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px}.screen--error{max-width:480px;margin:0 auto}.screen__title{margin:0 0 8px}.muted{color:var(--tg-hint);font-size:13px}.page{display:flex;flex-direction:column;gap:12px}.page__header{display:flex;align-items:center;gap:8px}.page__title{font-size:18px;font-weight:700;flex:1;margin:0}.icon-btn{background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:10px;width:36px;height:36px;font-size:15px;cursor:pointer;color:var(--tg-text);flex-shrink:0;display:inline-flex;align-items:center;justify-content:center}.icon-btn:active{opacity:.7}.card{background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:var(--radius);padding:14px}.card__title{font-size:12px;font-weight:600;color:var(--tg-hint);margin-bottom:10px;text-transform:uppercase;letter-spacing:.4px}.btn{background:var(--tg-button);color:var(--tg-button-text);border:none;border-radius:10px;padding:10px 16px;font-size:14px;font-weight:600;cursor:pointer;width:100%;display:inline-flex;align-items:center;justify-content:center;gap:6px}.btn:disabled{opacity:.55}.btn--ghost{background:transparent;color:var(--tg-button);border:1px solid var(--tg-button)}.btn--danger{background:var(--red);color:#fff}.btn--small{padding:8px 12px;font-size:13px;width:auto}.btn-row{display:flex;gap:8px}.btn-row .btn{flex:1}.field{margin-bottom:12px}.field label{display:block;font-size:12px;color:var(--tg-hint);margin-bottom:5px}.input,.select,.textarea{width:100%;background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:10px;padding:10px 12px;font-size:15px;color:var(--tg-text);outline:none;font-family:inherit}.input:focus,.select:focus,.textarea:focus{border-color:var(--tg-button)}.textarea{min-height:64px;resize:vertical}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--tg-hint) 50%),linear-gradient(135deg,var(--tg-hint) 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px;background-repeat:no-repeat;padding-right:28px}.smart-row{display:flex;gap:8px}.smart-row .input{flex:1}.smart-row .btn{flex-shrink:0;font-size:16px;padding:8px 14px}.seg{display:flex;background:var(--tg-secondary-bg);border-radius:10px;padding:3px;border:1px solid var(--tg-border)}.seg button{flex:1;border:none;background:transparent;color:var(--tg-text);padding:8px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer}.seg button.active{background:var(--tg-button);color:var(--tg-button-text)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;z-index:200;display:flex;align-items:flex-end;justify-content:center}.modal{width:100%;max-width:480px;max-height:90dvh;overflow-y:auto;background:var(--tg-bg);border-radius:18px 18px 0 0;padding:16px 16px calc(16px + env(safe-area-inset-bottom));animation:slide-up .22s ease}.modal__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.modal__header h3{margin:0;font-size:17px}.modal__close{background:var(--tg-secondary-bg);border:none;border-radius:50%;width:32px;height:32px;font-size:14px;cursor:pointer;color:var(--tg-text)}.modal__footer{display:flex;gap:8px;margin-top:14px}.modal__error{color:var(--red);font-size:13px;margin:8px 0 0}@keyframes slide-up{0%{transform:translateY(40px);opacity:0}to{transform:none;opacity:1}}.toast{position:fixed;left:50%;transform:translate(-50%);bottom:calc(var(--nav-height) + 78px + env(safe-area-inset-bottom));background:var(--tg-text);color:var(--tg-bg);padding:10px 18px;border-radius:22px;font-size:14px;font-weight:500;z-index:300;box-shadow:0 6px 18px #0003;animation:toast-in .2s ease;white-space:nowrap;max-width:90vw;overflow:hidden;text-overflow:ellipsis}.toast--error{background:var(--red);color:#fff}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:480px;height:calc(var(--nav-height) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--tg-secondary-bg);border-top:1px solid var(--tg-border);display:flex;z-index:100}.bottom-nav__tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:none;border:none;color:var(--tg-hint);font-size:10px;cursor:pointer;padding:0}.bottom-nav__tab--active{color:var(--tg-button)}.bottom-nav__icon{font-size:20px;line-height:1}.fab{position:fixed;left:50%;transform:translate(-50%);bottom:calc(var(--nav-height) + 10px + env(safe-area-inset-bottom));width:54px;height:54px;border-radius:50%;border:none;background:var(--tg-button);color:var(--tg-button-text);font-size:26px;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 18px #00000047;cursor:pointer;z-index:101;line-height:1;padding:0 0 4px}.fab:active{transform:translate(-50%) scale(.94)}.loading{display:flex;flex-direction:column;align-items:center;gap:10px;padding:40px 0;color:var(--tg-hint);font-size:13px}.loading--full{min-height:100dvh;justify-content:center}.spinner{width:26px;height:26px;border:3px solid var(--tg-border);border-top-color:var(--tg-button);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-box{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--danger-bg);border:1px solid var(--red);color:var(--red);border-radius:10px;padding:10px 12px;font-size:13px}.error-box .icon-btn{width:28px;height:28px;font-size:13px;color:var(--red);background:transparent;border:none}.month-switch{display:flex;align-items:center;justify-content:space-between;background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:12px;padding:4px 6px}.month-switch__btn{background:none;border:none;font-size:18px;color:var(--tg-text);cursor:pointer;padding:2px 12px}.month-switch__label{font-weight:600;font-size:14px}.cashflow{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}.stat{background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:var(--radius);padding:10px 6px;text-align:center}.stat__label{font-size:10px;color:var(--tg-hint);text-transform:uppercase;letter-spacing:.4px}.stat__value{font-size:14px;font-weight:700;margin-top:3px;white-space:nowrap}.text-green{color:var(--green)}.text-red{color:var(--red)}.chart-wrap{width:100%;height:200px}.chart-wrap--area{height:160px}.delta{font-size:10px;font-weight:700;margin-left:4px;padding:1px 5px;border-radius:999px}.delta--good{color:var(--green);background:var(--green-bg)}.delta--bad{color:var(--red);background:var(--danger-bg)}.tx-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.tx-filters__month{flex:1 1 130px}.rec-card{cursor:pointer}.rec-card__top{display:flex;align-items:center;justify-content:space-between;gap:8px}.rec-card__name{font-weight:600;font-size:14px}.rec-card__meta{display:flex;flex-direction:column;gap:2px;margin-top:6px;font-size:12px;color:var(--tg-hint)}.btn--block{width:100%}.check{display:flex;align-items:center;gap:8px;font-size:13px;margin:8px 0}.budget-row{margin-bottom:10px}.budget-row__head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13px;margin-bottom:4px}.budget-form{max-height:45vh;overflow-y:auto}.progress__bar--over{background:var(--red)}.progress__bar--warn{background:var(--orange)}.inv-summary__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.inv-summary__value{font-size:16px;font-weight:700;margin-top:2px}.app__settings{margin-left:auto}.legend{display:flex;flex-direction:column;gap:6px;margin-top:8px}.legend__row{display:flex;align-items:center;gap:8px;font-size:13px}.legend__dot{width:10px;height:10px;border-radius:3px;flex-shrink:0}.legend__name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.legend__amount{font-weight:600}.legend__pct{color:var(--tg-hint);font-size:12px;width:44px;text-align:right}.progress{background:var(--tg-bg);border-radius:999px;height:10px;overflow:hidden;border:1px solid var(--tg-border)}.progress__bar{height:100%;background:var(--tg-button);border-radius:999px;transition:width .3s ease}.progress__label{display:flex;justify-content:space-between;font-size:12px;color:var(--tg-hint);margin-bottom:6px}.debt-mini{display:flex;flex-direction:column;gap:6px;font-size:13px}.debt-mini__row{display:flex;justify-content:space-between}.debt-mini__row span:first-child{color:var(--tg-hint)}.debt-mini__row span:last-child{font-weight:600}.year-switch{display:flex;align-items:center;gap:8px}.year-switch .select{flex:1}.table-scroll{overflow-x:auto;border:1px solid var(--tg-border);border-radius:var(--radius);background:var(--tg-secondary-bg);-webkit-overflow-scrolling:touch}.report-table{border-collapse:collapse;width:max-content;min-width:100%;font-size:12px}.report-table th,.report-table td{padding:7px 8px;border-bottom:1px solid var(--tg-border);text-align:right;white-space:nowrap}.report-table th{position:sticky;top:0;background:var(--tg-secondary-bg);z-index:2;font-weight:600;color:var(--tg-hint);font-size:11px}.report-table td:first-child,.report-table th:first-child{position:sticky;left:0;background:var(--tg-secondary-bg);z-index:1;text-align:left;font-weight:500;max-width:130px;overflow:hidden;text-overflow:ellipsis}.report-table th:first-child{z-index:3}.report-table .cell-clickable{color:var(--tg-button);font-weight:600;cursor:pointer}.report-table .cell-clickable:active{background:var(--tg-button);color:var(--tg-button-text)}.report-table tbody tr:last-child td{border-bottom:none}.report-table tfoot td{font-weight:700;border-top:1px solid var(--tg-border);background:var(--tg-secondary-bg)}.report-table tfoot tr:last-child td{border-bottom:none}.tx-list{display:flex;flex-direction:column}.tx-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--tg-border);font-size:13px}.tx-item:last-child{border-bottom:none}.tx-item__left{flex:1;min-width:0}.tx-item__comment{color:var(--tg-hint);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tx-item__date{color:var(--tg-hint);font-size:11px}.tx-item__amount{font-weight:700;white-space:nowrap}.inv-card{display:flex;flex-direction:column;gap:6px}.inv-card__top{display:flex;align-items:center;gap:8px}.inv-card__name{font-weight:600;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{font-size:10px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--tg-button);color:var(--tg-button-text);opacity:.92;white-space:nowrap}.badge--gray{background:var(--tg-hint);color:var(--tg-bg)}.badge--red{background:var(--red);color:#fff}.badge--orange{background:var(--orange);color:#fff}.inv-card__row{display:flex;justify-content:space-between;gap:8px;font-size:13px}.inv-card__row .muted{font-size:12px}.inv-card__actions{display:flex;gap:8px;justify-content:flex-end;margin-top:2px}.section-title{font-size:14px;font-weight:700;margin:14px 0 8px;display:flex;align-items:center;gap:8px}.section-title:first-child{margin-top:0}.section-title .count{background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:999px;font-size:11px;padding:1px 8px;color:var(--tg-hint);font-weight:600}.debt-card{display:flex;flex-direction:column;gap:8px}.debt-card__top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.debt-card__name{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.debt-card__amount{font-weight:700;font-size:15px}.debt-card__meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--tg-hint);flex-wrap:wrap}.debt-card__desc{font-size:12px;color:var(--tg-hint)}.debt-card__actions{display:flex;gap:8px;flex-wrap:wrap}.chip{font-size:10px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--green-bg);color:var(--green);white-space:nowrap}.chip--paid{background:var(--tg-secondary-bg);color:var(--tg-hint)}.chip--overdue{background:var(--danger-bg);color:var(--red)}.day-badge{font-size:11px;padding:2px 8px;border-radius:999px;background:var(--tg-secondary-bg);color:var(--tg-text);border:1px solid var(--tg-border);white-space:nowrap}.day-badge--overdue{background:var(--danger-bg);color:var(--red);border-color:transparent}.day-badge--today{background:var(--warn-bg);color:var(--orange);border-color:transparent}.kanban{display:flex;gap:10px;overflow-x:auto;padding-bottom:8px;align-items:flex-start;-webkit-overflow-scrolling:touch}.kanban-col{min-width:248px;max-width:280px;flex-shrink:0;background:var(--tg-secondary-bg);border:1px solid var(--tg-border);border-radius:var(--radius);padding:10px;transition:border-color .15s ease,background .15s ease}.kanban-col--over{border-color:var(--tg-button)}.kanban-col__header{display:flex;align-items:center;gap:6px;margin-bottom:10px}.kanban-col__title{font-weight:700;font-size:13px;flex:1}.kanban-col__count{font-size:11px;color:var(--tg-hint);background:var(--tg-bg);border:1px solid var(--tg-border);border-radius:999px;padding:1px 7px}.kanban-col__add{background:none;border:1px dashed var(--tg-border);color:var(--tg-hint);border-radius:8px;padding:6px;font-size:12px;width:100%;cursor:pointer;margin-top:8px}.kanban-col__add:active{border-color:var(--tg-button);color:var(--tg-button)}.kanban-card{background:var(--tg-bg);border:1px solid var(--tg-border);border-radius:10px;padding:10px;margin-bottom:8px;cursor:grab;touch-action:manipulation;-webkit-user-select:none;user-select:none}.kanban-card:active{cursor:grabbing}.kanban-card__title{font-weight:600;font-size:13px;margin-bottom:4px}.kanban-card__desc{font-size:12px;color:var(--tg-hint);margin-top:4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.kanban-card__meta{font-size:11px;color:var(--tg-hint);display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px;align-items:center}.kanban-card__finance{display:inline-flex;align-items:center;gap:3px;color:var(--tg-button);font-weight:600}.kanban-card__finance a{color:inherit}.kanban-empty{font-size:12px;color:var(--tg-hint);text-align:center;padding:14px 0;border:1px dashed var(--tg-border);border-radius:10px;margin-bottom:8px}.suggestion{background:var(--green-bg);border:1px solid var(--green);color:var(--green);border-radius:10px;padding:8px 10px;font-size:13px;margin-top:8px}.suggestion__conf{opacity:.75}.empty{text-align:center;color:var(--tg-hint);font-size:13px;padding:24px 0}.project-bar{display:flex;align-items:center;gap:8px;margin-bottom:12px}.project-bar__select{flex:1;min-width:0}.project-progress{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.project-chip{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--tg-border);border-radius:var(--radius);cursor:pointer;font-size:13px}.project-chip--active{border-color:var(--tg-button);background:var(--green-bg)}.project-chip__name{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.project-chip__count{color:var(--tg-hint);font-size:12px;white-space:nowrap}.project-chip__bar{flex:0 0 60px;height:6px;border-radius:999px;background:var(--tg-secondary-bg);overflow:hidden}.project-chip__fill{display:block;height:100%;border-radius:999px;transition:width .3s ease}.project-tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--tg-hint);white-space:nowrap}.parent-tag{font-size:11px;color:var(--tg-hint);white-space:nowrap}.project-dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex:none}.badge--month{background:var(--warn-bg);color:var(--orange)}.badge--day{background:var(--green-bg);color:var(--green)}.badge--green{background:var(--green);color:#fff}.color-picker{display:flex;flex-wrap:wrap;gap:8px}.color-swatch{width:28px;height:28px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}.color-swatch--active{border-color:var(--tg-text);transform:scale(1.15)}.plan-card{margin-bottom:16px}.plan-toolbar{display:flex;align-items:center;gap:8px;margin:8px 0 12px}.plan-month-input{flex:1;min-width:0}.plan-progress{margin:4px 0 14px}.plan-progress__bar{height:8px;border-radius:999px;background:var(--tg-secondary-bg);overflow:hidden;margin-bottom:4px}.plan-progress__fill{height:100%;border-radius:999px;background:var(--tg-button);transition:width .3s ease}.plan-line{padding:10px 0;border-top:1px solid var(--tg-border)}.plan-line__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.plan-line__label{font-weight:600;font-size:14px}.plan-line__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;font-size:12px;color:var(--tg-hint)}.plan-line__percent{margin-top:6px;font-size:12px;font-weight:600}.text-orange{color:var(--orange)}.row--plan td{color:var(--tg-hint);font-style:italic}.row--plan td:first-child{font-weight:500}.row--group td{font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--tg-hint);background:var(--tg-secondary-bg);padding-top:6px;padding-bottom:6px}
