@font-face {
  font-family: "Avara";
  src:
    url("/fonts/TWKEverett-Light.woff2") format("woff2"),
    url("/fonts/TWKEverett-Light.woff") format("woff");
  font-style: normal;
  font-weight: 300;
  font-display: swap;
}

@font-face {
  font-family: "Avara";
  src:
    url("/fonts/TWKEverett-Regular.woff2") format("woff2"),
    url("/fonts/TWKEverett-Regular.woff") format("woff");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

@font-face {
  font-family: "Avara";
  src:
    url("/fonts/TWKEverett-Medium.woff2") format("woff2"),
    url("/fonts/TWKEverett-Medium.woff") format("woff");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
}

:root {
  color-scheme: dark;
  --body: #000;
  --panel: #0f0f0fe3;
  --panel-mobile: #1a1a1a;
  --color: #fff;
  --muted: #ffffff66;
  --ease-snappy: cubic-bezier(0.175, 0.885, 0.32, 1.1);
  --ease-swift: cubic-bezier(0.19, 1, 0.22, 1);
  --panel-width: 28rem;
  font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  background: var(--body);
  color: var(--color);
}

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

html,
body {
  width: 100%;
  min-height: 100%;
  background: #000;
  overflow: hidden;
  overscroll-behavior: none;
}

body {
  min-height: 100svh;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  -webkit-tap-highlight-color: transparent;
}

button,
a {
  -webkit-tap-highlight-color: transparent;
}

button {
  border: 0;
  color: inherit;
  font: inherit;
}

a {
  color: inherit;
  text-decoration: none;
}

button:focus-visible,
a:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 5px;
}

.experience {
  position: relative;
  width: 100vw;
  height: 100svh;
  min-height: 34rem;
  isolation: isolate;
  overflow: hidden;
  background: #000;
}

.sound-toggle {
  position: fixed;
  z-index: 20;
  top: max(1rem, env(safe-area-inset-top));
  left: max(1rem, env(safe-area-inset-left));
  width: 1.75rem;
  height: 1.9375rem;
  display: grid;
  place-items: center;
  cursor: pointer;
  color: #fff;
  background: transparent;
  opacity: 0.4;
  transition:
    opacity 400ms var(--ease-snappy),
    transform 200ms var(--ease-snappy);
}

.sound-toggle:hover,
.sound-toggle:focus-visible {
  opacity: 1;
}

.sound-toggle:active {
  transform: scale(0.85);
}

.sound-toggle svg {
  display: block;
}

.sound-slash {
  opacity: 0;
  transition: opacity 180ms ease;
}

.sound-toggle[aria-pressed="false"] .sound-waves {
  opacity: 0;
}

.sound-toggle[aria-pressed="false"] .sound-slash {
  opacity: 1;
}

.mascot-stage {
  position: fixed;
  z-index: 2;
  inset: 0;
  pointer-events: none;
}

.mascot-list {
  position: relative;
  width: 100%;
  height: 100%;
  list-style: none;
}

