{"id":7,"date":"2026-07-17T23:15:45","date_gmt":"2026-07-17T23:15:45","guid":{"rendered":"http:\/\/spokofinanse.piotrluszczak.pl\/?page_id=7"},"modified":"2026-08-15T20:56:24","modified_gmt":"2026-08-15T20:56:24","slug":"spoko-finanse-lp","status":"publish","type":"page","link":"https:\/\/spokofinanse.piotrluszczak.pl\/?page_id=7","title":{"rendered":"Spoko Finanse lp"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"7\" class=\"elementor elementor-7\">\n\t\t\t\t<div class=\"elementor-element elementor-element-30c500c e-con e-atomic-element e-flexbox-base e-ecb955d \" data-id=\"30c500c\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"30c500c\">\n    \t\t<div class=\"elementor-element elementor-element-b7d3c2c elementor-widget elementor-widget-html\" data-id=\"b7d3c2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"theme-color\" content=\"#FAF8FE\">\n<title>IKE i IKZE: zbuduj prywatn\u0105 emerytur\u0119 | Spoko Finanse<\/title>\n<meta name=\"description\" content=\"Emerytura z ZUS to ok. 25\u201330% pensji. Z IKE i IKZE spokojnie zbudujesz reszt\u0119 i co roku odbierzesz nawet 3 617 z\u0142 ulgi podatkowej. Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119.\">\n<meta property=\"og:title\" content=\"IKE i IKZE: zbuduj prywatn\u0105 emerytur\u0119 | Spoko Finanse\">\n<meta property=\"og:description\" content=\"Odbieraj zwrot podatku co roku i buduj kapita\u0142 bez podatku Belki. Bezp\u0142atna konsultacja, prostym j\u0119zykiem, bez presji.\">\n<meta property=\"og:type\" content=\"website\">\n<link rel=\"icon\" href=\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 64 64'%3E%3Ccircle cx='32' cy='32' r='30' fill='%23FF6B00'\/%3E%3Ctext x='32' y='43' font-size='34' font-family='Arial' font-weight='bold' fill='white' text-anchor='middle'%3ES%3C\/text%3E%3C\/svg%3E\">\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n<!-- Font ikon przyci\u0119ty do 27 u\u017cywanych ikon (~27 KB zamiast 3 MB).\n     Je\u015bli dodajesz now\u0105 ikon\u0119, dopisz jej nazw\u0119 do parametru icon_names,\n     inaczej w tym miejscu wy\u015bwietli si\u0119 pusto (display=block, bez ligatury). -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,300..600,0..1,0&icon_names=account_balance,add,arrow_downward,calendar_month,call,chat_bubble,check_circle,event_available,family_restroom,hearing,info,lightbulb,location_on,lock_open,mail,payments,person,psychology_alt,receipt_long,savings,schedule,shield,thumb_up,trending_up,verified,videocam,warning&display=block\" rel=\"stylesheet\">\n\n<!--\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n  LANDING PAGE: IKE\/IKZE - Spoko Finanse\n  Stylistyka 1:1 ze spokofinanse.com (Inter, pill buttons,\n  pomara\u0144czowe CTA #FF6B00, t\u0142o #FAF8FE, Material Symbols Rounded)\n\n  \u26a0\ufe0f TO JEST WARIANT B testu A\/B: landing bez ankiety, CTA prowadzi na\n  osobn\u0105 stron\u0119 formularz.html. Wariant A to index-inline.html, w kt\u00f3rym\n  ta sama ankieta otwiera si\u0119 bez prze\u0142adowania. index-inline.html jest\n  GENEROWANY z tego pliku, wi\u0119c tre\u015b\u0107 landinga edytuj TUTAJ, a potem\n  uruchom `python3 zbuduj.py`. Szczeg\u00f3\u0142y: _README-warianty-ab.md.\n\n  \u015aCIE\u017bKA KONWERSJI: przyciski prowadz\u0105 do sekcji #kalendarz, a stamt\u0105d\n  do ankiety. Ankieta odsiewa trzema regu\u0142ami, potem prosi o kontakt\n  (imi\u0119, telefon, mail), dopiero na ko\u0144cu pokazuje kalendarz Calendly.\n  W tym pliku NIE MA \u017cadnego linku do Calendly.\n\n  PRZED PUBLIKACJ\u0104 PODMIE\u0143 (wszystko w ankieta.zrodlo.html, potem zbuduj.py):\n  1. WEBHOOK   -> adres z Make, bez niego nic nie leci do Slacka i arkusza\n  2. LINK_RODO -> klauzula informacyjna; formularz zbiera dane osobowe,\n     wi\u0119c bez tego linku nie ma podstawy do ich przetwarzania\n  3. Pe\u0142na nazwa prawna podmiotu + NIP w stopce tego pliku (brak danych\n     od klienta, szukaj komentarza \"BRAKUJE\" w sekcji .legal)\n  4. Opcjonalnie: odkomentuj sekcj\u0119 opinii i wstaw prawdziwe\n\n  ZDJ\u0118CIA ZESPO\u0141U: lokalne WebP z folderu img\/, 560x747, razem 77 KB.\n  Kadry 3:4 robione r\u0119cznie, wycentrowane na sylwetce. Landing NIE zale\u017cy\n  ju\u017c od serwera stagingowego, wi\u0119c paczka jest samowystarczalna: przy\n  wysy\u0142ce na hosting bierz index.html, index-inline.html, formularz.html\n  ORAZ folder img\/.\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n-->\n\n<style>\n:root{\n  --bg:#FAF8FE;\n  --surface:#FFFFFF;\n  --ink:#1A1B1F;\n  --ink-72:rgba(26,27,31,.72);\n  --ink-48:rgba(26,27,31,.48);\n  --line:rgba(26,27,31,.08);\n  --orange:#FF6B00;\n  --on-orange:#FFFFFF;\n  --orange-soft:rgba(255,107,0,.12);\n  --ink-soft:rgba(26,27,31,.06);\n  --radius-sm:.5rem;\n  --radius:1rem;\n  --radius-md:1.5rem;\n  --radius-lg:2rem;\n  --radius-xl:2.5rem;\n  --radius-pill:9999px;\n  --shadow-sm:0 1px 2px rgba(26,27,31,.04),0 1px 3px rgba(26,27,31,.06);\n  --shadow-md:0 4px 12px rgba(26,27,31,.06),0 2px 4px rgba(26,27,31,.04);\n  --shadow-lg:0 12px 32px rgba(26,27,31,.08),0 4px 10px rgba(26,27,31,.05);\n  --shadow-xl:0 24px 64px rgba(26,27,31,.12),0 8px 20px rgba(26,27,31,.06);\n  --shadow-orange:0 8px 24px rgba(255,107,0,.24);\n  --glass:hsla(0,0%,100%,.72);\n  --glass-border:hsla(0,0%,100%,.55);\n  --ease:cubic-bezier(.22,.61,.36,1);\n  --dur:240ms;\n  --gutter:24px;            \/* margines boczny strony, sterowany jedn\u0105 zmienn\u0105 (mobile do 16px) *\/\n  --font-sans:\"Inter\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif;\n}\n\n*{box-sizing:border-box;margin:0;padding:0}\nhtml{scroll-behavior:smooth}\nbody{\n  font-family:var(--font-sans);\n  background:var(--bg);\n  color:var(--ink);\n  line-height:1.6;\n  -webkit-font-smoothing:antialiased;\n  overflow-x:hidden;\n}\n\n.ms{\n  font-family:\"Material Symbols Rounded\";\n  font-weight:normal;\n  font-style:normal;\n  font-size:24px;\n  line-height:1;\n  display:inline-block;\n  letter-spacing:normal;\n  text-transform:none;\n  white-space:nowrap;\n  direction:ltr;\n  font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24;\n  user-select:none;\n}\n.ms.fill{font-variation-settings:'FILL' 1,'wght' 400,'GRAD' 0,'opsz' 24}\n\n.container{max-width:1120px;margin:0 auto;padding-inline:var(--gutter)}\nsection{padding:88px 0;scroll-margin-top:76px}\n\/* Uwaga: skonsolidowany blok mobilny (\u2264720px) jest na KO\u0143CU arkusza,\n   \u017ceby wygra\u0107 kaskad\u0119 z bazowymi definicjami komponent\u00f3w. *\/\n\n\/* \u2500\u2500 Typografia \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nh1,h2,h3{line-height:1.15;letter-spacing:-.02em;font-weight:800}\nh1{font-size:clamp(2.1rem,5vw,3.4rem)}\nh2{font-size:clamp(1.7rem,3.6vw,2.4rem)}\nh3{font-size:1.15rem;font-weight:700;letter-spacing:-.01em}\n.lead{font-size:clamp(1.05rem,2vw,1.25rem);color:var(--ink-72)}\n.eyebrow{\n  display:inline-flex;align-items:center;gap:8px;\n  font-size:.82rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;\n  color:var(--orange);\n  background:var(--orange-soft);\n  padding:8px 16px;border-radius:var(--radius-pill);\n  margin-bottom:20px;\n}\n.section-head{max-width:680px;margin:0 auto 56px;text-align:center}\n.section-head p{margin-top:14px}\n\n\/* \u2500\u2500 Przyciski \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.btn{\n  display:inline-flex;align-items:center;justify-content:center;gap:10px;\n  font-family:var(--font-sans);font-weight:600;font-size:1rem;line-height:1;\n  border-radius:var(--radius-pill);cursor:pointer;white-space:nowrap;\n  padding:16px 30px;min-height:48px;\n  text-decoration:none;border:1px solid transparent;\n  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),background var(--dur) var(--ease),border-color var(--dur) var(--ease);\n}\n.btn-primary{background:var(--orange);color:var(--on-orange);box-shadow:var(--shadow-orange)}\n.btn-primary:hover{transform:translateY(-2px);box-shadow:0 14px 34px rgba(255,107,0,.32)}\n.btn-primary:active{transform:scale(.97)}\n.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--line);box-shadow:var(--shadow-sm)}\n.btn-ghost:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:rgba(26,27,31,.18)}\n.btn .ms{font-size:20px}\n.btn-big{padding:19px 38px;font-size:1.08rem}\n\n\/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.site-header{\n  position:sticky;top:0;z-index:50;\n  background:var(--glass);\n  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);\n  border-bottom:1px solid var(--line);\n}\n.site-header .container{display:flex;align-items:center;justify-content:space-between;height:68px}\n.logo{display:flex;align-items:center;gap:10px;font-weight:800;font-size:1.15rem;letter-spacing:-.02em;color:var(--ink);text-decoration:none}\n.logo-mark{\n  width:34px;height:34px;border-radius:10px;background:var(--orange);color:#fff;\n  display:flex;align-items:center;justify-content:center;font-size:1.05rem;font-weight:800;\n}\n.site-header .btn{padding:11px 20px;font-size:.9rem;min-height:42px}\n@media(max-width:480px){.site-header .btn span.btn-label-long{display:none}.site-header .btn::after{content:\"Um\u00f3w rozmow\u0119\"}}\n\n\/* \u2500\u2500 Hero \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.hero{padding:72px 0 80px;position:relative}\n.hero::before{\n  content:\"\";position:absolute;inset:0;pointer-events:none;\n  background:\n    radial-gradient(600px 360px at 12% 8%,rgba(255,107,0,.05),transparent 70%),\n    radial-gradient(520px 320px at 92% 30%,rgba(255,107,0,.06),transparent 70%);\n}\n.hero .container{display:grid;grid-template-columns:1.15fr .85fr;gap:56px;align-items:center;position:relative}\n@media(max-width:900px){.hero .container{grid-template-columns:1fr;gap:44px}}\n.hero h1 .hl{color:var(--orange)}\n.hero .lead{margin:22px 0 32px;max-width:560px}\n.hero-ctas{display:flex;flex-wrap:wrap;gap:14px;align-items:center}\n.hero-trust{display:flex;flex-wrap:wrap;gap:18px;margin-top:26px;color:var(--ink-48);font-size:.9rem;font-weight:500}\n.hero-trust span{display:inline-flex;align-items:center;gap:7px}\n.hero-trust .ms{font-size:19px;color:var(--orange)}\n\n\/* karta limit\u00f3w w hero *\/\n.limits-card{\n  background:var(--surface);border-radius:var(--radius-xl);\n  box-shadow:var(--shadow-xl);border:1px solid var(--line);\n  padding:34px;position:relative;\n}\n.limits-card .card-tag{\n  position:absolute;top:-16px;left:28px;\n  background:var(--orange);color:#fff;font-size:.78rem;font-weight:700;letter-spacing:.06em;\n  padding:8px 16px;border-radius:var(--radius-pill);box-shadow:var(--shadow-md);\n}\n.limit-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 0;border-bottom:1px solid var(--line)}\n.limit-row:last-of-type{border-bottom:none}\n.limit-row .limit-name{font-weight:600;font-size:.95rem}\n.limit-row .limit-name small{display:block;font-weight:500;color:var(--ink-48);font-size:.8rem;margin-top:2px}\n.limit-row .limit-value{font-weight:800;font-size:1.35rem;letter-spacing:-.02em;white-space:nowrap}\n.limit-row .limit-value small{font-size:.8rem;font-weight:600;color:var(--ink-48)}\n.limits-note{margin-top:16px;font-size:.8rem;color:var(--ink-48);display:flex;gap:8px;align-items:flex-start}\n.limits-note .ms{font-size:17px;margin-top:2px;color:var(--orange)}\n\n\/* mini-benefity pod hero *\/\n.hero-benefits{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:56px}\n@media(max-width:720px){.hero-benefits{grid-template-columns:1fr}}\n.hero-benefit{\n  display:flex;align-items:center;gap:14px;\n  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-md);\n  padding:18px 22px;box-shadow:var(--shadow-sm);font-weight:600;font-size:.95rem;\n}\n.hero-benefit .ms{color:var(--orange);font-size:26px}\n\n\/* \u2500\u2500 Karty og\u00f3lne \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}\n.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:24px}\n@media(max-width:900px){.grid-3{grid-template-columns:1fr}.grid-2{grid-template-columns:1fr}}\n.card{\n  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);\n  padding:32px;box-shadow:var(--shadow-md);\n  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease);\n}\n.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}\n.card .icon-wrap{\n  width:52px;height:52px;border-radius:16px;background:var(--orange-soft);\n  display:flex;align-items:center;justify-content:center;margin-bottom:20px;\n}\n.card .icon-wrap .ms{color:var(--orange);font-size:28px}\n.card.warm .icon-wrap{background:var(--orange-soft)}\n.card.warm .icon-wrap .ms{color:var(--orange)}\n.card h3{margin-bottom:10px}\n.card p{color:var(--ink-72);font-size:.95rem}\n\n.section-outro{max-width:640px;margin:48px auto 0;text-align:center;font-size:1.1rem;font-weight:600}\n.section-outro .hl{color:var(--orange)}\n\n\/* \u2500\u2500 Checklist rozwi\u0105zania \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.promise{background:var(--surface);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}\n.check-list{max-width:720px;margin:0 auto;display:flex;flex-direction:column;gap:18px}\n.check-item{\n  display:flex;gap:16px;align-items:flex-start;\n  background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-md);\n  padding:22px 26px;\n}\n.check-item .ms{color:var(--orange);font-size:26px;flex-shrink:0;margin-top:2px}\n.check-item strong{display:block;margin-bottom:4px;font-size:1.02rem}\n.check-item span{color:var(--ink-72);font-size:.95rem}\n.promise-cta{text-align:center;margin-top:44px}\n\n\/* \u2500\u2500 IKE vs IKZE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.compare{align-items:stretch}\n.compare .card{display:flex;flex-direction:column}\n.compare .badge{\n  align-self:flex-start;font-size:.78rem;font-weight:700;letter-spacing:.05em;\n  padding:6px 14px;border-radius:var(--radius-pill);margin-bottom:18px;\n}\n.compare .badge.dark{background:var(--ink);color:#fff}\n.compare .badge.orange{background:var(--orange-soft);color:var(--orange)}\n.compare h3{font-size:1.5rem;margin-bottom:4px}\n.compare .sub{color:var(--ink-48);font-size:.9rem;margin-bottom:22px}\n.spec{list-style:none;display:flex;flex-direction:column;gap:0;margin-top:auto}\n.spec li{display:flex;gap:12px;padding:13px 0;border-top:1px solid var(--line);font-size:.93rem}\n.spec li .ms{font-size:20px;color:var(--orange);flex-shrink:0;margin-top:2px}\n.spec li div strong{display:block;font-size:.95rem}\n.spec li div span{color:var(--ink-72)}\n.both-bar{\n  margin-top:28px;background:var(--orange-soft);\n  border:1px solid var(--line);border-radius:var(--radius-md);\n  padding:24px 30px;display:flex;gap:16px;align-items:center;justify-content:center;\n  text-align:center;font-weight:600;font-size:1.05rem;flex-wrap:wrap;\n}\n.both-bar .ms{color:var(--orange);font-size:26px}\n\n\/* \u2500\u2500 Wyliczenia \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.calc{background:var(--surface);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}\n.calc-card{background:var(--bg)}\n.calc-card:hover{transform:none;box-shadow:var(--shadow-md)}\n.calc-tag{\n  display:inline-flex;align-items:center;gap:8px;\n  font-size:.78rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;\n  color:var(--orange);background:var(--orange-soft);\n  padding:7px 14px;border-radius:var(--radius-pill);margin-bottom:18px;\n}\n.calc-tag .ms{font-size:17px}\ntable.calc-table{width:100%;border-collapse:collapse;margin-top:14px;font-size:.95rem}\n.calc-table th{text-align:left;font-size:.8rem;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-48);font-weight:600;padding:10px 8px 10px 0;border-bottom:1px solid var(--line)}\n.calc-table td{padding:13px 8px 13px 0;border-bottom:1px solid var(--line)}\n.calc-table tr:last-child td{border-bottom:none}\n.calc-table .num{font-weight:800;white-space:nowrap;text-align:right}\n.calc-table .num.hero-num{color:var(--orange)}\n.big-number{font-size:clamp(2rem,4vw,2.8rem);font-weight:800;letter-spacing:-.03em;color:var(--orange);line-height:1.1;margin:10px 0 4px}\n.big-number-label{font-size:.9rem;color:var(--ink-48);font-weight:500}\n.calc-breakdown{list-style:none;margin-top:20px;display:flex;flex-direction:column;gap:10px;font-size:.93rem}\n.calc-breakdown li{display:flex;justify-content:space-between;gap:14px;padding-bottom:10px;border-bottom:1px solid var(--line)}\n.calc-breakdown li:last-child{border-bottom:none;font-weight:700}\n.calc-breakdown .val{font-weight:700;white-space:nowrap}\n.fine-print{margin-top:28px;font-size:.78rem;color:var(--ink-48);max-width:820px;margin-left:auto;margin-right:auto;text-align:center}\n\n\/* \u2500\u2500 Kalkulator \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.kalkulator{background:var(--bg)}\n.kalk-wstep{color:var(--ink-72);font-size:.95rem;margin:6px 0 24px}\n.kalk-pola{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-bottom:24px}\n.kalk-pole label{display:block;font-size:.85rem;color:var(--ink-48);font-weight:600;margin-bottom:2px}\n.kalk-pole output{display:block;font-size:1.4rem;font-weight:800;letter-spacing:-.02em;margin-bottom:12px}\n\n\/* natywny input[type=range] przemalowany na palet\u0119 marki. Natywny,\n   bo daje za darmo obs\u0142ug\u0119 klawiatury, czytnik\u00f3w ekranu i gest\u00f3w\n   dotykowych, kt\u00f3rych w\u0142asny suwak na divach musia\u0142by udawa\u0107.     *\/\n\/* WYSOKOSC 44px to CEL DOTYKOWY, nie wyglad. Gdy wysokosc siedzi\n   na samym <input>, pole trafienia palcem ma tyle, ile widoczny tor,\n   czyli 6px - na telefonie nie do zlapania. Dlatego <input> jest\n   przezroczysty i wysoki, a tor rysuje ::-*-track.                  *\/\n.kalk-pole input[type=range]{\n  -webkit-appearance:none;appearance:none;width:100%;height:44px;\n  background:transparent;outline:none;margin:0;cursor:pointer;\n}\n.kalk-pole input[type=range]::-webkit-slider-runnable-track{\n  height:6px;border-radius:999px;background:rgba(26,27,31,.12);\n}\n.kalk-pole input[type=range]::-moz-range-track{\n  height:6px;border-radius:999px;background:rgba(26,27,31,.12);\n}\n.kalk-pole input[type=range]::-webkit-slider-thumb{\n  -webkit-appearance:none;appearance:none;width:26px;height:26px;border-radius:50%;\n  background:var(--orange);cursor:pointer;border:3px solid #fff;\n  box-shadow:0 2px 8px rgba(255,107,0,.35);\n  margin-top:-10px;   \/* wysrodkowanie kolka 26px na torze 6px *\/\n}\n.kalk-pole input[type=range]::-moz-range-thumb{\n  width:20px;height:20px;border-radius:50%;background:var(--orange);\n  cursor:pointer;border:3px solid #fff;box-shadow:0 2px 8px rgba(255,107,0,.35);\n}\n.kalk-pole input[type=range]:focus-visible{outline:2px solid var(--orange);outline-offset:4px}\n\n.kalk-forma{border:none;padding:0;margin-bottom:26px}\n.kalk-forma legend{font-size:.85rem;color:var(--ink-48);font-weight:600;margin-bottom:10px;padding:0}\n.kalk-opcje{display:flex;gap:10px;flex-wrap:wrap}\n.kalk-opcje label{\n  flex:1;min-width:158px;display:flex;align-items:center;justify-content:space-between;gap:10px;\n  padding:13px 16px;background:var(--surface);border:1px solid var(--line);\n  border-radius:var(--radius-md);cursor:pointer;font-size:.92rem;font-weight:500;\n  transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease);\n}\n.kalk-opcje label .stawka{font-weight:800;color:var(--ink-48)}\n.kalk-opcje input{position:absolute;opacity:0;width:0;height:0}\n\/* stan wyboru klas\u0105 z JS, nie przez :has() - zimny ruch to te\u017c\n   starsze webviews, gdzie :has() potrafi nie dzia\u0142a\u0107              *\/\n.kalk-opcje label.wybrana{border-color:var(--orange);background:var(--orange-soft)}\n.kalk-opcje label.wybrana .stawka{color:var(--orange)}\n.kalk-opcje label:focus-within{outline:2px solid var(--orange);outline-offset:2px}\n\n.kalk-wyniki{display:grid;grid-template-columns:1fr 1fr;gap:20px;\n  padding:22px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}\n.kalk-etykieta{display:block;font-size:.8rem;letter-spacing:.05em;text-transform:uppercase;\n  color:var(--ink-48);font-weight:600}\n.kalk-wynik .big-number{margin:8px 0 4px}\n.kalk-nota{font-size:.82rem;color:var(--ink-48);line-height:1.45}\n.kalkulator .calc-breakdown{margin-top:20px}\n\n@media(max-width:640px){\n  .kalk-pola{grid-template-columns:1fr;gap:22px}\n  .kalk-wyniki{grid-template-columns:1fr;gap:18px}\n  .kalk-opcje label{min-width:100%}\n}\n\n\/* \u2500\u2500 Proces \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;counter-reset:step}\n@media(max-width:900px){.steps{grid-template-columns:1fr}}\n.step{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:36px 30px 30px;box-shadow:var(--shadow-md)}\n.step::before{\n  counter-increment:step;content:counter(step);\n  position:absolute;top:-20px;left:26px;\n  width:44px;height:44px;border-radius:50%;\n  background:var(--orange);color:#fff;font-weight:800;font-size:1.15rem;\n  display:flex;align-items:center;justify-content:center;\n  box-shadow:var(--shadow-orange);\n}\n.step h3{margin:6px 0 10px}\n.step p{color:var(--ink-72);font-size:.95rem}\n\n\/* \u2500\u2500 Dlaczego my \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.values{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}\n@media(max-width:900px){.values{grid-template-columns:repeat(2,1fr)}}\n@media(max-width:560px){.values{grid-template-columns:1fr}}\n.value{\n  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-md);\n  padding:28px 24px;text-align:center;box-shadow:var(--shadow-sm);\n}\n.value .ms{font-size:32px;color:var(--orange);margin-bottom:14px}\n.value h3{font-size:1.02rem;margin-bottom:8px}\n.value p{font-size:.88rem;color:var(--ink-72)}\n\n\/* \u2500\u2500 Zesp\u00f3\u0142 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.team{display:grid;grid-template-columns:repeat(4,1fr);gap:24px}\n@media(max-width:900px){.team{grid-template-columns:repeat(2,1fr)}}\n.member{\n  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);\n  overflow:hidden;box-shadow:var(--shadow-md);\n  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease);\n}\n.member:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}\n\/* aspect-ratio + atrybuty width\/height w HTML = zero przeskoku layoutu (CLS),\n   gdy zdj\u0119cie do\u0142aduje si\u0119 p\u00f3\u017aniej ni\u017c tekst. T\u0142o pod obrazkiem w kolorze\n   studia, \u017ceby przed do\u0142adowaniem nie b\u0142ysn\u0119\u0142o bia\u0142e pole.\n   UWAGA na height:auto. Atrybuty width\/height z HTML wchodz\u0105 jako\n   presentational hints, wi\u0119c bez tego wysoko\u015b\u0107 zostaje na sztywno 747px,\n   a aspect-ratio jest po cichu ignorowane (dzia\u0142a tylko przy auto).       *\/\n.member img{\n  display:block;width:100%;height:auto;aspect-ratio:3\/4;object-fit:cover;background:#1B2831;\n}\n.member-body{padding:22px 22px 24px}\n.member h3{font-size:1.05rem;margin-bottom:5px;line-height:1.25}\n.member .role{\n  font-size:.85rem;color:var(--ink-48);\n  margin-bottom:14px;padding-bottom:14px;border-bottom:1px solid var(--line);\n}\n.member p{font-size:.9rem;color:var(--ink-72);line-height:1.55}\n\n\/* \u2500\u2500 Kalendarz \/ CTA final \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.booking-card{\n  background:linear-gradient(135deg,#2E3038 0%,#1A1B1F 100%);\n  color:#fff;border-radius:var(--radius-xl);\n  padding:clamp(40px,6vw,72px);text-align:center;\n  box-shadow:var(--shadow-xl);position:relative;overflow:hidden;\n}\n.booking-card::before{\n  content:\"\";position:absolute;inset:0;\n  background:\n    radial-gradient(480px 280px at 85% 15%,rgba(255,107,0,.22),transparent 70%),\n    radial-gradient(420px 260px at 10% 90%,rgba(255,107,0,.16),transparent 70%);\n  pointer-events:none;\n}\n.booking-card>*{position:relative}\n.booking-card h2{color:#fff;margin-bottom:16px}\n.booking-card .lead{color:rgba(255,255,255,.75);max-width:560px;margin:0 auto 34px}\n.booking-trust{display:flex;flex-wrap:wrap;gap:20px;justify-content:center;margin-top:26px;font-size:.9rem;color:rgba(255,255,255,.65)}\n.booking-trust span{display:inline-flex;align-items:center;gap:7px}\n.booking-trust .ms{font-size:19px;color:#FFB073}\n\n\/* \u2500\u2500 FAQ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.faq-list{max-width:760px;margin:0 auto;display:flex;flex-direction:column;gap:14px}\n.faq-item{\n  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-md);\n  box-shadow:var(--shadow-sm);overflow:hidden;\n}\n.faq-item summary{\n  list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:16px;\n  padding:22px 26px;font-weight:600;font-size:1.02rem;\n}\n.faq-item summary::-webkit-details-marker{display:none}\n.faq-item summary .ms{color:var(--orange);transition:transform var(--dur) var(--ease);flex-shrink:0}\n.faq-item[open] summary .ms{transform:rotate(45deg)}\n.faq-item .faq-body{padding:0 26px 24px;color:var(--ink-72);font-size:.95rem}\n.faq-item .faq-body p+p{margin-top:10px}\n\n\/* \u2500\u2500 Footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.site-footer{background:var(--surface);border-top:1px solid var(--line);padding:52px 0 40px;font-size:.88rem;color:var(--ink-48)}\n.footer-top{display:flex;justify-content:space-between;gap:32px;flex-wrap:wrap;margin-bottom:32px}\n.footer-top .logo{font-size:1.05rem}\n.legal .podmiot{margin-bottom:.75rem;line-height:1.6}\n.legal .podmiot strong{color:var(--ink);font-weight:700}\n.footer-links{display:flex;gap:22px;flex-wrap:wrap}\n.footer-links a{color:var(--ink-72);text-decoration:none;font-weight:500}\n.footer-links a:hover{color:var(--orange)}\n.footer-contact{display:flex;gap:28px;flex-wrap:wrap;margin-bottom:28px}\n.footer-contact a,.footer-contact span.addr{\n  display:inline-flex;align-items:center;gap:8px;\n  color:var(--ink-72);text-decoration:none;font-weight:500;\n}\n.footer-contact a:hover{color:var(--orange)}\n.footer-contact .ms{font-size:19px;color:var(--orange)}\n.legal{border-top:1px solid var(--line);padding-top:24px;font-size:.78rem;line-height:1.7}\n.legal p+p{margin-top:8px}\n\n\/* \u2500\u2500 W\u0105skie telefony \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 MOBILE-FIRST: spacing sterowany centralnie \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   Umieszczone na ko\u0144cu arkusza, PO bazowych definicjach komponent\u00f3w,\n   \u017ceby wygra\u0107 kaskad\u0119. Wszystkie telefony (\u2264720px) dostaj\u0105 w\u0119\u017cszy\n   gutter (16px) i jeden sp\u00f3jny padding kart, koniec z podw\u00f3jnym\n   marginesem, kt\u00f3ry dawa\u0142 \"straszne odst\u0119py po bokach\".            *\/\n@media(max-width:720px){\n  :root{--gutter:16px}\n  section{padding:52px 0}\n  .section-head{margin-bottom:32px}\n  .hero{padding:28px 0 48px}\n  .hero .lead{margin:16px 0 24px}\n  .hero-benefits{margin-top:36px}\n  .eyebrow{margin-bottom:14px}\n  h1{font-size:clamp(1.9rem,7.4vw,2.5rem)}\n\n  \/* karty i bloki - jeden sp\u00f3jny padding, bez desktopowych 32px *\/\n  .card{padding:22px 20px}\n  .limits-card{padding:24px 20px}\n  .check-item{padding:18px}\n  .step{padding:34px 20px 26px}\n  .value{padding:24px 20px}\n  .both-bar{padding:20px 22px}\n  .booking-card{padding:38px 22px}\n  .faq-item summary{padding:18px 20px}\n  .faq-item .faq-body{padding:0 20px 20px}\n  .calc-card{padding:22px 20px}\n\n  \/* cia\u015bniejszy rytm mi\u0119dzy kartami *\/\n  .grid-3,.grid-2{gap:16px}\n\n  \/* zesp\u00f3\u0142: karta pozioma. Cztery portrety 3:4 jeden pod drugim zrobi\u0142yby\n     z sekcji kilometr scrolla tu\u017c przed CTA, wi\u0119c zdj\u0119cie idzie w w\u0105ski\n     pasek po lewej. object-position ci\u0105gnie kadr ku g\u00f3rze, \u017ceby przy\n     kr\u00f3tkim opisie (niska karta) nie uci\u0119\u0142o g\u0142owy.                      *\/\n  .team{grid-template-columns:1fr;gap:12px}\n  .member{display:grid;grid-template-columns:112px 1fr;align-items:stretch}\n  .member img{height:100%;min-height:152px;aspect-ratio:auto;object-position:50% 12%}\n  .member-body{padding:16px 16px 18px}\n  .member h3{font-size:1rem}\n  .member .role{margin-bottom:10px;padding-bottom:10px}\n  .member p{font-size:.87rem}\n\n  \/* stopka: kontakt w kolumnie, kciukowe cele dotyku zamiast zbitej linijki *\/\n  .footer-contact{flex-direction:column;gap:14px}\n\n  \/* CTA na pe\u0142n\u0105 szeroko\u015b\u0107, kciukowo, bez w\u0105skich przycisk\u00f3w *\/\n  .hero-ctas .btn,.promise-cta .btn,.booking-card .btn{width:100%;justify-content:center;white-space:normal;text-align:center}\n  .hero-ctas{gap:12px}\n  .btn-big{padding:16px 24px;font-size:1.02rem}\n}\n\n\/* bardzo ma\u0142e telefony (iPhone SE \/ kompaktowe Androidy) *\/\n@media(max-width:380px){\n  :root{--gutter:14px}\n  h1{font-size:clamp(1.75rem,7.6vw,2.1rem)}\n  .limit-row .limit-value{font-size:1.2rem}\n  .member{grid-template-columns:96px 1fr}\n}\n\n\/* \u2500\u2500 Mobilny sticky CTA (zimny ruch = kciuk) \u2500\u2500 *\/\n.mobile-cta{\n  position:fixed;left:0;right:0;bottom:0;z-index:60;display:none;\n  padding:10px 16px calc(10px + env(safe-area-inset-bottom));\n  background:var(--glass);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);\n  border-top:1px solid var(--line);\n  transform:translateY(110%);visibility:hidden;\n  transition:transform var(--dur) var(--ease),visibility 0s var(--dur);\n}\n.mobile-cta.show{transform:none;visibility:visible;transition:transform var(--dur) var(--ease),visibility 0s}\n.mobile-cta .btn{width:100%;justify-content:center}\n@media(max-width:720px){\n  .mobile-cta{display:block}\n  body{padding-bottom:74px}\n}\n\n\/* \u2500\u2500 Scroll reveal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.reveal{opacity:0;transform:translateY(18px);transition:opacity 600ms var(--ease),transform 600ms var(--ease)}\n.reveal.in{opacity:1;transform:none}\n@media(prefers-reduced-motion:reduce){\n  html{scroll-behavior:auto}\n  .reveal{opacity:1;transform:none;transition:none}\n  .btn,.card{transition:none}\n}\n<\/style>\n<noscript><style>.reveal{opacity:1;transform:none}<\/style><\/noscript>\n\n<!-- ANKIETA:TRACKING:START -->\n<!-- \u26a0\ufe0f Blok generowany z ankieta.zrodlo.html przez zbuduj.py. Nie edytuj go tutaj, bo zniknie przy najbli\u017cszym przebudowaniu. -->\n<!-- Microsoft Clarity (snippet z clarity.microsoft.com, bez zmian) -->\n<script type=\"text\/javascript\">\n    (function(c,l,a,r,i,t,y){\n        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\n        t=l.createElement(r);t.async=1;t.src=\"https:\/\/www.clarity.ms\/tag\/\"+i;\n        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n    })(window, document, \"clarity\", \"script\", \"xzg4sl5ucl\");\n<\/script>\n\n<!-- Meta Pixel (snippet z Events Managera, bez zmian poza ID) -->\n<script>\n!function(f,b,e,v,n,t,s)\n{if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};\nif(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\nn.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];\ns.parentNode.insertBefore(t,s)}(window, document,'script',\n'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\nfbq('init', '930502191234511');\nfbq('track', 'PageView');\n<\/script>\n<noscript><img height=\"1\" width=\"1\" style=\"display:none\"\nsrc=\"https:\/\/www.facebook.com\/tr?id=930502191234511&ev=PageView&noscript=1\"\n\/><\/noscript>\n\n<!-- Rezerwacja w Calendly: pixel na naszej domenie sam jej NIE zobaczy.\n     Kalendarz to iframe z domeny calendly.com, a skrypt strony nie ma prawa\n     zagl\u0105da\u0107 w tre\u015b\u0107 obcej ramki. Calendly wysy\u0142a o rezerwacji postMessage\n     do strony-rodzica i to jedyny moment, w kt\u00f3rym da si\u0119 j\u0105 tu z\u0142apa\u0107.\n     Na stronie bez kalendarza listener po prostu milczy. -->\n<script>\nwindow.addEventListener('message', function (e) {\n  \/* Sprawdzenie origin jest obowi\u0105zkowe: bez niego dowolna obca ramka\n     mog\u0142aby podrobi\u0107 konwersj\u0119 i zatru\u0107 optymalizacj\u0119 kampanii. *\/\n  if (e.origin !== 'https:\/\/calendly.com') return;\n  if (!e.data || e.data.event !== 'calendly.event_scheduled') return;\n  var wariant = (window.ANKIETA_KONFIG && window.ANKIETA_KONFIG.wariant) || 'landing';\n  \/* Custom, nie `Schedule`: standardowe `Schedule` raportuje pixel wpi\u0119ty\n     w samym Calendly. Dwa \u017ar\u00f3d\u0142a tego samego zdarzenia liczy\u0142yby podw\u00f3jnie. *\/\n  if (window.fbq) fbq('trackCustom', 'SchedulePostMessage', { content_name: wariant });\n  if (window.clarity) clarity('set', 'etap', 'zarezerwowal');\n});\n<\/script>\n<!-- ANKIETA:TRACKING:END -->\n<!-- \u2500\u2500 ANKIETA WBUDOWANA (wariant A) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<!-- \u26a0\ufe0f Blok generowany z ankieta.zrodlo.html przez zbuduj.py. Nie edytuj go tutaj, bo zniknie przy najbli\u017cszym przebudowaniu. -->\n<style>\n.ankieta-root{\n  --bg:#F4F4F7;\n  --surface:#FFFFFF;\n  --ink:#15181D;\n  --ink-70:rgba(21,24,29,.7);\n  --ink-45:rgba(21,24,29,.45);\n  --pyt:#2C3A4B;              \/* granatowy nag\u0142\u00f3wek pytania ze screen\u00f3w *\/\n  --line:#E2E4E8;\n  --line-mocna:#D2D5DA;\n  --orange:#FF6B00;\n  --radius-karta:18px;\n  --radius-opcja:9px;\n  --cien:0 1px 3px rgba(21,24,29,.05),0 6px 20px rgba(21,24,29,.05);\n  --dur:200ms;\n  --ease:cubic-bezier(.22,.61,.36,1);\n\n  \/* 592 = 560 tre\u015bci + 2\u00d716 paddingu, czyli dok\u0142adnie tyle, ile dawa\u0142\n     uk\u0142ad `body{padding:20px 16px}` + `.wrap{max-width:560px}`.        *\/\n  max-width:592px;margin:0 auto;padding:20px 16px 64px;\n  display:flex;flex-direction:column;gap:18px;\n  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;\n  color:var(--ink);line-height:1.5;text-align:left;\n  -webkit-font-smoothing:antialiased;\n}\n\/* \u26a0\ufe0f MUSI tu by\u0107. `display:flex` z klasy (0,1,0) bije `display:none`\n   z atrybutu [hidden] w arkuszu przegl\u0105darki (0,0,1), wi\u0119c bez tej\n   linijki `hidden` na ankiecie po prostu nie dzia\u0142a.                  *\/\n.ankieta-root[hidden]{display:none}\n\n\/* Landing ustawia h1,h2,h3 na font-weight:800 i letter-spacing:-.02em,\n   a section na padding:88px 0. Bez tego resetu ankieta dziedziczy\u0142aby\n   te warto\u015bci w wariancie inline i wygl\u0105da\u0142a inaczej ni\u017c w wariancie B. *\/\n.ankieta-root h1,.ankieta-root h2,.ankieta-root h3{\n  font-weight:700;letter-spacing:-.02em;line-height:1.25;\n}\n.ankieta-root section{padding:0;scroll-margin-top:12px}\n.ankieta-root p{margin:0}\n\n.ankieta-root .karta{\n  background:var(--surface);border-radius:var(--radius-karta);\n  box-shadow:var(--cien);padding:26px 24px;\n}\n\n\/* \u2500\u2500 Nag\u0142\u00f3wek \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .intro{text-align:center;padding:30px 24px}\n.ankieta-root .znak{\n  width:52px;height:52px;border-radius:50%;background:var(--orange);\n  color:#fff;font-weight:700;font-size:1.5rem;\n  display:flex;align-items:center;justify-content:center;\n  margin:0 auto 14px;\n}\n.ankieta-root .marka{color:var(--ink-45);font-size:1.02rem;font-weight:500;margin-bottom:14px}\n.ankieta-root .intro h1{\n  font-size:clamp(1.4rem,5.6vw,1.75rem);\n  line-height:1.25;margin-bottom:14px;\n}\n.ankieta-root .intro p{color:var(--ink-70);font-size:1.05rem}\n\/* Przy odmowie sprzeda\u017cowy nag\u0142\u00f3wek znika. Zostawiony krzycza\u0142by\n   \"Odzyskaj 3000 z\u0142\" tu\u017c nad zdaniem \"to nie dla Ciebie\" i podkopywa\u0142\n   uprzejmy ton odmowy.                                                *\/\n.ankieta-root .intro.zwiniete{padding:22px 24px}\n.ankieta-root .intro.zwiniete h1,.ankieta-root .intro.zwiniete .lead{display:none}\n.ankieta-root .intro.zwiniete .marka{margin-bottom:0}\n.ankieta-root .intro.zwiniete .znak{width:44px;height:44px;font-size:1.3rem;margin-bottom:10px}\n\n\/* \u2500\u2500 Pytanie \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .pytanie h2{\n  font-size:1.02rem;font-weight:700;color:var(--pyt);\n  line-height:1.35;letter-spacing:normal;margin-bottom:14px;\n}\n.ankieta-root .opcje{display:flex;flex-direction:column;gap:12px}\n\n\/* Opcja to <label> z ukrytym radiem w \u015brodku. Dzi\u0119ki temu dzia\u0142a\n   klawiatura i czytniki ekranu za darmo, bez dorabiania rol ARIA. *\/\n.ankieta-root .opcja{\n  display:flex;align-items:center;gap:14px;\n  background:var(--surface);border:1px solid var(--line);\n  border-radius:var(--radius-opcja);padding:16px 18px;\n  cursor:pointer;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease);\n}\n.ankieta-root .opcja:hover{background:#FAFAFB}\n.ankieta-root .opcja input{position:absolute;opacity:0;width:0;height:0}\n.ankieta-root .opcja .tekst{flex:1;font-size:1.05rem;line-height:1.35}\n.ankieta-root .opcja .kolko{\n  flex-shrink:0;width:24px;height:24px;border-radius:50%;\n  border:2px solid var(--ink);background:transparent;\n  transition:background var(--dur) var(--ease);\n}\n\/* Stan zaznaczenia idzie przez klas\u0119 z JS, a NIE przez :has(input:checked).\n   Formularz \u0142apie zimny ruch z Meta, czyli te\u017c starsze webviews Androida,\n   gdzie :has() potrafi nie dzia\u0142a\u0107. Tam brak pod\u015bwietlenia wyboru by\u0142by\n   realnym problemem, nie kosmetyk\u0105.\n   \u26a0\ufe0f Przy zmianach CSS pami\u0119ta\u0107, \u017ce t\u0119 klas\u0119 nadaje JS. Raz ju\u017c si\u0119\n   rozjecha\u0142o: zmieniony CSS, zapomniany JS, wyb\u00f3r bez pod\u015bwietlenia,\n   a testy funkcjonalne tego nie widzia\u0142y.                              *\/\n.ankieta-root .opcja.wybrana{background:#F4F4F5;border-color:var(--line-mocna)}\n.ankieta-root .opcja.wybrana .kolko{background:var(--ink-45)}\n.ankieta-root .opcja:focus-within{outline:2px solid var(--pyt);outline-offset:2px}\n\n\/* Po odpowiedzi pytanie si\u0119 blokuje: cofanie si\u0119 i podmienianie\n   odpowiedzi jest wprost wykluczone w wymaganiach.               *\/\n.ankieta-root .pytanie.zamkniete .opcja{cursor:default;pointer-events:none}\n.ankieta-root .pytanie.zamkniete .opcja:not(.wybrana){opacity:.45}\n\n\/* Kolejne pytania wchodz\u0105 mi\u0119kko, zamiast wyskakiwa\u0107 *\/\n.ankieta-root .pytanie[hidden]{display:none}\n.ankieta-root .wchodzi{animation:ankieta-wejscie 420ms var(--ease) both}\n@keyframes ankieta-wejscie{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}\n\n\/* \u2500\u2500 Krok kontaktowy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .lead-kontakt{color:var(--ink-70);font-size:.96rem;margin-bottom:18px;line-height:1.5}\n.ankieta-root #kalendarz-awaria{\n  padding:28px 22px;text-align:center;background:#F7F7F9;\n  border:1px solid var(--line);border-radius:12px;\n}\n.ankieta-root #kalendarz-awaria[hidden]{display:none}\n.ankieta-root #kalendarz-awaria p{color:var(--ink-70);margin-bottom:12px}\n.ankieta-root #kalendarz-awaria a{color:var(--ink);font-weight:700;font-size:1.1rem;text-decoration:none}\n.ankieta-root .pola{display:flex;flex-direction:column;gap:14px;margin-bottom:16px}\n.ankieta-root .pole{display:flex;flex-direction:column;gap:6px}\n.ankieta-root .pole label{font-size:.9rem;font-weight:600;color:var(--pyt)}\n.ankieta-root .pole input{\n  font:inherit;font-size:1.02rem;color:var(--ink);\n  background:var(--surface);border:1px solid var(--line);\n  border-radius:var(--radius-opcja);padding:14px 16px;width:100%;\n  \/* 16px to prog, ponizej ktorego iOS Safari sam przybliza strone przy\n     wejsciu w pole. Zoom rozjezdza uklad i user musi go cofac recznie.  *\/\n  min-height:52px;\n  transition:border-color var(--dur) var(--ease);\n}\n.ankieta-root .pole input:focus{outline:none;border-color:var(--pyt);box-shadow:0 0 0 3px rgba(44,58,75,.1)}\n.ankieta-root .pole input.niepoprawne{border-color:#C2410C;background:#FFF7F4}\n.ankieta-root .pole .blad{font-size:.84rem;color:#C2410C;min-height:0}\n.ankieta-root .pole .blad:empty{display:none}\n\n.ankieta-root .zgoda{\n  display:flex;align-items:flex-start;gap:11px;\n  font-size:.86rem;color:var(--ink-70);line-height:1.5;\n  cursor:pointer;margin-bottom:18px;\n}\n.ankieta-root .zgoda input{\n  flex-shrink:0;width:20px;height:20px;margin-top:1px;\n  accent-color:var(--orange);cursor:pointer;\n}\n.ankieta-root .zgoda a{color:var(--ink-70)}\n\n.ankieta-root .wyslij{\n  font:inherit;font-weight:700;font-size:1.05rem;\n  background:var(--orange);color:#fff;border:0;\n  border-radius:999px;padding:17px 24px;width:100%;\n  min-height:54px;cursor:pointer;\n  box-shadow:0 8px 24px rgba(255,107,0,.24);\n  transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease);\n}\n.ankieta-root .wyslij:hover{transform:translateY(-1px)}\n.ankieta-root .wyslij:disabled{opacity:.55;cursor:default;transform:none}\n.ankieta-root .jak-przycisk{\n  display:block;text-align:center;text-decoration:none;\n  line-height:1.25;padding:18px 24px;\n}\n.ankieta-root .pod-przyciskiem{\n  margin-top:12px;font-size:.82rem;color:var(--ink-45);text-align:center;line-height:1.5;\n}\n\n\/* \u2500\u2500 Fina\u0142: ekran MQL + kalendarz \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .final[hidden],.ankieta-root .stop[hidden]{display:none}\n.ankieta-root .odznaka{\n  display:inline-block;background:rgba(255,107,3,.12);color:#C24E00;\n  font-size:.78rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;\n  padding:6px 12px;border-radius:999px;margin-bottom:14px;\n}\n.ankieta-root .final h2{\n  font-size:clamp(1.35rem,5.4vw,1.65rem);\n  line-height:1.2;margin-bottom:14px;\n}\n.ankieta-root .final>p{color:var(--ink-70);margin-bottom:14px}\n.ankieta-root .final>p:last-of-type{margin-bottom:22px;font-weight:500;color:var(--ink)}\n\n\/* Dwie zasady spotkania. Numery licznikiem CSS, \u017ceby nie wpisywa\u0107\n   ich na sztywno w tre\u015b\u0107 i nie rozjecha\u0107 przy edycji.              *\/\n.ankieta-root .zasady{list-style:none;counter-reset:zasada;margin-bottom:26px}\n.ankieta-root .zasady li{\n  counter-increment:zasada;position:relative;\n  padding:16px 18px 16px 54px;background:#F7F7F9;\n  border-radius:12px;border:1px solid var(--line);\n}\n.ankieta-root .zasady li+li{margin-top:10px}\n.ankieta-root .zasady li::before{\n  content:counter(zasada);position:absolute;left:16px;top:16px;\n  width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;\n  font-size:.85rem;font-weight:700;\n  display:flex;align-items:center;justify-content:center;\n}\n.ankieta-root .zasady h3{font-size:.98rem;font-weight:700;color:var(--pyt);margin-bottom:5px;line-height:1.3}\n.ankieta-root .zasady p{font-size:.9rem;color:var(--ink-70);line-height:1.5}\n\n\/* \u2500\u2500 Fina\u0142: odmowa \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .stop h2{font-size:1.2rem;font-weight:700;margin-bottom:12px;letter-spacing:-.01em}\n.ankieta-root .stop p{color:var(--ink-70);margin-bottom:14px}\n.ankieta-root .stop p:last-of-type{margin-bottom:0}\n.ankieta-root .stop .kontakt{\n  margin-top:20px;padding-top:18px;border-top:1px solid var(--line);\n  display:flex;flex-direction:column;gap:10px;\n}\n.ankieta-root .stop .kontakt a{\n  color:var(--ink);text-decoration:none;font-weight:600;font-size:1.02rem;\n}\n.ankieta-root .stop .kontakt a:hover{color:var(--orange)}\n\n\/* \u2500\u2500 Stopka \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ankieta-root .stopka{\n  text-align:center;font-size:.78rem;color:var(--ink-45);\n  line-height:1.65;padding:0 8px;\n}\n.ankieta-root .stopka a{color:var(--ink-45)}\n\n@media(max-width:420px){\n  .ankieta-root{padding:16px 12px 48px}\n  .ankieta-root .karta{padding:22px 18px}\n  .ankieta-root .opcja{padding:15px 16px}\n  .ankieta-root .opcja .tekst{font-size:1.02rem}\n}\n@media(prefers-reduced-motion:reduce){\n  .ankieta-root .wchodzi{animation:none}\n  .ankieta-root .opcja{transition:none}\n}\n<\/style>\n<style>\n\/* Podmiana ekranu: landing znika, zostaje sama ankieta. `> *` zamiast\n   przebudowy HTML landinga, bo header, sekcje, stopka i sticky CTA s\u0105\n   bezpo\u015brednimi dzie\u0107mi <body>.                                       *\/\nbody.ankieta-otwarta{background:#F4F4F7}\nbody.ankieta-otwarta > *:not(#ekran-ankiety){display:none}\n\n\/* \u26a0\ufe0f ZAMKNI\u0118TA ANKIETA NIE JEST `display:none`. Widget Calendly liczy\n   wysoko\u015b\u0107 iframe'a z computed height kontenera w chwili inicjalizacji.\n   W kontenerze z display:none ta wysoko\u015b\u0107 wynosi 0 i iframe zostaje\n   trwale zepsuty, bez \u017cadnego b\u0142\u0119du w konsoli. Wyniesienie poza ekran\n   zostawia elementowi prawdziwy layout, wi\u0119c Calendly mierzy tak samo\n   jak w zweryfikowanym formularz.html.                                *\/\n#ekran-ankiety.zamknieta{\n  position:absolute;top:0;left:-9999px;\n  width:592px;visibility:hidden;pointer-events:none;\n}\n<\/style>\n<\/head>\n<body>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HEADER \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<header class=\"site-header\">\n  <div class=\"container\">\n    <a href=\"#\" class=\"logo\" aria-label=\"Spoko Finanse, strona g\u0142\u00f3wna\">\n      <span class=\"logo-mark\">S<\/span>\n      Spoko Finanse\n    <\/a>\n    <a href=\"#kalendarz\" class=\"btn btn-primary\"><span class=\"btn-label-long\">Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119<\/span><\/a>\n  <\/div>\n<\/header>\n\n<main>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 HERO \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"hero\" id=\"hero\">\n  <div class=\"container\">\n    <div>\n      <span class=\"eyebrow\"><span class=\"ms\" aria-hidden=\"true\">savings<\/span> IKE + IKZE \u00b7 prywatna emerytura<\/span>\n      <h1>Zbuduj prywatn\u0105 emerytur\u0119 i co roku odbieraj <span class=\"hl\">do 3 617 z\u0142 zwrotu podatku<\/span><\/h1>\n      <p class=\"lead\">Prognozowana emerytura z ZUS to ok. 25\u201330% ostatniej pensji. Reszt\u0119 spokojnie zbudujesz z IKE i IKZE. Przeprowadzimy Ci\u0119 przez to prostym j\u0119zykiem, bez presji, chaosu i drobnego druku.<\/p>\n      <div class=\"hero-ctas\">\n        <a href=\"#kalendarz\" class=\"btn btn-primary btn-big\">Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119<\/a>\n        <a href=\"#ike-ikze\" class=\"btn btn-ghost\">Zobacz, jak to dzia\u0142a <span class=\"ms\" aria-hidden=\"true\">arrow_downward<\/span><\/a>\n      <\/div>\n      <div class=\"hero-trust\">\n        <span><span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span> Bezp\u0142atnie<\/span>\n        <span><span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span> 60 minut<\/span>\n        <span><span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span> Bez zobowi\u0105za\u0144<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"limits-card reveal\">\n      <span class=\"card-tag\">LIMITY WP\u0141AT 2026<\/span>\n      <div class=\"limit-row\">\n        <div class=\"limit-name\">IKE<small>Indywidualne Konto Emerytalne<\/small><\/div>\n        <div class=\"limit-value\">28 260 <small>z\u0142<\/small><\/div>\n      <\/div>\n      <div class=\"limit-row\">\n        <div class=\"limit-name\">IKZE<small>umowa o prac\u0119<\/small><\/div>\n        <div class=\"limit-value\">11 304 <small>z\u0142<\/small><\/div>\n      <\/div>\n      <div class=\"limit-row\">\n        <div class=\"limit-name\">IKZE<small>dzia\u0142alno\u015b\u0107 gospodarcza<\/small><\/div>\n        <div class=\"limit-value\">16 956 <small>z\u0142<\/small><\/div>\n      <\/div>\n      <p class=\"limits-note\"><span class=\"ms\" aria-hidden=\"true\">info<\/span> Tyle mo\u017cesz maksymalnie wp\u0142aci\u0107 w 2026 roku. Kwot\u0119 dopasowujesz do siebie, a najwi\u0119cej daje regularne, systematyczne odk\u0142adanie.<\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"container\">\n    <div class=\"hero-benefits reveal\">\n      <div class=\"hero-benefit\"><span class=\"ms\" aria-hidden=\"true\">receipt_long<\/span> Ni\u017cszy podatek ju\u017c dzi\u015b<\/div>\n      <div class=\"hero-benefit\"><span class=\"ms\" aria-hidden=\"true\">trending_up<\/span> Pieni\u0105dze, kt\u00f3re pracuj\u0105<\/div>\n      <div class=\"hero-benefit\"><span class=\"ms\" aria-hidden=\"true\">family_restroom<\/span> Spokojna przysz\u0142o\u015b\u0107 rodziny<\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PROBLEM \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section id=\"problem\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Znasz to?<\/span>\n      <h2>Temat emerytury ci\u0105gle czeka \u201ena p\u00f3\u017aniej\"<\/h2>\n      <p class=\"lead\">I trudno si\u0119 dziwi\u0107. Nikt nam nie pokaza\u0142, jak si\u0119 za to zabra\u0107.<\/p>\n    <\/div>\n    <div class=\"grid-3\">\n      <div class=\"card reveal\">\n        <div class=\"icon-wrap\"><span class=\"ms\" aria-hidden=\"true\">account_balance<\/span><\/div>\n        <h3>ZUS pokryje ok. 25\u201330% pensji<\/h3>\n        <p>Dla os\u00f3b, kt\u00f3re dzi\u015b maj\u0105 30\u201345 lat, prognozy s\u0105 jednoznaczne. R\u00f3\u017cnic\u0119 mi\u0119dzy pensj\u0105 a przysz\u0142\u0105 emerytur\u0105 trzeba zbudowa\u0107 samodzielnie. Im wcze\u015bniej zaczniesz, tym spokojniej.<\/p>\n      <\/div>\n      <div class=\"card reveal\">\n        <div class=\"icon-wrap\"><span class=\"ms\" aria-hidden=\"true\">savings<\/span><\/div>\n        <h3>Oszcz\u0119dno\u015bci stoj\u0105 na koncie<\/h3>\n        <p>Inflacja po cichu zmniejsza ich warto\u015b\u0107, a od ka\u017cdego zysku na lokacie pa\u0144stwo zabiera 19% podatku Belki. Samo odk\u0142adanie przesta\u0142o wystarcza\u0107.<\/p>\n      <\/div>\n      <div class=\"card reveal\">\n        <div class=\"icon-wrap\"><span class=\"ms\" aria-hidden=\"true\">psychology_alt<\/span><\/div>\n        <h3>Za du\u017co sprzecznych porad<\/h3>\n        <p>Fundusze, ETF-y, obligacje, nieruchomo\u015bci\u2026 Ka\u017cdy m\u00f3wi co innego, wi\u0119c naj\u0142atwiej nie zrobi\u0107 nic. A czas jest tu najcenniejszym zasobem.<\/p>\n      <\/div>\n    <\/div>\n    <p class=\"section-outro reveal\">Dobra wiadomo\u015b\u0107? Pa\u0144stwo daje dwa konta z realnymi korzy\u015bciami podatkowymi.<br><span class=\"hl\">Trzeba je tylko dobrze wykorzysta\u0107.<\/span><\/p>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 ROZWI\u0104ZANIE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"promise\" id=\"rozwiazanie\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Jak to zmieniamy<\/span>\n      <h2>Z IKE i IKZE mo\u017cesz\u2026<\/h2>\n    <\/div>\n    <div class=\"check-list\">\n      <div class=\"check-item reveal\">\n        <span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span>\n        <div>\n          <strong>P\u0142aci\u0107 ni\u017cszy podatek ju\u017c dzi\u015b<\/strong>\n          <span>Wp\u0142aty na IKZE odliczasz od dochodu w rocznym PIT. Zwrot trafia na Twoje konto ka\u017cdego roku. To korzy\u015b\u0107, kt\u00f3r\u0105 wida\u0107 od razu.<\/span>\n        <\/div>\n      <\/div>\n      <div class=\"check-item reveal\">\n        <span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span>\n        <div>\n          <strong>Nie oddawa\u0107 19% od zysk\u00f3w<\/strong>\n          <span>Na IKE Twoje pieni\u0105dze rosn\u0105 bez podatku Belki. Po spe\u0142nieniu warunk\u00f3w (m.in. 60. rok \u017cycia) wyp\u0142acasz ca\u0142o\u015b\u0107, razem z zyskami, bez podatku.<\/span>\n        <\/div>\n      <\/div>\n      <div class=\"check-item reveal\">\n        <span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span>\n        <div>\n          <strong>Zachowa\u0107 pe\u0142n\u0105 kontrol\u0119<\/strong>\n          <span>To prywatne konta. \u015arodki s\u0105 Twoje, mo\u017cesz je wcze\u015bniej wycofa\u0107, a w razie czego podlegaj\u0105 dziedziczeniu. To nie ZUS.<\/span>\n        <\/div>\n      <\/div>\n      <div class=\"check-item reveal\">\n        <span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span>\n        <div>\n          <strong>Mie\u0107 prosty plan zamiast chaosu<\/strong>\n          <span>Dobieramy konto, instytucj\u0119 i kwoty do Twojej sytuacji. Ty podejmujesz decyzje, my pilnujemy szczeg\u00f3\u0142\u00f3w.<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n    <div class=\"promise-cta reveal\">\n      <a href=\"#kalendarz\" class=\"btn btn-primary btn-big\">Porozmawiajmy o Twoim planie<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 IKE vs IKZE \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section id=\"ike-ikze\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Prostym j\u0119zykiem<\/span>\n      <h2>Czym r\u00f3\u017cni si\u0119 IKE od IKZE?<\/h2>\n      <p class=\"lead\">Dwa konta, dwie r\u00f3\u017cne korzy\u015bci podatkowe. Oba dzia\u0142aj\u0105 na Twoj\u0105 korzy\u015b\u0107.<\/p>\n    <\/div>\n    <div class=\"grid-2 compare\">\n      <div class=\"card reveal\">\n        <span class=\"badge dark\">ZERO PODATKU BELKI<\/span>\n        <h3>IKE<\/h3>\n        <p class=\"sub\">Indywidualne Konto Emerytalne<\/p>\n        <ul class=\"spec\">\n          <li><span class=\"ms\" aria-hidden=\"true\">payments<\/span><div><strong>Limit wp\u0142at 2026<\/strong><span>28 260 z\u0142<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">verified<\/span><div><strong>G\u0142\u00f3wna korzy\u015b\u0107<\/strong><span>zyski bez 19% podatku Belki<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">event_available<\/span><div><strong>Wyp\u0142ata bez podatku<\/strong><span>po 60. roku \u017cycia (lub 55. z uprawnieniami emerytalnymi)<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">lock_open<\/span><div><strong>Elastyczno\u015b\u0107<\/strong><span>w razie potrzeby wyp\u0142acisz \u015brodki wcze\u015bniej, p\u0142ac\u0105c tylko podatek Belki od wypracowanego zysku<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">person<\/span><div><strong>Najlepsze dla<\/strong><span>buduj\u0105cych kapita\u0142 na d\u0142ugi termin<\/span><\/div><\/li>\n        <\/ul>\n      <\/div>\n      <div class=\"card reveal\">\n        <span class=\"badge orange\">ZWROT PODATKU CO ROKU<\/span>\n        <h3>IKZE<\/h3>\n        <p class=\"sub\">Indywidualne Konto Zabezpieczenia Emerytalnego<\/p>\n        <ul class=\"spec\">\n          <li><span class=\"ms\" aria-hidden=\"true\">payments<\/span><div><strong>Limit wp\u0142at 2026<\/strong><span>11 304 z\u0142 (etat) \u00b7 16 956 z\u0142 (dzia\u0142alno\u015b\u0107)<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">verified<\/span><div><strong>G\u0142\u00f3wna korzy\u015b\u0107<\/strong><span>wp\u0142aty odliczasz od dochodu w PIT<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">event_available<\/span><div><strong>Wyp\u0142ata<\/strong><span>po 65. roku \u017cycia, z niskim rycza\u0142tem 10%<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">warning<\/span><div><strong>Wcze\u015bniejsza wyp\u0142ata<\/strong><span>mniej op\u0142acalna, bo ca\u0142\u0105 kwot\u0119 doliczasz w danym roku do przychodu i p\u0142acisz od niej PIT<\/span><\/div><\/li>\n          <li><span class=\"ms\" aria-hidden=\"true\">person<\/span><div><strong>Najlepsze dla<\/strong><span>p\u0142ac\u0105cych wy\u017csze podatki, korzy\u015b\u0107 wida\u0107 od razu<\/span><\/div><\/li>\n        <\/ul>\n      <\/div>\n    <\/div>\n    <div class=\"both-bar reveal\">\n      <span class=\"ms\" aria-hidden=\"true\">lightbulb<\/span>\n      Nie musisz wybiera\u0107. IKE i IKZE mo\u017cesz mie\u0107 jednocze\u015bnie i cz\u0119sto to w\u0142a\u015bnie najlepszy plan.\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 WYLICZENIA \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section class=\"calc\" id=\"wyliczenia\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Rezultat z praktyki<\/span>\n      <h2>Policzmy to na liczbach<\/h2>\n      <p class=\"lead\">Bo konkrety m\u00f3wi\u0105 wi\u0119cej ni\u017c obietnice.<\/p>\n    <\/div>\n    <div class=\"card calc-card kalkulator reveal\">\n      <span class=\"calc-tag\"><span class=\"ms\" aria-hidden=\"true\">payments<\/span> Kalkulator IKE i IKZE<\/span>\n      <h3>Policz swoj\u0105 sytuacj\u0119<\/h3>\n      <p class=\"kalk-wstep\">Przesu\u0144 suwaki i zobacz, ile zostaje po Twojej stronie.<\/p>\n\n      <div class=\"kalk-pola\">\n        <div class=\"kalk-pole\">\n          <label for=\"kalkKwota\">Odk\u0142adam miesi\u0119cznie<\/label>\n          <output id=\"kalkKwotaOut\" for=\"kalkKwota\">500 z\u0142<\/output>\n          <input type=\"range\" id=\"kalkKwota\" min=\"100\" max=\"2500\" step=\"50\" value=\"500\">\n        <\/div>\n        <div class=\"kalk-pole\">\n          <label for=\"kalkLata\">Do emerytury zosta\u0142o mi<\/label>\n          <output id=\"kalkLataOut\" for=\"kalkLata\">25 lat<\/output>\n          <input type=\"range\" id=\"kalkLata\" min=\"5\" max=\"40\" step=\"1\" value=\"25\">\n        <\/div>\n      <\/div>\n\n      <fieldset class=\"kalk-forma\">\n        <legend>Jak zarabiam<\/legend>\n        <div class=\"kalk-opcje\" id=\"kalkForma\">\n          <label><input type=\"radio\" name=\"kalkForma\" value=\"etat12\"> Etat, I pr\u00f3g <span class=\"stawka\">12%<\/span><\/label>\n          <label><input type=\"radio\" name=\"kalkForma\" value=\"etat32\" checked> Etat, II pr\u00f3g <span class=\"stawka\">32%<\/span><\/label>\n          <label><input type=\"radio\" name=\"kalkForma\" value=\"jdg19\"> Dzia\u0142alno\u015b\u0107, liniowy <span class=\"stawka\">19%<\/span><\/label>\n        <\/div>\n      <\/fieldset>\n\n      <div class=\"kalk-wyniki\" aria-live=\"polite\">\n        <div class=\"kalk-wynik\">\n          <span class=\"kalk-etykieta\">Zwrot podatku co roku<\/span>\n          <div class=\"big-number\" id=\"kalkZwrot\">1 920 z\u0142<\/div>\n          <p class=\"kalk-nota\" id=\"kalkZwrotNota\">z IKZE, przy Twojej stawce podatku<\/p>\n        <\/div>\n        <div class=\"kalk-wynik\">\n          <span class=\"kalk-etykieta\">Na koncie po <span id=\"kalkLataEtykieta\">25<\/span> latach<\/span>\n          <div class=\"big-number\" id=\"kalkKapital\">346 497 z\u0142<\/div>\n          <p class=\"kalk-nota\">przy \u015bredniej stopie zwrotu 6% rocznie<\/p>\n        <\/div>\n      <\/div>\n\n      <ul class=\"calc-breakdown\">\n        <li>Suma Twoich wp\u0142at <span class=\"val\" id=\"kalkSuma\">150 000 z\u0142<\/span><\/li>\n        <li>Wypracowany zysk <span class=\"val\" id=\"kalkZysk\">196 497 z\u0142<\/span><\/li>\n        <li>Zwrot podatku przez ca\u0142y okres <span class=\"val\" id=\"kalkZwrotSuma\">48 000 z\u0142<\/span><\/li>\n        <li>Podatek Belki <span class=\"val\" id=\"kalkBelka\" style=\"color:var(--orange)\">0 z\u0142 zamiast 37 334 z\u0142<\/span><\/li>\n      <\/ul>\n    <\/div>\n    <p class=\"fine-print reveal\">Wyliczenia maj\u0105 charakter przyk\u0142adowy i edukacyjny. Przyj\u0119to sta\u0142\u0105 stop\u0119 zwrotu 6% rocznie oraz limity i stawki podatkowe obowi\u0105zuj\u0105ce w 2026 r. Rzeczywiste wyniki zale\u017c\u0105 od wybranych instrument\u00f3w i sytuacji rynkowej. Inwestowanie wi\u0105\u017ce si\u0119 z ryzykiem.<\/p>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 PROCES \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section id=\"proces\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Jak wygl\u0105da wsp\u00f3\u0142praca<\/span>\n      <h2>Trzy spokojne kroki<\/h2>\n    <\/div>\n    <div class=\"steps\">\n      <div class=\"step reveal\">\n        <h3>Bezp\u0142atna rozmowa<\/h3>\n        <p>60 minut rozmowy online. Poznajemy Twoj\u0105 sytuacj\u0119, cele i mo\u017cliwo\u015bci. Nie musisz si\u0119 przygotowywa\u0107 ani niczego liczy\u0107, od tego jeste\u015bmy my.<\/p>\n      <\/div>\n      <div class=\"step reveal\">\n        <h3>Prosty plan<\/h3>\n        <p>Dostajesz konkretn\u0105 rekomendacj\u0119: IKE, IKZE czy oba, z kwotami dopasowanymi do Twojego bud\u017cetu i por\u00f3wnaniem instytucji. Wszystko wyja\u015bnione prostym j\u0119zykiem.<\/p>\n      <\/div>\n      <div class=\"step reveal\">\n        <h3>Wdro\u017cenie i opieka<\/h3>\n        <p>Pomagamy w formalno\u015bciach i zostajemy z Tob\u0105 na d\u0142u\u017cej. Co roku przypominamy o limitach i sprawdzamy, czy plan nadal pasuje do Twojego \u017cycia.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 DLACZEGO MY \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section style=\"padding-top:0\" id=\"dlaczego-my\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Dlaczego Spoko Finanse<\/span>\n      <h2>Spok\u00f3j w finansach zaczyna si\u0119 od rozmowy<\/h2>\n    <\/div>\n    <div class=\"values\">\n      <div class=\"value reveal\">\n        <span class=\"ms\" aria-hidden=\"true\">hearing<\/span>\n        <h3>Najpierw s\u0142uchamy<\/h3>\n        <p>Zaczynamy od Twojej sytuacji, nie od gotowej oferty.<\/p>\n      <\/div>\n      <div class=\"value reveal\">\n        <span class=\"ms\" aria-hidden=\"true\">chat_bubble<\/span>\n        <h3>M\u00f3wimy po ludzku<\/h3>\n        <p>Zawi\u0142o\u015bci t\u0142umaczymy prostym j\u0119zykiem, bez \u017cargonu.<\/p>\n      <\/div>\n      <div class=\"value reveal\">\n        <span class=\"ms\" aria-hidden=\"true\">thumb_up<\/span>\n        <h3>Bez presji<\/h3>\n        <p>Decyzj\u0119 podejmujesz w swoim tempie. Rozmowa do niczego nie zobowi\u0105zuje.<\/p>\n      <\/div>\n      <div class=\"value reveal\">\n        <span class=\"ms\" aria-hidden=\"true\">shield<\/span>\n        <h3>Po Twojej stronie<\/h3>\n        <p>Por\u00f3wnujemy rozwi\u0105zania wielu instytucji i dobieramy to, co s\u0142u\u017cy Tobie.<\/p>\n      <\/div>\n    <\/div>\n\n    <!-- \u2550\u2550\u2550 OPINIE KLIENT\u00d3W - odkomentuj i wstaw prawdziwe opinie \u2550\u2550\u2550\n    <div class=\"grid-3\" style=\"margin-top:24px\">\n      <div class=\"card reveal\">\n        <p style=\"font-size:.95rem\">\u201e[Opinia klienta: 2-3 zdania o wsp\u00f3\u0142pracy przy IKE\/IKZE]\"<\/p>\n        <p style=\"margin-top:14px;font-weight:700;color:var(--ink)\">[Imi\u0119 i nazwisko]<\/p>\n        <p style=\"font-size:.85rem\">[Miasto]<\/p>\n      <\/div>\n      <div class=\"card reveal\">\n        <p style=\"font-size:.95rem\">\u201e[Opinia klienta]\"<\/p>\n        <p style=\"margin-top:14px;font-weight:700;color:var(--ink)\">[Imi\u0119 i nazwisko]<\/p>\n        <p style=\"font-size:.85rem\">[Miasto]<\/p>\n      <\/div>\n      <div class=\"card reveal\">\n        <p style=\"font-size:.95rem\">\u201e[Opinia klienta]\"<\/p>\n        <p style=\"margin-top:14px;font-weight:700;color:var(--ink)\">[Imi\u0119 i nazwisko]<\/p>\n        <p style=\"font-size:.85rem\">[Miasto]<\/p>\n      <\/div>\n    <\/div>\n    -->\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 ZESP\u00d3\u0141 \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section style=\"padding-top:0\" id=\"zespol\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Zesp\u00f3\u0142<\/span>\n      <h2>Z kim b\u0119dziesz rozmawia\u0107<\/h2>\n      <p>Konsultacj\u0119 poprowadzi jedna z tych os\u00f3b. Poznaj je, zanim um\u00f3wisz termin.<\/p>\n    <\/div>\n    <div class=\"team\">\n\n      <article class=\"member reveal\">\n        <img loading=\"lazy\" src=\"img\/grzegorz-rejchinbach.webp\" width=\"560\" height=\"747\" loading=\"lazy\" decoding=\"async\"\n             alt=\"Grzegorz Rejchinbach, partner i doradca finansowy w Spoko Finanse\">\n        <div class=\"member-body\">\n          <h3>Grzegorz Rejchinbach<\/h3>\n          <p class=\"role\">Partner \/ Doradca finansowy<\/p>\n          <p>Porz\u0105dkuje najwa\u017cniejsze decyzje i pomaga przej\u015b\u0107 przez rozmow\u0119 spokojnie, bez presji.<\/p>\n        <\/div>\n      <\/article>\n\n      <article class=\"member reveal\">\n        <img loading=\"lazy\" src=\"img\/jakub-kreft.webp\" width=\"560\" height=\"747\" loading=\"lazy\" decoding=\"async\"\n             alt=\"Jakub Kreft, partner i doradca finansowy w Spoko Finanse\">\n        <div class=\"member-body\">\n          <h3>Jakub Kreft<\/h3>\n          <p class=\"role\">Partner \/ Doradca finansowy<\/p>\n          <p>T\u0142umaczy mo\u017cliwo\u015bci prostym j\u0119zykiem i pomaga spokojnie wybra\u0107 dobry kierunek.<\/p>\n        <\/div>\n      <\/article>\n\n      <article class=\"member reveal\">\n        <img loading=\"lazy\" src=\"img\/maciej-bartkowski.webp\" width=\"560\" height=\"747\" loading=\"lazy\" decoding=\"async\"\n             alt=\"Maciej Bartkowski, partner i doradca finansowy w Spoko Finanse\">\n        <div class=\"member-body\">\n          <h3>Maciej Bartkowski<\/h3>\n          <p class=\"role\">Partner \/ Doradca finansowy<\/p>\n          <p>Pomaga pouk\u0142ada\u0107 sprawy krok po kroku, \u017ceby decyzja by\u0142a zrozumia\u0142a i spokojna.<\/p>\n        <\/div>\n      <\/article>\n\n      <article class=\"member reveal\">\n        <img loading=\"lazy\" src=\"img\/monika-dembinska.webp\" width=\"560\" height=\"747\" loading=\"lazy\" decoding=\"async\"\n             alt=\"Monika Dembi\u0144ska, partner i doradca finansowy w Spoko Finanse\">\n        <div class=\"member-body\">\n          <h3>Monika Dembi\u0144ska<\/h3>\n          <p class=\"role\">Partner \/ Doradca finansowy<\/p>\n          <p>Wspiera klient\u00f3w i zesp\u00f3\u0142 w podejmowaniu decyzji, kt\u00f3re daj\u0105 wi\u0119cej spokoju na co dzie\u0144.<\/p>\n        <\/div>\n      <\/article>\n\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 KALENDARZ \/ CTA \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section id=\"kalendarz\" style=\"padding-top:0\">\n  <div class=\"container\">\n    <div class=\"booking-card reveal\">\n      <span class=\"eyebrow\" style=\"background:rgba(255,255,255,.12);color:#FFB073\">Porozmawiajmy<\/span>\n      <h2>Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119<\/h2>\n      <p class=\"lead\">60 minut spokojnej rozmowy o Twojej emeryturze. Wyjdziesz z niej z konkretn\u0105 wiedz\u0105, co mo\u017cesz zrobi\u0107. Nawet je\u015bli ostatecznie zdecydujesz si\u0119 dzia\u0142a\u0107 na w\u0142asn\u0105 r\u0119k\u0119.<\/p>\n\n      <!-- CTA do ankiety. Link WZGL\u0118DNY, bo landing i ankieta le\u017c\u0105 obok\n           siebie na tym samym hostingu. Przy zmianie domeny nie ma tu\n           nic do podmieniania.\n\n           W wariancie A (index-inline.html) ten href s\u0142u\u017cy ju\u017c tylko jako\n           zapas: skrypt przechwytuje klikni\u0119cie i otwiera ankiet\u0119 w miejscu,\n           a gdyby JS nie wystartowa\u0142, cz\u0142owiek trafia na osobn\u0105 stron\u0119\n           zamiast w martwy przycisk.                                   -->\n      <a href=\"formularz.html\" class=\"btn btn-primary btn-big\"\n         data-ankieta-start>\n        <span class=\"ms\" aria-hidden=\"true\">calendar_month<\/span> Um\u00f3w rozmow\u0119\n      <\/a>\n\n      <div class=\"booking-trust\">\n        <span><span class=\"ms fill\" aria-hidden=\"true\">check_circle<\/span> Bezp\u0142atnie i bez zobowi\u0105za\u0144<\/span>\n        <span><span class=\"ms fill\" aria-hidden=\"true\">videocam<\/span> Spotkanie online<\/span>\n        <span><span class=\"ms fill\" aria-hidden=\"true\">schedule<\/span> Ok. 60 minut<\/span>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 FAQ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<section id=\"faq\" style=\"padding-top:0\">\n  <div class=\"container\">\n    <div class=\"section-head reveal\">\n      <span class=\"eyebrow\">Cz\u0119ste pytania<\/span>\n      <h2>To, o co pytaj\u0105 nas najcz\u0119\u015bciej<\/h2>\n    <\/div>\n    <div class=\"faq-list\">\n      <details class=\"faq-item reveal\">\n        <summary>Czym w\u0142a\u015bciwie r\u00f3\u017cni si\u0119 IKE od IKZE? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Najkr\u00f3cej: <strong>IKZE daje korzy\u015b\u0107 od razu<\/strong>. Wp\u0142aty odliczasz od dochodu i co roku dostajesz zwrot podatku. <strong>IKE daje korzy\u015b\u0107 na ko\u0144cu<\/strong>: po 60. roku \u017cycia wyp\u0142acasz \u015brodki z zyskami bez 19% podatku Belki.<\/p>\n          <p>Mo\u017cna mie\u0107 oba konta jednocze\u015bnie i to cz\u0119sto najlepsze rozwi\u0105zanie. Na rozmowie poka\u017cemy, co ma sens w Twojej sytuacji.<\/p>\n        <\/div>\n      <\/details>\n      <details class=\"faq-item reveal\">\n        <summary>Czy musz\u0119 si\u0119 zna\u0107 na inwestowaniu? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Nie. Nasz\u0105 rol\u0105 jest dobra\u0107 rozwi\u0105zanie do Twojej wiedzy, czasu i odporno\u015bci na ryzyko, od najprostszych, spokojnych opcji po bardziej aktywne. Wszystko wyja\u015bniamy prostym j\u0119zykiem, a decyzje zawsze nale\u017c\u0105 do Ciebie.<\/p>\n        <\/div>\n      <\/details>\n      <details class=\"faq-item reveal\">\n        <summary>Ile kosztuje konsultacja? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Nic. Pierwsza rozmowa jest bezp\u0142atna i do niczego nie zobowi\u0105zuje. W godzin\u0119 poznasz swoje mo\u017cliwo\u015bci i konkretne liczby dla Twojej sytuacji.<\/p>\n        <\/div>\n      <\/details>\n      <details class=\"faq-item reveal\">\n        <summary>Czy mog\u0119 wyp\u0142aci\u0107 pieni\u0105dze wcze\u015bniej? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Tak. To Twoje prywatne \u015brodki i masz do nich dost\u0119p w ka\u017cdej chwili. Przy wcze\u015bniejszej wyp\u0142acie tracisz tylko korzy\u015bci podatkowe: na IKE zap\u0142acisz podatek Belki od zysk\u00f3w, a wyp\u0142at\u0119 z IKZE doliczysz do dochodu w PIT.<\/p>\n          <p>Pe\u0142nia korzy\u015bci przychodzi z wiekiem: 60 lat na IKE i 65 lat na IKZE.<\/p>\n        <\/div>\n      <\/details>\n      <details class=\"faq-item reveal\">\n        <summary>Ile i jak cz\u0119sto najlepiej wp\u0142aca\u0107? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Najlepiej regularnie. To w\u0142a\u015bnie systematyczne odk\u0142adanie buduje nawyk i pozwala w pe\u0142ni wykorzysta\u0107 procent sk\u0142adany. Nawet niewielka, ale sta\u0142a kwota z czasem robi ogromn\u0105 r\u00f3\u017cnic\u0119.<\/p>\n          <p>Wysoko\u015b\u0107 dopasowujesz do swoich mo\u017cliwo\u015bci, licz\u0105 si\u0119 tylko roczne limity. W 2026 roku: <strong>28 260 z\u0142 na IKE<\/strong> oraz <strong>11 304 z\u0142 na IKZE<\/strong> (16 956 z\u0142 przy dzia\u0142alno\u015bci gospodarczej).<\/p>\n        <\/div>\n      <\/details>\n      <details class=\"faq-item reveal\">\n        <summary>Mam 45+ lat, czy to nie za p\u00f3\u017ano? <span class=\"ms\" aria-hidden=\"true\">add<\/span><\/summary>\n        <div class=\"faq-body\">\n          <p>Nie. Do 60\u201365 lat zostaje Ci jeszcze 15\u201320 lat, a to d\u0142ugi horyzont. Korzy\u015b\u0107 z IKZE (zwrot podatku) dzia\u0142a od pierwszego roku, niezale\u017cnie od wieku. Najlepszy moment na start by\u0142 10 lat temu, drugi najlepszy jest dzi\u015b.<\/p>\n        <\/div>\n      <\/details>\n    <\/div>\n  <\/div>\n<\/section>\n\n<\/main>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 FOOTER \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<footer class=\"site-footer\">\n  <div class=\"container\">\n    <div class=\"footer-top\">\n      <a href=\"#\" class=\"logo\"><span class=\"logo-mark\">S<\/span> Spoko Finanse<\/a>\n      <div class=\"footer-links\">\n        <a href=\"https:\/\/spokofinanse.com\/\">spokofinanse.com<\/a>\n        <a href=\"#\">Polityka prywatno\u015bci<\/a>\n        <a href=\"#\" target=\"_blank\" rel=\"noopener\">Obowi\u0105zek informacyjny<\/a>\n      <\/div>\n    <\/div>\n\n    <div class=\"footer-contact\">\n      <a href=\"tel:+48695344423\"><span class=\"ms\" aria-hidden=\"true\">call<\/span> +48 695 344 423<\/a>\n      <a href=\"mailto:kdfrejchinbach@phinance.pl\"><span class=\"ms\" aria-hidden=\"true\">mail<\/span> kdfrejchinbach@phinance.pl<\/a>\n      <span class=\"addr\"><span class=\"ms\" aria-hidden=\"true\">location_on<\/span> Juliusza S\u0142owackiego 2B, 80-281 Gda\u0144sk<\/span>\n    <\/div>\n\n    <div class=\"legal\">\n      <!-- Dane rejestrowe administratora danych. Uzupe\u0142nione 2026-08-15\n           z CEIDG. Adres przyszed\u0142 w kolejno\u015bci \"Przyja\u017a\u0144, ul. \u015awierkowa,\n           nr 28B, 83-331\", zapisany tutaj w normalnej polskiej kolejno\u015bci. -->\n      <p class=\"podmiot\">\n        <strong>GRZEGORZ REJCHINBACH GREGOR D.F.<\/strong><br>\n        ul. \u015awierkowa 28B, 83-331 Przyja\u017a\u0144<br>\n        NIP 5782863159 \u00b7 REGON 221744910\n      <\/p>\n      <p>Tre\u015bci na tej stronie maj\u0105 charakter informacyjno-marketingowy i nie stanowi\u0105 doradztwa inwestycyjnego, podatkowego ani rekomendacji w rozumieniu obowi\u0105zuj\u0105cych przepis\u00f3w. Przedstawione wyliczenia s\u0105 przyk\u0142adowe. Inwestowanie wi\u0105\u017ce si\u0119 z ryzykiem, a wyniki historyczne nie gwarantuj\u0105 wynik\u00f3w przysz\u0142ych.<\/p>\n      <p>\u00a9 <span id=\"year\">2026<\/span> Spoko Finanse \u00b7 Gda\u0144sk \u00b7 Gdynia \u00b7 Sopot<\/p>\n    <\/div>\n  <\/div>\n<\/footer>\n\n<div class=\"mobile-cta\" id=\"mobileCta\">\n  <a href=\"#kalendarz\" class=\"btn btn-primary\">Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119<\/a>\n<\/div>\n\n<script>\ndocument.getElementById('year').textContent = new Date().getFullYear();\n\n\/\/ Scroll reveal: subtelne wej\u015bcie sekcji (wy\u0142\u0105czone przy prefers-reduced-motion przez CSS)\nconst io = new IntersectionObserver((entries) => {\n  entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); } });\n}, { threshold: 0.12, rootMargin: '0px 0px -40px 0px' });\ndocument.querySelectorAll('.reveal').forEach(el => io.observe(el));\n\n\/\/ Sticky CTA na mobile: pokazuje si\u0119, gdy przyciski hero znikn\u0105 z ekranu,\n\/\/ chowa si\u0119, gdy wida\u0107 sekcj\u0119 kalendarza (\u017ceby nie dublowa\u0107 CTA)\nconst bar = document.getElementById('mobileCta');\nlet heroOut = false, bookingIn = false;\nconst updateBar = () => bar.classList.toggle('show', heroOut && !bookingIn);\nnew IntersectionObserver(e => { heroOut = !e[0].isIntersecting; updateBar(); }).observe(document.querySelector('.hero-ctas'));\nnew IntersectionObserver(e => { bookingIn = e[0].isIntersecting; updateBar(); }, { threshold: .2 }).observe(document.getElementById('kalendarz'));\n\n\/* \u2500\u2500 Kalkulator IKE\/IKZE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n   Wzory CELOWO takie same, jakimi policzone by\u0142y wcze\u015bniejsze\n   statyczne liczby w tej sekcji (kapitalizacja miesi\u0119czna, 6% r\/r),\n   \u017ceby kalkulator nie przeczy\u0142 reszcie strony. Kontrola: 500 z\u0142\n   przez 25 lat = 346 497 z\u0142, wp\u0142aty 150 000, zysk 196 497.        *\/\n(function () {\n  const STOPA = 0.06;      \/\/ \u015brednia roczna stopa zwrotu\n  const BELKA = 0.19;      \/\/ podatek od zysk\u00f3w kapita\u0142owych\n  \/\/ limity wp\u0142at na IKZE w 2026 r. + stawka podatku dla formy zarobku\n  const FORMY = {\n    etat12: { limit: 11304, stawka: 0.12 },\n    etat32: { limit: 11304, stawka: 0.32 },\n    jdg19:  { limit: 16956, stawka: 0.19 }\n  };\n\n  const kwota = document.getElementById('kalkKwota');\n  const lata  = document.getElementById('kalkLata');\n  if (!kwota || !lata) return;\n\n  const el = id => document.getElementById(id);\n  \/\/ Grupujemy RECZNIE, bo toLocaleString('pl-PL') nie stawia separatora\n  \/\/ w liczbach czterocyfrowych (1920, nie 1 920), a reszta strony grupuje.\n  \/\/ Twarda spacja, zeby liczba nie lamala sie na koncu linii.\n  const zl = n => Math.round(n).toString()\n    .replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, '\\u00A0') + ' z\u0142';\n\n  \/\/ polska odmiana: 1 rok, 2-4 lata, 5+ lat (z wyj\u0105tkiem 12-14)\n  function lataSlowo(n) {\n    if (n === 1) return 'rok';\n    const d = n % 10, s = n % 100;\n    return (d >= 2 && d <= 4 && !(s >= 12 && s <= 14)) ? 'lata' : 'lat';\n  }\n\n  function przelicz() {\n    const W = +kwota.value, N = +lata.value;\n    const forma = FORMY[document.querySelector('input[name=\"kalkForma\"]:checked').value];\n\n    const i = STOPA \/ 12, m = N * 12;\n    const kapital = W * ((Math.pow(1 + i, m) - 1) \/ i);\n    const suma = W * m;\n    const zysk = kapital - suma;\n\n    const rocznaWplata = W * 12;\n    const zwrot = Math.min(rocznaWplata, forma.limit) * forma.stawka;\n\n    el('kalkKwotaOut').textContent = zl(W);\n    el('kalkLataOut').textContent = N + ' ' + lataSlowo(N);\n    el('kalkLataEtykieta').textContent = N;\n    el('kalkZwrot').textContent = zl(zwrot);\n    el('kalkKapital').textContent = zl(kapital);\n    el('kalkSuma').textContent = zl(suma);\n    el('kalkZysk').textContent = zl(zysk);\n    el('kalkZwrotSuma').textContent = zl(zwrot * N);\n    el('kalkBelka').textContent = '0 z\u0142 zamiast ' + zl(zysk * BELKA);\n\n    \/\/ uczciwie: powy\u017cej limitu IKZE zwrot przestaje rosn\u0105\u0107\n    el('kalkZwrotNota').textContent = rocznaWplata > forma.limit\n      ? 'Zwrot liczony do limitu IKZE (' + zl(forma.limit) + ' rocznie). Nadwy\u017ck\u0119 wp\u0142acasz na IKE.'\n      : 'z IKZE, przy Twojej stawce podatku';\n  }\n\n  [kwota, lata].forEach(s => s.addEventListener('input', przelicz));\n  document.querySelectorAll('input[name=\"kalkForma\"]').forEach(r => {\n    r.addEventListener('change', function () {\n      document.querySelectorAll('#kalkForma label').forEach(l => l.classList.remove('wybrana'));\n      this.closest('label').classList.add('wybrana');\n      przelicz();\n    });\n  });\n  document.querySelector('input[name=\"kalkForma\"]:checked').closest('label').classList.add('wybrana');\n  przelicz();\n})();\n<\/script>\n\n<!-- \u2500\u2500 ANKIETA WBUDOWANA (wariant A) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n<!-- \u26a0\ufe0f Blok generowany z ankieta.zrodlo.html przez zbuduj.py. Nie edytuj go tutaj, bo zniknie przy najbli\u017cszym przebudowaniu. -->\n<div id=\"ekran-ankiety\" class=\"ankieta-root zamknieta\">\n\n  <div class=\"karta intro\" id=\"ankieta-intro\">\n    <div class=\"znak\" aria-hidden=\"true\">S<\/div>\n    <p class=\"marka\">Spoko Finanse<\/p>\n    <h1>Odzyskaj nawet 3000 z\u0142 z PIT dzi\u0119ki IKZE<\/h1>\n    <p class=\"lead\">Wype\u0142nij formularz, zadzwoni\u0119 i policz\u0119 to dla Twojej sytuacji.<\/p>\n  <\/div>\n\n  <!-- Pytania wstrzykuje JS z tablicy PYTANIA, \u017ceby regu\u0142y odci\u0119cia\n       i tre\u015b\u0107 sta\u0142y w jednym miejscu, a nie w dw\u00f3ch do rozjechania. -->\n  <div id=\"kroki\"><\/div>\n\n  <!-- Krok 6: kontakt. Pokazuje sie DOPIERO po przejsciu kwalifikacji,\n       przed ekranem MQL. Dzieki temu do arkusza trafia takze ten, kto\n       obejrzy kalendarz i go zamknie, czyli dzis najwieksza dziura\n       w lejku. Odcieci tu nie docieraja i nie zostawiaja danych.     -->\n  <section class=\"karta pytanie\" id=\"krok-kontakt\" hidden>\n    <h2>Do kogo mamy si\u0119 odezwa\u0107?<\/h2>\n    <p class=\"lead-kontakt\">Zostaw kontakt, a za chwil\u0119 wybierzesz termin. Gdyby co\u015b nie wysz\u0142o z kalendarzem, odezwiemy si\u0119 sami.<\/p>\n\n    <form id=\"formularz-kontakt\" novalidate>\n      <div class=\"pola\">\n        <div class=\"pole\">\n          <label for=\"pole-imie\">Imi\u0119 i nazwisko<\/label>\n          <input id=\"pole-imie\" name=\"imie\" type=\"text\" autocomplete=\"name\"\n                 enterkeyhint=\"next\" required>\n          <span class=\"blad\" id=\"blad-imie\" aria-live=\"polite\"><\/span>\n        <\/div>\n        <div class=\"pole\">\n          <label for=\"pole-telefon\">Telefon<\/label>\n          <input id=\"pole-telefon\" name=\"telefon\" type=\"tel\" inputmode=\"tel\"\n                 autocomplete=\"tel\" enterkeyhint=\"next\" required>\n          <span class=\"blad\" id=\"blad-telefon\" aria-live=\"polite\"><\/span>\n        <\/div>\n        <div class=\"pole\">\n          <label for=\"pole-email\">E-mail<\/label>\n          <input id=\"pole-email\" name=\"email\" type=\"email\" inputmode=\"email\"\n                 autocomplete=\"email\" enterkeyhint=\"done\" required>\n          <span class=\"blad\" id=\"blad-email\" aria-live=\"polite\"><\/span>\n        <\/div>\n      <\/div>\n\n      <label class=\"zgoda\">\n        <input type=\"checkbox\" id=\"pole-zgoda\" required>\n        <span>Wyra\u017cam zgod\u0119 na kontakt mailowy lub telefoniczny w celu obs\u0142ugi powy\u017cszego zapytania.\n        <a href=\"#\" id=\"link-rodo\" target=\"_blank\" rel=\"noopener\">Obowi\u0105zek informacyjny<\/a><\/span>\n      <\/label>\n      <span class=\"blad\" id=\"blad-zgoda\" aria-live=\"polite\"><\/span>\n\n      <button type=\"submit\" class=\"wyslij\" id=\"przycisk-wyslij\">Poka\u017c terminy<\/button>\n      <p class=\"pod-przyciskiem\">Nie wysy\u0142amy newslettera. Kontaktujemy si\u0119 tylko w sprawie tej rozmowy.<\/p>\n    <\/form>\n  <\/section>\n\n  <!-- Pokazuje si\u0119 po otwarciu kalendarza w nowej karcie. Bez tego\n       cz\u0142owiek zostaje na formularzu, kt\u00f3ry pozornie nic nie zrobi\u0142,\n       a je\u015bli przegl\u0105darka zablokowa\u0142a now\u0105 kart\u0119, to nie ma nawet jak\n       si\u0119 dosta\u0107 do kalendarza.                                       -->\n  <section class=\"karta pytanie\" id=\"karta-otwarto\" hidden>\n    <h2>Kalendarz otworzy\u0142 si\u0119 w nowej karcie<\/h2>\n    <p class=\"lead-kontakt\">Przejd\u017a do niej i wybierz termin. Je\u015bli nowa karta si\u0119 nie pokaza\u0142a, kliknij poni\u017cej.<\/p>\n    <a class=\"wyslij jak-przycisk\" id=\"link-mql\" href=\"https:\/\/spokofinanse.piotrluszczak.pl\/?page_id=27\" target=\"_blank\">Otw\u00f3rz kalendarz<\/a>\n  <\/section>\n\n  <div class=\"karta stop\" id=\"stop\" hidden><\/div>\n\n  <p class=\"stopka\">\n    Spoko Finanse \u00b7 GRZEGORZ REJCHINBACH GREGOR D.F.<br>\n    ul. \u015awierkowa 28B, 83-331 Przyja\u017a\u0144 \u00b7 NIP 5782863159<br>\n    Tre\u015bci maj\u0105 charakter informacyjno-marketingowy i nie stanowi\u0105 doradztwa\n    inwestycyjnego ani podatkowego. <a href=\"#\" class=\"link-rodo-stopka\" target=\"_blank\" rel=\"noopener\">Obowi\u0105zek informacyjny<\/a>\n  <\/p>\n\n<\/div>\n<script>\n\/* Rozr\u00f3\u017cnia warianty testu A\/B. Czyta to logika ankiety oraz\n   listener rezerwacji w bloku trackingu, \u017ceby ka\u017cde zdarzenie\n   nios\u0142o content_name i da\u0142o si\u0119 rozdzieli\u0107 w Events Managerze. *\/\nwindow.ANKIETA_KONFIG = { wariant: 'ankieta-inline', tryb: 'inline' };\n<\/script>\n<script>\n(function () {\n  'use strict';\n\n  var KONF = window.ANKIETA_KONFIG || { wariant: 'ankieta-strona', tryb: 'strona' };\n  var INLINE = KONF.tryb === 'inline';\n\n  var TEL = '+48 695 344 423';\n  var MAIL = 'kdfrejchinbach@phinance.pl';\n\n  \/* Webhook dla LEADOW MQL: leca tu wylacznie osoby, ktore przeszly\n     kwalifikacje I zostawily kontakt. Nic innego. *\/\n  var WEBHOOK = 'https:\/\/hook.eu2.make.com\/yj9in7qlaigl68ifcr8tw0ft986ff9ly';\n\n  \/* Osobny adres na ODRZUCONYCH. Celowo pusty: te zgloszenia nie maja\n     danych kontaktowych (krok kontaktowy jest za kwalifikacja), wiec na\n     liscie do obdzwaniania by\u0142yby smieciem, a na Slacku szumem.\n     Sluza wylacznie do policzenia, na czym ludzie odpadaja. Jesli\n     kiedys tego zechcesz: zroz drugi webhook w Make, wklej tutaj,\n     skieruj na OSOBNA zakladke arkusza.                              *\/\n  var WEBHOOK_ODRZUCENIA = '';\n\n\n  \/* Jedno \u017ar\u00f3d\u0142o prawdy: tre\u015b\u0107 pyta\u0144 + regu\u0142y odci\u0119cia.\n     stop:'<powod>' przy odpowiedzi = koniec ankiety w tym miejscu.\n     skrot = kr\u00f3tka etykieta lec\u0105ca do data-kontekst na #final.\n\n     \u26a0\ufe0f KOLEJNO\u015a\u0106 MA ZNACZENIE. Horyzont jest pierwszy celowo: to\n     najostrzejszy dyskwalifikator, wi\u0119c kto ma odpa\u015b\u0107, odpada po\n     jednym klikni\u0119ciu zamiast po pi\u0119ciu. Efekt uboczny jest w danych:\n     porzucenia na pytaniach 2-5 to wtedy prawdziwe porzucenia,\n     a nie ludzie skazani na odci\u0119cie od startu.                      *\/\n  var PYTANIA = [\n    {\n      id: 'horyzont',\n      tytul: 'Ile czasu zosta\u0142o Ci do emerytury?',\n      opcje: [\n        { tekst: 'Mniej ni\u017c 10 lat',  skrot: 'ponizej10', stop: 'krotki-horyzont' },\n        { tekst: 'Wi\u0119cej ni\u017c 10 lat', skrot: 'powyzej10' }\n      ]\n    },\n    {\n      id: 'odklada',\n      tytul: 'Ile miesi\u0119cznie mo\u017cesz odk\u0142ada\u0107 na przysz\u0142o\u015b\u0107?',\n      opcje: [\n        { tekst: 'Do 500 z\u0142',       skrot: 'do500' },\n        { tekst: '500 \u2013 2000 z\u0142',   skrot: '500-2000' },\n        { tekst: 'Powy\u017cej 2000 z\u0142', skrot: 'ponad2000' }\n      ]\n    },\n    {\n      id: 'dochod',\n      tytul: 'Jak obecnie zarabiasz?',\n      opcje: [\n        { tekst: 'Umowa o prac\u0119',                  skrot: 'etat' },\n        { tekst: 'W\u0142asna dzia\u0142alno\u015b\u0107 (B2B \/ JDG)', skrot: 'b2b' },\n        { tekst: 'Sp\u00f3\u0142ka',                         skrot: 'spolka' },\n        { tekst: 'Jestem na emeryturze, rencie, nie mam dochodu',\n          skrot: 'brak-dochodu', stop: 'brak-dochodu' }\n      ]\n    },\n    {\n      id: 'cel',\n      tytul: 'Super! Co jest dla Ciebie najwa\u017cniejsze?',\n      opcje: [\n        { tekst: 'Zmniejszenie podatku PIT w tym roku',               skrot: 'pit' },\n        { tekst: 'Oszcz\u0119dzanie d\u0142ugoterminowe bez podatku od zysk\u00f3w', skrot: 'bez-belki' },\n        { tekst: 'Budowa kapita\u0142u na emerytur\u0119 (10+ lat)',            skrot: 'kapital' },\n        { tekst: 'Jeszcze nie wiem, chc\u0119 si\u0119 dowiedzie\u0107',             skrot: 'nie-wiem' }\n      ]\n    },\n    {\n      id: 'oszczedza',\n      tytul: 'Odk\u0142adasz obecnie pieni\u0105dze?',\n      opcje: [\n        { tekst: 'Tak, na lokacie \/ koncie oszcz\u0119dno\u015bciowym', skrot: 'lokata' },\n        { tekst: 'Tak, inwestuj\u0119 (fundusze, ETF, akcje)',     skrot: 'inwestuje' },\n        { tekst: 'Nie, ale chc\u0119 zacz\u0105\u0107',                      skrot: 'chce-zaczac' },\n        { tekst: 'Nie mam jak teraz odk\u0142ada\u0107',\n          skrot: 'nie-moze', stop: 'nie-moze-odkladac' }\n      ]\n    }\n  ];\n\n  \/* Trzy r\u00f3\u017cne odmowy, bo powody s\u0105 r\u00f3\u017cne. \u015awiadomie NIE t\u0142umacz\u0105\n     mechaniki podatkowej IKZE: to strona doradcy finansowego i lepiej\n     nie stawia\u0107 tam twierdze\u0144 prawnych, kt\u00f3re mog\u0105 by\u0107 nie\u015bcis\u0142e.   *\/\n  var ODMOWY = {\n    'krotki-horyzont': {\n      tytul: 'Dzi\u0119kujemy za odpowiedzi',\n      tresc: [\n        'To, o czym opowiadamy na tej stronie, ma sens przy d\u0142u\u017cszym horyzoncie. Przy mniej ni\u017c dekadzie do emerytury rachunek wygl\u0105da inaczej i nie chcemy obiecywa\u0107 efektu, kt\u00f3rego ta \u015bcie\u017cka nie da.',\n        'Twoja sytuacja mo\u017ce natomiast wygl\u0105da\u0107 ciekawie z innej strony. Je\u015bli chcesz o niej porozmawia\u0107 szerzej, jeste\u015bmy pod telefonem.'\n      ]\n    },\n    'brak-dochodu': {\n      tytul: 'Dzi\u0119kujemy za odpowiedzi',\n      tresc: [\n        'Ta konkretna propozycja jest zbudowana pod osoby, kt\u00f3re dopiero buduj\u0105 kapita\u0142 na emerytur\u0119. W Twojej sytuacji nie b\u0119dzie najlepszym rozwi\u0105zaniem, wi\u0119c nie chcemy umawia\u0107 rozmowy, kt\u00f3ra niewiele wnosi.',\n        'Je\u015bli potrzebujesz wsparcia w innym temacie, na przyk\u0142ad ubezpiecze\u0144 albo uporz\u0105dkowania bud\u017cetu, odezwij si\u0119 bezpo\u015brednio. Ch\u0119tnie pomo\u017cemy.'\n      ]\n    },\n    'nie-moze-odkladac': {\n      tytul: 'Dzi\u0119kujemy za odpowiedzi',\n      tresc: [\n        'To, o czym opowiadamy na tej stronie, opiera si\u0119 na regularnym odk\u0142adaniu. Je\u015bli teraz nie ma z czego, rozmowa niewiele Ci da, a nie chcemy zabiera\u0107 Ci godziny na co\u015b, co spokojnie poczeka.',\n        'Odezwij si\u0119, kiedy sytuacja si\u0119 u\u0142o\u017cy. A je\u015bli w mi\u0119dzyczasie przyda Ci si\u0119 pomoc przy pouk\u0142adaniu bud\u017cetu albo przy kredycie, jeste\u015bmy pod telefonem.'\n      ]\n    }\n  };\n\n  \/* Adres strony MQL. Podstawia go zbuduj.py, zeby stal w jednym miejscu. *\/\n  var STRONA_MQL = 'https:\/\/spokofinanse.piotrluszczak.pl\/?page_id=27';\n\n  var KLUCZ_BLOKADY = 'spoko-formularz-odciety';\n  \/* Dane dla mql.html.\n     \u26a0\ufe0f localStorage, a NIE sessionStorage: kalendarz otwiera sie w NOWEJ\n     KARCIE, a pamiec sesji kopiuje sie do niej tylko bez izolacji\n     `noopener`, ktora przegladarki dokladaja dzis do target=\"_blank\"\n     domyslnie. Przez sessionStorage kalendarz dostalby puste pola.\n     \u26a0\ufe0f I nie parametry w adresie: imie oraz mail w URL-u wyciekaja do\n     historii przegladarki, logow serwera i do Meta jako event_source_url.\n     Strona MQL kasuje ten wpis natychmiast po odczytaniu.              *\/\n  var KLUCZ_MQL = 'spoko-dane-mql';\n  \/* Jedna wysylka na sesje. Bez tego powrot przyciskiem wstecz i ponowne\n     wyslanie formularza dopisuja drugi wiersz do listy do obdzwaniania. *\/\n  var KLUCZ_WYSLANE = 'spoko-kontakt-wyslany';\n\n  var korzen = document.getElementById('ekran-ankiety');\n  var kroki = document.getElementById('kroki');\n  var elKontakt = document.getElementById('krok-kontakt');\n  var elOtwarto = document.getElementById('karta-otwarto');\n  var elStop = document.getElementById('stop');\n  if (!korzen || !kroki || !elKontakt || !elOtwarto || !elStop) return;\n\n  \/* Jeden identyfikator na przejscie ankiety. Leci do Make razem\n     z odpowiedziami ORAZ do Calendly w `utm_content`, dzieki czemu\n     rezerwacja wraca webhookiem Calendly z tym samym ID i Make\n     aktualizuje ISTNIEJACY wiersz zamiast dopisywac duplikat.      *\/\n  var ID_SESJI = (function () {\n    var los;\n    try {\n      var buf = new Uint32Array(2);\n      window.crypto.getRandomValues(buf);\n      los = buf[0].toString(36) + buf[1].toString(36);\n    } catch (e) {\n      los = Math.random().toString(36).slice(2) + Date.now().toString(36);\n    }\n    return 'spoko-' + los.slice(0, 12);\n  })();\n\n  var odpowiedzi = {};\n  var kontekstZapisany = false;\n  var kontekstAnkiety = '';\n  var otwarta = false;\n  var juzWyslane = {};\n\n  \/* \u2500\u2500 Tracking \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Ka\u017cde zdarzenie strzela najwy\u017cej raz na za\u0142adowanie strony.\n     Bez tej blokady od\u015bwie\u017cenie ekranu MQL albo powr\u00f3t przyciskiem\n     wstecz dosypywa\u0142yby fa\u0142szywych konwersji do optymalizacji.     *\/\n  function doMety(typ, nazwa, dodatkowe) {\n    if (juzWyslane[nazwa]) return;\n    juzWyslane[nazwa] = true;\n    var dane = { content_name: KONF.wariant };\n    if (dodatkowe) {\n      for (var k in dodatkowe) {\n        if (Object.prototype.hasOwnProperty.call(dodatkowe, k)) dane[k] = dodatkowe[k];\n      }\n    }\n    try { if (window.fbq) window.fbq(typ, nazwa, dane); } catch (e) {}\n  }\n\n  function doClarity(klucz, wartosc) {\n    try { if (window.clarity) window.clarity('set', klucz, wartosc); } catch (e) {}\n  }\n\n  doClarity('wariant', KONF.wariant);\n\n  \/* \u2500\u2500 Otwieranie i zamykanie (tylko wariant inline) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Landing chowa si\u0119 klas\u0105 na <body>, ankieta wraca do normalnego\n     przep\u0142ywu. Wpis w historii sprawia, \u017ce przycisk wstecz na\n     telefonie wraca na landing, zamiast wyrzuca\u0107 z witryny.        *\/\n  function otworzAnkiete(zHistorii) {\n    if (otwarta) return;\n    otwarta = true;\n    document.body.classList.add('ankieta-otwarta');\n    korzen.classList.remove('zamknieta');\n    if (!zHistorii) {\n      try { history.pushState({ ankieta: true }, '', '#ankieta'); } catch (e) {}\n    }\n    window.scrollTo(0, 0);\n    doMety('track', 'ViewContent', { content_category: 'ankieta' });\n    doClarity('etap', 'ankieta-otwarta');\n  }\n\n  function zamknijAnkiete() {\n    if (!otwarta) return;\n    otwarta = false;\n    document.body.classList.remove('ankieta-otwarta');\n    korzen.classList.add('zamknieta');\n  }\n\n  \/* \u2500\u2500 Budowa pyta\u0144 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function zbudujPytanie(pyt, indeks) {\n    var sekcja = document.createElement('section');\n    sekcja.className = 'karta pytanie';\n    sekcja.dataset.indeks = indeks;\n    sekcja.dataset.pytanie = pyt.id;\n    sekcja.hidden = true;\n\n    var naglowek = document.createElement('h2');\n    naglowek.id = 'pyt-' + pyt.id;\n    naglowek.textContent = pyt.tytul;\n    sekcja.appendChild(naglowek);\n\n    var grupa = document.createElement('div');\n    grupa.className = 'opcje';\n    grupa.setAttribute('role', 'radiogroup');\n    grupa.setAttribute('aria-labelledby', naglowek.id);\n\n    pyt.opcje.forEach(function (opc) {\n      var label = document.createElement('label');\n      label.className = 'opcja';\n\n      var radio = document.createElement('input');\n      radio.type = 'radio';\n      radio.name = pyt.id;\n      radio.value = opc.skrot;\n\n      var tekst = document.createElement('span');\n      tekst.className = 'tekst';\n      tekst.textContent = opc.tekst;\n\n      var kolko = document.createElement('span');\n      kolko.className = 'kolko';\n      kolko.setAttribute('aria-hidden', 'true');\n\n      radio.addEventListener('change', function () {\n        \/\/ Pod\u015bwietlenie wyboru idzie klas\u0105, nie selektorem :has() (patrz CSS).\n        \/\/ Bez tej linijki user nie widzi, co zaznaczy\u0142.\n        var wszystkie = grupa.querySelectorAll('.opcja');\n        for (var i = 0; i < wszystkie.length; i++) wszystkie[i].classList.remove('wybrana');\n        label.classList.add('wybrana');\n        odpowiedz(pyt, opc, sekcja, indeks);\n      });\n\n      label.appendChild(radio);\n      label.appendChild(tekst);\n      label.appendChild(kolko);\n      grupa.appendChild(label);\n    });\n\n    sekcja.appendChild(grupa);\n    return sekcja;\n  }\n\n  function odpowiedz(pyt, opc, sekcja, indeks) {\n    odpowiedzi[pyt.id] = opc.skrot;\n    sekcja.classList.add('zamkniete');\n\n    if (opc.stop) {\n      try { sessionStorage.setItem(KLUCZ_BLOKADY, opc.stop); } catch (e) {}\n      \/\/ kr\u00f3tka pauza, \u017ceby user zobaczy\u0142 sw\u00f3j wyb\u00f3r, zanim formularz zniknie\n      setTimeout(function () { pokazOdmowe(opc.stop, false); }, 420);\n      return;\n    }\n\n    var nastepne = kroki.children[indeks + 1];\n    if (nastepne) {\n      nastepne.hidden = false;\n      nastepne.classList.add('wchodzi');\n      przewinDo(nastepne);\n    } else {\n      pokazKontakt();\n    }\n  }\n\n  \/* zPamieci=true przy odtwarzaniu blokady po reloadzie: wtedy ekran ma\n     si\u0119 z\u0142o\u017cy\u0107 bez strzelania zdarzenia (odci\u0119cie ju\u017c raz zaraportowane)\n     i bez przewijania, bo w wariancie inline ankieta jest jeszcze\n     schowana i skok scrolla ruszy\u0142by landing.                          *\/\n  function pokazOdmowe(powod, zPamieci) {\n    var tresc = ODMOWY[powod];\n    if (!tresc) return;\n\n    if (kroki && kroki.parentNode) kroki.remove();   \/\/ formularz znika z DOM-u: nie ma jak wr\u00f3ci\u0107\n    if (elKontakt && elKontakt.parentNode) elKontakt.remove();\n\n    var intro = document.getElementById('ankieta-intro');\n    if (intro) intro.classList.add('zwiniete');\n\n    elStop.textContent = '';\n\n    var h = document.createElement('h2');\n    h.textContent = tresc.tytul;\n    elStop.appendChild(h);\n\n    tresc.tresc.forEach(function (akapit) {\n      var p = document.createElement('p');\n      p.textContent = akapit;\n      elStop.appendChild(p);\n    });\n\n    var kontakt = document.createElement('div');\n    kontakt.className = 'kontakt';\n    kontakt.innerHTML =\n      '<a href=\"tel:' + TEL.replace(\/\\s\/g, '') + '\">' + TEL + '<\/a>' +\n      '<a href=\"mailto:' + MAIL + '\">' + MAIL + '<\/a>';\n    elStop.appendChild(kontakt);\n\n    elStop.hidden = false;\n    elStop.dataset.powod = powod;\n\n    if (!zPamieci) {\n      elStop.classList.add('wchodzi');\n      przewinDo(elStop, 'start');\n      \/* Custom, nie Lead. Gdyby odci\u0119ci strzelali Leada, algorytm Mety\n         potraktowa\u0142by ich jako sukces i zacz\u0105\u0142by dowozi\u0107 wi\u0119cej takich\n         samych, czyli obr\u00f3ci\u0142by filtr kwalifikacyjny przeciwko nam.  *\/\n      doMety('trackCustom', 'AnkietaOdrzucona', { content_category: powod });\n      doClarity('etap', 'odrzucony');\n      doClarity('powod-odrzucenia', powod);\n      wyslijOdrzucenie(powod);\n    }\n  }\n\n  \/* \u2500\u2500 Krok kontaktowy \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Przechodza tu wylacznie osoby, ktore przeszly wszystkie 5 pytan.\n     Odcieci nigdy nie widza tego ekranu i nie zostawiaja danych, wiec\n     do arkusza nie trafia nikt, do kogo nie wolno dzwonic.          *\/\n  function pokazKontakt() {\n    zapiszKontekst();\n\n    \/* Diagnostyka lejka: roznica miedzy tym zdarzeniem a `Lead` pokazuje,\n       ilu ludzi kwalifikuje sie, ale nie chce zostawic numeru. Bez tego\n       nie da sie odroznic slabego ruchu od zbyt drogiego kroku.       *\/\n    doMety('trackCustom', 'AnkietaZakwalifikowana', { content_category: 'kwalifikacja' });\n    doClarity('etap', 'zakwalifikowany');\n\n    elKontakt.hidden = false;\n    elKontakt.classList.add('wchodzi');\n    przewinDo(elKontakt, 'start');\n\n    document.getElementById('formularz-kontakt').addEventListener('submit', obsluzKontakt);\n  }\n\n  \/* Zapas na wypadek, gdyby nowa karta zostala zablokowana i zadzialalo\n     przekierowanie w tej samej karcie: po powrocie wstecz przegladarka\n     przywraca strone z bfcache RAZEM ZE STANEM JS, wiec przycisk zostaje\n     wylaczony i czlowiek utyka na martwym guziku \"Chwileczke...\".      *\/\n  window.addEventListener('pageshow', function (e) {\n    if (!e.persisted) return;\n    var przycisk = document.getElementById('przycisk-wyslij');\n    if (!przycisk) return;\n    var juz = null;\n    try { juz = sessionStorage.getItem(KLUCZ_WYSLANE); } catch (err) {}\n    if (!juz) return;\n    przycisk.disabled = false;\n    przycisk.textContent = 'Wr\u00f3\u0107 do kalendarza';\n  });\n\n  function pokazBlad(pole, tresc) {\n    var input = document.getElementById('pole-' + pole);\n    var slot = document.getElementById('blad-' + pole);\n    if (slot) slot.textContent = tresc || '';\n    if (input) {\n      if (tresc) input.classList.add('niepoprawne');\n      else input.classList.remove('niepoprawne');\n    }\n    return !tresc;\n  }\n\n  \/* Walidacja celowo lagodna. To formularz dla zimnego ruchu z reklamy,\n     wiec ma odsiewac literowki i puste pola, a nie egzekwowac format.\n     Numer normalizujemy do samych cyfr i wymagamy 9 (PL) albo 11 z 48.  *\/\n  function walidujKontakt(d) {\n    var ok = true;\n    ok = pokazBlad('imie', d.imie.length < 3 ? 'Wpisz imi\u0119 i nazwisko.' : '') && ok;\n\n    var cyfry = d.telefon.replace(\/\\D\/g, '').replace(\/^0+\/, '');\n    if (cyfry.indexOf('48') === 0 && cyfry.length === 11) cyfry = cyfry.slice(2);\n    ok = pokazBlad('telefon', cyfry.length !== 9 ? 'Numer powinien mie\u0107 9 cyfr.' : '') && ok;\n    d.telefon_norm = cyfry.length === 9 ? '+48' + cyfry : d.telefon;\n\n    ok = pokazBlad('email', !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(d.email) ? 'Sprawd\u017a adres e-mail.' : '') && ok;\n\n    var zgoda = document.getElementById('pole-zgoda').checked;\n    var slotZ = document.getElementById('blad-zgoda');\n    if (slotZ) slotZ.textContent = zgoda ? '' : 'Bez zgody nie mo\u017cemy si\u0119 odezwa\u0107.';\n    return ok && zgoda;\n  }\n\n  function obsluzKontakt(e) {\n    e.preventDefault();\n    var dane = {\n      imie: document.getElementById('pole-imie').value.trim(),\n      telefon: document.getElementById('pole-telefon').value.trim(),\n      email: document.getElementById('pole-email').value.trim()\n    };\n    if (!walidujKontakt(dane)) return;\n\n    var przycisk = document.getElementById('przycisk-wyslij');\n    przycisk.disabled = true;\n    przycisk.textContent = 'Chwileczk\u0119...';\n\n    dane.id = ID_SESJI;\n    wyslijDoMake(dane);\n    doClarity('etap', 'zostawil-kontakt');\n\n    \/* `Lead` NIE strzela tutaj, tylko przy zaladowaniu mql.html. Dzieki\n       temu konwersja jest przywiazana do WEJSCIA NA ADRES, a nie do tego,\n       czy skrypt na tej stronie dobiegl do konca. Ten sam moment da sie\n       wtedy zdefiniowac w Meta takze regula URL-a, jako niezalezny zapas. *\/\n    otworzMql(dane);\n  }\n\n  \/* Otwarcie kalendarza w NOWEJ KARCIE. Landing zostaje otwarty pod spodem.\n     Dane ida bokiem przez localStorage, adres zostaje czysty.          *\/\n  function otworzMql(dane) {\n    var adres = STRONA_MQL;\n\n    \/* \u26a0\ufe0f Dane przechodza przez localStorage, ktory jest PRZYPISANY DO DOMENY.\n       Jesli landing i strona MQL stoja na roznych domenach, kalendarz nie\n       zobaczy niczego: zero prefillu, zero zdarzenia `Lead`. Konwersja\n       z reguly URL-a nadal by strzelala, wiec rozjazd bylby cichy i mylacy. *\/\n    try {\n      var docelowy = new URL(adres, window.location.href);\n      if (docelowy.origin !== window.location.origin) {\n        console.error('[ankieta] STRONA_MQL jest na innej domenie (' + docelowy.origin +\n          ') niz landing (' + window.location.origin + '). Prefill i zdarzenie Lead NIE zadzialaja. ' +\n          'Postaw mql.html na tej samej domenie co landing.');\n      }\n    } catch (e) {}\n\n    try {\n      localStorage.setItem(KLUCZ_MQL, JSON.stringify({\n        id: dane.id,\n        wariant: KONF.wariant,\n        imie: dane.imie,\n        email: dane.email,\n        telefon: dane.telefon_norm || dane.telefon,\n        kontekst: kontekstAnkiety,\n        zapisano: Date.now()\n      }));\n    } catch (e) {\n      console.warn('[ankieta] localStorage niedostepny, kalendarz bez prefillu', e);\n    }\n\n    \/* window.open przechodzi wylacznie w bezposredniej reakcji na klikniecie.\n       Gdy przegladarka mimo to zablokuje, dostajemy null i wtedy przechodzimy\n       na zwykle przekierowanie. Bez tego czlowiek klika i nic sie nie dzieje. *\/\n    var okno = null;\n    try { okno = window.open(adres, '_blank'); } catch (e) {}\n\n    if (!okno) {\n      console.warn('[ankieta] nowa karta zablokowana, przechodze w tej samej');\n      window.location.href = adres;\n      return;\n    }\n    try { okno.focus(); } catch (e) {}\n\n    \/\/ Landing zostaje otwarty, wiec trzeba powiedziec, co sie stalo.\n    if (elKontakt && elKontakt.parentNode) elKontakt.remove();\n    var link = document.getElementById('link-mql');\n    if (link) link.href = adres;\n    elOtwarto.hidden = false;\n    elOtwarto.classList.add('wchodzi');\n    przewinDo(elOtwarto, 'start');\n  }\n\n  \/* Fire and forget. Webhook NIE MOZE blokowac lejka: jesli Make padnie,\n     czlowiek i tak ma zobaczyc kalendarz. Dlatego zero czekania na\n     odpowiedz i zero zaleznosci ekranu MQL od wyniku wysylki.\n     `x-www-form-urlencoded` zamiast JSON-a swiadomie: to \"simple request\",\n     wiec przegladarka nie robi preflightu OPTIONS i nie ma tematu CORS-a,\n     a Make rozklada pola osobno zamiast wrzucac wszystko w jeden string. *\/\n  function wyslijDoMake(dane) {\n    var ladunek = {\n      typ: 'kwalifikacja',\n      id_sesji: dane.id,\n      wariant: KONF.wariant,\n      data: new Date().toISOString(),\n      imie_nazwisko: dane.imie,\n      telefon: dane.telefon_norm || dane.telefon,\n      email: dane.email,\n      zgoda: 'tak',\n      strona: window.location.href\n    };\n    \/* Odpowiedzi w formie czytelnej dla czlowieka, bo trafiaja wprost\n       do arkusza pod naglowki bedace trescia pytan. Skroty ida osobno,\n       do filtrowania.                                                  *\/\n    PYTANIA.forEach(function (pyt) {\n      ladunek['pyt_' + pyt.id] = etykietaOdpowiedzi(pyt);\n      ladunek['kod_' + pyt.id] = odpowiedzi[pyt.id] || '';\n    });\n    wyslij(ladunek);\n  }\n\n  function wyslijOdrzucenie(powod) {\n    \/* Odrzuceni nie maja danych kontaktowych, bo krok kontaktowy jest za\n       kwalifikacja. Lec\u0105 do Make bez PII, zeby dalo sie w Sheetsach\n       policzyc, na czym ludzie odpadaja. Kieruj to na OSOBNA zakladke,\n       nie na liste do obdzwaniania.                                    *\/\n    var ladunek = {\n      typ: 'odrzucony',\n      id_sesji: ID_SESJI,\n      wariant: KONF.wariant,\n      data: new Date().toISOString(),\n      powod: powod,\n      strona: window.location.href\n    };\n    PYTANIA.forEach(function (pyt) {\n      if (odpowiedzi[pyt.id]) {\n        ladunek['pyt_' + pyt.id] = etykietaOdpowiedzi(pyt);\n        ladunek['kod_' + pyt.id] = odpowiedzi[pyt.id];\n      }\n    });\n    wyslij(ladunek);\n  }\n\n  function etykietaOdpowiedzi(pyt) {\n    var kod = odpowiedzi[pyt.id];\n    if (!kod) return '';\n    for (var i = 0; i < pyt.opcje.length; i++) {\n      if (pyt.opcje[i].skrot === kod) return pyt.opcje[i].tekst;\n    }\n    return kod;\n  }\n\n  function wyslij(ladunek) {\n    \/* Powrot przyciskiem wstecz i ponowne wyslanie formularza dopisalyby\n       drugi wiersz do listy do obdzwaniania. Blokujemy to na sesje.    *\/\n    if (ladunek.typ === 'kwalifikacja') {\n      var juz = null;\n      try { juz = sessionStorage.getItem(KLUCZ_WYSLANE); } catch (e) {}\n      if (juz) { console.warn('[ankieta] kontakt juz wyslany w tej sesji, pomijam'); return; }\n      try { sessionStorage.setItem(KLUCZ_WYSLANE, ladunek.id_sesji); } catch (e) {}\n    }\n\n    \/* Dwa osobne adresy, zeby odrzuceni NIE MOGLI wpasc do skrzynki\n       z leadami MQL nawet przez pomylke w konfiguracji Make.          *\/\n    var adres = ladunek.typ === 'odrzucony' ? WEBHOOK_ODRZUCENIA : WEBHOOK;\n    if (!adres) {\n      console.warn('[ankieta] brak adresu dla typu \"' + ladunek.typ + '\", nic nie wysylam. Ladunek:', ladunek);\n      return;\n    }\n    var czesci = [];\n    for (var k in ladunek) {\n      if (Object.prototype.hasOwnProperty.call(ladunek, k)) {\n        czesci.push(encodeURIComponent(k) + '=' + encodeURIComponent(ladunek[k] == null ? '' : ladunek[k]));\n      }\n    }\n    try {\n      fetch(adres, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/x-www-form-urlencoded;charset=UTF-8' },\n        body: czesci.join('&'),\n        mode: 'no-cors',\n        keepalive: true\n      })['catch'](function (e) { console.warn('[ankieta] webhook nie odpowiedzial', e); });\n    } catch (e) {\n      console.warn('[ankieta] webhook wyjatek', e);\n    }\n  }\n\n  \/* Skr\u00f3t odpowiedzi w formacie `horyzont:powyzej10|odklada:500-2000|...`.\n     Leci do mql.html, a stamt\u0105d do Calendly. Limit 255 znak\u00f3w, bo tyle\n     przyjmuje pojedynczy parametr utm.                                *\/\n  function zapiszKontekst() {\n    if (kontekstZapisany) return;\n    kontekstZapisany = true;\n    kontekstAnkiety = PYTANIA.map(function (p) {\n      return p.id + ':' + (odpowiedzi[p.id] || '?');\n    }).join('|').slice(0, 255);\n  }\n\n  \/\/ block:'start' dla wysokich kart (MQL, odmowa), 'center' dla pyta\u0144\n  function przewinDo(el, gdzie) {\n    var plynnie = !window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    el.scrollIntoView({\n      behavior: plynnie ? 'smooth' : 'auto',\n      block: gdzie || 'center'\n    });\n  }\n\n  \/* \u2500\u2500 Start \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Reload nie ma resetowa\u0107 odci\u0119cia. sessionStorage, nie localStorage:\n     blokada ma trzyma\u0107 w tej sesji, a nie brickowa\u0107 stron\u0119 na zawsze\n     komu\u015b, kto si\u0119 pomyli\u0142.                                          *\/\n  var zablokowany = null;\n  try { zablokowany = sessionStorage.getItem(KLUCZ_BLOKADY); } catch (e) {}\n  if (zablokowany && !ODMOWY[zablokowany]) zablokowany = null;\n\n  if (zablokowany) {\n    pokazOdmowe(zablokowany, true);\n  } else {\n    PYTANIA.forEach(function (pyt, i) { kroki.appendChild(zbudujPytanie(pyt, i)); });\n    kroki.firstElementChild.hidden = false;\n  }\n\n  if (INLINE) {\n    \/* \u26a0\ufe0f Ankieta MUSI by\u0107 bezpo\u015brednim dzieckiem <body>.\n       Chowanie landinga idzie regu\u0142\u0105 `body.ankieta-otwarta > *:not(#ekran-ankiety)`,\n       czyli celuje w bezpo\u015brednie dzieci <body>. Gdy t\u0119 stron\u0119 wklei\u0107 jako blok\n       HTML wewn\u0105trz CMS-a, ca\u0142a tre\u015b\u0107 l\u0105duje w kontenerach motywu i regu\u0142a\n       chowa te kontenery RAZEM z ankiet\u0105 w \u015brodku: klikasz CTA i strona robi\n       si\u0119 pusta. Przeniesienie w\u0119z\u0142a na koniec <body> naprawia to raz na\n       zawsze i nic nie psuje przy zwyk\u0142ym hostingu, gdzie i tak ju\u017c tam jest. *\/\n    if (korzen.parentNode !== document.body) {\n      document.body.appendChild(korzen);\n      console.info('[ankieta] przeniesiona bezposrednio do <body> (strona osadzona w CMS)');\n    }\n\n    \/* Przyciski oznaczone data-ankieta-start otwieraj\u0105 ankiet\u0119 w miejscu.\n       Ich href zostaje jako fallback: bez JS klik prowadzi na osobn\u0105\n       stron\u0119 ankiety, wi\u0119c CTA nigdy nie jest martwe.                 *\/\n    var startery = document.querySelectorAll('[data-ankieta-start]');\n    for (var i = 0; i < startery.length; i++) {\n      startery[i].addEventListener('click', function (e) {\n        e.preventDefault();\n        otworzAnkiete(false);\n      });\n    }\n\n    window.addEventListener('popstate', function () {\n      if (window.location.hash === '#ankieta') otworzAnkiete(true);\n      else zamknijAnkiete();\n    });\n\n    \/\/ Wej\u015bcie z linkiem #ankieta albo od\u015bwie\u017cenie na otwartej ankiecie\n    if (window.location.hash === '#ankieta') otworzAnkiete(true);\n  } else {\n    otwarta = true;\n    doMety('track', 'ViewContent', { content_category: 'ankieta' });\n    doClarity('etap', 'ankieta-otwarta');\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>IKE i IKZE: zbuduj prywatn\u0105 emerytur\u0119 | Spoko Finanse S Spoko Finanse Um\u00f3w bezp\u0142atn\u0105 konsultacj\u0119 savings IKE + IKZE \u00b7 prywatna emerytura Zbuduj prywatn\u0105 emerytur\u0119 i co roku odbieraj do 3 617 z\u0142 zwrotu podatku Prognozowana emerytura z ZUS to ok. 25\u201330% ostatniej pensji. Reszt\u0119 spokojnie zbudujesz z IKE i IKZE. Przeprowadzimy Ci\u0119 przez to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":35,"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":77,"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/77"}],"wp:attachment":[{"href":"https:\/\/spokofinanse.piotrluszczak.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}