
Name of Source 
Name of Source 
Name of Source 
Name of Source 
Category Title 
Category Title
Place the below code in your header script area this delete this block.
<script>/* Polaroid scatter settle */
(function () {
var TRIGGER = 0.85; // plays when the gallery's top reaches 85% down the screen
var SCATTER = 70; // how far photos fly in from (percent of a photo's size)
var SPIN = 25; // max tilt in degrees while scattered
var REST_TILT = 3; // max tilt once landed (0 = perfectly straight grid)
var STAGGER = 90; // ms between each photo landing
var DURATION = 900; // ms each landing takes (keep in sync with 0.9s in the CSS)
var galleries = [];
var ticking = false;
var reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
function rand(max) {
return (Math.random() * 2 - 1) * max;
}
function setup(el) {
var items = el.querySelectorAll('.kadence-blocks-gallery-item');
if (!items.length) items = el.querySelectorAll('li'); // fallback for other Kadence versions
if (!items.length) return null;
Array.prototype.forEach.call(items, function (item, i) {
item.classList.add('cc-pol-item');
// put the polaroid frame on the wrapper inside, so Kadence's gutter stays as spacing
var frame = item.firstElementChild || item;
frame.classList.add('cc-pol-frame');
item.style.setProperty('--sx', rand(SCATTER).toFixed(1) + '%');
item.style.setProperty('--sy', (rand(SCATTER * 0.6) - SCATTER * 0.5).toFixed(1) + '%'); // mostly from above
item.style.setProperty('--sr', rand(SPIN).toFixed(1) + 'deg');
item.style.setProperty('--rr', rand(REST_TILT).toFixed(1) + 'deg');
item.style.setProperty('--d', i * STAGGER + 'ms');
});
return { el: el, items: items, done: false };
}
function play(g) {
g.done = true;
g.el.classList.add('cc-pol-settled');
// once everyone has landed, remove the delays so hovers feel instant
setTimeout(function () {
Array.prototype.forEach.call(g.items, function (item) {
item.style.setProperty('--d', '0ms');
});
}, g.items.length * STAGGER + DURATION);
}
function check() {
var vh = window.innerHeight;
var waiting = false;
galleries.forEach(function (g) {
if (g.done) return;
if (g.el.getBoundingClientRect().top < vh * TRIGGER) {
play(g);
} else {
waiting = true;
}
});
ticking = false;
if (!waiting) window.removeEventListener('scroll', onScroll); // all done, stop listening
}
function onScroll() {
if (!ticking) {
ticking = true;
requestAnimationFrame(check);
}
}
function init() {
document.querySelectorAll('.cc-polaroid').forEach(function (el) {
var g = setup(el);
if (!g) return;
galleries.push(g);
if (reduce) {
el.classList.add('cc-pol-settled'); // polaroid frames, no toss
g.done = true;
return;
}
void el.offsetHeight; // lock in the scattered starting positions first
el.classList.add('cc-pol-ready');
});
if (!galleries.length) return;
window.addEventListener('scroll', onScroll, { passive: true });
// wait two frames so the starting positions are painted before anything lands
requestAnimationFrame(function () {
requestAnimationFrame(check);
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();</script>