/* ============================================================
   ALBERTO MADDALONI — Scrollytelling Portfolio
   Editorial dark, with warm chapter accents.
   ============================================================ */

:root {
  --bg: #08090b;
  --bg-2: #0d0e10;
  --bg-warm: #1a120a;
  --bg-warm-2: #221810;
  --bg-paper: #ece6db;
  --ink: #ece8e0;
  --ink-dim: #8c8c87;
  --ink-faint: #4a4a47;
  --warm-ink: #e8dbc2;
  --warm-dim: #a89682;
  --paper-ink: #1a1610;
  --paper-dim: #6a5f4f;
  --line: rgba(236, 232, 224, 0.12);
  --line-strong: rgba(236, 232, 224, 0.32);
  --serif: 'Cormorant Garamond', 'Times New Roman', serif;
  --display: 'Fraunces', 'Cormorant Garamond', serif;
  --sans: 'Manrope', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', 'IBM Plex Mono', monospace;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
html, body {
  background: var(--bg); color: var(--ink);
  font-family: var(--sans); font-weight: 300;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
html { overflow-x: clip; }
img { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }

/* ===== TYPE ===== */
.eyebrow {
  font-family: var(--sans); font-size: 12px;
  letter-spacing: 0.34em; text-transform: uppercase;
  color: var(--ink-dim); font-weight: 400;
  display: inline-flex; align-items: center; gap: 18px;
}
.eyebrow .hairline {
  display: inline-block; width: 48px; height: 1px;
  background: var(--line-strong);
}
.eyebrow.warm { color: var(--warm-dim); }
.eyebrow.warm .hairline { background: rgba(232,219,194,0.4); }

h1, h2, h3 {
  font-family: var(--display);
  font-weight: 300; line-height: 1.0;
  letter-spacing: -0.02em;
  text-wrap: pretty;
}
h1 { font-size: clamp(60px, 9.5vw, 180px); }
h2 { font-size: clamp(44px, 6.4vw, 110px); }
h3 { font-size: clamp(28px, 3.2vw, 48px); }

em, .it { font-style: italic; color: var(--ink-dim); font-weight: 300; }
.serif { font-family: var(--display); font-style: italic; }

p { font-size: 18px; line-height: 1.6; color: var(--ink-dim); font-weight: 300; }
p.lead {
  font-family: var(--display); font-style: italic;
  font-size: clamp(22px, 2.4vw, 34px);
  line-height: 1.4; color: var(--ink); font-weight: 300;
  letter-spacing: -0.005em;
}
p.body-large {
  font-family: var(--serif); font-style: italic;
  font-size: clamp(22px, 1.8vw, 28px);
  line-height: 1.5; color: var(--ink);
  font-weight: 400; max-width: 36ch;
  letter-spacing: 0.003em;
}

.section-num {
  position: absolute; bottom: 40px; right: 50px;
  font-family: var(--display); font-size: clamp(180px, 22vw, 360px);
  line-height: 0.8;
  color: rgba(236,232,224,0.035);
  font-weight: 300; pointer-events: none;
  user-select: none; font-style: italic;
}
.chapter-mark {
  position: absolute; top: 40px; left: 50px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint);
  display: flex; gap: 18px; align-items: center;
}
.chapter-mark .dot {
  width: 5px; height: 5px; border-radius: 50%;
  background: currentColor;
}

/* ===== NAV ===== */
.nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 100;
  display: flex; align-items: center; justify-content: space-between;
  padding: 26px 50px;
  background: linear-gradient(180deg, rgba(8,9,11,0.7) 0%, rgba(8,9,11,0) 100%);
  transition: padding .5s ease, background .5s ease;
  pointer-events: none;
}
.nav > * { pointer-events: auto; }
.nav.is-condensed { padding: 16px 50px; background: rgba(8,9,11,0.92); backdrop-filter: blur(14px); border-bottom: 1px solid var(--line); }
.nav .logo {
  display: inline-flex; align-items: center;
  color: var(--ink); line-height: 1;
}
.logo-name {
  font-family: var(--mono); font-weight: 400;
  font-size: 11px; letter-spacing: 0.3em;
  text-transform: uppercase; color: var(--ink);
}
.nav .right { display: flex; align-items: center; gap: 28px; }
.lang { display: inline-flex; align-items: center; gap: 4px; }
.lang-sep { color: var(--ink-faint); font-size: 11px; transform: translateY(-1px); }
.lang button {
  background: none; border: none;
  color: var(--ink-dim); font: inherit;
  font-family: var(--mono);
  letter-spacing: 0.32em; text-transform: uppercase;
  font-size: 11px;
  cursor: pointer; padding: 6px 8px;
  position: relative; transition: color .25s ease;
}
.lang button::after {
  content: ''; position: absolute; left: 8px; right: 8px; bottom: 1px;
  height: 1px; background: var(--ink);
  transform: scaleX(0); transform-origin: left center;
  transition: transform .35s cubic-bezier(.2,.7,.2,1);
}
.lang button.active { color: var(--ink); }
.lang button.active::after { transform: scaleX(1); }
.lang button:hover { color: var(--ink); }
.lang button:hover::after { transform: scaleX(1); }

/* CHAPTER PROGRESS RAIL ON RIGHT */
.chapter-rail {
  position: fixed; right: 30px; top: 50%;
  transform: translateY(-50%);
  z-index: 80;
  display: flex; flex-direction: column; gap: 14px;
  align-items: flex-end;
  font-family: var(--mono);
  font-size: 9px; letter-spacing: 0.28em;
  text-transform: uppercase;
  pointer-events: none;
}
.chapter-rail a {
  pointer-events: auto;
  display: inline-flex; align-items: center; gap: 12px;
  color: var(--ink-faint);
  transition: color .3s ease;
}
.chapter-rail a .ch-line {
  display: inline-block; width: 18px; height: 1px;
  background: currentColor;
  transition: width .3s ease, background .3s ease;
}
.chapter-rail a .ch-name {
  opacity: 0; transform: translateX(8px);
  transition: opacity .3s ease, transform .3s ease;
  letter-spacing: 0.32em;
}
.chapter-rail a:hover { color: var(--ink); }
.chapter-rail a:hover .ch-name { opacity: 1; transform: translateX(0); }
.chapter-rail a:hover .ch-line { width: 32px; }
.chapter-rail a.is-active { color: var(--ink); }
.chapter-rail a.is-active .ch-line { width: 32px; background: var(--ink); }
.chapter-rail a.is-active .ch-name { opacity: 1; transform: translateX(0); }

/* ===== SECTIONS ===== */
section { position: relative; }
.container { max-width: 1800px; margin: 0 auto; position: relative; }

/* ============================================================
   HERO
   ============================================================ */
