* {
  box-sizing: border-box;
}

button,
input,
output {
  font: inherit;
}

.tm4-knob-visual,
.tm4-dial {
  --turn: 0.5;
}

.tm4-knob-visual {
  position: relative;
}

.tm4-knob-pointer {
  position: absolute;
  left: 50%;
  top: 50%;
  transform-origin: 50% 100%;
  transform: translate(-50%, -100%) rotate(calc(-135deg + (var(--turn, 0.5) * 270deg)));
  transition: transform 90ms ease-out;
}

.tm4-fader-visual,
.tm4-fader-wrap,
.tm4-master-strip {
  --fader-position: 0.7;
}

.tm4-fader-visual {
  position: relative;
}

.tm4-fader-cap {
  position: absolute;
  left: 50%;
  top: calc((1 - var(--fader-position, 0.7)) * 100%);
  transform: translate(-50%, -50%);
  transition: top 90ms ease-out, transform 90ms ease-out;
}

.tm4-meter-rail {
  position: relative;
  overflow: hidden;
}

.tm4-meter-fill {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: calc(var(--level, 0) * 100%);
  transition: height 60ms linear;
}

.tm4-cassette {
  width: min(92%, 720px);
  margin: 0 auto;
  position: relative;
}

.cassette {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 10;
}

.cassette__svg {
  display: block;
  width: 100%;
  height: 100%;
}

.cassette__tape {
  transform-box: fill-box;
  transform-origin: center;
  animation: tm4-reel-spin linear infinite;
  animation-duration: calc(1.1s / var(--pitch-rate, 1));
  animation-play-state: paused;
}

.cassette.is-playing .cassette__tape {
  animation-play-state: running;
}

.cassette__tape--right {
  animation-direction: reverse;
}

.cassette__pack {
  transform-box: fill-box;
  transform-origin: center;
}

.cassette__pack--left {
  transform: scale(var(--left-reel-scale, 1));
}

.cassette__pack--right {
  transform: scale(var(--right-reel-scale, 0.72));
}

.tm4-cassette-overlay {
  position: absolute;
  inset: 0;
  pointer-events: none;
  display: grid;
  grid-template-columns: 64px 1fr 100px;
  grid-template-rows: 42px 52px 1fr;
  padding: 15.6% 9.8% 20.8%;
  color: #161613;
  text-transform: uppercase;
}

.tm4-cassette-side {
  grid-column: 1;
  grid-row: 1;
  justify-self: start;
  align-self: start;
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 0.98rem;
  letter-spacing: 0.04em;
  font-weight: 700;
}

.tm4-cassette-title {
  grid-column: 1 / span 2;
  grid-row: 1;
  align-self: start;
  justify-self: start;
  margin-left: 54px;
  margin-top: 3px;
  font-size: 0.52rem;
  letter-spacing: 0.04em;
  font-weight: 700;
  max-width: 50%;
  text-align: left;
  line-height: 1.2;
}

.tm4-cassette-counter {
  display: none;
}

.tm4-hidden-lists {
  display: none;
}

@keyframes tm4-reel-spin {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
}
