:root{--bg: #f3efe8;--card: #ffffff;--field: #ffffff;--ink: #2b2118;--mut: #6f6457;--line: #e8e0d3;--field-line: #8f8373;--pri: #ff9a2e;--pri-hover: #f58a14;--pri-grad: linear-gradient(135deg, #ffc15a, #ff9a2e);--pri-grad-hover: linear-gradient(135deg, #ffb73d, #f58a14);--on-pri: #2b1a05;--pri-soft: #ffe9c7;--pri-text: #9a5200;--ring: #b86400;--red: #b42318;--red-bg: #fde8e4;--grn: #067647;--grn-bg: #dff5e5;--amb: #93370d;--amb-bg: #fff0cc;--stripe: rgb(255 255 255 / .5);--shadow: 0 2px 6px rgb(60 40 10 / .08);--brand-black: #121212;--brand-orange: #ff8a00;--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;--fs-xs: .8125rem;--fs-sm: .875rem;--fs-base: 1rem;--fs-md: 1.0625rem;--fs-lg: 1.375rem;--fs-xl: 1.75rem;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-pill: 999px;--tap: 44px;color-scheme:light}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:var(--sp-4)}body{margin:0;background:var(--bg);color:var(--ink);font:var(--fs-base) / 1.5 var(--font);padding:env(safe-area-inset-top,0) env(safe-area-inset-right,0) env(safe-area-inset-bottom,0) env(safe-area-inset-left,0)}h1,h2,h3{margin:0;line-height:1.25}h2{font-size:var(--fs-md);font-weight:700;margin-bottom:var(--sp-3)}button,input,select{font:inherit}button{cursor:pointer}:focus-visible{outline:3px solid var(--ring);outline-offset:2px}.wrap{max-width:960px;margin:0 auto;padding:var(--sp-4)}.app-header{display:flex;justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-4)}.skip-link{position:absolute;left:var(--sp-2);top:-100px;z-index:30;padding:var(--sp-2) var(--sp-4);border-radius:var(--radius-sm);background:var(--pri-grad);color:var(--on-pri);font-weight:700;text-decoration:none}.skip-link:focus{top:var(--sp-2)}.register-grid>.card{margin-bottom:var(--sp-4)}@media (min-width: 860px){.register-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:var(--sp-4);align-items:start}.register-grid>.card{margin-bottom:0}}@media (min-width: 640px){.wrap{padding:var(--sp-5)}}.brand{display:inline-block;padding:6px 14px;background:var(--brand-black);border:1px solid var(--line);border-radius:10px;font-size:1.375rem;font-weight:800;letter-spacing:.2px}.brand .k1{color:var(--brand-orange)}.brand .k2{color:#fff}.tag{margin:var(--sp-1) 0 0;color:var(--mut);font-size:var(--fs-sm)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-4);border:1px solid var(--field-line);border-radius:var(--radius-sm);background:var(--card);color:var(--ink);font-size:var(--fs-sm);font-weight:600;transition:background-color .15s,border-color .15s}.btn:hover{background:var(--bg)}.btn-primary{width:100%;margin-top:var(--sp-4);border-color:transparent;border-radius:var(--radius-pill);background:var(--pri-grad);color:var(--on-pri);font-size:var(--fs-base);font-weight:700}.btn-primary:hover{background:var(--pri-grad-hover)}.btn-danger{border-color:var(--red);color:var(--red)}.btn-danger:hover{background:var(--red-bg)}.tabs{position:static;display:flex;gap:var(--sp-1);margin-bottom:var(--sp-4);padding:var(--sp-1);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-pill);box-shadow:var(--shadow)}.tabs button{flex:1;min-height:var(--tap);border:0;border-radius:var(--radius-pill);background:none;color:var(--mut);font-weight:600;transition:background-color .15s,color .15s}.tabs button:hover{background:var(--bg);color:var(--ink)}.tabs button[aria-current=page]{background:var(--pri-grad);color:var(--on-pri)}.card{margin:0 0 var(--sp-4);padding:var(--sp-4);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.card-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-2)}.card-head h2{margin:0}.actions{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.empty{margin:0;padding:var(--sp-4);color:var(--mut);text-align:center}.stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3);margin:0 0 var(--sp-4)}.stat{margin:0;padding:var(--sp-4);background:var(--card);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.stat dt{color:var(--mut);font-size:var(--fs-sm)}.stat dd{margin:2px 0 0;font-size:clamp(1.125rem,5vw,1.5rem);font-weight:700;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.card .stats{margin-bottom:0}.card .stat{background:var(--bg);box-shadow:none}.is-pos{color:var(--grn)}.is-neg{color:var(--red)}@media (min-width: 640px){.stats-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 720px){.stats-4{grid-template-columns:repeat(4,minmax(0,1fr))}}label{display:block;margin:0 0 var(--sp-1);font-size:var(--fs-sm);font-weight:600}.field{margin-top:var(--sp-3)}input,select{width:100%;min-height:var(--tap);padding:10px var(--sp-3);border:1px solid var(--field-line);border-radius:var(--radius-sm);background:var(--field);color:var(--ink)}.row2{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}.hint,.field-error{margin:var(--sp-1) 0 0;font-size:var(--fs-xs)}.hint{color:var(--mut)}.field-error{color:var(--red);font-weight:600}.amount-wrap{display:flex;align-items:center;background:var(--field);border:1px solid var(--field-line);border-radius:var(--radius-sm)}.amount-wrap:focus-within{outline:3px solid var(--ring);outline-offset:2px}.amount-wrap.is-invalid{border:2px solid var(--red)}.amount-cur{padding-left:var(--sp-3);color:var(--mut);font-size:var(--fs-lg);font-weight:700}.amount-wrap input{min-height:52px;border:0;background:transparent;outline:0;font-size:var(--fs-xl);font-weight:700;font-variant-numeric:tabular-nums}.form-status{min-height:1.5em;margin:var(--sp-3) 0 0;color:var(--grn);font-size:var(--fs-sm);font-weight:600}.seg{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-2)}.seg button{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:56px;padding:var(--sp-2);border:2px solid var(--field-line);border-radius:var(--radius-md);background:var(--field);color:var(--ink);font-weight:700;line-height:1.25}.seg button small{color:var(--mut);font-size:var(--fs-xs);font-weight:500}.seg button[aria-pressed=true]{border-color:currentColor}.seg button[aria-pressed=true] small{color:inherit}.seg button[aria-pressed=true]>span:before{content:"✓ "}.seg .is-sale[aria-pressed=true]{background:var(--grn-bg);color:var(--grn)}.seg .is-expense[aria-pressed=true]{background:var(--red-bg);color:var(--red)}.tx-list{margin:0;padding:0;list-style:none}.tx{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--sp-2);padding:var(--sp-2) 0;border-bottom:1px solid var(--line)}.tx:last-child{border-bottom:0}.tx-title{display:block;font-weight:600;overflow-wrap:anywhere}.tx-meta{display:block;color:var(--mut);font-size:var(--fs-xs)}.tx-meta time{white-space:nowrap}.tx-amount{font-variant-numeric:tabular-nums;white-space:nowrap}.tx-delete{width:var(--tap);height:var(--tap);border:0;border-radius:var(--radius-sm);background:none;color:var(--mut);font-size:1.5rem;line-height:1}.tx-delete:hover{background:var(--red-bg);color:var(--red)}@media (max-width: 400px){.tx{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"main del" "amt del";row-gap:0}.tx>div{grid-area:main}.tx-amount{grid-area:amt}.tx-delete{grid-area:del}}.month-group h3{margin:var(--sp-4) 0 var(--sp-1);padding-bottom:var(--sp-1);border-bottom:2px solid var(--line);color:var(--mut);font-size:var(--fs-sm);font-weight:700}.tips{display:grid;gap:var(--sp-2);margin:0;padding:0;list-style:none}.tip{padding:var(--sp-3);border-left:4px solid var(--tip, var(--pri));border-radius:var(--radius-sm);background:var(--tip-bg, var(--pri-soft));font-size:var(--fs-sm)}.tip-label{display:block;margin-bottom:2px;color:var(--tip, var(--pri-text));font-size:var(--fs-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.tip.good{--tip: var(--grn);--tip-bg: var(--grn-bg)}.tip.warn{--tip: var(--amb);--tip-bg: var(--amb-bg)}.tip.bad{--tip: var(--red);--tip-bg: var(--red-bg)}.chart-scale{margin:0 0 var(--sp-1);color:var(--mut);font-size:var(--fs-xs);text-align:right}.chart-plot{display:flex;gap:var(--sp-2);height:190px;border-bottom:1px solid var(--field-line);background-image:linear-gradient(to bottom,var(--line) 1px,transparent 1px);background-size:100% 25%}.chart-col{display:flex;flex:1;flex-direction:column;justify-content:flex-end;min-width:0;height:100%}.chart-bars{display:flex;flex:1;align-items:flex-end;justify-content:center;gap:3px}.bar{display:block;width:40%;max-width:32px;min-height:2px;border-radius:4px 4px 0 0}.bar-rev,.swatch-rev{background:var(--grn)}.bar-exp,.swatch-exp{background-color:var(--red);background-image:repeating-linear-gradient(135deg,var(--stripe) 0 3px,transparent 3px 7px)}.chart-labels{display:flex;gap:var(--sp-2);margin-top:var(--sp-1)}.chart-labels span{flex:1;min-width:0;color:var(--mut);font-size:var(--fs-xs);text-align:center}.chart-legend{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin:var(--sp-3) 0 0;color:var(--mut);font-size:var(--fs-sm)}.chart-legend span{display:inline-flex;align-items:center;gap:6px}.swatch{width:14px;height:14px;border-radius:3px}.chart-details{margin-top:var(--sp-3);font-size:var(--fs-sm)}.chart-details summary{display:inline-block;padding:var(--sp-2) 0;color:var(--pri-text);font-weight:600;cursor:pointer}.table-wrap{overflow-x:auto}.table-wrap table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.table-wrap th,.table-wrap td{padding:var(--sp-2);border-bottom:1px solid var(--line);text-align:left}.table-wrap .num{text-align:right}.note{margin:var(--sp-4) 0 0;color:var(--mut);font-size:var(--fs-xs)}.card .note{margin-bottom:0}.header-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--sp-2)}.user-name{display:none;max-width:14rem;overflow:hidden;color:var(--mut);font-size:var(--fs-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 640px){.user-name{display:inline}}.auth-page{max-width:460px;margin:0 auto}.auth-layout{display:grid;gap:var(--sp-4)}.auth-aside{display:none}.auth-aside p{margin:0 0 var(--sp-4);color:var(--mut)}.auth-aside h2{font-size:var(--fs-lg);margin-bottom:var(--sp-2)}.auth-benefits{display:grid;gap:var(--sp-3);margin:0;padding:0;list-style:none;font-weight:600}.auth-benefits li{display:flex;gap:var(--sp-3)}.auth-benefits li:before{content:"✓";color:var(--pri-text);font-weight:800}.auth-note{margin-top:var(--sp-3);text-align:center}@media (min-width: 640px){.auth-page{padding-top:var(--sp-5)}}@media (min-width: 860px){.auth-page{max-width:920px}.auth-layout{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--sp-5);align-items:start}.auth-aside{display:block;order:-1;padding:var(--sp-5)}}.tabs.auth-tabs{position:static;margin-bottom:var(--sp-5);background:var(--bg);box-shadow:none}.auth-tabs button:hover{background:var(--line)}.auth-tabs button[aria-current=page],.auth-tabs button[aria-current=page]:hover{background:var(--pri-grad);color:var(--on-pri)}.auth-title{font-size:var(--fs-lg);margin-bottom:var(--sp-1)}.auth-sub{margin:0 0 var(--sp-2);color:var(--mut);font-size:var(--fs-sm)}.auth-fieldset{min-width:0;margin:0;padding:0;border:0}.auth-callout{margin-top:var(--sp-3)}.auth-back{margin-top:var(--sp-3);text-align:center}input[aria-invalid=true]{border:2px solid var(--red)}input[type=checkbox][aria-invalid=true]{outline:2px solid var(--red);outline-offset:2px}.pw-wrap{display:flex;align-items:center;background:var(--field);border:1px solid var(--field-line);border-radius:var(--radius-sm)}.pw-wrap:focus-within{outline:3px solid var(--ring);outline-offset:2px}.pw-wrap.is-invalid{border:2px solid var(--red)}.pw-wrap input,.pw-wrap input[aria-invalid=true]{min-width:0;border:0;background:transparent;outline:0}.pw-toggle{display:inline-flex;flex:none;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);border:0;border-radius:var(--radius-sm);background:none;color:var(--mut);transition:background-color .15s,color .15s}.pw-toggle:hover{background:var(--bg);color:var(--ink)}.check{display:flex;align-items:flex-start;gap:var(--sp-3);margin:0;padding:11px 0;font-weight:500;cursor:pointer}.check input{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:grid;place-content:center;flex:none;width:22px;min-height:0;height:22px;margin:0;padding:0;border:2px solid var(--field-line);border-radius:6px;background:var(--field)}.check input:checked{border-color:transparent;background:var(--pri-grad)}.check input:checked:after{content:"✓";color:var(--on-pri);font-size:14px;font-weight:800;line-height:1}.auth-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-1) var(--sp-3);margin-top:var(--sp-2)}.auth-row .check{padding:0;min-height:var(--tap);align-items:center}.link-btn{min-height:var(--tap);padding:0 var(--sp-2);border:0;border-radius:var(--radius-sm);background:none;color:var(--pri-text);font-size:var(--fs-sm);font-weight:600;text-decoration:underline;text-underline-offset:3px}.link-btn:hover{background:var(--pri-soft)}.strength{--lvl: var(--red);display:flex;align-items:center;gap:var(--sp-3);margin-top:var(--sp-2)}.strength[data-level="2"]{--lvl: var(--amb)}.strength[data-level="3"],.strength[data-level="4"]{--lvl: var(--grn)}.strength-bar{display:grid;flex:1;grid-template-columns:repeat(4,1fr);gap:var(--sp-1)}.strength-bar i{height:6px;border-radius:3px;background:var(--line)}.strength-bar i.on{background:var(--lvl)}.strength-label{color:var(--mut);font-size:var(--fs-xs);font-weight:600}.terms-details{margin-top:0}.terms-body{max-height:168px;overflow-y:auto;padding:var(--sp-3);background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--mut);font-size:var(--fs-xs)}.terms-body p{margin:0 0 var(--sp-2)}.terms-body p:last-child{margin-bottom:0}.settings-section{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--line)}.settings-section h3{margin-bottom:var(--sp-1);font-size:var(--fs-md);font-weight:700}.role-badge{display:inline-block;margin-left:var(--sp-2);padding:2px var(--sp-2);border-radius:var(--radius-sm);background:var(--pri-soft);color:var(--pri-text);font-size:var(--fs-xs);font-weight:700}.btn:disabled{cursor:not-allowed}.btn-primary:disabled,.btn-primary:disabled:hover{background:var(--pri-grad);opacity:.75}.spinner{width:18px;height:18px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation:none}}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@media (prefers-reduced-motion: reduce){*{transition:none!important}}.budget-week-controls{display:grid;grid-template-columns:auto minmax(150px,1fr) auto;align-items:end;gap:var(--sp-2);margin-top:var(--sp-4)}.budget-week-controls .btn{white-space:nowrap}.budget-date-field{margin:0}.budget-range{margin:var(--sp-3) 0 0;color:var(--mut);font-size:var(--fs-sm);font-weight:600}.budget-starting-cash{max-width:440px}.budget-stats{margin-top:var(--sp-4)}.budget-projection{margin:0;font-size:clamp(1.8rem,7vw,2.5rem);font-weight:800;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}.budget-warning{margin:var(--sp-3) 0 0;padding:var(--sp-3);border-radius:var(--radius-sm);background:var(--red-bg);color:var(--red);font-weight:700}.budget-type-toggle{margin:var(--sp-3) 0 var(--sp-4)}.budget-form-actions{margin-top:var(--sp-4)}.budget-form-actions .btn-primary{width:auto;margin-top:0}.budget-list{margin-top:var(--sp-2)}.budget-entry{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--line)}.budget-entry:last-child{border-bottom:0}.budget-entry-main{min-width:0}.budget-entry-actions{justify-content:flex-end}.budget-entry-actions .btn{min-height:36px;padding:0 var(--sp-2)}.budget-page .card-head{align-items:flex-start}@media (max-width: 600px){.budget-week-controls{grid-template-columns:1fr 1fr}.budget-date-field{grid-column:1 / -1;grid-row:1}.budget-entry{grid-template-columns:minmax(0,1fr) auto;gap:var(--sp-2)}.budget-entry-actions{grid-column:1 / -1;justify-content:flex-start}}@media (max-width: 400px){.budget-week-controls .btn{padding:0 var(--sp-2);font-size:var(--fs-xs)}}.filter-bar{display:grid;grid-template-columns:1fr;gap:var(--sp-3);margin-top:var(--sp-3)}.filter-bar label{margin-bottom:var(--sp-1)}@media (min-width: 640px){.filter-bar{grid-template-columns:repeat(3,minmax(0,1fr))}.filter-search{grid-column:1 / -1}}@media (min-width: 860px){.filter-bar{grid-template-columns:repeat(3,minmax(0,1fr))}}.filter-status-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-top:var(--sp-3)}.filter-status{min-height:1.5em;margin:0;color:var(--mut);font-size:var(--fs-sm);font-weight:600}.history-results{min-height:200px}.btn:disabled:not(.btn-primary){opacity:.55}