.hero {
  position: relative; height: 100vh; min-height: 720px;
  overflow: hidden;
}
.hero-img { position: absolute; inset: 0; }
.hero-img img {
  width: 100%; height: 100%; object-fit: cover;
  filter: saturate(0.92) contrast(1.04);
  object-position: 50% var(--hero-y, 67%);
  transform: scale(1.06);
}
.hero-img::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg,
    rgba(8,9,11,0.30) 0%,
    rgba(8,9,11,0) 24%,
    rgba(8,9,11,0) 56%,
    rgba(8,9,11,0.78) 100%);
}
.hero-content {
  position: absolute; inset: 0; z-index: 2;
  padding: 120px 50px 60px;
  display: flex; flex-direction: column;
  justify-content: space-between;
}
.hero-top {
  display: flex; justify-content: space-between; align-items: flex-start;
  margin-top: 40px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink);
  opacity: 0;
  transform: translateY(-12px);
  animation: heroFadeDown 1s cubic-bezier(.2,.7,.2,1) 0.3s forwards;
}
.hero.is-revealed .hero-top { opacity: 1; transform: translateY(0); }
.hero-top .right { text-align: right; }
.hero-title {
  max-width: 1500px;
}
.hero-title h1 {
  color: var(--ink);
  font-size: clamp(44px, 5.8vw, 110px);
  line-height: 1.02;
  letter-spacing: -0.015em;
}
.hero-title h1 .it { color: rgba(236,232,224,0.55); font-style: italic; }
.hero-title .reveal-line-inner { transition-delay: 0.9s !important; }
.hero-bottom {
  display: grid; grid-template-columns: 1fr auto; gap: 60px;
  align-items: end; margin-top: 60px;
  opacity: 0;
  transform: translateY(18px);
  animation: heroFadeUp 1.1s cubic-bezier(.2,.7,.2,1) 0.5s forwards;
}
.hero.is-revealed .hero-bottom { opacity: 1; transform: translateY(0); }
@keyframes heroFadeDown {
  to { opacity: 1; transform: translateY(0); }
}
@keyframes heroFadeUp {
  to { opacity: 1; transform: translateY(0); }
}
.hero-bottom .sub {
  max-width: 580px;
  font-family: var(--display); font-style: italic;
  font-size: clamp(20px, 1.7vw, 28px);
  line-height: 1.4; color: var(--ink); font-weight: 300;
}
.hero-bottom .meta {
  text-align: right; font-family: var(--mono);
  font-size: 11px; letter-spacing: 0.32em;
  text-transform: uppercase; color: var(--ink);
}
.hero-bottom .meta div { margin-top: 6px; color: var(--ink-dim); }

.scroll-mark {
  position: absolute; bottom: 32px; left: 50%;
  transform: translateX(-50%);
  font-family: var(--mono); font-size: 10px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink); display: flex; flex-direction: column;
  align-items: center; gap: 16px; z-index: 3;
}
.scroll-mark::after {
  content: ''; width: 1px; height: 40px;
  background: linear-gradient(180deg, var(--ink) 0%, transparent 100%);
  animation: pulseV 2.4s ease-in-out infinite;
}
@keyframes pulseV {
  0%, 100% { opacity: .4; transform: scaleY(.7); transform-origin: top; }
  50% { opacity: 1; transform: scaleY(1.0); }
}

/* ============================================================
   MANIFESTO — pinned, line-by-line word reveal
   ============================================================ */
.manifesto-pinned {
  position: relative;
  height: 380vh;
  background: var(--bg);
}
.manifesto-pinned .sticky {
  position: sticky; top: 0; height: 100vh;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
  padding: 0 8vw;
}
.manifesto-pinned .stage {
  width: 100%; max-width: 1400px;
  font-family: var(--display);
  font-weight: 300;
  font-style: italic;
  font-size: clamp(36px, 4.6vw, 80px);
  line-height: 1.18;
  letter-spacing: -0.012em;
  color: var(--ink);
  text-wrap: pretty;
}
/* IT: parole italiane mediamente più lunghe — leggera riduzione del corpo */
:root[lang="it"] .manifesto-pinned .stage {
  font-size: clamp(32px, 4.2vw, 72px);
}
.manifesto-pinned .stage .word {
  display: inline-block;
  margin-right: 0.22em;
  opacity: 0.12;
  transition: opacity 0.3s ease, color 0.3s ease;
  will-change: opacity;
}
.manifesto-pinned .stage .word.lit { opacity: 1; }
.manifesto-pinned .stage em { color: rgba(236,232,224,0.55); font-style: italic; }
.manifesto-pinned .stage .accent { color: #d4b994; font-style: italic; }
.manifesto-pinned .signature {
  position: absolute; bottom: 40px; left: 50px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
}
.manifesto-pinned .progress {
  position: absolute; top: 50%; right: 30px;
  transform: translateY(-50%);
  width: 1px; height: 40vh;
  background: rgba(236,232,224,0.1);
}
.manifesto-pinned .progress .fill {
  position: absolute; top: 0; left: 0; width: 100%;
  background: var(--ink); height: 0%;
}

/* ============================================================
   THREE PILLARS — horizontal scroll
   ============================================================ */
.pillars {
  position: relative;
  background: var(--bg);
  padding: 140px 0 60px;
  border-top: 1px solid var(--line);
}
.pillars-head {
  padding: 0 50px 100px;
  display: grid; grid-template-columns: 5fr 6fr;
  gap: 80px; max-width: 1800px; margin: 0 auto;
  align-items: end;
}
.pillars-head h2 { margin-top: 24px; }
.pillars-track-wrap {
  position: relative;
  padding-left: 50px;
}
.pillars-track {
  display: grid; grid-auto-flow: column;
  grid-auto-columns: minmax(420px, 36vw);
  gap: 30px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding: 0 50px 60px 0;
  scrollbar-width: none;
}
.pillars-track::-webkit-scrollbar { display: none; }
.pillar {
  scroll-snap-align: start;
  position: relative;
  border-top: 1px solid var(--line);
  padding-top: 30px;
  display: flex; flex-direction: column;
  gap: 18px;
}
.pillar .num {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint);
}
.pillar h3 {
  font-family: var(--display); font-style: italic;
  font-size: clamp(36px, 3.4vw, 56px);
  color: #ffffff; line-height: 1;
  margin-bottom: 0;
}
.pillar h3 em { color: rgba(255,255,255,0.78); font-style: italic; }
.pillar p {
  font-size: 17px; line-height: 1.65;
  max-width: 38ch;
  margin-top: -10px;
  color: var(--ink);
}
.pillar .img {
  margin-top: auto;
  aspect-ratio: 4/5; overflow: hidden; background: #000;
}
.pillar .img img { width: 100%; height: 100%; object-fit: cover; }
.pillars .scroll-hint {
  padding: 0 50px;
  margin-top: 30px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
  display: flex; align-items: center; gap: 14px;
}
.pillars .scroll-hint::before {
  content: ''; width: 24px; height: 1px;
  background: var(--ink-faint);
}

/* ============================================================
   SACRED LIGHT — warm chapter
   ============================================================ */
