:root{--paper:#f4eee2;--paper-2:#efe7d7;--surface:#fffdf8;--surface-2:#fbf6ec;--ink:#2a2620;--ink-soft:#6c6356;--muted:#9a9183;--line:#e6dcc9;--line-strong:#d8ccb4;--brand:#b5562a;--brand-deep:#8c3f1b;--brand-soft:#f3e2d6;--income:#3c6e47;--income-bg:#e7efe4;--expense:#a8392c;--expense-bg:#f6e6e1;--gold:#b88a2e;--shadow-sm:0 1px 2px #3c2d190f;--shadow-md:0 6px 24px -8px #46321938;--shadow-lg:0 24px 60px -20px #3c281459;--radius:14px;--radius-sm:9px;--font-display:"Fraunces", Georgia, serif;--font-body:"Hanken Grotesk", system-ui, sans-serif}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-body);background-color:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;background-image:radial-gradient(1100px 500px at 80% -8%,#b5562a14,#0000 60%),radial-gradient(900px 500px at -5% 110%,#3c6e4712,#0000 55%);background-attachment:fixed;font-size:15px;line-height:1.5}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-weight:600}button{cursor:pointer;font-family:inherit}input,select{font-family:inherit}.tabular{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.login-wrap{place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:100%;max-width:410px;box-shadow:var(--shadow-lg);padding:40px 36px 34px;position:relative;overflow:hidden}.login-card:before{content:"";background:linear-gradient(90deg, var(--brand), var(--gold));height:5px;position:absolute;inset:0 0 auto}.brand-mark{align-items:center;gap:12px;margin-bottom:28px;display:flex}.brand-emblem{background:var(--ink);width:46px;height:46px;color:var(--paper);font-family:var(--font-display);border-radius:12px;flex-shrink:0;place-items:center;font-size:22px;font-weight:600;display:grid}.brand-name{font-family:var(--font-display);font-size:19px;font-weight:600;line-height:1.1}.brand-sub{color:var(--muted);letter-spacing:.08em;text-transform:uppercase;font-size:12px}.login-title{margin-bottom:4px;font-size:26px}.login-desc{color:var(--ink-soft);margin-bottom:26px;font-size:14px}.field{margin-bottom:16px}.field label{color:var(--ink-soft);margin-bottom:6px;font-size:13px;font-weight:600;display:block}.field input,.field select{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface-2);width:100%;color:var(--ink);padding:11px 13px;font-size:15px;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px #b5562a26}.btn{border-radius:var(--radius-sm);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:10px 16px;font-size:14px;font-weight:600;transition:transform 80ms,background .15s,box-shadow .15s,border-color .15s;display:inline-flex}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{background:#1f1b15}.btn-block{width:100%;padding:12px;font-size:15px}.btn-ghost{background:var(--surface);border-color:var(--line-strong);color:var(--ink)}.btn-ghost:hover{background:var(--surface-2);border-color:var(--brand)}.btn-brand{background:var(--brand);color:#fff}.btn-brand:hover{background:var(--brand-deep)}.btn-sm{padding:6px 10px;font-size:13px}.btn-icon{border:1px solid var(--line);width:32px;height:32px;color:var(--ink-soft);background:0 0;border-radius:8px;padding:0}.btn-icon:hover{background:var(--surface-2);color:var(--ink);border-color:var(--line-strong)}.btn-icon.danger:hover{color:var(--expense);border-color:var(--expense);background:var(--expense-bg)}.alert{border-radius:var(--radius-sm);margin-bottom:16px;padding:10px 13px;font-size:14px}.alert-error{background:var(--expense-bg);color:var(--expense);border:1px solid #e6c3ba}.app-shell{min-height:100vh}.topbar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line);z-index:20;background:#fffdf8d9;justify-content:space-between;align-items:center;gap:16px;padding:18px 28px;display:flex;position:sticky;top:0}.topbar-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.user-chip{color:var(--ink-soft);align-items:center;gap:8px;padding-right:6px;font-size:13px;display:flex}.container{max-width:1180px;margin:0 auto;padding:28px}.page-head{margin-bottom:22px}.page-head h1{font-size:30px}.page-head p{color:var(--ink-soft);margin:4px 0 0}.view-tabs{background:var(--surface-2);border:1px solid var(--line);border-radius:999px;gap:4px;margin-top:16px;padding:4px;display:inline-flex}.view-tab{color:var(--ink-soft);background:0 0;border:none;border-radius:999px;padding:8px 18px;font-size:14px;font-weight:600;transition:background .15s,color .15s}.view-tab:hover{color:var(--ink)}.view-tab.active{background:var(--ink);color:var(--paper);box-shadow:var(--shadow-sm)}.week-note{color:var(--brand-deep);background:var(--brand-soft);border-radius:var(--radius-sm);border:1px solid #ecd6c6;align-items:center;gap:9px;margin-bottom:22px;padding:10px 14px;font-size:13.5px;display:flex}.week-note-icon{font-size:15px;line-height:1}.week-cell{color:var(--ink);font-weight:500}.filter-bar{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);flex-wrap:wrap;align-items:flex-end;gap:14px;margin-bottom:22px;padding:16px 18px;display:flex}.filter-bar .field{margin:0}.filter-bar .field input{background:var(--surface)}.filter-spacer{flex:1}.kpi-grid{grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:28px;display:grid}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:22px 22px 20px;position:relative;overflow:hidden}.kpi:after{content:"";background:var(--line-strong);width:4px;position:absolute;top:0;bottom:0;left:0}.kpi.income:after{background:var(--income)}.kpi.expense:after{background:var(--expense)}.kpi.profit:after{background:var(--gold)}.kpi-label{letter-spacing:.1em;text-transform:uppercase;color:var(--muted);align-items:center;gap:8px;font-size:12px;font-weight:600;display:flex}.kpi-value{font-family:var(--font-display);margin-top:10px;font-size:32px;font-weight:600;line-height:1.1}.kpi.income .kpi-value{color:var(--income)}.kpi.expense .kpi-value{color:var(--expense)}.kpi.profit .kpi-value.pos{color:var(--income)}.kpi.profit .kpi-value.neg{color:var(--expense)}.kpi-foot{color:var(--ink-soft);margin-top:8px;font-size:13px}.tables-grid{grid-template-columns:1fr 1fr;gap:22px;display:grid}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.panel-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:16px 18px;display:flex}.panel-head h2{align-items:center;gap:9px;font-size:18px;display:flex}.dot{border-radius:50%;width:9px;height:9px;display:inline-block}.dot.income{background:var(--income)}.dot.expense{background:var(--expense)}.panel-total{color:var(--ink-soft);font-size:13px;font-weight:600}.table-scroll{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px}thead th{text-align:left;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);background:var(--surface-2);border-bottom:1px solid var(--line);white-space:nowrap;-webkit-user-select:none;user-select:none;padding:11px 16px;font-size:12px;font-weight:700}th.sortable{cursor:pointer}th.sortable:hover{color:var(--ink)}th .sort-ind{opacity:.4;margin-left:5px;font-size:10px}th.sorted .sort-ind{opacity:1;color:var(--brand)}th.num,td.num{text-align:right}th.actions-col,td.actions-col{text-align:right;white-space:nowrap;width:1%}tbody td{border-bottom:1px solid var(--line);color:var(--ink);vertical-align:middle;padding:12px 16px}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:var(--surface-2)}td.amount{font-weight:600}.income td.amount{color:var(--income)}.expense td.amount{color:var(--expense)}td.desc{color:var(--ink-soft);max-width:260px}.row-actions{gap:6px;display:inline-flex}.empty{text-align:center;color:var(--muted);padding:34px 16px;font-size:14px}.modal-overlay{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:50;background:#281e1273;place-items:center;padding:20px;animation:.15s fade;display:grid;position:fixed;inset:0}@keyframes fade{0%{opacity:0}}.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:100%;max-width:460px;box-shadow:var(--shadow-lg);animation:.18s cubic-bezier(.2,.8,.3,1.2) pop;overflow:hidden}.modal.wide{max-width:720px}@keyframes pop{0%{opacity:0;transform:translateY(10px)scale(.98)}}.modal-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:18px 22px;display:flex}.modal-head h3{font-size:20px}.modal-body{padding:22px}.modal-foot{border-top:1px solid var(--line);background:var(--surface-2);justify-content:flex-end;gap:10px;padding:16px 22px;display:flex}.close-x{width:32px;height:32px;color:var(--muted);background:0 0;border:none;border-radius:8px;font-size:20px;line-height:1}.close-x:hover{background:var(--surface-2);color:var(--ink)}.log-list{max-height:60vh;overflow-y:auto}.log-item{border-bottom:1px solid var(--line);gap:14px;padding:14px 22px;display:flex}.log-item:last-child{border-bottom:none}.log-badge{letter-spacing:.05em;text-transform:uppercase;border-radius:999px;flex-shrink:0;height:fit-content;padding:4px 9px;font-size:11px;font-weight:700}.log-badge.create{background:var(--income-bg);color:var(--income)}.log-badge.update{color:var(--gold);background:#f3ead2}.log-badge.delete{background:var(--expense-bg);color:var(--expense)}.log-main{flex:1;min-width:0}.log-detail{color:var(--ink);word-break:break-word;font-size:14px}.log-meta{color:var(--muted);flex-wrap:wrap;gap:12px;margin-top:4px;font-size:12px;display:flex}.tag{text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:700}.tag.income{color:var(--income)}.tag.expense{color:var(--expense)}.chart-panel{margin-bottom:28px}.chart-legend{color:var(--ink-soft);gap:16px;font-size:13px;display:flex}.legend-item{align-items:center;gap:7px;display:flex}.chart-body{padding:18px 18px 8px}.chart-svg{width:100%;height:auto;display:block}.chart-grid{stroke:var(--line);stroke-width:1px}.chart-axis-line{stroke:var(--line-strong);stroke-width:1px}.chart-axis-y{fill:var(--muted);font-size:11px;font-family:var(--font-body);text-anchor:end}.chart-axis-x{fill:var(--ink-soft);font-size:12px;font-family:var(--font-body);text-anchor:middle;font-weight:600}.bar-income{fill:var(--income);transition:opacity .15s}.bar-expense{fill:var(--expense);transition:opacity .15s}.bar-income:hover,.bar-expense:hover{opacity:.82}.pagination{border-top:1px solid var(--line);background:var(--surface-2);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.pagination-info{color:var(--ink-soft);font-size:13px}.pagination-controls{align-items:center;gap:8px;display:flex}.page-btn{border:1px solid var(--line-strong);background:var(--surface);min-width:32px;height:32px;color:var(--ink);border-radius:8px;padding:0 10px;font-size:13px;font-weight:600}.page-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.page-btn:disabled{opacity:.4;cursor:not-allowed}.page-current{color:var(--ink-soft);text-align:center;min-width:96px;font-size:13px}@media (width<=880px){.kpi-grid,.tables-grid{grid-template-columns:1fr}.container{padding:18px}.topbar{padding:14px 18px}}
