BLACK FRIDAY
Ends in 00h 00m 00s
25% OFF LTD

16 animations

Visual effects

One-click copy
No coding required
Visual configurator

New

Ring

Added July 25, 2025

Configurator

New

Plasma

Added July 25, 2025

Configurator

Grid 3D

Added June 30, 2025

Configurator

Distorsion

Added June 30, 2025

Configurator

Blossom

Added June 06, 2025

Configurator
Available Now

Status Pulse

Added Feb 24, 2025

Configurator

Move your mouse over the canvas

Ethereal Trail

Added Feb 24, 2025

Configurator

Glass Card

Added Jan 14, 2024

Configurator

Flip Canvas

Added Jan 14, 2024

Configurator

Border Drift

Border Drift

Added Jan 14, 2024

Configurator

Circles

Added Dec 10, 2024

Configurator
Reveal now

SVG Reveal

Added Dec 10, 2024

Configurator

PrismBorder

Added Dec 10, 2024

Configurator

Border Stream

Added Dec 10, 2024

Configurator
Reveal video

Button Reveal

Added Dec 10, 2024

Configurator

Spotlight

Spotlight

Added Dec 10, 2024

Configurator

Bring your site to life.

Make your pages memorable with innovative effects

Seamless flow animations

Lead your audience naturally through your content with visually captivating effects that enhance focus and readability.

Optimized for performance

Designed to deliver stunning visuals while keeping your site fast and efficient—beauty without compromise.

Infinite customization possibilities

Explore an expansive selection of effects to perfectly align with your creative vision and brand identity.

Tell your story dynamically

Transform every scroll into an immersive journey, letting your design speak volumes effortlessly.

Pay once. Use forever.
Everything you need, forever yours.
Lifetime
€149Unlimited websites
Features
Animations
Visual Configurator
Transition Pages
Buttons

Q1 2026

