@font-face {
  font-family: "DM Serif Display";
  src: url("fonts/dm-serif-display-italic-latin.woff2") format("woff2");
  font-style: italic;
  font-weight: 400;
  font-display: swap;
}
@font-face {
  font-family: "Instrument Sans";
  src: url("fonts/instrument-sans-variable-latin.woff2") format("woff2");
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("fonts/ibm-plex-mono-medium-latin1.woff2") format("woff2");
  font-style: normal;
  font-weight: 500;
  font-display: swap;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("fonts/ibm-plex-mono-bold-latin1.woff2") format("woff2");
  font-style: normal;
  font-weight: 700;
  font-display: swap;
}

/* ---------- colours: the theatre cloakroom, and the same room after the show ---------- */

:root {
  --serif: "DM Serif Display", Georgia, "Times New Roman", serif;
  --sans: "Instrument Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;

  --wall: #efe6d6;
  --counter: #e6d9c2;
  --ink: #2a1c14;
  --ink-soft: #4d3a2c;
  --muted: #6b5242;
  --accent: #8c2f2a;
  --accent-ink: #fbf3e6;
  --accent-hover: #74231f;
  --line: rgba(42, 28, 20, 0.16);
  --focus: #8c2f2a;
  --stripe: rgba(140, 47, 42, 0.05);
  --lamp: rgba(255, 246, 228, 0.7);

  --brass: #c9a25a;
  --brass-hi: #f4e0a8;
  --brass-mid: #c9a25a;
  --brass-lo: #7a5720;

  --walnut-hi: #7c5434;
  --walnut: #5a3a22;
  --walnut-lo: #2f1c10;
  --rail-glow: rgba(255, 235, 200, 0.18);

  --manila-hi: #f3dfaf;
  --manila: #e9cf96;
  --manila-lo: #dcbd7c;
  --fiber: rgba(130, 90, 30, 0.05);
  --ring: #f6e8c4;
  --ring-edge: rgba(120, 85, 30, 0.4);
  --hole: #d6c7ab;
  --tag-ink: #2a1c14;
  --tag-soft: #5e4424;
  --tag-mark: #8c2f2a;
  --string: #a3865a;
  --tag-shadow: rgba(60, 35, 15, 0.28);
  --tag-shadow-up: rgba(60, 35, 15, 0.3);
  --glow: rgba(232, 162, 74, 0);

  --field-bg: #f7f0e3;
  --field-line: rgba(42, 28, 20, 0.28);

  --engrave: #4a3010;
  --lit: #f6e2a6;
  --lit-glow: rgba(246, 226, 166, 0.6);
  --plate-lo: #8a6526;

  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --wall: #1b1210;
    --counter: #231815;
    --ink: #f1e6d4;
    --ink-soft: #ddcdb6;
    --muted: #b9a68d;
    --accent: #e8a24a;
    --accent-ink: #1b1210;
    --accent-hover: #f2b766;
    --line: rgba(241, 230, 212, 0.16);
    --focus: #e8a24a;
    --stripe: rgba(232, 162, 74, 0.035);
    --lamp: rgba(232, 162, 74, 0.2);

    --brass: #b38a45;
    --brass-hi: #ffd894;
    --brass-mid: #b38a45;
    --brass-lo: #4a3212;

    --walnut-hi: #5e3d25;
    --walnut: #3d2615;
    --walnut-lo: #1a0f08;
    --rail-glow: rgba(232, 162, 74, 0.42);

    --manila-hi: #cfb682;
    --manila: #bca16c;
    --manila-lo: #a68b58;
    --fiber: rgba(40, 25, 5, 0.07);
    --ring: #cdb684;
    --ring-edge: rgba(40, 25, 5, 0.45);
    --hole: #120c0a;
    --tag-ink: #22160f;
    --tag-soft: #2e1f10;
    --tag-mark: #7e2621;
    --string: #8a7150;
    --tag-shadow: rgba(0, 0, 0, 0.5);
    --tag-shadow-up: rgba(0, 0, 0, 0.55);
    --glow: rgba(232, 162, 74, 0.55);

    --field-bg: #261a16;
    --field-line: rgba(241, 230, 212, 0.3);

    --engrave: #35220a;
    --lit: #ffc46a;
    --lit-glow: rgba(255, 180, 80, 0.85);
    --plate-lo: #6a4a1a;

    color-scheme: dark;
  }
}