.mascot-item {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.mascot {
  --drag-x: 0px;
  --drag-y: 0px;
  position: absolute;
  top: calc(50% + var(--home-y));
  left: calc(50% + var(--home-x));
  z-index: var(--z);
  width: var(--home-width);
  scale: 1;
  cursor: grab;
  pointer-events: auto;
  touch-action: none;
  user-select: none;
  background: transparent;
  transform:
    translate(-50%, -50%)
    translate3d(var(--drag-x), var(--drag-y), 0)
    rotate(var(--home-rotation));
  transform-origin: 50% 50%;
  transition:
    top 720ms var(--ease-swift),
    left 720ms var(--ease-swift),
    width 720ms var(--ease-swift),
    opacity 500ms ease,
    transform 720ms var(--ease-swift),
    scale 200ms var(--ease-snappy),
    filter 500ms ease;
  animation: mascot-enter 1s var(--ease-swift) var(--entry-delay) both;
  will-change: transform, width, left, top;
}

.mascot::after {
  position: absolute;
  z-index: -1;
  content: "";
  inset: 34%;
  border-radius: 50%;
  background: var(--project-color);
  box-shadow: 0 0 5rem 5rem var(--project-color);
  opacity: 0;
  transform: scale(0.5);
  transition:
    opacity 220ms var(--ease-snappy),
    transform 220ms var(--ease-snappy);
}

.mascot:focus-visible::after {
  opacity: 0.28;
  transform: scale(1);
}

.mascot[data-dragging="true"] {
  z-index: 12;
  cursor: grabbing;
  transition: none;
  transform:
    translate(-50%, -50%)
    translate3d(var(--drag-x), var(--drag-y), 0)
    rotate(calc(var(--home-rotation) + 10deg));
}

.mascot:hover {
  scale: 1.075;
}

.mascot:active {
  scale: 1.05;
}

.mascot-float {
  position: relative;
  width: 100%;
  animation:
    mascot-bob var(--float-duration) ease-in-out var(--float-delay) infinite alternate,
    mascot-tilt calc(var(--float-duration) * 1.3) ease-in-out var(--float-delay) infinite alternate;
  transform-origin: 50% 58%;
}

.mascot img {
  display: block;
  width: 100%;
  max-width: none;
  height: auto;
  pointer-events: none;
  -webkit-user-drag: none;
  user-select: none;
}

.mascot-label {
  position: absolute;
  z-index: 4;
  bottom: calc(100% + 0.7rem);
  left: 50%;
  padding: 1.15rem 1.05rem;
  border-radius: 2rem;
  white-space: nowrap;
  color: #fff;
  background: #0d0d0d;
  box-shadow:
    inset 0 0 0 1px #ffffff05,
    inset 0 1px 2px #ffffff0a,
    0 4px 20px #0008;
  font-size: 1.05rem;
  line-height: 0;
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, 1.5rem) scale(0.94);
  transition:
    opacity 200ms var(--ease-snappy),
    transform 200ms var(--ease-snappy);
}

.mascot:hover .mascot-label,
.mascot:focus-visible .mascot-label {
  opacity: 1;
  transform: translate(-50%, 0) scale(1);
}

@keyframes mascot-bob {
  from {
    translate: 0 -0.3rem;
  }
  to {
    translate: 0 0.45rem;
  }
}

@keyframes mascot-enter {
  from {
    opacity: 0.01;
    scale: 0.5;
    transform: translate(-50%, -50%) translateY(400px) rotate(var(--home-rotation));
  }
  to {
    opacity: 1;
    scale: 1;
    transform:
      translate(-50%, -50%)
      translate3d(var(--drag-x), var(--drag-y), 0)
      rotate(var(--home-rotation));
  }
}

@keyframes mascot-tilt {
  from {
    rotate: -1.25deg;
  }
  to {
    rotate: 1.25deg;
  }
}

.brand-lockup {
  position: fixed;
  z-index: 1;
  right: 0;
  bottom: 2.75rem;
  left: 0;
  color: #ffffff26;
  text-align: center;
  transition:
    opacity 220ms ease,
    transform 220ms ease;
}

.brand-lockup[data-hidden="true"] {
  opacity: 0;
  pointer-events: none;
  transform: translateY(2rem);
}

.brand-logo {
  position: relative;
  display: flex;
  height: 2.2rem;
  align-items: center;
  justify-content: center;
  padding-bottom: 0.95rem;
  color: #fff;
  cursor: context-menu;
  user-select: none;
  -webkit-touch-callout: none;
}

.brand-logo img {
  display: block;
  width: 8.25rem;
  height: auto;
}

.brand-lockup footer {
  animation: footer-in 800ms var(--ease-snappy) 1s both;
}

.brand-lockup ul {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  list-style: none;
}

.brand-lockup li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.brand-lockup li:not(:last-child)::after {
  width: 2px;
  height: 2px;
  border-radius: 50%;
  background: currentColor;
  content: "";
}

