/* ===== UAAS Glass Button System v2.1 ===== */
/* Frost | Crystalline | Sharp Blur | Soft Glow | Hollow Edge */
/* Uses design tokens from _vars.css with CSS variable composition */

/* ===== BASE BUTTON ===== */
.btn {
    /* Layout */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--_gap, var(--btn-md-gap));
    padding-block: var(--btn-padding-y);
    padding-inline: var(--btn-padding-x);
    box-sizing: border-box;

    /* Typography */
    font-family: var(--btn-font);
    font-size: var(--btn-font-size);
    font-weight: var(--btn-font-weight);
    font-variation-settings: 'wght' 500, 'wdth' 100;
    line-height: var(--btn-line-height);
    letter-spacing: var(--btn-letter-spacing);
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    color: var(--btn-text);

    /* Glass surface */
    background: var(--btn-bg);
    backdrop-filter: var(--btn-blur);
    -webkit-backdrop-filter: var(--btn-blur);
    border: 1px solid var(--btn-border);
    border-radius: var(--btn-radius);

    /* Crystalline edge: sharp highlight + internal thin border */
    box-shadow:
        var(--btn-shadow),
        inset 0 1px 0 0 rgba(255,255,255,0.1),
        inset 0 0 0 1px rgba(255,255,255,0.03);

    /* Interaction */
    cursor: pointer;
    outline: none;
    text-decoration: none;
    white-space: nowrap;
    position: relative;
    overflow: hidden;
    transition: var(--btn-transition);

    /* Scoped variables */
    --_icon-size: var(--btn-md-icon-size);
    --_gap: var(--btn-md-gap);
    --_focus-color: rgba(255, 255, 255, 0.5);
}

/* Text optical centering - only for buttons with text */
.btn:not(.btn-icon) {
    padding-block: var(--btn-padding-y) calc(var(--btn-padding-y) + var(--btn-padding-y-offset));
}

/* Icon sizing - uses scoped variable */
.btn svg,
.btn img.btn-icon-img {
    width: var(--_icon-size);
    height: var(--_icon-size);
    flex-shrink: 0;
    transition: transform var(--duration-base) ease;
}

.btn:hover svg { transform: scale(1.05); }

/* Hover shimmer layer */
.btn::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    opacity: 0;
    background: linear-gradient(
        135deg,
        rgba(255,255,255,0.25) 0%,
        rgba(255,255,255,0.08) 25%,
        transparent 50%
    );
    transition: opacity var(--duration-slow) ease;
}

/* Bottom glow layer */
.btn::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    opacity: 0;
    background: linear-gradient(to top, rgba(255,255,255,0.1) 0%, transparent 40%);
    transition: opacity var(--duration-slow) ease;
}

/* ===== STATES ===== */
.btn:hover {
    background: var(--btn-bg-hover);
    border-color: var(--btn-border-hover);
    box-shadow:
        var(--btn-shadow-hover),
        inset 0 1px 0 0 rgba(255,255,255,0.15),
        inset 0 0 0 1px rgba(255,255,255,0.05);
    transform: translateY(-1px);
}

.btn:hover::before,
.btn:hover::after { opacity: 1; }

.btn:active {
    background: var(--btn-bg-active);
    border-color: var(--btn-border);
    box-shadow:
        var(--btn-shadow-active),
        inset 0 2px 4px rgba(0,0,0,0.12);
    transform: translateY(0);
}

/* Focus ring uses variant color */
.btn:focus-visible {
    outline: 2px solid var(--_focus-color);
    outline-offset: 2px;
}

/* Improved disabled state */
.btn:disabled,
.btn.disabled {
    opacity: 0.4;
    cursor: not-allowed;
    transform: none;
    filter: grayscale(30%);
}

.btn:disabled:hover,
.btn.disabled:hover {
    background: var(--btn-bg);
    border-color: var(--btn-border);
    box-shadow: var(--btn-shadow);
    transform: none;
}

.btn:disabled::before,
.btn:disabled::after,
.btn.disabled::before,
.btn.disabled::after {
    display: none;
}

/* ===== SIZE VARIANTS ===== */
.btn-xs {
    padding-inline: var(--btn-xs-padding-x);
    font-size: var(--btn-xs-font-size);
    border-radius: var(--btn-xs-radius);
    --_gap: var(--btn-xs-gap);
    --_icon-size: var(--btn-xs-icon-size);
}
.btn-xs:not(.btn-icon) {
    padding-block: var(--btn-xs-padding-y) calc(var(--btn-xs-padding-y) + var(--btn-padding-y-offset));
}

