/* ── Variables ───────────────────────────────────────────────── */
        :root {
            --bg:          #0a0a0a;
            --bg-panel:    #111111;
            --bg-raised:   #1a1a1a;
            --text:        #f0f0e8;
            --text-dim:    #888880;
            --accent:      #d4a017;
            --accent-dim:  #8b6a10;
            --accent-glow: rgba(212, 160, 23, 0.15);
            --group-color: #f0f0e8;
            --danger:      #c0392b;
            --success:     #27ae60;
            --border:      rgba(212, 160, 23, 0.2);
            --radius:      8px;
        }

        *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

        body {
            background: var(--bg);
            color: var(--text);
            font-family: 'Georgia', serif;
            min-height: 100vh;
            overflow-x: hidden;
        }

        .hidden { display: none !important; }

        /* ── Auth Gate ───────────────────────────────────────────────── */
        #authGate {
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            gap: 24px;
            padding: 40px 20px;
            background: radial-gradient(ellipse at center, #1a1400 0%, var(--bg) 70%);
            text-align: center;
        }

        #authGate h1 {
            font-size: clamp(2rem, 5vw, 3.5rem);
            color: var(--accent);
            letter-spacing: 0.04em;
            text-shadow: 0 0 40px rgba(212, 160, 23, 0.3);
        }

        #authGate p {
            color: var(--text-dim);
            font-style: italic;
            font-size: 1.1rem;
        }

        #authGate a {
            color: var(--accent);
            text-decoration: none;
            font-size: 1rem;
            border: 1px solid var(--border);
            padding: 10px 24px;
            border-radius: var(--radius);
            transition: background 0.2s, border-color 0.2s;
        }

        #authGate a:hover {
            background: var(--accent-glow);
            border-color: var(--accent);
        }

        /* ── App Shell ───────────────────────────────────────────────── */
        #app {
            display: flex;
            flex-direction: column;
            min-height: 100vh;
        }

        /* ── Top Bar ─────────────────────────────────────────────────── */
        #topBar {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px 20px;
            background: var(--bg-panel);
            border-bottom: 1px solid var(--border);
            flex-shrink: 0;
            gap: 12px;
        }

        #topBar .bar-title {
            font-size: 0.85rem;
            letter-spacing: 0.14em;
            text-transform: uppercase;
            color: var(--accent);
        }

        .topbar-right {
            display: flex;
            gap: 8px;
            align-items: center;
        }

        /* ── Buttons ─────────────────────────────────────────────────── */
        .btn {
            background: var(--accent);
            color: #0a0a0a;
            border: none;
            border-radius: var(--radius);
            font-family: inherit;
            font-size: 1rem;
            font-weight: bold;
            letter-spacing: 0.06em;
            padding: 12px 24px;
            cursor: pointer;
            transition: background 0.2s, transform 0.1s, box-shadow 0.2s;
        }

        .btn:hover {
            background: #e8b520;
            box-shadow: 0 0 20px rgba(212, 160, 23, 0.4);
        }

        .btn:active { transform: scale(0.98); }
        .btn:disabled { opacity: 0.4; cursor: not-allowed; transform: none; }

        .btn-ghost {
            background: var(--bg-raised);
            color: var(--text);
            border: 1px solid var(--border);
            border-radius: var(--radius);
            font-family: inherit;
            font-size: 0.85rem;
            letter-spacing: 0.04em;
            padding: 8px 16px;
            cursor: pointer;
            transition: background 0.15s, border-color 0.15s, color 0.15s;
        }

        .btn-ghost:hover {
            background: var(--accent-glow);
            border-color: var(--accent);
            color: var(--accent);
        }

        .btn-ghost:active { transform: scale(0.97); }

        .btn-nav {
            background: none;
            color: var(--text-dim);
            border: 1px solid var(--border);
            border-radius: var(--radius);
            font-family: inherit;
            font-size: 1.2rem;
            padding: 10px 20px;
            cursor: pointer;
            transition: all 0.15s;
        }

        .btn-nav:hover:not(:disabled) {
            background: var(--accent-glow);
            border-color: var(--accent);
            color: var(--accent);
        }

        .btn-nav:disabled { opacity: 0.25; cursor: not-allowed; }

        /* ── Mode Selector Screen ────────────────────────────────────── */
        #modeScreen {
            flex: 1;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 40px 20px;
            gap: 36px;
            background: radial-gradient(ellipse at center, #140f00 0%, var(--bg) 65%);
        }

        #modeScreen h1 {
            font-size: clamp(2rem, 5vw, 3.8rem);
            color: var(--accent);
            letter-spacing: 0.04em;
            text-align: center;
            text-shadow: 0 0 50px rgba(212, 160, 23, 0.3);
        }

        #modeScreen .subtitle {
            color: var(--text-dim);
            font-style: italic;
            font-size: 1.05rem;
            text-align: center;
            margin-top: -20px;
        }

        .mode-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 16px;
            width: 100%;
            max-width: 900px;
        }

        .mode-card {
            background: var(--bg-panel);
            border: 1px solid var(--border);
            border-radius: 12px;
            padding: 28px 20px;
            text-align: center;
            cursor: pointer;
            transition: background 0.2s, border-color 0.2s, transform 0.15s, box-shadow 0.2s;
            display: flex;
            flex-direction: column;
            gap: 10px;
            align-items: center;
        }

        .mode-card:hover {
            background: var(--accent-glow);
            border-color: var(--accent);
            transform: translateY(-3px);
            box-shadow: 0 8px 24px rgba(212, 160, 23, 0.15);
        }

        .mode-card .mode-icon {
            font-size: 2.4rem;
            line-height: 1;
        }

        .mode-card .mode-name {
            font-size: 1.15rem;
            font-weight: bold;
            color: var(--accent);
            letter-spacing: 0.06em;
        }

        .mode-card .mode-desc {
            font-size: 0.82rem;
            color: var(--text-dim);
            line-height: 1.4;
        }

        /* ── Config Panel ────────────────────────────────────────────── */
        #configPanel {
            background: var(--bg-panel);
            border: 1px solid var(--border);
            border-radius: 12px;
            padding: 0;
            width: 100%;
            max-width: 700px;
            overflow: hidden;
            transition: box-shadow 0.2s;
        }

        #configToggle {
            width: 100%;
            background: none;
            border: none;
            color: var(--text-dim);
            font-family: inherit;
            font-size: 0.78rem;
            letter-spacing: 0.12em;
            text-transform: uppercase;
            padding: 12px 20px;
            cursor: pointer;
            text-align: left;
            display: flex;
            align-items: center;
            justify-content: space-between;
            transition: color 0.15s;
        }

        #configToggle:hover { color: var(--accent); }

        #configToggle .arrow {
            transition: transform 0.2s;
            display: inline-block;
        }

        #configToggle.open .arrow { transform: rotate(180deg); }

        #configBody {
            display: none;
            padding: 16px 20px 20px;
            border-top: 1px solid var(--border);
        }

        #configBody.open { display: block; }

        .config-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
            gap: 16px;
        }

        .config-field label {
            display: block;
            font-size: 0.72rem;
            letter-spacing: 0.1em;
            text-transform: uppercase;
            color: var(--text-dim);
            margin-bottom: 6px;
        }

        .config-field select,
        .config-field input[type="number"] {
            width: 100%;
            background: var(--bg-raised);
            border: 1px solid var(--border);
            border-radius: var(--radius);
            color: var(--text);
            font-family: inherit;
            font-size: 0.95rem;
            padding: 8px 12px;
            outline: none;
            transition: border-color 0.2s;
        }

        .config-field select:focus,
        .config-field input[type="number"]:focus {
            border-color: var(--accent);
        }

        /* ── Display Screen ──────────────────────────────────────────── */
        #displayScreen {
            flex: 1;
            display: flex;
            flex-direction: column;
            height: 100vh;
            overflow: hidden;
        }

        #displayTopBar {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px 20px;
            background: var(--bg-panel);
            border-bottom: 1px solid var(--border);
            flex-shrink: 0;
            gap: 12px;
            flex-wrap: wrap;
        }

        #displayModeNombre {
            font-size: 0.8rem;
            letter-spacing: 0.16em;
            text-transform: uppercase;
            color: var(--accent);
        }

        #stepCounter {
            font-size: 0.8rem;
            color: var(--text-dim);
            letter-spacing: 0.1em;
        }

        .display-controls {
            display: flex;
            gap: 8px;
            align-items: center;
        }

        /* ── Stage (projector area) ──────────────────────────────────── */
        #stage {
            flex: 1;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            padding: 40px 60px;
            background: radial-gradient(ellipse at center, #140f00 0%, var(--bg) 65%);
            overflow: hidden;
            position: relative;
            gap: 24px;
        }

        #stageType {
            position: absolute;
            top: 20px;
            left: 0;
            right: 0;
            text-align: center;
            font-size: 0.65rem;
            letter-spacing: 0.2em;
            text-transform: uppercase;
            color: var(--accent-dim);
            opacity: 0.7;
        }

        /* Generic stage text */
        #stageTítulo {
            font-size: clamp(1.4rem, 3.5vw, 2.4rem);
            color: var(--accent);
            text-align: center;
            letter-spacing: 0.04em;
            opacity: 0;
            transform: translateY(-12px);
            transition: opacity 0.4s ease, transform 0.4s ease;
        }

        #stageTítulo.visible {
            opacity: 1;
            transform: translateY(0);
        }

        #stageMain {
            font-size: clamp(2.2rem, 5.5vw, 4.2rem);
            line-height: 1.25;
            text-align: center;
            color: var(--text);
            max-width: 1000px;
            text-shadow: 0 2px 24px rgba(0,0,0,0.9);
            opacity: 0;
            transform: translateY(20px);
            transition: opacity 0.5s ease, transform 0.5s ease;
        }

        #stageMain.visible {
            opacity: 1;
            transform: translateY(0);
        }

        /* Cántico display */
        #chantDisplay {
            display: none;
            flex-direction: column;
            align-items: center;
            gap: 28px;
            width: 100%;
            max-width: 900px;
            opacity: 0;
            transform: translateY(20px);
            transition: opacity 0.5s ease, transform 0.5s ease;
        }

        #chantDisplay.visible {
            opacity: 1;
            transform: translateY(0);
        }

        .chant-label {
            font-size: 0.65rem;
            letter-spacing: 0.22em;
            text-transform: uppercase;
            opacity: 0.55;
        }

        .chant-leader-block {
            text-align: center;
        }

        .chant-leader-label {
            color: var(--accent-dim);
        }

        .chant-leader-text {
            font-size: clamp(2.2rem, 5vw, 3.8rem);
            color: var(--accent);
            line-height: 1.2;
            text-shadow: 0 0 30px rgba(212, 160, 23, 0.4);
        }

        .chant-group-block {
            text-align: center;
        }

        .chant-group-label {
            color: #888880;
        }

        .chant-group-text {
            font-size: clamp(2.4rem, 5.5vw, 4.2rem);
            color: var(--group-color);
            line-height: 1.2;
            text-shadow: 0 2px 24px rgba(0,0,0,0.9);
            transition: text-shadow 0.15s, color 0.15s;
        }

        .chant-group-text.pulse {
            animation: groupPulse 0.6s ease-in-out;
        }

        @keyframes groupPulse {
            0%   { text-shadow: 0 0 0 rgba(240, 240, 232, 0); color: var(--group-color); }
            30%  { text-shadow: 0 0 40px rgba(240, 240, 232, 0.8), 0 0 80px rgba(240, 240, 232, 0.3); color: #ffffff; }
            100% { text-shadow: 0 2px 24px rgba(0,0,0,0.9); color: var(--group-color); }
        }

        .chant-rhythm {
            font-size: 0.9rem;
            color: var(--text-dim);
            font-style: italic;
            text-align: center;
        }

        /* Tongue twister speed bar */
        #speedBar {
            display: none;
            align-items: center;
            gap: 16px;
            opacity: 0;
            transition: opacity 0.4s ease;
        }

        #speedBar.visible { opacity: 1; }

        .speed-dot {
            width: 12px;
            height: 12px;
            border-radius: 50%;
            background: var(--bg-raised);
            border: 1px solid var(--border);
            transition: background 0.3s, border-color 0.3s, transform 0.3s;
        }

        .speed-dot.active {
            background: var(--accent);
            border-color: var(--accent);
            transform: scale(1.4);
        }

        .speed-label {
            font-size: 0.78rem;
            color: var(--text-dim);
            letter-spacing: 0.1em;
            text-transform: uppercase;
        }

        /* Step timer bar */
        #timerBar {
            position: absolute;
            bottom: 0;
            left: 0;
            height: 3px;
            background: var(--accent);
            width: 0%;
            transition: width linear;
            opacity: 0.6;
        }

        /* Step instruction (small text below) */
        #stageInstruction {
            font-size: clamp(0.9rem, 2vw, 1.15rem);
            color: var(--text-dim);
            text-align: center;
            font-style: italic;
            max-width: 700px;
            line-height: 1.5;
            opacity: 0;
            transition: opacity 0.4s ease 0.3s;
        }

        #stageInstruction.visible { opacity: 1; }

        /* ── Cargando Spinner ─────────────────────────────────────────── */
        #stageLoader {
            display: none;
            gap: 8px;
            align-items: center;
        }

        #stageLoader span {
            width: 10px;
            height: 10px;
            background: var(--accent);
            border-radius: 50%;
            animation: dotPulse 1.2s ease-in-out infinite;
        }

        #stageLoader span:nth-child(2) { animation-delay: 0.2s; }
        #stageLoader span:nth-child(3) { animation-delay: 0.4s; }

        @keyframes dotPulse {
            0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
            40%            { transform: scale(1);   opacity: 1; }
        }

        /* ── Bottom Nav ──────────────────────────────────────────────── */
        #bottomNav {
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 14px 20px;
            background: var(--bg-panel);
            border-top: 1px solid var(--border);
            flex-shrink: 0;
            gap: 16px;
        }

        /* ── Toast ───────────────────────────────────────────────────── */
        #toastContainer {
            position: fixed;
            bottom: 80px;
            left: 50%;
            transform: translateX(-50%);
            z-index: 9999;
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 8px;
            pointer-events: none;
        }

        .toast {
            background: var(--bg-panel);
            border: 1px solid var(--border);
            color: var(--text);
            padding: 10px 20px;
            border-radius: var(--radius);
            font-size: 0.9rem;
            animation: toastIn 0.3s ease forwards;
            pointer-events: none;
        }

        .toast.error { border-color: var(--danger); color: #e07070; }

        @keyframes toastIn {
            from { opacity: 0; transform: translateY(8px); }
            to   { opacity: 1; transform: translateY(0); }
        }
