/* OpenHero source by Cristian Olivera Chávez. MIT License Copyright (c) 2026 Cristian Olivera Chávez Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ "use client"; import { useEffect, useRef, useState } from "react"; import { Icon } from "@iconify/react"; export default function LuminaArcticPage() { const [mounted, setMounted] = useState(false); useEffect(() => { const timer = setTimeout(() => { setMounted(true); }, 0); return () => clearTimeout(timer); }, []); const cursorRef = useRef(null); const cursorRingRef = useRef(null); const scrollBarRef = useRef(null); const canvasRef = useRef(null); const videoRef = useRef(null); const videoFallbackRef = useRef(null); const exploreBtnRef = useRef(null); const exploreLiquidRef = useRef(null); const configBtnRef = useRef(null); const configLiquidRef = useRef(null); const navCtaRef = useRef(null); const tempCounterRef = useRef(null); const weightCounterRef = useRef(null); const yearsCounterRef = useRef(null); const liveTempNumberRef = useRef(null); useEffect(() => { if (!mounted) return; let mx = 0; let my = 0; let rx = 0; let ry = 0; let rafCursor = 0; let rafParticles = 0; let rafTemp = 0; let alive = true; const cursor = cursorRef.current; const cursorRing = cursorRingRef.current; const scrollBar = scrollBarRef.current; const onMouseMove = (e: MouseEvent) => { mx = e.clientX; my = e.clientY; if (cursor) { cursor.style.left = `${mx}px`; cursor.style.top = `${my}px`; } }; const animateCursor = () => { if (!alive) return; rx += (mx - rx) * 0.12; ry += (my - ry) * 0.12; if (cursorRing) { cursorRing.style.left = `${rx}px`; cursorRing.style.top = `${ry}px`; } rafCursor = requestAnimationFrame(animateCursor); }; const onMouseDown = () => { if (cursor) cursor.style.transform = "translate(-50%,-50%) scale(0.6)"; }; const onMouseUp = () => { if (cursor) cursor.style.transform = "translate(-50%,-50%) scale(1)"; }; const trackMouse = (el: HTMLElement | null, liquidEl: HTMLElement | null) => { if (!el) return undefined; const onMove = (e: MouseEvent) => { const r = el.getBoundingClientRect(); const x = `${(((e.clientX - r.left) / r.width) * 100).toFixed(1)}%`; const y = `${(((e.clientY - r.top) / r.height) * 100).toFixed(1)}%`; if (liquidEl) { liquidEl.style.setProperty("--mx", x); liquidEl.style.setProperty("--my", y); } }; el.addEventListener("mousemove", onMove); return () => el.removeEventListener("mousemove", onMove); }; const cleanups: Array<() => void> = []; window.addEventListener("mousemove", onMouseMove); document.addEventListener("mousedown", onMouseDown); document.addEventListener("mouseup", onMouseUp); rafCursor = requestAnimationFrame(animateCursor); const exploreCleanup = trackMouse(exploreBtnRef.current, exploreLiquidRef.current); const configCleanup = trackMouse(configBtnRef.current, configLiquidRef.current); if (exploreCleanup) cleanups.push(exploreCleanup); if (configCleanup) cleanups.push(configCleanup); if (navCtaRef.current) { const navCta = navCtaRef.current; const onNavMove = (e: MouseEvent) => { const r = navCta.getBoundingClientRect(); navCta.style.setProperty("--mx", `${((e.clientX - r.left) / r.width) * 100}%`); navCta.style.setProperty("--my", `${((e.clientY - r.top) / r.height) * 100}%`); }; navCta.addEventListener("mousemove", onNavMove); cleanups.push(() => navCta.removeEventListener("mousemove", onNavMove)); } const onScroll = () => { if (!scrollBar) return; const pct = (window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100; scrollBar.style.width = `${pct}%`; const depth = Math.min(window.scrollY / 1000, 1); document.documentElement.style.setProperty("--font-weight", `${300 + depth * 200}`); }; window.addEventListener("scroll", onScroll, { passive: true }); onScroll(); const animateCounter = (el: HTMLElement | null, target: number, duration: number) => { if (!el) return; const start = performance.now(); const step = (now: number) => { const p = Math.min((now - start) / duration, 1); const ease = 1 - Math.pow(1 - p, 4); el.textContent = `${Math.round(target * ease)}`; if (p < 1 && alive) requestAnimationFrame(step); }; requestAnimationFrame(step); }; const hero = document.getElementById("hero"); let heroTriggered = false; const heroObs = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting && !heroTriggered) { heroTriggered = true; setTimeout(() => animateCounter(tempCounterRef.current, 73, 2000), 1400); setTimeout(() => animateCounter(weightCounterRef.current, 185, 2000), 1500); setTimeout(() => animateCounter(yearsCounterRef.current, 34, 1800), 1600); heroObs.disconnect(); } }); }, { threshold: 0.3 } ); if (hero) heroObs.observe(hero); const revealObs = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) entry.target.classList.add("visible"); }); }, { threshold: 0.1, rootMargin: "0px 0px -40px 0px" } ); document.querySelectorAll(".reveal").forEach((el) => revealObs.observe(el)); const canvas = canvasRef.current; const ctx = canvas?.getContext("2d"); const particles: Array<{ x: number; y: number; vx: number; vy: number; size: number; alpha: number; hue: number }> = []; const resizeCanvas = () => { if (!canvas) return; canvas.width = window.innerWidth; canvas.height = window.innerHeight; }; resizeCanvas(); window.addEventListener("resize", resizeCanvas); for (let i = 0; i < 60; i++) { particles.push({ x: Math.random() * window.innerWidth, y: Math.random() * window.innerHeight, vx: (Math.random() - 0.5) * 0.3, vy: -Math.random() * 0.5 - 0.1, size: Math.random() * 1.5 + 0.3, alpha: Math.random() * 0.5 + 0.1, hue: Math.random() > 0.5 ? 180 : 330, }); } const drawParticles = () => { if (!alive || !canvas || !ctx) return; ctx.clearRect(0, 0, canvas.width, canvas.height); particles.forEach((p) => { p.x += p.vx; p.y += p.vy; if (p.y < -10) { p.y = canvas.height + 10; p.x = Math.random() * canvas.width; } if (p.x < -10) p.x = canvas.width + 10; if (p.x > canvas.width + 10) p.x = -10; ctx.beginPath(); ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2); ctx.fillStyle = `oklch(75% 0.12 ${p.hue} / ${p.alpha})`; ctx.fill(); }); rafParticles = requestAnimationFrame(drawParticles); }; rafParticles = requestAnimationFrame(drawParticles); const video = videoRef.current; const fallback = videoFallbackRef.current; const onVideoError = () => { if (video) video.style.display = "none"; if (fallback) fallback.style.display = "block"; }; const onCanPlay = () => { if (fallback) fallback.style.opacity = "0"; }; if (video) { video.addEventListener("error", onVideoError); video.addEventListener("canplay", onCanPlay); cleanups.push(() => video.removeEventListener("error", onVideoError)); cleanups.push(() => video.removeEventListener("canplay", onCanPlay)); } let tempTick = 0; const animateTemp = () => { if (!alive) return; const el = liveTempNumberRef.current; if (el) { const val = Math.round(-47 + Math.sin(tempTick * 0.005) * 3); el.textContent = `${Math.abs(val)}`; } tempTick++; rafTemp = requestAnimationFrame(animateTemp); }; rafTemp = requestAnimationFrame(animateTemp); const cards = Array.from(document.querySelectorAll(".bento-card")); const cardHandlers = cards.map((card) => { const onMove = (e: MouseEvent) => { const r = card.getBoundingClientRect(); const cx = (e.clientX - r.left - r.width / 2) / (r.width / 2); const cy = (e.clientY - r.top - r.height / 2) / (r.height / 2); card.style.transform = `translateY(-4px) scale(1.005) rotateX(${-cy * 3}deg) rotateY(${cx * 3}deg)`; card.style.perspective = "1000px"; }; const onLeave = () => { card.style.transform = ""; card.style.perspective = ""; }; card.addEventListener("mousemove", onMove); card.addEventListener("mouseleave", onLeave); return () => { card.removeEventListener("mousemove", onMove); card.removeEventListener("mouseleave", onLeave); }; }); cleanups.push(...cardHandlers); return () => { alive = false; cancelAnimationFrame(rafCursor); cancelAnimationFrame(rafParticles); cancelAnimationFrame(rafTemp); window.removeEventListener("mousemove", onMouseMove); document.removeEventListener("mousedown", onMouseDown); document.removeEventListener("mouseup", onMouseUp); window.removeEventListener("scroll", onScroll); window.removeEventListener("resize", resizeCanvas); heroObs.disconnect(); revealObs.disconnect(); cleanups.forEach((fn) => fn()); }; }, [mounted]); if (!mounted) return
; return ( <>
Collection 2025 — Polar Series

Engineered for the Edge of Earth

Precision-fabricated expedition equipment for environments where the margin between survival and failure is measured in grams and kelvin.

-0 °C
Rated to
0 g
Ultralight core
0 yr
Arctic heritage
Featured Systems

Precision at
every layer

Flagship · Layer 3 Shell

Polaris Membrane
Shell System

Triple-layer ePTFE membrane with graphene-infused face fabric. Tested at Svalbard under 180km/h katabatic conditions.

40k
Waterproof mm
185g
Weight
−60°C
Certified
7L
Pack size
$2,490
Free expedition shipping
In Stock
Environment
Current Conditions
−47 °C
Ny-Ålesund, Svalbard
91%
Humidity
180km/h
Wind
0 lux
Polar night
972 hPa
Pressure
Live data
Navigation Suite

Meridian GPS Transponder

Tri-frequency satellite acquisition. 200-hour battery. Sapphire crystal display rated to −80°C.

92/100 Expedition Rating
Thermal Core

900-Fill
Down System

$890
New
Footwear

Boreal Boot System

Insulation 800g Primaloft
Sole Vibram Arctic
Rating −70°C
Layering System

Gear Selection

Base Layer Merino
250gsm · Odor control
$220
Mid Fleece Grid
300g · Grid-back
$340
Shell Hardface
3L · Gore-Tex
$890
Material Science

Engineered to
molecular precision

Hydrophobic Membrane

Nano-scale ePTFE nodes repel water at the molecular boundary, maintaining zero moisture ingress at 40,000mm hydrostatic pressure.

Phase-Change Thermal

Aerogel micro-spheres embedded in the lining store and release heat in response to core body temperature delta. Active thermal buffering.

Graphene Reinforcement

Single-atom carbon lattice woven into the face fabric creates a 340% tensile strength increase over standard nylon without adding measurable weight.

Tri-Band Navigation

Simultaneous GPS, GLONASS, and Galileo acquisition delivers 2cm accuracy positioning. Operates in complete electromagnetic isolation.

Solid-State Power

Lithium ceramic cells maintain full charge capacity at −60°C where conventional lithium-ion fails below −20°C. 200-hour operational window.

Biometric Calibration

Equipment sizing algorithm accounts for cold-induced vasoconstriction, layering compression ratios, and polar mobility requirements simultaneously.

Expedition Log
“

At the magnetic north pole, at −63°C and 200km/h sustained winds, the Polaris Shell did not register a single moisture ingress event across eleven days. This is not equipment. This is a life-critical system.

EK
Dr. Erika Kjelström
Lead Researcher — Arctic Institute of Norway
Commission Your Expedition

Configure your
polar system

Work with our expedition engineers to build a layering system calibrated to your specific route, temperature envelope, and activity profile.

); }