LinguaVista

Sign in

Create account

Theme updated

Your theme preference has been saved.

Account help

If you can’t sign in, try resetting your password or contact support.

Support
+1 415 807 2936
Mon–Fri, 9:00–18:00

Cookie preferences

We use cookies to improve your experience. You can change your choices anytime.

Master Spanish with confidence

Live, teacher-led online courses from A1 to C2, DELE preparation, and business Spanish. Minimal distractions, maximum progress.

Browse Courses

Fast, accurate level estimation. No signup required.

Benefits

Level-Aligned Curriculum

Every lesson maps to CEFR goals (A1–C2) with clear outcomes and measurable progress.

DELE & Business Tracks

Targeted modules for exams and workplace communication boost real-world performance.

Flexible Schedules

Evenings, weekends, or self-paced — study without compromising your routine.

Limited-time bonuses

Why study Spanish with LinguaVista?

Our method blends communicative practice with micro-grammar drills and spaced repetition. You’ll speak early and refine accuracy continuously. Trusted by learners preparing for DELE and professionals seeking Spanish for meetings, emails, and presentations.

Tip: Press Ctrl/⌘ + K to open the command palette.

Quick Placement Test (3 questions)

Hint: “trabajo” + “los lunes”.

Use ↑ ↓ to navigate, Enter to open, Esc to close.

'; } } function a0s8c(){ const p = location.pathname.split('/').pop() || 'index.html'; x1n7v('header a[data-nav]').forEach(a=>{ if (a.getAttribute('href') === p || a.getAttribute('href') === './'+p) { a.classList.add('underline','underline-offset-4'); } }); } function k8v1t(){ const saved = localStorage.getItem('theme') || 'light'; document.documentElement.classList.toggle('dark', saved === 'dark'); } function b7r4q(){ x1n7v('[data-open]').forEach(btn=>{ btn.addEventListener('click', ()=>{ const d = u6f2a(btn.dataset.open); if (d && typeof d.showModal === 'function') d.showModal(); }); }); x1n7v('[data-close]').forEach(btn=>{ btn.addEventListener('click', ()=>{ const d = u6f2a(btn.dataset.close); if (d && typeof d.close === 'function') d.close(); }); }); const themeBtn = u6f2a('#themeToggle'); if (themeBtn) { themeBtn.addEventListener('click', ()=>{ const next = (localStorage.getItem('theme') === 'dark') ? 'light' : 'dark'; localStorage.setItem('theme', next); k8v1t(); const tm = u6f2a('#themeModal'); if (tm && typeof tm.showModal === 'function') tm.showModal(); }); } k8v1t(); } function g2d5m(){ const openBtn = u6f2a('#openPlacement'); const modal = u6f2a('#placementModal'); const result = u6f2a('#placementResult'); const errs = u6f2a('#placementErrors'); const submitBtn = u6f2a('#scorePlacement'); if (!openBtn || !modal || !submitBtn) return; openBtn.addEventListener('click', ()=>{ if (typeof modal.showModal === 'function') modal.showModal(); const i = u6f2a('input[name="q2"]', modal); if (i) setTimeout(()=>i.focus(), 0); }); modal.addEventListener('close', ()=>{ const form = u6f2a('form', modal); if (form) form.reset(); if (result) result.textContent = ''; if (errs) { errs.classList.add('hidden'); errs.textContent = ''; } }); function c9w3u(form){ const problems = []; const q1 = form.q1?.value || ''; const q2 = (form.q2?.value || '').trim(); const q3 = form.q3?.value || ''; if (!q1) problems.push('Question 1: pick an option.'); if (!q2) problems.push('Question 2: type a translation.'); if (!q3) problems.push('Question 3: choose a form.'); return { problems, q1, q2, q3 }; } submitBtn.addEventListener('click', (e)=>{ e.preventDefault(); const form = u6f2a('form', modal); if (!form) return; const { problems, q1, q2, q3 } = c9w3u(form); if (problems.length){ errs.textContent = problems.join(' '); errs.classList.remove('hidden'); result.textContent = ''; const firstInvalid = u6f2a('input:invalid, select:invalid, textarea:invalid', form); if (firstInvalid) firstInvalid.focus(); return; } errs.classList.add('hidden'); errs.textContent = ''; const a = q2.toLowerCase().replace(/\s+/g,' ').trim(); let score = 0; if (q1 === 'La') score++; if (a.includes('trabajo') && (a.includes('los lunes') || a.includes('el lunes') || a.includes('en lunes') || a.includes('en los lunes'))) score++; if (q3 === 'fui') score++; const lvl = (score === 3) ? 'B1–B2' : (score === 2) ? 'A2' : 'A1'; const start = (score < 2) ? 'Beginner A1' : 'Pre-Intermediate A2'; result.textContent = 'Estimated level: ' + lvl + '. We recommend starting with ' + start + ' in our catalog.'; }); } function z5q8y(){ const palette = u6f2a('#paletteModal'); const input = u6f2a('#paletteInput'); const list = u6f2a('#paletteList'); const openBtn = u6f2a('#openPalette'); if (!palette || !input || !list || !openBtn) return; let idx = 0; const items = ()=>x1n7v('#paletteList a').filter(a=>!a.closest('li').classList.contains('hidden')); function setActive(n){ const it = items(); if (!it.length) return; idx = Math.max(0, Math.min(n, it.length - 1)); it.forEach((a,i)=>{ a.classList.toggle('bg-gray-100', i===idx); a.classList.toggle('dark:bg-white/10', i===idx); }); it[idx].scrollIntoView({block:'nearest'}); } function filter(q){ const query = q.toLowerCase().trim(); x1n7v('#paletteList a').forEach(a=>{ const hay = (a.textContent + ' ' + (a.getAttribute('data-cmd') || '')).toLowerCase(); a.parentElement.classList.toggle('hidden', query && !hay.includes(query)); }); setActive(0); } openBtn.addEventListener('click', ()=>{ palette.showModal(); input.value = ''; filter(''); setTimeout(()=>input.focus(), 0); }); window.addEventListener('keydown', (e)=>{ const key = e.key.toLowerCase(); if ((e.ctrlKey || e.metaKey) && key === 'k'){ e.preventDefault(); palette.showModal(); input.value = ''; filter(''); setTimeout(()=>input.focus(), 0); } if (e.key === 'Escape' && palette.open) palette.close(); }); input.addEventListener('input', ()=>filter(input.value)); input.addEventListener('keydown', (e)=>{ if (!palette.open) return; if (e.key === 'ArrowDown'){ e.preventDefault(); setActive(idx+1); } if (e.key === 'ArrowUp'){ e.preventDefault(); setActive(idx-1); } if (e.key === 'Enter'){ e.preventDefault(); const it = items(); if (!it.length) return; it[idx].click(); palette.close(); } }); x1n7v('[data-close]').forEach(btn=>{ btn.addEventListener('click', ()=>{ const d = u6f2a(btn.dataset.close); if (d && typeof d.close === 'function') d.close(); }); }); } function s3l0d(){ const ld = { "@context": "https://schema.org", "@type": "Organization", "name": "LinguaVista", "url": "https://example.com/", "sameAs": ["https://example.com/faq.html"], "contactPoint": [{ "@type": "ContactPoint", "contactType": "customer support", "email": "[email protected]", "telephone": "+1-415-555-0138" }] }; const s = document.createElement('script'); s.type = 'application/ld+json'; s.textContent = JSON.stringify(ld); document.head.appendChild(s); } p9k2e(); g2d5m(); z5q8y(); s3l0d(); k8v1t(); })();