{"product_id":"luchbox-bento","title":"luchbox bento","description":"\n{% assign current_product = product %}\n{% if current_product == blank %}\n  \u003cp\u003ePlease add this block to a product page.\u003c\/p\u003e\n{% else %}\n\n{% assign current_variant = current_product.selected_or_first_available_variant %}\n\n\u003cstyle\u003e\n  .sr-product {\n    display:grid;\n    grid-template-columns:minmax(0, 1fr) minmax(0, .88fr);\n    gap:30px;\n    max-width:1250px;\n    margin:0 auto;\n    padding:8px 20px 24px;\n    color:#171717;\n    font-family:inherit;\n    font-size:12px;\n  }\n  .sr-gallery,.sr-details { min-width:0; }\n  .sr-main-image {\n    width:100%;\n    aspect-ratio:1\/1;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    overflow:hidden;\n    background:#f7f5f2;\n    border-radius:12px;\n  }\n  .sr-main-image img {\n    width:100%;\n    height:100%;\n    object-fit:contain;\n    display:block;\n  }\n  .sr-thumbnails {\n    display:flex;\n    gap:7px;\n    margin-top:9px;\n    overflow-x:auto;\n    scrollbar-width:thin;\n  }\n  .sr-thumb {\n    flex:1 0 0;\n    min-width:0;\n    max-width:72px;\n    padding:3px;\n    aspect-ratio:1\/1;\n    border:1px solid #e5e5e5;\n    border-radius:7px;\n    background:#fff;\n    cursor:pointer;\n  }\n  .sr-thumb.is-active { border:1.5px solid #252525; }\n  .sr-thumb img { width:100%;height:100%;object-fit:contain;display:block; }\n  .sr-rating { display:flex;align-items:center;gap:5px;margin:0 0 9px; }\n  .sr-stars { color:#f5b400;letter-spacing:-1px;font-size:14px;white-space:nowrap; }\n  .sr-review-count { color:#555;font-size:10px; }\n  .sr-title { font-size:24px;line-height:1.13;font-weight:750;margin:0 0 9px; }\n  .sr-description { font-size:11px;line-height:1.55;color:#333;margin:0 0 12px; }\n  .sr-price-row { display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:0 0 12px; }\n  .sr-price { font-size:15px;font-weight:700; }\n  .sr-compare { font-size:11px;color:#777;text-decoration:line-through; }\n  .sr-sub-badge { border:1px solid #aaa;border-radius:20px;padding:3px 9px;font-size:10px;color:#444; }\n  .sr-divider { border:0;border-top:1px solid #e5e2dd;margin:12px 0; }\n  .sr-benefits { list-style:none;margin:0;padding:0;display:grid;gap:8px; }\n  .sr-benefits li { display:flex;gap:7px;align-items:flex-start;font-size:11px;line-height:1.4; }\n  .sr-benefit-icon { width:14px;flex:0 0 14px;text-align:center; }\n  .sr-label { font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;margin:13px 0 7px; }\n  .sr-quantity { display:flex;align-items:center;width:100px;height:31px;border:1px solid #d7d7d7; }\n  .sr-quantity button { width:32px;height:100%;border:0;background:transparent;cursor:pointer;font-size:15px; }\n  .sr-quantity input { min-width:0;width:34px;text-align:center;border:0;padding:0;background:transparent;font:inherit;appearance:textfield; }\n  .sr-quantity input::-webkit-inner-spin-button { appearance:none; }\n  .sr-packs { display:flex;flex-wrap:wrap;gap:5px; }\n  .sr-pack { border:1px solid #d4d4d4;background:#fff;color:#222;border-radius:20px;padding:6px 8px;font:inherit;font-size:9px;cursor:pointer; }\n  .sr-pack.is-active { border-color:#222;background:#f5f5f5; }\n  .sr-pack-note { color:#666;font-size:10px;margin-top:5px; }\n  .sr-purchase-title { font-size:10px;margin:15px 0 7px; }\n  .sr-purchase-options { display:grid;gap:6px; }\n  .sr-purchase {\n    display:flex;align-items:center;justify-content:space-between;gap:8px;\n    border:1px solid #333;border-radius:11px;padding:12px 13px;min-height:57px;\n    cursor:pointer;background:#fff;\n  }\n  .sr-purchase.is-active { border-color:#111; }\n  .sr-purchase-left { display:flex;align-items:center;flex-wrap:wrap;gap:5px; }\n  .sr-save { background:#234a86;color:white;border-radius:20px;padding:3px 6px;font-size:9px;font-weight:700; }\n  .sr-purchase-right { display:flex;align-items:center;gap:8px;text-align:right;white-space:nowrap; }\n  .sr-purchase-prices { display:flex;flex-direction:column;gap:1px; }\n  .sr-purchase-prices strong { font-size:12px; }\n  .sr-purchase-prices del { color:#777;font-size:9px; }\n  .sr-radio { width:15px;height:15px;border:1px solid #777;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0; }\n  .sr-purchase.is-active .sr-radio:after { content:\"\";width:7px;height:7px;background:#111;border-radius:50%; }\n  .sr-powered { display:flex;align-items:center;gap:7px;margin:14px 0;color:#444;font-size:10px; }\n  .sr-powered-mark { color:#60a64c;font-size:15px; }\n  .sr-add {\n    width:100%;min-height:46px;border:0;border-radius:10px;background:#586f9f;\n    color:#fff;font-weight:700;font-size:12px;cursor:pointer;padding:12px;\n  }\n  .sr-add:disabled { opacity:.75;cursor:not-allowed; }\n  .sr-error { color:#b42318;font-size:11px;margin-top:8px; }\n  .sr-trust { display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;text-align:center;margin:19px 0 15px; }\n  .sr-trust-item { display:flex;align-items:center;flex-direction:column;gap:6px;font-size:10px;line-height:1.4; }\n  .sr-trust-item svg { width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:1.7; }\n  .sr-review { display:grid;grid-template-columns:70px minmax(0,1fr);gap:12px;padding:14px 0; }\n  .sr-avatar { width:66px;height:66px;border-radius:50%;object-fit:cover;background:#eee; }\n  .sr-review-stars { color:#f5b400;letter-spacing:1px;font-size:15px;margin-bottom:4px; }\n  .sr-review-text { font-size:11px;line-height:1.55;margin:0 0 8px; }\n  .sr-review-author { font-size:11px;font-weight:700; }\n  .sr-verified { color:#2998ee; }\n  .sr-accordion { border-top:1px solid #e5e2dd; }\n  .sr-accordion:last-child { border-bottom:1px solid #e5e2dd; }\n  .sr-accordion summary { list-style:none;display:flex;align-items:center;gap:12px;min-height:40px;cursor:pointer;font-size:11px; }\n  .sr-accordion summary::-webkit-details-marker { display:none; }\n  .sr-acc-icon { width:16px;flex:0 0 16px; }\n  .sr-chevron { margin-left:auto;width:9px;height:9px;border-right:1.5px solid;border-bottom:1.5px solid;transform:rotate(45deg);margin-right:5px;margin-top:-5px; }\n  .sr-accordion[open] .sr-chevron { transform:rotate(225deg);margin-top:5px; }\n  .sr-accordion-content { padding:0 0 12px 28px;font-size:11px;line-height:1.6;color:#444; }\n  .sr-accordion-content p { margin:0; }\n  @media(max-width:749px) {\n    .sr-product { grid-template-columns:minmax(0,1fr);gap:20px;padding:8px 15px 20px; }\n    .sr-title { font-size:22px; }\n    .sr-main-image { max-height:540px; }\n    .sr-thumb { flex:0 0 64px; }\n  }\n\u003c\/style\u003e\n\n\u003cdiv class=\"sr-product\" id=\"sr-product-{{ current_product.id }}\"\u003e\n  \u003cdiv class=\"sr-gallery\"\u003e\n    \u003cdiv class=\"sr-main-image\"\u003e\n      {% if current_product.featured_media %}\n        \u003cimg id=\"sr-main-{{ current_product.id }}\" src=\"{{%20current_product.featured_media.preview_image%20|%20image_url:%20width:%201000%20}}\" alt=\"{{ current_product.featured_media.alt | default: current_product.title | escape }}\" width=\"1000\" height=\"1000\" fetchpriority=\"high\"\u003e\n      {% endif %}\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sr-thumbnails\" aria-label=\"Product images\"\u003e\n      {% for media in current_product.media limit: 6 %}\n        {% if media.media_type == 'image' %}\n          \u003cbutton type=\"button\" class=\"sr-thumb {% if media.id == current_product.featured_media.id %}is-active{% endif %}\" data-full=\"{{ media.preview_image | image_url: width: 1000 }}\" data-alt=\"{{ media.alt | default: current_product.title | escape }}\" aria-label=\"View product image {{ forloop.index }}\"\u003e\n            \u003cimg src=\"{{%20media.preview_image%20|%20image_url:%20width:%20140%20}}\" alt=\"{{ media.alt | default: current_product.title | escape }}\" width=\"140\" height=\"140\" loading=\"lazy\"\u003e\n          \u003c\/button\u003e\n        {% endif %}\n      {% endfor %}\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"sr-details\"\u003e\n    \u003cdiv class=\"sr-rating\"\u003e\n      \u003cspan class=\"sr-stars\" aria-label=\"5 out of 5 stars\"\u003e★★★★★\u003c\/span\u003e\n      \u003cspan class=\"sr-review-count\"\u003e46 reviews\u003c\/span\u003e\n    \u003c\/div\u003e\n\n    \u003ch1 class=\"sr-title\"\u003e{{ current_product.title | escape }}\u003c\/h1\u003e\n\n    \u003cdiv class=\"sr-description\"\u003e\n      {% if current_product.description != blank %}\n        {{ current_product.description | strip_html | truncate: 230 }}\n      {% else %}\n        Discover the details and benefits of this product.\n      {% endif %}\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"sr-price-row\"\u003e\n      \u003cspan class=\"sr-price\" data-main-price\u003e{{ current_variant.price | money }}\u003c\/span\u003e\n      \u003cspan class=\"sr-compare\" data-main-compare unless current_variant.compare_at_price\u003e current_variant.price %}hidden{% endunless %}\u0026gt;\n        {% if current_variant.compare_at_price \u0026gt; current_variant.price %}{{ current_variant.compare_at_price | money }}{% endif %}\n      \u003c\/span\u003e\n      {% if current_product.selling_plan_groups.size \u0026gt; 0 %}\n        \u003cspan class=\"sr-sub-badge\"\u003eSubscription\u003c\/span\u003e\n      {% endif %}\n    \u003c\/div\u003e\n\n    \u003chr class=\"sr-divider\"\u003e\n\n    \u003cul class=\"sr-benefits\"\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e🌈\u003c\/span\u003e\u003cspan\u003eImprove your sleep.\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e🌬️\u003c\/span\u003e\u003cspan\u003eEliminates snoring.\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e🫁\u003c\/span\u003e\u003cspan\u003eReduce breathing interruptions related to sleep apnea.\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e💤\u003c\/span\u003e\u003cspan\u003eDeep and restorative sleep.\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e🌅\u003c\/span\u003e\u003cspan\u003eImprove your nights starting tonight.\u003c\/span\u003e\n\u003c\/li\u003e\n      \u003cli\u003e\n\u003cspan class=\"sr-benefit-icon\"\u003e🤝\u003c\/span\u003e\u003cspan\u003eSleep peacefully together.\u003c\/span\u003e\n\u003c\/li\u003e\n    \u003c\/ul\u003e\n\n    \u003chr class=\"sr-divider\"\u003e\n\n    \u003cform method=\"post\" action=\"{{%20routes.cart_add_url%20}}\" enctype=\"multipart\/form-data\" id=\"sr-form-{{ current_product.id }}\"\u003e\n      \u003cinput type=\"hidden\" name=\"id\" value=\"{{ current_variant.id }}\" data-variant-id\u003e\n      \u003cinput type=\"hidden\" name=\"selling_plan\" value=\"\" data-selling-plan\u003e\n\n      \u003cdiv class=\"sr-label\"\u003eQuantity\u003c\/div\u003e\n      \u003cdiv class=\"sr-quantity\"\u003e\n        \u003cbutton type=\"button\" data-qty-minus aria-label=\"Decrease quantity\"\u003e−\u003c\/button\u003e\n        \u003cinput type=\"number\" name=\"quantity\" value=\"1\" min=\"1\" step=\"1\" aria-label=\"Quantity\" data-qty\u003e\n        \u003cbutton type=\"button\" data-qty-plus aria-label=\"Increase quantity\"\u003e+\u003c\/button\u003e\n      \u003c\/div\u003e\n\n      {% unless current_product.has_only_default_variant %}\n        \u003cdiv class=\"sr-label\"\u003ePack selection\u003c\/div\u003e\n        \u003cdiv class=\"sr-packs\"\u003e\n          {% for variant in current_product.variants %}\n            \u003cbutton type=\"button\" class=\"sr-pack {% if variant.id == current_variant.id %}is-active{% endif %}\" data-pack data-id=\"{{ variant.id }}\" data-price=\"{{ variant.price }}\" data-compare=\"{{ variant.compare_at_price | default: 0 }}\" data-available=\"{{ variant.available }}\" data-selling-plan-ids=\"{% for group in variant.selling_plan_allocations %}{{ group.selling_plan.id }}{% unless forloop.last %},{% endunless %}{% endfor %}\"\u003e\n              {{ variant.title | escape }}\n            \u003c\/button\u003e\n          {% endfor %}\n        \u003c\/div\u003e\n        \u003cp class=\"sr-pack-note\"\u003eSelect your preferred pack.\u003c\/p\u003e\n      {% endunless %}\n\n      {% if current_product.selling_plan_groups.size \u0026gt; 0 %}\n        \u003cdiv class=\"sr-purchase-title\"\u003ePurchase options\u003c\/div\u003e\n        \u003cdiv class=\"sr-purchase-options\"\u003e\n          \u003clabel class=\"sr-purchase is-active\" data-purchase=\"subscription\"\u003e\n            \u003cspan class=\"sr-purchase-left\"\u003e\n              \u003cspan\u003eSubscribe\u003c\/span\u003e\n              \u003cspan class=\"sr-save\"\u003eSave on subscription\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"sr-purchase-right\"\u003e\n              \u003cspan class=\"sr-purchase-prices\"\u003e\n                \u003cdel data-sub-compare\u003e\u003c\/del\u003e\n                \u003cstrong data-sub-price\u003e{{ current_variant.price | money }}\u003c\/strong\u003e\n              \u003c\/span\u003e\n              \u003cinput type=\"radio\" name=\"sr-purchase-type\" value=\"subscription\" checked hidden\u003e\n              \u003cspan class=\"sr-radio\"\u003e\u003c\/span\u003e\n            \u003c\/span\u003e\n          \u003c\/label\u003e\n\n          \u003clabel class=\"sr-purchase\" data-purchase=\"onetime\"\u003e\n            \u003cspan\u003eOne-time purchase\u003c\/span\u003e\n            \u003cspan class=\"sr-purchase-right\"\u003e\n              \u003cstrong data-one-price\u003e{{ current_variant.price | money }}\u003c\/strong\u003e\n              \u003cinput type=\"radio\" name=\"sr-purchase-type\" value=\"onetime\" hidden\u003e\n              \u003cspan class=\"sr-radio\"\u003e\u003c\/span\u003e\n            \u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"sr-label\"\u003eSubscription frequency\u003c\/div\u003e\n        \u003cselect data-plan-select aria-label=\"Subscription frequency\" style=\"width:100%;padding:9px;border:1px solid #ddd;border-radius:7px;background:#fff;font:inherit\"\u003e\n          {% for group in current_product.selling_plan_groups %}\n            {% for plan in group.selling_plans %}\n              \u003coption value=\"{{ plan.id }}\"\u003e{{ plan.name | escape }}\u003c\/option\u003e\n            {% endfor %}\n          {% endfor %}\n        \u003c\/select\u003e\n      {% endif %}\n\n      \u003cdiv class=\"sr-powered\"\u003e\n\u003cspan class=\"sr-powered-mark\"\u003e◉\u003c\/span\u003e\u003cspan\u003ePowered by Subi\u003c\/span\u003e\n\u003c\/div\u003e\n\n      \u003cbutton class=\"sr-add\" type=\"submit\" data-add unless current_variant.available endunless\u003e\n        {% if current_variant.available %}Add to cart{% else %}Sold Out{% endif %}\n      \u003c\/button\u003e\n      \u003cdiv class=\"sr-error\" data-error role=\"alert\" hidden\u003e\u003c\/div\u003e\n    \u003c\/form\u003e\n\n    \u003cdiv class=\"sr-trust\"\u003e\n      \u003cdiv class=\"sr-trust-item\"\u003e\n        \u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M2 7h13v11H2zM15 11h4l3 3v4h-7z\"\u003e\u003c\/path\u003e\u003ccircle cx=\"6\" cy=\"19\" r=\"2\"\u003e\u003c\/circle\u003e\u003ccircle cx=\"18\" cy=\"19\" r=\"2\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\n        \u003cspan\u003eFast delivery\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sr-trust-item\"\u003e\n        \u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"m12 2 9 5v10l-9 5-9-5V7zM3 7l9 5 9-5M12 12v10M7.5 4.5l9 5\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003cspan\u003eFree returns\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sr-trust-item\"\u003e\n        \u003csvg viewbox=\"0 0 24 24\"\u003e\u003cpath d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1.1-1.1a5.5 5.5 0 0 0-7.8 7.8l1.1 1.1L12 21l7.8-7.5 1.1-1.1a5.5 5.5 0 0 0-.1-7.8z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n        \u003cspan\u003e30-day money-back guarantee\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003chr class=\"sr-divider\"\u003e\n\n    \u003cdiv class=\"sr-review\"\u003e\n      \u003cimg class=\"sr-avatar\" src=\"{{%20current_product.featured_image%20|%20image_url:%20width:%20140%20}}\" alt=\"Product image\" width=\"66\" height=\"66\" loading=\"lazy\"\u003e\n      \u003cdiv\u003e\n        \u003cdiv class=\"sr-review-stars\"\u003e★★★★★\u003c\/div\u003e\n        \u003cp class=\"sr-review-text\"\u003eSince I started using this product, my nights have changed. I highly recommend it!\u003c\/p\u003e\n        \u003cspan class=\"sr-review-author\"\u003e\u003cspan class=\"sr-verified\"\u003e●\u003c\/span\u003e Customer review\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdetails class=\"sr-accordion\"\u003e\n      \u003csummary\u003e\u003cspan class=\"sr-acc-icon\"\u003e◎\u003c\/span\u003e\u003cspan\u003eDelivery information\u003c\/span\u003e\u003cspan class=\"sr-chevron\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\n      \u003cdiv class=\"sr-accordion-content\"\u003e\n        \u003cp\u003eDelivery times and shipping costs are shown at checkout. Please refer to the store's shipping policy for details.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n\n    \u003cdetails class=\"sr-accordion\"\u003e\n      \u003csummary\u003e\u003cspan class=\"sr-acc-icon\"\u003e↶\u003c\/span\u003e\u003cspan\u003eReturn policy\u003c\/span\u003e\u003cspan class=\"sr-chevron\"\u003e\u003c\/span\u003e\u003c\/summary\u003e\n      \u003cdiv class=\"sr-accordion-content\"\u003e\n        \u003cp\u003ePlease refer to the store's published refund and return policy for eligibility and instructions.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/details\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n(function() {\n  const root = document.getElementById('sr-product-{{ current_product.id }}');\n  if (!root || root.dataset.initialized) return;\n  root.dataset.initialized = 'true';\n\n  const form = root.querySelector('form');\n  const mainImage = root.querySelector('#sr-main-{{ current_product.id }}');\n  const thumbs = root.querySelectorAll('.sr-thumb');\n  const qty = root.querySelector('[data-qty]');\n  const variantInput = root.querySelector('[data-variant-id]');\n  const sellingPlanInput = root.querySelector('[data-selling-plan]');\n  const planSelect = root.querySelector('[data-plan-select]');\n  const addButton = root.querySelector('[data-add]');\n  const errorBox = root.querySelector('[data-error]');\n  const mainPrice = root.querySelector('[data-main-price]');\n  const comparePrice = root.querySelector('[data-main-compare]');\n  const subPrice = root.querySelector('[data-sub-price]');\n  const subCompare = root.querySelector('[data-sub-compare]');\n  const onePrice = root.querySelector('[data-one-price]');\n  const purchaseCards = root.querySelectorAll('[data-purchase]');\n  const packButtons = root.querySelectorAll('[data-pack]');\n\n  let selectedVariant = {\n    id: variantInput.value,\n    price: {{ current_variant.price | json }},\n    compare: {{ current_variant.compare_at_price | default: 0 | json }},\n    available: {{ current_variant.available | json }}\n  };\n  let purchaseType = planSelect ? 'subscription' : 'onetime';\n\n  function money(cents) {\n    return new Intl.NumberFormat('{{ localization.language.iso_code | default: \"en\" }}', {\n      style: 'currency',\n      currency: '{{ cart.currency.iso_code | default: shop.currency }}'\n    }).format((Number(cents) || 0) \/ 100);\n  }\n\n  function updatePrices() {\n    mainPrice.textContent = money(selectedVariant.price);\n    onePrice \u0026\u0026 (onePrice.textContent = money(selectedVariant.price));\n\n    if (selectedVariant.compare \u003e selectedVariant.price) {\n      comparePrice.hidden = false;\n      comparePrice.textContent = money(selectedVariant.compare);\n    } else {\n      comparePrice.hidden = true;\n      comparePrice.textContent = '';\n    }\n\n    if (subPrice) subPrice.textContent = money(selectedVariant.price);\n    if (subCompare) {\n      subCompare.textContent = selectedVariant.compare \u003e selectedVariant.price\n        ? money(selectedVariant.compare) : '';\n    }\n\n    addButton.disabled = !selectedVariant.available;\n    addButton.textContent = selectedVariant.available ? 'Add to cart' : 'Sold Out';\n  }\n\n  function updatePurchaseType(type) {\n    purchaseType = type;\n    purchaseCards.forEach(card =\u003e {\n      const active = card.dataset.purchase === type;\n      card.classList.toggle('is-active', active);\n      const radio = card.querySelector('input[type=\"radio\"]');\n      if (radio) radio.checked = active;\n    });\n\n    if (planSelect) {\n      planSelect.style.display = type === 'subscription' ? 'block' : 'none';\n      sellingPlanInput.value = type === 'subscription' ? planSelect.value : '';\n    } else {\n      sellingPlanInput.value = '';\n    }\n  }\n\n  thumbs.forEach(thumb =\u003e {\n    thumb.addEventListener('click', () =\u003e {\n      if (mainImage) {\n        mainImage.src = thumb.dataset.full;\n        mainImage.alt = thumb.dataset.alt || '';\n      }\n      thumbs.forEach(t =\u003e t.classList.toggle('is-active', t === thumb));\n    });\n  });\n\n  root.querySelector('[data-qty-minus]').addEventListener('click', () =\u003e {\n    qty.value = Math.max(1, (parseInt(qty.value, 10) || 1) - 1);\n  });\n  root.querySelector('[data-qty-plus]').addEventListener('click', () =\u003e {\n    qty.value = Math.max(1, parseInt(qty.value, 10) || 1) + 1;\n  });\n  qty.addEventListener('change', () =\u003e {\n    qty.value = Math.max(1, parseInt(qty.value, 10) || 1);\n  });\n\n  packButtons.forEach(button =\u003e {\n    button.addEventListener('click', () =\u003e {\n      selectedVariant = {\n        id: button.dataset.id,\n        price: Number(button.dataset.price),\n        compare: Number(button.dataset.compare),\n        available: button.dataset.available === 'true'\n      };\n      variantInput.value = selectedVariant.id;\n      packButtons.forEach(b =\u003e b.classList.toggle('is-active', b === button));\n\n      if (planSelect) {\n        const validIds = (button.dataset.sellingPlanIds || '').split(',');\n        const matchingOption = Array.from(planSelect.options).find(o =\u003e validIds.includes(o.value));\n        if (matchingOption) planSelect.value = matchingOption.value;\n      }\n\n      updatePrices();\n      updatePurchaseType(purchaseType);\n    });\n  });\n\n  purchaseCards.forEach(card =\u003e {\n    card.addEventListener('click', () =\u003e updatePurchaseType(card.dataset.purchase));\n  });\n\n  if (planSelect) {\n    planSelect.addEventListener('change', () =\u003e {\n      sellingPlanInput.value = purchaseType === 'subscription' ? planSelect.value : '';\n    });\n  }\n\n  updatePrices();\n  updatePurchaseType(purchaseType);\n\n  form.addEventListener('submit', async event =\u003e {\n    event.preventDefault();\n    errorBox.hidden = true;\n\n    if (!selectedVariant.available) return;\n\n    sellingPlanInput.value = purchaseType === 'subscription' \u0026\u0026 planSelect\n      ? planSelect.value : '';\n\n    const originalText = addButton.textContent;\n    addButton.disabled = true;\n    addButton.textContent = 'Adding…';\n\n    try {\n      const response = await fetch('{{ routes.cart_add_url }}.js', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\n        body: JSON.stringify({\n          id: Number(variantInput.value),\n          quantity: Math.max(1, parseInt(qty.value, 10) || 1),\n          ...(sellingPlanInput.value ? { selling_plan: Number(sellingPlanInput.value) } : {})\n        })\n      });\n\n      const result = await response.json();\n      if (!response.ok) throw new Error(result.description || result.message || 'Unable to add this item.');\n\n      window.location.href = '{{ routes.cart_url }}';\n    } catch (error) {\n      errorBox.textContent = error.message || 'Something went wrong. Please try again.';\n      errorBox.hidden = false;\n      addButton.disabled = !selectedVariant.available;\n      addButton.textContent = originalText;\n    }\n  });\n})();\n\u003c\/script\u003e\n\n{% endif %}\n","brand":"Ma lunchbox","offers":[{"title":"Default Title","offer_id":46132987035783,"sku":null,"price":0.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0765\/9107\/1367\/files\/ChatGPT_Image_8_oct._2026_a_12_54_24_9baf6a87-bd6d-492f-ab24-a2aa596d2ae4.png?v=1791458047","url":"https:\/\/malunchbox.com\/de-de\/products\/luchbox-bento","provider":"Ma lunchbox","version":"1.0","type":"link"}