{"product_id":"nativity-scene-heat-sensitive-mug-christian-christmas-gift","title":"🔥 Last Day 50% OFF-✝️✨Nativity Scene Heat-Sensitive Mug | Christian Christmas Gift🎁","description":"\u003cbody\u003e \u003cstyle\u003e@layer sandbox-defaults{html,body,#root{margin:0;padding:0}}\u003c\/style\u003e   \u003cmeta charset=\"utf-8\"\u003e   \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e   \u003cstyle\u003ebody{margin:0}\u003c\/style\u003e \u003cstyle\u003ehtml, body, #root {       margin-top: 0; margin-bottom: 0; padding-top: 0; padding-bottom: 0;            } html,body,#root{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Helvetica Neue,Arial,sans-serif!important}button,input,textarea,select{font-family:inherit}html{background-color:transparent}html.chatgptOled.dark,html.mobileSkybridge.dark{background-color:#000}@supports (font: -apple-system-body){html.mobileSkybridge{font:-apple-system-body}}html.desktopSkybridge.dark{background-color:#1e1e1e}html.transparentSkybridgeBackground,html.transparentSkybridgeBackground.dark{background-color:transparent}html.androidSkybridge,html.androidSkybridge body,html.androidSkybridge *{-webkit-tap-highlight-color:rgba(255,255,255,0)}html.androidSkybridge *::selection,html.androidSkybridge *::-moz-selection{background:#fff0;color:inherit}\u003c\/style\u003e \u003c!-- Shopify Custom Liquid full replacement. v3 fixes parent opacity and reveal animations. --\u003e \u003cstyle\u003e \/* Shopify ancestor opacity \/ reveal animation reset — scoped only to blocks containing this page *\/ :is(.shopify-section,.shopify-section-group-main,.product__description,.product__info-container,.product__info-wrapper,.product__accordion,.accordion__content,.rte,.scroll-trigger,.animate--slide-in,.collapsible-content__wrapper,.collapsible-content__inner,.section-template--product,.product):has(.nativity-page) {  opacity:1!important; filter:none!important; -webkit-filter:none!important;  backdrop-filter:none!important; -webkit-backdrop-filter:none!important;  mix-blend-mode:normal!important; animation:none!important;  animation-delay:0s!important; transition: none!important;  visibility:visible!important; } :is(.scroll-trigger,.animate--slide-in,.scroll-trigger--offscreen):has(.nativity-page){  opacity:1!important; transform:none!important; animation:none!important; } .nativity-page,.nativity-page :is(section,div,p,h2,h3,span,img,figure,a,summary,details){  opacity:1!important; filter:none!important; -webkit-filter:none!important;  backdrop-filter:none!important; -webkit-backdrop-filter:none!important;  mix-blend-mode:normal!important; animation:none!important; } .nativity-page::before,.nativity-page::after{content:none!important} .nativity-page {color:#111827!important;background:#fff!important} .nativity-page p {color:#111827!important} .nativity-page h2,.nativity-page h3{color:#0B2038!important} .nativity-page .hero h2,.nativity-page .dark h2,.nativity-page .dark h3,.nativity-page .footer h2{color:#fff!important} .nativity-page .hero p,.nativity-page .dark p,.nativity-page .footer p{color:#fff!important} \u003c\/style\u003e  \u003cstyle\u003e .nativity-page{--navy:#0B2038;--gold:#BD872C;--cream:#FFFFFF;--ink:#15202B;max-width:1100px;margin:0 auto;padding:0;background:#fff!important;color:var(--ink)!important;font-family:Arial,Helvetica,sans-serif!important;line-height:1.65;opacity:1!important;filter:none!important;backdrop-filter:none!important;mix-blend-mode:normal!important;isolation:isolate} .nativity-page,.nativity-page *{box-sizing:border-box;text-shadow:none!important;backdrop-filter:none!important;filter:none!important;mix-blend-mode:normal!important} .nativity-page img{display:block;width:100%;height:auto;max-width:100%;border-radius:10px;opacity:1!important;filter:none!important;object-fit:contain} .nativity-page h2,.nativity-page h3{font-family:Georgia,'Times New Roman',serif!important;color:#0B2038!important;opacity:1!important;line-height:1.2;margin:0 0 18px;font-weight:600} .nativity-page h2{font-size:clamp(27px,3.7vw,43px)}.nativity-page h3{font-size:21px} .nativity-page p{font-family:Arial,Helvetica,sans-serif!important;font-size:16px;line-height:1.75;color:#18212B!important;opacity:1!important;margin:0 0 18px} .nativity-page .eyebrow{font:700 12px Arial,sans-serif!important;letter-spacing:2px;text-transform:uppercase;color:#936518!important;margin-bottom:12px} .nativity-page .section{padding:54px 30px;background:#fff!important}.nativity-page .center{text-align:center} .nativity-page .hero,.nativity-page .dark,.nativity-page .footer{background:#102B49!important;color:#fff!important;border-radius:12px} .nativity-page .hero{text-align:center;padding:52px 30px 36px} .nativity-page .hero h2{font-size:clamp(32px,5vw,56px);max-width:770px;margin:0 auto 18px} .nativity-page .hero p{max-width:750px;margin:0 auto 22px} .nativity-page .hero h2,.nativity-page .dark h2,.nativity-page .dark h3,.nativity-page .footer h2{color:#fff!important} .nativity-page .hero p,.nativity-page .dark p,.nativity-page .footer p{color:#fff!important} .nativity-page .hero .eyebrow,.nativity-page .dark .eyebrow,.nativity-page .footer .eyebrow{color:#FFD78F!important} .nativity-page .hero img{max-width:780px;margin:22px auto 0;border:2px solid #D6A64F} .nativity-page .line{height:2px;width:150px;background:#D6A64F;margin:24px auto} .nativity-page .light{background:#FFFDF8!important;border-radius:12px} .nativity-page .split{display:grid;grid-template-columns:1fr;gap:26px;align-items:center} .nativity-page .features,.nativity-page .steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-top:28px} .nativity-page .feature{background:#fff!important;border:1px solid #D7D9DB;border-radius:10px;padding:25px 16px;text-align:center} .nativity-page .feature .symbol{font-size:30px;margin-bottom:12px;color:#805410} .nativity-page .feature h3{font-size:19px;margin-bottom:9px}.nativity-page .feature p{font-size:15px;margin:0} .nativity-page .before-after{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:25px} .nativity-page .panel{background:#fff!important;border:1px solid #CFD4D9;border-radius:10px;padding:12px} .nativity-page .panel span{display:block;text-align:center;font:700 13px Arial,sans-serif!important;color:#102B49!important;letter-spacing:1px;padding:10px 0 4px} .nativity-page .quote{font-family:Georgia,serif!important;font-size:clamp(23px,3.5vw,37px)!important;line-height:1.4;color:#102B49!important;max-width:750px;margin:0 auto 22px} .nativity-page .steps{margin-top:30px}.nativity-page .step{padding:15px;border-top:3px solid #BD872C}.nativity-page .step b{font-size:26px;color:#936518}.nativity-page .step h3{margin:10px 0}.nativity-page .faq details{border-bottom:1px solid #C9CED3;padding:17px 0}.nativity-page .faq summary{cursor:pointer;font-weight:700;color:#102B49!important}.nativity-page .faq p{margin:12px 0 0} .nativity-page .footer{padding:48px 30px;text-align:center}.nativity-page .footer p{max-width:650px;margin:0 auto 22px} .nativity-page .small{font-size:13px!important;color:#374151!important;opacity:1!important} .nativity-page a.cta{display:inline-block;text-decoration:none;background:#F2C979;color:#0B2038!important;padding:14px 25px;border-radius:6px;font:700 13px Arial,sans-serif;letter-spacing:1px} @media(max-width:700px){.nativity-page .section{padding:36px 16px}.nativity-page .hero{padding:35px 17px 25px}.nativity-page .features,.nativity-page .steps{grid-template-columns:1fr}.nativity-page .before-after{gap:10px}.nativity-page .panel{padding:6px}} \u003c\/style\u003e \u003cdiv class=\"nativity-page\"\u003e \u003csection class=\"hero\"\u003e \u003cdiv class=\"eyebrow\"\u003eFaith • Wonder • Christmas\u003c\/div\u003e \u003ch2\u003eThe Greatest Gift Was Born in a Manger\u003c\/h2\u003e \u003cp\u003eA meaningful Christmas mug inspired by the night that changed everything. Add a warm drink and watch a beautiful Nativity illustration emerge.\u003c\/p\u003e \u003cp\u003e\u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/11_d5f052f8-ae70-42a4-8b9d-91579871249f.png?v=1792643074\"\u003e\u003c\/p\u003e \u003cdiv class=\"line\"\u003e\u003cbr\u003e\u003c\/div\u003e \u003cp style=\"margin-bottom: 0;\"\u003eA little moment of wonder in every warm cup.\u003c\/p\u003e \u003c\/section\u003e \u003csection class=\"section light center\"\u003e \u003cdiv class=\"eyebrow\"\u003eA Christmas Story Revealed\u003c\/div\u003e \u003ch2\u003eFrom a Quiet Night to a Beautiful Miracle\u003c\/h2\u003e \u003cp\u003eAt first, a deep midnight-blue sky and the Star of Bethlehem create a peaceful winter-night scene. As the mug warms, the Nativity artwork is revealed—Mary, Joseph, and baby Jesus gathered in a humble manger beneath a radiant star.\u003c\/p\u003e \u003cdiv class=\"before-after\"\u003e \u003cdiv class=\"panel\"\u003e \u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/22_5e9f8599-cec4-4cf2-b71c-ef355e07f79d.png?v=1792643074\"\u003e\u003cspan\u003eBEFORE · COLD\u003c\/span\u003e \u003c\/div\u003e \u003cdiv class=\"panel\"\u003e \u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/3_e605bdaa-dedd-4457-a8a9-7a5fd241c405.png?v=1792643074\"\u003e\u003cspan\u003eAFTER · WARM\u003c\/span\u003e \u003c\/div\u003e \u003c\/div\u003e \u003cp class=\"small\" style=\"margin-top: 15px;\"\u003eColor reveal is temperature-activated. Actual colors and transition may vary with drink temperature and product finish.\u003c\/p\u003e \u003c\/section\u003e \u003csection class=\"section\"\u003e \u003cdiv class=\"split\"\u003e \u003cdiv\u003e \u003cdiv class=\"eyebrow\"\u003eDesigned with Meaning\u003c\/div\u003e \u003ch2\u003eEvery Detail Tells the Story\u003c\/h2\u003e \u003cp\u003eDeep midnight blue recalls the stillness of Bethlehem. Golden stars frame the scene, while the Nativity illustration brings the warmth and hope of Christmas to your daily coffee or tea ritual.\u003c\/p\u003e \u003cp\u003eA smooth, comfortable curved handle keeps the silhouette elegant—without raised figures or sculpted decorations on the handle.\u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/4_e6331507-0a2a-4720-8cef-616f911450ca.png?v=1792643075\"\u003e\u003c\/p\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection class=\"section light center\"\u003e \u003cdiv class=\"eyebrow\"\u003eWhy It Feels Special\u003c\/div\u003e \u003ch2\u003eMore Than an Ordinary Christmas Mug\u003c\/h2\u003e \u003cdiv class=\"features\"\u003e \u003cdiv class=\"feature\"\u003e \u003cdiv class=\"symbol\"\u003e✦\u003c\/div\u003e \u003ch3\u003eA Warm Reveal\u003c\/h3\u003e \u003cp\u003eThe design changes as the surface warms, turning a familiar drink into a small seasonal surprise.\u003c\/p\u003e \u003c\/div\u003e \u003cdiv class=\"feature\"\u003e \u003cdiv class=\"symbol\"\u003e♡\u003c\/div\u003e \u003ch3\u003eA Message of Faith\u003c\/h3\u003e \u003cp\u003eInspired by the Nativity, the artwork offers a simple reminder of the meaning of Christmas.\u003c\/p\u003e \u003c\/div\u003e \u003cdiv class=\"feature\"\u003e \u003cdiv class=\"symbol\"\u003e🎁\u003c\/div\u003e \u003ch3\u003eA Thoughtful Gift\u003c\/h3\u003e \u003cp\u003eA seasonal gift idea for family, friends, and loved ones who cherish Christian Christmas traditions.\u003c\/p\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection class=\"section dark\"\u003e \u003cdiv class=\"split\"\u003e \u003cdiv\u003e \u003cdiv class=\"eyebrow\" style=\"color: #dfbd82;\"\u003eA Meaningful Christmas Moment\u003c\/div\u003e \u003ch2\u003eMake the Season Feel a Little Closer\u003c\/h2\u003e \u003cp\u003ePicture a quiet Christmas morning: a favorite warm drink, soft holiday lights, and a story of hope revealed in your hands.\u003c\/p\u003e \u003cp\u003eWhether enjoyed at home or given as a heartfelt present, this mug makes room for reflection, comfort, and connection.\u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/6_1.png?v=1792643075\"\u003e\u003c\/p\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection class=\"section center\"\u003e \u003cdiv class=\"eyebrow\"\u003eThe Simple Magic\u003c\/div\u003e \u003ch2\u003ePour. Reveal. Remember.\u003c\/h2\u003e \u003cp\u003e\u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/7_2.png?v=1792651978\"\u003e\u003c\/p\u003e \u003cdiv class=\"steps\"\u003e \u003cdiv class=\"step\"\u003e \u003cb\u003e01\u003c\/b\u003e \u003ch3\u003eStart with the Night Sky\u003c\/h3\u003e \u003cp\u003eSee the peaceful Bethlehem-inspired design while the mug is cool.\u003c\/p\u003e \u003c\/div\u003e \u003cdiv class=\"step\"\u003e \u003cb\u003e02\u003c\/b\u003e \u003ch3\u003eAdd Your Warm Drink\u003c\/h3\u003e \u003cp\u003eAs the exterior warms, the concealed illustration begins to appear.\u003c\/p\u003e \u003c\/div\u003e \u003cdiv class=\"step\"\u003e \u003cb\u003e03\u003c\/b\u003e \u003ch3\u003eEnjoy the Reveal\u003c\/h3\u003e \u003cp\u003eDiscover the full Nativity scene while you enjoy your favorite warm beverage.\u003c\/p\u003e \u003c\/div\u003e \u003c\/div\u003e \u003c\/section\u003e \u003csection class=\"section light center\"\u003e \u003cp class=\"quote\"\u003e“The Greatest Gift Was Born in a Manger.”\u003c\/p\u003e \u003cdiv class=\"line\"\u003e\u003cbr\u003e\u003c\/div\u003e \u003cp\u003eA Christmas reminder made for the moments that matter.\u003c\/p\u003e \u003cp\u003e\u003cimg alt=\"Jesus Nativity color changing mug product photography\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/1016\/7592\/5821\/files\/6_3.png?v=1792643075\"\u003e\u003c\/p\u003e \u003c\/section\u003e \u003csection class=\"section faq\"\u003e \u003cdiv class=\"eyebrow\"\u003eHelpful Details\u003c\/div\u003e \u003ch2\u003eFrequently Asked Questions\u003c\/h2\u003e \u003cdetails\u003e \u003csummary\u003eHow does the color-changing design work?\u003c\/summary\u003e \u003cp\u003eThe mug is designed with a temperature-responsive outer finish. When its surface warms, the hidden Nativity artwork becomes visible. The design returns toward its cooler appearance as the mug cools.\u003c\/p\u003e \u003c\/details\u003e \u003cdetails\u003e \u003csummary\u003eIs the handle decorated with raised figures?\u003c\/summary\u003e \u003cp\u003eNo. This design features a smooth, curved handle without decorative figurines or relief sculptures.\u003c\/p\u003e \u003c\/details\u003e \u003cdetails\u003e \u003csummary\u003eWho would enjoy receiving this mug?\u003c\/summary\u003e \u003cp\u003eIt is a thoughtful seasonal gift idea for people who enjoy Christian Christmas traditions, Nativity artwork, and meaningful everyday keepsakes.\u003c\/p\u003e \u003c\/details\u003e \u003cdetails\u003e \u003csummary\u003eWhat are the capacity and care instructions?\u003c\/summary\u003e \u003cp\u003ePlease refer to the confirmed specifications and care instructions listed in the product options and packaging before use. Do not assume dishwasher or microwave compatibility unless explicitly confirmed.\u003c\/p\u003e \u003c\/details\u003e \u003c\/section\u003e \u003csection class=\"footer\"\u003e \u003cdiv class=\"eyebrow\" style=\"color: #dfbd82;\"\u003eThe Greatest Gift Collection\u003c\/div\u003e \u003ch2\u003eA Christmas Story to Hold Close\u003c\/h2\u003e \u003cp\u003eCelebrate the wonder of the Nativity with a mug that brings a beloved Christmas scene into an everyday moment.\u003c\/p\u003e \u003ca class=\"cta\" href=\"#top\"\u003eChoose Your Mug\u003c\/a\u003e\u003c\/section\u003e \u003c\/div\u003e \u003cscript\u003eglobalThis.__codexVisualizationInitialGlobals={'statePersistence':'none','stateModelContext':'none','visualizationStyleVariables':{'--accent':'rgb(232, 243, 254)','--accent-foreground':'rgb(44, 103, 197)','--background':'rgb(252, 252, 252)','--border':'rgba(0, 0, 0, 0.1)','--border-strong':'rgba(0, 0, 0, 0.15)','--card':'color-mix(in oklab, rgb(13, 13, 13) 5%, transparent)','--card-foreground':'rgb(13, 13, 13)','--corner-shape':'round','--control-spacing':'12px','--cursor-interaction':'pointer','--destructive':'rgb(226, 85, 7)','--font-mono':'ui-monospace, SFMono-Regular, \\'SF Mono\\', menlo, consolas, \\'Liberation Mono\\', monospace','--font-sans':'-apple-system-body, ui-sans-serif, -apple-system, system-ui, \\'Segoe UI\\', Helvetica, \\'Apple Color Emoji\\', Arial, sans-serif, \\'Segoe UI Emoji\\', \\'Segoe UI Symbol\\'','--font-size-base':'16px','--font-weight-normal':'400','--foreground':'rgb(13, 13, 13)','--input':'rgba(0, 0, 0, 0.15)','--muted':'color-mix(in srgb, rgb(13, 13, 13) 10%, transparent)','--muted-foreground':'rgb(143, 143, 143)','--popover':'rgb(255, 255, 255)','--popover-foreground':'rgb(13, 13, 13)','--primary':'rgb(44, 103, 197)','--primary-foreground':'rgb(255, 255, 255)','--radius':'8px','--radius-2xl':'16px','--radius-lg':'8px','--radius-md':'6px','--radius-sm':'4px','--ring':'rgb(58, 131, 247)','--secondary':'rgb(243, 243, 243)','--secondary-foreground':'rgb(13, 13, 13)','--blue':'rgb(58, 131, 247)','--orange':'rgb(226, 85, 7)','--green':'rgb(0, 162, 64)','--red':'rgb(224, 46, 42)','--purple':'rgb(146, 79, 247)','--yellow':'rgb(255, 195, 0)','--visualize-paint-gutter':'0px','--viz-series-1':'rgb(44, 103, 197)','--viz-series-2':'#f3c944','--viz-series-3':'#ea77b0','--viz-series-4':'#3db9b0','--viz-series-5':'#5ec978','--viz-series-6':'#f2893c'},'visualizationTheme':'light'};\u003c\/script\u003e \u003cstyle id=\"codex-visualization-host-theme\"\u003e:root {}\u003c\/style\u003e \u003cscript\u003e (() =\u003e {   \/\/ Host colors are defaults; later authored styles can give the same names   \/\/ their own meaning (for example, --muted as a chart's label color).   const hostStyles = document.getElementById('codex-visualization-host-theme');   const hostStyle = hostStyles.sheet.cssRules[0].style;   \/\/ Typography, geometry and interaction cursors still follow the host.   const styleForProperty = (property) =\u003e     \/^--(?:font-|radius|corner-shape$|control-spacing$|cursor-interaction$|icon-size$|visualize-paint-gutter$)\/.test(property)       ? document.documentElement.style       : hostStyle;   const initialGlobals =     globalThis.__codexVisualizationInitialGlobals ?? globalThis.openai;   delete globalThis.__codexVisualizationInitialGlobals;   if (initialGlobals?.statePersistence != null) {     globalThis.openai ??= {};     globalThis.openai.statePersistence = initialGlobals.statePersistence;     globalThis.openai.stateModelContext = initialGlobals.stateModelContext ?? 'none';   }   if (!false) {     return;   }   let appliedProperties = [];   const applyHostStyleVariables = (styleVariables) =\u003e {     if (styleVariables == null || typeof styleVariables !== 'object') {       return;     }     for (const property of appliedProperties) {       styleForProperty(property).removeProperty(property);     }     appliedProperties = [];     for (const [property, value] of Object.entries(styleVariables)) {       if (property.startsWith('--') \u0026\u0026 typeof value === 'string') {         styleForProperty(property).setProperty(property, value);         appliedProperties.push(property);       }     }   };    const syncHostStyles = (globals) =\u003e {     applyHostStyleVariables(globals?.visualizationStyleVariables);     const sandboxDocument = globalThis.frameElement?.ownerDocument;     if (sandboxDocument != null \u0026\u0026 globals?.visualizationTheme != null) {       let colorSchemeMeta = sandboxDocument.querySelector(         'meta[name='color-scheme']',       );       if (colorSchemeMeta == null) {         colorSchemeMeta = sandboxDocument.createElement('meta');         colorSchemeMeta.name = 'color-scheme';         sandboxDocument.head.appendChild(colorSchemeMeta);       }       colorSchemeMeta.content = globals.visualizationTheme;       sandboxDocument.documentElement.style.colorScheme =         globals.visualizationTheme;       \/\/ Paint the host surface behind transparent saved visualization documents.       sandboxDocument.documentElement.style.backgroundColor =         hostStyle.getPropertyValue('--background');     }   };    syncHostStyles(initialGlobals);   globalThis.addEventListener('openai:set_globals', (event) =\u003e {     syncHostStyles(event.detail?.globals);   }); })(); \u003c\/script\u003e \u003cscript\u003e (() =\u003e {   const reportEnvironmentError = (value) =\u003e {     const error = value instanceof Error ? value : new Error(String(value));     void globalThis.openai       .callTool(         '__codex_inline_visualization_error__',         {           message: error.message,           name: error.name,           stack: error.stack,         },       )       .catch(() =\u003e {});   };    globalThis.addEventListener('error', (event) =\u003e {     if (event.target?.localName === 'script') {       \/\/ A script's own onerror may render a fallback or load an alternative.       \/\/ Let that handler run; failures it throws still reach the global error path.       const handlesError = typeof event.target.onerror === 'function';       globalThis.queueMicrotask(() =\u003e {         if (!handlesError \u0026\u0026 !event.defaultPrevented) {           reportEnvironmentError('Visualization script could not be loaded');         }       });     } else if (event.target === globalThis) {       reportEnvironmentError(event.error ?? event.message);     }   }, true);   globalThis.addEventListener('unhandledrejection', (event) =\u003e {     reportEnvironmentError(event.reason);   }); })(); \u003c\/script\u003e \u003cscript id=\"codex-visualization-variants\"\u003e (() =\u003e {   let previousSnapshot = '[]';   let roots = [];   const report = () =\u003e {     roots = Array.from(       document.querySelectorAll('.viz-carousel[data-active-variant]'),     ).slice(0, 32);     const selectedVariants = roots.flatMap((root, carousel) =\u003e {       const variant = root.dataset.activeVariant;       const label = root.getAttribute('aria-label')?.slice(0, 256);       return variant ? [{         carousel,         ...(label == null ? {} : { label }),         variant: variant.slice(0, 256),       }] : [];     });     const snapshot = JSON.stringify(selectedVariants);     if (snapshot !== previousSnapshot) {       previousSnapshot = snapshot;       void globalThis.openai.callTool('__codex_visualization_annotations__', {         type: 'variants',         selectedVariants,       }).catch(() =\u003e {});     }   };   const observer = new MutationObserver((records) =\u003e {     if (records.some((record) =\u003e record.type === 'attributes') || roots.some((root) =\u003e !root.isConnected)) {       report();     }   });   observer.observe(document, {     childList: true,     subtree: true,     attributes: true,     attributeFilter: ['data-active-variant'],   });   report();   globalThis.addEventListener('pagehide', () =\u003e observer.disconnect(), { once: true }); })(); \u003c\/script\u003e \u003cscript\u003e (() =\u003e {   let isHovering = false;   let isTouch = false;   const reportHover = (nextIsHovering, nextIsTouch = false) =\u003e {     if (nextIsHovering === isHovering \u0026\u0026 nextIsTouch === isTouch) {       return;     }     isHovering = nextIsHovering;     isTouch = nextIsTouch;     void globalThis.openai       .callTool(         '__codex_inline_visualization_hover__',         isTouch ? { isHovering, pointerType: 'touch' } : { isHovering },       )       .catch(() =\u003e {});   };    globalThis.addEventListener(     'pointerover',     (event) =\u003e       reportHover(event.pointerType !== 'touch', event.pointerType === 'touch'),     { capture: true },   );   globalThis.addEventListener(     'pointerout',     (event) =\u003e {       if (event.pointerType !== 'touch' \u0026\u0026 event.relatedTarget == null) {         reportHover(false);       }     },     { capture: true },   ); })(); \u003c\/script\u003e \u003cscript\u003e (() =\u003e {   const report = (method) =\u003e {     void globalThis.openai.callTool('__codex_inline_visualization_input__', { method }).catch(() =\u003e {});   };   globalThis.addEventListener('pointerdown', () =\u003e report('pointer'), { capture: true });   globalThis.addEventListener('keydown', (event) =\u003e {     if (!event.isComposing \u0026\u0026 event.key !== 'Shift' \u0026\u0026 !event.altKey \u0026\u0026 !event.ctrlKey \u0026\u0026 !event.metaKey) {       report(['Tab','ArrowLeft','ArrowRight','ArrowUp','ArrowDown'].includes(event.key) ? 'keyboard-navigation' : 'keyboard');     }   }, { capture: true }); })(); \u003c\/script\u003e \u003cscript\u003e (() =\u003e {   const bubbledClicks = new WeakSet();   const interactiveSelector = [     'button', 'input', 'select', 'textarea', 'label', 'summary', 'a[href]',     'audio[controls]', 'video[controls]', '[onclick]', '[data-visualization-interactive]',     '[contenteditable]:not([contenteditable='false'])',     ...[       'button', 'checkbox', 'combobox', 'gridcell', 'link', 'listbox',       'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'radio',       'scrollbar', 'searchbox', 'slider', 'spinbutton', 'switch', 'tab',       'textbox', 'treeitem',     ].map((role) =\u003e '[role~='' + role + '']'),   ].join(',');    globalThis.addEventListener('click', (event) =\u003e bubbledClicks.add(event));   globalThis.addEventListener('click', (event) =\u003e {     \/\/ Capture the path before a control can remove itself. Custom delegated     \/\/ controls can opt in with data-visualization-interactive.     const elements = event.composedPath().filter((target) =\u003e target instanceof Element);     const isInteractiveTarget = elements.some((element) =\u003e       element.matches(interactiveSelector) ||       (element.hasAttribute('tabindex') \u0026\u0026 element.tabIndex \u003e= 0)) ||       (elements[0] != null \u0026\u0026 getComputedStyle(elements[0]).cursor === 'pointer');     \/\/ Use a task, not a microtask: native dispatch can run microtasks between     \/\/ listeners. Propagation flags are reset when dispatch finishes:     \/\/ https:\/\/dom.spec.whatwg.org\/#concept-event-dispatch     globalThis.setTimeout(() =\u003e {       void globalThis.openai.callTool('__codex_inline_visualization_click__', {         isInteractive: isInteractiveTarget || event.defaultPrevented ||           (event.bubbles \u0026\u0026 !bubbledClicks.has(event)),       }).catch(() =\u003e {});     }, 0);   }, { capture: true }); })(); \u003c\/script\u003e \u003cscript\u003e (() =\u003e {   globalThis.addEventListener('keydown', (event) =\u003e {     if (event.isComposing || event.altKey || event.ctrlKey || event.metaKey ||       event.shiftKey || !['ArrowLeft', 'ArrowRight', 'Escape'].includes(event.key)) {       return;     }     const target = event.composedPath().find((element) =\u003e element instanceof HTMLElement);     const editable = target?.closest('[contenteditable]');     const editing = target \u0026\u0026 (target.isContentEditable ||       (editable \u0026\u0026 editable.getAttribute('contenteditable') !== 'false') ||       target.closest('input, textarea, select, [role='slider'], [role='spinbutton'], [role='combobox'], [role='listbox'], [role='grid'], [role='tree'], [role='tablist'], [role='menu']'));     if (event.key !== 'Escape' \u0026\u0026 editing) { return; }     \/\/ Let the widget handle the key before forwarding it across the sandbox.     globalThis.setTimeout(() =\u003e {       if (!event.defaultPrevented \u0026\u0026 globalThis.openai?.displayMode === 'fullscreen') {         void globalThis.openai.callTool('__codex_inline_visualization_preview_key__', {           key: event.key,         }).catch(() =\u003e {});       }     }, 0);   }); })(); \u003c\/script\u003e     \u003cscript\u003e (() =\u003e {   const contentRange = document.createRange();   let previousMeasurement = null;   let heightReportTimer = null;   const reportHeight = () =\u003e {     const bodyChildren = Array.from(document.body.children).filter(       (element) =\u003e         element.tagName !== 'SCRIPT' \u0026\u0026         element.tagName !== 'STYLE' \u0026\u0026         element.getAttribute('role') !== 'tooltip',     );     const bodyStyle = globalThis.getComputedStyle(document.body);     const contentWidth = Math.max(       0,       Math.round(         globalThis.innerWidth -           parseFloat(bodyStyle.paddingLeft) -           parseFloat(bodyStyle.paddingRight),       ),     );     let contentHeight;     if (bodyChildren.length === 0) {       contentRange.selectNodeContents(document.body);       contentHeight = contentRange.getBoundingClientRect().height;     } else if (bodyChildren.length === 1) {       const [bodyChild] = bodyChildren;       const childRect = bodyChild.getBoundingClientRect();       \/\/ Child margins can collapse above the root without adding to its height.       \/\/ The host adds body padding separately.       contentHeight =         Math.max(bodyChild.scrollHeight, childRect.height) +         Math.max(           0,           childRect.top -             document.body.getBoundingClientRect().top -             parseFloat(bodyStyle.paddingTop),         );     } else {       const bodyTop = document.body.getBoundingClientRect().top;       contentHeight = Math.max(         ...bodyChildren.map(           (bodyChild) =\u003e bodyChild.getBoundingClientRect().bottom - bodyTop,         ),       );     }     const viewportHeight = globalThis.innerHeight;     const previous = previousMeasurement;     previousMeasurement = { contentHeight, contentWidth, viewportHeight };     if (       previous != null \u0026\u0026       contentWidth === previous.contentWidth \u0026\u0026       contentHeight - previous.contentHeight ===         viewportHeight - previous.viewportHeight     ) {       return;     }      void globalThis.openai       .callTool(         '__codex_inline_visualization_height__',         { height: contentHeight, width: contentWidth },       )       .catch(() =\u003e {});   };   const scheduleHeightReport = () =\u003e {     if (heightReportTimer != null) {       return;     }     \/\/ Offscreen frames can suspend animation callbacks while their content loads.     heightReportTimer = globalThis.setTimeout(() =\u003e {       heightReportTimer = null;       reportHeight();     }, 0);   };    const resizeObserver = new ResizeObserver(scheduleHeightReport);   const observeBodyChildren = () =\u003e {     for (const element of document.body.children) {       resizeObserver.observe(element);     }   };   resizeObserver.observe(document.body);   observeBodyChildren();   new MutationObserver(() =\u003e {     observeBodyChildren();     scheduleHeightReport();   }).observe(document.body, {     childList: true,     subtree: true,     attributes: true,     attributeFilter: ['style', 'class', 'height', 'width'],   });   globalThis.addEventListener('resize', scheduleHeightReport);   reportHeight(); })(); \u003c\/script\u003e \u003cstyle id=\"codex-visualization-document-scrollbar\"\u003ehtml,body{scrollbar-width:none!important}html::-webkit-scrollbar,body::-webkit-scrollbar{display:none!important}\u003c\/style\u003e  \u003c\/body\u003e","brand":"LJH","offers":[{"title":"Default Title","offer_id":57831516242086,"sku":"UOD26102202-诞生杯","price":35.99,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0741\/4169\/6166\/files\/a40b212e-b46c-4d26-b71c-29e7b261a806.png?v=1792813498","url":"https:\/\/getvyxor.com\/products\/nativity-scene-heat-sensitive-mug-christian-christmas-gift","provider":"getvyxor","version":"1.0","type":"link"}