:root {
  /* Design vocabulary: IntersectionObserver` with `threshold: 0.2` triggers all scroll-based reveals. The overall sensation should be one of gradual unveiling — concrete forms emerging from shadow — not dynamic motion. Source Serif 4 (transitional serif Source Serif 4 discusses the concept — long-form Source Serif 4" (Google Fonts */
  --warm-concrete: #f2ece6;
  --charcoal-earth: #2c2420;
  --raw-terracotta: #c4613a;
  --oxidized-iron: #8a4a2f;
  --shadow-umber: #1a1210;
  --dust-rose: #b89a8a;
  --ember-glow: #d4873a;
  --soft-aggregate: #d4c9be;
  --body-ink: #3d3530;
  --display: "Libre Franklin", "Inter", sans-serif;
  --body: "Source Serif 4", Georgia, serif;
  --mono: "DM Mono", "Space Mono", monospace;
  --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  scroll-behavior: smooth;
}

body {
  background: var(--warm-concrete);
  color: var(--body-ink);
  font-family: var(--body);
  overflow-x: hidden;
}

.nav-toggle {
  align-items: center;
  background-color: var(--charcoal-earth);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='64' height='64' viewBox='0 0 64 64'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='0.9' numOctaves='4'/%3E%3C/filter%3E%3Crect width='64' height='64' fill='%232c2420'/%3E%3Crect width='64' height='64' filter='url(%23n)' opacity='0.08'/%3E%3C/svg%3E");
  display: flex;
  height: 64px;
  justify-content: center;
  position: fixed;
  right: 2rem;
  top: 2rem;
  width: 64px;
  z-index: 20;
}

.nav-button {
  background: transparent;
  border: 0;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 10px 0;
}

.nav-line {
  background: var(--warm-concrete);
  display: block;
  height: 3px;
  transition: background-color 300ms var(--ease), transform 300ms var(--ease), opacity 300ms var(--ease);
  width: 40px;
}

.nav-toggle:hover .nav-line,
.nav-button.is-open .nav-line {
  background: var(--ember-glow);
}

.nav-button.is-open .nav-line:nth-child(1) {
  transform: translateY(9px) rotate(45deg);
}

.nav-button.is-open .nav-line:nth-child(2) {
  opacity: 0;
}

.nav-button.is-open .nav-line:nth-child(3) {
  transform: translateY(-9px) rotate(-45deg);
}

.nav-overlay {
  align-items: center;
  background: rgba(44, 36, 32, 0.97);
  display: flex;
  inset: 0;
  opacity: 0;
  padding-left: 15%;
  pointer-events: none;
  position: fixed;
  transition: opacity 600ms var(--ease);
  z-index: 15;
}

.nav-overlay.is-open {
  opacity: 1;
  pointer-events: auto;
}

.nav-panel {
  display: flex;
  flex-direction: column;
  gap: 2rem;
}

.nav-link {
  color: var(--warm-concrete);
  font-family: var(--display);
  font-size: clamp(2.3rem, 5vw, 4rem);
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.05;
  text-decoration: none;
  text-transform: uppercase;
  transition: color 300ms var(--ease), opacity 600ms var(--ease), transform 600ms var(--ease);
}

.nav-link:hover {
  color: var(--raw-terracotta);
}

.site-shell {
  min-height: 100vh;
  width: 100%;
}

.slab {
  overflow: hidden;
  position: relative;
  width: 100%;
}

.dark-noise {
  background-color: var(--charcoal-earth);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='0.9' numOctaves='4'/%3E%3C/filter%3E%3Crect width='140' height='140' fill='%231a1210'/%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E");
  color: var(--soft-aggregate);
}

.light-noise {
  background-color: var(--warm-concrete);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='0.9' numOctaves='4'/%3E%3C/filter%3E%3Crect width='140' height='140' fill='%23f2ece6'/%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E");
  color: var(--body-ink);
}