:root[data-theme="dark"] {
  --wall: #1b1210;
  --counter: #231815;
  --ink: #f1e6d4;
  --ink-soft: #ddcdb6;
  --muted: #b9a68d;
  --accent: #e8a24a;
  --accent-ink: #1b1210;
  --accent-hover: #f2b766;
  --line: rgba(241, 230, 212, 0.16);
  --focus: #e8a24a;
  --stripe: rgba(232, 162, 74, 0.035);
  --lamp: rgba(232, 162, 74, 0.2);

  --brass: #b38a45;
  --brass-hi: #ffd894;
  --brass-mid: #b38a45;
  --brass-lo: #4a3212;

  --walnut-hi: #5e3d25;
  --walnut: #3d2615;
  --walnut-lo: #1a0f08;
  --rail-glow: rgba(232, 162, 74, 0.42);

  --manila-hi: #cfb682;
  --manila: #bca16c;
  --manila-lo: #a68b58;
  --fiber: rgba(40, 25, 5, 0.07);
  --ring: #cdb684;
  --ring-edge: rgba(40, 25, 5, 0.45);
  --hole: #120c0a;
  --tag-ink: #22160f;
  --tag-soft: #2e1f10;
  --tag-mark: #7e2621;
  --string: #8a7150;
  --tag-shadow: rgba(0, 0, 0, 0.5);
  --tag-shadow-up: rgba(0, 0, 0, 0.55);
  --glow: rgba(232, 162, 74, 0.55);

  --field-bg: #261a16;
  --field-line: rgba(241, 230, 212, 0.3);

  --engrave: #35220a;
  --lit: #ffc46a;
  --lit-glow: rgba(255, 180, 80, 0.85);
  --plate-lo: #6a4a1a;

  color-scheme: dark;
}

/* ---------- base ---------- */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body {
  display: flex;
  flex-direction: column;
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  background: var(--wall);
  color: var(--ink);
  font: 400 1rem/1.55 var(--sans);
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

a {
  color: inherit;
}

:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 3px;
  border-radius: 4px;
}

.vh {
  position: absolute !important;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.sprite {
  position: absolute;
  width: 0;
  height: 0;
  overflow: hidden;
}

.b-hi {
  stop-color: var(--brass-hi);
}
.b-mid {
  stop-color: var(--brass-mid);
}
.b-lo {
  stop-color: var(--brass-lo);
}
.b-edge {
  stroke: var(--brass-lo);
}
.b-screw {
  fill: var(--brass-lo);
}
.b-slot {
  stroke: var(--brass-hi);
  stroke-linecap: round;
}

.wrap {
  width: 100%;
  max-width: 1240px;
  margin: 0 auto;
  padding: 0 16px;
}

/* ---------- top bar ---------- */

.bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  min-height: 60px;
}

.wordmark {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font: italic 400 1.45rem/1 var(--serif);
  text-decoration: none;
  color: var(--ink);
  letter-spacing: 0.005em;
}

.mark {
  position: relative;
  width: 13px;
  height: 21px;
  background: linear-gradient(180deg, var(--manila-hi), var(--manila) 50%, var(--manila-lo));
  clip-path: polygon(24% 0, 76% 0, 100% 16%, 100% 100%, 0 100%, 0 16%);
  transform: rotate(-8deg) translateY(1px);
}

.mark::before {
  content: "";
  position: absolute;
  left: 50%;
  top: 3px;
  width: 4px;
  height: 4px;
  margin-left: -2px;
  border-radius: 50%;
  background: var(--accent);
}

.mark::after {
  content: "";
  position: absolute;
  left: 3px;
  right: 3px;
  top: 10px;
  height: 1.5px;
  background: var(--tag-soft);
  opacity: 0.55;
  box-shadow: 0 3px 0 var(--tag-soft);
}

/* The theme switch is a small brass plate with three engraved icons; the chosen one sits in a
   walnut well, lit. The lit button follows the root's data-theme (set before first paint by
   theme.js), so the plate is right from the first frame. */

.theme {
  position: relative;
  display: inline-flex;
  gap: 2px;
  height: 28px;
  padding: 2px;
  border-radius: 999px;
  background: linear-gradient(172deg, var(--brass-hi), var(--brass-mid) 52%, var(--plate-lo) 135%);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.38) inset, 0 -1px 0 rgba(0, 0, 0, 0.2) inset, 0 2px 5px -1px rgba(40, 20, 5, 0.4);
}

