:root,:root[data-theme=dark]{--bg: #0d100e;--surface: #151a17;--surface-2: #1b211d;--surface-3: #232b26;--outline: #37322f;--outline-strong: #4e4642;--text: #ece7e6;--muted: #a89e9c;--primary: #a8284c;--on-primary: #ffffff;--primary-text: #ef8199;--primary-container: #3e1522;--primary-weak: #2c1a1f;--accent: #bda0ff;--accent-container: #2c2450;--danger: #ef5b5b;--warn: #f0b64b;--state: rgba(255, 255, 255, .06);--state-strong: rgba(255, 255, 255, .11);--shadow-1: 0 1px 2px rgba(0, 0, 0, .5);--shadow-2: 0 4px 14px rgba(0, 0, 0, .45);--shadow-3: 0 16px 40px rgba(0, 0, 0, .55);color-scheme:dark}:root[data-theme=light]{--bg: #f4f7f3;--surface: #ffffff;--surface-2: #eef2ec;--surface-3: #e3e9e2;--outline: #e3dcdd;--outline-strong: #ccc0c2;--text: #201417;--muted: #6b585c;--primary: #8a1d3d;--on-primary: #ffffff;--primary-text: #8a1d3d;--primary-container: #f6dae1;--primary-weak: #fbe9ee;--accent: #6d3ce0;--accent-container: #ece3ff;--danger: #c62f2f;--warn: #9a6a00;--state: rgba(0, 0, 0, .045);--state-strong: rgba(0, 0, 0, .08);--shadow-1: 0 1px 2px rgba(20, 40, 30, .1);--shadow-2: 0 4px 16px rgba(20, 40, 30, .12);--shadow-3: 0 18px 44px rgba(20, 40, 30, .18);color-scheme:light}:root{--r-xs: 6px;--r-sm: 8px;--r: 12px;--r-lg: 16px;--font: "Inter", "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;min-height:100dvh;overflow-x:hidden}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.4;letter-spacing:.005em;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}button{font-family:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.app{max-width:680px;margin:0 auto;min-height:100dvh;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom,12px)}.app-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:max(env(safe-area-inset-top,0px),16px) 20px 14px;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);border-bottom:1px solid transparent}.brand{display:flex;align-items:center;gap:12px;min-width:0}.logo{width:38px;height:38px;border-radius:9px;display:block;box-shadow:var(--shadow-1)}.app-header h1{margin:0;font-size:21px;font-weight:750;letter-spacing:-.02em;line-height:1.05}.subtitle{margin:2px 0 0;font-size:12.5px;color:var(--muted);font-weight:500}.header-right{display:flex;flex-direction:column;align-items:flex-end;gap:8px}.header-top{display:flex;gap:8px;align-items:center}.sync-status{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;letter-spacing:.01em;padding:5px 10px 5px 8px;border-radius:var(--r-xs);background:var(--surface-2);color:var(--muted);border:1px solid var(--outline);white-space:nowrap}.sync-status .dot{width:7px;height:7px;border-radius:50%;background:var(--muted)}.sync-status.ok .dot{background:var(--primary-text)}.sync-status.syncing .dot{background:var(--warn);animation:pulse 1s infinite}.sync-status.offline .dot{background:var(--danger)}@keyframes pulse{50%{opacity:.3}}.icon-btn{border:1px solid var(--outline);background:var(--surface-2);border-radius:var(--r-sm);width:38px;height:38px;font-size:16px;display:inline-flex;align-items:center;justify-content:center;color:var(--text);transition:background .12s}.icon-btn:active{background:var(--state-strong)}.user-btn{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;padding:6px 11px;border-radius:var(--r-xs);background:var(--primary-weak);color:var(--primary-text);border:1px solid transparent;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.banner{margin:0 20px 10px;padding:11px 14px;font-size:13px;background:color-mix(in srgb,var(--warn) 16%,var(--surface));border:1px solid color-mix(in srgb,var(--warn) 40%,transparent);color:var(--text);border-radius:var(--r)}.banner code{background:var(--state-strong);padding:1px 5px;border-radius:5px;font-size:12px}.app-main{padding:12px 20px 40px;flex:1}.addbar{position:relative;margin-bottom:18px}.addbar-form{display:flex;gap:10px;position:relative}.addbar-input{flex:1;padding:14px 16px;font-size:16px;border-radius:var(--r-sm);border:1.5px solid var(--outline);background:var(--surface);color:var(--text);transition:border-color .12s,box-shadow .12s}.addbar-input::placeholder{color:var(--muted)}.addbar-input:focus{outline:none;border-color:var(--primary-text);box-shadow:0 0 0 3px var(--primary-weak)}.addbar-btn{padding:0 22px;font-size:14.5px;font-weight:650;border:none;border-radius:var(--r-sm);background:var(--primary);color:var(--on-primary);box-shadow:var(--shadow-1);transition:filter .12s,transform .06s}.addbar-btn:active{transform:translateY(1px);filter:brightness(.94)}.suggest-dropdown{position:absolute;top:calc(100% + 6px);left:0;right:0;margin:0;padding:6px;list-style:none;background:var(--surface);border:1px solid var(--outline);border-radius:var(--r);z-index:30;box-shadow:var(--shadow-3)}.suggest-row{width:100%;display:flex;justify-content:space-between;align-items:center;padding:12px;background:none;border:none;color:var(--text);font-size:15px;border-radius:var(--r-xs);text-align:left}.suggest-row:active{background:var(--state-strong)}.suggest-cat{font-size:11.5px;color:var(--muted);font-weight:500}.chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px}.chips-label{font-size:12px;color:var(--muted);width:100%;font-weight:600;letter-spacing:.02em}.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 13px;font-size:13.5px;font-weight:550;border-radius:var(--r-sm);border:1px solid var(--outline);background:var(--surface);color:var(--text);transition:background .12s,border-color .12s}.chip:active{background:var(--state-strong)}.chip-ai{border-color:transparent;background:var(--accent-container);color:var(--accent)}.chip-cat{font-size:10.5px;color:var(--muted)}.smart{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:4px}.smart-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 16px;font-size:14px;font-weight:650;border-radius:var(--r-sm);border:1px solid transparent;background:var(--accent-container);color:var(--accent)}.smart-btn:disabled{opacity:.5}.smart-hint,.smart-error{font-size:12px;color:var(--muted)}.smart-error{color:var(--danger)}.smart-chips{width:100%}.tools{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0 22px}.tool-btn{display:inline-flex;align-items:center;gap:7px;padding:10px 15px;font-size:13.5px;font-weight:600;border-radius:var(--r-sm);border:1px solid var(--outline);background:var(--surface);color:var(--text);transition:background .12s}.tool-btn:active{background:var(--state-strong)}.tool-btn:disabled{opacity:.5}.lists-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px;padding-bottom:4px}.list-chip{display:inline-flex;align-items:center;gap:6px;padding:9px 15px;font-size:14px;font-weight:650;border-radius:var(--r-sm);border:1px solid var(--outline);background:var(--surface);color:var(--muted);transition:all .12s}.list-chip.on{background:var(--primary);color:var(--on-primary);border-color:var(--primary-text);box-shadow:var(--shadow-1)}.list-chip.add{color:var(--text);font-size:17px;padding:9px 13px}.list-edit{opacity:.9;font-size:15px}.search-toggle{display:inline-flex;align-items:center;gap:7px;padding:9px 15px;font-size:13px;font-weight:600;border-radius:var(--r-sm);border:1px solid var(--outline);background:var(--surface);color:var(--muted);margin-bottom:16px}.search-toggle.open{color:var(--primary-text);border-color:var(--primary-text);background:var(--primary-weak)}.list-toolbar{display:flex;gap:8px;margin-bottom:16px}.list-toolbar .search-toggle{margin-bottom:0}.listbar{margin-bottom:18px}.simple-items{list-style:none;margin:0;padding:0 2px}.srow{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--outline)}.srow:last-child{border-bottom:none}.srow-main{display:flex;align-items:center;gap:12px;flex:1;cursor:pointer;min-width:0}.srow-main input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:20px;height:20px;flex-shrink:0;border:2px solid var(--outline-strong);border-radius:6px;background:transparent;position:relative;transition:all .12s}.srow-main input[type=checkbox]:checked{background:var(--primary);border-color:var(--primary)}.srow-main input[type=checkbox]:checked:after{content:"";position:absolute;left:5px;top:1.5px;width:5px;height:10px;border:solid var(--on-primary);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}.srow-name{font-size:15px}.srow.done .srow-name{text-decoration:line-through;text-decoration-color:var(--muted);color:var(--muted)}.srow-qty{color:var(--muted);font-size:12px;margin-left:7px}.srow-del{border:none;background:none;color:var(--muted);width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;opacity:.55}.search-input{width:100%;padding:12px 14px;font-size:15px;border-radius:var(--r-sm);border:1.5px solid var(--outline);background:var(--surface);color:var(--text);margin-bottom:12px}.search-input:focus{outline:none;border-color:var(--primary-text);box-shadow:0 0 0 3px var(--primary-weak)}.filter-row{display:flex;flex-wrap:wrap;gap:7px;align-items:center}.filter-chip{padding:7px 12px;font-size:12px;font-weight:600;border-radius:var(--r-sm);border:1px solid var(--outline);background:var(--surface);color:var(--muted);min-height:34px}.filter-chip.on{background:var(--primary-container);color:var(--primary-text);border-color:transparent}.filter-sep{width:1px;height:20px;background:var(--outline);margin:0 3px}.cat-group{margin-bottom:16px}.cat-title{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;text-align:left;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin:0 0 12px;padding:4px 2px;cursor:pointer}.cat-count{font-size:11px;font-weight:700;background:var(--surface-2);color:var(--muted);padding:2px 9px;border-radius:999px;letter-spacing:0}.cat-caret{margin-left:auto;color:var(--muted);transition:transform .18s;padding:2px 4px;display:inline-flex;align-items:center}.cat-caret.collapsed{transform:rotate(-90deg)}.cat-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px}.row-swipe{position:relative;overflow:hidden;border-radius:var(--r)}.row-actions{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:space-between;align-items:center;padding:0 20px;font-size:13.5px;font-weight:700;letter-spacing:.02em}.row-actions .act-check,.row-actions .act-del{display:inline-flex;align-items:center;gap:6px}.row-actions .act-del{margin-left:auto}.row-swipe.swipe-check .row-actions{background:var(--primary);color:var(--on-primary)}.row-swipe.swipe-del .row-actions{background:var(--danger);color:#fff}.row{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px 6px;padding:8px 12px;background:var(--surface);border:1px solid var(--outline);border-radius:var(--r);box-shadow:var(--shadow-1);touch-action:pan-y;transition:transform .15s ease,opacity .15s}.row.done .row-main,.row.done .row-controls,.row.done .drag-handle{opacity:.5}.drag-handle{display:inline-flex;align-items:center;justify-content:center;width:18px;height:34px;color:var(--muted);cursor:grab;touch-action:none;flex-shrink:0;margin:-6px -4px}body.reordering{-webkit-user-select:none;user-select:none}body.reordering .row{cursor:grabbing}.row-main{display:flex;align-items:center;gap:10px;flex:1 1 52%;min-width:52%;cursor:pointer}.row-main input[type=checkbox]{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:22px;height:22px;flex-shrink:0;border:2px solid var(--outline-strong);border-radius:7px;background:transparent;position:relative;transition:all .12s}.row-main input[type=checkbox]:checked{background:var(--primary);border-color:var(--primary-text)}.row-main input[type=checkbox]:checked:after{content:"";position:absolute;left:6px;top:2px;width:6px;height:11px;border:solid var(--on-primary);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}.row-text{display:flex;flex-direction:column;gap:1px;min-width:0;overflow:hidden}.row-name{font-size:15px;font-weight:550;display:flex;align-items:baseline;gap:6px;min-width:0}.row-nametext{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.row.done .row-nametext{text-decoration:line-through;text-decoration-color:var(--muted)}.row-unit{font-size:11.5px;color:var(--muted);font-weight:500;flex-shrink:0}.row-price{font-size:11px;font-weight:700;color:var(--primary-text);background:var(--primary-weak);padding:1px 6px;border-radius:6px;cursor:pointer;flex-shrink:0}.row-meta{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);overflow:hidden;white-space:nowrap}.row-by{flex-shrink:0}.row-claim{color:var(--accent);font-weight:600;display:inline-flex;align-items:center;gap:3px;flex-shrink:0}.row-note{font-style:italic;overflow:hidden;text-overflow:ellipsis}.row-controls{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}.qty-stepper{display:inline-flex;align-items:stretch;border:1px solid var(--outline);border-radius:var(--r-sm);overflow:hidden;background:var(--surface-2)}.qty-btn{width:29px;height:31px;border:none;background:transparent;color:var(--text);font-size:18px;line-height:1;display:grid;place-items:center}.qty-btn:active{background:var(--state-strong)}.qty-val{min-width:24px;display:grid;place-items:center;font-size:14px;font-weight:650;border-inline:1px solid var(--outline)}.mini-btn{border:none;background:var(--surface-2);color:var(--muted);width:31px;height:31px;border-radius:var(--r-sm);display:inline-flex;align-items:center;justify-content:center;transition:background .12s,color .12s}.mini-btn:active{background:var(--state-strong)}.mini-btn.active{color:var(--primary-text);background:var(--primary-weak)}.mini-btn.danger:active{color:var(--danger)}.row-expand{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;margin-top:6px;background:var(--surface-2);border:1px solid var(--outline);border-radius:var(--r-sm)}.note-input{flex:1 1 160px;padding:9px 12px;font-size:13.5px;border-radius:var(--r-xs);border:1px solid var(--outline);background:var(--surface);color:var(--text)}.budget-total{display:flex;justify-content:space-between;align-items:center;margin-top:16px;padding:16px;border-radius:var(--r);background:var(--primary-container);border:1px solid transparent;font-weight:650;font-size:15px}.budget-total .amount{color:var(--primary-text);font-size:18px;font-weight:750}.clear-btn{width:100%;margin-top:10px;padding:13px;font-size:13.5px;font-weight:600;border-radius:var(--r-sm);border:1px solid var(--outline);background:transparent;color:var(--muted)}.clear-btn:active{background:var(--state)}.empty{text-align:center;padding:44px 20px;color:var(--muted)}.empty-emoji{margin:0 0 12px;display:flex;justify-content:center;color:var(--muted);opacity:.8}.empty p{margin:4px 0}.empty-hint{font-size:13px}.skeleton-list{display:flex;flex-direction:column;gap:10px}.skeleton-row{height:66px;border-radius:var(--r);background:linear-gradient(90deg,var(--surface) 25%,var(--surface-2) 50%,var(--surface) 75%);background-size:200% 100%;animation:shimmer 1.3s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.onboard{background:var(--surface);border:1px solid var(--outline);border-radius:var(--r);padding:18px 18px 16px;margin-bottom:18px;box-shadow:var(--shadow-1)}.onboard-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}.onboard-head h3{margin:0;font-size:17px;font-weight:700}.onboard-logo{border-radius:7px}.onboard-tips{list-style:none;margin:0 0 14px;padding:0;display:flex;flex-direction:column;gap:12px}.onboard-tips li{display:flex;gap:11px;font-size:13px;align-items:center}.onboard-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:24px;color:var(--primary-text)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0000008c;display:flex;align-items:flex-end;justify-content:center;padding:0;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal{width:100%;max-width:520px;background:var(--surface);border:1px solid var(--outline);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:22px 22px calc(22px + env(safe-area-inset-bottom,0px));box-shadow:var(--shadow-3);animation:sheet-up .2s ease}@keyframes sheet-up{0%{transform:translateY(24px);opacity:.6}}@media (min-width: 560px){.modal-overlay{align-items:center;padding:20px}.modal{border-radius:var(--r-lg)}}.modal h2{margin:0 0 6px;font-size:20px;font-weight:700;letter-spacing:-.01em}.modal-sub{margin:0 0 16px;font-size:13px;color:var(--muted)}.modal-input{width:100%;padding:13px 14px;font-size:16px;border-radius:var(--r-sm);border:1.5px solid var(--outline);background:var(--surface-2);color:var(--text)}.modal-input:focus{outline:none;border-color:var(--primary-text);box-shadow:0 0 0 3px var(--primary-weak)}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.modal-btn{padding:11px 20px;font-size:14.5px;font-weight:650;border:none;border-radius:var(--r-sm);background:var(--primary);color:var(--on-primary)}.modal-btn:disabled{opacity:.5}.modal-btn.ghost{background:transparent;border:1px solid var(--outline);color:var(--text)}.modal-list{max-height:54vh;overflow-y:auto;margin:0 -4px;padding:0 4px}.staple-row{display:flex;align-items:center;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--outline)}.staple-row:last-child{border-bottom:none}.staple-add{display:flex;gap:8px;margin-top:14px}.row-actions-btns{display:flex;align-items:center;gap:4px}.toast-wrap{position:fixed;left:0;right:0;bottom:calc(env(safe-area-inset-bottom,0px) + 18px);display:flex;flex-direction:column;align-items:center;gap:8px;padding:0 16px;z-index:60;pointer-events:none}.toast{pointer-events:auto;max-width:520px;width:fit-content;display:flex;align-items:center;gap:16px;padding:13px 16px;border-radius:var(--r-sm);font-size:14px;font-weight:500;background:var(--surface-3);color:var(--text);border:1px solid var(--outline);box-shadow:var(--shadow-3)}.toast-msg{cursor:pointer}.toast-error{background:color-mix(in srgb,var(--danger) 22%,var(--surface-3));border-color:color-mix(in srgb,var(--danger) 45%,transparent)}.toast-action{border:none;background:transparent;color:var(--primary-text);font-weight:750;font-size:13.5px;padding:6px 8px;border-radius:6px;flex-shrink:0}
