.ts-game {
  display: grid;
  grid-template-columns: auto minmax(240px, 1fr);
  align-items: center;
  gap: 2.5rem;
}

.ts-board {
  font-size: clamp(22px, 6vmin, 46px);
  user-select: none;
}

.ts-row {
  text-align: center;
  white-space: nowrap;
}

.ts-space,
.ts-ball {
  display: inline-block;
  width: 1em;
  height: 1em;
  margin: 0.0625em 0.5em;
  vertical-align: top;
}

.ts-ball {
  padding: 0;
  font-size: inherit;
  border: 0;
  border-radius: 50%;
  transition: 0.2s ease all;
  box-shadow: inset -0.15em -0.1em 0.5em rgb(0 0 0 / 0.55), 0 0 0.125em rgb(0 0 0 / 0.6);
  cursor: default;
}

.ts-ball.is-blue { background: #4bf; }
.ts-ball.is-green { background: #3e3; cursor: pointer; }
.ts-ball.is-red { background: #f33; cursor: pointer; }

.ts-ball.is-hole {
  background: #0b0d12;
  box-shadow: inset 0 0 0.35em rgb(255 255 255 / 0.25), 0 0 0.06em rgb(255 255 255 / 0.15);
}

.ts-ball.is-hole.is-green {
  background: #0b0d12;
  box-shadow: inset 0 0 0.45em #3e3, 0 0 0.25em #3e3;
}

/* On a light page, holes are light wells instead of black ones */
@media (prefers-color-scheme: light) {
  .ts-ball.is-hole,
  .ts-ball.is-hole.is-green {
    background: var(--bg-sunken);
  }

  .ts-ball.is-hole {
    box-shadow: inset 0 0.08em 0.3em rgb(15 17 23 / 0.35);
  }
}

.ts-ball.is-green:hover,
.ts-ball.is-red:hover {
  filter: brightness(1.25);
}

.ts-ball:focus-visible {
  outline: 3px solid var(--accent-text);
  outline-offset: 2px;
}

.ts-panel {
  padding: 1.75rem;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  background: var(--bg-raised);
  text-align: center;
}

.ts-step {
  margin: 0;
  font-size: 1.15rem;
}

.ts-reset {
  margin-top: 1.25rem;
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}

@media (max-width: 800px) {
  .ts-game {
    grid-template-columns: 1fr;
    gap: 1.5rem;
  }
}
