/* ============================================================
   It's Jerome's World — awwwards-grade build
   ============================================================ */
:root {
  --accent: #f47921;
  --accent-light: #ff9642;
  --bg: #060606;
  --bg-soft: #0d0d0d;
  --text: #f4f1ea;
  --text-dim: #8a8782;
  --text-faint: #4a4844;
  --line: rgba(255,255,255,0.08);
  --serif: 'Instrument Serif', Georgia, serif;
  --sans: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif;
  --max: 1400px;
  --ease: cubic-bezier(0.16, 1, 0.3, 1);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { background: var(--bg); }
/* hide the browser scrollbar (scrolling still works) */
html { scrollbar-width: none; -ms-overflow-style: none; }
html::-webkit-scrollbar, body::-webkit-scrollbar { width: 0; height: 0; display: none; }
body {
  font-family: var(--sans); color: var(--text); line-height: 1.55; font-weight: 300;
  overflow-x: hidden; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
}
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
::selection { background: var(--accent); color: #060606; }
.label { font-size: 12px; letter-spacing: 0.08em; color: var(--text-dim); font-weight: 400; }

/* Grain */
body::after {
  content: ''; position: fixed; inset: 0; z-index: 9000; pointer-events: none; opacity: 0.04;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- Custom cursor ---------- */
.cursor { position: fixed; top: 0; left: 0; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); z-index: 9999; pointer-events: none; transform: translate(-50%, -50%); transition: width 0.3s var(--ease), height 0.3s var(--ease), background 0.3s; mix-blend-mode: difference; }
.cursor.hover { width: 46px; height: 46px; background: #fff; }
.cursor-light { position: fixed; top: 0; left: 0; width: 500px; height: 500px; border-radius: 50%; z-index: 1; pointer-events: none; transform: translate(-50%, -50%); background: radial-gradient(circle, rgba(244,121,33,0.10), transparent 60%); opacity: 0; transition: opacity 0.5s; }
body.cursor-ready .cursor-light { opacity: 1; }
@media (hover: none), (pointer: coarse) { .cursor, .cursor-light { display: none; } }

/* ============================================================ Preloader */
.preloader { position: fixed; inset: 0; z-index: 11000; background: var(--bg); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 22px; transition: opacity 0.6s var(--ease), visibility 0.6s; }
.preloader.done { opacity: 0; visibility: hidden; }
.preloader__enter { background: none; border: 0; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 22px; color: inherit; }
.preloader__bulb { position: relative; display: grid; place-items: center; transition: transform 0.4s var(--ease); }

/* Ignition burst (on click) */
.pf { position: absolute; top: 50%; left: 50%; width: 0; height: 0; pointer-events: none; z-index: 2; }
.pf-ray { position: absolute; left: 0; bottom: 0; width: 3px; height: 90vh; transform-origin: 50% 100%; transform: translateX(-50%) rotate(var(--a)) scaleY(0); background: linear-gradient(to top, transparent, rgba(255,217,168,1) 25%, var(--accent)); box-shadow: 0 0 10px rgba(244,121,33,0.8); opacity: 0; border-radius: 3px; }
.pf-flash { position: absolute; top: 50%; left: 50%; width: 60px; height: 60px; border-radius: 50%; transform: translate(-50%,-50%) scale(0); background: radial-gradient(circle, rgba(255,235,200,1), rgba(244,121,33,0.7) 40%, transparent 72%); opacity: 0; }
.preloader.igniting .pf-ray { animation: rayBurst 0.95s cubic-bezier(0.2,0.8,0.2,1) forwards; }
@keyframes rayBurst { 0% { transform: translateX(-50%) rotate(var(--a)) scaleY(0); opacity: 0; } 15% { opacity: 1; } 100% { transform: translateX(-50%) rotate(var(--a)) scaleY(1); opacity: 0; } }
.preloader.igniting .pf-flash { animation: flashBurst 1s ease-out forwards; }
@keyframes flashBurst { 0% { transform: translate(-50%,-50%) scale(0); opacity: 1; } 60% { opacity: 1; } 100% { transform: translate(-50%,-50%) scale(60); opacity: 0; } }
.preloader.igniting .preloader__bulb img, .preloader.igniting .preloader__bulb i { animation: bulbPop 0.6s var(--ease) forwards; }
@keyframes bulbPop { 0% { transform: scale(1); } 25% { transform: scale(1.3); } 100% { transform: scale(0.4); opacity: 0; } }
.preloader.igniting .preloader__label, .preloader.igniting .preloader__hint { animation: fadeOutUp 0.35s ease forwards; }
@keyframes fadeOutUp { to { opacity: 0; transform: translateY(-12px); } }
.preloader__enter:hover .preloader__bulb { transform: scale(1.08); }
.preloader__bulb img { width: clamp(80px, 13vw, 120px); height: auto; filter: drop-shadow(0 0 30px rgba(244,121,33,0.7)) drop-shadow(0 0 60px rgba(244,121,33,0.4)); animation: bulbGlow 3s ease-in-out infinite; }
.preloader__bulb i { font-size: 60px; color: var(--accent); filter: drop-shadow(0 0 30px rgba(244,121,33,0.7)) drop-shadow(0 0 60px rgba(244,121,33,0.4)); animation: bulbGlow 3s ease-in-out infinite; }
@keyframes bulbGlow { 0%,100% { filter: drop-shadow(0 0 30px rgba(244,121,33,0.7)) drop-shadow(0 0 60px rgba(244,121,33,0.4)); } 50% { filter: drop-shadow(0 0 45px rgba(244,121,33,0.95)) drop-shadow(0 0 90px rgba(244,121,33,0.6)); } }
.preloader__hint { font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-dim); animation: hintPulse 2s ease-in-out infinite; }
@keyframes hintPulse { 0%,100% { opacity: 0.4; } 50% { opacity: 1; } }
@keyframes preGlow { 0%,100%{ color: var(--text-faint); text-shadow:none } 50%{ color: var(--accent); text-shadow: 0 0 30px rgba(244,121,33,0.9), 0 0 70px rgba(244,121,33,0.5) } }
.preloader__label { font-family: var(--serif); font-size: clamp(28px, 5vw, 44px); font-style: italic; color: var(--text); }
body.loading { overflow: hidden; height: 100vh; }

/* ============================================================ WebGL canvas */
/* Hero background image (fixed, sits behind the transparent hero; content scrim covers it on scroll) */
.hero-bg { position: fixed; inset: 0; z-index: 0;
  background:
    url("images/hero-bg.png") center / cover no-repeat,
    linear-gradient(180deg, #0a0a1a 0%, #2a1a3a 44%, #c98a3a 60%, #1a2a3a 80%, #060606 100%);
}
/* Readability scrim + blend into the dark content below */
.hero-bg::after { content: ''; position: absolute; inset: 0; background:
  radial-gradient(120% 90% at 50% 40%, transparent 0%, rgba(6,6,6,0.35) 55%, rgba(6,6,6,0.7) 100%),
  linear-gradient(to bottom, rgba(6,6,6,0.55) 0%, rgba(6,6,6,0.25) 30%, rgba(6,6,6,0.45) 58%, rgba(6,6,6,0.96) 100%);
}

/* ============================================================ Atmosphere embers */
.atmosphere { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 3; pointer-events: none; }
body.webgl-off .atmosphere { opacity: 0.7; }
@media (hover: none), (pointer: coarse) { .atmosphere { display: none; } }

/* ============================================================ Chapter nav */
.chapters { position: fixed; right: 34px; top: 50%; transform: translateY(-50%); z-index: 1000; display: flex; flex-direction: column; gap: 22px; mix-blend-mode: difference; opacity: 0; transition: opacity 0.6s ease; }
body:not(.loading) .chapters { opacity: 1; }
.chapters a { display: flex; align-items: center; justify-content: flex-end; gap: 12px; color: #fff; }
.chapters__num { font-family: var(--serif); font-size: 12px; opacity: 0; transform: translateX(8px); transition: all 0.4s var(--ease); }
.chapters__label { font-size: 12px; letter-spacing: 0.04em; opacity: 0; transform: translateX(8px); transition: all 0.4s var(--ease); width: 0; overflow: hidden; white-space: nowrap; }
.chapters__dot { width: 7px; height: 7px; border-radius: 50%; background: rgba(255,255,255,0.35); transition: all 0.4s var(--ease); flex-shrink: 0; }
.chapters a:hover .chapters__label, .chapters a.active .chapters__label { opacity: 0.85; transform: none; width: auto; }
.chapters a:hover .chapters__num { opacity: 0.6; transform: none; }
.chapters a.active .chapters__dot { background: var(--accent); width: 22px; border-radius: 4px; box-shadow: 0 0 12px var(--accent); }
@media (max-width: 900px) { .chapters { display: none; } }

/* ============================================================ Scroll progress */
.scroll-progress { position: fixed; top: 0; left: 0; height: 2px; width: 100%; z-index: 1001; transform: scaleX(0); transform-origin: 0 50%; background: linear-gradient(90deg, #7a3a0e, var(--accent), var(--accent-light)); box-shadow: 0 0 12px rgba(244,121,33,0.6); }

/* ============================================================ Nav */
nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; padding: 26px 48px; display: flex; justify-content: space-between; align-items: center; gap: 40px; transition: transform 0.6s var(--ease), padding 0.4s ease, background 0.4s ease; mix-blend-mode: difference; }
nav.hidden { transform: translateY(-110%); }
.logo { display: flex; align-items: center; gap: 12px; font-size: 14px; color: #fff; }
.logo-icon { width: 30px; height: 30px; border-radius: 7px; overflow: hidden; display: flex; align-items: center; justify-content: center; background: rgba(244,121,33,0.12); }
.logo-icon img { width: 100%; height: 100%; object-fit: contain; }
.logo-icon .fa-lightbulb { color: var(--accent); font-size: 15px; }
.logo-text-wrapper { position: relative; }
.logo-text-alt { position: absolute; left: 0; top: 0; opacity: 0; white-space: nowrap; font-family: var(--serif); font-style: italic; transition: opacity 0.4s ease; }
.logo-text { transition: opacity 0.4s ease; }
.logo.scrolled .logo-text { opacity: 0; }
.logo.scrolled .logo-text-alt { opacity: 1; }
.nav-right { display: flex; align-items: center; gap: 30px; }
.nav-links { display: flex; gap: 30px; list-style: none; }
.nav-links a { font-size: 13px; color: #fff; position: relative; padding: 4px 0; }
.nav-links a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px; background: #fff; transform: scaleX(0); transform-origin: right; transition: transform 0.4s var(--ease); }
.nav-links a:hover::after { transform: scaleX(1); transform-origin: left; }
.hamburger { display: none; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 8px; z-index: 1001; }
.hamburger span { width: 22px; height: 1.5px; background: #fff; transition: all 0.3s ease; border-radius: 2px; }
.hamburger.active span:nth-child(1){ transform: rotate(45deg) translate(6px,6px); }
.hamburger.active span:nth-child(2){ opacity: 0; }
.hamburger.active span:nth-child(3){ transform: rotate(-45deg) translate(6px,-6px); }
@media (max-width: 700px) {
  .hamburger { display: flex; }
  .nav-links { position: fixed; inset: 0 0 0 auto; width: 78%; max-width: 320px; height: 100vh; background: rgba(6,6,6,0.98); flex-direction: column; gap: 0; padding: 110px 32px 32px; transform: translateX(100%); transition: transform 0.5s var(--ease); mix-blend-mode: normal; }
  .nav-links.active { transform: translateX(0); }
  .nav-links li { width: 100%; }
  .nav-links a { display: block; padding: 20px 0; font-size: 22px; font-family: var(--serif); border-bottom: 1px solid var(--line); }
}

/* ============================================================ Buttons */
.btn { display: inline-flex; align-items: center; gap: 10px; padding: 15px 28px; border-radius: 100px; font-size: 13px; font-weight: 500; letter-spacing: 0.02em; cursor: pointer; transition: background 0.3s, color 0.3s, border-color 0.3s; will-change: transform; }
.btn i { transition: transform 0.3s var(--ease); }
.btn-primary { background: var(--accent); color: #060606; }
.btn-primary:hover { background: var(--accent-light); }
.btn-primary:hover .fa-arrow-down { transform: translateY(3px); }
.btn-ghost { border: 1px solid var(--line); color: var(--text); }
.btn-ghost:hover { border-color: var(--text); }

/* ============================================================ Reveal utils */
.reveal { opacity: 0; transform: translateY(30px); transition: opacity 1s var(--ease), transform 1s var(--ease); transition-delay: calc(var(--i,0) * 0.08s); }
.reveal.in { opacity: 1; transform: none; }
.mask { display: block; overflow: hidden; padding-bottom: 0.08em; }
.mask > span { display: block; transform: translateY(110%); transition: transform 1.1s var(--ease); transition-delay: calc(var(--i,0) * 0.1s); }
.mask.in > span { transform: none; }

/* ============================================================ HERO */
.hero { position: relative; z-index: 1; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 120px 24px 80px; }
.hero__eyebrow { display: flex; gap: 14px; align-items: center; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--text-dim); margin-bottom: 28px; }
.hero__eyebrow .sep { color: var(--accent); }
.hero__title { font-family: var(--serif); font-weight: 400; line-height: 0.86; letter-spacing: -0.02em; font-size: clamp(72px, 17vw, 260px); }
/* Tight lines, with the J's descender allowed to bleed past the clip edge */
.hero__title .mask { padding: 0; margin: 0; overflow: clip; overflow-clip-margin: 0.45em; }
.hero__title .line { display: block; }
.hero__title em { font-style: italic; }
.hero__title .dot-orange { color: var(--accent); }
.hero__title .outline > span { color: var(--accent); font-style: italic; }
.hero__sub { max-width: 520px; margin: 32px auto 40px; font-size: 16px; color: var(--text-dim); line-height: 1.7; }
.hero__cta { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.hero__scroll { position: absolute; bottom: 34px; left: 50%; transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 10px; font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: var(--text-dim); }
.hero__scroll i { width: 1px; height: 46px; background: var(--line); position: relative; overflow: hidden; }
.hero__scroll i::after { content: ''; position: absolute; inset: 0; background: var(--accent); animation: scrollLine 2s ease-in-out infinite; }
@keyframes scrollLine { 0%{transform:translateY(-100%)} 100%{transform:translateY(100%)} }

/* ============================================================ Content scrim */
.content { position: relative; z-index: 2; background: var(--bg); }

/* ============================================================ Marquee */
.marquee { overflow: hidden; padding: 30px 0; border-block: 1px solid var(--line); }
.marquee__track { display: flex; width: max-content; will-change: transform; }
.marquee .m { font-family: var(--serif); font-size: clamp(34px, 6vw, 72px); color: var(--text-dim); white-space: nowrap; padding-right: 0.2em; }
.marquee .m b { color: var(--accent); font-size: 0.5em; vertical-align: middle; margin: 0 0.3em; }
.marquee .m em { color: var(--text); font-style: italic; }

/* ============================================================ Shared meta label */
.meta { font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); }

/* ============================================================ Archive stack (scroll-spread) */
.stack-section { position: relative; height: 320vh; z-index: 1; }
.stack-sticky { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: clamp(24px, 5vh, 56px); overflow: hidden; }
.stack-header { text-align: center; display: flex; flex-direction: column; gap: 12px; }
.stack-header h2 { font-family: var(--serif); font-size: clamp(48px, 9vw, 130px); font-weight: 400; line-height: 0.92; letter-spacing: -0.02em; }
.stack-header h2 em { color: var(--accent); font-style: italic; }
.stack-container { position: relative; width: 100%; height: clamp(280px, 46vh, 520px); }
.stack-img { position: absolute; top: 50%; left: 50%; width: clamp(190px, 23vw, 320px); aspect-ratio: 3/4; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); background: var(--bg-soft); box-shadow: 0 30px 70px rgba(0,0,0,0.55); transform: translate(-50%, -50%); will-change: transform; }
.stack-img img { width: 100%; height: 100%; object-fit: cover; }
.stack-img::after { content: attr(data-caption); position: absolute; left: 12px; bottom: 12px; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text); background: rgba(6,6,6,0.5); padding: 4px 8px; border-radius: 4px; backdrop-filter: blur(4px); }
.s1 { z-index: 1; } .s2 { z-index: 2; } .s3 { z-index: 3; } .s4 { z-index: 4; }
.stack-progress { width: min(320px, 60vw); height: 2px; background: var(--line); }
.stack-progress-fill { height: 100%; width: 0; background: var(--accent); box-shadow: 0 0 10px var(--accent); }

/* ============================================================ Motion film strip */
.film-strip { padding: clamp(60px, 9vh, 120px) 0; overflow: hidden; position: relative; z-index: 1; }
.film-strip-header { display: flex; justify-content: space-between; gap: 16px; padding: 0 48px 28px; }
.strip-track { display: flex; gap: 20px; width: max-content; padding: 0 20px; will-change: transform; }
.strip-frame { position: relative; flex: 0 0 auto; width: clamp(260px, 30vw, 420px); aspect-ratio: 16 / 10; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); background: linear-gradient(135deg, rgba(244,121,33,0.12), var(--bg-soft)); }
.strip-frame video { width: 100%; height: 100%; object-fit: cover; display: block; }
.strip-frame::before { content: attr(data-num); position: absolute; top: 12px; left: 12px; font-size: 10px; letter-spacing: 0.1em; color: var(--accent); background: rgba(6,6,6,0.6); padding: 4px 8px; border-radius: 4px; }
.strip-frame::after { content: attr(data-caption); position: absolute; bottom: 12px; left: 14px; font-family: var(--serif); font-size: 20px; color: var(--text); text-shadow: 0 2px 10px rgba(0,0,0,0.7); }
@media (max-width: 700px) { .film-strip-header { padding: 0 24px 20px; } }

/* Reduced-motion fallback: lay the plates out instead of stacking */
@media (prefers-reduced-motion: reduce) {
  .stack-section { height: auto; }
  .stack-sticky { position: static; height: auto; padding: 80px 0; }
  .stack-container { display: flex; flex-wrap: wrap; gap: 16px; justify-content: center; height: auto; }
  .stack-img { position: static; transform: none !important; }
}

/* ============================================================ Section heads */
.section-head { display: flex; flex-direction: column; gap: 16px; margin-bottom: 60px; }
.section-head h2 { font-family: var(--serif); font-size: clamp(40px, 7vw, 96px); font-weight: 400; line-height: 0.95; letter-spacing: -0.02em; }

/* ============================================================ About */
.about { max-width: var(--max); margin: 0 auto; padding: clamp(100px, 16vh, 200px) 48px; position: relative; }
/* Full-bleed background image + dark scrim for readability */
.about::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: 100vw; z-index: 0;
  background:
    linear-gradient(rgba(6,6,6,0.68), rgba(6,6,6,0.78)),
    url("images/about-bg.png") center / cover no-repeat;
}
.about__grid { position: relative; z-index: 1; }
.about__grid { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 80px; align-items: start; }
.about__lead { display: flex; flex-direction: column; gap: 28px; }
.about__statement { font-family: var(--serif); font-size: clamp(34px, 4.6vw, 64px); font-weight: 400; line-height: 1.05; letter-spacing: -0.02em; }
.about__statement em { color: var(--accent); font-style: italic; }
.about__cta { align-self: flex-start; display: inline-flex; align-items: center; gap: 12px; padding: 14px 26px; border: 1px solid var(--line); border-radius: 100px; color: var(--text); font-size: 13px; font-weight: 500; letter-spacing: 0.03em; will-change: transform; transition: background 0.3s, border-color 0.3s, color 0.3s; }
.about__cta:hover { background: var(--accent); border-color: var(--accent); color: #060606; }
.about__cta i { transition: transform 0.3s var(--ease); }
.about__cta:hover i { transform: translateX(5px); }
.about__body p { font-size: 16px; color: var(--text-dim); line-height: 1.8; margin-bottom: 48px; }
.stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.stat { border-top: 1px solid var(--line); padding-top: 18px; }
.stat strong { font-family: var(--serif); font-size: clamp(40px, 6vw, 68px); font-weight: 400; display: block; line-height: 1; }
.stat strong .plus { color: var(--accent); }
.stat span { font-size: 12px; color: var(--text-dim); letter-spacing: 0.04em; margin-top: 10px; display: block; }

/* ============================================================ Work — pinned horizontal */
.work { position: relative; height: 340vh; }
.work__sticky { position: sticky; top: 0; height: 100vh; display: flex; align-items: center; overflow: hidden; }
.work__track { display: flex; align-items: center; gap: 40px; padding: 0 48px; will-change: transform; }
.work__intro { flex: 0 0 auto; width: min(78vw, 460px); padding-right: 40px; }
.work__intro .label { margin-bottom: 24px; display: block; }
.work__intro h2 { font-family: var(--serif); font-size: clamp(56px, 9vw, 130px); font-weight: 400; line-height: 0.9; letter-spacing: -0.02em; margin-bottom: 24px; }
.work__intro h2 em { color: var(--accent); font-style: italic; }
.work__intro p { color: var(--text-dim); font-size: 15px; }
.panel { flex: 0 0 auto; width: clamp(320px, 42vw, 560px); display: flex; flex-direction: column; }
.panel__media { aspect-ratio: 4/3; border-radius: 14px; overflow: hidden; background: var(--bg-soft); position: relative; }
.panel__media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.8s var(--ease), filter 0.6s; filter: grayscale(0.35) brightness(0.85); }
.panel:hover .panel__media img { transform: scale(1.06); filter: grayscale(0) brightness(1); }
.panel__meta { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 16px; margin-top: 22px; }
.panel__num { font-family: var(--serif); font-size: 22px; color: var(--accent); }
.panel__meta h3 { font-family: var(--serif); font-size: clamp(24px, 3vw, 38px); font-weight: 400; letter-spacing: -0.01em; }
.panel__tag { grid-column: 2; font-size: 12px; color: var(--text-dim); letter-spacing: 0.03em; }
.panel__meta h3 { grid-column: 2; }
.panel__meta { grid-template-columns: auto 1fr auto; grid-template-rows: auto auto; }
.panel__num { grid-row: 1 / span 2; }
.panel__go { grid-column: 3; grid-row: 1 / span 2; width: 52px; height: 52px; border: 1px solid var(--line); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text); transition: all 0.4s var(--ease); }
.panel:hover .panel__go { background: var(--accent); border-color: var(--accent); color: #060606; transform: rotate(-45deg); }
/* fallback media */
.panel__media.img-fallback::after { content: attr(data-label); position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--serif); font-size: 30px; color: rgba(244,121,33,0.5); background: linear-gradient(135deg, rgba(244,121,33,0.16), rgba(244,121,33,0.02)); }
/* ============================================================ Warpzone portal */
.warp { max-width: var(--max); margin: 0 auto; min-height: 100vh; padding: clamp(100px, 14vh, 180px) 24px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 8px; position: relative; }
/* Full-bleed background image + scrim */
.warp::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: 100vw; z-index: 0;
  background:
    linear-gradient(rgba(6,6,6,0.74), rgba(6,6,6,0.88)),
    url("images/warpzone-bg.png") center / cover no-repeat;
}
.warp > * { position: relative; z-index: 1; }
.warp__title { font-family: var(--serif); font-size: clamp(52px, 11vw, 170px); font-weight: 400; line-height: 0.92; letter-spacing: -0.02em; }
.warp__title em { font-style: italic; color: var(--accent); }
.warp__portal { position: relative; width: clamp(260px, 38vw, 440px); aspect-ratio: 1; margin: 34px 0 28px; display: grid; place-items: center; }
.warp__ring { position: absolute; top: 50%; left: 50%; border: 1px solid rgba(244,121,33,0.3); border-radius: 50%; transform: translate(-50%,-50%); animation: warpPulse 3.4s ease-in-out infinite; }
.warp__ring:nth-child(1){ width: 28%; height: 28%; }
.warp__ring:nth-child(2){ width: 50%; height: 50%; animation-delay: 0.5s; border-color: rgba(244,121,33,0.2); }
.warp__ring:nth-child(3){ width: 74%; height: 74%; animation-delay: 1s; border-color: rgba(244,121,33,0.12); }
.warp__core { position: absolute; top: 50%; left: 50%; width: 48px; height: 48px; transform: translate(-50%,-50%); border-radius: 50%; background: radial-gradient(circle, var(--accent), rgba(244,121,33,0.3) 55%, transparent 72%); animation: coreGlow 2.2s ease-in-out infinite; }
.warp__orbit { position: absolute; inset: 0; animation: spin 34s linear infinite; }
.warp__node { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%) rotate(var(--a)) translateX(clamp(110px, 17vw, 200px)); }
.warp__node i { display: block; width: 52px; height: 52px; line-height: 52px; text-align: center; border: 1px solid var(--line); border-radius: 50%; background: rgba(13,13,13,0.6); color: var(--text-dim); font-size: 18px; transform: rotate(calc(-1 * var(--a))); animation: spinRev 34s linear infinite; transition: color 0.3s, border-color 0.3s; }
.warp__portal:hover .warp__node i { color: var(--accent); border-color: rgba(244,121,33,0.4); }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes spinRev { to { transform: rotate(-360deg); } }
@keyframes warpPulse { 0%,100%{ transform: translate(-50%,-50%) scale(1); opacity: 1; } 50%{ transform: translate(-50%,-50%) scale(1.08); opacity: 0.55; } }
@keyframes coreGlow { 0%,100%{ box-shadow: 0 0 20px rgba(244,121,33,0.6), 0 0 50px rgba(244,121,33,0.3); } 50%{ box-shadow: 0 0 36px rgba(244,121,33,0.9), 0 0 80px rgba(244,121,33,0.5); } }
.warp__sub { max-width: 480px; font-size: 16px; color: var(--text-dim); line-height: 1.7; }
.warp__controls { display: flex; align-items: center; gap: 8px; margin-top: 26px; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); flex-wrap: wrap; justify-content: center; }
.warp__sep { color: var(--accent); margin: 0 4px; }
.kbd { display: inline-flex; align-items: center; justify-content: center; min-width: 26px; padding: 4px 8px; border: 1px solid var(--line); border-radius: 5px; background: rgba(255,255,255,0.04); color: var(--text); font-family: var(--sans); font-size: 12px; }
.warp__cta { display: inline-flex; align-items: center; gap: 12px; margin-top: 34px; padding: 16px 34px; border-radius: 100px; background: var(--accent); color: #060606; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; font-size: 13px; will-change: transform; transition: background 0.3s; }
.warp__cta:hover { background: var(--accent-light); }
.warp__cta i { transition: transform 0.3s var(--ease); }
.warp__cta:hover i { transform: translateX(5px); }
@media (max-width: 700px) { .warp__cta { width: 100%; justify-content: center; } }

/* Desktop-only note (shown on touch instead of the game) */
.warp__note { display: none; align-items: center; gap: 10px; margin-top: 30px; padding: 13px 22px; border: 1px solid var(--line); border-radius: 100px; font-size: 13px; letter-spacing: 0.03em; color: var(--text-dim); }
.warp__note i { color: var(--accent); }
@media (hover: none), (pointer: coarse) {
  .warp__cta, .warp__controls { display: none !important; }
  .warp__note { display: inline-flex; }
}

/* ---- Playable warp arena (inline) ---- */
.wz-game { display: none; width: 100%; max-width: 1120px; margin: 0 auto; flex-direction: column; gap: 12px; }
.warp.playing .wz-game { display: flex; }
.warp.playing > .label,
.warp.playing .warp__title,
.warp.playing .warp__portal,
.warp.playing .warp__sub,
.warp.playing .warp__controls,
.warp.playing .warp__cta { display: none; }
.wz-game__header { display: flex; justify-content: space-between; align-items: center; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.wz-game__level { font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); }
.wz-game__level .accent { color: var(--accent); }
.wz-game__exit { font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-dim); background: none; border: none; cursor: pointer; transition: color 0.3s; }
.wz-game__exit:hover { color: var(--accent); }
.wz-game__caption { display: flex; justify-content: space-between; font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-faint); }
.wz-arena { position: relative; width: 100%; aspect-ratio: 30 / 20; max-height: 70vh; background: #130b06; border: 1px solid var(--line); border-radius: 8px; overflow: hidden; box-shadow: 0 30px 80px rgba(0,0,0,0.55), inset 0 0 80px rgba(0,0,0,0.4); }
.wz-char { position: absolute; width: 40px; height: 60px; z-index: 100; will-change: left, top; }
.wz-level { width: 100%; height: 100%; display: none; }
.wz-level.active { display: grid; grid-template-columns: repeat(30, 1fr); grid-template-rows: repeat(20, 1fr); gap: 1px; background: rgba(244,121,33,0.06); }
.wz-cell { position: relative; display: flex; align-items: center; justify-content: center; border: 1px solid rgba(244,121,33,0.08); }
.wz-cell.wall { background: linear-gradient(135deg, var(--accent), #c25a15); border: 1px solid #b04f12; box-shadow: inset 0 0.5px 1px rgba(255,255,255,0.2), inset 0 -0.5px 1px rgba(0,0,0,0.3); z-index: 1; }
.wz-cell.path { background: transparent; border: none; }
.wz-door, .wz-sdoor { position: absolute; display: flex; align-items: center; gap: 10px; pointer-events: none; z-index: 50; white-space: nowrap; }
.wz-door-icon { font-size: clamp(26px, 3.4vw, 46px); color: var(--accent); line-height: 1; transition: text-shadow 0.3s; }
.wz-door-label { font-size: 10px; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent); line-height: 1; }
.can-enter .wz-door-icon { text-shadow: 0 0 30px rgba(244,121,33,0.85), 0 0 60px rgba(244,121,33,0.5); animation: wzIconPulse 0.8s ease-in-out infinite; }
@keyframes wzIconPulse { 0%,100%{ text-shadow: 0 0 30px rgba(244,121,33,0.85), 0 0 60px rgba(244,121,33,0.5); } 50%{ text-shadow: 0 0 42px rgba(244,121,33,1), 0 0 90px rgba(244,121,33,0.7); } }
.wz-prompt { position: absolute; top: -34px; left: 50%; transform: translateX(-50%); background: var(--accent); color: #060606; padding: 4px 11px; border-radius: 100px; font-size: 9px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; opacity: 0; transition: opacity 0.3s; box-shadow: 0 4px 12px rgba(0,0,0,0.5); }
.can-enter .wz-prompt { opacity: 1; animation: wzBounce 0.6s ease-in-out infinite; }
@keyframes wzBounce { 0%,100%{ transform: translate(-50%,0); } 50%{ transform: translate(-50%,-7px); } }
.wz-toast { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); z-index: 10003; display: flex; align-items: center; gap: 8px; padding: 9px 16px; background: rgba(13,13,13,0.92); border: 1px solid var(--line); border-radius: 100px; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text); backdrop-filter: blur(8px); animation: wzToast 5s ease-in-out forwards; }
@keyframes wzToast { 0%{opacity:0;transform:translate(-50%,10px)} 10%{opacity:1;transform:translate(-50%,0)} 80%{opacity:1} 100%{opacity:0;visibility:hidden} }
.wz-key { display: inline-flex; align-items: center; justify-content: center; min-width: 22px; padding: 2px 7px; background: rgba(244,121,33,0.12); border: 1px solid rgba(244,121,33,0.3); border-radius: 4px; color: var(--accent); font-size: 10px; font-weight: 600; }

/* ============================================================ Skills big list */
.skills { max-width: var(--max); margin: 0 auto; padding: clamp(100px, 14vh, 180px) 48px; }
.skill-list { list-style: none; border-top: 1px solid var(--line); }
.skill-row { display: grid; grid-template-columns: 80px 1fr auto 60px; align-items: center; gap: 24px; padding: clamp(20px, 3vw, 36px) 0; border-bottom: 1px solid var(--line); position: relative; cursor: pointer; transition: padding 0.4s var(--ease); }
.skill-row::before { content: ''; position: absolute; inset: 0; background: var(--accent); transform: scaleY(0); transform-origin: bottom; transition: transform 0.5s var(--ease); z-index: -1; }
.skill-row:hover { padding-left: 28px; padding-right: 28px; }
.skill-row:hover::before { transform: scaleY(1); }
.skill-row > * { transition: color 0.4s var(--ease); }
.skill-row:hover > * { color: #060606; }
.skill-row__idx { font-family: var(--serif); font-size: 16px; color: var(--accent); }
.skill-row__name { font-family: var(--serif); font-size: clamp(28px, 4.5vw, 64px); font-weight: 400; letter-spacing: -0.01em; }
.skill-row__desc { font-size: 13px; color: var(--text-dim); letter-spacing: 0.03em; }
.skill-row i { justify-self: end; opacity: 0; transform: translateX(-12px); transition: opacity 0.4s var(--ease), transform 0.4s var(--ease), color 0.4s; }
.skill-row:hover i { opacity: 1; transform: translateX(0); }

/* ============================================================ Contact */
.contact { max-width: var(--max); margin: 0 auto; padding: clamp(120px, 18vh, 220px) 48px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 22px; position: relative; }
/* Full-bleed background image + scrim */
.contact::before { content: ''; position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: 100vw; z-index: 0;
  background:
    linear-gradient(rgba(6,6,6,0.68), rgba(6,6,6,0.78)),
    url("images/contact-bg.png") center / cover no-repeat;
}
.contact > * { position: relative; z-index: 1; }
.contact__title { font-family: var(--serif); font-size: clamp(48px, 10vw, 150px); font-weight: 400; line-height: 0.92; letter-spacing: -0.02em; }
.contact__title em { color: var(--accent); font-style: italic; }
.contact__email { font-family: var(--serif); font-size: clamp(22px, 4vw, 44px); font-style: italic; color: var(--text); margin-top: 20px; position: relative; padding-bottom: 6px; }
.contact__email::after { content: ''; position: absolute; left: 0; bottom: 0; width: 100%; height: 1px; background: currentColor; transform: scaleX(0); transform-origin: right; transition: transform 0.5s var(--ease); }
.contact__email:hover { color: var(--accent); }
.contact__email:hover::after { transform: scaleX(1); transform-origin: left; }
.social-links { display: flex; gap: 12px; justify-content: center; margin-top: 36px; }
.social-link { width: 50px; height: 50px; border: 1px solid var(--line); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text-dim); font-size: 16px; transition: all 0.4s var(--ease); will-change: transform; }
.social-link:hover { background: var(--accent); border-color: var(--accent); color: #060606; }

/* ============================================================ Footer */
.footer { padding: 60px 48px 50px; border-top: 1px solid var(--line); overflow: hidden; }
.footer__big { font-family: var(--serif); font-size: clamp(60px, 18vw, 280px); line-height: 0.9; text-align: center; color: transparent; -webkit-text-stroke: 1px rgba(255,255,255,0.1); letter-spacing: -0.02em; margin-bottom: 40px; user-select: none; }
.footer__row { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: 12px; color: var(--text-dim); }

/* ============================================================ Responsive */
@media (max-width: 1024px) {
  nav { padding: 22px 28px; }
  .about, .skills, .contact { padding-left: 28px; padding-right: 28px; }
  .about__grid { grid-template-columns: 1fr; gap: 48px; }
}
@media (max-width: 700px) {
  .hero__eyebrow { gap: 10px; font-size: 10px; }
  .hero__cta { flex-direction: column; width: 100%; }
  .btn { width: 100%; justify-content: center; }
  .stats { grid-template-columns: 1fr; gap: 16px; }
  /* Work becomes vertical swipe on mobile */
  .work { height: auto; }
  .work__sticky { position: static; height: auto; overflow-x: auto; scroll-snap-type: x mandatory; padding: 40px 0; -webkit-overflow-scrolling: touch; }
  .work__track { transform: none !important; padding: 0 24px; gap: 24px; }
  .work__intro, .panel { scroll-snap-align: center; }
  .work__intro { width: 80vw; }
  .panel { width: 80vw; }
  .skill-row { grid-template-columns: 40px 1fr; gap: 12px; }
  .skill-row__desc, .skill-row i { display: none; }
  .footer__row { flex-direction: column; }
}

/* ============================================================ Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
  .reveal { opacity: 1; transform: none; }
  .mask > span { transform: none; }
}