.theme-btn {
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: transparent;
  color: var(--engrave);
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
}

.theme-btn svg {
  width: 15px;
  height: 15px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.6;
  stroke-linecap: round;
  stroke-linejoin: round;
  filter: drop-shadow(0 0.75px 0 rgba(255, 244, 214, 0.55));
}

.theme-btn:hover {
  background: rgba(60, 35, 10, 0.12);
}

:root:not([data-theme]) .theme-btn[data-choice="system"],
:root[data-theme="light"] .theme-btn[data-choice="light"],
:root[data-theme="dark"] .theme-btn[data-choice="dark"] {
  background: radial-gradient(circle at 50% 38%, var(--walnut-hi), var(--walnut) 60%, var(--walnut-lo));
  color: var(--lit);
  box-shadow: 0 1.5px 2px rgba(0, 0, 0, 0.55) inset, 0 1px 0 rgba(255, 240, 200, 0.4);
}

:root:not([data-theme]) .theme-btn[data-choice="system"] svg,
:root[data-theme="light"] .theme-btn[data-choice="light"] svg,
:root[data-theme="dark"] .theme-btn[data-choice="dark"] svg {
  filter: drop-shadow(0 0 2.5px var(--lit-glow));
}

.theme-btn:focus-visible {
  outline: 2.5px solid var(--focus);
  outline-offset: 2px;
  border-radius: 50%;
}

/* ---------- hero copy ---------- */

.hero-copy {
  padding-top: 18px;
}

h1 {
  margin: 0;
  font: italic 400 clamp(2.5rem, 1.3rem + 5.2vw, 5.6rem) / 1 var(--serif);
  letter-spacing: -0.012em;
  color: var(--ink);
}

h1 span {
  display: block;
}

h1 .accent {
  color: var(--accent);
}

.hero-side {
  margin-top: 14px;
}

.lede {
  margin: 0;
  max-width: 34rem;
  font-size: 1.02rem;
  line-height: 1.5;
  color: var(--ink-soft);
  text-wrap: pretty;
}

.go {
  display: inline-flex;
  align-items: center;
  margin-top: 16px;
  padding: 0.72rem 1.15rem 0.76rem;
  border-radius: 999px;
  background: var(--accent);
  color: var(--accent-ink);
  font: 600 1rem/1.1 var(--sans);
  letter-spacing: 0.005em;
  text-decoration: none;
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 6px 14px -8px rgba(60, 20, 10, 0.55);
}

.go:hover {
  background: var(--accent-hover);
}

.go:focus-visible {
  border-radius: 999px;
}

/* ---------- the wall: rail, hooks, tags ---------- */

.wall,
.stage {
  --s: 0.86;
  --pitch: 68px;
  --tag-w: 50px;
  --tag-h: 82px;
  --tag-fs: 10px;
  --rail-mid: 46px;
  --rail-h: 16px;
  --len: 14px;
  --lift-y: 10px;
}

.wall {
  position: relative;
  height: 222px;
  margin-top: 14px;
  margin-bottom: -14px;
  overflow: hidden;
}

