
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>PixRemix - Create Custom Vinyl Stickers from Photos</title>
    <meta name="description" content="Turn your photos into custom vinyl stickers in 3 easy steps. AI transforms into cartoon, anime, or animation styles. Europe delivery from €7.99.">
    
    <link rel="canonical" href="https://pixremix.com/" />
    <link rel="alternate" hreflang="en" href="https://pixremix.com/" />
    <link rel="alternate" hreflang="nl" href="https://pixremix.com/nl/" />
    <link rel="alternate" hreflang="x-default" href="https://pixremix.com/" />
    
    <meta property="og:type" content="website">
    <meta property="og:url" content="https://pixremix.com/">
    <meta property="og:title" content="PixRemix - Create Custom Vinyl Stickers from Photos">
    <meta property="og:description" content="Transform your photos into custom vinyl stickers. Choose cartoon, anime, or animation styles. Premium quality, Europe delivery.">
    <meta property="og:image" content="https://pixremix.com/static/img/logo.png">
    <meta property="og:image:alt" content="PixRemix logo - Custom vinyl stickers from photos">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:type" content="image/png">
    <meta property="og:site_name" content="PixRemix">
    <meta property="og:locale" content="en_US">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:url" content="https://pixremix.com/">
    <meta name="twitter:title" content="PixRemix - Create Custom Vinyl Stickers from Photos">
    <meta name="twitter:description" content="Turn photos into custom vinyl stickers. Cartoon, anime, or animation styles. Perfect for personalized gifts.">
    <meta name="twitter:image" content="https://pixremix.com/static/img/logo.png">

    
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "WebApplication",
      "name": "PixRemix - Create Custom Vinyl Stickers from Photos",
      "description": "Create custom vinyl stickers from your photos with AI transformation. Choose from cartoon, anime, or animation styles, or keep the original with a clean cutout.",
      "url": "https://pixremix.com/",
      "applicationCategory": "DesignApplication",
      "operatingSystem": "Web Browser",
      "offers": [
        {
          "@type": "Offer",
          "name": "Small Vinyl Sticker (7cm)",
          "price": "7.99",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        },
        {
          "@type": "Offer",
          "name": "Medium Vinyl Sticker (10cm)",
          "price": "8.49",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        },
        {
          "@type": "Offer",
          "name": "Large Vinyl Sticker (13cm)",
          "price": "8.99",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        },
        {
          "@type": "Offer",
          "name": "Small Holographic Sticker (7cm)",
          "price": "9.99",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        },
        {
          "@type": "Offer",
          "name": "Medium Holographic Sticker (10cm)",
          "price": "10.49",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        },
        {
          "@type": "Offer",
          "name": "Large Holographic Sticker (13cm)",
          "price": "10.99",
          "priceCurrency": "EUR",
          "availability": "https://schema.org/InStock",
          "itemCondition": "https://schema.org/NewCondition"
        }
      ],
      "featureList": "AI photo transformation, Custom vinyl stickers, Holographic stickers available, Cartoon style transformation, Anime style conversion, 3D animation style, Photo cutout stickers, Kiss-cut stickers, Pet portrait stickers, Personalized gift stickers, Fast Europe delivery, No minimum order",
      "screenshot": "/static/img/logo.png"
    }
    </script>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "How do I create custom stickers from my photos?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Creating custom stickers is easy: 1. Upload your photo (PNG, JPG, or WEBP), 2. Choose from our rotating selection of AI styles, 3. Select your size and finish (vinyl or holographic), and 4. Complete your order. Your custom sticker will be shipped throughout Europe."
        }
      }, {
        "@type": "Question",
        "name": "What photo styles can I choose for my custom stickers?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "PixRemix offers a rotating selection of AI-powered styles that change weekly. Each style transforms your photo into unique custom stickers. Vote for your favourites to keep them — the least popular style gets replaced with something new!"
        }
      }, {
        "@type": "Question",
        "name": "What sizes and materials are available for custom stickers?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "We offer three sizes: Small (7cm) for €7.99, Medium (10cm) for €8.49, and Large (13cm) for €8.99. All stickers are available in high-gloss vinyl or holographic finish, kiss-cut for easy peeling, bubble-free, and designed for long-lasting durability."
        }
      }, {
        "@type": "Question",
        "name": "Can I create custom pet stickers from photos?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Yes! Pet portrait stickers are one of our most popular uses. Simply upload a photo of your pet, choose your preferred style (cutout works great for pets, or try cartoon/anime for a fun twist), and we'll create a personalized vinyl sticker perfect for laptops, water bottles, or gifts."
        }
      }, {
        "@type": "Question",
        "name": "How long does shipping take in Europe?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Custom stickers are typically delivered within 4-8 business days throughout Europe. Your sticker is printed on-demand after your order is confirmed, ensuring premium quality."
        }
      }, {
        "@type": "Question",
        "name": "Is there a minimum order quantity for custom stickers?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "No! You can order just one custom sticker or as many as you need. There are no minimum order requirements, making it perfect for personal gifts, testing designs, or creating unique personalized stickers for any occasion."
        }
      }]
    }
    </script>


    <!-- Favicon -->
    <link rel="icon" type="image/png" sizes="32x32" href="/static/img/favicon.png">
    <link rel="shortcut icon" href="/static/img/favicon.png">

    <!-- Preload critical fonts -->
    <link rel="preload" href="/static/fonts/Inter-Regular.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="/static/fonts/SpaceGrotesk-Latin.woff2" as="font" type="font/woff2" crossorigin>

    <!-- Preconnect to third-party origins -->
    <link rel="preconnect" href="https://www.googletagmanager.com">
    <link rel="dns-prefetch" href="https://js.stripe.com">

    <link rel="stylesheet" href="/static/css/styles.css">
    
<link rel="stylesheet" href="/static/css/pages/upload.css">
<style>
/* Dynamic style preview backgrounds */

.style-tile-cutout .style-tile-img {
    content: url('/media/styles/cutout_thumb.png');
    /* fallback for browsers that don't support content on img */
}

.style-tile-manga .style-tile-img {
    content: url('/media/styles/manga_thumb.png');
    /* fallback for browsers that don't support content on img */
}

.style-tile-chibi .style-tile-img {
    content: url('/media/styles/chibi_thumb.png');
    /* fallback for browsers that don't support content on img */
}

.style-tile-peppa-pig .style-tile-img {
    content: url('/media/styles/peppa-pig_thumb.png');
    /* fallback for browsers that don't support content on img */
}

.style-tile-low-poly .style-tile-img {
    content: url('/media/styles/low-poly_thumb.png');
    /* fallback for browsers that don't support content on img */
}