.sacred {
  background: var(--bg-warm); color: var(--warm-ink);
  position: relative; overflow: hidden;
}
.sacred .head {
  padding: 180px 50px 80px;
  max-width: 1800px; margin: 0 auto;
}
.sacred .head .row {
  display: grid; grid-template-columns: 5fr 6fr;
  gap: 100px; align-items: end;
}
.sacred .head h2 { color: var(--warm-ink); margin-top: 28px; }
.sacred .head h2 em { color: var(--warm-dim); }
.sacred .head p { color: var(--warm-dim); max-width: 56ch; line-height: 1.65; }
.sacred-gallery {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 4px;
  padding: 0 4px;
}
.sacred-gallery .it { overflow: hidden; background: #000; position: relative; }
.sacred-gallery .it img { width: 100%; height: 100%; object-fit: cover; }
.sacred .footer-row {
  padding: 70px 50px 160px; max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: 1fr 1fr 1fr;
  gap: 40px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.3em; text-transform: uppercase;
  color: var(--warm-dim);
}
.sacred .footer-row strong { color: var(--warm-ink); font-weight: 400; }

/* ============================================================
   FULL-BLEED CINEMATIC INTERLUDE
   ============================================================ */
.cinematic {
  position: relative; height: 100vh; min-height: 720px;
  overflow: hidden;
}
.cinematic .bg { position: absolute; inset: 0; }
.cinematic .bg img {
  width: 100%; height: 100%; object-fit: cover;
  object-position: 50% var(--cin1-y, 50%);
}
.cinematic.right .bg img {
  object-position: 50% var(--cin2-y, 50%);
}
.cinematic .bg::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg,
    rgba(8,9,11,0.5) 0%,
    rgba(8,9,11,0) 30%,
    rgba(8,9,11,0) 60%,
    rgba(8,9,11,0.85) 100%);
  pointer-events: none;
}
/* MOD-009 + MOD-011: cinematic bg multi-image — switch istantaneo (no fade) */
.cinematic .bg-slideshow img {
  position: absolute; inset: 0;
  opacity: 0;
}
.cinematic .bg-slideshow img.is-on {
  opacity: 1;
}

/* MOD-010: cinematic-scrollshow — pin sticky + scroll-driven slideshow.
   La section esterna ha height N*100vh (settata da JS in base al numero
   di immagini), il wrapper interno e' sticky 100vh. Le slide cambiano
   in funzione del progress di scroll sulla section. */
.cinematic.cinematic-scrollshow {
  height: auto; /* JS imposta inline height = N * 100vh */
  min-height: 0;
  overflow: visible;
}
.cinematic.cinematic-scrollshow > .cinematic-sticky {
  position: sticky; top: 0;
  height: 100vh; min-height: 720px;
  overflow: hidden;
}
.cinematic.cinematic-scrollshow .cinematic-sticky > .bg {
  position: absolute; inset: 0;
}
.cinematic.cinematic-scrollshow .cinematic-sticky > .overlay {
  position: absolute; inset: 0;
  z-index: 2;
}
/* Slideshow progress indicator — bottom-right, mono, discreto */
.slideshow-progress {
  position: absolute; bottom: 36px; right: 50px;
  display: inline-flex; align-items: center; gap: 14px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink); opacity: 0.85;
  z-index: 3;
}
.slideshow-progress .bar {
  display: inline-block; width: 80px; height: 1px;
  background: rgba(236,232,224,0.25);
  position: relative;
}
.slideshow-progress .bar .fill {
  position: absolute; left: 0; top: 0; height: 100%;
  background: var(--ink); width: 0%;
  transition: width 0.4s cubic-bezier(.2,.7,.2,1);
}
.cinematic .overlay {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  padding: 80px 50px;
  z-index: 2;
}
.cinematic .overlay .txt {
  max-width: 1100px; text-align: center;
}
.cinematic .overlay h2 {
  color: var(--ink);
  font-size: clamp(48px, 7vw, 130px);
  line-height: 1.0;
}
.cinematic .overlay h2 em { color: rgba(236,232,224,0.6); }
.cinematic .overlay .eye {
  display: inline-block; margin-bottom: 36px;
}
.cinematic.left .overlay { justify-content: flex-start; }
.cinematic.left .overlay .txt { text-align: left; }
.cinematic.right .overlay { justify-content: flex-end; }
.cinematic.right .overlay .txt { text-align: right; }

/* ============================================================
   CONSISTENCY CASE STUDY — pinned image stack
   ============================================================ */
.consistency {
  background: var(--bg-2);
  position: relative;
  padding: 160px 0 0;
  border-top: 1px solid var(--line);
}
.consistency-intro {
  padding: 0 50px 100px;
  max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: 5fr 6fr;
  gap: 100px; align-items: end;
}
.consistency-intro h2 { margin-top: 28px; }
.consistency-intro p { line-height: 1.65; }
.consistency-stage {
  position: relative;
  height: 380vh;
}
.consistency-stage .sticky {
  position: sticky; top: 0;
  height: 100vh;
  display: grid; grid-template-columns: 1fr 1fr;
  align-items: center;
  overflow: hidden;
  background: var(--bg-2);
}
.consistency-stage .img-wrap {
  position: relative;
  height: 80vh;
  margin: 0 0 0 50px;
  overflow: hidden;
  background: #0a0b0d;
}
.consistency-stage .img-wrap .slide {
  position: absolute; inset: 0;
  opacity: 0;
  transition: opacity 0.6s cubic-bezier(.2,.7,.2,1);
}
.consistency-stage .img-wrap .slide.is-on { opacity: 1; }
.consistency-stage .img-wrap .slide img {
  width: 100%; height: 100%; object-fit: contain;
  display: block;
}
.consistency-stage .text-wrap {
  padding: 0 8vw 0 80px;
  position: relative;
}
.consistency-stage .label {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint); margin-bottom: 28px;
  display: flex; align-items: center; gap: 20px;
}
.consistency-stage .label .num { color: var(--ink); }
.consistency-stage .panel {
  position: absolute; top: 26%; left: 8vw; right: 8vw;
  transform: translateY(-50%);
  opacity: 0;
  transition: opacity 0.5s ease, transform 0.6s cubic-bezier(.2,.7,.2,1);
}
.consistency-stage .panel.is-on { opacity: 1; }
.consistency-stage .panel h3 {
  font-family: var(--display); font-size: clamp(40px, 4vw, 68px);
  margin-bottom: 24px;
  margin-top: -300px;
  color: var(--ink);
}
.consistency-stage .panel h3 em { color: var(--ink-dim); }
.consistency-stage .panel p {
  font-size: 18px; max-width: 38ch;
  line-height: 1.65;
}
.consistency-stage .counter {
  position: absolute; bottom: 40px; left: 50px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint);
  display: flex; gap: 14px; align-items: center;
}
.consistency-stage .counter .n { color: var(--ink); }
.consistency-stage .counter .bar {
  width: 100px; height: 1px;
  background: var(--line);
  position: relative;
}
.consistency-stage .counter .bar .fill {
  position: absolute; left: 0; top: 0; height: 100%;
  width: 0%; background: var(--ink);
  transition: width 0.4s ease;
}

