/**
 * Digiclose Button Component
 *
 * Centralized button styles for consistent UI across the application.
 * Based on: dashboard-design.zip (Final Design System)
 * CSS Variables: public/css/vars.css
 *
 * Button Types:
 * - .btn-primary    : Main CTA (Blue #2563EB) - use 1x per view
 * - .btn-secondary  : Alternative actions (Outline - white/gray)
 * - .btn-minimal    : Tertiary actions (Ghost/Text)
 * - .btn-danger     : Destructive actions (Red #D42626)
 * - .btn-success    : Positive confirmations (Green)
 * - .btn-warning    : Caution actions (Yellow)
 * - .btn-info       : Informational actions (Blue)
 *
 * Legacy Aliases (for backward compatibility):
 * - .btn-outline-theme          → .btn-secondary
 * - .btn-outline-theme-secondary → .btn-minimal
 * - .btn-yes                    → .btn-primary
 * - .btn-no                     → .btn-secondary
 *
 * Sizes: .btn-xs, .btn-sm, .btn-lg, .btn-xl
 * States: :hover, :active, :focus-visible, :disabled
 *
 * Updated: 2025-01-09
 */

/* ===========================================
   BASE BUTTON STYLES
   =========================================== */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    font-family: var(--theme-font-family);
    font-weight: 500;
    font-size: 0.875rem;
    line-height: 1.25rem;
    padding: 0.5rem 1rem;
    border-radius: var(--border-radius-md);
    border: 1px solid transparent;
    cursor: pointer;
    text-decoration: none;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
    white-space: nowrap;
    user-select: none;
}

.btn:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(var(--theme-interactive-rgb), 0.4);
}

.btn:disabled,
.btn.disabled {
    cursor: not-allowed;
    opacity: 0.65;
    pointer-events: none;
}

/* ===========================================
   PRIMARY BUTTON (Blue #2563EB)
   Main CTA - Use once per view
   Uses CSS variables from vars.css
   =========================================== */

.btn-primary {
    background-color: var(--theme-primary-btn-bg);
    color: var(--theme-primary-btn-color);
    border-color: var(--theme-primary-btn-border-color);
}

.btn-primary:hover {
    background-color: var(--theme-primary-btn-hover-bg);
    border-color: var(--theme-primary-btn-hover-border-color);
    color: var(--theme-primary-btn-hover-color);
}

.btn-primary:active {
    background-color: var(--theme-primary-btn-active-bg);
    border-color: var(--theme-primary-btn-active-border-color);
    color: var(--theme-primary-btn-active-color);
}