.brand-lockup a {
  display: inline-block;
  color: #fff;
  font-size: 0.8125rem;
  font-weight: 300;
  opacity: 0.35;
  transition: opacity 180ms ease;
}

.brand-lockup a:hover,
.brand-lockup a:focus-visible {
  opacity: 1;
}

@keyframes footer-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.project-overlay {
  position: fixed;
  z-index: 8;
  inset: 0;
  display: flex;
  justify-content: flex-end;
  padding: 0.5rem;
  overflow-x: hidden;
  overflow-y: auto;
  visibility: hidden;
  pointer-events: none;
  scrollbar-width: none;
}

.project-overlay::-webkit-scrollbar {
  display: none;
}

.project-overlay[data-open="true"] {
  visibility: visible;
  pointer-events: auto;
}

.project-panel {
  position: relative;
  display: flex;
  width: 30%;
  min-width: var(--panel-width);
  min-height: calc(100svh - 1rem);
  padding: 2.75rem 4rem;
  border-radius: 0.75rem;
  background: var(--panel);
  box-shadow: inset 0 0 0 1px #ffffff03;
  backdrop-filter: blur(2rem);
  opacity: 0;
  transform: scale(0.95);
  transform-origin: 100% 50%;
  transition:
    opacity 400ms ease,
    transform 400ms ease;
}

.project-panel:focus {
  outline: 0;
}

.project-overlay[data-open="true"] .project-panel {
  opacity: 1;
  transform: none;
}

.panel-inner {
  display: flex;
  width: 100%;
  flex-direction: column;
  font-family: "Avara", system-ui, sans-serif;
}

.project-bio {
  display: flex;
  min-height: 13rem;
  max-width: 35rem;
  flex-direction: column;
  gap: 1rem;
}

.project-bio h1 {
  font-size: 2.5rem;
  font-weight: 400;
  letter-spacing: -0.03em;
}

.project-bio p {
  font-size: 1.125rem;
  font-weight: 300;
  line-height: 1.5;
  letter-spacing: -0.011rem;
}

.project-details {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding-top: 2.75rem;
}

.project-details > div {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.25rem 0 0.75rem;
  border-bottom: 1px solid #ffffff0d;
  font-size: 0.875rem;
  font-weight: 300;
  line-height: 1.375rem;
}

.project-details > div:last-child {
  border-bottom: 0;
}

.project-details dt {
  color: var(--muted);
}

.project-details dd {
  max-width: 66%;
  text-align: right;
}

.surface-list,
.chain-list,
.project-links {
  display: flex;
  list-style: none;
}

.surface-list {
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.3rem;
}

.surface-pill {
  position: relative;
  display: block;
  padding: 0.25rem 0.35rem 0.2rem;
  border-radius: 0.375rem;
  color: var(--project-color);
  font-size: 0.8125rem;
  font-weight: 400;
  line-height: 1;
}

.surface-pill::before,
.surface-pill::after {
  position: absolute;
  inset: 0;
  border-radius: inherit;
  content: "";
}

.surface-pill::before {
  background: currentColor;
  opacity: 0.1;
}

.surface-pill::after {
  box-shadow: inset 0 0 0 1px currentColor;
  opacity: 0.4;
}

.chain-list {
  align-items: center;
  justify-content: flex-end;
  padding-left: 0.4rem;
}

.chain-list li {
  position: relative;
  margin-left: -0.38rem;
}

.chain-list img {
  display: block;
  width: 1.25rem;
  height: 1.25rem;
}

.chain-list span {
  position: absolute;
  z-index: 3;
  bottom: calc(100% + 0.75rem);
  left: 50%;
  padding: 1.05rem 0.9rem;
  border-radius: 2rem;
  white-space: nowrap;
  color: #fff;
  background: #0d0d0d;
  box-shadow: 0 4px 20px #0009;
  font-size: 0.8rem;
  line-height: 0;
  opacity: 0;
  pointer-events: none;
  transform: translate(-50%, 0.35rem);
  transition:
    opacity 180ms ease,
    transform 180ms ease;
}