.btn-sm {
    padding-inline: var(--btn-sm-padding-x);
    font-size: var(--btn-sm-font-size);
    border-radius: var(--btn-sm-radius);
    --_gap: var(--btn-sm-gap);
    --_icon-size: var(--btn-sm-icon-size);
}
.btn-sm:not(.btn-icon) {
    padding-block: var(--btn-sm-padding-y) calc(var(--btn-sm-padding-y) + var(--btn-padding-y-offset));
}

.btn-lg {
    padding-inline: var(--btn-lg-padding-x);
    font-size: var(--btn-lg-font-size);
    border-radius: var(--btn-lg-radius);
    --_gap: var(--btn-lg-gap);
    --_icon-size: var(--btn-lg-icon-size);
}
.btn-lg:not(.btn-icon) {
    padding-block: var(--btn-lg-padding-y) calc(var(--btn-lg-padding-y) + var(--btn-padding-y-offset));
}

.btn-xl {
    padding-inline: var(--btn-xl-padding-x);
    font-size: var(--btn-xl-font-size);
    border-radius: var(--btn-xl-radius);
    --_gap: var(--btn-xl-gap);
    --_icon-size: var(--btn-xl-icon-size);
}
.btn-xl:not(.btn-icon) {
    padding-block: var(--btn-xl-padding-y) calc(var(--btn-xl-padding-y) + var(--btn-padding-y-offset));
}

/* ===== BORDER RADIUS ===== */
.btn-round-none { border-radius: 0; }
.btn-round-xs { border-radius: var(--radius-sm); }
.btn-round-sm { border-radius: var(--btn-radius); }
.btn-round-md { border-radius: var(--radius-lg); }
.btn-round-lg { border-radius: var(--radius-xl); }
.btn-round-full { border-radius: var(--radius-full); }

/* ===== SHAPE VARIANTS ===== */
.btn-icon {
    padding: var(--btn-icon-padding);
    aspect-ratio: 1;
    --_gap: 0;
}
.btn-icon.btn-xs { padding: var(--btn-icon-padding-xs); }
.btn-icon.btn-sm { padding: var(--btn-icon-padding-sm); }
.btn-icon.btn-lg { padding: var(--btn-icon-padding-lg); }
.btn-icon.btn-xl { padding: var(--btn-icon-padding-xl); }
.btn-wide { padding-inline: 32px; }
.btn-block { display: flex; width: 100%; }

/* ===== GHOST ===== */
.btn-ghost {
    background: transparent;
    border-color: transparent;
    box-shadow: none;
    color: var(--color-text-muted);
}
.btn-ghost::before,
.btn-ghost::after { display: none; }
.btn-ghost:hover {
    background: var(--glass-surface);
    border-color: var(--glass-border);
    box-shadow: none;
    color: var(--color-text);
    transform: none;
}
.btn-ghost:active { background: rgba(255,255,255,0.03); }

/* ===== COLOR VARIANT TEMPLATE (CSS Variable Composition) ===== */

/* Shared glass variant logic - simplified 2-layer shadow */
.btn-brand,
.btn-primary,
.btn-success,
.btn-danger,
.btn-warning,
.btn-accent,
.btn-info,
.btn-secondary {
    background: linear-gradient(135deg,
        rgba(var(--_v-rgb), 0.2) 0%,
        rgba(var(--_v-rgb), 0.08) 50%,
        rgba(var(--_v-rgb), 0.15) 100%);
    border-color: rgba(var(--_v-rgb), 0.4);
    color: var(--_v-text);
    box-shadow:
        0 0 16px rgba(var(--_v-rgb), var(--btn-glow)),
        0 2px 8px rgba(0,0,0,0.2),
        inset 0 1px 0 0 rgba(var(--_v-highlight-rgb, var(--_v-rgb)), 0.2),
        inset 0 0 0 1px rgba(var(--_v-rgb), 0.15);
    --_focus-color: var(--_v-focus, rgba(var(--_v-rgb), 0.6));
}

.btn-brand::before,
.btn-primary::before,
.btn-success::before,
.btn-danger::before,
.btn-warning::before,
.btn-accent::before,
.btn-info::before,
.btn-secondary::before {
    background: linear-gradient(135deg, rgba(var(--_v-highlight-rgb, var(--_v-rgb)), 0.35) 0%, rgba(var(--_v-rgb), 0.1) 30%, transparent 60%);
}

.btn-brand::after,
.btn-primary::after,
.btn-success::after,
.btn-danger::after,
.btn-warning::after,
.btn-accent::after,
.btn-info::after,
.btn-secondary::after {
    background: linear-gradient(to top, rgba(var(--_v-rgb), 0.2) 0%, transparent 50%);
}