/* ============================================================
   SERIES SPREAD — vertical editorial
   ============================================================ */
.series {
  padding: 160px 0;
  background: var(--bg);
  position: relative;
}
.series.alt { background: var(--bg-2); }
.series-head {
  padding: 0 50px;
  max-width: 1800px; margin: 0 auto 80px;
  display: grid; grid-template-columns: 5fr 5fr;
  gap: 80px; align-items: end;
}
.series-head h2 { margin-top: 24px; }
.series-head .right { max-width: 540px; }
.series-head .right p { line-height: 1.65; }
.series-head .meta {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint); margin-top: 28px;
}
.series-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 4px; padding: 0 4px;
}
.series-grid .it { overflow: hidden; background: #000; }
.series-grid .it img { width: 100%; height: 100%; object-fit: cover; }

/* Veil custom layout */
.veil .a { grid-column: span 5; aspect-ratio: 4/5; }
.veil .b { grid-column: span 4; aspect-ratio: 3/4; }
.veil .c { grid-column: span 3; aspect-ratio: 3/4; }
.veil .d { grid-column: span 4; aspect-ratio: 3/4; }
.veil .e { grid-column: span 4; aspect-ratio: 3/4; }
.veil .f { grid-column: span 4; aspect-ratio: 3/4; }
.veil .g { grid-column: span 6; aspect-ratio: 5/4; }
.veil .h { grid-column: span 3; aspect-ratio: 3/4; }
.veil .i { grid-column: span 3; aspect-ratio: 3/4; }
.veil .j { grid-column: span 12; aspect-ratio: 21/8; }

/* ============================================================
   HORIZONTAL SCROLL CHAPTER (Americana / Motel Noir)
   ============================================================ */
.h-chapter {
  position: relative;
  background: var(--bg);
}
.h-chapter.warm-pulp { background: linear-gradient(180deg, #1c0e08 0%, #2a1610 50%, #1c0e08 100%); }
.h-chapter.americana { background: linear-gradient(180deg, #14110b 0%, #2a2114 50%, #14110b 100%); }
.h-chapter.mediterranean { background: linear-gradient(180deg, #15100a 0%, #3a2415 50%, #15100a 100%); }
.h-chapter.warm-pulp::before,
.h-chapter.americana::before,
.h-chapter.mediterranean::before {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(ellipse at 50% 50%, rgba(255,210,160,0.05) 0%, transparent 60%);
  z-index: 0;
}
.h-chapter .h-pin {
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  z-index: 1;
}
.h-chapter .h-track {
  height: 100%;
  display: flex;
  will-change: transform;
}
.h-chapter .h-panel {
  flex: 0 0 auto;
  height: 100vh;
  display: flex; align-items: center; justify-content: center;
  position: relative;
}
.h-panel.intro {
  width: 100vw;
  padding: 0 8vw;
}
.h-panel.intro .inner {
  max-width: 880px;
}
.h-panel.intro .eye { margin-bottom: 36px; }
.h-panel.intro h2 {
  font-size: clamp(54px, 7vw, 130px);
  margin-bottom: 36px;
}
.h-panel.intro p {
  font-size: clamp(18px, 1.4vw, 24px);
  line-height: 1.55;
  color: var(--ink);
  font-weight: 300;
  max-width: 56ch;
}
.h-panel.intro .meta {
  margin-top: 50px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
}
.h-panel.media {
  padding: 0 30px;
}
.h-panel.media .frame {
  height: 78vh;
  overflow: hidden;
  background: #000;
  position: relative;
}
.h-panel.media .frame img {
  height: 100%; width: auto;
  display: block;
  object-fit: cover;
}
.h-panel.media .cap {
  position: absolute; bottom: -30px; left: 0;
  font-family: var(--mono); font-size: 10px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
}
.h-panel.media-pair {
  display: flex; gap: 30px;
  padding: 0 30px;
  align-items: center;
}
.h-panel.media-pair .frame {
  height: 70vh;
  overflow: hidden;
  background: #000;
}
.h-panel.media-pair .frame img {
  height: 100%; width: auto;
  display: block;
  object-fit: cover;
}
.h-panel.quote {
  width: 70vw;
  padding: 0 6vw;
}
.h-panel.quote blockquote {
  font-family: var(--display); font-style: italic;
  font-size: clamp(36px, 3.6vw, 64px);
  line-height: 1.2; color: var(--ink);
  font-weight: 300;
  letter-spacing: -0.01em;
}
.h-panel.quote cite {
  display: block; margin-top: 30px;
  font-family: var(--mono); font-style: normal;
  font-size: 11px; letter-spacing: 0.32em;
  text-transform: uppercase; color: var(--ink-faint);
}
.h-chapter .h-progress {
  position: absolute; bottom: 30px; left: 50px; right: 50px;
  z-index: 10;
  display: flex; align-items: center; gap: 24px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
  pointer-events: none;
}
.h-chapter .h-progress .bar {
  flex: 1; height: 1px;
  background: rgba(236,232,224,0.1);
  position: relative;
}
.h-chapter .h-progress .bar .fill {
  position: absolute; left: 0; top: 0; height: 100%;
  width: 0%; background: var(--ink);
  transition: width 0.1s linear;
}

/* ============================================================
   RESTORATION — kept (the WOW)
   ============================================================ */
.restoration {
  background: var(--bg-2);
  padding: 160px 0 0;
  position: relative;
  border-top: 1px solid var(--line);
}
.rest-intro {
  padding: 0 50px 100px;
  max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: 5fr 6fr;
  gap: 100px; align-items: end;
}
.rest-intro h2 { margin-top: 28px; }
.rest-intro p { line-height: 1.65; }
.rest-mega { position: relative; height: 1700vh; }
.rest-stage {
  position: sticky; top: 0; height: 100vh;
  overflow: hidden; background: var(--bg-2);
}
.shooting { position: absolute; inset: 0; }
.shooting-title {
  position: absolute; inset: 0;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 22px;
  z-index: 5;
  pointer-events: none;
  opacity: 0;
  will-change: opacity, transform;
  text-align: center;
  padding: 0 8vw;
}
.shooting-title .num {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.46em; text-transform: uppercase;
  color: var(--ink-faint);
}
.shooting-title h3 {
  font-family: var(--display); font-style: italic;
  font-weight: 300;
  font-size: clamp(60px, 9vw, 160px);
  line-height: 0.95; color: var(--ink);
  letter-spacing: -0.01em;
}
.shooting-title .meta {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-dim);
}
.rest-refs-layer, .rest-final-layer { position: absolute; inset: 0; }
.rest-final-layer { opacity: 0; pointer-events: none; }
.ref {
  position: absolute; top: 50%; left: 50%;
  width: 12vw; max-width: 180px;
  aspect-ratio: 3/4;
  overflow: hidden; background: #000;
  box-shadow: 0 30px 60px rgba(0,0,0,0.6);
  opacity: 0;
  will-change: transform, opacity;
}
.ref img { width: 100%; height: 100%; object-fit: cover; }
.final-hero {
  position: absolute; top: 50%; left: 50%;
  width: 48vw; max-width: 820px;
  height: 70vh;
  overflow: hidden; background: #000;
  box-shadow: 0 60px 140px rgba(0,0,0,0.7);
  will-change: transform, filter, opacity;
}
.final-hero img { width: 100%; height: 100%; object-fit: cover; }
.final-carousel { position: absolute; inset: 0; pointer-events: none; }
.final-carousel .frame {
  position: absolute; top: 50%; left: 50%;
  overflow: hidden; background: #000;
  box-shadow: 0 60px 140px rgba(0,0,0,0.7);
  opacity: 0;
  will-change: transform, opacity;
}
.final-carousel .frame img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}
.rest-stage-caption {
  position: absolute; bottom: 60px; left: 60px;
  z-index: 10;
  display: flex; flex-direction: column; gap: 12px;
  max-width: 60vw;
  opacity: 0; will-change: transform, opacity;
}
.rest-num {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint);
}
.rest-name {
  font-family: var(--display); font-style: italic;
  font-weight: 300;
  font-size: clamp(40px, 5vw, 80px);
  line-height: 1; color: var(--ink);
}
.rest-meta {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-dim);
}
.rest-stage-meta {
  position: absolute; top: 60px; left: 60px;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint); z-index: 10;
}
.rest-rail {
  position: absolute; right: 50px; top: 50%;
  transform: translateY(-50%); z-index: 10;
}
.rail-line {
  position: relative; width: 1px; height: 60vh;
  background: rgba(236,232,224,0.12);
}
.rail-fill {
  position: absolute; top: 0; left: 0; width: 100%;
  background: var(--ink); height: 0%;
}
.rail-mark {
  position: absolute; left: 50%; width: 6px; height: 6px;
  border-radius: 50%; background: var(--bg-2);
  border: 1px solid rgba(236,232,224,0.4);
  transform: translate(-50%, -50%);
  cursor: pointer;
  transition: width .3s ease, height .3s ease, background .3s ease, border-color .3s ease;
}
.rail-mark.is-active { width: 11px; height: 11px; background: var(--ink); border-color: var(--ink); }
.rail-mark.is-done { background: rgba(236,232,224,0.4); border-color: rgba(236,232,224,0.4); }
.rail-counter {
  position: absolute; top: 100%; margin-top: 18px;
  left: 50%; transform: translateX(-50%);
  font-family: var(--mono); font-size: 10px;
  letter-spacing: 0.36em; color: var(--ink-dim);
  white-space: nowrap; text-transform: uppercase;
}
.rail-label {
  position: absolute; bottom: 100%; margin-bottom: 18px;
  left: 50%; transform: translateX(-50%);
  font-family: var(--mono); font-size: 10px;
  letter-spacing: 0.36em; color: var(--ink-faint);
  white-space: nowrap; text-transform: uppercase;
}

/* ============================================================
   WHY AI — comparison (sticky)
   ============================================================ */
.why {
  background: var(--bg);
  padding: 200px 50px;
  position: relative;
  border-top: 1px solid var(--line);
}
.why .wrap {
  max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: 5fr 7fr;
  gap: 100px; align-items: start;
}
.why h2 { margin-top: 28px; }
.why h2 em { color: var(--ink-dim); }
.why .lead-side p {
  margin-top: 36px; font-size: 18px; line-height: 1.6;
  max-width: 38ch;
}
.why .comp { border-top: 1px solid var(--line); }
.why .row {
  display: grid; grid-template-columns: 0.6fr 1fr 1fr;
  gap: 40px; padding: 36px 0;
  border-bottom: 1px solid var(--line);
  align-items: start;
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.9s ease, transform 0.9s cubic-bezier(.2,.7,.2,1);
}
.why .row.is-on { opacity: 1; transform: translateY(0); }
.why .row .k {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint); padding-top: 4px;
}
.why .row .head {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-dim); font-weight: 400;
}
.why .row .head.b { color: var(--ink); }
.why .row .v {
  color: var(--ink-dim); font-size: 17px;
  line-height: 1.55; font-weight: 300;
}
.why .row .v.b { color: var(--ink); }
.why .row .v.full { grid-column: span 2; max-width: 70ch; }

