/* ==========================================================================
   ProgressBar - Shows determinate or indeterminate progress
   ========================================================================== */

/* Base styles */
.progress-bar {
  @apply grid w-full gap-1;
  grid-template-areas:
    "label output"
    "track track";
  grid-template-columns: 1fr auto;

  /* Default color token (accent) */
  --progress-bar-fill: var(--accent);

  [data-slot="label"] {
    @apply w-fit text-sm font-medium;

    grid-area: label;
  }

  .progress-bar__output {
    @apply text-sm font-medium tabular-nums;

    grid-area: output;
  }

  .progress-bar__track {
    @apply relative overflow-hidden rounded-sm bg-default;

    grid-area: track;

    /* Default height (matches --md) */
    @apply h-2;
  }

  .progress-bar__fill {
    @apply absolute start-0 top-0 h-full rounded-sm;

    background-color: var(--progress-bar-fill);

    /**
     * Transitions
     * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
     */
    transition: width 300ms var(--ease-out);
    @apply motion-reduce:transition-none;
  }

  /* Indeterminate state - when no aria-valuenow is set */
  &:not([aria-valuenow]) {
    .progress-bar__fill {
      @apply w-2/5;

      animation: progress-bar-indeterminate 1.5s cubic-bezier(0.65, 0, 0.35, 1) infinite;

      @apply motion-reduce:animate-none;
    }
  }

  /* Disabled state */
  &:disabled,
  &[data-disabled="true"],
  &[aria-disabled="true"] {
    @apply status-disabled;

    [data-slot="label"] {
      @apply opacity-100;
    }
  }
}

/* ==========================================================================
   Indeterminate animation
   ========================================================================== */

@keyframes progress-bar-indeterminate {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(350%);
  }
}

/* ==========================================================================
   Size variants
   ========================================================================== */

.progress-bar--sm {
  .progress-bar__track {
    @apply h-1 rounded-xs;
  }

  .progress-bar__fill {
    @apply rounded-xs;
  }
}

.progress-bar--md {
  /* No styles as this is the default size */
}

.progress-bar--lg {
  .progress-bar__track {
    @apply h-3 rounded-md;
  }

  .progress-bar__fill {
    @apply rounded-md;
  }
}

/* ==========================================================================
   Color variants
   ========================================================================== */

.progress-bar--default {
  --progress-bar-fill: var(--default-foreground);
}

.progress-bar--accent {
  --progress-bar-fill: var(--accent);
}

.progress-bar--success {
  --progress-bar-fill: var(--success);
}

.progress-bar--warning {
  --progress-bar-fill: var(--warning);
}

.progress-bar--danger {
  --progress-bar-fill: var(--danger);
}
