:root{color-scheme:light;--bg: #f3f0f6;--bg-2: #ece7f0;--surface: #ffffff;--text: #1c1224;--muted: #6b6175;--quiet: #8a8194;--border: #e4dce8;--accent: #7a2d8c;--accent-2: #c2186a;--accent-soft: #f6eaf8;--on-accent: #ffffff;--best: #0b7a42;--best-bg: #e7f6ed;--best-border: #b7e0c6;--warn: #b42318;--warn-bg: #fdecee;--warn-border: #f3c4c8;--info-bg: #eef4ff;--info-border: #c9dbff;--info-text: #16418f;--oos: #8a8194;--nectar: #ec008c;--clubcard: #00539f;--waitrose-card: #5c7a1f;--shadow: 0 1px 2px rgba(28, 18, 36, .06), 0 8px 24px rgba(28, 18, 36, .06);--radius: 16px;--radius-sm: 10px;--header-h: 0px;--tesco: #00539f;--sainsburys: #e87722;--asda: #68b92e;--morrisons: #005b3f;--aldi: #001e62;--waitrose: #7aa322;--ocado: #5b2d8e}html[data-theme=light]{color-scheme:light}html[data-theme=dark]{color-scheme:dark;--bg: #12101a;--bg-2: #1a1724;--surface: #1c1926;--text: #f3eef6;--muted: #a89bb0;--quiet: #8a8194;--border: #322c3e;--accent: #ff4d9a;--accent-2: #ff4d9a;--accent-soft: #3a1a32;--on-accent: #1c1224;--best: #3ddb8a;--best-bg: #163325;--best-border: #2a5a40;--warn: #ff8a80;--warn-bg: #3a2228;--warn-border: #6b3a44;--info-bg: #1c2740;--info-border: #31456e;--info-text: #a8c2ff;--oos: #8a8194;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px rgba(0, 0, 0, .28)}*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{font:16px/1.45 DM Sans,Segoe UI,system-ui,sans-serif;color:var(--text);background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer}input[type=checkbox],input[type=radio]{appearance:none;width:18px;height:18px;margin:0;flex:0 0 18px;border:1.5px solid var(--border);background:var(--surface);color:var(--accent);display:inline-grid;place-content:center}input[type=checkbox]{border-radius:4px}input[type=radio]{border-radius:50%}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--accent);border-color:var(--accent)}input[type=checkbox]:checked:before{content:"";width:10px;height:6px;border:2px solid var(--on-accent);border-top:0;border-right:0;transform:rotate(-45deg) translate(1px,-1px)}input[type=radio]:checked:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--on-accent)}img{max-width:100%}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}[hidden]{display:none!important}.mark{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--accent);color:#fff;flex:0 0 auto}html[data-theme=dark] .mark{color:#1c1224}.wordmark{font-weight:700;letter-spacing:-.03em;font-size:1.15rem}.wordmark em{font-style:normal;font-weight:650;color:var(--accent)}.brand{display:inline-flex;align-items:center;gap:8px;color:inherit;text-decoration:none}.pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:999px;padding:8px 12px;font-size:13px;font-weight:550}.pill .meta{color:var(--muted);font-weight:450}.icon-btn{width:40px;height:40px;border:1px solid var(--border);background:var(--surface);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:var(--text)}.avatar{width:40px;height:40px;padding:0;border:0;border-radius:50%;background:#6b3a12;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.badge-best{display:inline-flex;align-items:center;gap:4px;background:var(--best);color:#fff;font-size:10px;font-weight:700;letter-spacing:.06em;padding:2px 6px;border-radius:4px;text-transform:uppercase}html[data-theme=dark] .badge-best{color:#0b2416}.badge-loyalty{display:inline-block;font-size:9px;font-weight:700;letter-spacing:.05em;padding:1px 5px;border-radius:4px;color:#fff;vertical-align:middle}.badge-loyalty.clubcard{background:var(--clubcard)}.badge-loyalty.nectar{background:var(--nectar)}.badge-loyalty.mywaitrose{background:var(--waitrose-card)}.tile{width:22px;height:22px;border-radius:5px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700;flex:0 0 auto}.tile.tesco{background:var(--tesco)}.tile.sainsburys{background:var(--sainsburys)}.tile.asda{background:var(--asda)}.tile.morrisons{background:var(--morrisons)}.tile.aldi{background:var(--aldi)}.tile.waitrose{background:var(--waitrose)}.tile.ocado{background:var(--ocado)}.login{min-height:100dvh;display:grid;place-items:center;padding:24px 16px 48px}.login-card{width:min(380px,100%);background:var(--surface);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);padding:20px 18px 18px}.login-card h1{margin:12px 0 4px;font-size:1.35rem;letter-spacing:-.03em}.login-card .lede{margin:0 0 16px;color:var(--muted);font-size:14px}label.field{display:block;font-size:13px;font-weight:600;margin:0 0 14px}label.field input[type=text],label.field input[type=email],label.field input[type=password]{display:block;width:100%;margin-top:6px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg);color:var(--text)}.check{display:flex;gap:8px;align-items:flex-start;font-size:14px;margin:4px 0 16px;color:var(--text)}.check input{margin-top:3px}.btn-primary{width:100%;border:0;background:var(--accent);color:var(--on-accent);font-weight:700;padding:12px 16px;border-radius:999px}.btn-primary:disabled{opacity:.6;cursor:default}.err{display:none;margin:0 0 14px;padding:10px 12px;border-radius:10px;background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn);font-size:14px}.err.show{display:block}.note{margin:12px 0 0;color:var(--muted);font-size:13px}.app-header{position:sticky;top:0;z-index:20;background:var(--surface);border-bottom:1px solid var(--border)}.app-header-inner{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto auto;gap:10px;align-items:center;padding:10px 14px;max-width:1680px;margin:0 auto}.brand{grid-column:1;grid-row:1}.header-tools{grid-column:2;grid-row:1;display:flex;gap:8px;align-items:center}.search-row{grid-column:1 / -1;grid-row:2;display:flex;gap:8px}.search-row input[type=search]{flex:1;min-width:0;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:999px;padding:12px 16px 12px 42px;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='none' stroke='%236b6175' stroke-width='2' stroke-linecap='round'><circle cx='8' cy='8' r='6'/><path d='M12.5 12.5 L16 16'/></svg>");background-repeat:no-repeat;background-position:14px 50%}.search-row .go{border:0;background:var(--accent);color:var(--on-accent);font-weight:700;border-radius:999px;padding:0 16px;white-space:nowrap}.ctrl-row{grid-column:1 / -1;grid-row:3;display:flex;gap:8px}.ctrl{position:relative;flex:1 1 0;min-width:0}.ctrl-row>.ctrl-btn{flex:1 1 0;min-width:0}.ctrl-btn{width:100%;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;padding:10px 12px;font-size:14px;font-weight:650}.ctrl-btn .meta{color:var(--muted);font-weight:450}.ctrl-btn svg{flex:0 0 auto}.menu{display:none;position:absolute;top:calc(100% + 6px);left:0;min-width:min(280px,86vw);background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);padding:10px;z-index:25}.menu.open{display:block}.menu.right{left:auto;right:0}.menu h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.menu .hint{margin:8px 0 0;font-size:12px;color:var(--muted)}.menu label{display:flex;gap:8px;align-items:center;padding:6px 4px;font-size:14px}.menu label .count{margin-left:auto;color:var(--quiet);font-size:12px}.secondary{font-size:12px;color:var(--quiet)}.sheet-back{position:fixed;inset:0;background:var(--surface);z-index:30}.sheet{position:fixed;inset:0;z-index:31;display:flex;flex-direction:column;height:100dvh;max-height:100dvh;overflow:hidden;background:var(--surface);color:var(--text);padding:calc(8px + env(safe-area-inset-top)) 0 0}body.sheet-open{overflow:hidden;position:fixed;width:100%;left:0;right:0}.sheet-handle{display:none}.sheet-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto;padding:0 16px 10px;background:var(--surface);border-bottom:1px solid var(--border)}.sheet-head h2{margin:0;font-size:1.15rem;letter-spacing:-.02em}.sheet-head button{border:0;background:var(--accent);color:var(--on-accent);font-weight:700;border-radius:999px;padding:8px 14px}.sheet-body{overflow:auto;padding:0 16px calc(28px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y}.sheet section{padding:12px 0;border-top:1px solid var(--border)}.sheet h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.sheet label{display:flex;gap:8px;align-items:center;padding:7px 2px;font-size:15px}.sheet label .count{margin-left:auto;color:var(--quiet);font-size:12px;font-variant-numeric:tabular-nums}.sheet .more-shops{padding-left:2px;padding-right:2px}.sheet .hint{margin:8px 0 0;font-size:12px;color:var(--muted)}.more-shops{width:100%;border:0;border-top:1px solid var(--border);background:transparent;color:var(--accent-2);font-weight:650;font-size:13px;padding:8px 12px;text-align:left}.cell.is-collapsed{display:none}main{max-width:1680px;margin:0 auto;padding:16px 14px 80px}.empty,.none,.load{max-width:440px;margin:48px auto 0;text-align:center}.empty h2,.none h2,.load h2{margin:0 0 8px;font-size:1.25rem;letter-spacing:-.02em}.empty p,.none p,.load p{margin:0;color:var(--muted)}.load{max-width:520px;margin-top:28px}.load h2{min-height:1.4em}.load-shops{display:flex;justify-content:center;flex-wrap:wrap;gap:10px;margin:18px 0 0}.load-shop{display:flex;flex-direction:column;align-items:center;gap:6px;width:52px;opacity:.28;transition:opacity .25s ease,transform .25s ease}.load-shop .tile{width:36px;height:36px;border-radius:10px;font-size:14px;position:relative}.load-shop .nm{font-size:10px;font-weight:600;color:var(--muted);line-height:1.15;text-align:center}.load-shop.is-wait .tile{animation:wait-pulse 1.1s ease-in-out infinite}.load-shop.is-in{opacity:1;transform:translateY(-2px)}.load-shop.is-in .tile:after{content:"";position:absolute;right:-3px;bottom:-3px;width:12px;height:12px;border-radius:50%;background:var(--best);box-shadow:0 0 0 2px var(--surface);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2.5 6.2 5 8.6 9.5 3.4'/%3E%3C/svg%3E");background-size:8px;background-repeat:no-repeat;background-position:center}.load-shop.is-fail{opacity:.9}.load-shop.is-fail .tile{animation:none;outline:2px solid var(--warn);outline-offset:2px}.load-shop.is-fail .nm{color:var(--warn)}@keyframes wait-pulse{0%,to{transform:scale(1);filter:saturate(.6)}50%{transform:scale(1.06);filter:saturate(1)}}.chips-suggest{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:18px}.banner{margin:0 0 14px;padding:10px 12px;border-radius:12px;font-size:14px}.banner.warn{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn)}.banner.info{background:var(--info-bg);border:1px solid var(--info-border);color:var(--info-text)}.results-head h2{margin:0 0 4px;font-size:1.15rem;letter-spacing:-.02em}.results-head p{margin:0 0 16px;color:var(--muted);font-size:14px}.skel-list{display:grid;gap:12px}.skel{height:92px;border-radius:12px;background:linear-gradient(90deg,var(--bg-2) 25%,var(--surface) 50%,var(--bg-2) 75%);background-size:200% 100%;animation:shine 1.2s infinite;border:1px solid var(--border)}@media(min-width:560px){.skel-list{grid-template-columns:repeat(auto-fill,minmax(max(260px,calc((100% - 40px) / 6)),1fr))}}@keyframes shine{0%{background-position:100% 0}to{background-position:-100% 0}}.groups{display:grid;gap:8px;grid-template-columns:1fr}@media(min-width:560px){.groups{grid-template-columns:repeat(auto-fill,minmax(max(260px,calc((100% - 40px) / 6)),1fr));gap:12px}}.group{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.group-top{display:grid;grid-template-columns:72px 1fr;gap:10px;padding:10px 12px 8px}.thumb{width:72px;height:72px;border-radius:8px;background:#fff;overflow:hidden}.thumb img{display:block;width:100%;height:100%;object-fit:contain}.kicker{margin:0;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.group-top h3{margin:1px 0 0;font-size:.95rem;letter-spacing:-.02em;line-height:1.25;font-weight:650}.size{color:var(--muted);font-weight:450}.headline{margin:4px 0 0;font-size:14px}.headline strong{font-size:1.05rem;letter-spacing:-.03em}.headline .only{display:block;margin-top:1px;font-size:11px;color:var(--muted);font-weight:450}.shops{display:flex;flex-direction:column;border-top:1px solid var(--border)}.cell{display:grid;grid-template-columns:22px minmax(0,1fr) 38px auto;grid-template-areas:"tile name best prices";column-gap:6px;row-gap:1px;align-items:center;padding:5px 12px;border-top:1px solid var(--border);font-size:13px}.cell:first-child{border-top:0}.cell>.tile{grid-area:tile}.cell>.shop-name{grid-area:name}.cell>.best-slot{grid-area:best}.cell>.prices{grid-area:prices}.cell>.offer,.cell>.listing-note{grid-column:name / -1}.cell.is-best{background:var(--best-bg)}.cell.is-oos,.cell.is-none,.cell.is-fail{opacity:.72}.cell .shop-name{font-weight:600;font-size:13px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.best-slot{display:flex;align-items:center;justify-content:flex-start;min-height:16px}.best-slot .badge-best{padding:2px 5px;letter-spacing:.04em}.cell .prices{text-align:right;font-variant-numeric:tabular-nums;display:flex;flex-wrap:nowrap;justify-content:flex-end;align-items:baseline;gap:6px;white-space:nowrap}.shelf{font-weight:700}.loyalty-line{font-size:12px;color:var(--muted);white-space:nowrap}.loyalty-line.in-lens{color:var(--best);font-weight:650}.loyalty-line.out-lens{color:var(--quiet)}.delta{font-size:11px;color:var(--warn);font-weight:600}.offer{font-size:11px;color:var(--accent-2);font-weight:600}.muted-state{font-size:12px;color:var(--muted);font-weight:450}.listing-note{font-size:10px;color:var(--quiet);font-weight:450}body[data-layout=classic] .groups{gap:12px}body[data-layout=classic] .group{border-radius:var(--radius);box-shadow:var(--shadow)}body[data-layout=classic] .group-top{grid-template-columns:96px 1fr;padding:14px 14px 10px}body[data-layout=classic] .thumb{width:96px;height:96px;border-radius:12px;border:1px solid var(--border)}body[data-layout=classic] .cell{align-items:start;padding:8px 14px;font-size:14px;grid-template-columns:22px minmax(0,1fr) auto;grid-template-areas:"tile name prices" "tile best prices"}body[data-layout=classic] .cell .shop-name{white-space:normal}body[data-layout=classic] .cell .prices{display:block;white-space:normal}body[data-layout=classic] .offer,body[data-layout=classic] .listing-note,body[data-layout=classic] .loyalty-line{display:block}body[data-layout=chips] .shops{flex-direction:row;flex-wrap:wrap;gap:6px;padding:8px 12px 10px}body[data-layout=chips] .cell{display:flex;flex-direction:column;align-items:flex-start;gap:2px;min-width:92px;padding:6px 8px;border:1px solid var(--border);border-radius:10px;border-top:1px solid var(--border)}body[data-layout=chips] .best-slot{min-height:0}body[data-layout=chips] .cell .prices{justify-content:flex-start;text-align:left}body[data-layout=chips] .cell .shop-name{font-size:11px}body[data-layout=chips] .more-shops{flex:1 0 100%;border:0;text-align:center}body:not([data-layout=classic]) .cell.is-none{display:none}.table-head{display:none}@media(min-width:768px){.app-header-inner{padding:12px 20px}main{padding:20px 20px 80px}.login-card{padding:32px 28px 28px}}@media(min-width:2400px){.groups{grid-template-columns:1fr;gap:0;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface);box-shadow:var(--shadow)}.group{display:grid;grid-template-columns:minmax(240px,1.35fr) repeat(var(--shop-count, 7),minmax(0,1fr));border:0;border-radius:0;box-shadow:none;border-top:1px solid var(--border)}.group:first-child{border-top:0}.group-top{padding:14px 16px;border-right:1px solid var(--border);align-content:start}.shops{display:contents;border:0}.cell{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:2px;padding:10px 8px;border-top:0;border-left:1px solid var(--border);min-height:88px}.cell .shop-name{display:none}.cell .prices{text-align:left;display:block}.cell.is-collapsed{display:flex}.more-shops{display:none}body[data-layout=chips] .shops{display:contents;padding:0;gap:0}body[data-layout=chips] .cell{min-width:0;border-radius:0}body:not([data-layout=classic]) .cell.is-none{display:flex}.table-head{display:grid;grid-template-columns:minmax(240px,1.35fr) repeat(var(--shop-count, 7),minmax(0,1fr));background:var(--bg-2);border:1px solid var(--border);border-bottom:0;border-radius:var(--radius) var(--radius) 0 0;font-size:12px;font-weight:700}.groups{border-radius:0 0 var(--radius) var(--radius)}.table-head span{padding:10px;display:flex;align-items:center;gap:6px;border-left:1px solid var(--border)}.table-head span:first-child{border-left:0}.ctrl-row{overflow:visible}}
