:root {
  --piano-frame-color: #171717;
  --piano-frame-shadow: rgba(0, 0, 0, 0.18);
  --piano-focus-color: #f2b705;
  --piano-white-key-color: #fff;
  --piano-white-key-hover-color: #f1f1f1;
  --piano-white-key-text-color: #222;
  --piano-white-key-border-color: #d2d2d2;
  --piano-black-key-color: #080808;
  --piano-black-key-gradient-start: #303030;
  --piano-black-key-gradient-end: #242424;
  --piano-black-key-hover-color: #24282c;
  --piano-black-key-border-color: #000;
  --piano-black-key-shadow: rgba(0, 0, 0, 0.45);
  --piano-user-active-color: #4cc9f0;
  --piano-user-active-black-color: #168aad;
  --piano-system-active-color: #f2b705;
  --piano-system-active-black-color: #c98200;
  --piano-active-shadow: rgba(0, 0, 0, 0.2);
  --piano-label-color: #555;
}

.piano-keyboard {
  width: 100%;
  max-width: 100%;
  user-select: none;
  touch-action: none;
}

.piano-keyboard__keys {
  position: relative;
  width: 100%;
  min-height: 96px;
  aspect-ratio: 7.2 / 1;
  overflow: hidden;
  background: var(--piano-frame-color);
  border: 1px solid var(--piano-frame-color);
  border-radius: 8px;
  box-shadow: 0 5px 16px var(--piano-frame-shadow);
}

.piano-keyboard__key {
  position: absolute;
  top: 0;
  margin: 0;
  padding: 0;
  border-radius: 0 0 4px 4px;
  cursor: pointer;
  transition: none;
  -webkit-tap-highlight-color: transparent;
}

.piano-keyboard__key:focus-visible {
  z-index: 4;
  outline: 3px solid var(--piano-focus-color);
  outline-offset: -3px;
}

.piano-keyboard__key--white {
  left: calc(var(--white-index) * 100% / var(--piano-white-key-count));
  z-index: 1;
  width: calc(100% / var(--piano-white-key-count));
  height: 100%;
  color: var(--piano-white-key-text-color);
  background: var(--piano-white-key-color);
  border: 0;
  border-right: 1px solid var(--piano-white-key-border-color);
  box-shadow: none;
  transition: background-color 0.12s ease;
}

.piano-keyboard__key--white:first-child {
  border-left: 0;
}

.piano-keyboard__key--black {
  left: calc(
    var(--white-before) * 100% / var(--piano-white-key-count) -
    (100% / var(--piano-white-key-count) * 0.31)
  );
  z-index: 2;
  width: calc(100% / var(--piano-white-key-count) * 0.62);
  height: 62%;
  background-color: var(--piano-black-key-color);
  background-image: linear-gradient(
    to bottom,
    var(--piano-black-key-gradient-start) 0%,
    var(--piano-black-key-color) 76%,
    var(--piano-black-key-gradient-end) 100%
  );
  border: 1px solid var(--piano-black-key-border-color);
  box-shadow: 0 3px 4px var(--piano-black-key-shadow);
  transition: none;
}

.piano-keyboard__key--white:hover {
  background-color: var(--piano-white-key-hover-color);
}

.piano-keyboard__key--black:hover {
  background-color: var(--piano-black-key-hover-color);
  background-image: none;
}

.piano-keyboard__key.is-active-system {
  background: var(--piano-system-active-color);
  box-shadow: inset 0 0 0 2px var(--piano-active-shadow);
}

.piano-keyboard__key--white.is-active-system,
.piano-keyboard__key--white.is-active-system:hover {
  background: var(--piano-system-active-color);
  box-shadow: none;
}

.piano-keyboard__key--black.is-active-system,
.piano-keyboard__key--black.is-active-system:hover {
  background-color: var(--piano-system-active-black-color);
  background-image: none;
}

.piano-keyboard__key.is-active-user {
  background: var(--piano-user-active-color);
  box-shadow: inset 0 0 0 2px var(--piano-active-shadow);
}

.piano-keyboard__key--white.is-active-user,
.piano-keyboard__key--white.is-active-user:hover {
  background: var(--piano-user-active-color);
  box-shadow: none;
}

.piano-keyboard__key--black.is-active-user,
.piano-keyboard__key--black.is-active-user:hover {
  background-color: var(--piano-user-active-black-color);
  background-image: none;
}

.piano-keyboard__label {
  position: absolute;
  right: 0;
  bottom: 5px;
  left: 0;
  overflow: hidden;
  color: var(--piano-label-color);
  font: 500 clamp(7px, 0.65vw, 11px)/1 Roboto, Arial, sans-serif;
  text-align: center;
  pointer-events: none;
}

@media (max-width: 700px) {
  .piano-keyboard__keys {
    min-height: 82px;
  }

  .piano-keyboard__label {
    display: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .piano-keyboard__key {
    transition: none;
  }
}
