:root {
  --color-highlight: #003da5;
  --color-light: #edf2f7;
  --color-dark: #020c13;

  --font-heading: "Literata", serif;
  --font-body: "Clash Grotesk Variable", sans-serif;

  --padding-body: 2rem 2rem 0 2rem;
  --pixel-grid-columns: 12;
  --pixel-grid-rows: 12;
}

@font-face {
  font-family: "Clash Grotesk Variable";
  src:
    url("/assets/fonts/ClashGrotesk-Variable.woff2") format("woff2"),
    url("/assets/fonts/ClashGrotesk-Variable.woff") format("woff");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}

* {
  box-sizing: border-box;
}

html {
  height: 100%;
  font-size: 18px;
}

body {
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  background: var(--color-light);
  color: var(--color-dark);
  font-family: var(--font-body);
  line-height: 1.6;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin-top: 0;
  color: var(--color-dark);
  font-family: var(--font-heading);
  line-height: 1.2;
  font-weight: 500;
  letter-spacing: -3%;
  font-optical-sizing: none;
}

p,
a {
  font-weight: 450;
  margin: 0;
  letter-spacing: -0.5%;
}

a {
  color: var(--color-highlight);
  text-decoration: none;
}

img {
  display: block;
  max-width: 100%;
  height: auto;
}

#transition-overlay {
  position: fixed;
  inset: 0;
  display: grid;
  grid-template-columns: repeat(var(--pixel-grid-columns), 1fr);
  grid-template-rows: repeat(var(--pixel-grid-rows), 1fr);
  opacity: 1;
  pointer-events: none;
  z-index: 9999;
}

body.transition-ready #transition-overlay {
  opacity: 0;
  /* transition: opacity 240ms ease; */
}

body.is-filling #transition-overlay,
body.is-returning #transition-overlay {
  opacity: 1;
}

body.is-entering #transition-overlay {
  animation: overlay-fade-out 520ms ease-out forwards;
}

.transition-pixel {
  background: var(--color-highlight);
  opacity: 0;
}

.transition-pixel.is-on {
  opacity: 1;
}

body.is-entering article {
  animation: article-slide-in 520ms cubic-bezier(0.2, 0.85, 0.2, 1) both;
}

body.is-entering main > :not(article) {
  animation: fade-in 240ms ease 560ms both;
}

body.is-exiting-ui main > :not(article) {
  animation: fade-out 180ms ease both;
}

body.is-exiting article {
  animation: article-slide-out 320ms cubic-bezier(0.4, 0, 0.2, 1) both;
}

@keyframes article-slide-in {
  from {
    transform: translateY(3rem);
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes article-slide-out {
  from {
    transform: translateY(0);
    opacity: 1;
  }

  to {
    transform: translateY(3rem);
    opacity: 0;
  }
}

@keyframes fade-in {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes fade-out {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@keyframes overlay-fade-out {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@media (max-width: 820px) {
  :root {
    --padding-body: 1.5rem;
  }

  html {
    font-size: 14px;
  }
}
