:root{--teal: #1f8f8f;--green: #16a34a;--red: #dc2626;--amber: #d97706;--blue: #2563eb;--purple: #7c3aed;--bg: #f7f8fa;--bg2: #ffffff;--surface: #ffffff;--surface2: #f0f2f5;--border: #d0d7de;--border2: #e4e8ed;--text: #1f2328;--text2: #57606a;--text3: #8c959f;--positive: var(--green);--negative: var(--red);--warn: var(--amber);--info: var(--blue);--font-sans: "Sora", system-ui, -apple-system, sans-serif;--font-mono: "DM Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--s1: 4px;--s2: 8px;--s3: 12px;--s4: 16px;--s5: 24px;--s6: 32px;--s7: 48px;--r1: 6px;--r2: 10px;--r3: 14px;--shadow1: 0 1px 2px rgba(15,23,42,.06), 0 0 0 1px var(--border2);--shadow2: 0 4px 16px rgba(15,23,42,.1)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:15px;line-height:1.45;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;min-height:100vh}body{overscroll-behavior-y:contain}a{color:var(--teal);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit;font-size:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);padding:var(--s2) var(--s4);border-radius:var(--r1);cursor:pointer;transition:background .12s ease,border-color .12s ease,transform 80ms ease}button:hover:not(:disabled){background:var(--surface2);border-color:var(--text3)}button:active:not(:disabled){transform:scale(.98)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--teal);border-color:var(--teal);color:#fff;font-weight:600}button.primary:hover:not(:disabled){background:#176d6d;border-color:#176d6d}button.danger{border-color:var(--red);color:var(--red)}button.ghost{background:transparent;border-color:transparent}button.ghost:hover:not(:disabled){background:var(--surface);border-color:var(--border)}input,select,textarea{font-family:inherit;font-size:inherit;background:var(--bg2);color:var(--text);border:1px solid var(--border);border-radius:var(--r1);padding:var(--s2) var(--s3);width:100%;outline:none;transition:border-color .12s ease}input:focus,select:focus,textarea:focus{border-color:var(--teal)}input[type=number]{font-family:var(--font-mono)}.app-shell{max-width:720px;margin:0 auto;padding:0 0 88px;min-height:100vh}.screen{padding:var(--s4) var(--s4)}.screen h1{font-size:22px;font-weight:700;margin:var(--s2) 0 var(--s4) 0;letter-spacing:-.01em}.screen h2{font-size:16px;font-weight:600;color:var(--text2);margin:var(--s5) 0 var(--s2) 0;text-transform:uppercase;letter-spacing:.05em}.card{background:var(--surface);border:1px solid var(--border2);border-radius:var(--r2);padding:var(--s4);margin-bottom:var(--s3)}.row{display:flex;align-items:center;gap:var(--s3)}.row.between{justify-content:space-between}.row.wrap{flex-wrap:wrap}.stack{display:flex;flex-direction:column;gap:var(--s3)}.muted{color:var(--text2)}.tiny{font-size:12px}.mono{font-family:var(--font-mono)}.amount.pos{color:var(--positive)}.amount.neg{color:var(--negative)}.amount{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.pill{display:inline-block;padding:2px 10px;border-radius:999px;border:1px solid var(--border);font-size:12px;color:var(--text2);background:var(--surface)}.pill.pos{color:var(--positive);border-color:#16a34a59;background:#16a34a1f}.pill.neg{color:var(--negative);border-color:#dc262659;background:#dc26261a}.pill.warn{color:var(--warn);border-color:#d9770659;background:#d977061f}.pill.info{color:var(--info);border-color:#2563eb59;background:#2563eb1a}.bottom-nav{position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--border);padding:var(--s2) var(--s2) calc(var(--s2) + env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:repeat(5,1fr);gap:2px;z-index:50}.bottom-nav button{background:transparent;border:none;color:var(--text3);display:flex;flex-direction:column;align-items:center;gap:2px;font-size:11px;font-weight:500;padding:var(--s2) 0}.bottom-nav button.active{color:var(--teal)}.bottom-nav button .icon{font-size:18px;line-height:1}.toast{position:fixed;left:50%;bottom:calc(80px + env(safe-area-inset-bottom,0px));transform:translate(-50%);background:var(--surface2);border:1px solid var(--border);padding:var(--s3) var(--s4);border-radius:var(--r2);box-shadow:var(--shadow2);z-index:100;font-size:14px;max-width:calc(100vw - 32px)}.toast.success{border-color:var(--green)}.toast.error{border-color:var(--red)}.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--text3);border-top-color:var(--teal);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.full-spinner{display:flex;align-items:center;justify-content:center;min-height:60vh;flex-direction:column;gap:var(--s3);color:var(--text2)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a59;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:200;display:flex;align-items:flex-end;justify-content:center}.modal{background:var(--surface);border-top:1px solid var(--border);border-radius:var(--r3) var(--r3) 0 0;width:100%;max-width:720px;max-height:85vh;overflow-y:auto;padding:var(--s5) var(--s4) calc(var(--s5) + env(safe-area-inset-bottom,0px));animation:modalUp .22s ease-out}@keyframes modalUp{0%{transform:translateY(100%)}to{transform:none}}.modal h2{margin-top:0}.field{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--s3)}.field label{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--text2);font-weight:600}.table{width:100%;border-collapse:collapse;font-size:14px}.table th,.table td{text-align:left;padding:var(--s2) var(--s3);border-bottom:1px solid var(--border2)}.table th{color:var(--text2);font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.05em}.table tr:last-child td{border-bottom:none}.list-item{display:flex;align-items:center;gap:var(--s3);padding:var(--s3);border-bottom:1px solid var(--border2)}.list-item:last-child{border-bottom:none}.list-item .grow{flex:1;min-width:0}.list-item .grow>div:first-child{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-item .meta{font-size:12px;color:var(--text2)}.empty{text-align:center;padding:var(--s7) var(--s4);color:var(--text2)}.empty .icon{font-size:36px;margin-bottom:var(--s3)}.forecast-row.paid{opacity:.5}.forecast-row.skipped{opacity:.4;text-decoration:line-through}
