:root{--cream:#fbf7f0;--oat:#f1e9dc;--latte:#d9c7b2;--kraft:#c9a97e;--terracotta:#b9674a;--brick:#8e3b2f;--sage:#8a9a7b;--moss:#5f6f52;--mocha:#3e2f25;--muted:#8c7b70;--paper:#fdfbf7;--line:rgba(140,123,112,0.22)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--oat);color:var(--mocha);font-family:Nunito,-apple-system,Segoe UI,system-ui,sans-serif;font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}a{color:var(--terracotta)}.shell{max-width:1100px;margin:0 auto;padding:28px 22px 64px}.masthead{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}.wordmark{font-size:22px;font-weight:800;letter-spacing:-.01em}.wordmark span{color:var(--terracotta)}nav.tabs{display:flex;gap:6px;flex-wrap:wrap}nav.tabs a{padding:6px 14px;border-radius:999px;text-decoration:none;color:var(--muted);font-weight:600;font-size:14px}nav.tabs a.on{color:var(--mocha);box-shadow:0 1px 3px rgba(62,47,37,.1)}.card,nav.tabs a.on{background:var(--paper)}.card{border-radius:18px;padding:22px;box-shadow:0 6px 18px rgba(62,47,37,.08);margin-bottom:18px}.card h2{font-size:15px;letter-spacing:.02em;margin-bottom:4px}.card .sub{color:var(--muted);font-size:13px;margin-bottom:16px}.grid{display:grid;grid-gap:18px;gap:18px}@media (min-width:860px){.grid.two{grid-template-columns:340px 1fr}}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));grid-gap:12px;gap:12px}.stat{background:var(--paper);border-radius:14px;padding:14px 16px;box-shadow:0 4px 12px rgba(62,47,37,.06)}.stat .k{font-size:11px;text-transform:uppercase;letter-spacing:.16em;color:var(--muted)}.stat .v{font-size:24px;font-weight:800;margin-top:4px}.pill{display:inline-flex;align-items:center;gap:7px;padding:5px 13px;border-radius:999px;font-size:13px;font-weight:700}.pill .dot{width:8px;height:8px;border-radius:50%;background:currentColor}.pill.open{background:rgba(138,154,123,.2);color:var(--moss)}.pill.connecting{background:rgba(201,169,126,.28);color:#7a5a24}.pill.closed{background:rgba(185,103,74,.16);color:var(--brick)}.pill.logged_out{background:rgba(142,59,47,.16);color:var(--brick)}.qr{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}.qr img{width:260px;height:260px;border-radius:12px;background:#fff;padding:10px}.qr .steps{color:var(--muted);font-size:13px;text-align:left;max-width:300px}.qr .steps li{margin-left:18px;margin-bottom:3px}.code{font-family:Courier Prime,ui-monospace,monospace;font-size:30px;letter-spacing:.3em;font-weight:700;background:var(--oat);padding:14px 18px;border-radius:12px}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.btn,button{font:inherit;font-weight:700;font-size:14px;border:none;cursor:pointer;padding:9px 18px;border-radius:999px;background:var(--terracotta);color:var(--cream)}button:disabled{opacity:.5;cursor:not-allowed}button.ghost{background:transparent;color:var(--muted);box-shadow:inset 0 0 0 1.5px var(--line)}button.danger{background:var(--brick)}input:not([type=checkbox]):not([type=radio]),select,textarea{font:inherit;width:100%;padding:11px 14px;border-radius:12px;border:1.5px solid var(--line);background:var(--cream);color:var(--mocha)}input:focus,select:focus,textarea:focus{outline:2px solid var(--kraft);outline-offset:1px}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);font-weight:700;padding:0 10px 8px;white-space:nowrap}td{padding:10px;border-top:1px solid var(--line);vertical-align:top}td.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;white-space:nowrap}.empty{color:var(--muted);padding:18px 0;text-align:center}.empty,.error{font-size:14px}.error{background:rgba(142,59,47,.1);color:var(--brick);padding:10px 14px;border-radius:12px}.note{color:var(--muted);font-size:12.5px}.file-error{color:var(--brick);font-weight:600}.login{max-width:360px;margin:14vh auto}.login .card{padding:26px}.setup{max-width:1080px}.setup .masthead{margin-bottom:18px}.setup-grid{display:grid;grid-gap:20px;gap:20px;align-items:start}.preview{order:-1}@media (min-width:900px){.setup-grid{grid-template-columns:1fr 340px}.preview{order:0;position:-webkit-sticky;position:sticky;top:24px}}.field{display:block;margin-bottom:14px}.field>span{display:block;margin-bottom:6px;font-size:12px;font-weight:700;letter-spacing:.04em;color:var(--muted)}.field textarea{resize:vertical}.two-up{display:grid;grid-gap:0 12px;gap:0 12px;grid-template-columns:1fr}@media (min-width:560px){.two-up{grid-template-columns:1fr 1fr}}.check{display:flex;align-items:center;gap:9px;padding:10px 0 18px;font-size:14px}.check input{width:18px;height:18px;accent-color:var(--terracotta)}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{background:var(--cream);color:var(--mocha);box-shadow:inset 0 0 0 1.5px var(--line);padding:8px 15px;font-size:14px;font-weight:600;display:inline-flex;align-items:center;gap:7px}.chip.on{background:var(--terracotta);color:var(--cream);box-shadow:none}.chip.locked{opacity:.55;cursor:not-allowed}.chip .lock{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;background:var(--kraft);color:var(--mocha);padding:2px 6px;border-radius:999px}.swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));grid-gap:10px;gap:10px}.swatch{background:transparent;padding:6px;border-radius:12px;display:flex;flex-direction:column;align-items:center;gap:6px;box-shadow:inset 0 0 0 1.5px transparent}.swatch i{display:block;width:100%;height:40px;border-radius:9px;border:2.5px solid}.swatch small{font-size:11px;color:var(--muted);font-weight:600}.swatch.on{box-shadow:inset 0 0 0 2px var(--terracotta)}.swatch.on small{color:var(--mocha)}.swatch.locked{opacity:.45;cursor:not-allowed}.submit{width:100%;padding:14px;font-size:16px}.preview-inner{background:var(--paper);border-radius:18px;padding:16px;box-shadow:0 6px 18px rgba(62,47,37,.08);text-align:center}.preview-label{font-size:11px;text-transform:uppercase;letter-spacing:.16em;color:var(--muted);margin-bottom:10px}.preview img{width:100%;border-radius:12px}input[type=file]{padding:9px 12px;font-size:13.5px;background:var(--cream);cursor:pointer}input[type=file]::-webkit-file-upload-button{font:inherit;font-weight:700;font-size:13px;border:none;cursor:pointer;margin-right:10px;padding:6px 13px;border-radius:999px;background:var(--latte);color:var(--mocha)}input[type=file]::file-selector-button{font:inherit;font-weight:700;font-size:13px;border:none;cursor:pointer;margin-right:10px;padding:6px 13px;border-radius:999px;background:var(--latte);color:var(--mocha)}input[type=file]:disabled{opacity:.5;cursor:not-allowed}.field small.note{display:block;margin-top:6px}.lock-inline{font-style:normal;font-size:10px;letter-spacing:.1em;text-transform:uppercase;background:var(--kraft);color:var(--mocha);padding:2px 6px;border-radius:999px;margin-left:6px}.preview img{transition:opacity .18s ease}.preview img.loading{opacity:.45}.spinner{display:inline-block;width:11px;height:11px;margin-left:8px;vertical-align:-1px;border-radius:50%;border:2px solid var(--latte);border-top-color:var(--terracotta);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.preview-zoom{width:100%;margin-top:12px;background:transparent;color:var(--muted);box-shadow:inset 0 0 0 1.5px var(--line);font-size:13.5px;padding:8px}.preview-fab{right:16px;bottom:18px;z-index:40;display:inline-flex;gap:7px;padding:11px 18px;font-size:14px;box-shadow:0 6px 18px rgba(62,47,37,.28)}.preview-fab,.preview-modal{position:fixed;align-items:center}.preview-modal{inset:0;z-index:50;background:rgba(43,43,43,.62);display:flex;justify-content:center;padding:16px;animation:fade .16s ease}@keyframes fade{0%{opacity:0}to{opacity:1}}.preview-sheet{background:var(--paper);border-radius:18px;width:min(460px,100%);max-height:92vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 18px 44px rgba(62,47,37,.34)}.preview-sheet-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border-bottom:1px solid var(--line);font-size:13px;font-weight:700;color:var(--muted);letter-spacing:.1em;text-transform:uppercase}.preview-sheet-bar button{background:transparent;color:var(--terracotta);padding:6px 12px;font-size:13.5px}.preview-sheet-body{overflow:auto;padding:14px;-webkit-overflow-scrolling:touch}.preview-sheet-body img{width:100%;border-radius:12px;display:block}@media (min-width:900px){.preview-fab,.preview-zoom{display:none}}@media (max-width:899px){.preview-inner img{max-height:38vh;width:auto;max-width:100%;margin:0 auto;object-fit:contain}.setup{padding-bottom:84px}}.receipt-image{width:100%;border-radius:12px;display:block;box-shadow:0 4px 14px rgba(62,47,37,.1)}.raw{font-family:Courier Prime,ui-monospace,monospace;font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word;background:var(--cream);border-radius:12px;padding:12px 14px;color:var(--mocha)}.chat{display:flex;flex-direction:column;gap:10px;max-height:460px;overflow-y:auto}.bubble{max-width:86%}.bubble.in{align-self:flex-start}.bubble.out{align-self:flex-end;text-align:right}.bubble-body{display:inline-block;padding:9px 13px;border-radius:14px;font-size:13.5px;line-height:1.5;text-align:left}.bubble.in .bubble-body{background:var(--oat);border-bottom-left-radius:4px}.bubble.out .bubble-body{background:rgba(185,103,74,.14);border-bottom-right-radius:4px}.bubble-text{white-space:pre-wrap;word-break:break-word;display:block}.bubble-text.muted{color:var(--muted)}.bubble-media{max-width:180px;border-radius:9px;display:block}.bubble-meta{font-size:10.5px;color:var(--muted);margin-top:3px;padding:0 4px}.receipt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));grid-gap:12px;gap:12px}.receipt-tile{text-decoration:none;color:var(--mocha);font-size:12px}.receipt-tile img{width:100%;border-radius:10px;display:block;margin-bottom:5px;box-shadow:0 3px 10px rgba(62,47,37,.1)}.receipt-tile-blank{aspect-ratio:3/4;border-radius:10px;background:var(--oat);display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:11px;margin-bottom:5px;text-align:center}.receipt-tile em{display:block;font-style:normal;color:var(--muted);font-size:11px}