.wall::before {
  content: "";
  position: absolute;
  inset: 0;
  background: repeating-linear-gradient(90deg, var(--stripe) 0 1px, transparent 1px 9px, var(--stripe) 9px 10px, transparent 10px 34px);
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 18%, #000 70%, transparent);
  mask-image: linear-gradient(180deg, transparent, #000 18%, #000 70%, transparent);
}

.wall::after {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(ellipse 52% 70% at 50% 34%, var(--lamp), transparent 72%);
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 22%, #000 72%, transparent);
  mask-image: linear-gradient(180deg, transparent, #000 22%, #000 72%, transparent);
  pointer-events: none;
}

.plaque {
  position: absolute;
  z-index: 1;
  left: 50%;
  top: calc(var(--rail-mid) - var(--rail-h) / 2 - 27px);
  transform: translateX(-50%);
  padding: 4px 14px 4px;
  border-radius: 3px;
  background: linear-gradient(170deg, var(--brass-hi), var(--brass-mid) 55%, var(--brass-lo) 140%);
  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.35) inset, 0 -1px 0 rgba(0, 0, 0, 0.18) inset, 0 2px 4px -1px rgba(40, 20, 5, 0.4);
  font: 500 8.5px/1 var(--mono);
  letter-spacing: 0.32em;
  text-transform: uppercase;
  color: #2a1c14;
  white-space: nowrap;
}

.plaque::before,
.plaque::after {
  content: "";
  position: absolute;
  top: 50%;
  width: 3px;
  height: 3px;
  margin-top: -1.5px;
  border-radius: 50%;
  background: var(--brass-lo);
}

.plaque::before {
  left: 5px;
}

.plaque::after {
  right: 5px;
}

.rail {
  position: absolute;
  z-index: 1;
  left: 0;
  right: 0;
  top: calc(var(--rail-mid) - var(--rail-h) / 2);
  height: var(--rail-h);
  border-radius: 3px;
  background:
    radial-gradient(ellipse 40% 140% at 50% 0%, var(--rail-glow), transparent 70%),
    repeating-linear-gradient(178deg, rgba(255, 220, 180, 0.05) 0 1px, transparent 1px 3px),
    repeating-linear-gradient(97deg, rgba(0, 0, 0, 0.1) 0 2px, transparent 2px 41px, rgba(255, 200, 150, 0.06) 41px 43px, transparent 43px 97px),
    linear-gradient(180deg, var(--walnut-hi) 0%, var(--walnut) 38%, var(--walnut) 62%, var(--walnut-lo) 100%);
  box-shadow: 0 1px 0 rgba(255, 230, 200, 0.22) inset, 0 7px 10px -5px rgba(30, 15, 5, 0.45);
}

.pegs {
  position: absolute;
  z-index: 2;
  top: 0;
  bottom: 0;
  left: 50%;
  display: flex;
  width: calc(15 * var(--pitch));
  margin: 0 0 0 calc(15 * var(--pitch) / -2);
  padding: 0;
  list-style: none;
}

.peg {
  position: relative;
  flex: 0 0 var(--pitch);
  height: 100%;
  font-size: var(--tag-fs);
}

.peg.is-lifted {
  z-index: 3;
}

.hook {
  position: absolute;
  z-index: 2;
  left: calc(50% - 18px * var(--s));
  top: calc(var(--rail-mid) - 9px * var(--s));
  width: calc(28px * var(--s));
  height: calc(44px * var(--s));
  overflow: visible;
  filter: drop-shadow(0 2px 1.4px rgba(30, 15, 5, 0.38));
}

.hang {
  position: absolute;
  z-index: 1;
  left: 50%;
  top: calc(var(--rail-mid) + 28px * var(--s));
  width: 0;
  height: 0;
  transform-origin: 0 0;
}

.peg.is-lifted .hang {
  transform: translateY(var(--lift-y)) scale(1.2) rotate(-2deg);
}

.swing {
  position: absolute;
  left: 0;
  top: 0;
  transform-origin: 0 0;
  rotate: var(--rest, 0deg);
  filter: drop-shadow(0 3px 2.5px var(--tag-shadow));
}

.peg.is-lifted .swing {
  filter: drop-shadow(0 0 16px var(--glow)) drop-shadow(0 12px 10px var(--tag-shadow-up));
}

.peg:nth-child(3n + 1) {
  --rest: -1.4deg;
  --len: 16px;
}
.peg:nth-child(3n + 2) {
  --rest: 1.1deg;
  --len: 12px;
}
.peg:nth-child(4n) {
  --rest: 0.5deg;
  --len: 18px;
}
.peg:nth-child(5n) {
  --rest: -0.6deg;
}

.string {
  position: absolute;
  z-index: 1;
  left: -0.27em;
  top: -0.36em;
  width: 0.54em;
  height: calc(var(--len) + 1.25em);
  border: 1.15px solid var(--string);
  border-radius: 50%;
}

.tag {
  --hole-y: 0.98em;
  position: absolute;
  top: var(--len);
  left: calc(var(--tag-w) / -2);
  display: flex;
  flex-direction: column;
  align-items: center;
  width: var(--tag-w);
  height: var(--tag-h);
  padding-top: 1.95em;
  color: var(--tag-ink);
  background:
    radial-gradient(circle at 50% var(--hole-y), var(--hole) 0 0.27em, var(--ring-edge) 0.29em 0.33em, var(--ring) 0.35em 0.58em, var(--ring-edge) 0.6em 0.64em, transparent 0.67em),
    repeating-linear-gradient(97deg, var(--fiber) 0 1px, transparent 1px 5px),
    repeating-linear-gradient(8deg, var(--fiber) 0 1px, transparent 1px 7px),
    linear-gradient(180deg, var(--manila-hi), var(--manila) 38%, var(--manila-lo));
  clip-path: polygon(24% 0, 76% 0, 100% 15%, 100% 100%, 0 100%, 0 15%);
  text-align: center;
}

.tag-brand {
  font: 500 0.56em/1 var(--mono);
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--tag-soft);
}

