{
  "version": 3,
  "sources": ["/cdn/shop/t/26/assets/cb-reviews.js?cbv=20261028-1"],
  "sourcesContent": ["/* cb-reviews.js \u2014 member star ratings on the product page.\n *\n * Renders three things on a product page:\n *   1. a compact star summary under the product title (links to #reviews)\n *   2. the #reviews section: average, per-star bars, category averages,\n *      tag chips with counts, and the latest member ratings\n *   3. for a logged-in member who bought the product: a \"Rate this\" button\n *      that opens the star + tag form; logged-out visitors see \"Log in to\n *      review\"; everyone else sees no button\n *\n * Data: GET/POST https://cannibisters-loyalty.vercel.app/api/loyalty/reviews\n * (lib/reviews.mjs). Identity comes from the loyalty session the storefront\n * mints through the Cannisino app proxy \u2014 the browser never asserts who it is.\n *\n * Arriving on /products/<handle>#reviews (the review-request emails) scrolls\n * to the section and opens the form when the member is eligible.\n */\n(function () {\n  'use strict';\n  if (window.__cbReviews) return;\n  window.__cbReviews = 1;\n\n  var API = (window.CB_REVIEWS_API || 'https://cannibisters-loyalty.vercel.app') + '/api/loyalty/reviews';\n  var SESSION_URL = '/apps/cannisino/loyalty-session';\n  var REDUCED = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  var STAR = 'M12 2.6l2.83 6.07 6.63.73-4.93 4.5 1.34 6.53L12 17.1l-5.87 3.33 1.34-6.53-4.93-4.5 6.63-.73z';\n\n  function handle() {\n    if (window.CB_PDP_HANDLE) return window.CB_PDP_HANDLE;\n    var m = location.pathname.match(/\\/products\\/([^/?#]+)/);\n    return m ? decodeURIComponent(m[1]) : null;\n  }\n  function esc(s) {\n    return String(s == null ? '' : s).replace(/[&<>\"']/g, function (c) {\n      return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c];\n    });\n  }\n  function el(html) { var t = document.createElement('template'); t.innerHTML = html.trim(); return t.content.firstChild; }\n  function fmt(n) { return Math.round(Number(n) || 0).toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ','); }\n  function one(n) { return (Math.round(n * 10) / 10).toFixed(1); }\n\n  /* \u2500\u2500 styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var CSS = [\n    ':root{--cbr-gold:#D4A843;--cbr-amber:#FF9F00;--cbr-ink:#F4ECE0;--cbr-mute:#9A968C;--cbr-card:#0D0F17;--cbr-line:rgba(244,236,224,.12);--cbr-empty:rgba(244,236,224,.16)}',\n    '.cbr-stars{display:inline-flex;gap:2px;position:relative;line-height:0;vertical-align:middle}',\n    '.cbr-stars svg{width:var(--s,16px)!important;height:var(--s,16px)!important;display:block;flex:none;max-width:none}',\n    '.cbr-stars .cbr-base,.cbr-stars .cbr-fill>span{display:inline-flex;gap:2px;flex:none}.cbr-stars .cbr-base path{fill:var(--cbr-empty)}',\n    '.cbr-stars .cbr-fill{position:absolute;inset:0 auto 0 0;overflow:hidden;display:inline-flex;gap:2px;white-space:nowrap}',\n    '.cbr-stars .cbr-fill path{fill:var(--cbr-gold)}',\n    '.cbr-mini{display:flex;align-items:center;gap:10px;margin:14px 0 4px;font:500 14px/1 \"DM Sans\",sans-serif;color:var(--cbr-ink);text-decoration:none}',\n    '.cbr-mini b{font-weight:700}.cbr-mini span{color:var(--cbr-mute)}.cbr-mini:hover span{color:var(--cbr-gold)}',\n    '#reviews.cbr{scroll-margin-top:110px;max-width:1140px;margin:40px auto 16px;padding:0 20px;color:var(--cbr-ink);font-family:\"DM Sans\",sans-serif}','.cbr-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:14px}','.cbr-head .cbr-cta{margin:0}.cbr-head .cbr-cta p{display:none}',\n    '.cbr-eyebrow{font:600 11px/1 \"DM Sans\",sans-serif;letter-spacing:.22em;text-transform:uppercase;color:var(--cbr-gold);margin:0 0 10px}',\n    '.cbr-h{font-family:\"Bebas Neue\",Impact,sans-serif;font-size:clamp(30px,3.4vw,40px);line-height:.95;letter-spacing:.01em;margin:0;font-weight:400}',\n    '.cbr-grid{display:grid;grid-template-columns:minmax(260px,340px) 1fr;gap:16px}',\n    '.cbr-card{background:var(--cbr-card);border:1px solid var(--cbr-line);border-radius:14px;padding:18px 20px}','.cbr-sum{display:grid;grid-template-columns:auto minmax(170px,230px) 1fr;gap:12px 28px;align-items:center}','.cbr-score{display:flex;align-items:center;gap:14px}','.cbr-score .cbr-based{margin:6px 0 0}','.cbr-bars .cbr-bar{margin:3px 0;grid-template-columns:24px 1fr 22px;gap:8px;font-size:12px}','.cbr-cats{display:grid;grid-template-columns:1fr 1fr;gap:8px 22px;margin:0!important}','.cbr-cat{display:grid;grid-template-columns:minmax(0,1fr) 70px 26px;align-items:center;gap:8px;font-size:13px}','.cbr-cat span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cbr-cat>b{text-align:right;font-weight:700}','.cbr-cat i{display:block;height:4px;border-radius:4px;background:var(--cbr-empty);overflow:hidden}','.cbr-cat i b{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:left;background:linear-gradient(90deg,#A9842F,var(--cbr-gold));transition:transform .9s cubic-bezier(.16,1,.3,1)}','.cbr-chiprow{grid-column:1/-1;padding-top:12px;border-top:1px solid var(--cbr-line)}','.cbr-chiprow .cbr-chip{padding:6px 10px;font-size:12.5px}','.cbr-extra{display:none!important}.cbr-showall .cbr-extra{display:inline-flex!important}.cbr-list.cbr-showall .cbr-extra{display:block!important}','.cbr-morechips{cursor:pointer;background:transparent;border-style:dashed;color:var(--cbr-mute)}','.cbr-link{appearance:none;background:none;border:0;color:var(--cbr-gold);font:600 13px/1 \"DM Sans\",sans-serif;cursor:pointer;padding:10px 0 0}',\n    '.cbr-avg{display:flex;align-items:flex-end;gap:12px;margin-bottom:6px}',\n    '.cbr-avg-n{font-family:\"Bebas Neue\",Impact,sans-serif;font-size:58px;line-height:.8;color:var(--cbr-ink)}',\n    '.cbr-avg-of{font-size:14px;color:var(--cbr-mute);padding-bottom:6px}',\n    '.cbr-based{font-size:12.5px;color:var(--cbr-mute);margin:8px 0 12px}',\n    '.cbr-bar{display:grid;grid-template-columns:34px 1fr 30px;align-items:center;gap:10px;font-size:13px;color:var(--cbr-mute);margin:7px 0}',\n    '.cbr-bar i{display:block;height:6px;border-radius:6px;background:var(--cbr-empty);overflow:hidden}',\n    '.cbr-bar i b{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:left;border-radius:6px;background:linear-gradient(90deg,#A9842F,var(--cbr-gold));transition:transform .9s cubic-bezier(.16,1,.3,1)}',\n    '.cbr-bar em{font-style:normal;text-align:right;color:var(--cbr-ink)}',\n    '.cbr-cats{display:grid;grid-template-columns:1fr 1fr;gap:12px 28px;margin-bottom:22px}',\n    '.cbr-cat-top{display:flex;justify-content:space-between;font-size:14px;margin-bottom:6px}.cbr-cat-top b{font-weight:700}',\n    '.cbr-sub{font:600 11px/1 \"DM Sans\",sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--cbr-mute);margin:0 0 12px}',\n    '.cbr-chips{display:flex;flex-wrap:wrap;gap:8px}',\n    '.cbr-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:999px;border:1px solid rgba(212,168,67,.45);background:rgba(212,168,67,.07);font:500 13px/1 \"DM Sans\",sans-serif;color:var(--cbr-ink)}',\n    '.cbr-chip b{font-weight:700;color:var(--cbr-gold)}',\n    '.cbr-chip.meh{border-color:var(--cbr-line);background:transparent;color:var(--cbr-mute)}.cbr-chip.meh b{color:var(--cbr-mute)}',\n    '.cbr-cta{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:16px}',\n    '.cbr-cta p{margin:0;font-size:14px;color:var(--cbr-mute)}',\n    '.cbr-btn{appearance:none;border:0;cursor:pointer;display:inline-flex;align-items:center;gap:10px;padding:14px 22px;border-radius:10px;background:var(--cbr-amber);color:#0A0A0A;font:700 15px/1 \"DM Sans\",sans-serif;letter-spacing:.02em;text-decoration:none;transition:transform .15s,box-shadow .2s}',\n    '.cbr-btn:hover{transform:translateY(-1px);box-shadow:0 10px 26px -10px rgba(255,159,0,.7)}',\n    '.cbr-btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}',\n    '.cbr-btn.ghost{background:transparent;color:var(--cbr-ink);border:1px solid var(--cbr-line)}',\n    '.cbr-list{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:10px}','.cbr-item{background:var(--cbr-card);border:1px solid var(--cbr-line);border-radius:12px;padding:12px 14px;font-size:13px}','.cbr-item p{margin:6px 0 0;color:var(--cbr-mute);font-size:12.5px}',\n    '.cbr-item-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}',\n    '.cbr-item-top b{font-weight:700}.cbr-item-top small{color:var(--cbr-mute);font-size:12px}',\n    '.cbr-verified{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--cbr-gold);margin-left:4px}',\n    '.cbr-item .cbr-chips{margin-top:12px}.cbr-item .cbr-chip{padding:6px 10px;font-size:12px}',\n    '.cbr-empty{text-align:center;padding:36px 24px}.cbr-empty p{color:var(--cbr-mute);margin:10px 0 0;font-size:15px}',\n    /* form */\n    '.cbr-form{margin-top:16px;overflow:hidden}',\n    '.cbr-form[hidden]{display:none}',\n    '.cbr-form-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px}',\n    '.cbr-form-head h3{font-family:\"Bebas Neue\",Impact,sans-serif;font-weight:400;font-size:34px;line-height:1;margin:0}',\n    '.cbr-form-head p{margin:6px 0 0;color:var(--cbr-mute);font-size:14px}',\n    '.cbr-x{appearance:none;background:none;border:1px solid var(--cbr-line);color:var(--cbr-ink);width:36px;height:36px;border-radius:50%;cursor:pointer;font-size:18px;line-height:1}',\n    '.cbr-rate{display:grid;grid-template-columns:minmax(120px,190px) auto 1fr;align-items:center;gap:14px;padding:12px 0;border-top:1px solid var(--cbr-line)}',\n    '.cbr-rate label{font-weight:600;font-size:15px}',\n    '.cbr-pick{display:inline-flex;gap:4px}',\n    '.cbr-pick button{appearance:none;background:none;border:0;padding:3px;cursor:pointer;line-height:0;border-radius:6px}',\n    '.cbr-pick button:focus-visible{outline:2px solid var(--cbr-gold);outline-offset:2px}',\n    '.cbr-pick svg{width:30px;height:30px;transition:transform .18s cubic-bezier(.22,1,.36,1)}',\n    '.cbr-pick path{fill:var(--cbr-empty);transition:fill .12s}',\n    '.cbr-pick button.on path,.cbr-pick button.hov path{fill:var(--cbr-gold)}','.cbr-pick.hovering button.on:not(.hov) path{fill:var(--cbr-empty)}',\n    '.cbr-pick button.hov svg{transform:scale(1.12)}',\n    '.cbr-pick button.pop svg{animation:cbr-pop .42s cubic-bezier(.22,1,.36,1)}',\n    '@keyframes cbr-pop{0%{transform:scale(1)}40%{transform:scale(1.35) rotate(-8deg)}100%{transform:scale(1)}}',\n    '.cbr-word{font-size:13px;color:var(--cbr-mute);min-width:70px}',\n    '.cbr-group{margin-top:22px}',\n    /* summary v2 */\n    '.cbr-sum2{display:grid;grid-template-columns:minmax(220px,auto) 1fr;gap:22px 48px;align-items:center;padding:26px 28px}',\n    '.cbr-hero .cbr-score{gap:16px}.cbr-hero .cbr-avg-n{font-size:72px}',\n    '.cbr-rec{margin:14px 0 0;font-size:14px;color:var(--cbr-mute)}.cbr-rec b{color:var(--cbr-ink);font-weight:700}',\n    '.cbr-says-l{margin:0 0 12px;font-size:13px;color:var(--cbr-mute)}',\n    '.cbr-says-w{display:flex;flex-wrap:wrap;gap:10px}',\n    '.cbr-big{font-family:\"Bebas Neue\",Impact,sans-serif;font-size:clamp(26px,2.6vw,34px);line-height:1;letter-spacing:.02em;color:var(--cbr-ink);padding:10px 18px 8px;border:1px solid rgba(212,168,67,.45);border-radius:999px;background:rgba(212,168,67,.07)}',\n    '.cbr-big:first-child{color:var(--cbr-gold);border-color:var(--cbr-gold)}',\n    '.cbr-meters{grid-column:1/-1;list-style:none;margin:0;padding:18px 0 0;border-top:1px solid var(--cbr-line);display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px 24px}',\n    '.cbr-meters li{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:6px 10px;font-size:13px;color:var(--cbr-mute)}',\n    '.cbr-meters i{grid-column:1/-1;display:block;height:4px;border-radius:4px;background:var(--cbr-empty);overflow:hidden}',\n    '.cbr-meters i b{display:block;height:100%;width:100%;transform:scaleX(0);transform-origin:left;background:rgba(244,236,224,.55);transition:transform .9s cubic-bezier(.16,1,.3,1)}',\n    '.cbr-meters em{font-style:normal;font-weight:700;color:var(--cbr-ink);grid-row:1;grid-column:2}',\n    '.cbr-meters li.best span,.cbr-meters li.best em{color:var(--cbr-gold)}.cbr-meters li.best i b{background:linear-gradient(90deg,#A9842F,var(--cbr-gold))}',\n    '.cbr-detail{grid-column:1/-1;border-top:1px solid var(--cbr-line);padding-top:14px}',\n    '.cbr-detail summary{cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--cbr-ink)}',\n    '.cbr-detail summary::-webkit-details-marker{display:none}',\n    '.cbr-detail summary::after{content:\"+\";color:var(--cbr-gold);font-size:16px;line-height:1;transition:transform .2s}',\n    '.cbr-detail[open] summary::after{transform:rotate(45deg)}',\n    '.cbr-detail summary:focus-visible{outline:2px solid var(--cbr-gold);outline-offset:4px;border-radius:4px}',\n    '.cbr-detail-in{display:grid;grid-template-columns:minmax(200px,260px) 1fr;gap:16px 40px;margin-top:16px}',\n    '.cbr-lines p{margin:0 0 8px;font-size:13px;line-height:1.5;color:var(--cbr-mute)}.cbr-lines b{display:inline-block;min-width:120px;color:var(--cbr-ink);font-weight:600;margin-right:8px}',\n    '@media (max-width:760px){.cbr-sum2{grid-template-columns:1fr;gap:18px;padding:20px}.cbr-hero .cbr-avg-n{font-size:58px}.cbr-big{font-size:22px;padding:9px 14px 7px}.cbr-big:nth-child(n+4){display:none}.cbr-meters{grid-template-columns:1fr 1fr}.cbr-detail-in{grid-template-columns:1fr}.cbr-lines b{display:block;margin:0 0 2px}.cbr-detail .cbr-bars{display:block!important}}',\n    '.cbr-demo{margin:14px 0 0;padding:10px 14px;border:1px dashed rgba(212,168,67,.6);border-radius:10px;color:var(--cbr-gold);font-size:13px}',\n    '.cbr-words{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 14px calc(min(190px,40%) + 14px)}',\n    '.cbr-words .cbr-toggle{padding:7px 11px;font-size:13px}',\n    '.cbr-words .cbr-wx{display:none}.cbr-words.all .cbr-wx{display:inline-flex}',\n    '.cbr-wmore{appearance:none;background:none;border:0;padding:7px 4px;color:var(--cbr-gold);font:600 13px/1 \"DM Sans\",sans-serif;cursor:pointer;text-decoration:underline;text-underline-offset:3px}',\n    '.cbr-group .cbr-words{margin-left:0}',\n    '.cbr-cat-w{grid-column:1/-1;margin:-2px 0 6px;font-size:12px;line-height:1.5;color:var(--cbr-mute)}',\n    '.cbr-cat-w b{color:var(--cbr-gold);font-weight:700}',\n    '.cbr-chiplabel{align-self:center;margin-right:4px;font-size:12px;color:var(--cbr-mute)}',\n    '.cbr-toggle{cursor:pointer;appearance:none;display:inline-flex;align-items:center;gap:7px;padding:9px 14px;border-radius:999px;border:1px solid var(--cbr-line);background:transparent;color:var(--cbr-ink);font:500 14px/1 \"DM Sans\",sans-serif;transition:all .15s}',\n    '.cbr-toggle:hover{border-color:rgba(212,168,67,.6)}',\n    '.cbr-toggle[aria-pressed=\"true\"]{background:rgba(212,168,67,.14);border-color:var(--cbr-gold);color:var(--cbr-ink)}',\n    '.cbr-toggle[aria-pressed=\"true\"]::before{content:\"\";width:14px;height:14px;background:var(--cbr-gold);-webkit-mask:url(\"data:image/svg+xml,%3Csvg xmlns=\\'http://www.w3.org/2000/svg\\' viewBox=\\'0 0 24 24\\'%3E%3Cpath d=\\'M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z\\'/%3E%3C/svg%3E\") center/contain no-repeat;mask:url(\"data:image/svg+xml,%3Csvg xmlns=\\'http://www.w3.org/2000/svg\\' viewBox=\\'0 0 24 24\\'%3E%3Cpath d=\\'M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z\\'/%3E%3C/svg%3E\") center/contain no-repeat}',\n    '.cbr-toggle.meh[aria-pressed=\"true\"]{background:rgba(244,236,224,.08);border-color:var(--cbr-mute)}',\n    '.cbr-toggle.meh[aria-pressed=\"true\"]::before{background:var(--cbr-mute)}',\n    '.cbr-toggle:disabled{opacity:.35;cursor:not-allowed}',\n    '.cbr-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:26px;padding-top:18px;border-top:1px solid var(--cbr-line)}',\n    '.cbr-foot p{margin:0;font-size:13px;color:var(--cbr-mute)}',\n    '.cbr-err{color:#ff8a7a;font-size:13px;margin:10px 0 0}',\n    '.cbr-done{text-align:center;padding:34px 20px}',\n    '.cbr-done .cbr-plus{font-family:\"Bebas Neue\",Impact,sans-serif;font-size:64px;line-height:1;color:var(--cbr-gold)}',\n    '.cbr-done p{color:var(--cbr-mute);margin:8px 0 0}',\n    '.cbr-burst{position:relative;display:inline-block}',\n    '.cbr-burst i{position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px;background:var(--cbr-gold);-webkit-clip-path:path(\"' + 'M5 0l1.4 3.1 3.3.4-2.5 2.3.7 3.3L5 7.4 2.1 9.1l.7-3.3L.3 3.5l3.3-.4z' + '\");clip-path:path(\"M5 0l1.4 3.1 3.3.4-2.5 2.3.7 3.3L5 7.4 2.1 9.1l.7-3.3L.3 3.5l3.3-.4z\");animation:cbr-burst .9s cubic-bezier(.16,1,.3,1) forwards;opacity:0}',\n    '@keyframes cbr-burst{0%{opacity:1;transform:translate(0,0) scale(.6)}100%{opacity:0;transform:translate(var(--x),var(--y)) scale(1.2) rotate(140deg)}}',\n    '@media (max-width:960px){.cbr-sum{grid-template-columns:auto 1fr}.cbr-cats{grid-column:1/-1}}','@media (max-width:640px){.cbr-bars{display:none}.cbr-avg-n{font-size:48px}.cbr-head .cbr-btn{padding:11px 18px}.cbr-sum{grid-template-columns:1fr;gap:12px}.cbr-cats{grid-template-columns:1fr;gap:6px}.cbr-list{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:10px;padding-bottom:4px;-webkit-overflow-scrolling:touch}.cbr-list .cbr-item{flex:0 0 78%;scroll-snap-align:start}.cbr-link{display:none}.cbr-head{align-items:flex-start}.cbr-head .cbr-cta{width:100%}}',\n    '@media (max-width:560px){.cbr-words{margin-left:0}#reviews.cbr{margin-top:48px;padding:0 16px}.cbr-card{padding:18px}.cbr-rate{grid-template-columns:1fr auto;gap:6px 12px}.cbr-rate .cbr-word{display:none}.cbr-pick svg{width:32px;height:32px}.cbr-btn{width:100%;justify-content:center}.cbr-cta{flex-direction:column;align-items:stretch}}',\n    '@media (prefers-reduced-motion:reduce){.cbr-bar i b,.cbr-pick svg,.cbr-btn{transition:none!important}.cbr-pick button.pop svg,.cbr-burst i{animation:none!important}}',\n  ].join('\\n');\n\n  /* \u2500\u2500 star rendering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function starRow(cls) {\n    var s = '';\n    for (var i = 0; i < 5; i++) s += '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"' + STAR + '\"/></svg>';\n    return '<span class=\"' + cls + '\">' + s + '</span>';\n  }\n  /* Fractional display: a gold copy clipped to value/5 of the width over a dim base. */\n  function stars(value, size) {\n    var pct = Math.max(0, Math.min(100, (Number(value) || 0) / 5 * 100));\n    return '<span class=\"cbr-stars\" style=\"--s:' + (size || 16) + 'px\" role=\"img\" aria-label=\"' + one(value || 0) + ' out of 5 stars\">' +\n      starRow('cbr-base') + '<span class=\"cbr-fill\" style=\"width:' + pct + '%\">' + starRow('') + '</span></span>';\n  }\n\n  var WORDS = ['', 'Poor', 'Fair', 'Good', 'Great', 'Excellent'];\n\n  /* \u2500\u2500 API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  var token = null;\n  function mintSession() {\n    if (window.CB_LOGGED_IN === false) return Promise.resolve(null);\n    return fetch(SESSION_URL, { method: 'POST', credentials: 'same-origin' }).then(function (res) {\n      return res.json().catch(function () { return null; }).then(function (d) {\n        if (!res.ok || !d || !d.token) return null;\n        token = d.token;\n        return token;\n      });\n    }).catch(function () { return null; });\n  }\n  function load(h) {\n    return fetch(API + '?handle=' + encodeURIComponent(h), {\n      headers: token ? { Authorization: 'Bearer ' + token } : {},\n    }).then(function (r) { return r.ok ? r.json() : null; }).catch(function () { return null; });\n  }\n  function submit(h, ratings, tags) {\n    return fetch(API, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + token },\n      body: JSON.stringify({ handle: h, ratings: ratings, tags: tags }),\n    }).then(function (r) {\n      return r.json().catch(function () { return {}; }).then(function (d) { d.__status = r.status; return d; });\n    });\n  }\n\n  /* \u2500\u2500 compact summary under the title \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function renderMini(data) {\n    var title = document.querySelector('.product__title');\n    if (!title) return;\n    var old = document.querySelector('[data-cb-pdp=\"rating\"]');\n    if (old) old.remove();\n    var s = data.summary;\n    var html = s && s.count\n      ? '<a class=\"cbr-mini\" href=\"#reviews\" data-cb-pdp=\"rating\">' + stars(s.average, 17) + '<b>' + one(s.average) + '</b><span>' +\n        s.count + (s.count === 1 ? ' member rating' : ' member ratings') + '</span></a>'\n      : (data.me && data.me.state === 'eligible'\n        ? '<a class=\"cbr-mini\" href=\"#reviews\" data-cb-pdp=\"rating\">' + stars(0, 17) + '<span>Be the first to rate this</span></a>'\n        : '');\n    if (!html) return;\n    /* Under the title (the type / THC badges may have moved into the photo frame). */\n    var badges = document.querySelector('[data-cb-pdp=\"badges\"]');\n    var anchor = badges && badges.parentNode === title.parentNode ? badges : title;\n    anchor.insertAdjacentElement('afterend', el(html));\n  }\n\n  /* \u2500\u2500 #reviews section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function ctaHtml(me) {\n    var state = me && me.state;\n    if (state === 'eligible') {\n      return '<div class=\"cbr-cta\"><p>You bought this. Rate it in a few taps and earn <b style=\"color:var(--cbr-gold)\">' + fmt(me.points || 500) +\n        ' points</b>.</p><button class=\"cbr-btn\" type=\"button\" data-cbr=\"open\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"' + STAR +\n        '\"/></svg>Rate this</button></div>';\n    }\n    if (state === 'already_reviewed') return '<div class=\"cbr-cta\"><p>Thanks, you\\'ve rated this one. Buy it again to rate your next order.</p></div>';\n    if (!me && window.CB_LOGGED_IN !== true) {\n      var back = encodeURIComponent(location.pathname + '#reviews');\n      return '<div class=\"cbr-cta\"><p>Bought this? Log in to rate it and earn points.</p><a class=\"cbr-btn ghost\" href=\"/account/login?return_url=' + back +\n        '\">Log in to review</a></div>';\n    }\n    return '';\n  }\n\n  function sectionHtml(data) {\n    var s = data.summary || { count: 0, categories: [], tags: [], distribution: {} };\n    var cta = ctaHtml(data.me);\n    var head = '<div class=\"cbr-head\"><div><p class=\"cbr-eyebrow\">Member ratings</p><h2 class=\"cbr-h\">What members think</h2></div>' + cta + '</div>';\n    if (!s.count) {\n      return head + '<div class=\"cbr-card cbr-empty\">' + stars(0, 22) +\n        '<p>No ratings yet. Every score here comes from a verified member who bought it.</p></div><div class=\"cbr-form card-slot\"></div>';\n    }\n    /* Redesign (Norton, 28 Oct): answer the unsure buyer in order: is it good\n       (score + share rated 4+), what is it like (three most-picked words, one\n       per kind), where does it shine (quiet category meters, best in gold).\n       The full star split and every category's words sit behind a toggle. */\n    var good = (s.tags || []).filter(function (t) { return t.kind !== 'meh'; });\n    /* Buyers choose on taste and effect first, so those lead; the third word is\n       the most-picked from any other group. One word per group. */\n    var LEAD = ['flavour', 'taste', 'effect', 'felt'];\n    var seen = {}, headline = [];\n    LEAD.concat(['*']).forEach(function (g) {\n      good.forEach(function (t) {\n        if (headline.length >= 3 || seen[t.group] || (g !== '*' ? t.group !== g : LEAD.indexOf(t.group) >= 0)) return;\n        seen[t.group] = 1; headline.push(t);\n      });\n    });\n    /* Two more (Norton, 28 Oct: fill the row): next most-picked, a new kind of word first, then any. */\n    [true, false].forEach(function (fresh) {\n      good.forEach(function (t) {\n        if (headline.length >= 5 || headline.indexOf(t) >= 0 || (fresh && seen[t.group])) return;\n        seen[t.group] = 1; headline.push(t);\n      });\n    });\n    var high = (s.distribution[5] || 0) + (s.distribution[4] || 0);\n    var pct = Math.round(high / s.count * 100);\n    var rated = s.categories.filter(function (c) { return c.average != null; });\n    var best = rated.slice().sort(function (a, b) { return b.average - a.average; })[0];\n\n    var hero = '<div class=\"cbr-hero\"><div class=\"cbr-score\"><span class=\"cbr-avg-n\" data-count=\"' + s.average + '\">' + one(s.average) + '</span>' +\n      '<div>' + stars(s.average, 20) + '<p class=\"cbr-based\">' + s.count + ' verified rating' + (s.count === 1 ? '' : 's') + '</p></div></div>' +\n      '<p class=\"cbr-rec\"><b>' + pct + '%</b> rate it 4 stars or higher</p></div>';\n\n    var says = headline.length ? '<div class=\"cbr-says\"><p class=\"cbr-says-l\">In members\u2019 words</p><div class=\"cbr-says-w\">' +\n      headline.map(function (t) { return '<span class=\"cbr-big\">' + esc(t.label) + '</span>'; }).join('') + '</div></div>' : '';\n\n    var meters = '<ul class=\"cbr-meters\">' + rated.map(function (c) {\n      return '<li' + (best && c.key === best.key ? ' class=\"best\" title=\"Highest-rated\"' : '') + '><span>' + esc(c.label) + '</span><i><b data-w=\"' +\n        (c.average / 5 * 100) + '\"></b></i><em>' + one(c.average) + '</em></li>';\n    }).join('') + '</ul>';\n\n    var bars = '';\n    for (var n = 5; n >= 1; n--) {\n      var c = s.distribution[n] || 0;\n      bars += '<div class=\"cbr-bar\"><span>' + n + '\u2605</span><i><b data-w=\"' + (c / s.count * 100) + '\"></b></i><em>' + c + '</em></div>';\n    }\n    var groupLabel = {};\n    ((data.form && data.form.groups) || []).forEach(function (g) { groupLabel[g.key] = g.label; });\n    var order = ((data.form && data.form.groups) || []).map(function (g) { return g.key; });\n    var lines = order.map(function (key) {\n      var w = good.filter(function (t) { return t.group === key; }).slice(0, 4);\n      return w.length ? '<p><b>' + esc(groupLabel[key]) + '</b><span>' + w.map(function (t) { return esc(t.label); }).join(', ') + '</span></p>' : '';\n    }).join('');\n    var detail = '<details class=\"cbr-detail\"><summary>See the full breakdown</summary><div class=\"cbr-detail-in\">' +\n      '<div class=\"cbr-bars\">' + bars + '</div><div class=\"cbr-lines\">' + lines + '</div></div></details>';\n\n    var labelOf = {};\n    if (data.form) (data.form.groups || []).forEach(function (g) { g.tags.forEach(function (x) { if (!labelOf[x.key]) labelOf[x.key] = x.label; }); });\n    /* Three latest ratings only (Norton, 26 Oct). Three words each, friendly dates. */\n    var recent = (data.recent || []).slice(0, 3).map(function (r) {\n      var tags = (r.tags || []).filter(function (k) { return labelOf[k]; }).slice(0, 3).map(function (k) { return esc(labelOf[k]); }).join(' \u00B7 ');\n      return '<div class=\"cbr-item\"><div class=\"cbr-item-top\">' + stars(r.overall, 13) + '<small>' + ago(r.date) + '</small></div>' +\n        '<b>' + esc(r.name) + '</b> <span class=\"cbr-verified\">\u2713 Verified</span>' + (tags ? '<p>' + tags + '</p>' : '') + '</div>';\n    }).join('');\n\n    return head +\n      '<div class=\"cbr-card cbr-sum2\">' + hero + says + meters + detail + '</div>' +\n      '<div class=\"cbr-form card-slot\"></div>' +\n      (recent ? '<div class=\"cbr-list\">' + recent + '</div>' : '');\n  }\n\n  function ago(iso) {\n    var d = Math.floor((Date.now() - new Date(iso + 'T12:00:00')) / 864e5);\n    if (!(d >= 0)) return esc(iso);\n    if (d < 1) return 'Today';\n    if (d < 2) return 'Yesterday';\n    if (d < 14) return d + ' days ago';\n    if (d < 60) return Math.round(d / 7) + ' weeks ago';\n    return Math.round(d / 30) + ' months ago';\n  }\n\n  function animateIn(root) {\n    var bars = root.querySelectorAll('.cbr-bar b[data-w], .cbr-cat b[data-w], .cbr-meters b[data-w]');\n    var go = function () { bars.forEach(function (b) { b.style.transform = 'scaleX(' + (Number(b.getAttribute('data-w')) / 100) + ')'; }); countUp(root); };\n    if (REDUCED || !('IntersectionObserver' in window)) return go();\n    var io = new IntersectionObserver(function (es) {\n      if (es.some(function (e) { return e.isIntersecting; })) { io.disconnect(); go(); }\n    }, { threshold: 0.25 });\n    io.observe(root);\n  }\n  function countUp(root) {\n    var n = root.querySelector('.cbr-avg-n[data-count]');\n    if (!n || REDUCED) return;\n    var target = Number(n.getAttribute('data-count')), t0 = null;\n    function tick(t) {\n      if (!t0) t0 = t;\n      var p = Math.min(1, (t - t0) / 900), e = 1 - Math.pow(1 - p, 3);\n      n.textContent = one(target * e);\n      if (p < 1) requestAnimationFrame(tick);\n    }\n    requestAnimationFrame(tick);\n  }\n\n  /* \u2500\u2500 the form \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function formHtml(data) {\n    var f = data.form;\n    var byKey = {}, catKey = {};\n    (f.groups || []).forEach(function (g) { byKey[g.key] = g; });\n    f.categories.forEach(function (c) { catKey[c.key] = 1; });\n    var rows = f.categories.map(function (c) {\n      var btns = '';\n      for (var i = 1; i <= 5; i++) {\n        btns += '<button type=\"button\" role=\"radio\" aria-checked=\"false\" aria-label=\"' + i + ' star' + (i > 1 ? 's' : '') + '\" data-v=\"' + i + '\" tabindex=\"' +\n          (i === 1 ? '0' : '-1') + '\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"' + STAR + '\"/></svg></button>';\n      }\n      return '<div class=\"cbr-rate\" data-cat=\"' + esc(c.key) + '\"><label id=\"cbr-l-' + esc(c.key) + '\">' + esc(c.label) + '</label>' +\n        '<div class=\"cbr-pick\" role=\"radiogroup\" aria-labelledby=\"cbr-l-' + esc(c.key) + '\">' + btns + '</div><span class=\"cbr-word\"></span></div>' +\n        words(byKey[c.key], c.label);\n    }).join('');\n    /* Up to SHOW positive words per group (plus the could-be-better ones), the rest behind \"+N more\". */\n    function words(g, label) {\n      if (!g || !g.tags.length) return '';\n      var SHOW = 10;\n      var good = g.tags.filter(function (x) { return !x.meh; }), meh = g.tags.filter(function (x) { return x.meh; });\n      var list = good.concat(meh); /* could-be-better words always last */\n      return '<div class=\"cbr-words\" role=\"group\" aria-label=\"Words for ' + esc(label) + '\">' + list.map(function (x, i) {\n        return '<button type=\"button\" class=\"cbr-toggle' + (x.meh ? ' meh' : '') + (!x.meh && i >= SHOW ? ' cbr-wx' : '') + '\" aria-pressed=\"false\" data-tag=\"' + esc(x.key) + '\">' + esc(x.label) + '</button>';\n      }).join('') + (good.length > SHOW ? '<button type=\"button\" class=\"cbr-wmore\" data-cbr=\"morewords\">+' + (good.length - SHOW) + ' more</button>' : '') + '</div>';\n    }\n    var extras = (f.groups || []).filter(function (g) { return !catKey[g.key]; }).map(function (g) {\n      return '<div class=\"cbr-group\"><p class=\"cbr-sub\">' + esc(g.label) + '</p>' + words(g, g.label) + '</div>';\n    }).join('');\n    return '<div class=\"cbr-card\"><div class=\"cbr-form-head\"><div><h3>Rate ' + esc(data.title || 'this') + '</h3>' +\n      '<p>Tap the stars for each, then pick the words that fit. No writing needed.</p></div>' +\n      '<button type=\"button\" class=\"cbr-x\" data-cbr=\"close\" aria-label=\"Close\">\u00D7</button></div>' + rows +\n      extras +\n      '<div class=\"cbr-foot\"><p data-cbr=\"hint\">Rate all ' + f.categories.length + ' to submit \u00B7 pick up to ' + f.maxTags + ' words</p>' +\n      '<button class=\"cbr-btn\" type=\"button\" data-cbr=\"submit\" disabled>Submit \u00B7 earn ' + fmt((data.me && data.me.points) || 500) + ' points</button></div>' +\n      '<p class=\"cbr-err\" data-cbr=\"err\" hidden></p></div>';\n  }\n\n  function wireForm(slot, data, onDone) {\n    var ratings = {}, tags = [];\n    var cats = data.form.categories.map(function (c) { return c.key; });\n    var submitBtn = slot.querySelector('[data-cbr=\"submit\"]');\n    var hint = slot.querySelector('[data-cbr=\"hint\"]');\n    function refresh() {\n      var done = cats.filter(function (k) { return ratings[k]; }).length;\n      submitBtn.disabled = done < cats.length;\n      hint.textContent = done < cats.length\n        ? (cats.length - done) + ' to go \u00B7 pick up to ' + data.form.maxTags + ' words'\n        : tags.length + ' word' + (tags.length === 1 ? '' : 's') + ' picked \u00B7 ready to submit';\n      slot.querySelectorAll('.cbr-toggle').forEach(function (b) {\n        b.disabled = b.getAttribute('aria-pressed') !== 'true' && tags.length >= data.form.maxTags;\n      });\n    }\n    slot.querySelectorAll('.cbr-rate').forEach(function (row) {\n      var key = row.getAttribute('data-cat');\n      var btns = [].slice.call(row.querySelectorAll('button'));\n      var word = row.querySelector('.cbr-word');\n      function paint(n, cls) { btns.forEach(function (b, i) { b.classList.toggle(cls, i < n); }); }\n      function set(v, pop) {\n        ratings[key] = v;\n        paint(v, 'on');\n        btns.forEach(function (b, i) {\n          b.setAttribute('aria-checked', String(i + 1 === v));\n          b.tabIndex = i + 1 === v ? 0 : -1;\n          if (pop && i < v && !REDUCED) { b.classList.remove('pop'); void b.offsetWidth; b.classList.add('pop'); b.style.animationDelay = ''; b.querySelector('svg').style.animationDelay = (i * 40) + 'ms'; }\n        });\n        word.textContent = WORDS[v];\n        refresh();\n      }\n      btns.forEach(function (b, i) {\n        b.addEventListener('mouseenter', function () { row.querySelector('.cbr-pick').classList.add('hovering'); paint(i + 1, 'hov'); word.textContent = WORDS[i + 1]; });\n        b.addEventListener('click', function () { row.querySelector('.cbr-pick').classList.remove('hovering'); paint(0, 'hov'); set(i + 1, true); });\n        b.addEventListener('keydown', function (e) {\n          var cur = ratings[key] || 0, next = null;\n          if (e.key === 'ArrowRight' || e.key === 'ArrowUp') next = Math.min(5, cur + 1);\n          if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') next = Math.max(1, cur - 1 || 1);\n          if (next) { e.preventDefault(); set(next, false); btns[next - 1].focus(); }\n        });\n      });\n      row.querySelector('.cbr-pick').addEventListener('mouseleave', function () { this.classList.remove('hovering'); paint(0, 'hov'); word.textContent = WORDS[ratings[key] || 0]; });\n    });\n    slot.querySelectorAll('.cbr-toggle').forEach(function (b) {\n      b.addEventListener('click', function () {\n        var k = b.getAttribute('data-tag'), on = b.getAttribute('aria-pressed') === 'true';\n        if (!on && tags.length >= data.form.maxTags) return;\n        slot.querySelectorAll('.cbr-toggle[data-tag=\"' + k + '\"]').forEach(function (x) { x.setAttribute('aria-pressed', String(!on)); });\n        tags = on ? tags.filter(function (x) { return x !== k; }) : tags.concat(k);\n        refresh();\n      });\n    });\n    slot.querySelectorAll('[data-cbr=\"morewords\"]').forEach(function (m) {\n      m.addEventListener('click', function () { m.parentNode.classList.add('all'); m.remove(); });\n    });\n    slot.querySelector('[data-cbr=\"close\"]').addEventListener('click', function () { slot.hidden = true; });\n    submitBtn.addEventListener('click', function () {\n      var err = slot.querySelector('[data-cbr=\"err\"]');\n      err.hidden = true;\n      submitBtn.disabled = true;\n      submitBtn.textContent = 'Submitting\u2026';\n      (window.CB_REVIEWS_SUBMIT || submit)(handle(), ratings, tags).then(function (d) {\n        if (d && d.ok) return onDone(d);\n        submitBtn.disabled = false;\n        submitBtn.textContent = 'Try again';\n        err.hidden = false;\n        err.textContent = ({\n          already_reviewed: 'You\\'ve already rated this order.',\n          not_purchased: 'Only members who bought this can rate it.',\n          EXPIRED_TOKEN: 'Your session timed out. Refresh the page and try again.',\n        })[d && d.error] || 'Something went wrong. Please try again in a moment.';\n      });\n    });\n    refresh();\n  }\n\n  function doneHtml(d) {\n    var dots = '';\n    if (!REDUCED) for (var i = 0; i < 12; i++) {\n      var a = i / 12 * Math.PI * 2, r = 46 + (i % 3) * 14;\n      dots += '<i style=\"--x:' + Math.round(Math.cos(a) * r) + 'px;--y:' + Math.round(Math.sin(a) * r) + 'px;animation-delay:' + (i % 4) * 30 + 'ms\"></i>';\n    }\n    return '<div class=\"cbr-card cbr-done\"><span class=\"cbr-burst\">' + stars(d.overall, 30) + dots + '</span>' +\n      '<div class=\"cbr-plus\">+' + fmt(d.points) + ' points</div><p>Thanks for rating it. Your balance is now <b style=\"color:var(--cbr-ink)\">' +\n      fmt(d.balance) + ' points</b>.</p></div>';\n  }\n\n  /* \u2500\u2500 mount \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n  function mountPoint() {\n    var main = document.querySelector('[id^=\"MainProduct-\"]');\n    var section = main && main.closest('.shopify-section');\n    return section || document.querySelector('#MainContent > .shopify-section:last-child');\n  }\n\n  function render(data) {\n    var h = handle();\n    data.title = data.title || (document.querySelector('.product__title') || {}).textContent;\n    if (data.title) data.title = data.title.trim();\n    renderMini(data);\n    var root = document.getElementById('reviews');\n    if (!root) {\n      root = el('<section id=\"reviews\" class=\"cbr\" aria-label=\"Member ratings\"></section>');\n      var after = mountPoint();\n      if (!after) return;\n      after.insertAdjacentElement('afterend', root);\n    }\n    root.innerHTML = sectionHtml(data) + (data.demo ? '<p class=\"cbr-demo\">Preview with sample ratings, not real members. Submitting here is simulated and no points move.</p>' : '');\n    animateIn(root);\n    var slot = root.querySelector('.card-slot');\n    slot.hidden = true;\n    function open() {\n      if (!data.form || !data.me || data.me.state !== 'eligible') return false;\n      if (!slot.firstChild) {\n        slot.innerHTML = formHtml(data);\n        wireForm(slot, data, function (d) {\n          slot.innerHTML = doneHtml(d);\n          data.summary = d.summary;\n          data.me = { state: 'already_reviewed' };\n          setTimeout(function () {\n            var keep = slot.innerHTML;\n            render(data);\n            var s2 = document.querySelector('#reviews .card-slot');\n            s2.innerHTML = keep; s2.hidden = false;\n          }, REDUCED ? 0 : 1600);\n        });\n      }\n      slot.hidden = false;\n      var first = slot.querySelector('.cbr-pick button');\n      slot.scrollIntoView({ behavior: REDUCED ? 'auto' : 'smooth', block: 'start' });\n      if (first) setTimeout(function () { first.focus({ preventScroll: true }); }, REDUCED ? 0 : 450);\n      return true;\n    }\n    var chipBtn = root.querySelector('[data-cbr=\"chips\"]');\n    if (chipBtn) chipBtn.addEventListener('click', function () { chipBtn.parentNode.classList.add('cbr-showall'); chipBtn.remove(); });\n    var allBtn = root.querySelector('[data-cbr=\"all\"]');\n    if (allBtn) allBtn.addEventListener('click', function () { root.querySelector('.cbr-list').classList.add('cbr-showall'); allBtn.remove(); });\n    var openBtn = root.querySelector('[data-cbr=\"open\"]');\n    if (openBtn) openBtn.addEventListener('click', open);\n    if (location.hash === '#reviews') {\n      if (!open()) root.scrollIntoView({ behavior: 'auto', block: 'start' });\n    }\n    window.addEventListener('hashchange', function () { if (location.hash === '#reviews') open(); });\n  }\n\n  function boot() {\n    var h = handle();\n    if (!h) return;\n    var st = document.createElement('style');\n    st.id = 'cbr-css';\n    st.textContent = CSS;\n    document.head.appendChild(st);\n    if (window.CB_REVIEWS_FIXTURE) return render(window.CB_REVIEWS_FIXTURE);\n    /* Draft-theme demo: ?cb_reviews_demo=1 renders sample ratings and a fake\n       submit, so the section can be reviewed before the backend is live. It\n       never calls the loyalty API, so no points move. */\n    if (/[?&]cb_reviews_demo=1\\b/.test(location.search) && window.CB_REVIEWS_DEMO_URL && !/membership|gift-card|^\\d+$/.test(h)) {\n      return fetch(window.CB_REVIEWS_DEMO_URL).then(function (r) { return r.json(); }).then(function (all) {\n        /* one sample set per product family; the draft layout sets CB_PDP_TYPE */\n        var fx = all.families ? all.families[all.types[String(window.CB_PDP_TYPE || '').trim().toLowerCase()] || 'general'] : all;\n        fx.demo = true;\n        window.CB_REVIEWS_SUBMIT = function (h, ratings) {\n          var v = Object.keys(ratings).map(function (k) { return ratings[k]; });\n          var avg = v.reduce(function (a, b) { return a + b; }, 0) / v.length;\n          return new Promise(function (res) { setTimeout(function () { res({ ok: true, points: 500, balance: 2350, overall: avg, summary: fx.summary }); }, 400); });\n        };\n        render(fx);\n      }).catch(function () {});\n    }\n    mintSession().then(function () { return load(h); }).then(function (data) {\n      if (data && data.reviewable) render(data);\n    });\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);\n  else boot();\n})();\n"],
  "mappings": "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",
  "names": ["c", "h"]
}