.btn-brand:hover,
.btn-primary:hover,
.btn-success:hover,
.btn-danger:hover,
.btn-warning:hover,
.btn-accent:hover,
.btn-info:hover,
.btn-secondary:hover {
    background: linear-gradient(135deg,
        rgba(var(--_v-rgb), 0.28) 0%,
        rgba(var(--_v-rgb), 0.1) 50%,
        rgba(var(--_v-rgb), 0.22) 100%);
    border-color: rgba(var(--_v-rgb), 0.7);
    box-shadow:
        0 0 24px rgba(var(--_v-rgb), var(--btn-glow-hover)),
        0 4px 12px rgba(0,0,0,0.25),
        inset 0 1px 0 0 rgba(var(--_v-highlight-rgb, var(--_v-rgb)), 0.3),
        inset 0 0 0 1px rgba(var(--_v-rgb), 0.2);
    color: var(--_v-text-hover);
}

.btn-brand:active,
.btn-primary:active,
.btn-success:active,
.btn-danger:active,
.btn-warning:active,
.btn-accent:active,
.btn-info:active,
.btn-secondary:active {
    background: linear-gradient(135deg,
        rgba(var(--_v-rgb), 0.15) 0%,
        rgba(var(--_v-rgb), 0.05) 50%,
        rgba(var(--_v-rgb), 0.1) 100%);
    box-shadow:
        0 0 8px rgba(var(--_v-rgb), 0.1),
        inset 0 2px 4px rgba(0,0,0,0.15);
}

/* ===== VARIANT DEFINITIONS ===== */

/* Brand (UA Red) - for brand CTAs */
.btn-brand {
    --_v-rgb: var(--btn-brand-rgb);
    --_v-highlight-rgb: var(--btn-brand-highlight-rgb);
    --_v-text: var(--btn-brand-light);
    --_v-text-hover: var(--btn-brand-lighter);
}

/* Primary (Blue) */
.btn-primary {
    --_v-rgb: var(--btn-primary-rgb);
    --_v-highlight-rgb: var(--btn-primary-highlight-rgb);
    --_v-text: var(--btn-primary-light);
    --_v-text-hover: var(--btn-primary-lighter);
}

/* Success (Green) */
.btn-success {
    --_v-rgb: var(--btn-success-rgb);
    --_v-highlight-rgb: var(--btn-success-highlight-rgb);
    --_v-text: var(--btn-success-light);
    --_v-text-hover: var(--btn-success-lighter);
}

/* Danger (Red) */
.btn-danger {
    --_v-rgb: var(--btn-danger-rgb);
    --_v-highlight-rgb: var(--btn-danger-highlight-rgb);
    --_v-text: var(--btn-danger-light);
    --_v-text-hover: var(--btn-danger-lighter);
}

/* Warning (Amber) - darker focus for contrast */
.btn-warning {
    --_v-rgb: var(--btn-warning-rgb);
    --_v-highlight-rgb: var(--btn-warning-highlight-rgb);
    --_v-text: var(--btn-warning-light);
    --_v-text-hover: var(--btn-warning-lighter);
    --_v-focus: rgba(180, 120, 0, 0.7); /* Darker amber for better contrast */
}

/* Accent (Purple) */
.btn-accent {
    --_v-rgb: var(--btn-accent-rgb);
    --_v-highlight-rgb: var(--btn-accent-highlight-rgb);
    --_v-text: var(--btn-accent-light);
    --_v-text-hover: var(--btn-accent-lighter);
}

/* Info (Cyan) */
.btn-info {
    --_v-rgb: var(--btn-info-rgb);
    --_v-highlight-rgb: var(--btn-info-highlight-rgb);
    --_v-text: var(--btn-info-light);
    --_v-text-hover: var(--btn-info-lighter);
}

/* Secondary (Gray) - unified with template */
.btn-secondary {
    --_v-rgb: var(--btn-secondary-rgb);
    --_v-highlight-rgb: 150, 150, 150;
    --_v-text: var(--color-text-muted);
    --_v-text-hover: var(--color-text);
    --_v-focus: rgba(150, 150, 150, 0.5);
}

/* ===== LIGHT (Inverse for dark backgrounds) ===== */
.btn-light {
    --_v-rgb: var(--btn-light-rgb);
    background: rgba(255, 255, 255, 0.9);
    border-color: rgba(255, 255, 255, 0.95);
    color: var(--btn-light-text);
    box-shadow:
        0 0 16px rgba(255, 255, 255, 0.15),
        0 2px 8px rgba(0,0,0,0.1);
    --_focus-color: rgba(255, 255, 255, 0.8);
}
.btn-light::before,
.btn-light::after { display: none; }
.btn-light:hover {
    background: rgba(255, 255, 255, 1);
    border-color: rgba(255, 255, 255, 1);
    color: var(--btn-light-text-hover);
    box-shadow:
        0 0 24px rgba(255, 255, 255, 0.25),
        0 4px 12px rgba(0,0,0,0.15);
}
.btn-light:active {
    background: rgba(240, 240, 240, 1);
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}