.tag-code {
  margin-top: 0.42em;
  font: 700 1.42em/1 var(--mono);
  letter-spacing: 0.02em;
  color: var(--tag-ink);
}

.tag-no {
  margin-top: auto;
  margin-bottom: 1em;
  font: 500 0.64em/1 var(--mono);
  letter-spacing: 0.06em;
  color: var(--tag-soft);
  white-space: nowrap;
}

.peg.is-lifted .tag,
.peg--pick .tag,
.nf-tag .tag {
  --manila-hi: #f7e6bb;
  --manila: #ecd39b;
  --manila-lo: #dfc283;
  --ring: #f8ebc9;
  --tag-ink: #2a1c14;
  --tag-soft: #5e4424;
}

.peg.is-lifted .tag-code {
  color: var(--tag-mark);
}

.peg.is-lifted .tag {
  --tag-mark: #8c2f2a;
}

/* the address the lifted tag types out under the wall */

.address {
  position: relative;
  margin: 4px 0 0;
  padding: 0 16px;
  text-align: center;
  font: 500 1.3rem/1.2 var(--mono);
  letter-spacing: 0.01em;
  white-space: nowrap;
}

.addr-host {
  color: var(--muted);
}

.addr-code {
  color: var(--accent);
}

.caret {
  display: inline-block;
  width: 0.09em;
  height: 1.05em;
  margin-left: 0.06em;
  vertical-align: -0.16em;
  background: var(--accent);
  opacity: 0.85;
}

.motion .caret {
  animation: blink 1.05s steps(1) infinite;
}

@keyframes blink {
  50% {
    opacity: 0;
  }
}

/* ---------- the play: a counter, a short rail, your tag ---------- */

.play {
  position: relative;
  margin-top: 40px;
  padding: 40px 0 44px;
  background: var(--counter);
}

.play::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 12px;
  background:
    repeating-linear-gradient(97deg, rgba(0, 0, 0, 0.1) 0 2px, transparent 2px 53px, rgba(255, 200, 150, 0.06) 53px 55px, transparent 55px 113px),
    linear-gradient(180deg, var(--walnut-hi), var(--walnut) 55%, var(--walnut-lo));
  box-shadow: 0 2px 0 var(--brass), 0 6px 10px -4px rgba(30, 15, 5, 0.35);
}

.play-grid {
  display: grid;
  grid-template-areas: "title" "field" "stage" "note";
  align-items: start;
}

.play-title {
  grid-area: title;
  margin: 0;
  font: italic 400 2.3rem/1.05 var(--serif);
  letter-spacing: -0.01em;
}

.play-field {
  grid-area: field;
  margin-top: 16px;
}

.field-label {
  display: block;
  margin-bottom: 8px;
  font: 500 0.95rem/1.35 var(--sans);
  color: var(--ink-soft);
}

.field {
  display: flex;
  align-items: baseline;
  max-width: 22rem;
  padding: 0.62rem 1rem 0.66rem;
  border: 1.5px solid var(--field-line);
  border-radius: 12px;
  background: var(--field-bg);
  font: 500 1.55rem/1.2 var(--mono);
  cursor: text;
  box-shadow: 0 1px 2px rgba(40, 20, 5, 0.08) inset;
}

.field:focus-within {
  border-color: var(--accent);
  outline: 3px solid var(--focus);
  outline-offset: 2px;
}

.field-host {
  color: var(--muted);
}

.field-input {
  flex: 0 0 auto;
  width: calc(4ch + 0.3em);
  min-width: 0;
  margin: 0;
  padding: 0 0 2px;
  border: 0;
  background: repeating-linear-gradient(90deg, var(--muted) 0 calc(1ch - 0.16em), transparent calc(1ch - 0.16em) calc(1ch + 0.08em)) 0 100% / 100% 1.5px no-repeat;
  color: var(--accent);
  caret-color: var(--accent);
  font: inherit;
  letter-spacing: 0.08em;
  text-transform: lowercase;
}