.slab-foundation {
  align-items: center;
  background-color: var(--shadow-umber);
  display: flex;
  height: 100vh;
  justify-content: center;
}

.foundation-copy {
  padding: 0 8vw;
  position: relative;
  text-align: center;
  z-index: 2;
}

.section-mark {
  color: var(--raw-terracotta);
  font-family: var(--mono);
  font-size: 0.75rem;
  letter-spacing: 0.12em;
  margin-bottom: 1.5rem;
  text-transform: uppercase;
}

.domain-name {
  color: var(--warm-concrete);
  font-family: var(--display);
  font-size: clamp(2.8rem, 6.5vw, 5.5rem);
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.05;
  text-transform: uppercase;
}

.domain-name span {
  animation: characterReveal 300ms var(--ease) forwards;
  display: inline-block;
  opacity: 0;
}

.domain-name span:nth-child(1) { animation-delay: 0ms; }
.domain-name span:nth-child(2) { animation-delay: 60ms; }
.domain-name span:nth-child(3) { animation-delay: 120ms; }
.domain-name span:nth-child(4) { animation-delay: 180ms; }
.domain-name span:nth-child(5) { animation-delay: 240ms; }
.domain-name span:nth-child(6) { animation-delay: 300ms; }
.domain-name span:nth-child(7) { animation-delay: 360ms; }
.domain-name span:nth-child(8) { animation-delay: 420ms; }
.domain-name span:nth-child(9) { animation-delay: 480ms; }
.domain-name span:nth-child(10) { animation-delay: 540ms; }
.domain-name span:nth-child(11) { animation-delay: 600ms; }
.domain-name span:nth-child(12) { animation-delay: 660ms; }
.domain-name span:nth-child(13) { animation-delay: 720ms; }
.domain-name span:nth-child(14) { animation-delay: 780ms; }

.hero-statement {
  animation: fadeOnly 900ms var(--ease) 1500ms forwards;
  color: var(--soft-aggregate);
  font-size: clamp(1.05rem, 1.6vw, 1.2rem);
  line-height: 1.72;
  margin: 1.5rem auto 0;
  max-width: 38em;
  opacity: 0;
}

@keyframes characterReveal {
  to { opacity: 1; }
}

@keyframes fadeOnly {
  to { opacity: 1; }
}

.stamp {
  align-items: center;
  border: 2px solid var(--raw-terracotta);
  border-radius: 50%;
  color: var(--raw-terracotta);
  display: flex;
  font-family: var(--mono);
  font-size: 1.5rem;
  height: 120px;
  justify-content: center;
  position: absolute;
  transform: rotate(-15deg);
  width: 120px;
}

.stamp-one {
  bottom: 14vh;
  left: 10vw;
  opacity: 0.2;
}

.stamp-two {
  margin: 3.5rem auto 0;
  opacity: 1;
  position: relative;
}

.cantilever {
  background: var(--charcoal-earth);
  box-shadow: 30px 30px 50px rgba(26, 18, 16, 0.4);
  position: absolute;
  z-index: 1;
}

.cantilever-east {
  height: 100px;
  right: -118px;
  top: 70vh;
  transform: skewY(-2deg);
  width: 360px;
}

.cantilever-west {
  height: 86px;
  left: -94px;
  top: 18vh;
  transform: skewY(2deg);
  width: 285px;
}

.fissure {
  background: var(--raw-terracotta);
  height: 24px;
  transition: height 600ms var(--ease);
  width: 70%;
}

.fissure-east {
  margin-left: auto;
}

.fissure-west {
  margin-right: auto;
}

.fissure.is-centered {
  height: 32px;
}

.slab-structure {
  min-height: 120vh;
  padding: 16vh 0 14vh;
}

.text-slab {
  margin-left: 15%;
  max-width: 540px;
  padding: 0 2rem;
  position: relative;
  z-index: 2;
}

