*{-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0}body{color:#14201a;-webkit-font-smoothing:antialiased;background:#f4f7f5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}#root{min-height:100vh}button{font-family:inherit}:root{--green:#00a650;--green-dark:#007a3b;--green-soft:#e6f6ec;--green-tint:#f1faf4;--ink:#13211a;--muted:#6b7d72;--line:#e6ebe7;--bg:#f3f6f4;--card:#fff;--danger:#d3462f;--shadow:0 1px 2px #13211a0f, 0 1px 3px #13211a0d;--shadow-lg:0 10px 30px #13211a29}*{box-sizing:border-box}.app{max-width:680px;padding-bottom:calc(84px + env(safe-area-inset-bottom));min-height:100vh;margin:0 auto}.splash{min-height:100vh;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:14px;font-weight:600;display:flex}.wordmark{align-items:center;gap:10px;min-width:0;display:flex}.wordmark-logo{object-fit:contain;flex-shrink:0;width:42px;height:42px}.wordmark-text{flex-direction:column;line-height:1;display:flex}.wordmark-brand{font-size:21px}.wordmark-list{letter-spacing:1.5px;text-transform:uppercase;color:#ffffffd9;font-size:11px;font-weight:700}.wordmark-brand{letter-spacing:-.3px;color:#fff;font-size:19px;font-weight:800}.auth{background:radial-gradient(120% 90% at 50% 0%, var(--green-tint), var(--bg));justify-content:center;align-items:center;min-height:100dvh;padding:24px 18px;display:flex}.auth-card{background:var(--card);border:1px solid var(--line);width:100%;max-width:400px;box-shadow:var(--shadow-lg);text-align:center;border-radius:26px;flex-direction:column;align-items:center;padding:34px 26px 26px;display:flex}.auth-title{letter-spacing:-.5px;margin:16px 0 6px;font-size:26px;font-weight:800}.auth-title.sm{margin-top:8px;font-size:21px}.auth-sub{color:var(--muted);margin:0 0 22px;font-size:15px;line-height:1.5}.auth-form{text-align:left;flex-direction:column;gap:10px;width:100%;display:flex}.auth-label{color:var(--muted);margin-left:2px;font-size:13px;font-weight:700}.auth-input{border:1px solid var(--line);background:#fbfdfc;border-radius:14px;width:100%;padding:15px 16px;font-size:16px}.auth-code{text-align:center;letter-spacing:8px;font-size:24px;font-weight:700}.auth-btn{color:#fff;background:var(--green);cursor:pointer;border:none;border-radius:14px;width:100%;margin-top:4px;padding:15px;font-size:16px;font-weight:700;transition:background .15s,transform .1s}.auth-btn:active{background:var(--green-dark);transform:scale(.985)}.auth-btn:disabled{opacity:.55}.auth-btn.ghost{color:var(--green-dark);border:1.5px solid var(--green);background:#fff}.auth-hint,.auth-sent{color:var(--muted);text-align:center;margin:6px 0 0;font-size:13px;line-height:1.5}.auth-sent{color:var(--ink);margin-bottom:8px;font-size:14.5px}.auth-link{color:var(--muted);cursor:pointer;background:0 0;border:none;align-self:center;padding:8px;font-size:14px;font-weight:600}.auth-error{color:var(--danger);margin-top:14px;font-size:14px;font-weight:600}.auth-signout{color:var(--muted);cursor:pointer;background:0 0;border:none;margin-top:20px;font-size:13px}.auth-emoji{margin-bottom:6px;font-size:46px}.auth-notice{color:var(--green-dark);text-align:center;margin-top:12px;font-size:13.5px;font-weight:600}.tabs{background:#eef2ef;border-radius:12px;gap:4px;width:100%;margin-bottom:18px;padding:4px;display:flex}.tab{color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:9px;flex:1;padding:10px;font-size:14px;font-weight:700}.tab.active{color:var(--green-dark);box-shadow:var(--shadow);background:#fff}.fld2{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.auth-divider{width:100%;color:var(--muted);align-items:center;gap:10px;margin:18px 0 14px;font-size:13px;display:flex}.auth-divider:before,.auth-divider:after{content:"";background:var(--line);flex:1;height:1px}.google-btn{border:1px solid var(--line);width:100%;color:var(--ink);cursor:pointer;background:#fff;border-radius:14px;justify-content:center;align-items:center;gap:10px;padding:13px;font-size:15px;font-weight:700;display:flex}.google-btn:active{background:#f7faf8}.topbar{z-index:20;padding:12px 16px;padding-top:max(12px, env(safe-area-inset-top));box-shadow:var(--shadow);background:linear-gradient(#00a650,#008f45);justify-content:space-between;align-items:center;gap:12px;display:flex;position:sticky;top:0}.household-btn{color:#fff;cursor:pointer;background:#ffffff29;border:1px solid #ffffff47;border-radius:999px;flex-shrink:0;align-items:center;gap:6px;max-width:45%;padding:8px 12px;font-size:14px;font-weight:700;display:flex}.household-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.household-caret{opacity:.8;font-size:11px}.netbar{color:var(--green-dark);background:var(--green-soft);align-items:center;gap:8px;padding:7px 18px;font-size:12.5px;font-weight:600;display:flex}.netbar.off{color:#9a6b00;background:#fff3d6}.netbar .dot{background:currentColor;border-radius:50%;width:8px;height:8px}.search{padding:14px 16px 4px;position:relative}.search-box{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;align-items:center;gap:8px;padding:4px 12px;display:flex}.search-box:focus-within{border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}.search-icon{opacity:.7;font-size:16px}.search-input{background:0 0;border:none;outline:none;flex:1;min-width:0;padding:13px 0;font-size:16px}.search-clear{color:var(--muted);cursor:pointer;background:#eef2ef;border:none;border-radius:50%;width:26px;height:26px;font-size:13px}.search-results{z-index:30;background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow-lg);border-radius:16px;max-height:62vh;padding:6px;position:absolute;top:calc(100% - 2px);left:16px;right:16px;overflow-y:auto}.search-empty{text-align:center;color:var(--muted);padding:18px;font-size:14px}.product{cursor:pointer;text-align:left;background:0 0;border:none;border-radius:12px;align-items:center;gap:12px;width:100%;padding:8px;display:flex}.product:active{background:var(--green-tint)}.product-img{object-fit:contain;background:#f6f8f6;border-radius:10px;flex-shrink:0;width:46px;height:46px}.product-img.placeholder,.row-img.placeholder{place-items:center;font-size:20px;display:grid}.product-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.product-name{color:var(--ink);font-size:15px;font-weight:600;line-height:1.25}.product-ref{color:var(--muted);font-size:12px}.product-price{color:var(--green-dark);flex-shrink:0;font-size:15px;font-weight:800}.search-free{background:var(--green-tint);width:100%;color:var(--green-dark);cursor:pointer;border:none;border-radius:12px;margin-top:4px;padding:13px;font-size:14px;font-weight:700}.search-free.subtle{color:var(--muted);background:0 0;font-size:13px;font-weight:600}.totals{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;align-items:center;margin:12px 16px 4px;padding:15px 18px;display:flex}.totals>div{flex-direction:column;flex:1;gap:3px;display:flex}.totals>.totals-sep{background:var(--line);flex:0 0 1px;align-self:stretch;width:1px;margin:0 10px}.totals-label{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;font-size:11.5px;font-weight:700}.totals-value{color:var(--ink);font-size:21px;font-weight:800}.totals-value.strong{color:var(--green-dark)}.list{padding:8px 12px}.group{margin-top:16px}.group-head{justify-content:space-between;align-items:center;display:flex}.group-title{color:var(--muted);text-transform:uppercase;letter-spacing:.6px;margin:0 0 7px 8px;font-size:12.5px;font-weight:800}.link-btn{color:var(--danger);cursor:pointer;background:0 0;border:none;padding:4px 6px;font-size:13px;font-weight:700}.row{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;align-items:center;gap:12px;margin-bottom:8px;padding:10px 12px;display:flex}.check{border:2px solid var(--green);color:#fff;cursor:pointer;background:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:30px;height:30px;font-size:16px;font-weight:800;transition:background .12s;display:grid}.row.done .check{background:var(--green)}.row-img{object-fit:contain;cursor:pointer;background:#f6f8f6;border-radius:10px;flex-shrink:0;width:44px;height:44px}.row-main{cursor:pointer;flex:1;min-width:0}.row-top{align-items:baseline;gap:8px;display:flex}.row-name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:15.5px;font-weight:600;line-height:1.3;overflow:hidden}.qty{color:var(--green-dark);background:var(--green-soft);border-radius:8px;flex-shrink:0;padding:1px 7px;font-size:12.5px;font-weight:800}.row-note{color:var(--muted);font-size:12.5px}.row-price{color:var(--ink);cursor:pointer;flex-shrink:0;font-size:15px;font-weight:800}.row.done{opacity:.6}.row.done .row-name{text-decoration:line-through;-webkit-text-decoration-color:var(--muted);text-decoration-color:var(--muted)}.cart .row{background:#fbfdfb}.empty{text-align:center;color:var(--muted);padding:64px 20px}.empty-emoji{margin:0 0 10px;font-size:46px}.empty p{margin:2px 0}.empty-sub{font-size:14px}.sheet-backdrop{z-index:50;background:#13211a73;justify-content:center;align-items:flex-end;animation:.15s fade;display:flex;position:fixed;inset:0}.sheet{background:var(--card);width:100%;max-width:680px;padding:10px 20px calc(24px + env(safe-area-inset-bottom));border-radius:24px 24px 0 0;max-height:88vh;animation:.22s cubic-bezier(.2,.8,.2,1) slideup;overflow-y:auto}.sheet-handle{background:var(--line);border-radius:3px;width:44px;height:5px;margin:6px auto 14px}.sheet-head{align-items:center;gap:12px;margin-bottom:14px;display:flex}.sheet-img{object-fit:contain;background:#f6f8f6;border-radius:10px;width:48px;height:48px}.sheet h3{margin:0;font-size:18px}.fld{color:var(--muted);flex-direction:column;gap:5px;margin-bottom:12px;font-size:13px;font-weight:700;display:flex}.fld input,.fld select{border:1px solid var(--line);color:var(--ink);background:#fbfdfc;border-radius:12px;padding:13px 12px;font-size:16px;font-weight:500}.fld-row{gap:12px;display:flex}.fld-row .fld{flex:1}.sheet-actions{gap:12px;margin-top:6px;display:flex}.btn-primary{background:var(--green);color:#fff;cursor:pointer;border:none;border-radius:14px;flex:2;padding:15px;font-size:16px;font-weight:700}.btn-primary:active{background:var(--green-dark)}.btn-danger{color:var(--danger);border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:14px;flex:1;padding:15px;font-size:15px;font-weight:700}.invite{background:var(--green-tint);border:1px solid var(--green-soft);border-radius:18px;flex-direction:column;align-items:center;gap:10px;margin-bottom:14px;padding:20px;display:flex}.invite-label{text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-size:12px;font-weight:700}.invite-code{letter-spacing:6px;color:var(--green-dark);font-size:34px;font-weight:800}.invite-share{flex:none;width:100%}.invite-hint{color:var(--muted);text-align:center;font-size:12.5px;line-height:1.4}.members{margin-bottom:14px}.member{align-items:center;gap:10px;padding:8px 4px;display:flex}.member-avatar{background:var(--green-soft);width:34px;height:34px;color:var(--green-dark);border-radius:50%;flex-shrink:0;place-items:center;font-size:15px;font-weight:800;display:grid}.member-name{color:var(--ink);font-size:15px;font-weight:600}.switcher{margin-bottom:12px}.switcher-label{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:6px 2px;font-size:12px;font-weight:700;display:block}.switcher-item{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;justify-content:space-between;align-items:center;width:100%;margin-bottom:6px;padding:13px 14px;font-size:15px;font-weight:600;display:flex}.switcher-item.active{border-color:var(--green);background:var(--green-tint)}.switcher-check{color:var(--green-dark);font-weight:800}.row-action{text-align:left;border:none;border-top:1px solid var(--line);width:100%;color:var(--ink);cursor:pointer;background:0 0;padding:14px 4px;font-size:15px;font-weight:600}.row-action.danger{color:var(--danger)}.toast{bottom:calc(24px + env(safe-area-inset-bottom));background:var(--ink);color:#fff;z-index:60;text-align:center;max-width:90vw;box-shadow:var(--shadow-lg);border-radius:999px;padding:12px 20px;font-size:14px;font-weight:600;animation:.2s fade;position:fixed;left:50%;transform:translate(-50%)}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes slideup{0%{transform:translateY(100%)}to{transform:translateY(0)}}.tabbar{z-index:40;padding:6px 8px calc(6px + env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(10px);border-top:1px solid var(--line);background:#fffffff0;justify-content:center;gap:4px;display:flex;position:fixed;bottom:0;left:0;right:0}.tab-item{max-width:200px;color:var(--muted);cursor:pointer;background:0 0;border:none;border-radius:12px;flex-direction:column;flex:1;align-items:center;gap:2px;padding:6px 4px 4px;font-size:11.5px;font-weight:700;display:flex;position:relative}.tab-item.active{color:var(--green-dark);background:var(--green-tint)}.tab-icon{font-size:20px;line-height:1}.tab-badge{background:var(--green);color:#fff;border-radius:9px;place-items:center;min-width:18px;height:18px;padding:0 5px;font-size:10.5px;font-weight:800;display:grid;position:absolute;top:2px;right:calc(50% - 26px)}.tab-badge.hot{background:#e8531f}.discover{padding:14px 12px 8px}.discover-head{justify-content:space-between;align-items:flex-start;gap:12px;padding:0 4px;display:flex}.discover-title{letter-spacing:-.4px;margin:0 0 3px;font-size:22px;font-weight:800}.discover-sub{color:var(--muted);margin:0;font-size:13.5px;line-height:1.4}.zone{background:var(--card);border:1px solid var(--line);cursor:pointer;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;flex-shrink:0;align-items:flex-end;gap:1px;padding:7px 10px;display:flex}.zone-label{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-size:10px;font-weight:700}.zone-value{color:var(--green-dark);white-space:nowrap;font-size:13px;font-weight:800}.zone-banner{border:1px dashed var(--green);background:var(--green-tint);width:100%;color:var(--green-dark);text-align:left;cursor:pointer;border-radius:14px;margin-top:12px;padding:12px 14px;font-size:13.5px;font-weight:600;line-height:1.4}.chips{scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:6px;padding:12px 2px 6px;display:flex;overflow-x:auto}.chips::-webkit-scrollbar{display:none}.chip{border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;white-space:nowrap;border-radius:999px;flex-shrink:0;padding:7px 12px;font-size:13px;font-weight:600}.chip.active{background:var(--green);border-color:var(--green);color:#fff}.discover-error{color:#9a6b00;background:#fff3d6;border-radius:12px;margin:10px 0;padding:10px 14px;font-size:13px;font-weight:600}.dcard{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:16px;align-items:center;gap:12px;margin-top:8px;padding:10px 12px;display:flex}.dcard-img{object-fit:contain;background:#f6f8f6;border-radius:12px;flex-shrink:0;width:56px;height:56px}.dcard-img.placeholder{place-items:center;font-size:22px;display:grid}.dcard-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.dcard-name{color:var(--ink);font-size:14.5px;font-weight:600;line-height:1.25}.dcard-meta{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.dcard-prices{align-items:baseline;gap:8px;margin-top:2px;display:flex}.dcard-price{color:var(--green-dark);font-size:16px;font-weight:800}.dcard-old{color:var(--muted);font-size:13px;text-decoration:line-through}.badge{border-radius:8px;padding:2px 7px;font-size:11px;font-weight:800}.badge.drop{color:#c8401a;background:#ffe6dc}.badge.new{background:var(--green-soft);color:var(--green-dark)}.dcard-when{color:var(--muted);font-size:11.5px}.dcard-add{background:var(--green);color:#fff;cursor:pointer;border:none;border-radius:50%;flex-shrink:0;place-items:center;width:40px;height:40px;font-size:22px;font-weight:700;line-height:1;display:grid;box-shadow:0 2px 6px #00a65059}.dcard-add:active{background:var(--green-dark)}.dcard-add.added{background:var(--green-soft);color:var(--green-dark);box-shadow:none;font-size:18px}.zone-box{margin-bottom:14px}.zone-row{gap:10px;margin:4px 0 8px;display:flex}.zone-input{letter-spacing:3px;border:1px solid var(--line);min-width:0;color:var(--ink);background:#fbfdfc;border-radius:12px;flex:1;padding:13px 14px;font-size:18px;font-weight:700}.zone-save{flex:none;padding:13px 18px;font-size:15px}.zone-save:disabled{opacity:.5}.dcard-actions{flex-direction:column;flex-shrink:0;align-items:center;gap:8px;display:flex}.dcard-fav{border:1px solid var(--line);background:var(--card);width:40px;height:40px;color:var(--muted);cursor:pointer;border-radius:50%;place-items:center;font-size:20px;line-height:1;display:grid}.dcard-fav.on{color:#f5b301;background:#fffaf0;border-color:#f7d27a}.dcard-fav:active{transform:scale(.94)}.product-tap{text-align:left;cursor:pointer;flex:1;align-items:center;gap:12px;min-width:0;display:flex}.product-tap .product-price{margin-top:2px}.fld-hint{color:var(--muted);margin:-4px 0 12px;font-size:12px}.qty-sheet{text-align:center}.qty-head{text-align:left;align-items:flex-start;gap:14px;margin:6px 0 18px;display:flex}.qty-img{object-fit:contain;border:1px solid var(--line);background:#fff;border-radius:14px;flex-shrink:0;width:72px;height:72px}.qty-img.placeholder{place-items:center;font-size:28px;display:grid}.qty-info{flex-direction:column;gap:3px;min-width:0;display:flex}.qty-name{font-weight:600;line-height:1.25}.qty-ref{color:var(--muted);font-size:12px}.qty-unit{font-variant-numeric:tabular-nums;font-weight:600}.qty-stepper{justify-content:center;align-items:center;gap:26px;margin-bottom:14px;display:flex}.qty-btn{border:1px solid var(--line);background:var(--card);width:48px;height:48px;color:var(--ink);cursor:pointer;border-radius:50%;font-size:26px;font-weight:700;line-height:1}.qty-btn:disabled{opacity:.35;cursor:default}.qty-btn:active:not(:disabled){background:var(--green-tint)}.qty-value{flex-direction:column;align-items:center;min-width:110px;display:flex}.qty-number{font-variant-numeric:tabular-nums;font-size:44px;font-weight:800;line-height:1}.qty-label{color:var(--muted);font-size:12px}.qty-note{color:var(--muted);margin:0 0 12px;font-size:13px}.qty-add{width:100%}
