:root {
  --black: #000;
  --white: #fff;
  --soft-white: rgba(255, 255, 255, 0.82);
  --faint-white: rgba(255, 255, 255, 0.48);
}

* {
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  overflow: hidden;
  background: var(--black);
  color: var(--white);
  font-family: "Figtree", "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-weight: 300;
  touch-action: none;
  overscroll-behavior: none;
  -webkit-overflow-scrolling: auto;
}

button {
  font: inherit;
  color: inherit;
  background: transparent;
  border: 0;
  padding: 0;
  cursor: pointer;
}

#app {
  position: fixed;
  inset: 0;
  min-height: 100svh;
  background: var(--black);
}

#stage {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
}

#lineCanvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
}

.instruction,
.sentence,
.prompt,
.end-session,
.end-screen {
  position: absolute;
  z-index: 2;
  text-align: center;
  letter-spacing: 0.015em;
}

.instruction {
  top: calc(50% + 72px);
  left: 50%;
  transform: translateX(-50%);
  width: min(82vw, 420px);
  color: var(--soft-white);
  font-size: clamp(17px, 4.4vw, 23px);
  line-height: 1.52;
  opacity: 0;
  transition: opacity 900ms ease;
}

.instruction.visible {
  opacity: 1;
}

.sentence {
  top: calc(50% + 76px);
  left: 50%;
  transform: translateX(-50%);
  width: min(82vw, 520px);
  min-height: 4.8em;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  color: var(--white);
  font-size: clamp(21px, 6vw, 34px);
  line-height: 1.28;
  opacity: 0;
  transition: opacity 1100ms ease;
}

.sentence.visible {
  opacity: 1;
}

.sentence.metric {
  color: var(--soft-white);
  font-size: clamp(18px, 5vw, 28px);
  letter-spacing: 0.035em;
}

.prompt {
  bottom: calc(16svh + env(safe-area-inset-bottom));
  left: 50%;
  transform: translateX(-50%);
  width: min(82vw, 480px);
  color: var(--faint-white);
  font-size: clamp(14px, 3.7vw, 18px);
  line-height: 1.45;
  opacity: 0;
  transition: opacity 900ms ease;
}

.prompt.visible {
  opacity: 1;
}

.instruction,
.sentence,
.prompt {
  pointer-events: none;
}

.end-session {
  pointer-events: auto;
  z-index: 50;
  left: 50%;
  bottom: calc(28px + env(safe-area-inset-bottom));
  transform: translateX(-50%);
  color: var(--faint-white);
  font-size: clamp(13px, 3.3vw, 16px);
  letter-spacing: 0.02em;
  opacity: 1;
  transition: opacity 700ms ease;
  padding: 18px 22px;
}

.hidden {
  display: none !important;
}

.end-screen {
  inset: 0;
  z-index: 60;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 32px;
  background: var(--black);
}

.summary {
  color: var(--white);
  font-size: clamp(17px, 4.5vw, 24px);
  line-height: 1.42;
  font-weight: 300;
  width: min(84vw, 620px);
}

.end-thought {
  display: inline-block;
  font-size: clamp(18px, 4.6vw, 25px);
  line-height: 1.3;
}

.begin-again {
  color: var(--faint-white);
  font-size: clamp(15px, 4vw, 18px);
  padding: 18px 24px;
}

@media (min-width: 780px) {
  .instruction,
  .sentence {
    top: calc(50% + 92px);
  }
}
