/* Shared Virtual Keyboard — can be plugged into TapeType & TapeIdle */

.vkWrap{
  margin-top: 12px;
  padding: 10px 10px 12px;
  border-radius: 18px;
  border: 1px solid var(--stroke);
  background: color-mix(in srgb, var(--panel2) 76%, var(--a2));
  box-shadow: 0 10px 26px rgba(0,0,0,.10);
  overflow-x: auto;

  /* scale (set by app via --vkScale) */
  --_vk: var(--vkScale, 1);
}

.vkTitle{
  font-size: 12px;
  font-weight: 950;
  letter-spacing: .02em;
  margin-bottom: 8px;
}

.vk{
  display: flex;
  flex-direction: column;
  gap: calc(8px * var(--_vk));
  min-width: calc(760px * var(--_vk)); /* keeps the keyboard shape on desktop, scrolls on small screens */
}

.vkRow{
  display: flex;
  gap: calc(8px * var(--_vk));
  justify-content: center;
}

.vkKey{
  --w: 1;
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: calc(38px * var(--_vk));
  min-width: calc(34px * var(--_vk));
  padding: 0 calc(10px * var(--_vk));
  border-radius: calc(12px * var(--_vk));
  border: 1px solid var(--stroke);
  background: color-mix(in srgb, var(--panel2) 76%, var(--a2));
  font-weight: 980;
  letter-spacing: .02em;
  user-select: none;
  flex: var(--w) 1 0;
  box-shadow: 0 10px 26px rgba(0,0,0,.10);
  transition: transform 120ms ease, background 120ms ease, border-color 120ms ease, box-shadow 120ms ease;
}

.vkKey .vkAlt{
  position: absolute;
  top: calc(6px * var(--_vk));
  left: calc(8px * var(--_vk));
  font-size: calc(10px * var(--_vk));
  font-weight: 900;
  color: var(--muted);
  opacity: .95;
}

.vkKey .vkMain{
  font-size: calc(14px * var(--_vk));
  line-height: 1;
}

/* next key (blue-ish) */
.vkKey.is-next{
  border-color: color-mix(in srgb, var(--a2) 72%, var(--stroke));
  background: color-mix(in srgb, var(--a2) 22%, var(--panel2));
  box-shadow: 0 0 0 calc(4px * var(--_vk)) color-mix(in srgb, var(--a2) 22%, transparent), 0 10px 26px rgba(0,0,0,.10);
  transform: translateY(calc(-1px * var(--_vk)));
}

/* current target key (yellow) */
.vkKey.is-target{
  border-color: color-mix(in srgb, var(--warn) 78%, var(--stroke));
  box-shadow: 0 0 0 calc(4px * var(--_vk)) color-mix(in srgb, var(--warn) 26%, transparent), 0 10px 26px rgba(0,0,0,.10);
  background: color-mix(in srgb, var(--warn) 38%, var(--panel2));
  transform: translateY(calc(-1px * var(--_vk)));
}

/* helper (shift) */
.vkKey.is-helper{
  border-color: color-mix(in srgb, var(--a1) 55%, var(--stroke));
  box-shadow: 0 0 0 calc(4px * var(--_vk)) color-mix(in srgb, var(--a1) 12%, transparent), 0 10px 26px rgba(0,0,0,.10);
}

/* press */
.vkKey.is-down{
  transform: translateY(calc(1px * var(--_vk))) scale(.99);
  background: color-mix(in srgb, var(--a2) 36%, var(--panel2));
}

/* correctness flash */
.vkKey.is-ok{
  border-color: color-mix(in srgb, var(--ok) 74%, var(--stroke));
  background: color-mix(in srgb, var(--ok) 28%, var(--panel2));
}
.vkKey.is-bad{
  border-color: color-mix(in srgb, var(--bad) 74%, var(--stroke));
  background: color-mix(in srgb, var(--bad) 28%, var(--panel2));
}

.vkKey.is-hit{ animation: vkHit 160ms ease; }
@keyframes vkHit{
  0%{ transform: translateY(0) scale(1); }
  45%{ transform: translateY(calc(-1px * var(--_vk))) scale(1.03); }
  100%{ transform: translateY(0) scale(1); }
}

@media (max-width: 520px){
  .vk{ min-width: calc(700px * var(--_vk)); }
  .vkKey{ height: calc(36px * var(--_vk)); }
}