.btn-primary:disabled,
.btn-primary.disabled {
    background-color: var(--theme-primary-btn-disabled-bg);
    border-color: var(--theme-primary-btn-disabled-border-color);
    color: var(--theme-primary-btn-disabled-color);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   SECONDARY BUTTON (Outline)
   Alternative actions - Uses CSS variables
   =========================================== */

.btn-secondary,
.btn-outline-secondary {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-secondary:hover,
.btn-outline-secondary:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}

.btn-secondary:active,
.btn-outline-secondary:active {
    background-color: var(--theme-secondary-btn-active-bg);
    border-color: var(--theme-secondary-btn-active-border-color);
    color: var(--theme-secondary-btn-active-color);
}

.btn-secondary:disabled,
.btn-secondary.disabled,
.btn-outline-secondary:disabled,
.btn-outline-secondary.disabled {
    background-color: var(--theme-secondary-btn-disabled-bg);
    border-color: var(--theme-secondary-btn-disabled-border-color);
    color: var(--theme-secondary-btn-disabled-color);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   MINIMAL BUTTON (Ghost/Text)
   Tertiary actions, inline actions - Uses CSS variables
   =========================================== */

.btn-minimal,
.btn-ghost,
.btn-link {
    background-color: var(--theme-minimal-btn-bg);
    color: var(--theme-minimal-btn-color);
    border-color: var(--theme-minimal-btn-border-color);
}

.btn-minimal:hover,
.btn-ghost:hover {
    background-color: var(--theme-minimal-btn-hover-bg);
    border-color: var(--theme-minimal-btn-hover-border-color);
    color: var(--theme-minimal-btn-hover-color);
}

.btn-minimal:active,
.btn-ghost:active {
    background-color: var(--theme-minimal-btn-active-bg);
    border-color: var(--theme-minimal-btn-active-border-color);
    color: var(--theme-minimal-btn-active-color);
}

.btn-minimal:disabled,
.btn-minimal.disabled,
.btn-ghost:disabled,
.btn-ghost.disabled {
    background-color: var(--theme-minimal-btn-disabled-bg);
    border-color: var(--theme-minimal-btn-disabled-border-color);
    color: var(--theme-minimal-btn-disabled-color);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   ACCENT BUTTON (Deprecated - Use btn-danger instead)
   NOTE: Orange accent was removed from design system.
   btn-accent now aliases to the destructive/accent color.
   =========================================== */

.btn-accent {
    background-color: var(--theme-accent);
    color: #FFFFFF;
    border-color: var(--theme-accent);
}

.btn-accent:hover {
    background-color: var(--theme-accent-hover);
    border-color: var(--theme-accent-hover);
    color: #FFFFFF;
}

.btn-accent:active {
    background-color: var(--theme-accent-dark);
    border-color: var(--theme-accent-dark);
    color: #FFFFFF;
}

.btn-accent:disabled,
.btn-accent.disabled {
    background-color: var(--theme-accent-light);
    border-color: var(--theme-accent-light);
    color: #FFFFFF;
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   DANGER BUTTON (Red #D42626)
   Destructive actions: Delete, Remove - Uses CSS variables
   =========================================== */

.btn-danger {
    background-color: var(--theme-danger-btn-bg);
    color: var(--theme-danger-btn-color);
    border-color: var(--theme-danger-btn-border-color);
}

.btn-danger:hover {
    background-color: var(--theme-danger-btn-hover-bg);
    border-color: var(--theme-danger-btn-hover-border-color);
    color: var(--theme-danger-btn-hover-color);
}

.btn-danger:active {
    background-color: var(--theme-danger-btn-active-bg);
    border-color: var(--theme-danger-btn-active-border-color);
    color: var(--theme-danger-btn-active-color);
}

.btn-danger:disabled,
.btn-danger.disabled {
    background-color: var(--theme-danger-btn-disabled-bg);
    border-color: var(--theme-danger-btn-disabled-border-color);
    color: var(--theme-danger-btn-disabled-color);
}

/* Outline Danger */
.btn-outline-danger {
    background-color: transparent;
    color: var(--theme-accent);
    border-color: var(--theme-accent);
}

.btn-outline-danger:hover {
    background-color: var(--theme-accent);
    color: #FFFFFF;
    border-color: var(--theme-accent);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   SUCCESS BUTTON (Green)
   Positive confirmations - Uses CSS variables
   =========================================== */

.btn-success {
    background-color: var(--theme-success-btn-bg);
    color: var(--theme-success-btn-color);
    border-color: var(--theme-success-btn-border-color);
}

.btn-success:hover {
    background-color: var(--theme-success-btn-hover-bg);
    border-color: var(--theme-success-btn-hover-border-color);
    color: var(--theme-success-btn-hover-color);
}

.btn-success:active {
    background-color: var(--theme-success-btn-active-bg);
    border-color: var(--theme-success-btn-active-border-color);
    color: var(--theme-success-btn-active-color);
}

.btn-success:disabled,
.btn-success.disabled {
    background-color: var(--theme-success-btn-disabled-bg);
    border-color: var(--theme-success-btn-disabled-border-color);
    color: var(--theme-success-btn-disabled-color);
}

/* Outline Success */
.btn-outline-success {
    background-color: transparent;
    color: var(--theme-success);
    border-color: var(--theme-success);
}

.btn-outline-success:hover {
    background-color: var(--theme-success);
    color: #FFFFFF;
    border-color: var(--theme-success);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   WARNING BUTTON (Yellow/Amber)
   Caution actions - Uses CSS variables
   =========================================== */

.btn-warning {
    background-color: var(--theme-warning-btn-bg);
    color: var(--theme-warning-btn-color);
    border-color: var(--theme-warning-btn-border-color);
}

.btn-warning:hover {
    background-color: var(--theme-warning-btn-hover-bg);
    border-color: var(--theme-warning-btn-hover-border-color);
    color: var(--theme-warning-btn-hover-color);
}

.btn-warning:active {
    background-color: var(--theme-warning-btn-active-bg);
    border-color: var(--theme-warning-btn-active-border-color);
    color: var(--theme-warning-btn-active-color);
}

.btn-warning:disabled,
.btn-warning.disabled {
    background-color: var(--theme-warning-btn-disabled-bg);
    border-color: var(--theme-warning-btn-disabled-border-color);
    color: var(--theme-warning-btn-disabled-color);
}

/* Outline Warning */
.btn-outline-warning {
    background-color: transparent;
    color: var(--theme-warning);
    border-color: var(--theme-warning);
}

.btn-outline-warning:hover {
    background-color: var(--theme-warning);
    color: var(--theme-foreground);
    border-color: var(--theme-warning);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   INFO BUTTON (Blue)
   Informational actions - Uses CSS variables
   =========================================== */

.btn-info {
    background-color: var(--theme-info-btn-bg);
    color: var(--theme-info-btn-color);
    border-color: var(--theme-info-btn-border-color);
}

.btn-info:hover {
    background-color: var(--theme-info-btn-hover-bg);
    border-color: var(--theme-info-btn-hover-border-color);
    color: var(--theme-info-btn-hover-color);
}

.btn-info:active {
    background-color: var(--theme-info-btn-active-bg);
    border-color: var(--theme-info-btn-active-border-color);
    color: var(--theme-info-btn-active-color);
}

.btn-info:disabled,
.btn-info.disabled {
    background-color: var(--theme-info-btn-disabled-bg);
    border-color: var(--theme-info-btn-disabled-border-color);
    color: var(--theme-info-btn-disabled-color);
}

/* Outline Info */
.btn-outline-info {
    background-color: transparent;
    color: var(--theme-info);
    border-color: var(--theme-info);
}

.btn-outline-info:hover {
    background-color: var(--theme-info);
    color: #FFFFFF;
    border-color: var(--theme-info);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   OUTLINE PRIMARY (Charcoal Outline)
   Uses CSS variables
   =========================================== */

.btn-outline-primary {
    background-color: transparent;
    color: var(--theme-primary-btn-bg);
    border-color: var(--theme-primary-btn-bg);
}

.btn-outline-primary:hover {
    background-color: var(--theme-primary-btn-bg);
    color: var(--theme-primary-btn-color);
    border-color: var(--theme-primary-btn-bg);
}

.btn-outline-primary:active {
    background-color: var(--theme-primary-btn-active-bg);
    color: var(--theme-primary-btn-active-color);
    border-color: var(--theme-primary-btn-active-border-color);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   LIGHT BUTTON
   Uses CSS variables
   =========================================== */

.btn-light {
    background-color: var(--theme-subtle-background);
    color: var(--theme-foreground);
    border-color: var(--theme-border-color);
}

.btn-light:hover {
    background-color: var(--theme-dark-bg-subtle);
    border-color: var(--theme-border-color-strong);
    color: var(--theme-foreground);
}

/* Dark Mode - automatically handled by CSS variables in vars.css */

/* ===========================================
   BUTTON SIZES
   =========================================== */

.btn-xs {
    padding: 0.25rem 0.5rem;
    font-size: 0.75rem;
    line-height: 1rem;
    border-radius: var(--border-radius-sm);
}

.btn-sm {
    padding: 0.375rem 0.75rem;
    font-size: 0.8125rem;
    line-height: 1.125rem;
    border-radius: var(--border-radius);
}

.btn-lg {
    padding: 0.75rem 1.5rem;
    font-size: 1rem;
    line-height: 1.5rem;
    border-radius: var(--border-radius-lg);
}

.btn-xl {
    padding: 1rem 2rem;
    font-size: 1.125rem;
    line-height: 1.75rem;
    border-radius: var(--border-radius-lg);
}

/* ===========================================
   BUTTON VARIANTS
   =========================================== */

/* Block button - Full width */
.btn-block {
    display: flex;
    width: 100%;
}

/* Icon-only button */
.btn-icon {
    padding: 0.5rem;
    aspect-ratio: 1;
}

.btn-icon.btn-sm {
    padding: 0.375rem;
}

.btn-icon.btn-lg {
    padding: 0.75rem;
}

/* Rounded pill */
.btn.rounded-pill {
    border-radius: var(--border-radius-full);
}

/* ===========================================
   BUTTON GROUP
   =========================================== */

.btn-group {
    display: inline-flex;
}

.btn-group > .btn {
    border-radius: 0;
}

.btn-group > .btn:first-child {
    border-top-left-radius: var(--border-radius-md);
    border-bottom-left-radius: var(--border-radius-md);
}

.btn-group > .btn:last-child {
    border-top-right-radius: var(--border-radius-md);
    border-bottom-right-radius: var(--border-radius-md);
}

.btn-group > .btn:not(:first-child) {
    margin-left: -1px;
}

/* ===========================================
   CLOSE BUTTON
   =========================================== */

.btn-close {
    box-sizing: content-box;
    width: 1em;
    height: 1em;
    padding: 0.25em 0.25em;
    color: var(--theme-foreground);
    background: transparent var(--theme-btn-close-bg) center/1em auto no-repeat;
    border: 0;
    border-radius: 0.375rem;
    opacity: 0.5;
}

.btn-close:hover {
    opacity: 0.75;
}

.btn-close:focus {
    outline: 0;
    box-shadow: 0 0 0 0.25rem rgba(var(--theme-interactive-rgb), 0.25);
    opacity: 1;
}

/* Dark Mode - handled by --theme-btn-close-bg in vars.css */

/* ===========================================
   LOADING STATE
   =========================================== */

.btn.is-loading {
    position: relative;
    color: transparent !important;
    pointer-events: none;
}

.btn.is-loading::after {
    content: "";
    position: absolute;
    width: 1em;
    height: 1em;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    animation: btn-spinner 0.75s linear infinite;
}

.btn-primary.is-loading::after,
.btn-danger.is-loading::after,
.btn-success.is-loading::after,
.btn-info.is-loading::after,
.btn-accent.is-loading::after {
    border-color: var(--theme-primary-btn-color);
    border-right-color: transparent;
}

@keyframes btn-spinner {
    to {
        transform: rotate(360deg);
    }
}

/* ===========================================
   LEGACY BUTTON ALIASES
   For backward compatibility with existing templates
   These classes were found undefined in the codebase.
   =========================================== */

/* Theme buttons - map to secondary/primary */
.btn-outline-theme,
.btn-outline-theme-secondary {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-outline-theme:hover,
.btn-outline-theme-secondary:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}

/* Yes/No buttons for confirmations */
.btn-yes {
    background-color: var(--theme-primary-btn-bg);
    color: var(--theme-primary-btn-color);
    border-color: var(--theme-primary-btn-border-color);
}

.btn-yes:hover {
    background-color: var(--theme-primary-btn-hover-bg);
    border-color: var(--theme-primary-btn-hover-border-color);
    color: var(--theme-primary-btn-hover-color);
}

.btn-no {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-no:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}

/* Export button */
.btn-export {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-export:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}

/* Home button */
.btn-home {
    background-color: var(--theme-primary-btn-bg);
    color: var(--theme-primary-btn-color);
    border-color: var(--theme-primary-btn-border-color);
}

.btn-home:hover {
    background-color: var(--theme-primary-btn-hover-bg);
    border-color: var(--theme-primary-btn-hover-border-color);
    color: var(--theme-primary-btn-hover-color);
}

/* Digistore integration buttons */
.btn-ignore-problem {
    background-color: var(--theme-warning-btn-bg);
    color: var(--theme-warning-btn-color);
    border-color: var(--theme-warning-btn-border-color);
}

.btn-ignore-problem:hover {
    background-color: var(--theme-warning-btn-hover-bg);
    border-color: var(--theme-warning-btn-hover-border-color);
    color: var(--theme-warning-btn-hover-color);
}

.btn-keep-assignment {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-keep-assignment:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}

.btn-remove-assignment {
    background-color: var(--theme-secondary-btn-bg);
    color: var(--theme-secondary-btn-color);
    border-color: var(--theme-secondary-btn-border-color);
}

.btn-remove-assignment:hover {
    background-color: var(--theme-secondary-btn-hover-bg);
    border-color: var(--theme-secondary-btn-hover-border-color);
    color: var(--theme-secondary-btn-hover-color);
}
