/*
 * Admin Sounds FX view styles.
 *
 * Reskinned onto the component kit
 * (presentation-only). Each group is a kit `.card` (`.card__header` /
 * `.card__body`); the enable toggle is the kit `.toggle-switch`; each sound row
 * is an even 4-column grid (name / toggle / labelled Default+Custom preview /
 * source badge + Upload + quiet icon revert) so rows align across every group;
 * the achievement radios are clean selectable rows. Token-driven (light content
 * zone) and scoped under `.sounds-*` so nothing leaks into other admin views.
 *
 * NOTE: `.btn--small` is SHARED with views/history.js + views/tournament-history.js
 * so its rule is kept byte-identical at the bottom of this file.
 * The 600px breakpoint collapses the sound row to a stacked layout for mobile.
 */

.sounds-page {
    display: flex;
    flex-direction: column;
    gap: var(--space-lg);
    max-width: 880px;
}

/* Inline load/error status — a quiet muted line under the page subtitle. */
.sounds-status {
    display: block;
    margin-top: var(--space-sm);
    min-height: 1em;
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}
.sounds-status:empty { display: none; }

.sounds-managed-groups {
    display: flex;
    flex-direction: column;
    gap: var(--space-lg);
}

/* ── Sound row (managed groups) ──────────────────────────────────────────── */
.sounds-act-grid {
    display: flex;
    flex-direction: column;
    gap: var(--space-sm);
}

/* Even columns so every row aligns across all groups:
   name | enable toggle | preview cluster | upload cluster. */
.main .sounds-act-row {
    display: grid;
    grid-template-columns: minmax(120px, 1.5fr) 150px auto minmax(0, 1.5fr);
    align-items: center;
    gap: var(--space-base);
    padding: 10px 14px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--surface-raised);
    transition: border-color 150ms ease, background 150ms ease, opacity 150ms ease;
}
.main .sounds-act-row:hover {
    border-color: var(--hairline);
    background: var(--surface-hover);
}

/* A disabled (silenced) row visibly recedes — the name + source dim. */
.main .sounds-act-row[data-enabled="false"] {
    background: var(--color-background);
}
.main .sounds-act-row[data-enabled="false"] .sounds-act-row__label {
    color: var(--color-text-muted);
}

.sounds-act-row__label {
    font-weight: 600;
    font-size: var(--text-sm);
    color: var(--color-text);
}

.sounds-act-row__preview {
    display: flex;
    align-items: center;
    gap: 6px;
}

.sounds-act-row__custom {
    display: flex;
    align-items: center;
    gap: var(--space-sm);
    flex-wrap: wrap;
    justify-content: flex-end;
    /* Containing block for the visually-hidden upload input (lesson
       sr-only-checkbox-containing-block) — guards against the focus
       auto-scroll hijacking the document scroll. */
    position: relative;
}

.sounds-act-row__src {
    flex: 0 0 auto;
}

/* ── Preview button (shared primitive) ───────────────────────────────────── */
.main .sounds-preview-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 11px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--surface-raised);
    color: var(--color-text-secondary);
    font-size: var(--text-xs);
    font-weight: 600;
    cursor: pointer;
    transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
}
.main .sounds-preview-btn:hover:not(:disabled) {
    background: var(--surface-hover);
    border-color: var(--color-text-muted);
    color: var(--color-text);
}
.main .sounds-preview-btn:focus-visible {
    outline: 0;
    border-color: var(--color-accent);
    box-shadow: var(--shadow-glow);
}
.main .sounds-preview-btn:disabled {
    cursor: not-allowed;
    opacity: 0.45;
}
.sounds-preview-btn__icon {
    display: inline-flex;
    color: var(--color-text-muted);
}
.main .sounds-preview-btn:hover:not(:disabled) .sounds-preview-btn__icon {
    color: var(--color-accent);
}
.sounds-preview-btn--icon {
    padding: 5px 8px;
}

/* ── Upload affordance ───────────────────────────────────────────────────── */
.sounds-upload__icon {
    display: inline-flex;
    margin-right: 5px;
    vertical-align: -2px;
}

.sounds-upload-input {
    /* Hide the native input — the <label> is the visible button. The top/left:0
       anchor under the position:relative parent guards the focus auto-scroll. */
    position: absolute;
    top: 0;
    left: 0;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

.main .sounds-act-row__revert.btn--icon {
    width: 30px;
    height: 30px;
    min-height: 0;
}

/* ── Achievement Unlock — selectable radio rows ──────────────────────────── */
.sounds-ach-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-sm);
    margin-bottom: var(--space-base);
}

.main .sounds-ach-row {
    display: flex;
    align-items: center;
    gap: var(--space-sm);
    padding: 10px 14px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--surface-raised);
    transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
}
.main .sounds-ach-row:hover {
    border-color: var(--hairline);
    background: var(--surface-hover);
}
/* Selected choice — accent frame + faint tint + glow (the one allowed gold). */
.main .sounds-ach-row:has(input[type="radio"]:checked) {
    border-color: var(--color-accent);
    background: var(--surface-hover);
    box-shadow: var(--shadow-glow);
}
.main .sounds-ach-row:has(input[type="radio"]:focus-visible) {
    box-shadow: var(--shadow-glow);
}

.sounds-ach-row input[type="radio"] {
    flex: 0 0 auto;
    width: 16px;
    height: 16px;
    accent-color: var(--color-accent);
    cursor: pointer;
}

.sounds-ach-row__label {
    flex: 1;
    cursor: pointer;
    user-select: none;
    font-size: var(--text-sm);
    font-weight: 600;
    color: var(--color-text);
}

.main .sounds-ach-row input[type="radio"]:disabled,
.main .sounds-ach-row input[type="radio"]:disabled + .sounds-ach-row__label {
    color: var(--color-text-muted);
    cursor: not-allowed;
}

/* ── Achievement custom-MP3 upload block ─────────────────────────────────── */
.sounds-ach-upload {
    margin-top: var(--space-sm);
    padding-top: var(--space-base);
    border-top: 1px solid var(--color-border);
}

.sounds-upload-row {
    display: flex;
    align-items: center;
    gap: var(--space-sm);
    flex-wrap: wrap;
    /* Containing block for the hidden input (same guard as above). */
    position: relative;
}

.sounds-upload-status {
    color: var(--color-text-muted);
    font-size: var(--text-sm);
}

.sounds-upload-hint {
    margin-top: 6px;
    color: var(--color-text-muted);
    font-size: var(--text-xs);
}

/* ── Shared `.btn--small` — DO NOT change semantics (history.js +
      tournament-history.js depend on it). Kept byte-identical. ── */
.btn--small {
    padding: 4px 12px;
    font-size: 12px;
}

/* ── Responsive — stack the sound row on narrow widths ───────────────────── */
@media (max-width: 640px) {
    .main .sounds-act-row {
        grid-template-columns: 1fr;
        gap: var(--space-sm);
    }
    .sounds-act-row__preview {
        flex-wrap: wrap;
    }
    .sounds-act-row__custom {
        justify-content: flex-start;
    }
    .sounds-upload-row {
        flex-direction: column;
        align-items: flex-start;
    }
}
