@font-face {
  font-family: "Lausanne";
  src: url("/assets/TWKLausanne-400.woff2") format("woff2");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

@font-face {
  font-family: "Miletus";
  src: url("/assets/MiletusGrotesk-Medium.woff2") format("woff2");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
}

:root {
  color: #000;
  background: #fff;
  font-family: "Lausanne", Arial, sans-serif;
  font-synthesis: none;
  --margin: 40px;
  --gutter: 32px;
  --reveal-ease: cubic-bezier(.22, 1, .36, 1);
  --logo-ease: cubic-bezier(.16, 1, .3, 1);
}

* { box-sizing: border-box; }
body { margin: 0; }
button { font: inherit; }
img { display: block; }
figure, p, h1 { margin: 0; }

.page {
  padding: var(--margin);
  min-height: 100svh;
}

.masthead { position: relative; height: 112px; }
.monogram { width: auto; height: 64px; }
.monogram-detail {
  position: absolute;
  left: calc((100vw - 1440px) / 12 + 199.26px);
  top: 5.455px;
  width: 14.49px;
  height: 30.38px;
  transform: rotate(90deg);
}

.wordmark-entry { position: absolute; top: 0; right: 0; }
.wordmark {
  position: relative;
  display: block;
  width: 199px;
  height: 44px;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  color: #000;
  font: 500 16px / 15.6px "Miletus", Arial, sans-serif;
  letter-spacing: -.48px;
  text-align: left;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}
.wordmark:disabled { cursor: default; opacity: 1; }
.wordmark:focus-visible, .portraits:focus-visible {
  outline: 1px solid #393939;
  outline-offset: 7px;
}
.logo-word {
  display: block;
  position: absolute;
  inset: 0 auto auto 0;
  white-space: nowrap;
  text-box: trim-both cap alphabetic;
  transition: transform 620ms var(--logo-ease);
}
.logo-word:nth-child(2) { transform: translate(46px, 0); }
.logo-word:nth-child(3) { transform: translate(127px, 0); }

.content-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--gutter);
}
.portraits {
  grid-column: 1 / span 6;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--gutter);
  min-width: 0;
}
.portrait { min-width: 0; --reveal-delay: 100ms; }
.portrait:nth-of-type(2) { --reveal-delay: 220ms; }
.portrait-window {
  position: relative;
  overflow: hidden;
  aspect-ratio: 316 / 396;
  background: #eee;
}
.portrait-image { width: 100%; height: 100%; object-fit: cover; }
.portrait-window::after {
  content: "";
  position: absolute;
  inset: -1px;
  background: #fff;
  pointer-events: none;
  transform: translateY(101%);
}
figcaption {
  margin-top: 10px;
  text-align: right;
  font: 500 14px / 15.6px "Miletus", Arial, sans-serif;
  letter-spacing: -.84px;
  text-box: trim-both cap alphabetic;
}
.biography {
  grid-column: 1 / span 6;
  max-width: 80ch;
  margin-top: 58px;
  padding-bottom: 40px;
  color: #393939;
  font-size: 14px;
  line-height: 20px;
  letter-spacing: -.119px;
}
.biography p { text-indent: 56px; text-box: trim-both cap alphabetic; }
.biography p + p { margin-top: 28px; }
.biography .closing { text-indent: 0; }
.biography .contact-links { text-indent: 0; }
.contact-links a {
  display: block;
  width: fit-content;
  max-width: 100%;
  padding-block: 2px;
  color: inherit;
  overflow-wrap: anywhere;
  text-underline-offset: 3px;
}
.contact-links a:focus-visible {
  outline: 1px solid currentColor;
  outline-offset: 3px;
}

/* Preserve the portrait scale as the empty desktop columns contract on tablets. */
@media (min-width: 701px) and (max-width: 1440px) {
  .portraits, .biography { grid-column: 1 / -1; width: min(664px, 100%); }
}
@media (max-width: 700px) {
  :root { --margin: 30px; }
  .page { padding-bottom: 30px; }
  .masthead { height: 96px; }
  .monogram-detail { display: none; }
  .wordmark-entry { top: 26px; }
  .content-grid { display: block; }
  .portraits {
    display: flex;
    width: calc(100% + var(--margin) * 2);
    margin-left: calc(-1 * var(--margin));
    padding-inline: var(--margin);
    padding-right: max(var(--margin), calc(100vw - 346px));
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scroll-padding-inline: var(--margin);
    scrollbar-width: none;
  }
  .portraits::-webkit-scrollbar { display: none; }
  .portrait {
    flex: 0 0 min(316px, calc(100vw - 60px));
    scroll-snap-align: start;
  }
  .biography {
    margin-top: 50px;
    margin-left: 6px;
    margin-right: 1px;
    padding-bottom: 0;
  }
}
@media (max-width: 359px) {
  .wordmark-entry { transform: scale(.9); transform-origin: right top; }
}

/* Only transform and opacity animate. The image mask is a moving white cover. */
@media (prefers-reduced-motion: no-preference) {
  [data-motion="pending"] .portrait-window::after { transform: translateY(0); }
  [data-motion="pending"] .portrait-image { transform: translateY(8px) scale(1.025); }
  [data-motion="pending"] .monogram,
  [data-motion="pending"] figcaption,
  [data-motion="pending"] .biography,
  [data-motion="pending"] .wordmark-entry { opacity: 0; }
  [data-motion="ready"] .monogram { animation: appear 800ms var(--reveal-ease) both; }
  [data-motion="ready"] .portrait-window::after {
    animation: uncover 1000ms var(--reveal-ease) var(--reveal-delay) both;
  }
  [data-motion="ready"] .portrait-image {
    animation: settle 1200ms var(--reveal-ease) var(--reveal-delay) both;
  }
  [data-motion="ready"] figcaption {
    animation: appear 650ms var(--reveal-ease) calc(var(--reveal-delay) + 500ms) both;
  }
  [data-motion="ready"] .biography { animation: appear 800ms var(--reveal-ease) 700ms both; }
  [data-motion="ready"] .wordmark-entry { animation: appear 900ms var(--reveal-ease) 320ms both; }
}
@keyframes uncover { from { transform: translateY(0); } to { transform: translateY(101%); } }
@keyframes settle { from { transform: translateY(8px) scale(1.025); } to { transform: none; } }
@keyframes appear { from { opacity: 0; translate: 0 6px; } to { opacity: 1; translate: 0 0; } }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
