{"product_id":"magnetic-gym-bag","title":"Magnetic Gym Bag","description":"\u003c!-- FlexNova — Magnetic Gym Bottle Bag product page block --\u003e\n\u003c!-- Drop this into a Shopify \"Custom Liquid\" section\/block on the product page --\u003e\n\n\u003cstyle\u003e\n  .fn-mag-page {\n    --ink: #222624;       \/* Carbon Black *\/\n    --paper: #FDFDFD;     \/* Alabaster, near-white *\/\n    --raised: #F1F1EF;\n    --volt: #BAFF29;      \/* Chartreuse *\/\n    --muted: #6B716E;\n    --line: rgba(34,38,36,0.1);\n\n    background: var(--paper);\n    color: var(--ink);\n    font-family: 'Inter', -apple-system, sans-serif;\n    overflow-x: hidden;\n    position: relative;\n  }\n\n  .fn-mag-page * { box-sizing: border-box; margin: 0; padding: 0; }\n\n  .fn-display {\n    font-family: 'Anton', 'Arial Narrow', sans-serif;\n    letter-spacing: 0.005em;\n    line-height: 0.94;\n    text-transform: uppercase;\n  }\n\n  \/* ---------- HERO ---------- *\/\n  .fn-hero {\n    position: relative;\n    padding: 3.5rem 1.25rem 3rem;\n    text-align: center;\n    isolation: isolate;\n  }\n\n  .fn-eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5rem;\n    font-size: 0.8rem;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: var(--ink);\n    border: 1px solid var(--line);\n    border-radius: 999px;\n    padding: 0.45rem 1.1rem;\n    margin-bottom: 1.25rem;\n    background: var(--raised);\n    opacity: 0;\n    animation: fn-fade-up 0.6s ease-out 0.1s forwards;\n  }\n\n  .fn-eyebrow .fn-dot {\n    width: 6px; height: 6px; border-radius: 50%;\n    background: var(--ink);\n    animation: fn-pulse 1.8s ease-in-out infinite;\n  }\n\n  .fn-hero-headline {\n    font-size: clamp(2.4rem, 11vw, 6rem);\n    font-weight: 400;\n    margin: 0 auto 1rem;\n    max-width: 17ch;\n  }\n\n  \/* Signature: scattered dots snap into a line beneath \"Within Reach\" — echoing the magnetic mechanism *\/\n  .fn-snap-line {\n    display: inline-block;\n    position: relative;\n  }\n\n  .fn-snap-dots {\n    display: flex;\n    justify-content: center;\n    gap: 0.5rem;\n    margin: 0.6rem 0 0;\n    height: 10px;\n  }\n\n  .fn-snap-dots span {\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: var(--volt);\n    opacity: 0;\n    transform: translateY(-14px) scale(0.6);\n    animation: fn-snap-in 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;\n  }\n\n  .fn-snap-dots span:nth-child(1) { animation-delay: 0.9s; }\n  .fn-snap-dots span:nth-child(2) { animation-delay: 0.98s; }\n  .fn-snap-dots span:nth-child(3) { animation-delay: 1.06s; }\n  .fn-snap-dots span:nth-child(4) { animation-delay: 1.14s; }\n  .fn-snap-dots span:nth-child(5) { animation-delay: 1.22s; }\n\n  @keyframes fn-snap-in {\n    0% { opacity: 0; transform: translateY(-14px) scale(0.6); }\n    60% { opacity: 1; transform: translateY(1px) scale(1.15); }\n    100% { opacity: 1; transform: translateY(0) scale(1); }\n  }\n\n  .fn-hero-sub {\n    font-size: clamp(1.02rem, 4.2vw, 1.3rem);\n    color: var(--muted);\n    max-width: 42ch;\n    margin: 1.4rem auto 1.5rem;\n    line-height: 1.55;\n    opacity: 0;\n    animation: fn-fade-up 0.6s ease-out 0.5s forwards;\n  }\n\n  .fn-hero-sub strong { color: var(--ink); font-weight: 700; }\n\n  \/* sticks-to \/ works-on mini sequence *\/\n  .fn-sticks-to {\n    display: inline-flex;\n    align-items: center;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 0.6rem;\n    font-size: 0.85rem;\n    font-weight: 600;\n    letter-spacing: 0.02em;\n    text-transform: uppercase;\n    opacity: 0;\n    animation: fn-fade-up 0.6s ease-out 0.7s forwards;\n  }\n\n  .fn-sticks-to span { color: var(--muted); }\n  .fn-sticks-to .fn-sticks-sep { color: var(--line); font-weight: 400; }\n\n  @keyframes fn-fade-up {\n    from { opacity: 0; transform: translateY(14px); }\n    to { opacity: 1; transform: translateY(0); }\n  }\n\n  @keyframes fn-pulse {\n    0%, 100% { opacity: 1; transform: scale(1); }\n    50% { opacity: 0.4; transform: scale(0.7); }\n  }\n\n  \/* ---------- SECTION SHELL ---------- *\/\n  .fn-section {\n    padding: 2.25rem 1.25rem;\n    max-width: 1080px;\n    margin: 0 auto;\n  }\n\n  .fn-section-head {\n    text-align: center;\n    margin-bottom: 1.75rem;\n  }\n\n  .fn-section-head .fn-label {\n    display: block;\n    font-size: 0.82rem;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--ink);\n    margin-bottom: 0.9rem;\n  }\n\n  .fn-section-head h2 {\n    font-size: clamp(2rem, 4.5vw, 2.8rem);\n  }\n\n  \/* ---------- BENEFIT GRID ---------- *\/\n  .fn-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n    gap: 1px;\n    background: var(--line);\n    border: 1px solid var(--line);\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n  .fn-card {\n    background: var(--raised);\n    padding: 1.6rem 1.4rem;\n    opacity: 0;\n    transform: translateY(24px);\n    transition: opacity 0.6s ease-out, transform 0.6s cubic-bezier(0.16,1,0.3,1), background 0.25s;\n  }\n\n  .fn-card.fn-in-view {\n    opacity: 1;\n    transform: translateY(0);\n  }\n\n  .fn-card:hover {\n    background: var(--paper);\n  }\n\n  .fn-card-icon {\n    font-size: 2.3rem;\n    margin-bottom: 1.1rem;\n    display: inline-block;\n  }\n\n  .fn-card h3 {\n    font-size: 1.3rem;\n    margin-bottom: 0.7rem;\n    font-weight: 700;\n  }\n\n  .fn-card p {\n    color: var(--muted);\n    font-size: 1.05rem;\n    line-height: 1.55;\n  }\n\n  \/* ---------- USE CASES ---------- *\/\n  .fn-uses {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0.7rem;\n    justify-content: center;\n  }\n\n  .fn-pill {\n    border: 1px solid var(--line);\n    border-radius: 999px;\n    padding: 0.75rem 1.4rem;\n    font-size: 1.02rem;\n    color: var(--ink);\n    background: var(--raised);\n    transition: border-color 0.25s, color 0.25s, transform 0.25s, background 0.25s;\n    opacity: 0;\n    transform: scale(0.9);\n  }\n\n  .fn-pill.fn-in-view {\n    opacity: 1;\n    transform: scale(1);\n  }\n\n  .fn-pill:hover {\n    border-color: var(--volt);\n    background: var(--volt);\n    color: var(--ink);\n    transform: translateY(-2px);\n  }\n\n  \/* ---------- SPECS ---------- *\/\n  .fn-specs {\n    border: 1px solid var(--line);\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n  .fn-spec-row {\n    display: grid;\n    grid-template-columns: 1fr 1.4fr;\n    border-bottom: 1px solid var(--line);\n    transition: background 0.2s;\n  }\n\n  .fn-spec-row:last-child { border-bottom: none; }\n  .fn-spec-row:hover { background: var(--raised); }\n\n  .fn-spec-row \u003e div {\n    padding: 1.15rem 1.4rem;\n    font-size: 1.05rem;\n  }\n\n  .fn-spec-row \u003e div:first-child {\n    color: var(--muted);\n    font-weight: 600;\n    border-right: 1px solid var(--line);\n  }\n\n  \/* ---------- INCLUDED ---------- *\/\n  .fn-included {\n    display: flex;\n    gap: 1.2rem;\n    justify-content: center;\n    flex-wrap: wrap;\n  }\n\n  .fn-included-item {\n    text-align: center;\n    width: 170px;\n  }\n\n  .fn-included-num {\n    font-family: 'Anton', sans-serif;\n    font-size: 2.4rem;\n    color: var(--ink);\n    line-height: 1;\n    margin-bottom: 0.5rem;\n  }\n\n  .fn-included-item p {\n    font-size: 0.98rem;\n    color: var(--muted);\n    line-height: 1.4;\n  }\n\n  \/* ---------- CTA ---------- *\/\n  .fn-cta-band {\n    text-align: center;\n    padding: 3rem 1.25rem;\n    position: relative;\n    overflow: hidden;\n    background: var(--ink);\n    color: var(--paper);\n  }\n\n  .fn-cta-band::before {\n    content: '';\n    position: absolute;\n    top: -20%;\n    left: -10%;\n    width: 45%;\n    height: 90%;\n    background: var(--volt);\n    border-radius: 45% 55% 50% 50% \/ 55% 45% 55% 45%;\n    opacity: 0.85;\n    filter: blur(40px);\n    z-index: 0;\n  }\n\n  .fn-cta-band h2,\n  .fn-cta-band p,\n  .fn-cta-btn {\n    position: relative;\n    z-index: 1;\n  }\n\n  .fn-cta-band h2 {\n    font-size: clamp(2rem, 5vw, 3.2rem);\n    margin-bottom: 1rem;\n  }\n\n  .fn-cta-band p {\n    color: rgba(253,253,253,0.72);\n    margin-bottom: 2.2rem;\n    font-size: 1.1rem;\n  }\n\n  .fn-cta-btn {\n    display: inline-block;\n    background: var(--volt);\n    color: var(--ink);\n    font-weight: 800;\n    letter-spacing: 0.02em;\n    text-transform: uppercase;\n    font-size: 0.95rem;\n    padding: 1.1rem 2.6rem;\n    border-radius: 999px;\n    border: none;\n    cursor: pointer;\n    position: relative;\n    overflow: hidden;\n    transition: transform 0.2s ease, box-shadow 0.2s ease;\n    box-shadow: 0 0 0 0 rgba(186,255,41,0.5);\n  }\n\n  .fn-cta-btn:hover {\n    transform: translateY(-3px);\n    box-shadow: 0 8px 30px rgba(186,255,41,0.45);\n  }\n\n  .fn-cta-btn:active {\n    transform: translateY(-1px);\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    .fn-mag-page * {\n      animation: none !important;\n      transition: none !important;\n    }\n    .fn-snap-dots span { opacity: 1 !important; transform: none !important; }\n    .fn-card, .fn-pill { opacity: 1 !important; transform: none !important; }\n  }\n\n  @media (max-width: 480px) {\n    .fn-spec-row { grid-template-columns: 1fr; }\n    .fn-spec-row \u003e div:first-child { border-right: none; border-bottom: 1px solid var(--line); }\n  }\n\n  \/* Scale up for tablet\/desktop — base styles above are mobile-first *\/\n  @media (min-width: 640px) {\n    .fn-hero { padding: 5rem 2rem 4rem; }\n    .fn-section { padding: 3.5rem 2rem; }\n    .fn-section-head { margin-bottom: 2.75rem; }\n    .fn-hero-sub { margin-bottom: 2.2rem; }\n    .fn-card { padding: 2.2rem 1.8rem; }\n    .fn-cta-band { padding: 5rem 2rem; }\n    .fn-sticks-to { gap: 0.9rem; font-size: 0.95rem; letter-spacing: 0.03em; }\n  }\n\n  @media (min-width: 1024px) {\n    .fn-hero { padding: 6.5rem 2rem 5.5rem; }\n    .fn-section { padding: 4.5rem 2rem; }\n  }\n\u003c\/style\u003e\n\n\u003clink rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Anton\u0026amp;family=Inter:wght@400;600;700;800\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003cdiv class=\"fn-mag-page\"\u003e\n\n  \u003c!-- HERO --\u003e\n  \u003csection class=\"fn-hero\"\u003e\n    \u003cspan class=\"fn-eyebrow\"\u003e\u003cspan class=\"fn-dot\"\u003e\u003c\/span\u003eFlexNova · Magnetic Gym Bottle Bag\u003c\/span\u003e\n    \u003ch1 class=\"fn-hero-headline fn-display\"\u003e\n      Everything You Need.\u003cbr\u003e\n      \u003cspan class=\"fn-snap-line\"\u003e\n        Within Reach.\n        \u003cspan class=\"fn-snap-dots\" aria-hidden=\"true\"\u003e\n          \u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\n        \u003c\/span\u003e\n      \u003c\/span\u003e\n    \u003c\/h1\u003e\n    \u003cp class=\"fn-hero-sub\"\u003e\n      No more dropping your phone on the floor or jogging back to your bag between sets.\n      \u003cstrong\u003eOne magnetic attachment\u003c\/strong\u003e keeps your bottle, phone, keys, and essentials locked to your equipment.\n    \u003c\/p\u003e\n    \u003cdiv class=\"fn-sticks-to\"\u003e\n      \u003cspan\u003eSquat Racks\u003c\/span\u003e\u003cspan class=\"fn-sticks-sep\"\u003e·\u003c\/span\u003e\n      \u003cspan\u003eBenches\u003c\/span\u003e\u003cspan class=\"fn-sticks-sep\"\u003e·\u003c\/span\u003e\n      \u003cspan\u003eLockers\u003c\/span\u003e\u003cspan class=\"fn-sticks-sep\"\u003e·\u003c\/span\u003e\n      \u003cspan\u003eMachines\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- WHY YOU'LL LOVE IT --\u003e\n  \u003csection class=\"fn-section\"\u003e\n    \u003cdiv class=\"fn-section-head\"\u003e\n      \u003cspan class=\"fn-label\"\u003eWhy you'll love it\u003c\/span\u003e\n      \u003ch2 class=\"fn-display\"\u003eBuilt so your hands stay free\u003c\/h2\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fn-grid\" id=\"fn-benefit-grid\"\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e🧲\u003c\/span\u003e\u003ch3\u003ePowerful magnetic attachment\u003c\/h3\u003e\n\u003cp\u003eSecurely attaches to most metal gym equipment, keeping your belongings elevated, clean, and easily accessible.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e💧\u003c\/span\u003e\u003ch3\u003eStay hydrated without interruptions\u003c\/h3\u003e\n\u003cp\u003eHolds your water bottle securely so hydration is always within reach during your workout.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e📱\u003c\/span\u003e\u003ch3\u003eKeep essentials organized\u003c\/h3\u003e\n\u003cp\u003eDedicated compartments for your phone, keys, wallet, earbuds, and energy snacks.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e🏋️\u003c\/span\u003e\u003ch3\u003eFocus more, search less\u003c\/h3\u003e\n\u003cp\u003eNo more belongings scattered around the gym. Everything stays together in one spot.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e🚶\u003c\/span\u003e\u003ch3\u003eLightweight \u0026amp; portable\u003c\/h3\u003e\n\u003cp\u003eTake it from machine to machine with ease — perfect for sessions, classes, and travel.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-card\"\u003e\n\u003cspan class=\"fn-card-icon\"\u003e🛡️\u003c\/span\u003e\u003ch3\u003eProtect your valuables\u003c\/h3\u003e\n\u003cp\u003eKeeps your personal items off dirty gym floors and away from accidental damage.\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- PERFECT FOR --\u003e\n  \u003csection class=\"fn-section\"\u003e\n    \u003cdiv class=\"fn-section-head\"\u003e\n      \u003cspan class=\"fn-label\"\u003ePerfect for\u003c\/span\u003e\n      \u003ch2 class=\"fn-display\"\u003eWherever you train\u003c\/h2\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fn-uses\" id=\"fn-uses-grid\"\u003e\n      \u003cspan class=\"fn-pill\"\u003eGym Workouts\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eWeight Training\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eCrossFit Sessions\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eBodybuilding\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eFunctional Fitness\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eSports Training\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003ePersonal Training\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eYoga \u0026amp; Fitness Classes\u003c\/span\u003e\n      \u003cspan class=\"fn-pill\"\u003eTravel \u0026amp; Outdoor Activities\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- SPECS --\u003e\n  \u003csection class=\"fn-section\"\u003e\n    \u003cdiv class=\"fn-section-head\"\u003e\n      \u003cspan class=\"fn-label\"\u003eSpecifications\u003c\/span\u003e\n      \u003ch2 class=\"fn-display\"\u003eThe details\u003c\/h2\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fn-specs\"\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eProduct Type\u003c\/div\u003e\n\u003cdiv\u003eMagnetic Gym Bottle Bag\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eMaterial\u003c\/div\u003e\n\u003cdiv\u003eDurable Water-Resistant Fabric\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eAttachment\u003c\/div\u003e\n\u003cdiv\u003eHigh-Strength Built-In Magnet\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eStorage Compartments\u003c\/div\u003e\n\u003cdiv\u003eMultiple Accessory Pockets\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eBottle Holder\u003c\/div\u003e\n\u003cdiv\u003eYes\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003ePhone Storage\u003c\/div\u003e\n\u003cdiv\u003eYes\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eCarry Options\u003c\/div\u003e\n\u003cdiv\u003eShoulder Strap \u0026amp; Hand Carry\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eLightweight \/ Portable\u003c\/div\u003e\n\u003cdiv\u003eYes\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eSuitable For\u003c\/div\u003e\n\u003cdiv\u003eMen \u0026amp; Women\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-spec-row\"\u003e\n\u003cdiv\u003eUse\u003c\/div\u003e\n\u003cdiv\u003eGym, Sports, Travel \u0026amp; Outdoor Activities\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- WHAT'S INCLUDED --\u003e\n  \u003csection class=\"fn-section\"\u003e\n    \u003cdiv class=\"fn-section-head\"\u003e\n      \u003cspan class=\"fn-label\"\u003eWhat's included\u003c\/span\u003e\n      \u003ch2 class=\"fn-display\"\u003eEverything you need to gear up\u003c\/h2\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"fn-included\"\u003e\n      \u003cdiv class=\"fn-included-item\"\u003e\n\u003cdiv class=\"fn-included-num\"\u003e1×\u003c\/div\u003e\n\u003cp\u003eMagnetic Gym Bottle Bag\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-included-item\"\u003e\n\u003cdiv class=\"fn-included-num\"\u003e1×\u003c\/div\u003e\n\u003cp\u003eAdjustable Shoulder Strap\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"fn-included-item\"\u003e\n\u003cdiv class=\"fn-included-num\"\u003e✓\u003c\/div\u003e\n\u003cp\u003eBuilt-In Heavy-Duty Magnetic Attachment\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003c!-- CTA --\u003e\n  \u003csection class=\"fn-cta-band\"\u003e\n    \u003ch2 class=\"fn-display\"\u003eTrain harder.\u003cbr\u003eStay organized.\u003c\/h2\u003e\n    \u003cp\u003eHydrate smarter. Move with confidence.\u003c\/p\u003e\n    \u003cbutton class=\"fn-cta-btn\" onclick=\"document.querySelector('form[action*=\\'\/cart\/add\\']')?.scrollIntoView({behavior:'smooth'})\"\u003e\n      Grab Yours Today\n    \u003c\/button\u003e\n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  (function() {\n    var grid = document.querySelectorAll('#fn-benefit-grid .fn-card, #fn-uses-grid .fn-pill');\n    if (!('IntersectionObserver' in window)) {\n      grid.forEach(function(el) { el.classList.add('fn-in-view'); });\n      return;\n    }\n    var observer = new IntersectionObserver(function(entries) {\n      entries.forEach(function(entry) {\n        if (entry.isIntersecting) {\n          var el = entry.target;\n          var siblings = Array.prototype.slice.call(el.parentElement.children);\n          var index = siblings.indexOf(el);\n          setTimeout(function() { el.classList.add('fn-in-view'); }, index * 70);\n          observer.unobserve(el);\n        }\n      });\n    }, { threshold: 0.15 });\n    grid.forEach(function(el) { observer.observe(el); });\n  })();\n\u003c\/script\u003e","brand":"Flexnova","offers":[{"title":"Default Title","offer_id":53354786980140,"sku":null,"price":600.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0974\/0071\/7612\/files\/magnetic_gym_bag.png?v=1781983639","url":"https:\/\/flexnova.co.za\/products\/magnetic-gym-bag","provider":"Flexnova","version":"1.0","type":"link"}