.ccl-switch {
  /* Default compact sizing (sm) */
  --ccl-switch-w: 2rem;
  --ccl-switch-h: 1rem;
  --ccl-switch-knob: 0.75rem;
  --ccl-switch-pad: 0.125rem;

  display: inline-flex;
  align-items: center;
  gap: 0.75rem;
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--color-text, #212529);
  cursor: pointer;
  user-select: none;
}

.ccl-switch--sm {
  --ccl-switch-w: 2rem;
  --ccl-switch-h: 1rem;
  --ccl-switch-knob: 0.75rem;
  --ccl-switch-pad: 0.125rem;
}

.ccl-switch--md {
  --ccl-switch-w: 2.5rem;
  --ccl-switch-h: 1.25rem;
  --ccl-switch-knob: 0.95rem;
  --ccl-switch-pad: 0.15rem;
}

.ccl-switch--lg {
  --ccl-switch-w: 3rem;
  --ccl-switch-h: 1.5rem;
  --ccl-switch-knob: 1.15rem;
  --ccl-switch-pad: 0.175rem;
}

.ccl-switch--end {
  flex-direction: row-reverse;
}

.ccl-switch__control {
  width: var(--ccl-switch-w);
  height: var(--ccl-switch-h);
  border-radius: 999px;
  appearance: none;
  background: #ced4da;
  position: relative;
  cursor: pointer;
  flex-shrink: 0;
  transition: background 0.15s ease;
}

.ccl-switch__control::before {
  content: '';
  position: absolute;
  width: var(--ccl-switch-knob);
  height: var(--ccl-switch-knob);
  border-radius: 50%;
  background: #fff;
  top: var(--ccl-switch-pad);
  left: var(--ccl-switch-pad);
  transition: transform 0.15s ease;
  box-shadow: 0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.2);
}

.ccl-switch__control:checked {
  background: var(--color-primary-500, #0d6efd);
}

.ccl-switch__control:checked::before {
  transform: translateX(calc(var(--ccl-switch-w) - var(--ccl-switch-knob) - (var(--ccl-switch-pad) * 2)));
}

.ccl-switch__control:focus-visible {
  outline: 0;
  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
}

.ccl-switch--disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

.ccl-switch--disabled .ccl-switch__control {
  cursor: not-allowed;
}

.ccl-switch__required {
  color: var(--color-error-500, #dc3545);
  margin-left: var(--spacing-xs, 0.25rem);
  font-weight: bold;
}