.style-tile-pixel-art .style-tile-img {
    content: url('/media/styles/pixel-art_thumb.png');
    /* fallback for browsers that don't support content on img */
}

</style>


    <!-- JSON-LD Organization Schema -->
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Organization",
      "name": "PixRemix",
      "url": "https://pixremix.com",
      "logo": "https://pixremix.com/static/img/logo.png",
      "sameAs": [
        "https://www.facebook.com/profile.php?id=61578254603586",
        "https://instagram.com/PixRemixCom",
        "https://tiktok.com/@PixRemixCom"
      ],
      "contactPoint": {
        "@type": "ContactPoint",
        "email": "info@pixremix.com",
        "contactType": "customer service"
      }
    }
    </script>

    <!-- Google Tag Manager (only in production) -->
    <script>
        const isProduction = !window.location.hostname.includes('localhost') && !window.location.hostname.includes('127.0.0.1');

        window.dataLayer = window.dataLayer || [];

        window.eventTracker = {
            wasTracked: function(eventKey) {
                try {
                    return sessionStorage.getItem('event_tracked_' + eventKey) === 'true';
                } catch (e) {
                    return window['_tracked_' + eventKey] === true;
                }
            },
            markTracked: function(eventKey) {
                try {
                    sessionStorage.setItem('event_tracked_' + eventKey, 'true');
                } catch (e) {
                    window['_tracked_' + eventKey] = true;
                }
            },
            generateKey: function(eventName, identifier) {
                identifier = identifier || '';
                return identifier ? eventName + '_' + identifier : eventName;
            }
        };

        window.gtmReady = false;
        window.gtmEventQueue = [];

        if (isProduction) {
            (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
            'https://www.googletagmanager.com/gtm.js?id='+i+dl;
            j.onload = function() {
                window.gtmReady = true;
                window.gtmEventQueue.forEach(function(eventData) {
                    window.dataLayer.push(eventData);
                });
                window.gtmEventQueue = [];
            };
            f.parentNode.insertBefore(j,f);
            })(window,document,'script','dataLayer','GTM-KXRV4772');
        } else {
            window.gtmReady = true;
        }

        window.trackEvent = function(eventName, eventParams, options) {
            eventParams = eventParams || {};
            options = options || {};
            var criticalEvents = ['purchase', 'generate_lead'];

            if (criticalEvents.indexOf(eventName) !== -1 && options.once !== false) {
                var identifier = options.identifier || eventParams.transaction_id || '';
                var eventKey = window.eventTracker.generateKey(eventName, identifier);
                if (window.eventTracker.wasTracked(eventKey)) return;
                window.eventTracker.markTracked(eventKey);
            }

            var eventData = Object.assign({event: eventName}, eventParams);

            if (isProduction) {
                if (!window.gtmReady) {
                    window.gtmEventQueue.push(eventData);
                } else {
                    window.dataLayer.push(eventData);
                }
            } else {
                console.log('%c[GTM Event]', 'color: #4CAF50; font-weight: bold;', eventName, eventParams);
                window.dataLayer.push(eventData);
            }
        };

        window.trackGAEvent = window.trackEvent;

        window.trackMetaEvent = function(eventName, eventParams) {
            var eventMap = {
                'ViewContent': 'view_item',
                'AddToCart': 'add_to_cart',
                'InitiateCheckout': 'begin_checkout',
                'Purchase': 'purchase'
            };
            window.trackEvent(eventMap[eventName] || eventName, eventParams || {});
        };

        window.trackMetaEventWithId = function(eventName, eventParams, eventId) {
            if (eventId) eventParams.event_id = eventId;
            window.trackMetaEvent(eventName, eventParams || {});
        };

        window.safeTrackEvent = function(eventName, eventData, options) {
            options = options || {};
            var callbackFired = false;
            var timeoutId = null;

            function fireCallback() {
                if (!callbackFired && typeof options.event_callback === 'function') {
                    callbackFired = true;
                    if (timeoutId) clearTimeout(timeoutId);
                    try { options.event_callback(); } catch (e) {}
                }
            }

            if (options.event_timeout && typeof options.event_callback === 'function') {
                timeoutId = setTimeout(fireCallback, options.event_timeout);
            }

            var eventDataWithCallback = Object.assign({}, eventData);
            if (typeof options.event_callback === 'function') {
                eventDataWithCallback.eventCallback = fireCallback;
                if (options.useBeacon) {
                    eventDataWithCallback.transport_type = 'beacon';
                }
            }

            if (typeof window.trackEvent === 'function') {
                try { window.trackEvent(eventName, eventDataWithCallback, options); }
                catch (e) { fireCallback(); }
            }

            if (options.event_callback && !window.gtmReady) {
                setTimeout(fireCallback, 100);
            }
        };

        window.getProductData = function(productId, quantity, options) {
            quantity = quantity || 1;
            options = options || {};
            var productMap = {
                'vinyl_3': {name: 'Custom Vinyl Sticker - 7cm', price: 7.99, category: 'Stickers', variant: 'Vinyl'},
                'vinyl_4': {name: 'Custom Vinyl Sticker - 10cm', price: 8.49, category: 'Stickers', variant: 'Vinyl'},
                'vinyl_5.5': {name: 'Custom Vinyl Sticker - 14cm', price: 8.99, category: 'Stickers', variant: 'Vinyl'},
                'hologram_3': {name: 'Custom Hologram Sticker - 7cm', price: 9.99, category: 'Stickers', variant: 'Hologram'},
                'hologram_4': {name: 'Custom Hologram Sticker - 10cm', price: 10.49, category: 'Stickers', variant: 'Hologram'},
                'hologram_5.5': {name: 'Custom Hologram Sticker - 14cm', price: 10.99, category: 'Stickers', variant: 'Hologram'},
                'postcard_4x6': {name: 'Custom Postcard 4"x6"', price: 6.99, bundlePrice: 3.99, category: 'Postcards', variant: 'Postcard'},
                'card_4x6': {name: 'Custom Greeting Card 4"x6"', price: 7.99, bundlePrice: 4.99, category: 'Greeting Cards', variant: 'Greeting Card'},
                'card_5x7': {name: 'Custom Greeting Card 5"x7"', price: 9.99, bundlePrice: 5.99, category: 'Greeting Cards', variant: 'Greeting Card'}
            };
            var product = productMap[productId] || {name: 'Custom Product', price: 0, category: 'Other', variant: 'single'};
            var price = (options.isBundle && product.bundlePrice) ? product.bundlePrice : product.price;
            var itemVariant = options.isBundle ? 'bundle' : (quantity === 3 && !product.bundlePrice) ? '3-pack' : 'single';
            return {
                item_id: productId,
                item_name: product.name,
                item_category: product.category,
                item_variant: itemVariant,
                price: price,
                quantity: quantity
            };
        };
    </script>
