{"product_id":"organizador-de-ovos-4-niveis","title":"Organizador de ovos de 4 níveis com dispensador automático","description":"\u003c!-- EGG PORTUGAL — PART 1 \/ 2 --\u003e\n\u003cstyle\u003e\/* Scoped Shopify landing styles: no generic theme class names. *\/\n.egg-landing{--ink:#392b23;--muted:#72665b;--cream:#fcfaf4;--warm:#f3ecdb;--yellow:#f2b93e;--line:#e3ddcf;container-type:inline-size;container-name:egg-layout;display:block;position:relative;width:100%;min-width:0;max-width:1120px;margin:0 auto;padding:0;background:var(--cream);color:var(--ink);font:16px\/1.7 Arial,Helvetica,sans-serif;text-align:left;box-sizing:border-box;isolation:isolate}\n.egg-landing *,.egg-landing *::before,.egg-landing *::after{box-sizing:border-box}.egg-landing [hidden]{display:none!important}.egg-landing :is(h2,h3,p,figure,dl){padding:0;margin:0}.egg-landing :is(h2,h3){font-family:inherit;color:var(--ink);text-transform:none;font-weight:700;word-break:normal;overflow-wrap:break-word}.egg-landing h2{font-size:32px;line-height:1.25;letter-spacing:-.8px;margin-bottom:16px}.egg-landing h3{font-size:19px;line-height:1.4;margin-bottom:8px;letter-spacing:-.2px}.egg-landing p{margin-bottom:16px}.egg-landing p:last-child{margin-bottom:0}.egg-landing em{font-style:normal;color:#a86718}.egg-landing :is(img,video){display:block;max-width:100%;height:auto;border:0;box-shadow:none}.egg-landing img{width:100%}.egg-landing a{color:inherit;text-decoration:none}.egg-landing button{font-family:inherit;cursor:pointer;letter-spacing:normal;text-transform:none;box-shadow:none}.egg-landing button::before,.egg-landing button::after{box-shadow:none}.egg-landing :is(button,a,summary,[tabindex]):focus-visible{outline:3px solid #a86718;outline-offset:4px}.egg-landing [id]{scroll-margin-top:32px}.egg-landing .egg-wrap{width:calc(100% - 64px);max-width:1056px;margin-inline:auto;min-width:0}.egg-landing .egg-section{padding-block:48px}.egg-landing .egg-eyebrow{font-size:11px;font-weight:700;line-height:1.5;letter-spacing:.12em;margin-bottom:14px}.egg-landing .egg-section-heading{width:100%;max-width:640px;margin:0 auto 28px;text-align:center}.egg-landing .egg-section-heading p:not(.egg-eyebrow){color:var(--muted)}.egg-landing .egg-media{position:relative;display:block;width:100%;min-width:0;overflow:hidden;border-radius:16px;background:#eee6d8;margin:0}.egg-landing .egg-media img{position:static;width:100%;height:auto;object-fit:contain}.egg-landing .egg-section-copy{min-width:0}.egg-landing .egg-section-copy\u003ep:not(.egg-eyebrow){color:var(--muted)}\n\/* Part 1 lives inside product detail: always one column, like Snainy. *\/\n.egg-landing.egg-part-1{max-width:680px;background:transparent;font-size:15px;line-height:1.75}.egg-part-1 .egg-wrap{width:100%;max-width:none;margin:0}.egg-part-1 .egg-hero{display:flex;flex-direction:column;gap:18px;padding:0;margin:0 0 22px}.egg-part-1 .egg-hero-copy{width:100%;background:var(--warm);padding:24px;border-radius:16px;border:1px solid var(--line)}.egg-part-1 .egg-intro-title{font-size:28px;line-height:1.3;letter-spacing:-.5px;margin:0 0 12px}.egg-part-1 .egg-lead{font-size:15px;max-width:none;color:var(--muted)}.egg-part-1 .egg-hero-points{display:grid;grid-template-columns:1fr;gap:8px;margin-top:18px;font-size:13px;line-height:1.5}.egg-part-1 .egg-hero-lifestyle-image{width:100%;overflow:hidden;border-radius:14px}.egg-part-1 .egg-hero-lifestyle-image img{width:100%;height:auto;object-fit:contain}.egg-part-1 .egg-warm{padding:0;margin:0 0 24px;background:transparent}.egg-part-1 .egg-split{display:flex;flex-direction:column;gap:16px;padding:0}.egg-part-1 .egg-section-copy{order:0;background:#faf6ec;padding:22px;border-left:3px solid #c79135;border-radius:14px;width:100%}.egg-part-1 .egg-video{order:1;width:100%;max-width:none}.egg-part-1 h2{font-size:24px;line-height:1.35;letter-spacing:-.4px}.egg-part-1 .egg-section{padding:0 0 24px}.egg-part-1 .egg-section-heading{max-width:none;text-align:left;margin:0 0 18px;padding:0 2px}.egg-part-1 .egg-benefits-with-photo{display:flex;flex-direction:column;gap:16px}.egg-part-1 .egg-benefit-list{width:100%;padding:4px 20px;border:1px solid var(--line);border-radius:14px;background:var(--cream)}.egg-part-1 .egg-benefit-list article{display:grid;grid-template-columns:24px minmax(0,1fr);gap:12px;padding:18px 0;border-bottom:1px solid var(--line)}.egg-part-1 .egg-benefit-list article:last-child{border:0}.egg-part-1 .egg-benefit-list h3{font-size:17px;line-height:1.4}.egg-part-1 .egg-benefit-list p{font-size:14px;color:var(--muted);margin:0}.egg-part-1 .egg-feature-number{font-size:12px;font-weight:700;color:#a86718;padding-top:4px}.egg-part-1 .egg-benefit-line{border-left:2px solid #c79135;padding-left:12px;font-size:14px;font-weight:700}.egg-part-1 .egg-text-link{display:inline-block;border-bottom:1px solid;font-size:13px;font-weight:700;margin-top:4px}.egg-landing .egg-video video{position:static;width:100%;height:auto;max-height:640px;object-fit:contain}.egg-landing .egg-video-toggle{position:absolute;bottom:12px;right:12px;border:1px solid #fff;border-radius:24px;background:#392b23e6;color:white;padding:7px 14px;font-size:12px}\n\/* Part 2: one consistent content rail, adapt to actual block width. *\/\n.egg-part-2 .egg-how-section{border-bottom:1px solid var(--line)}.egg-part-2 .egg-dimensions,.egg-part-2 .egg-care-section,.egg-part-2 .egg-faq-section{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:center;border-bottom:1px solid var(--line)}.egg-part-2 .egg-dimensions .egg-section-heading{margin:0;max-width:none;text-align:left}.egg-part-2 .egg-dimensions\u003eimg{width:100%;height:auto;aspect-ratio:auto 1\/1;object-fit:contain;border-radius:16px;max-width:680px;margin:auto}.egg-part-2 .egg-care-section .egg-section-copy{order:0}.egg-part-2 .egg-care-section .egg-media{order:1;max-width:680px;margin:auto}.egg-part-2 .egg-compact-specs{margin-top:22px}.egg-part-2 .egg-compact-specs\u003ediv{display:grid;grid-template-columns:90px minmax(0,1fr);gap:16px;padding:12px 0;border-top:1px solid var(--line);font-size:14px;line-height:1.5}.egg-part-2 dt{color:var(--muted)}.egg-part-2 dd{margin:0;text-align:left}.egg-part-2 .egg-faq-section{align-items:start}.egg-part-2 .egg-faqs{min-width:0}.egg-part-2 details{margin:0;padding:18px 0;border-bottom:1px solid var(--line)}.egg-part-2 details:first-child{padding-top:0}.egg-part-2 summary{position:relative;display:block;list-style:none;padding:0 30px 0 0;cursor:pointer;font-weight:700;font-size:15px;line-height:1.55}.egg-part-2 summary::-webkit-details-marker{display:none}.egg-part-2 summary:after{content:'+';position:absolute;right:0;top:0;font-size:22px;line-height:1}.egg-part-2 details[open] summary:after{content:'−'}.egg-part-2 details p{margin:12px 0 0;font-size:14px;color:var(--muted)}.egg-part-2 .egg-closing{padding:44px 0;background:#f1d991;text-align:center}.egg-part-2 .egg-closing .egg-wrap{max-width:780px}.egg-part-2 .egg-closing h2{font-size:34px}.egg-part-2 .egg-closing p{max-width:620px;margin-inline:auto}\n\/* Inox carousel geometry and controls. *\/\n.egg-landing .egg-carousel{--card:340px;--gap:26px;display:block;width:100%;min-width:0;overflow:hidden}.egg-landing .egg-stage{position:relative;overflow:hidden;padding:20px 0 28px;touch-action:pan-y;perspective:1400px;cursor:grab;user-select:none}.egg-landing .egg-stage.is-dragging{cursor:grabbing}.egg-landing .egg-track{position:relative;display:flex;align-items:flex-start;gap:var(--gap);width:max-content;padding:0;overflow:visible;will-change:transform;transition:transform 700ms cubic-bezier(.22,.7,.22,1)}.egg-landing .egg-slide{position:relative;flex:0 0 var(--card);width:var(--card);min-width:0;transform-origin:center 55%;transition:transform 700ms cubic-bezier(.22,.7,.22,1),opacity 700ms;cursor:pointer;user-select:none}.egg-landing .egg-slide h3{display:flex;align-items:center;justify-content:center;min-height:56px;margin:0 0 14px;text-align:center;font-size:21px;line-height:1.3}.egg-landing .egg-slide figure{position:relative;aspect-ratio:4\/5;border-radius:16px;overflow:hidden;background:#eee6d8}.egg-landing .egg-slide img{width:100%;height:100%;object-fit:cover;user-select:none;-webkit-user-drag:none}.egg-landing .egg-step-number{position:absolute;top:14px;left:14px;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;border:2px solid white;background:var(--yellow);font-weight:700;color:var(--ink)}.egg-landing .egg-slide figcaption{position:absolute;bottom:0;left:0;right:0;margin:0;padding:70px 20px 20px;background:linear-gradient(transparent,#241b16f2);color:white;font-size:15px;line-height:1.55}.egg-landing .egg-carousel-controls{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;margin-top:4px}.egg-landing .egg-carousel-controls\u003ebutton{display:grid;place-items:center;width:44px;min-height:44px;padding:8px;border:1px solid #d3c1a0;border-radius:50%;background:#fffaf0;color:var(--ink)}.egg-landing .egg-carousel-controls .egg-autoplay{width:auto;padding-inline:13px;border-radius:24px;font-size:12px}.egg-landing .egg-dots{display:flex;gap:0}.egg-landing .egg-dots button{display:grid;place-items:center;width:30px;height:44px;padding:0;border:0;background:transparent;border-radius:0}.egg-landing .egg-dots button:before{content:'';width:7px;height:7px;background:#c4b6a1;border-radius:8px;transition:width .25s}.egg-landing .egg-dots button[aria-current=true]:before{width:22px;background:#a86718}.egg-landing .egg-counter{min-width:43px;font-size:12px}.egg-landing .egg-swipe-hint{text-align:center;font-size:12px;color:var(--muted);margin-top:12px}.egg-landing .egg-carousel:not([data-ready]) .egg-track{width:100%;overflow-x:auto;scroll-snap-type:x mandatory}.egg-landing .egg-carousel:not([data-ready]) .egg-slide{scroll-snap-align:center}\n\/* Purchase controls remain bound to the Shopify form. *\/\n.egg-landing .egg-buy{display:inline-block;border:0;border-radius:12px;padding:16px 22px;background:var(--ink);color:white;font-size:14px;font-weight:700;line-height:1.4;text-align:center}.egg-landing .egg-buy:hover{background:#61432c}.egg-landing .egg-cta{max-width:100%;margin-top:12px;white-space:normal}.egg-landing .egg-buy-note{font-size:12px;margin-top:12px}.egg-landing .egg-buy-feedback{font-size:13px;margin-top:14px}.egg-landing .egg-sticky{position:fixed;left:50%;transform:translateX(-50%);bottom:max(10px,env(safe-area-inset-bottom));width:calc(100% - 20px);max-width:660px;z-index:9999;background:#fffaf4;border:1px solid #ddcfae;border-radius:16px;box-shadow:0 6px 24px #392b2330;padding:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.egg-landing .egg-sticky strong,.egg-landing .egg-sticky span{display:block;font-size:12px;line-height:1.4}.egg-landing .egg-sticky span{color:var(--muted)}.egg-landing .egg-sticky .egg-buy{padding:13px 12px;font-size:12px;white-space:nowrap}.egg-landing.egg-sticky-space{padding-bottom:90px}\n@container egg-layout (min-width:800px){.egg-part-2 .egg-dimensions,.egg-part-2 .egg-care-section,.egg-part-2 .egg-faq-section{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:44px}.egg-part-2 .egg-care-section .egg-section-copy{order:0}.egg-part-2 .egg-care-section .egg-media{order:1}}\n@container egg-layout (max-width:799px){.egg-part-2 .egg-wrap{width:calc(100% - 40px)}.egg-part-2 .egg-section{padding-block:34px}.egg-part-2 h2{font-size:28px}.egg-landing .egg-carousel{--card:clamp(210px,70cqw,320px);--gap:18px}.egg-landing .egg-slide h3{font-size:19px;min-height:52px}.egg-landing .egg-slide figcaption{padding:60px 16px 16px;font-size:14px}.egg-part-2 .egg-section-heading{margin-bottom:18px}.egg-part-2 .egg-closing{padding-block:34px}}\n@container egg-layout (max-width:399px){.egg-part-1 .egg-hero-copy,.egg-part-1 .egg-section-copy{padding:18px}.egg-part-1 .egg-intro-title{font-size:25px}.egg-part-1 h2{font-size:22px}.egg-part-2 .egg-wrap{width:calc(100% - 28px)}.egg-part-2 h2{font-size:25px}.egg-landing .egg-carousel-controls{gap:5px}.egg-landing .egg-carousel-controls\u003ebutton{width:38px}.egg-landing .egg-dots button{width:26px}.egg-landing .egg-slide figcaption{font-size:13px}.egg-landing .egg-step-number{width:36px;height:36px}.egg-landing .egg-cta{width:100%;padding:15px 12px;font-size:13px}.egg-landing .egg-sticky .egg-buy{padding:12px 9px;font-size:11px}.egg-landing .egg-sticky strong,.egg-landing .egg-sticky span{font-size:11px}}\n@media(min-width:750px){.egg-landing .egg-sticky{display:none!important}}@media(prefers-reduced-motion:reduce){.egg-landing *{transition:none!important;animation:none!important;scroll-behavior:auto!important}}\n.egg-landing.egg-sticky-host{container-type:normal;container-name:none;position:static;isolation:auto;width:0;max-width:none;height:0;min-height:0;margin:0;padding:0;overflow:visible;background:transparent}\n\n\n.egg-landing.egg-part-1 figure,.egg-landing.egg-part-2 figure{margin:0}.egg-landing.egg-part-1 :is(h2,h3),.egg-landing.egg-part-2 :is(h2,h3){font-family:Arial,Helvetica,sans-serif}\n\n\/* Shopify product-detail text blocks use fit-content: establish a real width before containment. *\/\n.text-block:has(.egg-landing.egg-part-1){--width:100%;width:100%;max-width:100%;min-width:0;align-self:stretch;display:block}\n.egg-landing.egg-part-1{container-type:normal;container-name:none}\n@media(max-width:749px){.egg-part-1 .egg-hero-copy,.egg-part-1 .egg-section-copy{padding:18px}.egg-part-1 .egg-intro-title{font-size:25px}.egg-part-1 h2{font-size:22px}}\n\n\/* Mobile: show the edges of both neighbouring carousel cards. *\/\n@media(max-width:749px){.egg-part-2 .egg-carousel{--card:clamp(170px,calc(72cqw - 29px),320px);--gap:12px}.egg-part-2 .egg-slide h3{font-size:18px}}\n\n\/* Material note and pack contents, below the care image. *\/\n.egg-part-2 .egg-care-visual{order:1;min-width:0;width:100%;max-width:680px;margin-inline:auto}.egg-part-2 .egg-material-note{display:flex;align-items:flex-start;gap:12px;margin-top:16px;padding:16px;border:1px solid #d5e3d5;border-radius:12px;background:#edf5ec;color:#35563b;text-align:left}.egg-part-2 .egg-material-note svg{display:block;flex:0 0 24px;width:24px;height:24px;margin-top:2px}.egg-part-2 .egg-material-note strong{display:block;font-size:14px;line-height:1.45}.egg-part-2 .egg-material-note p{margin:6px 0 0;font-size:13px;line-height:1.6;color:#46624b}\n\u003c\/style\u003e\n\u003cdiv class=\"egg-landing egg-part-1\" lang=\"pt-PT\"\u003e\n\u003csection class=\"egg-hero egg-hero-lifestyle egg-wrap\" id=\"egg-intro\"\u003e\n\u003cdiv class=\"egg-hero-copy\"\u003e\n\u003cp class=\"egg-eyebrow\"\u003eMENOS TEMPO À PROCURA. MAIS TEMPO PARA COZINHAR.\u003c\/p\u003e\n\u003ch2 class=\"egg-intro-title\"\u003eOs teus ovos à mão.\u003cbr\u003e\u003cem\u003eO teu frigorífico organizado.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp class=\"egg-lead\"\u003eDá aos teus ovos um lugar próprio e mantém-nos à mão todos os dias.\u003c\/p\u003e\n\u003cdiv class=\"egg-hero-points\"\u003e\n\u003cspan\u003e✓ Retira um ovo sem tirar a caixa\u003c\/span\u003e\u003cspan\u003e✓ Guarda mais ovos sem desarrumar o frigorífico\u003c\/span\u003e\u003cspan\u003e✓ Vê quantos restam de relance\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cfigure class=\"egg-hero-lifestyle-image\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0943\/2295\/0514\/files\/111.png?v=1789547184\" alt=\"Preparação do pequeno-almoço com o organizador de ovos à mão\" width=\"1254\" height=\"1254\" fetchpriority=\"high\"\u003e\u003c\/figure\u003e\n\u003c\/section\u003e\n\u003csection class=\"egg-warm\" id=\"egg-mechanism\"\u003e\u003cdiv class=\"egg-section egg-wrap egg-split\"\u003e\n\u003cfigure class=\"egg-media egg-video\"\u003e\u003cvideo autoplay muted loop playsinline preload=\"none\" aria-label=\"Demonstração do organizador de ovos\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0943\/2295\/0514\/files\/222.png?v=1789547183\"\u003e\u003csource src=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/00200fc4bf9942d6a96581964a6fadb9.mov\"\u003e\u003c\/video\u003e\u003cbutton type=\"button\" class=\"egg-video-toggle\" aria-label=\"Pausar vídeo\"\u003ePausar\u003c\/button\u003e\u003c\/figure\u003e\u003cdiv class=\"egg-section-copy\"\u003e\n\u003cp class=\"egg-eyebrow\"\u003e01 \/ ESTA CENA É-TE FAMILIAR?\u003c\/p\u003e\n\u003ch2\u003eSó queres um ovo.\u003cbr\u003e\u003cem\u003eSem ter de reorganizar o frigorífico.\u003c\/em\u003e\n\u003c\/h2\u003e\n\u003cp\u003eA caixa está atrás dos outros alimentos. Para tirar um único ovo, acabas por mexer em tudo.\u003c\/p\u003e\n\u003cp class=\"egg-benefit-line\"\u003eAbre, retira e continua a tua receita.\u003c\/p\u003e\n\u003ca class=\"egg-text-link\" href=\"#egg-how\"\u003eDescobre como te facilita o dia a dia ↓\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\n\u003csection class=\"egg-section egg-wrap\" id=\"egg-benefits\"\u003e\u003cdiv class=\"egg-section-heading\"\u003e\n\u003cp class=\"egg-eyebrow\"\u003e02 \/ O QUE MUDA NO TEU DIA A DIA\u003c\/p\u003e\n\u003ch2\u003eAntes de cozinhar.\u003cbr\u003eAntes de ir às compras.\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"egg-benefits-with-photo\"\u003e\n\u003cfigure class=\"egg-media egg-pickup-detail\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0943\/2295\/0514\/files\/222.png?v=1789547183\" alt=\"Pormenor de uma mão a retirar um ovo da saída frontal do dispensador\" loading=\"lazy\" width=\"1254\" height=\"1254\"\u003e\u003c\/figure\u003e\u003cdiv class=\"egg-benefit-list\"\u003e\n\u003carticle\u003e\u003cspan class=\"egg-feature-number\"\u003e01\u003c\/span\u003e\u003cdiv\u003e\n\u003ch3\u003eTens ovos suficientes para a omelete?\u003c\/h3\u003e\n\u003cp\u003eVê quantos ovos restam antes de começares a cozinhar ou de preparares a lista de compras.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\n\u003carticle\u003e\u003cspan class=\"egg-feature-number\"\u003e02\u003c\/span\u003e\u003cdiv\u003e\n\u003ch3\u003eMais ovos. Um frigorífico organizado.\u003c\/h3\u003e\n\u003cp\u003eOs quatro níveis concentram os ovos num espaço estreito, deixando mais espaço na prateleira para outros alimentos.\u003c\/p\u003e\n\u003c\/div\u003e\u003c\/article\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e(function(){\n  if(window.eggLandingUI){window.eggLandingUI();return;}\n  var reduced=window.matchMedia('(prefers-reduced-motion: reduce)');\n  function initEggCarousel(root){\n    if(root.dataset.ready)return;\n\n    const stage=root.querySelector('.egg-stage');\n    const track=root.querySelector('.egg-track');\n    const originals=Array.from(track.children);\n    const n=originals.length;\n    if(n\u003c2)return;\n\n    const dots=Array.from(root.querySelectorAll('[data-slide]'));\n    const reduced=matchMedia('(prefers-reduced-motion: reduce)');\n    let index=n,timer,reset,visible=false,paused=false,drag=null,busy=false,suppressClick=false;\n\n    originals.forEach(el=\u003etrack.appendChild(el.cloneNode(true)));\n    originals.slice().reverse().forEach(el=\u003e{\n      track.insertBefore(el.cloneNode(true),track.firstChild);\n    });\n\n    const cards=Array.from(track.children);\n\n    cards.forEach((card,i)=\u003e{\n      card.dataset.card=i;\n      card.setAttribute('role','group');\n      card.setAttribute('aria-roledescription','diapositivo');\n    });\n\n    root.dataset.ready='true';\n\n    root.querySelector('.egg-carousel-controls').hidden=false;\n    root.querySelector('.egg-swipe-hint').hidden=false;\n\n    const step=()=\u003ecards[1].offsetLeft-cards[0].offsetLeft;\n    const origin=()=\u003estage.clientWidth\/2-cards[0].offsetWidth\/2;\n\n    function schedule(){\n      clearTimeout(timer);\n\n      if(root.isConnected\u0026\u0026visible\u0026\u0026!paused\u0026\u0026!document.hidden\u0026\u0026!drag\u0026\u0026!busy\u0026\u0026!reduced.matches){\n        timer=setTimeout(()=\u003ego(1),3000);\n      }\n    }\n\n    function paint(position,instant){\n      track.style.transition=instant?'none':'';\n\n      track.style.transform=\n        'translate3d('+(origin()-position*step())+'px,0,0)';\n\n      cards.forEach((card,i)=\u003e{\n        const d=i-position;\n        const a=Math.abs(d);\n\n        card.style.transition=instant?'none':'';\n\n        card.style.transform=\n          'perspective(1200px) rotateY('+\n          (-Math.max(-1,Math.min(1,d))*13)+\n          'deg) scale('+(1-Math.min(a,1)*.11)+')';\n\n        card.style.opacity=String(\n          a\u003c=1 ? 1-a*.3 : Math.max(0,.7*(2-a))\n        );\n      });\n    }\n\n    function announce(){\n      const current=((index%n)+n)%n;\n\n      dots.forEach((dot,i)=\u003e{\n        dot.setAttribute(\n          'aria-current',\n          String(i===current)\n        );\n      });\n\n      root.querySelector('.egg-counter').textContent=\n        String(current+1).padStart(2,'0')+' \/ '+String(n).padStart(2,'0');\n\n      cards.forEach((card,i)=\u003e{\n        card.setAttribute(\n          'aria-hidden',\n          String(i!==index)\n        );\n\n        card.tabIndex=i===index?0:-1;\n      });\n    }\n\n    function settle(){\n      clearTimeout(reset);\n\n      if(index\u003e=2*n){\n        index-=n;\n      }else if(index\u003cn){\n        index+=n;\n      }\n\n      paint(index,true);\n      announce();\n\n      busy=false;\n\n      schedule();\n    }\n\n    function go(delta){\n      if(drag)return;\n\n      clearTimeout(timer);\n      clearTimeout(reset);\n\n      index=Math.max(\n        1,\n        Math.min(\n          cards.length-2,\n          index+delta\n        )\n      );\n\n      busy=true;\n\n      void track.offsetWidth;\n\n      paint(index,false);\n      announce();\n\n      reset=setTimeout(\n        settle,\n        reduced.matches?0:720\n      );\n    }\n\n    root.querySelector('[data-prev]')\n      .addEventListener('click',()=\u003ego(-1));\n\n    root.querySelector('[data-next]')\n      .addEventListener('click',()=\u003ego(1));\n\n    dots.forEach((dot,i)=\u003e{\n      dot.addEventListener(\n        'click',\n        ()=\u003ego(i-index%n)\n      );\n    });\n\n    stage.addEventListener(\n      'dragstart',\n      e=\u003ee.preventDefault()\n    );\n\n    stage.addEventListener('pointerdown',e=\u003e{\n      if(\n        drag ||\n        !e.isPrimary ||\n        (\n          e.pointerType==='mouse' \u0026\u0026\n          e.button!==0\n        )\n      )return;\n\n      clearTimeout(timer);\n      clearTimeout(reset);\n\n      const position=(\n        origin()-\n        new DOMMatrixReadOnly(\n          getComputedStyle(track).transform\n        ).m41\n      )\/step();\n\n      busy=false;\n      suppressClick=false;\n\n      drag={\n        id:e.pointerId,\n        x:e.clientX,\n        y:e.clientY,\n        start:position,\n        pos:position,\n        lastX:e.clientX,\n        lastTime:performance.now(),\n        velocity:0,\n        horizontal:false\n      };\n\n      paint(position,true);\n\n      stage.setPointerCapture(\n        e.pointerId\n      );\n    });\n\n    stage.addEventListener('pointermove',e=\u003e{\n      if(\n        !drag ||\n        e.pointerId!==drag.id\n      )return;\n\n      const dx=e.clientX-drag.x;\n      const dy=e.clientY-drag.y;\n\n      if(!drag.horizontal){\n        if(\n          Math.abs(dx)\u003c5 ||\n          Math.abs(dx)\u003c=Math.abs(dy)\n        )return;\n\n        drag.horizontal=true;\n        stage.classList.add('is-dragging');\n      }\n\n      if(e.cancelable){\n        e.preventDefault();\n      }\n\n      const now=performance.now();\n      const dt=now-drag.lastTime;\n\n      if(dt\u003e0){\n        drag.velocity=\n          (e.clientX-drag.lastX)\/dt;\n      }\n\n      drag.lastX=e.clientX;\n      drag.lastTime=now;\n\n      drag.pos=Math.max(\n        1,\n        Math.min(\n          cards.length-2,\n          drag.start-dx\/step()\n        )\n      );\n\n      suppressClick=true;\n\n      paint(drag.pos,true);\n    });\n\n    function release(e,cancelled){\n      if(\n        !drag ||\n        e.pointerId!==drag.id\n      )return;\n\n      const state=drag;\n\n      drag=null;\n\n      stage.classList.remove(\n        'is-dragging'\n      );\n\n      if(\n        stage.hasPointerCapture(\n          e.pointerId\n        )\n      ){\n        stage.releasePointerCapture(\n          e.pointerId\n        );\n      }\n\n      let position=state.pos;\n\n      if(\n        !cancelled \u0026\u0026\n        state.horizontal \u0026\u0026\n        performance.now()-state.lastTime\u003c100 \u0026\u0026\n        Math.abs(state.velocity)\u003e.35\n      ){\n        position-=Math.max(\n          -.75,\n          Math.min(\n            .75,\n            state.velocity*180\/step()\n          )\n        );\n      }\n\n      go(\n        Math.round(position)-index\n      );\n    }\n\n    stage.addEventListener(\n      'pointerup',\n      e=\u003erelease(e,false)\n    );\n\n    stage.addEventListener(\n      'pointercancel',\n      e=\u003erelease(e,true)\n    );\n\n    stage.addEventListener(\n      'lostpointercapture',\n      e=\u003erelease(e,true)\n    );\n\n    stage.addEventListener('click',e=\u003e{\n      if(suppressClick){\n        suppressClick=false;\n        return;\n      }\n\n      const card=e.target.closest(\n        '[data-card]'\n      );\n\n      if(card){\n        const delta=\n          Number(card.dataset.card)-index;\n\n        if(Math.abs(delta)\u003c=2){\n          go(delta);\n        }\n      }\n    });\n\n    stage.addEventListener('keydown',e=\u003e{\n      if(\n        e.key==='ArrowRight' ||\n        e.key==='ArrowLeft'\n      ){\n        e.preventDefault();\n\n        go(\n          e.key==='ArrowRight'\n            ? 1\n            : -1\n        );\n      }\n    });\n\n    document.addEventListener(\n      'visibilitychange',\n      schedule\n    );\n\n    reduced.addEventListener(\n      'change',\n      schedule\n    );\n\n    if('IntersectionObserver' in window){\n      new IntersectionObserver(\n        entries=\u003e{\n          visible=\n            entries[0].isIntersecting;\n\n          schedule();\n        },\n        {\n          threshold:.25\n        }\n      ).observe(stage);\n    }else{\n      visible=true;\n    }\n\n    if('ResizeObserver' in window){\n      new ResizeObserver(()=\u003e{\n        if(!drag){\n          paint(index,true);\n        }\n      }).observe(stage);\n    }\n\n    const pauseButton=root.querySelector('.egg-autoplay');\n    if(pauseButton){pauseButton.addEventListener('click',()=\u003e{paused=!paused;pauseButton.textContent=paused?'Retomar':'Pausar';pauseButton.setAttribute('aria-pressed',String(paused));pauseButton.setAttribute('aria-label',paused?'Retomar a mudança automática':'Pausar a mudança automática');schedule();});}\n    paint(index,true);\n    announce();\n    schedule();\n  }\n\n  function init(){\n    document.querySelectorAll('.egg-carousel:not([data-ready])').forEach(initEggCarousel);\n    document.querySelectorAll('.egg-video:not([data-ready])').forEach(function(root){root.dataset.ready='1';var v=root.querySelector('video'),btn=root.querySelector('button');v.muted=true;function label(){btn.textContent=v.paused?'Reproduzir':'Pausar';btn.setAttribute('aria-label',v.paused?'Reproduzir vídeo':'Pausar vídeo');}btn.onclick=function(){if(v.paused)v.play().catch(label);else v.pause();};v.addEventListener('play',label);v.addEventListener('pause',label);if(reduced.matches){v.autoplay=false;v.pause();}label();});\n    var sticky=document.querySelector('.egg-part-2 .egg-sticky');\n    if(sticky){var previous=document.querySelector('.egg-sticky-host');if(previous)previous.remove();var host=document.createElement('div');host.className='egg-landing egg-sticky-host';host.appendChild(sticky);document.body.appendChild(host);}\n    updateSticky();\n  }\n  function buyTarget(){var selectors=['[data-egg-buy-target]','form[action*=\"\/cart\/add\"]','[data-product-form]','.product-form','.product__info-container'];for(var i=0;i\u003cselectors.length;i++){var nodes=document.querySelectorAll(selectors[i]);for(var j=0;j\u003cnodes.length;j++){if(!nodes[j].closest('.egg-landing')\u0026\u0026nodes[j].getClientRects().length)return nodes[j];}}return null;}\n  function updateSticky(){var sticky=document.querySelector('.egg-sticky');if(!sticky)return;var roots=Array.from(document.querySelectorAll('.egg-part-1,.egg-part-2'));var first=roots[0],last=roots[roots.length-1],target=buyTarget(),visible=false;if(target){var r=target.getBoundingClientRect();visible=r.bottom\u003e80\u0026\u0026r.top\u003cinnerHeight-80;}var show=innerWidth\u003c750\u0026\u0026target\u0026\u0026!visible\u0026\u0026first.getBoundingClientRect().top\u003c -420\u0026\u0026last.getBoundingClientRect().bottom\u003e100;sticky.hidden=!show;last.classList.toggle('egg-sticky-space',!!show);}\n  document.addEventListener('click',function(e){var btn=e.target.closest('.egg-buy');if(!btn)return;e.preventDefault();var target=buyTarget();if(target){target.scrollIntoView({behavior:reduced.matches?'auto':'smooth',block:'center'});}else{var note=document.querySelector('.egg-buy-feedback');if(note){note.hidden=false;note.textContent='As opções de compra estão disponíveis na página do produto da loja.';}}});\n  var ticking=false;function schedule(){if(ticking)return;ticking=true;requestAnimationFrame(function(){ticking=false;updateSticky();});}window.addEventListener('scroll',schedule,{passive:true});window.addEventListener('resize',schedule);document.addEventListener('shopify:section:load',init);\n  window.eggLandingUI=init;if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);else init();\n})();\n\u003c\/script\u003e","brand":"CTHANH","offers":[{"title":"Default Title","offer_id":67435407016094,"sku":"EGG","price":26.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0739\/0262\/0830\/files\/02-huevera-organizacion.png?v=1790565474","url":"https:\/\/olelar.com\/products\/organizador-de-ovos-4-niveis","provider":"OLELAR","version":"1.0","type":"link"}