{"id":1947,"date":"2024-10-26T12:40:00","date_gmt":"2024-10-26T09:40:00","guid":{"rendered":"https:\/\/goodmoodmeals.com\/abonet\/"},"modified":"2026-04-02T15:54:09","modified_gmt":"2026-04-02T12:54:09","slug":"laimes-rats","status":"publish","type":"page","link":"https:\/\/goodmoodmeals.com\/lv\/laimes-rats\/","title":{"rendered":"Laimes rats"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"lv\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <title>Good Mood Meals | Pavasara Laimes Rats<\/title>\n  <style>\n    :root {\n      --gmm-orange: #ff8d28;\n      --gmm-orange-dark: #e67916;\n      --gmm-orange-soft: #f4b266;\n      --gmm-green: #2f5d3a;\n      --gmm-green-deep: #234a2d;\n      --gmm-forest: #20352b;\n      --gmm-forest-soft: #315341;\n      --gmm-cream: #f7f1e6;\n      --gmm-paper: #fffdf8;\n      --gmm-ivory: #fbf6ee;\n      --gmm-text: #17251f;\n      --gmm-muted: #667067;\n      --gmm-line: rgba(32, 53, 43, 0.1);\n      --gmm-stroke: rgba(32, 53, 43, 0.14);\n      --gmm-slice-light: #f8f2e8;\n      --gmm-slice-dark: #2f5d3a;\n      --gmm-shell: rgba(255, 255, 255, 0.72);\n      --shadow-lg: 0 26px 70px rgba(23, 37, 31, 0.14);\n      --shadow-md: 0 14px 34px rgba(23, 37, 31, 0.1);\n      --shadow-wheel: 0 28px 60px rgba(23, 37, 31, 0.18);\n      --container: 1180px;\n    }\n\n    * {\n      box-sizing: border-box;\n      font-family: \"Manrope\", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n    }\n\n    html { scroll-behavior: smooth; }\n\n    body {\n      margin: 0;\n      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n      color: var(--gmm-text);\n      background:\n        radial-gradient(circle at top, rgba(255, 141, 40, 0.09), transparent 28%),\n        radial-gradient(circle at 80% 20%, rgba(47, 93, 58, 0.08), transparent 28%),\n        linear-gradient(180deg, #fcf8f1 0%, #f4ecde 100%);\n    }\n\n    img { max-width: 100%; display: block; }\n    button, input, textarea, select { font: inherit; }\n\n    .wheel-page {\n      min-height: auto;\n      display: flex;\n      align-items: flex-start;\n      padding: 8px 18px;\n    }\n\n    .wheel-shell {\n      width: 100%;\n      max-width: var(--container);\n      margin: 0 auto;\n      background: var(--gmm-shell);\n      border: 1px solid rgba(255, 255, 255, 0.84);\n      backdrop-filter: blur(10px);\n      -webkit-backdrop-filter: blur(10px);\n      border-radius: 34px;\n      box-shadow: var(--shadow-lg);\n      overflow: hidden;\n    }\n\n    .wheel-grid {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) minmax(360px, 510px);\n      gap: 34px;\n      align-items: center;\n      padding: 20px;\n      min-height: auto;\n    }\n\n    .hero-copy {\n      max-width: 560px;\n      padding-right: 10px;\n    }\n\n    .eyebrow {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 10px 14px;\n      border-radius: 999px;\n      background: #f7f8f4;\n      color: var(--gmm-forest);\n      font-size: 12px;\n      font-weight: 800;\n      letter-spacing: 0.16em;\n      text-transform: uppercase;\n      border: 1px solid rgba(46, 90, 60, 0.12);\n    }\n\n    .eyebrow::before {\n      content: \"\";\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: var(--gmm-orange);\n      box-shadow: 0 0 0 6px rgba(255, 141, 40, 0.14);\n    }\n\n    .hero-copy h1,\n    .step-title {\n      margin: 18px 0 14px;\n      font-size: clamp(36px, 4.6vw, 66px);\n      line-height: 0.95;\n      letter-spacing: -0.05em;\n      text-transform: uppercase;\n      color: var(--gmm-forest);\n    }\n\n    .hero-copy h1 span,\n    .step-title span {\n      color: var(--gmm-orange);\n    }\n\n    .hero-copy p,\n    .step-copy p {\n      margin: 0;\n      font-size: clamp(16px, 1.5vw, 20px);\n      line-height: 1.65;\n      color: #39453d;\n    }\n\n    .intro-btn,\n    .spin-btn,\n    .gate-btn,\n    .copy-btn,\n    .terms-link,\n    .shop-btn,\n    .modal-close {\n      border: 0;\n      cursor: pointer;\n      transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease, background 0.2s ease;\n    }\n\n    .intro-btn,\n    .spin-btn,\n    .gate-btn {\n      width: 100%;\n      max-width: 290px;\n      margin-top: 28px;\n      padding: 16px 22px;\n      border-radius: 999px !important;\n      background: linear-gradient(180deg, var(--gmm-green) 0%, var(--gmm-green-deep) 100%);\n      color: #fffdf8;\n      font-size: 15px;\n      font-weight: 900;\n      letter-spacing: 0.1em;\n      text-transform: uppercase;\n      box-shadow: 0 16px 30px rgba(47, 93, 58, 0.28);\n    }\n\n    .copy-btn {\n      display: block;\n      width: 100%;\n      max-width: 100%;\n      margin: 0 auto;\n      padding: 14px 16px;\n      border-radius: 14px;\n      font-weight: 800;\n      background: var(--gmm-green);\n      color: white;\n      white-space: nowrap;\n      text-align: center;\n     }\n\n    .intro-btn:hover,\n    .spin-btn:hover,\n    .gate-btn:hover,\n    .copy-btn:hover,\n    .shop-btn:hover {\n      transform: translateY(-1px);\n    }\n\n    .spin-btn[disabled],\n    .gate-btn[disabled],\n    .copy-btn[disabled] {\n      opacity: 0.65;\n      cursor: not-allowed;\n      transform: none;\n    }\n\n    .wheel-stage {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n    }\n\n    .wheel-col {\n      width: 100%;\n      max-width: 500px;\n      margin-left: auto;\n    }\n\n    .wheel-stack {\n      position: relative;\n      width: min(100%, 450px);\n      aspect-ratio: 1;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin: 0 auto;\n      padding: 8px;\n      isolation: isolate;\n    }\n\n    .wheel-stack::before {\n      content: \"\";\n      position: absolute;\n      inset: 24px;\n      border-radius: 50%;\n      background: radial-gradient(circle, rgba(32, 53, 43, 0.06) 0%, rgba(32, 53, 43, 0) 68%);\n      filter: blur(12px);\n      z-index: 0;\n      pointer-events: none;\n    }\n\n    .wheel-pointer {\n      position: absolute;\n      top: 4px;\n      left: 50%;\n      transform: translateX(-50%);\n      width: 52px;\n      height: 62px;\n      z-index: 12;\n      pointer-events: none;\n      filter: drop-shadow(0 10px 14px rgba(23, 37, 31, 0.18));\n    }\n\n    .wheel-pointer::before {\n      content: \"\";\n      position: absolute;\n      left: 50%;\n      top: 0;\n      transform: translateX(-50%);\n      width: 0;\n      height: 0;\n      border-left: 18px solid transparent;\n      border-right: 18px solid transparent;\n      border-bottom: 30px solid var(--gmm-orange);\n    }\n\n    .wheel-pointer::after {\n      content: \"\";\n      position: absolute;\n      left: 50%;\n      top: 27px;\n      transform: translateX(-50%);\n      width: 28px;\n      height: 20px;\n      border-radius: 0 0 14px 14px;\n      background: linear-gradient(180deg, #ffb05b 0%, #f38722 100%);\n      box-shadow: inset 0 1px 0 rgba(255,255,255,0.35);\n    }\n\n    .wheel-disc-wrap {\n      position: relative;\n      width: 100%;\n      aspect-ratio: 1;\n      border-radius: 50%;\n      padding: 10px;\n      background: #1e3d27;\n      box-shadow:\n        inset 0 1px 0 rgba(255,255,255,0.65),\n        inset 0 0 0 1px rgba(112, 88, 52, 0.08),\n        var(--shadow-wheel);\n      z-index: 1;\n    }\n\n    .wheel-disc {\n      position: relative;\n      width: 100%;\n      aspect-ratio: 1;\n      border-radius: 50%;\n      background:\n        radial-gradient(circle at 50% 30%, rgba(255,255,255,0.10), rgba(255,255,255,0) 42%),\n        conic-gradient(\n          from 0deg,\n          #f8f2e8 0deg 45deg,\n          #2f5d3a 45deg 90deg,\n          #f8f2e8 90deg 135deg,\n          #2f5d3a 135deg 180deg,\n          #f8f2e8 180deg 225deg,\n          #2f5d3a 225deg 270deg,\n          #f8f2e8 270deg 315deg,\n          #2f5d3a 315deg 360deg\n        );\n      overflow: hidden;\n      transform: rotate(0deg);\n      transition: transform 5.2s cubic-bezier(0.18, 0.92, 0.16, 1);\n      box-shadow:\n        inset 0 0 0 2px rgba(255,255,255,0.18),\n        inset 0 18px 28px rgba(255,255,255,0.05),\n        inset 0 -12px 18px rgba(32,53,43,0.08);\n    }\n\n    .wheel-disc::before {\n      content: \"\";\n      position: absolute;\n      inset: 0;\n      border-radius: 50%;\n      background:\n        radial-gradient(circle at center, rgba(255,255,255,0) 58%, rgba(255,255,255,0.08) 76%, rgba(255,255,255,0) 100%);\n      pointer-events: none;\n      z-index: 1;\n    }\n\n    .wheel-label {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      width: 116px;\n      min-height: 64px;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: center;\n      gap: 2px;\n      text-align: center;\n      z-index: 6;\n      transform-origin: center center;\n      pointer-events: none;\n      padding: 0 3px;\n    }\n\n    .wheel-label .title {\n      display: block;\n      font-size: 21px;\n      line-height: 0.9;\n      font-weight: 900;\n      letter-spacing: -0.05em;\n      text-transform: uppercase;\n      text-wrap: balance;\n    }\n\n    .wheel-label .title.small { font-size: 14px; line-height: 1.03; letter-spacing: -0.02em; }\n    .wheel-label .title.medium { font-size: 15px; line-height: 0.98; letter-spacing: -0.03em; }\n    .wheel-label .subtitle {\n      display: block;\n      max-width: 92px;\n      font-size: 9px;\n      line-height: 1.08;\n      font-weight: 700;\n      opacity: 0.95;\n    }\n\n    .wheel-label.light { color: #1f3f2b; text-shadow: 0 1px 0 rgba(255,255,255,0.25); }\n    .wheel-label.dark { color: #fffaf1; text-shadow: 0 1px 2px rgba(0,0,0,0.1); }\n    .wheel-label .accent { color: var(--gmm-orange); }\n    .wheel-label.dark .accent { color: #ffb55f; }\n    .wheel-label .subtitle.accent-subtitle { color: var(--gmm-orange) !important; }\n\n    .wheel-center {\n  position: absolute;\n  inset: 50%;\n  width: 108px;\n  height: 108px;\n  margin-left: -54px;\n  margin-top: -54px;\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 30% 20%, rgba(255,255,255,0.2), transparent 28%),\n    linear-gradient(180deg, #315f3c 0%, #1f3e29 100%);\n  border: 1px solid #f3f0e8;\n  box-shadow:\n    inset 0 0 0 1px rgba(255,255,255,0.12),\n    inset 0 10px 18px rgba(255,255,255,0.06),\n    0 12px 30px rgba(23, 37, 31, 0.24);\n  z-index: 8;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 10px;\n  text-align: center;\n}\n\n    .wheel-center-logo-img {\n  display: block;\n  width: 42px;\n  height: auto;\n  max-width: 100%;\n}\n\n    .wheel-panel {\n      width: 100%;\n      margin: 0 auto;\n      padding: 26px;\n      border-radius: 28px;\n      background: rgba(255,255,255,0.94);\n      border: 1px solid rgba(32, 53, 43, 0.08);\n      box-shadow: var(--shadow-md);\n      text-align: center;\n    }\n\n    .panel-kicker {\n      margin: 0 0 8px;\n      font-size: 12px;\n      font-weight: 800;\n      letter-spacing: 0.14em;\n      text-transform: uppercase;\n      color: var(--gmm-orange);\n    }\n\n    .result-title {\n      margin: 0;\n      font-size: clamp(26px, 2.8vw, 38px);\n      line-height: 0.98;\n      letter-spacing: -0.04em;\n      text-transform: uppercase;\n      color: var(--gmm-forest);\n    }\n\n    .result-title .accent { color: var(--gmm-orange); }\n\n    .result-subtext {\n      margin: 10px 0 0;\n      font-size: 14px;\n      line-height: 1.6;\n      color: var(--gmm-muted);\n      min-height: 48px;\n    }\n\n    .gate-card {\n      margin-top: 18px;\n      padding: 16px;\n      border-radius: 18px;\n      background: #f7f8f4;\n      border: 1px solid rgba(32, 53, 43, 0.08);\n      text-align: left;\n    }\n\n    .gate-form {\n      display: grid;\n      grid-template-columns: 1fr;\n      gap: 10px;\n    }\n\n    .email-input {\n      width: 100%;\n      padding: 15px 16px;\n      border-radius: 999px;\n      border: 1px solid #f7f8f4;\n      background: #f7f8f4;\n      color: var(--gmm-text);\n      outline: none;\n    }\n\n    .email-input:focus {\n      background: #f7f8f4;\n      box-shadow: 0 0 0 4px rgba(255, 141, 40, 0.12);\n    }\n\n    .consent-row {\n      display: flex;\n      align-items: flex-start;\n      gap: 10px;\n      font-size: 12px;\n      line-height: 1.5;\n      color: var(--gmm-muted);\n    }\n\n    .consent-row input { margin-top: 2px; }\n\n    .coupon-box {\n      display: flex;\n      flex-direction: column;\n      gap: 12px;\n      align-items: stretch;\n      justify-content: center;\n      margin-top: 18px;\n      padding: 12px;\n      border-radius: 18px;\n      background: #f7f1e6;\n      border: 1px dashed rgba(255, 141, 40, 0.45);\n    }\n\n    .coupon-email-note {\n       margin: 14px 0 0;\n       text-align: center;\n       font-size: 13px;\n       line-height: 1.5;\n       color: var(--gmm-muted);\n    }\n\n    .coupon-code {\n      flex: 1;\n      min-width: 0;\n      padding: 14px 16px;\n      border-radius: 14px;\n      background: white;\n      border: 1px solid rgba(32, 53, 43, 0.1);\n      font-size: 15px;\n      font-weight: 900;\n      letter-spacing: 0.12em;\n      color: var(--gmm-forest);\n      text-transform: uppercase;\n    }\n\n    .terms-link-wrap {\n      margin-top: 14px;\n      text-align: center;\n    }\n\n    .terms-link {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      font-size: 13px;\n      font-weight: 700;\n      color: var(--gmm-green);\n      text-decoration: underline;\n      background: none;\n      padding: 0;\n    }\n\n    .prize-actions {\n      display: flex;\n      flex-direction: column;\n      gap: 12px;\n      margin-top: 18px;\n    }\n\n    .shop-btn {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 100%;\n      padding: 16px 22px;\n      border-radius: 999px !important;\n      background: linear-gradient(180deg, var(--gmm-orange) 0%, var(--gmm-orange-dark) 100%);\n      color: #fffdf8;\n      font-size: 15px;\n      font-weight: 900;\n      letter-spacing: 0.08em;\n      text-transform: uppercase;\n      text-decoration: none;\n      box-shadow: 0 16px 30px rgba(255, 141, 40, 0.24);\n    }\n\n    .result-note,\n    .gate-status {\n      margin-top: 12px;\n      font-size: 12px;\n      line-height: 1.5;\n      color: var(--gmm-muted);\n    }\n\n    .gate-status.error { color: #ab4d19; }\n    .gate-status.success { color: #2f6a42; }\n\n    .modal-backdrop {\n      position: fixed;\n      inset: 0;\n      background: rgba(23, 37, 31, 0.55);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 20px;\n      z-index: 9999;\n    }\n\n    .modal-backdrop.hidden,\n    .hidden {\n      display: none;\n    }\n\n    .modal-card {\n      width: 100%;\n      max-width: 560px;\n      background: #fffdf8;\n      border-radius: 24px;\n      box-shadow: var(--shadow-lg);\n      border: 1px solid rgba(32, 53, 43, 0.08);\n      overflow: hidden;\n    }\n\n    .modal-head {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 6px 14px;\n      border-bottom: 1px solid rgba(32, 53, 43, 0.08);\n    }\n\n    .modal-title {\n      margin: 0;\n      font-size: 16px;\n      font-weight: 900;\n      color: var(--gmm-forest);\n      line-height: 1.2;\n    }\n\n    .modal-close {\n      background: transparent;\n      font-size: 22px;\n      line-height: 1;\n      color: var(--gmm-forest);\n      padding: 0;\n    }\n\n    .modal-winning-box {\n      margin-top: 14px;\n      padding: 12px 14px;\n      border-radius: 14px;\n      background: #eaf7ee;\n      border: 1px solid #b7dfc2;\n      color: #1f5a34;\n      font-weight: 700;\n      line-height: 1.5;\n      font-size: 14px;\n    }\n\n    .modal-body {\n      padding: 20px;\n      color: #39453d;\n      font-size: 14px;\n      line-height: 1.7;\n      text-align: left;\n    }\n\n    .modal-body h3 {\n      margin: 0 0 10px;\n      font-size: 18px;\n      color: var(--gmm-forest);\n    }\n\n    .modal-body p { margin: 0 0 10px; }\n\n    @media (max-width: 980px) {\n      .wheel-grid { grid-template-columns: 1fr; min-height: auto; padding: 24px; }\n      .hero-copy, .step-copy { max-width: 100%; padding-right: 0; text-align: center; }\n      .hero-copy p, .step-copy p { margin: 0 auto; }\n      .intro-btn, .spin-btn, .gate-btn { margin-left: auto; margin-right: auto; }\n      .wheel-col { max-width: 460px; margin: 0 auto; }\n    }\n\n    @media (max-width: 640px) {\n  .wheel-page {\n    padding: 12px;\n  }\n\n  .wheel-shell {\n    border-radius: 24px;\n  }\n\n  .wheel-grid {\n    padding: 18px 14px 22px;\n    gap: 20px;\n  }\n\n  .wheel-col {\n    max-width: 100%;\n  }\n\n  .wheel-stack {\n    width: min(100%, 360px);\n    padding: 10px;\n  }\n\n  .wheel-disc-wrap {\n    padding: 9px;\n  }\n\n  .wheel-pointer {\n    width: 46px;\n    height: 56px;\n    top: 0;\n  }\n\n  .wheel-pointer::before {\n    border-left-width: 16px;\n    border-right-width: 16px;\n    border-bottom-width: 27px;\n  }\n\n  .wheel-pointer::after {\n    top: 24px;\n    width: 24px;\n    height: 18px;\n  }\n\n  .wheel-label {\n    width: 92px;\n    min-height: 54px;\n    padding: 0 2px;\n    gap: 2px;\n  }\n\n  .wheel-label .title {\n    font-size: 17px;\n    line-height: 0.92;\n  }\n\n  .wheel-label .title.small {\n    font-size: 11px;\n    line-height: 1.02;\n    letter-spacing: -0.01em;\n  }\n\n  .wheel-label .title.medium {\n    font-size: 12px;\n    line-height: 0.98;\n  }\n\n  .wheel-label .subtitle {\n    max-width: 72px;\n    font-size: 7.8px;\n    line-height: 1.05;\n  }\n\n  .wheel-center {\n  width: 88px;\n  height: 88px;\n  margin-left: -44px;\n  margin-top: -44px;\n  border-width: 1px;\n  padding: 8px;\n}\n\n.wheel-center-logo-img {\n  width: 34px;\n}\n\n  .wheel-panel {\n    padding: 28px 18px;\n    border-radius: 24px;\n  }\n\n  .result-subtext {\n    margin-top: 12px;\n    min-height: auto;\n  }\n\n  .gate-card {\n    margin-top: 22px;\n    padding: 20px 16px 18px;\n    border-radius: 20px;\n  }\n\n  .gate-form {\n    gap: 14px;\n  }\n\n  .email-input {\n    padding: 17px 18px;\n    border-radius: 18px;\n  }\n\n  .consent-row {\n    gap: 12px;\n    font-size: 13px;\n    line-height: 1.6;\n  }\n\n  .consent-row input {\n    margin-top: 3px;\n    flex: 0 0 auto;\n  }\n\n  .coupon-box {\n    flex-direction: column;\n  }\n\n  .copy-btn {\n    display: block;\n    width: 100%;\n    margin: 0 auto;\n    text-align: center;\n  }\n\n  .coupon-email-note {\n    margin-top: 12px;\n    font-size: 12px;\n    line-height: 1.45;\n    padding: 0 8px;\n}\n\n.modal-backdrop {\n  align-items: center;\n  padding: 10px;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.modal-card {\n  width: 100%;\n  max-width: 96%;\n  max-height: 88dvh;\n  border-radius: 20px;\n  overflow: hidden;\n}\n\n.modal-winning-box {\n  margin-top: 12px;\n  padding: 12px 13px;\n  border-radius: 12px;\n  font-size: 13px;\n  line-height: 1.45;\n}\n\n.modal-head {\n  padding: 4px 10px;\n}\n\n.modal-title {\n  font-size: 16px;\n  line-height: 1.2;\n}\n\n.modal-close {\n  font-size: 20px;\n}\n\n.modal-body {\n  padding: 16px 16px 18px;\n  font-size: 14px;\n  line-height: 1.55;\n  max-height: calc(88dvh - 58px);\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.modal-body h3 {\n  margin: 0 0 8px;\n  font-size: 16px;\n  line-height: 1.25;\n}\n\n.modal-body h4 {\n  margin: 0 0 8px !important;\n  font-size: 14px !important;\n  line-height: 1.3;\n}\n\n.modal-body ol {\n  margin: 0 0 14px 18px !important;\n  padding: 0 !important;\n}\n\n.modal-body ol li {\n  margin-bottom: 10px;\n}\n\n.modal-body ul {\n  margin: 0 0 14px 18px !important;\n  padding: 0 !important;\n}\n}\n\n  <\/style>\n<\/head>\n<body>\n  <section class=\"wheel-page\">\n    <div class=\"wheel-shell\">\n      <div class=\"wheel-grid\" id=\"stepIntro\">\n        <div class=\"hero-copy\">\n          <div class=\"eyebrow\">Sezonas pavasara kampa\u0146a<\/div>\n          <h1>Griez un laim\u0113 <span>savu pavasara balvu<\/span><\/h1>\n          <p>\n            Ieg\u016bsti vienu pavasara balvu savam n\u0101kamajam Good Mood Meals piedz\u012bvojumam.\n            Ievadi savu e-pastu, griez vienu reizi un uzreiz sa\u0146em balvas kodu. Kampa\u0146a ir sp\u0113k\u0101 l\u012bdz 30. apr\u012blim.\n          <\/p>\n          <button class=\"intro-btn\" id=\"introBtn\" type=\"button\">Turpin\u0101t<\/button>\n        <\/div>\n        <div class=\"wheel-stage\">\n          <div class=\"wheel-col\">\n            <div class=\"wheel-stack\">\n              <div class=\"wheel-pointer\" aria-hidden=\"true\"><\/div>\n              <div class=\"wheel-disc-wrap\">\n                <div class=\"wheel-disc\" id=\"wheelDisc\"><\/div>\n              <\/div>\n              <div class=\"wheel-center\">\n                <img decoding=\"async\" class=\"wheel-center-logo-img\" src=\"https:\/\/goodmoodmeals.com\/wp-content\/uploads\/2024\/10\/gmmLogoFooter.svg\" alt=\"Good Mood Meals logo\" \/>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"wheel-grid hidden\" id=\"stepEmail\">\n        <div class=\"hero-copy step-copy\">\n          <div class=\"eyebrow\">2. solis no 4<\/div>\n          <h2 class=\"step-title\">V\u0113l viens solis l\u012bdz <span>laimes ratam<\/span><\/h2>\n          <p>Ievadi savu e-pastu, lai aktiviz\u0113tu griezienu un sa\u0146emtu m\u016bsu jaunumus, \u012bpa\u0161os pied\u0101v\u0101jumus, pavasara kampa\u0146as un sezon\u0101lo inform\u0101ciju l\u012bdz apr\u012b\u013ca beig\u0101m.<\/p>\n        <\/div>\n\n        <div class=\"wheel-stage\">\n          <div class=\"wheel-col\">\n            <div class=\"wheel-panel\">\n              <p class=\"panel-kicker\">Tava pavasara balva<\/p>\n              <h2 class=\"result-title\">Ievadi e-pastu, lai <span class=\"accent\">aktiviz\u0113tu<\/span><\/h2>\n              <p class=\"result-subtext\">Ievadi savu e-pastu zem\u0101k, lai aktiviz\u0113tu savu vienreiz\u0113jo griezienu.<\/p>\n              <div class=\"gate-card\">\n                <form class=\"gate-form\" id=\"gateForm\">\n                  <input class=\"email-input\" id=\"emailInput\" type=\"email\" placeholder=\"Ievadi savu e-pasta adresi\" autocomplete=\"email\" required \/>\n                  <label class=\"consent-row\">\n                    <input type=\"checkbox\" id=\"consentCheckbox\" \/>\n                    <span>Piekr\u012btu sa\u0146emt jaunumus un \u012bpa\u0161os pied\u0101v\u0101jumus. Esmu izlas\u012bjis\/-usi un piekr\u012btu\n    <a href=\"https:\/\/goodmoodmeals.com\/lv\/noteikumi-un-nosacijumi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Noteikumiem un nosac\u012bjumiem<\/a>.\n    No jaunumu sa\u0146em\u0161anas vari atteikties jebkur\u0101 laik\u0101.<\/span>\n                  <\/label>\n                  <button class=\"gate-btn\" id=\"gateBtn\" type=\"submit\">Aktiviz\u0113t manu griezienu<\/button>\n                <\/form>\n                <div class=\"gate-status\" id=\"gateStatus\">Tavs e-pasta pieteikums tiks savienots \u0161eit.<\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"wheel-grid hidden\" id=\"stepSpin\">\n        <div class=\"hero-copy step-copy\">\n          <div class=\"eyebrow\">3. solis no 4<\/div>\n          <h2 class=\"step-title\">Tavs grieziens ir <span>gatavs<\/span><\/h2>\n          <p>Tev ir viens grieziens, lai atkl\u0101tu savu pavasara balvu. Spied pogu zem\u0101k, un rats apst\u0101sies uz tavas balvas.<\/p>\n        <\/div>\n        <div class=\"wheel-stage\">\n          <div class=\"wheel-col\">\n            <div class=\"wheel-stack\">\n              <div class=\"wheel-pointer\" aria-hidden=\"true\"><\/div>\n              <div class=\"wheel-disc-wrap\">\n                <div class=\"wheel-disc\" id=\"wheelDiscClone\"><\/div>\n              <\/div>\n              <div class=\"wheel-center\">\n                <img decoding=\"async\" class=\"wheel-center-logo-img\" src=\"https:\/\/goodmoodmeals.com\/wp-content\/uploads\/2024\/10\/gmmLogoFooter.svg\" alt=\"Good Mood Meals logo\" \/>\n              <\/div>\n            <\/div>\n            <div class=\"wheel-panel\" style=\"margin-top:20px;\">\n              <button class=\"spin-btn\" id=\"spinBtn\" type=\"button\">Griezt ratu<\/button>\n              <div class=\"result-note\" id=\"spinLockText\">Vienam e-pastam at\u013cauts viens grieziens.<\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"wheel-grid hidden\" id=\"stepPrize\">\n        <div class=\"hero-copy step-copy\">\n          <div class=\"eyebrow\">4. solis no 4<\/div>\n          <h2 class=\"step-title\">Te ir <span>tava balva<\/span><\/h2>\n          <p>Tava balva ir gatava. Nokop\u0113 kodu un izmanto to sav\u0101 n\u0101kamaj\u0101 Good Mood Meals pas\u016bt\u012bjum\u0101 l\u012bdz apr\u012b\u013ca beig\u0101m.<\/p>\n        <\/div>\n        <div class=\"wheel-stage\">\n          <div class=\"wheel-col\">\n            <div class=\"wheel-panel\">\n              <p class=\"panel-kicker\">Tava pavasara balva<\/p>\n              <h2 class=\"result-title\" id=\"finalResultTitle\">Balva <span class=\"accent\">atkl\u0101ta<\/span><\/h2>\n              <p class=\"result-subtext\" id=\"finalResultSubtext\">Tavas balvas inform\u0101cija par\u0101d\u012bsies \u0161eit, kad rats apst\u0101sies.<\/p>\n\n              <div class=\"coupon-box\">\n                <div class=\"coupon-code\" id=\"couponCode\">SPRING-READY<\/div>\n                <button class=\"copy-btn\" id=\"copyBtn\" type=\"button\">Kop\u0113t kodu<\/button>\n              <\/div>\n\n              <p class=\"coupon-email-note\">Tavs kupona kods un balvas inform\u0101cija ir nos\u016bt\u012bta ar\u012b uz tavu e-pastu.<\/p>\n\n              <div class=\"terms-link-wrap\">\n                <button class=\"terms-link\" id=\"openTermsBtn\" type=\"button\">Skat\u012bt balvas noteikumus<\/button>\n              <\/div>\n\n              <div class=\"prize-actions\">\n                <a class=\"shop-btn\" id=\"shopBtn\" href=\"https:\/\/goodmoodmeals.com\/lv\/veikals\/\" target=\"_blank\" rel=\"noopener noreferrer\">\n                  Uz veikalu\n                <\/a>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"modal-backdrop hidden\" id=\"termsModal\" aria-hidden=\"true\">\n    <div class=\"modal-card\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"termsModalTitle\">\n      <div class=\"modal-head\">\n        <h3 class=\"modal-title\" id=\"termsModalTitle\">Balvas noteikumi<\/h3>\n        <button class=\"modal-close\" id=\"closeTermsBtn\" type=\"button\" aria-label=\"Aizv\u0113rt logu\">&times;<\/button>\n      <\/div>\n      <div class=\"modal-body\" id=\"termsModalBody\"><\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n    const prizes = [\n  { key: '10off', type: 'discount', label: '10% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 10% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP10', light: true, minCart: 30 },\n  { key: '15off', type: 'discount', label: '15% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 15% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP15', light: false, minCart: 30 },\n  { key: 'freebreakfast', type: 'free_product', label: 'BEZMAKSAS BROKASTIS', subtext: 'Ang\u013cu Brokastis bez maksas, ja groza starpsumma sasniedz vismaz \u20ac30.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SPBF', light: true, minCart: 30 },\n  { key: '10off_c', type: 'discount', label: '10% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 10% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP10', light: false, minCart: 30 },\n  { key: '20off', type: 'discount', label: '20% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 20% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP20', light: true, minCart: 30 },\n  { key: '15off_b', type: 'discount', label: '15% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 15% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP15', light: false, minCart: 30 },\n  { key: 'freedessert', type: 'free_product', label: 'BEZMAKSAS DESERTS', subtext: '\u0100bolu Kan\u0113\u013ca Krambls bez maksas, ja groza starpsumma sasniedz vismaz \u20ac30.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SPDS', light: true, minCart: 30 },\n  { key: '10offb', type: 'discount', label: '10% ATLAIDE', subtext: 'Izmanto savu balvas kodu un sa\u0146em 10% atlaidi n\u0101kamajam Good Mood Meals pas\u016bt\u012bjumam.', wheelSubtext: 'Min. \u20ac30', codePrefix: 'SP10', light: false, minCart: 30 }\n];\n\n   const prizeTerms = {\n  discount: {\n    title: 'Laimes rata kampa\u0146as noteikumi',\n    campaignTerms: [\n      'Katrs klients laimes rata kampa\u0146\u0101 var piedal\u012bties vienu reizi ar vienu e-pasta adresi.',\n      'Par katru veiksm\u012bgo griezienu tiek pie\u0161\u0137irts viens balvas kupons.',\n      'Visi laimes rata kuponi ir der\u012bgi l\u012bdz 30. apr\u012blim.',\n      'Kuponus var izmantot tikai akt\u012bv\u0101s kampa\u0146as laik\u0101 un l\u012bdz to der\u012bguma termi\u0146a beig\u0101m.',\n      'Kuponi nav nododami cit\u0101m person\u0101m un tos nevar apmain\u012bt pret naudu.',\n      'Vien\u0101 pas\u016bt\u012bjum\u0101 var izmantot tikai vienu kuponu, ja vien veikala noteikumi nenosaka cit\u0101di.',\n      'Balva, kas redzama uz laimes rata, ir tie\u0161i t\u0101 balva, ko klients sa\u0146em.'\n    ],\n    winningRule: 'Tu laim\u0113ji atlaides balvu. Tavs kupons ir der\u012bgs l\u012bdz 30. apr\u012blim, un to var izmantot tikai tad, ja groza starpsumma ir vismaz \u20ac30.'\n  },\n\n  free_product_breakfast: {\n    title: 'Laimes rata kampa\u0146as noteikumi',\n    campaignTerms: [\n      'Katrs klients laimes rata kampa\u0146\u0101 var piedal\u012bties vienu reizi ar vienu e-pasta adresi.',\n      'Par katru veiksm\u012bgo griezienu tiek pie\u0161\u0137irts viens balvas kupons.',\n      'Visi laimes rata kuponi ir der\u012bgi l\u012bdz 30. apr\u012blim.',\n      'Kuponus var izmantot tikai akt\u012bv\u0101s kampa\u0146as laik\u0101 un l\u012bdz to der\u012bguma termi\u0146a beig\u0101m.',\n      'Kuponi nav nododami cit\u0101m person\u0101m un tos nevar apmain\u012bt pret naudu.',\n      'Vien\u0101 pas\u016bt\u012bjum\u0101 var izmantot tikai vienu kuponu, ja vien veikala noteikumi nenosaka cit\u0101di.',\n      'Balva, kas redzama uz laimes rata, ir tie\u0161i t\u0101 balva, ko klients sa\u0146em.'\n    ],\n    winningRule: 'Tu laim\u0113ji BEZMAKSAS BROKASTU balvu. Tavs kupons ir der\u012bgs l\u012bdz 30. apr\u012blim. Ievadi savu kupona kodu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu. Kad groza starpsumma sasniegs vismaz \u20ac30, Ang\u013cu Brokastis tiks pievienotas autom\u0101tiski un b\u016bs bez maksas.'\n  },\n\n  free_product_dessert: {\n    title: 'Laimes rata kampa\u0146as noteikumi',\n    campaignTerms: [\n      'Katrs klients laimes rata kampa\u0146\u0101 var piedal\u012bties vienu reizi ar vienu e-pasta adresi.',\n      'Par katru veiksm\u012bgo griezienu tiek pie\u0161\u0137irts viens balvas kupons.',\n      'Visi laimes rata kuponi ir der\u012bgi l\u012bdz 30. apr\u012blim.',\n      'Kuponus var izmantot tikai akt\u012bv\u0101s kampa\u0146as laik\u0101 un l\u012bdz to der\u012bguma termi\u0146a beig\u0101m.',\n      'Kuponi nav nododami cit\u0101m person\u0101m un tos nevar apmain\u012bt pret naudu.',\n      'Vien\u0101 pas\u016bt\u012bjum\u0101 var izmantot tikai vienu kuponu, ja vien veikala noteikumi nenosaka cit\u0101di.',\n      'Balva, kas redzama uz laimes rata, ir tie\u0161i t\u0101 balva, ko klients sa\u0146em.'\n    ],\n    winningRule: 'Tu laim\u0113ji BEZMAKSAS DESERTA balvu. Tavs kupons ir der\u012bgs l\u012bdz 30. apr\u012blim. Ievadi savu kupona kodu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu. Kad groza starpsumma sasniegs vismaz \u20ac30, \u0100bolu Kan\u0113\u013ca Krambls tiks pievienots autom\u0101tiski un b\u016bs bez maksas.'\n  }\n};\n\n    const SESSION_EMAIL_KEY = 'gmm_wheel_email';\n    const SESSION_COUPON_KEY = 'gmm_wheel_coupon';\n    const SESSION_PRIZE_KEY = 'gmm_wheel_prize';\n\n    const emailInput = document.getElementById('emailInput');\n    const consentCheckbox = document.getElementById('consentCheckbox');\n    const gateForm = document.getElementById('gateForm');\n    const gateBtn = document.getElementById('gateBtn');\n    const gateStatus = document.getElementById('gateStatus');\n    const introBtn = document.getElementById('introBtn');\n    const spinBtn = document.getElementById('spinBtn');\n    const spinLockText = document.getElementById('spinLockText');\n    const couponCode = document.getElementById('couponCode');\n    const copyBtn = document.getElementById('copyBtn');\n    const finalResultTitle = document.getElementById('finalResultTitle');\n    const finalResultSubtext = document.getElementById('finalResultSubtext');\n    const openTermsBtn = document.getElementById('openTermsBtn');\n    const closeTermsBtn = document.getElementById('closeTermsBtn');\n    const termsModal = document.getElementById('termsModal');\n    const termsModalBody = document.getElementById('termsModalBody');\n\n    const stepIntro = document.getElementById('stepIntro');\n    const stepEmail = document.getElementById('stepEmail');\n    const stepSpin = document.getElementById('stepSpin');\n    const stepPrize = document.getElementById('stepPrize');\n\n    const wheels = [];\n    let spinning = false;\n    let currentRotation = 0;\n    let lastCode = 'SPRING-READY';\n    let unlockedEmail = '';\n    let spinLocked = false;\n\n    function saveWheelSession({ email = '', coupon = '', prizeKey = '' } = {}) {\n      if (email) sessionStorage.setItem(SESSION_EMAIL_KEY, email.trim().toLowerCase());\n      if (coupon) sessionStorage.setItem(SESSION_COUPON_KEY, coupon.trim());\n      if (prizeKey) sessionStorage.setItem(SESSION_PRIZE_KEY, prizeKey.trim());\n    }\n\n    function loadWheelSession() {\n      return {\n        email: sessionStorage.getItem(SESSION_EMAIL_KEY) || '',\n        coupon: sessionStorage.getItem(SESSION_COUPON_KEY) || '',\n        prizeKey: sessionStorage.getItem(SESSION_PRIZE_KEY) || ''\n      };\n    }\n\n    function getPrizeByKey(prizeKey) {\n      return prizes.find(prize => prize.key === prizeKey) || null;\n    }\n\n    function showStep(step) {\n      [stepIntro, stepEmail, stepSpin, stepPrize].forEach(el => el.classList.add('hidden'));\n      step.classList.remove('hidden');\n    }\n\n    function safeEmailKey(email) {\n      return `gmm_spring_spin_${btoa(email.trim().toLowerCase())}`;\n    }\n\n    function weightedPrizeIndex() {\n  const roll = Math.random() * 100;\n\n  if (roll < 10) return 0;\n  if (roll < 20) return 3;\n  if (roll < 30) return 7;\n\n  if (roll < 45) return 1;\n  if (roll < 60) return 5;\n\n  if (roll < 78) return 6;\n  if (roll < 90) return 2;\n\n  return 4;\n}\n\n    function getWheelDisplay(prize) {\n      if (prize.key === 'freebreakfast') {\n        return { titleHtml: '<span class=\"title small\">BEZMAKSAS<br>BROKASTIS<\/span>', subtitle: 'Min. \u20ac30' };\n      }\n      if (prize.key === 'freedessert') {\n        return { titleHtml: '<span class=\"title small\">BEZMAKSAS<br>DESERTS<\/span>', subtitle: 'Min. \u20ac30' };\n      }\n      if (prize.label.includes('%')) {\n        const parts = prize.label.split(' ');\n        return {\n          titleHtml: `<span class=\"title\"><span class=\"accent\">${parts[0]}<\/span><br>${parts.slice(1).join(' ')}<\/span>`,\n          subtitle: prize.wheelSubtext\n        };\n      }\n      return {\n        titleHtml: `<span class=\"title small\">${prize.label.replace(' ', '<br>')}<\/span>`,\n        subtitle: prize.wheelSubtext\n      };\n    }\n\n    function getPrizeReveal(prize) {\n      switch (prize.key) {\n        case 'freebreakfast':\n          return {\n            title: 'Ang\u013cu Brokastis <span class=\"accent\">bez maksas<\/span>',\n            subtext: 'Izmanto savu kuponu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu. Kad groza starpsumma sasniegs vismaz \u20ac30, Ang\u013cu Brokastis tiks pievienotas autom\u0101tiski un b\u016bs bez maksas.'\n          };\n        case 'freedessert':\n          return {\n            title: '\u0100bolu Kan\u0113\u013ca Krambls <span class=\"accent\">bez maksas<\/span>',\n            subtext: 'Izmanto savu kuponu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu. Kad groza starpsumma sasniegs vismaz \u20ac30, \u0100bolu Kan\u0113\u013ca Krambls tiks pievienots autom\u0101tiski un b\u016bs bez maksas.'\n          };\n        case '10off':\n        case '10offb':\n        case '10off_c':\n          return {\n            title: '<span class=\"accent\">10% atlaide<\/span> aktiviz\u0113ta',\n            subtext: 'Tava pavasara balva ir gatava. Der\u012bga pirkumiem ar groza starpsummu no vismaz \u20ac30. Ievadi savu kodu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu pirms kampa\u0146as beig\u0101m.'\n          };\n        case '15off':\n        case '15off_b':  \n          return {\n            title: '<span class=\"accent\">15% atlaide<\/span> aktiviz\u0113ta',\n            subtext: 'Tava pavasara balva ir gatava. Der\u012bga pirkumiem ar groza starpsummu no vismaz \u20ac30. Ievadi savu kodu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu pirms kampa\u0146as beig\u0101m.'\n          };\n        case '20off':\n          return {\n            title: '<span class=\"accent\">20% atlaide<\/span> aktiviz\u0113ta',\n            subtext: 'Tava pavasara balva ir gatava. Der\u012bga pirkumiem ar groza starpsummu no vismaz \u20ac30. Ievadi savu kodu groz\u0101 vai noform\u0113jot pas\u016bt\u012bjumu pirms kampa\u0146as beig\u0101m.'\n          };\n        default:\n          return { title: prize.label, subtext: prize.subtext };\n      }\n    }\n\n  function getPrizeTermsContent(prize) {\n  let terms = prizeTerms.discount;\n\n  if (prize && prize.key === 'freebreakfast') {\n    terms = prizeTerms.free_product_breakfast;\n  } else if (prize && prize.key === 'freedessert') {\n    terms = prizeTerms.free_product_dessert;\n  }\n\n  const campaignTermsList = (terms.campaignTerms || [])\n    .map(item => `<li>${item}<\/li>`)\n    .join('');\n\n  return `\n    <h3>${terms.title || 'Laimes rata kampa\u0146as noteikumi'}<\/h3>\n\n    <ol>\n      ${campaignTermsList}\n    <\/ol>\n\n    <div class=\"modal-winning-box\">\n      ${terms.winningRule || 'Tavi balvas noteikumi ir gatavi.'}\n    <\/div>\n  `;\n}\n\n   function buildWheel(targetId) {\n  const wheel = document.getElementById(targetId);\n  if (!wheel) return;\n\n  const segmentAngle = 360 \/ prizes.length;\n  wheel.innerHTML = '';\n\n  prizes.forEach((prize, index) => {\n    const label = document.createElement('div');\n    label.className = `wheel-label ${prize.light ? 'light' : 'dark'}`;\n\n    const angleCenter = -90 + (index * segmentAngle) + (segmentAngle \/ 2);\n    const isMobile = window.innerWidth <= 640;\n\n    const radius = isMobile ? 96 : 132;\n    const x = Math.cos(angleCenter * Math.PI \/ 180) * radius;\n    const y = Math.sin(angleCenter * Math.PI \/ 180) * radius;\n\n    label.style.left = '50%';\n    label.style.top = '50%';\n    label.style.transform = `translate(-50%, -50%) translate(${x}px, ${y}px)`;\n\n    const display = getWheelDisplay(prize);\n    const accentSubtitle =\n      prize.key === 'freebreakfast' || prize.key === 'freedessert'\n        ? 'subtitle accent-subtitle'\n        : 'subtitle';\n\n    label.innerHTML = `${display.titleHtml}<span class=\"${accentSubtitle}\">${display.subtitle}<\/span>`;\n    wheel.appendChild(label);\n  });\n\n  if (!wheels.includes(wheel)) {\n    wheels.push(wheel);\n  }\n}\n\n    function updateFinalResult(prize, code) {\n      const reveal = getPrizeReveal(prize);\n      finalResultTitle.innerHTML = reveal.title;\n      finalResultSubtext.textContent = reveal.subtext;\n      couponCode.textContent = code;\n      lastCode = code;\n      termsModalBody.innerHTML = getPrizeTermsContent(prize);\n    }\n\n    function openTermsModal() {\n      termsModal.classList.remove('hidden');\n      termsModal.setAttribute('aria-hidden', 'false');\n    }\n\n    function closeTermsModal() {\n      termsModal.classList.add('hidden');\n      termsModal.setAttribute('aria-hidden', 'true');\n    }\n\n    async function postJson(url, payload) {\n      const response = await fetch(url, {\n        method: 'POST',\n        credentials: 'same-origin',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify(payload)\n      });\n\n      const data = await response.json().catch(() => ({}));\n\n      if (!response.ok) {\n        throw new Error(data.message || 'Piepras\u012bjumu neizdev\u0101s izpild\u012bt.');\n      }\n\n      return data;\n    }\n\n    async function unlockSpin(email) {\n      if (!consentCheckbox.checked) {\n        gateStatus.textContent = 'L\u016bdzu, apstiprini piekri\u0161anu m\u0101rketinga sazi\u0146ai, lai aktiviz\u0113tu griezienu.';\n        gateStatus.className = 'gate-status error';\n        return;\n      }\n\n      const normalizedEmail = email.trim().toLowerCase();\n      const key = safeEmailKey(normalizedEmail);\n\n      if (localStorage.getItem(key) === 'used') {\n        gateStatus.textContent = '\u0160is e-pasts \u0161aj\u0101 p\u0101rl\u016bk\u0101 jau ir izmantojis savu griezienu.';\n        gateStatus.className = 'gate-status error';\n        return;\n      }\n\n      gateBtn.disabled = true;\n      gateBtn.textContent = 'Savieno...';\n      gateStatus.textContent = 'Pievienojam tavu e-pastu...';\n      gateStatus.className = 'gate-status';\n\n      try {\n        await postJson('\/wp-json\/gmm-wheel\/v1\/subscribe', {\n          email: normalizedEmail,\n          consent: true,\n          lang: 'lv'\n        });\n\n        unlockedEmail = normalizedEmail;\n        saveWheelSession({ email: unlockedEmail });\n\n        gateStatus.textContent = 'Tavs grieziens ir aktiviz\u0113ts.';\n        gateStatus.className = 'gate-status success';\n\n        showStep(stepSpin);\n      } catch (error) {\n        gateStatus.textContent = error.message || 'Kaut kas nog\u0101ja greizi. L\u016bdzu, m\u0113\u0123ini v\u0113lreiz.';\n        gateStatus.className = 'gate-status error';\n      } finally {\n        gateBtn.disabled = false;\n        gateBtn.textContent = 'Aktiviz\u0113t manu griezienu';\n      }\n    }\n\n    async function requestRealCouponFromServer(prizeKey, email) {\n      const data = await postJson('\/wp-json\/gmm-wheel\/v1\/create-coupon', {\n        prizeKey,\n        email,\n        lang: 'lv'\n      });\n\n      saveWheelSession({\n        email,\n        coupon: data.code,\n        prizeKey\n      });\n\n      return data.code;\n    }\n\n    function spinWheel() {\n      if (spinning || spinLocked || !unlockedEmail) return;\n\n      spinning = true;\n      spinBtn.disabled = true;\n      spinBtn.textContent = 'Grie\u017eas...';\n\n      const winningIndex = weightedPrizeIndex();\n      const segmentAngle = 360 \/ prizes.length;\n      const targetAngle = winningIndex * segmentAngle + segmentAngle \/ 2;\n      const extraTurns = 360 * (5 + Math.floor(Math.random() * 2));\n      const finalRotation = currentRotation + extraTurns + (360 - targetAngle);\n\n      currentRotation = finalRotation;\n\n      wheels.forEach(wheel => {\n        wheel.style.transform = `rotate(${finalRotation}deg)`;\n      });\n\n      const prize = prizes[winningIndex];\n\n      setTimeout(async () => {\n        try {\n          const code = await requestRealCouponFromServer(prize.key, unlockedEmail);\n          updateFinalResult(prize, code);\n          localStorage.setItem(safeEmailKey(unlockedEmail), 'used');\n          spinLocked = true;\n          spinning = false;\n          spinBtn.disabled = true;\n          spinBtn.textContent = 'Grieziens izmantots';\n          spinLockText.textContent = 'Vienam e-pastam at\u013cauts viens grieziens.';\n          showStep(stepPrize);\n        } catch (error) {\n          console.error(error);\n          spinning = false;\n          spinBtn.disabled = false;\n          spinBtn.textContent = 'Griezt ratu';\n          spinLockText.textContent = error.message || 'Rad\u0101s probl\u0113ma, \u0123ener\u0113jot tavu balvu. L\u016bdzu, m\u0113\u0123ini v\u0113lreiz.';\n        }\n      }, 5300);\n    }\n\n    function copyCode() {\n      navigator.clipboard.writeText(lastCode).then(() => {\n        const original = copyBtn.textContent;\n        copyBtn.textContent = 'Nokop\u0113ts';\n        setTimeout(() => {\n          copyBtn.textContent = original;\n        }, 1400);\n      });\n    }\n\n    function restoreWheelSession() {\n      const session = loadWheelSession();\n\n      if (session.email) {\n        unlockedEmail = session.email;\n      }\n\n      if (session.coupon && session.prizeKey) {\n        const prize = getPrizeByKey(session.prizeKey);\n        if (prize) {\n          updateFinalResult(prize, session.coupon);\n          spinLocked = true;\n          showStep(stepPrize);\n          return;\n        }\n      }\n\n      if (session.email) {\n        showStep(stepSpin);\n      }\n    }\n\n    introBtn.addEventListener('click', () => showStep(stepEmail));\n\n    gateForm.addEventListener('submit', (event) => {\n      event.preventDefault();\n      const email = emailInput.value.trim();\n      if (!email) return;\n      unlockSpin(email);\n    });\n\n    spinBtn.addEventListener('click', spinWheel);\n    copyBtn.addEventListener('click', copyCode);\n    openTermsBtn.addEventListener('click', openTermsModal);\n    closeTermsBtn.addEventListener('click', closeTermsModal);\n\n    termsModal.addEventListener('click', (event) => {\n      if (event.target === termsModal) {\n        closeTermsModal();\n      }\n    });\n\n    document.addEventListener('keydown', (event) => {\n      if (event.key === 'Escape' && !termsModal.classList.contains('hidden')) {\n        closeTermsModal();\n      }\n    });\n\n   function initializeWheelPage() {\n  buildWheel('wheelDisc');\n  buildWheel('wheelDiscClone');\n  restoreWheelSession();\n}\n\ninitializeWheelPage();\n\nlet rebuildTimeout;\nwindow.addEventListener('resize', () => {\n  clearTimeout(rebuildTimeout);\n  rebuildTimeout = setTimeout(() => {\n    buildWheel('wheelDisc');\n    buildWheel('wheelDiscClone');\n\n    wheels.forEach(wheel => {\n      wheel.style.transform = `rotate(${currentRotation}deg)`;\n    });\n  }, 120);\n});\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Good Mood Meals | Pavasara Laimes Rats Sezonas pavasara kampa\u0146a Griez un laim\u0113 savu pavasara balvu Ieg\u016bsti vienu pavasara balvu savam n\u0101kamajam Good Mood Meals piedz\u012bvojumam. Ievadi savu e-pastu, griez vienu reizi un uzreiz sa\u0146em balvas kodu. Kampa\u0146a ir sp\u0113k\u0101 l\u012bdz 30. apr\u012blim. Turpin\u0101t 2. solis no 4 V\u0113l viens solis l\u012bdz laimes ratam Ievadi [&#8230;]\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1947","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/pages\/1947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/comments?post=1947"}],"version-history":[{"count":26,"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/pages\/1947\/revisions"}],"predecessor-version":[{"id":7393,"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/pages\/1947\/revisions\/7393"}],"wp:attachment":[{"href":"https:\/\/goodmoodmeals.com\/lv\/wp-json\/wp\/v2\/media?parent=1947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}