(function () { const tracker = document.getElementById('pacific-contact-tracker'); if ( !tracker || tracker.dataset.ready === 'true' ) return; tracker.dataset.ready = 'true'; const nodes = Array.from( tracker.querySelectorAll('.pct-node') ); const progress = tracker.querySelector('.pct-progress'); let ticking = false; let currentIndex = -1; function clamp(value,min,max) { return Math.min( Math.max(value,min), max ); } function setActive(index) { index = clamp(index,0,2); if (index === currentIndex) return; currentIndex = index; nodes.forEach(function(node,i) { node.classList.toggle( 'is-active', i === index ); node.classList.toggle( 'is-past', i < index ); }); progress.style.height = ((index / 2) * 100) + '%'; } function update() { ticking = false; const doc = document.documentElement; const body = document.body; const viewport = window.innerHeight || doc.clientHeight; const fullHeight = Math.max( body.scrollHeight, body.offsetHeight, doc.clientHeight, doc.scrollHeight, doc.offsetHeight ); const scrollY = window.pageYOffset || doc.scrollTop || body.scrollTop || 0; const maxScroll = Math.max( 1, fullHeight - viewport ); /* IMPORTANT: The tracker appears almost immediately once scrolling begins. At the absolute top it disappears, preserving the clean opening state. */ const hasStarted = scrollY > 6; tracker.classList.toggle( 'is-visible', hasStarted ); /* Three simple page stages. No anchors required. */ const normalized = clamp( scrollY / maxScroll, 0, 1 ); let index = 0; if (normalized >= .66) { index = 2; } else if (normalized >= .33) { index = 1; } else { index = 0; } setActive(index); } function requestUpdate() { if (ticking) return; ticking = true; requestAnimationFrame(update); } function init() { update(); window.addEventListener( 'scroll', requestUpdate, { passive:true } ); window.addEventListener( 'resize', requestUpdate, { passive:true } ); window.addEventListener( 'orientationchange', requestUpdate, { passive:true } ); /* One recalculation after Carrd finishes settling image/layout dimensions. */ window.setTimeout( update, 800 ); } if ( document.readyState === 'loading' ) { document.addEventListener( 'DOMContentLoaded', init, { once:true } ); } else { init(); } })();
PACIFIC

CONTACT

ONE WORLD • ONE VISION • MANY EXPRESSIONS

PACIFIC connects strategy, design and digital delivery to create unique experiences that drive commercial growth

We start by understanding where your organisation is
where it wants to go, and the position it needs to own.

START A CONVERSATION →

DIRECTION → CREATIVE → EXPERIENCE → DIGITAL → ORCHESTRATION