:root{--bg: #f3ebe0;--bg-deep: #e7dcc9;--ink: #1c2a22;--ink-muted: #4d5f54;--brand: #1f4d3a;--brand-strong: #163829;--accent: #c4a35a;--surface: rgba(255, 252, 246, .72);--line: rgba(28, 42, 34, .12);--danger: #8b2e2e;--income: #1f4d3a;--expense: #8b2e2e;--shadow: 0 18px 40px rgba(28, 42, 34, .08);--font-display: "Fraunces", Georgia, serif;--font-body: "Source Sans 3", "Segoe UI", sans-serif;--radius: 14px;color:var(--ink);background:radial-gradient(circle at top left,rgba(196,163,90,.18),transparent 40%),linear-gradient(160deg,var(--bg) 0%,var(--bg-deep) 100%);font-family:var(--font-body);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;min-height:100%}body{margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{min-height:100dvh;display:grid;grid-template-rows:auto 1fr}.topbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.45rem 1rem;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#f3ebe0b3}.brand-mark{font-family:var(--font-display);font-size:1.05rem;font-weight:700;letter-spacing:-.02em;color:var(--brand);line-height:1}.nav-links{display:flex;gap:.75rem;align-items:center;font-size:.9rem}.nav-links a{color:var(--ink-muted)}.topbar .btn.ghost{padding:.25rem .4rem;font-size:.9rem}.topbar .muted{font-size:.85rem}.nav-links a.active{color:var(--brand);font-weight:700}.calendar-switcher{display:inline-flex;align-items:center;gap:.35rem;font-size:.85rem}.calendar-switcher select{max-width:10rem;padding:.2rem .35rem;font:inherit}.page{width:min(1100px,calc(100% - 2rem));margin:0 auto;padding:1.5rem 0 3rem}.calendar-page{width:min(1280px,calc(100% - 1.25rem));padding:0;display:flex;flex-direction:column;gap:0;box-sizing:border-box}.calendar-viewport{height:calc(100dvh - 2.75rem);min-height:320px;display:flex;flex-direction:column;gap:.35rem;padding:.5rem 0 .75rem;box-sizing:border-box;overflow:hidden}.calendar-chrome{flex:0 0 auto}.calendar-stage{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.calendar-page .month-header{margin-bottom:.35rem;gap:.5rem}.calendar-page .month-header h2{font-size:1.25rem}.calendar-page .btn.today-jump{padding:.15rem .55rem;font-size:.7rem}.calendar-page .month-header .btn{padding:.35rem .75rem;font-size:.85rem}.calendar-page .summary-strip{margin:.15rem 0 .35rem;gap:.5rem}.calendar-page .summary-strip strong{font-size:1.15rem}.calendar-page .summary-strip span{font-size:.75rem}.calendar-page .calendar-grid{flex:1 1 auto;min-height:0;height:100%;gap:.25rem;grid-template-rows:auto;grid-auto-rows:minmax(0,1fr);overflow:hidden}.calendar-page .weekday{font-size:.7rem;line-height:1.2}.calendar-page .day-cell{min-height:0;height:100%;overflow:hidden;padding:.15rem .25rem .25rem}.calendar-page .day-tx-stack{overflow:auto;scrollbar-width:thin;margin-top:.2rem;min-height:0;flex:1}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:flex;align-items:flex-start;justify-content:center;padding:4.5rem 1rem 1.5rem;overflow:auto;background:#1c2a2261;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.modal-dialog.day-panel{width:min(42rem,100%);margin:0 auto 2rem;animation:modal-in .16s ease-out}@keyframes modal-in{0%{opacity:0;transform:translateY(.55rem) scale(.98)}to{opacity:1;transform:none}}.day-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.85rem}.day-panel-header h3{margin:0}.btn.modal-close{flex:0 0 auto;width:2.1rem;height:2.1rem;padding:0;border-radius:999px;font-size:1.45rem;line-height:1;color:var(--ink-muted)}.btn.modal-close:hover{color:var(--ink);background:#1f4d3a14}.auth-screen{min-height:100vh;display:grid;place-items:center;padding:2rem 1rem;position:relative;overflow:hidden}.auth-screen:before{content:"";position:absolute;inset:8% 10% auto;height:55%;background:radial-gradient(circle at 20% 30%,rgba(31,77,58,.22),transparent 45%),radial-gradient(circle at 80% 20%,rgba(196,163,90,.28),transparent 40%);filter:blur(10px);pointer-events:none}.auth-panel{position:relative;width:min(420px,100%);text-align:center}.auth-panel h1{margin:0;font-family:var(--font-display);font-size:clamp(2.8rem,8vw,4rem);line-height:.95;color:var(--brand)}.auth-panel p{margin:.85rem 0 1.75rem;color:var(--ink-muted);font-size:1.05rem}.stack{display:grid;gap:.85rem;text-align:left}label{display:grid;gap:.35rem;font-size:.92rem;color:var(--ink-muted)}input,select,textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:.75rem .9rem;background:#fffcf6e6;color:var(--ink)}.btn{border:0;border-radius:999px;padding:.8rem 1.2rem;background:var(--brand);color:#f7f1e6;font-weight:700}.btn:hover{background:var(--brand-strong)}.btn.secondary{background:transparent;color:var(--brand);border:1px solid rgba(31,77,58,.25)}.btn.ghost{background:transparent;color:var(--ink-muted);padding-inline:.4rem}.error{color:var(--danger);font-size:.92rem}.muted{color:var(--ink-muted)}.summary-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin:1.25rem 0 1.75rem}.summary-strip div{padding:.2rem 0}.summary-strip span{display:block;color:var(--ink-muted);font-size:.85rem}.summary-strip strong{font-family:var(--font-display);font-size:1.6rem;font-weight:700}.summary-strip .income strong{color:var(--income)}.summary-strip .expense strong{color:var(--expense)}.month-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.month-header h2{margin:0;font-family:var(--font-display);font-size:2rem}.month-heading{display:flex;align-items:center;justify-content:center;gap:.65rem;min-width:0}.btn.today-jump{padding:.2rem .65rem;font-size:.78rem;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--brand);background:transparent;border:1px solid rgba(31,77,58,.28);border-radius:999px}.btn.today-jump:hover{background:#1f4d3a14;border-color:var(--brand)}.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.5rem}.weekday{text-align:center;color:var(--ink-muted);font-size:.8rem;text-transform:uppercase;letter-spacing:.04em}.day-cell{min-height:110px;border-top:1px solid var(--line);padding:.15rem .3rem .4rem}.day-button{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;width:100%;text-align:left;background:transparent;color:inherit;font:inherit;border:0;border-top:1px solid var(--line);border-radius:0;cursor:pointer}.day-button:hover{background:#1f4d3a0f}.day-button.drop-target{background:#c4a35a38;box-shadow:inset 0 0 0 2px var(--accent)}.day-button.selected{background:#1f4d3a24;box-shadow:inset 0 0 0 2px var(--brand)}.day-button.selected .date{color:var(--brand);font-weight:700}.day-button.today .date{display:inline-grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .2rem;border-radius:999px;background:var(--brand);color:#f7f1e8;font-weight:700}.day-button.today.selected .date{background:var(--brand-strong);color:#f7f1e8}.day-cell.empty{opacity:.35;pointer-events:none}.day-cell .date-row{display:flex;align-items:baseline;justify-content:space-between;gap:.35rem}.day-cell .date{font-size:.95rem;font-weight:600;line-height:1.15;color:var(--ink-muted);margin:0;padding:.05rem 0 0}.day-cell .day-running{font-size:.68rem;font-variant-numeric:tabular-nums;color:var(--ink-muted);white-space:nowrap}.day-tx-stack{margin-top:.25rem;flex:1;display:flex;flex-direction:column;gap:.15rem;min-height:0}.day-tx-item{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.25rem;font-size:.72rem;line-height:1.2;min-width:0;cursor:pointer;border-radius:4px;padding:.1rem .15rem}.day-tx-item .swatch{width:.45rem;height:.45rem;margin-right:0;flex-shrink:0}.day-tx-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-muted)}.day-tx-amount{font-variant-numeric:tabular-nums;font-weight:700;white-space:nowrap}.day-tx-item.in .day-tx-amount{color:var(--income)}.day-tx-item.out .day-tx-amount{color:var(--expense)}.day-tx-item:hover{background:#1f4d3a14}.day-tx-item:active{cursor:grabbing}.day-tx-item.dragging{opacity:.45}.panel{margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid var(--line)}.panel h3{margin:0 0 .85rem;font-family:var(--font-display)}.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;align-items:end}.color-field{min-width:0}.color-control{display:flex;align-items:center;gap:.55rem;min-height:2.85rem;padding:.35rem .65rem;border:1px solid var(--line);border-radius:10px;background:#fffcf6e6}.color-control input[type=color]{width:2.4rem;height:2.15rem;padding:0;border:1px solid var(--line);border-radius:8px;background:transparent;cursor:pointer;flex:0 0 auto}.color-control input[type=color]::-webkit-color-swatch-wrapper{padding:0}.color-control input[type=color]::-webkit-color-swatch{border:0;border-radius:6px}.color-control input[type=color]::-moz-color-swatch{border:0;border-radius:6px}.color-hex{font-size:.85rem;font-variant-numeric:tabular-nums;color:var(--ink);text-transform:lowercase}.list{list-style:none;margin:1rem 0 0;padding:0;display:grid;gap:.55rem}.list li{display:flex;justify-content:space-between;gap:1rem;padding:.55rem 0;border-bottom:1px solid var(--line)}.swatch{width:.75rem;height:.75rem;border-radius:999px;display:inline-block;margin-right:.45rem}.category-breakdown{list-style:none;margin:-.75rem 0 1.5rem;padding:0;display:grid;gap:.35rem}.category-breakdown li{display:flex;justify-content:space-between;gap:1rem;font-size:.92rem;padding:.2rem 0}.category-breakdown .in{color:var(--income)}.category-breakdown .out{color:var(--expense)}.day-panel{margin-top:1.25rem;padding:1.25rem 1.1rem 1.4rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow)}.day-panel .day-tx-list{margin:0 0 1.25rem}.day-tx-list li{cursor:default}.day-panel>h3:first-child,.day-panel-header+.muted,.day-panel-header+.day-tx-list{margin-top:0}.day-tx-list .in{color:var(--income);font-weight:700}.day-tx-list .out{color:var(--expense);font-weight:700}.tx-actions{display:flex;gap:.35rem;flex-shrink:0}.form-actions{display:flex;gap:.5rem;align-items:center}.category-picker-field{grid-column:1 / -1}.category-picker-empty{margin:0;min-height:2.65rem;display:flex;align-items:center}.category-picker{display:grid;gap:.7rem;padding:.7rem .8rem .8rem;border:1px solid var(--line);border-radius:10px;background:#fffcf6e6}.category-chip-group-label{display:block;margin-bottom:.4rem;font-size:.68rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-muted)}.category-chip-group.income .category-chip-group-label{color:var(--income)}.category-chip-group.expense .category-chip-group-label{color:var(--expense)}.category-chip-row{display:flex;flex-wrap:wrap;gap:.4rem}.category-chip{display:inline-flex;align-items:center;gap:.4rem;margin:0;padding:.38rem .75rem .38rem .5rem;border:1px solid var(--line);border-radius:999px;background:#fffcf6f2;color:var(--ink);font:inherit;font-size:.88rem;font-weight:600;line-height:1.2;cursor:pointer}.category-chip .swatch{width:.65rem;height:.65rem;margin-right:0;flex-shrink:0;box-shadow:inset 0 0 0 1px #1c2a221f}.category-chip:hover{border-color:color-mix(in srgb,var(--chip-color) 55%,var(--line));background:color-mix(in srgb,var(--chip-color) 10%,#fffaf2)}.category-chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.category-chip.selected{border-color:var(--chip-color);background:color-mix(in srgb,var(--chip-color) 18%,#fffaf2);box-shadow:0 0 0 2px color-mix(in srgb,var(--chip-color) 24%,transparent);font-weight:700}@media(max-width:720px){.summary-strip{grid-template-columns:1fr}.calendar-page .day-cell{min-height:0}.day-tx-label{display:none}.topbar{flex-wrap:wrap}}.repeat-badge{display:inline-block;margin-left:.35rem;padding:.1rem .45rem;border:1px solid rgba(31,77,58,.28);border-radius:999px;color:var(--brand);font-size:.72rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase}.checkbox-label{display:grid;gap:.35rem}.checkbox-control{display:flex;align-items:center;min-height:2.65rem;padding:0 .15rem;border:1px solid transparent;box-sizing:border-box}.checkbox-control input[type=checkbox]{width:1.1rem;height:1.1rem;margin:0;accent-color:var(--brand);flex-shrink:0}.inline-form{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;width:100%}.row-actions{display:flex;gap:.25rem;margin-left:auto}.amount-control{display:flex;align-items:center;gap:.2rem;min-width:0;border:1px solid var(--line);border-radius:10px;padding:0 .9rem 0 .75rem;background:#fffcf6e6}.amount-sign{flex:0 0 auto;font-weight:700;line-height:1}.amount-control.income .amount-sign{color:var(--income)}.amount-control.expense .amount-sign{color:var(--expense)}.amount-currency{flex:0 0 auto;color:var(--ink-muted);font-weight:600}.amount-control input{border:0;padding:.75rem 0;background:transparent;min-width:0;flex:1 1 auto}.amount-control input:focus{outline:none}.title-suggest{min-width:0}.title-suggest-list{position:fixed;z-index:60;margin:0;padding:.3rem;list-style:none;max-height:12rem;overflow:auto;border:1px solid var(--line);border-radius:10px;background:#fffaf2;box-shadow:var(--shadow)}.title-suggest-list li{margin:0}.title-suggest-option{display:block;width:100%;margin:0;padding:.5rem .7rem;border:0;border-radius:8px;background:transparent;color:var(--ink);font:inherit;font-weight:600;text-align:left}.title-suggest-option:hover,.title-suggest-option.active{background:#1f4d3a1a}
