        * { margin: 0; padding: 0; box-sizing: border-box; }
        /* Estos nombres (--bg-primary, --neon-green, etc.) se mantienen para no
           tener que reescribir todas las clases de este archivo, pero ahora
           todos apuntan al sistema compartido en design-tokens.css en vez de
           definir su propio valor de color. Si design-tokens.css cambia, este
           archivo cambia automáticamente con él — enlaza design-tokens.css
           ANTES que este archivo en el <head> de cada pantalla. */
        :root {
            --bg-primary: var(--color-bg);
            --bg-card: rgba(255, 255, 255, 0.04);
            --border-glass: rgba(255, 255, 255, 0.06);
            --text-primary: var(--color-text);
            --text-secondary: var(--color-text-dim);
            --text-muted: var(--color-text-mute);
            --neon-green: var(--color-accent);
            --neon-green-dark: var(--color-accent-hover);
            --neon-red: var(--color-danger);
            --neon-blue: var(--color-info);
            --font-title: 'Audiowide', cursive;
            --font-body: 'Montserrat', sans-serif;
            --radius-card: var(--radius-lg);
            --radius-input: var(--radius-md);
            --radius-btn: var(--radius-pill);
            --glass-blur: 20px;
            --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
        }
        body {
            font-family: var(--font-body);
            background: var(--bg-primary);
            min-height: 100vh; min-height: 100dvh;
            display: flex; align-items: center; justify-content: center;
            padding: 16px;
            background-image:
                radial-gradient(ellipse at 20% 50%, rgba(109, 40, 217, 0.02) 0%, transparent 60%),
                radial-gradient(ellipse at 80% 20%, rgba(79, 195, 247, 0.015) 0%, transparent 50%);
            -webkit-tap-highlight-color: transparent;
        }
        .app-container {
            width: 100%; max-width: 400px;
            display: flex; flex-direction: column; gap: 16px;
            animation: fadeUp 0.6s ease;
        }
        @keyframes fadeUp {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .logo-area { text-align: center; padding: 8px 0 12px; }
        .logo-area .logo-img {
            height: clamp(90px, 18vw, 160px); width: auto; margin-bottom: 12px;
            filter: drop-shadow(0 0 40px rgba(109, 40, 217, 0.1));
            display: block; margin-left: auto; margin-right: auto;
        }
        .logo-area h1 {
            font-family: var(--font-title);
            font-size: 2.3rem; font-weight: 400;
            background: linear-gradient(135deg, var(--neon-green), var(--neon-green-dark));
            -webkit-background-clip: text; background-clip: text; color: transparent;
            letter-spacing: 2px;
        }
        .logo-area .subtitle {
            font-family: var(--font-title);
            font-size: 0.75rem; color: var(--text-muted);
            text-transform: uppercase; letter-spacing: 4px; margin-top: 2px;
        }
        .card {
            background: var(--bg-card);
            backdrop-filter: blur(var(--glass-blur));
            -webkit-backdrop-filter: blur(var(--glass-blur));
            border: 1px solid var(--border-glass);
            border-radius: var(--radius-card);
            padding: 24px 20px;
            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);
            transition: var(--transition);
        }
        .card-title {
            font-family: var(--font-title);
            font-size: 0.75rem; font-weight: 400;
            color: var(--text-secondary);
            text-align: center; margin-bottom: 16px; letter-spacing: 0.5px;
        }
        .tabs {
            display: flex; gap: 4px; margin-bottom: 18px;
            background: rgba(255, 255, 255, 0.04);
            border-radius: var(--radius-lg); padding: 4px;
        }
        .tab-btn {
            flex: 1; padding: 10px 6px; border: none; border-radius: var(--radius-md);
            font-weight: 700; font-size: 0.75rem; cursor: pointer;
            transition: var(--transition);
            background: transparent; color: var(--text-muted);
            font-family: var(--font-body); letter-spacing: 0.3px;
        }
        .tab-btn.active {
            background: rgba(109, 40, 217, 0.08);
            color: var(--neon-green);
            box-shadow: 0 4px 20px rgba(109, 40, 217, 0.06);
        }
        .tab-btn:active { transform: scale(0.97); }
        .input-group { margin-bottom: 14px; position: relative; }
        .input-group label {
            display: block; font-size: 0.75rem; font-weight: 700;
            text-transform: uppercase; color: var(--text-secondary);
            margin-bottom: 4px; letter-spacing: 0.8px;
            font-family: var(--font-body);
        }
        .input-group input, .input-group select {
            width: 100%; padding: 12px 14px;
            background: rgba(255, 255, 255, 0.04);
            border: 1.5px solid var(--border-glass);
            border-radius: var(--radius-input);
            font-size: 0.85rem;
            font-family: var(--font-body);
            color: var(--text-primary);
            transition: var(--transition);
            -webkit-appearance: none; appearance: none;
        }
        .input-group input::placeholder { color: var(--text-muted); }
        .input-group input:focus, .input-group select:focus {
            outline: none; border-color: var(--neon-green);
            background: rgba(255, 255, 255, 0.06);
            box-shadow: 0 0 0 4px rgba(109, 40, 217, 0.04);
        }
        .input-group select {
            cursor: pointer;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236B7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
            background-repeat: no-repeat; background-position: right 14px center;
            padding-right: 40px;
        }
        .input-group select option { background: #1A1A2E; color: var(--text-primary); }
        .input-group .hint { font-size: 0.75rem; color: var(--text-muted); margin-top: 4px; }
        .input-group input.error, .input-group select.error {
            border-color: var(--neon-red); background: rgba(255, 107, 107, 0.05);
        }
        .error-msg { color: var(--neon-red); font-size: 0.75rem; margin-top: 4px; display: none; font-weight: 600; }
        .error-msg.show { display: block; }
        .pwd-wrapper { position: relative; }
        .pwd-toggle {
            cursor: pointer; color: var(--text-muted);
            font-size: 0.75rem; position: absolute; right: 12px; top: 50%;
            transform: translateY(-50%); z-index: 5;
            background: rgba(255, 255, 255, 0.04);
            padding: 3px 10px; border-radius: var(--radius-xl);
            font-family: var(--font-body); user-select: none;
            transition: var(--transition);
        }
        .pwd-toggle:hover { background: rgba(255, 255, 255, 0.08); color: var(--text-primary); }
        .btn {
            width: 100%; padding: 14px; border: none; border-radius: var(--radius-btn);
            font-weight: 800; font-size: 0.8rem; cursor: pointer;
            transition: var(--transition);
            font-family: var(--font-body);
            display: flex; align-items: center; justify-content: center; gap: 8px;
            min-height: 50px; letter-spacing: 0.5px;
        }
        .btn:active { transform: scale(0.97); }
        .btn-primary {
            background: linear-gradient(135deg, var(--neon-green), var(--neon-green-dark));
            color: var(--color-accent-ink);
            box-shadow: 0 4px 24px rgba(109, 40, 217, 0.15);
        }
        .btn-primary:hover:not(:disabled) {
            transform: translateY(-2px);
            box-shadow: 0 8px 32px rgba(109, 40, 217, 0.25);
        }
        .btn-primary:disabled { opacity: 0.4; cursor: not-allowed; transform: none !important; }
        .btn-outline {
            background: rgba(255, 255, 255, 0.04);
            border: 1.5px solid var(--border-glass);
            color: var(--text-secondary);
        }
        .btn-qr-toggle {
            width: 100%; padding: 12px;
            border: 1.5px dashed rgba(109, 40, 217, 0.12);
            border-radius: var(--radius-input);
            background: rgba(109, 40, 217, 0.02);
            color: var(--neon-green);
            font-weight: 700; font-size: 0.75rem; cursor: pointer;
            transition: var(--transition);
            font-family: var(--font-body);
            margin-bottom: 12px;
            display: flex; align-items: center; justify-content: center; gap: 8px;
        }
        .btn-qr-toggle:hover { border-color: rgba(109, 40, 217, 0.2); background: rgba(109, 40, 217, 0.04); }
        .btn-qr-toggle.scanning { border-color: var(--neon-red); color: var(--neon-red); background: rgba(255, 107, 107, 0.05); }
        .qr-scanner-area {
            background: #000; border-radius: var(--radius-input);
            overflow: hidden; margin-bottom: 12px; position: relative;
            min-height: 200px; border: 1px solid var(--border-glass);
        }
        .qr-scanner-area #qr-reader { width: 100%; border: none !important; }
        .qr-scanner-area #qr-reader video { border-radius: var(--radius-input); }
        .qr-scanner-area #qr-reader__scan_region { min-height: 200px; }
        .qr-result-badge {
            background: rgba(109, 40, 217, 0.04);
            border: 1px solid rgba(109, 40, 217, 0.08);
            border-radius: var(--radius-input);
            padding: 12px; margin-bottom: 12px;
            font-size: 0.75rem; display: none;
        }
        .qr-result-badge .qr-dato { display: flex; justify-content: space-between; padding: 2px 0; }
        .qr-result-badge .qr-label { color: var(--text-muted); font-weight: 600; }
        .qr-result-badge .qr-value { color: var(--neon-green); font-weight: 700; }
        .alert {
            padding: 10px 14px; border-radius: var(--radius-input);
            font-size: 0.75rem; margin-top: 10px; display: none;
            backdrop-filter: blur(8px); font-weight: 600;
        }
        .alert.show { display: block; }
        .alert-error   { background: rgba(255, 107, 107, 0.06); color: var(--neon-red); border: 1px solid rgba(255, 107, 107, 0.08); }
        .alert-success { background: rgba(109, 40, 217, 0.06); color: var(--neon-green); border: 1px solid rgba(109, 40, 217, 0.08); }
        .toast {
            position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%);
            background: rgba(255, 255, 255, 0.06); backdrop-filter: blur(20px);
            border: 1px solid var(--border-glass); color: var(--text-primary);
            padding: 10px 20px; border-radius: var(--radius-btn);
            font-size: 0.75rem; font-weight: 600; z-index: 2000;
            display: none; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
            max-width: 90%; font-family: var(--font-body);
        }
        .toast.error   { border-color: rgba(255, 107, 107, 0.15); }
        .toast.success { border-color: rgba(109, 40, 217, 0.15); }
        .roles-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; margin-top: 4px; }
        .role-chip {
            display: flex; align-items: center; gap: 4px;
            background: rgba(255, 255, 255, 0.02);
            border: 1.5px solid var(--border-glass);
            border-radius: var(--radius-md); padding: 6px 8px; cursor: pointer;
            transition: var(--transition); color: var(--text-muted);
            font-size: 0.75rem; font-weight: 600;
            font-family: var(--font-body); user-select: none;
        }
        .role-chip.selected { background: rgba(109, 40, 217, 0.04); border-color: rgba(109, 40, 217, 0.1); color: var(--neon-green); }
        .role-chip .role-check { display: none; }
        .role-chip.selected .role-check { display: inline; }
        .role-chip .role-badge {
            font-size: 0.75rem; background: rgba(255, 255, 255, 0.04);
            padding: 1px 6px; border-radius: var(--radius-sm); margin-left: auto;
        }
        .role-chip .role-badge.primary { background: var(--neon-green); color: var(--color-accent-ink); }
        .roles-counter { font-size: 0.75rem; color: var(--text-muted); text-align: right; margin-top: 2px; }
        .spinner {
            display: inline-block; width: 14px; height: 14px;
            border: 2px solid rgba(13, 13, 26, 0.2);
            border-top-color: var(--bg-primary);
            border-radius: 50%; animation: spin 0.7s linear infinite;
            vertical-align: middle; margin-right: 6px;
        }
        @keyframes spin { to { transform: rotate(360deg); } }
        .footer {
            text-align: center; font-size: 0.75rem; color: var(--text-muted);
            padding-top: 12px; margin-top: 4px;
            border-top: 1px solid rgba(255, 255, 255, 0.03);
            font-family: var(--font-body); letter-spacing: 0.5px;
        }
        @media (max-width: 420px) {
            .card { padding: 18px 14px; }
            .logo-area .logo-img { height: 70px; }
            .input-group input, .input-group select { font-size: 0.75rem; padding: 10px 12px; }
            .btn { font-size: 0.75rem; padding: 12px; min-height: 44px; }
        }