/* ============================================================
   STILL LIFE — mosaic
   ============================================================ */
.stilllife {
  background: var(--bg-2);
  padding: 180px 50px;
  position: relative;
  border-top: 1px solid var(--line);
}
.stilllife .top {
  max-width: 1800px; margin: 0 auto 80px;
  display: grid; grid-template-columns: 5fr 6fr;
  gap: 100px; align-items: end;
}
.stilllife .top h2 { margin-top: 28px; }
.stilllife .top p { line-height: 1.65; max-width: 50ch; }
.stilllife-grid {
  max-width: 1800px; margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  gap: 4px;
}
.stilllife-grid .it {
  overflow: hidden; background: #000;
}
.stilllife-grid .it img {
  width: 100%; height: 100%; object-fit: cover;
}

/* ============================================================
   PROCESS — vertical chapters with sticky number
   ============================================================ */
.process {
  background: var(--bg-paper); color: var(--paper-ink);
  padding: 200px 0 240px;
  position: relative;
  border-top: 1px solid rgba(26,22,16,0.1);
}
.process .head {
  padding: 0 50px 140px;
  max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: 5fr 7fr;
  gap: 100px; align-items: end;
}
.process .head h2 { color: var(--paper-ink); margin-top: 28px; }
.process .head h2 em { color: var(--paper-dim); }
.process .head p { color: var(--paper-dim); font-size: 18px; line-height: 1.65; max-width: 50ch; }
.process .head .eyebrow { color: var(--paper-dim); }
.process .head .eyebrow .hairline { background: rgba(26,22,16,0.3); }
.process-track {
  max-width: 1800px; margin: 0 auto;
  padding: 0 50px;
}
.process-step {
  display: grid; grid-template-columns: 0.7fr 4fr 5fr;
  gap: 80px;
  padding: 80px 0;
  border-top: 1px solid rgba(26,22,16,0.18);
  align-items: start;
}
.process-step:last-child { border-bottom: 1px solid rgba(26,22,16,0.18); }
.process-step .step-num {
  font-family: var(--display); font-style: italic;
  font-weight: 300;
  font-size: clamp(80px, 9vw, 160px);
  line-height: 0.9; color: var(--paper-ink);
}
.process-step .step-num em {
  font-style: normal; color: var(--paper-dim);
  font-size: 0.4em; vertical-align: super;
  font-family: var(--mono); letter-spacing: 0.2em;
}
.process-step h3 {
  font-family: var(--display);
  font-size: clamp(36px, 3.6vw, 56px);
  color: var(--paper-ink); margin-bottom: 0;
  line-height: 1; padding-top: 24px;
}
.process-step .body p {
  color: var(--paper-dim); font-size: 18px; line-height: 1.7;
  max-width: 52ch; padding-top: 24px;
}
.process-step .body .out {
  margin-top: 30px; padding-top: 22px;
  border-top: 1px solid rgba(26,22,16,0.2);
  display: grid; grid-template-columns: auto 1fr;
  gap: 30px;
}
.process-step .body .out .l {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--paper-dim);
}
.process-step .body .out .v {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--paper-ink);
}
.process-step .body .out .dur {
  margin-top: 10px;
  font-family: var(--display); font-style: italic;
  font-size: 22px; color: var(--paper-ink);
}