.field-input:focus {
  outline: none;
}

.stage {
  grid-area: stage;
  position: relative;
  height: 272px;
  margin-top: 22px;
  --pick-w: 104px;
  --pick-h: 168px;
  --pick-fs: 16px;
  --rail-mid: 24px;
  --found-y: 8px;
}

.rail--play {
  left: 6px;
  right: 6px;
  border-radius: 8px;
}

.rail-end {
  position: absolute;
  top: 50%;
  width: calc(var(--rail-h) + 6px);
  height: calc(var(--rail-h) + 6px);
  margin-top: calc((var(--rail-h) + 6px) / -2);
  border-radius: 50%;
  background: radial-gradient(circle at 36% 32%, var(--brass-hi), var(--brass-mid) 55%, var(--brass-lo));
  box-shadow: 0 2px 3px rgba(30, 15, 5, 0.4);
}

.rail-end:first-child {
  left: -6px;
}

.rail-end:last-child {
  right: -6px;
}

.pegs--play {
  position: absolute;
  inset: 0 6px;
  display: grid;
  grid-template-columns: 1fr 1fr var(--pick-w) 1fr 1fr;
  width: auto;
  margin: 0;
}

.pegs--play .peg {
  flex: none;
}

.peg--pick {
  font-size: var(--pick-fs);
}

.peg--pick .tag {
  --tag-w: var(--pick-w);
  --tag-h: var(--pick-h);
  --hole-y: 1em;
  padding-top: 1.8em;
}

.tag--big .tag-brand {
  font-size: 0.52em;
}

.tag--big .tag-code {
  margin-top: 0.36em;
  font-size: 1.5em;
}

.tag-rule {
  width: 68%;
  margin-top: 0.55em;
  border-top: 1px dashed var(--tag-soft);
  opacity: 0.6;
}

.tag--big .tag-no {
  margin-top: 0.75em;
  font-size: 0.82em;
}

.tag--big .tag-no--blank {
  margin-bottom: 0;
}

.spot {
  margin: 0.5em 0 0;
  font: 500 1em/1.1 var(--mono);
}

.spot-text:not([hidden]) {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.28em;
}

.spot-label {
  font: 500 0.58em/1 var(--mono);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--tag-soft);
}

.spot-no {
  font: 700 1.02em/1 var(--mono);
  letter-spacing: 0.02em;
  color: var(--tag-ink);
  white-space: nowrap;
}

.stage.is-found .tag-no--blank {
  display: none;
}

.stage.is-found .peg--pick .tag-code {
  color: var(--tag-mark);
}

.stage.is-found .peg--pick .tag {
  --tag-mark: #8c2f2a;
}

.stage.is-found .peg--pick .hang {
  transform: translateY(var(--found-y)) scale(1.1);
}

.stage.is-found .peg--pick .swing {
  filter: drop-shadow(0 0 18px var(--glow)) drop-shadow(0 14px 12px var(--tag-shadow-up));
}

.stage.is-found .peg:not(.peg--pick) {
  opacity: 0.5;
}

.play-note {
  grid-area: note;
  margin: 18px 0 0;
  max-width: 24rem;
  font-size: 0.98rem;
  text-wrap: pretty;
  color: var(--ink-soft);
  visibility: hidden;
}

.play.is-found .play-note {
  visibility: visible;
}

.motion .peg:not(.peg--pick) {
  transition: opacity 0.4s ease;
}

.motion .peg .swing {
  transition: filter 0.5s ease;
}

.motion .stage .hang {
  transition: transform 0.55s cubic-bezier(0.3, 1.25, 0.5, 1);
}

/* ---------- footer ---------- */

.foot {
  padding-top: 22px;
  padding-bottom: 28px;
}

.foot-line {
  margin: 0;
  font-size: 0.9rem;
  color: var(--muted);
}