.text-slab h2 {
  color: var(--charcoal-earth);
  font-family: var(--display);
  font-size: clamp(2rem, 4vw, 3rem);
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.05;
  margin-bottom: 2rem;
  text-transform: uppercase;
}

.text-slab p:not(.section-mark) {
  color: var(--body-ink);
  font-size: clamp(1.05rem, 1.6vw, 1.2rem);
  line-height: 1.72;
  margin-bottom: 1.5em;
}

.rebar-grid {
  background-image: linear-gradient(90deg, rgba(138, 74, 47, 0.3) 1px, transparent 1px), linear-gradient(0deg, rgba(138, 74, 47, 0.24) 1px, transparent 1px), linear-gradient(90deg, transparent 0 47px, rgba(138, 74, 47, 0.18) 47px 48px, transparent 48px 121px), linear-gradient(0deg, transparent 0 83px, rgba(138, 74, 47, 0.16) 83px 84px, transparent 84px 137px);
  background-size: 92px 100%, 100% 74px, 173px 100%, 100% 211px;
  inset: 0;
  opacity: 0.65;
  position: absolute;
  z-index: 0;
}

.shard {
  background: var(--raw-terracotta);
  opacity: 0.68;
  position: absolute;
  z-index: 1;
}

.shard-one {
  clip-path: polygon(0 0, 100% 30%, 60% 100%);
  height: 190px;
  right: 7vw;
  top: 19vh;
  transform: rotate(12deg);
  width: 190px;
}

.shard-two {
  clip-path: polygon(100% 0, 28% 100%, 100% 82%);
  height: 128px;
  right: 14vw;
  top: 62vh;
  transform: rotate(-18deg);
  width: 128px;
}

.shard-three {
  clip-path: polygon(12% 20%, 100% 0, 64% 100%, 0 72%);
  height: 86px;
  right: 4vw;
  bottom: 16vh;
  transform: rotate(25deg);
  width: 156px;
}

.slab-armament {
  align-items: center;
  display: flex;
  min-height: 120vh;
  padding: 10vh 0;
}

.statement-stack {
  margin: 0 auto;
  padding: 0 7.5%;
  position: relative;
  width: 85vw;
  z-index: 2;
}

.statement {
  color: var(--warm-concrete);
  font-family: var(--display);
  font-size: clamp(1.8rem, 5vw, 3rem);
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.05;
  text-transform: uppercase;
}

.rule {
  background: rgba(138, 74, 47, 0.5);
  height: 1px;
  margin: 4rem 0;
  width: 100%;
}

.slab-emergence {
  min-height: 90vh;
  padding-top: 40vh;
}

.emergence-inner {
  margin: 0 auto;
  max-width: 58rem;
  padding: 0 2rem;
  position: relative;
  text-align: center;
  z-index: 2;
}

.emergence-inner h2 {
  color: var(--charcoal-earth);
  font-family: var(--display);
  font-size: clamp(3rem, 7vw, 6rem);
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1.05;
  text-transform: uppercase;
}

.shard-four {
  clip-path: polygon(0 18%, 78% 0, 100% 100%, 24% 73%);
  height: 174px;
  left: 8vw;
  top: 18vh;
  transform: rotate(-11deg);
  width: 132px;
}

.final-space {
  background: var(--warm-concrete);
  height: 15vh;
}

.reveal-block {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 800ms var(--ease), transform 800ms var(--ease);
}

.reveal-block.is-visible {
  opacity: 1;
  transform: translateY(0);
}

@media (max-width: 768px) {
  .nav-toggle {
    right: 1rem;
    top: 1rem;
  }

  .nav-overlay {
    padding-left: 7vw;
  }

  .text-slab {
    margin: 0 auto;
  }

  .cantilever {
    display: none;
  }

  .shard {
    transform: scale(0.6) rotate(10deg);
  }

  .statement-stack {
    padding: 0 2rem;
    width: 100%;
  }

  .slab-emergence {
    padding-top: 32vh;
  }
}
