:root{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif;line-height:1.6;color:#000;background:#fff;--c-accent: #2563eb;--c-text: #000;--c-muted: #6b7280;--c-border: #000;--c-border-light: #e5e7eb;--c-bg: #fff;--c-bg-soft: #f9fafb}*{box-sizing:border-box}body{margin:0;background:#fff;color:var(--c-text);-webkit-font-smoothing:antialiased}#root{max-width:960px;margin:0 auto;padding:0 0 3rem}.app-shell{display:flex;flex-direction:column}button,input,select{font:inherit}button{cursor:pointer;transition:opacity .12s,background .12s}button:disabled{opacity:.4;cursor:not-allowed}input:focus-visible,select:focus-visible{outline:2px solid var(--c-accent);outline-offset:1px}.hero{border-bottom:1px solid var(--c-border);padding:1rem 1.2rem 0;background:var(--c-bg)}.hero h1{margin:0 0 .75rem;font-size:1.15rem;font-weight:800;letter-spacing:-.02em}.view-tabs{display:grid;grid-template-columns:repeat(3,1fr);margin:0 -1.2rem}.view-tabs button{border:none;border-bottom:3px solid transparent;background:transparent;padding:.6rem .5rem;font-weight:600;font-size:.92rem;color:var(--c-muted);text-align:center}.view-tabs button.active{color:var(--c-text);border-bottom-color:var(--c-accent);font-weight:700}.view-tabs button:not(.active):hover{color:var(--c-text);background:var(--c-bg-soft)}.fab-bar{position:fixed;top:.55rem;right:.55rem;display:flex;gap:.35rem;z-index:100}.fab-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:#000;color:#fff;font-size:1.1rem;font-weight:700;text-decoration:none;box-shadow:0 2px 8px #0000002e;cursor:pointer;transition:transform .12s,box-shadow .12s}.fab-btn:hover{transform:scale(1.08);box-shadow:0 4px 14px #00000040}.fab-btn:disabled{opacity:.4;transform:none}.global-error{margin:0;color:#991b1b;background:#fef2f2;border-bottom:1px solid #fecaca;padding:.5rem 1.2rem;font-size:.85rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.global-error a{color:var(--c-accent);font-weight:700;text-decoration:underline}.error-retry{border:1px solid #fca5a5;border-radius:0;background:#fff;color:#991b1b;padding:.18rem .5rem;font-size:.8rem;font-weight:700}.editor-card,.transactions-card,.viz-card,.editor-placeholder,.simple-entry-card{background:var(--c-bg);border:1px solid var(--c-border);padding:1rem 1.2rem}.simple-entry-head{display:flex;align-items:center;justify-content:space-between;gap:.8rem;margin-bottom:.85rem}.simple-entry-head h2{margin:0;font-size:1rem;font-weight:700}.entry-mode-toggle{display:inline-flex;border:1px solid var(--c-border);overflow:hidden}.entry-mode-toggle button{border:0;background:transparent;color:var(--c-muted);padding:.38rem .85rem;font-weight:600;font-size:.88rem}.entry-mode-toggle button.active{background:var(--c-text);color:#fff}.simple-entry-card{border-left:none;border-right:none}.simple-form{display:flex;flex-direction:column;gap:.72rem;max-width:680px}.simple-form label{display:flex;flex-direction:column;gap:.22rem;font-size:.78rem;color:var(--c-muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.simple-form input,.simple-form select{border:1px solid var(--c-border);border-radius:0;padding:.55rem .65rem;font-size:.95rem;color:var(--c-text);background:var(--c-bg);transition:border-color .15s}.simple-form input:focus,.simple-form select:focus{border-color:var(--c-accent)}.simple-form input::placeholder{color:#9ca3af}.simple-form-actions{display:flex;justify-content:flex-end;margin-top:.25rem}.simple-form-actions button{border:none;padding:.52rem 1.2rem;font-weight:700;background:var(--c-text);color:#fff}.simple-form-actions button:hover{opacity:.85}.editor-card__head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.7rem}.editor-card__head h2,.transactions-card h2,.viz-card h2,.editor-placeholder h2{margin:0;font-size:.95rem;font-weight:700}.ghost{border:1px solid var(--c-border);background:var(--c-bg);border-radius:0;padding:.3rem .65rem;color:var(--c-text);font-weight:600;font-size:.82rem}.ghost:hover{background:var(--c-bg-soft)}.transaction-form{display:flex;flex-direction:column;gap:.85rem}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.7rem}.form-grid label{display:flex;flex-direction:column;gap:.22rem;font-size:.78rem;color:var(--c-muted);font-weight:600}.form-grid input,.form-grid select,.bulk-actions input,.bulk-actions select{border:1px solid var(--c-border);border-radius:0;padding:.42rem .55rem;font-size:.95rem;background:var(--c-bg)}.form-grid input:focus,.form-grid select:focus{border-color:var(--c-accent)}.inline-helper{margin-top:.25rem;width:fit-content;border:1px solid var(--c-border-light);padding:.2rem .5rem;background:var(--c-bg-soft);font-size:.82rem}.template-row,.suggest-row{display:flex;align-items:center;flex-wrap:wrap;gap:.3rem}.suggest-row span,.template-row span{font-size:.75rem;color:var(--c-muted);font-weight:600}.suggest-row button{border:1px solid var(--c-border);border-radius:0;background:var(--c-bg);color:var(--c-text);padding:.18rem .55rem;font-size:.78rem;font-weight:600}.suggest-row button:hover{background:var(--c-text);color:#fff}.template-row button{border:1px solid var(--c-border-light);border-radius:0;background:var(--c-bg-soft);color:var(--c-text);padding:.18rem .55rem;font-size:.78rem}.posting-list{display:flex;flex-direction:column;gap:.5rem}.posting-list__header{display:flex;align-items:center;justify-content:space-between}.posting-list__header h3{margin:0;font-size:.9rem;font-weight:700}.posting-header-buttons{display:flex;gap:.35rem}.posting-header-buttons button,.posting-row button,.form-submit button,.bulk-actions__right button,.conflict-retry button,.transaction-actions button{border:1px solid var(--c-border);border-radius:0;padding:.32rem .65rem;font-weight:600;font-size:.82rem;background:var(--c-bg);color:var(--c-text)}.posting-header-buttons button{background:var(--c-bg-soft)}.posting-row{display:grid;grid-template-columns:minmax(220px,2fr) minmax(120px,1fr) minmax(100px,.8fr) minmax(90px,.7fr);gap:.4rem}.posting-row input,.posting-row select{border:1px solid var(--c-border);border-radius:0;padding:.42rem .5rem;background:var(--c-bg)}.posting-row button{background:#fef2f2;color:#991b1b;border-color:#fca5a5}.posting-group{display:flex;flex-direction:column;gap:.45rem;border:1px solid var(--c-border-light);padding:.65rem;background:var(--c-bg-soft)}.posting-group h4{margin:0;font-size:.85rem;color:var(--c-muted);font-weight:600}.posting-group-actions,.posting-footer-actions{display:flex;flex-wrap:wrap;gap:.35rem}.posting-group-actions button,.posting-footer-actions button{border:1px solid var(--c-border-light);padding:.28rem .65rem;font-weight:600;background:var(--c-bg);color:var(--c-text)}.posting-empty{margin:0;color:var(--c-muted);font-size:.85rem}.form-submit{display:flex;justify-content:flex-end}.form-submit button{background:var(--c-text);color:#fff;border-color:var(--c-text)}.edit-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);gap:0}.edit-layout>*{border-bottom:1px solid var(--c-border)}.transactions-card table{width:100%;border-collapse:collapse;font-size:.9rem}.transactions-card th,.transactions-card td{text-align:left;border-bottom:1px solid var(--c-border-light);padding:.48rem .4rem;vertical-align:middle}.transactions-card thead th{font-size:.72rem;color:var(--c-muted);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.transactions-card tbody tr:hover{background:var(--c-bg-soft)}.transaction-list-head{margin-bottom:.45rem}.select-all-toggle{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--c-muted)}.transaction-list{display:flex;flex-direction:column}.transaction-item{display:grid;grid-template-columns:auto 1fr auto;gap:.65rem;align-items:center;border-bottom:1px solid var(--c-border-light);padding:.58rem 0}.transaction-item:hover{background:var(--c-bg-soft)}.transaction-item__left{display:flex;align-items:center}.transaction-item__main{min-width:0;display:flex;flex-direction:column;gap:.1rem}.transaction-item__top{display:flex;align-items:center;gap:.4rem}.transaction-item__title{font-weight:700;color:var(--c-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:.9rem}.tx-type{display:inline-flex;align-items:center;padding:.08rem .4rem;font-size:.68rem;font-weight:600;background:var(--c-bg-soft);color:var(--c-muted);border:1px solid var(--c-border-light)}.transaction-item__meta{display:flex;flex-wrap:wrap;gap:.4rem;font-size:.75rem;color:var(--c-muted)}.transaction-item__right{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem}.transaction-item__right strong{font-size:.9rem;font-weight:700}.bulk-actions{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.45rem;margin-bottom:.5rem}.bulk-actions__left,.bulk-actions__right{display:flex;align-items:center;gap:.3rem;flex-wrap:wrap}.bulk-actions__right button.danger{background:#fef2f2;color:#991b1b;border-color:#fca5a5}.transaction-actions{display:flex;align-items:center;gap:.35rem}.readonly-badge{display:inline-flex;align-items:center;padding:.12rem .45rem;background:#fef3c7;color:#92400e;font-size:.7rem;font-weight:600;border:1px solid #fde68a}.editor-placeholder p{margin-top:.55rem;color:var(--c-muted)}.visualize-layout{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0}.visualize-layout>.viz-card{border-bottom:1px solid var(--c-border)}.viz-filter{grid-column:1 / -1}.viz-overview{grid-column:1 / -1;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;border:1px solid var(--c-border)}.viz-kpi{background:var(--c-bg);border-right:1px solid var(--c-border-light);padding:.55rem .6rem;display:flex;flex-direction:column;gap:.1rem}.viz-kpi:last-child{border-right:none}.viz-kpi span{font-size:.65rem;color:var(--c-muted);text-transform:uppercase;letter-spacing:.05em;font-weight:600}.viz-kpi strong{font-size:1rem;color:var(--c-text);font-weight:800;line-height:1.2}.viz-card--wide{grid-column:1 / -1}.viz-filter-row{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-end}.viz-filter-row label{display:flex;flex-direction:column;gap:.18rem;font-size:.68rem;color:var(--c-muted);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.viz-filter-row select,.viz-filter-row input{border:1px solid var(--c-border);border-radius:0;padding:.32rem .5rem;background:var(--c-bg);min-width:130px}.viz-filter-row select:focus,.viz-filter-row input:focus{border-color:var(--c-accent)}.viz-card h2{margin-bottom:.6rem;font-size:.92rem;font-weight:700}.sankey-graph svg,.moneytree-graph svg{width:100%;height:auto}.sankey-node{font-size:10px;font-weight:700;fill:#000}.sankey-link-group{cursor:pointer}.sankey-link-group:hover path{stroke-opacity:.4}.moneytree-label{font-size:11px;fill:var(--c-muted)}.category-bars{display:flex;flex-direction:column;gap:.55rem}.category-head{display:flex;align-items:center;justify-content:space-between;font-size:.85rem;margin-bottom:.15rem}.category-track{height:8px;background:var(--c-bg-soft);border:1px solid var(--c-border-light);overflow:hidden}.category-fill{height:100%;background:var(--c-text);transition:width .5s ease}.payee-fill{height:100%;background:var(--c-muted);transition:width .5s ease}.flow-bars{display:flex;flex-direction:column;gap:.65rem}.flow-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.15rem;font-size:.85rem}.flow-track{height:8px;background:var(--c-bg-soft);border:1px solid var(--c-border-light);overflow:hidden;margin-bottom:.15rem}.flow-income{height:100%;background:var(--c-text)}.flow-expense{height:100%;background:var(--c-muted)}.payee-ranking{display:flex;flex-direction:column;gap:.5rem}.payee-head{display:flex;align-items:center;justify-content:space-between;font-size:.85rem;margin-bottom:.15rem}.heatmap-wrap{display:flex;flex-direction:column;gap:.5rem}.heatmap-grid{display:flex;flex-direction:column;gap:.25rem}.heatmap-row{display:grid;grid-template-columns:1.2rem 1fr;align-items:center;gap:.4rem}.heatmap-day{color:var(--c-muted);font-size:.7rem;font-weight:600}.heatmap-cells{display:grid;grid-auto-flow:column;grid-auto-columns:11px;gap:2px}.heatmap-cell{width:11px;height:11px;border:1px solid var(--c-border-light);padding:0;display:inline-block;transition:transform .12s}.heatmap-cell:hover{transform:scale(1.5);z-index:1}.heatmap-cell.l0{background:#f9fafb}.heatmap-cell.l1{background:#d1d5db}.heatmap-cell.l2{background:#6b7280}.heatmap-cell.l3{background:#374151}.heatmap-cell.l4{background:#000}.heatmap-legend{display:flex;align-items:center;gap:.4rem;color:var(--c-muted);font-size:.72rem}.heatmap-legend-scale{display:inline-flex;gap:2px}.budget-chart{display:flex;flex-direction:column;gap:.65rem}.budget-row{display:flex;flex-direction:column;gap:.2rem}.budget-head{display:flex;align-items:center;justify-content:space-between;font-size:.85rem}.budget-track{position:relative;height:10px;background:var(--c-bg-soft);border:1px solid var(--c-border-light);overflow:visible}.budget-fill{height:100%;background:var(--c-text);transition:width .5s ease}.budget-fill.over{background:#dc2626}.budget-forecast{position:absolute;top:-2px;width:2px;height:14px;background:var(--c-text)}.budget-forecast.over{background:#dc2626}.budget-meta{display:flex;flex-wrap:wrap;gap:.55rem;font-size:.72rem;color:var(--c-muted)}.sankey-graph,.moneytree-graph{overflow:hidden}.food-kpi-card{background:var(--c-bg-soft)!important}.food-kpi-card h2{font-size:.95rem;margin-bottom:.45rem}.food-kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:1px solid var(--c-border-light)}.food-kpi-grid .viz-kpi{border-right:1px solid var(--c-border-light)}.food-kpi-grid .viz-kpi:last-child{border-right:none}.viz-shortcut{background:var(--c-bg)!important;border:1px solid var(--c-text)!important;color:var(--c-text)!important;font-weight:700}.viz-shortcut:hover{background:var(--c-text)!important;color:#fff!important}.graph-empty{margin:0;color:var(--c-muted);font-size:.85rem}.conflict-retry{display:flex;justify-content:flex-start;padding:.4rem 1.2rem}.conflict-retry button{background:#fef3c7;color:#92400e;border-color:#fde68a}@media (max-width: 980px){.edit-layout,.visualize-layout{grid-template-columns:1fr}.posting-row{grid-template-columns:repeat(2,minmax(120px,1fr))}.simple-entry-head{flex-direction:column;align-items:flex-start}.viz-filter-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.viz-filter-row button.ghost,.viz-filter-row button.viz-shortcut{justify-self:start}}@media (max-width: 640px){#root{padding:0 0 2rem}.hero{padding:.75rem .85rem 0}.hero h1{font-size:1.05rem}.view-tabs{margin:0 -.85rem}.posting-row{grid-template-columns:1fr}.entry-mode-toggle{width:100%}.entry-mode-toggle button{flex:1}.transaction-item{grid-template-columns:auto 1fr;gap:.4rem;padding:.5rem 0}.transaction-item__right{grid-column:1 / -1;flex-direction:row;justify-content:space-between;align-items:center}.simple-form{gap:.55rem}.simple-form input,.simple-form select{min-height:42px}.simple-form-actions{justify-content:stretch}.simple-form-actions button{width:100%;min-height:44px;font-size:.95rem}.bulk-actions{flex-direction:column;align-items:stretch}.bulk-actions__left,.bulk-actions__right{width:100%;display:grid;grid-template-columns:1fr;gap:.35rem}.bulk-actions__left input,.bulk-actions__left select,.bulk-actions__right button{width:100%;min-height:38px}.suggest-row,.template-row{overflow-x:auto;white-space:nowrap;padding-bottom:.1rem;-webkit-overflow-scrolling:touch}.viz-filter-row{grid-template-columns:1fr}.viz-filter-row input,.viz-filter-row select{width:100%;min-width:0;min-height:38px}.viz-overview{grid-template-columns:repeat(2,1fr)!important}.viz-kpi{border-bottom:1px solid var(--c-border-light)}.heatmap-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.heatmap-grid{min-width:380px}.sankey-node{font-size:8px}.moneytree-label{display:none}.food-kpi-grid{grid-template-columns:1fr}.food-kpi-grid .viz-kpi{border-right:none;border-bottom:1px solid var(--c-border-light)}.editor-card,.transactions-card,.viz-card,.editor-placeholder,.simple-entry-card{padding:.7rem .85rem}}@media (max-width: 420px){.app-shell{gap:0}.hero{padding:.6rem .65rem 0}.hero h1{font-size:.95rem}.view-tabs{margin:0 -.65rem}.transaction-actions{width:100%}.transaction-actions button{width:100%;min-height:36px}.viz-kpi strong{font-size:.88rem}.category-head,.payee-head,.budget-head{font-size:.8rem}}:root{font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0;min-width:320px}button{font-family:inherit;cursor:pointer}
