{"title":"Home page","description":null,"products":[{"product_id":"mind","title":"MIND 002 PREMIUM | MÁXIMO CONFORT","description":"\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0673\/2657\/4801\/files\/imagem_2026-09-22_095302431.png?v=1790081586\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0673\/2657\/4801\/files\/imagem_2026-09-22_095328292.png?v=1790081611\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0673\/2657\/4801\/files\/imagem_2026-09-22_095353362.png?v=1790081636\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0673\/2657\/4801\/files\/imagem_2026-09-22_095413022.png?v=1790081656\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0814\/0138\/0962\/files\/imagem_2026-10-03_044753684.png?v=1791013678\" alt=\"\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0814\/0138\/0962\/files\/imagem_2026-10-03_045129215.png?v=1791013893\" alt=\"\"\u003e\u003c\/p\u003e\n\u003c!-- =========================================================\n     PACCINO\n     ROLETA + ESCASSEZ + BANNER HEAD\n========================================================= --\u003e\n\n\u003c!-- BANNER HEAD --\u003e\n\u003cdiv id=\"paccino-live-banner\"\u003e\n  \u003cdiv class=\"plb-inner\"\u003e\n    \u003cspan class=\"plb-live\"\u003e\n      \u003ci\u003e\u003c\/i\u003e\n      EN VIVO\n    \u003c\/span\u003e\n\n    \u003cspan class=\"plb-copy\"\u003e\n      \u003cstrong\u003e12 PERSONAS\u003c\/strong\u003e\n      ESTÁN PIDIENDO ESTE PRODUCTO AHORA MISMO\n    \u003c\/span\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\n\u003c!-- ROLETA --\u003e\n\u003cdiv id=\"paccino-roleta\" aria-hidden=\"true\"\u003e\n\n  \u003cdiv class=\"pc-overlay\"\u003e\u003c\/div\u003e\n\n  \u003cdiv class=\"pc-modal\"\u003e\n\n    \u003cbutton class=\"pc-som\" id=\"pc-som\" type=\"button\"\u003e♪\u003c\/button\u003e\n    \u003cbutton class=\"pc-fechar\" id=\"pc-fechar\" type=\"button\"\u003e×\u003c\/button\u003e\n\n    \u003cdiv class=\"pc-marca\"\u003e\n      \u003cdiv class=\"pc-logo\"\u003ePACCINO\u003c\/div\u003e\n      \u003cdiv class=\"pc-sublogo\"\u003eSNEAKERS COLOMBIA\u003c\/div\u003e\n\n      \u003cdiv class=\"pc-colombia\"\u003e\n        \u003cspan\u003e\u003c\/span\u003e\n        \u003cspan\u003e\u003c\/span\u003e\n        \u003cspan\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"pc-urgencia\"\u003e\n      \u003cspan class=\"pc-dot\"\u003e\u003c\/span\u003e\n\n      \u003cspan\u003eOFERTA DE BIENVENIDA ACTIVA\u003c\/span\u003e\n\n      \u003cstrong id=\"pc-timer\"\u003e\n        10:00\n      \u003c\/strong\u003e\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"pc-titulo\"\u003e\n\n      \u003cspan class=\"pc-kicker\"\u003e\n        BENEFICIO EXCLUSIVO DE ESTA VISITA\n      \u003c\/span\u003e\n\n      \u003ch2\u003e\n        Gira y descubre tu beneficio\n      \u003c\/h2\u003e\n\n      \u003cp id=\"pc-subtitulo\"\u003e\n        Toca el centro de la ruleta antes de que termine la oferta.\n      \u003c\/p\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"pc-area-roleta\"\u003e\n\n      \u003cdiv class=\"pc-ponteiro\"\u003e\u003c\/div\u003e\n\n      \u003cdiv class=\"pc-roleta-frame\" id=\"pc-roleta-frame\"\u003e\n\n        \u003cdiv class=\"pc-ring pc-ring-1\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"pc-ring pc-ring-2\"\u003e\u003c\/div\u003e\n\n        \u003cdiv class=\"pc-roleta\" id=\"pc-roleta-wheel\"\u003e\n\n          \u003ccanvas id=\"pc-roleta-canvas\" width=\"760\" height=\"760\"\u003e\n          \u003c\/canvas\u003e\n\n        \u003c\/div\u003e\n\n\n        \u003cbutton class=\"pc-centro\" id=\"pc-girar\" type=\"button\"\u003e\n\n          \u003csmall\u003e\n            TOCA AQUÍ\n          \u003c\/small\u003e\n\n          \u003cstrong id=\"pc-girar-texto\"\u003e\n            GIRAR\n          \u003c\/strong\u003e\n\n        \u003c\/button\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"pc-status\"\u003e\n\n      \u003cspan\u003e\u003c\/span\u003e\n\n      \u003cstrong id=\"pc-status-texto\"\u003e\n        1 GIRO DISPONIBLE\n      \u003c\/strong\u003e\n\n      \u003cspan\u003e\u003c\/span\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003cdiv class=\"pc-aviso\"\u003e\n\n      \u003cstrong\u003e\n        Tu beneficio no queda guardado.\n      \u003c\/strong\u003e\n\n      \u003csmall\u003e\n        El tiempo continúa incluso si cierras esta ventana.\n      \u003c\/small\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\n  \u003c!-- REABRIR --\u003e\n\n  \u003cbutton class=\"pc-reabrir\" id=\"pc-reabrir\" type=\"button\"\u003e\n\n    \u003cb\u003eP\u003c\/b\u003e\n\n    \u003cspan\u003e\n      Tu beneficio\n    \u003c\/span\u003e\n\n    \u003cem id=\"pc-timer-mini\"\u003e\n      10:00\n    \u003c\/em\u003e\n\n  \u003c\/button\u003e\n\n\n  \u003c!-- RESULTADO --\u003e\n\n  \u003cdiv class=\"pc-resultado\" id=\"pc-resultado\" aria-hidden=\"true\"\u003e\n\n    \u003cdiv class=\"pc-resultado-card\"\u003e\n\n      \u003cbutton class=\"pc-resultado-fechar\" id=\"pc-resultado-fechar\" type=\"button\"\u003e\n        ×\n      \u003c\/button\u003e\n\n\n      \u003cdiv class=\"pc-marca\"\u003e\n\n        \u003cdiv class=\"pc-logo\"\u003e\n          PACCINO\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"pc-sublogo\"\u003e\n          SNEAKERS COLOMBIA\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"pc-colombia\"\u003e\n          \u003cspan\u003e\u003c\/span\u003e\n          \u003cspan\u003e\u003c\/span\u003e\n          \u003cspan\u003e\u003c\/span\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n\n      \u003cspan class=\"pc-kicker\"\u003e\n        BENEFICIO DESBLOQUEADO\n      \u003c\/span\u003e\n\n      \u003ch3\u003e\n        ¡Felicidades!\n      \u003c\/h3\u003e\n\n\n      \u003cdiv class=\"pc-premio\"\u003e\n\n        \u003cspan\u003e\n          60%\n        \u003c\/span\u003e\n\n        \u003cstrong\u003e\n          OFF\n        \u003c\/strong\u003e\n\n      \u003c\/div\u003e\n\n\n      \u003cdiv class=\"pc-linha\"\u003e\u003c\/div\u003e\n\n\n      \u003cp\u003e\n        En cualquier modelo disponible.\n      \u003c\/p\u003e\n\n\n      \u003cdiv class=\"pc-reserva\"\u003e\n\n        \u003cspan\u003e\n          Tu beneficio está reservado por\n        \u003c\/span\u003e\n\n        \u003cstrong id=\"pc-timer-premio\"\u003e\n          10:00\n        \u003c\/strong\u003e\n\n      \u003c\/div\u003e\n\n\n      \u003cbutton class=\"pc-ir-produto\" id=\"pc-ir-produto\" type=\"button\"\u003e\n\n        ELEGIR MI MODELO\n\n      \u003c\/button\u003e\n\n\n      \u003cdiv class=\"pc-info\"\u003e\n\n        \u003cspan\u003e\n          Pago contra entrega\n        \u003c\/span\u003e\n\n        \u003ci\u003e•\u003c\/i\u003e\n\n        \u003cspan\u003e\n          Envíos en Colombia\n        \u003c\/span\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\n  \u003c!-- EXPIRADO --\u003e\n\n  \u003cdiv class=\"pc-expirado\" id=\"pc-expirado\" aria-hidden=\"true\"\u003e\n\n    \u003cdiv class=\"pc-expirado-card\"\u003e\n\n      \u003cdiv class=\"pc-marca\"\u003e\n\n        \u003cdiv class=\"pc-logo\"\u003e\n          PACCINO\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"pc-sublogo\"\u003e\n          SNEAKERS COLOMBIA\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n      \u003cspan class=\"pc-kicker\"\u003e\n        OFERTA FINALIZADA\n      \u003c\/span\u003e\n\n      \u003ch3\u003e\n        El tiempo de esta oferta terminó\n      \u003c\/h3\u003e\n\n      \u003cp\u003e\n        Continúa viendo los modelos disponibles.\n      \u003c\/p\u003e\n\n      \u003cbutton id=\"pc-expirado-fechar\" type=\"button\"\u003e\n\n        CONTINUAR EN LA TIENDA\n\n      \u003c\/button\u003e\n\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003cstyle\u003e\n\n\/* =========================================================\n   BANNER HEAD\n========================================================= *\/\n\n#paccino-live-banner,\n#paccino-live-banner * {\n  box-sizing: border-box;\n}\n\n#paccino-live-banner {\n  width: 100%;\n  min-height: 44px;\n\n  position: relative;\n  z-index: 40;\n\n  overflow: hidden;\n\n  background: #111111;\n  color: #ffffff;\n\n  border-bottom: 1px solid rgba(255,255,255,.08);\n\n  font-family: Arial, Helvetica, sans-serif;\n}\n\n.plb-inner {\n  width: 100%;\n  min-height: 44px;\n\n  padding: 7px 14px;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  gap: 12px;\n\n  text-align: center;\n}\n\n.plb-live {\n  display: inline-flex;\n  align-items: center;\n\n  gap: 5px;\n\n  flex: 0 0 auto;\n\n  color: #ffffff;\n\n  font-size: 8px;\n  line-height: 1;\n\n  font-weight: 800;\n\n  letter-spacing: .12em;\n}\n\n.plb-live i {\n  width: 7px;\n  height: 7px;\n\n  border-radius: 50%;\n\n  background: #35ad72;\n\n  box-shadow:\n    0 0 0 0 rgba(53,173,114,.5);\n\n  animation:\n    paccinoLivePulse 1.5s infinite;\n}\n\n@keyframes paccinoLivePulse {\n\n  0% {\n    box-shadow:\n      0 0 0 0 rgba(53,173,114,.5);\n  }\n\n  70% {\n    box-shadow:\n      0 0 0 7px rgba(53,173,114,0);\n  }\n\n  100% {\n    box-shadow:\n      0 0 0 0 rgba(53,173,114,0);\n  }\n\n}\n\n.plb-copy {\n  font-size: 9.5px;\n  line-height: 1.3;\n\n  font-weight: 700;\n\n  letter-spacing: .06em;\n\n  text-transform: uppercase;\n}\n\n.plb-copy strong {\n  color: #d4b16c;\n\n  font-weight: 900;\n}\n\n\n\/* BRILHO BANNER *\/\n\n#paccino-live-banner::after {\n  content: \"\";\n\n  position: absolute;\n\n  top: 0;\n  left: -35%;\n\n  width: 24%;\n  height: 100%;\n\n  pointer-events: none;\n\n  background:\n    linear-gradient(\n      90deg,\n      transparent,\n      rgba(255,255,255,.10),\n      transparent\n    );\n\n  transform:\n    skewX(-20deg);\n\n  animation:\n    paccinoBannerShine 4.5s infinite;\n}\n\n@keyframes paccinoBannerShine {\n\n  0%,\n  55% {\n    left: -35%;\n  }\n\n  100% {\n    left: 130%;\n  }\n\n}\n\n\n\/* =========================================================\n   ROLETA BASE\n========================================================= *\/\n\n#paccino-roleta,\n#paccino-roleta * {\n  box-sizing: border-box;\n}\n\n#paccino-roleta {\n\n  --creme: #f6f0e6;\n  --creme2: #e9dfcf;\n  --preto: #111111;\n  --dourado: #b78943;\n  --cinza: #7b746a;\n\n  position: relative;\n\n  z-index:\n    2147483000;\n\n  font-family:\n    Arial,\n    Helvetica,\n    sans-serif;\n}\n\n\n\/* FUNDO *\/\n\n.pc-overlay {\n  position: fixed;\n\n  inset: 0;\n\n  background:\n    rgba(25,23,20,.58);\n\n  backdrop-filter:\n    blur(2px);\n\n  -webkit-backdrop-filter:\n    blur(2px);\n\n  z-index:\n    2147483000;\n\n  transition:\n    opacity .25s ease;\n}\n\n\n\/* POPUP *\/\n\n.pc-modal {\n  position: fixed;\n\n  z-index:\n    2147483001;\n\n  left: 50%;\n  top: 50%;\n\n  transform:\n    translate(-50%,-50%);\n\n  width:\n    min(92vw,420px);\n\n  max-height:\n    82dvh;\n\n  overflow-y:\n    auto;\n\n  background:\n    var(--creme);\n\n  color:\n    var(--preto);\n\n  border:\n    1px solid rgba(17,17,17,.16);\n\n  box-shadow:\n    0 25px 70px rgba(0,0,0,.28);\n\n  padding:\n    17px 18px 14px;\n\n  scrollbar-width:\n    none;\n\n  transition:\n    opacity .25s ease,\n    transform .25s ease;\n}\n\n.pc-modal::-webkit-scrollbar {\n  display: none;\n}\n\n\n\/* ROLETA FECHADA *\/\n\n#paccino-roleta[aria-hidden=\"true\"] .pc-overlay,\n#paccino-roleta[aria-hidden=\"true\"] .pc-modal {\n  opacity: 0;\n\n  pointer-events: none;\n}\n\n\n\/* =========================================================\n   MARCA\n========================================================= *\/\n\n.pc-marca {\n  width:\n    fit-content;\n\n  margin:\n    0 auto 9px;\n\n  text-align:\n    center;\n}\n\n.pc-logo {\n  font-family:\n    Georgia,\n    \"Times New Roman\",\n    serif;\n\n  font-size:\n    23px;\n\n  line-height:\n    1;\n\n  font-weight:\n    600;\n\n  letter-spacing:\n    .16em;\n\n  padding-left:\n    .16em;\n}\n\n.pc-sublogo {\n  margin-top:\n    4px;\n\n  font-size:\n    6.5px;\n\n  font-weight:\n    700;\n\n  letter-spacing:\n    .34em;\n\n  padding-left:\n    .34em;\n}\n\n.pc-colombia {\n  display:\n    flex;\n\n  width:\n    48px;\n\n  height:\n    3px;\n\n  margin:\n    6px auto 0;\n}\n\n.pc-colombia span {\n  flex: 1;\n}\n\n.pc-colombia span:nth-child(1) {\n  background: #e2bc22;\n}\n\n.pc-colombia span:nth-child(2) {\n  background: #285e9c;\n}\n\n.pc-colombia span:nth-child(3) {\n  background: #b8423c;\n}\n\n\n\/* =========================================================\n   BOTÕES\n========================================================= *\/\n\n.pc-fechar,\n.pc-resultado-fechar {\n  position:\n    absolute;\n\n  right:\n    10px;\n\n  top:\n    9px;\n\n  width:\n    30px;\n\n  height:\n    30px;\n\n  border:\n    0;\n\n  padding:\n    0;\n\n  background:\n    transparent;\n\n  color:\n    var(--preto);\n\n  font-size:\n    27px;\n\n  cursor:\n    pointer;\n}\n\n.pc-som {\n  position:\n    absolute;\n\n  left:\n    11px;\n\n  top:\n    10px;\n\n  width:\n    25px;\n\n  height:\n    25px;\n\n  border:\n    1px solid rgba(17,17,17,.22);\n\n  border-radius:\n    50%;\n\n  background:\n    transparent;\n\n  cursor:\n    pointer;\n\n  font-size:\n    11px;\n}\n\n.pc-som.pc-mudo {\n  opacity: .35;\n}\n\n\n\/* =========================================================\n   URGÊNCIA\n========================================================= *\/\n\n.pc-urgencia {\n  display:\n    flex;\n\n  justify-content:\n    center;\n\n  align-items:\n    center;\n\n  gap:\n    7px;\n\n  min-height:\n    28px;\n\n  margin-bottom:\n    8px;\n\n  border-top:\n    1px solid rgba(183,137,67,.18);\n\n  border-bottom:\n    1px solid rgba(183,137,67,.18);\n\n  color:\n    #765725;\n\n  font-size:\n    7.5px;\n\n  font-weight:\n    800;\n\n  letter-spacing:\n    .08em;\n}\n\n.pc-urgencia strong {\n  color:\n    var(--preto);\n\n  font-size:\n    9px;\n}\n\n.pc-dot {\n  width:\n    6px;\n\n  height:\n    6px;\n\n  border-radius:\n    50%;\n\n  background:\n    var(--dourado);\n\n  animation:\n    pcPulse 1.5s infinite;\n}\n\n@keyframes pcPulse {\n\n  0% {\n    box-shadow:\n      0 0 0 0 rgba(183,137,67,.4);\n  }\n\n  70% {\n    box-shadow:\n      0 0 0 7px rgba(183,137,67,0);\n  }\n\n  100% {\n    box-shadow:\n      0 0 0 0 rgba(183,137,67,0);\n  }\n\n}\n\n\n\/* =========================================================\n   TÍTULO\n========================================================= *\/\n\n.pc-titulo {\n  text-align:\n    center;\n}\n\n.pc-kicker {\n  display:\n    block;\n\n  color:\n    var(--dourado);\n\n  font-size:\n    8px;\n\n  font-weight:\n    800;\n\n  letter-spacing:\n    .18em;\n\n  margin-bottom:\n    6px;\n}\n\n.pc-titulo h2 {\n  margin:\n    0;\n\n  font-family:\n    Georgia,\n    \"Times New Roman\",\n    serif;\n\n  font-size:\n    25px;\n\n  line-height:\n    1.04;\n\n  font-weight:\n    500;\n\n  letter-spacing:\n    -.025em;\n}\n\n.pc-titulo p {\n  margin:\n    6px auto 0;\n\n  color:\n    var(--cinza);\n\n  font-size:\n    10.5px;\n\n  line-height:\n    1.4;\n}\n\n\n\/* =========================================================\n   ROLETA\n========================================================= *\/\n\n.pc-area-roleta {\n  position:\n    relative;\n\n  display:\n    grid;\n\n  place-items:\n    center;\n\n  padding:\n    12px 0 6px;\n}\n\n.pc-roleta-frame {\n  position:\n    relative;\n\n  width:\n    min(65vw,264px);\n\n  aspect-ratio:\n    1;\n\n  border-radius:\n    50%;\n\n  padding:\n    5px;\n\n  background:\n    var(--preto);\n\n  box-shadow:\n    0 10px 26px rgba(0,0,0,.18);\n}\n\n.pc-roleta-frame::before {\n  content:\n    \"\";\n\n  position:\n    absolute;\n\n  inset:\n    8px;\n\n  border:\n    1px solid rgba(255,255,255,.7);\n\n  border-radius:\n    50%;\n\n  pointer-events:\n    none;\n\n  z-index:\n    4;\n}\n\n.pc-roleta {\n  width:\n    100%;\n\n  height:\n    100%;\n\n  border-radius:\n    50%;\n\n  overflow:\n    hidden;\n\n  background:\n    var(--creme2);\n\n  will-change:\n    transform;\n}\n\n#pc-roleta-canvas {\n  width:\n    100%;\n\n  height:\n    100%;\n\n  display:\n    block;\n}\n\n\n\/* =========================================================\n   PONTEIRO\n========================================================= *\/\n\n.pc-ponteiro {\n  position:\n    absolute;\n\n  z-index:\n    10;\n\n  left:\n    50%;\n\n  top:\n    0;\n\n  transform:\n    translateX(-50%);\n\n  width:\n    0;\n\n  height:\n    0;\n\n  border-left:\n    14px solid transparent;\n\n  border-right:\n    14px solid transparent;\n\n  border-top:\n    27px solid var(--preto);\n\n  transform-origin:\n    center top;\n}\n\n.pc-ponteiro::after {\n  content:\n    \"\";\n\n  position:\n    absolute;\n\n  width:\n    8px;\n\n  height:\n    8px;\n\n  border-radius:\n    50%;\n\n  background:\n    var(--dourado);\n\n  left:\n    -4px;\n\n  top:\n    -29px;\n}\n\n.pc-roleta-frame.pc-girando .pc-ponteiro {\n  animation:\n    pcPointer .11s infinite alternate;\n}\n\n@keyframes pcPointer {\n\n  from {\n    transform:\n      translateX(-50%)\n      rotate(-7deg);\n  }\n\n  to {\n    transform:\n      translateX(-50%)\n      rotate(7deg);\n  }\n\n}\n\n\n\/* =========================================================\n   BOTÃO CENTRAL\n========================================================= *\/\n\n.pc-centro {\n  position:\n    absolute;\n\n  z-index:\n    8;\n\n  left:\n    50%;\n\n  top:\n    50%;\n\n  transform:\n    translate(-50%,-50%);\n\n  width:\n    76px;\n\n  height:\n    76px;\n\n  border-radius:\n    50%;\n\n  border:\n    1px solid white;\n\n  outline:\n    5px solid var(--preto);\n\n  background:\n    var(--creme);\n\n  color:\n    var(--preto);\n\n  cursor:\n    pointer;\n\n  display:\n    grid;\n\n  place-content:\n    center;\n\n  text-align:\n    center;\n\n  box-shadow:\n    0 4px 12px rgba(0,0,0,.22);\n}\n\n.pc-centro small {\n  display:\n    block;\n\n  margin-bottom:\n    2px;\n\n  color:\n    #81796e;\n\n  font-size:\n    6.8px;\n\n  font-weight:\n    800;\n\n  letter-spacing:\n    .08em;\n}\n\n.pc-centro strong {\n  display:\n    block;\n\n  font-size:\n    12px;\n\n  font-weight:\n    900;\n\n  letter-spacing:\n    .12em;\n}\n\n.pc-roleta-frame:not(.pc-girando) .pc-centro {\n  animation:\n    pcCentro 1.3s ease-in-out infinite;\n}\n\n@keyframes pcCentro {\n\n  0%,\n  100% {\n    transform:\n      translate(-50%,-50%)\n      scale(1);\n  }\n\n  50% {\n    transform:\n      translate(-50%,-50%)\n      scale(1.06);\n  }\n\n}\n\n\n\/* ANÉIS *\/\n\n.pc-ring {\n  position:\n    absolute;\n\n  z-index:\n    6;\n\n  left:\n    50%;\n\n  top:\n    50%;\n\n  width:\n    90px;\n\n  height:\n    90px;\n\n  border:\n    1px solid rgba(183,137,67,.45);\n\n  border-radius:\n    50%;\n\n  opacity:\n    0;\n\n  pointer-events:\n    none;\n}\n\n.pc-roleta-frame:not(.pc-girando) .pc-ring-1 {\n  animation:\n    pcRing 1.6s infinite;\n}\n\n.pc-roleta-frame:not(.pc-girando) .pc-ring-2 {\n  animation:\n    pcRing 1.6s .8s infinite;\n}\n\n@keyframes pcRing {\n\n  0% {\n    transform:\n      translate(-50%,-50%)\n      scale(.8);\n\n    opacity:\n      .6;\n  }\n\n  100% {\n    transform:\n      translate(-50%,-50%)\n      scale(1.6);\n\n    opacity:\n      0;\n  }\n\n}\n\n\n\/* =========================================================\n   STATUS\n========================================================= *\/\n\n.pc-status {\n  display:\n    flex;\n\n  align-items:\n    center;\n\n  justify-content:\n    center;\n\n  gap:\n    8px;\n\n  margin:\n    2px auto 7px;\n\n  color:\n    #817a70;\n}\n\n.pc-status span {\n  width:\n    34px;\n\n  height:\n    1px;\n\n  background:\n    rgba(17,17,17,.16);\n}\n\n.pc-status strong {\n  font-size:\n    8px;\n\n  letter-spacing:\n    .12em;\n\n  text-align:\n    center;\n}\n\n.pc-aviso {\n  text-align:\n    center;\n\n  color:\n    #756d63;\n}\n\n.pc-aviso strong {\n  display:\n    block;\n\n  font-size:\n    8.5px;\n}\n\n.pc-aviso small {\n  display:\n    block;\n\n  margin-top:\n    2px;\n\n  font-size:\n    7.5px;\n}\n\n\n\/* =========================================================\n   BOTÃO REABRIR\n========================================================= *\/\n\n.pc-reabrir {\n  display:\n    none;\n\n  position:\n    fixed;\n\n  z-index:\n    2147482999;\n\n  right:\n    12px;\n\n  bottom:\n    80px;\n\n  min-height:\n    42px;\n\n  padding:\n    0 11px 0 7px;\n\n  align-items:\n    center;\n\n  gap:\n    7px;\n\n  border:\n    1px solid var(--preto);\n\n  background:\n    var(--creme);\n\n  color:\n    var(--preto);\n\n  box-shadow:\n    0 7px 20px rgba(0,0,0,.17);\n\n  cursor:\n    pointer;\n\n  text-transform:\n    uppercase;\n\n  font-size:\n    8px;\n\n  font-weight:\n    900;\n}\n\n.pc-reabrir b {\n  width:\n    28px;\n\n  height:\n    28px;\n\n  display:\n    grid;\n\n  place-items:\n    center;\n\n  background:\n    var(--preto);\n\n  color:\n    var(--creme);\n\n  font-family:\n    Georgia,\n    serif;\n\n  font-size:\n    17px;\n}\n\n.pc-reabrir em {\n  color:\n    var(--dourado);\n\n  font-size:\n    8px;\n\n  font-style:\n    normal;\n}\n\n\n\/* =========================================================\n   RESULTADO\n========================================================= *\/\n\n.pc-resultado,\n.pc-expirado {\n  position:\n    fixed;\n\n  inset:\n    0;\n\n  z-index:\n    2147483010;\n\n  display:\n    grid;\n\n  place-items:\n    center;\n\n  padding:\n    18px;\n\n  background:\n    rgba(25,23,20,.62);\n\n  opacity:\n    0;\n\n  pointer-events:\n    none;\n\n  transition:\n    opacity .25s ease;\n}\n\n.pc-resultado[aria-hidden=\"false\"],\n.pc-expirado[aria-hidden=\"false\"] {\n  opacity:\n    1;\n\n  pointer-events:\n    auto;\n}\n\n.pc-resultado-card,\n.pc-expirado-card {\n  position:\n    relative;\n\n  width:\n    min(90vw,390px);\n\n  padding:\n    23px;\n\n  background:\n    var(--creme);\n\n  color:\n    var(--preto);\n\n  border:\n    1px solid rgba(17,17,17,.16);\n\n  box-shadow:\n    0 25px 70px rgba(0,0,0,.30);\n\n  text-align:\n    center;\n}\n\n.pc-resultado-card h3,\n.pc-expirado-card h3 {\n  margin:\n    0 0 9px;\n\n  font-family:\n    Georgia,\n    \"Times New Roman\",\n    serif;\n\n  font-size:\n    28px;\n\n  font-weight:\n    500;\n}\n\n.pc-premio {\n  display:\n    flex;\n\n  align-items:\n    flex-end;\n\n  justify-content:\n    center;\n\n  gap:\n    7px;\n}\n\n.pc-premio span {\n  font-family:\n    Georgia,\n    \"Times New Roman\",\n    serif;\n\n  color:\n    var(--dourado);\n\n  font-size:\n    80px;\n\n  line-height:\n    .85;\n\n  letter-spacing:\n    -.055em;\n}\n\n.pc-premio strong {\n  margin-bottom:\n    7px;\n\n  font-size:\n    17px;\n\n  letter-spacing:\n    .12em;\n}\n\n.pc-linha {\n  width:\n    62px;\n\n  height:\n    2px;\n\n  margin:\n    16px auto 12px;\n\n  background:\n    var(--dourado);\n}\n\n.pc-resultado-card p {\n  margin:\n    0 0 13px;\n\n  color:\n    var(--cinza);\n\n  font-size:\n    12px;\n}\n\n.pc-reserva {\n  display:\n    flex;\n\n  justify-content:\n    center;\n\n  align-items:\n    center;\n\n  gap:\n    7px;\n\n  margin-bottom:\n    13px;\n\n  padding:\n    9px;\n\n  border-top:\n    1px solid rgba(183,137,67,.24);\n\n  border-bottom:\n    1px solid rgba(183,137,67,.24);\n\n  color:\n    #696158;\n\n  font-size:\n    9px;\n}\n\n.pc-reserva strong {\n  color:\n    var(--dourado);\n\n  font-size:\n    14px;\n}\n\n.pc-ir-produto,\n#pc-expirado-fechar {\n  width:\n    100%;\n\n  min-height:\n    49px;\n\n  border:\n    0;\n\n  background:\n    var(--preto);\n\n  color:\n    white;\n\n  font-size:\n    10px;\n\n  font-weight:\n    900;\n\n  letter-spacing:\n    .14em;\n\n  cursor:\n    pointer;\n}\n\n.pc-info {\n  display:\n    flex;\n\n  justify-content:\n    center;\n\n  flex-wrap:\n    wrap;\n\n  gap:\n    6px;\n\n  margin-top:\n    10px;\n\n  color:\n    #7f786e;\n\n  font-size:\n    8.5px;\n}\n\n.pc-info i {\n  color:\n    var(--dourado);\n}\n\n\n\/* =========================================================\n   CONFETE\n========================================================= *\/\n\n.pc-confete {\n  position:\n    fixed;\n\n  z-index:\n    2147483050;\n\n  width:\n    8px;\n\n  height:\n    14px;\n\n  pointer-events:\n    none;\n\n  animation:\n    pcConfete var(--dur)\n    cubic-bezier(.12,.72,.18,1)\n    forwards;\n}\n\n@keyframes pcConfete {\n\n  from {\n    transform:\n      translate(0,0)\n      rotate(0deg);\n\n    opacity:\n      1;\n  }\n\n  to {\n    transform:\n      translate(\n        var(--x),\n        var(--y)\n      )\n      rotate(var(--r));\n\n    opacity:\n      0;\n  }\n\n}\n\n\n\/* =========================================================\n   MOBILE\n========================================================= *\/\n\n@media(max-width:480px) {\n\n  #paccino-live-banner {\n    min-height:\n      42px;\n  }\n\n  .plb-inner {\n    min-height:\n      42px;\n\n    padding:\n      7px 9px;\n\n    gap:\n      7px;\n  }\n\n  .plb-live {\n    font-size:\n      6.8px;\n  }\n\n  .plb-live i {\n    width:\n      6px;\n\n    height:\n      6px;\n  }\n\n  .plb-copy {\n    font-size:\n      8.1px;\n\n    letter-spacing:\n      .04em;\n  }\n\n\n  .pc-modal {\n    width:\n      calc(100vw - 28px);\n\n    max-height:\n      79dvh;\n\n    padding:\n      14px 15px 12px;\n  }\n\n  .pc-logo {\n    font-size:\n      21px;\n  }\n\n  .pc-titulo h2 {\n    font-size:\n      22px;\n  }\n\n  .pc-titulo p {\n    font-size:\n      9.8px;\n  }\n\n  .pc-roleta-frame {\n    width:\n      min(62vw,245px);\n  }\n\n  .pc-centro {\n    width:\n      68px;\n\n    height:\n      68px;\n  }\n\n  .pc-premio span {\n    font-size:\n      72px;\n  }\n\n}\n\n\n@media(max-width:480px) and (max-height:700px) {\n\n  .pc-titulo p {\n    display:\n      none;\n  }\n\n  .pc-roleta-frame {\n    width:\n      min(57vw,220px);\n  }\n\n  .pc-area-roleta {\n    padding:\n      8px 0 4px;\n  }\n\n}\n\n\u003c\/style\u003e\n\n\n\u003cscript\u003e\n\n(function(){\n\n\"use strict\";\n\n\n\/* =========================================================\n   CONFIG\n========================================================= *\/\n\nconst CONFIG = {\n\n  abrirDepois:\n    1100,\n\n  duracaoOferta:\n    10 * 60,\n\n  primeiroResultado:\n    \"OTRO GIRO\",\n\n  segundoResultado:\n    \"60% OFF\",\n\n  som:\n    true\n\n};\n\n\n\/* =========================================================\n   SEGMENTOS\n========================================================= *\/\n\nconst segmentos = [\n\n  {\n    label:\n      \"20% OFF\",\n\n    bg:\n      \"#f5efe6\",\n\n    fg:\n      \"#111111\"\n  },\n\n  {\n    label:\n      \"SIN\\nPREMIO\",\n\n    bg:\n      \"#181818\",\n\n    fg:\n      \"#ffffff\"\n  },\n\n  {\n    label:\n      \"30% OFF\",\n\n    bg:\n      \"#d8b06a\",\n\n    fg:\n      \"#111111\"\n  },\n\n  {\n    label:\n      \"40% OFF\",\n\n    bg:\n      \"#ebe1d2\",\n\n    fg:\n      \"#111111\"\n  },\n\n  {\n    label:\n      \"OTRO\\nGIRO\",\n\n    bg:\n      \"#f5efe6\",\n\n    fg:\n      \"#111111\"\n  },\n\n  {\n    label:\n      \"50% OFF\",\n\n    bg:\n      \"#181818\",\n\n    fg:\n      \"#ffffff\"\n  },\n\n  {\n    label:\n      \"60% OFF\",\n\n    bg:\n      \"#b78943\",\n\n    fg:\n      \"#ffffff\"\n  },\n\n  {\n    label:\n      \"ENVÍO\\nGRATIS\",\n\n    bg:\n      \"#ded2c0\",\n\n    fg:\n      \"#111111\"\n  }\n\n];\n\n\n\/* =========================================================\n   ELEMENTOS\n========================================================= *\/\n\nconst root =\n  document.getElementById(\n    \"paccino-roleta\"\n  );\n\nif(!root) return;\n\n\nconst banner =\n  document.getElementById(\n    \"paccino-live-banner\"\n  );\n\n\n\/* MOVE ROLETA PARA O BODY SEM ALTERAR A LOJA *\/\n\nif(\n  root.parentElement\n  !==\n  document.body\n){\n\n  document.body\n    .appendChild(root);\n\n}\n\n\n\/* =========================================================\n   MOVE O BANNER PARA LOGO ABAIXO DO HEADER\n========================================================= *\/\n\nfunction posicionarBanner(){\n\n  if(!banner) return;\n\n\n  const headerGroup =\n    document.querySelector(\n      \".shopify-section-group-header-group\"\n    );\n\n\n  if(\n    headerGroup\n    \u0026\u0026\n    headerGroup.parentNode\n  ){\n\n    headerGroup\n      .insertAdjacentElement(\n        \"afterend\",\n        banner\n      );\n\n    return;\n\n  }\n\n\n  const header =\n    document.querySelector(\n      \"header\"\n    );\n\n\n  if(header){\n\n    header\n      .insertAdjacentElement(\n        \"afterend\",\n        banner\n      );\n\n    return;\n\n  }\n\n\n  const main =\n    document.querySelector(\n      \"main, #MainContent, [role='main']\"\n    );\n\n\n  if(main){\n\n    main\n      .insertAdjacentElement(\n        \"beforebegin\",\n        banner\n      );\n\n  }\n\n}\n\n\nposicionarBanner();\n\n\nconst canvas =\n  document.getElementById(\n    \"pc-roleta-canvas\"\n  );\n\nconst ctx =\n  canvas.getContext(\"2d\");\n\nconst wheel =\n  document.getElementById(\n    \"pc-roleta-wheel\"\n  );\n\nconst frame =\n  document.getElementById(\n    \"pc-roleta-frame\"\n  );\n\nconst girar =\n  document.getElementById(\n    \"pc-girar\"\n  );\n\nconst girarTexto =\n  document.getElementById(\n    \"pc-girar-texto\"\n  );\n\nconst statusTexto =\n  document.getElementById(\n    \"pc-status-texto\"\n  );\n\nconst subtitulo =\n  document.getElementById(\n    \"pc-subtitulo\"\n  );\n\nconst fechar =\n  document.getElementById(\n    \"pc-fechar\"\n  );\n\nconst overlay =\n  root.querySelector(\n    \".pc-overlay\"\n  );\n\nconst reabrir =\n  document.getElementById(\n    \"pc-reabrir\"\n  );\n\nconst resultado =\n  document.getElementById(\n    \"pc-resultado\"\n  );\n\nconst resultadoFechar =\n  document.getElementById(\n    \"pc-resultado-fechar\"\n  );\n\nconst irProduto =\n  document.getElementById(\n    \"pc-ir-produto\"\n  );\n\nconst expirado =\n  document.getElementById(\n    \"pc-expirado\"\n  );\n\nconst expiradoFechar =\n  document.getElementById(\n    \"pc-expirado-fechar\"\n  );\n\nconst somBtn =\n  document.getElementById(\n    \"pc-som\"\n  );\n\n\n\/* =========================================================\n   ESTADO\n========================================================= *\/\n\nlet etapa =\n  Number(\n    sessionStorage.getItem(\n      \"paccino_etapa\"\n    )\n  ) || 0;\n\netapa =\n  Math.min(\n    2,\n    Math.max(\n      0,\n      etapa\n    )\n  );\n\nlet rotacao =\n  0;\n\nlet girando =\n  false;\n\nlet somAtivo =\n  CONFIG.som;\n\nlet audioCtx =\n  null;\n\nlet tickTimer =\n  null;\n\n\n\/* =========================================================\n   TIMER\n========================================================= *\/\n\nconst TIMER_KEY =\n  \"paccino_oferta_expira\";\n\nlet expires =\n  Number(\n    sessionStorage.getItem(\n      TIMER_KEY\n    )\n  );\n\n\nif(\n  !expires\n  ||\n  expires \u003c= Date.now()\n){\n\n  expires =\n    Date.now()\n    +\n    CONFIG.duracaoOferta\n    * 1000;\n\n\n  sessionStorage\n    .setItem(\n      TIMER_KEY,\n      String(expires)\n    );\n\n}\n\n\nconst timer =\n  document.getElementById(\n    \"pc-timer\"\n  );\n\nconst timerMini =\n  document.getElementById(\n    \"pc-timer-mini\"\n  );\n\nconst timerPremio =\n  document.getElementById(\n    \"pc-timer-premio\"\n  );\n\n\nfunction formatarTempo(ms){\n\n  const total =\n    Math.max(\n      0,\n      Math.ceil(\n        ms \/ 1000\n      )\n    );\n\n  const minutos =\n    Math.floor(\n      total \/ 60\n    );\n\n  const segundos =\n    total % 60;\n\n\n  return (\n    String(minutos)\n      .padStart(2,\"0\")\n    +\n    \":\"\n    +\n    String(segundos)\n      .padStart(2,\"0\")\n  );\n\n}\n\n\nfunction expirar(){\n\n  root\n    .setAttribute(\n      \"aria-hidden\",\n      \"true\"\n    );\n\n\n  resultado\n    .setAttribute(\n      \"aria-hidden\",\n      \"true\"\n    );\n\n\n  reabrir.style.display =\n    \"none\";\n\n\n  expirado\n    .setAttribute(\n      \"aria-hidden\",\n      \"false\"\n    );\n\n\n  document\n    .documentElement\n    .style\n    .overflow =\n    \"hidden\";\n\n}\n\n\nfunction atualizarTimer(){\n\n  const restante =\n    expires\n    -\n    Date.now();\n\n\n  const txt =\n    formatarTempo(\n      restante\n    );\n\n\n  timer.textContent =\n    txt;\n\n  timerMini.textContent =\n    txt;\n\n  timerPremio.textContent =\n    txt;\n\n\n  if(\n    restante \u003c= 0\n  ){\n\n    expirar();\n\n  }\n\n}\n\n\nsetInterval(\n  atualizarTimer,\n  500\n);\n\natualizarTimer();\n\n\n\/* =========================================================\n   DESENHAR ROLETA\n========================================================= *\/\n\nfunction desenhar(){\n\n  const size =\n    canvas.width;\n\n  const centro =\n    size \/ 2;\n\n  const raio =\n    size \/ 2 - 8;\n\n  const arco =\n    Math.PI * 2\n    \/\n    segmentos.length;\n\n\n  ctx.clearRect(\n    0,\n    0,\n    size,\n    size\n  );\n\n\n  segmentos.forEach(\n    function(seg,i){\n\n      const inicio =\n        -Math.PI \/ 2\n        +\n        i * arco;\n\n      const fim =\n        inicio\n        +\n        arco;\n\n      const meio =\n        inicio\n        +\n        arco \/ 2;\n\n\n      ctx.beginPath();\n\n      ctx.moveTo(\n        centro,\n        centro\n      );\n\n      ctx.arc(\n        centro,\n        centro,\n        raio,\n        inicio,\n        fim\n      );\n\n      ctx.closePath();\n\n      ctx.fillStyle =\n        seg.bg;\n\n      ctx.fill();\n\n\n      ctx.beginPath();\n\n      ctx.moveTo(\n        centro,\n        centro\n      );\n\n      ctx.lineTo(\n        centro\n        +\n        Math.cos(inicio)\n        * raio,\n\n        centro\n        +\n        Math.sin(inicio)\n        * raio\n      );\n\n      ctx.strokeStyle =\n        \"rgba(17,17,17,.18)\";\n\n      ctx.lineWidth =\n        2;\n\n      ctx.stroke();\n\n\n      ctx.save();\n\n      ctx.translate(\n        centro,\n        centro\n      );\n\n      ctx.rotate(\n        meio\n      );\n\n      ctx.translate(\n        raio * .69,\n        0\n      );\n\n      ctx.rotate(\n        Math.PI \/ 2\n      );\n\n\n      const linhas =\n        seg.label\n          .split(\"\\n\");\n\n\n      const longo =\n        seg.label.includes(\"PREMIO\")\n        ||\n        seg.label.includes(\"ENVÍO\")\n        ||\n        seg.label.includes(\"OTRO\");\n\n\n      const tamanho =\n        longo\n        ?\n        24\n        :\n        30;\n\n\n      ctx.fillStyle =\n        seg.fg;\n\n      ctx.textAlign =\n        \"center\";\n\n      ctx.textBaseline =\n        \"middle\";\n\n      ctx.font =\n        \"700 \"\n        +\n        tamanho\n        +\n        \"px Arial\";\n\n\n      if(\n        linhas.length === 1\n      ){\n\n        ctx.fillText(\n          linhas[0],\n          0,\n          0\n        );\n\n      }else{\n\n        ctx.fillText(\n          linhas[0],\n          0,\n          -14\n        );\n\n        ctx.fillText(\n          linhas[1],\n          0,\n          14\n        );\n\n      }\n\n\n      ctx.restore();\n\n    }\n  );\n\n}\n\n\ndesenhar();\n\n\n\/* =========================================================\n   ABRIR \/ FECHAR\n========================================================= *\/\n\nfunction abrirRoleta(){\n\n  if(\n    Date.now()\n    \u003e=\n    expires\n  ){\n\n    expirar();\n\n    return;\n\n  }\n\n\n  if(\n    etapa \u003e= 2\n  ){\n\n    mostrarResultado();\n\n    return;\n\n  }\n\n\n  root\n    .setAttribute(\n      \"aria-hidden\",\n      \"false\"\n    );\n\n\n  reabrir.style.display =\n    \"none\";\n\n\n  document\n    .documentElement\n    .style\n    .overflow =\n    \"hidden\";\n\n}\n\n\nfunction fecharRoleta(){\n\n  root\n    .setAttribute(\n      \"aria-hidden\",\n      \"true\"\n    );\n\n\n  document\n    .documentElement\n    .style\n    .overflow =\n    \"\";\n\n\n  if(\n    etapa \u003c 2\n    \u0026\u0026\n    Date.now() \u003c expires\n  ){\n\n    reabrir.style.display =\n      \"flex\";\n\n  }\n\n}\n\n\nfechar.addEventListener(\n  \"click\",\n  fecharRoleta\n);\n\n\noverlay.addEventListener(\n  \"click\",\n  fecharRoleta\n);\n\n\nreabrir.addEventListener(\n  \"click\",\n  abrirRoleta\n);\n\n\nsetTimeout(\n  abrirRoleta,\n  CONFIG.abrirDepois\n);\n\n\n\/* =========================================================\n   ÁUDIO\n========================================================= *\/\n\nfunction iniciarAudio(){\n\n  if(\n    !somAtivo\n  ){\n    return null;\n  }\n\n\n  try{\n\n    if(\n      !audioCtx\n    ){\n\n      const AudioContext =\n        window.AudioContext\n        ||\n        window.webkitAudioContext;\n\n\n      if(\n        !AudioContext\n      ){\n        return null;\n      }\n\n\n      audioCtx =\n        new AudioContext();\n\n    }\n\n\n    if(\n      audioCtx.state\n      ===\n      \"suspended\"\n    ){\n\n      audioCtx.resume();\n\n    }\n\n\n    return audioCtx;\n\n  }catch(e){\n\n    return null;\n\n  }\n\n}\n\n\nfunction somTick(\n  volume = .03\n){\n\n  if(\n    !somAtivo\n  ){\n    return;\n  }\n\n\n  const ac =\n    iniciarAudio();\n\n\n  if(\n    !ac\n  ){\n    return;\n  }\n\n\n  const agora =\n    ac.currentTime;\n\n\n  const osc =\n    ac.createOscillator();\n\n\n  const gain =\n    ac.createGain();\n\n\n  osc.type =\n    \"square\";\n\n\n  osc.frequency.value =\n    760\n    +\n    Math.random()\n    * 110;\n\n\n  gain.gain\n    .setValueAtTime(\n      .0001,\n      agora\n    );\n\n\n  gain.gain\n    .exponentialRampToValueAtTime(\n      volume,\n      agora + .003\n    );\n\n\n  gain.gain\n    .exponentialRampToValueAtTime(\n      .0001,\n      agora + .028\n    );\n\n\n  osc.connect(\n    gain\n  );\n\n\n  gain.connect(\n    ac.destination\n  );\n\n\n  osc.start(\n    agora\n  );\n\n\n  osc.stop(\n    agora + .035\n  );\n\n}\n\n\nfunction musicaPrimeiroGiro(){\n\n  const ac =\n    iniciarAudio();\n\n  if(!ac) return;\n\n\n  const notas = [\n    523.25,\n    659.25\n  ];\n\n\n  notas.forEach(\n    function(freq,i){\n\n      const inicio =\n        ac.currentTime\n        +\n        i * .09;\n\n\n      const osc =\n        ac.createOscillator();\n\n\n      const gain =\n        ac.createGain();\n\n\n      osc.type =\n        \"sine\";\n\n\n      osc.frequency.value =\n        freq;\n\n\n      gain.gain\n        .setValueAtTime(\n          .0001,\n          inicio\n        );\n\n\n      gain.gain\n        .exponentialRampToValueAtTime(\n          .03,\n          inicio + .02\n        );\n\n\n      gain.gain\n        .exponentialRampToValueAtTime(\n          .0001,\n          inicio + .28\n        );\n\n\n      osc.connect(\n        gain\n      );\n\n\n      gain.connect(\n        ac.destination\n      );\n\n\n      osc.start(\n        inicio\n      );\n\n\n      osc.stop(\n        inicio + .3\n      );\n\n    }\n  );\n\n}\n\n\nfunction musicaPremio(){\n\n  const ac =\n    iniciarAudio();\n\n\n  if(\n    !ac\n  ){\n    return;\n  }\n\n\n  const notas = [\n    523.25,\n    659.25,\n    783.99,\n    1046.5\n  ];\n\n\n  notas.forEach(\n    function(freq,i){\n\n      const inicio =\n        ac.currentTime\n        +\n        i * .085;\n\n\n      const osc =\n        ac.createOscillator();\n\n\n      const gain =\n        ac.createGain();\n\n\n      osc.type =\n        \"sine\";\n\n\n      osc.frequency.value =\n        freq;\n\n\n      gain.gain\n        .setValueAtTime(\n          .0001,\n          inicio\n        );\n\n\n      gain.gain\n        .exponentialRampToValueAtTime(\n          .045,\n          inicio + .02\n        );\n\n\n      gain.gain\n        .exponentialRampToValueAtTime(\n          .0001,\n          inicio + .32\n        );\n\n\n      osc.connect(\n        gain\n      );\n\n\n      gain.connect(\n        ac.destination\n      );\n\n\n      osc.start(\n        inicio\n      );\n\n\n      osc.stop(\n        inicio + .34\n      );\n\n    }\n  );\n\n}\n\n\nfunction iniciarTicks(\n  duracao\n){\n\n  clearTimeout(\n    tickTimer\n  );\n\n\n  const inicio =\n    performance.now();\n\n\n  function tick(){\n\n    if(\n      !girando\n      ||\n      !somAtivo\n    ){\n      return;\n    }\n\n\n    const progresso =\n      Math.min(\n        1,\n        (\n          performance.now()\n          -\n          inicio\n        )\n        \/\n        duracao\n      );\n\n\n    somTick(\n      .032\n      -\n      progresso\n      *\n      .012\n    );\n\n\n    const espera =\n      45\n      +\n      Math.pow(\n        progresso,\n        2.2\n      )\n      *\n      200;\n\n\n    tickTimer =\n      setTimeout(\n        tick,\n        espera\n      );\n\n  }\n\n\n  tick();\n\n}\n\n\nsomBtn.addEventListener(\n  \"click\",\n  function(){\n\n    somAtivo =\n      !somAtivo;\n\n\n    somBtn\n      .classList\n      .toggle(\n        \"pc-mudo\",\n        !somAtivo\n      );\n\n\n    somBtn.textContent =\n      somAtivo\n      ?\n      \"♪\"\n      :\n      \"×\";\n\n\n    if(\n      somAtivo\n    ){\n\n      iniciarAudio();\n\n      somTick(.025);\n\n    }\n\n  }\n);\n\n\n\/* =========================================================\n   GIRO\n========================================================= *\/\n\nfunction normalizar(txt){\n\n  return txt\n    .replace(\n      \/\\n\/g,\n      \" \"\n    )\n    .replace(\n      \/\\s+\/g,\n      \" \"\n    )\n    .trim();\n\n}\n\n\nfunction acharIndice(label){\n\n  const alvo =\n    normalizar(\n      label\n    );\n\n\n  return segmentos\n    .findIndex(\n      function(seg){\n\n        return (\n          normalizar(\n            seg.label\n          )\n          ===\n          alvo\n        );\n\n      }\n    );\n\n}\n\n\nfunction easeOutQuint(t){\n\n  return (\n    1\n    -\n    Math.pow(\n      1 - t,\n      5\n    )\n  );\n\n}\n\n\nfunction girarPara(label){\n\n  if(\n    girando\n  ){\n    return;\n  }\n\n\n  if(\n    Date.now()\n    \u003e=\n    expires\n  ){\n\n    expirar();\n\n    return;\n\n  }\n\n\n  iniciarAudio();\n\n\n  const indice =\n    acharIndice(\n      label\n    );\n\n\n  if(\n    indice \u003c 0\n  ){\n    return;\n  }\n\n\n  girando =\n    true;\n\n\n  girar.disabled =\n    true;\n\n\n  frame\n    .classList\n    .add(\n      \"pc-girando\"\n    );\n\n\n  const setor =\n    360\n    \/\n    segmentos.length;\n\n\n  const desejado =\n    (\n      (\n        -(indice + .5)\n        *\n        setor\n      )\n      %\n      360\n      +\n      360\n    )\n    %\n    360;\n\n\n  const atual =\n    (\n      rotacao\n      %\n      360\n      +\n      360\n    )\n    %\n    360;\n\n\n  const delta =\n    (\n      desejado\n      -\n      atual\n      +\n      360\n    )\n    %\n    360;\n\n\n  const voltas =\n    etapa === 0\n    ?\n    7\n    :\n    8;\n\n\n  const inicioRotacao =\n    rotacao;\n\n\n  const finalRotacao =\n    rotacao\n    +\n    voltas * 360\n    +\n    delta;\n\n\n  const duracao =\n    etapa === 0\n    ?\n    5600\n    :\n    6100;\n\n\n  const inicio =\n    performance.now();\n\n\n  iniciarTicks(\n    duracao - 100\n  );\n\n\n  function animar(agora){\n\n    const progresso =\n      Math.min(\n        1,\n        (\n          agora\n          -\n          inicio\n        )\n        \/\n        duracao\n      );\n\n\n    const suave =\n      easeOutQuint(\n        progresso\n      );\n\n\n    let atualRotacao =\n      inicioRotacao\n      +\n      (\n        finalRotacao\n        -\n        inicioRotacao\n      )\n      *\n      suave;\n\n\n    if(\n      progresso \u003e .88\n      \u0026\u0026\n      progresso \u003c .985\n    ){\n\n      atualRotacao +=\n        Math.sin(\n          (\n            progresso\n            -\n            .88\n          )\n          *\n          115\n        )\n        *\n        (\n          1\n          -\n          progresso\n        )\n        *\n        6;\n\n    }\n\n\n    wheel\n      .style\n      .transform =\n      \"rotate(\"\n      +\n      atualRotacao\n      +\n      \"deg)\";\n\n\n    if(\n      progresso \u003c 1\n    ){\n\n      requestAnimationFrame(\n        animar\n      );\n\n    }else{\n\n      rotacao =\n        finalRotacao;\n\n\n      wheel\n        .style\n        .transform =\n        \"rotate(\"\n        +\n        rotacao\n        +\n        \"deg)\";\n\n\n      finalizarGiro();\n\n    }\n\n  }\n\n\n  requestAnimationFrame(\n    animar\n  );\n\n}\n\n\n\/* =========================================================\n   FINAL DO GIRO\n========================================================= *\/\n\nfunction finalizarGiro(){\n\n  girando =\n    false;\n\n\n  girar.disabled =\n    false;\n\n\n  clearTimeout(\n    tickTimer\n  );\n\n\n  frame\n    .classList\n    .remove(\n      \"pc-girando\"\n    );\n\n\n  somTick(\n    .04\n  );\n\n\n  \/* PRIMEIRO GIRO *\/\n\n  if(\n    etapa === 0\n  ){\n\n    etapa =\n      1;\n\n\n    sessionStorage\n      .setItem(\n        \"paccino_etapa\",\n        \"1\"\n      );\n\n\n    statusTexto\n      .textContent =\n      \"¡CASI! GANASTE UN GIRO EXTRA\";\n\n\n    subtitulo\n      .textContent =\n      \"Tu primera oportunidad desbloqueó un segundo giro.\";\n\n\n    girarTexto\n      .textContent =\n      \"OTRO GIRO\";\n\n\n    musicaPrimeiroGiro();\n\n\n    return;\n\n  }\n\n\n  \/* SEGUNDO GIRO *\/\n\n  etapa =\n    2;\n\n\n  sessionStorage\n    .setItem(\n      \"paccino_etapa\",\n      \"2\"\n    );\n\n\n  statusTexto\n    .textContent =\n    \"60% OFF\";\n\n\n  musicaPremio();\n\n\n  setTimeout(\n    mostrarResultado,\n    600\n  );\n\n}\n\n\n\/* =========================================================\n   CLIQUE CENTRAL\n========================================================= *\/\n\ngirar.addEventListener(\n  \"click\",\n  function(){\n\n    if(\n      etapa === 0\n    ){\n\n      girarPara(\n        CONFIG.primeiroResultado\n      );\n\n    }\n\n    else if(\n      etapa === 1\n    ){\n\n      girarPara(\n        CONFIG.segundoResultado\n      );\n\n    }\n\n    else{\n\n      mostrarResultado();\n\n    }\n\n  }\n);\n\n\n\/* =========================================================\n   CONFETE\n========================================================= *\/\n\nfunction confete(){\n\n  const cores = [\n    \"#b78943\",\n    \"#d3b06a\",\n    \"#111111\",\n    \"#f6f0e6\",\n    \"#ffffff\"\n  ];\n\n\n  for(\n    let i = 0;\n    i \u003c 75;\n    i++\n  ){\n\n    const pedaco =\n      document.createElement(\n        \"i\"\n      );\n\n\n    pedaco.className =\n      \"pc-confete\";\n\n\n    pedaco.style.background =\n      cores[\n        i % cores.length\n      ];\n\n\n    pedaco.style.left =\n      (\n        45\n        +\n        Math.random()\n        * 10\n      )\n      +\n      \"%\";\n\n\n    pedaco.style.top =\n      (\n        35\n        +\n        Math.random()\n        * 10\n      )\n      +\n      \"%\";\n\n\n    const x =\n      (\n        Math.random()\n        * 500\n        -\n        250\n      )\n      +\n      \"px\";\n\n\n    const y =\n      (\n        180\n        +\n        Math.random()\n        * 450\n      )\n      +\n      \"px\";\n\n\n    const rot =\n      (\n        Math.random()\n        * 1000\n        -\n        500\n      )\n      +\n      \"deg\";\n\n\n    const dur =\n      (\n        1.3\n        +\n        Math.random()\n        * .8\n      )\n      +\n      \"s\";\n\n\n    pedaco.style\n      .setProperty(\n        \"--x\",\n        x\n      );\n\n\n    pedaco.style\n      .setProperty(\n        \"--y\",\n        y\n      );\n\n\n    pedaco.style\n      .setProperty(\n        \"--r\",\n        rot\n      );\n\n\n    pedaco.style\n      .setProperty(\n        \"--dur\",\n        dur\n      );\n\n\n    document.body\n      .appendChild(\n        pedaco\n      );\n\n\n    setTimeout(\n      function(){\n\n        pedaco.remove();\n\n      },\n      2500\n    );\n\n  }\n\n}\n\n\n\/* =========================================================\n   MOSTRAR RESULTADO\n========================================================= *\/\n\nfunction mostrarResultado(){\n\n  if(\n    Date.now()\n    \u003e=\n    expires\n  ){\n\n    expirar();\n\n    return;\n\n  }\n\n\n  root\n    .setAttribute(\n      \"aria-hidden\",\n      \"true\"\n    );\n\n\n  resultado\n    .setAttribute(\n      \"aria-hidden\",\n      \"false\"\n    );\n\n\n  reabrir.style.display =\n    \"none\";\n\n\n  document\n    .documentElement\n    .style\n    .overflow =\n    \"hidden\";\n\n\n  confete();\n\n}\n\n\n\/* =========================================================\n   FECHAR RESULTADO\n========================================================= *\/\n\nresultadoFechar\n  .addEventListener(\n    \"click\",\n    function(){\n\n      resultado\n        .setAttribute(\n          \"aria-hidden\",\n          \"true\"\n        );\n\n\n      document\n        .documentElement\n        .style\n        .overflow =\n        \"\";\n\n    }\n  );\n\n\n\/* =========================================================\n   ACHAR BOTÃO NORMAL DE COMPRA\n   NÃO ALTERA O BOTÃO\n========================================================= *\/\n\nfunction elementoVisivel(el){\n\n  if(\n    !el\n  ){\n    return false;\n  }\n\n\n  const style =\n    getComputedStyle(el);\n\n\n  const rect =\n    el.getBoundingClientRect();\n\n\n  return (\n    style.display !== \"none\"\n    \u0026\u0026\n    style.visibility !== \"hidden\"\n    \u0026\u0026\n    rect.width \u003e 0\n    \u0026\u0026\n    rect.height \u003e 0\n  );\n\n}\n\n\nfunction acharBotaoCompra(){\n\n  const seletores = [\n    \".releasit-cod-form-button\",\n    \"[data-releasit-buy-now]\",\n    \".product-form__submit\",\n    \"button[name='add']\",\n    \".shopify-payment-button__button\",\n    \"form[action*='\/cart\/add'] button[type='submit']\"\n  ];\n\n\n  for(\n    const seletor\n    of seletores\n  ){\n\n    const encontrados =\n      document.querySelectorAll(\n        seletor\n      );\n\n\n    for(\n      const el\n      of encontrados\n    ){\n\n      if(\n        !root.contains(el)\n        \u0026\u0026\n        elementoVisivel(el)\n      ){\n\n        return el;\n\n      }\n\n    }\n\n  }\n\n\n  return null;\n\n}\n\n\n\/* =========================================================\n   CTA PRÊMIO\n========================================================= *\/\n\nirProduto\n  .addEventListener(\n    \"click\",\n    function(){\n\n      resultado\n        .setAttribute(\n          \"aria-hidden\",\n          \"true\"\n        );\n\n\n      document\n        .documentElement\n        .style\n        .overflow =\n        \"\";\n\n\n      const botao =\n        acharBotaoCompra();\n\n\n      if(\n        botao\n      ){\n\n        botao\n          .scrollIntoView({\n            behavior:\n              \"smooth\",\n\n            block:\n              \"center\"\n          });\n\n      }\n\n    }\n  );\n\n\n\/* =========================================================\n   EXPIRADO\n========================================================= *\/\n\nexpiradoFechar\n  .addEventListener(\n    \"click\",\n    function(){\n\n      expirado\n        .setAttribute(\n          \"aria-hidden\",\n          \"true\"\n        );\n\n\n      document\n        .documentElement\n        .style\n        .overflow =\n        \"\";\n\n    }\n  );\n\n\n\/* =========================================================\n   ESTADO APÓS RECARREGAR\n========================================================= *\/\n\nif(\n  etapa === 1\n){\n\n  statusTexto\n    .textContent =\n    \"¡CASI! GANASTE UN GIRO EXTRA\";\n\n\n  subtitulo\n    .textContent =\n    \"Tu primera oportunidad desbloqueó un segundo giro.\";\n\n\n  girarTexto\n    .textContent =\n    \"OTRO GIRO\";\n\n}\n\n})();\n\u003c\/script\u003e","brand":"👟TENIS NIKE MIND 002 🔅 + CAJA📦","offers":[{"title":"NEGRO \/ 35","offer_id":50534192611426,"sku":"627916","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 36","offer_id":50534192644194,"sku":"627917","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 37","offer_id":50534192676962,"sku":"627918","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 38","offer_id":50534192709730,"sku":"627919","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 39","offer_id":50534192742498,"sku":"627920","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 40","offer_id":50534192775266,"sku":"627921","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 41","offer_id":50534192808034,"sku":"627922","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 42","offer_id":50534192840802,"sku":"627923","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"NEGRO \/ 43","offer_id":50534192873570,"sku":"627924","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 35","offer_id":50534192906338,"sku":"627925","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 36","offer_id":50534192939106,"sku":"627926","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 37","offer_id":50534192971874,"sku":"627927","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 38","offer_id":50534193004642,"sku":"627928","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 39","offer_id":50534193037410,"sku":"627929","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 40","offer_id":50534193070178,"sku":"627930","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 41","offer_id":50534193102946,"sku":"627931","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 42","offer_id":50534193135714,"sku":"627932","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BEIGE \/ 43","offer_id":50534193168482,"sku":"627933","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 35","offer_id":50534193201250,"sku":"627934","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 36","offer_id":50534193234018,"sku":"627935","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 37","offer_id":50534193266786,"sku":"627936","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 38","offer_id":50534193299554,"sku":"627937","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 39","offer_id":50534193332322,"sku":"627938","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 40","offer_id":50534193365090,"sku":"627939","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 41","offer_id":50534193397858,"sku":"627940","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 42","offer_id":50534193430626,"sku":"627941","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"GRIS \/ 43","offer_id":50534193463394,"sku":"627942","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 35","offer_id":50534193496162,"sku":"627943","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 36","offer_id":50534193528930,"sku":"627944","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 37","offer_id":50534193561698,"sku":"627945","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 38","offer_id":50534193594466,"sku":"627946","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 39","offer_id":50534193627234,"sku":"627947","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 40","offer_id":50534193660002,"sku":"627948","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 41","offer_id":50534193692770,"sku":"627949","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 42","offer_id":50534193725538,"sku":"627950","price":145509.0,"currency_code":"COP","in_stock":true},{"title":"BLANCO \/ 43","offer_id":50534193758306,"sku":"627951","price":145509.0,"currency_code":"COP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0814\/0138\/0962\/files\/imagem_2026-09-23_080716749.png?v=1790161643"}],"url":"https:\/\/tiendabrillahogar.shop\/collections\/frontpage.oembed","provider":"Paccino ","version":"1.0","type":"link"}