{"product_id":"batman-versus-superman-deluxe-version","title":"Batman Versus Superman (Deluxe Version)","description":"\u003cstyle\u003e\n  :root {\n    --afb-bg-main: #ffffff;\n    --afb-bg-secondary: #fafafc;\n    --afb-card-border: #eaeaea;\n    --afb-accent-gold: #c59b27;\n    --afb-accent-red: #e11d48;\n    --afb-accent-purple: #4a2366;\n    --afb-text-main: #1f2937;\n    --afb-text-muted: #4b5563;\n  }\n  .afb-scroll-reveal, .afb-title-wow {\n    opacity: 1;\n    transform: translateY(0);\n    transition: opacity 0.8s cubic-bezier(0.25, 0.8, 0.25, 1), transform 0.8s cubic-bezier(0.25, 0.8, 0.25, 1);\n  }\n  .afb-title-wow {\n    background: linear-gradient(to right, #37174f 20%, #d4b5e0 40%, #d4b5e0 60%, #37174f 80%);\n    background-size: 200% auto;\n    background-position: 200% center;\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    color: transparent;\n    display: inline-block;\n  }\n  .is-ready-for-scroll .afb-scroll-reveal { opacity: 0; transform: translateY(30px); }\n  .is-ready-for-scroll .afb-title-wow { opacity: 0; transform: translateY(20px); }\n  .is-ready-for-scroll .afb-scroll-reveal.is-visible { opacity: 1; transform: translateY(0); }\n  .is-ready-for-scroll .afb-title-wow.is-visible {\n    opacity: 1; transform: translateY(0);\n    animation: afbShineSweepLoop 9s cubic-bezier(0.25, 0.8, 0.25, 1) 0.3s infinite;\n  }\n  .afb-waitlist-card {\n    background: linear-gradient(135deg, #fffbeb 0%, #ffffff 52%, #f5f3ff 100%);\n    border: 1px solid #eadcf5;\n    border-left: 4px solid #37174f;\n    border-radius: 14px;\n    padding: 18px 20px;\n    margin: 0 0 18px 0;\n    box-shadow: 0 8px 22px rgba(55,23,79,0.08);\n    transition: all 0.3s ease;\n  }\n  .afb-waitlist-card:hover {\n    transform: translateY(-2px);\n    border-color: #d4b5e0;\n    box-shadow: 0 12px 28px rgba(55,23,79,0.12);\n  }\n  .afb-waitlist-title {\n    font-size: 16px;\n    font-weight: 900;\n    color: #37174f;\n    margin-bottom: 6px;\n  }\n  .afb-waitlist-desc {\n    font-size: 13px;\n    color: #5b5563;\n    line-height: 1.75;\n  }\n  .afb-waitlist-desc strong {\n    color: #37174f;\n    font-weight: 900;\n  }\n  .afb-midnight-vip-card {\n    width: 100%;\n    background: linear-gradient(135deg, #2d1641 0%, #150920 100%);\n    border: 1px solid rgba(183, 132, 199, 0.3);\n    border-radius: 16px;\n    padding: 24px 20px;\n    margin: 0 0 24px 0;\n    box-shadow: 0 16px 40px rgba(45, 22, 65, 0.25), inset 0 1px 0 rgba(255,255,255,0.05);\n    transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);\n    position: relative;\n    overflow: hidden;\n    box-sizing: border-box;\n    animation: afbMidnightCardPulse 3s infinite alternate;\n  }\n  .afb-midnight-vip-card::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: -150%;\n    width: 60%;\n    height: 100%;\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.08) 50%, rgba(255,255,255,0) 100%);\n    transform: skewX(-25deg);\n    pointer-events: none;\n    z-index: 1;\n    animation: afbAutoGlassSweepDark 6s ease-in-out infinite;\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n  .afb-midnight-vip-card:hover {\n    transform: translateY(-4px);\n    border-color: #d4b5e0;\n  }\n  .afb-midnight-vip-card:hover::after {\n    opacity: 0;\n  }\n  .afb-midnight-status-pill {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 4px 10px;\n    background: rgba(183, 132, 199, 0.15);\n    color: #e8daf5;\n    font-size: 11px;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    border-radius: 6px;\n    margin-bottom: 16px;\n    border: 1px solid rgba(183, 132, 199, 0.3);\n    position: relative;\n    z-index: 2;\n    line-height: 1.2;\n  }\n  .afb-midnight-vip-header {\n    width: 100% !important;\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) auto !important;\n    align-items: center !important;\n    gap: 16px !important;\n    margin: 0 0 16px 0 !important;\n    position: relative;\n    z-index: 2;\n    box-sizing: border-box;\n  }\n  .afb-vip-title-wrapper {\n    min-width: 0 !important;\n    display: flex !important;\n    align-items: center !important;\n    gap: 10px !important;\n    box-sizing: border-box;\n  }\n  .afb-midnight-vip-icon {\n    flex: 0 0 auto;\n    font-size: 22px;\n    line-height: 1;\n    filter: drop-shadow(0 2px 8px rgba(183, 132, 199, 0.5));\n  }\n  .afb-midnight-vip-title {\n    min-width: 0;\n    font-size: 20px;\n    font-weight: 900;\n    background: linear-gradient(to right, #e8daf5, #ffffff, #d4b5e0, #ffffff, #e8daf5);\n    background-size: 200% auto;\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    color: transparent;\n    letter-spacing: -0.5px;\n    line-height: 1.15;\n    margin: 0 !important;\n    animation: afbSilverLilacShine 4s linear infinite;\n    overflow-wrap: anywhere;\n  }\n  .afb-wa-btn-premium,\n  .afb-wa-btn-premium:link,\n  .afb-wa-btn-premium:visited,\n  .afb-wa-btn-premium:focus,\n  .afb-wa-btn-premium:active {\n    justify-self: end !important;\n    align-self: center !important;\n    width: auto !important;\n    max-width: 100% !important;\n    min-height: 38px !important;\n    display: inline-flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    gap: 7px !important;\n    padding: 9px 14px !important;\n    background: rgba(212, 181, 224, 0.1) !important;\n    border: 1px solid rgba(212, 181, 224, 0.3) !important;\n    color: #e8daf5 !important;\n    font-size: 11.5px !important;\n    font-weight: 800 !important;\n    text-transform: uppercase !important;\n    letter-spacing: 0.5px !important;\n    line-height: 1.1 !important;\n    border-radius: 9px !important;\n    text-decoration: none !important;\n    white-space: nowrap !important;\n    box-shadow: 0 4px 12px rgba(0,0,0,0.2) !important;\n    margin: 0 !important;\n    box-sizing: border-box !important;\n    -webkit-tap-highlight-color: transparent;\n    transition: transform 0.25s ease, background 0.25s ease, border-color 0.25s ease, box-shadow 0.25s ease !important;\n  }\n  .afb-wa-btn-premium svg {\n    flex: 0 0 auto !important;\n    width: 14px !important;\n    height: 14px !important;\n    fill: currentColor !important;\n    display: block !important;\n  }\n  .afb-wa-btn-premium span {\n    display: inline-block !important;\n    line-height: 1.1 !important;\n  }\n  .afb-wa-btn-premium:hover {\n    background: rgba(37, 211, 102, 0.2) !important;\n    border-color: #25d366 !important;\n    color: #ffffff !important;\n    box-shadow: 0 6px 16px rgba(37, 211, 102, 0.25) !important;\n    transform: translateY(-2px) scale(1.02) !important;\n    text-decoration: none !important;\n  }\n  .afb-midnight-vip-desc {\n    width: 100%;\n    font-size: 14px;\n    font-weight: 400;\n    color: #f8f9fa;\n    line-height: 1.7;\n    letter-spacing: 0.2px;\n    position: relative;\n    z-index: 2;\n    text-shadow: 0 1px 2px rgba(0,0,0,0.5);\n    box-sizing: border-box;\n  }\n  .afb-midnight-vip-desc p {\n    margin: 0 0 12px 0 !important;\n  }\n  .afb-midnight-vip-desc p:last-child {\n    margin-bottom: 0 !important;\n  }\n  .afb-midnight-vip-desc strong {\n    color: #d4b5e0;\n    font-weight: 600;\n    border-bottom: 1px solid rgba(212, 181, 224, 0.4);\n  }\n  .afb-bronze-vip-card {\n    background: linear-gradient(135deg, #4a2b18 0%, #241107 100%);\n    border: 1px solid rgba(197, 155, 39, 0.4);\n    border-radius: 20px;\n    padding: 28px 24px;\n    margin: 0 0 24px 0;\n    box-shadow: 0 16px 40px rgba(74, 43, 24, 0.2), inset 0 1px 0 rgba(255,255,255,0.08);\n    transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1);\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    animation: afbBronzeCardPulse 3s infinite alternate;\n  }\n  .afb-bronze-vip-card::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: -150%;\n    width: 60%;\n    height: 100%;\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.08) 50%, rgba(255,255,255,0) 100%);\n    transform: skewX(-25deg);\n    pointer-events: none;\n    z-index: 1;\n    animation: afbAutoGlassSweepDark 6s ease-in-out infinite;\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n  .afb-bronze-vip-card:hover {\n    transform: translateY(-4px);\n    border-color: #fbbf24;\n  }\n  .afb-bronze-vip-card:hover::after { opacity: 0; }\n  .afb-bronze-status-pill {\n    display: inline-block;\n    padding: 5px 12px;\n    background: rgba(197, 155, 39, 0.18);\n    color: #fde68a;\n    font-size: 11px;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1.5px;\n    border-radius: 6px;\n    margin-bottom: 20px;\n    border: 1px solid rgba(197, 155, 39, 0.35);\n    position: relative;\n    z-index: 2;\n  }\n  .afb-bronze-vip-header {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 14px;\n    position: relative;\n    z-index: 2;\n  }\n  .afb-bronze-vip-icon {\n    font-size: 26px;\n    filter: drop-shadow(0 2px 8px rgba(197, 155, 39, 0.6));\n  }\n  .afb-bronze-vip-title {\n    font-size: 22px;\n    font-weight: 900;\n    background: linear-gradient(to right, #d4af37, #fff8dc, #aa7c11, #fff8dc, #d4af37);\n    background-size: 200% auto;\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    color: transparent;\n    letter-spacing: -0.5px;\n    line-height: 1.1;\n    animation: afbGoldTextShine 4s linear infinite;\n  }\n  .afb-bronze-vip-desc {\n    font-size: 15px;\n    font-weight: 400;\n    color: #f9fafb;\n    line-height: 1.8;\n    letter-spacing: 0.3px;\n    position: relative;\n    z-index: 2;\n    text-shadow: 0 1px 2px rgba(0,0,0,0.5);\n  }\n  .afb-bronze-vip-desc p {\n    margin: 0 0 14px 0;\n  }\n  .afb-bronze-vip-desc p:last-child {\n    margin-bottom: 0;\n  }\n  .afb-bronze-vip-desc strong {\n    color: #fde68a;\n    font-weight: 600;\n    border-bottom: 1px solid rgba(253, 230, 138, 0.4);\n  }\n  .afb-pill, .afb-spec-row, .afb-feature-card { transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); }\n  .afb-pill { display:inline-block; cursor:default; }\n  .afb-spec-row { border-left:3px solid transparent; }\n  .afb-feature-card { border:1px solid transparent; }\n  .afb-ar-btn {\n    display:inline-flex; align-items:center; justify-content:center; gap:8px;\n    text-decoration:none; cursor:pointer; border:none; position: relative; overflow: hidden;\n  }\n  .afb-ar-btn::after {\n    content: ''; position: absolute; top: 0; left: -100%; width: 50%; height: 100%;\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.25) 50%, rgba(255,255,255,0) 100%);\n    transform: skewX(-25deg); animation: afbShimmer 4s infinite;\n  }\n  .afb-icon-float { display: inline-block; animation: afbFloat 2s ease-in-out infinite; }\n  .afb-premium-card {\n    position: relative; overflow: hidden; background: radial-gradient(circle at 86% 12%, var(--afb-theme-soft) 0%, rgba(17,24,39,0) 42%), linear-gradient(135deg, #111827 0%, #172033 100%);\n    border: 1px solid var(--afb-theme-border); border-radius: 20px; padding: 24px; margin: 0 0 18px 0;\n    box-shadow: 0 12px 30px rgba(0,0,0,0.15); transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);\n    cursor: pointer; animation: afbPulseThemeBorder 3s infinite alternate;\n    display: block; text-decoration: none !important;\n  }\n  .afb-premium-card:hover, .afb-premium-card:active, .afb-premium-card:visited, .afb-premium-card:focus { text-decoration: none !important; }\n  .afb-premium-card:hover, .afb-premium-card:active {\n    transform: translateY(-4px) scale(1.01); border-color: var(--afb-theme-hover); box-shadow: 0 16px 40px var(--afb-theme-shadow);\n  }\n  .afb-premium-card::before {\n    content: ''; position: absolute; top: 0; left: -150%; width: 60%; height: 100%;\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.04) 50%, rgba(255,255,255,0) 100%);\n    transform: skewX(-25deg); animation: afbPremiumShine 6s infinite; pointer-events: none;\n  }\n  .afb-premium-glow {\n    position: absolute; top: -60px; right: -60px; width: 180px; height: 180px; background: var(--afb-theme-hex);\n    filter: blur(75px); opacity: 0.15; pointer-events: none; animation: afbPulseGlow 4s ease-in-out infinite alternate;\n  }\n  .afb-premium-inner { display: flex; gap: 20px; align-items: center; position: relative; z-index: 2; flex-wrap: nowrap; }\n  .afb-premium-icon-box {\n    flex: 0 0 auto; background: var(--afb-theme-soft); padding: 16px; border-radius: 16px;\n    border: 1px solid var(--afb-theme-border); display: flex; align-items: center; justify-content: center; transition: transform 0.3s ease;\n  }\n  .afb-premium-card:hover .afb-premium-icon-box { transform: scale(1.08) rotate(5deg); }\n  .afb-premium-icon-animated {\n    display: inline-block;\n    animation: afbIconFloat 2.4s ease-in-out infinite, afbIconGlow 2.4s ease-in-out infinite;\n    transform-origin: center;\n  }\n  .afb-premium-label { font-size: 12px; font-weight: 800; color: var(--afb-theme-hex); text-transform: uppercase; letter-spacing: 1.5px; margin-bottom: 4px; }\n  .afb-premium-title { font-size: 22px; font-weight: 800; color: #ffffff; margin-bottom: 6px; line-height: 1.2; }\n  .afb-premium-desc { font-size: 14px; color: #9ca3af; line-height: 1.6; }\n  .afb-premium-cta { font-size: 12px; color: var(--afb-theme-hex); font-weight: bold; margin-top: 8px; display: flex; align-items: center; gap: 6px; opacity: 0.8; transition: opacity 0.3s; }\n  .afb-premium-card:hover .afb-premium-cta { opacity: 1; }\n  .afb-highlights-title {\n    margin: 0 0 32px 0;\n    font-size: 24px;\n    font-weight: 700;\n    color: var(--afb-text-main);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 12px;\n    letter-spacing: -0.3px;\n    width: 100%;\n  }\n  .afb-highlights-title::before {\n    content: '✦';\n    color: var(--afb-accent-gold);\n    font-size: 22px;\n    animation: afbPulseGlow 3s infinite alternate;\n  }\n  .afb-highlights-list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n  }\n  .afb-scroll-reveal h3:has(+ .afb-highlights-list) {\n    margin: 0 0 32px 0 !important;\n    font-size: 24px !important;\n    font-weight: 700 !important;\n    color: var(--afb-text-main) !important;\n    display: flex !important;\n    align-items: center !important;\n    justify-content: center !important;\n    gap: 12px !important;\n    letter-spacing: -0.3px !important;\n    width: 100%;\n  }\n  .afb-scroll-reveal h3:has(+ .afb-highlights-list)::before {\n    content: '✦';\n    color: var(--afb-accent-gold);\n    font-size: 22px;\n    animation: afbPulseGlow 3s infinite alternate;\n  }\n  .afb-highlights-list li {\n    position: relative;\n    padding-left: 32px;\n    margin-bottom: 16px;\n    font-size: 15.5px;\n    line-height: 1.8;\n    color: var(--afb-text-muted);\n    transition: all 0.3s ease;\n  }\n  .afb-highlights-list li:last-child { margin-bottom: 0; }\n  .afb-highlights-list li::before {\n    content: '';\n    position: absolute;\n    left: 4px;\n    top: 10px;\n    width: 7px;\n    height: 7px;\n    background: #d1d5db;\n    border-radius: 50%;\n    transition: all 0.3s ease;\n  }\n  .afb-highlights-list li:hover {\n    color: var(--afb-text-main);\n    transform: translateX(4px);\n  }\n  .afb-highlights-list li:hover::before {\n    transform: scale(1.6);\n    background: var(--afb-accent-purple);\n    box-shadow: 0 0 10px rgba(74, 35, 102, 0.4), 0 0 1px 1px var(--afb-accent-gold);\n  }\n  .afb-highlights-list strong {\n    color: var(--afb-text-main);\n    font-weight: 600;\n  }\n  .afb-highlights-list {\n    border-top: 1px solid rgba(74, 35, 102, 0.08);\n    padding-top: 8px;\n  }\n  .afb-premium-specs-box {\n    background: #ffffff;\n    border: 1px solid #eee3f4;\n    border-radius: 18px;\n    padding: 32px 24px;\n    position: relative;\n    overflow: visible;\n    transition: border-color 0.4s ease, box-shadow 0.4s ease;\n    box-shadow: 0 4px 12px rgba(55, 23, 79, 0.02);\n    margin: 0 0 24px 0;\n    box-sizing: border-box;\n  }\n  .afb-premium-specs-box:hover {\n    box-shadow: 0 8px 24px rgba(55, 23, 79, 0.06);\n    border-color: #d4b5e0;\n  }\n  .afb-specs-container {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    flex-direction: column;\n    gap: 0;\n  }\n  .afb-spec-row-premium {\n    position: relative;\n    background: transparent;\n    border-bottom: 1px solid #f4f0f8;\n    padding: 10px 16px 10px 20px;\n    margin-bottom: 0;\n    font-size: 14.5px;\n    color: #4b4b4b;\n    transition: all 0.3s ease;\n    border-left: 3px solid transparent;\n    display: flex;\n    flex-direction: row;\n    align-items: flex-start;\n    box-sizing: border-box;\n  }\n  .afb-spec-row-premium:last-child { border-bottom: none; }\n  .afb-spec-row-premium strong {\n    color: #2f2f2f;\n    font-weight: 700;\n    margin-right: 12px;\n    min-width: 100px;\n    flex-shrink: 0;\n    margin-top: 2px;\n  }\n  .afb-spec-value {\n    flex-grow: 1;\n    line-height: 1.6;\n  }\n  .afb-spec-row-premium:hover {\n    background: linear-gradient(90deg, rgba(212, 181, 224, 0.1) 0%, transparent 100%);\n    border-left: 3px solid #37174f;\n    color: #2f2f2f;\n    transform: translateX(2px);\n  }\n  .afb-spec-spotlight {\n    width: 100%;\n    margin-top: 12px;\n    padding: 16px 20px;\n    border-radius: 14px;\n    border: 1px solid transparent;\n    box-sizing: border-box;\n    transition: all 0.3s ease;\n  }\n  .afb-spec-spotlight-copy { min-width: 0; }\n  .afb-spec-spotlight-badge {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    padding: 6px 12px;\n    border-radius: 999px;\n    font-size: 13px;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 0.8px;\n    white-space: nowrap;\n    margin-bottom: 8px;\n    transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n  }\n  .afb-spec-spotlight-desc {\n    font-size: 13px;\n    color: #666;\n    line-height: 1.45;\n    word-break: break-word;\n  }\n  .afb-spec-spotlight.is-exclusive {\n    background: linear-gradient(135deg, #ffffff 0%, #fff1f2 100%);\n    border-color: #fecdd3;\n  }\n  .afb-spec-spotlight.is-exclusive .afb-spec-spotlight-badge {\n    background: rgba(225, 29, 72, 0.1);\n    color: #e11d48;\n    border: 1px solid rgba(225, 29, 72, 0.2);\n  }\n  .afb-spec-spotlight.is-exclusive:hover {\n    border-color: #e11d48;\n    box-shadow: 0 6px 20px rgba(225, 29, 72, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-exclusive:hover .afb-spec-spotlight-badge {\n    background: #e11d48;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(225, 29, 72, 0.3);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-deluxe {\n    background: linear-gradient(135deg, #ffffff 0%, #fefce8 100%);\n    border-color: #fde68a;\n  }\n  .afb-spec-spotlight.is-deluxe .afb-spec-spotlight-badge {\n    background: rgba(197, 155, 39, 0.12);\n    color: #c59b27;\n    border: 1px solid rgba(197, 155, 39, 0.28);\n  }\n  .afb-spec-spotlight.is-deluxe:hover {\n    border-color: #c59b27;\n    box-shadow: 0 6px 20px rgba(197, 155, 39, 0.14);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-deluxe:hover .afb-spec-spotlight-badge {\n    background: #c59b27;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(197, 155, 39, 0.28);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-premium-format {\n    background: linear-gradient(135deg, #ffffff 0%, #eff6ff 100%);\n    border-color: #bfdbfe;\n  }\n  .afb-spec-spotlight.is-premium-format .afb-spec-spotlight-badge {\n    background: rgba(37, 99, 235, 0.1);\n    color: #2563eb;\n    border: 1px solid rgba(37, 99, 235, 0.2);\n  }\n  .afb-spec-spotlight.is-premium-format:hover {\n    border-color: #2563eb;\n    box-shadow: 0 6px 20px rgba(37, 99, 235, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-premium-format:hover .afb-spec-spotlight-badge {\n    background: #2563eb;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.25);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-collector {\n    background: linear-gradient(135deg, #ffffff 0%, #f5f3ff 100%);\n    border-color: #ddd6fe;\n  }\n  .afb-spec-spotlight.is-collector .afb-spec-spotlight-badge {\n    background: rgba(109, 40, 217, 0.1);\n    color: #6d28d9;\n    border: 1px solid rgba(109, 40, 217, 0.2);\n  }\n  .afb-spec-spotlight.is-collector:hover {\n    border-color: #6d28d9;\n    box-shadow: 0 6px 20px rgba(109, 40, 217, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-collector:hover .afb-spec-spotlight-badge {\n    background: #6d28d9;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(109, 40, 217, 0.24);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-bonus {\n    background: linear-gradient(135deg, #ffffff 0%, #eff6ff 100%);\n    border-color: #93c5fd;\n  }\n  .afb-spec-spotlight.is-bonus .afb-spec-spotlight-badge {\n    background: rgba(37, 99, 235, 0.1);\n    color: #2563eb;\n    border: 1px solid rgba(37, 99, 235, 0.2);\n  }\n  .afb-spec-spotlight.is-bonus:hover {\n    border-color: #2563eb;\n    box-shadow: 0 6px 20px rgba(37, 99, 235, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-bonus:hover .afb-spec-spotlight-badge {\n    background: #2563eb;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.24);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-masterline {\n    background: linear-gradient(135deg, #ffffff 0%, #eff6ff 100%);\n    border-color: #93c5fd;\n  }\n  .afb-spec-spotlight.is-masterline .afb-spec-spotlight-badge {\n    background: rgba(30, 64, 175, 0.1);\n    color: #1e40af;\n    border: 1px solid rgba(30, 64, 175, 0.2);\n  }\n  .afb-spec-spotlight.is-masterline:hover {\n    border-color: #1e40af;\n    box-shadow: 0 6px 20px rgba(30, 64, 175, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-masterline:hover .afb-spec-spotlight-badge {\n    background: #1e40af;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(30, 64, 175, 0.24);\n    transform: scale(1.05);\n  }\n  .afb-spec-spotlight.is-mythos {\n    background: linear-gradient(135deg, #ffffff 0%, #faf5ff 100%);\n    border-color: #d8b4fe;\n  }\n  .afb-spec-spotlight.is-mythos .afb-spec-spotlight-badge {\n    background: rgba(126, 34, 206, 0.1);\n    color: #7e22ce;\n    border: 1px solid rgba(126, 34, 206, 0.2);\n  }\n  .afb-spec-spotlight.is-mythos:hover {\n    border-color: #7e22ce;\n    box-shadow: 0 6px 20px rgba(126, 34, 206, 0.12);\n    transform: translateY(-2px);\n  }\n  .afb-spec-spotlight.is-mythos:hover .afb-spec-spotlight-badge {\n    background: #7e22ce;\n    color: #ffffff;\n    box-shadow: 0 4px 12px rgba(126, 34, 206, 0.24);\n    transform: scale(1.05);\n  }\n  .afb-ar-card { transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); }\n  .afb-ar-card:hover { transform:translateY(-3px); box-shadow:0 16px 36px rgba(55,23,79,0.10); }\n  .afb-ar-inner { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; justify-content: space-between; }\n  .afb-ar-text { flex: 1 1 260px; min-width: 0; }\n  .afb-ar-cta { flex: 0 0 auto; }\n  #afb-ar-overlay {\n    width: 100vw !important;\n    height: 100vh !important;\n    height: 100dvh !important;\n    max-width: none !important;\n    max-height: none !important;\n  }\n  #afb-ar-overlay .afb-ar-modal-card {\n    width: min(1040px, calc(100vw - 32px));\n    max-width: calc(100vw - 32px);\n    max-height: calc(100dvh - 32px);\n    border-radius: 24px;\n    overflow: auto;\n    background:\n      radial-gradient(circle at 14% 8%, rgba(212,181,224,0.34), transparent 38%),\n      linear-gradient(135deg, #ffffff 0%, #fbf8ff 100%);\n    border: 1px solid rgba(212,181,224,0.72);\n    box-shadow: 0 24px 70px rgba(15,23,42,0.26);\n    box-sizing: border-box;\n    padding-top: 8px;\n  }\n  .afb-ar-modal-body {\n    display: grid;\n    grid-template-columns: minmax(360px, 1.55fr) minmax(250px, 300px);\n    gap: 18px;\n    padding: 26px 18px 18px;\n    align-items: stretch;\n    box-sizing: border-box;\n  }\n  .afb-ar-demo-panel,\n  .afb-ar-scan-panel {\n    border: 1px solid rgba(55,23,79,0.10);\n    border-radius: 20px;\n    background: rgba(255,255,255,0.78);\n    box-shadow: 0 14px 34px rgba(55,23,79,0.08);\n    position: relative;\n    overflow: hidden;\n  }\n  .afb-ar-demo-panel {\n    min-height: 440px;\n    aspect-ratio: 4 \/ 3;\n    display: flex;\n    align-items: stretch;\n    justify-content: center;\n    background:\n      linear-gradient(180deg, #f8fafc 0%, #ffffff 68%, #f3edf9 100%);\n    contain: layout paint;\n  }\n  .afb-ar-demo-panel::before {\n    content: '';\n    position: absolute;\n    left: 16%;\n    right: 16%;\n    bottom: 62px;\n    height: 28px;\n    border-radius: 999px;\n    background: radial-gradient(circle, rgba(55,23,79,0.24), rgba(55,23,79,0));\n    filter: blur(2px);\n    animation: afbArDemoShadow 3.8s ease-in-out infinite;\n  }\n  .afb-ar-preview-frame {\n    position: relative;\n    width: 100%;\n    height: auto;\n    min-height: 440px;\n    border: 0;\n    display: block;\n    z-index: 2;\n    background: transparent;\n    flex: 1 1 auto;\n  }\n  .afb-ar-demo-image {\n    width: min(78%, 290px);\n    max-height: 270px;\n    object-fit: contain;\n    position: relative;\n    z-index: 2;\n    filter: drop-shadow(0 18px 22px rgba(15,23,42,0.18));\n    animation: afbArDemoFloat 3.8s ease-in-out infinite;\n  }\n  .afb-ar-demo-fallback {\n    width: 180px;\n    height: 180px;\n    border-radius: 28px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: #37174f;\n    font-size: 42px;\n    font-weight: 950;\n    background: linear-gradient(135deg, #f5f3ff, #ffffff);\n    border: 1px solid #e8daf5;\n    position: relative;\n    z-index: 2;\n  }\n  .afb-ar-demo-button {\n    position: absolute;\n    left: 50%;\n    bottom: 22px;\n    transform: translateX(-50%);\n    z-index: 3;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 42px;\n    padding: 0 20px;\n    border-radius: 999px;\n    background:\n      linear-gradient(180deg, rgba(255,255,255,0.16), rgba(255,255,255,0) 42%),\n      linear-gradient(135deg, #7a3aa1 0%, #4a2366 48%, #2d123f 100%);\n    color: #ffffff;\n    font-size: 12.5px;\n    font-weight: 900;\n    letter-spacing: 0.01em;\n    box-shadow: 0 12px 24px rgba(55,23,79,0.30), inset 0 1px 0 rgba(255,255,255,0.18);\n    white-space: nowrap;\n    border: 0;\n    cursor: pointer;\n    text-decoration: none;\n    font-family: inherit;\n    transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease;\n  }\n  .afb-ar-demo-button:hover,\n  .afb-ar-demo-button:focus-visible {\n    transform: translateX(-50%) translateY(-1px);\n    box-shadow: 0 16px 30px rgba(55,23,79,0.34), inset 0 1px 0 rgba(255,255,255,0.22);\n    outline: none;\n  }\n  .afb-ar-demo-button:active {\n    transform: translateX(-50%) translateY(0) scale(0.98);\n  }\n  .afb-ar-scan-panel {\n    padding: 26px 20px 20px;\n    text-align: center;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n  }\n  .afb-ar-phone-cue {\n    position: absolute;\n    left: 50%;\n    top: 53%;\n    z-index: 5;\n    width: min(210px, calc(100% - 34px));\n    min-height: 122px;\n    display: grid;\n    place-items: center;\n    gap: 8px;\n    padding: 14px 16px 12px;\n    border: 1px solid rgba(74,35,102,0.12);\n    border-radius: 20px;\n    background: rgba(255,255,255,0.92);\n    box-shadow: 0 18px 44px rgba(55,23,79,0.18);\n    color: #37174f;\n    opacity: 0;\n    pointer-events: none;\n    transform: translate(-50%, -48%) scale(0.88);\n  }\n  .afb-ar-phone-cue.is-visible {\n    animation: afbPhoneScanCue 3.6s ease both;\n  }\n  .afb-ar-phone-cue-icon {\n    position: relative;\n    width: 86px;\n    height: 78px;\n  }\n  .afb-ar-phone-body {\n    position: absolute;\n    left: 30px;\n    top: 2px;\n    width: 38px;\n    height: 64px;\n    border: 3px solid #37174f;\n    border-radius: 11px;\n    background: linear-gradient(180deg, #ffffff 0%, #f7f3fb 100%);\n    transform: rotate(-10deg);\n    box-shadow: 0 10px 20px rgba(55,23,79,0.14);\n  }\n  .afb-ar-phone-body::before {\n    content: '';\n    position: absolute;\n    left: 50%;\n    top: 6px;\n    width: 12px;\n    height: 3px;\n    border-radius: 999px;\n    background: rgba(55,23,79,0.38);\n    transform: translateX(-50%);\n  }\n  .afb-ar-phone-body::after {\n    content: '';\n    position: absolute;\n    left: 50%;\n    bottom: 5px;\n    width: 7px;\n    height: 7px;\n    border-radius: 999px;\n    background: rgba(55,23,79,0.28);\n    transform: translateX(-50%);\n  }\n  .afb-ar-phone-hand-shape {\n    position: absolute;\n    left: 14px;\n    bottom: 4px;\n    width: 46px;\n    height: 31px;\n    border: 2px solid rgba(55,23,79,0.22);\n    border-radius: 22px 18px 18px 12px;\n    background: #ffffff;\n    transform: rotate(-12deg);\n    box-shadow: 0 8px 16px rgba(55,23,79,0.10);\n  }\n  .afb-ar-phone-cue-icon::after {\n    content: '';\n    position: absolute;\n    left: 56px;\n    top: 32px;\n    width: 70px;\n    height: 70px;\n    border: 2px solid rgba(74,35,102,0.16);\n    border-radius: 999px;\n    transform: translate(-50%, -50%);\n    animation: afbPhoneScanRing 1.15s ease-out infinite;\n  }\n  .afb-ar-phone-cue-text {\n    max-width: 170px;\n    color: #37174f;\n    font-size: 12px;\n    font-weight: 950;\n    line-height: 1.25;\n  }\n  .afb-ar-modal-title {\n    font-size: 22px;\n    font-weight: 950;\n    color: #37174f;\n    line-height: 1.16;\n    margin: 0 0 8px;\n  }\n  .afb-ar-modal-desc {\n    font-size: 14px;\n    color: #5b5563;\n    line-height: 1.65;\n    margin: 0 0 16px;\n  }\n  .afb-ar-qr-box {\n    background: #ffffff;\n    border: 1px solid #ece6f2;\n    border-radius: 18px;\n    padding: 16px 16px 12px;\n    margin: 0 auto 14px;\n    max-width: 278px;\n    box-shadow: inset 0 1px 0 rgba(255,255,255,0.72);\n    position: relative;\n    transition: border-color 0.24s ease, box-shadow 0.24s ease, transform 0.24s ease;\n  }\n  .afb-ar-qr-box::after {\n    content: '';\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    width: 11px;\n    height: 11px;\n    border-radius: 999px;\n    background: #22c55e;\n    box-shadow: 0 0 0 0 rgba(34,197,94,0.48), 0 0 14px rgba(34,197,94,0.75);\n    opacity: 0;\n    transform: scale(0.7);\n  }\n  .afb-ar-scan-panel.is-qr-pulse {\n    border-color: rgba(34,197,94,0.62);\n    box-shadow: 0 18px 42px rgba(34,197,94,0.14), 0 0 0 1px rgba(34,197,94,0.25);\n  }\n  .afb-ar-qr-box.is-qr-pulse {\n    border-color: rgba(34,197,94,0.74);\n    box-shadow: 0 0 0 4px rgba(34,197,94,0.10), 0 16px 34px rgba(34,197,94,0.16), inset 0 1px 0 rgba(255,255,255,0.72);\n    transform: translateY(-2px) scale(1.015);\n  }\n  .afb-ar-qr-box.is-qr-pulse::after {\n    opacity: 1;\n    animation: afbQrLedPulse 1.15s ease-in-out 3;\n  }\n  .afb-ar-qr-box img {\n    width: 100%;\n    max-width: 230px;\n    height: auto;\n    display: block;\n    margin: 0 auto;\n    border-radius: 15px;\n  }\n  .afb-ar-safe-note {\n    font-size: 12px;\n    color: #777;\n    line-height: 1.65;\n  }\n  @media (max-width: 760px) {\n    #afb-ar-overlay {\n      align-items: flex-start;\n      padding: max(12px, env(safe-area-inset-top)) 10px max(16px, env(safe-area-inset-bottom));\n      overflow-y: auto;\n    }\n    #afb-ar-overlay .afb-ar-modal-card {\n      width: min(94vw, 520px);\n      max-width: min(94vw, 520px);\n      max-height: none;\n      border-radius: 20px;\n    }\n    .afb-ar-modal-body { grid-template-columns: 1fr; padding: 14px; gap: 14px; }\n    .afb-ar-demo-panel { min-height: 300px; aspect-ratio: 1 \/ 1; }\n    .afb-ar-preview-frame { min-height: 300px; }\n    .afb-ar-demo-image { max-height: 205px; }\n    .afb-ar-scan-panel { padding: 22px 16px 18px; }\n  }\n  @media (max-width: 600px) {\n    .afb-hero-card p { font-size: 13.5px !important; line-height: 1.6 !important; margin-bottom: 12px !important; }\n    .afb-waitlist-card { padding: 16px 14px; }\n    .afb-waitlist-title { font-size: 15px; }\n    .afb-waitlist-desc { font-size: 12.5px; line-height: 1.6; }\n    .afb-bronze-vip-card { padding: 24px 18px; }\n    .afb-bronze-vip-title { font-size: 19px; }\n    .afb-bronze-vip-desc { font-size: 14.5px; line-height: 1.6; }\n    .afb-bronze-vip-desc p { margin-bottom: 12px; }\n    .afb-premium-card { padding: 18px 14px; }\n    .afb-premium-inner { gap: 14px; align-items: flex-start; }\n    .afb-premium-icon-box { padding: 12px; border-radius: 12px; }\n    .afb-premium-icon-box span { font-size: 24px; }\n    .afb-premium-label { font-size: 10px; margin-bottom: 2px; }\n    .afb-premium-title { font-size: 18px; margin-bottom: 4px; }\n    .afb-premium-desc { font-size: 12.5px !important; line-height: 1.5 !important; }\n    .afb-highlights-title { font-size: 21px; margin-bottom: 24px; }\n    .afb-scroll-reveal h3:has(+ .afb-highlights-list) {\n      font-size: 21px !important;\n      margin-bottom: 24px !important;\n    }\n    .afb-highlights-list li { font-size: 14.5px; margin-bottom: 14px; padding-left: 28px; }\n    .afb-highlights-list li::before { left: 2px; top: 8px; }\n    .afb-spec-row-premium {\n      flex-direction: column;\n      padding: 10px 14px 10px 16px;\n    }\n    .afb-spec-row-premium strong {\n      margin-bottom: 4px;\n      color: #37174f;\n    }\n    .afb-limited-card {\n      flex-direction: column;\n      align-items: flex-start;\n      gap: 12px;\n    }\n    .afb-spec-spotlight { padding: 14px 16px; }\n    .afb-spec-spotlight-badge { white-space: normal; }\n    .afb-ar-inner { flex-direction: column; text-align: center; }\n    .afb-ar-text { flex: 1 1 auto; }\n    .afb-ar-cta { width: 100%; display: flex; justify-content: center; margin-top: 4px; }\n  }\n  @media (max-width: 720px) {\n    .afb-midnight-vip-header {\n      grid-template-columns: 1fr !important;\n      align-items: stretch !important;\n      gap: 14px !important;\n    }\n    .afb-wa-btn-premium,\n    .afb-wa-btn-premium:link,\n    .afb-wa-btn-premium:visited,\n    .afb-wa-btn-premium:focus,\n    .afb-wa-btn-premium:active {\n      width: 100% !important;\n      justify-self: stretch !important;\n      min-height: 42px !important;\n      padding: 11px 14px !important;\n    }\n  }\n  @media (max-width: 480px) {\n    .afb-midnight-vip-card {\n      padding: 20px 16px;\n      border-radius: 15px;\n    }\n    .afb-midnight-status-pill {\n      font-size: 10px;\n      margin-bottom: 14px;\n    }\n    .afb-vip-title-wrapper {\n      gap: 9px !important;\n    }\n    .afb-midnight-vip-icon {\n      font-size: 20px;\n    }\n    .afb-midnight-vip-title {\n      font-size: 18px;\n    }\n    .afb-midnight-vip-desc {\n      font-size: 13px;\n      line-height: 1.65;\n    }\n    .afb-wa-btn-premium,\n    .afb-wa-btn-premium:link,\n    .afb-wa-btn-premium:visited,\n    .afb-wa-btn-premium:focus,\n    .afb-wa-btn-premium:active {\n      font-size: 11px !important;\n      letter-spacing: 0.35px !important;\n    }\n  }\n  .afb-overlay { display:none; position:fixed; inset:0; background:rgba(15, 23, 42, 0.75); z-index:999999; padding:18px; box-sizing:border-box; align-items:center; justify-content:center; backdrop-filter:blur(8px); }\n  .afb-overlay.is-open, .afb-overlay:target { display:flex; animation: afbFadeIn 0.3s ease-out forwards; }\n  .afb-overlay-bg { position:absolute; inset:0; z-index:1; display:block; text-decoration:none !important; }\n  .afb-modal-card { width:100%; max-width:440px; background:#ffffff; border-radius:22px; box-shadow:0 24px 60px rgba(15,23,42,0.22); overflow:hidden; position:relative; animation:afbScaleIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); }\n  .afb-modal-card-dark {\n    background:\n      radial-gradient(circle at 10% 0%, color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, transparent), transparent 38%),\n      radial-gradient(circle at 88% 12%, color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 12%, transparent), transparent 40%),\n      linear-gradient(135deg, #111827 0%, #1f2937 100%);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 38%, rgba(255,255,255,0.08));\n  }\n  .afb-modal-close { position:absolute; top:12px; right:12px; width:34px; height:34px; border:none; border-radius:999px; background:#f5f5f5; color:#444; font-size:18px; cursor:pointer; transition: background 0.2s, transform 0.2s; display:flex; align-items:center; justify-content:center; }\n  .afb-modal-close:hover { background: #e0e0e0; transform: scale(1.1) rotate(90deg); }\n  .afb-modal-close-dark { background: rgba(255,255,255,0.1); color: #fff; }\n  .afb-modal-close-dark:hover { background: rgba(255,255,255,0.2); }\n  #afb-ar-overlay .afb-modal-close {\n    top: 12px;\n    right: 12px;\n    width: 28px;\n    height: 28px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border: 1px solid rgba(212,181,224,0.68);\n    background: rgba(255,255,255,0.96);\n    color: #5f4b68;\n    font-size: 16px;\n    line-height: 1;\n    box-shadow: 0 8px 18px rgba(55,23,79,0.10);\n    transform: none;\n    transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;\n  }\n  #afb-ar-overlay .afb-modal-close:hover,\n  #afb-ar-overlay .afb-modal-close:focus-visible {\n    background: #f8f3fb;\n    color: #37174f;\n    transform: none;\n    box-shadow: 0 10px 20px rgba(55,23,79,0.18);\n    outline: none;\n  }\n  #afb-version-overlay .afb-modal-card {\n    z-index: 2;\n    overflow: visible;\n    max-width: min(560px, calc(100vw - 36px));\n    box-shadow:\n      0 28px 72px rgba(15,23,42,0.34),\n      0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 16%, transparent) inset,\n      0 0 52px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 16%, transparent);\n  }\n  #afb-version-overlay a.afb-modal-close {\n    display: none !important;\n  }\n  #afb-version-overlay .afb-modal-close,\n  #afb-version-overlay .afb-modal-close:link,\n  #afb-version-overlay .afb-modal-close:visited,\n  #afb-version-overlay .afb-modal-close:hover,\n  #afb-version-overlay .afb-modal-close:active,\n  #afb-version-overlay .afb-modal-close:focus {\n    background: rgba(255,255,255,0.10) !important;\n    color: #ffffff !important;\n    text-decoration: none !important;\n    box-shadow: none !important;\n    outline: none !important;\n    z-index: 3;\n    -webkit-tap-highlight-color: transparent;\n    transition: transform 0.2s ease;\n  }\n  #afb-version-overlay .afb-modal-close:hover,\n  #afb-version-overlay .afb-modal-close:active {\n    background: rgba(255,255,255,0.10) !important;\n    transform: scale(1.1) rotate(90deg);\n  }\n  #afb-version-overlay .afb-version-modal-icon {\n    width: 48px;\n    height: 48px;\n    min-width: 48px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 16px;\n    background:\n      radial-gradient(circle at 32% 24%, rgba(255,255,255,0.34), transparent 34%),\n      color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, rgba(15,23,42,0.82));\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, rgba(255,255,255,0.10));\n    box-shadow:\n      0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 12%, transparent),\n      0 12px 28px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, transparent),\n      inset 0 1px 0 rgba(255,255,255,0.12);\n  }\n  #afb-version-overlay .afb-version-modal-kicker {\n    color: var(--afb-theme-hex, #7c3aed) !important;\n    text-shadow: 0 0 18px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, transparent);\n  }\n  .afb-version-detail-shell {\n    position: relative;\n    overflow: visible;\n    background:\n      radial-gradient(circle at top left, rgba(255,255,255,0.06), transparent 42%),\n      rgba(0,0,0,0.20);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 26%, rgba(255,255,255,0.08));\n    border-radius: 16px;\n    padding: 12px;\n    box-shadow:\n      0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 12%, transparent),\n      inset 0 1px 0 color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 10%, transparent);\n  }\n  .afb-version-detail-list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    display: grid;\n    gap: 9px;\n    color: #f3f4f6;\n    font-size: 14px;\n    line-height: 1.65;\n  }\n  .afb-version-detail-item {\n    position: relative;\n    z-index: 2;\n  }\n  .afb-version-detail-item.is-open {\n    z-index: 40;\n  }\n  .afb-version-detail-trigger {\n    width: 100%;\n    min-height: 58px;\n    display: grid;\n    grid-template-columns: auto minmax(0, 1fr) auto;\n    align-items: center;\n    gap: 11px;\n    padding: 12px 13px;\n    border-radius: 14px;\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 20%, rgba(255,255,255,0.07));\n    background:\n      linear-gradient(135deg, rgba(255,255,255,0.055), rgba(255,255,255,0.018)),\n      rgba(15, 23, 42, 0.34);\n    color: #f8fafc;\n    text-align: left;\n    cursor: pointer;\n    box-shadow: 0 0 0 color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 0%, transparent);\n    -webkit-tap-highlight-color: transparent;\n    transition: transform 0.22s ease, border-color 0.22s ease, background 0.22s ease, box-shadow 0.22s ease;\n  }\n  .afb-version-detail-trigger:hover,\n  .afb-version-detail-trigger:focus-visible,\n  .afb-version-detail-item.is-open .afb-version-detail-trigger {\n    transform: translateY(-1px);\n    border-color: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 70%, #ffffff 12%);\n    background:\n      linear-gradient(135deg, rgba(255,255,255,0.08), rgba(255,255,255,0.025)),\n      color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, rgba(15,23,42,0.68));\n    box-shadow:\n      0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 36%, transparent),\n      0 12px 28px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, transparent),\n      inset 0 1px 0 rgba(255,255,255,0.10);\n    outline: none;\n  }\n  .afb-version-detail-item.is-open .afb-version-detail-trigger {\n    animation: afbVersionNeonBorder 1.85s ease-in-out infinite;\n  }\n  .afb-version-detail-dot {\n    width: 26px;\n    height: 26px;\n    border-radius: 999px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    color: #ffffff;\n    font-size: 13px;\n    font-weight: 900;\n    background:\n      radial-gradient(circle at 35% 28%, rgba(255,255,255,0.64), transparent 28%),\n      linear-gradient(135deg, var(--afb-theme-hex, #7c3aed), color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 72%, #0f172a));\n    box-shadow:\n      0 0 0 6px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 12%, transparent),\n      0 0 18px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, transparent);\n    flex: 0 0 auto;\n  }\n  .afb-version-detail-copy {\n    min-width: 0;\n    color: #f8fafc;\n    font-size: 13.5px;\n    font-weight: 760;\n    line-height: 1.5;\n  }\n  .afb-version-detail-action {\n    display: inline-flex;\n    align-items: center;\n    min-height: 26px;\n    padding: 0 9px;\n    border-radius: 999px;\n    color: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 25%, #ffffff);\n    background: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 14%, transparent);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, transparent);\n    font-size: 10px;\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    white-space: nowrap;\n  }\n  .afb-version-detail-popover {\n    position: absolute;\n    left: calc(100% + 12px);\n    top: 50%;\n    width: min(310px, calc(100vw - 42px));\n    padding: 10px;\n    border-radius: 18px;\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 38%, rgba(255,255,255,0.12));\n    background:\n      radial-gradient(circle at top left, color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, transparent), transparent 48%),\n      linear-gradient(145deg, rgba(17,24,39,0.98), rgba(8,12,22,0.98));\n    box-shadow:\n      0 22px 52px rgba(0,0,0,0.36),\n      0 0 34px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, transparent),\n      inset 0 1px 0 rgba(255,255,255,0.08);\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    transform: translateY(-50%) translateX(-6px) scale(0.965);\n    transform-origin: left center;\n    transition: opacity 0.24s ease, visibility 0.24s ease, transform 0.24s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n  .afb-version-detail-popover::before {\n    content: '';\n    position: absolute;\n    left: -7px;\n    top: 50%;\n    width: 12px;\n    height: 12px;\n    transform: translateY(-50%) rotate(45deg);\n    background: rgba(17,24,39,0.98);\n    border-left: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, rgba(255,255,255,0.12));\n    border-bottom: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, rgba(255,255,255,0.12));\n  }\n  .afb-version-detail-trigger:hover + .afb-version-detail-popover,\n  .afb-version-detail-trigger:focus-visible + .afb-version-detail-popover,\n  .afb-version-detail-item.is-open .afb-version-detail-popover {\n    opacity: 1;\n    visibility: visible;\n    pointer-events: auto;\n    transform: translateY(-50%) translateX(0) scale(1);\n  }\n  .afb-version-detail-popover-media {\n    width: 100%;\n    aspect-ratio: 16 \/ 10;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    border-radius: 14px;\n    margin-bottom: 10px;\n    background:\n      radial-gradient(circle at center, rgba(255,255,255,0.16), transparent 58%),\n      rgba(255,255,255,0.04);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, rgba(255,255,255,0.08));\n  }\n  .afb-version-detail-popover-media img {\n    width: 100%;\n    height: 100%;\n    object-fit: contain;\n    display: block;\n  }\n  .afb-version-detail-popover-copy {\n    position: relative;\n    z-index: 2;\n  }\n  .afb-version-detail-popover-kicker {\n    display: inline-flex;\n    align-items: center;\n    min-height: 22px;\n    padding: 0 9px;\n    margin-bottom: 7px;\n    border-radius: 999px;\n    background: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 18%, transparent);\n    color: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, #ffffff);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 24%, transparent);\n    font-size: 10px;\n    font-weight: 950;\n    text-transform: uppercase;\n    letter-spacing: 0.07em;\n  }\n  .afb-version-detail-popover strong {\n    display: block;\n    color: #ffffff;\n    font-size: 15px;\n    line-height: 1.18;\n    margin-bottom: 5px;\n  }\n  .afb-version-detail-popover p {\n    margin: 0;\n    color: #dbe2ee;\n    font-size: 12.5px;\n    line-height: 1.55;\n    font-weight: 700;\n  }\n  @media (min-width: 1280px) and (max-width: 1599px) {\n    #afb-version-overlay {\n      padding: 32px clamp(24px, 3vw, 56px);\n    }\n    #afb-version-overlay .afb-modal-card {\n      max-width: min(600px, calc(100vw - 380px));\n      border-radius: 26px;\n      box-shadow:\n        0 30px 76px rgba(15,23,42,0.32),\n        0 0 0 1px rgba(255,255,255,0.04) inset;\n    }\n    #afb-version-overlay .afb-version-modal-body {\n      padding: 36px 32px 34px !important;\n    }\n    #afb-version-overlay .afb-version-modal-icon {\n      font-size: 36px !important;\n    }\n    #afb-version-overlay .afb-version-modal-title {\n      font-size: 24px !important;\n    }\n    #afb-version-overlay .afb-version-modal-intro {\n      font-size: 15px !important;\n      line-height: 1.74 !important;\n      margin-bottom: 22px !important;\n    }\n    #afb-version-overlay .afb-version-detail-shell {\n      padding: 14px;\n      border-radius: 18px;\n    }\n    #afb-version-overlay .afb-version-detail-trigger {\n      min-height: 64px;\n      gap: 12px;\n      padding: 14px 15px;\n      border-radius: 16px;\n    }\n    #afb-version-overlay .afb-version-detail-copy {\n      font-size: 14.5px;\n      line-height: 1.5;\n    }\n    #afb-version-overlay .afb-version-detail-popover {\n      left: calc(100% + 14px);\n      width: min(320px, calc(100vw - 44px));\n      padding: 11px;\n    }\n  }\n  @media (min-width: 1600px) {\n    #afb-version-overlay {\n      padding: 36px clamp(28px, 4vw, 76px);\n    }\n    #afb-version-overlay .afb-modal-card {\n      max-width: min(760px, calc(100vw - 500px));\n      border-radius: 28px;\n      box-shadow:\n        0 34px 86px rgba(15,23,42,0.34),\n        0 0 0 1px rgba(255,255,255,0.04) inset;\n    }\n    #afb-version-overlay .afb-modal-close {\n      width: 38px;\n      height: 38px;\n      top: 14px;\n      right: 14px;\n      font-size: 20px;\n    }\n    #afb-version-overlay .afb-version-modal-body {\n      padding: clamp(36px, 3vw, 46px) clamp(34px, 3vw, 44px) clamp(34px, 3vw, 42px) !important;\n    }\n    #afb-version-overlay .afb-version-modal-header {\n      gap: 18px !important;\n      margin-bottom: 24px !important;\n    }\n    #afb-version-overlay .afb-version-modal-icon {\n      font-size: 40px !important;\n    }\n    #afb-version-overlay .afb-version-modal-kicker {\n      font-size: 12px !important;\n      letter-spacing: 1.2px !important;\n    }\n    #afb-version-overlay .afb-version-modal-title {\n      font-size: 28px !important;\n      line-height: 1.1 !important;\n    }\n    #afb-version-overlay .afb-version-modal-intro {\n      max-width: 650px;\n      font-size: 16px !important;\n      line-height: 1.78 !important;\n      margin-bottom: 24px !important;\n    }\n    #afb-version-overlay .afb-version-detail-shell {\n      padding: 16px;\n      border-radius: 20px;\n    }\n    #afb-version-overlay .afb-version-detail-list {\n      gap: 12px;\n      font-size: 15px;\n    }\n    #afb-version-overlay .afb-version-detail-trigger {\n      min-height: 70px;\n      grid-template-columns: auto minmax(0, 1fr) max-content;\n      gap: 14px;\n      padding: 15px 16px;\n      border-radius: 17px;\n    }\n    #afb-version-overlay .afb-version-detail-dot {\n      width: 32px;\n      height: 32px;\n      font-size: 15px;\n    }\n    #afb-version-overlay .afb-version-detail-copy {\n      font-size: 15.5px;\n      line-height: 1.48;\n    }\n    #afb-version-overlay .afb-version-detail-action {\n      min-height: 30px;\n      padding: 0 12px;\n      font-size: 10.5px;\n    }\n    #afb-version-overlay .afb-version-detail-popover {\n      left: calc(100% + 16px);\n      width: min(390px, calc(100vw - 44px));\n      padding: 12px;\n      border-radius: 22px;\n      box-shadow:\n        0 28px 68px rgba(0,0,0,0.40),\n        0 0 42px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, transparent),\n        inset 0 1px 0 rgba(255,255,255,0.09);\n    }\n    #afb-version-overlay .afb-version-detail-popover::before {\n      left: -8px;\n      width: 14px;\n      height: 14px;\n    }\n    #afb-version-overlay .afb-version-detail-popover-media {\n      border-radius: 17px;\n      margin-bottom: 12px;\n    }\n    #afb-version-overlay .afb-version-detail-popover-kicker {\n      min-height: 24px;\n      font-size: 10.5px;\n    }\n    #afb-version-overlay .afb-version-detail-popover strong {\n      font-size: 17px;\n      line-height: 1.18;\n      margin-bottom: 6px;\n    }\n    #afb-version-overlay .afb-version-detail-popover p {\n      font-size: 13.5px;\n      line-height: 1.6;\n    }\n  }\n  @media (max-width: 980px) {\n    .afb-version-detail-popover {\n      left: auto;\n      right: calc(100% + 12px);\n      transform-origin: right center;\n      transform: translateY(-50%) translateX(6px) scale(0.965);\n    }\n    .afb-version-detail-popover::before {\n      left: auto;\n      right: -7px;\n      border-left: 0;\n      border-bottom: 0;\n      border-right: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, rgba(255,255,255,0.12));\n      border-top: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, rgba(255,255,255,0.12));\n    }\n    .afb-version-detail-trigger:hover + .afb-version-detail-popover,\n    .afb-version-detail-trigger:focus-visible + .afb-version-detail-popover,\n    .afb-version-detail-item.is-open .afb-version-detail-popover {\n      transform: translateY(-50%) translateX(0) scale(1);\n    }\n  }\n  @media (max-width: 720px) {\n    #afb-version-overlay {\n      align-items: flex-start;\n      justify-content: center;\n      padding: max(14px, env(safe-area-inset-top)) 10px max(18px, env(safe-area-inset-bottom));\n      overflow-y: auto;\n      overflow-x: hidden;\n      -webkit-overflow-scrolling: touch;\n      overscroll-behavior: contain;\n      touch-action: pan-y;\n    }\n    #afb-version-overlay .afb-overlay-bg {\n      position: fixed;\n    }\n    #afb-version-overlay .afb-modal-card {\n      max-width: min(94vw, 520px);\n      max-height: calc(100dvh - max(28px, env(safe-area-inset-top)) - max(22px, env(safe-area-inset-bottom)));\n      overflow-y: auto;\n      overflow-x: hidden;\n      -webkit-overflow-scrolling: touch;\n      overscroll-behavior: contain;\n      touch-action: pan-y;\n      border-radius: 20px;\n      border-color: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 38%, rgba(255,255,255,0.10));\n      animation: afbMobileModalSlideIn 0.28s cubic-bezier(0.16, 1, 0.3, 1);\n      transform: translateZ(0);\n    }\n    #afb-version-overlay .afb-modal-card \u003e div[style*=\"padding\"] {\n      padding: 26px 14px 18px 14px !important;\n    }\n    #afb-version-overlay .afb-modal-close {\n      position: sticky !important;\n      top: 10px !important;\n      float: right;\n      margin: 0 0 -34px auto !important;\n      width: 38px !important;\n      height: 38px !important;\n      z-index: 50 !important;\n      background: rgba(255,255,255,0.16) !important;\n      backdrop-filter: blur(12px);\n      -webkit-backdrop-filter: blur(12px);\n    }\n    #afb-version-overlay a.afb-modal-close {\n      display: none !important;\n    }\n    .afb-version-detail-shell {\n      padding: 10px;\n      overflow: visible;\n    }\n    .afb-version-detail-list {\n      gap: 10px;\n    }\n    .afb-version-detail-trigger {\n      grid-template-columns: auto minmax(0, 1fr);\n      min-height: 56px;\n      padding: 11px 12px;\n      touch-action: manipulation;\n      transform: none;\n    }\n    .afb-version-detail-action {\n      grid-column: 2;\n      justify-self: start;\n      margin-top: 2px;\n    }\n    .afb-version-detail-popover {\n      position: relative;\n      left: auto;\n      right: auto;\n      top: auto;\n      width: 100%;\n      max-height: 0;\n      margin-top: 0;\n      padding: 0 10px;\n      overflow: hidden;\n      opacity: 0;\n      visibility: hidden;\n      pointer-events: none;\n      transform: translateY(-4px) scale(0.985);\n      transform-origin: top center;\n      transition:\n        opacity 0.24s ease,\n        visibility 0.24s ease,\n        transform 0.24s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.32s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.32s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.32s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n    .afb-version-detail-popover::before {\n      display: none;\n    }\n    .afb-version-detail-item:not(.is-open) .afb-version-detail-trigger:hover + .afb-version-detail-popover,\n    .afb-version-detail-item:not(.is-open) .afb-version-detail-trigger:focus-visible + .afb-version-detail-popover {\n      max-height: 0;\n      margin-top: 0;\n      padding: 0 10px;\n      opacity: 0;\n      visibility: hidden;\n      pointer-events: none;\n      transform: translateY(-4px) scale(0.985);\n    }\n    .afb-version-detail-item.is-open .afb-version-detail-popover {\n      max-height: 680px;\n      margin-top: 8px;\n      padding: 10px;\n      opacity: 1;\n      visibility: visible;\n      pointer-events: auto;\n      transform: translateY(0) scale(1);\n    }\n    .afb-version-detail-popover-media {\n      aspect-ratio: 16 \/ 10;\n      max-height: min(34vh, 240px);\n    }\n    .afb-version-detail-popover-media img {\n      object-fit: contain;\n    }\n  }\n  @keyframes afbMobileModalSlideIn {\n    from { opacity: 0; transform: translateY(18px) scale(0.98); }\n    to { opacity: 1; transform: translateY(0) scale(1); }\n  }\n  @keyframes afbVersionNeonBorder {\n    0%, 100% {\n      box-shadow:\n        0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 30%, transparent),\n        0 10px 24px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 16%, transparent),\n        inset 0 1px 0 rgba(255,255,255,0.08);\n    }\n    50% {\n      box-shadow:\n        0 0 0 1px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 64%, transparent),\n        0 0 22px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 34%, transparent),\n        0 16px 34px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, transparent),\n        inset 0 1px 0 rgba(255,255,255,0.10);\n    }\n  }\n  .afb-helper-link { display:inline-block; margin-top:10px; font-size:12px; color:#7a5f9d; text-decoration:none; font-weight:600; }\n  .afb-helper-link:hover { text-decoration:underline; }\n  .afb-pill:hover { transform:translateY(-3px) scale(1.03); box-shadow:0 4px 12px rgba(0,0,0,0.08); filter:brightness(0.97); }\n  .afb-spec-row:hover { background:#ffffff !important; border-left:3px solid #b784c7; transform:translateX(4px); box-shadow:0 2px 8px rgba(0,0,0,0.03); }\n  .afb-feature-card:hover { transform:translateY(-6px); background:#ffffff !important; border:1px solid #eee3f4; box-shadow:0 8px 20px rgba(55,23,79,0.06); }\n  .afb-premium-highlights-box {\n    background: #ffffff;\n    border: 1px solid #eee3f4;\n    border-radius: 18px;\n    padding: 32px 24px;\n    position: relative;\n    overflow: hidden;\n    transition: border-color 0.4s ease, box-shadow 0.4s ease;\n    box-shadow: 0 4px 12px rgba(55, 23, 79, 0.02);\n    margin: 0 0 24px 0;\n  }\n  .afb-premium-highlights-box:hover {\n    box-shadow: 0 8px 24px rgba(55, 23, 79, 0.06);\n    border-color: #d4b5e0;\n  }\n  .afb-premium-highlights-box::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: -150%;\n    width: 50%;\n    height: 100%;\n    background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(212,181,224,0.15) 50%, rgba(255,255,255,0) 100%);\n    transform: skewX(-25deg);\n    pointer-events: none;\n    z-index: 1;\n    animation: afbAutoGlassSweep 5s ease-in-out infinite;\n    opacity: 1;\n    transition: opacity 0.3s ease;\n  }\n  .afb-premium-highlights-box:hover::after { opacity: 0; }\n  .afb-title-amethyst {\n    background: linear-gradient(110deg, #37174f 0%, #37174f 30%, #e8daf5 45%, #ffffff 50%, #b784c7 55%, #37174f 70%, #37174f 100%);\n    background-size: 300% auto;\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    color: transparent;\n    display: inline-flex;\n    animation: afbMetallicPulse 5s cubic-bezier(0.25, 0.8, 0.25, 1) infinite;\n  }\n  .afb-highlights-header {\n    margin: 0 0 28px 0;\n    font-size: 24px;\n    font-weight: 900;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 12px;\n    letter-spacing: -0.5px;\n    position: relative;\n    z-index: 2;\n  }\n  .afb-icon-star-purple {\n    color: #37174f;\n    font-size: 20px;\n    display: inline-block;\n  }\n  .afb-hl-list {\n    margin: 0;\n    padding: 0;\n    list-style: none;\n    position: relative;\n    z-index: 2;\n  }\n  .afb-hl-list:empty { display: none; }\n  .afb-hl-list:empty + .afb-limited-card { margin-top: 0; }\n  .afb-hl-list li {\n    position: relative;\n    padding: 8px 16px 8px 32px;\n    margin-bottom: 8px;\n    font-size: 14.5px;\n    line-height: 1.8;\n    color: #4b4b4b;\n    border-radius: 8px;\n    transition: all 0.3s ease;\n    background: transparent;\n  }\n  .afb-hl-list li:last-child { margin-bottom: 0; }\n  .afb-hl-list li::before {\n    content: '';\n    position: absolute;\n    left: 12px;\n    top: 17px;\n    width: 5px;\n    height: 5px;\n    background: #d1d5db;\n    border-radius: 50%;\n    transition: all 0.3s ease;\n  }\n  .afb-hl-list li:hover {\n    color: #2f2f2f;\n    transform: translateX(2px);\n    background: linear-gradient(90deg, rgba(212, 181, 224, 0.1) 0%, transparent 100%);\n    box-shadow: inset 2px 0 0 #37174f;\n  }\n  .afb-hl-list li:hover::before {\n    background: #37174f;\n    transform: scale(1.2);\n  }\n  .afb-hl-list strong {\n    color: #2f2f2f;\n    font-weight: 700;\n  }\n  .afb-limited-card {\n    background: linear-gradient(135deg, #ffffff 0%, color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 8%, #ffffff) 100%);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 22%, #ffffff);\n    border-radius: 12px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: space-between;\n    padding: 16px 20px;\n    margin-top: 24px;\n    position: relative;\n    z-index: 2;\n    transition: all 0.3s cubic-bezier(0.165, 0.84, 0.44, 1);\n    box-sizing: border-box;\n  }\n  .afb-limited-card:hover {\n    border-color: var(--afb-theme-hex, #7c3aed);\n    box-shadow: 0 6px 20px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 16%, transparent);\n    transform: translateY(-2px);\n    border-left: 1px solid var(--afb-theme-hex, #7c3aed);\n  }\n  .afb-limited-text {\n    flex: 1 1 auto;\n    min-width: 0;\n  }\n  .afb-limited-text strong {\n    color: #2f2f2f;\n    font-weight: 700;\n    font-size: 14.5px;\n    display: block;\n    line-height: 1.2;\n  }\n  .afb-limited-text span {\n    font-size: 13px;\n    color: #666;\n    margin-top: 4px;\n    line-height: 1.45;\n    display: block;\n  }\n  .afb-limited-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    padding: 6px 12px;\n    border-radius: 8px;\n    font-size: 13px;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    background: color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 12%, #ffffff);\n    color: var(--afb-theme-hex, #7c3aed);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 24%, transparent);\n    transition: all 0.3s ease;\n    flex-shrink: 0;\n  }\n  .afb-limited-card:hover .afb-limited-badge {\n    background: var(--afb-theme-hex, #7c3aed);\n    color: #ffffff;\n    box-shadow: 0 4px 12px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 30%, transparent);\n    transform: scale(1.05);\n  }\n  .afb-simple-pill {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    background: linear-gradient(135deg, var(--afb-theme-hex, #7c3aed) 0%, color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 72%, #0f172a) 100%);\n    color: #ffffff;\n    padding: 6px 14px;\n    border-radius: 999px;\n    font-size: 13px;\n    font-weight: 800;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    box-shadow: 0 4px 12px color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 25%, transparent);\n    border: 1px solid color-mix(in srgb, var(--afb-theme-hex, #7c3aed) 42%, rgba(255,255,255,0.2));\n  }\n  @keyframes afbScaleIn { from { opacity:0; transform:scale(0.90); } to { opacity:1; transform:scale(1); } }\n  @keyframes afbFadeIn { from { opacity:0; } to { opacity:1; } }\n  @keyframes afbShimmer { 0% { left: -100%; } 20% { left: 200%; } 100% { left: 200%; } }\n  @keyframes afbFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }\n  @keyframes afbShineSweepLoop {\n    0%, 14% { background-position: 200% center; }\n    34%, 72% { background-position: -200% center; }\n    100% { background-position: -200% center; }\n  }\n  @keyframes afbPremiumShine { 0% { left: -150%; } 20% { left: 200%; } 100% { left: 200%; } }\n  @keyframes afbPulseGlow { 0% { opacity: 0.10; transform: scale(0.9); } 100% { opacity: 0.22; transform: scale(1.1); } }\n  @keyframes afbPulseThemeBorder { 0% { border-color: var(--afb-theme-border); } 100% { border-color: var(--afb-theme-hover); box-shadow: 0 0 15px var(--afb-theme-shadow); } }\n  @keyframes afbMidnightCardPulse {\n    0% { border-color: rgba(183, 132, 199, 0.2); box-shadow: 0 16px 40px rgba(45, 22, 65, 0.15); }\n    100% { border-color: rgba(183, 132, 199, 0.6); box-shadow: 0 16px 40px rgba(45, 22, 65, 0.35); }\n  }\n  @keyframes afbBronzeCardPulse {\n    0% { border-color: rgba(197, 155, 39, 0.25); box-shadow: 0 16px 40px rgba(74, 43, 24, 0.2); }\n    100% { border-color: rgba(197, 155, 39, 0.7); box-shadow: 0 16px 40px rgba(197, 155, 39, 0.15); }\n  }\n  @keyframes afbIconFloat {\n    0%, 100% { transform: translateY(0) rotate(0deg) scale(1); }\n    25% { transform: translateY(-3px) rotate(-4deg) scale(1.04); }\n    50% { transform: translateY(-5px) rotate(4deg) scale(1.08); }\n    75% { transform: translateY(-3px) rotate(-2deg) scale(1.04); }\n  }\n  @keyframes afbIconGlow {\n    0%, 100% { filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3)); }\n    50% { filter: drop-shadow(0 0 10px var(--afb-theme-hex)) drop-shadow(0 0 18px var(--afb-theme-shadow)); }\n  }\n  @keyframes afbAutoGlassSweepDark { 0% { left: -150%; } 30% { left: 200%; } 100% { left: 200%; } }\n  @keyframes afbSilverLilacShine { 0% { background-position: 200% center; } 100% { background-position: -200% center; } }\n  @keyframes afbAutoGlassSweep { 0% { left: -150%; } 30% { left: 200%; } 100% { left: 200%; } }\n  @keyframes afbArDemoFloat {\n    0%, 100% { transform: translateY(0) scale(1); }\n    50% { transform: translateY(-8px) scale(1.015); }\n  }\n  @keyframes afbArDemoShadow {\n    0%, 100% { opacity: 0.42; transform: scaleX(0.94); }\n    50% { opacity: 0.28; transform: scaleX(1.06); }\n  }\n  @keyframes afbQrLedPulse {\n    0%, 100% { transform: scale(0.82); box-shadow: 0 0 0 0 rgba(34,197,94,0.50), 0 0 12px rgba(34,197,94,0.72); }\n    50% { transform: scale(1.18); box-shadow: 0 0 0 9px rgba(34,197,94,0), 0 0 22px rgba(34,197,94,0.92); }\n  }\n  @keyframes afbPhoneScanCue {\n    0% { opacity: 0; transform: translate(-50%, -42%) scale(0.84); }\n    12% { opacity: 1; transform: translate(-50%, -52%) scale(1); }\n    70% { opacity: 1; transform: translate(-50%, -55%) scale(1); }\n    100% { opacity: 0; transform: translate(-50%, -62%) scale(0.96); }\n  }\n  @keyframes afbPhoneScanRing {\n    0% { opacity: 0.34; transform: translate(-50%, -50%) scale(0.42); }\n    100% { opacity: 0; transform: translate(-50%, -50%) scale(1.18); }\n  }\n  @keyframes afbGoldTextShine { 0% { background-position: 200% center; } 100% { background-position: -200% center; } }\n  @keyframes afbMetallicPulse { 0% { background-position: 150% center; } 30% { background-position: -50% center; } 100% { background-position: -50% center; } }\n\n  .afb-pill-row:hover .afb-pill,\n  .afb-pill-row.is-user-interacting .afb-pill { animation-play-state: paused; }\n  .afb-pill {\n    display:inline-flex;\n    align-items:center;\n    gap:8px;\n    cursor:default;\n    position:relative;\n    will-change:transform;\n    animation: afbPillWave 6s ease-in-out infinite;\n  }\n  .afb-pill:hover {\n    animation-play-state: paused;\n  }\n  .afb-pill-row .afb-pill:nth-child(1) { animation-delay: 0s; }\n  .afb-pill-row .afb-pill:nth-child(2) { animation-delay: 0.18s; }\n  .afb-pill-row .afb-pill:nth-child(3) { animation-delay: 0.36s; }\n  .afb-pill-row .afb-pill:nth-child(4) { animation-delay: 0.54s; }\n  .afb-pill-row .afb-pill:nth-child(5) { animation-delay: 0.72s; }\n  .afb-pill-row .afb-pill:nth-child(6) { animation-delay: 0.90s; }\n  .afb-pill-row .afb-pill:nth-child(7) { animation-delay: 1.08s; }\n  .afb-pill-row .afb-pill:nth-child(8) { animation-delay: 1.26s; }\n  .afb-pill-icon {\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    line-height:1;\n  }\n  .afb-pill-visual-reality {\n    cursor:pointer !important;\n    text-decoration:none !important;\n  }\n  .afb-pill-visual-reality:hover {\n    text-decoration:none !important;\n  }\n  .afb-visual-dot {\n    width:10px;\n    height:10px;\n    border-radius:999px;\n    background:#22c55e;\n    box-shadow:0 0 0 rgba(34,197,94,0.55);\n    animation: afbGreenPulse 1.5s ease-in-out infinite;\n    flex:0 0 auto;\n  }\n  .afb-ar-jump-target {\n    scroll-margin-top: 28px;\n  }\n  @keyframes afbGreenPulse {\n    0%, 100% {\n      transform: scale(0.95);\n      box-shadow: 0 0 0 0 rgba(34,197,94,0.45);\n      opacity: 0.95;\n    }\n    50% {\n      transform: scale(1.12);\n      box-shadow: 0 0 0 8px rgba(34,197,94,0);\n      opacity: 1;\n    }\n  }\n  @keyframes afbPillWave {\n    0%, 88%, 100% { transform: translateY(0); }\n    4% { transform: translateY(-4px); }\n    8% { transform: translateY(0); }\n  }\n  @media (max-width: 600px) {\n    .afb-pill { animation: none; }\n  }\n\u003c\/style\u003e\n\u003cspan id=\"afb-close-target\"\u003e\u003c\/span\u003e\n\u003cdiv class=\"afb-showcase-container\" id=\"afb-main-container\" style=\"--afb-theme-hex:#3b82f6; --afb-theme-border:rgba(59, 130, 246, 0.30); --afb-theme-hover:rgba(59, 130, 246, 0.80); --afb-theme-shadow:rgba(59, 130, 246, 0.15); --afb-theme-soft:rgba(59, 130, 246, 0.08); max-width:860px;margin:0 auto;padding:16px 14px 24px 14px;font-family:'Rubik',system-ui,sans-serif;color:#2f2f2f;line-height:1.75;box-sizing:border-box;\"\u003e\n\u003cp class=\"afb-scroll-reveal\" style=\"margin:0 0 10px 0;font-size:14px;color:#6b6b6b;text-align:center;\"\u003e\u003ca href=\"https:\/\/www.instagram.com\/actionfigure.brasil\/\" rel=\"noopener\" style=\"color:#b784c7;text-decoration:none;font-weight:600;transition:color 0.2s;\" target=\"_blank\"\u003eActionFigureBrasil\u003c\/a\u003e apresenta uma peça premium produzida pela \u003ca href=\"https:\/\/actionfigurebrasil.com.br\/collections\/vendors?q=Prime%201%20Studio\" rel=\"noopener\" style=\"color:#6b21a8;text-decoration:none;font-weight:700;\" target=\"_blank\"\u003ePrime 1 Studio\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv style=\"text-align:center;\"\u003e\n\u003ch2 class=\"afb-title-wow\" style=\"margin:0;font-size:32px;line-height:1.2;font-weight:900;\"\u003eBatman Versus Superman (Deluxe Version)\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cp class=\"afb-scroll-reveal\" style=\"margin:8px 0 0 0;font-size:14px;color:#7b7b7b;text-align:center;\"\u003eStatue • Deluxe\u003c\/p\u003e\n\u003cdiv class=\"afb-scroll-reveal afb-pill-row\" style=\"display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin:18px 0 24px 0;\"\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#f0fdf4;color:#166534;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e✅\u003c\/span\u003e\u003cspan\u003eDisponivel\u003c\/span\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#eef2ff;color:#312e81;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e🌌\u003c\/span\u003e\u003cspan\u003eDC Comics\u003c\/span\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#f5f3ff;color:#6b21a8;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e🛠️\u003c\/span\u003e\u003cspan\u003ePrime 1 Studio\u003c\/span\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#ecfeff;color:#155e75;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e📏\u003c\/span\u003e\u003cspan\u003e43\"\u003c\/span\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#f0fdf4;color:#3f6212;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e⚖️\u003c\/span\u003e\u003cspan\u003e69,9 kg\u003c\/span\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-pill\" style=\"background:#faf5ff;color:#7e22ce;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;\"\u003e\u003cspan class=\"afb-pill-icon\"\u003e🗿\u003c\/span\u003e\u003cspan\u003ePolystone\u003c\/span\u003e\u003c\/span\u003e\n\u003ca class=\"afb-pill afb-pill-visual-reality\" href=\"#\" id=\"btn-jump-ar\" style=\"background:#ecfdf5;color:#065f46;padding:8px 14px;border-radius:999px;font-size:13px;font-weight:bold;text-decoration:none;border:1px solid rgba(5,150,105,0.18);\"\u003e\u003cspan class=\"afb-visual-dot\"\u003e\u003c\/span\u003e\u003cspan\u003eVisualReality\u003c\/span\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003ca class=\"afb-scroll-reveal afb-premium-card\" href=\"#afb-version-overlay\" id=\"btn-open-version\" role=\"button\"\u003e\n\u003cdiv class=\"afb-premium-glow\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-premium-inner\"\u003e\n\u003cdiv class=\"afb-premium-icon-box\"\u003e\u003cspan class=\"afb-premium-icon-animated\" style=\"font-size:28px;\"\u003e🏆\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-premium-text-content\"\u003e\n\u003cdiv class=\"afb-premium-label\"\u003eDeluxe Edition\u003c\/div\u003e\n\u003cdiv class=\"afb-premium-title\"\u003eBatman Versus Superman - Ultimate Diorama Masterline\u003c\/div\u003e\n\u003cdiv class=\"afb-premium-desc\"\u003eAcompanha opcao de arma extra para variar a presenca da peca na colecao.\u003c\/div\u003e\n\u003cdiv class=\"afb-premium-cta\"\u003e\u003cspan\u003e👉 Clique para ver os diferenciais da versão\u003c\/span\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/a\u003e\n\u003cstyle\u003e\n  .afb-product-description-body {\n    --afb-text: #37174f;\n    --afb-purple: #6d3291;\n    --afb-purple-dark: #37174f;\n    --afb-purple-light: #d4b5e0;\n    --afb-theme-rgb: 109, 50, 145;\n    --afb-theme-deep-rgb: 55, 23, 79;\n    --afb-red: #d62839;\n    --afb-red-dark: #9f1020;\n    --afb-soft-text: rgba(55, 23, 79, 0.72);\n    --afb-muted-text: rgba(55, 23, 79, 0.46);\n    --afb-border: rgba(55, 23, 79, 0.12);\n    --afb-shadow: 0 18px 42px rgba(55, 23, 79, 0.10);\n    --afb-merchant-progress: 0;\n    --afb-narration-out-duration: 1.16s;\n    --afb-narration-out-delay: 0.08s;\n    --afb-merchant-in-duration: 1.02s;\n    --afb-merchant-in-delay: 0.66s;\n    width: 100%;\n    max-width: 980px;\n    margin: 0 auto;\n    color: var(--afb-text);\n    font-family: inherit;\n    box-sizing: border-box;\n    container-type: inline-size;\n  }\n\n  .afb-product-description-body * {\n    box-sizing: border-box;\n  }\n\n  .afb-product-description-body.is-reading {\n    overflow-anchor: none;\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"standard\"] {\n    --afb-theme-rgb: 107, 114, 128;\n    --afb-theme-deep-rgb: 55, 65, 81;\n    --afb-purple: #6b7280;\n    --afb-purple-dark: #374151;\n    --afb-purple-light: #e5e7eb;\n    --afb-border: rgba(107, 114, 128, 0.12);\n    --afb-shadow: 0 18px 42px rgba(107, 114, 128, 0.10);\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"exclusive\"] {\n    --afb-theme-rgb: 225, 29, 72;\n    --afb-theme-deep-rgb: 136, 19, 55;\n    --afb-purple: #e11d48;\n    --afb-purple-dark: #881337;\n    --afb-purple-light: #fecdd3;\n    --afb-border: rgba(225, 29, 72, 0.14);\n    --afb-shadow: 0 18px 42px rgba(225, 29, 72, 0.12);\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"deluxe\"] {\n    --afb-theme-rgb: 37, 99, 235;\n    --afb-theme-deep-rgb: 30, 58, 138;\n    --afb-purple: #2563eb;\n    --afb-purple-dark: #1e3a8a;\n    --afb-purple-light: #bfdbfe;\n    --afb-border: rgba(37, 99, 235, 0.14);\n    --afb-shadow: 0 18px 42px rgba(37, 99, 235, 0.10);\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"bonus\"] {\n    --afb-theme-rgb: 236, 72, 153;\n    --afb-theme-deep-rgb: 157, 23, 77;\n    --afb-purple: #ec4899;\n    --afb-purple-dark: #9d174d;\n    --afb-purple-light: #fbcfe8;\n    --afb-border: rgba(236, 72, 153, 0.14);\n    --afb-shadow: 0 18px 42px rgba(236, 72, 153, 0.10);\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"definitive\"] {\n    --afb-theme-rgb: 251, 191, 36;\n    --afb-theme-deep-rgb: 146, 64, 14;\n    --afb-purple: #fbbf24;\n    --afb-purple-dark: #92400e;\n    --afb-purple-light: #fde68a;\n    --afb-border: rgba(251, 191, 36, 0.16);\n    --afb-shadow: 0 18px 42px rgba(251, 191, 36, 0.12);\n  }\n\n  .afb-product-description-body[data-body-theme-key=\"prestige\"] {\n    --afb-theme-rgb: 124, 58, 237;\n    --afb-theme-deep-rgb: 76, 29, 149;\n    --afb-purple: #7c3aed;\n    --afb-purple-dark: #4c1d95;\n    --afb-purple-light: #ddd6fe;\n    --afb-border: rgba(124, 58, 237, 0.14);\n    --afb-shadow: 0 18px 42px rgba(124, 58, 237, 0.12);\n  }\n\n  .afb-audio-controls {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 14px;\n    flex-wrap: wrap;\n    margin-bottom: 22px;\n    position: relative;\n    z-index: 100;\n  }\n\n  .afb-audio-btn {\n    min-height: 56px;\n    min-width: 220px;\n    padding: 0 22px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 11px;\n    border-radius: 999px;\n    border: 1px solid rgba(212, 181, 224, 0.38);\n    background: linear-gradient(135deg, #4a1f68 0%, #6d3291 48%, #2d1042 100%);\n    color: #fff;\n    cursor: pointer;\n    font-size: 15.5px;\n    font-weight: 950;\n    letter-spacing: -0.01em;\n    box-shadow:\n      0 16px 34px rgba(55, 23, 79, 0.24),\n      inset 0 1px 0 rgba(255,255,255,0.18);\n    transition: transform 0.22s ease, box-shadow 0.22s ease, filter 0.22s ease;\n  }\n\n  .afb-audio-btn:hover {\n    transform: translateY(-2px);\n    filter: brightness(1.04);\n    box-shadow:\n      0 20px 40px rgba(55, 23, 79, 0.30),\n      inset 0 1px 0 rgba(255,255,255,0.22);\n  }\n\n  .afb-audio-btn svg {\n    width: 21px;\n    height: 21px;\n    flex: 0 0 21px;\n  }\n\n  .afb-audio-pause-btn {\n    min-height: 36px;\n    min-width: 36px;\n    width: auto;\n    padding: 0 12px 0 11px;\n    border-radius: 999px;\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.26);\n    background: linear-gradient(135deg, rgba(255,255,255,0.96), rgba(245,243,255,0.98));\n    color: var(--afb-purple-dark);\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    box-shadow:\n      0 10px 18px rgba(var(--afb-theme-rgb), 0.10),\n      inset 0 1px 0 rgba(255,255,255,0.92);\n    cursor: pointer;\n    transition: transform 0.22s ease, box-shadow 0.22s ease, opacity 0.22s ease, filter 0.22s ease;\n    flex: 0 0 auto;\n  }\n\n  .afb-audio-pause-btn:hover {\n    transform: translateY(-1px) scale(1.02);\n    box-shadow:\n      0 14px 24px rgba(var(--afb-theme-rgb), 0.16),\n      inset 0 1px 0 rgba(255,255,255,0.96);\n    filter: brightness(1.02);\n  }\n\n  .afb-audio-pause-btn[disabled] {\n    opacity: 0.42;\n    cursor: default;\n    transform: none;\n    box-shadow:\n      0 8px 16px rgba(var(--afb-theme-rgb), 0.06),\n      inset 0 1px 0 rgba(255,255,255,0.82);\n  }\n\n  .afb-audio-pause-btn svg {\n    width: 12px;\n    height: 12px;\n    display: block;\n  }\n\n  .afb-audio-pause-btn-icon {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 14px;\n    height: 14px;\n    flex: 0 0 14px;\n  }\n\n  .afb-audio-pause-btn-text {\n    font-size: 10.5px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    line-height: 1;\n    white-space: nowrap;\n  }\n\n  .afb-audio-pause-btn.is-paused {\n    background: linear-gradient(135deg, rgba(var(--afb-theme-rgb), 0.96), rgba(var(--afb-theme-deep-rgb), 0.92));\n    color: #ffffff;\n    border-color: rgba(var(--afb-theme-rgb), 0.46);\n    box-shadow:\n      0 10px 20px rgba(var(--afb-theme-rgb), 0.22),\n      inset 0 1px 0 rgba(255,255,255,0.18);\n  }\n\n  .afb-voice-select-wrap {\n    min-height: 56px;\n    min-width: 280px;\n    position: relative;\n    display: inline-flex;\n    z-index: 998;\n  }\n\n  .afb-voice-select-wrap \u003e select {\n    position: absolute !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n  }\n\n  .afb-voice-btn {\n    min-height: 56px;\n    width: 100%;\n    min-width: 280px;\n    padding: 0 18px 0 20px;\n    border-radius: 999px;\n    border: 1px solid rgba(212, 181, 224, 0.62);\n    background: linear-gradient(135deg, rgba(255,255,255,0.98), rgba(250,247,255,0.98));\n    box-shadow:\n      0 8px 20px rgba(55, 23, 79, 0.08),\n      inset 0 1px 0 rgba(255,255,255,0.82);\n    color: var(--afb-text);\n    display: inline-flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    cursor: pointer;\n    transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;\n  }\n\n  .afb-voice-btn:hover {\n    transform: translateY(-2px);\n    border-color: rgba(55, 23, 79, 0.24);\n    box-shadow:\n      0 12px 26px rgba(55, 23, 79, 0.12),\n      inset 0 1px 0 rgba(255,255,255,0.85);\n  }\n\n  .afb-voice-btn::after {\n    content: '';\n    flex: 0 0 auto;\n    width: 9px;\n    height: 9px;\n    border-right: 2px solid var(--afb-text);\n    border-bottom: 2px solid var(--afb-text);\n    transform: translateY(-2px) rotate(45deg);\n    opacity: 0.75;\n    transition: transform 0.18s ease;\n  }\n\n  .afb-voice-select-wrap.is-open .afb-voice-btn::after {\n    transform: translateY(2px) rotate(-135deg);\n  }\n\n  .afb-voice-btn-copy {\n    min-width: 0;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n  }\n\n  .afb-voice-btn-mark {\n    width: 30px;\n    height: 30px;\n    min-width: 30px;\n    border-radius: 999px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(135deg, rgba(55, 23, 79, 0.14), rgba(212, 181, 224, 0.28));\n    box-shadow: inset 0 1px 0 rgba(255,255,255,0.72);\n    color: #37174f;\n    font-size: 15px;\n    line-height: 1;\n  }\n\n  .afb-voice-btn[data-voice=\"premium\"] .afb-voice-btn-mark {\n    background: linear-gradient(135deg, rgba(178, 120, 212, 0.16), rgba(230, 210, 244, 0.72));\n    color: #6d28d9;\n  }\n\n  .afb-voice-btn[data-voice=\"epic\"] .afb-voice-btn-mark {\n    background: linear-gradient(135deg, rgba(225, 29, 72, 0.12), rgba(251, 191, 36, 0.24));\n    color: #ea580c;\n  }\n\n  .afb-voice-btn[data-voice=\"classic\"] .afb-voice-btn-mark {\n    background: linear-gradient(135deg, rgba(59, 130, 246, 0.12), rgba(191, 219, 254, 0.5));\n    color: #2563eb;\n  }\n\n  .afb-voice-btn-label {\n    min-width: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: 14.5px;\n    font-weight: 900;\n    letter-spacing: -0.1px;\n  }\n\n  .afb-voice-menu {\n    position: absolute;\n    top: calc(100% + 10px);\n    left: 0;\n    min-width: 100%;\n    width: 100%;\n    padding: 8px;\n    border-radius: 18px;\n    background: rgba(255,255,255,0.98);\n    border: 1px solid rgba(55, 23, 79, 0.12);\n    box-shadow:\n      0 22px 55px rgba(55, 23, 79, 0.18),\n      0 0 0 1px rgba(255,255,255,0.8) inset;\n    opacity: 0;\n    visibility: hidden;\n    transform: translateY(-6px) scale(0.98);\n    transform-origin: top center;\n    transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s ease;\n    z-index: 9999;\n  }\n\n  .afb-voice-select-wrap.is-open .afb-voice-menu {\n    opacity: 1;\n    visibility: visible;\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-voice-menu button {\n    width: 100%;\n    min-height: 52px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 10px 12px;\n    border: none;\n    border-radius: 14px;\n    background: transparent;\n    color: #2a103d;\n    text-align: left;\n    cursor: pointer;\n    transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;\n  }\n\n  .afb-voice-menu button:hover,\n  .afb-voice-menu button.is-selected {\n    background: linear-gradient(135deg, rgba(55, 23, 79, 0.09), rgba(212, 181, 224, 0.14));\n    color: #37174f;\n    transform: translateX(2px);\n  }\n\n  .afb-voice-option-mark {\n    width: 32px;\n    height: 32px;\n    min-width: 32px;\n    border-radius: 999px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    box-shadow:\n      0 0 0 1px rgba(55, 23, 79, 0.08),\n      inset 0 1px 0 rgba(255,255,255,0.72);\n  }\n\n  .afb-voice-option-mark::before {\n    content: '';\n    width: 12px;\n    height: 12px;\n    border-radius: 999px;\n    display: block;\n  }\n\n  .afb-voice-option[data-value=\"premium\"] .afb-voice-option-mark {\n    background: linear-gradient(135deg, rgba(178, 120, 212, 0.16), rgba(230, 210, 244, 0.72));\n  }\n\n  .afb-voice-option[data-value=\"premium\"] .afb-voice-option-mark::before {\n    background: linear-gradient(135deg, #7c3aed, #c084fc);\n  }\n\n  .afb-voice-option[data-value=\"epic\"] .afb-voice-option-mark {\n    background: linear-gradient(135deg, rgba(225, 29, 72, 0.12), rgba(251, 191, 36, 0.24));\n  }\n\n  .afb-voice-option[data-value=\"epic\"] .afb-voice-option-mark::before {\n    background: linear-gradient(135deg, #f97316, #facc15);\n  }\n\n  .afb-voice-option[data-value=\"classic\"] .afb-voice-option-mark {\n    background: linear-gradient(135deg, rgba(59, 130, 246, 0.12), rgba(191, 219, 254, 0.5));\n  }\n\n  .afb-voice-option[data-value=\"classic\"] .afb-voice-option-mark::before {\n    background: linear-gradient(135deg, #2563eb, #60a5fa);\n  }\n\n  .afb-voice-option-copy {\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n  }\n\n  .afb-voice-option-title {\n    font-size: 13.5px;\n    font-weight: 900;\n    line-height: 1.15;\n  }\n\n  .afb-voice-option-desc {\n    font-size: 11.5px;\n    font-weight: 600;\n    line-height: 1.25;\n    color: rgba(55, 23, 79, 0.68);\n  }\n\n  .afb-native-select-hidden {\n    position: absolute !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n  }\n\n  .afb-lang-select {\n    position: relative;\n    display: inline-flex;\n    z-index: 999;\n  }\n\n  .afb-lang-btn {\n    min-height: 56px;\n    min-width: 56px;\n    width: 56px;\n    padding: 0;\n    border-radius: 999px;\n    border: 1px solid rgba(212, 181, 224, 0.62);\n    background: linear-gradient(135deg, rgba(255,255,255,0.98), rgba(250,247,255,0.98));\n    color: var(--afb-text);\n    cursor: pointer;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    box-shadow:\n      0 8px 20px rgba(55, 23, 79, 0.08),\n      inset 0 1px 0 rgba(255,255,255,0.82);\n    transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;\n  }\n\n  .afb-lang-btn:hover {\n    transform: translateY(-2px);\n    border-color: rgba(55, 23, 79, 0.24);\n    box-shadow:\n      0 12px 26px rgba(55, 23, 79, 0.12),\n      inset 0 1px 0 rgba(255,255,255,0.85);\n  }\n\n  .afb-lang-menu {\n    position: absolute;\n    top: calc(100% + 10px);\n    right: 0;\n    min-width: 235px;\n    padding: 8px;\n    border-radius: 18px;\n    background: rgba(255,255,255,0.98);\n    border: 1px solid rgba(55, 23, 79, 0.12);\n    box-shadow:\n      0 22px 55px rgba(55, 23, 79, 0.18),\n      0 0 0 1px rgba(255,255,255,0.8) inset;\n    opacity: 0;\n    visibility: hidden;\n    transform: translateY(-6px) scale(0.98);\n    transform-origin: top right;\n    transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s ease;\n    z-index: 9999;\n  }\n\n  .afb-lang-select.is-open .afb-lang-menu {\n    opacity: 1;\n    visibility: visible;\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-lang-menu button {\n    width: 100%;\n    min-height: 40px;\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    padding: 10px 12px;\n    border: none;\n    border-radius: 12px;\n    background: transparent;\n    color: #2a103d;\n    font-size: 13px;\n    font-weight: 800;\n    text-align: left;\n    white-space: nowrap;\n    cursor: pointer;\n    transition: background 0.18s ease, color 0.18s ease, transform 0.18s ease;\n  }\n\n  .afb-lang-menu button:hover,\n  .afb-lang-menu button.is-selected {\n    background: linear-gradient(135deg, rgba(55, 23, 79, 0.09), rgba(212, 181, 224, 0.14));\n    color: #37174f;\n    transform: translateX(2px);\n  }\n\n  .afb-flag {\n    width: 24px;\n    height: 24px;\n    min-width: 24px;\n    min-height: 24px;\n    display: inline-block;\n    position: relative;\n    overflow: hidden;\n    border-radius: 999px;\n    box-shadow:\n      0 0 0 1px rgba(55, 23, 79, 0.12),\n      0 4px 10px rgba(55, 23, 79, 0.10);\n    vertical-align: middle;\n  }\n\n  .afb-flag::before,\n  .afb-flag::after {\n    content: '';\n    position: absolute;\n    display: block;\n  }\n\n  .afb-flag-br { background: #169b62; }\n  .afb-flag-br::before {\n    width: 14px;\n    height: 14px;\n    background: #ffdf00;\n    left: 5px;\n    top: 5px;\n    transform: rotate(45deg);\n    border-radius: 2px;\n  }\n  .afb-flag-br::after {\n    width: 8px;\n    height: 8px;\n    background: #002776;\n    left: 8px;\n    top: 8px;\n    border-radius: 999px;\n  }\n  .afb-flag-pt { background: linear-gradient(90deg, #006600 0 42%, #ff0000 42% 100%); }\n  .afb-flag-pt::after {\n    width: 7px;\n    height: 7px;\n    background: #ffcc00;\n    left: 8px;\n    top: 8px;\n    border-radius: 999px;\n  }\n  .afb-flag-us {\n    background: repeating-linear-gradient(to bottom, #b22234 0 2px, #ffffff 2px 4px);\n  }\n  .afb-flag-us::before {\n    width: 11px;\n    height: 9px;\n    background: #3c3b6e;\n    left: 0;\n    top: 0;\n    border-radius: 999px 0 2px 0;\n  }\n  .afb-flag-gb {\n    background:\n      linear-gradient(32deg, transparent 0 39%, #ffffff 39% 45%, #c8102e 45% 51%, #ffffff 51% 57%, transparent 57% 100%),\n      linear-gradient(148deg, transparent 0 39%, #ffffff 39% 45%, #c8102e 45% 51%, #ffffff 51% 57%, transparent 57% 100%),\n      linear-gradient(90deg, transparent 0 41%, #ffffff 41% 59%, transparent 59% 100%),\n      linear-gradient(0deg, transparent 0 41%, #ffffff 41% 59%, transparent 59% 100%),\n      linear-gradient(90deg, transparent 0 46%, #c8102e 46% 54%, transparent 54% 100%),\n      linear-gradient(0deg, transparent 0 46%, #c8102e 46% 54%, transparent 54% 100%),\n      #012169;\n  }\n  .afb-flag-latam {\n    background:\n      radial-gradient(circle at 34% 34%, #bbf7d0 0 17%, #22c55e 18% 30%, transparent 31%),\n      radial-gradient(circle at 68% 62%, #86efac 0 13%, #16a34a 14% 22%, transparent 23%),\n      linear-gradient(135deg, #0ea5e9 0%, #2563eb 100%);\n  }\n  .afb-flag-es { background: linear-gradient(to bottom, #c60b1e 0 26%, #ffc400 26% 74%, #c60b1e 74% 100%); }\n  .afb-flag-fr { background: linear-gradient(90deg, #0055a4 0 33.33%, #ffffff 33.33% 66.66%, #ef4135 66.66% 100%); }\n  .afb-flag-it { background: linear-gradient(90deg, #009246 0 33.33%, #ffffff 33.33% 66.66%, #ce2b37 66.66% 100%); }\n  .afb-flag-de { background: linear-gradient(to bottom, #000000 0 33.33%, #dd0000 33.33% 66.66%, #ffce00 66.66% 100%); }\n  .afb-flag-jp { background: #ffffff; }\n  .afb-flag-jp::after {\n    width: 10px;\n    height: 10px;\n    background: #bc002d;\n    border-radius: 999px;\n    left: 7px;\n    top: 7px;\n  }\n\n  .afb-visible-description {\n    position: relative;\n    isolation: isolate;\n    margin-bottom: 22px;\n    padding: 28px 28px 24px;\n    border-radius: 26px;\n    background:\n      radial-gradient(circle at top center, rgba(212, 181, 224, 0.16), transparent 46%),\n      linear-gradient(135deg, rgba(255,255,255,0.98), rgba(252,249,255,0.98));\n    border: 1px solid var(--afb-border);\n    box-shadow: var(--afb-shadow);\n    overflow: hidden;\n    max-height: 2500px;\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    transition:\n      opacity 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      max-height 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      padding 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      margin 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      border 0.58s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-visible-description p {\n    position: relative;\n    margin: 0 0 14px;\n    padding: 2px 0;\n    color: var(--afb-soft-text);\n    font-size: 15px;\n    line-height: 1.78;\n    font-weight: 700;\n    border-radius: 14px;\n    transition:\n      color 0.22s ease,\n      background 0.22s ease,\n      box-shadow 0.22s ease,\n      transform 0.22s ease,\n      padding 0.22s ease;\n  }\n\n  .afb-visible-description p:first-child {\n    color: var(--afb-text);\n    font-size: 18px;\n    font-weight: 950;\n    letter-spacing: -0.02em;\n  }\n\n  .afb-visible-description p:last-child {\n    margin-bottom: 0;\n  }\n\n  @media (hover: hover) and (pointer: fine) {\n    .afb-visible-description::before {\n      content: '';\n      position: absolute;\n      inset: -20% auto -20% -42%;\n      z-index: -1;\n      width: 38%;\n      background: linear-gradient(90deg, transparent, rgba(109,50,145,0.11), transparent);\n      transform: skewX(-15deg) translateX(-120%);\n      opacity: 0;\n      transition: opacity 0.28s ease, transform 0.78s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    .afb-visible-description:hover::before {\n      opacity: 1;\n      transform: skewX(-15deg) translateX(420%);\n    }\n\n    .afb-visible-description p:hover {\n      color: var(--afb-text);\n      padding-left: 14px;\n      padding-right: 14px;\n      transform: translateX(3px);\n      background: linear-gradient(135deg, rgba(255,255,255,0.86), rgba(212,181,224,0.18));\n      box-shadow:\n        inset 4px 0 0 rgba(109,50,145,0.74),\n        0 10px 24px rgba(55,23,79,0.08);\n    }\n\n    .afb-visible-description p:hover::after {\n      content: '';\n      position: absolute;\n      left: 14px;\n      right: 14px;\n      bottom: 4px;\n      height: 1px;\n      background: linear-gradient(90deg, rgba(109,50,145,0), rgba(109,50,145,0.36), rgba(109,50,145,0));\n    }\n  }\n\n  .afb-product-description-body.is-reading .afb-visible-description,\n  .afb-product-description-body.is-loading .afb-visible-description {\n    opacity: 0;\n    transform: translateY(12px) scale(0.985);\n    filter: blur(12px);\n    max-height: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-bottom: 0;\n    border-width: 0;\n    pointer-events: none;\n  }\n\n  .afb-product-quote {\n    position: relative;\n    overflow: hidden;\n    isolation: isolate;\n    margin: 0;\n    padding: 0 26px;\n    min-height: 0;\n    max-height: 0;\n    opacity: 0;\n    transform: translateY(18px) scale(0.985);\n    filter: blur(12px);\n    pointer-events: none;\n    border-radius: 24px;\n    background:\n      linear-gradient(90deg, rgba(219,203,229,0.82) 0%, rgba(249,246,252,0.98) 38%, rgba(249,246,252,0.98) 62%, rgba(219,203,229,0.82) 100%);\n    border: 0 solid rgba(183, 160, 196, 0.52);\n    box-shadow:\n      0 10px 28px rgba(55, 23, 79, 0.08),\n      inset 0 1px 0 rgba(255,255,255,0.84);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition:\n      opacity 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      max-height 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      min-height 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      padding 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      margin 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      border-width 0.62s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-intro-visible .afb-product-quote {\n    margin-bottom: 18px;\n    padding: 24px 26px;\n    min-height: 110px;\n    max-height: 180px;\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    pointer-events: auto;\n    border-width: 1px;\n  }\n\n  .afb-product-quote::before,\n  .afb-product-quote::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 52%;\n    z-index: 5;\n    pointer-events: none;\n    background:\n      radial-gradient(circle at center, rgba(212, 181, 224, 0.28), transparent 46%),\n      linear-gradient(135deg, rgba(250,247,255,0.98), rgba(235,222,245,0.96));\n    box-shadow:\n      0 0 24px rgba(55,23,79,0.10),\n      inset 0 1px 0 rgba(255,255,255,0.82);\n    transition: transform 1.12s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-quote::before {\n    left: 0;\n    border-right: 1px solid rgba(55, 23, 79, 0.12);\n    transform: translateX(0);\n  }\n\n  .afb-product-quote::after {\n    right: 0;\n    border-left: 1px solid rgba(55, 23, 79, 0.12);\n    transform: translateX(0);\n  }\n\n  .afb-product-description-body.is-curtain-open .afb-product-quote::before {\n    transform: translateX(-101%);\n  }\n\n  .afb-product-description-body.is-curtain-open .afb-product-quote::after {\n    transform: translateX(101%);\n  }\n\n  .afb-intro-hero-visual {\n    position: relative;\n    overflow: hidden;\n    isolation: isolate;\n    margin: 0;\n    max-height: 0;\n    opacity: 0;\n    transform: translateY(18px) scale(0.986);\n    filter: blur(12px) saturate(1.05);\n    pointer-events: none;\n    border-radius: 28px;\n    border: 0 solid rgba(var(--afb-theme-rgb), 0.14);\n    background:\n      radial-gradient(circle at 24% 18%, rgba(var(--afb-theme-rgb),0.16), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(249,246,252,0.96));\n    box-shadow:\n      0 24px 54px rgba(var(--afb-theme-deep-rgb),0.14),\n      0 0 0 1px rgba(255,255,255,0.76) inset;\n    transition:\n      opacity 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      max-height 0.72s cubic-bezier(0.16, 1, 0.3, 1),\n      margin 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      border-width 0.68s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-intro-visible .afb-intro-hero-visual {\n    margin: 0 0 20px;\n    max-height: 520px;\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0) saturate(1.02);\n    pointer-events: auto;\n    border-width: 1px;\n  }\n\n  .afb-intro-hero-visual::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 4;\n    pointer-events: none;\n    background:\n      linear-gradient(110deg, transparent 0%, rgba(255,255,255,0.00) 38%, rgba(255,255,255,0.34) 48%, rgba(255,255,255,0.00) 58%, transparent 100%);\n    transform: translateX(-130%);\n    animation: afbIntroHeroSweep 5.8s cubic-bezier(0.16, 1, 0.3, 1) infinite;\n    mix-blend-mode: screen;\n  }\n\n  .afb-intro-hero-visual img {\n    display: block;\n    width: 100%;\n    aspect-ratio: 16 \/ 9;\n    object-fit: cover;\n    border-radius: inherit;\n    transform: translate3d(0, 0, 0) scale(1.018);\n    filter: saturate(1.04) contrast(1.02);\n    animation: afbIntroHeroDrift 7.4s cubic-bezier(0.16, 1, 0.3, 1) infinite alternate;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-intro-hero-visual,\n  .afb-product-description-body.is-merchant-outro .afb-intro-hero-visual,\n  .afb-product-description-body.is-merchant-hold .afb-intro-hero-visual,\n  .afb-product-description-body.is-ending .afb-intro-hero-visual {\n    max-height: 0 !important;\n    margin: 0 !important;\n    border-width: 0 !important;\n    opacity: 0 !important;\n    transform: translateY(-12px) scale(0.982) !important;\n    filter: blur(12px) saturate(1.03) !important;\n    pointer-events: none !important;\n  }\n\n  @keyframes afbIntroHeroSweep {\n    0%, 44% { transform: translateX(-130%); opacity: 0; }\n    52% { opacity: 1; }\n    74%, 100% { transform: translateX(130%); opacity: 0; }\n  }\n\n  @keyframes afbIntroHeroDrift {\n    from { transform: translate3d(-0.6%, -0.4%, 0) scale(1.018); }\n    to { transform: translate3d(0.8%, 0.5%, 0) scale(1.045); }\n  }\n\n  .afb-quote-text {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: center;\n    gap: 0.35em;\n    max-width: 100%;\n    text-align: center;\n    color: var(--afb-text);\n    font-size: 21px;\n    line-height: 1.42;\n    font-weight: 950;\n    letter-spacing: -0.02em;\n  }\n\n  .afb-quote-word {\n    opacity: 0.08;\n    transform: translateY(14px) scale(0.96);\n    filter: blur(6px);\n    transition:\n      opacity 0.26s ease,\n      transform 0.38s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.38s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-quote-word.is-visible {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n  }\n\n  .afb-narration-stage-shell {\n    position: relative;\n    width: 100%;\n    overflow: visible;\n  }\n\n  .afb-stage-card {\n    position: relative;\n    overflow: visible;\n    z-index: 2;\n    padding: 0 18px;\n    border-radius: 28px;\n    border: 0 solid var(--afb-border);\n    background:\n      radial-gradient(circle at top center, rgba(212,181,224,0.22), transparent 46%),\n      linear-gradient(135deg, rgba(255,255,255,0.98), rgba(249,246,252,0.98));\n    box-shadow: none;\n    min-height: 0;\n    max-height: 0;\n    opacity: 0;\n    transform: translateY(22px) scale(0.985);\n    filter: blur(12px);\n    pointer-events: none;\n    transition:\n      max-height 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      min-height 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      padding 0.68s cubic-bezier(0.16, 1, 0.3, 1),\n      opacity 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      border-width 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n      box-shadow 0.58s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-stage-card {\n    padding: 18px;\n    border-width: 1px;\n    box-shadow: var(--afb-shadow);\n    min-height: 290px;\n    max-height: none;\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    pointer-events: auto;\n  }\n\n  .afb-stage-top {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    margin-bottom: 14px;\n    transition:\n      opacity 0.46s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.46s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.46s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-stage-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    min-height: 40px;\n    padding: 0 16px;\n    border-radius: 999px;\n    color: var(--afb-text);\n    background: linear-gradient(135deg, rgba(55,23,79,0.07), rgba(212,181,224,0.22));\n    font-size: 14px;\n    font-weight: 950;\n    letter-spacing: -0.01em;\n    box-shadow:\n      inset 0 1px 0 rgba(255,255,255,0.86),\n      0 8px 18px rgba(55, 23, 79, 0.06);\n  }\n\n  .afb-stage-badge-dot {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    background: #c5c5d4;\n    box-shadow: 0 0 0 0 rgba(109, 50, 145, 0);\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-stage-badge-dot {\n    background: var(--afb-purple);\n    animation: afbBadgePulse 1.6s ease-in-out infinite;\n    box-shadow:\n      0 0 0 8px rgba(109, 50, 145, 0.10),\n      0 0 14px rgba(109, 50, 145, 0.28);\n  }\n\n  @keyframes afbBadgePulse {\n    0% {\n      transform: scale(1);\n      box-shadow:\n        0 0 0 0 rgba(109, 50, 145, 0.24),\n        0 0 12px rgba(109, 50, 145, 0.28);\n    }\n    50% {\n      transform: scale(1.12);\n      box-shadow:\n        0 0 0 8px rgba(109, 50, 145, 0.08),\n        0 0 18px rgba(109, 50, 145, 0.34);\n    }\n    100% {\n      transform: scale(1);\n      box-shadow:\n        0 0 0 0 rgba(109, 50, 145, 0.24),\n        0 0 12px rgba(109, 50, 145, 0.28);\n    }\n  }\n\n  .afb-stage-time {\n    color: rgba(55, 23, 79, 0.78);\n    font-size: 14px;\n    font-weight: 950;\n    letter-spacing: -0.01em;\n    white-space: nowrap;\n    font-variant-numeric: tabular-nums;\n  }\n\n  .afb-spotlight-portal {\n    position: absolute;\n    inset: 0;\n    z-index: 8;\n    overflow: visible;\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    transition: opacity 0.28s ease, visibility 0.28s ease;\n  }\n\n  .afb-product-description-body.is-spotlight-active .afb-spotlight-portal,\n  .afb-narration-stage-shell.is-spotlight-active .afb-spotlight-portal {\n    opacity: 1;\n    visibility: visible;\n  }\n\n  .afb-stage-top-meta {\n    display: inline-flex;\n    align-items: center;\n    justify-content: flex-end;\n    gap: 8px;\n    margin-left: auto;\n    flex: 0 0 auto;\n    padding: 5px 7px 5px 14px;\n    border-radius: 999px;\n    background: linear-gradient(135deg, rgba(255,255,255,0.96), rgba(247,244,255,0.98));\n    border: 1px solid rgba(167, 139, 250, 0.16);\n    box-shadow:\n      0 12px 24px rgba(55, 23, 79, 0.08),\n      inset 0 1px 0 rgba(255,255,255,0.88);\n  }\n\n  .afb-steps {\n    display: flex;\n    gap: 8px;\n    margin-bottom: 18px;\n    transition:\n      opacity 0.5s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.5s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.5s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-step {\n    flex: 1;\n    height: 6px;\n    border-radius: 999px;\n    background: rgba(55, 23, 79, 0.10);\n    overflow: hidden;\n    position: relative;\n    cursor: pointer;\n    transition: transform 0.24s ease, box-shadow 0.24s ease, background 0.24s ease;\n  }\n\n  .afb-step::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    transform: scaleX(0);\n    transform-origin: left center;\n    background: linear-gradient(90deg, #4a1f68, #8c4fba);\n    border-radius: inherit;\n    transition: transform 0.42s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-step.is-done::before,\n  .afb-step.is-active::before {\n    transform: scaleX(1);\n  }\n\n  .afb-step.is-active::before {\n    animation: afbStepGlow 1.2s linear infinite;\n  }\n\n  .afb-step.has-spotlight {\n    background: linear-gradient(90deg, rgba(124, 58, 237, 0.14), rgba(168, 85, 247, 0.12));\n    box-shadow:\n      inset 0 0 0 1px rgba(124, 58, 237, 0.10),\n      0 0 0 0 rgba(124, 58, 237, 0.18);\n  }\n\n  .afb-step.has-spotlight::after {\n    content: '';\n    position: absolute;\n    inset: -2px;\n    border-radius: inherit;\n    background: linear-gradient(90deg, rgba(124,58,237,0.18), rgba(217,70,239,0.12));\n    opacity: 0;\n    filter: blur(8px);\n    transition: opacity 0.22s ease;\n    pointer-events: none;\n  }\n\n  .afb-step.has-spotlight.is-active::before,\n  .afb-step.has-spotlight.is-done::before {\n    background: linear-gradient(90deg, #7c3aed, #a855f7, #d946ef);\n    box-shadow:\n      0 0 14px rgba(124, 58, 237, 0.30),\n      0 0 24px rgba(217, 70, 239, 0.18);\n  }\n\n  .afb-step.has-spotlight.is-active::after,\n  .afb-step.has-spotlight:hover::after {\n    opacity: 1;\n  }\n\n  @keyframes afbStepGlow {\n    0% { filter: brightness(1); }\n    50% { filter: brightness(1.22); }\n    100% { filter: brightness(1); }\n  }\n\n  .afb-narration-copy {\n    transform-origin: top center;\n    transition:\n      opacity 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.52s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight {\n    --afb-spotlight-accent-rgb: 109,50,145;\n    --afb-spotlight-accent-solid: #6d3291;\n    --afb-spotlight-accent-deep: #4c1d95;\n    --afb-spotlight-bg-image: none;\n    display: grid;\n    grid-template-columns: 1fr;\n    gap: 10px;\n    align-items: stretch;\n    position: absolute;\n    top: 72px;\n    left: 50%;\n    right: auto;\n    z-index: 9;\n    width: min(370px, calc(100vw - 44px));\n    max-width: 370px;\n    margin: 0;\n    padding: 0;\n    border-radius: 0;\n    border: 0;\n    background: transparent;\n    box-shadow: none;\n    opacity: 0;\n    transform: translateX(-50%) translateY(28px) scale(0.92);\n    filter: blur(16px);\n    max-height: none;\n    overflow: visible;\n    pointer-events: none;\n    transition:\n      opacity 0.9s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.9s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.9s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight.is-visible {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0) scale(1);\n    filter: blur(0);\n    pointer-events: auto;\n    overflow: visible;\n  }\n\n  .afb-product-description-body.is-spotlight-active .afb-narration-spotlight {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0) scale(1);\n    filter: blur(0);\n    pointer-events: auto;\n    overflow: visible;\n  }\n\n  .afb-narration-spotlight.is-entering:not(.is-visible) {\n    opacity: 0;\n    transform: translateX(-50%) translateY(18px) scale(0.982);\n    filter: blur(14px) saturate(1.08);\n    pointer-events: none;\n  }\n\n  .afb-narration-spotlight.is-entering.is-visible {\n    transition:\n      opacity 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      max-height 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      margin 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      padding 0.82s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight.is-docking {\n    z-index: 12;\n    will-change: transform, filter;\n  }\n\n  .afb-narration-spotlight.is-exiting {\n    opacity: 0;\n    transform: translateY(-12px) scale(0.975);\n    filter: blur(10px) saturate(1.04);\n    pointer-events: none;\n    transition:\n      opacity 1.05s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 1.05s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 1.05s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exiting {\n    transform: translateY(-8px) scale(0.982);\n    filter: blur(12px) saturate(1.08);\n  }\n\n  .afb-narration-spotlight-media {\n    position: relative;\n    width: 100%;\n    aspect-ratio: 4 \/ 5;\n    overflow: hidden;\n    isolation: isolate;\n    border-radius: 26px;\n    padding: 14px;\n    background:\n      radial-gradient(circle at top left, rgba(var(--afb-spotlight-accent-rgb),0.18), transparent 48%),\n      linear-gradient(145deg, rgba(255,255,255,0.26), rgba(255,255,255,0.10));\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb),0.16);\n    box-shadow:\n      0 18px 34px rgba(var(--afb-spotlight-accent-rgb),0.10),\n      inset 0 1px 0 rgba(255,255,255,0.34);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: box-shadow 0.28s ease, border-color 0.28s ease, transform 0.28s ease, opacity 0.16s ease;\n  }\n\n  .afb-narration-spotlight-media::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 0;\n    background-image: var(--afb-spotlight-bg-image);\n    background-size: cover;\n    background-position: center center;\n    transform: scale(1.18);\n    filter: blur(26px) saturate(1.16);\n    opacity: 0.72;\n    pointer-events: none;\n  }\n\n  .afb-narration-spotlight-media::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 1;\n    background: linear-gradient(115deg, transparent 0%, rgba(255,255,255,0) 36%, rgba(255,255,255,0.36) 50%, rgba(255,255,255,0) 64%, transparent 100%);\n    transform: translateX(-130%);\n    animation: afbSpotlightSweep 3.8s ease-in-out infinite;\n    pointer-events: none;\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2::before {\n    opacity: 0;\n  }\n\n  .afb-cinematic-backdrop,\n  .afb-cinematic-image,\n  .afb-cinematic-crop-frame,\n  .afb-cinematic-dim-zone,\n  .afb-cinematic-led-frame {\n    position: absolute;\n    pointer-events: none;\n  }\n\n  .afb-cinematic-backdrop {\n    inset: 0;\n    z-index: 1;\n    background-size: cover;\n    background-position: center;\n    opacity: 0.68;\n    transform: scale(1.16);\n    filter: blur(24px) saturate(1.12) brightness(1.02);\n    transition:\n      opacity 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      background-image 0.18s ease;\n  }\n\n  .afb-cinematic-image {\n    inset: 14px;\n    z-index: 2;\n    border-radius: 22px;\n    background-repeat: no-repeat;\n    background-position: center;\n    background-size: contain;\n    opacity: 1;\n    transform-origin: 50% 50%;\n    transform: scale(1);\n    filter: brightness(1) saturate(1);\n    box-shadow:\n      0 16px 34px rgba(15, 23, 42, 0.14),\n      0 0 0 1px rgba(255,255,255,0.18);\n    transition:\n      opacity var(--afb-cine-duration, 420ms) cubic-bezier(0.16, 1, 0.3, 1),\n      filter var(--afb-cine-duration, 420ms) cubic-bezier(0.16, 1, 0.3, 1),\n      transform var(--afb-cine-duration, 420ms) cubic-bezier(0.16, 1, 0.3, 1),\n      transform-origin var(--afb-cine-duration, 420ms) cubic-bezier(0.16, 1, 0.3, 1),\n      background-image 0.18s ease;\n  }\n\n  .afb-cinematic-crop-frame {\n    z-index: 5;\n    overflow: hidden;\n    opacity: 0;\n    border-radius: 18px;\n    background: rgba(0,0,0,0.82);\n    border: 2px solid rgba(var(--afb-spotlight-accent-rgb),0.95);\n    box-shadow:\n      0 22px 64px rgba(15, 23, 42, 0.38),\n      0 0 0 1px rgba(255,255,255,0.20) inset,\n      0 0 18px rgba(var(--afb-spotlight-accent-rgb),0.88),\n      0 0 42px rgba(var(--afb-spotlight-accent-rgb),0.34);\n    transform: scale(1.025);\n    filter: blur(10px) saturate(0.96) brightness(0.95);\n    transition:\n      left var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      top var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      width var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      height var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      opacity 0.26s ease,\n      filter 0.62s cubic-bezier(0.22, 0.74, 0.22, 1),\n      transform 0.62s cubic-bezier(0.22, 0.74, 0.22, 1);\n  }\n\n  .afb-cinematic-crop-frame::after {\n    content: \"\";\n    position: absolute;\n    inset: 0;\n    border-radius: inherit;\n    background:\n      linear-gradient(90deg, rgba(255,255,255,0.92), rgba(var(--afb-spotlight-accent-rgb),0.98), rgba(255,255,255,0.62)) top left \/ 100% 3px no-repeat,\n      linear-gradient(180deg, rgba(255,255,255,0.92), rgba(var(--afb-spotlight-accent-rgb),0.98), rgba(255,255,255,0.62)) top right \/ 3px 100% no-repeat,\n      linear-gradient(270deg, rgba(255,255,255,0.62), rgba(var(--afb-spotlight-accent-rgb),0.98), rgba(255,255,255,0.92)) bottom right \/ 100% 3px no-repeat,\n      linear-gradient(0deg, rgba(255,255,255,0.62), rgba(var(--afb-spotlight-accent-rgb),0.98), rgba(255,255,255,0.92)) bottom left \/ 3px 100% no-repeat;\n    filter: drop-shadow(0 0 12px rgba(var(--afb-spotlight-accent-rgb),0.82));\n    pointer-events: none;\n  }\n\n  .afb-cinematic-crop-frame img {\n    position: absolute !important;\n    z-index: 1 !important;\n    display: block !important;\n    width: auto;\n    height: auto;\n    max-width: none !important;\n    max-height: none !important;\n    min-width: 0 !important;\n    min-height: 0 !important;\n    margin: 0 !important;\n    border-radius: 0 !important;\n    box-shadow: none !important;\n    background: transparent !important;\n    transform: none !important;\n    filter: brightness(1.08) saturate(1.14) contrast(1.04) !important;\n    transition:\n      left var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      top var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      width var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      height var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1);\n  }\n\n  .afb-cinematic-dim-zone {\n    z-index: 4;\n    background: rgba(7, 8, 14, 0.62);\n    opacity: 0;\n    backdrop-filter: blur(1px);\n    transition:\n      left var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      top var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      width var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      height var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      opacity 0.32s ease;\n  }\n\n  .afb-cinematic-led-frame {\n    z-index: 6;\n    opacity: 0;\n    border: 2px solid rgba(var(--afb-spotlight-accent-rgb),0.96);\n    border-radius: 16px;\n    box-shadow:\n      0 0 0 2px rgba(255,255,255,0.18) inset,\n      0 0 18px rgba(var(--afb-spotlight-accent-rgb),0.92),\n      0 0 44px rgba(var(--afb-spotlight-accent-rgb),0.44);\n    transition:\n      left var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      top var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      width var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      height var(--afb-cine-duration, 620ms) cubic-bezier(0.22, 0.74, 0.22, 1),\n      opacity 0.28s ease;\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2 \u003e #afb-narration-spotlight-image,\n  .afb-narration-spotlight-media.is-cinematic-v2 \u003e #afb-narration-spotlight-image-next {\n    position: absolute;\n    inset: 14px;\n    z-index: -1;\n    opacity: 0 !important;\n    visibility: hidden;\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2.is-cinematic-crop .afb-cinematic-image {\n    opacity: 0.52;\n    filter: brightness(0.62) saturate(0.92) blur(0.25px);\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2.is-cinematic-crop .afb-cinematic-backdrop {\n    opacity: 0.46;\n    filter: blur(24px) brightness(0.62) saturate(0.94);\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2.is-cinematic-crop .afb-cinematic-crop-frame {\n    opacity: 1;\n    filter: blur(0) saturate(1) brightness(1);\n    transform: scale(1);\n    animation: afbSpotlightRegionPulse 1.45s ease-in-out infinite alternate;\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2[data-cinematic-fit=\"cover\"] .afb-cinematic-image {\n    background-size: cover;\n    background-position: center center;\n  }\n\n  .afb-narration-spotlight-media.is-cinematic-v2[data-cinematic-fit=\"contain\"] .afb-cinematic-image {\n    background-size: contain;\n    background-position: center center;\n  }\n\n  .afb-narration-spotlight-region {\n    position: absolute;\n    z-index: 4;\n    pointer-events: none;\n    opacity: 0;\n    border: 2px solid rgba(var(--afb-spotlight-accent-rgb),0.92);\n    border-radius: 18px;\n    background: rgba(var(--afb-spotlight-accent-rgb),0.08);\n    box-shadow:\n      0 0 0 1px rgba(255,255,255,0.72),\n      0 0 22px rgba(var(--afb-spotlight-accent-rgb),0.62),\n      0 0 52px rgba(var(--afb-spotlight-accent-rgb),0.34),\n      inset 0 0 22px rgba(var(--afb-spotlight-accent-rgb),0.18);\n    transform: scale(0.985);\n    transition:\n      opacity 0.32s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.32s cubic-bezier(0.16, 1, 0.3, 1),\n      left 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      top 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      width 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n      height 0.52s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight-region.is-visible {\n    opacity: 1;\n    transform: scale(1);\n  }\n\n  .afb-narration-spotlight-region.is-led {\n    animation: afbSpotlightRegionPulse 1.85s ease-in-out infinite;\n  }\n\n  .afb-narration-spotlight img {\n    position: relative;\n    z-index: 2;\n    width: auto;\n    max-width: 100%;\n    height: auto;\n    max-height: min(46vh, 380px);\n    object-fit: contain;\n    display: block;\n    background: rgba(255,255,255,0.02);\n    border-radius: 24px;\n    margin: 0 auto;\n    filter: none;\n    transform-origin: var(--afb-camera-x, 50%) var(--afb-camera-y, 50%);\n    transform: translate3d(var(--afb-camera-pan-x, 0px), var(--afb-camera-pan-y, 0px), 0) scale(var(--afb-camera-zoom, 1));\n    will-change: transform;\n    box-shadow:\n      0 16px 34px rgba(15, 23, 42, 0.14),\n      0 0 0 1px rgba(255,255,255,0.18);\n    transition:\n      opacity 0.34s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.34s cubic-bezier(0.16, 1, 0.3, 1),\n      transform-origin 0.34s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.34s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight-media img:not([src]),\n  .afb-narration-spotlight-media img[src=\"\"] {\n    opacity: 0;\n    visibility: hidden;\n  }\n\n  .afb-narration-spotlight-media.has-camera-motion img {\n    transition:\n      opacity 0.34s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.34s cubic-bezier(0.16, 1, 0.3, 1),\n      transform-origin 2.35s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 2.35s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight-media[data-fit=\"cover\"] {\n    padding: 14px;\n  }\n\n  .afb-narration-spotlight-media[data-fit=\"cover\"] img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: min(46vh, 380px);\n    object-fit: contain;\n    object-position: center center;\n    border-radius: 24px;\n    margin: 0 auto;\n  }\n\n  .afb-narration-spotlight-media[data-fit=\"contain\"] {\n    padding: 14px;\n  }\n\n  .afb-narration-spotlight-media[data-fit=\"contain\"] img {\n    width: auto;\n    height: auto;\n    max-width: 100%;\n    max-height: min(46vh, 380px);\n    object-fit: contain;\n    border-radius: 24px;\n    margin: 0 auto;\n    filter: none;\n  }\n\n  .afb-narration-spotlight-copy {\n    position: relative;\n    z-index: 10;\n    overflow: visible;\n    padding: 12px 14px 13px;\n    border-radius: 18px;\n    background:\n      radial-gradient(circle at top left, rgba(224,231,255,0.34), transparent 52%),\n      linear-gradient(145deg, rgba(255,255,255,0.98), rgba(243,247,255,0.98));\n    border: 1px solid rgba(124, 58, 237, 0.10);\n    box-shadow:\n      0 10px 24px rgba(55,23,79,0.08),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n    transition: background 0.28s ease, border-color 0.28s ease, box-shadow 0.28s ease, color 0.28s ease, opacity 0.16s ease, transform 0.16s ease;\n  }\n\n  .afb-narration-spotlight.is-switching .afb-narration-spotlight-media,\n  .afb-narration-spotlight.is-switching .afb-narration-spotlight-copy {\n    opacity: 1;\n    transform: none;\n    filter: none;\n  }\n\n  .afb-narration-spotlight.is-switching img:not(.afb-narration-spotlight-image-next) {\n    opacity: 1;\n    filter: none;\n  }\n\n  .afb-narration-spotlight .afb-narration-spotlight-image-next {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    z-index: 3;\n    max-width: calc(100% - 28px);\n    max-height: min(46vh, 380px);\n    transform: translate(-50%, -50%) scale(1.018);\n    opacity: 0;\n    pointer-events: none;\n    filter: blur(10px) saturate(1.08);\n    transition:\n      opacity 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.82s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-narration-spotlight.is-crossfading .afb-narration-spotlight-image-next {\n    opacity: 1;\n    transform: translate(-50%, -50%) scale(1);\n    filter: blur(0) saturate(1.03);\n  }\n\n  .afb-narration-spotlight.is-crossfading #afb-narration-spotlight-image {\n    opacity: 1;\n    filter: none;\n  }\n\n  .afb-narration-spotlight.is-switching .afb-narration-spotlight-media {\n    box-shadow:\n      0 22px 46px rgba(var(--afb-spotlight-accent-rgb),0.18),\n      0 0 0 1px rgba(var(--afb-spotlight-accent-rgb),0.18),\n      inset 0 1px 0 rgba(255,255,255,0.38);\n  }\n\n  .afb-narration-spotlight:not(.is-switching) .afb-narration-spotlight-media,\n  .afb-narration-spotlight:not(.is-switching) .afb-narration-spotlight-copy {\n    animation: none;\n  }\n\n  @keyframes afbSpotlightSlideReveal {\n    0% {\n      opacity: 0;\n      transform: translateY(10px) scale(0.975);\n      filter: blur(14px) saturate(1.12);\n    }\n    58% {\n      opacity: 1;\n      filter: blur(2px) saturate(1.08);\n    }\n    100% {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      filter: blur(0) saturate(1);\n    }\n  }\n\n  .afb-narration-spotlight-kicker {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 6px;\n    color: #334155;\n    font-size: 10.5px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .afb-narration-spotlight-dot {\n    width: 9px;\n    height: 9px;\n    border-radius: 999px;\n    background: var(--afb-purple);\n    box-shadow: 0 0 0 7px rgba(109,50,145,0.10);\n    animation: afbNarrationSpotlightPulse 1.5s ease-in-out infinite;\n  }\n\n  .afb-narration-spotlight-caption {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 11px 12px 11px 15px;\n    color: var(--afb-spotlight-accent-deep);\n    font-size: 15px;\n    line-height: 1.52;\n    font-weight: 850;\n    border-radius: 15px;\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb), 0.20);\n    border-left: 4px solid var(--afb-spotlight-accent-solid);\n    background:\n      radial-gradient(circle at 12% 0%, rgba(var(--afb-spotlight-accent-rgb), 0.14), transparent 42%),\n      linear-gradient(145deg, rgba(255,255,255,0.94), rgba(var(--afb-spotlight-accent-rgb), 0.07));\n    box-shadow:\n      0 12px 24px rgba(var(--afb-spotlight-accent-rgb), 0.10),\n      inset 0 1px 0 rgba(255,255,255,0.78);\n    overflow: hidden;\n  }\n\n  .afb-narration-spotlight-caption::after {\n    content: '';\n    position: absolute;\n    inset: 0 auto 0 0;\n    width: 34%;\n    pointer-events: none;\n    background: linear-gradient(90deg, rgba(var(--afb-spotlight-accent-rgb), 0.12), transparent);\n    opacity: 0.62;\n  }\n\n  .afb-narration-spotlight-evidence {\n    display: none;\n    margin: 7px 0 0 0;\n    color: rgba(76, 58, 116, 0.68);\n    font-size: 11.5px;\n    line-height: 1.42;\n    font-weight: 820;\n  }\n\n  .afb-narration-spotlight-evidence.is-visible {\n    display: block;\n  }\n\n  .afb-narration-spotlight-evidence::before {\n    content: 'Em destaque na imagem: ';\n    color: rgba(var(--afb-spotlight-accent-rgb), 0.82);\n    font-weight: 950;\n  }\n\n  .afb-curiosity-card {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr);\n    gap: 4px;\n    width: 100%;\n    margin: 10px 0 0;\n    padding: 11px 13px;\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb), 0.22);\n    border-radius: 16px;\n    color: var(--afb-spotlight-accent-deep);\n    text-align: left;\n    background:\n      radial-gradient(circle at 8% 0%, rgba(var(--afb-spotlight-accent-rgb), 0.18), transparent 48%),\n      linear-gradient(135deg, rgba(255,255,255,0.96), rgba(var(--afb-spotlight-accent-rgb), 0.08));\n    box-shadow:\n      0 12px 26px rgba(var(--afb-spotlight-accent-rgb), 0.10),\n      inset 0 1px 0 rgba(255,255,255,0.84);\n    cursor: pointer;\n    opacity: 0;\n    transform: translateY(6px) scale(0.985);\n    transition: opacity 0.34s ease, transform 0.34s ease, box-shadow 0.34s ease;\n  }\n\n  .afb-curiosity-card[hidden] {\n    display: none !important;\n  }\n\n  .afb-curiosity-card:not([hidden]) {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-curiosity-card:hover {\n    transform: translateY(-1px) scale(1.006);\n    box-shadow:\n      0 16px 32px rgba(var(--afb-spotlight-accent-rgb), 0.15),\n      inset 0 1px 0 rgba(255,255,255,0.90);\n  }\n\n  .afb-curiosity-card-kicker {\n    color: rgba(var(--afb-spotlight-accent-rgb), 0.86);\n    font-size: 10px;\n    line-height: 1.1;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .afb-curiosity-card-title {\n    font-size: 14px;\n    line-height: 1.24;\n    font-weight: 950;\n  }\n\n  .afb-curiosity-card-teaser {\n    color: rgba(55, 23, 79, 0.70);\n    font-size: 12px;\n    line-height: 1.32;\n    font-weight: 800;\n  }\n\n  .afb-narration-spotlight-version-window {\n    display: none;\n    margin: 0 0 10px 0;\n    padding: 14px 15px 15px;\n    border-radius: 18px;\n    background:\n      radial-gradient(circle at top right, rgba(255,255,255,0.34), transparent 44%),\n      linear-gradient(145deg, rgba(247,244,255,0.98), rgba(255,255,255,0.99));\n    border: 1px solid rgba(124, 58, 237, 0.14);\n    box-shadow:\n      0 14px 26px rgba(55,23,79,0.08),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n  }\n\n  .afb-narration-spotlight-version-label {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 26px;\n    padding: 0 11px;\n    margin-bottom: 10px;\n    border-radius: 999px;\n    background: rgba(255,255,255,0.72);\n    border: 1px solid rgba(124, 58, 237, 0.14);\n    color: #5b21b6;\n    font-size: 10.5px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .afb-narration-spotlight-version-title {\n    margin: 0 0 6px 0;\n    color: #2e1065;\n    font-size: 20px;\n    line-height: 1.08;\n    font-weight: 1000;\n    letter-spacing: -0.03em;\n  }\n\n  .afb-narration-spotlight-version-subtitle {\n    margin: 0;\n    color: rgba(76, 29, 149, 0.76);\n    font-size: 12.5px;\n    line-height: 1.5;\n    font-weight: 820;\n  }\n\n  @keyframes afbSpotlightSweep {\n    0%, 62%, 100% { transform: translateX(-130%); opacity: 0; }\n    70% { opacity: .75; }\n    92% { transform: translateX(130%); opacity: .08; }\n  }\n\n  @keyframes afbSpotlightRegionPulse {\n    0%, 100% {\n      box-shadow:\n        0 0 0 1px rgba(255,255,255,0.72),\n        0 0 18px rgba(var(--afb-spotlight-accent-rgb),0.52),\n        0 0 44px rgba(var(--afb-spotlight-accent-rgb),0.28),\n        inset 0 0 18px rgba(var(--afb-spotlight-accent-rgb),0.14);\n    }\n    50% {\n      box-shadow:\n        0 0 0 1px rgba(255,255,255,0.9),\n        0 0 28px rgba(var(--afb-spotlight-accent-rgb),0.78),\n        0 0 68px rgba(var(--afb-spotlight-accent-rgb),0.44),\n        inset 0 0 28px rgba(var(--afb-spotlight-accent-rgb),0.22);\n    }\n  }\n\n  @keyframes afbNarrationSpotlightPulse {\n    0%, 100% {\n      transform: scale(0.95);\n      box-shadow:\n        0 0 0 0 rgba(109,50,145,0.24),\n        0 0 0 7px rgba(109,50,145,0.08);\n    }\n    50% {\n      transform: scale(1.18);\n      box-shadow:\n        0 0 0 8px rgba(109,50,145,0),\n        0 0 0 11px rgba(109,50,145,0.04);\n    }\n  }\n\n  .afb-narration-spotlight.is-deluxe {\n    --afb-spotlight-accent-rgb: 37,99,235;\n    --afb-spotlight-accent-solid: #2563eb;\n    --afb-spotlight-accent-deep: #1e3a8a;\n    background: transparent;\n  }\n\n  .afb-narration-spotlight.is-deluxe .afb-narration-spotlight-media {\n    box-shadow:\n      0 0 0 1px rgba(37,99,235,0.20),\n      0 16px 30px rgba(37,99,235,0.10);\n  }\n\n  .afb-narration-spotlight.is-deluxe .afb-narration-spotlight-copy {\n    background:\n      radial-gradient(circle at top left, rgba(191,219,254,0.34), transparent 52%),\n      linear-gradient(145deg, rgba(255,255,255,0.99), rgba(239,246,255,0.98));\n    border-color: rgba(37,99,235,0.20);\n    box-shadow:\n      0 12px 28px rgba(37,99,235,0.10),\n      0 0 0 1px rgba(255,255,255,0.76) inset;\n  }\n\n  .afb-narration-spotlight.is-deluxe .afb-narration-spotlight-dot {\n    background: #2563eb;\n    box-shadow: 0 0 0 7px rgba(37,99,235,0.12);\n  }\n\n  .afb-narration-spotlight.is-deluxe .afb-narration-spotlight-kicker {\n    color: #1e3a8a;\n  }\n\n  .afb-narration-spotlight.is-deluxe .afb-narration-spotlight-caption {\n    color: #1e3a8a;\n  }\n\n  .afb-narration-spotlight.is-exclusive {\n    --afb-spotlight-accent-rgb: 225,29,72;\n    --afb-spotlight-accent-solid: #e11d48;\n    --afb-spotlight-accent-deep: #881337;\n    background: transparent;\n  }\n\n  .afb-narration-spotlight.is-exclusive .afb-narration-spotlight-media {\n    box-shadow:\n      0 0 0 1px rgba(225,29,72,0.20),\n      0 16px 30px rgba(225,29,72,0.10);\n  }\n\n  .afb-narration-spotlight.is-exclusive .afb-narration-spotlight-copy {\n    background:\n      radial-gradient(circle at top left, rgba(253,186,116,0.22), transparent 48%),\n      radial-gradient(circle at bottom right, rgba(244,114,182,0.13), transparent 48%),\n      linear-gradient(145deg, rgba(255,255,255,0.99), rgba(255,247,242,0.98));\n    border-color: rgba(244,63,94,0.14);\n    box-shadow:\n      0 12px 28px rgba(127,29,29,0.07),\n      0 0 0 1px rgba(255,255,255,0.76) inset;\n  }\n\n  .afb-narration-spotlight.is-exclusive .afb-narration-spotlight-dot {\n    background: #e11d48;\n    box-shadow: 0 0 0 7px rgba(225,29,72,0.12);\n  }\n\n  .afb-narration-spotlight.is-exclusive .afb-narration-spotlight-kicker {\n    color: #9f1239;\n  }\n\n  .afb-narration-spotlight.is-exclusive .afb-narration-spotlight-caption {\n    color: #881337;\n  }\n\n  .afb-narration-spotlight.is-bonus {\n    --afb-spotlight-accent-rgb: 236,72,153;\n    --afb-spotlight-accent-solid: #ec4899;\n    --afb-spotlight-accent-deep: #9d174d;\n    background: transparent;\n  }\n\n  .afb-narration-spotlight.is-bonus .afb-narration-spotlight-media {\n    box-shadow:\n      0 0 0 1px rgba(236,72,153,0.20),\n      0 16px 30px rgba(236,72,153,0.12);\n  }\n\n  .afb-narration-spotlight.is-bonus .afb-narration-spotlight-copy {\n    background:\n      radial-gradient(circle at top left, rgba(251,207,232,0.40), transparent 52%),\n      linear-gradient(145deg, rgba(255,255,255,0.99), rgba(253,242,248,0.98));\n    border-color: rgba(236,72,153,0.20);\n    box-shadow:\n      0 12px 28px rgba(236,72,153,0.10),\n      0 0 0 1px rgba(255,255,255,0.76) inset;\n  }\n\n  .afb-narration-spotlight.is-bonus .afb-narration-spotlight-dot {\n    background: #ec4899;\n    box-shadow: 0 0 0 7px rgba(236,72,153,0.14);\n  }\n\n  .afb-narration-spotlight.is-bonus .afb-narration-spotlight-kicker {\n    color: #be185d;\n  }\n\n  .afb-narration-spotlight.is-bonus .afb-narration-spotlight-caption {\n    color: #9d174d;\n  }\n\n  .afb-narration-spotlight.is-prestige {\n    --afb-spotlight-accent-rgb: 124,58,237;\n    --afb-spotlight-accent-solid: #7c3aed;\n    --afb-spotlight-accent-deep: #4c1d95;\n    background: transparent;\n  }\n\n  .afb-narration-spotlight.is-prestige .afb-narration-spotlight-media {\n    box-shadow:\n      0 0 0 1px rgba(124,58,237,0.18),\n      0 16px 30px rgba(109,40,217,0.11);\n  }\n\n  .afb-narration-spotlight.is-prestige .afb-narration-spotlight-copy {\n    background:\n      radial-gradient(circle at top left, rgba(233,213,255,0.42), transparent 52%),\n      linear-gradient(145deg, rgba(255,255,255,0.99), rgba(250,245,255,0.98));\n    border-color: rgba(124,58,237,0.22);\n    box-shadow:\n      0 12px 28px rgba(109,40,217,0.10),\n      0 0 0 1px rgba(255,255,255,0.76) inset;\n  }\n\n  .afb-narration-spotlight.is-prestige .afb-narration-spotlight-dot {\n    background: #7c3aed;\n    box-shadow: 0 0 0 7px rgba(124,58,237,0.12);\n  }\n\n  .afb-narration-spotlight.is-prestige .afb-narration-spotlight-kicker {\n    color: #6d28d9;\n  }\n\n  .afb-narration-spotlight.is-prestige .afb-narration-spotlight-caption {\n    color: #4c1d95;\n  }\n\n  .afb-narration-spotlight.is-version-showcase .afb-narration-spotlight-version-window {\n    display: block;\n  }\n\n  .afb-narration-spotlight.is-version-showcase .afb-narration-spotlight-copy {\n    padding: 14px 15px 16px;\n  }\n\n  .afb-narration-spotlight.is-version-showcase .afb-narration-spotlight-caption {\n    font-size: 14px;\n    line-height: 1.55;\n  }\n\n  .afb-narration-spotlight.is-version-showcase .afb-narration-spotlight-media {\n    transform: translateY(-1px);\n  }\n\n  .afb-narration-spotlight:not(.is-version-showcase) .afb-narration-spotlight-copy {\n    padding: 9px 11px 10px;\n  }\n\n  .afb-narration-spotlight:not(.is-version-showcase) .afb-narration-spotlight-kicker {\n    margin-bottom: 4px;\n    font-size: 10px;\n  }\n\n  .afb-narration-spotlight:not(.is-version-showcase) .afb-narration-spotlight-caption {\n    font-size: 13.5px;\n    line-height: 1.4;\n  }\n\n  .afb-narration-spotlight.is-version-showcase {\n    width: min(500px, calc(100% - 44px));\n  }\n\n  .afb-narration-spotlight.is-deluxe.is-version-showcase .afb-narration-spotlight-version-window {\n    background:\n      radial-gradient(circle at top right, rgba(191,219,254,0.42), transparent 44%),\n      linear-gradient(145deg, rgba(239,246,255,0.98), rgba(255,255,255,0.99));\n    border-color: rgba(37,99,235,0.22);\n    box-shadow:\n      0 16px 28px rgba(37,99,235,0.12),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n  }\n\n  .afb-narration-spotlight.is-deluxe.is-version-showcase .afb-narration-spotlight-version-label {\n    color: #1d4ed8;\n    border-color: rgba(37,99,235,0.18);\n  }\n\n  .afb-narration-spotlight.is-deluxe.is-version-showcase .afb-narration-spotlight-version-title {\n    color: #1e3a8a;\n  }\n\n  .afb-narration-spotlight.is-deluxe.is-version-showcase .afb-narration-spotlight-version-subtitle {\n    color: rgba(30,58,138,0.76);\n  }\n\n  .afb-narration-spotlight.is-bonus.is-version-showcase .afb-narration-spotlight-version-window {\n    background:\n      radial-gradient(circle at top right, rgba(251,207,232,0.44), transparent 44%),\n      linear-gradient(145deg, rgba(253,242,248,0.98), rgba(255,255,255,0.99));\n    border-color: rgba(236,72,153,0.22);\n    box-shadow:\n      0 16px 28px rgba(236,72,153,0.12),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n  }\n\n  .afb-narration-spotlight.is-bonus.is-version-showcase .afb-narration-spotlight-version-label {\n    color: #db2777;\n    border-color: rgba(236,72,153,0.20);\n  }\n\n  .afb-narration-spotlight.is-bonus.is-version-showcase .afb-narration-spotlight-version-title {\n    color: #9d174d;\n  }\n\n  .afb-narration-spotlight.is-bonus.is-version-showcase .afb-narration-spotlight-version-subtitle {\n    color: rgba(157,23,77,0.78);\n  }\n\n  .afb-narration-spotlight.is-exclusive.is-version-showcase .afb-narration-spotlight-version-window {\n    background:\n      radial-gradient(circle at top right, rgba(253,186,116,0.34), transparent 44%),\n      radial-gradient(circle at bottom left, rgba(244,114,182,0.13), transparent 46%),\n      linear-gradient(145deg, rgba(255,250,247,0.99), rgba(255,255,255,0.99));\n    border-color: rgba(244,63,94,0.14);\n    box-shadow:\n      0 16px 30px rgba(127,29,29,0.08),\n      0 0 0 1px rgba(251,191,36,0.10),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n  }\n\n  .afb-narration-spotlight.is-exclusive.is-version-showcase .afb-narration-spotlight-version-label {\n    color: #9f1239;\n    background: rgba(255,255,255,0.78);\n    border-color: rgba(244,63,94,0.14);\n    box-shadow: 0 8px 18px rgba(244,63,94,0.07);\n  }\n\n  .afb-narration-spotlight.is-exclusive.is-version-showcase .afb-narration-spotlight-version-title {\n    color: #6b1432;\n  }\n\n  .afb-narration-spotlight.is-exclusive.is-version-showcase .afb-narration-spotlight-version-subtitle {\n    color: rgba(107,20,50,0.72);\n  }\n\n  .afb-narration-spotlight.is-exclusive.is-version-showcase .afb-narration-spotlight-caption {\n    color: #7f1d3a;\n    border-color: rgba(244,63,94,0.15);\n    border-left-color: #f59e0b;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(253,186,116,0.18), transparent 42%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(255,247,242,0.88));\n    box-shadow:\n      0 12px 24px rgba(127,29,29,0.07),\n      inset 0 1px 0 rgba(255,255,255,0.82);\n  }\n\n  .afb-narration-spotlight.is-prestige.is-version-showcase .afb-narration-spotlight-version-window {\n    background:\n      radial-gradient(circle at top right, rgba(233,213,255,0.46), transparent 44%),\n      linear-gradient(145deg, rgba(250,245,255,0.99), rgba(255,255,255,0.99));\n    border-color: rgba(124,58,237,0.22);\n    box-shadow:\n      0 16px 28px rgba(124,58,237,0.12),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n  }\n\n  .afb-narration-spotlight.is-prestige.is-version-showcase .afb-narration-spotlight-version-label {\n    color: #6d28d9;\n    border-color: rgba(124,58,237,0.18);\n  }\n\n  .afb-narration-spotlight.is-prestige.is-version-showcase .afb-narration-spotlight-version-title {\n    color: #4c1d95;\n  }\n\n  .afb-narration-spotlight.is-prestige.is-version-showcase .afb-narration-spotlight-version-subtitle {\n    color: rgba(76,29,149,0.78);\n  }\n\n  .afb-merchant-detail-hotspots {\n    width: min(100%, 460px);\n    margin: 0 auto 12px;\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));\n    gap: 10px;\n    z-index: 8;\n    pointer-events: auto;\n  }\n\n  .afb-merchant-detail-hotspot {\n    appearance: none;\n    -webkit-appearance: none;\n    position: relative;\n    min-height: 68px;\n    width: 100%;\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    padding: 9px 10px;\n    border: 1px solid rgba(225,29,72,0.18);\n    border-radius: 16px;\n    background:\n      radial-gradient(circle at top left, rgba(225,29,72,0.12), transparent 44%),\n      linear-gradient(135deg, rgba(255,255,255,0.98), rgba(255,247,249,0.96));\n    box-shadow:\n      0 10px 24px rgba(55,23,79,0.08),\n      0 0 0 0 rgba(225,29,72,0.12);\n    cursor: pointer;\n    transform: translateY(0) scale(1);\n    animation: afbHotspotPulse 1.65s ease-in-out infinite;\n    transition: transform 0.2s ease, filter 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;\n  }\n\n  .afb-merchant-detail-hotspot::before {\n    content: '';\n    width: 11px;\n    height: 11px;\n    min-width: 11px;\n    border-radius: 999px;\n    background: #e11d48;\n    box-shadow: 0 0 0 7px rgba(225,29,72,0.10);\n  }\n\n  .afb-merchant-detail-hotspot::after {\n    content: none;\n  }\n\n  .afb-merchant-detail-hotspot-copy {\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n    text-align: left;\n  }\n\n  .afb-merchant-detail-hotspot-title {\n    color: var(--afb-text);\n    font-size: 11px;\n    font-weight: 950;\n    letter-spacing: 0.04em;\n    text-transform: uppercase;\n    line-height: 1.15;\n  }\n\n  .afb-merchant-detail-hotspot-caption {\n    color: rgba(55, 23, 79, 0.58);\n    font-size: 10.5px;\n    font-weight: 800;\n    line-height: 1.25;\n    overflow: hidden;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n  }\n\n  .afb-merchant-detail-hotspot:hover {\n    transform: translateY(-2px) scale(1.02);\n    filter: brightness(1.06);\n    border-color: rgba(225,29,72,0.42);\n    box-shadow: 0 14px 30px rgba(159,16,32,0.14);\n  }\n\n  @keyframes afbHotspotPulse {\n    0%, 100% {\n      box-shadow:\n        0 10px 24px rgba(55,23,79,0.08),\n        0 0 0 0 rgba(225,29,72,0.13);\n    }\n    55% {\n      box-shadow:\n        0 14px 30px rgba(159,16,32,0.13),\n        0 0 0 8px rgba(225,29,72,0);\n    }\n  }\n\n  .afb-detail-overlay {\n    position: fixed;\n    inset: 0;\n    z-index: 1000000;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 18px;\n    background: rgba(15, 8, 24, 0.72);\n    backdrop-filter: blur(10px);\n    opacity: 0;\n    visibility: hidden;\n    pointer-events: none;\n    transition: opacity 0.28s ease, visibility 0.28s ease;\n  }\n\n  .afb-detail-overlay.is-open {\n    opacity: 1;\n    visibility: visible;\n    pointer-events: auto;\n  }\n\n  .afb-detail-overlay-card {\n    position: relative;\n    width: min(100%, 520px);\n    max-height: min(86vh, 720px);\n    overflow: hidden;\n    border-radius: 28px;\n    background:\n      radial-gradient(circle at top left, rgba(212,181,224,0.28), transparent 42%),\n      linear-gradient(135deg, #ffffff, #fbf7ff);\n    border: 1px solid rgba(212,181,224,0.42);\n    box-shadow: 0 30px 80px rgba(0,0,0,0.32);\n    transform: translateY(18px) scale(0.96);\n    transition: transform 0.34s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-detail-overlay.is-open .afb-detail-overlay-card {\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-detail-overlay-close {\n    position: absolute;\n    top: 12px;\n    right: 12px;\n    z-index: 3;\n    width: 38px;\n    height: 38px;\n    border: 0;\n    border-radius: 999px;\n    background: rgba(255,255,255,0.92);\n    color: var(--afb-text);\n    font-size: 24px;\n    line-height: 1;\n    cursor: pointer;\n    box-shadow: 0 8px 20px rgba(55,23,79,0.14);\n  }\n\n  .afb-detail-overlay-image {\n    display: block;\n    width: 100%;\n    max-height: 520px;\n    object-fit: contain;\n    background: #13091d;\n  }\n\n  .afb-detail-overlay-copy {\n    padding: 18px 20px 22px;\n  }\n\n  .afb-detail-overlay-kicker {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 8px;\n    color: #9f1020;\n    font-size: 11px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .afb-detail-overlay-caption {\n    margin: 0;\n    color: var(--afb-text);\n    font-size: 15px;\n    line-height: 1.62;\n    font-weight: 850;\n    white-space: pre-line;\n  }\n\n  .afb-narration-copy p {\n    margin: 0 0 18px;\n    color: rgba(55, 23, 79, 0.42);\n    font-size: 16px;\n    line-height: 1.72;\n    font-weight: 700;\n    position: relative;\n    cursor: pointer;\n    scroll-margin-top: 118px;\n    transition:\n      opacity 0.38s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.38s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.38s cubic-bezier(0.16, 1, 0.3, 1),\n      color 0.38s ease,\n      background 0.38s ease,\n      box-shadow 0.38s ease,\n      padding 0.38s ease;\n  }\n\n  .afb-narration-copy p:last-child {\n    margin-bottom: 0;\n  }\n\n  .afb-narration-copy p.has-spotlight::before {\n    content: '';\n    position: absolute;\n    left: -8px;\n    top: 50%;\n    width: 6px;\n    height: calc(100% - 14px);\n    min-height: 24px;\n    border-radius: 999px;\n    transform: translateY(-50%);\n    background: linear-gradient(180deg, rgba(124,58,237,0.76), rgba(217,70,239,0.82));\n    box-shadow:\n      0 0 0 0 rgba(124,58,237,0.24),\n      0 0 18px rgba(124,58,237,0.22);\n    opacity: 0.74;\n    animation: afbInteractiveRailPulse 1.8s ease-in-out infinite;\n  }\n\n  .afb-narration-copy p.is-active {\n    color: var(--afb-text);\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    padding: 12px 16px;\n    border-radius: 16px;\n    background: linear-gradient(90deg, rgba(224,213,232,0.74), rgba(251,249,252,0.98));\n    box-shadow:\n      inset 3px 0 0 0 var(--afb-purple-dark),\n      0 8px 20px rgba(55, 23, 79, 0.06);\n  }\n\n  .afb-narration-copy p.has-spotlight.is-active {\n    background: linear-gradient(90deg, rgba(233,213,255,0.92), rgba(255,255,255,0.98));\n    margin-bottom: calc(var(--afb-spotlight-track-reserve, 340px) + 12px);\n    box-shadow:\n      inset 4px 0 0 0 #7c3aed,\n      0 12px 24px rgba(124,58,237,0.14),\n      0 0 0 1px rgba(196,181,253,0.22);\n  }\n\n  .afb-narration-copy p.is-past {\n    opacity: 0.24;\n    transform: translateY(-4px);\n    filter: blur(1px);\n  }\n\n  .afb-narration-copy p.is-future {\n    opacity: 0.38;\n    transform: translateY(0);\n    filter: blur(0);\n  }\n\n  @keyframes afbInteractiveRailPulse {\n    0%, 100% {\n      box-shadow:\n        0 0 0 0 rgba(124,58,237,0.18),\n        0 0 14px rgba(124,58,237,0.16);\n      filter: brightness(1);\n    }\n    50% {\n      box-shadow:\n        0 0 0 8px rgba(124,58,237,0),\n        0 0 24px rgba(217,70,239,0.24);\n      filter: brightness(1.06);\n    }\n  }\n\n  .afb-activation-badge {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    z-index: 20;\n    width: min(92%, 780px);\n    min-height: 306px;\n    padding: 18px;\n    border-radius: 34px;\n    display: grid;\n    grid-template-columns: minmax(280px, 1.08fr) minmax(0, 0.92fr);\n    align-items: stretch;\n    gap: 20px;\n    color: var(--afb-text);\n    background:\n      radial-gradient(circle at 10% 0%, rgba(var(--afb-theme-rgb), 0.16), transparent 34%),\n      radial-gradient(circle at 100% 12%, rgba(212,181,224,0.30), transparent 36%),\n      linear-gradient(135deg, rgba(255,255,255,0.98), rgba(250,247,255,0.94));\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.18);\n    box-shadow:\n      0 30px 78px rgba(var(--afb-theme-rgb), 0.16),\n      0 0 0 1px rgba(255,255,255,0.72) inset,\n      inset 0 1px 0 rgba(255,255,255,0.92);\n    opacity: 0;\n    pointer-events: none;\n    transform: translate(-50%, -50%) scale(0.84);\n    filter: blur(14px);\n    overflow: hidden;\n    transition:\n      opacity 0.62s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.78s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.78s cubic-bezier(0.16, 1, 0.3, 1),\n      color 0.52s ease,\n      background 0.52s ease,\n      box-shadow 0.52s ease,\n      border-color 0.52s ease;\n  }\n\n  .afb-activation-badge::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(115deg,\n        transparent 0%,\n        rgba(255,255,255,0) 34%,\n        rgba(255,255,255,0.62) 48%,\n        rgba(255,255,255,0) 62%,\n        transparent 100%);\n    transform: translateX(-135%);\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  .afb-activation-orbit {\n    position: absolute;\n    inset: 8px;\n    border-radius: 28px;\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.10);\n    opacity: 0;\n    transform: scale(0.9);\n    pointer-events: none;\n  }\n\n  .afb-activation-carousel {\n    position: relative;\n    z-index: 2;\n    min-width: 0;\n    aspect-ratio: 16 \/ 10;\n    border-radius: 26px;\n    overflow: hidden;\n    align-self: center;\n    background:\n      radial-gradient(circle at center, rgba(var(--afb-theme-rgb), 0.28), transparent 56%),\n      linear-gradient(135deg, #1f102f, #12081d);\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.20);\n    box-shadow:\n      0 20px 44px rgba(55,23,79,0.18),\n      0 0 0 1px rgba(255,255,255,0.12) inset;\n  }\n\n  .afb-activation-carousel-track,\n  .afb-activation-carousel-track img {\n    position: absolute;\n    inset: 0;\n  }\n\n  .afb-activation-carousel-track img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n    opacity: 0;\n    transform: scale(1.08) translateX(0);\n    filter: saturate(1.08) contrast(1.02);\n    animation: afbActivationCarouselFrame var(--afb-activation-carousel-duration, 9s) ease-in-out infinite;\n    animation-delay: var(--afb-activation-carousel-delay, 0s);\n  }\n\n  .afb-activation-carousel-track img.is-portrait,\n  .afb-activation-carousel-track img.is-tall {\n    object-fit: contain;\n    padding: 8px;\n  }\n\n  .afb-activation-carousel::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 2;\n    background:\n      linear-gradient(180deg, rgba(15,8,24,0.04), rgba(15,8,24,0.30)),\n      radial-gradient(circle at 18% 12%, rgba(255,255,255,0.34), transparent 26%);\n    pointer-events: none;\n  }\n\n  .afb-activation-carousel::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    z-index: 3;\n    background: linear-gradient(115deg, transparent 0%, rgba(255,255,255,0) 36%, rgba(255,255,255,0.42) 50%, rgba(255,255,255,0) 64%, transparent 100%);\n    transform: translateX(-140%);\n    animation: afbActivationVideoSweep 2.7s ease-in-out infinite;\n    pointer-events: none;\n  }\n\n  .afb-activation-copy {\n    position: relative;\n    z-index: 2;\n    min-width: 0;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    gap: 13px;\n    padding: 12px 10px 12px 0;\n  }\n\n  .afb-activation-kicker {\n    display: inline-flex;\n    align-items: center;\n    width: max-content;\n    max-width: 100%;\n    min-height: 30px;\n    padding: 0 12px;\n    border-radius: 999px;\n    color: var(--afb-purple-dark);\n    background: rgba(var(--afb-theme-rgb), 0.10);\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.16);\n    font-size: 11px;\n    font-weight: 950;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .afb-activation-title {\n    margin: 0;\n    color: var(--afb-text);\n    font-size: clamp(24px, 2.55vw, 34px);\n    line-height: 1.04;\n    font-weight: 1000;\n    letter-spacing: -0.04em;\n    overflow-wrap: anywhere;\n  }\n\n  .afb-activation-meta {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    flex-wrap: wrap;\n  }\n\n  .afb-activation-chip {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    min-height: 32px;\n    max-width: 100%;\n    padding: 0 12px;\n    border-radius: 999px;\n    color: var(--afb-purple-dark);\n    background: rgba(255,255,255,0.74);\n    border: 1px solid rgba(var(--afb-theme-rgb), 0.16);\n    box-shadow: inset 0 1px 0 rgba(255,255,255,0.72);\n    font-size: 11.5px;\n    font-weight: 900;\n    white-space: nowrap;\n  }\n\n  .afb-activation-chip.is-version {\n    color: #ffffff;\n    background: linear-gradient(135deg, var(--afb-purple), var(--afb-purple-dark));\n    border-color: rgba(var(--afb-theme-rgb), 0.28);\n  }\n\n  .afb-activation-dot {\n    position: relative;\n    z-index: 2;\n    width: 12px;\n    height: 12px;\n    min-width: 12px;\n    min-height: 12px;\n    border-radius: 999px;\n    background: #b8b8c4;\n    box-shadow:\n      0 0 0 0 rgba(109, 50, 145, 0),\n      0 0 0 rgba(109, 50, 145, 0);\n    transition:\n      background 0.42s ease,\n      box-shadow 0.42s ease,\n      transform 0.42s ease;\n  }\n\n  .afb-activation-text {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    color: rgba(55,23,79,0.72);\n    font-size: 13.5px;\n    font-weight: 850;\n    line-height: 1.45;\n  }\n\n  .afb-product-description-body.is-preparing-experience .afb-stage-card {\n    padding: 18px;\n    border-width: 1px;\n    box-shadow: var(--afb-shadow);\n    min-height: clamp(460px, 52vw, 640px);\n    max-height: 820px;\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    pointer-events: auto;\n  }\n\n  .afb-product-description-body.is-preparing-experience .afb-stage-top,\n  .afb-product-description-body.is-preparing-experience .afb-steps,\n  .afb-product-description-body.is-preparing-experience .afb-narration-copy,\n  .afb-product-description-body.is-preparing-experience .afb-merchant-panel {\n    opacity: 0;\n    pointer-events: none;\n    transform: translateY(8px) scale(0.98);\n    filter: blur(10px);\n  }\n\n  .afb-product-description-body.is-activation-visible .afb-activation-badge {\n    opacity: 1;\n    transform: translate(-50%, -50%) scale(1);\n    filter: blur(0);\n  }\n\n  .afb-product-description-body.is-activation-lit .afb-activation-badge {\n    color: var(--afb-text);\n    background:\n      radial-gradient(circle at top right, rgba(var(--afb-theme-rgb),0.20), transparent 38%),\n      radial-gradient(circle at bottom left, rgba(212,181,224,0.32), transparent 42%),\n      linear-gradient(135deg, rgba(255,255,255,0.98), rgba(249,246,252,0.98));\n    border-color: rgba(var(--afb-theme-rgb), 0.28);\n    box-shadow:\n      0 28px 70px rgba(var(--afb-theme-rgb), 0.18),\n      0 0 0 8px rgba(var(--afb-theme-rgb), 0.045),\n      inset 0 1px 0 rgba(255,255,255,0.94);\n    animation: afbActivationBreath 1.55s ease-in-out infinite;\n  }\n\n  .afb-product-description-body.is-activation-lit .afb-activation-badge::before {\n    animation: afbActivationShine 1.85s ease-in-out infinite;\n  }\n\n  .afb-product-description-body.is-activation-lit .afb-activation-orbit {\n    opacity: 1;\n    animation: afbActivationOrbit 1.8s ease-in-out infinite;\n  }\n\n  .afb-product-description-body.is-activation-lit .afb-activation-dot {\n    background: var(--afb-purple);\n    transform: scale(1.12);\n    box-shadow:\n      0 0 0 8px rgba(109, 50, 145, 0.10),\n      0 0 18px rgba(109, 50, 145, 0.38);\n    animation: afbActivationDotPulse 1.2s ease-in-out infinite;\n  }\n\n  .afb-product-description-body.is-activation-docking .afb-activation-badge {\n    top: 50% !important;\n    left: 50% !important;\n    width: min(92%, 780px) !important;\n    min-height: 306px !important;\n    padding: 18px !important;\n    color: var(--afb-text) !important;\n    transform: translate(-50%, -50%) scale(1) !important;\n    opacity: 1 !important;\n    filter: blur(0) !important;\n    animation: afbActivationCurtainHandoff 0.76s cubic-bezier(0.16, 1, 0.3, 1) both !important;\n    box-shadow:\n      0 22px 52px rgba(55, 23, 79, 0.14),\n      0 0 0 8px rgba(109, 50, 145, 0.045),\n      inset 0 1px 0 rgba(255,255,255,0.94) !important;\n  }\n\n  .afb-product-description-body.is-activation-docking .afb-activation-text {\n    opacity: 1;\n    animation: afbActivationTextHandoff 0.62s cubic-bezier(0.16, 1, 0.3, 1) both;\n  }\n\n  .afb-product-description-body.is-activation-docking .afb-activation-dot {\n    width: 12px !important;\n    height: 12px !important;\n    min-width: 12px !important;\n    min-height: 12px !important;\n    background: var(--afb-purple) !important;\n    animation: afbActivationDotHandoff 0.62s cubic-bezier(0.16, 1, 0.3, 1) both !important;\n  }\n\n  .afb-product-description-body.is-activation-docking .afb-activation-orbit {\n    animation: afbActivationOrbitHandoff 0.62s cubic-bezier(0.16, 1, 0.3, 1) both !important;\n  }\n\n  .afb-product-description-body.is-activation-docking .afb-activation-badge::before {\n    animation: none !important;\n    opacity: 0 !important;\n  }\n\n  @keyframes afbActivationBreath {\n    0%, 100% { transform: translate(-50%, -50%) scale(1); }\n    50% { transform: translate(-50%, -50%) scale(1.025); }\n  }\n\n  @keyframes afbActivationShine {\n    0%, 58%, 100% {\n      transform: translateX(-135%);\n      opacity: 0;\n    }\n    64% { opacity: 0.95; }\n    88% {\n      transform: translateX(135%);\n      opacity: 0.10;\n    }\n  }\n\n  @keyframes afbActivationOrbit {\n    0%, 100% {\n      transform: scale(0.92);\n      opacity: 0.35;\n    }\n    50% {\n      transform: scale(1);\n      opacity: 0.85;\n    }\n  }\n\n  @keyframes afbActivationCarouselFrame {\n    0%, 100% {\n      opacity: 0;\n      transform: scale(1.08) translateX(0);\n      filter: blur(2px) saturate(1.08);\n    }\n    8%, 34% {\n      opacity: 1;\n      transform: scale(1.02) translateX(-1.5%);\n      filter: blur(0) saturate(1.12);\n    }\n    46% {\n      opacity: 0;\n      transform: scale(1.04) translateX(-3%);\n      filter: blur(3px) saturate(1.08);\n    }\n  }\n\n  @keyframes afbActivationVideoSweep {\n    0%, 58%, 100% {\n      transform: translateX(-140%);\n      opacity: 0;\n    }\n    66% { opacity: .82; }\n    90% {\n      transform: translateX(140%);\n      opacity: .10;\n    }\n  }\n\n  @keyframes afbActivationDotPulse {\n    0% {\n      box-shadow:\n        0 0 0 0 rgba(109, 50, 145, 0.24),\n        0 0 14px rgba(109, 50, 145, 0.34);\n    }\n    60% {\n      box-shadow:\n        0 0 0 10px rgba(109, 50, 145, 0),\n        0 0 20px rgba(109, 50, 145, 0.42);\n    }\n    100% {\n      box-shadow:\n        0 0 0 0 rgba(109, 50, 145, 0),\n        0 0 14px rgba(109, 50, 145, 0.28);\n    }\n  }\n\n  @keyframes afbActivationCurtainHandoff {\n    0% {\n      opacity: 1;\n      transform: translate(-50%, -50%) scale(1);\n      filter: blur(0);\n    }\n    38% {\n      opacity: 1;\n      transform: translate(-50%, -52%) scale(0.99);\n      filter: blur(0);\n    }\n    72% {\n      opacity: 0.48;\n      transform: translate(-50%, -56%) scale(0.965);\n      filter: blur(8px);\n    }\n    100% {\n      opacity: 0;\n      transform: translate(-50%, -60%) scale(0.93);\n      filter: blur(18px);\n    }\n  }\n\n  @keyframes afbActivationTextHandoff {\n    0% {\n      opacity: 1;\n      transform: translateY(0);\n      filter: blur(0);\n    }\n    58% {\n      opacity: 0.72;\n      transform: translateY(-1px);\n      filter: blur(2px);\n    }\n    100% {\n      opacity: 0;\n      transform: translateY(-4px);\n      filter: blur(9px);\n    }\n  }\n\n  @keyframes afbActivationDotHandoff {\n    0% {\n      opacity: 1;\n      transform: scale(1.12);\n      box-shadow:\n        0 0 0 8px rgba(109, 50, 145, 0.10),\n        0 0 18px rgba(109, 50, 145, 0.38);\n    }\n    58% {\n      opacity: 0.78;\n      transform: scale(1.22);\n      box-shadow:\n        0 0 0 12px rgba(109, 50, 145, 0.055),\n        0 0 24px rgba(109, 50, 145, 0.30);\n    }\n    100% {\n      opacity: 0;\n      transform: scale(1.55);\n      box-shadow:\n        0 0 0 18px rgba(109, 50, 145, 0),\n        0 0 30px rgba(109, 50, 145, 0);\n    }\n  }\n\n  @keyframes afbActivationOrbitHandoff {\n    0% {\n      opacity: 1;\n      transform: scale(1);\n    }\n    100% {\n      opacity: 0;\n      transform: scale(1.22);\n    }\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-narration-copy {\n    opacity: 0;\n    transform: translateY(-20px) scale(0.94);\n    filter: blur(16px);\n    pointer-events: none;\n    transition:\n      opacity var(--afb-narration-out-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-narration-out-delay),\n      transform var(--afb-narration-out-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-narration-out-delay),\n      filter var(--afb-narration-out-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-narration-out-delay);\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-narration-spotlight {\n    opacity: 0;\n    transform: translateY(-18px) scale(0.94);\n    filter: blur(16px);\n    max-height: 0;\n    margin: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    pointer-events: none;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-steps {\n    opacity: 0;\n    transform: translateY(-12px) scale(0.97);\n    filter: blur(10px);\n    pointer-events: none;\n    transition:\n      opacity 0.86s cubic-bezier(0.16, 1, 0.3, 1) 0.04s,\n      transform 0.86s cubic-bezier(0.16, 1, 0.3, 1) 0.04s,\n      filter 0.86s cubic-bezier(0.16, 1, 0.3, 1) 0.04s;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-stage-top {\n    opacity: 0;\n    transform: translateY(-10px) scale(0.975);\n    filter: blur(8px);\n    pointer-events: none;\n    transition:\n      opacity 0.78s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.78s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.78s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-merchant-hold .afb-narration-copy,\n  .afb-product-description-body.is-merchant-hold .afb-narration-spotlight,\n  .afb-product-description-body.is-merchant-hold .afb-steps,\n  .afb-product-description-body.is-merchant-hold .afb-stage-top {\n    opacity: 0;\n    transform: translateY(-12px) scale(0.965);\n    filter: blur(10px);\n    pointer-events: none;\n    transition-delay: 0s;\n  }\n\n  .afb-merchant-panel {\n    position: absolute;\n    inset: 24px;\n    display: grid;\n    grid-template-columns: minmax(190px, 0.78fr) minmax(0, 1.22fr);\n    gap: clamp(18px, 3vw, 34px);\n    align-items: center;\n    justify-items: center;\n    opacity: 0;\n    pointer-events: none;\n    transform: translateY(26px) scale(0.965);\n    filter: blur(16px);\n    transition:\n      opacity 0.64s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 0.64s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 0.64s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-stage-card,\n  .afb-product-description-body.is-merchant-hold .afb-stage-card {\n    min-height: clamp(440px, 48vw, 560px);\n    max-height: 1800px;\n    overflow: hidden;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-panel {\n    opacity: 1;\n    pointer-events: auto;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    transition:\n      opacity var(--afb-merchant-in-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-merchant-in-delay),\n      transform var(--afb-merchant-in-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-merchant-in-delay),\n      filter var(--afb-merchant-in-duration) cubic-bezier(0.16, 1, 0.3, 1) var(--afb-merchant-in-delay);\n  }\n\n  .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n    opacity: 1;\n    pointer-events: auto;\n    transform: translateY(0) scale(1);\n    filter: blur(0);\n    transition-delay: 0s;\n  }\n\n  @media (min-width: 861px) {\n    .afb-product-description-body.is-merchant-outro .afb-narration-copy,\n    .afb-product-description-body.is-merchant-hold .afb-narration-copy,\n    .afb-product-description-body.is-merchant-outro .afb-narration-spotlight,\n    .afb-product-description-body.is-merchant-hold .afb-narration-spotlight,\n    .afb-product-description-body.is-merchant-outro .afb-steps,\n    .afb-product-description-body.is-merchant-hold .afb-steps,\n    .afb-product-description-body.is-merchant-outro .afb-stage-top,\n    .afb-product-description-body.is-merchant-hold .afb-stage-top {\n      max-height: 0;\n      height: 0;\n      margin: 0;\n      padding: 0;\n      overflow: hidden;\n      opacity: 0;\n      pointer-events: none;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-stage-card,\n    .afb-product-description-body.is-merchant-hold .afb-stage-card {\n      min-height: 0;\n      height: auto;\n      max-height: none;\n      padding: 18px;\n      overflow: hidden;\n      border-radius: 26px;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n      position: relative;\n      inset: auto;\n      width: 100%;\n      display: grid;\n      grid-template-columns: minmax(220px, 0.82fr) minmax(340px, 1fr);\n      gap: clamp(20px, 2.4vw, 34px);\n      align-items: center;\n      margin: 0;\n      padding: 0;\n    }\n\n    .afb-merchant-copy {\n      width: min(100%, 430px);\n      max-width: 430px;\n      justify-self: center;\n      align-self: center;\n      margin-inline: auto;\n    }\n\n    .afb-merchant-media {\n      align-self: center;\n      justify-self: center;\n      margin: 0;\n    }\n\n    .afb-merchant-figure {\n      width: min(100%, 390px);\n      max-width: 390px;\n    }\n\n    .afb-merchant-figure img {\n      max-height: clamp(300px, 34vw, 430px);\n    }\n  }\n\n  .afb-merchant-media {\n    position: relative;\n    min-width: 0;\n    min-height: 0;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    background: transparent !important;\n    border: 0 !important;\n    box-shadow: none !important;\n    overflow: visible;\n  }\n\n  .afb-merchant-media::before,\n  .afb-merchant-media::after {\n    display: none !important;\n  }\n\n  .afb-merchant-media-glow {\n    position: absolute;\n    left: 50%;\n    top: 52%;\n    width: min(72%, 220px);\n    height: 58%;\n    transform: translate(-50%, -50%);\n    border-radius: 50%;\n    background: radial-gradient(circle, rgba(109,50,145,.18) 0%, rgba(109,50,145,.10) 36%, transparent 72%);\n    filter: blur(24px);\n    opacity: .42;\n    pointer-events: none;\n    animation: afbImageGlowPulse 2.2s ease-in-out infinite;\n  }\n\n  @keyframes afbImageGlowPulse {\n    0%, 100% {\n      opacity: .62;\n      transform: translate(-50%, -50%) scale(.92);\n    }\n    50% {\n      opacity: .95;\n      transform: translate(-50%, -50%) scale(1.06);\n    }\n  }\n\n  .afb-merchant-figure {\n    position: relative;\n    width: min(100%, 360px);\n    max-width: 360px;\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    background: transparent !important;\n    border: 0 !important;\n    box-shadow: none !important;\n    border-radius: 0;\n    overflow: visible;\n  }\n\n  .afb-merchant-figure::before {\n    content: none;\n  }\n\n  .afb-merchant-figure::after {\n    content: \"\";\n    position: absolute;\n    left: 18%;\n    right: 18%;\n    bottom: -16px;\n    height: 26px;\n    z-index: 1;\n    border-radius: 999px;\n    background: rgba(55, 23, 79, 0.16);\n    filter: blur(16px);\n    pointer-events: none;\n  }\n\n  .afb-merchant-figure img {\n    position: relative;\n    z-index: 2;\n    width: 100%;\n    height: auto;\n    max-height: clamp(280px, 32vw, 400px);\n    object-fit: contain;\n    display: block;\n    border-radius: 16px;\n    opacity: calc(0.12 + (var(--afb-merchant-progress) * 0.88));\n    transform:\n      translateY(calc(24px - (var(--afb-merchant-progress) * 24px)))\n      scale(calc(0.88 + (var(--afb-merchant-progress) * 0.12)));\n    filter:\n      blur(calc(10px - (var(--afb-merchant-progress) * 10px)))\n      drop-shadow(0 20px 36px rgba(55,23,79,.20))\n      saturate(1.03);\n    clip-path: inset(calc(30% - (var(--afb-merchant-progress) * 30%)) 0 0 0 round 16px);\n    transition:\n      opacity 0.18s linear,\n      transform 0.18s linear,\n      filter 0.18s linear,\n      clip-path 0.18s linear;\n  }\n\n  .afb-product-description-body.is-merchant-hold .afb-merchant-figure img {\n    opacity: 1;\n    transform: translateY(0) scale(1);\n    filter: drop-shadow(0 20px 36px rgba(55,23,79,.20)) saturate(1.03);\n    clip-path: inset(0 0 0 0 round 16px);\n  }\n\n  .afb-merchant-shine {\n    position: absolute;\n    inset: 0;\n    z-index: 4;\n    border-radius: 24px;\n    background:\n      linear-gradient(115deg,\n        transparent 0%,\n        rgba(255,255,255,0) 34%,\n        rgba(255,255,255,.55) 48%,\n        rgba(255,255,255,0) 62%,\n        transparent 100%);\n    transform: translateX(120%);\n    animation: afbMerchantShine 2.65s ease 1.1s infinite;\n    pointer-events: none;\n    mix-blend-mode: screen;\n  }\n\n  @keyframes afbMerchantShine {\n    0%, 68%, 100% {\n      transform: translateX(120%);\n      opacity: 0;\n    }\n    74% { opacity: .9; }\n    92% {\n      transform: translateX(-120%);\n      opacity: .12;\n    }\n  }\n\n  .afb-merchant-copy {\n    position: relative;\n    overflow: hidden;\n    width: min(100%, 440px);\n    max-width: 440px;\n    min-width: 0;\n    justify-self: center;\n    margin-inline: auto;\n    padding: clamp(20px, 3vw, 32px);\n    border-radius: 30px;\n    border: 1px solid rgba(55,23,79,.10);\n    background:\n      radial-gradient(circle at top right, rgba(214,40,57,.08), transparent 34%),\n      radial-gradient(circle at top left, rgba(212,181,224,.34), transparent 44%),\n      linear-gradient(135deg, rgba(255,255,255,.98), rgba(250,247,255,.93));\n    box-shadow:\n      0 18px 46px rgba(55,23,79,.10),\n      inset 0 1px 0 rgba(255,255,255,.88);\n  }\n\n  .afb-merchant-copy::before {\n    content: '';\n    position: absolute;\n    left: -20%;\n    top: 0;\n    width: 40%;\n    height: 100%;\n    background: linear-gradient(90deg, transparent, rgba(255,255,255,.32), transparent);\n    transform: skewX(-18deg);\n    animation: afbCardSweep 4.2s ease-in-out infinite;\n    pointer-events: none;\n  }\n\n  @keyframes afbCardSweep {\n    0%, 68%, 100% {\n      left: -45%;\n      opacity: 0;\n    }\n    72% { opacity: .7; }\n    92% {\n      left: 115%;\n      opacity: 0;\n    }\n  }\n\n  .afb-merchant-topline {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 14px;\n    margin-bottom: 18px;\n  }\n\n  .afb-merchant-kicker {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 9px 14px;\n    border-radius: 999px;\n    background: linear-gradient(135deg, rgba(55,23,79,.10), rgba(212,181,224,.22));\n    color: var(--afb-text);\n    font-size: 11px;\n    font-weight: 950;\n    letter-spacing: .08em;\n    text-transform: uppercase;\n    animation: afbMerchantFadeUp .65s cubic-bezier(.16,1,.3,1) .05s both;\n  }\n\n  .afb-merchant-dot {\n    width: 10px;\n    height: 10px;\n    min-width: 10px;\n    min-height: 10px;\n    border-radius: 999px;\n    background: #7b2cbf;\n    box-shadow:\n      0 0 0 0 rgba(123,44,191,.30),\n      0 0 10px rgba(123,44,191,.28);\n    animation: afbMerchantDotPulse 1.45s ease-in-out infinite;\n  }\n\n  @keyframes afbMerchantDotPulse {\n    0% {\n      transform: scale(1);\n      box-shadow:\n        0 0 0 0 rgba(123,44,191,.30),\n        0 0 10px rgba(123,44,191,.25);\n    }\n    50% {\n      transform: scale(1.18);\n      box-shadow:\n        0 0 0 9px rgba(123,44,191,0),\n        0 0 18px rgba(123,44,191,.22);\n    }\n    100% {\n      transform: scale(1);\n      box-shadow:\n        0 0 0 0 rgba(123,44,191,0),\n        0 0 10px rgba(123,44,191,.18);\n    }\n  }\n\n  .afb-merchant-timer {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    padding: 8px 12px;\n    border-radius: 999px;\n    background: linear-gradient(135deg, rgba(255,255,255,.92), rgba(255,244,246,.92));\n    border: 1px solid rgba(214,40,57,.20);\n    box-shadow:\n      0 8px 18px rgba(55,23,79,.05),\n      0 0 0 0 rgba(214,40,57,.08);\n    color: var(--afb-red-dark);\n    font-size: 12px;\n    font-weight: 950;\n    letter-spacing: .03em;\n    line-height: 1;\n    white-space: nowrap;\n    animation:\n      afbMerchantFadeUp .65s cubic-bezier(.16,1,.3,1) .14s both,\n      afbTimerBoxPulse 1.4s ease-in-out 1.1s infinite;\n  }\n\n  .afb-merchant-timer.is-critical {\n    color: #fff;\n    background: linear-gradient(135deg, #d62839, #9f1020);\n    border-color: rgba(214,40,57,.55);\n    box-shadow:\n      0 12px 24px rgba(159,16,32,.22),\n      0 0 0 8px rgba(214,40,57,.10);\n  }\n\n  .afb-merchant-timer-icon {\n    width: 8px;\n    height: 8px;\n    border-radius: 999px;\n    background: var(--afb-red);\n    box-shadow: 0 0 0 0 rgba(214,40,57,.28);\n    animation: afbTimerPulse 1.15s ease-in-out infinite;\n  }\n\n  @keyframes afbTimerBoxPulse {\n    0%, 100% {\n      box-shadow:\n        0 8px 18px rgba(55,23,79,.05),\n        0 0 0 0 rgba(214,40,57,.08);\n    }\n    50% {\n      box-shadow:\n        0 10px 22px rgba(55,23,79,.07),\n        0 0 0 5px rgba(214,40,57,.045);\n    }\n  }\n\n  @keyframes afbTimerPulse {\n    0% { box-shadow: 0 0 0 0 rgba(214,40,57,.32); }\n    60% { box-shadow: 0 0 0 8px rgba(214,40,57,0); }\n    100% { box-shadow: 0 0 0 0 rgba(214,40,57,0); }\n  }\n\n  .afb-merchant-title {\n    position: relative;\n    z-index: 2;\n    margin: 0 0 18px;\n    color: var(--afb-text);\n    font-size: clamp(20px, 2.25vw, 30px);\n    line-height: 1.08;\n    font-weight: 950;\n    letter-spacing: -.04em;\n    max-width: 100%;\n    perspective: 900px;\n    overflow-wrap: anywhere;\n    word-break: normal;\n  }\n\n  .afb-merchant-title-line {\n    display: block;\n    overflow: hidden;\n  }\n\n  .afb-merchant-title-word {\n    display: inline-block;\n    opacity: 0;\n    transform: translateY(115%) rotateX(38deg) scale(.96);\n    transform-origin: left bottom;\n    filter: blur(8px);\n    animation: afbMerchantTitleCinematic .82s cubic-bezier(.16,1,.3,1) both;\n    animation-delay: calc(.06s + var(--afb-word-delay, 0ms));\n  }\n\n  .afb-merchant-title::after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 2px;\n    margin-top: 12px;\n    border-radius: 999px;\n    background:\n      linear-gradient(90deg, rgba(55,23,79,0), rgba(214,40,57,.72), rgba(109,50,145,.82), rgba(212,181,224,0));\n    animation: afbMerchantUnderline .9s cubic-bezier(.16,1,.3,1) .54s both;\n  }\n\n  @keyframes afbMerchantTitleCinematic {\n    0% {\n      opacity: 0;\n      transform: translateY(115%) rotateX(38deg) scale(.96);\n      filter: blur(8px);\n    }\n    58% {\n      opacity: 1;\n      transform: translateY(-8%) rotateX(0deg) scale(1.012);\n      filter: blur(0);\n    }\n    100% {\n      opacity: 1;\n      transform: translateY(0) rotateX(0deg) scale(1);\n      filter: blur(0);\n    }\n  }\n\n  @keyframes afbMerchantUnderline {\n    0% { width: 0; opacity: 0; }\n    100% { width: 84%; opacity: 1; }\n  }\n\n  .afb-merchant-price {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n    margin: 0 0 26px;\n    animation: afbMerchantFadeUp .68s cubic-bezier(.16,1,.3,1) .66s both;\n    opacity: 0;\n    transform: translateY(14px);\n    filter: blur(8px);\n  }\n\n  .afb-merchant-price-top {\n    color: #7c688e;\n    font-size: 12px;\n    font-weight: 900;\n    letter-spacing: .06em;\n    text-transform: uppercase;\n  }\n\n  .afb-merchant-price-main {\n    color: var(--afb-text);\n    font-size: clamp(30px, 3.4vw, 44px);\n    line-height: 1;\n    font-weight: 1000;\n    letter-spacing: -.058em;\n    white-space: normal;\n  }\n\n  .afb-merchant-price-amount {\n    color: var(--afb-red);\n    text-shadow:\n      0 8px 16px rgba(214,40,57,.12),\n      0 0 0 rgba(214,40,57,0);\n    animation: afbPriceUrgencyPulse 1.55s ease-in-out infinite;\n  }\n\n  @keyframes afbPriceUrgencyPulse {\n    0%, 100% {\n      filter: brightness(1);\n      text-shadow:\n        0 8px 16px rgba(214,40,57,.12),\n        0 0 0 rgba(214,40,57,0);\n    }\n    50% {\n      filter: brightness(1.06);\n      text-shadow:\n        0 10px 20px rgba(214,40,57,.18),\n        0 0 12px rgba(214,40,57,.12);\n    }\n  }\n\n  .afb-merchant-price-bottom {\n    color: #7b688d;\n    font-size: 13px;\n    font-weight: 780;\n    line-height: 1.4;\n  }\n\n  @keyframes afbMerchantFadeUp {\n    0% {\n      opacity: 0;\n      transform: translateY(14px);\n      filter: blur(8px);\n    }\n    100% {\n      opacity: 1;\n      transform: translateY(0);\n      filter: blur(0);\n    }\n  }\n\n  .afb-merchant-cta-row {\n    position: relative;\n    z-index: 2;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: 12px;\n    width: 100%;\n    margin-top: clamp(12px, 2vw, 20px);\n    padding-bottom: 4px;\n    animation: afbMerchantFadeUp .72s cubic-bezier(.16,1,.3,1) .82s both;\n    opacity: 0;\n    transform: translateY(14px);\n    filter: blur(8px);\n  }\n\n  .afb-merchant-cta-row::before {\n    content: '';\n    position: absolute;\n    inset: -18px 8%;\n    border-radius: 999px;\n    background: radial-gradient(circle, rgba(214,40,57,.16), transparent 62%);\n    filter: blur(16px);\n    opacity: .8;\n    pointer-events: none;\n    animation: afbCtaAura 1.8s ease-in-out infinite;\n  }\n\n  @keyframes afbCtaAura {\n    0%, 100% {\n      transform: scale(.92);\n      opacity: .52;\n    }\n    50% {\n      transform: scale(1.05);\n      opacity: .88;\n    }\n  }\n\n  .afb-merchant-cta-btn {\n    appearance: none;\n    -webkit-appearance: none;\n    border: 0;\n    outline: none;\n    cursor: pointer;\n    text-decoration: none;\n    position: relative;\n    overflow: hidden;\n    min-height: clamp(58px, 6vw, 68px);\n    width: min(100%, 460px);\n    max-width: 460px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 12px;\n    padding: 18px 34px;\n    border-radius: 999px;\n    background:\n      linear-gradient(135deg, #2d1042 0%, #6d3291 40%, #d62839 115%);\n    color: #fff;\n    font-size: 16px;\n    font-weight: 1000;\n    letter-spacing: .055em;\n    text-transform: uppercase;\n    box-shadow:\n      0 20px 38px rgba(55,23,79,.28),\n      0 0 0 0 rgba(214,40,57,.18),\n      inset 0 1px 0 rgba(255,255,255,.22);\n    transition:\n      transform .22s ease,\n      box-shadow .22s ease,\n      filter .22s ease,\n      background .22s ease;\n    animation:\n      afbMerchantCtaPulse 1.45s ease-in-out 1.2s infinite,\n      afbCtaMicroMove 2.8s ease-in-out 1.8s infinite;\n  }\n\n  .afb-merchant-cta-btn span {\n    position: relative;\n    z-index: 2;\n  }\n\n  .afb-merchant-cta-btn::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(115deg,\n        transparent 0%,\n        rgba(255,255,255,0) 32%,\n        rgba(255,255,255,.36) 48%,\n        rgba(255,255,255,0) 64%,\n        transparent 100%);\n    transform: translateX(-140%);\n    animation: afbCtaShine 2.45s ease .8s infinite;\n    pointer-events: none;\n  }\n\n  .afb-merchant-cta-btn::after {\n    content: '→';\n    position: relative;\n    z-index: 2;\n    font-size: 16px;\n    line-height: 1;\n    transform: translateX(0);\n    transition: transform .22s ease;\n    animation: afbArrowNudge 1.1s ease-in-out infinite;\n  }\n\n  .afb-merchant-cta-btn:hover {\n    transform: translateY(-3px) scale(1.025);\n    filter: brightness(1.05);\n    box-shadow:\n      0 26px 48px rgba(55,23,79,.34),\n      0 0 0 9px rgba(214,40,57,.08),\n      inset 0 1px 0 rgba(255,255,255,.25);\n  }\n\n  @keyframes afbMerchantCtaPulse {\n    0% {\n      box-shadow:\n        0 20px 38px rgba(55,23,79,.28),\n        0 0 0 0 rgba(214,40,57,.18),\n        inset 0 1px 0 rgba(255,255,255,.22);\n    }\n    50% {\n      box-shadow:\n        0 24px 46px rgba(55,23,79,.32),\n        0 0 0 13px rgba(214,40,57,.07),\n        inset 0 1px 0 rgba(255,255,255,.22);\n    }\n    100% {\n      box-shadow:\n        0 20px 38px rgba(55,23,79,.28),\n        0 0 0 0 rgba(214,40,57,0),\n      inset 0 1px 0 rgba(255,255,255,.22);\n    }\n  }\n\n  .afb-merchant-secondary-btn {\n    appearance: none;\n    -webkit-appearance: none;\n    border: 1px solid rgba(173, 125, 8, .22);\n    outline: none;\n    cursor: pointer;\n    text-decoration: none;\n    position: relative;\n    overflow: hidden;\n    min-height: 52px;\n    width: min(100%, 460px);\n    max-width: 460px;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 10px;\n    padding: 14px 24px;\n    border-radius: 999px;\n    background: linear-gradient(135deg, #fff6c9 0%, #ffd24a 52%, #f4b400 100%);\n    color: #5b3c00;\n    font-size: 14px;\n    font-weight: 950;\n    letter-spacing: .045em;\n    text-transform: uppercase;\n    box-shadow:\n      0 16px 30px rgba(201,138,0,.20),\n      inset 0 1px 0 rgba(255,255,255,.55);\n    transition:\n      transform .22s ease,\n      box-shadow .22s ease,\n      filter .22s ease,\n      background .22s ease;\n  }\n\n  .afb-merchant-secondary-btn::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background:\n      linear-gradient(115deg,\n        transparent 0%,\n        rgba(255,255,255,0) 30%,\n        rgba(255,255,255,.42) 48%,\n        rgba(255,255,255,0) 66%,\n        transparent 100%);\n    transform: translateX(-150%);\n    animation: afbCtaShine 3.1s ease 1.1s infinite;\n    pointer-events: none;\n  }\n\n  .afb-merchant-secondary-btn span {\n    position: relative;\n    z-index: 2;\n  }\n\n  .afb-merchant-secondary-btn::after {\n    content: 'WhatsApp';\n    position: relative;\n    z-index: 2;\n    font-size: 10px;\n    line-height: 1;\n    letter-spacing: .08em;\n    opacity: .72;\n  }\n\n  .afb-merchant-secondary-btn:hover {\n    transform: translateY(-2px) scale(1.015);\n    filter: brightness(1.02);\n    box-shadow:\n      0 20px 38px rgba(201,138,0,.24),\n      inset 0 1px 0 rgba(255,255,255,.62);\n  }\n\n  @keyframes afbCtaMicroMove {\n    0%, 100% { transform: translateY(0) scale(1); }\n    50% { transform: translateY(-1px) scale(1.01); }\n  }\n\n  @keyframes afbCtaShine {\n    0%, 64%, 100% {\n      transform: translateX(-140%);\n      opacity: 0;\n    }\n    70% { opacity: .95; }\n    92% {\n      transform: translateX(140%);\n      opacity: .15;\n    }\n  }\n\n  @keyframes afbArrowNudge {\n    0%, 100% { transform: translateX(0); }\n    50% { transform: translateX(4px); }\n  }\n\n  .afb-merchant-safe-note {\n    position: relative;\n    z-index: 2;\n    margin-top: 12px;\n    text-align: center;\n    color: rgba(55,23,79,.58);\n    font-size: 11.5px;\n    font-weight: 800;\n    animation: afbMerchantFadeUp .72s cubic-bezier(.16,1,.3,1) .94s both;\n    opacity: 0;\n    transform: translateY(12px);\n    filter: blur(7px);\n  }\n\n  .afb-merchant-safe-note strong {\n    color: var(--afb-text);\n    font-weight: 950;\n  }\n\n  .afb-product-description-body.is-ending .afb-stage-card {\n    opacity: 0;\n    transform: translateY(-16px) scale(0.94);\n    filter: blur(16px);\n    max-height: 0;\n    min-height: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    border-width: 0;\n    box-shadow: none;\n  }\n\n  .afb-product-description-body.is-ending .afb-merchant-panel {\n    opacity: 0;\n    transform: translateY(-18px) scale(0.9);\n    filter: blur(18px);\n    pointer-events: none;\n  }\n\n  .afb-tts-hidden {\n    position: absolute !important;\n    left: -99999px !important;\n    top: auto !important;\n    width: 1px !important;\n    height: 1px !important;\n    overflow: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-product-quote,\n  .afb-product-description-body.is-merchant-hold .afb-product-quote,\n  .afb-product-description-body.is-ending .afb-product-quote {\n    max-height: 0 !important;\n    min-height: 0 !important;\n    height: 0 !important;\n    margin: 0 !important;\n    padding: 0 !important;\n    border-width: 0 !important;\n    opacity: 0 !important;\n    transform: translateY(-14px) scale(0.96) !important;\n    filter: blur(12px) !important;\n    overflow: hidden !important;\n    pointer-events: none !important;\n    box-shadow: none !important;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-quote-text,\n  .afb-product-description-body.is-merchant-hold .afb-quote-text,\n  .afb-product-description-body.is-ending .afb-quote-text {\n    max-height: 0 !important;\n    height: 0 !important;\n    opacity: 0 !important;\n    overflow: hidden !important;\n    margin: 0 !important;\n    padding: 0 !important;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-product-quote::before,\n  .afb-product-description-body.is-merchant-outro .afb-product-quote::after,\n  .afb-product-description-body.is-merchant-hold .afb-product-quote::before,\n  .afb-product-description-body.is-merchant-hold .afb-product-quote::after,\n  .afb-product-description-body.is-ending .afb-product-quote::before,\n  .afb-product-description-body.is-ending .afb-product-quote::after {\n    display: none !important;\n  }\n\n  @media (max-width: 860px) {\n    .afb-product-description-body.is-intro-visible .afb-intro-hero-visual {\n      margin-bottom: 16px;\n      max-height: 360px;\n      border-radius: 22px;\n    }\n\n    .afb-intro-hero-visual img {\n      aspect-ratio: 16 \/ 10;\n    }\n\n    .afb-merchant-panel {\n      grid-template-columns: 1fr;\n      gap: 18px;\n      justify-items: center;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-stage-card {\n      min-height: 0;\n      max-height: none;\n      height: auto;\n      overflow: visible;\n    }\n\n    .afb-merchant-figure {\n      max-width: 230px;\n    }\n\n    .afb-merchant-copy {\n      width: min(100%, 430px);\n      max-width: 430px;\n      justify-self: center;\n      margin-inline: auto;\n      padding: 22px 18px 24px;\n    }\n\n    .afb-merchant-topline {\n      flex-wrap: wrap;\n      align-items: center;\n    }\n\n    .afb-merchant-title {\n      font-size: clamp(20px, 5vw, 25px);\n    }\n\n    .afb-merchant-price-main {\n      font-size: clamp(31px, 7vw, 39px);\n    }\n\n    .afb-merchant-cta-btn {\n      width: 100%;\n      max-width: none;\n      min-height: 60px;\n    }\n\n    .afb-merchant-secondary-btn {\n      width: 100%;\n      max-width: none;\n      min-height: 52px;\n      font-size: 13px;\n      padding: 14px 18px;\n    }\n  }\n\n  @media (max-width: 860px) {\n    .afb-product-description-body.is-merchant-outro .afb-narration-copy,\n    .afb-product-description-body.is-merchant-hold .afb-narration-copy,\n    .afb-product-description-body.is-merchant-outro .afb-narration-spotlight,\n    .afb-product-description-body.is-merchant-hold .afb-narration-spotlight {\n      max-height: 0;\n      height: 0;\n      margin: 0;\n      padding: 0;\n      overflow: hidden;\n      opacity: 0;\n      transform: translateY(-18px) scale(0.94);\n      filter: blur(16px);\n      pointer-events: none;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-narration-copy p,\n    .afb-product-description-body.is-merchant-hold .afb-narration-copy p {\n      margin: 0;\n      padding: 0;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-steps,\n    .afb-product-description-body.is-merchant-hold .afb-steps,\n    .afb-product-description-body.is-merchant-outro .afb-stage-top,\n    .afb-product-description-body.is-merchant-hold .afb-stage-top {\n      max-height: 0;\n      height: 0;\n      margin: 0;\n      padding: 0;\n      overflow: hidden;\n      opacity: 0;\n      pointer-events: none;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-stage-card,\n    .afb-product-description-body.is-merchant-hold .afb-stage-card {\n      min-height: 0;\n      height: auto;\n      max-height: none;\n      padding: 14px;\n      overflow: visible;\n      border-radius: 24px;\n    }\n\n    .afb-narration-spotlight {\n      position: relative;\n      left: auto;\n      right: auto;\n      top: auto;\n      bottom: auto;\n      z-index: 4;\n      width: 100%;\n      max-width: 100%;\n      grid-template-columns: 1fr;\n      gap: 9px;\n      margin: 0;\n      padding: 0;\n      border-radius: 0;\n      box-shadow: none;\n      max-height: 0;\n      opacity: 0;\n      overflow: hidden;\n      transform: translateY(-10px) scale(0.98);\n      transform-origin: top center;\n      transition:\n        opacity 0.34s ease,\n        transform 0.34s ease,\n        filter 0.34s ease,\n        max-height 0.42s ease,\n        margin 0.34s ease;\n    }\n\n    .afb-narration-spotlight.is-visible {\n      margin: 12px 0 18px;\n      max-height: 900px;\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n      overflow: visible;\n    }\n\n    .afb-narration-spotlight.is-exiting {\n      margin: 0;\n      max-height: 0;\n      opacity: 0;\n      transform: translateY(-10px) scale(0.98);\n      overflow: hidden;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n      position: relative;\n      inset: auto;\n      width: 100%;\n      display: grid;\n      grid-template-columns: 1fr;\n      gap: 14px;\n      margin: 0;\n      padding: 0;\n      align-items: center;\n      justify-items: center;\n      opacity: 1;\n      pointer-events: auto;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n    }\n\n    .afb-merchant-media {\n      min-height: auto;\n      height: auto;\n      padding: 0;\n      margin: 0 0 6px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      overflow: visible;\n      background: transparent;\n      border: 0;\n      box-shadow: none;\n    }\n\n    .afb-merchant-detail-hotspots {\n      width: calc(100% - 12px);\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 8px;\n      margin: 0 auto 10px;\n      box-sizing: border-box;\n      overflow: visible;\n    }\n\n    .afb-merchant-detail-hotspot {\n      min-width: 0;\n      min-height: 58px;\n      padding: 8px;\n      border-radius: 14px;\n    }\n\n    .afb-merchant-media-glow {\n      inset: 10% 22%;\n      filter: blur(14px);\n      opacity: 0.55;\n    }\n\n    .afb-merchant-figure {\n      width: min(100%, 220px);\n      max-width: 220px;\n      height: auto;\n      aspect-ratio: 1 \/ 1;\n      margin: 0 auto;\n    }\n\n    .afb-merchant-figure img {\n      width: 100%;\n      height: auto;\n      max-height: 220px;\n      object-fit: contain;\n      border-radius: 22px;\n    }\n\n    .afb-merchant-copy {\n      width: min(100%, 430px);\n      max-width: 430px;\n      justify-self: center;\n      margin-inline: auto;\n      padding: 18px 15px 18px;\n      border-radius: 22px;\n    }\n\n    .afb-merchant-topline {\n      gap: 8px;\n      margin-bottom: 14px;\n      flex-wrap: nowrap;\n      align-items: center;\n    }\n\n    .afb-merchant-kicker {\n      font-size: 9.5px;\n      padding: 7px 10px;\n      gap: 6px;\n      white-space: nowrap;\n    }\n\n    .afb-merchant-dot {\n      width: 8px;\n      height: 8px;\n      min-width: 8px;\n      min-height: 8px;\n    }\n\n    .afb-merchant-timer {\n      margin-left: auto;\n      font-size: 10.5px;\n      padding: 7px 9px;\n      white-space: nowrap;\n    }\n\n    .afb-merchant-title {\n      font-size: 20px;\n      line-height: 1.12;\n      letter-spacing: -0.035em;\n      margin-bottom: 14px;\n      overflow-wrap: anywhere;\n    }\n\n    .afb-merchant-price {\n      margin-bottom: 18px;\n    }\n\n    .afb-merchant-price-main {\n      font-size: 31px;\n      line-height: 1.03;\n      letter-spacing: -0.05em;\n    }\n\n    .afb-merchant-cta-btn {\n      width: 100%;\n      max-width: none;\n      min-height: 56px;\n      padding: 15px 18px;\n      font-size: 13.5px;\n      border-radius: 999px;\n    }\n  }\n\n  @media (max-width: 600px) {\n    .afb-audio-controls {\n      gap: 10px;\n    }\n\n    .afb-audio-btn {\n      min-width: 100%;\n      min-height: 54px;\n      font-size: 15px;\n    }\n\n    .afb-audio-pause-btn {\n      min-height: 34px;\n      min-width: 34px;\n      padding: 0 10px;\n      gap: 0;\n    }\n\n    .afb-audio-pause-btn-text {\n      display: none;\n    }\n\n    .afb-voice-select-wrap {\n      min-width: calc(100% - 68px);\n      flex: 1 1 calc(100% - 68px);\n      min-height: 54px;\n    }\n\n    .afb-voice-btn {\n      min-width: 100%;\n      min-height: 54px;\n    }\n\n    .afb-lang-btn {\n      min-height: 54px;\n      min-width: 54px;\n      width: 54px;\n    }\n\n    .afb-visible-description {\n      padding: 22px 18px 20px;\n    }\n\n    .afb-product-description-body.is-intro-visible .afb-product-quote {\n      min-height: 94px;\n      padding: 18px 16px;\n    }\n\n    .afb-quote-text {\n      font-size: 18px;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-stage-card {\n      padding: 14px;\n      border-radius: 22px;\n      max-height: none;\n      height: auto;\n      overflow: visible;\n    }\n\n    .afb-stage-top {\n      gap: 10px;\n      margin-bottom: 12px;\n    }\n\n    .afb-narration-spotlight {\n      width: 100%;\n      gap: 8px;\n      transform: translateY(-8px) scale(0.985);\n    }\n\n    .afb-narration-spotlight.is-visible {\n      margin: 10px 0 16px;\n      transform: translateY(0) scale(1);\n    }\n\n    .afb-narration-spotlight.is-exiting {\n      margin: 0;\n      transform: translateY(-8px) scale(0.985);\n    }\n\n    .afb-narration-spotlight img {\n      max-height: 210px;\n    }\n\n    .afb-narration-spotlight-media {\n      padding: 10px;\n      border-radius: 22px;\n    }\n\n    .afb-narration-spotlight-media[data-fit=\"cover\"] {\n      padding: 10px;\n    }\n\n    .afb-narration-spotlight-media[data-fit=\"cover\"] img {\n      max-height: 210px;\n      border-radius: 18px;\n    }\n\n    .afb-narration-spotlight-media[data-fit=\"contain\"] {\n      padding: 10px;\n    }\n\n    .afb-narration-spotlight-media[data-fit=\"contain\"] img {\n      max-height: 210px;\n      border-radius: 18px;\n    }\n\n    .afb-narration-spotlight-copy {\n      padding: 11px 12px 12px;\n      border-radius: 16px;\n    }\n\n    .afb-narration-spotlight-version-window {\n      padding: 12px 12px 13px;\n      border-radius: 16px;\n      margin-bottom: 9px;\n    }\n\n    .afb-narration-spotlight-version-title {\n      font-size: 18px;\n    }\n\n    .afb-narration-spotlight-version-subtitle {\n      font-size: 12px;\n    }\n\n    .afb-narration-spotlight:not(.is-version-showcase) .afb-narration-spotlight-copy {\n      padding: 9px 10px 10px;\n    }\n\n    .afb-narration-spotlight:not(.is-version-showcase) .afb-narration-spotlight-caption {\n      font-size: 13px;\n      line-height: 1.36;\n    }\n\n    .afb-stage-badge {\n      min-height: 36px;\n      padding: 0 12px;\n      font-size: 13px;\n    }\n\n    .afb-stage-time {\n      font-size: 13px;\n    }\n\n    .afb-stage-top-meta {\n      gap: 6px;\n      padding: 5px 6px 5px 12px;\n    }\n\n    .afb-narration-spotlight-kicker {\n      font-size: 10px;\n      gap: 7px;\n    }\n\n    .afb-narration-spotlight-caption {\n      font-size: 14px;\n      line-height: 1.45;\n    }\n\n    .afb-narration-copy p {\n      font-size: 15px;\n      line-height: 1.68;\n    }\n\n    .afb-narration-copy p.is-active {\n      padding: 10px 12px;\n      border-radius: 14px;\n    }\n\n    .afb-product-description-body.is-preparing-experience .afb-stage-card {\n      min-height: 540px;\n      padding: 14px;\n      border-radius: 22px;\n    }\n\n    .afb-activation-badge {\n      width: min(94%, 430px);\n      min-height: 0;\n      padding: 12px;\n      grid-template-columns: 1fr;\n      gap: 12px;\n      border-radius: 24px;\n    }\n\n    .afb-activation-carousel {\n      aspect-ratio: 16 \/ 9;\n      border-radius: 18px;\n    }\n\n    .afb-activation-copy {\n      padding: 0 2px 2px;\n      gap: 8px;\n    }\n\n    .afb-activation-title {\n      font-size: clamp(20px, 6vw, 25px);\n      line-height: 1.08;\n    }\n\n    .afb-activation-text {\n      font-size: 12.5px;\n    }\n\n    .afb-product-description-body.is-activation-docking .afb-activation-badge {\n      top: 50% !important;\n      left: 50% !important;\n      width: min(94%, 430px) !important;\n      min-height: 0 !important;\n      padding: 12px !important;\n      transform: translate(-50%, -50%) scale(1) !important;\n    }\n\n    .afb-product-description-body.is-activation-docking .afb-activation-text {\n      font-size: 12.5px !important;\n    }\n  }\n\n  @media (max-width: 420px) {\n    .afb-merchant-figure {\n      width: min(100%, 190px);\n      max-width: 190px;\n    }\n\n    .afb-merchant-figure img {\n      max-height: 190px;\n    }\n\n    .afb-merchant-copy {\n      padding: 16px 13px 16px;\n      border-radius: 20px;\n    }\n\n    .afb-merchant-title {\n      font-size: 19px;\n    }\n\n    .afb-merchant-price-main {\n      font-size: 29px;\n    }\n\n    .afb-merchant-cta-btn {\n      min-height: 54px;\n      font-size: 13px;\n    }\n  }\n\n  @media (max-width: 768px) {\n    .afb-narration-stage-shell {\n      overflow: visible;\n    }\n\n    .afb-spotlight-portal {\n      position: relative;\n      inset: auto;\n      z-index: 8;\n      width: 100%;\n      margin-top: 14px;\n      overflow: visible;\n    }\n\n    .afb-narration-spotlight,\n    .afb-narration-spotlight.is-visible,\n    .afb-product-description-body.is-spotlight-active .afb-narration-spotlight {\n      position: relative;\n      top: auto;\n      left: auto;\n      right: auto;\n      transform: none;\n      width: 100%;\n      max-width: 360px;\n      margin: 0 auto;\n      max-height: none;\n      overflow: visible;\n    }\n\n    .afb-narration-spotlight.is-exiting {\n      transform: none;\n    }\n\n    .afb-narration-spotlight-media {\n      width: 100%;\n      aspect-ratio: 4 \/ 5;\n      overflow: hidden;\n      border-radius: 22px;\n    }\n  }\n\n  .afb-narration-spotlight {\n    width: min(330px, calc(100% - 28px));\n    max-width: 330px;\n    gap: 9px;\n    padding: 10px;\n    border-radius: 28px;\n    background:\n      radial-gradient(circle at 18% 0%, rgba(var(--afb-spotlight-accent-rgb),0.16), transparent 38%),\n      linear-gradient(145deg, rgba(255,255,255,0.88), rgba(250,247,255,0.76));\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb),0.16);\n    box-shadow:\n      0 24px 54px rgba(55,23,79,0.16),\n      0 0 0 1px rgba(255,255,255,0.68) inset;\n    backdrop-filter: blur(18px) saturate(1.08);\n    -webkit-backdrop-filter: blur(18px) saturate(1.08);\n  }\n\n  .afb-narration-spotlight.is-landscape {\n    width: min(420px, calc(100% - 28px));\n    max-width: 420px;\n  }\n\n  .afb-narration-spotlight.is-wide {\n    width: min(460px, calc(100% - 28px));\n    max-width: 460px;\n  }\n\n  .afb-narration-spotlight.is-portrait {\n    width: min(310px, calc(100% - 28px));\n    max-width: 310px;\n  }\n\n  .afb-narration-spotlight.is-tall {\n    width: min(285px, calc(100% - 28px));\n    max-width: 285px;\n  }\n\n  .afb-narration-spotlight.is-square {\n    width: min(350px, calc(100% - 28px));\n    max-width: 350px;\n  }\n\n  .afb-narration-spotlight.is-visible,\n  .afb-product-description-body.is-spotlight-active .afb-narration-spotlight {\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-narration-spotlight-media {\n    aspect-ratio: var(--afb-spotlight-ratio, 16 \/ 10);\n    border-radius: 22px;\n    padding: 9px;\n    background:\n      linear-gradient(135deg, rgba(255,255,255,0.74), rgba(255,255,255,0.36));\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb),0.14);\n    box-shadow:\n      0 12px 28px rgba(var(--afb-spotlight-accent-rgb),0.10),\n      inset 0 1px 0 rgba(255,255,255,0.58);\n  }\n\n  .afb-narration-spotlight-media.is-landscape {\n    --afb-spotlight-ratio: 16 \/ 10;\n  }\n\n  .afb-narration-spotlight-media.is-wide {\n    --afb-spotlight-ratio: 16 \/ 9;\n  }\n\n  .afb-narration-spotlight-media.is-portrait {\n    --afb-spotlight-ratio: 4 \/ 5;\n  }\n\n  .afb-narration-spotlight-media.is-tall {\n    --afb-spotlight-ratio: 3 \/ 4;\n  }\n\n  .afb-narration-spotlight-media.is-square {\n    --afb-spotlight-ratio: 1 \/ 1;\n  }\n\n  .afb-narration-spotlight-media::before {\n    transform: scale(1.08);\n    filter: blur(18px) saturate(1.08);\n    opacity: 0.24;\n  }\n\n  .afb-narration-spotlight img,\n  .afb-narration-spotlight-media[data-fit=\"cover\"] img,\n  .afb-narration-spotlight-media[data-fit=\"contain\"] img {\n    width: 100%;\n    height: 100%;\n    max-height: none;\n    object-fit: contain;\n    border-radius: 18px;\n    box-shadow:\n      0 12px 24px rgba(15,23,42,0.12),\n      0 0 0 1px rgba(255,255,255,0.22);\n  }\n\n  .afb-narration-spotlight-copy {\n    padding: 10px 12px 11px;\n    border-radius: 18px;\n    background:\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(248,245,255,0.92));\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb),0.11);\n    box-shadow:\n      0 10px 22px rgba(55,23,79,0.08),\n      inset 0 1px 0 rgba(255,255,255,0.76);\n  }\n\n  .afb-narration-spotlight-kicker {\n    margin-bottom: 5px;\n    font-size: 9.8px;\n    color: var(--afb-spotlight-accent-deep);\n  }\n\n  .afb-narration-spotlight-caption {\n    position: relative;\n    display: block;\n    padding: 10px 11px 10px 14px;\n    font-size: 13px;\n    line-height: 1.38;\n    color: var(--afb-spotlight-accent-deep);\n    border-radius: 14px;\n    border: 1px solid rgba(var(--afb-spotlight-accent-rgb), 0.20);\n    border-left: 4px solid var(--afb-spotlight-accent-solid);\n    background:\n      radial-gradient(circle at 12% 0%, rgba(var(--afb-spotlight-accent-rgb), 0.13), transparent 42%),\n      linear-gradient(145deg, rgba(255,255,255,0.95), rgba(var(--afb-spotlight-accent-rgb), 0.075));\n    box-shadow:\n      0 10px 22px rgba(var(--afb-spotlight-accent-rgb), 0.10),\n      inset 0 1px 0 rgba(255,255,255,0.80);\n    overflow: hidden;\n  }\n\n  .afb-narration-spotlight-caption::after {\n    content: '';\n    position: absolute;\n    inset: 0 auto 0 0;\n    width: 34%;\n    pointer-events: none;\n    background: linear-gradient(90deg, rgba(var(--afb-spotlight-accent-rgb), 0.12), transparent);\n    opacity: 0.58;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-spotlight-portal {\n    position: relative;\n    inset: auto;\n    width: 100%;\n    margin: 14px auto 18px;\n    opacity: 1;\n    visibility: visible;\n    pointer-events: none;\n  }\n\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-spotlight-portal {\n    position: relative;\n    inset: auto;\n    width: 100%;\n    margin: 14px auto 18px;\n    opacity: 1;\n    visibility: visible;\n    pointer-events: none;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight {\n    position: relative;\n    top: auto;\n    left: auto;\n    right: auto;\n    width: min(420px, 100%);\n    max-width: 420px;\n    margin: 0 auto;\n    transform: translateY(0) scale(1);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exiting,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-exiting {\n    opacity: 0;\n    max-height: none;\n    margin: 0 auto;\n    overflow: visible;\n    transform: translateY(18px) scale(0.986);\n    filter: blur(14px) saturate(1.04);\n    transition:\n      opacity 1.34s cubic-bezier(0.16, 1, 0.3, 1),\n      transform 1.34s cubic-bezier(0.16, 1, 0.3, 1),\n      filter 1.34s cubic-bezier(0.16, 1, 0.3, 1);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-exclusive {\n    width: min(640px, 100%);\n    max-width: 640px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(225,29,72,0.22), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(251,113,133,0.16), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(255,241,242,0.88));\n    border-color: rgba(225,29,72,0.24);\n    box-shadow:\n      0 28px 72px rgba(136,19,55,0.18),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-standard,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-standard {\n    --afb-spotlight-accent-rgb: 107,114,128;\n    --afb-spotlight-accent-solid: #6b7280;\n    --afb-spotlight-accent-deep: #374151;\n    width: min(600px, 100%);\n    max-width: 600px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(107,114,128,0.18), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(209,213,219,0.20), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(249,250,251,0.88));\n    border-color: rgba(107,114,128,0.22);\n    box-shadow:\n      0 28px 72px rgba(55,65,81,0.13),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-deluxe,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-deluxe {\n    width: min(660px, 100%);\n    max-width: 660px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(37,99,235,0.20), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(147,197,253,0.18), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(239,246,255,0.88));\n    border-color: rgba(37,99,235,0.24);\n    box-shadow:\n      0 28px 72px rgba(30,58,138,0.16),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-bonus,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-bonus {\n    width: min(660px, 100%);\n    max-width: 660px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(236,72,153,0.20), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(251,207,232,0.20), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(253,242,248,0.88));\n    border-color: rgba(236,72,153,0.24);\n    box-shadow:\n      0 28px 72px rgba(157,23,77,0.15),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-prestige,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-prestige {\n    width: min(640px, 100%);\n    max-width: 640px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(124,58,237,0.20), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(216,180,254,0.18), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(250,245,255,0.88));\n    border-color: rgba(124,58,237,0.24);\n    box-shadow:\n      0 28px 72px rgba(76,29,149,0.15),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-definitive,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-definitive {\n    --afb-spotlight-accent-rgb: 251,191,36;\n    --afb-spotlight-accent-solid: #f59e0b;\n    --afb-spotlight-accent-deep: #92400e;\n    width: min(660px, 100%);\n    max-width: 660px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(251,191,36,0.24), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(253,230,138,0.20), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(255,251,235,0.90));\n    border-color: rgba(251,191,36,0.28);\n    box-shadow:\n      0 28px 72px rgba(146,64,14,0.15),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-standard,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-deluxe,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-exclusive,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-bonus,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-prestige,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-definitive {\n    width: min(660px, 100%);\n    max-width: 660px;\n    padding: 13px;\n    gap: 11px;\n    border-radius: 30px;\n    background:\n      radial-gradient(circle at 12% 0%, rgba(var(--afb-spotlight-accent-rgb),0.20), transparent 34%),\n      radial-gradient(circle at 92% 8%, rgba(var(--afb-spotlight-accent-rgb),0.12), transparent 34%),\n      linear-gradient(145deg, rgba(255,255,255,0.96), rgba(var(--afb-spotlight-accent-rgb),0.07));\n    border-color: rgba(var(--afb-spotlight-accent-rgb),0.24);\n    box-shadow:\n      0 28px 72px rgba(var(--afb-spotlight-accent-rgb),0.15),\n      0 0 0 1px rgba(255,255,255,0.72) inset;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight::before,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight::before {\n    content: var(--afb-spotlight-version-label, 'Premium Spotlight');\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: max-content;\n    max-width: 100%;\n    min-height: 28px;\n    padding: 0 12px;\n    border-radius: 999px;\n    background: linear-gradient(135deg, var(--afb-spotlight-accent-solid), var(--afb-spotlight-accent-deep));\n    color: #ffffff;\n    font-size: 10.5px;\n    font-weight: 950;\n    letter-spacing: 0.09em;\n    text-transform: uppercase;\n    box-shadow: 0 10px 22px rgba(var(--afb-spotlight-accent-rgb),0.22);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight .afb-narration-spotlight-media,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight .afb-narration-spotlight-media {\n    width: 100%;\n    max-height: min(48vh, 420px);\n    border-color: rgba(var(--afb-spotlight-accent-rgb),0.22);\n    box-shadow:\n      0 16px 34px rgba(var(--afb-spotlight-accent-rgb),0.14),\n      inset 0 1px 0 rgba(255,255,255,0.62);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight .afb-narration-spotlight-copy,\n  .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight .afb-narration-spotlight-copy {\n    border-color: rgba(var(--afb-spotlight-accent-rgb),0.18);\n    background:\n      linear-gradient(145deg, rgba(255,255,255,0.98), rgba(var(--afb-spotlight-accent-rgb),0.07));\n    box-shadow:\n      0 12px 26px rgba(var(--afb-spotlight-accent-rgb),0.10),\n      inset 0 1px 0 rgba(255,255,255,0.78);\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-portrait,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-portrait {\n    width: min(320px, 100%);\n    max-width: 320px;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-wide,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-wide {\n    width: min(460px, 100%);\n    max-width: 460px;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive.is-wide,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive.is-wide,\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive.is-landscape,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive.is-landscape {\n    width: min(720px, 100%);\n    max-width: 720px;\n  }\n\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive.is-portrait,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive.is-portrait,\n  .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive.is-tall,\n  .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive.is-tall {\n    width: min(440px, 100%);\n    max-width: 440px;\n  }\n\n  @media (max-width: 980px) {\n    .afb-narration-stage-shell {\n      overflow: visible;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy {\n      --afb-spotlight-track-y: 0px !important;\n      --afb-spotlight-track-reserve: 0px !important;\n      padding-bottom: 0 !important;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy p.is-past,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy p.is-future {\n      max-height: 0;\n      margin: 0;\n      padding: 0;\n      opacity: 0;\n      overflow: hidden;\n      pointer-events: none;\n      transform: translateY(0);\n      filter: none;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy p.is-active {\n      margin-bottom: 10px;\n    }\n\n    .afb-spotlight-portal {\n      position: relative;\n      inset: auto;\n      width: 100%;\n      margin: 14px auto 18px;\n      overflow: visible;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-spotlight-portal {\n      display: none;\n      margin: 0;\n      max-height: 0;\n      overflow: hidden;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-visible,\n    .afb-product-description-body.is-narration-visible.is-spotlight-active .afb-narration-copy \u003e .afb-narration-spotlight {\n      display: grid;\n      position: relative;\n      top: auto;\n      left: auto;\n      right: auto;\n      width: 100%;\n      max-width: 100%;\n      margin: 10px 0 20px;\n      padding: 9px;\n      border-radius: 24px;\n      opacity: 1;\n      visibility: visible;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n      max-height: 920px;\n      overflow: visible;\n      pointer-events: auto;\n      transform-origin: top center;\n      transition:\n        opacity 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        transform 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        filter 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.58s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.52s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media {\n      min-height: 0;\n      max-height: min(58vh, 460px);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-portrait,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-tall {\n      max-width: min(100%, 430px);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-portrait .afb-narration-spotlight-media,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-tall .afb-narration-spotlight-media {\n      width: min(100%, 430px);\n      margin-inline: auto;\n      max-height: min(62vh, 500px);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-exiting,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exiting,\n    .afb-product-description-body.is-intro-spotlight-exiting .afb-narration-spotlight.is-exiting {\n      margin: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      opacity: 0;\n      transform: translateY(12px) scale(0.988);\n      filter: blur(10px) saturate(1.03);\n      max-height: 0;\n      overflow: hidden;\n      pointer-events: none;\n      transition:\n        opacity 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        transform 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        filter 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.52s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n  }\n\n  @media (min-width: 769px) {\n    .afb-product-description-body.is-narration-visible .afb-narration-spotlight {\n      top: 86px;\n      left: auto;\n      right: 18px;\n      transform: translateY(20px) scale(0.96);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-spotlight.is-visible,\n    .afb-product-description-body.is-narration-visible.is-spotlight-active .afb-narration-spotlight {\n      transform: translateY(0) scale(1);\n    }\n  }\n\n  @media (max-width: 768px) {\n    .afb-narration-spotlight,\n    .afb-narration-spotlight.is-visible,\n    .afb-product-description-body.is-spotlight-active .afb-narration-spotlight {\n      width: 100%;\n      max-width: 100%;\n      padding: 9px;\n      border-radius: 24px;\n    }\n\n    .afb-narration-copy {\n      overflow-anchor: none;\n    }\n\n    .afb-narration-copy p {\n      scroll-margin-top: 104px;\n      will-change: opacity, transform, filter;\n    }\n\n    .afb-narration-spotlight-media {\n      aspect-ratio: var(--afb-spotlight-ratio, 16 \/ 10);\n      padding: 8px;\n      border-radius: 20px;\n      max-height: 58vh;\n    }\n\n    .afb-narration-spotlight-media.is-portrait,\n    .afb-narration-spotlight-media.is-tall {\n      max-height: min(58vh, 430px);\n      width: min(76vw, 320px);\n      margin: 0 auto;\n    }\n\n    .afb-narration-spotlight-media.is-wide,\n    .afb-narration-spotlight-media.is-landscape {\n      width: 100%;\n      max-height: min(42vh, 280px);\n    }\n\n    .afb-narration-spotlight-media.is-square {\n      width: min(84vw, 340px);\n      max-height: min(52vh, 340px);\n      margin: 0 auto;\n    }\n\n    .afb-narration-spotlight-copy {\n      padding: 9px 10px 10px;\n      border-radius: 16px;\n    }\n\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-exclusive,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-exclusive,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-standard,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-standard,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-deluxe,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-deluxe,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-bonus,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-bonus,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-prestige,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-prestige,\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight.is-definitive,\n    .afb-product-description-body.is-reading:not(.is-narration-visible).is-spotlight-active .afb-narration-spotlight.is-definitive {\n      width: 100%;\n      max-width: 100%;\n      padding: 10px;\n      border-radius: 26px;\n    }\n\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight::before {\n      min-height: 26px;\n      padding: 0 10px;\n      font-size: 9.5px;\n    }\n\n    .afb-product-description-body.is-reading:not(.is-narration-visible) .afb-narration-spotlight .afb-narration-spotlight-media {\n      max-height: min(46vh, 360px);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-spotlight-portal {\n      display: none;\n      margin: 0;\n      max-height: 0;\n      overflow: hidden;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-visible,\n    .afb-product-description-body.is-narration-visible.is-spotlight-active .afb-narration-copy \u003e .afb-narration-spotlight {\n      display: grid;\n      width: 100%;\n      max-width: 100%;\n      margin: 10px 0 20px;\n      padding: 9px;\n      border-radius: 24px;\n      opacity: 1;\n      visibility: visible;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n      max-height: 900px;\n      overflow: visible;\n      pointer-events: auto;\n      will-change: opacity, transform, filter, max-height;\n      transition:\n        opacity 0.56s cubic-bezier(0.16, 1, 0.3, 1),\n        transform 0.56s cubic-bezier(0.16, 1, 0.3, 1),\n        filter 0.56s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.64s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.56s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.56s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-entering:not(.is-visible) {\n      margin: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      opacity: 0;\n      transform: translateY(-18px) scale(0.982);\n      filter: blur(14px) saturate(1.08);\n      max-height: 0;\n      overflow: hidden;\n      pointer-events: none;\n      transition:\n        opacity 0.76s cubic-bezier(0.16, 1, 0.3, 1),\n        transform 0.76s cubic-bezier(0.16, 1, 0.3, 1),\n        filter 0.76s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.82s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.82s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-entering.is-visible {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n      max-height: 900px;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-exiting {\n      margin: 0;\n      padding-top: 0;\n      padding-bottom: 0;\n      opacity: 0;\n      transform: translateY(10px) scale(0.992);\n      filter: blur(10px) saturate(1.03);\n      max-height: 0;\n      overflow: hidden;\n      pointer-events: none;\n      transition:\n        opacity 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        transform 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        filter 0.42s cubic-bezier(0.16, 1, 0.3, 1),\n        max-height 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        margin 0.52s cubic-bezier(0.16, 1, 0.3, 1),\n        padding 0.52s cubic-bezier(0.16, 1, 0.3, 1);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy p.is-active {\n      margin-bottom: 10px;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-stage-card,\n    .afb-product-description-body.is-merchant-hold .afb-stage-card {\n      min-height: 0 !important;\n      height: auto !important;\n      max-height: none !important;\n      overflow: visible !important;\n      padding: 14px !important;\n      position: relative;\n      z-index: 6;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-narration-copy,\n    .afb-product-description-body.is-merchant-hold .afb-narration-copy,\n    .afb-product-description-body.is-merchant-outro .afb-narration-copy \u003e .afb-narration-spotlight,\n    .afb-product-description-body.is-merchant-hold .afb-narration-copy \u003e .afb-narration-spotlight {\n      display: none !important;\n      height: 0 !important;\n      max-height: 0 !important;\n      margin: 0 !important;\n      padding: 0 !important;\n      overflow: hidden !important;\n      opacity: 0 !important;\n      pointer-events: none !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n      position: relative !important;\n      inset: auto !important;\n      z-index: 14 !important;\n      width: 100% !important;\n      display: grid !important;\n      grid-template-columns: 1fr !important;\n      opacity: 1 !important;\n      visibility: visible !important;\n      pointer-events: auto !important;\n      transform: translateY(0) scale(1) !important;\n      filter: blur(0) !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-copy,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-copy,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-title,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-title,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-title-line,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-title-line,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-title-word,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-title-word,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-price,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-price,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-price *,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-price *,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-cta-row,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-cta-row,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-safe-note,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-safe-note {\n      opacity: 1 !important;\n      visibility: visible !important;\n      transform: none !important;\n      filter: none !important;\n      animation-delay: 0s !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-title-word,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-title-word,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-price,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-price,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-cta-row,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-cta-row {\n      animation: none !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-title::after,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-title::after {\n      width: 84% !important;\n      opacity: 1 !important;\n      animation: none !important;\n    }\n\n    .afb-product-description-body.is-preparing-experience .afb-stage-card {\n      min-height: 0 !important;\n      max-height: none !important;\n      padding: 0 !important;\n      border-width: 0 !important;\n      border-radius: 0 !important;\n      background: transparent !important;\n      box-shadow: none !important;\n      overflow: visible !important;\n    }\n\n    .afb-product-description-body.is-preparing-experience .afb-stage-top,\n    .afb-product-description-body.is-preparing-experience .afb-steps,\n    .afb-product-description-body.is-preparing-experience .afb-narration-copy,\n    .afb-product-description-body.is-preparing-experience .afb-spotlight-portal,\n    .afb-product-description-body.is-preparing-experience .afb-merchant-panel {\n      display: none !important;\n      height: 0 !important;\n      max-height: 0 !important;\n      min-height: 0 !important;\n      margin: 0 !important;\n      padding: 0 !important;\n      border-width: 0 !important;\n      overflow: hidden !important;\n      opacity: 0 !important;\n      pointer-events: none !important;\n    }\n\n    .afb-product-description-body.is-preparing-experience .afb-activation-badge,\n    .afb-product-description-body.is-activation-visible .afb-activation-badge,\n    .afb-product-description-body.is-activation-lit .afb-activation-badge {\n      position: relative !important;\n      top: auto !important;\n      left: auto !important;\n      width: min(94%, 430px) !important;\n      margin: 10px auto 22px !important;\n      transform: translateY(0) scale(1) !important;\n    }\n\n    .afb-product-description-body.is-activation-lit .afb-activation-badge {\n      animation: afbActivationBreathInline 1.55s ease-in-out infinite !important;\n    }\n\n    .afb-product-description-body.is-activation-docking .afb-activation-badge {\n      position: relative !important;\n      top: auto !important;\n      left: auto !important;\n      margin: 10px auto 22px !important;\n      transform: translateY(0) scale(1) !important;\n      animation: afbActivationCurtainHandoffInline 0.76s cubic-bezier(0.16, 1, 0.3, 1) both !important;\n    }\n  }\n\n  @keyframes afbActivationBreathInline {\n    0%, 100% { transform: translateY(0) scale(1); }\n    50% { transform: translateY(-2px) scale(1.015); }\n  }\n\n  @keyframes afbActivationCurtainHandoffInline {\n    0% {\n      opacity: 1;\n      transform: translateY(0) scale(1);\n      filter: blur(0);\n    }\n    52% {\n      opacity: 0.72;\n      transform: translateY(-2px) scaleX(1.06) scaleY(0.96);\n      filter: blur(5px);\n    }\n    100% {\n      opacity: 0;\n      transform: translateY(-8px) scaleX(1.18) scaleY(0.82);\n      filter: blur(15px);\n    }\n  }\n\n  .afb-product-quote,\n  .afb-narration-stage-shell,\n  .afb-narration-copy,\n  .afb-merchant-panel {\n    clear: both;\n  }\n\n  .afb-product-description-body.is-intro-visible .afb-product-quote {\n    flex: 0 0 auto;\n    height: auto;\n    contain: layout paint;\n  }\n\n  .afb-product-quote + .afb-narration-stage-shell {\n    margin-top: 18px;\n  }\n\n  .afb-narration-copy {\n    position: relative;\n    display: flow-root;\n    isolation: isolate;\n    overflow: visible;\n  }\n\n  .afb-narration-copy p {\n    position: relative;\n    z-index: 1;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy {\n    --afb-spotlight-track-y: 0px;\n    --afb-spotlight-track-reserve: 0px;\n    padding-bottom: 24px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy p.has-spotlight.is-active {\n    margin-bottom: 10px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight {\n    --afb-inline-spotlight-max: 820px;\n    position: relative !important;\n    inset: auto !important;\n    top: auto !important;\n    right: auto !important;\n    bottom: auto !important;\n    left: auto !important;\n    z-index: 6;\n    display: grid;\n    width: min(100%, var(--afb-inline-spotlight-max)) !important;\n    max-width: var(--afb-inline-spotlight-max) !important;\n    margin: 10px auto 18px !important;\n    padding: 10px;\n    clear: both;\n    opacity: 0;\n    visibility: visible;\n    transform: translate3d(0, 12px, 0) scale(0.96) !important;\n    transform-origin: top center;\n    filter: blur(12px) saturate(1.04);\n    max-height: none;\n    overflow: visible;\n    pointer-events: none;\n    will-change: opacity, transform, filter;\n    transition:\n      opacity 0.42s ease,\n      transform 0.64s cubic-bezier(0.25, 1, 0.5, 1),\n      filter 0.42s ease;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-visible,\n  .afb-product-description-body.is-narration-visible.is-spotlight-active .afb-narration-copy \u003e .afb-narration-spotlight {\n    opacity: 1;\n    transform: translate3d(0, 0, 0) scale(1) !important;\n    filter: blur(0);\n    pointer-events: auto;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-landscape {\n    --afb-inline-spotlight-max: 900px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-wide {\n    --afb-inline-spotlight-max: 960px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-square {\n    --afb-inline-spotlight-max: 520px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-portrait {\n    --afb-inline-spotlight-max: 440px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-tall {\n    --afb-inline-spotlight-max: 390px;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-exiting {\n    margin: 0 auto !important;\n    padding-top: 0;\n    padding-bottom: 0;\n    max-height: none;\n    opacity: 0;\n    transform: translate3d(0, 10px, 0) scale(0.95) !important;\n    filter: blur(10px) saturate(1.03);\n    overflow: visible;\n    pointer-events: none;\n  }\n\n  .afb-narration-spotlight.is-docking {\n    will-change: transform, filter;\n    z-index: 12;\n    backface-visibility: hidden;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media {\n    position: relative;\n    display: grid;\n    place-items: center;\n    width: 100%;\n    aspect-ratio: var(--afb-spotlight-ratio, 16 \/ 10);\n    min-height: clamp(210px, 30vw, 460px);\n    max-height: none !important;\n    overflow: hidden;\n    isolation: isolate;\n    contain: layout paint;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-portrait .afb-narration-spotlight-media,\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-tall .afb-narration-spotlight-media {\n    aspect-ratio: var(--afb-spotlight-ratio, 4 \/ 5);\n    min-height: clamp(260px, 54vw, 500px);\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media \u003e img,\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media[data-fit=\"cover\"] \u003e img,\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media[data-fit=\"contain\"] \u003e img {\n    position: absolute;\n    inset: 9px;\n    z-index: 2;\n    width: calc(100% - 18px);\n    height: calc(100% - 18px);\n    max-width: none;\n    max-height: none;\n    object-fit: contain;\n    object-position: center center;\n    margin: 0;\n  }\n\n  @media (min-width: 981px) {\n    .afb-product-description-body.is-narration-visible .afb-narration-copy {\n      overflow: visible;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight {\n      position: sticky !important;\n      top: clamp(14px, 3vh, 28px) !important;\n      z-index: 18;\n      transform: translate3d(0, 0, 0) scale(1) !important;\n      filter: blur(0);\n      opacity: 1;\n      pointer-events: auto;\n      margin-bottom: clamp(16px, 2.2vw, 26px) !important;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy p {\n      scroll-margin-top: calc(var(--afb-playlist-spotlight-height, 360px) + var(--afb-playlist-top-gap, 18px));\n    }\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-image-next {\n    z-index: 3;\n    opacity: 0;\n    transform: translate3d(0, 0, 0) scale(1.018) !important;\n    filter: blur(10px) saturate(1.08);\n    pointer-events: none;\n  }\n\n  .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-crossfading .afb-narration-spotlight-image-next {\n    opacity: 1;\n    transform: translate3d(0, 0, 0) scale(1) !important;\n    filter: blur(0) saturate(1.03);\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n  .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n    position: relative !important;\n    inset: auto !important;\n    display: grid !important;\n    grid-template-columns: minmax(0, 1fr) !important;\n    gap: clamp(16px, 2.4vw, 24px) !important;\n    align-items: center !important;\n    justify-items: center !important;\n    width: 100% !important;\n    min-height: clamp(320px, 34vw, 500px);\n    overflow: visible !important;\n    box-sizing: border-box;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-media,\n  .afb-product-description-body.is-merchant-hold .afb-merchant-media {\n    width: 100% !important;\n    max-width: min(100%, 720px) !important;\n    justify-self: center !important;\n    min-height: 0 !important;\n    height: auto !important;\n    contain: layout;\n    overflow: visible !important;\n    box-sizing: border-box;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-copy,\n  .afb-product-description-body.is-merchant-hold .afb-merchant-copy {\n    width: min(100%, 440px) !important;\n    max-width: 440px !important;\n    justify-self: center !important;\n    align-self: start !important;\n    margin-inline: auto !important;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-detail-hotspots,\n  .afb-product-description-body.is-merchant-hold .afb-merchant-detail-hotspots {\n    width: calc(100% - clamp(12px, 3vw, 28px));\n    max-width: min(100%, 680px);\n    margin-inline: auto;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    box-sizing: border-box;\n    overflow: visible;\n  }\n\n  .afb-product-description-body.is-merchant-outro .afb-merchant-detail-hotspot,\n  .afb-product-description-body.is-merchant-hold .afb-merchant-detail-hotspot {\n    min-width: 0;\n  }\n\n  @media (min-width: 1180px) {\n    .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n      grid-template-columns: minmax(460px, 1.08fr) minmax(320px, 0.92fr) !important;\n      align-items: start !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-media,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-media {\n      max-width: none !important;\n    }\n  }\n\n  @media (max-width: 520px) {\n    .afb-product-description-body.is-merchant-outro .afb-merchant-detail-hotspots,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-detail-hotspots {\n      grid-template-columns: 1fr;\n    }\n  }\n\n  @media (max-width: 768px) {\n    .afb-product-description-body.is-narration-visible .afb-narration-copy {\n      --afb-spotlight-track-y: 0px !important;\n      --afb-spotlight-track-reserve: 0px !important;\n      padding-bottom: 0 !important;\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight .afb-narration-spotlight-media {\n      min-height: clamp(210px, 52vw, 400px);\n    }\n\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-portrait .afb-narration-spotlight-media,\n    .afb-product-description-body.is-narration-visible .afb-narration-copy \u003e .afb-narration-spotlight.is-tall .afb-narration-spotlight-media {\n      min-height: clamp(280px, 72vw, 460px);\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-stage-card,\n    .afb-product-description-body.is-merchant-hold .afb-stage-card {\n      min-height: 0 !important;\n      height: auto !important;\n      padding: 12px !important;\n      overflow: visible !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-panel,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-panel {\n      min-height: 0 !important;\n      gap: 12px !important;\n      align-content: start !important;\n      justify-items: center !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-media,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-media {\n      max-width: min(100%, 440px) !important;\n      margin: 0 auto !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-figure img,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-figure img {\n      max-width: min(78vw, 310px) !important;\n      max-height: min(39vh, 315px) !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-figure.is-portrait img,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-figure.is-tall img,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-figure.is-portrait img,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-figure.is-tall img {\n      max-width: min(62vw, 245px) !important;\n      max-height: min(43vh, 345px) !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-figure.is-landscape img,\n    .afb-product-description-body.is-merchant-outro .afb-merchant-figure.is-wide img,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-figure.is-landscape img,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-figure.is-wide img {\n      max-width: min(84vw, 370px) !important;\n      max-height: min(30vh, 240px) !important;\n    }\n\n    .afb-product-description-body.is-merchant-outro .afb-merchant-copy,\n    .afb-product-description-body.is-merchant-hold .afb-merchant-copy {\n      width: min(100%, 430px) !important;\n      padding: 18px 16px !important;\n      margin-top: 0 !important;\n      border-radius: 22px !important;\n    }\n  }\n\u003c\/style\u003e\n\u003cdiv class=\"afb-product-description-body\" data-body-theme-key=\"deluxe\" data-checkout-url=\"\/checkout\" data-default-locale=\"pt-br\" data-product-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd322306.jpg\" data-product-image-alt=\"Batman Versus Superman (Deluxe Version)\" data-product-price=\"36461.90\" data-product-title=\"Batman Versus Superman (Deluxe Version)\" data-product-url=\"https:\/\/www.actionfigurebrasil.com.br\/products\/batman-versus-superman-deluxe-version\" data-product-version=\"Deluxe\" id=\"afb-product-description\"\u003e\n\u003cdiv class=\"afb-audio-controls\"\u003e\n\u003cbutton class=\"afb-audio-btn\" id=\"afb-audio-btn\" type=\"button\"\u003e\n\u003cspan class=\"afb-audio-btn-icon\"\u003e\n\u003csvg aria-hidden=\"true\" fill=\"none\" viewbox=\"0 0 24 24\"\u003e\n\u003cpath d=\"M14.5 5.5L9.5 9H6.5C5.67157 9 5 9.67157 5 10.5V13.5C5 14.3284 5.67157 15 6.5 15H9.5L14.5 18.5V5.5Z\" stroke=\"currentColor\" stroke-linejoin=\"round\" stroke-width=\"2\"\u003e\u003c\/path\u003e\n\u003cpath d=\"M18 9C19.3333 10.2 19.3333 13.8 18 15\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"2\"\u003e\u003c\/path\u003e\n\u003cpath d=\"M20.5 6.5C23.1667 8.83333 23.1667 15.1667 20.5 17.5\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"2\"\u003e\u003c\/path\u003e\n\u003c\/svg\u003e\n\u003c\/span\u003e\n\u003cspan id=\"afb-audio-btn-label\"\u003eIniciar Experiência Imersiva\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cdiv class=\"afb-voice-select-wrap\"\u003e\n\u003cselect aria-label=\"Escolher estilo da narração\" class=\"afb-voice-select\" id=\"afb-voice-select\"\u003e\n\u003coption value=\"premium\"\u003eExperiência Premium\u003c\/option\u003e\n\u003coption selected value=\"epic\"\u003eExperiência Épica\u003c\/option\u003e\n\u003coption value=\"classic\"\u003eExperiência Clássica\u003c\/option\u003e\n\u003c\/select\u003e\n\u003cbutton aria-expanded=\"false\" aria-label=\"Escolher estilo da narração\" class=\"afb-voice-btn\" data-voice=\"epic\" id=\"afb-voice-btn\" type=\"button\"\u003e\n\u003cspan class=\"afb-voice-btn-copy\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-voice-btn-mark\"\u003e⚡\u003c\/span\u003e\n\u003cspan class=\"afb-voice-btn-label\"\u003eExperiência Épica\u003c\/span\u003e\n\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cdiv class=\"afb-voice-menu\" id=\"afb-voice-menu\"\u003e\n\u003cbutton class=\"afb-voice-option\" data-value=\"premium\" type=\"button\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-voice-option-mark\"\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-copy\"\u003e\n\u003cspan class=\"afb-voice-option-title\"\u003eExperiência Premium\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-desc\"\u003eEquilíbrio entre atmosfera e clareza\u003c\/span\u003e\n\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cbutton class=\"afb-voice-option is-selected\" data-value=\"epic\" type=\"button\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-voice-option-mark\"\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-copy\"\u003e\n\u003cspan class=\"afb-voice-option-title\"\u003eExperiência Épica\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-desc\"\u003eMais impacto dramático e presença\u003c\/span\u003e\n\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cbutton class=\"afb-voice-option\" data-value=\"classic\" type=\"button\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-voice-option-mark\"\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-copy\"\u003e\n\u003cspan class=\"afb-voice-option-title\"\u003eExperiência Clássica\u003c\/span\u003e\n\u003cspan class=\"afb-voice-option-desc\"\u003eLeitura limpa, direta e elegante\u003c\/span\u003e\n\u003c\/span\u003e\n\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cselect aria-hidden=\"true\" class=\"afb-native-select-hidden\" id=\"afb-audio-language-select\" tabindex=\"-1\"\u003e\n\u003coption value=\"pt-br\"\u003ePortuguês Brasil\u003c\/option\u003e\n\u003coption value=\"pt-pt\"\u003ePortuguês Portugal\u003c\/option\u003e\n\u003coption value=\"en-us\"\u003eEnglish US\u003c\/option\u003e\n\u003coption value=\"en-gb\"\u003eEnglish UK\u003c\/option\u003e\n\u003coption value=\"es-latam\"\u003eEspañol Latino\u003c\/option\u003e\n\u003coption value=\"es-es\"\u003eEspañol España\u003c\/option\u003e\n\u003coption value=\"fr-fr\"\u003eFrançais\u003c\/option\u003e\n\u003coption value=\"it-it\"\u003eItaliano\u003c\/option\u003e\n\u003coption value=\"de-de\"\u003eDeutsch\u003c\/option\u003e\n\u003coption value=\"ja-jp\"\u003e日本語\u003c\/option\u003e\n\u003c\/select\u003e\n\u003cdiv class=\"afb-lang-select\" id=\"afb-lang-select\"\u003e\n\u003cbutton aria-label=\"Escolher idioma\" class=\"afb-lang-btn\" id=\"afb-lang-btn\" type=\"button\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-flag afb-flag-br\"\u003e\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cdiv class=\"afb-lang-menu\" id=\"afb-lang-menu\"\u003e\n\u003cbutton data-value=\"pt-br\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-br\"\u003e\u003c\/span\u003e\u003cspan\u003ePortuguês Brasil\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"pt-pt\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-pt\"\u003e\u003c\/span\u003e\u003cspan\u003ePortuguês Portugal\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"en-us\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-us\"\u003e\u003c\/span\u003e\u003cspan\u003eEnglish US\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"en-gb\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-gb\"\u003e\u003c\/span\u003e\u003cspan\u003eEnglish UK\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"es-latam\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-latam\"\u003e\u003c\/span\u003e\u003cspan\u003eEspañol Latino\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"es-es\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-es\"\u003e\u003c\/span\u003e\u003cspan\u003eEspañol España\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"fr-fr\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-fr\"\u003e\u003c\/span\u003e\u003cspan\u003eFrançais\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"it-it\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-it\"\u003e\u003c\/span\u003e\u003cspan\u003eItaliano\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"de-de\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-de\"\u003e\u003c\/span\u003e\u003cspan\u003eDeutsch\u003c\/span\u003e\u003c\/button\u003e\n\u003cbutton data-value=\"ja-jp\" type=\"button\"\u003e\u003cspan class=\"afb-flag afb-flag-jp\"\u003e\u003c\/span\u003e\u003cspan\u003e日本語\u003c\/span\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-visible-description\" id=\"afb-visible-description\"\u003e\n\u003cp\u003e“Quero que você se lembre, Clark... em todos os anos que virão... nos seus momentos mais íntimos... quero que você se lembre... da minha mão... no seu pescoço... quero... que você se lembre... do único homem que te vence”\u003c\/p\u003e\n\u003cp\u003eA ActionFigureBrasil apresenta, em parceria com a \u003cstrong\u003ePrime 1 Studio\u003c\/strong\u003e, a impressionante \u003cstrong\u003eBatman Versus Superman (Deluxe Version)\u003c\/strong\u003e, uma peça monumental da linha \u003cstrong\u003eUltimate Diorama Masterline\u003c\/strong\u003e baseada em uma das batalhas mais icônicas dos quadrinhos da \u003cstrong\u003eDC Comics\u003c\/strong\u003e. Inspirada na capa variante de The Dark Knight III – The Master Race, esta estátua captura o exato momento em que Batman, equipado com sua armadura anti-metahumanos, desfere um golpe devastador em Superman, em pleno Beco do Crime.\u003c\/p\u003e\n\u003cp\u003eCom 110 cm de altura, a cena é rica em detalhes: Superman segura uma flecha com gás de kriptonita disparada pelo Arqueiro Verde, enquanto Batman está conectado à rede elétrica de Gotham, pronto para seu próximo ataque. O cenário do Beco do Crime, local do assassinato dos pais de Bruce Wayne, é reproduzido com realismo impressionante, incluindo o poste de luz e elementos urbanos.\u003c\/p\u003e\n\u003cp\u003eA pintura da peça é meticulosa, com camadas de envelhecimento e pigmentação que reforçam a atmosfera sombria e realista do diorama. Os olhos de Batman e o poste do beco contam com iluminação LED, intensificando o clima dramático do confronto.\u003c\/p\u003e\n\u003cp\u003eA Deluxe Version eleva ainda mais a experiência do colecionador, trazendo três retratos intercambiáveis do Batman – incluindo versões com e sem capacete, ambos com iluminação LED –, dois braços esquerdos alternativos e acessórios para o chão, como o capacete arrancado por Superman ou o canhão sônico de alta potência. Cada elemento foi pensado para proporcionar diferentes possibilidades de exibição e contar a história desse embate lendário sob múltiplos ângulos.\u003c\/p\u003e\n\u003cp\u003eEsta peça é um verdadeiro tributo à rivalidade entre Batman e Superman, reunindo arte, narrativa e presença imponente em uma obra-prima para fãs exigentes do universo DC.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-product-quote\" id=\"afb-product-quote\"\u003e\n\u003cdiv class=\"afb-quote-text\" id=\"afb-quote-text\"\u003e“Quero que você se lembre, Clark... em todos os anos que virão... nos seus momentos mais íntimos... quero que você se lembre... da minha mão... no seu pescoço... quero... que você se lembre... do único homem que te vence”\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-intro-hero-visual\" id=\"afb-intro-hero-visual\"\u003e\n\u003cimg alt=\"Batman Versus Superman (Deluxe Version)\" decoding=\"async\" loading=\"eager\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd2c2bc0.jpg\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-narration-stage-shell\" id=\"afb-narration-stage-shell\"\u003e\n\u003cdiv class=\"afb-stage-card\" id=\"afb-stage-card\"\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-activation-badge\" id=\"afb-activation-badge\"\u003e\n\u003cspan class=\"afb-activation-orbit\"\u003e\u003c\/span\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-activation-carousel\"\u003e\n\u003cdiv class=\"afb-activation-carousel-track\" id=\"afb-activation-carousel-track\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-activation-copy\"\u003e\n\u003cdiv class=\"afb-activation-kicker\" id=\"afb-activation-kicker\"\u003eExperiência ActionFigureBrasil\u003c\/div\u003e\n\u003cdiv class=\"afb-activation-title\" id=\"afb-activation-title\"\u003ePreparando produto premium\u003c\/div\u003e\n\u003cdiv class=\"afb-activation-meta\"\u003e\n\u003cspan class=\"afb-activation-chip is-version\" id=\"afb-activation-version\"\u003eVersão premium\u003c\/span\u003e\n\u003cspan class=\"afb-activation-chip\" id=\"afb-activation-language\"\u003ePortuguês BR\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-activation-text\"\u003e\n\u003cspan class=\"afb-activation-dot\"\u003e\u003c\/span\u003e\n\u003cspan id=\"afb-activation-label\"\u003eNarração, imagens e detalhes em instantes.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-stage-top\"\u003e\n\u003cdiv class=\"afb-stage-badge\" id=\"afb-stage-badge\"\u003e\n\u003cspan class=\"afb-stage-badge-dot\"\u003e\u003c\/span\u003e\n\u003cspan id=\"afb-stage-badge-label\"\u003eModo Narração Premium\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-stage-top-meta\"\u003e\n\u003cdiv class=\"afb-stage-time\" id=\"afb-stage-time\"\u003e00:00 \/ 00:00\u003c\/div\u003e\n\u003cbutton aria-label=\"Pausar áudio\" class=\"afb-audio-pause-btn\" disabled id=\"afb-audio-pause-btn\" title=\"Pausar áudio\" type=\"button\"\u003e\n\u003cspan aria-hidden=\"true\" class=\"afb-audio-pause-btn-icon\"\u003e\n\u003csvg aria-hidden=\"true\" fill=\"none\" viewbox=\"0 0 24 24\"\u003e\n\u003cpath d=\"M8 6.5V17.5\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"2.4\"\u003e\u003c\/path\u003e\n\u003cpath d=\"M16 6.5V17.5\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"2.4\"\u003e\u003c\/path\u003e\n\u003c\/svg\u003e\n\u003c\/span\u003e\n\u003cspan class=\"afb-audio-pause-btn-text\"\u003ePausar\u003c\/span\u003e\n\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-steps\" id=\"afb-steps\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-narration-copy\" id=\"afb-narration-copy\"\u003e\u003c\/div\u003e\n\u003c!--\n    \u003ctemplate id=\"afb-narration-spotlight-old-location\"\u003e\n    \u003cdiv class=\"afb-narration-spotlight\" id=\"afb-narration-spotlight-old\" aria-hidden=\"true\"\u003e\n      \u003cdiv class=\"afb-narration-spotlight-media\" id=\"afb-narration-spotlight-media\" data-fit=\"contain\"\u003e\n        \u003cimg id=\"afb-narration-spotlight-image\" src=\"\" alt=\"\"\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"afb-narration-spotlight-copy\"\u003e\n        \u003cdiv class=\"afb-narration-spotlight-kicker\"\u003e\n          \u003cspan class=\"afb-narration-spotlight-dot\"\u003e\u003c\/span\u003e\n          \u003cspan id=\"afb-narration-spotlight-kicker-label\"\u003eDetalhe em cena\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"afb-narration-spotlight-version-window\" id=\"afb-narration-spotlight-version-window\"\u003e\n          \u003cdiv class=\"afb-narration-spotlight-version-label\" id=\"afb-narration-spotlight-version-label\"\u003eVersão em destaque\u003c\/div\u003e\n          \u003ch4 class=\"afb-narration-spotlight-version-title\" id=\"afb-narration-spotlight-version-title\"\u003eDeluxe Version\u003c\/h4\u003e\n          \u003cp class=\"afb-narration-spotlight-version-subtitle\" id=\"afb-narration-spotlight-version-subtitle\"\u003eConfiguração expandida com peças e opções de display.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"afb-narration-spotlight-caption\" id=\"afb-narration-spotlight-caption\"\u003e\u003c\/p\u003e\n        \u003cp class=\"afb-narration-spotlight-evidence\" id=\"afb-narration-spotlight-evidence\"\u003e\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003c\/template\u003e\n    --\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-merchant-panel\" id=\"afb-merchant-panel\"\u003e\n\u003cdiv class=\"afb-merchant-media\"\u003e\n\u003cdiv class=\"afb-merchant-media-glow\"\u003e\u003c\/div\u003e\n\u003cdiv aria-label=\"Detalhes visuais da peça\" class=\"afb-merchant-detail-hotspots\" id=\"afb-merchant-detail-hotspots\"\u003e\u003c\/div\u003e\n\u003cfigure class=\"afb-merchant-figure\"\u003e\n\u003cimg alt=\"Batman Versus Superman (Deluxe Version)\" id=\"afb-merchant-image\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd322306.jpg\"\u003e\n\u003cspan class=\"afb-merchant-shine\"\u003e\u003c\/span\u003e\n\u003c\/figure\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-merchant-copy\"\u003e\n\u003cdiv class=\"afb-merchant-topline\"\u003e\n\u003cdiv class=\"afb-merchant-kicker\"\u003e\n\u003cspan class=\"afb-merchant-dot\"\u003e\u003c\/span\u003e\n\u003cspan id=\"afb-merchant-kicker-text\"\u003eDisponibilidade limitada\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv aria-label=\"Tempo restante da oferta\" class=\"afb-merchant-timer\" data-seconds=\"40\" id=\"afb-merchant-timer\"\u003e\n\u003cspan class=\"afb-merchant-timer-icon\"\u003e\u003c\/span\u003e\n\u003cspan id=\"afb-merchant-timer-text\"\u003e00:40\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 class=\"afb-merchant-title\" id=\"afb-merchant-title\"\u003eBatman Versus Superman (Deluxe Version)\u003c\/h3\u003e\n\u003cp class=\"afb-merchant-price\" data-price=\"36461.90\" id=\"afb-merchant-price\"\u003e\u003c\/p\u003e\n\u003cdiv class=\"afb-merchant-cta-row\"\u003e\n\u003cbutton class=\"afb-merchant-cta-btn\" data-afb-go-yever=\"1\" id=\"afb-merchant-btn\" type=\"button\"\u003e\n\u003cspan id=\"afb-merchant-btn-text\"\u003eCOMPRE AGORA!\u003c\/span\u003e\n\u003c\/button\u003e\n\u003cbutton class=\"afb-merchant-secondary-btn\" id=\"afb-merchant-custom-btn\" type=\"button\"\u003e\n\u003cspan id=\"afb-merchant-custom-btn-text\"\u003ePagamento Personalizado\u003c\/span\u003e\n\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-merchant-safe-note\" id=\"afb-merchant-safe-note\"\u003e\n          Compra segura com a garantia \u003cstrong\u003eActionFigureBrasil\u003c\/strong\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-spotlight-portal\" id=\"afb-spotlight-portal\"\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-narration-spotlight\" id=\"afb-narration-spotlight\"\u003e\n\u003cdiv class=\"afb-narration-spotlight-media\" data-fit=\"contain\" id=\"afb-narration-spotlight-media\"\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-backdrop\" id=\"afb-cinematic-backdrop\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-image\" id=\"afb-cinematic-image\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-crop-frame\" id=\"afb-cinematic-crop-frame\"\u003e\n\u003cimg alt=\"\" id=\"afb-cinematic-crop-image\" src=\"\"\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-dim-zone afb-cinematic-dim-top\" id=\"afb-cinematic-dim-top\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-dim-zone afb-cinematic-dim-right\" id=\"afb-cinematic-dim-right\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-dim-zone afb-cinematic-dim-bottom\" id=\"afb-cinematic-dim-bottom\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-dim-zone afb-cinematic-dim-left\" id=\"afb-cinematic-dim-left\"\u003e\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-cinematic-led-frame\" id=\"afb-cinematic-led-frame\"\u003e\u003c\/div\u003e\n\u003cimg alt=\"\" id=\"afb-narration-spotlight-image\" src=\"\"\u003e\n\u003cimg alt=\"\" aria-hidden=\"true\" class=\"afb-narration-spotlight-image-next\" id=\"afb-narration-spotlight-image-next\" src=\"\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-narration-spotlight-copy\"\u003e\n\u003cdiv class=\"afb-narration-spotlight-kicker\"\u003e\n\u003cspan class=\"afb-narration-spotlight-dot\"\u003e\u003c\/span\u003e\n\u003cspan id=\"afb-narration-spotlight-kicker-label\"\u003eDetalhe em cena\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-narration-spotlight-version-window\" id=\"afb-narration-spotlight-version-window\"\u003e\n\u003cdiv class=\"afb-narration-spotlight-version-label\" id=\"afb-narration-spotlight-version-label\"\u003eVersao em destaque\u003c\/div\u003e\n\u003ch4 class=\"afb-narration-spotlight-version-title\" id=\"afb-narration-spotlight-version-title\"\u003eDeluxe Version\u003c\/h4\u003e\n\u003cp class=\"afb-narration-spotlight-version-subtitle\" id=\"afb-narration-spotlight-version-subtitle\"\u003eConfiguração expandida com pecas e opcoes de display.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cp class=\"afb-narration-spotlight-caption\" id=\"afb-narration-spotlight-caption\"\u003e\u003c\/p\u003e\n\u003cp class=\"afb-narration-spotlight-evidence\" id=\"afb-narration-spotlight-evidence\"\u003e\u003c\/p\u003e\n\u003cbutton class=\"afb-curiosity-card\" hidden=\"\" id=\"afb-curiosity-card\" type=\"button\"\u003e\n\u003cspan class=\"afb-curiosity-card-kicker\" id=\"afb-curiosity-card-kicker\"\u003eCuriosidade da cena\u003c\/span\u003e\n\u003cspan class=\"afb-curiosity-card-title\" id=\"afb-curiosity-card-title\"\u003e\u003c\/span\u003e\n\u003cspan class=\"afb-curiosity-card-teaser\" id=\"afb-curiosity-card-teaser\"\u003e\u003c\/span\u003e\n\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-detail-overlay\" id=\"afb-detail-overlay\"\u003e\n\u003cdiv aria-label=\"Detalhe visual da peça\" aria-modal=\"true\" class=\"afb-detail-overlay-card\" role=\"dialog\"\u003e\n\u003cbutton aria-label=\"Fechar detalhe\" class=\"afb-detail-overlay-close\" id=\"afb-detail-overlay-close\" type=\"button\"\u003e×\u003c\/button\u003e\n\u003cimg alt=\"\" class=\"afb-detail-overlay-image\" id=\"afb-detail-overlay-image\" src=\"\"\u003e\n\u003cdiv class=\"afb-detail-overlay-copy\"\u003e\n\u003cdiv class=\"afb-detail-overlay-kicker\"\u003e\n\u003cspan class=\"afb-merchant-dot\"\u003e\u003c\/span\u003e\n\u003cspan\u003eDetalhe da peça\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"afb-detail-overlay-caption\" id=\"afb-detail-overlay-caption\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-tts-source afb-tts-hidden\" data-locale=\"pt-br\" data-nosnippet=\"true\"\u003e\n\u003cp data-sync-id=\"intro\" data-sync-role=\"intro\"\u003eQuero que você se lembre, Clark. em todos os anos que virão. nos seus momentos mais íntimos. quero que você se lembre. da minha mão. no seu pescoço. quero. que você se lembre. do único homem que te venceu. — Batman.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_1\" data-sync-role=\"narration\"\u003eA ActionFigureBrasil tem orgulho em apresentar, junto com a Praime Uan Studio, a estátua Batman versus Superman, versão Deluxe. Uma verdadeira obra-prima da linha Ultimate Diorama Masterline, inspirada em um dos confrontos mais lendários da DC Comics.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_2\" data-sync-role=\"narration\"\u003eEsta peça monumental captura o exato momento em que o Batman, usando sua armadura anti-metahumanos, desfere um golpe poderoso no Superman, congelando toda a tensão do embate no Beco do Crime.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_3\" data-sync-role=\"narration\"\u003eO cenário é ricamente detalhado, trazendo o icônico poste de luz do Beco do Crime, elementos urbanos e o chão marcado pela tragédia que mudou a vida de Bruce Wayne.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_4\" data-sync-role=\"narration\"\u003eSuperman aparece segurando a flecha com gás de kriptonita lançada pelo Arqueiro Verde, enquanto Batman está conectado à rede elétrica de Gotham, pronto para liberar ainda mais força.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_5\" data-sync-role=\"narration\"\u003eA pintura impressiona pelos efeitos de envelhecimento, lavagens e pigmentação, criando uma atmosfera realista e sombria que valoriza cada detalhe do diorama.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_6\" data-sync-role=\"narration\"\u003eOs olhos do Batman e o poste do beco contam com iluminação em LED, intensificando o clima dramático e a presença dos personagens na cena.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_7\" data-sync-role=\"narration\"\u003eA versão Deluxe traz três retratos intercambiáveis do Batman, incluindo opções com e sem capacete, ambos com iluminação em LED, permitindo diferentes formas de exibição.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_8\" data-sync-role=\"narration\"\u003eAlém disso, a peça inclui dois braços esquerdos alternativos para o Batman e acessórios para o chão, como o capacete arrancado pelo Superman ou o canhão sônico de alta potência.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_9\" data-sync-role=\"narration\"\u003eCada elemento foi pensado para oferecer ao colecionador várias possibilidades de montagem, enriquecendo a narrativa visual desse confronto épico.\u003c\/p\u003e\n\u003cp data-sync-id=\"narration_10\" data-sync-role=\"narration\"\u003eCom impressionantes 110 centímetros de altura e acabamento em Poliestone, esta estátua é um tributo definitivo à rivalidade entre Batman e Superman, reunindo arte, história e imponência em uma única peça.\u003c\/p\u003e\n\u003cp data-sync-id=\"merchant\" data-sync-role=\"merchant\"\u003eEste diorama está disponível na ActionFigureBrasil com parcelamento em até dez vezes sem juros de três mil seiscentos e quarenta e seis reais e dezenove centavos. Você também pode pagar usando dois cartões ou combinar Pix e cartão.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-narration-source afb-tts-hidden\" data-locale=\"pt-br\" data-nosnippet=\"true\" data-quote=\"“Quero que você se lembre, Clark... em todos os anos que virão... nos seus momentos mais íntimos... quero que você se lembre... da minha mão... no seu pescoço... quero... que você se lembre... do único homem que te vence”\"\u003e\n\u003cp data-spotlight-group=\"paragraph_scene_pass\" data-sync-id=\"narration_1\"\u003eA ActionFigureBrasil tem o orgulho de apresentar, em colaboração com a Prime 1 Studio, a estátua Batman Versus Superman Deluxe Version, uma obra-prima da linha Ultimate Diorama Masterline inspirada em um dos confrontos mais lendários da DC Comics.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_2\"\u003eEsta peça monumental retrata o momento exato em que Batman, equipado com sua armadura anti-metahumanos, desfere um golpe poderoso em Superman, congelando a tensão máxima do embate no Beco do Crime.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_3\"\u003eO cenário é ricamente detalhado, trazendo o icônico poste de luz do Beco do Crime, elementos urbanos e o chão marcado pela história trágica de Bruce Wayne.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_4\"\u003eSuperman aparece segurando a flecha com gás de kriptonita disparada pelo Arqueiro Verde, enquanto Batman está conectado à rede elétrica de Gotham, pronto para liberar ainda mais força.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_5\"\u003eA pintura da estátua impressiona pelos efeitos de envelhecimento, lavagens e pigmentação, criando uma atmosfera realista e sombria que destaca cada detalhe do diorama.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_6\"\u003eOs olhos de Batman e o poste do beco contam com iluminação LED, intensificando o clima dramático e a presença dos personagens na cena.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_7\"\u003eA versão Deluxe oferece três retratos intercambiáveis do Batman, incluindo opções com e sem capacete, ambos com iluminação LED, permitindo diferentes formas de exibição.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_8\"\u003eAlém disso, a peça traz dois braços esquerdos alternativos para o Batman e acessórios para o chão, como o capacete arrancado por Superman ou o canhão sônico de alta potência.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"single_focus_feature\" data-sync-id=\"narration_9\"\u003eCada elemento foi pensado para proporcionar ao colecionador múltiplas possibilidades de montagem, enriquecendo a narrativa visual desse confronto épico.\u003c\/p\u003e\n\u003cp data-spotlight-group=\"dimensions_scale\" data-sync-id=\"narration_10\"\u003eCom 110 centímetros de altura e acabamento em polystone, esta estátua é um tributo definitivo à rivalidade entre Batman e Superman, reunindo arte, história e imponência em uma única peça.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-spotlight-source afb-tts-hidden\" data-locale=\"pt-br\" data-nosnippet=\"true\"\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Apresentação da estátua. A imagem destaca The word DELUXE in a golden\" data-beat-id=\"visual_event_01_narration_1_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"A ActionFigureBrasil tem o orgulho de apresentar,\",\"triggerText\":\"A ActionFigureBrasil tem o orgulho de apresentar,\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"diorama\",\"triggerText\":\"diorama\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Base cenica e acabamento da escultura\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"texturas, danos e pintura aparecem com mais clareza\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bec489fc.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.5439\" data-source-segment-id=\"narration_1\" data-spotlight-delay-ms=\"1700\" data-spotlight-group=\"paragraph_scene_pass\" data-start-hint=\"\" data-sync-id=\"narration_1\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_01\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Batman em confronto. A imagem destaca The word DELUXE in a golden, ornate\" data-beat-id=\"visual_event_05_narration_2_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Esta peça monumental retrata o momento exato\",\"triggerText\":\"Esta peça monumental retrata o momento exato\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"armor\",\"label\":\"armadura e torso\",\"trigger_text\":\"armadura\",\"triggerText\":\"armadura\",\"x\":58.0,\"y\":46.0,\"zoom\":2.12,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Armadura, arma e pose em destaque\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"o acabamento metalico e a pose deixam a leitura mais forte\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd234ce1.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.6294\" data-source-segment-id=\"narration_2\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_2\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_05\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Detalhes do cenário. A imagem destaca A statue featuring Superman and\" data-beat-id=\"visual_event_06_narration_3_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"O cenário é ricamente detalhado, trazendo o\",\"triggerText\":\"O cenário é ricamente detalhado, trazendo o\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Base cenica e acabamento da escultura\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"texturas, danos e pintura aparecem com mais clareza\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd1ad1e8.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.492\" data-source-segment-id=\"narration_3\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_3\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_06\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Superman com flecha. A imagem destaca The word DELUXE in a golden rectangle\" data-beat-id=\"visual_event_04_narration_4_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Superman aparece segurando a flecha com gás\",\"triggerText\":\"Superman aparece segurando a flecha com gás\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.2},{\"id\":\"main_character\",\"label\":\"personagem principal\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":58.0,\"y\":42.0,\"zoom\":1.9,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.2},{\"id\":\"face\",\"label\":\"rosto e olhar\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":61.0,\"y\":27.0,\"zoom\":2.42,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.2},{\"id\":\"armor\",\"label\":\"armadura e torso\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":58.0,\"y\":46.0,\"zoom\":2.12,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.2},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.2}]' data-caption=\"Composicao heroica da peca\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"a imagem resume a energia da peca antes dos detalhes\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bec489fc.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.5743\" data-source-segment-id=\"narration_4\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_4\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_04\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Batman conectado. A imagem destaca The word DELUXE in a golden, ornate\" data-beat-id=\"visual_event_05_narration_4_beat_02\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Superman aparece segurando a flecha com gás\",\"triggerText\":\"Superman aparece segurando a flecha com gás\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.333},{\"id\":\"main_character\",\"label\":\"personagem principal\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":58.0,\"y\":42.0,\"zoom\":1.9,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.333},{\"id\":\"armor\",\"label\":\"armadura e torso\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":58.0,\"y\":46.0,\"zoom\":2.12,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.333}]' data-caption=\"Armadura, arma e pose em destaque\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"o acabamento metalico e a pose deixam a leitura mais forte\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd234ce1.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.6294\" data-source-segment-id=\"narration_4\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_4\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_05\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Detalhes da pintura. A imagem destaca The word DELUXE in a golden rectangle\" data-beat-id=\"visual_event_04_narration_5_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"A pintura da estátua impressiona pelos efeitos\",\"triggerText\":\"A pintura da estátua impressiona pelos efeitos\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"diorama\",\"triggerText\":\"diorama\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Base cenica e acabamento da escultura\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"texturas, danos e pintura aparecem com mais clareza\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bec489fc.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.5743\" data-source-segment-id=\"narration_5\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_5\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_04\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Iluminação LED. A imagem destaca A statue featuring Superman and Batman on\" data-beat-id=\"visual_event_06_narration_6_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Os olhos de Batman e o poste\",\"triggerText\":\"Os olhos de Batman e o poste\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Base cenica e acabamento da escultura\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"texturas, danos e pintura aparecem com mais clareza\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd1ad1e8.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.492\" data-source-segment-id=\"narration_6\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_6\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_06\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Retratos intercambiáveis. A imagem destaca The word DELUXE in a metallic\" data-beat-id=\"visual_event_02_narration_7_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"parts\",\"label\":\"partes e acessorios\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":48.0,\"zoom\":1.95,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"A versão Deluxe oferece três retratos intercambiáveis\",\"triggerText\":\"A versão Deluxe oferece três retratos intercambiáveis\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Partes intercambiaveis em foco\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"destaca os acessorios e escolhas de exibicao da versao\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd322306.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"1.0\" data-source-segment-id=\"narration_7\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_7\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_02\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Acessórios adicionais. A imagem destaca The word DELUXE in a golden, ornate\" data-beat-id=\"visual_event_05_narration_8_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Além disso, a peça traz dois braços\",\"triggerText\":\"Além disso, a peça traz dois braços\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"parts\",\"label\":\"partes e acessorios\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":48.0,\"zoom\":1.95,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Partes intercambiaveis em foco\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"destaca os acessorios e escolhas de exibicao da versao\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd234ce1.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.6294\" data-source-segment-id=\"narration_8\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_8\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_05\"\u003e\u003c\/p\u003e\n\u003cp data-alt=\"Batman Versus Superman (Deluxe Version) Deluxe - Possibilidades de montagem. A imagem destaca A statue featuring Superman\" data-beat-id=\"visual_event_06_narration_9_beat_01\" data-beat-text=\"\" data-camera-beats='[{\"id\":\"full_piece\",\"label\":\"peca completa\",\"trigger_text\":\"Cada elemento foi pensado para proporcionar ao\",\"triggerText\":\"Cada elemento foi pensado para proporcionar ao\",\"x\":50.0,\"y\":52.0,\"zoom\":1.0,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5},{\"id\":\"base\",\"label\":\"base e diorama\",\"trigger_text\":\"\",\"triggerText\":\"\",\"x\":50.0,\"y\":76.0,\"zoom\":1.78,\"frame\":{},\"motion_style\":\"\",\"refiner\":\"\",\"led_only\":false,\"camera_mode\":\"\",\"mask_available\":false,\"duration_ratio\":0.5}]' data-caption=\"Base cenica e acabamento da escultura\" data-editorial-score=\"0.97\" data-end-hint=\"\" data-evidence=\"texturas, danos e pintura aparecem com mais clareza\" data-fit=\"contain\" data-hero-suitability=\"\" data-image=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd1ad1e8.jpg\" data-kicker=\"Detalhe em cena\" data-layout=\"standard\" data-proof-score=\"0.492\" data-source-segment-id=\"narration_9\" data-spotlight-delay-ms=\"\" data-spotlight-group=\"single_focus_feature\" data-start-hint=\"\" data-sync-id=\"narration_9\" data-tone=\"deluxe\" data-variant-fit=\"\" data-version-mode=\"\" data-version-title=\"\" data-visual-intent=\"general_scene\" data-visual-role=\"hero_cinematic\" data-visual-run-id=\"visual_event_06\"\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv aria-hidden=\"true\" class=\"afb-curiosity-source afb-tts-hidden\" data-locale=\"pt-br\" data-nosnippet=\"true\"\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n    (function () {\n      const root = document.getElementById('afb-product-description');\n      if (!root) return;\n      const getById = function (id) { return root.querySelector('#' + id); };\n\n      const TTS_ENDPOINT = 'https:\/\/tts.actionfigurebrasil.com.br\/api\/tts';\n      const MERCHANT_HOLD_MS = 40000;\n      const ENDING_MS = 950;\n      const MIN_PREMIUM_LOADING_MS = 2800;\n      const ACTIVATION_LIT_DELAY_MS = 520;\n      const ACTIVATION_DOCKING_MS = 760;\n      const SPOTLIGHT_SHOW_DELAY_MS = 700;\n      const SPOTLIGHT_HOLD_MS = 12000;\n      const SPOTLIGHT_EXIT_MS = 1350;\n      const SPOTLIGHT_CROSSFADE_MS = 820;\n      const SPOTLIGHT_INTRO_EXIT_EARLY_MS = 950;\n      const SPOTLIGHT_PREHANDOFF_SECONDS = 0.9;\n      const SPOTLIGHT_MIN_DETAIL_ZOOM_DELAY_SECONDS = 0.68;\n      const SPOTLIGHT_FIRST_DETAIL_ZOOM_DELAY_SECONDS = 1.18;\n      const SPOTLIGHT_EXIT_RESET_SECONDS = 1.22;\n\n      const audioBtn = getById('afb-audio-btn');\n      const pauseBtn = getById('afb-audio-pause-btn');\n      const audioBtnLabel = getById('afb-audio-btn-label');\n      const voiceSelect = getById('afb-voice-select');\n      const voiceBox = voiceSelect ? voiceSelect.closest('.afb-voice-select-wrap') : null;\n      const langSelect = getById('afb-audio-language-select');\n      const langBox = getById('afb-lang-select');\n      const langBtn = getById('afb-lang-btn');\n      const langMenu = getById('afb-lang-menu');\n      const activationLabel = getById('afb-activation-label');\n      const activationCarouselTrack = getById('afb-activation-carousel-track');\n      const activationKicker = getById('afb-activation-kicker');\n      const activationTitle = getById('afb-activation-title');\n      const activationVersion = getById('afb-activation-version');\n      const activationLanguage = getById('afb-activation-language');\n      const stageBadgeLabel = getById('afb-stage-badge-label');\n      const stageTime = getById('afb-stage-time');\n      const stageShell = getById('afb-narration-stage-shell');\n      const stageCard = getById('afb-stage-card');\n      const stepsWrap = getById('afb-steps');\n      const narrationCopy = getById('afb-narration-copy');\n      const spotlightPortal = getById('afb-spotlight-portal');\n      const spotlightPanel = getById('afb-narration-spotlight');\n      const spotlightMedia = getById('afb-narration-spotlight-media');\n      const spotlightImage = getById('afb-narration-spotlight-image');\n      const spotlightImageNext = getById('afb-narration-spotlight-image-next');\n      const cinematicBackdrop = getById('afb-cinematic-backdrop');\n      const cinematicImage = getById('afb-cinematic-image');\n      const cinematicCropFrame = getById('afb-cinematic-crop-frame');\n      const cinematicCropImage = getById('afb-cinematic-crop-image');\n      const cinematicLedFrame = getById('afb-cinematic-led-frame');\n      const cinematicDimZones = {\n        top: getById('afb-cinematic-dim-top'),\n        right: getById('afb-cinematic-dim-right'),\n        bottom: getById('afb-cinematic-dim-bottom'),\n        left: getById('afb-cinematic-dim-left')\n      };\n      if (spotlightMedia \u0026\u0026 cinematicImage \u0026\u0026 cinematicBackdrop) {\n        spotlightMedia.classList.add('is-cinematic-v2');\n      }\n      const spotlightKickerLabel = getById('afb-narration-spotlight-kicker-label');\n      const spotlightVersionWindow = getById('afb-narration-spotlight-version-window');\n      const spotlightVersionLabel = getById('afb-narration-spotlight-version-label');\n      const spotlightVersionTitle = getById('afb-narration-spotlight-version-title');\n      const spotlightVersionSubtitle = getById('afb-narration-spotlight-version-subtitle');\n      const spotlightCaption = getById('afb-narration-spotlight-caption');\n      const spotlightEvidence = getById('afb-narration-spotlight-evidence');\n      let spotlightRegionOverlay = getById('afb-narration-spotlight-region');\n      if (!spotlightRegionOverlay \u0026\u0026 spotlightMedia) {\n        spotlightRegionOverlay = document.createElement('div');\n        spotlightRegionOverlay.id = 'afb-narration-spotlight-region';\n        spotlightRegionOverlay.className = 'afb-narration-spotlight-region';\n        spotlightRegionOverlay.setAttribute('aria-hidden', 'true');\n        spotlightMedia.appendChild(spotlightRegionOverlay);\n      }\n      const curiosityCard = getById('afb-curiosity-card');\n      const curiosityCardKicker = getById('afb-curiosity-card-kicker');\n      const curiosityCardTitle = getById('afb-curiosity-card-title');\n      const curiosityCardTeaser = getById('afb-curiosity-card-teaser');\n      const spotlightOriginalParent = spotlightPanel ? spotlightPanel.parentNode : null;\n      const spotlightOriginalNextSibling = spotlightPanel ? spotlightPanel.nextSibling : null;\n      const quoteTextEl = getById('afb-quote-text');\n      const merchantTitle = getById('afb-merchant-title');\n      const merchantImage = getById('afb-merchant-image');\n      const merchantBtn = getById('afb-merchant-btn');\n      const merchantBtnText = getById('afb-merchant-btn-text');\n      const merchantCustomBtn = getById('afb-merchant-custom-btn');\n      const merchantCustomBtnText = getById('afb-merchant-custom-btn-text');\n      const merchantKickerText = getById('afb-merchant-kicker-text');\n      const merchantSafeNote = getById('afb-merchant-safe-note');\n      const merchantPrice = getById('afb-merchant-price');\n      const merchantTimer = getById('afb-merchant-timer');\n      const merchantTimerText = getById('afb-merchant-timer-text');\n      const merchantHotspots = getById('afb-merchant-detail-hotspots');\n      const detailOverlay = getById('afb-detail-overlay');\n      const detailOverlayClose = getById('afb-detail-overlay-close');\n      const detailOverlayImage = getById('afb-detail-overlay-image');\n      const detailOverlayCaption = getById('afb-detail-overlay-caption');\n      const requiredElements = {\n        audioBtn,\n        audioBtnLabel,\n        voiceSelect,\n        langSelect,\n        activationLabel,\n        stageBadgeLabel,\n        stageTime,\n        stageShell,\n        stageCard,\n        stepsWrap,\n        narrationCopy,\n        spotlightPortal,\n        spotlightPanel,\n        spotlightImage,\n        spotlightKickerLabel,\n        spotlightVersionWindow,\n        spotlightVersionLabel,\n        spotlightVersionTitle,\n        spotlightVersionSubtitle,\n        spotlightCaption,\n        spotlightEvidence,\n        quoteTextEl,\n        merchantTitle,\n        merchantImage,\n        merchantBtn,\n        merchantBtnText,\n        merchantKickerText,\n        merchantSafeNote,\n        merchantPrice,\n        merchantTimer,\n        merchantTimerText,\n        merchantHotspots\n      };\n      const missingRequiredElements = Object.entries(requiredElements)\n        .filter(function (entry) { return !entry[1]; })\n        .map(function (entry) { return entry[0]; });\n      if (missingRequiredElements.length) {\n        console.warn('AFB premium narration aborted: missing required elements', missingRequiredElements);\n        return;\n      }\n\n      let voiceBtn = null;\n      let voiceBtnLabelEl = null;\n      let voiceBtnMarkEl = null;\n      let voiceMenu = null;\n\n      let audio = new Audio();\n      audio.preload = 'auto';\n\n      let currentData = null;\n      let currentTimings = null;\n      let isLoading = false;\n      let rafId = null;\n      let holdTimer = null;\n      let endingTimer = null;\n      let merchantCountdownInterval = null;\n      let merchantCountdownTotal = 40;\n      let activationLitTimer = null;\n      let quoteWords = [];\n      let narrationParagraphEls = [];\n      let stepEls = [];\n      let spotlightMap = {};\n      let spotlightShowTimer = null;\n      let spotlightHideTimer = null;\n        let spotlightExitTimer = null;\n        let spotlightSlideTimer = null;\n        let spotlightCrossfadeTimer = null;\n        let spotlightIntroExitTimer = null;\n        let spotlightCameraTimer = null;\n      let spotlightCameraTimers = [];\n      let curiosityCueTimer = null;\n      let activeCuriosityCue = null;\n      let curiosityResumeAfterClose = false;\n      let visualRuntimeErrorCount = 0;\n        let spotlightRequestToken = 0;\n      let activeSpotlightKey = '';\n      let activeSpotlightGroup = '';\n      let activeSpotlightRunId = '';\n      let activeSpotlightPrehandoff = null;\n      let spotlightDockAnimation = null;\n      let spotlightGroupBySyncId = {};\n      let visualBeatItems = [];\n      let currentActiveIndex = -1;\n      let activeScrollTimer = null;\n      let merchantScrollTimer = null;\n      let merchantScrollDone = false;\n      let isPausedByUser = false;\n\n      const cache = new Map();\n      const productTitle = root.dataset.productTitle || 'Produto Premium';\n      const productVersionTitle = root.dataset.productVersion || '';\n      const productImage = root.dataset.productImage || '';\n      const productImageAlt = root.dataset.productImageAlt || productTitle;\n      const productPrice = root.dataset.productPrice || '0';\n      const checkoutUrl = root.dataset.checkoutUrl || '\/checkout';\n      const productUrl = root.dataset.productUrl || '';\n      const AFB_SPOTLIGHT_DEBUG = true;\n\n      function spotlightDebug(label, message) {\n        if (!AFB_SPOTLIGHT_DEBUG || !window.console || !console.log) return;\n        console.log(label + (message ? ' ' + message : ''));\n      }\n\n      spotlightDebug(\n        '[CINEMATIC-V2]',\n        'enabled=' + (!!(spotlightMedia \u0026\u0026 spotlightMedia.classList.contains('is-cinematic-v2'))) +\n        ' layers=' + (!!(cinematicBackdrop \u0026\u0026 cinematicImage \u0026\u0026 cinematicCropFrame \u0026\u0026 cinematicCropImage \u0026\u0026 cinematicLedFrame))\n      );\n\n      function reportVisualRuntimeError(label, error) {\n        visualRuntimeErrorCount += 1;\n        if (window.console \u0026\u0026 console.warn \u0026\u0026 visualRuntimeErrorCount \u003c= 8) {\n          console.warn('[AFB-VISUAL-RUNTIME-RECOVER]', label, error);\n        }\n      }\n\n      spotlightDebug('[SPOTLIGHT-QUERY]', 'source=root');\n      spotlightDebug('[SPOTLIGHT-PORTAL]', 'created=' + (!!spotlightPortal));\n      spotlightDebug('[SPOTLIGHT-PORTAL-PARENT]', 'parent=' + (spotlightPortal \u0026\u0026 spotlightPortal.parentNode ? (spotlightPortal.parentNode.id || spotlightPortal.parentNode.className || spotlightPortal.parentNode.nodeName) : '-'));\n      spotlightDebug('[SPOTLIGHT-LAYOUT]', 'mode=portal');\n      spotlightDebug('[SPOTLIGHT-CLIP-CHECK]', 'stage_overflow=' + (stageCard ? window.getComputedStyle(stageCard).overflow : '-') + ' portal_overflow=' + (spotlightPortal ? window.getComputedStyle(spotlightPortal).overflow : '-'));\n\n      if (productImage) merchantImage.src = productImage;\n      merchantImage.alt = productImageAlt;\n      merchantPrice.setAttribute('data-price', productPrice);\n\n      const localeFlagClasses = {\n        'pt-br': 'afb-flag-br',\n        'pt-pt': 'afb-flag-pt',\n        'en-us': 'afb-flag-us',\n        'en-gb': 'afb-flag-gb',\n        'es-latam': 'afb-flag-latam',\n        'es-es': 'afb-flag-es',\n        'fr-fr': 'afb-flag-fr',\n        'it-it': 'afb-flag-it',\n        'de-de': 'afb-flag-de',\n        'ja-jp': 'afb-flag-jp'\n      };\n\n      const UI = {\n        'pt-br': {\n          play: 'Iniciar Experiência Imersiva',\n          loading: 'Preparando sua experiência...',\n          stop: 'Parar áudio',\n          close: 'Fechar',\n          badgePremium: 'Modo Narração Premium',\n          badgeEpic: 'Modo Narração Épica',\n          badgeClassic: 'Modo Narração Clássica',\n          premium: 'Experiência Premium',\n          epic: 'Experiência Épica',\n          classic: 'Experiência Clássica',\n          kicker: 'Disponibilidade limitada',\n          buy: 'COMPRE AGORA!',\n          customPay: 'Pagamento Personalizado',\n          priceTop: 'Em até',\n          pricePrefix: '10x de',\n          priceBottom: 'sem juros no cartão',\n          safe: 'Compra segura com a garantia \u003cstrong\u003eActionFigureBrasil\u003c\/strong\u003e'\n        },\n        'pt-pt': {\n          play: 'Iniciar Experiência Imersiva',\n          loading: 'A preparar a sua experiência...',\n          stop: 'Parar áudio',\n          close: 'Fechar',\n          badgePremium: 'Modo Narração Premium',\n          badgeEpic: 'Modo Narração Épica',\n          badgeClassic: 'Modo Narração Clássica',\n          premium: 'Experiência Premium',\n          epic: 'Experiência Épica',\n          classic: 'Experiência Clássica',\n          kicker: 'Disponibilidade limitada',\n          buy: 'COMPRAR AGORA!',\n          customPay: 'Pagamento Personalizado',\n          priceTop: 'Em até',\n          pricePrefix: '10x de',\n          priceBottom: 'sem juros no cartão',\n          safe: 'Compra segura com a garantia \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e'\n        },\n        'en-us': {\n          play: 'Start Experience',\n          loading: 'Preparing your experience...',\n          stop: 'Stop audio',\n          close: 'Close',\n          badgePremium: 'Premium Narration Mode',\n          badgeEpic: 'Epic Narration Mode',\n          badgeClassic: 'Classic Narration Mode',\n          premium: 'Premium Experience',\n          epic: 'Epic Experience',\n          classic: 'Classic Experience',\n          kicker: 'Limited availability',\n          buy: 'BUY NOW!',\n          customPay: 'Custom Payment',\n          priceTop: 'Up to',\n          pricePrefix: '10x of',\n          priceBottom: 'interest-free on card',\n          safe: 'Secure purchase with \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e curation'\n        },\n        'en-gb': {\n          play: 'Start Experience',\n          loading: 'Preparing your experience...',\n          stop: 'Stop audio',\n          close: 'Close',\n          badgePremium: 'Premium Narration Mode',\n          badgeEpic: 'Epic Narration Mode',\n          badgeClassic: 'Classic Narration Mode',\n          premium: 'Premium Experience',\n          epic: 'Epic Experience',\n          classic: 'Classic Experience',\n          kicker: 'Limited availability',\n          buy: 'BUY NOW!',\n          customPay: 'Custom Payment',\n          priceTop: 'Up to',\n          pricePrefix: '10x of',\n          priceBottom: 'interest-free on card',\n          safe: 'Secure purchase with \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e curation'\n        },\n        'es-latam': {\n          play: 'Iniciar experiencia',\n          loading: 'Preparando tu experiencia...',\n          stop: 'Detener audio',\n          close: 'Cerrar',\n          badgePremium: 'Modo Narración Premium',\n          badgeEpic: 'Modo Narración Épica',\n          badgeClassic: 'Modo Narración Clásica',\n          premium: 'Experiencia Premium',\n          epic: 'Experiencia Épica',\n          classic: 'Experiencia Clásica',\n          kicker: 'Disponibilidad limitada',\n          buy: '¡COMPRAR AHORA!',\n          customPay: 'Pago Personalizado',\n          priceTop: 'Hasta',\n          pricePrefix: '10x de',\n          priceBottom: 'sin intereses en tarjeta',\n          safe: 'Compra segura con la curaduría de \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e'\n        },\n        'es-es': {\n          play: 'Iniciar experiencia',\n          loading: 'Preparando tu experiencia...',\n          stop: 'Detener audio',\n          close: 'Cerrar',\n          badgePremium: 'Modo Narración Premium',\n          badgeEpic: 'Modo Narración Épica',\n          badgeClassic: 'Modo Narración Clásica',\n          premium: 'Experiencia Premium',\n          epic: 'Experiencia Épica',\n          classic: 'Experiencia Clásica',\n          kicker: 'Disponibilidad limitada',\n          buy: '¡COMPRAR AHORA!',\n          customPay: 'Pago Personalizado',\n          priceTop: 'Hasta',\n          pricePrefix: '10x de',\n          priceBottom: 'sin intereses en tarjeta',\n          safe: 'Compra segura con la selección de \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e'\n        },\n        'fr-fr': {\n          play: 'Démarrer l’expérience',\n          loading: 'Préparation de votre expérience...',\n          stop: 'Arrêter',\n          close: 'Fermer',\n          badgePremium: 'Mode Narration Premium',\n          badgeEpic: 'Mode Narration Épique',\n          badgeClassic: 'Mode Narration Classique',\n          premium: 'Expérience Premium',\n          epic: 'Expérience Épique',\n          classic: 'Expérience Classique',\n          kicker: 'Disponibilité limitée',\n          buy: 'ACHETER MAINTENANT!',\n          customPay: 'Paiement Personnalisé',\n          priceTop: 'Jusqu’à',\n          pricePrefix: '10x de',\n          priceBottom: 'sans intérêt par carte',\n          safe: 'Achat sécurisé avec la sélection \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e'\n        },\n        'it-it': {\n          play: 'Inizia l’esperienza',\n          loading: 'Preparazione della tua esperienza...',\n          stop: 'Ferma audio',\n          close: 'Chiudi',\n          badgePremium: 'Modalità Narrazione Premium',\n          badgeEpic: 'Modalità Narrazione Epica',\n          badgeClassic: 'Modalità Narrazione Classica',\n          premium: 'Esperienza Premium',\n          epic: 'Esperienza Epica',\n          classic: 'Esperienza Classica',\n          kicker: 'Disponibilità limitata',\n          buy: 'ACQUISTA ORA!',\n          customPay: 'Pagamento Personalizzato',\n          priceTop: 'Fino a',\n          pricePrefix: '10x da',\n          priceBottom: 'senza interessi con carta',\n          safe: 'Acquisto sicuro con la selezione \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e'\n        },\n        'de-de': {\n          play: 'Erlebnis starten',\n          loading: 'Ihr Erlebnis wird vorbereitet...',\n          stop: 'Audio stoppen',\n          close: 'Schließen',\n          badgePremium: 'Premium-Erzählmodus',\n          badgeEpic: 'Epischer Erzählmodus',\n          badgeClassic: 'Klassischer Erzählmodus',\n          premium: 'Premium-Erlebnis',\n          epic: 'Episches Erlebnis',\n          classic: 'Klassisches Erlebnis',\n          kicker: 'Begrenzte Verfügbarkeit',\n          buy: 'JETZT KAUFEN!',\n          customPay: 'Individuelle Zahlung',\n          priceTop: 'Bis zu',\n          pricePrefix: '10x von',\n          priceBottom: 'zinsfrei per Karte',\n          safe: 'Sicherer Kauf mit \u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e Auswahl'\n        },\n        'ja-jp': {\n          play: '再生',\n          loading: '体験を準備しています...',\n          stop: '停止',\n          close: '閉じる',\n          badgePremium: 'プレミアム音声モード',\n          badgeEpic: 'エピック音声モード',\n          badgeClassic: 'クラシック音声モード',\n          premium: 'プレミアム体験',\n          epic: 'エピック体験',\n          classic: 'クラシック体験',\n          kicker: '在庫わずか',\n          buy: '今すぐ購入!',\n          customPay: '個別支払い',\n          priceTop: '最大',\n          pricePrefix: '10回払い',\n          priceBottom: 'カードで分割払い',\n          safe: '\u003cstrong\u003eActionFigureWorld\u003c\/strong\u003e のキュレーションで安心購入'\n        }\n      };\n\n      function getLocale() {\n        return langSelect ? (langSelect.value || root.dataset.defaultLocale || 'pt-br') : (root.dataset.defaultLocale || 'pt-br');\n      }\n\n      function getCopy() {\n        return UI[getLocale()] || UI['pt-br'];\n      }\n\n      function getVoicePresentationMap() {\n        const locale = getLocale();\n        const copy = getCopy();\n        const descriptions = {\n          'pt-br': {\n            premium: 'Equilíbrio entre atmosfera e clareza',\n            epic: 'Mais impacto dramático e presença',\n            classic: 'Leitura limpa, direta e elegante'\n          },\n          'pt-pt': {\n            premium: 'Equilíbrio entre atmosfera e clareza',\n            epic: 'Mais impacto dramático e presença',\n            classic: 'Leitura limpa, direta e elegante'\n          },\n          'en-us': {\n            premium: 'Balanced, refined and immersive',\n            epic: 'More cinematic intensity and punch',\n            classic: 'Clean, direct and elegant reading'\n          },\n          'en-gb': {\n            premium: 'Balanced, refined and immersive',\n            epic: 'More cinematic intensity and punch',\n            classic: 'Clean, direct and elegant reading'\n          },\n          'es-latam': {\n            premium: 'Equilibrio entre atmósfera y claridad',\n            epic: 'Más impacto dramático y presencia',\n            classic: 'Lectura limpia, directa y elegante'\n          },\n          'es-es': {\n            premium: 'Equilibrio entre atmósfera y claridad',\n            epic: 'Más impacto dramático y presencia',\n            classic: 'Lectura limpia, directa y elegante'\n          },\n          'fr-fr': {\n            premium: 'Équilibre entre atmosphère et clarté',\n            epic: 'Plus d’impact dramatique et de présence',\n            classic: 'Lecture nette, directe et élégante'\n          },\n          'it-it': {\n            premium: 'Equilibrio tra atmosfera e chiarezza',\n            epic: 'Più impatto drammatico e presenza',\n            classic: 'Lettura pulita, diretta ed elegante'\n          },\n          'de-de': {\n            premium: 'Balance aus Atmosphäre und Klarheit',\n            epic: 'Mehr dramatische Wucht und Präsenz',\n            classic: 'Klar, direkt und elegant gelesen'\n          },\n          'ja-jp': {\n            premium: '雰囲気と明瞭さのバランス',\n            epic: 'よりドラマチックで力強い演出',\n            classic: '端正でまっすぐな読み上げ'\n          }\n        };\n        const currentDescriptions = descriptions[locale] || descriptions['pt-br'];\n        return {\n          premium: { label: copy.premium, desc: currentDescriptions.premium, mark: '✦' },\n          epic: { label: copy.epic, desc: currentDescriptions.epic, mark: '⚡' },\n          classic: { label: copy.classic, desc: currentDescriptions.classic, mark: '◦' }\n        };\n      }\n\n      function ensureVoiceControl() {\n        if (!voiceBox || !voiceSelect) return;\n\n        voiceSelect.classList.add('afb-native-select-hidden');\n        voiceSelect.setAttribute('aria-hidden', 'true');\n        voiceSelect.setAttribute('tabindex', '-1');\n\n        if (!voiceBtn) voiceBtn = voiceBox.querySelector('#afb-voice-btn');\n        if (!voiceMenu) voiceMenu = voiceBox.querySelector('#afb-voice-menu');\n        if (!voiceBtnLabelEl \u0026\u0026 voiceBtn) voiceBtnLabelEl = voiceBtn.querySelector('.afb-voice-btn-label');\n        if (!voiceBtnMarkEl \u0026\u0026 voiceBtn) voiceBtnMarkEl = voiceBtn.querySelector('.afb-voice-btn-mark');\n\n        if (voiceBtn \u0026\u0026 voiceMenu \u0026\u0026 voiceBtnLabelEl \u0026\u0026 voiceBtnMarkEl) return;\n\n        voiceBtn = document.createElement('button');\n        voiceBtn.type = 'button';\n        voiceBtn.className = 'afb-voice-btn';\n        voiceBtn.id = 'afb-voice-btn';\n        voiceBtn.setAttribute('aria-label', 'Escolher estilo da narração');\n        voiceBtn.setAttribute('aria-expanded', 'false');\n        voiceBtn.innerHTML =\n          '\u003cspan class=\"afb-voice-btn-copy\"\u003e' +\n            '\u003cspan class=\"afb-voice-btn-mark\" aria-hidden=\"true\"\u003e✦\u003c\/span\u003e' +\n            '\u003cspan class=\"afb-voice-btn-label\"\u003e\u003c\/span\u003e' +\n          '\u003c\/span\u003e';\n\n        voiceMenu = document.createElement('div');\n        voiceMenu.className = 'afb-voice-menu';\n        voiceMenu.id = 'afb-voice-menu';\n\n        ['premium', 'epic', 'classic'].forEach(function (value) {\n          const option = document.createElement('button');\n          option.type = 'button';\n          option.className = 'afb-voice-option';\n          option.setAttribute('data-value', value);\n          option.innerHTML =\n            '\u003cspan class=\"afb-voice-option-mark\" aria-hidden=\"true\"\u003e\u003c\/span\u003e' +\n            '\u003cspan class=\"afb-voice-option-copy\"\u003e' +\n              '\u003cspan class=\"afb-voice-option-title\"\u003e\u003c\/span\u003e' +\n              '\u003cspan class=\"afb-voice-option-desc\"\u003e\u003c\/span\u003e' +\n            '\u003c\/span\u003e';\n          voiceMenu.appendChild(option);\n        });\n\n        voiceBox.appendChild(voiceBtn);\n        voiceBox.appendChild(voiceMenu);\n\n        voiceBtnLabelEl = voiceBtn.querySelector('.afb-voice-btn-label');\n        voiceBtnMarkEl = voiceBtn.querySelector('.afb-voice-btn-mark');\n      }\n\n      function syncVoiceControl() {\n        ensureVoiceControl();\n        if (!voiceBtn || !voiceMenu || !voiceSelect) return;\n\n        const presentations = getVoicePresentationMap();\n        const selectedValue = voiceSelect.value || 'epic';\n        const selected = presentations[selectedValue] || presentations.epic || presentations.premium;\n\n        voiceBtn.dataset.voice = selectedValue;\n        voiceBtn.setAttribute('aria-expanded', voiceBox.classList.contains('is-open') ? 'true' : 'false');\n        voiceBtn.setAttribute('aria-label', selected.label);\n        if (voiceBtnLabelEl) voiceBtnLabelEl.textContent = selected.label;\n        if (voiceBtnMarkEl) voiceBtnMarkEl.textContent = selected.mark;\n\n        Array.from(voiceMenu.querySelectorAll('button[data-value]')).forEach(function (button) {\n          const value = button.getAttribute('data-value');\n          const item = presentations[value] || presentations.epic || presentations.premium;\n          const titleEl = button.querySelector('.afb-voice-option-title');\n          const descEl = button.querySelector('.afb-voice-option-desc');\n          if (titleEl) titleEl.textContent = item.label;\n          if (descEl) descEl.textContent = item.desc;\n          button.classList.toggle('is-selected', value === selectedValue);\n        });\n      }\n\n      function getCurrentTTSSource() {\n        return (\n          root.querySelector('.afb-tts-source[data-locale=\"' + getLocale() + '\"]') ||\n          root.querySelector('.afb-tts-source[data-locale=\"' + (root.dataset.defaultLocale || 'pt-br') + '\"]') ||\n          root.querySelector('.afb-tts-source[data-locale=\"pt-br\"]')\n        );\n      }\n\n      function getCurrentNarrationSource() {\n        return (\n          root.querySelector('.afb-narration-source[data-locale=\"' + getLocale() + '\"]') ||\n          root.querySelector('.afb-narration-source[data-locale=\"' + (root.dataset.defaultLocale || 'pt-br') + '\"]') ||\n          root.querySelector('.afb-narration-source[data-locale=\"pt-br\"]')\n        );\n      }\n\n      function getCurrentSpotlightSource() {\n        return (\n          root.querySelector('.afb-spotlight-source[data-locale=\"' + getLocale() + '\"]') ||\n          root.querySelector('.afb-spotlight-source[data-locale=\"' + (root.dataset.defaultLocale || 'pt-br') + '\"]') ||\n          root.querySelector('.afb-spotlight-source[data-locale=\"pt-br\"]')\n        );\n      }\n\n      function getCurrentCuriositySource() {\n        return (\n          root.querySelector('.afb-curiosity-source[data-locale=\"' + getLocale() + '\"]') ||\n          root.querySelector('.afb-curiosity-source[data-locale=\"' + (root.dataset.defaultLocale || 'pt-br') + '\"]') ||\n          root.querySelector('.afb-curiosity-source[data-locale=\"pt-br\"]')\n        );\n      }\n\n      function parseSpotlightCameraBeats(rawValue) {\n        if (!rawValue) return [];\n        let parsed = [];\n        try {\n          parsed = JSON.parse(rawValue);\n        } catch (error) {\n          return [];\n        }\n        if (!Array.isArray(parsed)) return [];\n        return parsed\n          .filter(function (beat) { return beat \u0026\u0026 typeof beat === 'object'; })\n          .map(function (beat) {\n            const x = Math.max(0, Math.min(100, Number(beat.x || 50)));\n            const y = Math.max(0, Math.min(100, Number(beat.y || 50)));\n            const zoom = Math.max(1, Math.min(3.3, Number(beat.zoom || 1)));\n            return {\n              id: String(beat.id || ''),\n              label: String(beat.label || ''),\n              triggerText: String(beat.trigger_text || beat.triggerText || beat.trigger || beat.phrase || ''),\n              triggerTerms: Array.isArray(beat.trigger_terms) ? beat.trigger_terms.map(function (term) { return String(term || '').trim(); }).filter(Boolean) :\n                (Array.isArray(beat.triggerTerms) ? beat.triggerTerms.map(function (term) { return String(term || '').trim(); }).filter(Boolean) : []),\n              motionStyle: String(beat.motion_style || beat.motionStyle || beat.motion || ''),\n              refiner: String(beat.refiner || ''),\n              maskAvailable: !!(beat.mask_available || beat.maskAvailable),\n              ledOnly: !!(beat.led_only || beat.ledOnly || beat.camera_mode === 'led_region_only' || beat.cameraMode === 'led_region_only'),\n              cameraMode: String(beat.camera_mode || beat.cameraMode || ''),\n              frame: beat.frame \u0026\u0026 typeof beat.frame === 'object' ? beat.frame : null,\n              startMs: Number.isFinite(Number(beat.start_ms || beat.startMs)) ? Number(beat.start_ms || beat.startMs) : null,\n              endMs: Number.isFinite(Number(beat.end_ms || beat.endMs)) ? Number(beat.end_ms || beat.endMs) : null,\n              startSec: Number.isFinite(Number(beat.start_sec || beat.startSec || beat.start)) ? Number(beat.start_sec || beat.startSec || beat.start) : null,\n              endSec: Number.isFinite(Number(beat.end_sec || beat.endSec || beat.end)) ? Number(beat.end_sec || beat.endSec || beat.end) : null,\n              x: x,\n              y: y,\n              zoom: zoom,\n              durationRatio: Math.max(0.08, Math.min(1, Number(beat.duration_ratio || beat.durationRatio || 0.25)))\n            };\n          })\n          .filter(function (beat) { return beat.id; })\n          .slice(0, 5);\n      }\n\n      function getNarrationSpotlightMap() {\n        const source = getCurrentSpotlightSource();\n        const map = {};\n        visualBeatItems = [];\n        const sourceItems = source ? Array.from(source.querySelectorAll('p[data-sync-id][data-image]')) : [];\n        spotlightDebug('[SPOTLIGHT-SOURCE]', 'found=' + (!!source) + ' items=' + sourceItems.length);\n        if (!source) return map;\n\n        sourceItems.forEach(function (item) {\n          const syncId = item.getAttribute('data-sync-id') || '';\n          const beatId = item.getAttribute('data-beat-id') || '';\n          const sourceSegmentId = item.getAttribute('data-source-segment-id') || syncId;\n          const spotlightKey = beatId || syncId;\n          const image = item.getAttribute('data-image') || '';\n          if (!syncId || !image || !spotlightKey) return;\n          const spotlightItem = {\n            key: spotlightKey,\n            beatId: beatId,\n            syncId: sourceSegmentId,\n            sourceSegmentId: sourceSegmentId,\n            beatText: item.getAttribute('data-beat-text') || '',\n            startHint: item.getAttribute('data-start-hint') || '',\n            endHint: item.getAttribute('data-end-hint') || '',\n            image: image,\n            alt: item.getAttribute('data-alt') || '',\n            kicker: item.getAttribute('data-kicker') || 'Detalhe em cena',\n            caption: item.getAttribute('data-caption') || 'Detalhe visual destacado na narração',\n            evidence: item.getAttribute('data-evidence') || '',\n            fit: item.getAttribute('data-fit') || 'contain',\n            tone: item.getAttribute('data-tone') || root.dataset.bodyThemeKey || 'standard',\n            layout: item.getAttribute('data-layout') || 'standard',\n            versionMode: item.getAttribute('data-version-mode') || '',\n            versionTitle: item.getAttribute('data-version-title') || '',\n            visualIntent: item.getAttribute('data-visual-intent') || '',\n            variantFit: item.getAttribute('data-variant-fit') || '',\n            heroSuitability: item.getAttribute('data-hero-suitability') || '',\n            visualRole: item.getAttribute('data-visual-role') || '',\n            visualRunId: item.getAttribute('data-visual-run-id') || '',\n            proofScore: item.getAttribute('data-proof-score') || '',\n            editorialScore: item.getAttribute('data-editorial-score') || '',\n            spotlightGroup: item.getAttribute('data-spotlight-group') || '',\n            spotlightDelayMs: Math.max(0, Math.min(2400, Number(item.getAttribute('data-spotlight-delay-ms') || 0))),\n            cameraBeats: parseSpotlightCameraBeats(item.getAttribute('data-camera-beats') || '')\n          };\n          if (beatId) {\n            visualBeatItems.push(spotlightItem);\n            map[spotlightKey] = spotlightItem;\n            return;\n          }\n          if (!map[spotlightKey]) {\n            map[spotlightKey] = spotlightItem;\n            map[spotlightKey].slides = [spotlightItem];\n          } else {\n            map[spotlightKey].slides = map[spotlightKey].slides || [map[spotlightKey]];\n            map[spotlightKey].slides.push(spotlightItem);\n          }\n        });\n        spotlightDebug('[SPOTLIGHT-MAP]', 'keys=' + Object.keys(map).join(',') + ' visualBeatItems=' + visualBeatItems.length);\n        return map;\n      }\n\n      function getNarrationCuriosityCueMap() {\n        const source = getCurrentCuriositySource();\n        const map = {};\n        const items = source ? Array.from(source.querySelectorAll('p[data-sync-id][data-cue-id]')) : [];\n        items.forEach(function (item) {\n          const syncId = item.getAttribute('data-sync-id') || '';\n          if (!syncId || map[syncId]) return;\n          map[syncId] = {\n            id: item.getAttribute('data-cue-id') || '',\n            syncId: syncId,\n            triggerPhrase: item.getAttribute('data-trigger-phrase') || '',\n            topic: item.getAttribute('data-topic') || '',\n            focusId: item.getAttribute('data-focus-id') || '',\n            candidateIndex: item.getAttribute('data-candidate-index') || '',\n            image: item.getAttribute('data-image') || '',\n            title: item.getAttribute('data-title') || 'Curiosidade visual',\n            teaser: item.getAttribute('data-teaser') || 'Toque para abrir uma curiosidade deste detalhe.',\n            body: item.textContent || ''\n          };\n        });\n        return map;\n      }\n\n      function preloadSpotlightImages() {\n        const preloadItems = [];\n        const seenImages = {};\n        function addPreloadItem(item) {\n          if (!item || !item.image || seenImages[item.image]) return;\n          seenImages[item.image] = true;\n          preloadItems.push(item);\n        }\n        visualBeatItems.forEach(addPreloadItem);\n        Object.keys(spotlightMap || {}).forEach(function (key) {\n          const item = spotlightMap[key];\n          addPreloadItem(item);\n          (item \u0026\u0026 item.slides || []).forEach(addPreloadItem);\n        });\n        if (!preloadItems.length) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=no spotlight images to preload');\n          return;\n        }\n        preloadItems.forEach(function (item) {\n          if (!item || !item.image) return;\n          const img = new Image();\n          img.src = item.image;\n        });\n      }\n\n      function applySpotlightItem(item, options) {\n        options = options || {};\n        if (!item || !item.image) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=missing item or image');\n          return false;\n        }\n        if (!spotlightPanel || !spotlightImage || !spotlightCaption) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=missing spotlight dom');\n          return false;\n        }\n\n        if (spotlightHideTimer) {\n          clearTimeout(spotlightHideTimer);\n          spotlightHideTimer = null;\n        }\n        if (spotlightExitTimer) {\n          clearTimeout(spotlightExitTimer);\n          spotlightExitTimer = null;\n        }\n\n        root.classList.remove('is-merchant-outro');\n        root.classList.remove('is-merchant-hold');\n\n        const nextKey = item.key || item.beatId || item.syncId || item.image;\n        const currentSrc = spotlightImage.getAttribute('src') || '';\n        const nextRunId = getSpotlightVisualRunId(item);\n        const isSameItem = activeSpotlightKey === nextKey \u0026\u0026 currentSrc === item.image \u0026\u0026 spotlightPanel.classList.contains('is-visible');\n        if (isSameItem \u0026\u0026 !options.force) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=same active item');\n          return true;\n        }\n\n        const imageChanged = currentSrc \u0026\u0026 currentSrc !== item.image;\n        const shouldCrossfade = spotlightPanel.classList.contains('is-visible') \u0026\u0026 imageChanged;\n        activeSpotlightKey = nextKey;\n        activeSpotlightRunId = nextRunId || activeSpotlightRunId;\n        setSpotlightImageSmooth(item, shouldCrossfade, nextKey, function () {\n          if (activeSpotlightKey !== nextKey) return;\n\n          if (spotlightMedia) {\n            spotlightMedia.setAttribute('data-fit', item.fit || 'contain');\n            spotlightMedia.style.setProperty('--afb-spotlight-bg-image', 'url(\"' + String(item.image || '').replace(\/\"\/g, '\\\"') + '\")');\n          }\n\n          if (spotlightKickerLabel) spotlightKickerLabel.textContent = item.kicker || 'Detalhe em cena';\n          spotlightCaption.textContent = item.caption || '';\n          if (spotlightEvidence) {\n            spotlightEvidence.textContent = item.evidence || '';\n            spotlightEvidence.classList.toggle('is-visible', !!item.evidence);\n          }\n\n          const isVersionShowcase = item.layout === 'version-showcase';\n          const versionTexts = getSpotlightVersionTexts(item);\n          spotlightPanel.classList.toggle('is-version-showcase', isVersionShowcase);\n          if (spotlightVersionLabel) spotlightVersionLabel.textContent = versionTexts.label;\n          if (spotlightVersionTitle) spotlightVersionTitle.textContent = item.versionTitle || productVersionTitle || productTitle;\n          if (spotlightVersionSubtitle) spotlightVersionSubtitle.textContent = versionTexts.subtitle;\n\n          spotlightPanel.classList.remove('is-exiting');\n          applySpotlightThemeClass(item);\n          startSpotlightCameraMotion(item);\n          spotlightPanel.classList.add('is-visible', 'is-active');\n          spotlightPanel.setAttribute('aria-hidden', 'false');\n          if (spotlightPortal) spotlightPortal.setAttribute('aria-hidden', 'false');\n          root.classList.add('is-spotlight-active');\n          if (stageShell) stageShell.classList.add('is-spotlight-active');\n          activeSpotlightGroup = item.spotlightGroup || activeSpotlightGroup || '';\n          activeSpotlightRunId = nextRunId || activeSpotlightRunId || nextKey;\n          updateDesktopSpotlightPosition(currentActiveIndex \u003e= 0 ? narrationParagraphEls[currentActiveIndex] : null);\n\n          spotlightPanel.classList.remove('is-switching');\n\n          if (!options.preHandoff \u0026\u0026 isMobileNarrationViewport() \u0026\u0026 currentActiveIndex \u003e= 0) {\n            window.setTimeout(function () {\n              guideActiveReadingBlock(narrationParagraphEls[currentActiveIndex]);\n            }, 90);\n          }\n\n          spotlightDebug('[SPOTLIGHT-CARD-STATE]', 'visible=' + spotlightPanel.classList.contains('is-visible') + ' classes=' + spotlightPanel.className);\n        });\n        return true;\n      }\n\n      function primeFirstVisualBeat(syncId) {\n        if (!visualBeatItems || !visualBeatItems.length) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=no visual beats to prime');\n          return false;\n        }\n        if (!syncId) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=no syncId for prime');\n          return false;\n        }\n        const segmentBeats = getTimedVisualBeatsForSyncId(syncId);\n        const first = (segmentBeats \u0026\u0026 segmentBeats.length ? segmentBeats : []).find(function (item) {\n          return item \u0026\u0026 item.image;\n        });\n        if (!first) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=no primeable visual beat');\n          return false;\n        }\n        spotlightDebug('[SPOTLIGHT-PRIME]', 'beat_id=' + (first.beatId || '-') + ' syncId=' + (first.sourceSegmentId || first.syncId || '-') + ' image=' + first.image);\n        return applySpotlightItem(first, { prime: true, force: true });\n      }\n\n      function getVisualBeatsForSyncId(syncId) {\n        if (!syncId || !visualBeatItems.length) return [];\n        return visualBeatItems.filter(function (item) {\n          return item \u0026\u0026 item.sourceSegmentId === syncId \u0026\u0026 item.beatId \u0026\u0026 item.image;\n        });\n      }\n\n      function getTimedVisualBeatsForSyncId(syncId) {\n        const beats = getVisualBeatsForSyncId(syncId);\n        if (beats.length \u003c 2) return beats;\n        const timing = getTimingSegment(syncId);\n        if (!timing) return beats.slice(0, 2);\n        const durationMs = Math.max(0, (Number(timing.end || 0) - Number(timing.start || 0)) * 1000);\n        if (!durationMs) return beats.slice(0, 2);\n        const minShotMs = isMobileNarrationViewport() ? 3600 : 3200;\n        const hardMax = durationMs \u003e 15000 ? 4 : 3;\n        const maxByDuration = durationMs \u003e= 6200 ? Math.max(1, Math.floor(durationMs \/ minShotMs)) : 1;\n        return beats.slice(0, Math.max(1, Math.min(beats.length, hardMax, maxByDuration)));\n      }\n\n      function getActiveVisualBeatForTime(current, syncId) {\n        const beats = getTimedVisualBeatsForSyncId(syncId);\n        if (!beats.length) return null;\n        const timing = getTimingSegment(syncId);\n        if (!timing) return beats[0] || null;\n        const start = Number(timing.start || 0);\n        const end = Number(timing.end || 0);\n        if (isSegmentSpotlightDelayed(current, syncId, start)) return null;\n        const duration = Math.max(0.001, end - start);\n        if (current \u003c start || current \u003e= end) return beats[0] || null;\n        const beatIndex = Math.max(0, Math.min(beats.length - 1, Math.floor(((current - start) \/ duration) * beats.length)));\n        return beats[beatIndex] || beats[0] || null;\n      }\n\n      function getSpotlightItemForActiveNarration(current, syncId) {\n        if (isSegmentSpotlightDelayed(current, syncId)) return null;\n        const beat = getActiveVisualBeatForTime(current, syncId);\n        if (beat) return beat;\n\n        const beatsForSegment = getTimedVisualBeatsForSyncId(syncId);\n        if (beatsForSegment \u0026\u0026 beatsForSegment.length) return beatsForSegment[0];\n\n        if (spotlightMap \u0026\u0026 spotlightMap[syncId]) return spotlightMap[syncId];\n        return null;\n      }\n\n      function getSegmentSpotlightDelayMs(syncId) {\n        const item = getSpotlightItemForSyncId(syncId);\n        let delay = Number(item \u0026\u0026 item.spotlightDelayMs || 0);\n        if (!item \u0026\u0026 String(syncId || '') !== 'narration_1') return 0;\n        ((item \u0026\u0026 item.slides) || []).forEach(function (slide) {\n          delay = Math.max(delay, Number(slide \u0026\u0026 slide.spotlightDelayMs || 0));\n        });\n        if (!delay \u0026\u0026 String(syncId || '') === 'narration_1') {\n          const text = normalizeSpotlightSpeechText(getSegmentSpeechText(syncId, item));\n          const hasStoreIntro = text.indexOf('actionfigurebrasil') \u003e= 0 || text.indexOf('apresenta') \u003e= 0 || text.indexOf('apresentam') \u003e= 0;\n          if (hasStoreIntro) delay = 1700;\n        }\n        return Math.max(0, Math.min(2400, delay || 0));\n      }\n\n      function isSegmentSpotlightDelayed(current, syncId, knownStart) {\n        const delayMs = getSegmentSpotlightDelayMs(syncId);\n        if (!delayMs) return false;\n        const timing = getTimingSegment(syncId);\n        const start = Number(knownStart !== undefined ? knownStart : (timing \u0026\u0026 timing.start || 0));\n        return Number(current || 0) \u003c start + (delayMs \/ 1000);\n      }\n\n      function updateVisualBeatSpotlight(current, syncId) {\n        const item = getSpotlightItemForActiveNarration(current, syncId);\n        if (!item || !item.image) {\n          spotlightDebug('[SPOTLIGHT-SKIP]', 'reason=no active spotlight item syncId=' + (syncId || '-'));\n          return false;\n        }\n        const activeEl = currentActiveIndex \u003e= 0 ? narrationParagraphEls[currentActiveIndex] : null;\n        if (activeEl \u0026\u0026 (activeEl.dataset.syncId || '') === syncId) {\n          syncSpotlightPanelPlacement(activeEl);\n        }\n        if (item.beatId) {\n          spotlightDebug('[SPOTLIGHT-ACTIVE]', 'time=' + Number(current || 0).toFixed(2) + ' syncId=' + (syncId || '-') + ' beat_id=' + item.beatId + ' image=' + item.image);\n          return applySpotlightItem(item, { timeline: true });\n        }\n        showNarrationSpotlight(syncId);\n        return true;\n      }\n\n      function getSpotlightItemForSyncId(syncId) {\n        if (!spotlightMap || !syncId) return null;\n        if (spotlightMap[syncId]) return spotlightMap[syncId];\n        return null;\n      }\n\n      function getSpotlightGroupForSyncId(syncId) {\n        return (spotlightGroupBySyncId \u0026\u0026 spotlightGroupBySyncId[syncId]) || '';\n      }\n\n      function getSpotlightVersionTexts(item) {\n        const locale = getLocale();\n        const mode = (item \u0026\u0026 item.versionMode) || 'version-overview';\n        const textsByLocale = {\n          'pt-br': {\n            'bonus-extra': { label: 'Extra da versão', subtitle: 'Acessório especial da variante ativa em destaque visual.' },\n            'display-parts': { label: 'Versão expandida', subtitle: 'Configuração com partes extras e opções mais completas de display.' },\n            'prestige-line': { label: 'Linha em foco', subtitle: 'Leitura premium da linha com presença forte de coleção.' },\n            'exclusive-edition': { label: 'Edição especial', subtitle: 'Diferenciais visuais de uma variante mais rara e especial.' },\n            'version-overview': { label: 'Versão em destaque', subtitle: 'Janela visual dedicada aos diferenciais da variante selecionada.' }\n          },\n          'pt-pt': {\n            'bonus-extra': { label: 'Extra da versão', subtitle: 'Acessório especial da variante ativa em destaque visual.' },\n            'display-parts': { label: 'Versão expandida', subtitle: 'Configuração com peças extra e opções mais completas de exposição.' },\n            'prestige-line': { label: 'Linha em foco', subtitle: 'Leitura premium da linha com forte presença de coleção.' },\n            'exclusive-edition': { label: 'Edição especial', subtitle: 'Diferenciais visuais de uma variante mais rara e especial.' },\n            'version-overview': { label: 'Versão em destaque', subtitle: 'Janela visual dedicada aos diferenciais da variante selecionada.' }\n          },\n          'en-us': {\n            'bonus-extra': { label: 'Version Extra', subtitle: 'A signature bonus accessory from the active variant.' },\n            'display-parts': { label: 'Expanded Version', subtitle: 'Extra parts and broader display options from this version.' },\n            'prestige-line': { label: 'Line Focus', subtitle: 'A premium line presentation with stronger shelf presence.' },\n            'exclusive-edition': { label: 'Special Edition', subtitle: 'Visual differentials from a rarer and more special variant.' },\n            'version-overview': { label: 'Version Focus', subtitle: 'A dedicated visual window for the selected variant.' }\n          },\n          'en-gb': {\n            'bonus-extra': { label: 'Version Extra', subtitle: 'A signature bonus accessory from the active variant.' },\n            'display-parts': { label: 'Expanded Version', subtitle: 'Extra parts and broader display options from this version.' },\n            'prestige-line': { label: 'Line Focus', subtitle: 'A premium line presentation with stronger shelf presence.' },\n            'exclusive-edition': { label: 'Special Edition', subtitle: 'Visual differentials from a rarer and more special variant.' },\n            'version-overview': { label: 'Version Focus', subtitle: 'A dedicated visual window for the selected variant.' }\n          },\n          'es-latam': {\n            'bonus-extra': { label: 'Extra de versión', subtitle: 'Accesorio especial de la variante activa en destaque visual.' },\n            'display-parts': { label: 'Versión ampliada', subtitle: 'Configuración con piezas extra y opciones más completas de exhibición.' },\n            'prestige-line': { label: 'Línea en foco', subtitle: 'Lectura premium de la línea con fuerte presencia de colección.' },\n            'exclusive-edition': { label: 'Edición especial', subtitle: 'Diferenciales visuales de una variante más rara y especial.' },\n            'version-overview': { label: 'Versión destacada', subtitle: 'Ventana visual dedicada a los diferenciales de la variante seleccionada.' }\n          },\n          'es-es': {\n            'bonus-extra': { label: 'Extra de versión', subtitle: 'Accesorio especial de la variante activa en destaque visual.' },\n            'display-parts': { label: 'Versión ampliada', subtitle: 'Configuración con piezas extra y opciones más completas de exhibición.' },\n            'prestige-line': { label: 'Línea en foco', subtitle: 'Lectura premium de la línea con fuerte presencia de colección.' },\n            'exclusive-edition': { label: 'Edición especial', subtitle: 'Diferenciales visuales de una variante más rara y especial.' },\n            'version-overview': { label: 'Versión destacada', subtitle: 'Ventana visual dedicada a los diferenciales de la variante seleccionada.' }\n          },\n          'fr-fr': {\n            'bonus-extra': { label: 'Extra de version', subtitle: 'Accessoire spécial de la variante active en mise en avant visuelle.' },\n            'display-parts': { label: 'Version enrichie', subtitle: 'Pièces supplémentaires et options de présentation plus complètes.' },\n            'prestige-line': { label: 'Ligne en focus', subtitle: 'Lecture premium de la ligne avec une forte présence de collection.' },\n            'exclusive-edition': { label: 'Edition spéciale', subtitle: 'Différentiels visuels d’une variante plus rare et spéciale.' },\n            'version-overview': { label: 'Version mise en avant', subtitle: 'Fenêtre visuelle dédiée aux différentiels de la variante sélectionnée.' }\n          },\n          'it-it': {\n            'bonus-extra': { label: 'Extra versione', subtitle: 'Accessorio speciale della variante attiva in evidenza visiva.' },\n            'display-parts': { label: 'Versione estesa', subtitle: 'Configurazione con parti extra e opzioni di display più complete.' },\n            'prestige-line': { label: 'Linea in focus', subtitle: 'Lettura premium della linea con forte presenza da collezione.' },\n            'exclusive-edition': { label: 'Edizione speciale', subtitle: 'Differenze visive di una variante più rara e speciale.' },\n            'version-overview': { label: 'Versione in evidenza', subtitle: 'Finestra visiva dedicata ai differenziali della variante selezionata.' }\n          },\n          'de-de': {\n            'bonus-extra': { label: 'Versions-Extra', subtitle: 'Besonderes Zubehör der aktiven Variante im visuellen Fokus.' },\n            'display-parts': { label: 'Erweiterte Version', subtitle: 'Zusatzteile und umfassendere Display-Optionen dieser Version.' },\n            'prestige-line': { label: 'Linie im Fokus', subtitle: 'Premium-Linienauftritt mit stärkerer Sammlerpräsenz.' },\n            'exclusive-edition': { label: 'Sonderedition', subtitle: 'Visuelle Differenziale einer selteneren und besonderen Variante.' },\n            'version-overview': { label: 'Version im Fokus', subtitle: 'Eigenes visuelles Fenster für die ausgewählte Variante.' }\n          },\n          'ja-jp': {\n            'bonus-extra': { label: 'バージョン特典', subtitle: '選択中バリアントの特別アクセサリーを強調表示。' },\n            'display-parts': { label: '拡張バージョン', subtitle: '追加パーツとより幅広いディスプレイ表現をまとめて表示。' },\n            'prestige-line': { label: 'ラインフォーカス', subtitle: 'コレクション映えするプレミアムラインの見せ場。' },\n            'exclusive-edition': { label: '特別版', subtitle: 'より希少で特別なバリアントの視覚的な違いを提示。' },\n            'version-overview': { label: 'バージョンフォーカス', subtitle: '選択中バリアントの魅力を見せる専用ウィンドウ。' }\n          }\n        };\n        const localeTexts = textsByLocale[locale] || textsByLocale['pt-br'];\n        return localeTexts[mode] || localeTexts['version-overview'];\n      }\n\n      function getTTSSegments() {\n        const source = getCurrentTTSSource();\n        if (!source) return [];\n\n        return Array.from(source.querySelectorAll('p'))\n          .map(function (p, index) {\n            const text = p.textContent.replace(\/\\s+\/g, ' ').trim();\n            if (!text) return null;\n\n            const fallbackId = index === 0 ? 'intro' : 'narration_' + index;\n            const id = p.getAttribute('data-sync-id') || fallbackId;\n            const role = p.getAttribute('data-sync-role') || (\n              id === 'intro' ? 'intro' :\n              id === 'merchant' ? 'merchant' :\n              'narration'\n            );\n\n            return { id: id, role: role, text: text };\n          })\n          .filter(Boolean);\n      }\n\n      function getNarrationParagraphs() {\n        const source = getCurrentNarrationSource();\n        if (!source) return [];\n\n        return Array.from(source.querySelectorAll('p'))\n          .map(function (p, index) {\n            const text = p.textContent.replace(\/\\s+\/g, ' ').trim();\n            if (!text) return null;\n\n            return {\n              id: p.getAttribute('data-sync-id') || 'narration_' + (index + 1),\n              text: text,\n              spotlightGroup: p.getAttribute('data-spotlight-group') || ''\n            };\n          })\n          .filter(Boolean);\n      }\n\n      function escapeHTML(value) {\n        return String(value || '')\n          .replace(\/\u0026\/g, '\u0026amp;')\n          .replace(\/\u003c\/g, '\u0026lt;')\n          .replace(\/\u003e\/g, '\u0026gt;')\n          .replace(\/\"\/g, '\u0026quot;')\n          .replace(\/'\/g, '\u0026#039;');\n      }\n\n      function formatBRL(value) {\n        return value.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });\n      }\n\n      function renderMerchantTitleCinematic(title) {\n        const cleanTitle = String(title || '').replace(\/\\s+\/g, ' ').trim();\n        if (!cleanTitle) {\n          merchantTitle.textContent = '';\n          return;\n        }\n\n        const words = cleanTitle.split(' ');\n        let html = '\u003cspan class=\"afb-merchant-title-line\"\u003e';\n        words.forEach(function (word, index) {\n          const delay = Math.min(index * 36, 640);\n          html += '\u003cspan class=\"afb-merchant-title-word\" style=\"--afb-word-delay:' + delay + 'ms\"\u003e' + escapeHTML(word) + '\u003c\/span\u003e';\n          if (index \u003c words.length - 1) html += ' ';\n        });\n        html += '\u003c\/span\u003e';\n        merchantTitle.innerHTML = html;\n      }\n\n      function updateMerchantPrice() {\n        const copy = getCopy();\n        let total = parseFloat(String(productPrice || '0').replace(',', '.'));\n        if (!isFinite(total)) total = 0;\n        const installment = total \/ 10;\n        merchantPrice.innerHTML =\n          '\u003cspan class=\"afb-merchant-price-top\"\u003e' + escapeHTML(copy.priceTop) + '\u003c\/span\u003e' +\n          '\u003cspan class=\"afb-merchant-price-main\"\u003e' + escapeHTML(copy.pricePrefix) + ' \u003cspan class=\"afb-merchant-price-amount\"\u003e' + formatBRL(installment) + '\u003c\/span\u003e\u003c\/span\u003e' +\n          '\u003cspan class=\"afb-merchant-price-bottom\"\u003e' + escapeHTML(copy.priceBottom) + '\u003c\/span\u003e';\n      }\n\n      function buildCustomPaymentWhatsappUrl() {\n        const fallbackProductUrl = (\n          productUrl ||\n          (\n            window.location \u0026\u0026\n            \/^https?:\/i.test(String(window.location.href || '')) \u0026\u0026\n            !\/\\\/checkout(?:[\/?#]|$)\/i.test(String(window.location.href || ''))\n              ? window.location.href\n              : ''\n          ) ||\n          checkoutUrl\n        );\n        const message = [\n          'Olá! Quero um pagamento personalizado para este produto.',\n          'Produto: ' + productTitle\n        ];\n        if (fallbackProductUrl) {\n          message.push('URL: ' + fallbackProductUrl);\n        }\n        return 'https:\/\/wa.me\/5531994025018?text=' + encodeURIComponent(message.join('\\n'));\n      }\n\n      function applyMerchantImageRatioClass() {\n        const figure = merchantImage \u0026\u0026 merchantImage.closest('.afb-merchant-figure');\n        if (!figure) return;\n\n        function apply() {\n          const w = merchantImage.naturalWidth || 0;\n          const h = merchantImage.naturalHeight || 0;\n          figure.classList.remove('is-portrait', 'is-landscape', 'is-square', 'is-tall', 'is-wide');\n          if (!w || !h) {\n            figure.classList.add('is-square');\n            return;\n          }\n\n          const ratio = w \/ h;\n          figure.style.setProperty('--afb-img-ratio', ratio.toFixed(3));\n          if (ratio \u003c 0.58) {\n            figure.classList.add('is-portrait', 'is-tall');\n          } else if (ratio \u003c 0.82) {\n            figure.classList.add('is-portrait');\n          } else if (ratio \u003e 1.75) {\n            figure.classList.add('is-landscape', 'is-wide');\n          } else if (ratio \u003e 1.22) {\n            figure.classList.add('is-landscape');\n          } else {\n            figure.classList.add('is-square');\n          }\n        }\n\n        if (merchantImage.complete \u0026\u0026 merchantImage.naturalWidth) {\n          apply();\n        } else {\n          merchantImage.addEventListener('load', apply, { once: true });\n          merchantImage.addEventListener('error', function () {\n            figure.classList.remove('is-portrait', 'is-landscape', 'is-tall', 'is-wide');\n            figure.classList.add('is-square');\n          }, { once: true });\n        }\n      }\n\n      function updateStageBadge() {\n        const copy = getCopy();\n        const labels = {\n          premium: copy.badgePremium,\n          epic: copy.badgeEpic,\n          classic: copy.badgeClassic\n        };\n        const label = labels[voiceSelect.value] || labels.epic || labels.premium;\n        stageBadgeLabel.textContent = label;\n      }\n\n      function getActivationLocaleLabel() {\n        const labels = {\n          'pt-br': 'Português BR',\n          'pt-pt': 'Português PT',\n          'en-us': 'English US',\n          'en-gb': 'English UK',\n          'es-latam': 'Español LATAM',\n          'es-es': 'Español ES',\n          'fr-fr': 'Français',\n          'it-it': 'Italiano',\n          'de-de': 'Deutsch',\n          'ja-jp': 'Japonês'\n        };\n        return labels[getLocale()] || labels['pt-br'];\n      }\n\n      function getActivationVersionLabel() {\n        const version = String(productVersionTitle || '').replace(\/\\s+\/g, ' ').trim();\n        if (version) return version;\n        const theme = String(root.dataset.bodyThemeKey || '').toLowerCase();\n        const labels = {\n          standard: 'Standard',\n          exclusive: 'Exclusive',\n          deluxe: 'Deluxe',\n          bonus: 'Bonus',\n          prestige: 'Premium',\n          definitive: 'Definitive'\n        };\n        return labels[theme] || 'Premium';\n      }\n\n      function updateActivationExperience() {\n        if (activationKicker) activationKicker.textContent = 'Experiência ActionFigureBrasil';\n        if (activationTitle) activationTitle.textContent = 'Preparando ' + productTitle;\n        if (activationVersion) activationVersion.textContent = getActivationVersionLabel();\n        if (activationLanguage) activationLanguage.textContent = getActivationLocaleLabel();\n        if (activationLabel) {\n          activationLabel.textContent = 'Narração, imagens e detalhes em ' + getActivationLocaleLabel() + '.';\n        }\n      }\n\n      function getActivationCarouselImages() {\n        const seen = {};\n        const images = [];\n        function add(url, alt) {\n          const cleanUrl = String(url || '').trim();\n          if (!cleanUrl || seen[cleanUrl]) return;\n          seen[cleanUrl] = true;\n          images.push({ url: cleanUrl, alt: alt || productTitle });\n        }\n        add(productImage, productImageAlt);\n        (visualBeatItems || []).forEach(function (item) {\n          add(item \u0026\u0026 item.image, (item \u0026\u0026 (item.alt || item.caption)) || productTitle);\n        });\n        return images.slice(0, 5);\n      }\n\n      function renderActivationCarousel() {\n        if (!activationCarouselTrack) return;\n        const baseImages = getActivationCarouselImages();\n        activationCarouselTrack.innerHTML = '';\n        if (!baseImages.length) return;\n        const images = baseImages.slice();\n        while (images.length \u003c 3) {\n          images.push(baseImages[images.length % baseImages.length]);\n        }\n        const duration = Math.max(7.2, images.length * 2.4);\n        images.forEach(function (item, index) {\n          const img = document.createElement('img');\n          img.src = item.url;\n          img.alt = item.alt || productTitle;\n          img.loading = 'eager';\n          img.style.setProperty('--afb-activation-carousel-duration', duration + 's');\n          img.style.setProperty('--afb-activation-carousel-delay', (index * 2.4) + 's');\n          img.addEventListener('load', function () {\n            const w = img.naturalWidth || 0;\n            const h = img.naturalHeight || 0;\n            if (!w || !h) return;\n            const ratio = w \/ h;\n            if (ratio \u003c 0.58) img.classList.add('is-tall');\n            else if (ratio \u003c 0.82) img.classList.add('is-portrait');\n            else if (ratio \u003e 1.45) img.classList.add('is-wide');\n          }, { once: true });\n          activationCarouselTrack.appendChild(img);\n        });\n      }\n\n      function updateUITranslations() {\n        const copy = getCopy();\n        const premiumOption = voiceSelect.querySelector('option[value=\"premium\"]');\n        const epicOption = voiceSelect.querySelector('option[value=\"epic\"]');\n        const classicOption = voiceSelect.querySelector('option[value=\"classic\"]');\n\n        if (premiumOption) premiumOption.textContent = copy.premium;\n        if (epicOption) epicOption.textContent = copy.epic;\n        if (classicOption) classicOption.textContent = copy.classic;\n\n        merchantKickerText.textContent = copy.kicker;\n        merchantBtnText.textContent = copy.buy;\n        if (merchantCustomBtnText) merchantCustomBtnText.textContent = copy.customPay || 'Pagamento Personalizado';\n        merchantSafeNote.innerHTML = copy.safe;\n\n        syncVoiceControl();\n        updateStageBadge();\n        updateActivationExperience();\n        updateMerchantPrice();\n        updateButtonState();\n      }\n\n      function buildQuoteWords() {\n        const source = getCurrentNarrationSource();\n        const rawText = (\n          source \u0026\u0026 source.getAttribute('data-quote')\n            ? source.getAttribute('data-quote')\n            : quoteTextEl.textContent\n        ).replace(\/\\s+\/g, ' ').trim();\n\n        const words = rawText.split(\/\\s+\/).filter(Boolean);\n        quoteTextEl.innerHTML = '';\n        quoteWords = [];\n\n        words.forEach(function (word) {\n          const span = document.createElement('span');\n          span.className = 'afb-quote-word';\n          span.textContent = word;\n          quoteTextEl.appendChild(span);\n          quoteWords.push(span);\n        });\n      }\n\n      function setQuoteRevealProgress(progress) {\n        if (!quoteWords.length) return;\n\n        const total = quoteWords.length;\n        const visibleCount = Math.max(0, Math.min(total, Math.ceil(progress * total)));\n        quoteWords.forEach(function (word, index) {\n          word.classList.toggle('is-visible', index \u003c visibleCount);\n        });\n      }\n\n      function restoreSpotlightPanelPlacement() {\n        if (!spotlightPanel) return;\n        if (spotlightPortal \u0026\u0026 spotlightPanel.parentNode !== spotlightPortal) {\n          spotlightPortal.appendChild(spotlightPanel);\n          return;\n        }\n        if (!spotlightOriginalParent) return;\n        if (spotlightPanel.parentNode !== spotlightOriginalParent) {\n          spotlightOriginalParent.appendChild(spotlightPanel);\n        }\n      }\n\n      function getSpotlightVisualRunId(item) {\n        if (!item) return '';\n        return String(\n          item.visualRunId ||\n          item.spotlightGroup ||\n          item.sourceSegmentId ||\n          item.syncId ||\n          item.image ||\n          ''\n        );\n      }\n\n      function animateSpotlightDock(beforeRect, afterRect) {\n        if (!spotlightPanel || !beforeRect || !afterRect) return;\n        if (typeof spotlightPanel.animate !== 'function') return;\n        const dx = beforeRect.left - afterRect.left;\n        const dy = beforeRect.top - afterRect.top;\n        const sx = afterRect.width ? beforeRect.width \/ afterRect.width : 1;\n        const sy = afterRect.height ? beforeRect.height \/ afterRect.height : 1;\n        if (Math.abs(dx) \u003c 2 \u0026\u0026 Math.abs(dy) \u003c 2 \u0026\u0026 Math.abs(sx - 1) \u003c 0.015 \u0026\u0026 Math.abs(sy - 1) \u003c 0.015) return;\n        if (spotlightDockAnimation) {\n          try { spotlightDockAnimation.cancel(); } catch (error) {}\n          spotlightDockAnimation = null;\n        }\n        const travel = Math.min(480, Math.abs(dx) + Math.abs(dy));\n        const duration = Math.max(420, Math.min(760, 460 + travel * 0.34));\n        spotlightPanel.classList.add('is-docking');\n        const dockAnimation = spotlightPanel.animate(\n          [\n            {\n              transform: 'translate3d(' + dx.toFixed(1) + 'px,' + dy.toFixed(1) + 'px,0) scale(' + sx.toFixed(4) + ',' + sy.toFixed(4) + ')',\n              filter: 'blur(2px) saturate(1.04)'\n            },\n            {\n              transform: 'translate3d(0,0,0) scale(1)',\n              filter: 'blur(0) saturate(1)'\n            }\n          ],\n          {\n            duration: duration,\n            easing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n            fill: 'none'\n          }\n        );\n        spotlightDockAnimation = dockAnimation;\n        dockAnimation.onfinish = function () {\n          if (spotlightDockAnimation !== dockAnimation) return;\n          spotlightPanel.classList.remove('is-docking');\n          spotlightDockAnimation = null;\n        };\n        dockAnimation.oncancel = function () {\n          if (spotlightDockAnimation !== dockAnimation) return;\n          spotlightPanel.classList.remove('is-docking');\n          spotlightDockAnimation = null;\n        };\n      }\n\n      function markSpotlightEntering() {\n        if (!spotlightPanel) return;\n        spotlightPanel.classList.add('is-entering');\n        window.setTimeout(function () {\n          if (!spotlightPanel) return;\n          spotlightPanel.classList.remove('is-entering');\n        }, 980);\n      }\n\n      function updateDesktopSpotlightPosition(activeEl) {\n        if (!spotlightPanel || !activeEl || !narrationCopy) return;\n        if (activeEl.parentNode !== narrationCopy) return;\n        narrationCopy.style.setProperty('--afb-spotlight-track-reserve', '0px');\n        narrationCopy.style.setProperty('--afb-spotlight-track-y', '0px');\n        spotlightPanel.style.removeProperty('top');\n      }\n\n      function shouldAnchorSpotlightToActiveParagraph() {\n        return !!(window.matchMedia \u0026\u0026 window.matchMedia('(max-width: 980px)').matches);\n      }\n\n      function placeSpotlightAfterActiveNarration(activeEl) {\n        if (!spotlightPanel || !activeEl || !narrationCopy) return false;\n        if (!root.classList.contains('is-narration-visible')) return false;\n        if (activeEl.parentNode !== narrationCopy) return false;\n\n        const wasVisible = spotlightPanel.classList.contains('is-visible') \u0026\u0026 !spotlightPanel.classList.contains('is-exiting');\n        if (!shouldAnchorSpotlightToActiveParagraph()) {\n          const desiredFirst = narrationCopy.firstChild;\n          if (spotlightPanel.parentNode !== narrationCopy) {\n            if (!wasVisible) markSpotlightEntering();\n            narrationCopy.insertBefore(spotlightPanel, desiredFirst);\n          } else if (spotlightPanel !== narrationCopy.firstElementChild) {\n            narrationCopy.insertBefore(spotlightPanel, desiredFirst);\n          }\n          updateDesktopSpotlightPosition(activeEl);\n          return true;\n        }\n\n        const desiredNext = activeEl.nextSibling;\n        if (spotlightPanel.parentNode !== narrationCopy) {\n          if (!wasVisible) markSpotlightEntering();\n          narrationCopy.insertBefore(spotlightPanel, desiredNext);\n        } else if (spotlightPanel.previousElementSibling !== activeEl) {\n          narrationCopy.insertBefore(spotlightPanel, desiredNext);\n        }\n        updateDesktopSpotlightPosition(activeEl);\n        return true;\n      }\n\n      function applySpotlightImageRatioClass(sourceImage) {\n        const ratioImage = sourceImage || spotlightImage;\n        if (!ratioImage || !spotlightMedia) return;\n        const targets = [spotlightMedia, spotlightPanel].filter(Boolean);\n        const classes = ['is-portrait', 'is-landscape', 'is-square', 'is-tall', 'is-wide'];\n\n        function clearClasses() {\n          targets.forEach(function (target) {\n            classes.forEach(function (className) {\n              target.classList.remove(className);\n            });\n          });\n        }\n\n        function apply() {\n          const width = ratioImage.naturalWidth || 0;\n          const height = ratioImage.naturalHeight || 0;\n          clearClasses();\n          if (!width || !height) {\n            targets.forEach(function (target) { target.classList.add('is-landscape'); });\n            spotlightMedia.style.setProperty('--afb-spotlight-ratio', '16 \/ 10');\n            spotlightMedia.setAttribute('data-cinematic-fit', 'cover');\n            return;\n          }\n\n          const ratio = width \/ height;\n          spotlightMedia.style.setProperty('--afb-spotlight-ratio', ratio.toFixed(3));\n          let className = 'is-square';\n          if (ratio \u003c 0.58) className = 'is-tall';\n          else if (ratio \u003c 0.86) className = 'is-portrait';\n          else if (ratio \u003e 1.75) className = 'is-wide';\n          else if (ratio \u003e 1.18) className = 'is-landscape';\n          targets.forEach(function (target) { target.classList.add(className); });\n          spotlightMedia.setAttribute('data-cinematic-fit', (className === 'is-landscape' || className === 'is-wide') ? 'cover' : 'contain');\n        }\n\n        if (ratioImage.complete \u0026\u0026 ratioImage.naturalWidth) {\n          apply();\n          return;\n        }\n        clearClasses();\n        targets.forEach(function (target) { target.classList.add('is-landscape'); });\n        spotlightMedia.style.setProperty('--afb-spotlight-ratio', '16 \/ 10');\n        spotlightMedia.setAttribute('data-cinematic-fit', 'cover');\n      }\n\n      function applySpotlightThemeClass(item) {\n        if (!spotlightPanel) return;\n        const themeClasses = ['is-standard', 'is-deluxe', 'is-exclusive', 'is-bonus', 'is-prestige', 'is-definitive'];\n        themeClasses.forEach(function (className) {\n          spotlightPanel.classList.remove(className);\n        });\n\n        const rawTone = String((item \u0026\u0026 item.tone) || root.dataset.bodyThemeKey || 'standard').toLowerCase();\n        const versionTitle = String(\n          (item \u0026\u0026 item.versionTitle) ||\n          productVersionTitle ||\n          root.dataset.productVersion ||\n          ''\n        ).replace(\/\\s+\/g, ' ').trim();\n        const versionSignal = [\n          versionTitle,\n          root.dataset.productVersion || '',\n          productTitle || '',\n          root.dataset.bodyThemeKey || ''\n        ].join(' ').toLowerCase();\n        const toneMap = {\n          standard: 'standard',\n          deluxe: 'deluxe',\n          exclusive: 'exclusive',\n          bonus: 'bonus',\n          prestige: 'prestige',\n          premium: 'prestige',\n          definitive: 'definitive'\n        };\n        function resolveToneFromSignal(signal) {\n          if (\/(exclusive|exclusiv[ao])\/.test(signal)) return 'exclusive';\n          if (\/(bonus|b.nus)\/.test(signal)) return 'bonus';\n          if (\/definitive\/.test(signal)) return 'definitive';\n          if (\/deluxe\/.test(signal)) return 'deluxe';\n          if (\/(premium|prestige|masterline|museum)\/.test(signal)) return 'prestige';\n          if (\/(standard|padr.o)\/.test(signal)) return 'standard';\n          return '';\n        }\n        const tone = resolveToneFromSignal(versionSignal) || toneMap[rawTone] || 'prestige';\n        spotlightPanel.classList.add('is-' + tone);\n\n        const fallbackLabels = {\n          standard: 'Standard Edition',\n          deluxe: 'Deluxe Edition',\n          exclusive: 'Exclusive Edition',\n          bonus: 'Bonus Edition',\n          prestige: 'Premium Spotlight',\n          definitive: 'Definitive Edition'\n        };\n        const label = versionTitle\n          ? versionTitle.replace(\/\\s+version$\/i, '') + ' Edition'\n          : fallbackLabels[tone];\n        spotlightPanel.style.setProperty('--afb-spotlight-version-label', '\"' + label.replace(\/\"\/g, '\\\"') + '\"');\n      }\n\n      function clearSpotlightCameraMotion() {\n        if (spotlightCameraTimer) {\n          clearTimeout(spotlightCameraTimer);\n          spotlightCameraTimer = null;\n        }\n        if (Array.isArray(spotlightCameraTimers) \u0026\u0026 spotlightCameraTimers.length) {\n          spotlightCameraTimers.forEach(function (timer) {\n            clearTimeout(timer);\n          });\n          spotlightCameraTimers = [];\n        }\n        if (spotlightMedia) spotlightMedia.classList.remove('has-camera-motion');\n        [spotlightImage, spotlightImageNext].forEach(function (img) {\n          if (!img) return;\n          img.style.setProperty('--afb-camera-x', '50%');\n          img.style.setProperty('--afb-camera-y', '50%');\n          img.style.setProperty('--afb-camera-pan-x', '0px');\n          img.style.setProperty('--afb-camera-pan-y', '0px');\n          img.style.setProperty('--afb-camera-zoom', '1');\n        });\n        resetSpotlightCinematicCrop();\n        hideSpotlightRegionOverlay();\n      }\n\n      function getSpotlightRenderedImageFrame(img, media) {\n        const mediaRect = media \u0026\u0026 media.getBoundingClientRect ? media.getBoundingClientRect() : null;\n        const mediaStyle = media \u0026\u0026 window.getComputedStyle ? window.getComputedStyle(media) : null;\n        const padX = mediaStyle ? (parseFloat(mediaStyle.paddingLeft || 0) + parseFloat(mediaStyle.paddingRight || 0)) : 0;\n        const padY = mediaStyle ? (parseFloat(mediaStyle.paddingTop || 0) + parseFloat(mediaStyle.paddingBottom || 0)) : 0;\n        const frameWidth = Math.max(1, ((mediaRect \u0026\u0026 mediaRect.width) || img.offsetWidth || img.clientWidth || 1) - padX);\n        const frameHeight = Math.max(1, ((mediaRect \u0026\u0026 mediaRect.height) || img.offsetHeight || img.clientHeight || 1) - padY);\n        const naturalWidth = Math.max(1, img.naturalWidth || frameWidth);\n        const naturalHeight = Math.max(1, img.naturalHeight || frameHeight);\n        const naturalRatio = naturalWidth \/ naturalHeight;\n        const frameRatio = frameWidth \/ frameHeight;\n        let renderedWidth = frameWidth;\n        let renderedHeight = frameHeight;\n        if (naturalRatio \u003e frameRatio) {\n          renderedHeight = frameWidth \/ naturalRatio;\n        } else {\n          renderedWidth = frameHeight * naturalRatio;\n        }\n        renderedWidth = Math.max(1, Math.min(frameWidth, renderedWidth));\n        renderedHeight = Math.max(1, Math.min(frameHeight, renderedHeight));\n        return {\n          frameWidth: frameWidth,\n          frameHeight: frameHeight,\n          renderedWidth: renderedWidth,\n          renderedHeight: renderedHeight,\n          naturalRatio: naturalRatio,\n          frameRatio: frameRatio\n        };\n      }\n\n      function setSpotlightCinematicDuration(durationMs) {\n        if (!spotlightMedia) return;\n        const safeDuration = Math.max(220, Math.min(1800, Number(durationMs || 620)));\n        spotlightMedia.style.setProperty('--afb-cine-duration', safeDuration + 'ms');\n      }\n\n      function setSpotlightCinematicImage(url) {\n        if (!url || !cinematicImage || !cinematicBackdrop) return;\n        const previousUrl = cinematicImage.dataset.imageUrl || '';\n        const cssUrl = 'url(\"' + String(url).replace(\/\"\/g, '\\\"') + '\")';\n        cinematicImage.style.backgroundImage = cssUrl;\n        cinematicBackdrop.style.backgroundImage = cssUrl;\n        cinematicImage.dataset.imageUrl = url;\n        if (previousUrl !== url) {\n          spotlightDebug('[CINEMATIC-V2-IMAGE]', 'src=' + url);\n        }\n      }\n\n      function setCinematicZone(zone, left, top, width, height, opacity) {\n        if (!zone) return;\n        zone.style.left = Math.max(0, left || 0).toFixed(1) + 'px';\n        zone.style.top = Math.max(0, top || 0).toFixed(1) + 'px';\n        zone.style.width = Math.max(0, width || 0).toFixed(1) + 'px';\n        zone.style.height = Math.max(0, height || 0).toFixed(1) + 'px';\n        zone.style.opacity = String(Math.max(0, Math.min(1, Number(opacity || 0))));\n      }\n\n      function resetSpotlightCinematicCrop() {\n        if (spotlightMedia) spotlightMedia.classList.remove('is-cinematic-crop');\n        if (cinematicCropFrame) {\n          cinematicCropFrame.style.opacity = '0';\n          cinematicCropFrame.removeAttribute('data-crop-key');\n        }\n        if (cinematicLedFrame) cinematicLedFrame.style.opacity = '0';\n        Object.keys(cinematicDimZones || {}).forEach(function (key) {\n          setCinematicZone(cinematicDimZones[key], 0, 0, 0, 0, 0);\n        });\n        if (cinematicImage) {\n          cinematicImage.style.opacity = '1';\n          cinematicImage.style.filter = '';\n          cinematicImage.style.transformOrigin = '50% 50%';\n          cinematicImage.style.transform = 'scale(1)';\n        }\n        if (cinematicBackdrop) {\n          cinematicBackdrop.style.opacity = '';\n          cinematicBackdrop.style.filter = '';\n        }\n      }\n\n      function getCinematicImageBox(img, media) {\n        const mediaStyle = media \u0026\u0026 window.getComputedStyle ? window.getComputedStyle(media) : null;\n        const padLeft = mediaStyle ? parseFloat(mediaStyle.paddingLeft || 0) : 0;\n        const padTop = mediaStyle ? parseFloat(mediaStyle.paddingTop || 0) : 0;\n        const frameInfo = getSpotlightRenderedImageFrame(img, media);\n        return {\n          left: padLeft + Math.max(0, (frameInfo.frameWidth - frameInfo.renderedWidth) \/ 2),\n          top: padTop + Math.max(0, (frameInfo.frameHeight - frameInfo.renderedHeight) \/ 2),\n          width: frameInfo.renderedWidth,\n          height: frameInfo.renderedHeight,\n          frameWidth: frameInfo.frameWidth,\n          frameHeight: frameInfo.frameHeight,\n          padLeft: padLeft,\n          padTop: padTop,\n          naturalRatio: frameInfo.naturalRatio\n        };\n      }\n\n      function applySpotlightCinematicCrop(beat, durationMs) {\n        if (!spotlightMedia || !spotlightImage || !cinematicCropFrame || !cinematicCropImage || !cinematicImage || !cinematicBackdrop) return false;\n        const frame = normalizeSpotlightRegionFrame(beat \u0026\u0026 beat.frame);\n        if (!frame || !spotlightImage.naturalWidth || !spotlightImage.naturalHeight) return false;\n        const imageUrl = spotlightImage.getAttribute('src') || '';\n        if (!imageUrl) return false;\n        setSpotlightCinematicDuration(durationMs || 620);\n        setSpotlightCinematicImage(imageUrl);\n        const box = getCinematicImageBox(spotlightImage, spotlightMedia);\n        const cropW = Math.max(0.001, frame.x2 - frame.x1);\n        const cropH = Math.max(0.001, frame.y2 - frame.y1);\n        const cropAspect = (cropW * spotlightImage.naturalWidth) \/ Math.max(1, cropH * spotlightImage.naturalHeight);\n        const contentW = Math.max(1, box.frameWidth);\n        const contentH = Math.max(1, box.frameHeight);\n        const maxTargetW = contentW * 0.94;\n        const maxTargetH = contentH * 0.92;\n        let targetW = maxTargetW;\n        let targetH = targetW \/ cropAspect;\n        if (targetH \u003e maxTargetH) {\n          targetH = maxTargetH;\n          targetW = targetH * cropAspect;\n        }\n        targetW = Math.max(42, targetW);\n        targetH = Math.max(42, targetH);\n        const targetLeft = box.padLeft + (contentW - targetW) \/ 2;\n        const targetTop = box.padTop + (contentH - targetH) \/ 2;\n        const renderedW = targetW \/ cropW;\n        const renderedH = renderedW \/ box.naturalRatio;\n        const sourceLeft = box.left + frame.x1 * box.width;\n        const sourceTop = box.top + frame.y1 * box.height;\n        const sourceW = Math.max(20, cropW * box.width);\n        const sourceH = Math.max(20, cropH * box.height);\n        const sourceRenderedW = sourceW \/ cropW;\n        const sourceRenderedH = sourceRenderedW \/ box.naturalRatio;\n        const cropKey = [\n          imageUrl,\n          frame.x1.toFixed(4),\n          frame.y1.toFixed(4),\n          frame.x2.toFixed(4),\n          frame.y2.toFixed(4)\n        ].join('|');\n        const isNewCrop = cinematicCropFrame.dataset.cropKey !== cropKey;\n        cinematicCropFrame.dataset.cropKey = cropKey;\n        cinematicCropImage.src = imageUrl;\n        if (spotlightMedia) spotlightMedia.classList.add('is-cinematic-crop');\n        if (isNewCrop) {\n          cinematicCropFrame.style.left = sourceLeft.toFixed(1) + 'px';\n          cinematicCropFrame.style.top = sourceTop.toFixed(1) + 'px';\n          cinematicCropFrame.style.width = sourceW.toFixed(1) + 'px';\n          cinematicCropFrame.style.height = sourceH.toFixed(1) + 'px';\n          cinematicCropFrame.style.opacity = '1';\n          cinematicCropFrame.style.filter = 'blur(10px) saturate(0.96) brightness(0.95)';\n          cinematicCropFrame.style.transform = 'scale(1.025)';\n          cinematicCropImage.style.width = sourceRenderedW.toFixed(1) + 'px';\n          cinematicCropImage.style.height = sourceRenderedH.toFixed(1) + 'px';\n          cinematicCropImage.style.left = (-frame.x1 * sourceRenderedW).toFixed(1) + 'px';\n          cinematicCropImage.style.top = (-frame.y1 * sourceRenderedH).toFixed(1) + 'px';\n        }\n        requestAnimationFrame(function () {\n          requestAnimationFrame(function () {\n            cinematicCropFrame.style.left = targetLeft.toFixed(1) + 'px';\n            cinematicCropFrame.style.top = targetTop.toFixed(1) + 'px';\n            cinematicCropFrame.style.width = targetW.toFixed(1) + 'px';\n            cinematicCropFrame.style.height = targetH.toFixed(1) + 'px';\n            cinematicCropFrame.style.opacity = '1';\n            cinematicCropFrame.style.filter = 'blur(0) saturate(1) brightness(1)';\n            cinematicCropFrame.style.transform = 'scale(1)';\n            cinematicCropImage.style.width = renderedW.toFixed(1) + 'px';\n            cinematicCropImage.style.height = renderedH.toFixed(1) + 'px';\n            cinematicCropImage.style.left = (-frame.x1 * renderedW).toFixed(1) + 'px';\n            cinematicCropImage.style.top = (-frame.y1 * renderedH).toFixed(1) + 'px';\n          });\n        });\n        const dimOpacity = 0.66;\n        setCinematicZone(cinematicDimZones.top, box.padLeft, box.padTop, contentW, Math.max(0, targetTop - box.padTop), dimOpacity);\n        setCinematicZone(cinematicDimZones.right, targetLeft + targetW, targetTop, Math.max(0, box.padLeft + contentW - (targetLeft + targetW)), targetH, dimOpacity);\n        setCinematicZone(cinematicDimZones.bottom, box.padLeft, targetTop + targetH, contentW, Math.max(0, box.padTop + contentH - (targetTop + targetH)), dimOpacity);\n        setCinematicZone(cinematicDimZones.left, box.padLeft, targetTop, Math.max(0, targetLeft - box.padLeft), targetH, dimOpacity);\n        if (cinematicLedFrame) {\n          cinematicLedFrame.style.left = targetLeft.toFixed(1) + 'px';\n          cinematicLedFrame.style.top = targetTop.toFixed(1) + 'px';\n          cinematicLedFrame.style.width = targetW.toFixed(1) + 'px';\n          cinematicLedFrame.style.height = targetH.toFixed(1) + 'px';\n          cinematicLedFrame.style.opacity = '1';\n        }\n        spotlightDebug(\n          '[CINEMATIC-V2-CROP]',\n          'beat=' + ((beat \u0026\u0026 (beat.id || beat.beatId || beat.beat_id)) || '-') +\n          ' frame=' + frame.x1.toFixed(3) + ',' + frame.y1.toFixed(3) + ',' + frame.x2.toFixed(3) + ',' + frame.y2.toFixed(3) +\n          ' target=' + Math.round(targetW) + 'x' + Math.round(targetH)\n        );\n        hideSpotlightRegionOverlay();\n        return true;\n      }\n\n      function getSpotlightCameraFrameProfile(frameInfo, beat) {\n        const focusId = String((beat \u0026\u0026 beat.id) || '').toLowerCase();\n        const focusText = [\n          focusId,\n          beat \u0026\u0026 beat.label,\n          beat \u0026\u0026 beat.triggerText,\n          beat \u0026\u0026 beat.trigger_text\n        ].join(' ').toLowerCase();\n        const naturalRatio = Number(frameInfo \u0026\u0026 frameInfo.naturalRatio || 1);\n        const frameRatio = Number(frameInfo \u0026\u0026 frameInfo.frameRatio || 1);\n        const renderedWidth = Number(frameInfo \u0026\u0026 frameInfo.renderedWidth || 1);\n        const frameWidth = Number(frameInfo \u0026\u0026 frameInfo.frameWidth || 1);\n        const isTallImageInWideStage = naturalRatio \u003c 0.86 \u0026\u0026 frameRatio \u003e 1.04;\n        const hasSideGutters = renderedWidth \u003c frameWidth * 0.78;\n        const isComparisonBoard = \/(comparison|regular_variant|exclusive_variant|parts|parts_board|swappable|comparacao|comparação|regular|exclusive|deluxe|bonus|bônus)\/.test(focusText);\n        const isFullBodyIntent = \/(full_piece|human_scale|main_character|body|corpo|pose|personagem|heroina|heroína|heroi|herói)\/.test(focusText);\n        const isPrecisionDetail = \/(face|rosto|olhar|eyes|olhos?|mouth|boca|veneno|wound|feriment|weapon|arma|machado|axe|espada|sword|shield|escudo|lasso|laço|laco|armor|armadura|peitoral|finish|acabamento|textur)\/.test(focusText);\n        return {\n          isTallImageInWideStage: isTallImageInWideStage,\n          hasSideGutters: hasSideGutters,\n          isComparisonBoard: isComparisonBoard,\n          isFullBodyIntent: isFullBodyIntent,\n          isPrecisionDetail: isPrecisionDetail\n        };\n      }\n\n      function normalizeSpotlightRegionFrame(rawFrame) {\n        if (!rawFrame || typeof rawFrame !== 'object') return null;\n        let x1 = Number(rawFrame.x1);\n        let y1 = Number(rawFrame.y1);\n        let x2 = Number(rawFrame.x2);\n        let y2 = Number(rawFrame.y2);\n        if (!Number.isFinite(x1) || !Number.isFinite(y1) || !Number.isFinite(x2) || !Number.isFinite(y2)) {\n          const x = Number(rawFrame.x);\n          const y = Number(rawFrame.y);\n          const w = Number(rawFrame.w !== undefined ? rawFrame.w : rawFrame.width);\n          const h = Number(rawFrame.h !== undefined ? rawFrame.h : rawFrame.height);\n          if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(w) || !Number.isFinite(h)) return null;\n          x1 = x;\n          y1 = y;\n          x2 = x + w;\n          y2 = y + h;\n        }\n        if (Math.max(Math.abs(x1), Math.abs(y1), Math.abs(x2), Math.abs(y2)) \u003e 1.5) {\n          x1 \/= 100;\n          y1 \/= 100;\n          x2 \/= 100;\n          y2 \/= 100;\n        }\n        x1 = Math.max(0, Math.min(1, x1));\n        y1 = Math.max(0, Math.min(1, y1));\n        x2 = Math.max(0, Math.min(1, x2));\n        y2 = Math.max(0, Math.min(1, y2));\n        if (x2 \u003c= x1 || y2 \u003c= y1) return null;\n        if ((x2 - x1) \u003e 0.94 \u0026\u0026 (y2 - y1) \u003e 0.94) return null;\n        return { x1: x1, y1: y1, x2: x2, y2: y2 };\n      }\n\n      function hideSpotlightRegionOverlay() {\n        if (!spotlightRegionOverlay) return;\n        spotlightRegionOverlay.classList.remove('is-visible', 'is-led');\n      }\n\n      function applySpotlightRegionOverlay(beat) {\n        if (!spotlightRegionOverlay || !spotlightImage || !spotlightMedia || !beat) return;\n        const frame = normalizeSpotlightRegionFrame(beat.frame);\n        if (!frame) {\n          hideSpotlightRegionOverlay();\n          return;\n        }\n        const frameInfo = getSpotlightRenderedImageFrame(spotlightImage, spotlightMedia);\n        const mediaStyle = window.getComputedStyle ? window.getComputedStyle(spotlightMedia) : null;\n        const padLeft = mediaStyle ? parseFloat(mediaStyle.paddingLeft || 0) : 0;\n        const padTop = mediaStyle ? parseFloat(mediaStyle.paddingTop || 0) : 0;\n        const contentLeft = padLeft + Math.max(0, (Number(frameInfo.frameWidth || 0) - Number(frameInfo.renderedWidth || 0)) \/ 2);\n        const contentTop = padTop + Math.max(0, (Number(frameInfo.frameHeight || 0) - Number(frameInfo.renderedHeight || 0)) \/ 2);\n        const left = contentLeft + frame.x1 * Number(frameInfo.renderedWidth || 1);\n        const top = contentTop + frame.y1 * Number(frameInfo.renderedHeight || 1);\n        const width = Math.max(12, (frame.x2 - frame.x1) * Number(frameInfo.renderedWidth || 1));\n        const height = Math.max(12, (frame.y2 - frame.y1) * Number(frameInfo.renderedHeight || 1));\n        spotlightRegionOverlay.style.left = left.toFixed(1) + 'px';\n        spotlightRegionOverlay.style.top = top.toFixed(1) + 'px';\n        spotlightRegionOverlay.style.width = width.toFixed(1) + 'px';\n        spotlightRegionOverlay.style.height = height.toFixed(1) + 'px';\n        spotlightRegionOverlay.classList.toggle('is-led', \/led|spotlight|highlight|panel|mask|sam|crop\/i.test(String(beat.motionStyle || beat.motion_style || beat.refiner || '') + ' ' + String(beat.maskAvailable ? 'mask' : '')));\n        requestAnimationFrame(function () {\n          if (spotlightRegionOverlay) spotlightRegionOverlay.classList.add('is-visible');\n        });\n      }\n\n      function isSpotlightLedOnlyBeat(beat) {\n        if (!beat) return false;\n        const signal = [\n          beat.ledOnly ? 'led_only' : '',\n          beat.led_only ? 'led_only' : '',\n          beat.cameraMode,\n          beat.camera_mode,\n          beat.motionStyle,\n          beat.motion_style,\n          beat.refiner,\n          beat.id,\n          beat.label\n        ].join(' ').toLowerCase();\n        return \/led[_ -]?only|led[_ -]?region|led[_ -]?panel|panel[_ -]?led|led_panel_crop|technical_board|parts_board|comparison_board\/.test(signal);\n      }\n\n      function resolveSafeSpotlightCameraZoom(beat, frameInfo) {\n        if (isSpotlightLedOnlyBeat(beat)) return 1;\n        const focusId = String((beat \u0026\u0026 beat.id) || '');\n        const focusText = [\n          focusId,\n          beat \u0026\u0026 beat.label,\n          beat \u0026\u0026 beat.triggerText,\n          beat \u0026\u0026 beat.trigger_text\n        ].join(' ').toLowerCase();\n        const requested = Number((beat \u0026\u0026 beat.zoom) || 1);\n        const isWideFrame = focusId === 'full_piece' || focusId === 'human_scale' || focusId === 'comparison';\n        const isPartsFrame = focusId === 'parts' || focusId === 'accessories' || focusId === 'parts_board';\n        const isCloseDetail = \/(face|head|rosto|cabeca|cabeça|olhar|express|eye|eyes|olhos?|hair|cabelo|arma|weapon|regular_weapon|exclusive_weapon|sword|espada|axe|machado|shield|escudo|lasso|laco|laço|rope|corda|blade|lamina|lâmina|armor|armadura|chest|peitoral|textur|finish|acabamento|paint|pintura|detail|detalhe|wound|wounds|feriment|mouth|boca|bocas|veneno|poison|presa|dente)\/.test(focusText);\n        const isMediumDetail = \/(base|creature|criatura|enemy|inimigo|secondary|personagem|body|corpo|pose|parts|accessor|acessor|regular_variant|exclusive_variant)\/.test(focusText);\n        const isNarrowImage = frameInfo \u0026\u0026 frameInfo.naturalRatio \u003c 0.9;\n        const isVeryWideImage = frameInfo \u0026\u0026 frameInfo.naturalRatio \u003e 1.9;\n        const isMobile = !!(window.matchMedia \u0026\u0026 window.matchMedia('(max-width: 680px)').matches);\n        const profile = getSpotlightCameraFrameProfile(frameInfo, beat);\n        let zoomFloor = 1;\n        let zoomCap = isWideFrame ? 1.34 : (isPartsFrame ? 2.05 : 3.25);\n        if (isCloseDetail) {\n          zoomFloor = isMobile ? 1.88 : 2.12;\n          zoomCap = isMobile ? 2.65 : 3.25;\n        } else if (isMediumDetail || isPartsFrame) {\n          zoomFloor = isMobile ? 1.52 : 1.68;\n          zoomCap = isMobile ? 2.18 : 2.50;\n        }\n        if (isNarrowImage) {\n          zoomFloor = Math.min(zoomFloor, isMobile ? 1.72 : 1.92);\n          zoomCap = Math.min(zoomCap, isMobile ? 2.28 : 2.78);\n        }\n        if (profile.isTallImageInWideStage || profile.hasSideGutters) {\n          if (profile.isFullBodyIntent \u0026\u0026 !profile.isPrecisionDetail) {\n            zoomFloor = Math.min(zoomFloor, 1.18);\n            zoomCap = Math.min(zoomCap, isMobile ? 1.54 : 1.68);\n          } else if (profile.isComparisonBoard) {\n            zoomFloor = Math.min(zoomFloor, 1.36);\n            zoomCap = Math.min(zoomCap, isMobile ? 1.86 : 2.04);\n          } else {\n            zoomCap = Math.min(zoomCap, isMobile ? 2.18 : 2.38);\n          }\n        }\n        if (profile.isComparisonBoard \u0026\u0026 !\/(weapon|arma|machado|axe|espada|sword|shield|escudo|lasso|laço|laco)\/.test(focusText)) {\n          zoomCap = Math.min(zoomCap, isMobile ? 1.82 : 2.05);\n        }\n        if (isVeryWideImage \u0026\u0026 isMobile) zoomCap = Math.min(zoomCap, isCloseDetail ? 2.35 : 1.92);\n        if (isMobile \u0026\u0026 isWideFrame) zoomCap = Math.min(zoomCap, 1.18);\n        const resolved = Math.max(zoomFloor, requested);\n        return Math.max(1, Math.min(zoomCap, resolved));\n      }\n\n      function applySpotlightCameraFrame(beat) {\n        if (!spotlightImage || !spotlightMedia || !beat) return;\n        const beatDurationMs = Math.max(\n          320,\n          Math.min(\n            1400,\n            Number(\n              beat.durationMs ||\n              beat.duration_ms ||\n              beat.moveDurationMs ||\n              beat.move_duration_ms ||\n              beat.transitionMs ||\n              beat.transition_ms ||\n              620\n            )\n          )\n        );\n        if (isSpotlightLedOnlyBeat(beat) \u0026\u0026 normalizeSpotlightRegionFrame(beat.frame)) {\n          if (applySpotlightCinematicCrop(beat, beatDurationMs)) return;\n          spotlightDebug('[CINEMATIC-V2-FALLBACK]', 'reason=crop_unavailable beat=' + (beat.id || '-'));\n        }\n        resetSpotlightCinematicCrop();\n        const focusId = String(beat.id || '');\n        const safeMinX = focusId === 'full_piece' || focusId === 'human_scale' || focusId === 'comparison' ? 8 : 14;\n        const safeMaxX = 100 - safeMinX;\n        const safeMinY = focusId === 'full_piece' || focusId === 'human_scale' || focusId === 'comparison' ? 8 : 12;\n        const safeMaxY = 100 - safeMinY;\n        const x = Math.max(safeMinX, Math.min(safeMaxX, Number(beat.x || 50)));\n        const y = Math.max(safeMinY, Math.min(safeMaxY, Number(beat.y || 50)));\n        const frameInfo = getSpotlightRenderedImageFrame(spotlightImage, spotlightMedia);\n        const zoom = resolveSafeSpotlightCameraZoom(beat, frameInfo);\n        setSpotlightCinematicDuration(beatDurationMs);\n        setSpotlightCinematicImage(spotlightImage.getAttribute('src') || '');\n        spotlightImage.style.setProperty('--afb-camera-x', x.toFixed(1) + '%');\n        spotlightImage.style.setProperty('--afb-camera-y', y.toFixed(1) + '%');\n        spotlightImage.style.setProperty('--afb-camera-pan-x', '0px');\n        spotlightImage.style.setProperty('--afb-camera-pan-y', '0px');\n        spotlightImage.style.setProperty('--afb-camera-zoom', zoom.toFixed(2));\n        if (cinematicImage) {\n          cinematicImage.style.transformOrigin = x.toFixed(1) + '% ' + y.toFixed(1) + '%';\n          cinematicImage.style.transform = 'scale(' + zoom.toFixed(2) + ')';\n          spotlightDebug(\n            '[CINEMATIC-V2-ZOOM]',\n            'beat=' + (beat.id || '-') +\n            ' x=' + x.toFixed(1) +\n            ' y=' + y.toFixed(1) +\n            ' zoom=' + zoom.toFixed(2)\n          );\n        }\n        applySpotlightRegionOverlay(beat);\n      }\n\n      function resetSpotlightCameraToFullFrame() {\n        if (!spotlightImage) return;\n        resetSpotlightCinematicCrop();\n        spotlightImage.style.setProperty('--afb-camera-x', '50%');\n        spotlightImage.style.setProperty('--afb-camera-y', '50%');\n        spotlightImage.style.setProperty('--afb-camera-pan-x', '0px');\n        spotlightImage.style.setProperty('--afb-camera-pan-y', '0px');\n        spotlightImage.style.setProperty('--afb-camera-zoom', '1');\n        setSpotlightCinematicImage(spotlightImage.getAttribute('src') || '');\n        if (cinematicImage) {\n          cinematicImage.style.transformOrigin = '50% 50%';\n          cinematicImage.style.transform = 'scale(1)';\n        }\n        hideSpotlightRegionOverlay();\n      }\n\n      function getSpotlightCameraRemainingMs(item) {\n        const syncId = item \u0026\u0026 (item.sourceSegmentId || item.syncId);\n        const timing = getTimingSegment(syncId);\n        if (!timing || !audio) return 7600;\n        const now = Number(audio.currentTime || 0);\n        const start = Number(timing.start || 0);\n        const end = Number(timing.end || 0);\n        const remaining = Math.max(0, end - Math.max(now, start));\n        return Math.max(2600, Math.min(14000, remaining * 1000));\n      }\n\n      function normalizeSpotlightSpeechText(value) {\n        return String(value || '')\n          .normalize('NFD')\n          .replace(\/[̀-ͯ]\/g, '')\n          .toLowerCase()\n          .replace(\/[^a-z0-9]+\/g, ' ')\n          .replace(\/\\s+\/g, ' ')\n          .trim();\n      }\n\n      function getSegmentSpeechText(syncId, item) {\n        const fromItem = String((item \u0026\u0026 item.beatText) || '').trim();\n        if (fromItem) return fromItem;\n        const paragraph = (narrationParagraphEls || []).find(function (el) {\n          return el \u0026\u0026 (el.dataset.syncId || '') === syncId;\n        });\n        return paragraph ? paragraph.textContent || '' : '';\n      }\n\n      function getTimingWordsForSegment(timing) {\n        if (!timing || typeof timing !== 'object') return [];\n        const candidates = [\n          timing.words,\n          timing.word_timings,\n          timing.wordTimings,\n          timing.tokens,\n          timing.alignment,\n          timing.alignments,\n          timing.timings \u0026\u0026 timing.timings.words\n        ];\n        const rawWords = candidates.find(function (value) { return Array.isArray(value) \u0026\u0026 value.length; }) || [];\n        const segmentStart = Number(timing.start || 0);\n        const segmentEnd = Number(timing.end || 0);\n        const duration = Math.max(0.001, segmentEnd - segmentStart);\n        return rawWords\n          .map(function (entry) {\n            if (!entry) return null;\n            const word = String(entry.word || entry.text || entry.token || entry.value || '').trim();\n            if (!word) return null;\n            let start = Number(\n              entry.start !== undefined ? entry.start :\n              entry.start_time !== undefined ? entry.start_time :\n              entry.startTime !== undefined ? entry.startTime :\n              entry.offset !== undefined ? entry.offset :\n              0\n            );\n            let end = Number(\n              entry.end !== undefined ? entry.end :\n              entry.end_time !== undefined ? entry.end_time :\n              entry.endTime !== undefined ? entry.endTime :\n              entry.finish !== undefined ? entry.finish :\n              start\n            );\n            if (Number.isFinite(start) \u0026\u0026 segmentStart \u003e 0 \u0026\u0026 start \u003c segmentStart - 0.25 \u0026\u0026 start \u003c= duration + 0.5) {\n              start += segmentStart;\n              if (Number.isFinite(end)) end += segmentStart;\n            }\n            return {\n              word: word,\n              normalized: normalizeSpotlightSpeechText(word),\n              start: start,\n              end: Number.isFinite(end) ? end : start\n            };\n          })\n          .filter(function (entry) { return entry \u0026\u0026 entry.normalized \u0026\u0026 Number.isFinite(entry.start); });\n      }\n\n      function findTriggerTimeFromWords(timing, triggerText) {\n        const triggerWords = normalizeSpotlightSpeechText(triggerText).split(' ').filter(Boolean);\n        if (!triggerWords.length) return null;\n        const words = getTimingWordsForSegment(timing);\n        if (!words.length) return null;\n        const maxStart = Math.max(0, words.length - triggerWords.length);\n        for (let i = 0; i \u003c= maxStart; i += 1) {\n          let matches = true;\n          for (let j = 0; j \u003c triggerWords.length; j += 1) {\n            const expected = triggerWords[j];\n            const actual = words[i + j] \u0026\u0026 words[i + j].normalized;\n            if (!actual || (actual !== expected \u0026\u0026 actual.indexOf(expected) !== 0 \u0026\u0026 expected.indexOf(actual) !== 0)) {\n              matches = false;\n              break;\n            }\n          }\n          if (matches) return Number(words[i].start || 0);\n        }\n        return null;\n      }\n\n      function uniqueCameraTriggerCandidates(values) {\n        const seen = new Set();\n        const result = [];\n        (values || []).forEach(function (value) {\n          if (Array.isArray(value)) {\n            value.forEach(function (nested) { result.push.apply(result, uniqueCameraTriggerCandidates([nested])); });\n            return;\n          }\n          const text = String(value || '').replace(\/\\s+\/g, ' ').trim();\n          const key = normalizeSpotlightSpeechText(text);\n          if (!key || key.length \u003c 3 || seen.has(key)) return;\n          seen.add(key);\n          result.push(text);\n        });\n        return result;\n      }\n\n      function findTriggerTimeForCameraBeat(timing, beat, item) {\n        if (!timing || !beat) return null;\n        if (beat.startSec !== null \u0026\u0026 Number.isFinite(Number(beat.startSec))) {\n          return Number(beat.startSec);\n        }\n        if (beat.startMs !== null \u0026\u0026 Number.isFinite(Number(beat.startMs))) {\n          return Number(beat.startMs) \/ 1000;\n        }\n        const candidates = uniqueCameraTriggerCandidates([\n          beat.triggerText,\n          beat.triggerTerms,\n          beat.label,\n          beat.motionStyle,\n          item \u0026\u0026 item.startHint,\n          item \u0026\u0026 item.endHint\n        ]);\n        let best = null;\n        candidates.forEach(function (candidate) {\n          const found = findTriggerTimeFromWords(timing, candidate);\n          if (found === null || !Number.isFinite(found)) return;\n          if (best === null || found \u003c best) best = found;\n        });\n        return best;\n      }\n\n      function estimateTriggerTimeFromText(segmentText, timing, triggerText, index, total) {\n        const start = Number(timing \u0026\u0026 timing.start || 0);\n        const end = Number(timing \u0026\u0026 timing.end || 0);\n        const duration = Math.max(0.001, end - start);\n        const normalizedSegment = normalizeSpotlightSpeechText(segmentText);\n        const normalizedTrigger = normalizeSpotlightSpeechText(triggerText);\n        if (normalizedSegment \u0026\u0026 normalizedTrigger) {\n          const position = normalizedSegment.indexOf(normalizedTrigger);\n          if (position \u003e= 0) {\n            const ratio = Math.max(0.06, Math.min(0.92, position \/ Math.max(1, normalizedSegment.length)));\n            return start + duration * ratio;\n          }\n        }\n        const safeTotal = Math.max(1, total || 1);\n        const fallbackRatio = Math.max(0.16, Math.min(0.88, 0.18 + ((index + 1) \/ (safeTotal + 1)) * 0.68));\n        return start + duration * fallbackRatio;\n      }\n\n      function resolveCameraBeatDelayMs(item, beat, index, total) {\n        const syncId = item \u0026\u0026 (item.sourceSegmentId || item.syncId);\n        const timing = getTimingSegment(syncId);\n        if (!timing || !audio) {\n          return Math.max(220, index * 1850);\n        }\n        const now = Number(audio.currentTime || 0);\n        const triggerText = String((beat \u0026\u0026 beat.triggerText) || '').trim();\n        const segmentText = getSegmentSpeechText(syncId, item);\n        let target = findTriggerTimeForCameraBeat(timing, beat, item);\n        if (target === null || !Number.isFinite(target)) {\n          target = estimateTriggerTimeFromText(segmentText, timing, triggerText || beat.label || beat.id, index, total);\n        }\n        const end = Number(timing.end || 0);\n        const start = Number(timing.start || 0);\n        const focusId = String((beat \u0026\u0026 beat.id) || '').toLowerCase();\n        const focusText = [\n          focusId,\n          beat \u0026\u0026 beat.label,\n          beat \u0026\u0026 beat.triggerText,\n          beat \u0026\u0026 beat.trigger_text\n        ].join(' ').toLowerCase();\n        const isWideFrame = focusId === 'full_piece' || focusId === 'human_scale' || focusId === 'comparison';\n        const isDetailBeat = !isWideFrame \u0026\u0026 \/(face|head|rosto|cabeca|cabeça|olhar|express|eye|eyes|olhos?|hair|cabelo|arma|weapon|sword|espada|axe|machado|shield|escudo|lasso|laco|laço|rope|corda|blade|lamina|lâmina|armor|armadura|chest|peitoral|textur|finish|acabamento|paint|pintura|detail|detalhe|creature|criatura|enemy|inimigo|hidra|hydra|base|parts|accessor|acessor)\/.test(focusText);\n        const minOffset = index === 0 \u0026\u0026 isDetailBeat ? SPOTLIGHT_FIRST_DETAIL_ZOOM_DELAY_SECONDS : (isDetailBeat ? SPOTLIGHT_MIN_DETAIL_ZOOM_DELAY_SECONDS : 0.16);\n        target = Math.min(Math.max(start + minOffset, target), Math.max(start + 0.18, end - 0.2));\n        return Math.max(60, Math.round((target - now) * 1000));\n      }\n\n      function startSpotlightCameraMotion(item) {\n        clearSpotlightCameraMotion();\n        const beats = item \u0026\u0026 Array.isArray(item.cameraBeats) ? item.cameraBeats.filter(Boolean).slice(0, 5) : [];\n        if (!beats.length || !spotlightMedia || !spotlightImage) return;\n        spotlightMedia.classList.add('has-camera-motion');\n        const motionKey = item.key || item.beatId || item.syncId || item.image;\n        const firstBeat = beats[0] || null;\n        const firstHasImmediateWideFrame = firstBeat \u0026\u0026 String(firstBeat.id || '') === 'full_piece' \u0026\u0026 !String(firstBeat.triggerText || '').trim();\n        if (firstHasImmediateWideFrame) {\n          requestAnimationFrame(function () {\n            if (activeSpotlightKey !== motionKey) return;\n            applySpotlightCameraFrame(firstBeat);\n          });\n        }\n        const timedBeats = firstHasImmediateWideFrame ? beats.slice(1) : beats;\n        const total = timedBeats.length;\n        const remainingMs = getSpotlightCameraRemainingMs(item);\n        let latestBeatDelay = 0;\n        timedBeats.forEach(function (beat, index) {\n          const fallbackDelay = Math.max(220, Math.min(remainingMs - 220, index * Math.max(1300, remainingMs \/ Math.max(1, total + 1))));\n          const delay = Math.min(Math.max(60, resolveCameraBeatDelayMs(item, beat, index, total)), Math.max(120, remainingMs - 120)) || fallbackDelay;\n          latestBeatDelay = Math.max(latestBeatDelay, delay);\n          const runFrame = function () {\n            if (activeSpotlightKey !== motionKey) return;\n            applySpotlightCameraFrame(beat);\n            spotlightDebug('[SPOTLIGHT-CAMERA]', 'beat=' + (beat.id || '-') + ' trigger=' + (beat.triggerText || '-') + ' delay=' + delay + ' zoom=' + (beat.zoom || 1));\n          };\n          if (delay \u003c= 90) {\n            requestAnimationFrame(runFrame);\n          } else {\n            spotlightCameraTimers.push(setTimeout(runFrame, delay));\n          }\n        });\n        if (timedBeats.length \u0026\u0026 remainingMs \u003e 2600) {\n          const resetDelay = Math.max(\n            latestBeatDelay + 760,\n            remainingMs - Math.round(SPOTLIGHT_EXIT_RESET_SECONDS * 1000)\n          );\n          if (resetDelay \u003c remainingMs - 160) {\n            spotlightCameraTimers.push(setTimeout(function () {\n              if (activeSpotlightKey !== motionKey) return;\n              resetSpotlightCameraToFullFrame();\n              spotlightDebug('[SPOTLIGHT-CAMERA]', 'beat=full_piece_reset trigger=end delay=' + resetDelay + ' zoom=1');\n            }, resetDelay));\n          }\n        }\n      }\n\n      function preloadSpotlightImage(url, callback) {\n        if (!url) {\n          callback();\n          return;\n        }\n        if (spotlightImage \u0026\u0026 spotlightImage.getAttribute('src') === url \u0026\u0026 spotlightImage.complete) {\n          callback(spotlightImage);\n          return;\n        }\n        const probe = new Image();\n        let settled = false;\n        function done() {\n          if (settled) return;\n          settled = true;\n          callback(probe);\n        }\n        probe.onload = function () {\n          if (probe.decode) {\n            probe.decode().catch(function () {}).then(done);\n          } else {\n            done();\n          }\n        };\n        probe.onerror = done;\n        probe.src = url;\n      }\n\n      function resetSpotlightCrossfade() {\n        if (spotlightCrossfadeTimer) {\n          clearTimeout(spotlightCrossfadeTimer);\n          spotlightCrossfadeTimer = null;\n        }\n        if (spotlightPanel) spotlightPanel.classList.remove('is-crossfading');\n        if (spotlightImageNext) {\n          spotlightImageNext.removeAttribute('src');\n          spotlightImageNext.setAttribute('alt', '');\n        }\n      }\n\n      function setSpotlightImageSmooth(item, isSwitching, expectedKey, onReady) {\n        if (!item || !item.image || !spotlightImage) return;\n        const nextAlt = item.alt || item.caption || productTitle || '';\n        const currentSrc = spotlightImage.getAttribute('src') || '';\n        const preserveActiveLayout = !!(\n          spotlightPanel \u0026\u0026\n          spotlightPanel.classList.contains('is-visible') \u0026\u0026\n          currentSrc \u0026\u0026\n          currentSrc !== item.image\n        );\n        const requestKey = expectedKey || item.key || item.beatId || item.syncId || item.image;\n        const notifyReady = function () {\n          if (requestKey \u0026\u0026 activeSpotlightKey \u0026\u0026 activeSpotlightKey !== requestKey) return;\n          if (typeof onReady === 'function') onReady();\n        };\n        if (currentSrc === item.image) {\n          resetSpotlightCrossfade();\n          setSpotlightCinematicImage(item.image);\n          resetSpotlightCinematicCrop();\n          spotlightImage.setAttribute('alt', nextAlt);\n          notifyReady();\n          return;\n        }\n        resetSpotlightCrossfade();\n        preloadSpotlightImage(item.image, function (preloadedImage) {\n          if (requestKey \u0026\u0026 activeSpotlightKey \u0026\u0026 activeSpotlightKey !== requestKey) return;\n          function commitMainImage() {\n            if (requestKey \u0026\u0026 activeSpotlightKey \u0026\u0026 activeSpotlightKey !== requestKey) return;\n            spotlightImage.setAttribute('src', item.image);\n            spotlightImage.setAttribute('alt', nextAlt);\n            applySpotlightImageRatioClass(preloadedImage || spotlightImage);\n            setSpotlightCinematicImage(item.image);\n            resetSpotlightCinematicCrop();\n            notifyReady();\n            spotlightDebug('[SPOTLIGHT-IMAGE-SET]', 'src=' + item.image);\n          }\n\n          if (isSwitching \u0026\u0026 spotlightImageNext \u0026\u0026 spotlightPanel) {\n            spotlightImageNext.setAttribute('src', item.image);\n            spotlightImageNext.setAttribute('alt', nextAlt);\n            const revealNextImage = function () {\n              if (requestKey \u0026\u0026 activeSpotlightKey \u0026\u0026 activeSpotlightKey !== requestKey) return;\n              spotlightPanel.classList.add('is-crossfading');\n              spotlightCrossfadeTimer = setTimeout(function () {\n                spotlightCrossfadeTimer = null;\n                commitMainImage();\n                resetSpotlightCrossfade();\n              }, SPOTLIGHT_CROSSFADE_MS);\n            };\n            if (spotlightImageNext.decode) {\n              spotlightImageNext.decode().catch(function () {}).then(revealNextImage);\n            } else {\n              revealNextImage();\n            }\n            return;\n          }\n\n          commitMainImage();\n        });\n      }\n\n      function getSpotlightShowDelay() {\n        return isMobileNarrationViewport() ? 180 : SPOTLIGHT_SHOW_DELAY_MS;\n      }\n\n      function getNarrationSpotlightShowDelay(syncId, slideCount) {\n        const timing = getTimingSegment(syncId);\n        const durationMs = timing\n          ? Math.max(0, (Number(timing.end || 0) - Number(timing.start || 0)) * 1000)\n          : 0;\n        const baseDelay = getSpotlightShowDelay();\n        const segmentDelay = getSegmentSpotlightDelayMs(syncId);\n        if (!durationMs) return Math.max(baseDelay, segmentDelay);\n        const calmDelay = Math.floor(durationMs * 0.18);\n        const maxDelay = slideCount \u0026\u0026 slideCount \u003e 1 ? 1100 : 1450;\n        return Math.max(baseDelay, segmentDelay, Math.min(maxDelay, calmDelay));\n      }\n\n      function syncSpotlightPanelPlacement(activeEl) {\n        if (!spotlightPanel) return;\n        if (!placeSpotlightAfterActiveNarration(activeEl)) {\n          restoreSpotlightPanelPlacement();\n        }\n        updateDesktopSpotlightPosition(activeEl);\n      }\n\n      function buildNarrationBlocks() {\n        const paragraphs = getNarrationParagraphs();\n        spotlightMap = getNarrationSpotlightMap();\n        preloadSpotlightImages();\n        renderMerchantDetailHotspots();\n        renderActivationCarousel();\n        restoreSpotlightPanelPlacement();\n        narrationCopy.innerHTML = '';\n        narrationParagraphEls = [];\n        spotlightGroupBySyncId = {};\n        stepsWrap.innerHTML = '';\n        stepEls = [];\n\n        paragraphs.forEach(function (item) {\n          const p = document.createElement('p');\n          p.textContent = item.text;\n          p.dataset.syncId = item.id;\n          p.dataset.spotlightGroup = item.spotlightGroup || '';\n          spotlightGroupBySyncId[item.id] = item.spotlightGroup || '';\n          p.classList.add('is-future');\n          if (getSpotlightItemForSyncId(item.id)) p.classList.add('has-spotlight');\n          p.setAttribute('role', 'button');\n          p.setAttribute('tabindex', '0');\n          p.setAttribute('aria-label', 'Voltar para este trecho da narração');\n          p.addEventListener('click', function () {\n            jumpToSyncId(item.id);\n          });\n          p.addEventListener('keydown', function (event) {\n            if (event.key === 'Enter' || event.key === ' ') {\n              event.preventDefault();\n              jumpToSyncId(item.id);\n            }\n          });\n          narrationCopy.appendChild(p);\n          narrationParagraphEls.push(p);\n\n          const step = document.createElement('div');\n          step.className = 'afb-step';\n          step.dataset.syncId = item.id;\n          if (getSpotlightItemForSyncId(item.id) || getVisualBeatsForSyncId(item.id).length) step.classList.add('has-spotlight');\n          step.setAttribute('role', 'button');\n          step.setAttribute('tabindex', '0');\n          step.setAttribute('aria-label', 'Voltar para este trecho da narração');\n          step.addEventListener('click', function () {\n            jumpToSyncId(item.id);\n          });\n          step.addEventListener('keydown', function (event) {\n            if (event.key === 'Enter' || event.key === ' ') {\n              event.preventDefault();\n              jumpToSyncId(item.id);\n            }\n          });\n          stepsWrap.appendChild(step);\n          stepEls.push(step);\n        });\n      }\n\n      function getSpotlightItems() {\n        const seen = {};\n        return Object.keys(spotlightMap || {})\n          .map(function (key) {\n            const item = spotlightMap[key] || {};\n            return {\n              key: key,\n              image: item.image || '',\n              caption: item.caption || 'Detalhe visual destacado na narração'\n            };\n          })\n          .filter(function (item) {\n            if (!item.image || seen[item.image]) return false;\n            seen[item.image] = true;\n            return true;\n          });\n      }\n\n      function openDetailOverlay(image, caption) {\n        if (!detailOverlay || !detailOverlayImage || !detailOverlayCaption || !image) return;\n        detailOverlayImage.src = image;\n        detailOverlayImage.alt = caption || productTitle;\n        detailOverlayCaption.textContent = caption || 'Detalhe visual destacado na narração';\n        detailOverlay.classList.add('is-open');\n        detailOverlay.setAttribute('aria-hidden', 'false');\n      }\n\n      function closeDetailOverlay() {\n        if (!detailOverlay) return;\n        detailOverlay.classList.remove('is-open');\n        detailOverlay.setAttribute('aria-hidden', 'true');\n        if (detailOverlay.dataset.curiosityResume === '1') {\n          detailOverlay.dataset.curiosityResume = '';\n          if (curiosityResumeAfterClose \u0026\u0026 audio \u0026\u0026 audio.src \u0026\u0026 currentTimings) {\n            resumePlayback().catch(function () {});\n          }\n        }\n        curiosityResumeAfterClose = false;\n      }\n\n      function hideCuriosityCue() {\n        if (curiosityCueTimer) {\n          clearTimeout(curiosityCueTimer);\n          curiosityCueTimer = null;\n        }\n        activeCuriosityCue = null;\n        if (curiosityCard) {\n          curiosityCard.hidden = true;\n          curiosityCard.removeAttribute('data-cue-id');\n        }\n      }\n\n      function getCuriosityCueDelayMs(syncId, cue) {\n        const timing = getTimingSegment(syncId);\n        if (!timing || !audio) return 1600;\n        const now = Number(audio.currentTime || 0);\n        const start = Number(timing.start || 0);\n        const end = Number(timing.end || 0);\n        const duration = Math.max(0.001, end - start);\n        let target = cue \u0026\u0026 cue.triggerPhrase ? findTriggerTimeFromWords(timing, cue.triggerPhrase) : null;\n        if (target === null || !Number.isFinite(target)) {\n          const segmentText = getSegmentSpeechText(syncId, null);\n          target = estimateTriggerTimeFromText(segmentText, timing, (cue \u0026\u0026 (cue.triggerPhrase || cue.title || cue.topic)) || '', 0, 1);\n        }\n        target = Math.max(start + Math.min(2.2, duration * 0.28), Math.min(end - 0.35, target || (start + duration * 0.42)));\n        return Math.max(280, Math.round((target - now) * 1000));\n      }\n\n      function showCuriosityCue(cue) {\n        if (!cue || !curiosityCard || !curiosityCardTitle || !curiosityCardTeaser) return;\n        activeCuriosityCue = cue;\n        curiosityCard.dataset.cueId = cue.id || '';\n        if (curiosityCardKicker) curiosityCardKicker.textContent = 'Curiosidade da cena';\n        curiosityCardTitle.textContent = cue.title || 'Curiosidade visual';\n        curiosityCardTeaser.textContent = cue.teaser || 'Toque para abrir uma curiosidade deste detalhe.';\n        curiosityCard.hidden = false;\n      }\n\n      function scheduleCuriosityCue(syncId) {\n        try {\n          hideCuriosityCue();\n          const cue = curiosityCueMap \u0026\u0026 curiosityCueMap[syncId];\n          if (!cue || !cue.image) return;\n          const delay = getCuriosityCueDelayMs(syncId, cue);\n          curiosityCueTimer = setTimeout(function () {\n            try {\n              if (currentActiveIndex \u003c 0) return;\n              const activeEl = narrationParagraphEls[currentActiveIndex];\n              if (!activeEl || (activeEl.dataset.syncId || '') !== syncId) return;\n              showCuriosityCue(cue);\n            } catch (error) {\n              reportVisualRuntimeError('curiosity_timer', error);\n              hideCuriosityCue();\n            }\n          }, delay);\n        } catch (error) {\n          reportVisualRuntimeError('curiosity_schedule', error);\n          hideCuriosityCue();\n        }\n      }\n\n      function openActiveCuriosityCue() {\n        const cue = activeCuriosityCue;\n        if (!cue || !cue.image) return;\n        curiosityResumeAfterClose = !!(audio \u0026\u0026 audio.src \u0026\u0026 !audio.paused \u0026\u0026 !audio.ended);\n        if (curiosityResumeAfterClose) {\n          if (rafId) {\n            cancelAnimationFrame(rafId);\n            rafId = null;\n          }\n          audio.pause();\n          updateButtonState();\n        }\n        if (detailOverlay) detailOverlay.dataset.curiosityResume = curiosityResumeAfterClose ? '1' : '';\n        openDetailOverlay(cue.image, (cue.title || 'Curiosidade visual') + '\\n\\n' + (cue.body || cue.teaser || ''));\n      }\n\n      function isMobileNarrationViewport() {\n        const compactViewport = window.matchMedia \u0026\u0026 window.matchMedia('(max-width: 980px)').matches;\n        const compactRoot = root \u0026\u0026 root.getBoundingClientRect \u0026\u0026 root.getBoundingClientRect().width \u003c= 760;\n        const compactStage = stageCard \u0026\u0026 stageCard.getBoundingClientRect \u0026\u0026 stageCard.getBoundingClientRect().width \u003c= 720;\n        return !!(compactViewport || compactRoot || compactStage);\n      }\n\n      function getMobileViewportHeight() {\n        return (window.visualViewport \u0026\u0026 window.visualViewport.height) || window.innerHeight || 640;\n      }\n\n      function getPageScrollTop() {\n        const scrollingElement = document.scrollingElement || document.documentElement || document.body;\n        return window.pageYOffset || (scrollingElement \u0026\u0026 scrollingElement.scrollTop) || 0;\n      }\n\n      function scrollPageTo(top) {\n        const safeTop = Math.max(0, top || 0);\n        const startTop = getPageScrollTop();\n        try {\n          window.scrollTo({ top: safeTop, behavior: 'smooth' });\n        } catch (error) {\n          window.scrollTo(0, safeTop);\n        }\n        window.setTimeout(function () {\n          const scrollingElement = document.scrollingElement || document.documentElement || document.body;\n          if (!scrollingElement) return;\n          const current = getPageScrollTop();\n          if (Math.abs(current - startTop) \u003c 3 \u0026\u0026 Math.abs(current - safeTop) \u003e 18) {\n            scrollingElement.scrollTop = safeTop;\n          }\n        }, 120);\n      }\n\n      function scrollElementSoftly(element, block) {\n        if (!element || !isMobileNarrationViewport()) return;\n        const rect = element.getBoundingClientRect();\n        const viewportHeight = getMobileViewportHeight();\n        const topSafe = Math.max(76, Math.min(118, viewportHeight * 0.14));\n        const bottomSafe = Math.max(topSafe + 180, viewportHeight * 0.62);\n        const targetTop = block === 'start'\n          ? topSafe\n          : Math.max(topSafe, Math.min(viewportHeight * 0.34, 190));\n\n        if (rect.top \u003e= topSafe \u0026\u0026 rect.top \u003c= bottomSafe) return;\n\n        const delta = rect.top - targetTop;\n        if (Math.abs(delta) \u003c 12) return;\n\n        try {\n          window.scrollBy({ top: delta, behavior: 'smooth' });\n        } catch (error) {\n          window.scrollBy(0, delta);\n        }\n      }\n\n      function scrollElementToMobileTop(element, offset) {\n        if (!element || !isMobileNarrationViewport()) return;\n        const safeOffset = typeof offset === 'number' ? offset : 92;\n        const rect = element.getBoundingClientRect();\n        const absoluteTop = rect.top + getPageScrollTop();\n        const targetTop = Math.max(0, absoluteTop - safeOffset);\n        scrollPageTo(targetTop);\n      }\n\n      function scrollElementToMobileCenter(element) {\n        if (!element || !isMobileNarrationViewport()) return;\n        const rect = element.getBoundingClientRect();\n        const viewportHeight = getMobileViewportHeight();\n        const currentY = getPageScrollTop();\n        const targetTop = Math.max(\n          0,\n          currentY + rect.top - Math.max(72, (viewportHeight - rect.height) \/ 2)\n        );\n        scrollPageTo(targetTop);\n      }\n\n      function getReadingGuideRect(element) {\n        const baseRect = element.getBoundingClientRect();\n        let top = baseRect.top;\n        let bottom = baseRect.bottom;\n        const next = element.nextElementSibling;\n        if (\n          next \u0026\u0026\n          next.classList \u0026\u0026\n          next.classList.contains('afb-narration-spotlight') \u0026\u0026\n          next.classList.contains('is-visible') \u0026\u0026\n          !next.classList.contains('is-exiting')\n        ) {\n          const spotlightRect = next.getBoundingClientRect();\n          top = Math.min(top, spotlightRect.top);\n          bottom = Math.max(bottom, spotlightRect.bottom);\n        }\n        return { top: top, bottom: bottom, height: Math.max(1, bottom - top) };\n      }\n\n      function guideActiveReadingBlock(element) {\n        if (!element || !isMobileNarrationViewport()) return;\n        if (root.classList.contains('is-merchant-outro') || root.classList.contains('is-merchant-hold')) return;\n        const viewportHeight = getMobileViewportHeight();\n        const textRect = element.getBoundingClientRect();\n        const rect = getReadingGuideRect(element);\n        const currentY = getPageScrollTop();\n        const idealTop = Math.max(78, Math.min(124, viewportHeight * 0.17));\n        const minTextTop = Math.max(64, Math.min(98, viewportHeight * 0.11));\n        const comfortableBottom = viewportHeight * 0.84;\n        const tooHigh = textRect.top \u003c minTextTop;\n        const tooLow = textRect.top \u003e viewportHeight * 0.32;\n        const imageCut = rect.bottom \u003e comfortableBottom;\n        if (!tooHigh \u0026\u0026 !tooLow \u0026\u0026 !imageCut) return;\n\n        let targetTop = currentY + textRect.top - idealTop;\n        if (imageCut \u0026\u0026 !tooHigh \u0026\u0026 !tooLow) {\n          const bottomTarget = currentY + rect.bottom - comfortableBottom;\n          const maxTargetKeepingTextVisible = currentY + textRect.top - minTextTop;\n          targetTop = Math.min(bottomTarget, maxTargetKeepingTextVisible);\n        }\n        targetTop = Math.max(0, targetTop);\n        if (Math.abs(targetTop - currentY) \u003c 10) return;\n        scrollPageTo(targetTop);\n      }\n\n      function scrollActiveNarrationIntoView(element) {\n        if (!element || !isMobileNarrationViewport()) return;\n        if (activeScrollTimer) clearTimeout(activeScrollTimer);\n        activeScrollTimer = setTimeout(function () {\n          window.requestAnimationFrame(function () {\n            guideActiveReadingBlock(element);\n            window.setTimeout(function () {\n              if (currentActiveIndex \u003e= 0 \u0026\u0026 narrationParagraphEls[currentActiveIndex] === element) {\n                guideActiveReadingBlock(element);\n              }\n            }, 380);\n            window.setTimeout(function () {\n              if (currentActiveIndex \u003e= 0 \u0026\u0026 narrationParagraphEls[currentActiveIndex] === element) {\n                guideActiveReadingBlock(element);\n              }\n            }, 860);\n          });\n          activeScrollTimer = null;\n        }, 120);\n      }\n\n      function scrollMerchantIntoView() {\n        if (!isMobileNarrationViewport() || merchantScrollDone) return;\n        merchantScrollDone = true;\n        if (merchantScrollTimer) clearTimeout(merchantScrollTimer);\n        merchantScrollTimer = setTimeout(function () {\n          const target = document.getElementById('afb-merchant-panel') || document.getElementById('afb-stage-card');\n          scrollElementToMobileTop(target, 86);\n          merchantScrollTimer = setTimeout(function () {\n            const copyTarget = document.querySelector('#afb-merchant-panel .afb-merchant-copy') || target;\n            scrollElementToMobileTop(copyTarget, 86);\n            merchantScrollTimer = setTimeout(function () {\n              const priceTarget = document.getElementById('afb-merchant-price') || copyTarget;\n              scrollElementToMobileTop(priceTarget, 132);\n              merchantScrollTimer = null;\n            }, 720);\n          }, 680);\n        }, 360);\n      }\n\n      function renderMerchantDetailHotspots() {\n        if (!merchantHotspots) return;\n        const items = getSpotlightItems().slice(0, 4);\n        merchantHotspots.innerHTML = '';\n        merchantHotspots.style.display = items.length ? '' : 'none';\n\n        items.forEach(function (item, index) {\n          const button = document.createElement('button');\n          button.type = 'button';\n          button.className = 'afb-merchant-detail-hotspot';\n          button.setAttribute('aria-label', item.caption || 'Abrir detalhe visual');\n\n          const copy = document.createElement('span');\n          copy.className = 'afb-merchant-detail-hotspot-copy';\n          const title = document.createElement('span');\n          title.className = 'afb-merchant-detail-hotspot-title';\n          title.textContent = 'Detalhe ' + (index + 1);\n          const caption = document.createElement('span');\n          caption.className = 'afb-merchant-detail-hotspot-caption';\n          caption.textContent = item.caption || 'Ver detalhe da peça';\n          copy.appendChild(title);\n          copy.appendChild(caption);\n          button.appendChild(copy);\n\n          button.addEventListener('click', function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n            openDetailOverlay(item.image, item.caption);\n          });\n          merchantHotspots.appendChild(button);\n        });\n      }\n\n      function clearSpotlightTimers() {\n        if (spotlightShowTimer) {\n          clearTimeout(spotlightShowTimer);\n          spotlightShowTimer = null;\n        }\n        if (spotlightHideTimer) {\n          clearTimeout(spotlightHideTimer);\n          spotlightHideTimer = null;\n        }\n        if (spotlightExitTimer) {\n          clearTimeout(spotlightExitTimer);\n          spotlightExitTimer = null;\n        }\n        if (spotlightSlideTimer) {\n          clearTimeout(spotlightSlideTimer);\n          spotlightSlideTimer = null;\n        }\n        if (spotlightIntroExitTimer) {\n          clearTimeout(spotlightIntroExitTimer);\n          spotlightIntroExitTimer = null;\n        }\n        clearSpotlightCameraMotion();\n        resetSpotlightCrossfade();\n      }\n\n      function hideNarrationSpotlight(immediate) {\n        if (!spotlightPanel) return;\n        clearSpotlightTimers();\n        const isIntroExit = !immediate \u0026\u0026 root.classList.contains('is-reading') \u0026\u0026 !root.classList.contains('is-narration-visible');\n        spotlightRequestToken += 1;\n        activeSpotlightKey = '';\n        activeSpotlightGroup = '';\n        activeSpotlightRunId = '';\n        if (spotlightDockAnimation) {\n          try { spotlightDockAnimation.cancel(); } catch (error) {}\n          spotlightDockAnimation = null;\n        }\n\n        if (immediate) {\n          root.classList.remove('is-spotlight-active', 'is-intro-spotlight-exiting');\n          if (stageShell) stageShell.classList.remove('is-spotlight-active');\n          if (spotlightPortal) spotlightPortal.setAttribute('aria-hidden', 'true');\n          spotlightPanel.classList.remove('is-visible', 'is-exiting', 'is-switching', 'is-crossfading', 'is-entering', 'is-docking', 'is-standard', 'is-deluxe', 'is-exclusive', 'is-bonus', 'is-prestige', 'is-definitive', 'is-version-showcase');\n          spotlightPanel.style.removeProperty('--afb-spotlight-version-label');\n          spotlightPanel.setAttribute('aria-hidden', 'true');\n          if (spotlightEvidence) {\n            spotlightEvidence.textContent = '';\n            spotlightEvidence.classList.remove('is-visible');\n          }\n          return;\n        }\n\n        if (!spotlightPanel.classList.contains('is-visible')) {\n          root.classList.remove('is-spotlight-active', 'is-intro-spotlight-exiting');\n          if (stageShell) stageShell.classList.remove('is-spotlight-active');\n          if (spotlightPortal) spotlightPortal.setAttribute('aria-hidden', 'true');\n          spotlightPanel.classList.remove('is-exiting', 'is-switching', 'is-crossfading', 'is-entering', 'is-docking');\n          spotlightPanel.setAttribute('aria-hidden', 'true');\n          return;\n        }\n\n        if (isIntroExit) root.classList.add('is-intro-spotlight-exiting');\n        spotlightPanel.classList.remove('is-visible');\n        spotlightPanel.classList.remove('is-switching', 'is-crossfading', 'is-entering');\n        spotlightPanel.classList.add('is-exiting');\n        spotlightExitTimer = setTimeout(function () {\n          spotlightPanel.classList.remove('is-exiting', 'is-switching', 'is-crossfading', 'is-entering', 'is-docking', 'is-standard', 'is-deluxe', 'is-exclusive', 'is-bonus', 'is-prestige', 'is-definitive', 'is-version-showcase');\n          spotlightPanel.style.removeProperty('--afb-spotlight-version-label');\n          spotlightPanel.setAttribute('aria-hidden', 'true');\n          root.classList.remove('is-spotlight-active', 'is-intro-spotlight-exiting');\n          if (stageShell) stageShell.classList.remove('is-spotlight-active');\n          if (spotlightPortal) spotlightPortal.setAttribute('aria-hidden', 'true');\n          if (spotlightEvidence) {\n            spotlightEvidence.textContent = '';\n            spotlightEvidence.classList.remove('is-visible');\n          }\n          spotlightExitTimer = null;\n        }, SPOTLIGHT_EXIT_MS);\n      }\n\n      function scheduleIntroSpotlightExit(introEnd, current) {\n        if (!spotlightPanel || !introEnd || current \u003e= introEnd) return;\n        if (!root.classList.contains('is-reading') || root.classList.contains('is-narration-visible')) return;\n        if (spotlightIntroExitTimer) return;\n        const exitDelay = Math.max(0, ((introEnd - current) * 1000) - SPOTLIGHT_INTRO_EXIT_EARLY_MS);\n        spotlightIntroExitTimer = setTimeout(function () {\n          spotlightIntroExitTimer = null;\n          if (!root.classList.contains('is-narration-visible')) {\n            hideNarrationSpotlight(false);\n          }\n        }, exitDelay);\n      }\n\n      function showNarrationSpotlight(syncId) {\n        if (!spotlightPanel || !spotlightImage || !spotlightCaption) return;\n        const item = getSpotlightItemForSyncId(syncId);\n        if (!item || !item.image) {\n          hideNarrationSpotlight(false);\n          return;\n        }\n        if (activeSpotlightKey === syncId \u0026\u0026 spotlightPanel.classList.contains('is-visible')) return;\n\n        clearSpotlightTimers();\n        if (spotlightPanel.classList.contains('is-visible')) {\n          spotlightPanel.classList.add('is-exiting', 'is-switching');\n        }\n\n        const requestToken = ++spotlightRequestToken;\n        preloadSpotlightImage(item.image, function () {\n        if (requestToken !== spotlightRequestToken) return;\n        spotlightShowTimer = setTimeout(function () {\n        if (requestToken !== spotlightRequestToken) return;\n        if (spotlightImage.getAttribute('src') !== item.image) {\n          spotlightImage.setAttribute('src', item.image);\n        }\n        applySpotlightImageRatioClass();\n        if (spotlightMedia) {\n          spotlightMedia.setAttribute('data-fit', item.fit || 'contain');\n          spotlightMedia.style.setProperty('--afb-spotlight-bg-image', 'url(\"' + String(item.image || '').replace(\/\"\/g, '\\\"') + '\")');\n        }\n        spotlightImage.setAttribute('alt', item.alt || item.caption || productTitle);\n          spotlightKickerLabel.textContent = item.kicker || 'Detalhe em cena';\n          const isVersionShowcase = item.layout === 'version-showcase';\n          const versionTexts = getSpotlightVersionTexts(item);\n          spotlightPanel.classList.toggle('is-version-showcase', isVersionShowcase);\n          spotlightVersionLabel.textContent = versionTexts.label;\n          spotlightVersionTitle.textContent = item.versionTitle || productVersionTitle || productTitle;\n          spotlightVersionSubtitle.textContent = versionTexts.subtitle;\n          spotlightCaption.textContent = item.caption || 'Detalhe visual destacado na narração';\n          if (spotlightEvidence) {\n            spotlightEvidence.textContent = item.evidence || '';\n            spotlightEvidence.classList.toggle('is-visible', !!item.evidence);\n          }\n          applySpotlightThemeClass(item);\n          spotlightPanel.classList.remove('is-exiting', 'is-switching');\n          spotlightPanel.classList.add('is-visible');\n          spotlightPanel.setAttribute('aria-hidden', 'false');\n          activeSpotlightKey = syncId;\n          spotlightShowTimer = null;\n          updateDesktopSpotlightPosition(currentActiveIndex \u003e= 0 ? narrationParagraphEls[currentActiveIndex] : null);\n\n          if (!root.classList.contains('is-narration-visible')) {\n            spotlightHideTimer = setTimeout(function () {\n              hideNarrationSpotlight(false);\n            }, SPOTLIGHT_HOLD_MS);\n          }\n        }, getSpotlightShowDelay());\n        });\n      }\n\n      function applyNarrationSpotlightSlide(item, requestToken, isSlideChange) {\n        if (!item || !item.image || requestToken !== spotlightRequestToken) return;\n        const currentSrc = spotlightImage ? (spotlightImage.getAttribute('src') || '') : '';\n        const imageChanged = currentSrc \u0026\u0026 currentSrc !== item.image;\n        const nextRunId = getSpotlightVisualRunId(item);\n        const sameRun = nextRunId \u0026\u0026 activeSpotlightRunId \u0026\u0026 nextRunId === activeSpotlightRunId;\n        const shouldCrossfade = !!isSlideChange \u0026\u0026 imageChanged;\n        if (shouldCrossfade \u0026\u0026 !sameRun) spotlightPanel.classList.add('is-switching');\n        preloadSpotlightImage(item.image, function () {\n          if (requestToken !== spotlightRequestToken) return;\n          window.setTimeout(function () {\n            if (requestToken !== spotlightRequestToken) return;\n            const nextKey = item.key || item.beatId || item.syncId || item.image;\n            activeSpotlightKey = nextKey;\n            activeSpotlightRunId = nextRunId || activeSpotlightRunId || nextKey;\n            setSpotlightImageSmooth(\n              item,\n              shouldCrossfade,\n              nextKey,\n              function () {\n                if (activeSpotlightKey === nextKey) startSpotlightCameraMotion(item);\n              }\n            );\n            if (spotlightMedia) {\n              spotlightMedia.setAttribute('data-fit', item.fit || 'contain');\n              spotlightMedia.style.setProperty('--afb-spotlight-bg-image', 'url(\"' + String(item.image || '').replace(\/\"\/g, '\\\"') + '\")');\n            }\n            spotlightKickerLabel.textContent = item.kicker || 'Detalhe em cena';\n            const isVersionShowcase = item.layout === 'version-showcase';\n            const versionTexts = getSpotlightVersionTexts(item);\n            spotlightPanel.classList.toggle('is-version-showcase', isVersionShowcase);\n            spotlightVersionLabel.textContent = versionTexts.label;\n            spotlightVersionTitle.textContent = item.versionTitle || productVersionTitle || productTitle;\n            spotlightVersionSubtitle.textContent = versionTexts.subtitle;\n            spotlightCaption.textContent = item.caption || 'Detalhe visual destacado na narração';\n            if (spotlightEvidence) {\n              spotlightEvidence.textContent = item.evidence || '';\n              spotlightEvidence.classList.toggle('is-visible', !!item.evidence);\n            }\n            applySpotlightThemeClass(item);\n            spotlightPanel.classList.remove('is-exiting', 'is-switching');\n            spotlightPanel.classList.add('is-visible');\n            spotlightPanel.setAttribute('aria-hidden', 'false');\n            if (spotlightPortal) spotlightPortal.setAttribute('aria-hidden', 'false');\n            root.classList.add('is-spotlight-active');\n            if (stageShell) stageShell.classList.add('is-spotlight-active');\n            activeSpotlightKey = item.key || item.beatId || item.syncId || item.image;\n            if (item.spotlightGroup) activeSpotlightGroup = item.spotlightGroup;\n            activeSpotlightRunId = nextRunId || activeSpotlightRunId || activeSpotlightKey;\n            updateDesktopSpotlightPosition(currentActiveIndex \u003e= 0 ? narrationParagraphEls[currentActiveIndex] : null);\n            if (isMobileNarrationViewport() \u0026\u0026 currentActiveIndex \u003e= 0) {\n              window.setTimeout(function () {\n                guideActiveReadingBlock(narrationParagraphEls[currentActiveIndex]);\n              }, 90);\n            }\n            spotlightDebug('[SPOTLIGHT-CARD-STATE]', 'visible=' + spotlightPanel.classList.contains('is-visible') + ' classes=' + spotlightPanel.className);\n          }, 0);\n        });\n      }\n\n      function getNarrationSpotlightSlideInterval(syncId, slideCount) {\n        const safeSlideCount = Math.max(1, slideCount || 1);\n        const fallback = Math.max(2200, Math.floor(SPOTLIGHT_HOLD_MS \/ safeSlideCount));\n        const timing = getTimingSegment(syncId);\n        if (!timing || !slideCount || slideCount \u003c 2) return fallback;\n        const durationMs = Math.max(0, (Number(timing.end || 0) - Number(timing.start || 0)) * 1000);\n        if (!durationMs) return fallback;\n        const showDelay = getNarrationSpotlightShowDelay(syncId, slideCount);\n        const usableMs = Math.max(0, durationMs - showDelay - 520);\n        const dynamicInterval = Math.floor(usableMs \/ safeSlideCount);\n        const softMinimum = durationMs \u003c 5200 ? 1450 : durationMs \u003c 9000 ? 1900 : 2300;\n        const softMaximum = durationMs \u003e 18000 ? 7600 : durationMs \u003e 11000 ? 6200 : 4800;\n        return Math.max(softMinimum, Math.min(softMaximum, dynamicInterval || fallback));\n      }\n\n      function limitNarrationSpotlightSlidesForTiming(syncId, slides) {\n        if (!Array.isArray(slides) || slides.length \u003c 2) return slides || [];\n        const timing = getTimingSegment(syncId);\n        if (!timing) return slides.slice(0, 2);\n        const durationMs = Math.max(0, (Number(timing.end || 0) - Number(timing.start || 0)) * 1000);\n        if (!durationMs) return slides.slice(0, 2);\n        const showDelay = getNarrationSpotlightShowDelay(syncId, slides.length);\n        const usableMs = Math.max(0, durationMs - showDelay - 520);\n        const softMinimum = durationMs \u003c 5200 ? 1450 : durationMs \u003c 9000 ? 1900 : 2300;\n        const maxSlides = Math.max(1, Math.min(slides.length, Math.floor(usableMs \/ softMinimum) + 1));\n        if (maxSlides \u003c slides.length \u0026\u0026 window.console \u0026\u0026 console.debug) {\n          console.debug('[AFB-INTERNAL-SLIDES-TIMING-LIMIT]', {\n            internal_slides_timing_limit_applied: true,\n            segment_id: syncId,\n            original_slide_count: slides.length,\n            rendered_slide_count: maxSlides,\n            reason: 'audio timing protection'\n          });\n        }\n        return slides.slice(0, maxSlides);\n      }\n\n      function scheduleNarrationSpotlightSlides(syncId, slides, requestToken) {\n        if (!Array.isArray(slides) || slides.length \u003c 2) return;\n        const interval = getNarrationSpotlightSlideInterval(syncId, slides.length);\n        let index = 1;\n        function nextSlide() {\n          if (requestToken !== spotlightRequestToken || index \u003e= slides.length) return;\n          applyNarrationSpotlightSlide(slides[index], requestToken, true);\n          index += 1;\n          if (index \u003c slides.length) {\n            spotlightSlideTimer = setTimeout(nextSlide, interval);\n          }\n        }\n        spotlightSlideTimer = setTimeout(nextSlide, interval);\n      }\n\n      showNarrationSpotlight = function(syncId) {\n        if (!spotlightPanel || !spotlightImage || !spotlightCaption) return;\n        const requestedGroup = getSpotlightGroupForSyncId(syncId);\n        const item = getSpotlightItemForSyncId(syncId);\n        if (!item || !item.image) {\n          if (spotlightPanel.classList.contains('is-visible')) {\n            clearSpotlightTimers();\n            activeSpotlightKey = syncId;\n            return;\n          }\n          if (\n            requestedGroup \u0026\u0026\n            activeSpotlightGroup \u0026\u0026\n            requestedGroup === activeSpotlightGroup \u0026\u0026\n            spotlightPanel.classList.contains('is-visible')\n          ) {\n            clearSpotlightTimers();\n            activeSpotlightKey = syncId;\n            return;\n          }\n          hideNarrationSpotlight(false);\n          return;\n        }\n        if (activeSpotlightKey === syncId \u0026\u0026 spotlightPanel.classList.contains('is-visible')) return;\n\n        clearSpotlightTimers();\n        const currentSrc = spotlightImage ? (spotlightImage.getAttribute('src') || '') : '';\n        const nextRunId = getSpotlightVisualRunId(item);\n        const sameImage = currentSrc \u0026\u0026 currentSrc === item.image;\n        const sameRun = nextRunId \u0026\u0026 activeSpotlightRunId \u0026\u0026 nextRunId === activeSpotlightRunId;\n        if (spotlightPanel.classList.contains('is-visible') \u0026\u0026 !sameImage \u0026\u0026 !sameRun) {\n          spotlightPanel.classList.add('is-switching');\n          spotlightPanel.classList.remove('is-exiting');\n        }\n\n        const rawSlides = Array.isArray(item.slides) \u0026\u0026 item.slides.length ? item.slides : [item];\n        const slides = limitNarrationSpotlightSlidesForTiming(syncId, rawSlides);\n        const requestToken = ++spotlightRequestToken;\n        spotlightShowTimer = setTimeout(function () {\n          if (requestToken !== spotlightRequestToken) return;\n          applyNarrationSpotlightSlide(slides[0], requestToken, false);\n          activeSpotlightKey = (slides[0] \u0026\u0026 (slides[0].key || slides[0].beatId || slides[0].syncId || slides[0].image)) || syncId;\n          activeSpotlightGroup = (slides[0] \u0026\u0026 slides[0].spotlightGroup) || item.spotlightGroup || requestedGroup || '';\n          spotlightShowTimer = null;\n          scheduleNarrationSpotlightSlides(syncId, slides, requestToken);\n          if (!(slides[0] \u0026\u0026 slides[0].beatId) \u0026\u0026 !root.classList.contains('is-narration-visible')) {\n            spotlightHideTimer = setTimeout(function () {\n              hideNarrationSpotlight(false);\n            }, SPOTLIGHT_HOLD_MS);\n          }\n        }, getNarrationSpotlightShowDelay(syncId, slides.length));\n      };\n\n      function setActiveNarration(index) {\n        if (!narrationParagraphEls.length) return;\n        currentActiveIndex = index;\n\n        narrationParagraphEls.forEach(function (p, i) {\n          p.classList.remove('is-active', 'is-past', 'is-future');\n          if (i \u003c index) p.classList.add('is-past');\n          else if (i === index) p.classList.add('is-active');\n          else p.classList.add('is-future');\n        });\n\n        stepEls.forEach(function (step, i) {\n          step.classList.remove('is-active', 'is-done');\n          if (i \u003c index) step.classList.add('is-done');\n          else if (i === index) step.classList.add('is-active');\n        });\n\n        const activeEl = narrationParagraphEls[index];\n        const activeSyncId = activeEl ? (activeEl.dataset.syncId || '') : '';\n        clearSpotlightPrehandoff(activeSyncId);\n        const immediateItem = getSpotlightItemForActiveNarration(audio.currentTime || 0, activeSyncId);\n        if (immediateItem \u0026\u0026 immediateItem.image) {\n          syncSpotlightPanelPlacement(activeEl);\n          if (immediateItem.beatId) {\n            applySpotlightItem(immediateItem, { activeSegment: true });\n          } else {\n            showNarrationSpotlight(activeSyncId);\n          }\n        } else {\n          const requestedGroup = getSpotlightGroupForSyncId(activeSyncId);\n          if (\n            requestedGroup \u0026\u0026\n            activeSpotlightGroup \u0026\u0026\n            requestedGroup === activeSpotlightGroup \u0026\u0026\n            spotlightPanel.classList.contains('is-visible')\n          ) {\n            syncSpotlightPanelPlacement(activeEl);\n            activeSpotlightKey = activeSyncId;\n          } else if (spotlightPanel.classList.contains('is-visible')) {\n            clearSpotlightTimers();\n            syncSpotlightPanelPlacement(activeEl);\n            activeSpotlightKey = activeSyncId;\n          } else {\n            hideNarrationSpotlight(false);\n            restoreSpotlightPanelPlacement();\n          }\n        }\n        scheduleCuriosityCue(activeSyncId);\n        scrollActiveNarrationIntoView(activeEl);\n      }\n\n      function clearActiveNarration() {\n        currentActiveIndex = -1;\n        activeSpotlightPrehandoff = null;\n        narrationParagraphEls.forEach(function (p) {\n          p.classList.remove('is-active', 'is-past');\n          p.classList.add('is-future');\n        });\n        stepEls.forEach(function (step) {\n          step.classList.remove('is-active', 'is-done');\n        });\n        hideCuriosityCue();\n        hideNarrationSpotlight(true);\n        restoreSpotlightPanelPlacement();\n      }\n\n      function formatTime(seconds) {\n        const safe = Math.max(0, Math.floor(seconds || 0));\n        const min = Math.floor(safe \/ 60).toString().padStart(2, '0');\n        const sec = Math.floor(safe % 60).toString().padStart(2, '0');\n        return min + ':' + sec;\n      }\n\n      function updateClock() {\n        const current = audio.currentTime || 0;\n        const duration = audio.duration || 0;\n        stageTime.textContent = formatTime(current) + ' \/ ' + formatTime(duration);\n      }\n\n      function getPauseButtonLabels() {\n        const locale = getLocale();\n        if (locale === 'pt-br' || locale === 'pt-pt') {\n          return { pause: 'Pausar áudio', resume: 'Retomar áudio' };\n        }\n        if (locale.indexOf('es-') === 0) {\n          return { pause: 'Pausar audio', resume: 'Reanudar audio' };\n        }\n        if (locale.indexOf('fr-') === 0) {\n          return { pause: 'Mettre en pause', resume: 'Reprendre l’audio' };\n        }\n        if (locale.indexOf('it-') === 0) {\n          return { pause: 'Metti in pausa', resume: 'Riprendi audio' };\n        }\n        if (locale.indexOf('de-') === 0) {\n          return { pause: 'Audio pausieren', resume: 'Audio fortsetzen' };\n        }\n        if (locale.indexOf('ja-') === 0) {\n          return { pause: '一時停止', resume: '再開' };\n        }\n        return { pause: 'Pause audio', resume: 'Resume audio' };\n      }\n\n      function setPauseButtonIcon(pausedState) {\n        if (!pauseBtn) return;\n        if (pausedState) {\n          pauseBtn.innerHTML =\n            '\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\u003e' +\n              '\u003cpath d=\"M9 7.2V16.8L16.6 12L9 7.2Z\" fill=\"currentColor\"\u003e\u003c\/path\u003e' +\n            '\u003c\/svg\u003e';\n          return;\n        }\n        pauseBtn.innerHTML =\n          '\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\u003e' +\n            '\u003cpath d=\"M8 6.5V17.5\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e' +\n            '\u003cpath d=\"M16 6.5V17.5\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e' +\n          '\u003c\/svg\u003e';\n      }\n\n      function updatePauseButtonState() {\n        if (!pauseBtn) return;\n        const labels = getPauseButtonLabels();\n        const canToggle = !isLoading \u0026\u0026 !root.classList.contains('is-merchant-hold') \u0026\u0026 !root.classList.contains('is-ending') \u0026\u0026 !!currentTimings \u0026\u0026 !!audio.src;\n        const pausedState = canToggle \u0026\u0026 !!(audio.paused || audio.ended || isPausedByUser);\n        pauseBtn.disabled = !canToggle;\n        pauseBtn.classList.toggle('is-paused', pausedState);\n        pauseBtn.setAttribute('aria-label', pausedState ? labels.resume : labels.pause);\n        pauseBtn.setAttribute('title', pausedState ? labels.resume : labels.pause);\n        setPauseButtonIcon(pausedState);\n      }\n\n      function getPauseButtonLabels() {\n        const locale = getLocale();\n        if (locale === 'pt-br' || locale === 'pt-pt') {\n          return { pause: 'Pausar áudio', resume: 'Retomar áudio', pauseShort: 'Pausar', resumeShort: 'Retomar' };\n        }\n        if (locale.indexOf('es-') === 0) {\n          return { pause: 'Pausar audio', resume: 'Reanudar audio', pauseShort: 'Pausar', resumeShort: 'Reanudar' };\n        }\n        if (locale.indexOf('fr-') === 0) {\n          return { pause: 'Mettre en pause', resume: 'Reprendre l’audio', pauseShort: 'Pause', resumeShort: 'Reprendre' };\n        }\n        if (locale.indexOf('it-') === 0) {\n          return { pause: 'Metti in pausa', resume: 'Riprendi audio', pauseShort: 'Pausa', resumeShort: 'Riprendi' };\n        }\n        if (locale.indexOf('de-') === 0) {\n          return { pause: 'Audio pausieren', resume: 'Audio fortsetzen', pauseShort: 'Pause', resumeShort: 'Weiter' };\n        }\n        if (locale.indexOf('ja-') === 0) {\n          return { pause: '一時停止', resume: '再開', pauseShort: '停止', resumeShort: '再開' };\n        }\n        return { pause: 'Pause audio', resume: 'Resume audio', pauseShort: 'Pause', resumeShort: 'Resume' };\n      }\n\n      function setPauseButtonIcon(pausedState, labels) {\n        if (!pauseBtn) return;\n        const buttonText = pausedState ? labels.resumeShort : labels.pauseShort;\n        if (pausedState) {\n          pauseBtn.innerHTML =\n            '\u003cspan class=\"afb-audio-pause-btn-icon\" aria-hidden=\"true\"\u003e' +\n              '\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\u003e' +\n                '\u003cpath d=\"M9 7.2V16.8L16.6 12L9 7.2Z\" fill=\"currentColor\"\u003e\u003c\/path\u003e' +\n              '\u003c\/svg\u003e' +\n            '\u003c\/span\u003e' +\n            '\u003cspan class=\"afb-audio-pause-btn-text\"\u003e' + buttonText + '\u003c\/span\u003e';\n          return;\n        }\n        pauseBtn.innerHTML =\n          '\u003cspan class=\"afb-audio-pause-btn-icon\" aria-hidden=\"true\"\u003e' +\n            '\u003csvg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\u003e' +\n              '\u003cpath d=\"M8 6.5V17.5\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e' +\n              '\u003cpath d=\"M16 6.5V17.5\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"\u003e\u003c\/path\u003e' +\n            '\u003c\/svg\u003e' +\n          '\u003c\/span\u003e' +\n          '\u003cspan class=\"afb-audio-pause-btn-text\"\u003e' + buttonText + '\u003c\/span\u003e';\n      }\n\n      function updatePauseButtonState() {\n        if (!pauseBtn) return;\n        const labels = getPauseButtonLabels();\n        const canToggle = !isLoading \u0026\u0026 !root.classList.contains('is-merchant-hold') \u0026\u0026 !root.classList.contains('is-ending') \u0026\u0026 !!currentTimings \u0026\u0026 !!audio.src;\n        const pausedState = canToggle \u0026\u0026 !!(audio.paused || audio.ended || isPausedByUser);\n        pauseBtn.disabled = !canToggle;\n        pauseBtn.classList.toggle('is-paused', pausedState);\n        pauseBtn.setAttribute('aria-label', pausedState ? labels.resume : labels.pause);\n        pauseBtn.setAttribute('title', pausedState ? labels.resume : labels.pause);\n        setPauseButtonIcon(pausedState, labels);\n      }\n\n      function getVoiceKey() {\n        return getLocale() + '-' + (voiceSelect.value || 'epic');\n      }\n\n      function updateButtonState() {\n        const copy = getCopy();\n\n        if (isLoading) {\n          audioBtnLabel.textContent = copy.loading;\n          updatePauseButtonState();\n          return;\n        }\n        if (root.classList.contains('is-merchant-hold')) {\n          audioBtnLabel.textContent = copy.close;\n          updatePauseButtonState();\n          return;\n        }\n        if (!audio.paused \u0026\u0026 !audio.ended) {\n          audioBtnLabel.textContent = copy.stop;\n          updatePauseButtonState();\n          return;\n        }\n        audioBtnLabel.textContent = copy.play;\n        updatePauseButtonState();\n      }\n\n      function getTimingSegment(syncId) {\n        if (!currentTimings || !currentTimings.segments) return null;\n        return currentTimings.segments[syncId] || null;\n      }\n\n      function getVisualTimings() {\n        if (!currentTimings || !currentTimings.segments) return [];\n        return narrationParagraphEls\n          .map(function (el, index) {\n            const syncId = el.dataset.syncId;\n            const timing = getTimingSegment(syncId);\n            if (!timing) return null;\n            return {\n              id: syncId,\n              index: index,\n              role: timing.role || 'narration',\n              start: Number(timing.start || 0),\n              end: Number(timing.end || 0)\n            };\n          })\n          .filter(Boolean);\n      }\n\n      function getIntroTiming() {\n        return getTimingSegment('intro') || {\n          start: Number(currentTimings \u0026\u0026 currentTimings.intro_start || 0),\n          end: Number(currentTimings \u0026\u0026 currentTimings.intro_end || 0)\n        };\n      }\n\n      function getMerchantTiming() {\n        return getTimingSegment('merchant');\n      }\n\n      function getActiveTimingByCurrentTime(current, list) {\n        return (list || []).find(function (item) {\n          return current \u003e= Number(item.start || 0) \u0026\u0026 current \u003c Number(item.end || 0);\n        }) || null;\n      }\n\n      function getNextVisualTiming(active, list) {\n        if (!active || !Array.isArray(list) || !list.length) return null;\n        const activeIndex = Number(active.index || 0);\n        return list.find(function (item) {\n          return Number(item.index || 0) \u003e activeIndex \u0026\u0026 Number(item.start || 0) \u003e Number(active.start || 0);\n        }) || null;\n      }\n\n      function isSpotlightPrehandoffActive(current, activeSyncId) {\n        return !!(\n          activeSpotlightPrehandoff \u0026\u0026\n          activeSpotlightPrehandoff.syncId \u0026\u0026\n          activeSpotlightPrehandoff.syncId !== activeSyncId \u0026\u0026\n          current \u003c Number(activeSpotlightPrehandoff.until || 0)\n        );\n      }\n\n      function clearSpotlightPrehandoff(activeSyncId) {\n        if (!activeSpotlightPrehandoff) return;\n        if (!activeSyncId || activeSpotlightPrehandoff.syncId === activeSyncId) {\n          activeSpotlightPrehandoff = null;\n        }\n      }\n\n      function prepareUpcomingSpotlightHandoff(current, active, visualTimings) {\n        const next = getNextVisualTiming(active, visualTimings);\n        if (!next || !next.id) {\n          activeSpotlightPrehandoff = null;\n          return false;\n        }\n        const secondsUntilNext = Number(next.start || 0) - current;\n        if (secondsUntilNext \u003c= 0 || secondsUntilNext \u003e SPOTLIGHT_PREHANDOFF_SECONDS) return false;\n        const item = getSpotlightItemForActiveNarration(Number(next.start || 0) + 0.04, next.id);\n        if (!item || !item.image) return false;\n        const currentSrc = spotlightImage ? (spotlightImage.getAttribute('src') || '') : '';\n        const nextKey = item.key || item.beatId || item.syncId || item.image;\n        if (currentSrc === item.image \u0026\u0026 activeSpotlightKey === nextKey) return false;\n        activeSpotlightPrehandoff = {\n          syncId: next.id,\n          key: nextKey,\n          until: Number(next.start || 0) + 0.22\n        };\n        spotlightDebug('[SPOTLIGHT-PREHANDOFF]', 'from=' + (active.id || '-') + ' to=' + next.id + ' lead=' + secondsUntilNext.toFixed(2) + ' image=' + item.image);\n        return applySpotlightItem(item, { preHandoff: true, timeline: true });\n      }\n\n      function setMerchantProgress(progress) {\n        const clamped = Math.max(0, Math.min(1, progress || 0));\n        root.style.setProperty('--afb-merchant-progress', String(clamped));\n      }\n\n      function clearActivationTimer() {\n        if (activationLitTimer) {\n          clearTimeout(activationLitTimer);\n          activationLitTimer = null;\n        }\n      }\n\n      function clearTimers() {\n        if (rafId) {\n          cancelAnimationFrame(rafId);\n          rafId = null;\n        }\n        if (holdTimer) {\n          clearTimeout(holdTimer);\n          holdTimer = null;\n        }\n        if (endingTimer) {\n          clearTimeout(endingTimer);\n          endingTimer = null;\n        }\n        if (merchantCountdownInterval) {\n          clearInterval(merchantCountdownInterval);\n          merchantCountdownInterval = null;\n        }\n        if (activeScrollTimer) {\n          clearTimeout(activeScrollTimer);\n          activeScrollTimer = null;\n        }\n        if (merchantScrollTimer) {\n          clearTimeout(merchantScrollTimer);\n          merchantScrollTimer = null;\n        }\n        clearActivationTimer();\n        clearSpotlightTimers();\n        hideCuriosityCue();\n      }\n\n      function resetMerchantCountdown() {\n        merchantCountdownTotal = 40;\n        merchantTimer.classList.remove('is-critical');\n        merchantTimerText.textContent = '00:40';\n      }\n\n      function startMerchantCountdown() {\n        if (merchantCountdownInterval) {\n          clearInterval(merchantCountdownInterval);\n          merchantCountdownInterval = null;\n        }\n        merchantCountdownTotal = 40;\n        resetMerchantCountdown();\n        merchantCountdownInterval = setInterval(function () {\n          if (merchantCountdownTotal \u003e 0) {\n            merchantCountdownTotal -= 1;\n            const mins = Math.floor(merchantCountdownTotal \/ 60);\n            const secs = merchantCountdownTotal % 60;\n            merchantTimerText.textContent =\n              String(mins).padStart(2, '0') + ':' + String(secs).padStart(2, '0');\n            if (merchantCountdownTotal \u003c= 5) merchantTimer.classList.add('is-critical');\n          }\n        }, 1000);\n      }\n\n      function waitForAudioReady() {\n        return new Promise(function (resolve, reject) {\n          if (audio.readyState \u003e= 1) {\n            resolve();\n            return;\n          }\n\n          let settled = false;\n          let timeoutId = null;\n\n          function cleanup() {\n            audio.removeEventListener('loadedmetadata', onReady);\n            audio.removeEventListener('canplay', onReady);\n            audio.removeEventListener('error', onError);\n            if (timeoutId) {\n              clearTimeout(timeoutId);\n              timeoutId = null;\n            }\n          }\n\n          function onReady() {\n            if (settled) return;\n            settled = true;\n            cleanup();\n            resolve();\n          }\n\n          function onError() {\n            if (settled) return;\n            settled = true;\n            cleanup();\n            reject(new Error('Audio metadata failed to load.'));\n          }\n\n          timeoutId = setTimeout(onReady, 2400);\n          audio.addEventListener('loadedmetadata', onReady);\n          audio.addEventListener('canplay', onReady);\n          audio.addEventListener('error', onError);\n        });\n      }\n\n      async function resumePlayback() {\n        if (!currentTimings || !audio.src) {\n          await startPlayback();\n          return;\n        }\n\n        await waitForAudioReady();\n        isPausedByUser = false;\n        await audio.play();\n        updateClock();\n        updatePlaybackUX();\n        updateButtonState();\n        if (!rafId) rafId = requestAnimationFrame(tick);\n      }\n\n      function pausePlayback() {\n        if (audio.paused || audio.ended || !currentTimings) return;\n        if (rafId) {\n          cancelAnimationFrame(rafId);\n          rafId = null;\n        }\n        clearSpotlightTimers();\n        audio.pause();\n        isPausedByUser = true;\n        updateButtonState();\n      }\n\n      async function jumpToSyncId(syncId) {\n        if (!syncId || isLoading) return;\n\n        if (root.classList.contains('is-merchant-hold') || root.classList.contains('is-ending') || !currentTimings || !audio.src) {\n          await startPlayback(syncId);\n          return;\n        }\n\n        const timing = getTimingSegment(syncId);\n        if (!timing) return;\n\n        await waitForAudioReady();\n        try {\n          audio.currentTime = Math.max(0, Number(timing.start || 0) + 0.02);\n        } catch (error) {\n          console.warn('AFB premium narration seek failed', error);\n          return;\n        }\n\n        updateClock();\n        updatePlaybackUX();\n\n        if (audio.paused || audio.ended || isPausedByUser) {\n          await resumePlayback();\n          return;\n        }\n\n        if (!rafId) rafId = requestAnimationFrame(tick);\n      }\n\n      function clearPlaybackUX() {\n        clearTimers();\n        isPausedByUser = false;\n        root.classList.remove(\n          'is-loading',\n          'is-reading',\n          'is-intro-visible',\n          'is-curtain-open',\n          'is-narration-visible',\n          'is-merchant-outro',\n          'is-merchant-hold',\n          'is-ending',\n          'is-preparing-experience',\n          'is-activation-visible',\n          'is-activation-lit',\n          'is-activation-docking',\n          'is-intro-spotlight-exiting'\n        );\n        root.style.setProperty('--afb-merchant-progress', '0');\n        merchantScrollDone = false;\n        setQuoteRevealProgress(0);\n        clearActiveNarration();\n        resetMerchantCountdown();\n        updateClock();\n        updateButtonState();\n        currentTimings = null;\n        currentData = null;\n      }\n\n      function beginEndingUX() {\n        clearTimers();\n        root.classList.remove('is-merchant-hold');\n        root.classList.add('is-ending');\n        endingTimer = setTimeout(function () {\n          audio.pause();\n          try { audio.currentTime = 0; } catch (e) {}\n          clearPlaybackUX();\n        }, ENDING_MS);\n      }\n\n      function beginMerchantHold() {\n        clearTimers();\n        root.classList.add('is-merchant-outro');\n        root.classList.add('is-merchant-hold');\n        root.classList.add('is-narration-visible');\n        root.classList.remove('is-loading');\n        setMerchantProgress(1);\n        clearActiveNarration();\n        scrollMerchantIntoView();\n        startMerchantCountdown();\n        updateButtonState();\n        holdTimer = setTimeout(function () {\n          beginEndingUX();\n        }, MERCHANT_HOLD_MS);\n      }\n\n      function resetAudioOnly() {\n        if (rafId) {\n          cancelAnimationFrame(rafId);\n          rafId = null;\n        }\n        audio.pause();\n        try { audio.currentTime = 0; } catch (e) {}\n      }\n\n      async function prepareAudio() {\n        const segments = getTTSSegments();\n        const voice = getVoiceKey();\n        if (!segments.length) {\n          throw new Error('Nenhum segmento TTS encontrado.');\n        }\n\n        const cacheKey = voice + '__segments__' + JSON.stringify(segments);\n        if (cache.has(cacheKey)) return cache.get(cacheKey);\n\n        const response = await fetch(TTS_ENDPOINT, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application\/json' },\n          body: JSON.stringify({ voz: voice, segments: segments })\n        });\n        if (!response.ok) {\n          throw new Error('Não foi possível gerar o áudio.');\n        }\n        const data = await response.json();\n        cache.set(cacheKey, data);\n        return data;\n      }\n\n      function tick() {\n        try {\n          updateClock();\n        } catch (error) {\n          reportVisualRuntimeError('clock', error);\n        }\n        try {\n          updatePlaybackUX();\n        } catch (error) {\n          reportVisualRuntimeError('playback_ux', error);\n        }\n        if (!audio.paused \u0026\u0026 !audio.ended) {\n          rafId = requestAnimationFrame(tick);\n        }\n      }\n\n      function updatePlaybackUX() {\n        if (!currentTimings) return;\n\n        const current = audio.currentTime || 0;\n        const introTiming = getIntroTiming();\n        const introStart = Number(introTiming.start || 0);\n        const introEnd = Number(introTiming.end || 0);\n\n        if (current \u003e= introStart) {\n          root.classList.add('is-reading');\n          root.classList.add('is-intro-visible');\n        }\n\n        if (current \u003e= introStart + 0.12) {\n          root.classList.add('is-curtain-open');\n        }\n\n        if (introEnd \u003e introStart \u0026\u0026 current \u003c= introEnd) {\n          const introProgress = (current - introStart) \/ Math.max(0.001, introEnd - introStart);\n          setQuoteRevealProgress(Math.max(0, Math.min(1, introProgress)));\n          scheduleIntroSpotlightExit(introEnd, current);\n        } else if (current \u003e introEnd) {\n          setQuoteRevealProgress(1);\n        }\n\n        if (current \u003e introEnd - 0.05) {\n          root.classList.add('is-narration-visible');\n        }\n\n        const merchantTiming = getMerchantTiming();\n        if (merchantTiming \u0026\u0026 current \u003e= Number(merchantTiming.start || 0)) {\n          if (!root.classList.contains('is-merchant-outro')) {\n            resetMerchantCountdown();\n            merchantScrollDone = false;\n          }\n\n          root.classList.add('is-merchant-outro');\n          root.classList.add('is-narration-visible');\n          clearActiveNarration();\n          scrollMerchantIntoView();\n\n          const merchantStart = Number(merchantTiming.start || 0);\n          const merchantEnd = Number(merchantTiming.end || 0);\n          const merchantProgress = (current - merchantStart) \/ Math.max(0.001, merchantEnd - merchantStart);\n          setMerchantProgress(merchantProgress);\n          return;\n        }\n\n        root.classList.remove('is-merchant-outro');\n        root.classList.remove('is-merchant-hold');\n        setMerchantProgress(0);\n\n        const visualTimings = getVisualTimings();\n        const active = getActiveTimingByCurrentTime(current, visualTimings);\n        if (!active) {\n          clearActiveNarration();\n          return;\n        }\n\n        const activeIndex = Number(active.index || 0);\n        if (activeIndex !== currentActiveIndex) {\n          try {\n            setActiveNarration(activeIndex);\n          } catch (error) {\n            reportVisualRuntimeError('set_active_narration', error);\n          }\n        }\n        if (active \u0026\u0026 active.id \u0026\u0026 !isSpotlightPrehandoffActive(current, active.id)) {\n          try {\n            updateVisualBeatSpotlight(current, active.id);\n          } catch (error) {\n            reportVisualRuntimeError('visual_beat_spotlight', error);\n          }\n        }\n        if (active \u0026\u0026 active.id) {\n          try {\n            prepareUpcomingSpotlightHandoff(current, active, visualTimings);\n          } catch (error) {\n            reportVisualRuntimeError('spotlight_handoff', error);\n          }\n        }\n      }\n\n      async function startPlayback(targetSyncId) {\n        if (isLoading) return;\n\n        try {\n          clearTimers();\n          isLoading = true;\n          isPausedByUser = false;\n\n          root.classList.add('is-loading');\n          root.classList.add('is-preparing-experience');\n          root.classList.add('is-activation-visible');\n          root.classList.remove(\n            'is-reading',\n            'is-intro-visible',\n            'is-curtain-open',\n            'is-narration-visible',\n            'is-merchant-outro',\n            'is-merchant-hold',\n            'is-ending',\n            'is-activation-lit',\n            'is-activation-docking',\n            'is-intro-spotlight-exiting'\n          );\n\n          setQuoteRevealProgress(0);\n          clearActiveNarration();\n          setMerchantProgress(0);\n          resetMerchantCountdown();\n          updateUITranslations();\n          updateButtonState();\n\n          window.setTimeout(function () {\n            const activationTarget = activationLabel ? activationLabel.closest('.afb-activation-badge') : stageCard;\n            scrollElementToMobileCenter(activationTarget || stageCard);\n          }, 120);\n\n          activationLitTimer = setTimeout(function () {\n            if (isLoading) root.classList.add('is-activation-lit');\n          }, ACTIVATION_LIT_DELAY_MS);\n\n          const loadingStartedAt = Date.now();\n          const data = await prepareAudio();\n          const elapsed = Date.now() - loadingStartedAt;\n          const remaining = Math.max(0, MIN_PREMIUM_LOADING_MS - elapsed);\n\n          await new Promise(function (resolve) { setTimeout(resolve, remaining); });\n          root.classList.add('is-activation-docking');\n          await new Promise(function (resolve) { setTimeout(resolve, ACTIVATION_DOCKING_MS); });\n\n          currentData = data;\n          currentTimings = data.timings || null;\n          audio.src = data.audio_url;\n          audio.load();\n          await waitForAudioReady();\n          if (targetSyncId) {\n            const targetTiming = getTimingSegment(targetSyncId);\n            if (targetTiming) {\n              try {\n                audio.currentTime = Math.max(0, Number(targetTiming.start || 0) + 0.02);\n              } catch (error) {\n                console.warn('AFB premium narration initial seek failed', error);\n              }\n            }\n          }\n          await audio.play();\n\n          root.classList.remove('is-loading');\n          root.classList.remove('is-preparing-experience');\n          root.classList.remove('is-activation-visible');\n          root.classList.remove('is-activation-lit');\n          root.classList.remove('is-activation-docking');\n          root.classList.remove('is-intro-spotlight-exiting');\n          root.classList.add('is-reading');\n          primeFirstVisualBeat(targetSyncId);\n\n          isLoading = false;\n          updateClock();\n          updatePlaybackUX();\n          updateButtonState();\n          rafId = requestAnimationFrame(tick);\n        } catch (error) {\n          console.error(error);\n          isLoading = false;\n          root.classList.remove('is-loading');\n          root.classList.remove('is-preparing-experience');\n          root.classList.remove('is-activation-visible');\n          root.classList.remove('is-activation-lit');\n          root.classList.remove('is-activation-docking');\n          root.classList.remove('is-intro-spotlight-exiting');\n          resetAudioOnly();\n          clearPlaybackUX();\n          alert('Não foi possível preparar a experiência agora.');\n        }\n      }\n\n      function stopPlayback(manual) {\n        resetAudioOnly();\n        if (manual) beginEndingUX();\n        else clearPlaybackUX();\n      }\n\n      function syncLanguageButton() {\n        if (!langBtn || !langMenu) return;\n        const locale = getLocale();\n        const flagClass = localeFlagClasses[locale] || 'afb-flag-br';\n        langBtn.innerHTML = '\u003cspan class=\"afb-flag ' + flagClass + '\" aria-hidden=\"true\"\u003e\u003c\/span\u003e';\n\n        Array.from(langMenu.querySelectorAll('button[data-value]')).forEach(function (button) {\n          button.classList.toggle('is-selected', button.getAttribute('data-value') === locale);\n        });\n      }\n\n      function rebuildLanguageContent() {\n        buildQuoteWords();\n        buildNarrationBlocks();\n        syncLanguageButton();\n        updateUITranslations();\n        setQuoteRevealProgress(0);\n        clearActiveNarration();\n      }\n\n      if (voiceBox \u0026\u0026 voiceSelect) {\n        ensureVoiceControl();\n\n        if (voiceBtn \u0026\u0026 voiceMenu) {\n          voiceBtn.addEventListener('click', function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n            if (langBox) langBox.classList.remove('is-open');\n            voiceBox.classList.toggle('is-open');\n            syncVoiceControl();\n          });\n\n          Array.from(voiceMenu.querySelectorAll('button[data-value]')).forEach(function (button) {\n            button.addEventListener('click', function (event) {\n              event.preventDefault();\n              event.stopPropagation();\n              const value = button.getAttribute('data-value');\n              if (voiceSelect.querySelector('option[value=\"' + value + '\"]')) {\n                voiceSelect.value = value;\n              }\n              voiceBox.classList.remove('is-open');\n              syncVoiceControl();\n              voiceSelect.dispatchEvent(new Event('change', { bubbles: true }));\n            });\n          });\n        }\n      }\n\n      if (langBtn \u0026\u0026 langBox \u0026\u0026 langMenu \u0026\u0026 langSelect) {\n        langBtn.addEventListener('click', function (event) {\n          event.preventDefault();\n          event.stopPropagation();\n          if (voiceBox) voiceBox.classList.remove('is-open');\n          langBox.classList.toggle('is-open');\n        });\n\n        Array.from(langMenu.querySelectorAll('button[data-value]')).forEach(function (button) {\n          button.addEventListener('click', function (event) {\n            event.preventDefault();\n            event.stopPropagation();\n            const value = button.getAttribute('data-value');\n            if (langSelect.querySelector('option[value=\"' + value + '\"]')) {\n              langSelect.value = value;\n            }\n            langBox.classList.remove('is-open');\n            if (!audio.paused \u0026\u0026 !audio.ended) stopPlayback(true);\n            clearPlaybackUX();\n            rebuildLanguageContent();\n          });\n        });\n\n        document.addEventListener('click', function () {\n          langBox.classList.remove('is-open');\n          if (voiceBox) voiceBox.classList.remove('is-open');\n          syncVoiceControl();\n        });\n      }\n\n      audio.addEventListener('loadedmetadata', function () {\n        updateClock();\n        updatePauseButtonState();\n      });\n\n      audio.addEventListener('ended', function () {\n        isPausedByUser = false;\n        const merchantTiming = getMerchantTiming();\n        if (merchantTiming) {\n          beginMerchantHold();\n          return;\n        }\n        beginEndingUX();\n      });\n\n      audioBtn.addEventListener('click', async function () {\n        if (root.classList.contains('is-merchant-hold')) {\n          beginEndingUX();\n          return;\n        }\n        if (isLoading) return;\n        if (!audio.paused \u0026\u0026 !audio.ended) {\n          stopPlayback(true);\n          return;\n        }\n        if ((audio.paused || audio.ended) \u0026\u0026 currentTimings \u0026\u0026 audio.src \u0026\u0026 isPausedByUser) {\n          await resumePlayback();\n          return;\n        }\n        await startPlayback();\n      });\n\n      if (pauseBtn) {\n        pauseBtn.addEventListener('click', async function () {\n          if (isLoading || root.classList.contains('is-merchant-hold')) return;\n          if (!currentTimings || !audio.src) return;\n          if (!audio.paused \u0026\u0026 !audio.ended) {\n            pausePlayback();\n            return;\n          }\n          await resumePlayback();\n        });\n      }\n\n      voiceSelect.addEventListener('change', function () {\n        syncVoiceControl();\n        updateStageBadge();\n        if (!audio.paused \u0026\u0026 !audio.ended) stopPlayback(true);\n      });\n\n      merchantBtn.addEventListener('click', function () {\n        if (merchantBtn.hasAttribute('data-afb-go-yever')) {\n          window.location.href = checkoutUrl;\n        }\n      });\n\n      if (merchantCustomBtn) {\n        merchantCustomBtn.addEventListener('click', function () {\n          window.location.href = buildCustomPaymentWhatsappUrl();\n        });\n      }\n\n      if (curiosityCard) {\n        curiosityCard.addEventListener('click', function (event) {\n          event.preventDefault();\n          openActiveCuriosityCue();\n        });\n      }\n\n      if (detailOverlayClose) {\n        detailOverlayClose.addEventListener('click', function (event) {\n          event.preventDefault();\n          closeDetailOverlay();\n        });\n      }\n\n      if (detailOverlay) {\n        detailOverlay.addEventListener('click', function (event) {\n          if (event.target === detailOverlay) closeDetailOverlay();\n        });\n      }\n\n      window.addEventListener('resize', function () {\n        const activeEl = currentActiveIndex \u003e= 0 ? narrationParagraphEls[currentActiveIndex] : null;\n        syncSpotlightPanelPlacement(activeEl || null);\n      });\n\n      if (spotlightImage) {\n        spotlightImage.addEventListener('load', applySpotlightImageRatioClass);\n        spotlightImage.addEventListener('error', function () {\n          if (!spotlightMedia) return;\n          ['is-portrait', 'is-landscape', 'is-square', 'is-tall', 'is-wide'].forEach(function (className) {\n            spotlightMedia.classList.remove(className);\n            if (spotlightPanel) spotlightPanel.classList.remove(className);\n          });\n          spotlightMedia.classList.add('is-landscape');\n          if (spotlightPanel) spotlightPanel.classList.add('is-landscape');\n          spotlightMedia.style.setProperty('--afb-spotlight-ratio', '16 \/ 10');\n        });\n      }\n\n      renderMerchantTitleCinematic(productTitle);\n      applyMerchantImageRatioClass();\n      ensureVoiceControl();\n      buildQuoteWords();\n      buildNarrationBlocks();\n      syncLanguageButton();\n      syncVoiceControl();\n      updateUITranslations();\n      updateStageBadge();\n      updateClock();\n      resetMerchantCountdown();\n      updateButtonState();\n      clearPlaybackUX();\n    })();\n  \u003c\/script\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-scroll-reveal afb-ar-card afb-ar-jump-target\" id=\"afb-ar-section\" style=\"background:linear-gradient(135deg,#f6f0ff 0%,#ffffff 100%);border:1px solid #e8daf5;border-radius:20px;padding:22px;margin:0 0 18px 0;box-sizing:border-box;\"\u003e\u003cdiv class=\"afb-ar-inner\"\u003e\n\u003cdiv class=\"afb-ar-text\"\u003e\n\u003cdiv style=\"font-size:19px;font-weight:800;color:#37174f;margin-bottom:8px;\"\u003e🔮 Explore em Realidade Aumentada\u003c\/div\u003e\n\u003cdiv style=\"font-size:14px;color:#5b5563;line-height:1.7;\"\u003eTenha a exata noção da grandiosidade desta peça. Projete a figura no seu próprio ambiente em \u003cstrong\u003eescala real\u003c\/strong\u003e antes de comprar.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-ar-cta\"\u003e\u003ca class=\"afb-ar-btn\" data-ar-android-asset-url=\"https:\/\/ar.actionfigurebrasil.com\/assets\/batman-versus-superman-deluxe-version-908173\/android.glb\" data-ar-android-url=\"https:\/\/ar.actionfigurebrasil.com\/go\/batman-versus-superman-deluxe-version-908173\" data-ar-fallback-url=\"https:\/\/ar.actionfigurebrasil.com\/go\/batman-versus-superman-deluxe-version-908173\" data-ar-ios-asset-url=\"https:\/\/ar.actionfigurebrasil.com\/assets\/batman-versus-superman-deluxe-version-908173\/ios.usdz\" data-ar-ios-url=\"https:\/\/ar.actionfigurebrasil.com\/go\/batman-versus-superman-deluxe-version-908173\" data-ar-preview-url=\"https:\/\/ar.actionfigurebrasil.com\/p\/batman-versus-superman-deluxe-version-908173?embed=1\" data-ar-url=\"https:\/\/ar.actionfigurebrasil.com\/go\/batman-versus-superman-deluxe-version-908173\" href=\"#afb-ar-overlay\" id=\"btn-open-ar\" rel=\"noopener\" style=\"background:linear-gradient(135deg, #4b236a 0%, #37174f 100%);color:#fff;padding:14px 22px;border-radius:999px;font-size:15px;font-weight:800;box-shadow:0 8px 20px rgba(55,23,79,0.20);\"\u003e\u003cspan class=\"afb-icon-float\" style=\"font-size:18px;\"\u003e✨\u003c\/span\u003e\u003cspan\u003eIniciar Experiência AR\u003c\/span\u003e\u003c\/a\u003e\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-scroll-reveal afb-premium-highlights-box\"\u003e\n\u003ch3 class=\"afb-highlights-header\"\u003e\n\u003cspan class=\"afb-icon-star-purple\"\u003e✦\u003c\/span\u003e\u003cspan class=\"afb-title-amethyst\"\u003eDestaques da Peça\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cul class=\"afb-hl-list\"\u003e\u003c\/ul\u003e\n\u003cdiv class=\"afb-limited-card\"\u003e\n\u003cdiv class=\"afb-limited-text\"\u003e\n\u003cstrong\u003eTiragem Restrita Global\u003c\/strong\u003e\u003cspan\u003eDisponibilidade altamente limitada para colecionadores.\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-limited-badge\"\u003e\n\u003cspan\u003e🔥\u003c\/span\u003e Limited: 100\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-scroll-reveal afb-premium-specs-box\"\u003e\n\u003ch3 class=\"afb-highlights-header\"\u003e\n\u003cspan class=\"afb-icon-star-purple\"\u003e✦\u003c\/span\u003e\u003cspan class=\"afb-title-amethyst\"\u003eFicha Técnica\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv class=\"afb-specs-container\"\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003ePersonagem:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003eBatman Superman\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003eMarca:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003eDC Comics\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003eFabricante:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003ePrime 1 Studio\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003eTipo:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003eStatue\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003eMaterial:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003ePolystone\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003eDimensões:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003eAltura: 43\" (109 cm) | Largura: 37.79\" (96 cm) | Profundidade: 29.92\" (76 cm)\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-row-premium\"\u003e\n\u003cstrong\u003ePeso:\u003c\/strong\u003e\u003cspan class=\"afb-spec-value\"\u003e69,9 kg\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-spotlight is-masterline\"\u003e\u003cdiv class=\"afb-spec-spotlight-copy\"\u003e\n\u003cspan class=\"afb-spec-spotlight-badge\"\u003eUltimate Diorama Masterline\u003c\/span\u003e\u003cdiv class=\"afb-spec-spotlight-desc\"\u003eEstátua impressionante de Batman e Superman, perfeita para colecionadores exigentes.\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-spotlight is-masterline\"\u003e\u003cdiv class=\"afb-spec-spotlight-copy\"\u003e\n\u003cspan class=\"afb-spec-spotlight-badge\"\u003eMasterline\u003c\/span\u003e\u003cdiv class=\"afb-spec-spotlight-desc\"\u003eEstátua impressionante de 32 polegadas com detalhes incríveis e acessórios intercambiáveis.\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-spec-spotlight is-deluxe\"\u003e\u003cdiv class=\"afb-spec-spotlight-copy\"\u003e\n\u003cspan class=\"afb-spec-spotlight-badge\"\u003eDeluxe\u003c\/span\u003e\u003cdiv class=\"afb-spec-spotlight-desc\"\u003eAcompanha opcao de arma extra para variar a presenca da peca na colecao.\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-scroll-reveal\" style=\"margin-top:22px;\"\u003e\n\u003cdiv style=\"display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;\"\u003e\n\u003cdiv class=\"afb-feature-card afb-scroll-reveal\" style=\"flex:1 1 200px;background:#f9f9f9;border-radius:12px;padding:14px;box-sizing:border-box;\"\u003e\n\u003cdiv style=\"font-size:14px;font-weight:bold;color:#37174f;margin-bottom:4px;\"\u003e🛡️ Envio Seguro\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#555;\"\u003eLogística tratada com cuidado para colecionáveis premium de grande porte.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-feature-card afb-scroll-reveal\" style=\"flex:1 1 200px;background:#f9f9f9;border-radius:12px;padding:14px;box-sizing:border-box;\"\u003e\n\u003cdiv style=\"font-size:14px;font-weight:bold;color:#37174f;margin-bottom:4px;\"\u003e📍 Rastreamento\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#555;\"\u003eAcompanhamento detalhado do processo até a chegada ao colecionador.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-feature-card afb-scroll-reveal\" style=\"flex:1 1 200px;background:#f9f9f9;border-radius:12px;padding:14px;box-sizing:border-box;\"\u003e\n\u003cdiv style=\"font-size:14px;font-weight:bold;color:#37174f;margin-bottom:4px;\"\u003e💎 Produto Original\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#555;\"\u003eSeleção focada em fabricantes reconhecidos e alto padrão de acabamento.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-feature-card afb-scroll-reveal\" style=\"flex:1 1 200px;background:#f9f9f9;border-radius:12px;padding:14px;box-sizing:border-box;\"\u003e\n\u003cdiv style=\"font-size:14px;font-weight:bold;color:#37174f;margin-bottom:4px;\"\u003e🏛️ Peça de Exposição\u003c\/div\u003e\n\u003cdiv style=\"font-size:12px;color:#555;\"\u003eEscala imponente e visual ideal para coleções de absoluto destaque.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-overlay\" id=\"afb-version-overlay\"\u003e\n\u003ca aria-label=\"Fechar modal\" class=\"afb-overlay-bg\" href=\"#afb-close-target\"\u003e\u003c\/a\u003e\n\u003cdiv class=\"afb-modal-card afb-modal-card-dark\"\u003e\n\u003cbutton class=\"afb-modal-close afb-modal-close-dark\" id=\"btn-close-version\" type=\"button\"\u003e×\u003c\/button\u003e\n\u003ca aria-label=\"Fechar modal\" class=\"afb-modal-close afb-modal-close-dark\" href=\"#afb-close-target\" style=\"z-index:4;\"\u003e×\u003c\/a\u003e\n\u003cdiv class=\"afb-version-modal-body\" style=\"padding: 32px 24px 28px 24px;\"\u003e\n\u003cdiv class=\"afb-version-modal-header\" style=\"display:flex; align-items:center; gap:14px; margin-bottom:20px;\"\u003e\n\u003cdiv class=\"afb-version-modal-icon\" style=\"font-size:32px; filter:drop-shadow(0 2px 4px rgba(0,0,0,0.5));\"\u003e🏆\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"afb-version-modal-kicker\" style=\"font-size:11px; font-weight:800; color:#3b82f6; text-transform:uppercase; letter-spacing:1px;\"\u003eDestaques da Edição\u003c\/div\u003e\n\u003cdiv class=\"afb-version-modal-title\" style=\"font-size:20px; font-weight:800; color:#ffffff; line-height:1.2;\"\u003eBatman Versus Superman\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"margin-bottom: 16px;\"\u003e\u003cspan class=\"afb-simple-pill\"\u003e\u003cspan\u003e🔥\u003c\/span\u003e Limited: 100\u003c\/span\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-version-modal-intro\" style=\"font-size:14px; color:#d1d5db; line-height:1.7; margin-bottom:18px;\"\u003eEsta versao Deluxe concentra os diferenciais reais do set, com itens pensados para transformar o display em uma configuracao mais rara e completa.\u003c\/div\u003e\n\u003cdiv class=\"afb-version-detail-shell\"\u003e\n\u003cul class=\"afb-version-detail-list\"\u003e\n\u003cli class=\"afb-version-detail-item is-weapons\" style=\"--afb-detail-index:0;\"\u003e\n\u003cbutton aria-expanded=\"false\" class=\"afb-version-detail-trigger\" type=\"button\"\u003e\u003cspan aria-hidden=\"true\" class=\"afb-version-detail-dot\"\u003e⚔\u003c\/span\u003e\u003cspan class=\"afb-version-detail-copy\"\u003eAcompanha opcao de arma extra para variar a presenca da peca na colecao.\u003c\/span\u003e\u003cspan class=\"afb-version-detail-action\"\u003eVer detalhe\u003c\/span\u003e\u003c\/button\u003e\u003cdiv aria-hidden=\"true\" class=\"afb-version-detail-popover\" role=\"dialog\"\u003e\n\u003cdiv class=\"afb-version-detail-popover-media\"\u003e\u003cimg alt=\"base\" loading=\"lazy\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bec489fc.jpg\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-version-detail-popover-copy\"\u003e\n\u003cspan class=\"afb-version-detail-popover-kicker\"\u003eArmas\u003c\/span\u003e\u003cstrong\u003eOpcoes de armas\u003c\/strong\u003e\u003cp\u003eAcompanha opcao de arma extra para variar a presenca da peca na colecao.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli class=\"afb-version-detail-item is-parts\" style=\"--afb-detail-index:1;\"\u003e\n\u003cbutton aria-expanded=\"false\" class=\"afb-version-detail-trigger\" type=\"button\"\u003e\u003cspan aria-hidden=\"true\" class=\"afb-version-detail-dot\"\u003e✦\u003c\/span\u003e\u003cspan class=\"afb-version-detail-copy\"\u003eReune partes extras do set para uma montagem mais completa da configuracao especial.\u003c\/span\u003e\u003cspan class=\"afb-version-detail-action\"\u003eVer detalhe\u003c\/span\u003e\u003c\/button\u003e\u003cdiv aria-hidden=\"true\" class=\"afb-version-detail-popover\" role=\"dialog\"\u003e\n\u003cdiv class=\"afb-version-detail-popover-media\"\u003e\u003cimg alt=\"full composition overview with main statue base creature and extra parts\" loading=\"lazy\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd322306.jpg\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-version-detail-popover-copy\"\u003e\n\u003cspan class=\"afb-version-detail-popover-kicker\"\u003ePartes\u003c\/span\u003e\u003cstrong\u003ePartes extras do set\u003c\/strong\u003e\u003cp\u003eReune partes extras do set para uma montagem mais completa da configuracao especial.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli class=\"afb-version-detail-item is-accessories\" style=\"--afb-detail-index:2;\"\u003e\n\u003cbutton aria-expanded=\"false\" class=\"afb-version-detail-trigger\" type=\"button\"\u003e\u003cspan aria-hidden=\"true\" class=\"afb-version-detail-dot\"\u003e◆\u003c\/span\u003e\u003cspan class=\"afb-version-detail-copy\"\u003eAcompanha acessorios extras que valorizam a exibicao e diferenciam esta versao.\u003c\/span\u003e\u003cspan class=\"afb-version-detail-action\"\u003eVer detalhe\u003c\/span\u003e\u003c\/button\u003e\u003cdiv aria-hidden=\"true\" class=\"afb-version-detail-popover\" role=\"dialog\"\u003e\n\u003cdiv class=\"afb-version-detail-popover-media\"\u003e\u003cimg alt=\"full composition overview with main statue base creature and extra parts\" loading=\"lazy\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bd322306.jpg\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-version-detail-popover-copy\"\u003e\n\u003cspan class=\"afb-version-detail-popover-kicker\"\u003eAcessorios\u003c\/span\u003e\u003cstrong\u003eAcessorios extras\u003c\/strong\u003e\u003cp\u003eAcompanha acessorios extras que valorizam a exibicao e diferenciam esta versao.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli class=\"afb-version-detail-item is-limited\" style=\"--afb-detail-index:3;\"\u003e\n\u003cbutton aria-expanded=\"false\" class=\"afb-version-detail-trigger\" type=\"button\"\u003e\u003cspan aria-hidden=\"true\" class=\"afb-version-detail-dot\"\u003e●\u003c\/span\u003e\u003cspan class=\"afb-version-detail-copy\"\u003eRecebe tiragem restrita marcada como Limited: 100, reforcando o apelo de colecao.\u003c\/span\u003e\u003cspan class=\"afb-version-detail-action\"\u003eVer detalhe\u003c\/span\u003e\u003c\/button\u003e\u003cdiv aria-hidden=\"true\" class=\"afb-version-detail-popover\" role=\"dialog\"\u003e\n\u003cdiv class=\"afb-version-detail-popover-media\"\u003e\u003cimg alt=\"Tiragem e raridade\" loading=\"lazy\" src=\"https:\/\/www.sideshow.com\/storage\/product-images\/908173\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bed555a4.jpg\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-version-detail-popover-copy\"\u003e\n\u003cspan class=\"afb-version-detail-popover-kicker\"\u003eLimitada\u003c\/span\u003e\u003cstrong\u003eTiragem e raridade\u003c\/strong\u003e\u003cp\u003eRecebe tiragem restrita marcada como Limited: 100, reforcando o apelo de colecao.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"afb-overlay\" id=\"afb-ar-overlay\"\u003e\u003cdiv class=\"afb-modal-card afb-ar-modal-card\"\u003e\n\u003cbutton class=\"afb-modal-close\" id=\"btn-close-ar\" type=\"button\"\u003e×\u003c\/button\u003e\u003cdiv class=\"afb-ar-modal-body\"\u003e\n\u003cdiv class=\"afb-ar-demo-panel\"\u003e\u003ciframe allow=\"xr-spatial-tracking; web-share\" class=\"afb-ar-preview-frame\" loading=\"eager\" referrerpolicy=\"strict-origin-when-cross-origin\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-top-navigation-by-user-activation\" src=\"https:\/\/ar.actionfigurebrasil.com\/p\/batman-versus-superman-deluxe-version-908173?embed=1\" title=\"Preview 3D em realidade aumentada\"\u003e\u003c\/iframe\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-ar-scan-panel\"\u003e\n\u003cdiv class=\"afb-ar-modal-title\"\u003e📱 Veja esta peça no seu ambiente\u003c\/div\u003e\n\u003cdiv class=\"afb-ar-modal-desc\"\u003eEscaneie o QR Code com seu celular. Ele abre pelo Worker inteligente e entrega o AR certo para iPhone, iPad ou Android.\u003c\/div\u003e\n\u003cdiv class=\"afb-ar-qr-box\"\u003e\u003cimg alt=\"QR Code para visualização AR\" data-ar-qr-image=\"1\" src=\"https:\/\/api.qrserver.com\/v1\/create-qr-code\/?size=320x320\u0026amp;data=https%3A%2F%2Far.actionfigurebrasil.com%2Fgo%2Fbatman-versus-superman-deluxe-version-908173\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"afb-ar-safe-note\"\u003eNo desktop, a experiencia fica protegida no QR Code. No celular, o botao abre direto a realidade aumentada.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\u003c\/div\u003e\n\u003cscript\u003e\n  document.addEventListener('DOMContentLoaded', function() {\n    \/\/ Pega os elementos pelo ID\n    const btnOpenVersion = document.getElementById('btn-open-version');\n    const btnCloseVersion = document.getElementById('btn-close-version');\n    const modalVersion = document.getElementById('afb-version-overlay');\n\n    \/\/ Se o botão e o modal existirem na página\n    if (btnOpenVersion \u0026\u0026 modalVersion) {\n      \n      \/\/ 1. Abrir o modal ao clicar no card\n      btnOpenVersion.addEventListener('click', function() {\n      });\n\n      \/\/ 2. Fechar o modal ao clicar no 'X'\n      if (btnCloseVersion) {\n        btnCloseVersion.addEventListener('click', function(e) {\n          e.preventDefault();\n          window.location.hash = 'afb-close-target';\n        });\n      }\n\n      \/\/ 3. Fechar o modal ao clicar fora da caixinha (no fundo escuro)\n      modalVersion.addEventListener('click', function(e) {\n        if (e.target === modalVersion) {\n          window.location.hash = 'afb-close-target';\n        }\n      });\n      \n      btnOpenVersion.addEventListener('keydown', function(e) {\n        if (e.key === ' ') {\n          e.preventDefault();\n          window.location.hash = 'afb-version-overlay';\n        }\n      });\n\n      const versionDetailItems = Array.from(modalVersion.querySelectorAll('.afb-version-detail-item'));\n\n      function closeVersionDetailItems() {\n        versionDetailItems.forEach(function(item) {\n          const trigger = item.querySelector('.afb-version-detail-trigger');\n          const popover = item.querySelector('.afb-version-detail-popover');\n          item.classList.remove('is-open');\n          if (trigger) trigger.setAttribute('aria-expanded', 'false');\n          if (popover) popover.setAttribute('aria-hidden', 'true');\n        });\n      }\n\n      function openVersionDetailItem(item) {\n        const trigger = item.querySelector('.afb-version-detail-trigger');\n        const popover = item.querySelector('.afb-version-detail-popover');\n        closeVersionDetailItems();\n        item.classList.add('is-open');\n        if (trigger) trigger.setAttribute('aria-expanded', 'true');\n        if (popover) popover.setAttribute('aria-hidden', 'false');\n      }\n\n      versionDetailItems.forEach(function(item) {\n        const trigger = item.querySelector('.afb-version-detail-trigger');\n        const popover = item.querySelector('.afb-version-detail-popover');\n        if (!trigger || !popover) return;\n\n        trigger.addEventListener('click', function(e) {\n          e.preventDefault();\n          e.stopPropagation();\n          const wasOpen = item.classList.contains('is-open');\n          closeVersionDetailItems();\n          if (!wasOpen) openVersionDetailItem(item);\n        });\n\n        trigger.addEventListener('mouseenter', function() {\n          popover.setAttribute('aria-hidden', 'false');\n        });\n\n        trigger.addEventListener('mouseleave', function() {\n          if (!item.classList.contains('is-open')) popover.setAttribute('aria-hidden', 'true');\n        });\n\n        trigger.addEventListener('focus', function() {\n          popover.setAttribute('aria-hidden', 'false');\n        });\n\n        trigger.addEventListener('blur', function() {\n          window.setTimeout(function() {\n            if (!item.classList.contains('is-open')) popover.setAttribute('aria-hidden', 'true');\n          }, 120);\n        });\n      });\n\n      modalVersion.addEventListener('click', function(e) {\n        if (!e.target.closest('.afb-version-detail-item')) {\n          closeVersionDetailItems();\n        }\n      });\n    }\n\n    \/\/ REGRA FIXA DO AR:\n    \/\/ - Desktop sempre abre o modal com QR Code\n    \/\/ - Mobile sempre redireciona pela URL inteligente do Worker (\/go)\n    \/\/ - O HTML evita expor download direto como destino principal\n    const isMobile = \/Android|iPhone|iPad|iPod|Mobile\/i.test(navigator.userAgent || '');\n    const modalAR = document.getElementById('afb-ar-overlay');\n    const btnAR = document.getElementById('btn-open-ar');\n    const btnCloseAR = document.getElementById('btn-close-ar');\n    const arDemoButtons = modalAR ? Array.from(modalAR.querySelectorAll('[data-ar-focus-qr]')) : [];\n    const arPreviewFrame = modalAR ? modalAR.querySelector('.afb-ar-preview-frame') : null;\n    const arLocaleTexts = {\n      pt: {\n        cardTitle: 'Explore em Realidade Aumentada',\n        cardDesc: 'Tenha a exata noção da grandiosidade desta peça. Projete a figura no seu próprio ambiente em escala real antes de comprar.',\n        cardButton: 'Iniciar Experiência AR',\n        modalTitle: 'Veja esta peça no seu ambiente',\n        modalDesc: 'Escaneie o QR Code com seu celular. Ele abre pelo Worker inteligente e entrega o AR certo para iPhone, iPad ou Android.',\n        safeNote: 'No desktop, a experiência fica protegida no QR Code. No celular, o botão abre direto a realidade aumentada.',\n        scanCue: 'Aponte o celular para o QR Code',\n        qrAlt: 'QR Code para visualização AR',\n        previewFrameTitle: 'Preview 3D em realidade aumentada',\n        closeLabel: 'Fechar'\n      },\n      es: {\n        cardTitle: 'Explora en Realidad Aumentada',\n        cardDesc: 'Entiende el tamaño real de esta pieza. Proyecta la figura en tu propio ambiente a escala real antes de comprar.',\n        cardButton: 'Iniciar experiencia AR',\n        modalTitle: 'Mira esta pieza en tu ambiente',\n        modalDesc: 'Escanea el QR Code con tu celular. Se abre por el Worker inteligente y entrega el AR correcto para iPhone, iPad o Android.',\n        safeNote: 'En computadora, la experiencia queda protegida en el QR Code. En celular, el botón abre directo la realidad aumentada.',\n        scanCue: 'Apunta el celular al QR Code',\n        qrAlt: 'QR Code para abrir realidad aumentada',\n        previewFrameTitle: 'Vista previa 3D en realidad aumentada',\n        closeLabel: 'Cerrar'\n      },\n      en: {\n        cardTitle: 'Explore in Augmented Reality',\n        cardDesc: 'Understand the real scale of this piece. Project the figure into your own room at real size before buying.',\n        cardButton: 'Start AR Experience',\n        modalTitle: 'See this piece in your space',\n        modalDesc: 'Scan the QR Code with your phone. The smart Worker opens the right AR experience for iPhone, iPad, or Android.',\n        safeNote: 'On desktop, the experience stays protected behind the QR Code. On mobile, the button opens augmented reality directly.',\n        scanCue: 'Point your phone at the QR Code',\n        qrAlt: 'QR Code to open augmented reality',\n        previewFrameTitle: '3D augmented reality preview',\n        closeLabel: 'Close'\n      }\n    };\n\n    function detectARBrowserLocale() {\n      const languages = navigator.languages \u0026\u0026 navigator.languages.length ? navigator.languages : [navigator.language || ''];\n      for (let i = 0; i \u003c languages.length; i += 1) {\n        const tag = String(languages[i] || '').toLowerCase();\n        if (tag === 'pt' || tag.indexOf('pt-') === 0) return 'pt';\n        if (tag === 'es' || tag.indexOf('es-') === 0) return 'es';\n        if (tag === 'en' || tag.indexOf('en-') === 0) return 'en';\n      }\n      return 'pt';\n    }\n\n    function setARText(el, value) {\n      if (el \u0026\u0026 typeof value === 'string' \u0026\u0026 value) el.textContent = value;\n    }\n\n    function applyARLocalizedTexts(texts) {\n      texts = texts || arLocaleTexts[detectARBrowserLocale()] || arLocaleTexts.pt;\n      const arCard = document.getElementById('afb-ar-section');\n      if (arCard) {\n        setARText(arCard.querySelector('.afb-ar-text \u003e div:first-child'), texts.cardTitle);\n        setARText(arCard.querySelector('.afb-ar-text \u003e div:nth-child(2)'), texts.cardDesc);\n      }\n      if (btnAR) setARText(btnAR.querySelector('span:last-child'), texts.cardButton);\n      if (btnCloseAR \u0026\u0026 texts.closeLabel) btnCloseAR.setAttribute('aria-label', texts.closeLabel);\n      if (arPreviewFrame \u0026\u0026 texts.previewFrameTitle) arPreviewFrame.setAttribute('title', texts.previewFrameTitle);\n      if (!modalAR) return;\n      setARText(modalAR.querySelector('.afb-ar-modal-title'), texts.modalTitle);\n      setARText(modalAR.querySelector('.afb-ar-modal-desc'), texts.modalDesc);\n      setARText(modalAR.querySelector('.afb-ar-safe-note'), texts.safeNote);\n      setARText(modalAR.querySelector('.afb-ar-phone-cue-text'), texts.scanCue);\n      const qrImage = modalAR.querySelector('[data-ar-qr-image]');\n      if (qrImage \u0026\u0026 texts.qrAlt) qrImage.setAttribute('alt', texts.qrAlt);\n    }\n\n    function isTrustedARLocaleOrigin(origin) {\n      return !origin || origin === 'https:\/\/ar.actionfigurebrasil.com';\n    }\n\n    function resolveARMobileUrl(buttonEl) {\n      if (!buttonEl) return '';\n      const smartUrl = buttonEl.getAttribute('data-ar-url') || buttonEl.getAttribute('href') || '';\n      if (smartUrl \u0026\u0026 smartUrl !== '#') return smartUrl;\n      return buttonEl.getAttribute('data-ar-fallback-url') || '';\n    }\n\n    function syncAROverlayQRCode(url) {\n      if (!modalAR || !url) return;\n      const qrImage = modalAR.querySelector('[data-ar-qr-image]');\n      if (!qrImage) return;\n      qrImage.src = 'https:\/\/api.qrserver.com\/v1\/create-qr-code\/?size=320x320\u0026data=' + encodeURIComponent(url);\n    }\n\n    function ensureARPhoneCue() {\n      if (!modalAR) return null;\n      const scanPanel = modalAR.querySelector('.afb-ar-scan-panel');\n      if (!scanPanel) return null;\n      let cue = scanPanel.querySelector('.afb-ar-phone-cue');\n      if (cue) return cue;\n      cue = document.createElement('div');\n      cue.className = 'afb-ar-phone-cue';\n      cue.setAttribute('aria-hidden', 'true');\n      cue.innerHTML = '\u003cdiv class=\"afb-ar-phone-cue-icon\"\u003e\u003cspan class=\"afb-ar-phone-body\"\u003e\u003c\/span\u003e\u003cspan class=\"afb-ar-phone-hand-shape\"\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cspan class=\"afb-ar-phone-cue-text\"\u003e\u003c\/span\u003e';\n      scanPanel.appendChild(cue);\n      applyARLocalizedTexts();\n      return cue;\n    }\n\n    function pulseARQRCode() {\n      if (!modalAR) return;\n      const qrBox = modalAR.querySelector('.afb-ar-qr-box');\n      const scanPanel = modalAR.querySelector('.afb-ar-scan-panel');\n      const phoneCue = ensureARPhoneCue();\n      [qrBox, scanPanel].forEach(function(el) {\n        if (!el) return;\n        el.classList.remove('is-qr-pulse');\n        void el.offsetWidth;\n        el.classList.add('is-qr-pulse');\n      });\n      if (phoneCue) {\n        phoneCue.classList.remove('is-visible');\n        void phoneCue.offsetWidth;\n        phoneCue.classList.add('is-visible');\n      }\n      if (scanPanel \u0026\u0026 scanPanel.scrollIntoView) {\n        scanPanel.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\n      }\n      window.setTimeout(function() {\n        [qrBox, scanPanel].forEach(function(el) {\n          if (el) el.classList.remove('is-qr-pulse');\n        });\n        if (phoneCue) phoneCue.classList.remove('is-visible');\n      }, 3600);\n    }\n\n    function handleARFocusQRCode() {\n      pulseARQRCode();\n    }\n\n    applyARLocalizedTexts();\n\n    arDemoButtons.forEach(function(button) {\n      button.addEventListener('click', function(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        handleARFocusQRCode();\n      });\n    });\n\n    window.addEventListener('message', function(event) {\n      const payload = event ? event.data : null;\n      const messageType = typeof payload === 'string' ? payload : (payload \u0026\u0026 (payload.type || payload.event));\n      if (messageType === 'AFB_AR_LOCALE') {\n        if (isTrustedARLocaleOrigin(event.origin) \u0026\u0026 payload \u0026\u0026 payload.texts) applyARLocalizedTexts(payload.texts);\n        return;\n      }\n      if (messageType !== 'AFB_AR_FOCUS_QR') return;\n      handleARFocusQRCode();\n    });\n\n    function ensureAROverlayViewportLayer() {\n      if (!modalAR || modalAR.parentNode === document.body) return;\n      document.body.appendChild(modalAR);\n    }\n\n    if (btnAR \u0026\u0026 modalAR) {\n      ensureAROverlayViewportLayer();\n      btnAR.addEventListener('click', function(e) {\n        e.preventDefault();\n        const arUrl = resolveARMobileUrl(btnAR);\n        if (isMobile) {\n          if (arUrl) {\n            window.location.href = arUrl;\n          }\n          return;\n        }\n        ensureAROverlayViewportLayer();\n        syncAROverlayQRCode(arUrl);\n        const previewUrl = btnAR.getAttribute('data-ar-preview-url') || '';\n        if (arPreviewFrame \u0026\u0026 previewUrl \u0026\u0026 arPreviewFrame.getAttribute('src') !== previewUrl) {\n          arPreviewFrame.setAttribute('src', previewUrl);\n        }\n        modalAR.classList.add('is-open');\n        window.setTimeout(pulseARQRCode, 220);\n      });\n\n      if (btnCloseAR) {\n        btnCloseAR.addEventListener('click', function() {\n          modalAR.classList.remove('is-open');\n        });\n      }\n\n      modalAR.addEventListener('click', function(e) {\n        if (e.target === modalAR) {\n          modalAR.classList.remove('is-open');\n        }\n      });\n    }\n\n    const mainContainer = document.getElementById('afb-main-container');\n    const isEditor = window.Shopify \u0026\u0026 window.Shopify.designMode;\n    if (!isEditor \u0026\u0026 mainContainer \u0026\u0026 'IntersectionObserver' in window) {\n      mainContainer.classList.add('is-ready-for-scroll');\n      const reveals = mainContainer.querySelectorAll('.afb-scroll-reveal, .afb-title-wow');\n      const observer = new IntersectionObserver(function(entries, obs) {\n        entries.forEach(function(entry) {\n          if (entry.isIntersecting) {\n            entry.target.classList.add('is-visible');\n            obs.unobserve(entry.target);\n          }\n        });\n      }, { root: null, rootMargin: '0px', threshold: 0.01 });\n      reveals.forEach(function(el) { observer.observe(el); });\n    }\n  });\n\u003c\/script\u003e\u003cscript\u003e\ndocument.addEventListener('DOMContentLoaded', function() {\n  const jumpAr = document.getElementById('btn-jump-ar');\n  const arSection = document.getElementById('afb-ar-section');\n  const pillRow = document.querySelector('.afb-pill-row');\n\n  if (jumpAr \u0026\u0026 arSection) {\n    jumpAr.addEventListener('click', function(e) {\n      e.preventDefault();\n      arSection.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  }\n\n  if (pillRow) {\n    pillRow.addEventListener('touchstart', function() {\n      pillRow.classList.add('is-user-interacting');\n    }, { passive: true });\n\n    const clearTouchState = function() {\n      window.setTimeout(function() {\n        pillRow.classList.remove('is-user-interacting');\n      }, 900);\n    };\n\n    pillRow.addEventListener('touchend', clearTouchState, { passive: true });\n    pillRow.addEventListener('touchcancel', clearTouchState, { passive: true });\n  }\n});\n\u003c\/script\u003e","brand":"Prime 1 Studio","offers":[{"title":"Default Title","offer_id":51851541446952,"sku":null,"price":36461.9,"currency_code":"BRL","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0719\/1763\/3832\/files\/batman-versus-superman-deluxe-version_dc-comics_gallery_66b53bec489fc.jpg?v=1779461822","url":"https:\/\/actionfigurebrasil.com.br\/products\/batman-versus-superman-deluxe-version","provider":"ActionFigure Brasil","version":"1.0","type":"link"}