@layer components {
  .switch {
    position: relative;
    display: inline-flex;
    align-items: center;
    cursor: pointer;
  }

  .switch__track {
    --switch-width: 2.75rem;
    --switch-height: 1.5rem;
    --switch-knob: 1.25rem;
    --switch-travel: calc(var(--switch-width) - var(--switch-knob) - 4px);

    width: var(--switch-width);
    height: var(--switch-height);
    background-color: var(--color-gray-200);
    border-radius: var(--radius-full);
    transition: var(--default-transition-duration) var(--default-transition-timing-function);
    transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke;

    &::after {
      content: "";
      position: absolute;
      top: 2px;
      left: 2px;
      background-color: var(--color-white);
      border-radius: var(--radius-full);
      height: var(--switch-knob);
      width: var(--switch-knob);
      transition: var(--default-transition-duration) var(--default-transition-timing-function);
      transition-property: transform, translate, scale, rotate;
    }

    .switch__input:focus-visible ~ & {
      --focus-ring-color: var(--color-indigo-300);
      outline: var(--focus-ring);
      outline-offset: var(--focus-ring-offset);
    }

    .switch__input:checked ~ & {
      background-color: var(--color-indigo-600);
    }

    .switch__input:checked ~ &::after {
      translate: var(--switch-travel) 0;
    }
  }
}