.numbers {
  background: var(--bg-paper); color: var(--paper-ink);
  padding: 80px 50px 200px;
  border-top: 1px solid rgba(26,22,16,0.18);
}
.numbers .grid {
  max-width: 1800px; margin: 0 auto;
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 60px;
}
.numbers .num {
  display: flex; flex-direction: column; gap: 10px;
}
.numbers .num .n {
  font-family: var(--display); font-style: italic;
  font-weight: 300;
  font-size: clamp(60px, 6vw, 110px);
  line-height: 0.9; color: var(--paper-ink);
}
.numbers .num .l {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--paper-dim);
  margin-top: 10px;
}
.numbers .num p {
  color: var(--paper-dim); font-size: 15px;
  line-height: 1.5; margin-top: 6px;
}

/* ============================================================
   CTA / CONTACT
   ============================================================ */
.cta {
  background: var(--bg);
  padding: 220px 50px;
  position: relative; overflow: hidden;
  border-top: 1px solid var(--line);
}
.cta-bg { position: absolute; inset: 0; opacity: 0.55; }
.cta-bg img {
  width: 100%; height: 100%; object-fit: cover;
  filter: blur(2px) saturate(0.9);
  object-position: 50% var(--cta-y, 45%);
  transform: scale(1.04);
}
.cta-bg::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(8,9,11,0.55) 0%, rgba(8,9,11,0.35) 50%, rgba(8,9,11,0.85) 100%);
}
.cta-inner {
  max-width: 1300px; margin: 0 auto; position: relative; z-index: 2;
}
.cta h2 {
  font-size: clamp(64px, 9vw, 160px);
  line-height: 0.96;
}
.cta .lead {
  margin-top: 40px; max-width: 640px;
}
.cta .contacts {
  margin-top: 110px; padding-top: 50px;
  border-top: 1px solid var(--line);
  display: grid; grid-template-columns: repeat(2, 1fr);
  gap: 60px;
}
.cta .contacts .ct .k {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-faint); margin-bottom: 16px;
}
.cta .contacts .ct .v {
  font-family: var(--display); font-style: italic;
  font-size: clamp(28px, 2.6vw, 40px);
  color: var(--ink);
}
.cta .contacts .ct a {
  border-bottom: 1px solid var(--line);
  padding-bottom: 6px;
  transition: border-color .3s ease;
}
.cta .contacts .ct a:hover { border-color: var(--ink); }

.footer-main {
  background: var(--bg);
  padding: 40px 50px;
  display: flex; justify-content: space-between; align-items: center;
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.32em; text-transform: uppercase;
  color: var(--ink-faint);
  border-top: 1px solid var(--line);
}

/* ============================================================
   JUSTIFIED GALLERIES (Flickr-style)
   ============================================================ */
.sacred-gallery.justified,
.series-grid.justified,
.stilllife-grid.justified {
  display: block !important;
  grid-template-columns: none !important;
  font-size: 0; /* kill whitespace gaps between inline-block items */
  padding: 0 4px;
}
.sacred-gallery.justified .jit,
.series-grid.justified .jit,
.stilllife-grid.justified .jit {
  display: inline-block;
  vertical-align: top;
  overflow: hidden;
  background: #000;
  font-size: initial;
  /* JS sets width/height/margins inline */
}
.sacred-gallery.justified .jit img,
.series-grid.justified .jit img,
.stilllife-grid.justified .jit img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ============================================================
   REVEAL ANIMATIONS
   ============================================================ */
.reveal-line { display: block; overflow: hidden; line-height: inherit; padding-bottom: 0.18em; margin-bottom: -0.18em; }
.reveal-line-inner { display: inline-block; will-change: transform, opacity; }
.eye-text { display: inline-block; }
.eye-text .char { display: inline-block; will-change: transform, opacity; }
.reveal-hairline { transform-origin: left center; will-change: transform; }
.reveal-small { will-change: transform, opacity; }
.reveal-up { will-change: transform, opacity; }
.reveal-num { will-change: transform, opacity, filter; }
.reveal-tile { will-change: transform, opacity; }

/* ============================================================
   TWEAKS PANEL
   ============================================================ */
.tweaks-panel {
  position: fixed; bottom: 30px; right: 30px; z-index: 200;
  background: rgba(13,14,16,0.96);
  border: 1px solid var(--line-strong);
  padding: 22px;
  font-family: var(--sans);
  color: var(--ink);
  min-width: 280px;
  backdrop-filter: blur(10px);
  display: none;
}
.tweaks-panel.open { display: block; }
.tweaks-panel h4 {
  font-family: var(--mono); font-size: 11px;
  letter-spacing: 0.36em; text-transform: uppercase;
  color: var(--ink-dim); margin-bottom: 18px;
  font-weight: 400;
}
.tweaks-panel #tweaks-close {
  position: absolute; top: 14px; right: 14px;
  background: none; border: none;
  color: var(--ink-dim); font-size: 22px;
  cursor: pointer; line-height: 1; padding: 0;
}
.tweaks-panel #tweaks-close:hover { color: var(--ink); }
.tweak-row {
  display: flex; justify-content: space-between; align-items: center;
  gap: 18px; margin-bottom: 14px;
}
.tweak-row label {
  font-family: var(--mono); font-size: 10px;
  letter-spacing: 0.28em; text-transform: uppercase;
  color: var(--ink-dim);
}
.tweak-row .opts { display: flex; gap: 4px; }
.tweak-row .opts button {
  background: none; border: 1px solid var(--line);
  color: var(--ink-dim); font: inherit;
  font-family: var(--mono);
  padding: 6px 11px; cursor: pointer;
  font-size: 10px; letter-spacing: 0.18em;
  text-transform: uppercase;
}
.tweak-row .opts button.active { border-color: var(--ink); color: var(--ink); }
.tweak-divider {
  height: 1px; background: var(--line); margin: 18px 0;
  opacity: 0.5;
}
.tweak-row.range-row {
  flex-direction: column; align-items: stretch; gap: 8px;
}
.tweak-row.range-row label {
  display: flex; justify-content: space-between; align-items: baseline;
  gap: 12px;
}
.tweak-row.range-row label .range-val {
  color: var(--ink); letter-spacing: 0.18em;
  font-size: 10px;
}
.tweak-row input[type="range"] {
  -webkit-appearance: none; appearance: none;
  width: 100%; height: 2px;
  background: var(--line);
  outline: none; cursor: pointer;
}
.tweak-row input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none;
  width: 14px; height: 14px; border-radius: 50%;
  background: var(--ink); cursor: pointer;
  border: 2px solid var(--bg);
}
.tweak-row input[type="range"]::-moz-range-thumb {
  width: 14px; height: 14px; border-radius: 50%;
  background: var(--ink); cursor: pointer;
  border: 2px solid var(--bg);
}

