{"id":3527,"date":"2026-11-02T22:44:43","date_gmt":"2026-11-02T21:44:43","guid":{"rendered":"https:\/\/misot.pl\/zjazdy\/?page_id=3527"},"modified":"2026-11-06T11:23:19","modified_gmt":"2026-11-06T10:23:19","slug":"zjazdy","status":"publish","type":"page","link":"https:\/\/misot.pl\/zjazdy\/","title":{"rendered":"wisla2027"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3527\" class=\"elementor elementor-3527\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e6e398e e-con e-atomic-element e-div-block-base e-default-div e-e6e398e-3691451 \" data-id=\"e6e398e\" data-element_type=\"e-div-block\" data-e-type=\"e-div-block\" data-interaction-id=\"e6e398e\">\n    \t\t<div class=\"elementor-element elementor-element-d1c19a3 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"d1c19a3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"jv-px\">\r\n<style>\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 USTAWIENIA \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   Ca\u0142e strojenie sceny jest tutaj. Warto\u015bci ruchu to u\u0142amek szeroko\u015bci sceny\r\n   dla warstwy o g\u0142\u0119boko\u015bci 1 (layer01), np. .01 = 1% szeroko\u015bci.          *\/\r\n.jv-px{\r\n  \/* Scena *\/\r\n  --jv-height:100vh;              \/* wysoko\u015b\u0107 (na nowych przegl\u0105darkach 100svh \u2013 patrz ni\u017cej) *\/\r\n  --jv-min-height:480px;\r\n  --jv-focus:50% 50%;             \/* co zostaje w kadrze przy przyci\u0119ciu, np. 50% 80% = trzymaj d\u00f3\u0142 *\/\r\n\r\n  \/* \u0141adowanie \u2013 scena pokazuje si\u0119 dopiero, gdy WSZYSTKIE warstwy s\u0105 pobrane i zdekodowane *\/\r\n  --jv-fade:.9s;                  \/* czas pojawienia si\u0119 ca\u0142ej sceny *\/\r\n  --jv-load-max:6;                \/* s \u2013 po tylu sekundach scena poka\u017ce si\u0119 mimo wszystko (wolne \u0142\u0105cze) *\/\r\n\r\n  \/* Ruch \u2013 og\u00f3lne *\/\r\n  --jv-amp:1;                     \/* MNO\u017bNIK CA\u0141EGO RUCHU: 0 = stoi, .5 = po\u0142owa, 2 = podw\u00f3jnie *\/\r\n  --jv-drift:.008;                \/* samoczynny, powolny dryf *\/\r\n  --jv-drift-period:28;           \/* s \u2013 pe\u0142ny cykl dryfu (mniej = szybciej) *\/\r\n  --jv-parrot-pull:-.02;          \/* jak mocno pierwszy plan p\u0142ynie w kierunku lotu papugi (ujemne = odwrotnie);\r\n                                     warstwy wracaj\u0105 na miejsce dok\u0142adnie, gdy papuga wylatuje z kadru *\/\r\n  --jv-pull-ease:.6;              \/* s \u2013 powr\u00f3t warstw, gdy przelot zostanie przerwany (np. przewini\u0119cie strony) *\/\r\n  --jv-intro:1.6;                 \/* s \u2013 wsuni\u0119cie warstw po za\u0142adowaniu *\/\r\n\r\n  \/* Ruch \u2013 TELEFONY I TABLETY (bez kursora) \u2013 osobne warto\u015bci, zast\u0119puj\u0105 te powy\u017cej *\/\r\n  --jv-mobile-drift:.05;          \/* samoczynny dryf na mobile (desktop: --jv-drift) *\/\r\n  --jv-mobile-drift-period:24;    \/* s \u2013 cykl dryfu na mobile *\/\r\n  --jv-mobile-parrot-pull:.04;    \/* pod\u0105\u017canie za papug\u0105 na mobile *\/\r\n\r\n  \/* Ruch \u2013 mysz (tylko urz\u0105dzenia z kursorem: desktop, Mac) *\/\r\n  --jv-mouse:.002;                \/* wychylenie za kursorem *\/\r\n  --jv-mouse-boost:.001;          \/* dodatkowa amplituda, gdy mysz si\u0119 rusza *\/\r\n  --jv-mouse-speed:14;            \/* przyspieszenie dryfu przy ruchu myszy (x1+n) *\/\r\n  --jv-calm:1.6;                  \/* s \u2013 jak szybko scena si\u0119 uspokaja po ruchu myszy *\/\r\n\r\n  \/* G\u0142\u0119boko\u015b\u0107 warstw: 0 = stoi (punkt odniesienia), ujemne = t\u0142o, dodatnie = pierwszy plan *\/\r\n  --jv-depth-4:-.4;               \/* layer04 \u2013 niebo *\/\r\n  --jv-depth-3:-.2;               \/* layer03 *\/\r\n  --jv-depth-2:0;                 \/* layer02 \u2013 FOCUS *\/\r\n  --jv-depth-wisla:0;             \/* wisla *\/\r\n  --jv-depth-aloha:0;             \/* aloha *\/\r\n  --jv-depth-parrot:.45;          \/* papuga *\/\r\n  --jv-depth-1:1;                 \/* layer01 \u2013 pierwszy plan *\/\r\n\r\n  \/* Pozycja pionowa warstw \u2013 DESKTOP (urz\u0105dzenia z kursorem)\r\n     minus = w g\u00f3r\u0119, plus = w d\u00f3\u0142; jednostki: % wysoko\u015bci sceny (np. -5%) albo px (np. 40px).\r\n     Warstwa jest automatycznie powi\u0119kszana tylko tyle, ile trzeba, \u017ceby nie ods\u0142oni\u0107 kraw\u0119dzi. *\/\r\n  --jv-y-1:5%;                    \/* layer01 *\/\r\n  --jv-y-2:10%;                   \/* layer02 *\/\r\n  --jv-y-wisla:-40%;              \/* wisla *\/\r\n  --jv-y-aloha:10%;               \/* aloha *\/\r\n  --jv-y-parrot:0%;               \/* papuga \u2013 przesuwa pas, w kt\u00f3rym lata *\/\r\n  --jv-y-3:-7%;                   \/* layer03 *\/\r\n  --jv-y-4:-9%;                   \/* layer04 *\/\r\n\r\n  \/* Kiedy u\u017cywa\u0107 warto\u015bci \u201emobile\u201d (pozycja pionowa i szeroko\u015b\u0107 grafik):\r\n     urz\u0105dzenie bez kursora (telefon, tablet) LUB scena w\u0119\u017csza ni\u017c ta warto\u015b\u0107 (px). 0 = tylko brak kursora. *\/\r\n  --jv-mobile-below:1025;\r\n\r\n  \/* Pozycja pionowa warstw \u2013 TELEFONY, TABLETY i w\u0105skie okna (patrz --jv-mobile-below) *\/\r\n  --jv-mobile-y-1:7%;\r\n  --jv-mobile-y-2:7%;\r\n  --jv-mobile-y-wisla:-40%;\r\n  --jv-mobile-y-aloha:10%;\r\n  --jv-mobile-y-parrot:0%;\r\n  --jv-mobile-y-3:0%;\r\n  --jv-mobile-y-4:0%;\r\n\r\n  \/* Kolejno\u015b\u0107 warstw (z-index): wi\u0119cej = bli\u017cej widza *\/\r\n  --jv-z-1:100;                   \/* layer01 \u2013 pierwszy plan *\/\r\n  --jv-z-2:90;                    \/* layer02 *\/\r\n  --jv-z-parrot:95;               \/* papuga *\/\r\n  --jv-z-aloha:93;                \/* aloha *\/\r\n  --jv-z-wisla:92;                \/* wisla *\/\r\n  --jv-z-3:80;                    \/* layer03 *\/\r\n  --jv-z-4:70;                    \/* layer04 \u2013 niebo *\/\r\n  --jv-z-content:200;             \/* tre\u015b\u0107 hero (teksty, przyciski) \u2013 zawsze nad scen\u0105 *\/\r\n\r\n  \/* Grafiki na \u015brodku sceny (wisla, aloha) \u2013 szeroko\u015b\u0107; wysoko\u015b\u0107 dopasowuje si\u0119 sama.\r\n     min(Xvw, Yvh) = mniejsza z dw\u00f3ch: na w\u0105skich ekranach decyduje szeroko\u015b\u0107 (vw),\r\n     na niskich\/szerokich (laptop 1280\u00d7800, 4K) \u2013 wysoko\u015b\u0107 (vh). *\/\r\n  --jv-w-wisla:min(41vw,56vh);    \/* desktop *\/\r\n  --jv-w-aloha:min(33vw,52vh);\r\n  --jv-mobile-w-wisla:50vw;       \/* telefony, tablety *\/\r\n  --jv-mobile-w-aloha:30vw;\r\n\r\n  \/* Papuga *\/\r\n  --jv-parrot-size:clamp(140px,18vw,280px);\r\n  --jv-parrot-first:2.5;          \/* s \u2013 pierwszy przelot po za\u0142adowaniu *\/\r\n  --jv-parrot-every-min:9;        \/* s \u2013 odst\u0119p mi\u0119dzy przelotami (losowo min..max) *\/\r\n  --jv-parrot-every-max:18;\r\n  --jv-parrot-pace:1;             \/* tempo przelotu: 1.5 = szybciej, .7 = wolniej *\/\r\n  --jv-parrot-flip:1;             \/* -1 je\u015bli papuga leci ty\u0142em *\/\r\n  --jv-flap:.83s;                 \/* cykl machania (10 klatek) *\/\r\n  --jv-parrot-url:url(\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/parrot_sprite-scaled.webp\");\r\n\r\n  \/* Kolory (widoczne przed za\u0142adowaniem obraz\u00f3w) *\/\r\n  --jv-sky:#f06277;\r\n  --jv-sky-low:#f9b087;\r\n  --jv-ground:#332d49;            \/* kolor do\u0142u layer01 \u2013 pod kolejn\u0105 sekcj\u0119 *\/\r\n\r\n  \/* Dost\u0119pno\u015b\u0107: 1 = respektuj systemowe \u201eOgranicz ruch\u201d (scena stoi, bez papugi), 0 = ignoruj *\/\r\n  --jv-respect-reduced-motion:1;\r\n}\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 koniec ustawie\u0144 \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\n\r\n.jv-px{\r\n  position:relative;width:100%;\r\n  height:var(--jv-height);min-height:var(--jv-min-height);\r\n  overflow:hidden;isolation:isolate;contain:layout paint;\r\n  background:linear-gradient(180deg,var(--jv-sky) 0%,var(--jv-sky-low) 52%,var(--jv-ground) 53%);\r\n}\r\n@supports (height:100svh){.jv-px{--jv-height:100svh}}\r\n.jv-px *,.jv-px *::before,.jv-px *::after{box-sizing:border-box}\r\n.jv-px__scene{\r\n  position:absolute;inset:0;opacity:0;\r\n  transition:opacity var(--jv-fade) ease;\r\n  animation:jv-px-show 0s calc(var(--jv-load-max) * 1s) forwards;\r\n}\r\n.jv-px.is-ready .jv-px__scene{opacity:1;animation:none}\r\n@keyframes jv-px-show{to{opacity:1}}\r\n\/* will-change nadawane dynamicznie w JS tylko warstwom w ruchu (oszcz\u0119dno\u015b\u0107 VRAM) *\/\r\n.jv-px__layer{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden}\r\n.jv-px__layer[data-jv-layer=\"1\"]{z-index:var(--jv-z-1)}\r\n.jv-px__layer[data-jv-layer=\"2\"]{z-index:var(--jv-z-2)}\r\n.jv-px__layer[data-jv-layer=\"parrot\"]{z-index:var(--jv-z-parrot)}\r\n.jv-px__layer[data-jv-layer=\"aloha\"]{z-index:var(--jv-z-aloha)}\r\n.jv-px__layer[data-jv-layer=\"wisla\"]{z-index:var(--jv-z-wisla)}\r\n.jv-px__layer[data-jv-layer=\"3\"]{z-index:var(--jv-z-3)}\r\n.jv-px__layer[data-jv-layer=\"4\"]{z-index:var(--jv-z-4)}\r\n.jv-px .jv-px__layer img{\r\n  display:block;width:100%;height:100%;max-width:none;max-height:none;\r\n  object-fit:cover;object-position:var(--jv-focus);\r\n  border:0;border-radius:0;box-shadow:none;margin:0;padding:0;\r\n  -webkit-user-select:none;user-select:none;-webkit-user-drag:none;\r\n}\r\n\r\n\/* Grafiki na \u015brodku (nie wype\u0142niaj\u0105 sceny \u2013 bez powi\u0119kszania) *\/\r\n.jv-px__layer--item{display:flex;align-items:center;justify-content:center}\r\n.jv-px .jv-px__layer--item img{width:100%;height:auto;max-width:100%;object-fit:contain}\r\n.jv-px .jv-px__layer[data-jv-layer=\"wisla\"] img{width:var(--jv-w-wisla)}\r\n.jv-px .jv-px__layer[data-jv-layer=\"aloha\"] img{width:var(--jv-w-aloha)}\r\n.jv-px.is-mobile .jv-px__layer[data-jv-layer=\"wisla\"] img{width:var(--jv-mobile-w-wisla)}\r\n.jv-px.is-mobile .jv-px__layer[data-jv-layer=\"aloha\"] img{width:var(--jv-mobile-w-aloha)}\r\n\r\n\/* Papuga: x (tor) > y (wysoko\u015b\u0107) > bob > sprite *\/\r\n.jv-px__parrot{position:absolute;left:0;top:0;width:var(--jv-parrot-size);visibility:hidden}\r\n.jv-px__parrot.is-flying{visibility:visible;will-change:transform}\r\n.jv-px__parrot-bob{animation:jv-px-bob 1.6s ease-in-out infinite alternate}\r\n.jv-px__parrot-sprite{\r\n  aspect-ratio:256\/260;\r\n  background:var(--jv-parrot-url) 0 0\/1000% 100% no-repeat;\r\n  transform:scaleX(var(--jv-parrot-flip));\r\n  animation:jv-px-flap var(--jv-flap) steps(10,jump-none) infinite;\r\n}\r\n@supports not (aspect-ratio:1){.jv-px__parrot-sprite{height:0;padding-top:101.5625%}}\r\n.jv-px__parrot:not(.is-flying) *,.jv-px.is-paused .jv-px__parrot *{animation-play-state:paused}\r\n.jv-px.is-static .jv-px__parrot{display:none}\r\n.jv-px.is-static .jv-px__scene{transition:none}\r\n@keyframes jv-px-flap{to{background-position:100% 0}}\r\n@keyframes jv-px-bob{from{transform:translateY(-4%)}to{transform:translateY(4%)}}\r\n\r\n\/* Slot na tre\u015b\u0107 hero *\/\r\n.jv-px__content{position:absolute;top:0;right:0;bottom:0;left:0;z-index:var(--jv-z-content);pointer-events:none}\r\n.jv-px__content>*{pointer-events:auto}\r\n<\/style>\r\n\r\n<div class=\"jv-px__scene\" aria-hidden=\"true\">\r\n  <div class=\"jv-px__layer\" data-jv-layer=\"4\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/layer04b.webp\" alt=\"\" width=\"2400\" height=\"1676\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n  <div class=\"jv-px__layer\" data-jv-layer=\"3\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/layer03b.webp\" alt=\"\" width=\"2400\" height=\"1676\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n  <div class=\"jv-px__layer\" data-jv-layer=\"2\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/layer002o-4.webp\" alt=\"\" width=\"2400\" height=\"1676\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n  <div class=\"jv-px__layer jv-px__layer--item\" data-jv-layer=\"wisla\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/wisla.webp\" alt=\"\" width=\"1200\" height=\"242\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n  <div class=\"jv-px__layer jv-px__layer--item\" data-jv-layer=\"aloha\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/aloha.webp\" alt=\"\" width=\"1200\" height=\"965\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n  <div class=\"jv-px__layer jv-px__layer--parrot\" data-jv-layer=\"parrot\">\r\n    <div class=\"jv-px__parrot\"><div class=\"jv-px__parrot-y\"><div class=\"jv-px__parrot-bob\"><div class=\"jv-px__parrot-sprite\"><\/div><\/div><\/div><\/div>\r\n  <\/div>\r\n  <div class=\"jv-px__layer\" data-jv-layer=\"1\">\r\n    <img fetchpriority=\"high\" src=\"https:\/\/misot.pl\/zjazdy\/wp-content\/uploads\/2026\/11\/layer001bo.webp\" alt=\"\" width=\"2400\" height=\"1676\" decoding=\"async\" fetchpriority=\"high\" data-no-lazy=\"1\" class=\"skip-lazy\">\r\n  <\/div>\r\n<\/div>\r\n\r\n<div class=\"jv-px__content\"><!-- tu trafi tre\u015b\u0107 hero --><\/div>\r\n\r\n<script>\r\n(function () {\r\n  'use strict';\r\n  var INTRO_Y = 0.03;\r\n  function clamp(v, a, b) { return Math.min(b, Math.max(a, v)); }\r\n  function rand(a, b) { return a + Math.random() * (b - a); }\r\n  function num(cs, name, def) { var v = parseFloat(cs.getPropertyValue(name)); return isFinite(v) ? v : def; }\r\n  function onMq(mq, fn) { mq.addEventListener ? mq.addEventListener('change', fn) : mq.addListener(fn); }\r\n  function toPx(raw, h) {\r\n    raw = (raw || '').trim();\r\n    var v = parseFloat(raw);\r\n    if (!isFinite(v)) return 0;\r\n    return \/px$\/i.test(raw) ? v : v \/ 100 * h;\r\n  }\r\n  function getAttr(im, list) {\r\n    for (var i = 0; i < list.length; i++) {\r\n      var val = im.getAttribute(list[i]);\r\n      if (val && !\/^data:\/i.test(val)) return val;\r\n    }\r\n    return '';\r\n  }\r\n  \/* Zachowuje responsywne srcset\/sizes je\u015bli istniej\u0105, odblokowuj\u0105c jednocze\u015bnie wtyczki lazy-load *\/\r\n  function loadLayer(im) {\r\n    var url = getAttr(im, ['data-breeze', 'data-src', 'data-lazy-src', 'data-litespeed-src', 'src']);\r\n    var srcset = getAttr(im, ['data-breeze-srcset', 'data-srcset', 'data-lazy-srcset', 'data-litespeed-srcset', 'srcset']);\r\n    var sizes = getAttr(im, ['data-breeze-sizes', 'data-sizes', 'data-lazy-sizes', 'sizes']);\r\n\r\n    if (srcset) {\r\n      if (im.getAttribute('srcset') !== srcset) im.setAttribute('srcset', srcset);\r\n      if (sizes && im.getAttribute('sizes') !== sizes) im.setAttribute('sizes', sizes);\r\n    } else if (\/^data:\/i.test(im.getAttribute('srcset') || '')) {\r\n      im.removeAttribute('srcset');\r\n      im.removeAttribute('sizes');\r\n    }\r\n\r\n    if (url && im.getAttribute('src') !== url) im.src = url;\r\n    im.loading = 'eager';\r\n    im.classList.remove('br-lazy', 'lazyload', 'lazy');\r\n\r\n    return new Promise(function (res) {\r\n      function dec() { im.decode ? im.decode().then(res, res) : res(); }\r\n      if (im.complete && im.naturalWidth) dec();\r\n      else {\r\n        im.addEventListener('load', dec, { once: true });\r\n        im.addEventListener('error', function () { res(); }, { once: true });\r\n      }\r\n    });\r\n  }\r\n\r\n  var roots = document.querySelectorAll('.jv-px:not([data-jv-init])');\r\n  for (var r = 0; r < roots.length; r++) init(roots[r]);\r\n\r\n  function init(root) {\r\n    root.setAttribute('data-jv-init', '');\r\n    var mqReduce = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n    var mqMouse = window.matchMedia('(hover: hover) and (pointer: fine)');\r\n    var layers = Array.prototype.map.call(root.querySelectorAll('[data-jv-layer]'), function (el) {\r\n      return {\r\n        el: el, key: el.getAttribute('data-jv-layer'), d: 0, s: 1, yRaw: '', dy: 0,\r\n        free: el.classList.contains('jv-px__layer--parrot') || el.classList.contains('jv-px__layer--item')\r\n      };\r\n    });\r\n    var parrot = root.querySelector('.jv-px__parrot');\r\n    var parrotY = root.querySelector('.jv-px__parrot-y');\r\n    var sprite = root.querySelector('.jv-px__parrot-sprite');\r\n\r\n    var C = {}, W = 1, H = 1, B = 1, rectLeft = 0, rectTop = 0, hasMouse = false, isStatic = false;\r\n    var tx = 0, ty = 0, cx = 0, cy = 0, energy = 0, phase = rand(0, 6.283), pullX = 0, pullY = 0;\r\n    var last = 0, raf = 0, visible = false, ready = false, introStart = 0;\r\n    var lpx = 0, lpy = 0, lpt = 0;\r\n    var flight = null, flightY = null, flapAnims = null, flightDur = 1, exitAt = 1, parrotTimer = 0, parrotPending = false, rate = 1;\r\n\r\n    function updateRect() {\r\n      var rc = root.getBoundingClientRect();\r\n      rectLeft = rc.left;\r\n      rectTop = rc.top;\r\n    }\r\n\r\n    function readCfg() {\r\n      var cs = getComputedStyle(root);\r\n      var amp = Math.max(0, num(cs, '--jv-amp', 1));\r\n      hasMouse = mqMouse.matches;\r\n      var mob = hasMouse ? '--jv-' : '--jv-mobile-';\r\n      var drift = num(cs, '--jv-drift', 0.008), period = num(cs, '--jv-drift-period', 28), pull = num(cs, '--jv-parrot-pull', 0.01);\r\n      C = {\r\n        amp: amp,\r\n        drift: num(cs, mob + 'drift', drift) * amp,\r\n        period: Math.max(1, num(cs, mob + 'drift-period', period)) * 1000,\r\n        pull: num(cs, mob + 'parrot-pull', pull) * amp,\r\n        pullEase: Math.max(0.05, num(cs, '--jv-pull-ease', 0.6)) * 1000,\r\n        intro: Math.max(0, num(cs, '--jv-intro', 1.6)) * 1000 * (amp ? 1 : 0),\r\n        mouse: num(cs, '--jv-mouse', 0.016) * amp,\r\n        boost: num(cs, '--jv-mouse-boost', 0.012) * amp,\r\n        speed: Math.max(0, num(cs, '--jv-mouse-speed', 4)),\r\n        calm: Math.max(0.1, num(cs, '--jv-calm', 1.6)) * 1000,\r\n        pFirst: Math.max(0, num(cs, '--jv-parrot-first', 2.5)) * 1000,\r\n        pMin: Math.max(0.5, num(cs, '--jv-parrot-every-min', 9)) * 1000,\r\n        pMax: Math.max(0.5, num(cs, '--jv-parrot-every-max', 18)) * 1000,\r\n        pace: Math.max(0.1, num(cs, '--jv-parrot-pace', 1)),\r\n        loadMax: Math.max(0.5, num(cs, '--jv-load-max', 6)) * 1000,\r\n        respect: num(cs, '--jv-respect-reduced-motion', 1) !== 0,\r\n        parrotUrl: cs.getPropertyValue('--jv-parrot-url').replace(\/^\\s*url\\([\"']?|[\"']?\\)\\s*$\/g, '')\r\n      };\r\n      var below = num(cs, '--jv-mobile-below', 1025);\r\n      var isMob = !hasMouse || (below > 0 && (root.clientWidth || 1) < below);\r\n      root.classList.toggle('is-mobile', isMob);\r\n\r\n      isStatic = (C.respect && mqReduce.matches) || amp === 0;\r\n      root.classList.toggle('is-static', isStatic);\r\n\r\n      for (var i = 0; i < layers.length; i++) {\r\n        var L = layers[i];\r\n        L.d = num(cs, '--jv-depth-' + L.key, 0);\r\n        var yd = cs.getPropertyValue('--jv-y-' + L.key), ym = cs.getPropertyValue('--jv-mobile-y-' + L.key);\r\n        L.yRaw = isMob && ym.trim() ? ym : yd;\r\n        L.el.style.willChange = (L.d && !isStatic) ? 'transform' : 'auto';\r\n      }\r\n      measure();\r\n    }\r\n\r\n    function measure() {\r\n      W = root.clientWidth || 1; H = root.clientHeight || 1; B = Math.max(W, H * 0.75);\r\n      updateRect();\r\n      var m = hasMouse ? 1 : 0, p = Math.abs(C.pull);\r\n      var ax = C.drift + m * (C.boost + C.mouse) + p;\r\n      var ay = (C.drift + m * C.boost) * 0.6 + m * C.mouse * 0.8 + p * 0.5;\r\n      for (var i = 0; i < layers.length; i++) {\r\n        var L = layers[i], d = Math.abs(L.d);\r\n        L.dy = toPx(L.yRaw, H);\r\n        if (L.free || (!d && !L.dy)) { L.s = 1; continue; }\r\n        var yPx = Math.max(ay * d * B, C.drift * 0.6 * d * B + (C.intro ? INTRO_Y * d * H : 0)) + Math.abs(L.dy);\r\n        L.s = 1 + Math.max(2 * ax * d * B \/ W, 2 * yPx \/ H) + 0.004;\r\n      }\r\n    }\r\n\r\n    \/* Aktualizuje warstwy statyczne (d=0) lub wszystkie, gdy animacja stoi (brak przeskoku przy resize) *\/\r\n    function paintLayers(onlyStatic) {\r\n      for (var i = 0; i < layers.length; i++) {\r\n        var L = layers[i];\r\n        if (onlyStatic && L.d) continue;\r\n        L.el.style.transform = 'translate3d(0,' + L.dy.toFixed(2) + 'px,0) scale(' + L.s + ')';\r\n      }\r\n    }\r\n\r\n    function applyDynamicTransforms(now) {\r\n      var ip = introStart && C.intro ? clamp((now - introStart) \/ C.intro, 0, 1) : (introStart ? 1 : 0);\r\n      var intro = Math.pow(1 - ip, 3);\r\n      var a = C.drift + energy * C.boost;\r\n      var bx = Math.sin(phase) * a - cx * C.mouse + pullX * C.pull;\r\n      var by = Math.cos(phase * 0.77) * a * 0.6 - cy * C.mouse * 0.8 + pullY * C.pull * 0.5;\r\n\r\n      for (var i = 0; i < layers.length; i++) {\r\n        var L = layers[i];\r\n        if (!L.d) continue;\r\n        var x = bx * L.d * B, y = by * L.d * B + intro * L.d * INTRO_Y * H + L.dy;\r\n        L.el.style.transform = 'translate3d(' + x.toFixed(2) + 'px,' + y.toFixed(2) + 'px,0) scale(' + L.s + ')';\r\n      }\r\n    }\r\n\r\n    function syncAllLayers() {\r\n      if (raf && !isStatic) {\r\n        paintLayers(true);\r\n        applyDynamicTransforms(performance.now());\r\n      } else {\r\n        paintLayers(false);\r\n      }\r\n    }\r\n\r\n    \/* \u2500\u2500 load: poka\u017c scen\u0119 dopiero, gdy wszystkie warstwy s\u0105 pobrane i zdekodowane \u2500\u2500 *\/\r\n    readCfg();\r\n    paintLayers(false);\r\n    function done() {\r\n      if (ready) return;\r\n      ready = true;\r\n      introStart = performance.now();\r\n      requestAnimationFrame(function () { root.classList.add('is-ready'); });\r\n      \/* Preload sprite'a papugi dopiero po za\u0142adowaniu g\u0142\u00f3wnych warstw (nie konkuruje o pasmo) *\/\r\n      if (C.parrotUrl && !isStatic) {\r\n        var pImg = new Image();\r\n        pImg.decoding = 'async';\r\n        pImg.src = C.parrotUrl;\r\n      }\r\n      scheduleParrot(C.pFirst);\r\n    }\r\n    var imgs = root.querySelectorAll('.jv-px__layer img');\r\n    Promise.all(Array.prototype.map.call(imgs, loadLayer)).then(done);\r\n    setTimeout(done, C.loadMax);\r\n\r\n    \/* \u2500\u2500 render \u2500\u2500 *\/\r\n    function frame(now) {\r\n      raf = requestAnimationFrame(frame);\r\n      var dt = last ? Math.min(now - last, 64) : 16;\r\n      last = now;\r\n      energy *= Math.exp(-dt \/ C.calm);\r\n      var follow = 1 - Math.exp(-dt \/ (260 - 160 * energy));\r\n      cx += (tx - cx) * follow;\r\n      cy += (ty - cy) * follow;\r\n      phase += dt * (6.2832 \/ C.period) * (1 + energy * C.speed);\r\n\r\n      if (flight) {\r\n        var p = clamp((flight.currentTime || 0) \/ exitAt, 0, 1);\r\n        var s = Math.sin(Math.PI * p), env = s * s;\r\n        pullX = env;\r\n        pullY = -0.4 * env;\r\n      } else if (pullX || pullY) {\r\n        var pf = Math.exp(-dt \/ C.pullEase);\r\n        pullX *= pf; pullY *= pf;\r\n        if (Math.abs(pullX) < 1e-4) pullX = pullY = 0;\r\n      }\r\n\r\n      applyDynamicTransforms(now);\r\n\r\n      if (flight) {\r\n        var rr = 1 + energy * 0.8;\r\n        if (Math.abs(rr - rate) > 0.04) {\r\n          rate = rr;\r\n          flight.playbackRate = rr;\r\n          if (flightY) flightY.playbackRate = rr;\r\n          if (flapAnims) {\r\n            for (var aIdx = 0; aIdx < flapAnims.length; aIdx++) flapAnims[aIdx].playbackRate = rr;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    \/* \u2500\u2500 papuga \u2500\u2500 *\/\r\n    function scheduleParrot(delay) {\r\n      clearTimeout(parrotTimer);\r\n      if (isStatic) return;\r\n      parrotTimer = setTimeout(launchParrot, delay != null ? delay : rand(C.pMin, Math.max(C.pMin, C.pMax)));\r\n    }\r\n    function stopFlight() {\r\n      if (flight) { flight.onfinish = null; flight.cancel(); }\r\n      if (flightY) flightY.cancel();\r\n      \/* przywr\u00f3\u0107 normalne tempo machania \u2013 inaczej po przerwanym, przyspieszonym przelocie zostaje szybsze *\/\r\n      if (flapAnims) {\r\n        for (var i = 0; i < flapAnims.length; i++) flapAnims[i].playbackRate = 1;\r\n      }\r\n      flight = flightY = flapAnims = null;\r\n      rate = 1;\r\n      parrot.classList.remove('is-flying');\r\n    }\r\n    function launchParrot() {\r\n      if (isStatic || !parrot.animate) return;\r\n      if (!raf) { parrotPending = true; return; }\r\n      var w = parrot.offsetWidth || 150;\r\n      var y0 = H * rand(0.08, 0.30);\r\n      flightDur = (6000 + W * 2.2) \/ C.pace;\r\n      exitAt = flightDur * (W + w * 1.3) \/ (W + w * 1.6);\r\n      rate = 1;\r\n      parrot.classList.add('is-flying');\r\n      flapAnims = sprite.getAnimations ? sprite.getAnimations() : null;\r\n      flight = parrot.animate(\r\n        [{ transform: 'translate3d(' + (-w * 1.3) + 'px,0,0)' }, { transform: 'translate3d(' + (W + w * 0.3) + 'px,0,0)' }],\r\n        { duration: flightDur, easing: 'linear' });\r\n      flightY = parrotY.animate([\r\n        { transform: 'translateY(' + y0 + 'px)', easing: 'ease-in-out' },\r\n        { transform: 'translateY(' + (y0 - H * rand(0.02, 0.08)) + 'px)', offset: rand(0.4, 0.6), easing: 'ease-in-out' },\r\n        { transform: 'translateY(' + (y0 + H * rand(-0.03, 0.04)) + 'px)' }\r\n      ], { duration: flightDur, fill: 'forwards' });\r\n      flight.onfinish = function () {\r\n        stopFlight();                                       \/\/ resetuje te\u017c tempo machania\r\n        scheduleParrot();\r\n      };\r\n    }\r\n\r\n    \/* \u2500\u2500 start\/stop: tylko gdy scena widoczna i karta aktywna \u2500\u2500 *\/\r\n    function update() {\r\n      var run = visible && !document.hidden && !isStatic;\r\n      if (run && !raf) {\r\n        last = 0;\r\n        raf = requestAnimationFrame(frame);\r\n        root.classList.remove('is-paused');\r\n        if (flight) { flight.play(); if (flightY) flightY.play(); }\r\n        if (parrotPending && ready) { parrotPending = false; scheduleParrot(800); }\r\n      } else if (!run && raf) {\r\n        cancelAnimationFrame(raf); raf = 0;\r\n        root.classList.add('is-paused');\r\n        if (flight) { flight.pause(); if (flightY) flightY.pause(); }\r\n      }\r\n      if (isStatic) { stopFlight(); paintLayers(false); }\r\n    }\r\n    new IntersectionObserver(function (en) { visible = en[0].isIntersecting; update(); }).observe(root);\r\n    function onResize() { readCfg(); syncAllLayers(); }\r\n    if (window.ResizeObserver) new ResizeObserver(onResize).observe(root);\r\n    else window.addEventListener('resize', onResize, { passive: true });\r\n    window.addEventListener('scroll', updateRect, { passive: true });\r\n    document.addEventListener('visibilitychange', update);\r\n    function onEnv() { var was = isStatic; readCfg(); syncAllLayers(); update(); if (was && !isStatic && ready) scheduleParrot(1500); }\r\n    onMq(mqReduce, onEnv);\r\n    onMq(mqMouse, onEnv);\r\n\r\n    \/* \u2500\u2500 mysz (tylko urz\u0105dzenia z kursorem) \u2500\u2500 *\/\r\n    window.addEventListener('pointermove', function (e) {\r\n      if (!raf || !hasMouse || e.pointerType === 'touch') return;\r\n      tx = clamp((e.clientX - rectLeft) \/ W * 2 - 1, -1, 1);\r\n      ty = clamp((e.clientY - rectTop) \/ H * 2 - 1, -1, 1);\r\n      if (lpt && e.timeStamp - lpt < 200) {\r\n        var dx = e.clientX - lpx, dy = e.clientY - lpy;\r\n        var v = Math.sqrt(dx * dx + dy * dy) \/ Math.max(e.timeStamp - lpt, 1);\r\n        energy = Math.min(1, energy + Math.min(v, 4) * 0.012);\r\n      }\r\n      lpx = e.clientX; lpy = e.clientY; lpt = e.timeStamp;\r\n    }, { passive: true });\r\n    document.addEventListener('mouseout', function (e) { if (!e.relatedTarget) { tx = ty = 0; lpt = 0; } });\r\n  }\r\n})();\r\n<\/script>\r\n<\/div>\r\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-3527","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/pages\/3527","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3527"}],"version-history":[{"count":137,"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/pages\/3527\/revisions"}],"predecessor-version":[{"id":3693,"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=\/wp\/v2\/pages\/3527\/revisions\/3693"}],"wp:attachment":[{"href":"https:\/\/misot.pl\/zjazdy\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}