(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

EVERY ENGAGEMENT BEGINS WITH YOUR STRATEGIC POSITION,
NOT OURS

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

We don’t begin with deliverables.We begin with direction

DIRECTION → CREATIVE → EXPERIENCE → DIGITAL → ORCHESTRATION