/* ===== OUTLINE ===== */
.btn-outline {
    background: transparent;
    border-color: var(--btn-border-hover);
    box-shadow: none;
    --_focus-color: rgba(255, 255, 255, 0.5);
}
.btn-outline::before,
.btn-outline::after { display: none; }
.btn-outline:hover {
    background: var(--glass-surface);
    border-color: rgba(255,255,255,0.4);
    box-shadow: none;
}
.btn-outline:active {
    background: rgba(255,255,255,0.03);
}

/* ===== DANGER GHOST ===== */
.btn-danger-ghost {
    background: transparent;
    border-color: transparent;
    box-shadow: none;
    color: var(--btn-danger-light);
    --_focus-color: rgba(var(--btn-danger-rgb), 0.5);
}
.btn-danger-ghost::before,
.btn-danger-ghost::after { display: none; }
.btn-danger-ghost:hover {
    background: rgba(var(--btn-danger-rgb), 0.1);
    border-color: rgba(var(--btn-danger-rgb), 0.3);
    color: var(--btn-danger-lighter);
}
.btn-danger-ghost:active {
    background: rgba(var(--btn-danger-rgb), 0.05);
}

/* ===== BUTTON GROUPS ===== */
.btn-group { display: inline-flex; }
.btn-group .btn { border-radius: 0; margin-left: -1px; }
.btn-group .btn:first-child { border-radius: var(--btn-radius) 0 0 var(--btn-radius); margin-left: 0; }
.btn-group .btn:last-child { border-radius: 0 var(--btn-radius) var(--btn-radius) 0; }
.btn-group .btn:only-child { border-radius: var(--btn-radius); }
.btn-group .btn.active {
    --_v-rgb: var(--btn-primary-rgb);
    background: linear-gradient(135deg, rgba(var(--_v-rgb), 0.2) 0%, rgba(var(--_v-rgb), 0.08) 50%, rgba(var(--_v-rgb), 0.15) 100%);
    border-color: rgba(var(--_v-rgb), 0.4);
    color: var(--btn-primary-light);
    z-index: 1;
}

/* ===== LOADING ===== */
.btn-loading {
    position: relative;
    color: transparent !important;
}
.btn-loading * { visibility: hidden; }

/* Spinner - perfectly centered, uses variant color */
.btn-loading::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: var(--_icon-size);
    height: var(--_icon-size);
    border: 2px solid rgba(var(--_v-rgb, 255, 255, 255), 0.25);
    border-top-color: rgba(var(--_v-rgb, 255, 255, 255), 0.9);
    border-radius: 50%;
    animation: btn-spin 0.6s linear infinite;
    visibility: visible;
}

@keyframes btn-spin { to { transform: translate(-50%, -50%) rotate(360deg); } }

/* ===== CLOSE BUTTON ===== */
.btn-close {
    padding: 0;
    width: 28px;
    height: 28px;
    border-radius: var(--radius-sm);
    font-size: 18px;
    line-height: 1;
    color: var(--color-text-muted);
    background: transparent;
    border: none;
    box-shadow: none;
    --_focus-color: rgba(255, 255, 255, 0.4);
}
.btn-close::before,
.btn-close::after { display: none; }
.btn-close:hover {
    background: rgba(255,255,255,0.1);
    color: var(--color-text);
    transform: none;
}
.btn-close:active {
    background: rgba(255,255,255,0.05);
}

/* ===== SHIMMER ANIMATION ===== */
/* Uses mask to preserve glass gradient underneath */
@keyframes btn-shimmer {
    0% { mask-position: -200% center; -webkit-mask-position: -200% center; }
    100% { mask-position: 200% center; -webkit-mask-position: 200% center; }
}

.btn-shimmer::before {
    opacity: 1;
    background: linear-gradient(
        90deg,
        transparent 0%,
        rgba(255, 255, 255, 0.4) 50%,
        transparent 100%
    );
    mask: linear-gradient(90deg, transparent, white, transparent);
    -webkit-mask: linear-gradient(90deg, transparent, white, transparent);
    mask-size: 200% 100%;
    -webkit-mask-size: 200% 100%;
    animation: btn-shimmer 2s ease-in-out infinite;
}

/* ===== UTILITIES ===== */
.btn-text-left { justify-content: flex-start; text-align: left; }
.btn-text-right { justify-content: flex-end; text-align: right; }
