✨ Udělejte si pořádek ve financích 🧠 🎉 Použijte 15% unikátní slevu – stačí zadat e-mail 💯 Spořte s námi jednoduše na vaše sny 🌟 Začněte hospodařit chytře 🧠 – s námi je to jednoduché ✨ Rozpočtová tabulka od Chytré Kačky 📊 Mějte pod kontrolou vaše výdaje a úspory ⚖️ 🗓️ Plánujte, spořte, žijte lehčeji ☀️ ✋ Konec chaosu ve výdajích – začněte dnes ✅
Exkluzivní nabídka

Psst... máme pro tebe dárek 🎁

Získej 15% slevu na naši rozpočtovou tabulku — stačí zadat email a kód ti přiletí do 2 minut.
Posíláme tipy a zajímavosti ze světa spoření a financí 💡📊 Žádný spam, jen věci které reálně fungují. ✅
Chci svůj kód →Ne děkuji, raději platím plnou cenu
Krok 2 / 2

Kam ti pošleme kód? ✉️

Přidáváš se k tisícům lidí kteří už mají finance pod kontrolou.
🔒 Žádný spam. Odhlásit se můžeš kdykoliv.
Jít nakupovat →
. One file for the whole site. Everything is opt-in through data-attributes in the section markup: data-ff-tier="signature" on a link/button → scroll to #buy + preselect tier data-ff-reveal on any element → fades in when scrolled into view data-ff-sticky on .ff-sticky-cta → shown only when useful data-ff-sticky-trigger on the hero CTA → sticky bar appears once this leaves the screen No dependencies. Safe if an element is missing. ========================================================================== */ (function () { 'use strict'; var doc = document; var root = doc.documentElement; root.classList.add('ff-js'); var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; var hasIO = 'IntersectionObserver' in window; /* ------------------------------------------------------------------------ 1. Tier preselection + smooth scroll to the buy section ------------------------------------------------------------------------ */ var TIER_KEY = 'ff_tier'; var BUY_ID = 'buy'; function selectTier(tier) { if (!tier) return; try { sessionStorage.setItem(TIER_KEY, tier); } catch (e) { /* private mode */ } // Our own tier options (buy section): var option = doc.querySelector('[data-ff-tier-option="' + tier + '"]'); if (option && !option.checked) option.click(); // Let anything else (FunnelKit bridge, analytics) react. doc.dispatchEvent(new CustomEvent('ff:tier', { detail: { tier: tier } })); } function scrollToBuy() { var target = doc.getElementById(BUY_ID); if (!target) return false; target.scrollIntoView({ behavior: reduceMotion ? 'auto' : 'smooth', block: 'start' }); // Move focus for keyboard and screen-reader users without a second jump. if (!target.hasAttribute('tabindex')) target.setAttribute('tabindex', '-1'); target.focus({ preventScroll: true }); return true; } doc.addEventListener('click', function (event) { var link = event.target.closest('a[href^="#"], [data-ff-tier]'); if (!link) return; var tier = link.getAttribute('data-ff-tier'); var href = link.getAttribute('href') || ''; var goesToBuy = tier || href === '#' + BUY_ID; if (!goesToBuy) return; if (scrollToBuy()) { event.preventDefault(); if (tier) selectTier(tier); if (window.history && history.replaceState) history.replaceState(null, '', '#' + BUY_ID); } }); // ?tier=complete in an ad or email link → preselect on load. function tierFromUrl() { var match = /[?&]tier=([a-z]+)/i.exec(window.location.search); return match ? match[1].toLowerCase() : null; } function restoreTier() { var tier = tierFromUrl(); if (!tier) { try { tier = sessionStorage.getItem(TIER_KEY); } catch (e) { tier = null; } } if (tier) selectTier(tier); } /* ------------------------------------------------------------------------ 2. Reveal on scroll ------------------------------------------------------------------------ */ function initReveal() { var items = doc.querySelectorAll('[data-ff-reveal]'); if (!items.length) return; if (reduceMotion || !hasIO) { items.forEach(function (el) { el.classList.add('is-visible'); }); return; } var io = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (!entry.isIntersecting) return; entry.target.classList.add('is-visible'); io.unobserve(entry.target); }); }, { rootMargin: '0px 0px -10% 0px', threshold: 0.1 }); items.forEach(function (el) { io.observe(el); }); } /* ------------------------------------------------------------------------ 3. Sticky CTA: visible after the hero CTA scrolls away, hidden while the buy section is on screen. ------------------------------------------------------------------------ */ function initSticky() { var bar = doc.querySelector('[data-ff-sticky]'); if (!bar) return; var trigger = doc.querySelector('[data-ff-sticky-trigger]'); var buy = doc.getElementById(BUY_ID); var pastTrigger = !trigger; var buyVisible = false; function update() { var show = pastTrigger && !buyVisible; bar.classList.toggle('is-shown', show); bar.setAttribute('aria-hidden', show ? 'false' : 'true'); bar.querySelectorAll('a, button').forEach(function (el) { el.tabIndex = show ? 0 : -1; }); } if (!hasIO) { bar.classList.add('is-shown'); return; } if (trigger) { new IntersectionObserver(function (entries) { var e = entries[0]; pastTrigger = !e.isIntersecting && e.boundingClientRect.top < 0; update(); }).observe(trigger); } if (buy) { new IntersectionObserver(function (entries) { buyVisible = entries[0].isIntersecting; update(); }, { threshold: 0.05 }).observe(buy); } update(); } /* ------------------------------------------------------------------------ Boot ------------------------------------------------------------------------ */ function boot() { initReveal(); initSticky(); restoreTier(); } if (doc.readyState === 'loading') doc.addEventListener('DOMContentLoaded', boot); else boot(); })();