sektamarketingcourse-files/pregnant2026/zamorozki.html
Blamezamorozki.html819 lines
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Заморозки — путеводитель по полуфабрикатам</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link href="https://fonts.googleapis.com/css2?family=Oswald:wght@500;600;700&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet"> <style> :root{ --ink:#2E211B; --ink-soft:#7A6259; --frost-bg:#F6F0E8; --frost-bg-2:#EFE5D8; --card:#FFFFFF; --line:#E6D9C8; --sky-1:#C7644D; --sky-2:#B8D5DD; --ice-white:#FBF8F3; --cream:#F2EBE1; --terracotta:#C7644D; --lightblue:#B8D5DD; --darkbrown:#2E211B; --lavka:#00AEEF; --lavka-ink:#00506B; --lenta:#0B3D91; --lenta-ink:#0B3D91; --perekrestok:#1E9146; --perekrestok-ink:#12592B; --magnit:#E2231A; --magnit-ink:#8F150F; --vkusvill:#7CB518; --vkusvill-ink:#4A6E0C; --pyaterochka:#F2810C; --pyaterochka-ink:#8C4B04; --dixy:#F5B800; --dixy-ink:#7A5C00; --radius:16px; --radius-sm:10px; --shadow:0 6px 20px -8px rgba(14,36,56,.18); } *{box-sizing:border-box;} html{scroll-behavior:smooth;} body{ margin:0; background: radial-gradient(1200px 600px at 10% -10%, #DFF0FA 0%, transparent 60%), radial-gradient(900px 500px at 110% 10%, #E7F3FB 0%, transparent 55%), var(--frost-bg); color:var(--ink); font-family:'Inter',sans-serif; -webkit-font-smoothing:antialiased; padding-bottom:60px; } .display{ font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:.01em; } /* ---------- HERO ---------- */ .hero{ position:relative; overflow:hidden; background:#C7644D; color:#fff; padding:44px 20px 34px; border-radius:0 0 32px 32px; } .hero::before{ content:""; position:absolute; top:-120px; left:-150px; width:340px; height:340px; border-radius:50%; background:#B8D5DD; pointer-events:none; } .hero::after{ content:""; position:absolute; bottom:-160px; right:-110px; width:260px; height:260px; border-radius:50%; background:#2E211B; opacity:.9; pointer-events:none; } .hero-inner{ position:relative; z-index:1; } .hero-eyebrow{ display:flex; align-items:center; gap:8px; font-size:12.5px; font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:#F0DCD3; margin-bottom:10px; } .hero-eyebrow .dot{width:6px;height:6px;border-radius:50%;background:#B8D5DD;} .hero h1{ font-size:clamp(42px, 11vw, 76px); line-height:.92; margin:0 0 14px; font-weight:700; text-shadow:0 8px 30px rgba(0,0,0,.25); } .hero h1 span{ color:#B8D5DD; } .hero p.lead{ max-width:520px; font-size:15.5px; line-height:1.55; color:#F6ECE4; margin:0 0 22px; position:relative; } .hero-stats{ display:flex; gap:22px; flex-wrap:wrap; position:relative; } .hero-stat{ display:flex; flex-direction:column; } .hero-stat b{ font-family:'Oswald',sans-serif; font-size:26px; font-weight:600; } .hero-stat span{ font-size:11.5px; color:#F0DCD3; text-transform:uppercase; letter-spacing:.08em; } /* ---------- LEGEND STRIP ---------- */ .legend-strip{ position:relative; display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:24px; } .legend-chip{ display:flex; align-items:center; gap:7px; background:rgba(255,255,255,.14); border:1px solid rgba(255,255,255,.28); padding:10px 14px 10px 12px; border-radius:999px; font-size:12.5px; font-weight:600; color:#fff; -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px); cursor:pointer; font-family:'Inter',sans-serif; transition:.15s ease; width:100%; } .legend-chip:hover{ background:rgba(255,255,255,.26); border-color:rgba(255,255,255,.5); transform:translateY(-1px); } .legend-chip.active-store{ background:#fff; color:var(--darkbrown); border-color:#fff; } .legend-swatch{width:12px;height:12px;border-radius:50%;flex:none;} .legend-hint{ width:100%; font-size:11px; color:#F0DCD3; margin-top:2px; opacity:.85; } /* ---------- STICKY NAV ---------- */ .stickybar{ position:sticky; top:0; z-index:40; background:rgba(238,245,250,.9); -webkit-backdrop-filter:blur(10px); backdrop-filter:blur(10px); border-bottom:1px solid var(--line); padding:10px 16px; } .stickybar-inner{ max-width:900px; margin:0 auto; display:flex; flex-direction:column; gap:10px; } .tabs{ display:grid; grid-template-columns:1fr 1fr; gap:6px; } .tab-btn{ font-family:'Oswald',sans-serif; text-transform:uppercase; letter-spacing:.03em; font-size:12.5px; font-weight:600; padding:10px 10px; border-radius:999px; border:1.5px solid var(--line); background:#fff; color:var(--ink-soft); cursor:pointer; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; transition:.15s ease; display:flex; align-items:center; justify-content:center; gap:6px; } .tab-btn:hover{ border-color:var(--sky-2); color:var(--ink); } .tab-btn.active{ background:linear-gradient(135deg, var(--sky-1), var(--sky-2)); border-color:transparent; color:#fff; box-shadow:0 6px 16px -6px rgba(14,107,168,.55); } .tab-count{ font-family:'Inter',sans-serif; font-weight:600; font-size:10.5px; background:rgba(255,255,255,.35); padding:1px 6px; border-radius:999px; } .tab-btn:not(.active) .tab-count{ background:var(--frost-bg-2); color:var(--ink-soft); } .controls-row{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; } .search-wrap{ position:relative; flex:1; min-width:180px; } .search-wrap input{ width:100%; padding:9px 14px 9px 34px; border-radius:999px; border:1.5px solid var(--line); background:#fff; font-size:13.5px; font-family:'Inter',sans-serif; color:var(--ink); outline:none; } .search-wrap input:focus{ border-color:var(--sky-2); } .search-wrap svg{ position:absolute; left:12px; top:50%; transform:translateY(-50%); opacity:.45; } .store-indicator{ flex:none; font-size:13px; font-weight:600; padding:9px 16px; border-radius:999px; border:1.5px solid var(--sky-1); background:#FBEEE9; color:var(--sky-1); cursor:pointer; display:flex; align-items:center; gap:6px; white-space:nowrap; transition:.15s ease; } .store-indicator:hover{ background:#F6E0D8; } .store-indicator svg{ opacity:.7; } /* ---------- CONTENT ---------- */ .wrap{ max-width:900px; margin:0 auto; padding:28px 16px 10px; } .section{ display:none; } .section.active{ display:block; } .section-head{ display:flex; align-items:baseline; gap:12px; margin:10px 2px 18px; } .section-head h2{ font-family:'Oswald',sans-serif; text-transform:uppercase; font-size:26px; margin:0; color:var(--ink); } .section-head .emoji{ font-size:26px; } .section-sub{ color:var(--ink-soft); font-size:13px; margin:-10px 2px 20px; } .frost-divider{ height:10px; margin:8px 0 24px; background-image:repeating-linear-gradient(115deg, var(--sky-2) 0 10px, transparent 10px 20px); opacity:.35; border-radius:6px; } .group-block{ margin-bottom:26px; } .group-title{ font-family:'Oswald',sans-serif; text-transform:uppercase; font-size:14px; letter-spacing:.06em; color:var(--ink-soft); margin:0 2px 10px; display:flex; align-items:center; gap:8px; } .group-title::after{ content:""; flex:1; height:1px; background:var(--line); } .store-group{ background:var(--card); border-radius:var(--radius); border:1px solid var(--line); margin-bottom:14px; overflow:hidden; box-shadow:var(--shadow); } .store-group-head{ --c:var(--sky-1); --cink:var(--sky-1); display:flex; align-items:center; gap:10px; padding:12px 16px; background:#F8F1EA; background:color-mix(in srgb, var(--c) 10%, white); border-bottom:1px solid var(--line); } .store-dot{ width:11px;height:11px;border-radius:50%; background:var(--c); flex:none; box-shadow:0 0 0 3px rgba(0,0,0,.08); box-shadow:0 0 0 3px color-mix(in srgb, var(--c) 20%, white); } .store-group-head h3{ font-family:'Oswald',sans-serif; text-transform:uppercase; font-size:15px; margin:0; color:var(--cink); letter-spacing:.02em; } .store-group-head .cnt{ margin-left:auto; font-size:11.5px; color:var(--ink-soft); background:#fff; border:1px solid var(--line); padding:2px 8px; border-radius:999px; } .item-list{ display:flex; flex-direction:column; } .item-row{ display:flex; align-items:center; gap:12px; padding:11px 16px; border-bottom:1px solid var(--frost-bg-2); text-decoration:none; color:var(--ink); transition:.12s ease; } .item-row:last-child{ border-bottom:none; } .item-row:hover{ background:var(--frost-bg); } .item-check{ width:20px;height:20px;border-radius:7px; border:1.6px solid var(--line); flex:none; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:.12s ease; background:#fff; } .item-check.checked{ background:var(--sky-1); border-color:var(--sky-1); } .item-check svg{ display:none; width:12px; height:12px; } .item-check.checked svg{ display:block; } .item-name{ flex:1; font-size:14.5px; font-weight:500; line-height:1.35; } .item-row.done .item-name{ color:var(--ink-soft); text-decoration:line-through; } .item-go{ flex:none; opacity:.35; transition:.12s ease; } .item-row:hover .item-go{ opacity:.8; transform:translateX(2px); } .empty-state{ text-align:center; padding:60px 20px; color:var(--ink-soft); } .empty-state .big{ font-size:40px; margin-bottom:10px; } /* footer */ .footer{ max-width:900px; margin:30px auto 0; padding:20px 16px; text-align:center; color:var(--ink-soft); font-size:12.5px; } .footer .badge{ display:inline-flex; align-items:center; gap:6px; font-family:'Oswald',sans-serif; text-transform:uppercase; font-size:12px; letter-spacing:.08em; color:var(--sky-1); margin-bottom:8px; } @media (min-width:601px){ .tabs{ grid-template-columns:repeat(4, 1fr); } .legend-strip{ grid-template-columns:repeat(3, 1fr); } } @media (max-width:480px){ .hero{ padding:30px 16px 24px; border-radius:0 0 22px 22px;} .hero::before{ width:220px; height:220px; top:-90px; left:-100px; } .hero::after{ width:170px; height:170px; bottom:-100px; right:-80px; } .hero-stats{ gap:14px; } .hero h1{ font-size:clamp(38px, 15vw, 56px); } .legend-chip{ padding:10px 8px 10px 10px; font-size:11.5px; } .legend-chip .legend-swatch{ width:10px; height:10px; } .controls-row{ flex-direction:column; align-items:stretch; } .store-indicator{ justify-content:center; } .tab-btn{ padding:9px 6px; font-size:11.5px; } .section-head h2{ font-size:22px; } .store-group-head{ padding:11px 14px; } .item-row{ padding:11px 14px; } } [data-store="lavka"]{ --c:var(--lavka); --cink:var(--lavka-ink); } [data-store="lenta"]{ --c:var(--lenta); --cink:var(--lenta-ink); } [data-store="perekrestok"]{ --c:var(--perekrestok); --cink:var(--perekrestok-ink); } [data-store="magnit"]{ --c:var(--magnit); --cink:var(--magnit-ink); } [data-store="vkusvill"]{ --c:var(--vkusvill); --cink:var(--vkusvill-ink); } [data-store="pyaterochka"]{ --c:var(--pyaterochka); --cink:var(--pyaterochka-ink); } [data-store="dixy"]{ --c:var(--dixy); --cink:var(--dixy-ink); } </style> </head> <body> <header class="hero"> <div class="hero-inner"> <div class="hero-eyebrow"><span class="dot"></span> #SEKTA PREGNANT · шпаргалка</div> <h1 class="display">Замор<span>озки</span></h1> <p class="lead">Подборка полуфабрикатов из доставок на случай, если не будет времени приготовить блюда из меню. Твоя палочка-выручалочка в загруженные дни — с прямыми ссылками на товары.</p> <div class="hero-stats"> <div class="hero-stat"><b>163</b><span>позиции</span></div> <div class="hero-stat"><b>7</b><span>магазинов</span></div> <div class="hero-stat"><b>4</b><span>приёма пищи</span></div> </div> <div class="legend-strip" id="legendStrip"></div> <div class="legend-hint">Жми на магазин, чтобы отфильтровать его товары</div> </div> </header> <div class="stickybar"> <div class="stickybar-inner"> <div class="tabs" id="tabs"></div> <div class="controls-row"> <div class="search-wrap"> <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.3"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> <input id="searchInput" type="text" placeholder="Найти продукт…"> </div> <button class="store-indicator" id="storeIndicator"></button> </div> </div> </div> <main class="wrap" id="wrap"></main> <footer class="footer"> <div class="badge">#SEKTA PREGNANT</div> <div>Кликай на карточки — они ведут прямо на страницу товара в магазине.</div> </footer> <script> const ITEMS = [{"name": "Смесь овощная Карибская", "url": "https://lavka.yandex.ru/good/karibskaya-smes-miratorg-zamorozhennaya-400-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 0}, {"name": "Овощи-гриль с итальянскими травами", "url": "https://lavka.yandex.ru/good/ovoshi-gril-s-italyanskimi-travami-miratorg-zamorozhennye-400-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 1}, {"name": "Овощной микс Завтрак с кабачком", "url": "https://lavka.yandex.ru/good/ovoshnoj-miks-s-kabachkom-zavtrak-bonduelle-zamorozhennyj-200-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 2}, {"name": "Овощной микс без лука", "url": "https://lavka.yandex.ru/good/ovoshnoj-miks-iz-lavki-dlya-zavtraka-so-sladkim-percem-bystrozamorozhennaya-200-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 3}, {"name": "Брокколи", "url": "https://lavka.yandex.ru/good/brokkoli-mini-bonduelle-zamorozhennaya-300-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 4}, {"name": "Цветная капуста", "url": "https://lavka.yandex.ru/good/kapusta-cvetnaya-socvetiyami-bystrozamorozhennaya-400-gram", "store": "lavka", "cat": "veg", "group": "veg", "id": 5}, {"name": "Вишня", "url": "https://lavka.yandex.ru/good/vishnya-bez-kostochki-hortex-zamorozhennaya-300-gram", "store": "lavka", "cat": "veg", "group": "fruit", "id": 6}, {"name": "Клюква", "url": "https://lavka.yandex.ru/good/klyukva-dikorastushaya-iz-lavki-bystrozamorozhennaya-300-gram", "store": "lavka", "cat": "veg", "group": "fruit", "id": 7}, {"name": "Облепиха", "url": "https://lavka.yandex.ru/good/oblepiha-iz-lavki-bystrozamorozhennaya-300-gram", "store": "lavka", "cat": "veg", "group": "fruit", "id": 8}, {"name": "Ягодный коктейль", "url": "https://lavka.yandex.ru/good/yagodnyj-koktejl-vitaminnyj-miratorg-zamorozhennyj-300-gram", "store": "lavka", "cat": "veg", "group": "fruit", "id": 9}, {"name": "Брокколи", "url": "https://spb.lenta.com/product/kapusta-brokkoli-zam-400g-665039/", "store": "lenta", "cat": "veg", "group": "fruit", "id": 10}, {"name": "Цветная капуста", "url": "https://spb.lenta.com/product/kapusta-cvetnaya-zam-400g-645567/", "store": "lenta", "cat": "veg", "group": "fruit", "id": 11}, {"name": "Фасоль стручковая", "url": "https://spb.lenta.com/product/fasol-zelenaya-rezanaya-zam-serbiya-400g-455250/", "store": "lenta", "cat": "veg", "group": "fruit", "id": 12}, {"name": "Смесь овощная", "url": "https://spb.lenta.com/product/smes-ovoshchnaya-ovoshchnoe-ragu-rossiya-400g-324581/", "store": "lenta", "cat": "veg", "group": "fruit", "id": 13}, {"name": "Смесь овощей", "url": "https://spb.lenta.com/product/smes-meksikansk-ovoshchn-zam-1500g-495923/", "store": "lenta", "cat": "veg", "group": "fruit", "id": 14}, {"name": "Черная смородина", "url": "https://spb.lenta.com/product/smorodina-chernaya-zam-rossiya-300g-354358/", "store": "lenta", "cat": "veg", "group": "veg", "id": 15}, {"name": "Клюква", "url": "https://spb.lenta.com/product/klyukva-zam-rossiya-300g-375708/", "store": "lenta", "cat": "veg", "group": "veg", "id": 16}, {"name": "Черника", "url": "https://spb.lenta.com/product/chernika-rossiya-300g-402638/", "store": "lenta", "cat": "veg", "group": "veg", "id": 17}, {"name": "Вишня", "url": "https://spb.lenta.com/product/vishnya-bez-kostochki-rossiya-300g-402475/", "store": "lenta", "cat": "veg", "group": "veg", "id": 18}, {"name": "Микс овощей Шакшука", "url": "https://www.perekrestok.ru/cat/59/p/miks-ovosej-saksuka-dla-vostocnogo-zavtraka-zamorozennyj-market-300g-4372349", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 19}, {"name": "Брокколи", "url": "https://www.perekrestok.ru/cat/59/p/brokkoli-bystrozamorozennaa-market-400g-3489151", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 20}, {"name": "Цветная капуста", "url": "https://www.perekrestok.ru/cat/59/p/kapusta-cvetnaa-bystrozamorozennaa-market-perekrestok-400g-3489152", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 21}, {"name": "Фасоль стручковая", "url": "https://www.perekrestok.ru/cat/59/p/fasol-struckovaa-rezanaa-bystrozamorozennaa-market-perekrestok-400g-3489153", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 22}, {"name": "Овощная смесь", "url": "https://www.perekrestok.ru/cat/59/p/smes-ovosnaa-meksikanskaa-bystrozamorozennaa-market-perekrestok-400g-3489165", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 23}, {"name": "Грибы", "url": "https://www.perekrestok.ru/cat/59/p/opata-bystrozamorozennye-market-perekrestok-400g-3489171", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 24}, {"name": "Шпинат", "url": "https://www.perekrestok.ru/cat/59/p/spinat-rezanyj-bystrozamorozennyj-market-perekrestok-400g-4150062", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 25}, {"name": "Спаржа", "url": "https://www.perekrestok.ru/cat/59/p/sparza-celaa-zamorozennaa-market-collection-300g-4369295", "store": "perekrestok", "cat": "veg", "group": "veg", "id": 26}, {"name": "Слива", "url": "https://www.perekrestok.ru/cat/61/p/sliva-bez-kostocki-bystrozamorozennaa-market-perekrestok-400g-3489157", "store": "perekrestok", "cat": "veg", "group": "fruit", "id": 27}, {"name": "Облепиха", "url": "https://www.perekrestok.ru/cat/61/p/oblepiha-bystrozamorozennaa-market-perekrestok-300g-4135307", "store": "perekrestok", "cat": "veg", "group": "fruit", "id": 28}, {"name": "Черника", "url": "https://www.perekrestok.ru/cat/61/p/cernika-zamorozennaa-zelenaa-linia-300g-4390796", "store": "perekrestok", "cat": "veg", "group": "fruit", "id": 29}, {"name": "Вишня", "url": "https://www.perekrestok.ru/cat/61/p/visna-bez-kostocki-zamorozennaa-market-300g-4342877", "store": "perekrestok", "cat": "veg", "group": "fruit", "id": 30}, {"name": "Овощная смесь", "url": "https://vkusvill.ru/goods/smes-ovoshchnaya-klassicheskiy-garnir-zam-101868.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 31}, {"name": "Овощная смесь", "url": "https://vkusvill.ru/goods/belgiyskiy-miks-na-garnir-31755.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 32}, {"name": "Овощная смесь Лечо", "url": "https://vkusvill.ru/goods/smes-ovoshchnaya-lecho-po-vengerski-bystrozamorozhennaya-56175.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 33}, {"name": "Фасоль стручковая", "url": "https://vkusvill.ru/goods/fasol-struchkovaya-svezhezamorozhennaya-16091.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 34}, {"name": "Цветная капуста", "url": "https://vkusvill.ru/goods/kapusta-tsvetnaya-bondyuel-mini-zamorozhennaya-300-g-33829.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 35}, {"name": "Брокколи", "url": "https://vkusvill.ru/goods/kapusta-brokkoli-svezhezamorozhennaya-16122.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 36}, {"name": "Овощная смесь", "url": "https://vkusvill.ru/goods/smes-ovoshchnaya-agama-brokkoli-smes-zamorozhennaya-400-g-62737.html", "store": "vkusvill", "cat": "veg", "group": "fruit", "id": 37}, {"name": "Смесь ягодная", "url": "https://vkusvill.ru/goods/smes-yagodnaya-bystrozamorozhennaya-56180.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 38}, {"name": "Смородина черная", "url": "https://vkusvill.ru/goods/smorodina-chernaya-svezhezamorozhennaya-51238.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 39}, {"name": "Вишня", "url": "https://vkusvill.ru/goods/vishnya-bez-kostochki-svezhezamorozhennaya-37144.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 40}, {"name": "Черника", "url": "https://vkusvill.ru/goods/chernika-svezhezamorozhennaya-915.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 41}, {"name": "Малина", "url": "https://vkusvill.ru/goods/malina-planeta-vitaminov-zamorozhennaya-250-g-106635.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 42}, {"name": "Брусника", "url": "https://vkusvill.ru/goods/brusnika-svezhezamorozhennaya-914.html", "store": "vkusvill", "cat": "veg", "group": "veg", "id": 43}, {"name": "Брокколи", "url": "https://magnit.ru/product/1000546409-green_ribbon_brokkoli_sotsvetiyami_b_z_700g?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 44}, {"name": "Стручковая фасоль", "url": "https://magnit.ru/product/1499919384-fasol_struchkovaya_zamorozhennaya_v_10?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 45}, {"name": "Шпинат", "url": "https://magnit.ru/product/1000526835-premiere_of_taste_shpinat_zamorozhennyy_400g_fl_p?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 46}, {"name": "Смесь Шакшука", "url": "https://magnit.ru/product/8000082438-bondyuel_ovoshchi_po_turetski_s_nutom_shakshuka_200g?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 47}, {"name": "Тыква", "url": "https://magnit.ru/product/1000075741-4_sezona_tykva_narezannaya_0_4_kg_fl_p_zapadnyy_khk_ooo_20?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 48}, {"name": "Цветная капуста", "url": "https://magnit.ru/product/1000545538-green_ribbon_tsvet_kapusta_zamorozh_700g?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 49}, {"name": "Овощная смесь", "url": "https://magnit.ru/product/1000257292-4sezona_ovoshchn_smes_8_ovoshchey_bystrozam0_4kg_fl_p_zapadn_20?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "veg", "id": 50}, {"name": "Вишня", "url": "https://magnit.ru/product/1000153470-vishnya_bez_kostochki_v_k_up_10?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 51}, {"name": "Черника", "url": "https://magnit.ru/product/1000153471-chernaya_smorodina_v_k_up_10?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 52}, {"name": "Маракуйя", "url": "https://magnit.ru/product/1000570690-premiere_of_taste_marakuyya_kubiki_zam_300g?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 53}, {"name": "Облепиха", "url": "https://magnit.ru/product/1000313264-premiere_of_taste_oblepikha_zamor_300g_d_p_10?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 54}, {"name": "Клюква", "url": "https://magnit.ru/product/1000517887-premiere_of_taste_klyukva_sadovaya_zamorozh_300g_fl_p?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 55}, {"name": "Ягодная смесь", "url": "https://magnit.ru/product/1000190554-yagodnaya_smes_moya_tsena_zamorozhennaya_300g?shopCode=992301&shopType=6", "store": "magnit", "cat": "veg", "group": "fruit", "id": 56}, {"name": "Облепиха", "url": "https://dixy.ru/product/oblepikha-svoy-urojay-300g-2000324053/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 57}, {"name": "Слива", "url": "https://dixy.ru/product/sliva-svoy-urojay-bez-kostochki-300g-2000640011/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 58}, {"name": "Вишня", "url": "https://dixy.ru/product/vishnya-krugloe-leto-bystrozamorojennaya-300g-2000636671/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 59}, {"name": "Черная смородина", "url": "https://dixy.ru/product/chernaya-smorodina-svoy-urojay-300g-2000629552/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 60}, {"name": "Клюква", "url": "https://dixy.ru/product/klyukva-svoy-urojay-300g-2000629553/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 61}, {"name": "Малина", "url": "https://dixy.ru/product/malina-svoy-urojay-300g-2000364319/", "store": "dixy", "cat": "veg", "group": "fruit", "id": 62}, {"name": "Брокколи", "url": "https://dixy.ru/product/kapusta-brokkoli-krugloe-leto-700g-2000615391/", "store": "dixy", "cat": "veg", "group": "veg", "id": 63}, {"name": "Цветная капуста", "url": "https://dixy.ru/product/kapusta-tsvetnaya-krugloe-leto-700g-2000619636/", "store": "dixy", "cat": "veg", "group": "veg", "id": 64}, {"name": "Стручковая фасоль", "url": "https://dixy.ru/product/fasol-struchkovaya-krugloe-leto-700g-2000619637/", "store": "dixy", "cat": "veg", "group": "veg", "id": 65}, {"name": "Овощная смесь", "url": "https://dixy.ru/product/ovoshchnoe-trio-morozko-green-400g-2000229575/", "store": "dixy", "cat": "veg", "group": "veg", "id": 66}, {"name": "Овощная смесь", "url": "https://dixy.ru/product/smes-ovoshchnaya-krugloe-leto-meksikanskaya-zamorojennaya-400g-2000270044/", "store": "dixy", "cat": "veg", "group": "veg", "id": 67}, {"name": "Овощная смесь", "url": "https://dixy.ru/product/ovoshchnaya-smes-miratorg-sote-provanskie-travy-zamorojennaya-400g-2000287582/", "store": "dixy", "cat": "veg", "group": "veg", "id": 68}, {"name": "Брюссельская капуста", "url": "https://dixy.ru/product/kapusta-bryusselskaya-svoy-urojay-400g-2000630695/", "store": "dixy", "cat": "veg", "group": "veg", "id": 69}, {"name": "Овощная смесь", "url": "https://dixy.ru/product/ovoshchnaya-smes-bonduelle-ovoshchi-po-aziatski-wok-400-g-2000402058/", "store": "dixy", "cat": "veg", "group": "veg", "id": 70}, {"name": "Шампиньоны резаные", "url": "https://dixy.ru/product/shampinony-svoy-urojay-rezanye-300g-2000364264/", "store": "dixy", "cat": "veg", "group": "veg", "id": 71}, {"name": "Манго", "url": "https://5ka.ru/product/mango-planeta-vitaminov-kubikami-zamorozhennoe-300--4095887/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 72}, {"name": "Вишня", "url": "https://5ka.ru/product/vishnya-zimove-zamorozhennaya-300g--3335012/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 73}, {"name": "Облепиха", "url": "https://5ka.ru/product/oblepikha-global-village-bystrozamorozhennaya-300g--4102513/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 74}, {"name": "Ягодная смесь", "url": "https://5ka.ru/product/smes-yagodnaya-vitamin-yagodnyy-kokteyl-vitaminnyy--2125833/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 75}, {"name": "Ягодная смесь", "url": "https://5ka.ru/product/assorti-krasnaya-tsena-kompotnoe-bystrozamorozhenn--3608030/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 76}, {"name": "Черная смородина", "url": "https://5ka.ru/product/chernaya-smorodina-livianta-zamorozhennaya-300g--4152346/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 77}, {"name": "Ягодная смесь", "url": "https://5ka.ru/product/smes-planeta-vitaminov-mors-altayskiy-iz-yagod-bys--4435429/", "store": "pyaterochka", "cat": "veg", "group": "veg", "id": 78}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-bondyuel-vok-ovoshchi-po-aziatski--4087615/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 79}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-global-village-8-ovoshchey-bystro--4252536/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 80}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-bondyuel-fasule-ovoshchi-po-turet--4087616/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 81}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-miratorg-italyanskaya-zamorozhenn--3415969/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 82}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-global-village-ovoshchi-gril-s-it--4262877/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 83}, {"name": "Стручковая фасоль", "url": "https://5ka.ru/product/fasol-global-village-struchkovaya-zamorozhennaya-4--3228659/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 84}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchnaya-agama-ovoshchnoy-kvartet-zamorozh--4379636/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 85}, {"name": "Овощная смесь", "url": "https://5ka.ru/product/smes-ovoshchey-zimove-paprikash-zamorozhennaya-400--4124099/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 86}, {"name": "Болгарский перец", "url": "https://5ka.ru/product/perets-zimove-sladkiy-rezanyy-zamorozhennyy-400g--4124094/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 87}, {"name": "Брюссельская капуста", "url": "https://5ka.ru/product/kapusta-global-village-bryusselskaya-zamorozhennay--4432992/", "store": "pyaterochka", "cat": "veg", "group": "fruit", "id": 88}, {"name": "Сырники", "url": "https://www.perekrestok.ru/cat/56/p/syrniki-ot-ilinoj-po-domasnemu-300g-3225220", "store": "perekrestok", "cat": "breakfast", "id": 89}, {"name": "Лепешка из муки бобовых с чёрным перцем", "url": "https://www.perekrestok.ru/cat/378/p/lepeska-bikano-papad-iz-muki-bobovyh-s-cernym-percem-200g-4381814", "store": "perekrestok", "cat": "breakfast", "id": 90}, {"name": "Тортилья", "url": "https://www.perekrestok.ru/cat/244/p/lepeska-psenicnaa-delicados-tortili-meksikanskie-syrnye-400g-2039592", "store": "perekrestok", "cat": "breakfast", "id": 91}, {"name": "Сырники", "url": "https://lavka.yandex.ru/good/syrniki-iz-lavki-iz-tvorozhnogo-syra-rikotta-zamorozhennye-300-gram", "store": "lavka", "cat": "breakfast", "id": 92}, {"name": "Сырники", "url": "https://lavka.yandex.ru/good/syrniki-iz-lavki-klassicheskie-zamorozhennye-280-gram", "store": "lavka", "cat": "breakfast", "id": 93}, {"name": "Лепешка роти", "url": "https://lavka.yandex.ru/good/sloyonaya-lepyoshka-roti-450-gram", "store": "lavka", "cat": "breakfast", "id": 94}, {"name": "Тортилья", "url": "https://lavka.yandex.ru/good/meksikanskie-lepeshki-delicados-syrnye-400-gram", "store": "lavka", "cat": "breakfast", "id": 95}, {"name": "Сырники", "url": "https://spb.lenta.com/product/syrniki-klassicheskie-rossiya-220g-831479/", "store": "lenta", "cat": "breakfast", "id": 96}, {"name": "Сырники", "url": "https://spb.lenta.com/product/syrniki-tvorozhnye-bez-zmzh-rossiya-140g-692085/", "store": "lenta", "cat": "breakfast", "id": 97}, {"name": "Тортилья", "url": "https://spb.lenta.com/product/lepeshki-tortili-pshenichnye-so-vkusom-syra-rossiya-400g-459508/", "store": "lenta", "cat": "breakfast", "id": 98}, {"name": "Лепешка роти", "url": "https://spb.lenta.com/product/lepeshka-roti-zam-rossiya-450g-744691/", "store": "lenta", "cat": "breakfast", "id": 99}, {"name": "Сырники", "url": "https://magnit.ru/product/1000389164-ot_ilinoy_syrniki_po_domashnemu_260g?shopCode=992301&shopType=6", "store": "magnit", "cat": "breakfast", "id": 100}, {"name": "Сырники", "url": "https://magnit.ru/product/1000464505-magnit_syrniki_po_domashnemu_zamorozhennye_korona_fud?shopCode=992301&shopType=6", "store": "magnit", "cat": "breakfast", "id": 101}, {"name": "Тортилья", "url": "https://magnit.ru/product/1699900124-delicados_lepeshki_tortili_syrnye_pshen_400g_p_up_10?shopCode=992301&shopType=6", "store": "magnit", "cat": "breakfast", "id": 102}, {"name": "Сырники", "url": "https://vkusvill.ru/goods/syrniki-klassicheskie-zam-54522.html", "store": "vkusvill", "cat": "breakfast", "id": 103}, {"name": "Сырники", "url": "https://vkusvill.ru/goods/syrniki-iz-pechi-klassicheskie-zam-66552.html", "store": "vkusvill", "cat": "breakfast", "id": 104}, {"name": "Сырники из тофу", "url": "https://vkusvill.ru/goods/syrniki-iz-tofu-s-kuragoy-rastitelnye-zam-360-g-75702.html", "store": "vkusvill", "cat": "breakfast", "id": 105}, {"name": "Тортилья", "url": "https://vkusvill.ru/goods/tortilya-pshenichnaya-24852.html", "store": "vkusvill", "cat": "breakfast", "id": 106}, {"name": "Пита", "url": "https://vkusvill.ru/goods/pita-arabskaya-150-g-83295.html", "store": "vkusvill", "cat": "breakfast", "id": 107}, {"name": "Пита ливанская", "url": "https://vkusvill.ru/goods/pita-livanskaya-52952.html", "store": "vkusvill", "cat": "breakfast", "id": 108}, {"name": "Сырники", "url": "https://5ka.ru/product/syrniki-ot-ilinoy-po-domashnemu-300g--3225220/", "store": "pyaterochka", "cat": "breakfast", "id": 109}, {"name": "Сырники", "url": "https://5ka.ru/product/syrniki-sibirskaya-kollektsiya-zapechennye-so-sliv--4376295/", "store": "pyaterochka", "cat": "breakfast", "id": 110}, {"name": "Тортилья", "url": "https://5ka.ru/product/lepeshki-mission-pshenichnye-tortili-gril-250g--3693421/", "store": "pyaterochka", "cat": "breakfast", "id": 111}, {"name": "Сырники", "url": "https://dixy.ru/product/syrniki-ot-ilinoy-po-domashnemu-260g-2000604518/", "store": "dixy", "cat": "breakfast", "id": 112}, {"name": "Тортилья", "url": "https://dixy.ru/product/lepeshki-delicados-tortili-pshenichnye-syrnye-400g-2000155501/", "store": "dixy", "cat": "breakfast", "id": 113}, {"name": "Морской коктейль", "url": "https://spb.lenta.com/product/morskojj-koktejjl-zamorozhennyjj-iqf-kitajj-500g-715620/", "store": "lenta", "cat": "lunch", "id": 114}, {"name": "Морепродукты", "url": "https://spb.lenta.com/product/morskojj-koktejjl-sm-rossiya-400g-226612/", "store": "lenta", "cat": "lunch", "id": 115}, {"name": "Креветки", "url": "https://spb.lenta.com/product/krevetki-korolevskie-v-pancire-sg-varenomorozhenye-ves-rossiya-152153/", "store": "lenta", "cat": "lunch", "id": 116}, {"name": "Кальмар", "url": "https://spb.lenta.com/product/kalmar-tushka-dalnevostochnyjj-neochishchennyjj-sm-ves-rossiya-175676/", "store": "lenta", "cat": "lunch", "id": 117}, {"name": "Кускус с овощами", "url": "https://spb.lenta.com/product/smes-ovoshchnaya-vitamin-kus-kus-s-ovoshchami-v-souse-marokko-rossiya-400g-375235/", "store": "lenta", "cat": "lunch", "id": 118}, {"name": "Киноа с овощами", "url": "https://spb.lenta.com/product/kinoa-s-ovoshchami-i-bazilikom-rossiya-400g-638513/", "store": "lenta", "cat": "lunch", "id": 119}, {"name": "Морепродукты", "url": "https://vkusvill.ru/goods/morskoy-kokteyl-zam-400-g-20480.html", "store": "vkusvill", "cat": "lunch", "id": 120}, {"name": "Минтай", "url": "https://vkusvill.ru/goods/mintay-file-portsionnoe-zam-600-g-107130.html", "store": "vkusvill", "cat": "lunch", "id": 121}, {"name": "Треска", "url": "https://vkusvill.ru/goods/treska-file-portsionnoe-zam-400-g-27926.html", "store": "vkusvill", "cat": "lunch", "id": 122}, {"name": "Котлеты куриные с сыром", "url": "https://vkusvill.ru/goods/kotlety-iz-tsyplenka-broylera-s-syrom-motsarella-zam-800-g-61808.html", "store": "vkusvill", "cat": "lunch", "id": 123}, {"name": "Биточки из индейки с овощами", "url": "https://vkusvill.ru/goods/bitochki-indeyka-ovoshchi-zam-900-g-74699.html", "store": "vkusvill", "cat": "lunch", "id": 124}, {"name": "Котлеты из щуки", "url": "https://vkusvill.ru/goods/kotlety-iz-shchuki-zamorozhennye-ves-91404.html", "store": "vkusvill", "cat": "lunch", "id": 125}, {"name": "Котлеты из индейки, шпината и сыра", "url": "https://vkusvill.ru/goods/kotlety-iz-indeyki-s-syrom-i-shpinatom-zamorozhennye-ves-89924.html", "store": "vkusvill", "cat": "lunch", "id": 126}, {"name": "Морепродукты", "url": "https://magnit.ru/product/1000046380-morskoy_kokteyl_1kg_v_5?shopCode=992301&shopType=6", "store": "magnit", "cat": "lunch", "id": 127}, {"name": "Морепродукты", "url": "https://magnit.ru/product/8000029313-morskoy_kokteyl_morozhenyy_400g?shopCode=992301&shopType=6", "store": "magnit", "cat": "lunch", "id": 128}, {"name": "Креветки", "url": "https://magnit.ru/product/1000570879-agama_krevetka_korol_s_m_ochishch_dlya_salata_krupn_300g_p_up?shopCode=992301&shopType=6", "store": "magnit", "cat": "lunch", "id": 129}, {"name": "Котлеты из индейки", "url": "https://magnit.ru/product/8000069420-indilayt_kotlety_iz_ind_so_slivk_okhl_340g_lotok_penmolin?shopCode=992301&shopType=6", "store": "magnit", "cat": "lunch", "id": 130}, {"name": "Котлеты из курицы с сыром", "url": "https://magnit.ru/product/1000337876-miratorg_kotlety_1010017096_380g_modifitsirovannaya_gazovaya_sreda_bryanskiy_broyler_ooo_4?shopCode=992301&shopType=6", "store": "magnit", "cat": "lunch", "id": 131}, {"name": "Морепродукты", "url": "https://lavka.yandex.ru/good/morskoj-koktejl-moremaniya-svezhemorozhenyj-500-gram", "store": "lavka", "cat": "lunch", "id": 132}, {"name": "Морепродукты", "url": "https://lavka.yandex.ru/good/morskoj-koktejl-iz-lavki-svezhemorozhennyj-400-unit", "store": "lavka", "cat": "lunch", "id": 133}, {"name": "Креветки", "url": "https://lavka.yandex.ru/good/krevetki-koktejlnye-ochishennye-200300-buhta-izobiliya-varyono-morozhenye-200-gram", "store": "lavka", "cat": "lunch", "id": 134}, {"name": "Котлеты из индейки", "url": "https://lavka.yandex.ru/good/kotlety-iz-indejki-dieticheskie-iz-lavki-ohlazhdyonnye-450-gram", "store": "lavka", "cat": "lunch", "id": 135}, {"name": "Биточки куриные", "url": "https://lavka.yandex.ru/good/bitochki-kurinye-iz-lavki-s-syrom-ohlazhdyonnye-480-gram", "store": "lavka", "cat": "lunch", "id": 136}, {"name": "Бифштекс из индейки", "url": "https://lavka.yandex.ru/good/bifshteks-rublenyj-iz-indejki-indilajt-ohlazhdyonnyj-200-gram", "store": "lavka", "cat": "lunch", "id": 137}, {"name": "Креветки", "url": "https://www.perekrestok.ru/cat/1704/p/krevetki-korolevskie-buhta-izobilia-vareno-morozenye-ocisennye-300g-3641931", "store": "perekrestok", "cat": "lunch", "id": 138}, {"name": "Филе тунца", "url": "https://www.perekrestok.ru/cat/812/p/tunec-file-0-05-0-15-kg-3661161", "store": "perekrestok", "cat": "lunch", "id": 139}, {"name": "Окунь", "url": "https://www.perekrestok.ru/cat/812/p/okun-borealis-morskoj-bez-golovy-zamorozennyj-650g-4086079", "store": "perekrestok", "cat": "lunch", "id": 140}, {"name": "Котлеты из трески", "url": "https://www.perekrestok.ru/cat/60/p/kotlety-cetverg-rybnye-iz-treski-zamorozennye-300g-3614367", "store": "perekrestok", "cat": "lunch", "id": 141}, {"name": "Фрикадельки из курицы", "url": "https://www.perekrestok.ru/cat/420/p/frikadelki-vesko-mini-iz-masa-cyplenka-brojlera-zamorozennye-450g-4384676", "store": "perekrestok", "cat": "lunch", "id": 142}, {"name": "Тефтели из индейки", "url": "https://www.perekrestok.ru/cat/1320/p/tefteli-indilajt-rublenye-iz-indejki-ohlazdennye-330g-4050180", "store": "perekrestok", "cat": "lunch", "id": 143}, {"name": "Морепродукты", "url": "https://dixy.ru/product/kokteyl-morskoy-shifudo-zamorojennyy-350g-2000601435/", "store": "dixy", "cat": "lunch", "id": 144}, {"name": "Окунь", "url": "https://dixy.ru/product/okun-morskoy-moreslav-tushka-zamorojennyy-800g-2000234211/", "store": "dixy", "cat": "lunch", "id": 145}, {"name": "Креветки", "url": "https://dixy.ru/product/krevetka-severnaya-borealis-vareno-morojenaya-120150-750g-2000559411/", "store": "dixy", "cat": "lunch", "id": 146}, {"name": "Креветки", "url": "https://5ka.ru/product/krevetki-fish-more-korolevskie-ochishchennye-s-khv--4012971/", "store": "pyaterochka", "cat": "lunch", "id": 147}, {"name": "Треска", "url": "https://5ka.ru/product/treska-atlanticheskaya-borealis-file-bez-kozhi-zam--4119553/", "store": "pyaterochka", "cat": "lunch", "id": 148}, {"name": "Минтай", "url": "https://5ka.ru/product/mintay-borealis-file-blochnoe-bez-kozhi-bez-kostey--4334193/", "store": "pyaterochka", "cat": "lunch", "id": 149}, {"name": "Тунец", "url": "https://5ka.ru/product/tunets-vkus-art-file-bez-kozhi-zamorozhennoe-500g--3624880/", "store": "pyaterochka", "cat": "lunch", "id": 150}, {"name": "Котлеты из брокколи", "url": "https://lavka.yandex.ru/good/kotlety-iz-brokkoli-ot-ilinoj-zamorozhennye-300-gram", "store": "lavka", "cat": "dinner", "id": 151}, {"name": "Котлеты овощные", "url": "https://lavka.yandex.ru/good/kotlety-ot-ilinoj-ovoshnoj-miks-300-gram", "store": "lavka", "cat": "dinner", "id": 152}, {"name": "Галеты морковь, имбирь", "url": "https://lavka.yandex.ru/good/galety-ot-ilinoj-morkov-imbir-postnye-300-gram", "store": "lavka", "cat": "dinner", "id": 153}, {"name": "Овощные галеты", "url": "https://spb.lenta.com/product/ovoshchnye-galety-letnijj-miks-rossiya-300g-498620/", "store": "lenta", "cat": "dinner", "id": 154}, {"name": "Котлеты капустные", "url": "https://spb.lenta.com/product/kotlety-kapustnye-rossiya-480g-501408/", "store": "lenta", "cat": "dinner", "id": 155}, {"name": "Овощные котлеты", "url": "https://vkusvill.ru/goods/kotlety-ovoshchnye-iz-brokkoli-i-shpinata-zamorozhennye-ves-89925.html", "store": "vkusvill", "cat": "dinner", "id": 156}, {"name": "Котлеты из чечевицы", "url": "https://vkusvill.ru/goods/kotlety-iz-chechevitsy-75449.html", "store": "vkusvill", "cat": "dinner", "id": 157}, {"name": "Биточки свекольные", "url": "https://vkusvill.ru/goods/bitochki-svekolnye-43469.html", "store": "vkusvill", "cat": "dinner", "id": 158}, {"name": "Котлеты фасолевые", "url": "https://vkusvill.ru/goods/kotlety-fasolevye-s-gribami-i-lukom-zam-ves-91626.html", "store": "vkusvill", "cat": "dinner", "id": 159}, {"name": "Биточки овощные с кукурузой", "url": "https://vkusvill.ru/goods/bitochki-ovoshchnye-s-kukuruzoy-zam-108484.html", "store": "vkusvill", "cat": "dinner", "id": 160}, {"name": "Котлеты овощные", "url": "https://dixy.ru/product/kotlety-ovoshchnye-morozko-green-150-g-2000273839/", "store": "dixy", "cat": "dinner", "id": 161}, {"name": "Котлеты капустные", "url": "https://dixy.ru/product/kotlety-ot-ilinoy-kapustnye-300-g-2000071739/", "store": "dixy", "cat": "dinner", "id": 162}]; const STORES = { lavka: { name: "Яндекс Лавка", emoji: "💙" }, lenta: { name: "Лента", emoji: "🔷" }, perekrestok: { name: "Перекрёсток", emoji: "🟢" }, magnit: { name: "Магнит", emoji: "🔴" }, vkusvill: { name: "ВкусВилл", emoji: "🟩" }, pyaterochka: { name: "Пятёрочка", emoji: "🟠" }, dixy: { name: "Дикси", emoji: "🟡" }, }; const CATS = [ { key: "veg", label: "Овощи / Фрукты", emoji: "🥦" }, { key: "breakfast", label: "Завтраки", emoji: "🍳" }, { key: "lunch", label: "Обеды", emoji: "🍲" }, { key: "dinner", label: "Ужины", emoji: "🥗" }, ]; const GROUP_LABEL = { veg: "Овощи", fruit: "Ягоды и фрукты" }; </script> <script> (function () { const state = { activeCat: "veg", activeStores: new Set(Object.keys(STORES)), // all active by default query: "", checked: new Set(), // ids marked as "tried" }; const tabsEl = document.getElementById("tabs"); const legendEl = document.getElementById("legendStrip"); const wrapEl = document.getElementById("wrap"); const searchInput = document.getElementById("searchInput"); const storeIndicator = document.getElementById("storeIndicator"); function countFor(catKey) { return ITEMS.filter((i) => i.cat === catKey).length; } function renderTabs() { tabsEl.innerHTML = ""; CATS.forEach((c) => { const btn = document.createElement("button"); const isActive = !state.query && state.activeCat === c.key; btn.className = "tab-btn" + (isActive ? " active" : ""); btn.innerHTML = `<span>${c.emoji}</span> ${c.label} <span class="tab-count">${countFor(c.key)}</span>`; btn.addEventListener("click", () => { state.activeCat = c.key; state.query = ""; searchInput.value = ""; renderTabs(); renderContent(); }); tabsEl.appendChild(btn); }); } function renderLegend() { legendEl.innerHTML = ""; Object.entries(STORES).forEach(([key, s]) => { const chip = document.createElement("button"); const isSolo = state.activeStores.size === 1 && state.activeStores.has(key); chip.className = "legend-chip" + (isSolo ? " active-store" : ""); chip.type = "button"; chip.innerHTML = `<span class="legend-swatch" style="background:var(--${key})"></span>${s.name}`; chip.addEventListener("click", () => { if (isSolo) { // toggle back to "all stores" state.activeStores = new Set(Object.keys(STORES)); } else { state.activeStores = new Set([key]); } renderLegend(); renderStoreIndicator(); renderContent(); }); legendEl.appendChild(chip); }); } function storeIconSVG() { return `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 9l1-5h16l1 5"/><path d="M4 9v10a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V9"/><path d="M9 21V13h6v8"/></svg>`; } function renderStoreIndicator() { const total = Object.keys(STORES).length; const n = state.activeStores.size; let label; if (n === total) { label = "Все магазины"; } else if (n === 1) { const key = [...state.activeStores][0]; label = STORES[key].name; } else { label = `Магазинов: ${n}`; } storeIndicator.innerHTML = `${storeIconSVG()} ${label}`; } storeIndicator.addEventListener("click", () => { document.querySelector(".hero").scrollIntoView({ behavior: "smooth", block: "start" }); }); function checkIconSVG() { return `<svg viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>`; } function goIconSVG() { return `<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round"><line x1="7" y1="17" x2="17" y2="7"></line><polyline points="7 7 17 7 17 17"></polyline></svg>`; } function matchesQuery(item) { if (!state.query) return true; return item.name.toLowerCase().includes(state.query); } function renderContent() { wrapEl.innerHTML = ""; if (state.query) { renderSearchResults(); return; } const cat = CATS.find((c) => c.key === state.activeCat); const section = document.createElement("section"); section.className = "section active"; const head = document.createElement("div"); head.className = "section-head"; head.innerHTML = `<span class="emoji">${cat.emoji}</span><h2 class="display">${cat.label}</h2>`; section.appendChild(head); const filtered = ITEMS.filter( (i) => i.cat === state.activeCat && state.activeStores.has(i.store) ); if (filtered.length === 0) { const empty = document.createElement("div"); empty.className = "empty-state"; empty.innerHTML = `<div class="big">🧊</div>Ничего не нашлось. Попробуй изменить фильтр по магазинам.`; section.appendChild(empty); wrapEl.appendChild(section); return; } if (state.activeCat === "veg") { // group by store, then by veg/fruit within store const byStore = groupBy(filtered, "store"); Object.entries(STORES).forEach(([storeKey]) => { const items = byStore[storeKey]; if (!items || !items.length) return; const storeBlock = renderStoreBlockGrouped(storeKey, items); section.appendChild(storeBlock); }); } else { const byStore = groupBy(filtered, "store"); Object.entries(STORES).forEach(([storeKey]) => { const items = byStore[storeKey]; if (!items || !items.length) return; const storeBlock = renderStoreBlock(storeKey, items); section.appendChild(storeBlock); }); } wrapEl.appendChild(section); } function renderSearchResults() { const matched = ITEMS.filter( (i) => state.activeStores.has(i.store) && matchesQuery(i) ); const section = document.createElement("section"); section.className = "section active"; const head = document.createElement("div"); head.className = "section-head"; head.innerHTML = `<span class="emoji">🔎</span><h2 class="display">Результаты поиска</h2>`; section.appendChild(head); if (matched.length === 0) { const empty = document.createElement("div"); empty.className = "empty-state"; empty.innerHTML = `<div class="big">🧊</div>Ничего не нашлось ни в одном разделе. Попробуй другой запрос или другой набор магазинов.`; section.appendChild(empty); wrapEl.appendChild(section); return; } const sub = document.createElement("div"); sub.className = "section-sub"; sub.textContent = `Найдено ${matched.length} ${pluralPositions(matched.length)} по всем разделам`; section.appendChild(sub); CATS.forEach((c) => { const inCat = matched.filter((i) => i.cat === c.key); if (!inCat.length) return; const gTitle = document.createElement("div"); gTitle.className = "group-title"; gTitle.innerHTML = `${c.emoji} ${c.label}`; section.appendChild(gTitle); const byStore = groupBy(inCat, "store"); Object.entries(STORES).forEach(([storeKey]) => { const items = byStore[storeKey]; if (!items || !items.length) return; const storeBlock = c.key === "veg" ? renderStoreBlockGrouped(storeKey, items) : renderStoreBlock(storeKey, items); section.appendChild(storeBlock); }); }); wrapEl.appendChild(section); } function pluralPositions(n) { const mod10 = n % 10; const mod100 = n % 100; if (mod10 === 1 && mod100 !== 11) return "позиция"; if ([2, 3, 4].includes(mod10) && ![12, 13, 14].includes(mod100)) return "позиции"; return "позиций"; } function groupBy(arr, key) { return arr.reduce((acc, item) => { (acc[item[key]] = acc[item[key]] || []).push(item); return acc; }, {}); } function renderStoreBlock(storeKey, items) { const store = STORES[storeKey]; const div = document.createElement("div"); div.className = "store-group"; div.setAttribute("data-store", storeKey); div.innerHTML = ` <div class="store-group-head"> <span class="store-dot"></span> <h3>${store.name}</h3> <span class="cnt">${items.length}</span> </div> <div class="item-list"></div> `; const list = div.querySelector(".item-list"); items.forEach((item) => list.appendChild(renderItemRow(item))); return div; } function renderStoreBlockGrouped(storeKey, items) { const store = STORES[storeKey]; const div = document.createElement("div"); div.className = "store-group"; div.setAttribute("data-store", storeKey); const veg = items.filter((i) => i.group === "veg"); const fruit = items.filter((i) => i.group === "fruit"); let inner = ` <div class="store-group-head"> <span class="store-dot"></span> <h3>${store.name}</h3> <span class="cnt">${items.length}</span> </div> <div class="item-list" id="list-${storeKey}"></div> `; div.innerHTML = inner; const list = div.querySelector(`#list-${storeKey}`); if (veg.length) { veg.forEach((item) => list.appendChild(renderItemRow(item))); } if (fruit.length) { if (veg.length) { const divider = document.createElement("div"); divider.style.borderTop = "1px dashed var(--line)"; divider.style.margin = "2px 16px"; list.appendChild(divider); } fruit.forEach((item) => list.appendChild(renderItemRow(item))); } return div; } function renderItemRow(item) { const a = document.createElement("a"); a.className = "item-row" + (state.checked.has(item.id) ? " done" : ""); a.href = item.url && item.url.startsWith("http") ? item.url : "https://" + item.url; a.target = "_blank"; a.rel = "noopener noreferrer"; const checkBtn = document.createElement("span"); checkBtn.className = "item-check" + (state.checked.has(item.id) ? " checked" : ""); checkBtn.innerHTML = checkIconSVG(); checkBtn.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); if (state.checked.has(item.id)) { state.checked.delete(item.id); } else { state.checked.add(item.id); } renderContent(); }); const name = document.createElement("span"); name.className = "item-name"; name.textContent = item.name; const go = document.createElement("span"); go.className = "item-go"; go.innerHTML = goIconSVG(); a.appendChild(checkBtn); a.appendChild(name); a.appendChild(go); return a; } searchInput.addEventListener("input", (e) => { state.query = e.target.value.trim().toLowerCase(); renderTabs(); renderContent(); }); renderTabs(); renderLegend(); renderStoreIndicator(); renderContent(); })(); </script> </body> </html>