</head>
<body class="">
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KXRV4772"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>

    <!-- Skip to content (accessibility) -->
    <a href="#main-content" class="skip-link">Skip to content</a>

    

    
    <!-- Desktop Header -->
    <header class="site-header" id="site-header">
        <div class="header-inner">
            <nav class="header-nav-left" aria-label="Primary navigation">
                <a href="/stickers/" class="header-nav-link">Stickers</a>
                <a href="/styles/" class="header-nav-link">Styles</a>
                
            </nav>
            <a href="/" class="header-logo-link" aria-label="PixRemix home">
                <img src="/static/img/logo.png" alt="PixRemix" class="header-logo" width="150" height="136">
            </a>
            <nav class="header-nav-right">
                <a href="/cart/" class="header-cart" id="cart-icon" aria-label="Shopping cart">
                    <svg viewBox="0 0 24 24"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
                    <span id="cart-badge" class="cart-badge" style="display:none" aria-label="items in cart">0</span>
                </a>
                <form action="/i18n/setlang/" method="post" class="lang-switcher">
                    <input type="hidden" name="csrfmiddlewaretoken" value="h3LGOXxG2INhXfJVHFg98bXGMk5ndEWWPL7wZRLM1dBZqclVTcj4GIT5b8iqMzlr">
                    <input type="hidden" name="next" value="/">
                    <button type="submit" name="language" value="en" class="lang-btn active" aria-label="English" onclick="setLangNext(this)">EN</button>
                    <button type="submit" name="language" value="nl" class="lang-btn " aria-label="Nederlands" onclick="setLangNext(this)">NL</button>
                </form>
            </nav>
        </div>
    </header>

    <!-- Mobile Top Bar (logo + lang) -->
    <div class="mobile-top-bar">
        <a href="/" class="header-logo-link" aria-label="PixRemix home">
            <img src="/static/img/logo.png" alt="PixRemix" class="header-logo" width="100" height="91">
        </a>
        <form action="/i18n/setlang/" method="post" class="lang-switcher">
            <input type="hidden" name="csrfmiddlewaretoken" value="h3LGOXxG2INhXfJVHFg98bXGMk5ndEWWPL7wZRLM1dBZqclVTcj4GIT5b8iqMzlr">
            <input type="hidden" name="next" value="/">
            <button type="submit" name="language" value="en" class="lang-btn active" onclick="setLangNext(this)">EN</button>
            <button type="submit" name="language" value="nl" class="lang-btn " onclick="setLangNext(this)">NL</button>
        </form>
    </div>

    <main id="main-content">
        <div class="container">
            
        <!-- SVG filters for sticker contour on style tiles -->
        <svg width="0" height="0" style="position:absolute">
          <!-- Default: white contour + subtle shadow -->
          <filter id="style-tile-outline" x="-50%" y="-50%" width="200%" height="200%">
            <feMorphology in="SourceAlpha" operator="dilate" radius="2" result="expanded"/>
            <feGaussianBlur in="expanded" stdDeviation="3" result="smoothed"/>
            <feComponentTransfer in="smoothed" result="dilated">
              <feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/>
            </feComponentTransfer>
            <feFlood flood-color="white" result="flood"/>
            <feComposite in="flood" in2="dilated" operator="in" result="stroke"/>
            <feGaussianBlur in="dilated" stdDeviation="2" result="shadow_blur"/>
            <feOffset in="shadow_blur" dx="0" dy="2" result="shadow_offset"/>
            <feFlood flood-color="black" flood-opacity="0.15" result="shadow_color"/>
            <feComposite in="shadow_color" in2="shadow_offset" operator="in" result="shadow"/>
            <feMerge>
              <feMergeNode in="shadow"/>
              <feMergeNode in="stroke"/>
              <feMergeNode in="SourceGraphic"/>
            </feMerge>
          </filter>

          <!-- Selected: white contour + bigger lifted shadow -->
          <filter id="style-tile-outline-selected" x="-50%" y="-50%" width="200%" height="200%">
            <feMorphology in="SourceAlpha" operator="dilate" radius="3" result="expanded"/>
            <feGaussianBlur in="expanded" stdDeviation="3" result="smoothed"/>
            <feComponentTransfer in="smoothed" result="dilated">
              <feFuncA type="discrete" tableValues="0 1 1 1 1 1 1 1 1 1"/>
            </feComponentTransfer>
            <!-- White contour border -->
            <feFlood flood-color="white" result="flood"/>
            <feComposite in="flood" in2="dilated" operator="in" result="stroke"/>
            <!-- Bigger shadow for lifted/hover effect -->
            <feGaussianBlur in="dilated" stdDeviation="10" result="shadow_blur"/>
            <feOffset in="shadow_blur" dx="0" dy="8" result="shadow_offset"/>
            <feFlood flood-color="black" flood-opacity="0.45" result="shadow_color"/>
            <feComposite in="shadow_color" in2="shadow_offset" operator="in" result="shadow"/>
            <feMerge>
              <feMergeNode in="shadow"/>
              <feMergeNode in="stroke"/>
              <feMergeNode in="SourceGraphic"/>
            </feMerge>
          </filter>
        </svg>

        <!-- Hero Section -->
        <div class="upload-hero">
            <h1>Transform Your Photos into Custom Stickers</h1>
            <p class="upload-hero-sub">Turn photos into cartoon, anime, or animation stickers in seconds. Perfect for personalized gifts, pets, and more!</p>
            <p class="upload-hero-price">3 stickers for EUR 15.99 <span class="upload-hero-price-each">— just EUR 5.33 each</span></p>
        </div>

        <!-- Alerts -->
        
        
        

        <!-- Discount code notification -->
        

        <!-- Upload Form -->
        <form method="post" enctype="multipart/form-data" class="upload-form" id="upload-form">
            <input type="hidden" name="csrfmiddlewaretoken" value="h3LGOXxG2INhXfJVHFg98bXGMk5ndEWWPL7wZRLM1dBZqclVTcj4GIT5b8iqMzlr">

            <!-- Upload Zone (drag & drop) -->
            <div class="form-group">
                <label class="upload-form-label" id="upload-photo-label">Upload Your Photo</label>
                <div class="upload-zone" id="upload-zone" role="button" tabindex="0" aria-label="Click or drag to upload photo">
                    <!-- Lucide: Upload Cloud -->
                    <svg class="upload-zone-icon" viewBox="0 0 24 24">
                        <polyline points="16 16 12 12 8 16"></polyline>
                        <line x1="12" y1="12" x2="12" y2="21"></line>
                        <path d="M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3"></path>
                        <polyline points="16 16 12 12 8 16"></polyline>
                    </svg>
                    <p class="upload-zone-text">
                        <span class="upload-zone-desktop">Drag your photo here or <span class="upload-zone-browse">browse</span></span>
                        <span class="upload-zone-mobile">Tap to take or choose a photo</span>
                    </p>
                    <p class="upload-zone-hint">PNG, JPG, or WebP — max 10 MB</p>
                    <a href="/try-example/" class="upload-zone-example" onclick="event.stopPropagation(); if (typeof window.safeTrackEvent === 'function') { window.safeTrackEvent('try_example_click', { page_location: window.location.href }); }">or try an example</a>
                </div>
                <input type="file" id="image" name="image" accept="image/png, image/jpeg, image/webp" class="upload-file-input" required aria-label="Upload your photo" >
                <!-- Preview (shown after file selected) -->
                <div class="upload-preview" id="upload-preview">
                    <img src="" alt="Preview" class="upload-preview-img" id="upload-preview-img">
                    <span class="upload-preview-name" id="upload-preview-name"></span>
                    <button type="button" class="upload-preview-change" id="upload-preview-change">
                        <!-- Lucide: Refresh CW -->
                        <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:inline;vertical-align:middle;margin-right:4px"><polyline points="23 4 23 10 17 10"></polyline><path d="M20.49 15a9 9 0 1 1-2.12-9.36L23 10"></path></svg>
                        Change photo
                    </button>
                </div>
            </div>

            <!-- Style Selector -->
            <div class="form-group">
                <label class="upload-form-label">Choose Your Style</label>
                <div class="style-tiles" id="style-tiles">
                    
                    <input type="radio" name="style" value="cutout" id="style-cutout" checked class="style-radio" />
                    <label for="style-cutout"
                           class="style-tile style-tile-cutout"
                           
                           aria-label="Cutout style - Turn your photo into a clean die-cut sticker with precise background removal. Sharp edges and a transparent background make this the go-to choice for custom photo stickers that look like they came from a print shop.">
                        
                        <img src="/media/styles/cutout_thumb.png" alt="Cutout" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Cutout</span>
                    </label>
                    
                    <input type="radio" name="style" value="manga" id="style-manga"  class="style-radio" />
                    <label for="style-manga"
                           class="style-tile style-tile-manga"
                           
                           aria-label="Manga style - ">
                        
                        <img src="/media/styles/manga_thumb.png" alt="Manga" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Manga</span>
                    </label>
                    
                    <input type="radio" name="style" value="chibi" id="style-chibi"  class="style-radio" />
                    <label for="style-chibi"
                           class="style-tile style-tile-chibi"
                           
                           aria-label="Chibi style - ">
                        
                        <img src="/media/styles/chibi_thumb.png" alt="Chibi" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Chibi</span>
                    </label>
                    
                    <input type="radio" name="style" value="peppa-pig" id="style-peppa-pig"  class="style-radio" />
                    <label for="style-peppa-pig"
                           class="style-tile style-tile-peppa-pig"
                           
                           aria-label="Peppa Pig style - ">
                        
                        <img src="/media/styles/peppa-pig_thumb.png" alt="Peppa Pig" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Peppa Pig</span>
                    </label>
                    
                    <input type="radio" name="style" value="low-poly" id="style-low-poly"  class="style-radio" />
                    <label for="style-low-poly"
                           class="style-tile style-tile-low-poly"
                           
                           aria-label="Low Poly style - ">
                        
                        <img src="/media/styles/low-poly_thumb.png" alt="Low Poly" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Low Poly</span>
                    </label>
                    
                    <input type="radio" name="style" value="pixel-art" id="style-pixel-art"  class="style-radio" />
                    <label for="style-pixel-art"
                           class="style-tile style-tile-pixel-art"
                           
                           aria-label="Pixel Art style - Turn your photo into nostalgic retro pixel art. Chunky pixels, limited color palettes, and classic 8-bit charm give your portrait a fun video game character vibe perfect for gamers and retro fans.">
                        
                        <img src="/media/styles/pixel-art_thumb.png" alt="Pixel Art" class="style-tile-img" loading="lazy" width="200" height="200">
                        <span class="style-tile-label">Pixel Art</span>
                    </label>
                    
                </div>
            </div>

            <!-- Reassurance -->
            <p class="form-reassurance">
                <span class="reassurance-item">
                    <!-- Lucide: Check -->
                    <svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    Free preview. No payment required.
                </span>
            </p>

            <!-- Submit -->
            <button type="submit" class="btn btn-primary btn-lg btn-full upload-btn" id="create-btn" >
                Create My Sticker
            </button>
            <p class="terms-notice">
                
                By clicking Create, you agree to our <a href="/terms/" target="_blank">Terms &amp; Conditions</a> and confirm you have the rights to the uploaded image.
            </p>
        </form>

        <!-- Trust Bar -->
        <div class="upload-trust-bar">
            <span class="upload-trust-item">
                <!-- Lucide: User X (no account) -->
                <svg viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><line x1="17" y1="11" x2="22" y2="11"></line></svg>
                No Account Needed
            </span>
            <span class="upload-trust-divider" aria-hidden="true"></span>
            <span class="upload-trust-item">
                <!-- Lucide: Zap (fast) -->
                <svg viewBox="0 0 24 24"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
                Ready in 60 Sec
            </span>
            <span class="upload-trust-divider" aria-hidden="true"></span>
            <span class="upload-trust-item">
                <!-- Lucide: Award (quality) -->
                <svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline></svg>
                Premium Vinyl
            </span>
        </div>

        <!-- JavaScript: Upload zone, file validation, drag-drop, form persistence, tracking -->
        <script>
        window.UPLOAD_STRINGS = {
            reselectImage: 'Please select your image.',
            onlyPngJpgWebp: 'Only PNG, JPG, and WEBP files are allowed.',
            fileTooLarge: 'File must be under 10 MB.',
            pleaseSelectFile: 'Please select a file.'
        };
        </script>
        <script>
        document.addEventListener('DOMContentLoaded', function() {
            // === DOM Elements ===
            var fileInput = document.getElementById('image');
            var uploadZone = document.getElementById('upload-zone');
            var uploadPreview = document.getElementById('upload-preview');
            var previewImg = document.getElementById('upload-preview-img');
            var previewName = document.getElementById('upload-preview-name');
            var previewChange = document.getElementById('upload-preview-change');
            var form = document.getElementById('upload-form');

            // GA4: Track form interactions
            var fileSelected = false;
            var initialStyleValue = 'style1';

            // === Form State Persistence (Issue #85) ===
            var STORAGE_KEYS = {
                style: 'upload_selected_style',
                hadImage: 'upload_had_image'
            };

            function restoreFormState() {
                var urlParams = new URLSearchParams(window.location.search);
                var urlStyle = urlParams.get('style');
                var savedStyle = urlStyle || sessionStorage.getItem(STORAGE_KEYS.style);
                var hadImage = sessionStorage.getItem(STORAGE_KEYS.hadImage);

                if (savedStyle) {
                    var styleInput = document.getElementById('style-' + savedStyle);
                    if (styleInput) {
                        styleInput.checked = true;
                        if (urlStyle) {
                            saveStyleSelection(savedStyle);
                        }
                    }
                }

                if (hadImage === 'true') {
                    if (fileInput && fileInput.parentNode) {
                        var reselect = document.createElement('div');
                        reselect.id = 'reselect-image-msg';
                        reselect.innerHTML = window.UPLOAD_STRINGS.reselectImage;
                        reselect.style.cssText = 'color: #666; font-size: 0.9em; margin-bottom: 8px;';
                        uploadZone.parentNode.insertBefore(reselect, uploadZone);
                        sessionStorage.removeItem(STORAGE_KEYS.hadImage);
                    }
                }
            }

            function saveStyleSelection(styleSlug) {
                sessionStorage.setItem(STORAGE_KEYS.style, styleSlug);
            }

            function saveImageFlag() {
                sessionStorage.setItem(STORAGE_KEYS.hadImage, 'true');
            }

            function clearFormState() {
                sessionStorage.removeItem(STORAGE_KEYS.style);
                sessionStorage.removeItem(STORAGE_KEYS.hadImage);
            }

            restoreFormState();

            // === Upload Zone: click to open file dialog ===
            uploadZone.addEventListener('click', function() {
                fileInput.click();
            });
            uploadZone.addEventListener('keydown', function(e) {
                if (e.key === 'Enter' || e.key === ' ') {
                    e.preventDefault();
                    fileInput.click();
                }
            });

            // === Upload Zone: drag and drop ===
            uploadZone.addEventListener('dragover', function(e) {
                e.preventDefault();
                uploadZone.classList.add('dragover');
            });
            uploadZone.addEventListener('dragleave', function(e) {
                e.preventDefault();
                uploadZone.classList.remove('dragover');
            });
            uploadZone.addEventListener('drop', function(e) {
                e.preventDefault();
                uploadZone.classList.remove('dragover');
                if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
                    fileInput.files = e.dataTransfer.files;
                    fileInput.dispatchEvent(new Event('change'));
                }
            });

            // === Change photo button ===
            previewChange.addEventListener('click', function() {
                fileInput.value = '';
                uploadPreview.classList.remove('active');
                uploadZone.style.display = '';
                fileInput.click();
            });

            // === Style tile selection ===
            document.querySelectorAll('input[name="style"]').forEach(function(radio) {
                radio.addEventListener('change', function() {
                    if (this.checked) {
                        saveStyleSelection(this.value);

                        var styleNames = {
                            'style1': 'Cutout',
                            'style2': 'Animation',
                            'style3': 'Cartoon',
                            'style4': 'Anime'
                        };
                        var styleName = styleNames[this.value] || this.value;
                        window.safeTrackEvent('upload_select_style', {
                            style: styleName,
                            page_location: window.location.href
                        });
                    }
                });
            });

            // === File validation + preview ===
            var errorMsg = null;
            var allowedTypes = ['image/png', 'image/jpeg', 'image/webp'];
            var maxSize = 10 * 1024 * 1024; // 10MB

            function showError(msg) {
                clearError();
                errorMsg = document.createElement('div');
                errorMsg.className = 'alert alert-danger';
                errorMsg.textContent = msg;
                uploadZone.parentNode.insertBefore(errorMsg, uploadZone);
            }

            function clearError() {
                if (errorMsg) {
                    errorMsg.remove();
                    errorMsg = null;
                }
            }

            function showPreview(file) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    previewImg.src = e.target.result;
                    previewName.textContent = file.name;
                    uploadZone.style.display = 'none';
                    uploadPreview.classList.add('active');
                };
                reader.readAsDataURL(file);
            }

            fileInput.addEventListener('change', function() {
                clearError();
                var reselectMsg = document.getElementById('reselect-image-msg');
                if (reselectMsg) reselectMsg.remove();

                var file = fileInput.files[0];
                if (file) {
                    saveImageFlag();

                    if (!fileSelected) {
                        fileSelected = true;
                        window.safeTrackEvent('upload_file_selected', {
                            file_type: file.type,
                            file_size_mb: (file.size / (1024 * 1024)).toFixed(2)
                        });
                    }

                    if (!allowedTypes.includes(file.type)) {
                        showError(window.UPLOAD_STRINGS.onlyPngJpgWebp);
                        fileInput.value = '';
                    } else if (file.size > maxSize) {
                        showError(window.UPLOAD_STRINGS.fileTooLarge);
                        fileInput.value = '';
                    } else {
                        showPreview(file);
                    }
                }
            });

            // Form submit validation
            form.addEventListener('submit', function(e) {
                clearError();
                var file = fileInput.files[0];
                if (!file) {
                    showError(window.UPLOAD_STRINGS.pleaseSelectFile);
                    e.preventDefault();
                    return;
                }
                if (!allowedTypes.includes(file.type)) {
                    showError(window.UPLOAD_STRINGS.onlyPngJpgWebp);
                    e.preventDefault();
                } else if (file.size > maxSize) {
                    showError(window.UPLOAD_STRINGS.fileTooLarge);
                    e.preventDefault();
                } else {
                    clearFormState();
                    var createBtn = document.getElementById('create-btn');
                    createBtn.classList.add('btn-loading');
                    createBtn.disabled = true;

                    var selectedStyle = document.querySelector('input[name="style"]:checked');
                    var styleValue = selectedStyle ? selectedStyle.value : 'unknown';
                    var styleNames = {
                        'style1': 'Cutout',
                        'style2': 'Animation',
                        'style3': 'Cartoon',
                        'style4': 'Anime'
                    };
                    var styleName = styleNames[styleValue] || styleValue;

                    window.safeTrackEvent('upload_form_submit', {
                        file_size: file.size,
                        file_type: file.type,
                        style_selected: styleName,
                        page_location: window.location.href
                    });
                }
            });
        });
        </script>
    </div>

    <!-- How It Works Section -->
    <section class="hiw-section reveal" aria-label="How it works">
        <h2>How to Make Your Own Custom Stickers</h2>
        <p class="hiw-subtitle">Create personalized stickers from your photos in just 3 easy steps</p>

        <div class="hiw-steps reveal-stagger">
            <div class="hiw-step">
                <div class="hiw-step-icon">
                    <!-- Lucide: Camera -->
                    <svg viewBox="0 0 24 24"><path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"></path><circle cx="12" cy="13" r="4"></circle></svg>
                </div>
                <span class="hiw-step-num">Step 1</span>
                <h3>Upload Your Photo</h3>
                <p>Choose any photo, selfie, or your favorite moment. For the best stickers you can crop your image to only contain the part that you want.</p>
            </div>

            <div class="hiw-step">
                <div class="hiw-step-icon">
                    <!-- Lucide: Brush -->
                    <svg viewBox="0 0 24 24"><path d="m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"></path><path d="M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z"></path></svg>
                </div>
                <span class="hiw-step-num">Step 2</span>
                <h3>Pick Your Style</h3>
                <p>Transform your photo with a style, or keep it as-is. Each option creates a unique custom sticker design.</p>
            </div>

            <div class="hiw-step">
                <div class="hiw-step-icon">
                    <!-- Lucide: Sparkles -->
                    <svg viewBox="0 0 24 24"><path d="m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"></path><path d="M5 3v4"></path><path d="M19 17v4"></path><path d="M3 5h4"></path><path d="M17 19h4"></path></svg>
                </div>
                <span class="hiw-step-num">Step 3</span>
                <h3>Get Your Sticker</h3>
                <p>Enter your details and receive your premium sticker within 4-8 business days. Perfect for gifts, or for yourself.</p>
            </div>
        </div>
    </section>

    <!-- Use Cases Section -->
    <section class="use-cases-section reveal" aria-label="Use cases">
        <h2>Perfect For Every Occasion</h2>
        <p class="use-cases-subtitle">Custom stickers for gifts, pets, relatives, and more</p>

        <div class="use-cases-grid reveal-stagger">
            <div class="use-case-card">
                <div class="use-case-icon">
                    <!-- Lucide: Users -->
                    <svg viewBox="0 0 24 24"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
                </div>
                <h3>Friends & Family</h3>
                <p>Create memorable stickers for birthdays, anniversaries, or family reunions. Perfect for sharing special moments with loved ones.</p>
            </div>
            <div class="use-case-card">
                <div class="use-case-icon">
                    <!-- Lucide: Gift -->
                    <svg viewBox="0 0 24 24"><polyline points="20 12 20 22 4 22 4 12"></polyline><rect x="2" y="7" width="20" height="5"></rect><line x1="12" y1="22" x2="12" y2="7"></line><path d="M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"></path><path d="M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"></path></svg>
                </div>
                <h3>Personalized Gifts</h3>
                <p>Create unique gift stickers from photos. Ideal for birthdays, holidays, or special occasions with custom cartoon or anime styles.</p>
            </div>
            <div class="use-case-card">
                <div class="use-case-icon">
                    <!-- Lucide: Heart (paw-like) -->
                    <svg viewBox="0 0 24 24"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path></svg>
                </div>
                <h3>Pet Portrait</h3>
                <p>Turn your pet photos into adorable custom stickers. Perfect for pet owners who want personalized vinyl stickers of their furry friends.</p>
            </div>
        </div>
    </section>

    <!-- Why Choose PixRemix Section -->
    <section class="why-section reveal" aria-label="Why PixRemix">
        <h2>Why Choose PixRemix Stickers?</h2>
        <p class="why-subtitle">Style your high-quality vinyl sticker and get it shipped throughout Europe</p>
        <div class="why-grid reveal-stagger">
            <div class="why-card">
                <div class="why-card-icon">
                    <!-- Lucide: Paintbrush -->
                    <svg viewBox="0 0 24 24"><path d="M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z"></path><path d="M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7"></path><path d="M14.5 17.5 4.5 15"></path></svg>
                </div>
                <h3>Style Your Way</h3>
                <p>Go creative with AI-powered cartoon, anime, or animation styles. Or keep it classic with a clean cutout of your photo. Every sticker is uniquely yours.</p>
            </div>
            <div class="why-card">
                <div class="why-card-icon">
                    <!-- Lucide: Star -->
                    <svg viewBox="0 0 24 24"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
                </div>
                <h3>Premium 95-Micron Vinyl</h3>
                <p>95-micron premium vinyl from Japan. Waterproof, bubble-free, and kiss-cut for easy peeling. High-gloss or holographic finish. No minimum order.</p>
            </div>
            <div class="why-card">
                <div class="why-card-icon">
                    <!-- Lucide: Truck -->
                    <svg viewBox="0 0 24 24"><rect x="1" y="3" width="15" height="13"></rect><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon><circle cx="5.5" cy="18.5" r="2.5"></circle><circle cx="18.5" cy="18.5" r="2.5"></circle></svg>
                </div>
                <h3>Europe-Wide Delivery</h3>
                <p>Shipped from Europe in 4-8 business days. No customs charges. Free shipping when you order 3 or more.</p>
            </div>
        </div>
    </section>

    <!-- FAQ Section (uses global FAQ styles) -->
    <section class="faq-section upload-faq reveal" aria-label="FAQ">
        <h2>Frequently Asked Questions About Custom Stickers</h2>
        <p>Everything you need to know about creating personalized stickers from your photos</p>

        <div class="faq-container">
            <details class="faq-item">
                <summary>
                    How do I create custom stickers from my photos?
                </summary>
                <p>
                    Creating custom stickers is easy: 1. Upload your photo (PNG, JPG, or WEBP), 2. Choose from our rotating selection of AI styles, 3. Select your size and finish (vinyl or holographic), and 4. Complete your order. Your custom sticker will be shipped throughout Europe.
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    What photo styles can I choose for my custom stickers?
                </summary>
                <p>
                    PixRemix offers a rotating selection of AI-powered styles that change weekly. Each style transforms your photo into unique custom stickers. Vote for your favourites to keep them — the <strong>least popular</strong> style gets replaced with something new!
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    What sizes and materials are available for custom stickers?
                </summary>
                <p>
                    We offer three sizes: <strong>Small (7cm) for €7.99</strong>, <strong>Medium (10cm) for €8.49</strong>, and <strong>Large (13cm) for €8.99</strong>. All stickers are available in high-gloss vinyl or holographic (€2 extra) finish, kiss-cut for easy peeling, bubble-free, and designed for long-lasting durability.
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    Can I create custom pet stickers from photos?
                </summary>
                <p>
                    Yes! Pet portrait stickers are one of our most popular uses. Simply upload a photo of your pet, choose your preferred style (cutout works great for pets, or try cartoon/anime for a fun twist), and we'll create a personalized vinyl sticker perfect for laptops, water bottles, or gifts.
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    How many times can I generate stickers per day?
                </summary>
                <p>
                    You can generate up to <strong>5 custom stickers per day</strong> for free. This allows you to experiment with different styles and photos to find your perfect design. The limit resets at midnight (your local time). If you've reached your daily limit, you can still order your last generated sticker by clicking the <strong>"View Previous Results"</strong> button on the homepage.
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    How long does shipping take in Europe?
                </summary>
                <p>
                    Custom stickers are typically delivered within 4-8 business days throughout Europe. Your sticker is printed on-demand after your order is confirmed, ensuring premium quality.
                </p>
            </details>

            <details class="faq-item">
                <summary>
                    Is there a minimum order quantity for custom stickers?
                </summary>
                <p>
                    No! You can order just one custom sticker or as many as you need. There are no minimum order requirements, making it perfect for personal gifts, testing designs, or creating unique personalized stickers for any occasion.
                </p>
            </details>
        </div>
    </section>

    <!-- SEO Content -->
    <section class="seo-content reveal" aria-label="About custom stickers">
        <h2>Custom Vinyl Stickers Made Easy</h2>
        <p>PixRemix lets you create premium custom vinyl stickers from any photo. Our AI-powered transformation engine turns your images into cartoon, anime, or animation styles in seconds. Whether you want a personalized gift, a pet portrait sticker, or a fun memento from a special moment, PixRemix delivers high-quality kiss-cut stickers throughout Europe.</p>
    </section>

    <!-- Final CTA Section -->
    <section class="final-cta reveal" aria-label="Call to action">
        <h2>Ready to Create Your Custom Sticker?</h2>
        <p>Upload your photo and see your sticker in seconds.</p>
        <a href="#upload-photo-label" class="final-cta-btn" onclick="scrollToHeading(event, 'upload-photo-label')">Create My Sticker</a>
        <p class="final-cta-note">Free preview &bull; No payment required &bull; 60 seconds</p>
    </section>

    <!-- Floating CTA for mobile users who scroll -->
    <div class="floating-cta" id="floating-cta">
        <a href="#upload-photo-label" class="floating-cta-btn" onclick="scrollToHeading(event, 'upload-photo-label')">
            <!-- Lucide: Arrow Up -->
            <svg viewBox="0 0 24 24"><line x1="12" y1="19" x2="12" y2="5"></line><polyline points="5 12 12 5 19 12"></polyline></svg>
            Create My Sticker
        </a>
    </div>

        </div>
    </main>
    

    <!-- Mobile Bottom Tab Bar -->
    
    <nav class="tab-bar" aria-label="Main navigation">
        <a href="/" class="tab-bar-item active" aria-label="Home">
            <svg viewBox="0 0 24 24"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/></svg>
            <span class="tab-label">Home</span>
        </a>
        <a href="/styles/" class="tab-bar-item " aria-label="Styles">
            <svg viewBox="0 0 24 24"><circle cx="13.5" cy="6.5" r="2.5"/><path d="M17.5 10.5c1.38 0 2.5 1.12 2.5 2.5s-1.12 2.5-2.5 2.5"/><path d="M8.5 13c-1.38 0-2.5-1.12-2.5-2.5S7.12 8 8.5 8"/><circle cx="12" cy="17" r="2.5"/><path d="M12 2v2M12 20v2"/></svg>
            <span class="tab-label">Styles</span>
        </a>
        
        <a href="/cart/" class="tab-bar-item " aria-label="Cart">
            <svg viewBox="0 0 24 24"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
            <span id="cart-tab-badge" class="tab-badge" style="display:none">0</span>
            <span class="tab-label">Cart</span>
        </a>
        <button class="tab-bar-item" onclick="toggleMoreSheet()" aria-label="More options">
            <svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
            <span class="tab-label">More</span>
        </button>
    </nav>
    

    <!-- More Sheet (mobile) -->
    <div class="more-sheet-overlay" id="more-sheet-overlay" onclick="toggleMoreSheet()"></div>
    <div class="more-sheet" id="more-sheet" role="dialog" aria-label="More navigation">
        <div class="more-sheet-handle"></div>
        <nav class="more-sheet-nav">
            <a href="/stickers/" class="more-sheet-link">
                <svg viewBox="0 0 24 24"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"/><line x1="3" y1="9" x2="21" y2="9"/><line x1="9" y1="21" x2="9" y2="9"/></svg>
                Stickers
            </a>
            <a href="/contact/" class="more-sheet-link">
                <svg viewBox="0 0 24 24"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><polyline points="22,6 12,13 2,6"/></svg>
                Contact
            </a>
            <a href="/terms/" class="more-sheet-link">
                <svg viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
                Terms & Conditions
            </a>
            <a href="/privacy/" class="more-sheet-link">
                <svg viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
                Privacy Policy
            </a>
        </nav>
    </div>

    <footer class="footer">
        <div class="footer-content">
            <div class="footer-block">
                <h2 class="footer-heading">Company Info</h2>
                <div class="footer-info">
                    <p><strong>PixRemix</strong></p>
                    <p>KVK: 97843776</p>
                    <p>Tax: NL005292567B81</p>
                </div>
                <div class="footer-social">
                    <a href="https://www.facebook.com/profile.php?id=61578254603586" target="_blank" rel="noopener" aria-label="Facebook" class="social-btn">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
                    </a>
                    <a href="https://instagram.com/PixRemixCom" target="_blank" rel="noopener" aria-label="Instagram" class="social-btn">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg>
                    </a>
                    <a href="https://tiktok.com/@PixRemixCom" target="_blank" rel="noopener" aria-label="TikTok" class="social-btn">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z"/></svg>
                    </a>
                </div>
            </div>

            <div class="footer-block">
                <h2 class="footer-heading">Quick Links</h2>
                <nav class="footer-nav">
                    <a href="/">Home</a>
                    <a href="/stickers/">Stickers</a>
                    <a href="/styles/">Styles</a>
                    <a href="/contact/">Contact</a>
                    <a href="/terms/">Terms & Conditions</a>
                    <a href="/privacy/">Privacy Policy</a>
                </nav>
            </div>

            <div class="footer-block">
                <h2 class="footer-heading">About PixRemix</h2>
                <p class="footer-description">
                    Turn your photos into custom vinyl stickers. Choose cartoon, anime, animation, or a clean cutout. Premium quality, delivered across Europe.
                </p>
            </div>
        </div>

        <div class="footer-bottom">
            <p>&copy; 2026 PixRemix. All rights reserved.</p>
        </div>
    </footer>

    <!-- Language switcher: compute correct target URL before form submit -->
    <script>
    function setLangNext(btn) {
        var path = window.location.pathname;
        var clean = path.replace(/^\/nl(\/|$)/, '/');
        btn.form.querySelector('[name=next]').value = (btn.value === 'en') ? clean : '/' + btn.value + clean;
    }
    </script>

    <!-- Bot protection -->
    <script>
    document.addEventListener('DOMContentLoaded', function() {
        document.querySelectorAll('.obfuscated-email').forEach(function(el) {
            var u = el.getAttribute('data-user');
            var d = el.getAttribute('data-domain');
            if (u && d) {
                var email = u + '@' + d;
                el.href = 'mailto:' + email;
                el.textContent = email;
            }
        });
        document.querySelectorAll('.obfuscated-address').forEach(function(el) {
            var parts = el.getAttribute('data-parts');
            if (parts) el.textContent = parts.split('|').join(', ');
        });
    });
    </script>

    <!-- Cart badge + tab bar logic -->
    <script>
    function updateCartBadge(count) {
        var badges = [document.getElementById('cart-badge'), document.getElementById('cart-tab-badge')];
        badges.forEach(function(badge) {
            if (badge) {
                if (count > 0) {
                    badge.textContent = count;
                    badge.style.display = 'flex';
                } else {
                    badge.style.display = 'none';
                }
            }
        });
    }

    document.addEventListener('DOMContentLoaded', function() {
        fetch('/api/cart/')
            .then(function(r) { return r.json(); })
            .then(function(data) { updateCartBadge(data.totals.item_count); })
            .catch(function() {});
    });

    // More sheet toggle
    function toggleMoreSheet() {
        var sheet = document.getElementById('more-sheet');
        var overlay = document.getElementById('more-sheet-overlay');
        var isOpen = sheet.classList.contains('open');
        if (isOpen) {
            sheet.classList.remove('open');
            overlay.classList.remove('open');
        } else {
            sheet.classList.add('open');
            overlay.classList.add('open');
        }
    }

    // Swipe-down to dismiss more sheet
    (function() {
        var sheet = document.getElementById('more-sheet');
        if (!sheet) return;
        var startY = null;
        sheet.addEventListener('touchstart', function(e) {
            startY = e.touches[0].clientY;
        }, {passive: true});
        sheet.addEventListener('touchend', function(e) {
            if (startY === null) return;
            var dy = e.changedTouches[0].clientY - startY;
            startY = null;
            if (dy > 50) toggleMoreSheet();
        }, {passive: true});
    })();

    // Desktop header scroll effect
    var header = document.getElementById('site-header');
    if (header) {
        window.addEventListener('scroll', function() {
            if (window.scrollY > 10) {
                header.classList.add('scrolled');
            } else {
                header.classList.remove('scrolled');
            }
        }, {passive: true});
    }

    // Scroll-triggered reveals (IntersectionObserver)
    if ('IntersectionObserver' in window) {
        var revealObserver = new IntersectionObserver(function(entries) {
            entries.forEach(function(entry) {
                if (entry.isIntersecting) {
                    entry.target.classList.add('visible');
                    revealObserver.unobserve(entry.target);
                }
            });
        }, {threshold: 0.1, rootMargin: '0px 0px -40px 0px'});

        document.addEventListener('DOMContentLoaded', function() {
            document.querySelectorAll('.reveal, .reveal-stagger').forEach(function(el) {
                revealObserver.observe(el);
            });
        });
    }

    // Toast notification helper
    window.showToast = function(message, actionText, actionCallback, duration) {
        duration = duration || 3000;
        var container = document.querySelector('.toast-container');
        if (!container) {
            container = document.createElement('div');
            container.className = 'toast-container';
            document.body.appendChild(container);
        }
        var toast = document.createElement('div');
        toast.className = 'toast';
        toast.textContent = message;
        if (actionText && actionCallback) {
            var action = document.createElement('span');
            action.className = 'toast-action';
            action.textContent = actionText;
            action.onclick = function() { actionCallback(); toast.remove(); };
            toast.appendChild(action);
        }
        container.appendChild(toast);
        setTimeout(function() {
            toast.classList.add('toast-out');
            setTimeout(function() { toast.remove(); }, 300);
        }, duration);
    };
    </script>

    