Premium benefits
Lifetime Updates
One-click import
No coding required
Real-time modification
Customer Care
Premium support (24h response)
Get Lifetime Access
document.addEventListener('DOMContentLoaded', function() {
    const fontLink = document.createElement('link');
    fontLink.href = 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap';
    fontLink.rel = 'stylesheet';
    document.head.appendChild(fontLink);

    const styles = `
        .simple-price-box {
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 0.75rem;
            font-family: 'Inter', sans-serif;
            margin: 0.5rem 0;
            width: fit-content;
        }

        .simple-text-label {
            font-size: var(--text-xs);
            font-weight: 300;
            transition: color 0.2s ease;
            user-select: none;
            white-space: nowrap;
        }

        .simple-text-label.is-on {
            color: #FACC15;
            text-shadow: 0 0 5px rgba(250, 204, 21, 0.3);
            font-weight: 500;
        }

        .simple-text-label.is-off {
            color: white;
        }

        .simple-switch {
            position: relative;
            width: 4rem;
            height: 2rem;
            background-color: #E5E7EB;
            border-radius: 9999px;
            cursor: pointer;
            transition: all 0.3s ease;
            flex-shrink: 0;
            box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
        }

        .simple-switch.is-on {
            background-color: #FACC15;
            box-shadow: 0 0 10px rgba(250, 204, 21, 0.5), inset 0 1px 2px rgba(255, 255, 255, 0.2);
        }

        .simple-switch::after {
            content: '';
            position: absolute;
            top: 0.25rem;
            left: 0.25rem;
            width: 1.5rem;
            height: 1.5rem;
            background-color: white;
            border-radius: 50%;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
            transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
        }

        .simple-switch.is-on::after {
            transform: translateX(2rem);
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
        }

        .simple-price-text {
            transition: opacity 0.3s ease;
            display: inline-flex !important;
            align-items: baseline;
            gap: 0.25rem;
            justify-content: inherit;
        }

        .simple-price-text .amount-value {
            display: inline-block;
            font-size: var(--h2);
        }

        .simple-price-text .time-period {
            font-size: var(--text-xs) !important;
            color: white;
            font-weight: 300 !important;
            opacity: 0.95;
            white-space: nowrap;
        }

        @media (max-width: 768px) {
            .simple-price-box {
                gap: 0.5rem;
            }

            .simple-text-label {
                font-size: calc(var(--text-xs) * 0.9);
            }

            .simple-price-text .amount-value {
                font-size: 30px !important;
            }
        }
    `;

    const styleSheet = document.createElement('style');
    styleSheet.textContent = styles;
    document.head.appendChild(styleSheet);

    const toggleHTML = `
    <div class="simple-price-box">
        <div class="simple-switch" role="switch" aria-checked="false" tabindex="0"></div>
        <span class="simple-text-label is-off" data-mode="monthly">3 Monthly payments</span>
    </div>
    `;

    const URLS = {
        oneTime: 'https://breakfusion.com/payment/?line_items%5B0%5D%5Bprice_id%5D=49f1f80e-0466-42de-bc21-86afd0253789&line_items%5B0%5D%5Bquantity%5D=1',
        monthly: 'https://breakfusion.com/payment/?line_items%5B0%5D%5Bprice_id%5D=ebb767c8-2598-4e2f-addf-a92b1d860050&line_items%5B0%5D%5Bquantity%5D=1'
    };

    function animateValue(start, end, duration, element) {
        let startTimestamp = null;
        const step = (timestamp) => {
            if (!startTimestamp) startTimestamp = timestamp;
            const progress = Math.min((timestamp - startTimestamp) / duration, 1);
            const currentValue = Math.round(progress * (end - start) + start);
            element.textContent = `€${currentValue}`;
            if (progress < 1) {
                window.requestAnimationFrame(step);
            }
        };
        window.requestAnimationFrame(step);
    }

    function updatePriceDisplay(isMonthly, animate = true) {
        if (priceElement) {
            const currentAmount = priceElement.querySelector('.amount-value');
            const startPrice = currentAmount ? parseInt(currentAmount.textContent.replace('€', '')) : (isMonthly ? 149 : 50);
            const endPrice = isMonthly ? 50 : 149;

            if (animate && currentAmount) {
                animateValue(startPrice, endPrice, 500, currentAmount);

                setTimeout(() => {
                    const periodElement = priceElement.querySelector('.time-period');
                    if (periodElement) {
                        periodElement.textContent = isMonthly ? '/mo for 3 months' : '/one-time';
                    }
                }, 250);
            } else {
                priceElement.innerHTML = `
                    <span class="amount-value">€${endPrice}</span>
                    <span class="time-period">${isMonthly ? '/mo for 3 months' : '/one-time'}</span>
                `;
            }
        }
    }

    const toggleContainer = document.querySelector('[data-toggle-container]');
    const priceElement = document.querySelector('[data-simple-price]');

    if (toggleContainer && priceElement) {
        toggleContainer.innerHTML = toggleHTML;
        priceElement.classList.add('simple-price-text');

        const toggleBox = toggleContainer.querySelector('.simple-price-box');
        const computedStyle = window.getComputedStyle(toggleContainer);

        if (computedStyle.textAlign) {
            toggleBox.style.marginLeft = computedStyle.textAlign === 'center' ? 'auto' :
                                       computedStyle.textAlign === 'right' ? 'auto' : '0';
            toggleBox.style.marginRight = computedStyle.textAlign === 'center' ? 'auto' :
                                        computedStyle.textAlign === 'right' ? '0' : 'auto';
        }
    } else if (priceElement) {
        priceElement.insertAdjacentHTML('beforebegin', toggleHTML);
        priceElement.classList.add('simple-price-text');
    }

    const toggle = document.querySelector('.simple-switch');
    const monthlyLabel = document.querySelector('[data-mode="monthly"]');
    const buyButton = document.querySelector('[data-simple-button]');

    function handleToggle() {
        const isMonthly = !toggle.classList.contains('is-on');
        toggle.classList.toggle('is-on');
        toggle.setAttribute('aria-checked', isMonthly);

        if (monthlyLabel) {
            monthlyLabel.classList.toggle('is-on');
            monthlyLabel.classList.toggle('is-off');
        }

        updatePriceDisplay(isMonthly, true);
        if (buyButton) {
            buyButton.href = isMonthly ? URLS.monthly : URLS.oneTime;
        }
    }

    if (toggle) {
        toggle.addEventListener('click', handleToggle);
        toggle.addEventListener('keydown', (e) => {
            if (e.key === 'Enter' || e.key === ' ') {
                e.preventDefault();
                handleToggle();
            }
        });
    }

    updatePriceDisplay(false, false);
});