{"version":3,"file":"CarouselNav.CD68yHa2.mjs","names":["useRef"],"sources":["https:/framerusercontent.com/modules/mRUNmaTLMe2IqzvFtKeo/PxdRXTsBsQH5EN6LjZND/CarouselNav.js"],"sourcesContent":["// CarouselNav.tsx - one behaviour for every product and card carousel on the\n// site (2026-09-26, owner: \"match Vistaprint - dots under the carousel, arrows\n// on hover, on the edge of the cards, same arrow as the homepage hero card\").\n//\n// Apply as a code override on a Carousel instance:\n//   withProductRail - product rails (also shrinks the cards on phone so about\n//                     2.5 fit across, Vistaprint-style)\n//   withCardRail    - every other card carousel (stories, industries,\n//                     lifestyle, process, related)\n//\n// What it adds, on the published site and in Preview (overrides never run on\n// the canvas):\n// - Dots under the carousel, one per page of cards. The row is part of the\n//   server render (fixed 8px + 20px gap), so nothing jumps when it fills in.\n// - Previous / next arrows that fade in while the pointer is over the\n//   carousel. They sit ON the outer edges of the card row (centred on the\n//   first card's edge and the viewport's last edge), vertically centred on the\n//   card images, half overlapping the edge. Hidden where there is no hover\n//   (phones, tablets) - the dots stay. Each arrow disappears at its end.\n// - The arrow is the homepage hero card's (StoryCycle.tsx): a 40px white\n//   circle, the Blue bold Phosphor caret at 18px, the tucked shadow, and a 2px\n//   lift on hover over 300ms on the site's ease-out.\n// - Product rails on phone (a rail narrower than 640px - a container query on\n//   the carousel's own box, so the canvas Phone breakpoint shows it too): cards 140px wide with a square\n//   image, smaller type and 10px gaps. Desktop and tablet are untouched. The\n//   rules key off the layer names every product card template shares:\n//   \"Product card\" > \"Image\" + \"Info\" > \"Text\" > \"Title\" / \"Description\",\n//   and the \"From price\" code component.\n//\n// - Hover room: the carousel's scroller clips (overflow-x auto), so it gets\n//   8px top / 12px bottom padding inside the clip and a y -4 lift never cuts.\n// - Phone bleed (a column under 700px): the carousel box is widened to the\n//   section (the screen) and the scroller padded back to the page gutter, so\n//   the first card sits on the gutter, the rail scrolls edge to edge and the\n//   last card can scroll to the gutter. Measured, so the canvas matches.\n// - Story cards (Story Card \"Stacked\") are 272px on phone: about 1.3 across.\n//\n// attachRailNav(host, { scroller, dots }) is exported so a code component with\n// its own rail (BGRecentlyViewed) gets exactly the same arrows and dots.\n//\n// Polish 2 (2026-09-27): several CMS rails in one product carousel page as one\n// row of cards, and an empty CMS rail's slot is hidden (no stray gap).\n//\n// Mobile carousels full width (2026-09-28, owner: \"carousels clipped again on\n// mobile when they should span full width on scroll\"): the phone bleed now\n// - drops the carousel's OWN side padding (the Framer Carousel \"Padding\" sits on\n//   its <section>, 12-16px on Explore similar, /order Bestsellers and Customer\n//   Rail) - it clipped the cards 12-16px inside the screen edge;\n// - also bleeds a rail whose column is ALREADY the full screen (a section with\n//   0 side padding, e.g. Explore similar): it used to give up there, so the\n//   first card was not on the gutter. The gutter is then read off the heading\n//   above (else the 40px site gutter);\n// - reads the column's CONTENT box, so a rail sitting straight in a padded\n//   section (no inner container) bleeds too;\n// - is exported for rails that are not Framer Carousels: withBleedRail (a code\n//   override for a native horizontal stack that scrolls) and BGTemplatesRail\n//   (attachRailNav with nav: false - bleed only, no arrows or dots).\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";const BLUE=\"#304382\";const EASE=\"cubic-bezier(0, 0, 0.58, 1)\";const DOT_OFF=\"rgba(48, 67, 130, 0.2)\";const CARET={left:\"M168.49,199.51a12,12,0,0,1-17,17l-80-80a12,12,0,0,1,0-17l80-80a12,12,0,0,1,17,17L97,128Z\",right:\"M184.49,136.49l-80,80a12,12,0,0,1-17-17L159,128,87.51,56.49a12,12,0,1,1,17-17l80,80A12,12,0,0,1,184.49,136.49Z\"};export const RAIL_CSS=`\n.bgcn-dots{display:flex;justify-content:center;align-items:center;gap:8px;height:8px;margin-top:12px;width:100%}\n[data-bgcn] .framer--carousel{padding-top:8px!important;padding-bottom:12px!important}\n.framer--carousel[data-bgcn-end]::after{content:\"\";flex:0 0 var(--bgcn-end,0px);align-self:stretch}\n.bgcn-dot{flex:none;width:8px;height:8px;padding:0;border:0;border-radius:999px;background:${DOT_OFF};cursor:pointer;transition:width 300ms ${EASE},background-color 300ms ${EASE}}\n.bgcn-dot[aria-current=\"true\"]{width:20px;background:${BLUE}}\n.bgcn-dot:focus-visible,.bgcn-arrow:focus-visible{outline:2px solid ${BLUE};outline-offset:2px}\n.bgcn-arrow{position:absolute;z-index:5;width:40px;height:40px;padding:0;border:0;border-radius:999px;background:#FFFFFF;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 12px 20px -12px rgba(23,31,64,0.45);opacity:0;pointer-events:none;transition:opacity 300ms ${EASE},transform 300ms ${EASE}}\n.bgcn-arrow:hover{transform:translateY(-2px)}\n[data-bgcn-hover=\"1\"] > .bgcn-arrow:not([data-off=\"1\"]),.bgcn-arrow:focus-visible{opacity:1;pointer-events:auto}\n@media (hover: none){.bgcn-arrow{display:none!important}}\n@media (prefers-reduced-motion: reduce){.bgcn-arrow,.bgcn-dot{transition:none}}\ndiv:has(> [data-bgcn]){container-type:inline-size}\n[data-bgcn-flush]{padding-left:0!important;padding-right:0!important}\n[data-bgcn-bleed]{border-radius:0!important}\n[data-bgcn=\"product\"] .framer--carousel > li:not(:has(a, img)){display:none!important}\n@container (max-width: 640px){\n[data-bgcn=\"card\"] [data-framer-name=\"Stacked\"]{width:272px!important}\n[data-bgcn=\"product\"] .framer--carousel > li > div{gap:10px!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"]{width:140px!important;padding:6px 6px 12px!important;gap:8px!important;border-radius:16px!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] > [data-framer-name=\"Image\"]{width:100%!important;height:auto!important;aspect-ratio:1 / 1!important;border-radius:12px!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] > [data-framer-name=\"Image\"] > *{height:100%!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] [data-framer-name=\"Info\"]{padding:0 4px!important;gap:6px!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] [data-framer-name=\"Text\"]{gap:2px!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] [data-framer-name=\"Title\"] .framer-text{--framer-font-size:14px!important;--framer-line-height:1.25em!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] [data-framer-name=\"Description\"] .framer-text{--framer-font-size:12px!important;--framer-line-height:1.35em!important}\n[data-bgcn=\"product\"] [data-framer-name=\"Product card\"] [data-framer-name=\"From price\"] span{font-size:13px!important}\n}\n`;function arrowButton(dir){const b=document.createElement(\"button\");b.type=\"button\";b.className=\"bgcn-arrow\";b.setAttribute(\"aria-label\",dir===\"left\"?\"Previous\":\"Next\");b.innerHTML=`<svg width=\"18\" height=\"18\" viewBox=\"0 0 256 256\" aria-hidden=\"true\"><path fill=\"${BLUE}\" d=\"${CARET[dir]}\"/></svg>`;return b;}function findScroller(host){const ul=host.querySelector(\"ul.framer--carousel\");if(ul)return ul;const all=host.querySelectorAll(\"*\");for(const el of Array.from(all)){const ox=getComputedStyle(el).overflowX;if((ox===\"auto\"||ox===\"scroll\")&&el.scrollWidth>el.clientWidth+2)return el;}return null;}// The cards: a Framer CMS rail sits in ONE <li> (ul > li > rail > cards), a\n// static carousel has one <li> per card. Walk down single-child wrappers.\n// Polish 2 (2026-09-27): a product rail can hold SEVERAL CMS rails, one <li>\n// each (Explore similar: the same range first, then the rest of the category) -\n// every <li> whose rail holds product cards gives its cards, in order.\nfunction findItems(scroller){let el=scroller;while(el.children.length===1)el=el.children[0];const kids=Array.from(el.children).filter(c=>c.offsetWidth>0);if(el===scroller&&kids.length>1){const out=[];let multi=false;for(const li of kids){let r=li;while(r.children.length===1)r=r.children[0];const cards=Array.from(r.children).filter(c=>c.offsetWidth>0);if(cards.length&&cards.every(c=>c.getAttribute(\"data-framer-name\")===\"Product card\")){multi=true;out.push(...cards);}else if(r.getAttribute(\"data-framer-name\")===\"Product card\")out.push(r);else out.push(li);}if(multi)return out;}return kids;}// The visible card inside a carousel item: walk single-child wrappers (slot\n// padding, component containers) down to the first link or filled box.\nfunction cardOf(item){let el=item;for(let i=0;i<8;i++){const bg=getComputedStyle(el).backgroundColor;if(el.tagName===\"A\"||bg&&bg!==\"transparent\"&&!/rgba\\(0, 0, 0, 0\\)/.test(bg))return el;if(el.children.length!==1)break;el=el.children[0];}return item;}export function attachRailNav(host,opts={}){const scroller=opts.scroller||findScroller(host);if(!scroller)return()=>{};const nav=opts.nav!==false;const reduce=window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;if(nav&&getComputedStyle(host).position===\"static\")host.style.position=\"relative\";const left=arrowButton(\"left\");const right=arrowButton(\"right\");if(nav)host.append(left,right);const dotsEl=opts.dots||null;const bleedEl=opts.bleed===undefined?host:opts.bleed;let bleedKey=\"\";let padded=null;// the Framer Carousel's own <section> (its \"Padding\" control) - flushed on phone\nconst sec=scroller.parentElement&&bleedEl&&scroller.parentElement!==bleedEl&&bleedEl.contains(scroller.parentElement)?scroller.parentElement:null;// Phone: the rail runs past the page padding to the screen edge. The first\n// card sits on the gutter at rest and the last card can scroll to it.\nconst reset=()=>{if(!bleedEl)return;bleedEl.style.removeProperty(\"width\");bleedEl.style.removeProperty(\"max-width\");bleedEl.style.removeProperty(\"min-width\");bleedEl.style.removeProperty(\"transform\");scroller.style.removeProperty(\"padding-left\");scroller.style.removeProperty(\"padding-right\");scroller.style.removeProperty(\"--bgcn-end\");scroller.style.removeProperty(\"scroll-padding-left\");scroller.removeAttribute(\"data-bgcn-end\");scroller.removeAttribute(\"data-bgcn-bleed\");if(sec)sec.removeAttribute(\"data-bgcn-flush\");if(padded)padded.style.removeProperty(\"padding-right\");padded=null;};const applyBleed=()=>{if(!bleedEl)return;// the column: the first real box above (Framer's breakpoint wrappers are display: contents)\nlet col=bleedEl.parentElement;while(col&&getComputedStyle(col).display===\"contents\")col=col.parentElement;if(!col)return;const ccs=getComputedStyle(col);const cPadL=parseFloat(ccs.paddingLeft)||0;const cPadR=parseFloat(ccs.paddingRight)||0;// the column is the parent's CONTENT box (a rail can sit straight in a padded section)\nconst colW=col.clientWidth-cPadL-cPadR;// the strip the rail runs across: the nearest box at least a gutter wider\n// than the column (the section, the page). Nothing like that (the column\n// already spans the page, or only the canvas around it is wider): the\n// column's own box is the strip.\nlet scr=col;while(scr&&scr.clientWidth<colW+40)scr=scr.parentElement;if(!scr||scr.clientWidth>colW+240)scr=col;const key=colW+\":\"+scr.clientWidth;if(key===bleedKey)return;bleedKey=key;const atRest=scroller.scrollLeft<4;reset();if(colW>=700||colW<=0)return;const colRect=col.getBoundingClientRect();const scale=colRect.width/(col.offsetWidth||1)||1;const sRect=scr.getBoundingClientRect();const W=scr.clientWidth;if(sec)sec.setAttribute(\"data-bgcn-flush\",\"\");scroller.setAttribute(\"data-bgcn-bleed\",\"\");bleedEl.style.setProperty(\"width\",`${W}px`,\"important\");bleedEl.style.setProperty(\"max-width\",\"none\",\"important\");bleedEl.style.setProperty(\"min-width\",\"0px\",\"important\");const hRect=bleedEl.getBoundingClientRect();const dx=(sRect.left-hRect.left)/scale;if(Math.abs(dx)>.5)bleedEl.style.setProperty(\"transform\",`translateX(${dx}px)`,\"important\");// the gutter: where the column's content starts; a column that is the\n// whole strip takes the heading's left edge above (else the 40px gutter)\nlet gutter=Math.max(0,(colRect.left+(col.clientLeft+cPadL)*scale-sRect.left)/scale);if(gutter<8){gutter=40;let a=col;for(let i=0;i<6&&a;i++){const ts=Array.from(a.querySelectorAll(\"h1,h2,h3,h4,h5,h6,p\")).filter(t=>!scroller.contains(t)&&t.getBoundingClientRect().width>0);if(ts.length){const g=(Math.min(...ts.map(t=>t.getBoundingClientRect().left))-sRect.left)/scale;if(g>=8&&g<=80){gutter=g;break;}}if(a===scr&&i>0)break;a=a.parentElement;}}const items=findItems(scroller);if(!items.length)return;const scRect=scroller.getBoundingClientRect();const firstOff=(cardOf(items[0]).getBoundingClientRect().left-scRect.left)/scale+scroller.scrollLeft;const lastRight=(cardOf(items[items.length-1]).getBoundingClientRect().right-scRect.left)/scale+scroller.scrollLeft;const cs=getComputedStyle(scroller);const padL=parseFloat(cs.paddingLeft)||0;const padR=parseFloat(cs.paddingRight)||0;const trailing=scroller.scrollWidth-lastRight-padR;const pl=Math.max(0,Math.round(gutter-(firstOff-padL)));const pr=Math.max(0,Math.round(gutter-trailing));scroller.style.setProperty(\"padding-left\",`${pl}px`,\"important\");// a flex scroller ignores its end padding for scrolling, so the\n// Framer carousel gets an end spacer; a grid rail takes the padding\nconst holder=items[items.length-1].parentElement;if(holder&&holder!==scroller&&holder.tagName!==\"LI\"){// a CMS rail sits in ONE snap slide, and the browser snaps that\n// slide's end to the edge - so the rail itself carries the room\nconst base=parseFloat(getComputedStyle(holder).paddingRight)||0;holder.style.setProperty(\"padding-right\",`${base+pr}px`,\"important\");padded=holder;}else if(scroller.classList.contains(\"framer--carousel\")){scroller.setAttribute(\"data-bgcn-end\",\"\");scroller.style.setProperty(\"--bgcn-end\",`${pr}px`);}else scroller.style.setProperty(\"padding-right\",`${pr}px`,\"important\");scroller.style.setProperty(\"scroll-padding-left\",`${pl}px`,\"important\");if(atRest)scroller.scrollLeft=0;};let pageW=1;let pages=1;let raf=0;const metrics=()=>{const items=findItems(scroller);const max=Math.max(0,scroller.scrollWidth-scroller.clientWidth);const first=items[0];const sRect=scroller.getBoundingClientRect();let inset=0;if(first)inset=Math.min(32,Math.max(0,first.getBoundingClientRect().left-sRect.left+scroller.scrollLeft));const stride=items.length>1?Math.max(1,Math.round(items[1].getBoundingClientRect().left-items[0].getBoundingClientRect().left)):scroller.clientWidth;const per=Math.max(1,Math.floor((scroller.clientWidth-inset)/stride));return{items,max,inset,stride,per,sRect};};const update=()=>{raf=0;applyBleed();if(!nav)return;const m=metrics();pageW=Math.max(1,m.per*m.stride);pages=m.max<=4?1:Math.ceil(m.max/pageW-.02)+1;const at=scroller.scrollLeft;const active=at>=m.max-4?pages-1:Math.min(pages-1,Math.round(at/pageW));// arrows: on the card row's outer edges, centred on the images\nconst hRect=host.getBoundingClientRect();const visible=m.items.find(it=>it.getBoundingClientRect().right>m.sRect.left+m.inset+1)||m.items[0];let cy=m.sRect.top+m.sRect.height/2;if(visible){const img=visible.querySelector(\"img\");const box=(img&&img.getBoundingClientRect().height>0?img:visible).getBoundingClientRect();cy=box.top+box.height/2;}const top=cy-hRect.top-20;left.style.top=right.style.top=`${Math.round(top)}px`;left.style.left=`${Math.round(m.sRect.left-hRect.left+m.inset-20)}px`;right.style.left=`${Math.round(m.sRect.right-hRect.left-m.inset-20)}px`;left.dataset.off=at>4?\"0\":\"1\";right.dataset.off=at<m.max-4?\"0\":\"1\";if(dotsEl){if(dotsEl.childElementCount!==pages){dotsEl.innerHTML=\"\";for(let i=0;i<pages;i++){const d=document.createElement(\"button\");d.type=\"button\";d.className=\"bgcn-dot\";d.setAttribute(\"aria-label\",`Page ${i+1} of ${pages}`);d.onclick=e=>{e.preventDefault();go(i*pageW);};dotsEl.appendChild(d);}}Array.from(dotsEl.children).forEach((d,i)=>d.setAttribute(\"aria-current\",i===active?\"true\":\"false\"));dotsEl.style.visibility=pages>1?\"visible\":\"hidden\";}};const schedule=()=>{if(!raf)raf=requestAnimationFrame(update);};const go=x=>{const max=Math.max(0,scroller.scrollWidth-scroller.clientWidth);scroller.scrollTo({left:Math.max(0,Math.min(max,x)),behavior:reduce?\"auto\":\"smooth\"});};left.onclick=e=>{e.preventDefault();e.stopPropagation();go(scroller.scrollLeft-pageW);};right.onclick=e=>{e.preventDefault();e.stopPropagation();go(scroller.scrollLeft+pageW);};const enter=()=>{host.dataset.bgcnHover=\"1\";schedule();};const leave=()=>{host.dataset.bgcnHover=\"0\";};if(nav){host.addEventListener(\"mouseenter\",enter);host.addEventListener(\"mouseleave\",leave);}scroller.addEventListener(\"scroll\",schedule,{passive:true});(nav?host:scroller).addEventListener(\"load\",schedule,true);window.addEventListener(\"resize\",schedule);const ro=typeof ResizeObserver!==\"undefined\"?new ResizeObserver(schedule):null;ro?.observe(scroller);update();// images and CMS items can land a beat later\nconst t1=window.setTimeout(()=>{bleedKey=\"\";schedule();},400);const t2=window.setTimeout(()=>{bleedKey=\"\";schedule();},1500);return()=>{host.removeEventListener(\"mouseenter\",enter);host.removeEventListener(\"mouseleave\",leave);scroller.removeEventListener(\"scroll\",schedule);(nav?host:scroller).removeEventListener(\"load\",schedule,true);window.removeEventListener(\"resize\",schedule);ro?.disconnect();window.clearTimeout(t1);window.clearTimeout(t2);if(raf)cancelAnimationFrame(raf);left.remove();right.remove();reset();if(dotsEl)dotsEl.innerHTML=\"\";};}function railHOC(Component,kind){return function RailNav(props){const wrap=useRef(null);const dots=useRef(null);useEffect(()=>{const host=wrap.current?.parentElement;if(!host)return;let detach=()=>{};// the carousel mounts its list on the first client render\nconst t=window.setTimeout(()=>{detach=attachRailNav(host,{dots:dots.current});},60);return()=>{window.clearTimeout(t);detach();};},[]);return /*#__PURE__*/_jsxs(\"div\",{ref:wrap,\"data-bgcn\":kind,style:{display:\"contents\"},children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:RAIL_CSS}}),/*#__PURE__*/_jsx(Component,{...props}),/*#__PURE__*/_jsx(\"div\",{ref:dots,className:\"bgcn-dots\",role:\"group\",\"aria-label\":\"Carousel pages\",style:{visibility:\"hidden\"}})]});};}// A native horizontal stack that scrolls (customer story rails, platform\n// feature rails): on phone it runs to the screen edges with its first card on\n// the gutter, exactly like the carousels. No arrows or dots; desktop untouched.\nexport function withBleedRail(Component){return function BleedRail(props){const wrap=useRef(null);useEffect(()=>{// the rail itself: the first real box inside (skip display: contents wrappers)\nlet el=wrap.current?.firstElementChild;while(el&&getComputedStyle(el).display===\"contents\")el=el.firstElementChild;if(!el)return;let detach=()=>{};const t=window.setTimeout(()=>{detach=attachRailNav(el,{scroller:el,bleed:el,dots:null,nav:false});},60);return()=>{window.clearTimeout(t);detach();};},[]);return /*#__PURE__*/_jsx(\"div\",{ref:wrap,style:{display:\"contents\"},children:/*#__PURE__*/_jsx(Component,{...props})});};}export function withProductRail(Component){return railHOC(Component,\"product\");}export function withCardRail(Component){return railHOC(Component,\"card\");}\nexport const __FramerMetadata__ = {\"exports\":{\"RAIL_CSS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withProductRail\":{\"type\":\"reactHoc\",\"name\":\"withProductRail\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withCardRail\":{\"type\":\"reactHoc\",\"name\":\"withCardRail\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"withBleedRail\":{\"type\":\"reactHoc\",\"name\":\"withBleedRail\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"attachRailNav\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CarouselNav.map"],"mappings":"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"}