/* ========================================================================== ProgressCircle - Circular progress indicator ========================================================================== */ /* Base styles */ .progress-circle { @apply inline-flex items-center justify-center; /* Default color token (accent) */ --progress-circle-stroke: var(--accent); --progress-circle-track-stroke: var(--default); .progress-circle__track { /* Default size (matches --md) */ @apply size-7; } .progress-circle__track-circle { stroke: var(--progress-circle-track-stroke); } .progress-circle__fill-circle { stroke: var(--progress-circle-stroke); /** * Transitions * CRITICAL: motion-reduce must be AFTER transition for correct override specificity */ transition: stroke-dashoffset 300ms var(--ease-out); @apply motion-reduce:transition-none; } /* Indeterminate state - when no aria-valuenow is set */ &:not([aria-valuenow]) { .progress-circle__track { animation: progress-circle-spin 1s linear infinite; @apply motion-reduce:animate-none; } } /* Disabled state */ &:disabled, &[data-disabled="true"], &[aria-disabled="true"] { @apply status-disabled; } } /* ========================================================================== Indeterminate animation ========================================================================== */ @keyframes progress-circle-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* ========================================================================== Size variants ========================================================================== */ .progress-circle--sm { .progress-circle__track { @apply size-5; } } .progress-circle--md { /* No styles as this is the default size */ } .progress-circle--lg { .progress-circle__track { @apply size-9; } } /* ========================================================================== Color variants ========================================================================== */ .progress-circle--default { --progress-circle-stroke: var(--default-foreground); } .progress-circle--accent { --progress-circle-stroke: var(--accent); } .progress-circle--success { --progress-circle-stroke: var(--success); } .progress-circle--warning { --progress-circle-stroke: var(--warning); } .progress-circle--danger { --progress-circle-stroke: var(--danger); }