(function () { const navbar = document.getElementById( 'brief-navbar' ); if ( !navbar || navbar.dataset.scrollReady === 'true' ) return; navbar.dataset.scrollReady = 'true'; /* IMPORTANT PACIFIC is now a normal link to: https://brief.pacificcreative.co.uk/ There is deliberately NO click interception and NO scroll-to-top JavaScript. This allows the same header to be used on Privacy, Terms, IP and other BRIEF subpages. */ let lastY = Math.max( window.scrollY || window.pageYOffset || 0, 0 ); let accumulated = 0; let direction = 0; let ticking = false; /* Enough movement to feel intentional, without making the header twitchy. */ const triggerDistance = 28; function updateHeader() { ticking = false; const currentY = Math.max( window.scrollY || window.pageYOffset || 0, 0 ); const delta = currentY - lastY; const newDirection = delta > 0 ? 1 : delta < 0 ? -1 : 0; /* Always visible close to the top. */ if ( currentY <= 70 ) { navbar.classList.remove( 'is-dissolved' ); accumulated = 0; direction = 0; lastY = currentY; return; } if ( newDirection === 0 ) { lastY = currentY; return; } if ( newDirection !== direction ) { direction = newDirection; accumulated = 0; } accumulated += Math.abs(delta); if ( accumulated >= triggerDistance ) { if ( direction > 0 ) { navbar.classList.add( 'is-dissolved' ); } else { navbar.classList.remove( 'is-dissolved' ); } accumulated = 0; } lastY = currentY; } function onScroll() { if (ticking) return; ticking = true; requestAnimationFrame( updateHeader ); } window.addEventListener( 'scroll', onScroll, { passive:true } ); })();
(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 • PRIVATE VIEWING

PACIFIC CREATIVE

PRIVATE ACCESS

Selected creative worlds, authored work and proprietary thinking are presented privately.

SELECTED ACCESS

Some work is better understood in context

PACIFIC presents selected authored work, creative worlds and proprietary thinking privately to clients, partners, collaborators and organisations ready to create differently.

(function () { if (document.getElementById('pacific-cinematic-background')) return; var video = document.createElement('video'); video.id = 'pacific-cinematic-background'; video.src = 'https://res.cloudinary.com/goawy7c4/video/upload/v1788966636/PACIFIC_BIREF_INTRO_MAIN.mp4'; video.autoplay = true; video.loop = true; video.muted = true; video.defaultMuted = true; video.playsInline = true; video.preload = 'auto'; video.setAttribute('playsinline', ''); video.setAttribute('webkit-playsinline', ''); video.setAttribute('aria-hidden', 'true'); var sound = document.createElement('button'); sound.id = 'pacific-sound-control'; sound.type = 'button'; sound.textContent = 'SOUND ON'; sound.setAttribute('aria-label', 'Turn PACIFIC film sound on'); sound.setAttribute('aria-pressed', 'false'); /* Direct body children = not constrained by Carrd's content Embed. */ document.body.insertBefore(video, document.body.firstChild); document.body.appendChild(sound); /* Start muted so autoplay is browser-safe. */ var playAttempt = video.play(); if (playAttempt && typeof playAttempt.catch === 'function') { playAttempt.catch(function () {}); } var fadeFrame = null; function fadeVolume(target, duration, onComplete) { if (fadeFrame) cancelAnimationFrame(fadeFrame); var start = performance.now(); var from = video.volume; function frame(now) { var p = Math.min((now - start) / duration, 1); var eased = 1 - Math.pow(1 - p, 3); video.volume = from + (target - from) * eased; if (p < 1) { fadeFrame = requestAnimationFrame(frame); } else { fadeFrame = null; if (onComplete) onComplete(); } } fadeFrame = requestAnimationFrame(frame); } sound.addEventListener('click', function () { var turningOn = video.muted || video.volume === 0; if (turningOn) { video.volume = 0; video.muted = false; var p = video.play(); if (p && typeof p.catch === 'function') { p.catch(function () {}); } fadeVolume(1, 1000); sound.textContent = 'SOUND OFF'; sound.setAttribute('aria-label', 'Turn PACIFIC film sound off'); sound.setAttribute('aria-pressed', 'true'); } else { fadeVolume(0, 700, function () { video.muted = true; }); sound.textContent = 'SOUND ON'; sound.setAttribute('aria-label', 'Turn PACIFIC film sound on'); sound.setAttribute('aria-pressed', 'false'); } }); })();

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