/* ================================================================
   SPRINGBOARD ACADEMY — SHARED COMPONENTS
   ----------------------------------------------------------------
   Reusable UI classes built ENTIRELY from design tokens
   (css/tokens.css). During migration, repeated inline styles and
   per-module button/card CSS should converge onto these classes so
   there is one button, one card, etc. across the whole site.

   Requires css/tokens.css to be linked first.
   ================================================================ */

/* ----------------------------------------------------------------
   BUTTONS
   .btn is the base; add a variant class for colour.
   ---------------------------------------------------------------- */
.btn {
    /* layout */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    /* sizing + shape */
    padding: var(--space-2) var(--space-4);
    border: 1px solid transparent;
    border-radius: var(--radius);
    /* type */
    font-family: var(--font-body);
    font-size: var(--text-base);
    font-weight: 600;
    line-height: 1;
    /* behaviour */
    cursor: pointer;
    text-decoration: none;
    transition: background var(--transition), border-color var(--transition), transform var(--transition);
}
.btn:active { transform: translateY(1px); }              /* subtle press feedback */
.btn:disabled, .btn[aria-disabled="true"] {
    opacity: 0.55;
    cursor: not-allowed;
}

/* Primary — filled brand red */
.btn-primary {
    background: var(--primary);
    color: #fff;
}
.btn-primary:hover { background: var(--primary-dark); }

/* Secondary — outlined */
.btn-secondary {
    background: var(--surface);
    color: var(--text);
    border-color: var(--border);
}
.btn-secondary:hover { border-color: var(--primary); color: var(--primary); }

/* Ghost — text only */
.btn-ghost {
    background: transparent;
    color: var(--primary);
}
.btn-ghost:hover { background: var(--primary-light); }

/* Danger — destructive actions */
.btn-danger {
    background: var(--danger);
    color: #fff;
}

/* ----------------------------------------------------------------
   CARD — a raised surface container
   ---------------------------------------------------------------- */
.card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: var(--shadow-sm);
    padding: var(--space-4);
}
.card-lg { border-radius: var(--radius-lg); padding: var(--space-5); box-shadow: var(--shadow); }

/* ----------------------------------------------------------------
   FORM FIELD — label + input pairing
   ---------------------------------------------------------------- */
.form-field { display: flex; flex-direction: column; gap: var(--space-1); margin-bottom: var(--space-3); }
.form-field label { font-size: var(--text-sm); font-weight: 600; color: var(--text-muted); }
.form-field input,
.form-field select,
.form-field textarea {
    font-family: var(--font-body);
    font-size: var(--text-base);
    color: var(--text);
    background: var(--surface);
    padding: var(--space-2) var(--space-3);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    transition: border-color var(--transition), box-shadow var(--transition);
}
.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus {
    outline: none;
    border-color: var(--primary);
    box-shadow: 0 0 0 3px var(--primary-light);   /* focus ring */
}

/* ----------------------------------------------------------------
   BADGE — small status pill
   ---------------------------------------------------------------- */
.badge {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    padding: 2px var(--space-2);
    border-radius: var(--radius-pill);
    font-size: var(--text-xs);
    font-weight: 600;
}
.badge-primary { background: var(--primary-light); color: var(--primary-dark); }
.badge-success { background: rgba(28,157,91,0.12);  color: var(--success); }
.badge-warning { background: rgba(245,127,23,0.12); color: var(--warning); }
.badge-danger  { background: rgba(198,40,40,0.12);  color: var(--danger); }

/* ----------------------------------------------------------------
   ALERT — inline feedback banner
   ---------------------------------------------------------------- */
.alert {
    padding: var(--space-3) var(--space-4);
    border: 1px solid var(--border);
    border-left-width: 4px;
    border-radius: var(--radius-sm);
    font-size: var(--text-sm);
    background: var(--surface);
}
.alert-success { border-left-color: var(--success); }
.alert-warning { border-left-color: var(--warning); }
.alert-danger  { border-left-color: var(--danger); }
.alert-info    { border-left-color: var(--info); }
