zamorozki.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>