.chain-list li:hover span {
  opacity: 1;
  transform: translate(-50%, 0);
}

.project-footer {
  width: 100%;
  margin-top: auto;
  padding-top: 2rem;
}

.project-links {
  height: 1.75rem;
  align-items: center;
  gap: 0.5rem;
  padding-bottom: 0.5rem;
}

.project-links a {
  display: grid;
  width: 1.25rem;
  height: 1.25rem;
  place-items: center;
  opacity: 0.3;
  transition:
    opacity 120ms ease,
    transform 180ms var(--ease-snappy);
}

.project-links a:hover,
.project-links a:focus-visible {
  opacity: 1;
  transform: translateY(-0.15rem);
}

.project-links img {
  display: block;
  width: 1.25rem;
  height: 1.25rem;
  filter: invert(1);
}

.project-note {
  color: #ffffff3d;
  font-size: 0.8125rem;
  font-weight: 300;
  line-height: 1.35;
}

.panel-close {
  position: absolute;
  z-index: 2;
  top: 1.5rem;
  right: 1.5rem;
  display: none;
  width: 2.75rem;
  height: 2.75rem;
  place-items: center;
  cursor: pointer;
  color: #fff;
  background: transparent;
  transition: transform 180ms var(--ease-snappy);
}

.panel-close:active {
  transform: scale(0.82);
}

.project-controls {
  position: fixed;
  z-index: 10;
  bottom: 3rem;
  left: calc((100vw - var(--panel-width)) / 2 - 5px);
  display: flex;
  padding: 0 0.4rem;
  border-radius: 2rem;
  background: #bfbfbf21;
  box-shadow: inset 0 1px 2px #ffffff0a;
  backdrop-filter: blur(2rem);
  pointer-events: auto;
  transform: translateX(-50%);
}

.project-controls[hidden] {
  display: none;
}

.project-controls button {
  padding: 0.5rem 0.4rem;
  cursor: pointer;
  color: #fff;
  background: transparent;
  line-height: 1;
  opacity: 0.33;
  transition:
    opacity 200ms ease,
    transform 200ms var(--ease-snappy);
}

.project-controls button:first-child svg {
  transform: scaleX(-1);
}

.project-controls button:hover,
.project-controls button:focus-visible {
  opacity: 1;
}

.project-controls button:active {
  transform: scale(0.8);
}

body[data-project-open="true"] .mascot {
  top: 50%;
  left: calc((100vw - var(--panel-width)) / 2 - 5px);
  width: calc(var(--open-width) * 0.5);
  opacity: 0.18;
  pointer-events: none;
  filter: saturate(0.75);
  transform:
    translate(-50%, -50%)
    translateX(var(--carousel-offset, 0px))
    rotate(var(--carousel-rotation, 0deg));
  animation: none;
}

body[data-project-open="true"] .mascot[data-active="true"] {
  z-index: 7;
  width: var(--open-width);
  opacity: 1;
  filter: none;
}

body[data-project-open="true"] .mascot-label {
  display: none;
}

body[data-project-open="true"] .mascot-float {
  animation:
    mascot-bob var(--float-duration) ease-in-out var(--float-delay) infinite alternate,
    selected-swing 3.3s ease-in-out infinite alternate;
}

.brand-menu {
  position: fixed;
  z-index: 30;
  min-width: 11.5rem;
  padding: 0.3125rem;
  border-radius: 0.5rem;
  color: #ffffffb3;
  background: #1a1a1af2;
  box-shadow:
    inset 0 0 0 1px #ffffff08,
    0 6px 14px #0000004d;
  backdrop-filter: blur(10px);
  font-family: "Avara", system-ui, sans-serif;
  opacity: 0;
  transform: scale(0.96);
  transform-origin: 50% 100%;
  transition:
    opacity 100ms ease,
    transform 100ms ease;
}

.brand-menu:not([hidden]) {
  opacity: 1;
  transform: scale(1);
}