.foot-line a {
  color: var(--ink-soft);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

/* ---------- 404 ---------- */

main {
  flex: 1 0 auto;
}

.nf {
  padding-bottom: 36px;
}

.nf .wall {
  height: 270px;
  margin-top: 6px;
  margin-bottom: 0;
  --rail-mid: 40px;
}

.nf .pegs {
  width: calc(5 * var(--nf-pitch));
  margin-left: calc(5 * var(--nf-pitch) / -2);
  --nf-pitch: 92px;
}

.nf .peg {
  flex-basis: var(--nf-pitch);
}

.nf-tag {
  font-size: 17px;
}

.nf-tag .tag {
  --tag-w: 112px;
  --tag-h: 182px;
  --hole-y: 1em;
  padding-top: 1.8em;
}

.nf-tag .tag-code {
  margin-top: 0.5em;
  font-size: 1.5em;
  color: var(--tag-mark);
}

.nf-tag .tag {
  --tag-mark: #8c2f2a;
}

.nf-tag .tag-code[data-len="m"] {
  font-size: 1.1em;
}

.nf-tag .tag-code[data-len="l"] {
  font-size: 0.82em;
}

.nf-copy {
  text-align: center;
}

.nf h1 {
  margin: 10px auto 0;
  max-width: 11em;
  font-size: clamp(2.1rem, 1.3rem + 3.6vw, 4.2rem);
  line-height: 1.04;
  text-wrap: balance;
}

.nf h1 span {
  display: inline;
}

.nf-code {
  font: 700 0.62em/1 var(--mono);
  letter-spacing: 0.01em;
  color: var(--accent);
  white-space: nowrap;
  overflow-wrap: anywhere;
}

.nf-soon {
  margin: 14px 0 0;
  font-size: 1.1rem;
  color: var(--ink-soft);
}

.nf .go {
  margin-top: 20px;
}

/* ---------- wider screens ---------- */

@media (min-width: 560px) {
  .wrap {
    padding: 0 28px;
  }

  .wall,
  .stage {
    --s: 1;
    --pitch: 82px;
    --tag-w: 60px;
    --tag-h: 98px;
    --tag-fs: 12px;
    --rail-mid: 52px;
    --rail-h: 19px;
  }

  .wall {
    height: 258px;
    margin-bottom: -16px;
  }

  .plaque {
    font-size: 9.5px;
    top: calc(var(--rail-mid) - var(--rail-h) / 2 - 30px);
  }

  .address {
    font-size: 1.6rem;
  }

  .stage {
    --rail-mid: 28px;
    --pick-w: 120px;
    --pick-h: 192px;
    --pick-fs: 18px;
    height: 340px;
  }
}

@media (min-width: 960px) {
  .bar {
    min-height: 76px;
  }

  .hero-copy {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 23rem);
    align-items: end;
    gap: 56px;
    padding-top: 36px;
  }

  .hero-side {
    margin: 0 0 10px;
  }

  .lede {
    font-size: 1.12rem;
  }

  .go {
    margin-top: 20px;
    font-size: 1.04rem;
  }

  .wall,
  .stage {
    --s: 1.1;
    --pitch: 90px;
    --tag-w: 66px;
    --tag-h: 108px;
    --tag-fs: 13.2px;
    --rail-mid: 62px;
    --rail-h: 22px;
    --lift-y: 12px;
  }

  .wall {
    height: 300px;
    margin-top: 30px;
    margin-bottom: -22px;
  }

  .plaque {
    font-size: 10px;
    padding: 5px 16px;
  }

  .address {
    margin-top: 6px;
    font-size: 1.9rem;
  }

  .play {
    margin-top: 64px;
    padding: 64px 0 72px;
  }

  .play-grid {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
    grid-template-rows: auto auto 1fr;
    grid-template-areas: "title stage" "field stage" "note stage";
    column-gap: 64px;
  }

  .play-title {
    margin-top: 24px;
    font-size: 3.4rem;
  }

  .play-field {
    margin-top: 26px;
  }

  .play-note {
    margin-top: 22px;
  }

  .stage {
    margin-top: 0;
    height: 360px;
    --rail-mid: 30px;
    --pick-w: 128px;
    --pick-h: 204px;
    --pick-fs: 19px;
  }

  .foot {
    padding-top: 28px;
    padding-bottom: 36px;
  }

  .nf .wall {
    height: 352px;
    margin-top: 16px;
    margin-bottom: 0;
    --rail-mid: 50px;
  }

  .nf .pegs {
    --nf-pitch: 132px;
  }

  .nf-tag {
    font-size: 22px;
  }

  .nf-tag .tag {
    --tag-w: 142px;
    --tag-h: 230px;
  }

  .nf h1 {
    margin-top: 18px;
  }
}