/* Aptitudes */
.aptitudes-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:4px;}
.apt-group-title{grid-column:1/-1;font-size: 0.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;font-weight:700;padding:8px 4px 2px;border-bottom:1px solid var(--border-glass);margin-top:4px;}
.apt-chip{display:flex;align-items:center;gap:6px;background:rgba(255,255,255,0.02);border:1.5px solid var(--border-glass);border-radius:var(--radius-md);padding:10px 10px;cursor:pointer;transition:var(--transition);color:var(--text-muted);font-size:0.8rem;font-weight:600;font-family:var(--font-body);user-select:none;}
.apt-chip.selected{background:rgba(109, 40, 217,0.04);border-color:rgba(109, 40, 217,0.1);color:var(--neon-green);}
.apt-chip.disabled{opacity:0.35;cursor:not-allowed;pointer-events:none;border-color:rgba(255,255,255,0.03);}
.apt-chip .apt-check{display:none;font-size:0.9rem;}
.apt-chip.selected .apt-check{display:inline;}
.apt-group{margin-bottom:6px}.apt-group-title{cursor:pointer;display:flex;justify-content:space-between;align-items:center;grid-column:1/-1;font-size: 0.75rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:1px;font-weight:700;padding:10px 4px 4px;border-bottom:1px solid var(--border-glass);margin-top:6px;user-select:none}.apt-group-title:hover{color:var(--neon-green)}.apt-count{font-size: 0.75rem;opacity:0.6;font-weight:400}.apt-toggle{font-size:0.85rem;margin-left:auto;font-weight:800}.apt-group-body{display:none;grid-template-columns:1fr 1fr 1fr;gap:6px;padding:6px 0}.apt-group-body.open{display:grid}
.apt-master-group{position:relative}.apt-master-toggle{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 14px;background:rgba(255,255,255,0.03);border:1.5px solid var(--border-glass);border-radius:var(--radius-lg);cursor:pointer;transition:var(--transition);margin-bottom:0;color:var(--text-secondary);font-size: 0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.5px;user-select:none}.apt-master-toggle:hover{border-color:rgba(109, 40, 217,0.2);color:var(--neon-green)}.apt-master-arrow{font-size: 0.75rem;transition:transform 0.2s;color:var(--text-muted)}.apt-master-toggle:hover .apt-master-arrow{color:var(--neon-green)}.apt-wrapper{display:none;margin-top:10px}.apt-wrapper.open{display:block}
