/**
 * Loading States - Quick Win #3
 * Provides visual feedback during async operations
 */

/* Loading Indicator Base */
.loading-indicator {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    padding: var(--spacing-xs) var(--spacing-sm);
    font-size: 0.875rem;
    color: var(--color-info);
    font-family: 'Roboto Mono', monospace;

/* Spinner Animation */
.loading-spinner {
    width: var(--spacing-md);
    height: var(--spacing-md);
    border: 2px solid rgba(74, 144, 226, 0.3);
    border-top-color: var(--color-info);
    border-radius: var(--radius-full);
    animation: spin 0.8s linear infinite;

@keyframes spin {
    to { transform: rotate(360deg); }

/* Loading Overlay */
.loading-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(var(--color-bg-primary-rgb, 26, 26, 26), 0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
    border-radius: inherit;

/* Button Loading State */
button.loading,
.action-btn.loading,
.roll-btn.loading {
    position: relative;
    color: transparent;
    pointer-events: none;
    opacity: 0.7;

button.loading::after,
.action-btn.loading::after,
.roll-btn.loading::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: var(--spacing-md);
    height: var(--spacing-md);
    margin: -var(--spacing-sm) 0 0 -var(--spacing-sm);
    border: 2px solid rgba(var(--color-text-primary-rgb, 224, 224, 224), 0.3);
    border-top-color: var(--color-text-primary);
    border-radius: var(--radius-full);
    animation: spin 0.8s linear infinite;

/* Input Loading State */
input.loading,
select.loading {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%234a90e2' d='M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z' opacity='.25'/%3E%3Cpath fill='%234a90e2' d='M12,4a8,8,0,0,1,7.89,6.7A1.53,1.53,0,0,0,21.38,12h0a1.5,1.5,0,0,0,1.48-1.75,11,11,0,0,0-21.72,0A1.5,1.5,0,0,0,2.62,12h0a1.53,1.53,0,0,0,1.49-1.3A8,8,0,0,1,12,4Z'%3E%3CanimateTransform attributeName='transform' dur='0.75s' repeatCount='indefinite' type='rotate' values='0 12 12;360 12 12'/%3E%3C/path%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 8px center;
    padding-right: var(--spacing-2xl);

/* Loading Text */
.loading-text {
    display: inline-flex;
    align-items: center;
    gap: var(--spacing-sm);
    color: var(--color-info);
    font-size: 0.875rem;

/* Pulse Animation for Loading Elements */
@keyframes pulse {
    0%, 100% {
        opacity: 1;

    50% {
        opacity: 0.5;

.loading-pulse {
    animation: pulse 1.5s ease-in-out infinite;

/* Skeleton Loading (for content placeholders) */
.skeleton {
    background: linear-gradient(90deg, rgba(74, 144, 226, 0.1) 25%, rgba(74, 144, 226, 0.2) 50%, rgba(74, 144, 226, 0.1) 75%);
    background-size: 200% 100%;
    animation: skeleton-loading 1.5s ease-in-out infinite;
    border-radius: var(--radius-md);

@keyframes skeleton-loading {
    0% {
        background-position: 200% 0;

    100% {
        background-position: -200% 0;

/* Loading State for Game Log */
.game-log.loading {
    position: relative;

.game-log.loading::after {
    content: 'Loading...';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: var(--color-info);
    font-size: 0.875rem;

/* Disable interactions during loading */
.loading-disabled {
    pointer-events: none;
    opacity: 0.6;
    cursor: not-allowed;

/* Success/Error States */
.loading-success {
    color: var(--color-success);

.loading-error {
    color: var(--color-failure);

/* Loading Progress Bar */
.loading-progress {
    width: 100%;
    height: var(--spacing-sm);
    background: rgba(74, 144, 226, 0.2);
    border-radius: var(--radius-sm);
    overflow: hidden;
    position: relative;

.loading-progress::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 30%;
    background: var(--color-info);
    animation: progress-loading 1.5s ease-in-out infinite;

@keyframes progress-loading {
    0% {
        left: -30%;

    100% {
        left: 100%;

}}}}}}}}}}}}}}}}}}}}}}}}}}