/* ============================================================
   THEMES (via Tweaks)
   ============================================================ */
body.theme-warm {
  --bg: #14110b;
  --bg-2: #1c1810;
  --ink: #f0e8dc;
  --ink-dim: #a89988;
  --ink-faint: #5a4f3f;
  --line: rgba(240,232,220,0.12);
  --line-strong: rgba(240,232,220,0.32);
}
body.density-airy .pillars-head,
body.density-airy .series-head,
body.density-airy .stilllife .top { gap: 130px; }
body.density-airy section.cta { padding: 280px 50px; }

/* ============================================================
   MOBILE
   ============================================================ */
@media (max-width: 1100px) {
  .hero-bottom { grid-template-columns: 1fr; }
  .hero-bottom .meta { text-align: left; }
  .pillars-head, .sacred .head .row, .consistency-intro,
  .series-head, .why .wrap, .rest-intro, .stilllife .top,
  .process .head { grid-template-columns: 1fr; gap: 40px; }
  .pillars-track { grid-auto-columns: 80vw; }
  .sacred-gallery, .series-grid, .stilllife-grid {
    grid-template-columns: repeat(6, 1fr);
  }
  .sacred-gallery > *, .series-grid > *, .stilllife-grid > * {
    grid-column: span 3 !important; aspect-ratio: 4/5;
  }
  .veil .j { grid-column: span 6 !important; aspect-ratio: 16/9; }
  .consistency-stage { height: auto; }
  .consistency-stage .sticky {
    position: relative; height: auto;
    grid-template-columns: 1fr;
    padding: 60px 0;
  }
  .consistency-stage .img-wrap { height: 60vh; margin: 0 22px; }
  .consistency-stage .panel { position: relative; transform: none; opacity: 1; padding: 30px 22px 0; left: 0; right: 0; top: 0; }
  .consistency-stage .panel.is-on { opacity: 1; }
  .consistency-stage .counter { display: none; }
  .h-chapter .h-pin { height: auto; }
  .h-chapter .h-track { flex-direction: column; height: auto; transform: none !important; }
  .h-chapter .h-panel { width: 100% !important; height: auto; padding: 80px 22px; }
  .h-panel.media .frame { height: 60vh; }
  .h-panel.media-pair { flex-direction: column; gap: 22px; height: auto; }
  .h-panel.media-pair .frame { height: 50vh; }
  .h-chapter .h-progress { display: none; }
  .process-step { grid-template-columns: 1fr; gap: 24px; padding: 60px 0; }
  .numbers .grid { grid-template-columns: 1fr 1fr; gap: 40px; }
  .why .row { grid-template-columns: 1fr; gap: 12px; }
  .why .row .v.full { grid-column: auto; }
  .rest-mega { height: 950vh; }
  .ref { width: 36vw; }
  .final-hero { width: 84vw; height: 50vh; }
  .chapter-rail { display: none; }
}
@media (max-width: 768px) {
  .nav, .nav.is-condensed { padding: 16px 22px; }
  .logo-name { font-size: 10px; letter-spacing: 0.22em; }
  .logo-tag { display: none; }
  .hero-content { padding: 90px 22px 40px; }
  .pillars-head, .sacred .head, .consistency-intro,
  .series-head, .why, .rest-intro, .stilllife,
  .process .head, .process-track, .cta, .footer-main {
    padding-left: 22px; padding-right: 22px;
  }
  .pillars-track { padding: 0 22px 60px 0; grid-auto-columns: 90vw; }
  .pillars-track-wrap { padding-left: 22px; }
  .pillars { padding: 100px 0 40px; }
  .sacred .head { padding: 120px 22px 60px; }
  .sacred .footer-row { padding: 50px 22px 100px; grid-template-columns: 1fr; gap: 14px; }
  .series { padding: 100px 0; }
  .series-head { margin-bottom: 50px; }
  .consistency { padding: 100px 0 0; }
  .consistency-intro { padding: 0 22px 60px; }
  .why { padding: 100px 22px; }
  .stilllife { padding: 100px 22px; }
  .process { padding: 100px 0; }
  .process .head { padding: 0 22px 80px; }
  .process-track { padding: 0 22px; }
  .numbers { padding: 60px 22px 120px; }
  .numbers .grid { grid-template-columns: 1fr; gap: 36px; }
  .cta { padding: 120px 22px; }
  .cta .contacts { grid-template-columns: 1fr; gap: 30px; margin-top: 60px; padding-top: 36px; }
  .footer-main { flex-direction: column; align-items: flex-start; gap: 8px; padding: 30px 22px; }

  /* MOD-010 — cinematic-scrollshow: collasso pin su mobile.
     Section torna 100vh, sticky disattivato, JS attiva auto-cycle. */
  .cinematic.cinematic-scrollshow {
    height: 100vh !important;
    overflow: hidden;
  }
  .cinematic.cinematic-scrollshow > .cinematic-sticky {
    position: static !important;
    height: 100%; min-height: 0;
  }
  .slideshow-progress { display: none; }

  /* MOD-002 — manifesto: collasso pin, render statico */
  .manifesto-pinned {
    height: auto !important;
    padding: 100px 22px;
  }
  .manifesto-pinned .sticky {
    position: static !important;
    height: auto !important;
    padding: 0;
    /* Override del display:flex desktop che incollava la signature
       a destra del testo. Su mobile vogliamo flusso block naturale. */
    display: block !important;
  }
  .manifesto-pinned .stage {
    width: 100%;
  }
  .manifesto-pinned .stage {
    font-size: clamp(28px, 7vw, 44px);
    line-height: 1.18;
    max-width: none;
  }
  .manifesto-pinned .stage .word {
    opacity: 1 !important;
    transition: none !important;
  }
  .manifesto-pinned .signature {
    position: static;
    margin-top: 40px;
  }
  .manifesto-pinned .progress { display: none; }

  /* MOD-002 — consistency: spinnata in 10 frame verticali narrativi.
     Il JS continua a calcolare ma neutralizziamo i suoi effetti inline
     con !important sui transform/opacity per evitare artefatti. */
  .consistency-stage {
    height: auto !important;
    counter-reset: consistency-frame;
  }
  .consistency-stage .sticky {
    position: static !important;
    height: auto !important;
    grid-template-columns: 1fr !important;
    padding: 0;
    overflow: visible;
    background: transparent;
  }
  .consistency-stage .img-wrap {
    position: relative !important;
    height: auto !important;
    margin: 0 22px;
    aspect-ratio: 4/5;
    background: #0a0b0d;
  }
  .consistency-stage .img-wrap .slide {
    opacity: 1 !important;
    position: relative !important;
    inset: auto !important;
    transition: none !important;
  }
  .consistency-stage .img-wrap .slide:not(:first-child) {
    display: none;
  }
  .consistency-stage .text-wrap {
    padding: 0;
    position: static;
  }
  .consistency-stage .label,
  .consistency-stage .counter { display: none; }
  .consistency-stage .panel {
    position: relative !important;
    top: auto !important; left: auto !important; right: auto !important;
    transform: none !important;
    opacity: 1 !important;
    padding: 28px 22px 0;
    margin: 0 0 50px;
    transition: none !important;
  }
  .consistency-stage .panel h3 {
    font-family: var(--display);
    font-size: clamp(34px, 8vw, 50px);
    margin-top: 0 !important;
    margin-bottom: 16px;
    color: var(--ink);
  }
  .consistency-stage .panel p {
    font-size: 16px;
    line-height: 1.6;
    max-width: none;
  }
  /* Inietta numerazione mono "01—" davanti a ogni h3 panel.
     Color --ink-dim (non --ink-faint) perché su sfondo bg-2 il faint
     è quasi indistinguibile dallo sfondo (contrasto < 1.5). */
  .consistency-stage .panel::before {
    counter-increment: consistency-frame;
    content: counter(consistency-frame, decimal-leading-zero) " — Frame";
    display: block;
    font-family: var(--mono);
    font-size: 10px;
    letter-spacing: 0.36em;
    text-transform: uppercase;
    color: var(--ink-dim);
    margin-bottom: 18px;
  }
  /* Inietta l'immagine del frame n nel ::after del panel n.
     Il primo .slide nel DOM resta visibile come "anchor", gli altri
     vengono rivelati frame-per-frame come background del ::after.
     `--frame-img` è impostato inline da JS (setupMobileFrames). */
  .consistency-stage .panel::after {
    content: '';
    display: block;
    margin: 24px 0 0;
    aspect-ratio: 4/5;
    background-color: #0a0b0d;
    background-image: var(--frame-img, none);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
  }
  /* Il primo panel non duplica l'immagine (c'è già la .img-wrap sopra) */
  .consistency-stage .panel:first-of-type::after { display: none; }
  /* Hairline divider tra frame */
  .consistency-stage .panel:not(:last-of-type) {
    padding-bottom: 50px;
    border-bottom: 1px solid var(--line);
  }

  /* MOD-002 — series-grid Veil: 1-col cinematografico ritmico.
     Il JS imposta width/height/margin inline (justified Flickr-style)
     ma li sovrascriviamo con !important per layout single-column. */
  .series-grid.justified,
  .sacred-gallery.justified,
  .stilllife-grid.justified {
    display: block !important;
    padding: 0 4px !important;
  }
  .series-grid.justified .jit,
  .sacred-gallery.justified .jit,
  .stilllife-grid.justified .jit {
    display: block !important;
    width: 100% !important;
    height: auto !important;
    margin: 0 0 6px 0 !important;
    aspect-ratio: 4/5;
  }
  /* Ritmo cinematografico: ogni 3ª e ogni 5ª immagine cambiano aspect */
  .series-grid.justified .jit:nth-child(3n),
  .sacred-gallery.justified .jit:nth-child(3n),
  .stilllife-grid.justified .jit:nth-child(3n) {
    aspect-ratio: 3/4;
  }
  .series-grid.justified .jit:nth-child(5n),
  .sacred-gallery.justified .jit:nth-child(5n),
  .stilllife-grid.justified .jit:nth-child(5n) {
    aspect-ratio: 1/1;
  }
  .series-grid.justified .jit:nth-child(7n),
  .sacred-gallery.justified .jit:nth-child(7n),
  .stilllife-grid.justified .jit:nth-child(7n) {
    aspect-ratio: 21/9;
  }

  /* MOD-002 — restoration: già linearizzata, refine */
  .restoration { padding: 100px 0 0; }
  .rest-mega { height: auto; }
  .rest-stage {
    position: static; height: auto; overflow: visible;
    background: transparent;
  }
  .rest-rail, .rest-stage-meta, .rest-refs-layer, .final-carousel { display: none; }
  .shooting {
    position: relative; inset: auto;
    padding: 0 22px; margin-bottom: 60px;
    opacity: 1 !important;
    pointer-events: auto !important;
  }
  .shooting-title {
    position: static !important;
    opacity: 1 !important;
    transform: none !important;
    padding: 0 0 24px;
    text-align: left;
    align-items: flex-start;
  }
  .shooting-title h3 { font-size: clamp(36px, 9vw, 56px); }
  .rest-final-layer {
    position: relative; inset: auto;
    opacity: 1 !important; pointer-events: auto;
  }
  .final-hero {
    position: relative; top: auto; left: auto;
    width: 100%; max-width: none;
    height: auto; aspect-ratio: 4/5;
    transform: none !important; filter: none !important;
    opacity: 1 !important;
    box-shadow: 0 30px 60px rgba(0,0,0,0.5);
  }
  .rest-stage-caption {
    position: relative; inset: auto;
    margin-top: 20px;
    opacity: 1 !important;
    transform: none !important;
    max-width: 100%;
  }

  /* MOD-002 — tweaks panel: nascosto su mobile (è debug UI) */
  .tweaks-panel, .tweaks-panel.open { display: none !important; }

  /* MOD-002 — tap target ≥44px su elementi interattivi */
  .nav .lang a,
  .cta .contacts .ct a,
  .footer-main a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

/* ============================================================
   MOD-002 — SMALL MOBILE (≤480px)
   Type scale ridotto per leggibilità su smartphone piccoli.
   ============================================================ */
@media (max-width: 480px) {
  h1 { font-size: clamp(40px, 12vw, 64px); }
  h2 { font-size: clamp(36px, 10vw, 56px); }
  h3 { font-size: clamp(26px, 7.5vw, 38px); }
  p { font-size: 16px; }
  p.lead { font-size: clamp(20px, 5.6vw, 26px); }
  p.body-large { font-size: clamp(18px, 5vw, 22px); }

  .hero-content { padding: 80px 18px 30px; }
  .pillars-head, .sacred .head, .consistency-intro,
  .series-head, .why, .rest-intro, .stilllife,
  .process .head, .process-track, .cta, .footer-main {
    padding-left: 18px; padding-right: 18px;
  }
  .consistency-stage .img-wrap { margin: 0 18px; }
  .consistency-stage .panel { padding: 24px 18px 0; }

  /* CTA hero: un titolo cinematografico richiede meno gigantismo a 375px */
  .cta h2 { font-size: clamp(48px, 13vw, 72px); }
  .manifesto-pinned .stage { font-size: clamp(26px, 7.4vw, 36px); }
  .shooting-title h3 { font-size: clamp(32px, 9vw, 44px); }

  /* Section numbers ghost: ridurre per non invadere */
  .section-num { font-size: clamp(140px, 38vw, 220px); right: 18px; }
}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  .scroll-mark::after { animation: none; }
}