<script>
    // Countdown timer for "last chance" style badges
    function updateCountdowns() {
        document.querySelectorAll('.js-countdown').forEach(function(el) {
            var expires = el.getAttribute('data-expires');
            if (!expires) return;
            var expiresMs = new Date(expires).getTime();
            var now = Date.now();
            var remaining = expiresMs - now;

            var textEl = el.querySelector('.js-countdown-text');
            if (!textEl) return;

            if (remaining <= 0) {
                textEl.textContent = 'Rotating now';
                return;
            }

            var totalMinutes = Math.floor(remaining / (1000 * 60));
            var days = Math.floor(totalMinutes / (60 * 24));
            var hours = Math.floor((totalMinutes % (60 * 24)) / 60);
            var minutes = totalMinutes % 60;

            var parts = [];
            if (days > 0) parts.push(days + 'd');
            if (hours > 0 || days > 0) parts.push(hours + 'h');
            if (days === 0) parts.push(minutes + 'm');

            textEl.textContent = parts.join(' ');
        });
    }

    updateCountdowns();
    setInterval(updateCountdowns, 60000);
</script>
<script>
    // Floating CTA visibility based on scroll
    document.addEventListener('DOMContentLoaded', function() {
        var floatingCta = document.getElementById('floating-cta');
        var uploadForm = document.getElementById('upload-form');

        if (floatingCta && uploadForm) {
            window.addEventListener('scroll', function() {
                var formRect = uploadForm.getBoundingClientRect();
                var formBottom = formRect.bottom;

                // Show floating CTA when form is scrolled out of view
                if (formBottom < -100) {
                    floatingCta.classList.add('visible');
                } else {
                    floatingCta.classList.remove('visible');
                }
            }, {passive: true});
        }
    });

    // Smooth scroll with offset for anchor links
    function scrollToHeading(e, id) {
        e.preventDefault();
        var heading = document.getElementById(id);
        if (heading) {
            var yOffset = -40;
            var y = heading.getBoundingClientRect().top + window.pageYOffset + yOffset;
            setTimeout(function() {
                window.scrollTo({ top: y, behavior: 'smooth' });
            }, 1);
        }
    }
</script>

</body>
</html>