.brand-menu button,
.brand-menu a {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: flex-start;
  gap: 0.5rem;
  padding: 0.3125rem 0.9375rem 0.3125rem 0.375rem;
  border-radius: 0.375rem;
  cursor: pointer;
  color: inherit;
  background: transparent;
  white-space: nowrap;
  font-size: 0.8125rem;
  font-weight: 300;
}

.brand-menu button:hover,
.brand-menu button:focus-visible,
.brand-menu a:hover,
.brand-menu a:focus-visible {
  color: #fff;
  background: #ffffff0d;
}

.menu-icon {
  display: inline-grid;
  width: 1.25rem;
  place-items: center;
  font-family: system-ui, sans-serif;
  font-size: 1rem;
}

.brand-menu[data-copied="true"] [data-copy-logo] span:last-child {
  font-size: 0;
}

.brand-menu[data-copied="true"] [data-copy-logo] span:last-child::after {
  font-size: 0.8125rem;
  content: "Copied to clipboard";
}

@keyframes selected-swing {
  from {
    rotate: -4deg;
  }
  to {
    rotate: 4deg;
  }
}

.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;
}

@media (max-width: 920px) {
  :root {
    --panel-width: 0px;
  }

  .experience {
    min-height: 38rem;
  }

  .mascot {
    left: var(--mobile-x);
    top: calc(50% + var(--mobile-y));
    width: var(--mobile-width);
    transform:
      translate(-50%, -50%)
      translate3d(var(--drag-x), var(--drag-y), 0)
      rotate(var(--mobile-rotation));
  }

  .mascot[data-dragging="true"] {
    transform:
      translate(-50%, -50%)
      translate3d(var(--drag-x), var(--drag-y), 0)
      rotate(calc(var(--mobile-rotation) + 10deg));
  }

  .mascot-label {
    display: none;
  }

  .brand-lockup {
    bottom: max(2.75rem, calc(env(safe-area-inset-bottom) + 1.5rem));
  }

  .project-controls {
    display: none;
  }

  .project-overlay {
    display: block;
    padding: 0 0.25rem 0.25rem;
    pointer-events: none;
    scroll-snap-type: y proximity;
  }

  .project-overlay::before {
    display: block;
    height: calc(100svh - 17rem - 4px);
    content: "";
    pointer-events: none;
  }

  .project-overlay[data-open="true"] {
    pointer-events: auto;
  }

  .project-panel {
    width: 100%;
    min-width: 0;
    min-height: 100svh;
    padding: 1.75rem 2rem 2rem;
    border-radius: 1.25rem;
    background: var(--panel-mobile);
    box-shadow: 0 0 4rem 2rem #000c;
    backdrop-filter: none;
    transform: translateY(2rem);
    transform-origin: 50% 100%;
    scroll-snap-align: start;
  }

  .project-overlay[data-open="true"] .project-panel {
    transform: none;
  }

  .panel-close {
    display: grid;
  }

  .project-bio {
    max-width: 100%;
  }

  .project-footer {
    min-height: 4rem;
  }

  body[data-project-open="true"] .mascot {
    left: 50%;
    top: calc((100svh - 17rem) / 2 - 7px);
    width: var(--mobile-open-width);
    opacity: 0;
    transform: translate(-50%, -50%) scale(0.7);
  }

  body[data-project-open="true"] .mascot[data-active="true"] {
    width: var(--mobile-open-width);
    opacity: 1;
    transform: translate(-50%, -50%);
  }

  .brand-menu {
    right: 1rem;
    bottom: 7.25rem;
    left: auto !important;
    top: auto !important;
  }
}

@media (max-width: 420px) {
  .project-panel {
    padding-right: 2rem;
    padding-left: 2rem;
  }

  .project-bio h1 {
    padding-right: 3rem;
  }
}

@media (max-height: 680px) and (min-width: 921px) {
  .brand-lockup {
    bottom: 1.5rem;
  }

  .project-controls {
    bottom: 1.75rem;
  }

  .mascot {
    scale: 0.84;
  }
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    scroll-behavior: auto !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
  }
}
