/* ============================================================
   Reset, document defaults, layout primitives, reveal utilities.
   ============================================================ */
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:90px}
body{
  background:var(--color-bg);
  color:var(--color-ink);
  font-family:var(--font-body);
  font-size:var(--text-base);
  line-height:var(--leading-base);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body.is-locked{overflow:hidden}
img{display:block;max-width:100%;user-select:none;-webkit-user-drag:none}
a{color:inherit;text-decoration:none}
button{font:inherit;background:none;border:0;color:inherit;cursor:pointer}
ul{list-style:none}
::selection{background:var(--color-accent);color:var(--color-accent-contrast)}
.sec--ink ::selection,
.pre ::selection,
.menu ::selection,
.lb ::selection{background:var(--color-bg);color:var(--color-ink)}
[data-icon]{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  flex:none;
  vertical-align:middle;
  line-height:0;
}
[data-icon] svg{display:block;width:1em;height:1em}

/* Layout primitives */
.wrap{width:var(--container);margin-inline:auto}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.sec{padding:var(--section-space) 0}
.sec--ink{background:var(--color-ink);color:var(--color-bg)}
body.is-cursor-enabled,
body.is-cursor-enabled *{cursor:none!important}

/* Grain overlay */
.grain{
  position:fixed;
  inset:-100%;
  z-index:var(--z-grain);
  pointer-events:none;
  opacity:.02;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 8s steps(10) infinite;
}
@keyframes grain{
  0%,100%{transform:translate(0,0)}
  20%{transform:translate(-4%,6%)}
  40%{transform:translate(4%,-3%)}
  60%{transform:translate(-6%,-6%)}
  80%{transform:translate(5%,4%)}
}

/* Section heading */
.sec__label{
  font-family:var(--font-mono);
  font-size:12px;
  letter-spacing:.2em;
  text-transform:uppercase;
  display:inline-flex;
  align-items:center;
  gap:10px;
  color:var(--color-muted);
}
.sec__label svg{width:12px;height:12px;color:var(--color-accent);flex:none}
.sec__label svg path{stroke:currentColor;stroke-width:2.6;stroke-linecap:round}
.sec__title{
  font-family:var(--font-display);
  font-weight:800;
  font-size:clamp(2.3rem,5.6vw,4.6rem);
  line-height:1.02;
  letter-spacing:-.02em;
  text-transform:uppercase;
  margin-top:16px;
  max-width:14ch;
}
.sec__head{margin-bottom:clamp(40px,6vw,72px)}

/* Split-word reveal */
[data-split] .split-word{
  display:inline-block;
  overflow:hidden;
  vertical-align:top;
  padding-bottom:.1em;
  margin-bottom:-.1em;
}
[data-split] .split-word__inner{
  display:inline-block;
  transform:translateY(115%);
  transition:transform .9s var(--ease-brand);
}
[data-split].is-visible .split-word__inner{transform:none}

/* Generic reveal */
[data-reveal]{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .8s ease,transform .9s var(--ease-brand);
  transition-delay:var(--d,0ms);
}
[data-reveal].is-visible{opacity:1;transform:none}
