{"title":"You Might Also Like!","description":"","products":[{"product_id":"vyroshop™-nightbloom-eye-mask","title":"VyroShop™ NightBloom Eye Mask","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003ctitle\u003eNightBloom Sleep Mask — VyroShop™\u003c\/title\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700;800;900\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\u003cstyle\u003e\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n  :root {\n    --pink:       #ff4d88;\n    --pink-light: #ff7eb3;\n    --pink-pale:  #fff0f5;\n    --pink-mid:   #ffe4eb;\n    --text:       #1a1a1a;\n    --text-mid:   #555;\n    --text-dim:   #888;\n    --white:      #ffffff;\n  }\n\n  html { scroll-behavior: smooth; }\n\n  body {\n    font-family: 'Inter', sans-serif;\n    background: #fff;\n    color: var(--text);\n    overflow-x: hidden;\n  }\n\n  \/* ── NAV ── *\/\n  nav {\n    position: fixed;\n    top: 0; left: 0; right: 0;\n    z-index: 100;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1rem 2.5rem;\n    background: rgba(255,255,255,0.88);\n    backdrop-filter: blur(20px);\n    border-bottom: 1px solid rgba(255,77,136,0.1);\n    animation: fadeDown 0.7s ease both 0.1s;\n  }\n\n  @keyframes fadeDown {\n    from { opacity:0; transform:translateY(-12px); }\n    to   { opacity:1; transform:translateY(0); }\n  }\n\n  .nav-brand {\n    font-size: 1.05rem;\n    font-weight: 800;\n    color: var(--pink);\n    text-decoration: none;\n    letter-spacing: -0.02em;\n  }\n\n  .nav-brand sup {\n    font-size: 0.55rem;\n    vertical-align: super;\n    opacity: 0.7;\n  }\n\n  .nav-links { display: flex; align-items: center; gap: 1.5rem; }\n\n  .nav-link {\n    font-size: 0.8rem;\n    font-weight: 500;\n    color: var(--text-mid);\n    text-decoration: none;\n    transition: color .3s;\n    letter-spacing: 0.05em;\n  }\n  .nav-link:hover { color: var(--pink); }\n\n  .nav-cta {\n    background: linear-gradient(90deg, var(--pink), var(--pink-light));\n    color: #fff;\n    padding: 0.55rem 1.4rem;\n    border-radius: 999px;\n    font-size: 0.8rem;\n    font-weight: 700;\n    text-decoration: none;\n    transition: all .3s;\n    box-shadow: 0 4px 14px rgba(255,77,136,.3);\n  }\n  .nav-cta:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(255,77,136,.4); }\n\n  \/* ── HERO ── *\/\n  .hero {\n    min-height: 100vh;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    padding: 7rem 2rem 5rem;\n    background: linear-gradient(135deg, var(--pink-pale), var(--pink-mid), #fff);\n    position: relative;\n    overflow: hidden;\n  }\n\n  .hero::before {\n    content: '';\n    position: absolute;\n    width: 600px; height: 600px;\n    background: radial-gradient(circle, rgba(255,77,136,.18), transparent 70%);\n    top: -200px; right: -180px;\n    animation: floatGlow 8s ease-in-out infinite;\n    pointer-events: none;\n  }\n  .hero::after {\n    content: '';\n    position: absolute;\n    width: 500px; height: 500px;\n    background: radial-gradient(circle, rgba(255,182,193,.2), transparent 70%);\n    bottom: -200px; left: -180px;\n    animation: floatGlow 10s ease-in-out infinite reverse;\n    pointer-events: none;\n  }\n\n  @keyframes floatGlow {\n    0%,100% { transform: translateY(0); }\n    50% { transform: translateY(-30px); }\n  }\n\n  .hero-badge {\n    display: inline-block;\n    background: var(--pink);\n    color: #fff;\n    padding: 0.55rem 1.4rem;\n    border-radius: 999px;\n    font-size: 0.8rem;\n    font-weight: 700;\n    letter-spacing: 0.06em;\n    margin-bottom: 1.8rem;\n    animation: pulseBadge 2s infinite, fadeUp .7s both .2s;\n    position: relative;\n    z-index: 2;\n  }\n\n  @keyframes pulseBadge {\n    0%   { box-shadow: 0 0 0 0 rgba(255,77,136,.6); }\n    70%  { box-shadow: 0 0 0 18px rgba(255,77,136,0); }\n    100% { box-shadow: 0 0 0 0 rgba(255,77,136,0); }\n  }\n\n  \/* Animated SVG mask illustration *\/\n  .mask-wrap {\n    position: relative;\n    z-index: 2;\n    margin-bottom: 2rem;\n    animation: fadeUp .9s both .3s;\n  }\n\n  .mask-svg {\n    animation: float 4s ease-in-out infinite;\n    filter: drop-shadow(0 16px 32px rgba(255,77,136,.3));\n  }\n\n  @keyframes float {\n    0%,100% { transform: translateY(0); }\n    50%      { transform: translateY(-14px); }\n  }\n\n  .hero h1 {\n    font-size: clamp(2.6rem, 7vw, 5.2rem);\n    font-weight: 900;\n    line-height: 1.05;\n    letter-spacing: -0.03em;\n    margin-bottom: 1.2rem;\n    position: relative;\n    z-index: 2;\n    animation: fadeUp .9s both .45s;\n  }\n\n  .gradient-text {\n    background: linear-gradient(90deg, var(--pink), var(--pink-light));\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n  }\n\n  .hero-sub {\n    font-size: clamp(0.95rem, 2.5vw, 1.2rem);\n    color: var(--text-mid);\n    max-width: 600px;\n    line-height: 1.8;\n    margin-bottom: 2.5rem;\n    position: relative;\n    z-index: 2;\n    animation: fadeUp .9s both .6s;\n  }\n\n  .hero-btns {\n    display: flex;\n    gap: 1rem;\n    justify-content: center;\n    flex-wrap: wrap;\n    position: relative;\n    z-index: 2;\n    animation: fadeUp .9s both .75s;\n  }\n\n  .btn-primary {\n    position: relative;\n    overflow: hidden;\n    background: linear-gradient(90deg, var(--pink), var(--pink-light));\n    color: #fff;\n    padding: 1rem 2.5rem;\n    border-radius: 999px;\n    font-size: 0.95rem;\n    font-weight: 700;\n    text-decoration: none;\n    display: inline-block;\n    transition: all .3s;\n    box-shadow: 0 8px 24px rgba(255,77,136,.35);\n    letter-spacing: 0.04em;\n  }\n  .btn-primary::after {\n    content: '';\n    position: absolute;\n    top: -50%; left: -80%;\n    width: 50%; height: 200%;\n    background: rgba(255,255,255,.3);\n    transform: skewX(-20deg);\n    animation: shimmer 3s ease-in-out infinite 1.5s;\n  }\n  @keyframes shimmer {\n    from { left: -80%; }\n    to   { left: 160%; }\n  }\n  .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 14px 36px rgba(255,77,136,.45); }\n\n  .btn-ghost {\n    background: #fff;\n    color: var(--pink);\n    border: 2px solid var(--pink);\n    padding: 1rem 2.5rem;\n    border-radius: 999px;\n    font-size: 0.95rem;\n    font-weight: 700;\n    text-decoration: none;\n    display: inline-block;\n    transition: all .3s;\n    letter-spacing: 0.04em;\n  }\n  .btn-ghost:hover { background: var(--pink-pale); transform: translateY(-3px); }\n\n  .scroll-hint {\n    position: absolute;\n    bottom: 2rem; left: 50%;\n    transform: translateX(-50%);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 0.4rem;\n    animation: fadeUp .9s both 1.2s;\n    z-index: 2;\n  }\n  .scroll-hint span {\n    font-size: 0.65rem;\n    letter-spacing: 0.2em;\n    text-transform: uppercase;\n    color: var(--pink);\n    font-weight: 600;\n  }\n  .scroll-line {\n    width: 1px; height: 36px;\n    background: linear-gradient(to bottom, var(--pink), transparent);\n    animation: scrollDrop 2s ease-in-out infinite;\n  }\n  @keyframes scrollDrop {\n    0%,100% { transform: scaleY(1); opacity:1; }\n    50%      { transform: scaleY(0.5); opacity:.4; }\n  }\n\n  @keyframes fadeUp {\n    from { opacity:0; transform:translateY(24px); }\n    to   { opacity:1; transform:translateY(0); }\n  }\n\n  \/* ── SECTION BASE ── *\/\n  .section {\n    padding: 6rem 2rem;\n    max-width: 1200px;\n    margin: 0 auto;\n  }\n\n  .section-label {\n    display: block;\n    font-size: 0.72rem;\n    font-weight: 700;\n    letter-spacing: 0.22em;\n    text-transform: uppercase;\n    color: var(--pink);\n    margin-bottom: 0.8rem;\n    text-align: center;\n  }\n\n  .section-title {\n    font-size: clamp(1.8rem, 4vw, 3rem);\n    font-weight: 900;\n    text-align: center;\n    letter-spacing: -0.03em;\n    margin-bottom: 3rem;\n    line-height: 1.1;\n  }\n\n  .section-title .gradient-text { background: linear-gradient(90deg, var(--pink), var(--pink-light)); -webkit-background-clip:text; -webkit-text-fill-color:transparent; background-clip:text; }\n\n  \/* ── STATS STRIP ── *\/\n  .stats-strip {\n    background: linear-gradient(90deg, var(--pink), var(--pink-light));\n    padding: 2.5rem 2rem;\n  }\n  .stats-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(140px,1fr));\n    gap: 1rem;\n    max-width: 1200px;\n    margin: 0 auto;\n    text-align: center;\n  }\n  .stat-item {\n    opacity: 0;\n    transform: translateY(16px);\n    transition: all .5s ease;\n  }\n  .stat-item.visible { opacity:1; transform:translateY(0); }\n  .stat-number {\n    font-size: clamp(2rem,4vw,2.8rem);\n    font-weight: 900;\n    color: #fff;\n    line-height: 1;\n  }\n  .stat-label {\n    font-size: 0.78rem;\n    color: rgba(255,255,255,.75);\n    font-weight: 500;\n    margin-top: 0.3rem;\n    letter-spacing: 0.05em;\n  }\n\n  \/* ── FEATURES ── *\/\n  .features-bg {\n    background: linear-gradient(135deg, var(--pink-pale) 0%, #fff 100%);\n    padding: 0 0 2rem;\n  }\n  .features-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(240px,1fr));\n    gap: 1.5rem;\n  }\n  .feature-card {\n    background: rgba(255,255,255,.8);\n    backdrop-filter: blur(20px);\n    border: 1px solid rgba(255,77,136,.1);\n    border-radius: 24px;\n    padding: 2rem 1.8rem;\n    transition: all .4s ease;\n    box-shadow: 0 10px 30px rgba(0,0,0,.05);\n    opacity: 0;\n    transform: translateY(28px);\n  }\n  .feature-card.visible {\n    opacity: 1;\n    transform: translateY(0);\n  }\n  .feature-card:hover {\n    transform: translateY(-8px);\n    box-shadow: 0 24px 50px rgba(255,77,136,.15);\n    border-color: rgba(255,77,136,.25);\n  }\n  .feature-icon { font-size: 2rem; margin-bottom: 1rem; display: block; }\n  .feature-title { font-size: 1.1rem; font-weight: 800; margin-bottom: 0.6rem; }\n  .feature-text { color: var(--text-dim); font-size: 0.88rem; line-height: 1.75; }\n\n  \/* ── COLOUR PICKER ── *\/\n  .colour-section { background: #fff; }\n  .colour-grid {\n    display: flex;\n    justify-content: center;\n    gap: 2rem;\n    flex-wrap: wrap;\n    margin-bottom: 2rem;\n  }\n  .colour-item {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 0.75rem;\n    cursor: pointer;\n    opacity: 0;\n    transform: scale(0.85);\n    transition: all .4s ease;\n  }\n  .colour-item.visible { opacity:1; transform:scale(1); }\n  .colour-swatch {\n    width: 68px; height: 68px;\n    border-radius: 50%;\n    border: 3px solid transparent;\n    transition: all .3s ease;\n    box-shadow: 0 6px 18px rgba(0,0,0,.12);\n    position: relative;\n  }\n  .colour-swatch::after {\n    content:'';\n    position:absolute;\n    inset:-6px;\n    border-radius:50%;\n    border:2px solid transparent;\n    transition: all .3s;\n  }\n  .colour-item.active .colour-swatch::after,\n  .colour-item:hover .colour-swatch::after { border-color: var(--pink); }\n  .colour-item:hover .colour-swatch,\n  .colour-item.active .colour-swatch { transform:scale(1.12); }\n  .colour-item.active .colour-swatch { box-shadow:0 10px 28px rgba(255,77,136,.35); }\n  .colour-name {\n    font-size: 0.72rem;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--text-dim);\n    transition: color .3s;\n  }\n  .colour-item.active .colour-name,\n  .colour-item:hover .colour-name { color: var(--pink); }\n  .colour-tagline {\n    text-align: center;\n    font-size: 1.1rem;\n    font-weight: 500;\n    color: var(--pink);\n    min-height: 1.8rem;\n    transition: opacity .3s;\n    font-style: italic;\n  }\n\n  \/* ── LIFESTYLE SPLIT ── *\/\n  .lifestyle-wrap {\n    background: linear-gradient(135deg, var(--pink-pale), var(--pink-mid));\n    padding: 6rem 2rem;\n  }\n  .lifestyle-inner {\n    max-width: 1100px;\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 0;\n    border-radius: 30px;\n    overflow: hidden;\n    box-shadow: 0 30px 80px rgba(255,77,136,.15);\n    opacity: 0;\n    transform: translateY(40px);\n    transition: all .8s ease;\n  }\n  .lifestyle-inner.visible { opacity:1; transform:translateY(0); }\n  .lifestyle-visual {\n    background: linear-gradient(135deg, #ffd6e8, #ffb3ce);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 380px;\n    position: relative;\n    overflow: hidden;\n  }\n  .lifestyle-visual::before {\n    content:'';\n    position:absolute;\n    width:300px; height:300px;\n    border-radius:50%;\n    background: radial-gradient(circle, rgba(255,255,255,.4), transparent 70%);\n    top:50%; left:50%;\n    transform:translate(-50%,-50%);\n    animation: floatGlow 5s ease-in-out infinite;\n  }\n  .lifestyle-emoji {\n    font-size: 6rem;\n    position:relative; z-index:2;\n    animation: float 5s ease-in-out infinite;\n    filter:drop-shadow(0 0 24px rgba(255,77,136,.4));\n  }\n  .lifestyle-text {\n    background: #fff;\n    padding: 3.5rem;\n    display:flex; flex-direction:column; justify-content:center; gap:1.2rem;\n  }\n  .lifestyle-quote {\n    font-size: clamp(1.3rem, 3vw, 1.9rem);\n    font-weight: 800;\n    line-height: 1.3;\n    letter-spacing: -0.02em;\n  }\n  .lifestyle-quote span { color: var(--pink); }\n  .lifestyle-body { font-size: 0.9rem; color: var(--text-dim); line-height: 1.8; }\n\n  \/* ── USE CASES ── *\/\n  .use-section { background:#fff; }\n  .use-grid {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0.9rem;\n    justify-content: center;\n    margin-top: 2rem;\n  }\n  .use-pill {\n    background: var(--pink-pale);\n    border: 1.5px solid rgba(255,77,136,.2);\n    color: var(--text);\n    padding: 0.7rem 1.4rem;\n    border-radius: 999px;\n    font-size: 0.88rem;\n    font-weight: 600;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n    transition: all .3s;\n    cursor: default;\n    opacity: 0;\n    transform: scale(0.9);\n  }\n  .use-pill.visible { opacity:1; transform:scale(1); }\n  .use-pill:hover {\n    background: var(--pink);\n    color: #fff;\n    border-color: var(--pink);\n    transform: scale(1.05);\n  }\n\n  \/* ── TESTIMONIALS ── *\/\n  .testi-bg {\n    background: linear-gradient(135deg, #fff5f8, #fff);\n    padding: 6rem 2rem;\n  }\n  .testi-track-wrap {\n    overflow: hidden;\n    -webkit-mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);\n    mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);\n    margin-top: 2.5rem;\n  }\n  .testi-track {\n    display: flex;\n    gap: 1.5rem;\n    animation: marquee 30s linear infinite;\n    width: max-content;\n  }\n  .testi-track:hover { animation-play-state: paused; }\n  @keyframes marquee {\n    from { transform: translateX(0); }\n    to   { transform: translateX(-50%); }\n  }\n  .testi-card {\n    width: 300px;\n    flex-shrink: 0;\n    background: #fff;\n    border: 1px solid rgba(255,77,136,.12);\n    border-radius: 20px;\n    padding: 1.8rem;\n    box-shadow: 0 8px 24px rgba(0,0,0,.05);\n    transition: box-shadow .3s;\n  }\n  .testi-card:hover { box-shadow: 0 16px 40px rgba(255,77,136,.15); }\n  .testi-stars { color: var(--pink); font-size: 0.9rem; letter-spacing: 0.1em; margin-bottom: 0.8rem; }\n  .testi-text { font-size: 0.93rem; line-height: 1.7; color: var(--text-mid); margin-bottom: 1.2rem; font-style: italic; }\n  .testi-author {\n    font-size: 0.75rem;\n    font-weight: 700;\n    color: var(--pink);\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    display:flex; align-items:center; gap:0.5rem;\n  }\n  .testi-author::before { content:''; width:18px; height:2px; background:var(--pink); border-radius:2px; }\n\n  \/* ── SPECS ── *\/\n  .specs-bg {\n    background: linear-gradient(135deg, var(--pink-pale), #fff5f8);\n    padding: 6rem 2rem;\n  }\n  .spec-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(180px,1fr));\n    gap: 1.2rem;\n    max-width: 1100px;\n    margin: 0 auto;\n  }\n  .spec-item {\n    background: #fff;\n    padding: 2rem 1.5rem;\n    border-radius: 20px;\n    text-align: center;\n    box-shadow: 0 8px 24px rgba(0,0,0,.05);\n    transition: all .3s;\n    border: 1px solid rgba(255,77,136,.08);\n    opacity: 0;\n    transform: translateY(20px);\n  }\n  .spec-item.visible { opacity:1; transform:translateY(0); }\n  .spec-item:hover { transform: scale(1.05); box-shadow: 0 16px 40px rgba(255,77,136,.15); }\n  .spec-value { font-size: 1.9rem; font-weight: 900; color: var(--pink); }\n  .spec-label { color: var(--text-dim); margin-top: 0.4rem; font-size: 0.82rem; font-weight: 500; }\n\n  \/* ── FINAL CTA ── *\/\n  .final-cta {\n    background: linear-gradient(135deg, var(--pink), var(--pink-light));\n    padding: 7rem 2rem;\n    text-align: center;\n    position: relative;\n    overflow: hidden;\n  }\n  .final-cta::before {\n    content:'';\n    position:absolute;\n    width:500px; height:500px;\n    border-radius:50%;\n    background: radial-gradient(circle, rgba(255,255,255,.15), transparent 70%);\n    top:-200px; right:-180px;\n    animation: floatGlow 7s ease-in-out infinite;\n  }\n  .final-cta::after {\n    content:'';\n    position:absolute;\n    width:400px; height:400px;\n    border-radius:50%;\n    background: radial-gradient(circle, rgba(255,255,255,.12), transparent 70%);\n    bottom:-180px; left:-160px;\n    animation: floatGlow 9s ease-in-out infinite reverse;\n  }\n  .final-cta-inner {\n    position:relative; z-index:2;\n    opacity:0; transform:translateY(30px);\n    transition: all .8s ease;\n  }\n  .final-cta-inner.visible { opacity:1; transform:translateY(0); }\n  .final-cta h2 {\n    font-size: clamp(2.2rem, 6vw, 4.2rem);\n    font-weight: 900;\n    color: #fff;\n    line-height: 1.1;\n    letter-spacing: -0.03em;\n    margin-bottom: 1rem;\n  }\n  .final-cta p { color: rgba(255,255,255,.8); font-size: 1rem; margin-bottom: 2.5rem; line-height: 1.7; }\n  .btn-white {\n    background: #fff;\n    color: var(--pink);\n    padding: 1.1rem 3rem;\n    border-radius: 999px;\n    font-size: 1rem;\n    font-weight: 800;\n    text-decoration: none;\n    display: inline-block;\n    transition: all .3s;\n    box-shadow: 0 8px 28px rgba(0,0,0,.15);\n    letter-spacing: 0.04em;\n  }\n  .btn-white:hover { transform: translateY(-4px); box-shadow: 0 16px 40px rgba(0,0,0,.2); }\n\n  \/* ── FOOTER ── *\/\n  footer {\n    background: var(--pink-pale);\n    padding: 2rem;\n    text-align: center;\n    font-size: 0.78rem;\n    color: var(--text-dim);\n    border-top: 1px solid rgba(255,77,136,.1);\n  }\n  footer span { color: var(--pink); font-weight: 700; }\n\n  \/* ── RESPONSIVE ── *\/\n  @media (max-width: 720px) {\n    .lifestyle-inner { grid-template-columns: 1fr; }\n    .lifestyle-visual { min-height: 220px; }\n    nav { padding: 0.9rem 1.2rem; }\n    .nav-link { display: none; }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    *, *::before, *::after { animation-duration:.01ms!important; transition-duration:.01ms!important; }\n  }\n\u003c\/style\u003e\n\n\n\n\u003c!-- NAV --\u003e\n\u003cnav\u003e\n  \u003ca href=\"#\" class=\"nav-brand\"\u003eVyroShop\u003csup\u003e™\u003c\/sup\u003e\u003c\/a\u003e\n  \u003cdiv class=\"nav-links\"\u003e\n    \u003ca href=\"#features\" class=\"nav-link\"\u003eFeatures\u003c\/a\u003e\n    \u003ca href=\"#colours\" class=\"nav-link\"\u003eColours\u003c\/a\u003e\n    \u003ca href=\"#specs\" class=\"nav-link\"\u003eSpecs\u003c\/a\u003e\n    \u003ca href=\"#shop\" class=\"nav-cta\"\u003eShop Now\u003c\/a\u003e\n  \u003c\/div\u003e\n\u003c\/nav\u003e\n\n\u003c!-- HERO --\u003e\n\u003csection class=\"hero\"\u003e\n  \u003cspan class=\"hero-badge\"\u003e🌸 New · Sleep Wellness\u003c\/span\u003e\n\n  \u003c!-- Animated mask SVG --\u003e\n  \u003cdiv class=\"mask-wrap\"\u003e\n    \u003csvg class=\"mask-svg\" width=\"240\" height=\"120\" viewbox=\"0 0 240 120\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n      \u003c!-- Shadow under mask --\u003e\n      \u003cellipse cx=\"120\" cy=\"112\" rx=\"90\" ry=\"6\" fill=\"rgba(255,77,136,.12)\"\u003e\u003c\/ellipse\u003e\n      \u003c!-- Mask body --\u003e\n      \u003cellipse cx=\"120\" cy=\"68\" rx=\"108\" ry=\"46\" fill=\"url(#heroMask)\"\u003e\u003c\/ellipse\u003e\n      \u003c!-- Left eye cup --\u003e\n      \u003cellipse cx=\"72\" cy=\"64\" rx=\"34\" ry=\"26\" fill=\"url(#cupL)\" opacity=\".9\"\u003e\u003c\/ellipse\u003e\n      \u003c!-- Right eye cup --\u003e\n      \u003cellipse cx=\"168\" cy=\"64\" rx=\"34\" ry=\"26\" fill=\"url(#cupR)\" opacity=\".9\"\u003e\u003c\/ellipse\u003e\n      \u003c!-- Bridge --\u003e\n      \u003crect x=\"90\" y=\"56\" width=\"60\" height=\"14\" rx=\"7\" fill=\"url(#heroMask)\" opacity=\".8\"\u003e\u003c\/rect\u003e\n      \u003c!-- Highlight --\u003e\n      \u003cellipse cx=\"86\" cy=\"50\" rx=\"22\" ry=\"8\" fill=\"white\" opacity=\".18\"\u003e\u003c\/ellipse\u003e\n      \u003c!-- Strap left --\u003e\n      \u003cpath d=\"M12 64 Q6 34 34 22\" stroke=\"url(#strapL)\" stroke-width=\"7\" stroke-linecap=\"round\" fill=\"none\"\u003e\u003c\/path\u003e\n      \u003c!-- Strap right --\u003e\n      \u003cpath d=\"M228 64 Q234 34 206 22\" stroke=\"url(#strapR)\" stroke-width=\"7\" stroke-linecap=\"round\" fill=\"none\"\u003e\u003c\/path\u003e\n      \u003c!-- Sparkle accents --\u003e\n      \u003cg\u003e\n        \u003ccircle cx=\"120\" cy=\"36\" r=\"3.5\" fill=\"#ff4d88\" opacity=\".9\"\u003e\u003canimate attributename=\"opacity\" values=\"0.9;0.3;0.9\" dur=\"2.5s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ccircle cx=\"111\" cy=\"28\" r=\"2.2\" fill=\"#ff7eb3\" opacity=\".8\"\u003e\u003canimate attributename=\"opacity\" values=\"0.8;0.2;0.8\" dur=\"3s\" begin=\"0.4s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ccircle cx=\"129\" cy=\"28\" r=\"2.2\" fill=\"#ff7eb3\" opacity=\".8\"\u003e\u003canimate attributename=\"opacity\" values=\"0.8;0.2;0.8\" dur=\"3s\" begin=\"0.8s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n        \u003ccircle cx=\"120\" cy=\"20\" r=\"1.8\" fill=\"#ff4d88\" opacity=\".7\"\u003e\u003canimate attributename=\"opacity\" values=\"0.7;0.1;0.7\" dur=\"2s\" begin=\"0.2s\" repeatcount=\"indefinite\"\u003e\u003c\/animate\u003e\u003c\/circle\u003e\n      \u003c\/g\u003e\n      \u003cdefs\u003e\n        \u003clineargradient id=\"heroMask\" x1=\"12\" y1=\"45\" x2=\"228\" y2=\"95\" gradientunits=\"userSpaceOnUse\"\u003e\n          \u003cstop offset=\"0%\" stop-color=\"#ff7eb3\"\u003e\u003c\/stop\u003e\n          \u003cstop offset=\"100%\" stop-color=\"#ff4d88\"\u003e\u003c\/stop\u003e\n        \u003c\/lineargradient\u003e\n        \u003cradialgradient id=\"cupL\" cx=\"40%\" cy=\"35%\" r=\"55%\"\u003e\n          \u003cstop offset=\"0%\" stop-color=\"#cc2255\"\u003e\u003c\/stop\u003e\n          \u003cstop offset=\"100%\" stop-color=\"#881133\"\u003e\u003c\/stop\u003e\n        \u003c\/radialgradient\u003e\n        \u003cradialgradient id=\"cupR\" cx=\"60%\" cy=\"35%\" r=\"55%\"\u003e\n          \u003cstop offset=\"0%\" stop-color=\"#cc2255\"\u003e\u003c\/stop\u003e\n          \u003cstop offset=\"100%\" stop-color=\"#881133\"\u003e\u003c\/stop\u003e\n        \u003c\/radialgradient\u003e\n        \u003clineargradient id=\"strapL\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\" gradientunits=\"objectBoundingBox\"\u003e\n          \u003cstop offset=\"0%\" stop-color=\"#ff7eb3\"\u003e\u003c\/stop\u003e\n          \u003cstop offset=\"100%\" stop-color=\"#ff4d88\"\u003e\u003c\/stop\u003e\n        \u003c\/lineargradient\u003e\n        \u003clineargradient id=\"strapR\" x1=\"1\" y1=\"0\" x2=\"0\" y2=\"1\" gradientunits=\"objectBoundingBox\"\u003e\n          \u003cstop offset=\"0%\" stop-color=\"#ff4d88\"\u003e\u003c\/stop\u003e\n          \u003cstop offset=\"100%\" stop-color=\"#ff7eb3\"\u003e\u003c\/stop\u003e\n        \u003c\/lineargradient\u003e\n      \u003c\/defs\u003e\n    \u003c\/svg\u003e\n  \u003c\/div\u003e\n\n  \u003ch1\u003eNightBloom\u003cbr\u003e\u003cspan class=\"gradient-text\"\u003eSleep Mask\u003c\/span\u003e\n\u003c\/h1\u003e\n  \u003cp class=\"hero-sub\"\u003eRest like royalty. Wake up radiant. Designed for women who take their sleep as seriously as their skincare.\u003c\/p\u003e\n\n  \u003cdiv class=\"hero-btns\"\u003e\n    \u003ca href=\"#shop\" class=\"btn-primary\"\u003eShop Now\u003c\/a\u003e\n    \u003ca href=\"#features\" class=\"btn-ghost\"\u003eDiscover More\u003c\/a\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"scroll-hint\"\u003e\n    \u003cspan\u003eExplore\u003c\/span\u003e\n    \u003cdiv class=\"scroll-line\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- STATS STRIP --\u003e\n\u003cdiv class=\"stats-strip\"\u003e\n  \u003cdiv class=\"stats-grid\"\u003e\n    \u003cdiv class=\"stat-item\"\u003e\n\u003cdiv class=\"stat-number\"\u003e3D\u003c\/div\u003e\n\u003cdiv class=\"stat-label\"\u003eDeep Contour Cup\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-item\"\u003e\n\u003cdiv class=\"stat-number\"\u003e0\u003c\/div\u003e\n\u003cdiv class=\"stat-label\"\u003eEye Pressure\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-item\"\u003e\n\u003cdiv class=\"stat-number\"\u003e4\u003c\/div\u003e\n\u003cdiv class=\"stat-label\"\u003eColours\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003cdiv class=\"stat-item\"\u003e\n\u003cdiv class=\"stat-number\"\u003e360°\u003c\/div\u003e\n\u003cdiv class=\"stat-label\"\u003eAdjustable Fit\u003c\/div\u003e\n\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- FEATURES --\u003e\n\u003cdiv class=\"features-bg\" id=\"features\"\u003e\n  \u003cdiv class=\"section\"\u003e\n    \u003cspan class=\"section-label\"\u003eWhy You'll Love It\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eEngineered for \u003cspan class=\"gradient-text\"\u003eeffortless rest\u003c\/span\u003e\n\u003c\/h2\u003e\n    \u003cdiv class=\"features-grid\"\u003e\n      \u003cdiv class=\"feature-card\"\u003e\n        \u003cspan class=\"feature-icon\"\u003e🌙\u003c\/span\u003e\n        \u003cdiv class=\"feature-title\"\u003eZero Eye Pressure\u003c\/div\u003e\n        \u003cp class=\"feature-text\"\u003eThe 3D contour cup keeps fabric off your lids and lashes — protecting your extensions and eye makeup through every hour of sleep.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"feature-card\"\u003e\n        \u003cspan class=\"feature-icon\"\u003e🌸\u003c\/span\u003e\n        \u003cdiv class=\"feature-title\"\u003eMemory Foam Comfort\u003c\/div\u003e\n        \u003cp class=\"feature-text\"\u003eHigh-density slow-rebound foam moulds gently to your face for a perfect, pressure-free fit every single time you wear it.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"feature-card\"\u003e\n        \u003cspan class=\"feature-icon\"\u003e💨\u003c\/span\u003e\n        \u003cdiv class=\"feature-title\"\u003eAll-Night Breathability\u003c\/div\u003e\n        \u003cp class=\"feature-text\"\u003eThoughtfully woven breathable fabric keeps you cool and comfortable through the night — no more hot, stuffy eye masks.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"feature-card\"\u003e\n        \u003cspan class=\"feature-icon\"\u003e🎀\u003c\/span\u003e\n        \u003cdiv class=\"feature-title\"\u003eUniversal Fit\u003c\/div\u003e\n        \u003cp class=\"feature-text\"\u003eAdjustable elastic strap fits head sizes 18–26 inches — stays perfectly secure without pulling or flattening your hair.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- COLOURS --\u003e\n\u003cdiv class=\"colour-section\" id=\"colours\"\u003e\n  \u003cdiv class=\"section\"\u003e\n    \u003cspan class=\"section-label\"\u003eAvailable Colours\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eChoose your \u003cspan class=\"gradient-text\"\u003eshade of rest\u003c\/span\u003e\n\u003c\/h2\u003e\n    \u003cdiv class=\"colour-grid\"\u003e\n      \u003cdiv class=\"colour-item active\" data-name=\"Bloom Pink\" onclick=\"selectColour(this)\"\u003e\n        \u003cdiv class=\"colour-swatch\" style=\"background:linear-gradient(135deg,#ffb3ce,#ff4d88);\"\u003e\u003c\/div\u003e\n        \u003cspan class=\"colour-name\"\u003ePink\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"colour-item\" data-name=\"Midnight Black\" onclick=\"selectColour(this)\"\u003e\n        \u003cdiv class=\"colour-swatch\" style=\"background:linear-gradient(135deg,#3a3a3a,#111);\"\u003e\u003c\/div\u003e\n        \u003cspan class=\"colour-name\"\u003eBlack\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"colour-item\" data-name=\"Pebble Gray\" onclick=\"selectColour(this)\"\u003e\n        \u003cdiv class=\"colour-swatch\" style=\"background:linear-gradient(135deg,#c8c8c8,#8a8a8a);\"\u003e\u003c\/div\u003e\n        \u003cspan class=\"colour-name\"\u003eGray\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"colour-item\" data-name=\"Velvet Purple\" onclick=\"selectColour(this)\"\u003e\n        \u003cdiv class=\"colour-swatch\" style=\"background:linear-gradient(135deg,#b27cd4,#6a3fa0);\"\u003e\u003c\/div\u003e\n        \u003cspan class=\"colour-name\"\u003ePurple\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cp class=\"colour-tagline\" id=\"colourTag\"\u003eBloom Pink — delicate, dreamy, and completely you.\u003c\/p\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- LIFESTYLE SPLIT --\u003e\n\u003cdiv class=\"lifestyle-wrap\"\u003e\n  \u003cdiv class=\"lifestyle-inner\"\u003e\n    \u003cdiv class=\"lifestyle-visual\"\u003e\n      \u003cdiv class=\"lifestyle-emoji\"\u003e🌸\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"lifestyle-text\"\u003e\n      \u003ch3 class=\"lifestyle-quote\"\u003eYour sleep is the \u003cspan\u003eultimate\u003c\/span\u003e skincare routine.\u003c\/h3\u003e\n      \u003cp class=\"lifestyle-body\"\u003eThe NightBloom is your everywhere companion — night sleep, office naps, long-haul flights, or a lazy Sunday. It also makes the most beautiful, thoughtful gift for the woman who deserves a little extra luxury in her everyday.\u003c\/p\u003e\n      \u003ca href=\"#shop\" class=\"btn-primary\" style=\"align-self:flex-start; margin-top:0.5rem\"\u003eAdd to Cart\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- USE CASES --\u003e\n\u003cdiv class=\"use-section\"\u003e\n  \u003cdiv class=\"section\"\u003e\n    \u003cspan class=\"section-label\"\u003ePerfect For Every Moment\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eWherever \u003cspan class=\"gradient-text\"\u003erest finds you\u003c\/span\u003e\n\u003c\/h2\u003e\n    \u003cdiv class=\"use-grid\"\u003e\n      \u003cdiv class=\"use-pill\"\u003e✈️ Long-haul travel\u003c\/div\u003e\n      \u003cdiv class=\"use-pill\"\u003e🌙 Full night's sleep\u003c\/div\u003e\n      \u003cdiv class=\"use-pill\"\u003e☀️ Office power naps\u003c\/div\u003e\n      \u003cdiv class=\"use-pill\"\u003e🎁 Luxury gifting\u003c\/div\u003e\n      \u003cdiv class=\"use-pill\"\u003e💆 Meditation sessions\u003c\/div\u003e\n      \u003cdiv class=\"use-pill\"\u003e🧖 Spa days at home\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- TESTIMONIALS --\u003e\n\u003cdiv class=\"testi-bg\"\u003e\n  \u003cdiv style=\"max-width:1200px;margin:0 auto;padding:0 2rem;\"\u003e\n    \u003cspan class=\"section-label\"\u003eCustomer Love\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eReal women, \u003cspan class=\"gradient-text\"\u003ereal rest\u003c\/span\u003e\n\u003c\/h2\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"testi-track-wrap\"\u003e\n    \u003cdiv class=\"testi-track\" id=\"testiTrack\"\u003e\u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- SPECS --\u003e\n\u003cdiv class=\"specs-bg\" id=\"specs\"\u003e\n  \u003cdiv style=\"max-width:1200px;margin:0 auto;padding:0 2rem;\"\u003e\n    \u003cspan class=\"section-label\"\u003eSpecifications\u003c\/span\u003e\n    \u003ch2 class=\"section-title\"\u003eBuilt for \u003cspan class=\"gradient-text\"\u003eserious rest\u003c\/span\u003e\n\u003c\/h2\u003e\n    \u003cdiv class=\"spec-grid\"\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e3D\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eDeep Contour Design\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e4\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eColour Options\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e360°\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eAdjustable Strap\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e18–26\"\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eHead Size Fit\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e0g\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eEye Pressure\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n\u003cdiv class=\"spec-value\"\u003e100%\u003c\/div\u003e\n\u003cdiv class=\"spec-label\"\u003eBreathable Fabric\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003c!-- FINAL CTA --\u003e\n\u003cdiv class=\"final-cta\" id=\"shop\"\u003e\n  \u003cdiv class=\"final-cta-inner\"\u003e\n    \u003ch2\u003eTonight, you\u003cbr\u003esleep in luxury.\u003c\/h2\u003e\n    \u003cp\u003eNationwide shipping · Easy returns\u003cbr\u003eVyroShop™ Quality Guarantee\u003c\/p\u003e\n    \u003ca href=\"#\" class=\"btn-white\"\u003eORDER YOURS NOW\u003c\/a\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cfooter\u003e\n  \u003cp\u003e© 2025 \u003cspan\u003eVyroShop™\u003c\/span\u003e · vyroshop.co.za · Rest like royalty.\u003c\/p\u003e\n\u003c\/footer\u003e\n\n\u003cscript\u003e\n\/* ── SCROLL REVEAL ── *\/\nconst io = new IntersectionObserver((entries) =\u003e {\n  entries.forEach((e, i) =\u003e {\n    if (e.isIntersecting) {\n      setTimeout(() =\u003e e.target.classList.add('visible'), i * 90);\n    }\n  });\n}, { threshold: 0.1 });\n\ndocument.querySelectorAll(\n  '.feature-card, .colour-item, .stat-item, .lifestyle-inner, .final-cta-inner, .use-pill, .spec-item'\n).forEach(el =\u003e io.observe(el));\n\n\/* ── COLOUR SELECTOR ── *\/\nconst taglines = {\n  'Bloom Pink':     'Bloom Pink — delicate, dreamy, and completely you.',\n  'Midnight Black': 'Midnight Black — sleek, powerful, effortlessly chic.',\n  'Pebble Gray':    'Pebble Gray — calm, cool, and quietly refined.',\n  'Velvet Purple':  'Velvet Purple — bold, enchanting, unforgettable.',\n};\n\nfunction selectColour(el) {\n  document.querySelectorAll('.colour-item').forEach(i =\u003e i.classList.remove('active'));\n  el.classList.add('active');\n  const tag = document.getElementById('colourTag');\n  tag.style.opacity = 0;\n  setTimeout(() =\u003e {\n    tag.textContent = taglines[el.dataset.name] || el.dataset.name;\n    tag.style.opacity = 1;\n  }, 200);\n}\n\n\/* ── TESTIMONIALS ── *\/\nconst testimonials = [\n  { text: \"I finally stopped waking up with crease marks on my face. The 3D cup is a genuine game-changer.\", author: \"Thandi M., Johannesburg\" },\n  { text: \"My lash extensions are completely intact every morning. I'm absolutely obsessed.\", author: \"Lesego K., Pretoria\" },\n  { text: \"Bought one for myself and three as gifts. The packaging alone is so gorgeous.\", author: \"Simone R., Cape Town\" },\n  { text: \"I travel for work constantly. This is now non-negotiable in my carry-on bag.\", author: \"Nadia B., Durban\" },\n  { text: \"The memory foam fits my face so perfectly. I actually look forward to bedtime now.\", author: \"Kefilwe P., Sandton\" },\n  { text: \"Woke up without puffy eyes for the first time in years. Whatever's in this foam — it works.\", author: \"Aisha T., Centurion\" },\n];\nconst track = document.getElementById('testiTrack');\n[...testimonials, ...testimonials].forEach(t =\u003e {\n  const card = document.createElement('div');\n  card.className = 'testi-card';\n  card.innerHTML = `\n    \u003cdiv class=\"testi-stars\"\u003e★★★★★\u003c\/div\u003e\n    \u003cp class=\"testi-text\"\u003e\"${t.text}\"\u003c\/p\u003e\n    \u003cdiv class=\"testi-author\"\u003e${t.author}\u003c\/div\u003e\n  `;\n  track.appendChild(card);\n});\n\n\/* ── SMOOTH SCROLL ── *\/\ndocument.querySelectorAll('a[href^=\"#\"]').forEach(a =\u003e {\n  a.addEventListener('click', e =\u003e {\n    const id = a.getAttribute('href');\n    if (id === '#') return;\n    const el = document.querySelector(id);\n    if (el) { e.preventDefault(); el.scrollIntoView({ behavior: 'smooth' }); }\n  });\n});\n\u003c\/script\u003e\n\n\u003c\/body\u003e","brand":"Vyro Shop","offers":[{"title":"Pink","offer_id":52749355680025,"sku":null,"price":349.0,"currency_code":"ZAR","in_stock":true},{"title":"Black","offer_id":52749355712793,"sku":null,"price":349.0,"currency_code":"ZAR","in_stock":true},{"title":"Gray","offer_id":52749355745561,"sku":null,"price":349.0,"currency_code":"ZAR","in_stock":true},{"title":"Purple","offer_id":52749355778329,"sku":null,"price":349.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1009\/8881\/3593\/files\/eye-mask-strap-feature.png?v=1783887163"},{"product_id":"vyroshop™-auraglow-brush","title":"VyroShop™ AuraGlow Brush","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003ctitle\u003eVyroShop™ AuraGlow Brush\u003c\/title\u003e\n\u003cstyle\u003e\n  :root{\n    --blush: #f6c9d0;\n    --blush-deep: #e79aab;\n    --rose: #c96b86;\n    --rose-dark: #8a4560;\n    --cream: #fff7f5;\n    --ink: #3a2530;\n    --gold: #e8b98a;\n  }\n  *{box-sizing:border-box; margin:0; padding:0;}\n  html{scroll-behavior:smooth;}\n  body{\n    font-family: 'Helvetica Neue', Arial, sans-serif;\n    background: var(--cream);\n    color: var(--ink);\n    overflow-x:hidden;\n  }\n  @font-face{\n    font-family:'Display';\n  }\n  h1,h2,h3{\n    font-family: Georgia, 'Times New Roman', serif;\n    font-weight: 400;\n    letter-spacing: 0.5px;\n  }\n\n  \/* ---------- Ripple background ---------- *\/\n  .ripple-bg{\n    position:fixed; inset:0; z-index:-1;\n    background:\n      radial-gradient(circle at 20% 20%, var(--blush) 0%, transparent 45%),\n      radial-gradient(circle at 80% 30%, var(--gold) 0%, transparent 40%),\n      radial-gradient(circle at 50% 90%, var(--blush-deep) 0%, transparent 50%),\n      var(--cream);\n    opacity:0.5;\n  }\n\n  \/* ---------- HERO ---------- *\/\n  .hero{\n    min-height: 100vh;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    position:relative;\n    padding: 60px 20px;\n    text-align:center;\n    overflow:hidden;\n  }\n  .hero-content{\n    position:relative;\n    z-index:2;\n    max-width: 720px;\n  }\n  .eyebrow{\n    font-size:0.75rem;\n    letter-spacing:4px;\n    text-transform:uppercase;\n    color: var(--rose-dark);\n    opacity:0.8;\n    margin-bottom:18px;\n    display:inline-block;\n    border-bottom: 1px solid var(--rose-dark);\n    padding-bottom:6px;\n  }\n  .hero h1{\n    font-size: clamp(2.2rem, 6vw, 4rem);\n    color: var(--rose-dark);\n    line-height:1.1;\n    margin-bottom: 20px;\n  }\n  .hero h1 em{\n    font-style: italic;\n    color: var(--rose);\n  }\n  .hero p.tagline{\n    font-size: 1.15rem;\n    color: var(--ink);\n    opacity:0.75;\n    max-width: 480px;\n    margin: 0 auto 40px;\n  }\n\n  \/* Sonic device visual: pulsing brush with sonic rings *\/\n  .device-visual{\n    position: relative;\n    width: 220px;\n    height: 220px;\n    margin: 0 auto 40px;\n  }\n  .ring{\n    position:absolute;\n    inset:0;\n    border-radius:50%;\n    border: 2px solid var(--blush-deep);\n    opacity:0;\n    animation: sonic-pulse 2.4s ease-out infinite;\n  }\n  .ring:nth-child(2){ animation-delay: 0.6s; }\n  .ring:nth-child(3){ animation-delay: 1.2s; }\n  @keyframes sonic-pulse{\n    0%{ transform: scale(0.4); opacity:0.9; }\n    100%{ transform: scale(1.6); opacity:0; }\n  }\n  .device-core{\n    position:absolute;\n    top:50%; left:50%;\n    transform: translate(-50%,-50%);\n    width: 90px; height: 130px;\n    border-radius: 45px 45px 30px 30px;\n    background: linear-gradient(145deg, #ffffff, var(--blush));\n    box-shadow: 0 20px 40px rgba(201,107,134,0.35), inset 0 -6px 12px rgba(201,107,134,0.25);\n    display:flex;\n    align-items:flex-start;\n    justify-content:center;\n    padding-top:14px;\n    animation: float-device 3.5s ease-in-out infinite;\n  }\n  @keyframes float-device{\n    0%,100%{ transform: translate(-50%,-50%) rotate(-2deg); }\n    50%{ transform: translate(-50%,-54%) rotate(2deg); }\n  }\n  .bristles{\n    width: 56px; height: 30px;\n    border-radius: 50% 50% 8px 8px;\n    background: repeating-linear-gradient(90deg, var(--rose) 0 4px, var(--blush-deep) 4px 8px);\n    box-shadow: 0 4px 8px rgba(0,0,0,0.08);\n  }\n\n  .cta-row{\n    display:flex; gap:16px; justify-content:center; flex-wrap:wrap;\n  }\n  .btn{\n    border:none; cursor:pointer;\n    font-family: inherit;\n    font-size: 0.95rem;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    padding: 16px 36px;\n    border-radius: 999px;\n    transition: transform 0.25s ease, box-shadow 0.25s ease;\n  }\n  .btn-primary{\n    background: linear-gradient(120deg, var(--rose), var(--rose-dark));\n    color:#fff;\n    box-shadow: 0 10px 25px rgba(137,69,96,0.35);\n  }\n  .btn-primary:hover{\n    transform: translateY(-3px);\n    box-shadow: 0 14px 30px rgba(137,69,96,0.45);\n  }\n  .btn-secondary{\n    background: transparent;\n    border: 1.5px solid var(--rose-dark);\n    color: var(--rose-dark);\n  }\n  .btn-secondary:hover{\n    background: var(--rose-dark);\n    color:#fff;\n  }\n  .price-tag{\n    margin-top:22px;\n    font-size:0.85rem;\n    color: var(--rose-dark);\n    opacity:0.7;\n  }\n\n  .scroll-cue{\n    position:absolute; bottom: 30px; left:50%; transform:translateX(-50%);\n    font-size:0.7rem; letter-spacing:3px; text-transform:uppercase;\n    color: var(--rose-dark); opacity:0.6;\n    animation: bob 2s ease-in-out infinite;\n  }\n  @keyframes bob{\n    0%,100%{ transform: translate(-50%,0); }\n    50%{ transform: translate(-50%,8px); }\n  }\n\n  \/* ---------- SECTION shared ---------- *\/\n  section{\n    padding: 90px 24px;\n    max-width: 1100px;\n    margin: 0 auto;\n    position:relative;\n  }\n  .section-head{\n    text-align:center;\n    max-width:600px;\n    margin: 0 auto 60px;\n  }\n  .section-head .eyebrow{ margin-bottom:14px; }\n  .section-head h2{\n    font-size: clamp(1.8rem, 4vw, 2.6rem);\n    color: var(--rose-dark);\n  }\n\n  \/* ---------- BENEFITS ---------- *\/\n  .benefit-grid{\n    display:grid;\n    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));\n    gap: 26px;\n  }\n  .benefit-card{\n    background:#fff;\n    border-radius: 20px;\n    padding: 32px 26px;\n    box-shadow: 0 10px 30px rgba(201,107,134,0.08);\n    border: 1px solid rgba(201,107,134,0.12);\n    transition: transform 0.35s ease, box-shadow 0.35s ease;\n    cursor:default;\n  }\n  .benefit-card:hover{\n    transform: translateY(-8px);\n    box-shadow: 0 20px 40px rgba(201,107,134,0.2);\n  }\n  .benefit-icon{\n    width:56px; height:56px;\n    border-radius:16px;\n    background: linear-gradient(135deg, var(--blush), var(--gold));\n    display:flex; align-items:center; justify-content:center;\n    font-size: 1.6rem;\n    margin-bottom: 18px;\n    transition: transform 0.35s ease;\n  }\n  .benefit-card:hover .benefit-icon{\n    transform: rotate(-8deg) scale(1.08);\n  }\n  .benefit-card h3{\n    font-size: 1.05rem;\n    color: var(--rose-dark);\n    margin-bottom: 10px;\n  }\n  .benefit-card p{\n    font-size: 0.92rem;\n    line-height:1.55;\n    opacity:0.75;\n  }\n\n  \/* ---------- SPEC \/ INTERACTIVE DIAL ---------- *\/\n  .spec-section{\n    background: linear-gradient(180deg, transparent, rgba(246,201,208,0.35), transparent);\n    container-type: inline-size;\n  }\n  .spec-wrap{\n    display:grid;\n    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n    gap: 50px;\n    align-items:center;\n  }\n  .spec-wrap \u003e *{ min-width: 0; }\n  @container (max-width: 340px){\n    .spec-item{ display:block; }\n  }\n\n  .dial-area{\n    display:flex; flex-direction:column; align-items:center; gap: 24px;\n  }\n  .dial{\n    position:relative;\n    width: 210px; height:210px;\n    border-radius:50%;\n    background: radial-gradient(circle, #fff 60%, var(--blush) 100%);\n    box-shadow: 0 15px 40px rgba(201,107,134,0.25);\n    display:flex; align-items:center; justify-content:center;\n  }\n  .dial-inner{\n    width:150px; height:150px;\n    border-radius:50%;\n    background: #fff;\n    display:flex; flex-direction:column; align-items:center; justify-content:center;\n    box-shadow: inset 0 4px 10px rgba(0,0,0,0.06);\n  }\n  .dial-inner span.big{\n    font-size:1.9rem;\n    color: var(--rose-dark);\n    font-family: Georgia, serif;\n  }\n  .dial-inner span.small{\n    font-size:0.7rem;\n    letter-spacing:2px;\n    text-transform:uppercase;\n    opacity:0.6;\n    margin-top:4px;\n  }\n  .dial-vibrating{\n    animation: vibrate 0.14s linear infinite;\n  }\n  @keyframes vibrate{\n    0%{ transform: translate(0,0) rotate(0); }\n    25%{ transform: translate(1px,-1px) rotate(0.3deg); }\n    50%{ transform: translate(-1px,1px) rotate(-0.3deg); }\n    75%{ transform: translate(1px,1px) rotate(0.3deg); }\n    100%{ transform: translate(0,0) rotate(0); }\n  }\n  .speed-buttons{\n    display:flex; gap:10px;\n  }\n  .speed-btn{\n    width:44px; height:44px;\n    border-radius:50%;\n    border: 1.5px solid var(--rose-dark);\n    background:transparent;\n    color: var(--rose-dark);\n    font-size:0.95rem;\n    cursor:pointer;\n    transition: all 0.25s ease;\n  }\n  .speed-btn.active, .speed-btn:hover{\n    background: var(--rose-dark);\n    color:#fff;\n  }\n  .dial-caption{\n    font-size:0.85rem;\n    opacity:0.65;\n    text-align:center;\n    max-width: 260px;\n  }\n\n  .spec-list{\n    display:flex; flex-direction:column; gap: 22px;\n  }\n  .spec-item{\n    display:flex; gap:16px; align-items:flex-start;\n    padding-bottom: 18px;\n    border-bottom: 1px solid rgba(201,107,134,0.18);\n  }\n  .spec-item:last-child{ border-bottom:none; }\n  .spec-emoji{ font-size:1.4rem; }\n  .spec-item h4{\n    font-size:0.95rem;\n    color: var(--rose-dark);\n    margin-bottom:4px;\n    font-family: Georgia, serif;\n  }\n  .spec-item p{\n    font-size:0.88rem;\n    opacity:0.7;\n    line-height:1.5;\n  }\n\n  \/* ---------- BOX CONTENTS ---------- *\/\n  .box-section .section-head{ margin-bottom:50px; }\n  .box-grid{\n    display:flex;\n    justify-content:center;\n    gap: 30px;\n    flex-wrap:wrap;\n  }\n  .box-item{\n    background:#fff;\n    border-radius:18px;\n    padding: 28px;\n    width: 180px;\n    text-align:center;\n    box-shadow: 0 8px 24px rgba(201,107,134,0.1);\n    transition: transform 0.3s ease;\n  }\n  .box-item:hover{ transform: translateY(-6px) rotate(-1deg); }\n  .box-emoji{ font-size:2.2rem; margin-bottom:12px; }\n  .box-item p{ font-size:0.85rem; opacity:0.75; }\n\n  \/* ---------- FINAL CTA ---------- *\/\n  .final-cta{\n    text-align:center;\n    padding: 100px 24px 120px;\n    position:relative;\n  }\n  .final-cta h2{\n    font-size: clamp(1.9rem, 5vw, 3rem);\n    color: var(--rose-dark);\n    margin-bottom: 18px;\n  }\n  .final-cta p{\n    opacity:0.75;\n    max-width: 460px;\n    margin: 0 auto 36px;\n  }\n\n  footer{\n    text-align:center;\n    padding: 30px;\n    font-size:0.75rem;\n    letter-spacing:2px;\n    text-transform:uppercase;\n    color: var(--rose-dark);\n    opacity:0.55;\n  }\n\n  @media (prefers-reduced-motion: reduce){\n    *{ animation: none !important; transition: none !important; }\n  }\n\n  \/* ---------- MOBILE ---------- *\/\n  @media (max-width: 600px){\n    .hero{ min-height: 100svh; padding: 40px 16px; }\n    .device-visual{ width: 160px; height: 160px; margin-bottom: 28px; }\n    .device-core{ width: 66px; height: 96px; border-radius: 33px 33px 22px 22px; padding-top: 10px; }\n    .bristles{ width: 40px; height: 22px; }\n    .hero h1{ font-size: clamp(1.7rem, 8vw, 2.4rem); margin-bottom: 14px; }\n    .hero p.tagline{ font-size: 1rem; margin-bottom: 28px; }\n    .eyebrow{ font-size: 0.65rem; letter-spacing: 3px; }\n    .cta-row{ flex-direction: column; align-items: stretch; gap: 12px; }\n    .btn{ padding: 15px 24px; font-size: 0.85rem; width: 100%; }\n    .price-tag{ font-size: 0.78rem; margin-top: 18px; }\n    .scroll-cue{ display: none; }\n\n    section{ padding: 60px 18px; }\n    .section-head{ margin-bottom: 40px; }\n    .section-head h2{ font-size: 1.5rem; }\n\n    .benefit-grid{ grid-template-columns: 1fr; gap: 18px; }\n    .benefit-card{ padding: 24px 20px; }\n    .benefit-card:hover{ transform: none; }\n\n    .spec-wrap{ gap: 36px; }\n    .dial{ width: 170px; height: 170px; }\n    .dial-inner{ width: 120px; height: 120px; }\n    .dial-inner span.big{ font-size: 1.5rem; }\n    .speed-btn{ width: 40px; height: 40px; }\n\n    .box-grid{ gap: 16px; }\n    .box-item{ width: 44%; min-width: 130px; padding: 20px; }\n\n    .final-cta{ padding: 70px 18px 90px; }\n    .final-cta h2{ font-size: 1.7rem; }\n    .final-cta .btn{ width: auto; padding: 16px 32px; }\n  }\n\n  @media (max-width: 380px){\n    .hero h1{ font-size: 1.5rem; }\n    .device-visual{ width: 130px; height: 130px; }\n    .device-core{ width: 56px; height: 82px; }\n  }\n\u003c\/style\u003e\n\n\n\n\u003cdiv class=\"ripple-bg\"\u003e\u003c\/div\u003e\n\n\u003c!-- HERO --\u003e\n\u003csection class=\"hero\"\u003e\n  \u003cdiv class=\"hero-content\"\u003e\n    \u003cspan class=\"eyebrow\"\u003eVyroShop™ Skincare\u003c\/span\u003e\n    \u003cdiv class=\"device-visual\"\u003e\n      \u003cdiv class=\"ring\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"ring\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"ring\"\u003e\u003c\/div\u003e\n      \u003cdiv class=\"device-core\"\u003e\n        \u003cdiv class=\"bristles\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003ch1\u003eThe \u003cem\u003eAuraGlow\u003c\/em\u003e\u003cbr\u003eSonic Cleansing Brush\u003c\/h1\u003e\n    \u003cp class=\"tagline\"\u003eTurn your daily cleanse into a spa ritual. Gentle sonic vibrations, ultra-soft silicone, visibly clearer skin.\u003c\/p\u003e\n    \u003cdiv class=\"cta-row\"\u003e\n      \u003cbutton class=\"btn btn-primary\" onclick=\"document.getElementById('order').scrollIntoView({behavior:'smooth'})\"\u003eShop the Brush\u003c\/button\u003e\n      \u003cbutton class=\"btn btn-secondary\" onclick=\"document.getElementById('benefits').scrollIntoView({behavior:'smooth'})\"\u003eSee Benefits\u003c\/button\u003e\n    \u003c\/div\u003e\n    \u003cp class=\"price-tag\"\u003e60–90 min fast charge · Up to 30 days of use\u003c\/p\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"scroll-cue\"\u003eScroll to explore ↓\u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- BENEFITS --\u003e\n\u003csection id=\"benefits\"\u003e\n  \u003cdiv class=\"section-head\"\u003e\n    \u003cspan class=\"eyebrow\"\u003eWhy your skin will love it\u003c\/span\u003e\n    \u003ch2\u003eFour ways it transforms your routine\u003c\/h2\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"benefit-grid\"\u003e\n    \u003cdiv class=\"benefit-card\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e🫧\u003c\/div\u003e\n      \u003ch3\u003eDeep Pore Cleansing\u003c\/h3\u003e\n      \u003cp\u003eRemoves up to 99.5% of dirt, oil and makeup buildup that hand-washing leaves behind.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"benefit-card\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e🎯\u003c\/div\u003e\n      \u003ch3\u003eBlemish \u0026amp; Breakout Control\u003c\/h3\u003e\n      \u003cp\u003eGently unclogs pores, helping reduce blackheads, whiteheads and uneven texture over time.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"benefit-card\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e💆🏽‍♀️\u003c\/div\u003e\n      \u003ch3\u003eEnhanced Absorption\u003c\/h3\u003e\n      \u003cp\u003eBoosts micro-circulation so your serums and moisturisers sink deeper and work harder.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"benefit-card\"\u003e\n      \u003cdiv class=\"benefit-icon\"\u003e🌿\u003c\/div\u003e\n      \u003ch3\u003eUltra-Hygienic Silicone\u003c\/h3\u003e\n      \u003cp\u003e35x more hygienic than nylon brushes — resists bacteria and stays gentle on sensitive skin.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- SPECS + INTERACTIVE DIAL --\u003e\n\u003csection class=\"spec-section\"\u003e\n  \u003cdiv class=\"section-head\"\u003e\n    \u003cspan class=\"eyebrow\"\u003eKey Features\u003c\/span\u003e\n    \u003ch2\u003eBuilt for real routines\u003c\/h2\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"spec-wrap\"\u003e\n    \u003cdiv class=\"dial-area\"\u003e\n      \u003cdiv class=\"dial\"\u003e\n        \u003cdiv class=\"dial-inner\" id=\"dialInner\"\u003e\n          \u003cspan class=\"big\" id=\"speedLabel\"\u003eSoft\u003c\/span\u003e\n          \u003cspan class=\"small\"\u003eSonic Mode\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"speed-buttons\"\u003e\n        \u003cbutton class=\"speed-btn active\" onclick=\"setSpeed(0,this)\"\u003e1\u003c\/button\u003e\n        \u003cbutton class=\"speed-btn\" onclick=\"setSpeed(1,this)\"\u003e2\u003c\/button\u003e\n        \u003cbutton class=\"speed-btn\" onclick=\"setSpeed(2,this)\"\u003e3\u003c\/button\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"dial-caption\"\u003eTap a speed to feel the difference — from a soothing cleanse to a deep T-zone exfoliation.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"spec-list\"\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n        \u003cspan class=\"spec-emoji\"\u003e🎛️\u003c\/span\u003e\n        \u003cdiv\u003e\n          \u003ch4\u003eCustom Intensity\u003c\/h4\u003e\n          \u003cp\u003eMulti-speed sonic vibration settings for every skin mood.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n        \u003cspan class=\"spec-emoji\"\u003e🚿\u003c\/span\u003e\n        \u003cdiv\u003e\n          \u003ch4\u003e100% IPX7 Waterproof\u003c\/h4\u003e\n          \u003cp\u003eFully sealed design — safe to use right in the shower or bath.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n        \u003cspan class=\"spec-emoji\"\u003e👜\u003c\/span\u003e\n        \u003cdiv\u003e\n          \u003ch4\u003eErgonomic \u0026amp; Travel-Ready\u003c\/h4\u003e\n          \u003cp\u003eSlides effortlessly into your handbag or travel bag.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n        \u003cspan class=\"spec-emoji\"\u003e🔋\u003c\/span\u003e\n        \u003cdiv\u003e\n          \u003ch4\u003eFast USB Charging\u003c\/h4\u003e\n          \u003cp\u003eFull charge in 60–90 minutes for up to 30 days of daily use.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"spec-item\"\u003e\n        \u003cspan class=\"spec-emoji\"\u003e📐\u003c\/span\u003e\n        \u003cdiv\u003e\n          \u003ch4\u003eCompact Dimensions\u003c\/h4\u003e\n          \u003cp\u003e145 mm × 50 mm × 30 mm — lightweight at just ~85g.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- BOX CONTENTS --\u003e\n\u003csection class=\"box-section\"\u003e\n  \u003cdiv class=\"section-head\"\u003e\n    \u003cspan class=\"eyebrow\"\u003eUnboxing\u003c\/span\u003e\n    \u003ch2\u003eWhat's in the box\u003c\/h2\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"box-grid\"\u003e\n    \u003cdiv class=\"box-item\"\u003e\n      \u003cdiv class=\"box-emoji\"\u003e💜\u003c\/div\u003e\n      \u003cp\u003e1x VyroShop™ AuraGlow Brush\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"box-item\"\u003e\n      \u003cdiv class=\"box-emoji\"\u003e🔌\u003c\/div\u003e\n      \u003cp\u003e1x USB Charging Cable\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"box-item\"\u003e\n      \u003cdiv class=\"box-emoji\"\u003e📖\u003c\/div\u003e\n      \u003cp\u003e1x User Manual\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- FINAL CTA --\u003e\n\u003csection class=\"final-cta\" id=\"order\"\u003e\n  \u003ch2\u003eReady to glow?\u003c\/h2\u003e\n  \u003cp\u003eJoin the growing number of South African women upgrading their skincare ritual with AuraGlow.\u003c\/p\u003e\n  \u003cbutton class=\"btn btn-primary\" onclick=\"window.location.href='https:\/\/vyroshop.co.za\/cart\/52927086395673:1'\"\u003eGet Your AuraGlow Brush — R429\u003c\/button\u003e\n\u003c\/section\u003e\n\n\u003cfooter\u003eVyroShop™ · Self-Care, Reimagined\u003c\/footer\u003e\n\n\u003cscript\u003e\n  const labels = ['Soft', 'Medium', 'Deep'];\n  function setSpeed(i, el){\n    document.querySelectorAll('.speed-btn').forEach(b =\u003e b.classList.remove('active'));\n    el.classList.add('active');\n    document.getElementById('speedLabel').textContent = labels[i];\n    const dialInner = document.getElementById('dialInner');\n    dialInner.classList.remove('dial-vibrating');\n    void dialInner.offsetWidth; \/\/ restart animation\n    dialInner.classList.add('dial-vibrating');\n    setTimeout(() =\u003e dialInner.classList.remove('dial-vibrating'), 900 + i*300);\n  }\n\u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Vyro Shop","offers":[{"title":"Default Title","offer_id":52927086395673,"sku":null,"price":429.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1009\/8881\/3593\/files\/Gemini_Generated_Image_rwvosrrwvosrrwvo.png?v=1785597034"},{"product_id":"vyroshop™-lunarclear-spot-patches","title":"VyroShop™ LunarClear Spot Patches","description":"\u003cbody\u003e\n\n\n\u003cmeta charset=\"UTF-8\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003ctitle\u003eVyroShop™ Pimple Patches\u003c\/title\u003e\n\u003cstyle\u003e\n  :root{\n    --blush:#f7c6d9;\n    --blush-dark:#e88bb0;\n    --blush-deep:#d4638f;\n    --rose-gold:#e8b4a8;\n    --cream:#fff7f9;\n    --plum:#5c2a3d;\n    --shadow:rgba(212,99,143,0.25);\n  }\n  *{margin:0;padding:0;box-sizing:border-box;}\n  html{\n    overflow-x:hidden;\n    width:100%;\n  }\n  body{\n    font-family:'Segoe UI',system-ui,-apple-system,sans-serif;\n    background:linear-gradient(160deg,#fff0f5 0%,#ffe4ee 40%,#ffd6e8 100%);\n    color:var(--plum);\n    overflow-x:hidden;\n    width:100%;\n    min-height:100vh;\n    position:relative;\n  }\n\n  \/* floating sparkles background *\/\n  .sparkle{\n    position:fixed;\n    pointer-events:none;\n    opacity:0.5;\n    animation:float 8s ease-in-out infinite;\n    font-size:1.4rem;\n    z-index:0;\n  }\n  @keyframes float{\n    0%,100%{transform:translateY(0) rotate(0deg);}\n    50%{transform:translateY(-30px) rotate(20deg);}\n  }\n\n  .container{\n    max-width:900px;\n    margin:0 auto;\n    padding:40px 24px 100px;\n    position:relative;\n    z-index:1;\n  }\n\n  \/* HERO *\/\n  .hero{\n    text-align:center;\n    padding:50px 20px 40px;\n    animation:fadeInDown 1s ease both;\n  }\n  @keyframes fadeInDown{\n    from{opacity:0;transform:translateY(-30px);}\n    to{opacity:1;transform:translateY(0);}\n  }\n  .hero h1{\n    font-size:clamp(2rem,5vw,3.2rem);\n    background:linear-gradient(90deg,var(--blush-deep),var(--rose-gold),var(--blush-dark));\n    background-size:200% auto;\n    -webkit-background-clip:text;\n    background-clip:text;\n    color:transparent;\n    animation:shimmer 4s linear infinite;\n    font-weight:800;\n    letter-spacing:-0.5px;\n  }\n  @keyframes shimmer{\n    to{background-position:200% center;}\n  }\n  .hero p{\n    max-width:640px;\n    margin:20px auto 0;\n    font-size:1.05rem;\n    line-height:1.7;\n    color:#7a4a5c;\n  }\n  .logo-badge{\n    display:inline-block;\n    background:var(--plum);\n    color:var(--cream);\n    padding:6px 18px;\n    border-radius:30px;\n    font-size:0.8rem;\n    letter-spacing:2px;\n    text-transform:uppercase;\n    margin-bottom:18px;\n    animation:pulse 2.5s ease-in-out infinite;\n  }\n  @keyframes pulse{\n    0%,100%{box-shadow:0 0 0 0 var(--shadow);}\n    50%{box-shadow:0 0 0 10px rgba(212,99,143,0);}\n  }\n\n  \/* SECTION CARD *\/\n  .card{\n    background:rgba(255,255,255,0.7);\n    backdrop-filter:blur(10px);\n    border:1px solid rgba(255,255,255,0.6);\n    border-radius:24px;\n    padding:36px;\n    margin:28px 0;\n    box-shadow:0 10px 30px var(--shadow);\n    opacity:0;\n    transform:translateY(40px);\n    transition:opacity 0.7s ease, transform 0.7s ease;\n  }\n  .card.visible{\n    opacity:1;\n    transform:translateY(0);\n  }\n  .card h2{\n    font-size:1.6rem;\n    color:var(--blush-deep);\n    margin-bottom:20px;\n    display:flex;\n    align-items:center;\n    gap:10px;\n  }\n\n  \/* FEATURE GRID *\/\n  .features{\n    display:grid;\n    grid-template-columns:repeat(auto-fit,minmax(240px,1fr));\n    gap:18px;\n  }\n  .feature{\n    background:linear-gradient(135deg,#fff,#ffeef4);\n    border-radius:18px;\n    padding:20px;\n    border:1px solid var(--blush);\n    transition:transform 0.35s ease, box-shadow 0.35s ease, background 0.35s ease;\n    cursor:default;\n  }\n  .feature:hover{\n    transform:translateY(-8px) scale(1.02);\n    box-shadow:0 14px 28px var(--shadow);\n    background:linear-gradient(135deg,#ffeef4,#ffd9e8);\n  }\n  .feature .icon{\n    font-size:1.8rem;\n    display:inline-block;\n    margin-bottom:10px;\n    transition:transform 0.4s ease;\n  }\n  .feature:hover .icon{\n    transform:rotate(-10deg) scale(1.2);\n  }\n  .feature h3{\n    font-size:1.02rem;\n    margin-bottom:6px;\n    color:var(--plum);\n  }\n  .feature p{\n    font-size:0.9rem;\n    color:#8a5a6b;\n    line-height:1.5;\n  }\n\n  \/* INGREDIENTS - flip cards *\/\n  .ingredients{\n    display:grid;\n    grid-template-columns:repeat(auto-fit,minmax(220px,1fr));\n    gap:20px;\n  }\n  .flip-card{\n    perspective:1000px;\n    height:180px;\n  }\n  .flip-inner{\n    position:relative;\n    width:100%;\n    height:100%;\n    transition:transform 0.7s;\n    transform-style:preserve-3d;\n  }\n  .flip-card:hover .flip-inner,\n  .flip-card.flipped .flip-inner{\n    transform:rotateY(180deg);\n  }\n  .flip-card{cursor:pointer;}\n  .flip-front,.flip-back{\n    position:absolute;\n    width:100%;\n    height:100%;\n    backface-visibility:hidden;\n    border-radius:16px;\n    display:flex;\n    flex-direction:column;\n    align-items:center;\n    justify-content:center;\n    padding:16px;\n    text-align:center;\n  }\n  .flip-front{\n    background:linear-gradient(135deg,var(--blush),var(--rose-gold));\n    color:var(--plum);\n  }\n  .flip-front .icon{font-size:2.2rem;margin-bottom:8px;}\n  .flip-back{\n    background:var(--plum);\n    color:#ffeaf1;\n    transform:rotateY(180deg);\n    font-size:0.85rem;\n    line-height:1.5;\n  }\n\n  \/* HOW TO USE - stepper *\/\n  .steps{\n    display:flex;\n    flex-direction:column;\n    gap:14px;\n  }\n  .step{\n    display:flex;\n    align-items:flex-start;\n    gap:16px;\n    background:#fff;\n    border-radius:16px;\n    padding:16px 18px;\n    border-left:4px solid var(--blush-dark);\n    cursor:pointer;\n    transition:all 0.3s ease;\n  }\n  .step:hover{\n    border-left-color:var(--plum);\n    transform:translateX(6px);\n  }\n  .step-num{\n    flex:0 0 auto;\n    width:36px;height:36px;\n    border-radius:50%;\n    background:linear-gradient(135deg,var(--blush-dark),var(--rose-gold));\n    color:#fff;\n    display:flex;align-items:center;justify-content:center;\n    font-weight:700;\n  }\n  .step-text h4{\n    margin-bottom:4px;\n    color:var(--blush-deep);\n  }\n  .step-text p{\n    font-size:0.9rem;\n    color:#7a4a5c;\n  }\n\n  \/* SPECS *\/\n  .specs{\n    display:grid;\n    grid-template-columns:repeat(auto-fit,minmax(200px,1fr));\n    gap:16px;\n  }\n  .spec{\n    background:#fff;\n    border-radius:14px;\n    padding:16px;\n    text-align:center;\n    border:1px dashed var(--blush-dark);\n  }\n  .spec .icon{font-size:1.6rem;margin-bottom:6px;}\n  .spec p{font-size:0.85rem;color:#7a4a5c;}\n\n  \/* CTA *\/\n  .cta-wrap{\n    text-align:center;\n    margin-top:40px;\n  }\n  .cta-btn{\n    position:relative;\n    overflow:hidden;\n    background:linear-gradient(135deg,var(--blush-deep),var(--blush-dark));\n    color:#fff;\n    border:none;\n    padding:18px 44px;\n    font-size:1.1rem;\n    font-weight:700;\n    border-radius:50px;\n    cursor:pointer;\n    box-shadow:0 10px 24px var(--shadow);\n    transition:transform 0.25s ease, box-shadow 0.25s ease;\n    animation:bob 2.4s ease-in-out infinite;\n  }\n  @keyframes bob{\n    0%,100%{transform:translateY(0);}\n    50%{transform:translateY(-6px);}\n  }\n  .cta-btn:hover{\n    transform:translateY(-4px) scale(1.05);\n    box-shadow:0 16px 32px var(--shadow);\n  }\n  .cta-btn:active{\n    transform:scale(0.96);\n  }\n  .cta-btn .ripple{\n    position:absolute;\n    border-radius:50%;\n    background:rgba(255,255,255,0.5);\n    transform:scale(0);\n    animation:ripple-anim 0.6s linear;\n    pointer-events:none;\n  }\n  @keyframes ripple-anim{\n    to{transform:scale(4);opacity:0;}\n  }\n  .cta-sub{\n    margin-top:14px;\n    font-size:0.85rem;\n    color:#a05a75;\n  }\n\n  .toast{\n    position:fixed;\n    bottom:30px;\n    left:50%;\n    transform:translateX(-50%) translateY(100px);\n    background:var(--plum);\n    color:#ffeaf1;\n    padding:14px 28px;\n    border-radius:40px;\n    font-size:0.95rem;\n    box-shadow:0 10px 30px rgba(0,0,0,0.2);\n    transition:transform 0.4s cubic-bezier(.68,-0.55,.27,1.55);\n    z-index:50;\n  }\n  .toast.show{\n    transform:translateX(-50%) translateY(0);\n  }\n\n  @media(max-width:600px){\n    .card{padding:20px;}\n    .hero{padding:30px 10px 24px;}\n    .flip-card{height:210px;}\n    .flip-back{font-size:0.82rem;padding:14px;}\n    .cta-btn{padding:16px 30px;font-size:1rem;}\n    .sparkle{font-size:1rem;}\n    .steps .step{padding:14px;}\n  }\n\n  \/* touch device tap feedback since hover doesn't fire on mobile *\/\n  @media(hover:none){\n    .cta-btn:active{transform:scale(0.95);}\n    .feature:active{\n      transform:translateY(-4px) scale(1.01);\n      background:linear-gradient(135deg,#ffeef4,#ffd9e8);\n    }\n    .step:active{transform:translateX(4px);border-left-color:var(--plum);}\n  }\n\u003c\/style\u003e\n\n\n\n\u003cdiv class=\"container\"\u003e\n\n  \u003cdiv class=\"hero\"\u003e\n    \u003cspan class=\"logo-badge\"\u003eVyroShop™\u003c\/span\u003e\n    \u003ch1\u003eRadiant Glow, Fast Results ✨\u003c\/h1\u003e\n    \u003cp\u003eTransform your skincare routine with VyroShop™ Pimple Patches — designed to target breakouts overnight while pampering your skin with botanical and clinical care. Medical-grade hydrocolloid meets powerful actives to pull out impurities, soothe inflammation, and restore your skin's natural clarity in as little as 8 hours. 💜🌿\u003c\/p\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"card\"\u003e\n    \u003ch2\u003e💎 Why You'll Love It\u003c\/h2\u003e\n    \u003cdiv class=\"features\"\u003e\n      \u003cdiv class=\"feature\"\u003e\n\u003cspan class=\"icon\"\u003e✨\u003c\/span\u003e\u003ch3\u003eRapid 8-Hour Transformation\u003c\/h3\u003e\n\u003cp\u003eVisibly reduces the appearance of pimples and calms redness while you sleep or go about your day.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"feature\"\u003e\n\u003cspan class=\"icon\"\u003e🌿\u003c\/span\u003e\u003ch3\u003eTriple-Active Formula\u003c\/h3\u003e\n\u003cp\u003eTea Tree Oil to soothe, Salicylic Acid to unclog pores, Hydrocolloid to absorb fluids.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"feature\"\u003e\n\u003cspan class=\"icon\"\u003e💧\u003c\/span\u003e\u003ch3\u003eWaterproof \u0026amp; Seamless\u003c\/h3\u003e\n\u003cp\u003eUltra-thin, transparent design blends into all skin tones — wear it anywhere, comfortably.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"feature\"\u003e\n\u003cspan class=\"icon\"\u003e🛡️\u003c\/span\u003e\u003ch3\u003eHypoallergenic \u0026amp; Gentle\u003c\/h3\u003e\n\u003cp\u003eFormulated for all skin types, including sensitive skin. Protects blemishes from touch and dirt.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"feature\"\u003e\n\u003cspan class=\"icon\"\u003e🌸\u003c\/span\u003e\u003ch3\u003ePerforated \u0026amp; Easy to Peel\u003c\/h3\u003e\n\u003cp\u003eHygiene-first design for effortless, mess-free application without creasing.\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"card\"\u003e\n    \u003ch2\u003e🧪 The Power Ingredients\u003c\/h2\u003e\n    \u003cp style=\"margin-bottom:16px;color:#8a5a6b;font-size:0.9rem;\"\u003eHover a card to flip it and reveal what each ingredient does.\u003c\/p\u003e\n    \u003cdiv class=\"ingredients\"\u003e\n      \u003cdiv class=\"flip-card\"\u003e\n        \u003cdiv class=\"flip-inner\"\u003e\n          \u003cdiv class=\"flip-front\"\u003e\n\u003cspan class=\"icon\"\u003e💧\u003c\/span\u003e\u003cstrong\u003eHydrocolloid\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"flip-back\"\u003eCreates a protected healing environment that draws out pus, oil and impurities — without drying surrounding skin.\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"flip-card\"\u003e\n        \u003cdiv class=\"flip-inner\"\u003e\n          \u003cdiv class=\"flip-front\"\u003e\n\u003cspan class=\"icon\"\u003e🍃\u003c\/span\u003e\u003cstrong\u003eTea Tree Oil\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"flip-back\"\u003eA natural botanical extract known for calming, antibacterial properties that reduce redness and swelling.\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"flip-card\"\u003e\n        \u003cdiv class=\"flip-inner\"\u003e\n          \u003cdiv class=\"flip-front\"\u003e\n\u003cspan class=\"icon\"\u003e🧪\u003c\/span\u003e\u003cstrong\u003eSalicylic Acid\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"flip-back\"\u003eA gentle BHA that penetrates deep into pores to dissolve buildup and prevent future breakouts.\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"card\"\u003e\n    \u003ch2\u003e💆🏽‍♀️ How to Use\u003c\/h2\u003e\n    \u003cdiv class=\"steps\"\u003e\n      \u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-num\"\u003e1\u003c\/div\u003e\n\u003cdiv class=\"step-text\"\u003e\n\u003ch4\u003eCleanse\u003c\/h4\u003e\n\u003cp\u003eWash and thoroughly dry the targeted area. Pair with your VyroShop Facial Cleansing Brush for best results.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-num\"\u003e2\u003c\/div\u003e\n\u003cdiv class=\"step-text\"\u003e\n\u003ch4\u003eApply\u003c\/h4\u003e\n\u003cp\u003ePeel a patch from the perforated sheet and gently press it over the blemish.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"step\"\u003e\n\u003cdiv class=\"step-num\"\u003e3\u003c\/div\u003e\n\u003cdiv class=\"step-text\"\u003e\n\u003ch4\u003eGlow\u003c\/h4\u003e\n\u003cp\u003eLeave on for 6–8 hours (or overnight). Remove once the patch turns white, revealing clearer, smoother skin! 💫\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"card\"\u003e\n    \u003ch2\u003e📦 Product Specifications\u003c\/h2\u003e\n    \u003cdiv class=\"specs\"\u003e\n      \u003cdiv class=\"spec\"\u003e\n\u003cdiv class=\"icon\"\u003e🩹\u003c\/div\u003e\n\u003cp\u003e100 multi-size circular hydrocolloid patches\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec\"\u003e\n\u003cdiv class=\"icon\"\u003e🐰\u003c\/div\u003e\n\u003cp\u003eAll skin types — dermatologist-inspired \u0026amp; cruelty-free\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cdiv class=\"spec\"\u003e\n\u003cdiv class=\"icon\"\u003e🌬️\u003c\/div\u003e\n\u003cp\u003eBreathable, non-drying, waterproof, invisible finish\u003c\/p\u003e\n\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"cta-wrap\"\u003e\n    \u003cbutton class=\"cta-btn\" id=\"ctaBtn\"\u003e🛍️ Add to Cart \u0026amp; Experience the Glow\u003c\/button\u003e\n    \u003cp class=\"cta-sub\"\u003eElevate your self-care ritual with skin clarity that shines ✨\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\u003cdiv class=\"toast\" id=\"toast\"\u003e💜 Added to cart — your glow-up starts tonight!\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/\/ floating sparkles\n  const emojis = ['✨','💜','🌸','💧','🌿'];\n  for(let i=0;i\u003c16;i++){\n    const s = document.createElement('div');\n    s.className='sparkle';\n    s.textContent = emojis[Math.floor(Math.random()*emojis.length)];\n    s.style.left = Math.random()*100+'vw';\n    s.style.top = Math.random()*100+'vh';\n    s.style.animationDelay = (Math.random()*5)+'s';\n    s.style.animationDuration = (6+Math.random()*6)+'s';\n    document.body.appendChild(s);\n  }\n\n  \/\/ tap-to-flip for touch devices (hover doesn't exist on mobile)\n  document.querySelectorAll('.flip-card').forEach(card=\u003e{\n    card.addEventListener('click', ()=\u003e{\n      card.classList.toggle('flipped');\n    });\n  });\n\n  \/\/ scroll reveal\n  const cards = document.querySelectorAll('.card');\n  const observer = new IntersectionObserver((entries)=\u003e{\n    entries.forEach(e=\u003e{\n      if(e.isIntersecting){\n        e.target.classList.add('visible');\n      }\n    });\n  },{threshold:0.15});\n  cards.forEach(c=\u003eobserver.observe(c));\n\n  \/\/ CTA ripple + toast\n  const ctaBtn = document.getElementById('ctaBtn');\n  const toast = document.getElementById('toast');\n  ctaBtn.addEventListener('click', function(e){\n    const rect = ctaBtn.getBoundingClientRect();\n    const ripple = document.createElement('span');\n    ripple.className='ripple';\n    const size = Math.max(rect.width, rect.height);\n    ripple.style.width = ripple.style.height = size+'px';\n    ripple.style.left = (e.clientX - rect.left - size\/2)+'px';\n    ripple.style.top = (e.clientY - rect.top - size\/2)+'px';\n    ctaBtn.appendChild(ripple);\n    setTimeout(()=\u003eripple.remove(),600);\n\n    toast.classList.add('show');\n\n    \/\/ add to real Shopify cart, then redirect to checkout\n    const variantId = '52929660682521';\n    setTimeout(()=\u003e{\n      window.location.href = 'https:\/\/vyroshop.co.za\/cart\/add?id=' + variantId + '\u0026quantity=1';\n    }, 700);\n  });\n\u003c\/script\u003e\n\n\n\u003c\/body\u003e","brand":"Vyro Shop","offers":[{"title":"Default Title","offer_id":52929660682521,"sku":null,"price":89.0,"currency_code":"ZAR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1009\/8881\/3593\/files\/vyro-shop-pimple-patches-100-pieces.png?v=1785699902"}],"url":"https:\/\/vyroshop.co.za\/collections\/you-might-also-like.oembed","provider":"Vyro Shop","version":"1.0","type":"link"}