Skip to content
Live online lessons • A1–C2 • English-friendly

Learn Spanish with structure, real speaking, and a plan that fits your week

Despertar Caminos offers online Spanish courses designed for English speakers. Choose a clear A1–C2 path, practice live, and track progress with measurable milestones. Start with a quick placement test and receive a personalized study plan.

View plans & prices
Course levels
A1–C2 with clear outcomes
Schedules
Weekdays, evenings, weekends
Support
Feedback, speaking drills, notes
Next cohort starts in
00
days
00
hrs
00
min
00
sec
Get on the list to secure your preferred schedule.
Fast placement
2–3 minutes
Answer 10 questions, then receive a recommended CEFR level and a course track.
Grammar Vocabulary Comprehension
Get a call-back
Choose a plan, we’ll help you start

Leave your details to get schedule options and a starter roadmap.

DC
Despertar Caminos
English-friendly Spanish courses online
Live sessions Progress tracking CEFR aligned

A course system that actually moves you forward

Each level is built around speaking outcomes, core grammar, high-frequency vocabulary, and confidence-building practice. You’ll always know what you’re working on—and why.

Read FAQ
1

Placement & plan

Take a short test, then get a recommended CEFR level, speaking goals, and a weekly study plan that matches your schedule.

2

Live speaking practice

Structured drills, role plays, and correction that helps you speak more naturally—without fear of mistakes.

3

Measurable progress

Weekly checkpoints and mini-assessments keep you on track. You’ll know exactly what you can do now vs. last month.

A

English-friendly explanations

Learn Spanish patterns with clear comparisons to English—without overloading you with linguistic jargon.

B

Practical vocabulary

High-frequency words and phrases for everyday situations: travel, work, relationships, and modern Spanish media.

C

Flexible schedules

Choose a plan for your pace: intensive, steady, or light. Easily reschedule when life gets busy.

Not sure where to start?

Take the placement test. It’s quick, clear, and gives you a recommended level plus a plan you can follow.

Simple plans, real speaking time

Choose your weekly rhythm. Every plan includes guided practice, homework review, and progress tracking aligned to CEFR.

Free placement included

Starter

For busy weeks and steady growth.

A1–B1
$89
per month
  • 1 live group session / week
  • Homework feedback
  • Monthly progress check
Most popular

Core

The best balance of pace & practice.

A1–C1
$149
per month
  • 2 live sessions / week
  • Speaking drills + corrections
  • Bi-weekly progress checks
  • Personal vocabulary pack

Intensive

Fast track with maximum speaking time.

B1–C2
$229
per month
  • 3 live sessions / week
  • 1:1 monthly coaching call
  • Weekly progress checks
  • Pronunciation training

What you get in every plan

Clear outcomes, guided speaking, and a plan you can follow—so you always know the next step.

CEFR-aligned roadmap
Goals & milestones A1–C2
Speaking-first lessons
Practice in real scenarios
Feedback that sticks
Corrections + improvement plan
Materials included
Notes, drills, vocab packs
Need help choosing?
Talk to an advisor

We’ll recommend a starting level, schedule, and plan based on your goal and time.

Contact details
Response time: usually within 1 business day.

Online Spanish courses for English speakers (A1–C2)

If you’re searching for an online Spanish course that doesn’t feel random, you’re in the right place. Despertar Caminos organizes your learning into a clear A1–C2 path based on CEFR. You’ll practice speaking in each lesson, build a reliable grammar foundation, and learn vocabulary you can actually use.

You can start from absolute beginner (A1) or join at intermediate/advanced levels (B1, B2, C1, C2) after a short placement test. Our English-friendly approach helps you understand Spanish faster—especially the parts that confuse learners most: verb tenses, pronouns, ser vs estar, and listening comprehension.

Each plan includes live sessions, structured homework, and progress tracking. Whether you’re learning Spanish for travel, work, moving abroad, or personal goals, we help you build real confidence—without wasting time.

What CEFR level do I need?

A1–A2 for basics and survival Spanish, B1 for daily conversations, B2 for confidence in discussions, C1–C2 for near-native fluency.

Is this course good for English speakers?

Yes—explanations, examples, and corrections are designed to address common English-to-Spanish errors and speed up understanding.

FAQ

Quick answers about levels, schedules, and how the placement test works.

How long does each level take (A1–C2)?
Most learners complete a level in 8–14 weeks depending on plan intensity and consistency. You’ll get a realistic weekly routine after the placement test.
Are classes group or 1:1?
Plans are primarily small group sessions focused on speaking time. Intensive includes a monthly 1:1 coaching call for personalized feedback and goal setting.
Do I need to start at A1?
No. Take the placement test and we’ll recommend the best starting point. Many learners join at A2, B1, or B2.
What happens after the placement test?
You’ll see your estimated level, a short explanation, and recommended plan options. You can request a call-back to confirm schedule and goals.

Get started

Take the placement test or request a call-back. We’ll help you choose the right level and schedule.

Contact
Hours
Mon–Fri: 9:00–18:00
Tip: If you’re unsure about level, start with the placement test—it’s the fastest way to get a clear starting point.
Spanish Placement Test
10 questions • 2–3 minutes
Progress
0 / 10
Question

Loading…

Request a call-back
We’ll reply within 1 business day
Preferred schedule
Optional: tap a chip to select.
By submitting, you confirm your details are correct.
Sample syllabus (A1–B2 preview)
A clear structure you can follow week by week
A1 • Foundation
Speak in simple situations
8–10 weeks
  • Pronunciation & rhythm essentials
  • Present tense, basic questions
  • Ser vs estar (core patterns)
  • Daily routines, travel basics
A2 • Momentum
Handle daily conversations
10–12 weeks
  • Past: pretérito & imperfecto basics
  • Object pronouns (practical use)
  • Shopping, food, services
  • Listening: slow native speech
B1 • Independence
Speak with flow & clarity
12–14 weeks
  • Future, conditional, connectors
  • Opinions, stories, explanations
  • Listening: real conversations
  • Error patterns for English speakers
B2 • Confidence
Debate, nuance, and natural phrasing
14–16 weeks
  • Subjunctive foundations (practical)
  • Idioms & collocations
  • Listening: podcasts & interviews
  • Pronunciation refinement
Want a full C1–C2 roadmap? Take the placement test to get a personalized recommendation.
Plan comparison
Pick the pace that matches your goal
Feature Starter Core Intensive
Live sessions / week 1 2 3
Homework feedback Yes Yes Yes + priority
Progress checks Monthly Bi-weekly Weekly
1:1 coaching call Optional add-on Included
Best for Consistency Balanced growth Fast results
Still unsure? Take the placement test for a recommendation.
Policies & privacy
Transparent basics in plain English

Privacy

We only use your submitted details (name, email, phone, goal) to contact you about course enrollment and scheduling. We do not sell personal data. You can request deletion by emailing [email protected].

Cookies

We use essential storage to remember your theme and cookie consent. Optional analytics are disabled until you opt in (this landing page does not load analytics by default).

Refunds

If you purchased a plan and need help, contact support. Refund eligibility depends on the plan and attended sessions. We aim for fair, transparent resolutions.

`; const footerHTML = ` `; const hMount = u3b7m('#siteHeaderMount'); const fMount = u3b7m('#siteFooterMount'); if(hMount) hMount.replaceWith(v8n0d(headerHTML)); if(fMount) fMount.replaceWith(v8n0d(footerHTML)); const y = u3b7m('#yearNow'); if(y) y.textContent = String(new Date().getFullYear()); document.title = base; return true; } f2q1r(); function y1t9s(){ const btn = u3b7m('#themeToggle'); const ico = u3b7m('#themeIcon'); function apply(){ const isDark = document.documentElement.classList.contains('dark'); if(ico) ico.textContent = isDark ? '◑' : '◐'; if(btn) btn.setAttribute('aria-label', isDark ? 'Switch to light mode' : 'Switch to dark mode'); } function toggle(){ const nowDark = !document.documentElement.classList.contains('dark'); document.documentElement.classList.toggle('dark', nowDark); a2m9p.set('theme', nowDark ? 'dark' : 'light'); apply(); } apply(); b6f1k(btn,'click',toggle); b6f1k(u3b7m('#footerThemeBtn'),'click',toggle); } y1t9s(); function z5r2a(){ const menuBtn = u3b7m('#mobileMenuBtn'); const menu = u3b7m('#mobileMenu'); if(!menuBtn || !menu) return; function setOpen(open){ menu.classList.toggle('hidden', !open); menuBtn.setAttribute('aria-expanded', open ? 'true' : 'false'); menuBtn.textContent = open ? '✕' : '☰'; } b6f1k(menuBtn,'click',()=> setOpen(menu.classList.contains('hidden'))); c9d2s('#mobileMenu a').forEach(a=>{ b6f1k(a,'click',()=> setOpen(false)); }); b6f1k(document,'keydown',(e)=>{ if(e.key==='Escape') setOpen(false); }); } z5r2a(); function p8j3e(d){ if(!d) return false; if(typeof d.showModal === 'function'){ if(!d.open) d.showModal(); return true; } return false; } function x1c6h(d){ if(!d) return false; if(d.open) d.close(); return true; } function b3m1u(id){ const d = u3b7m('#'+id); if(d) p8j3e(d); } const testDialog = u3b7m('#testDialog'); const leadDialog = u3b7m('#leadDialog'); const syllabusDialog = u3b7m('#syllabusDialog'); const compareDialog = u3b7m('#compareDialog'); const policiesDialog = u3b7m('#policiesDialog'); c9d2s('[data-close]').forEach(btn=>{ b6f1k(btn,'click',()=>{ const id = btn.getAttribute('data-close'); x1c6h(u3b7m('#'+id)); }); }); function f0a4w(){ const openTestIds = ['#openTestTop','#openTestCard','#openTestMid','#openTestSeo','#openTestAside','#openTestBottom','#headerTestBtn','#footerTestBtn','#compareStartTest','#syllabusStartTest']; openTestIds.forEach(sel=> b6f1k(u3b7m(sel),'click',()=>{ p8j3e(testDialog); l9k2q.reset(false); })); const openLeadIds = ['#openLead','#openLeadMid','#openLeadPricing','#openLeadAside','#openLeadBottom','#footerLeadBtn','#mobileLeadBtn']; openLeadIds.forEach(sel=> b6f1k(u3b7m(sel),'click',()=>{ p8j3e(leadDialog); g2z8p.prefillFromState(); })); const openSyllabusIds = ['#openSyllabus','#openSyllabusSeo']; openSyllabusIds.forEach(sel=> b6f1k(u3b7m(sel),'click',()=> p8j3e(syllabusDialog))); b6f1k(u3b7m('#openCompare'),'click',()=> p8j3e(compareDialog)); b6f1k(u3b7m('#openPolicies'),'click',()=> p8j3e(policiesDialog)); b6f1k(u3b7m('#footerPoliciesBtn'),'click',()=> p8j3e(policiesDialog)); b6f1k(u3b7m('#cookieLearnMore'),'click',()=> p8j3e(policiesDialog)); b6f1k(u3b7m('#footerCookieBtn'),'click',()=> i7p0c.openBanner(true)); b6f1k(u3b7m('#testLeadBtn'),'click',()=>{ x1c6h(testDialog); p8j3e(leadDialog); g2z8p.prefillFromState(); }); b6f1k(u3b7m('#leadStartTestFromSuccess'),'click',()=>{ x1c6h(leadDialog); p8j3e(testDialog); l9k2q.reset(false); }); c9d2s('button.q0l3x').forEach(btn=>{ b6f1k(btn,'click',()=>{ const plan = btn.getAttribute('data-plan') || ''; a2m9p.set('selectedPlan', plan); p8j3e(leadDialog); g2z8p.prefillFromState(); }); }); } f0a4w(); function o2d9h(){ const target = new Date(); target.setDate(target.getDate()+19); target.setHours(18,0,0,0); const dEl = u3b7m('#countdownDays'); const hEl = u3b7m('#countdownHours'); const mEl = u3b7m('#countdownMinutes'); const sEl = u3b7m('#countdownSeconds'); function pad(n){ return String(n).padStart(2,'0'); } function tick(){ const now = new Date(); let ms = target.getTime() - now.getTime(); if(ms < 0) ms = 0; const sec = Math.floor(ms/1000); const days = Math.floor(sec/86400); const hours = Math.floor((sec%86400)/3600); const mins = Math.floor((sec%3600)/60); const secs = sec%60; if(dEl) dEl.textContent = pad(days); if(hEl) hEl.textContent = pad(hours); if(mEl) mEl.textContent = pad(mins); if(sEl) sEl.textContent = pad(secs); } tick(); setInterval(tick, 1000); } o2d9h(); const l9k2q = (function(){ const qMeta = u3b7m('#testQMeta'); const qText = u3b7m('#testQText'); const choices = u3b7m('#testChoices'); const hint = u3b7m('#testHint'); const bar = u3b7m('#testBar'); const stepLabel = u3b7m('#testStepLabel'); const resultBox = u3b7m('#testResult'); const lvl = u3b7m('#testLevel'); const explain = u3b7m('#testExplain'); const next = u3b7m('#testNext'); const planRec = u3b7m('#testPlanRec'); const skipBtn = u3b7m('#testSkip'); const resetBtn = u3b7m('#testReset'); const questions = [ {id:'q1', text:'Choose the correct article: "___ agua" (water).', opts:['El','La','Los','Las'], correct:0, weight:1, hint:'"Agua" is feminine but uses "el" in singular to avoid double "a" sound.'}, {id:'q2', text:'Pick the correct form: "Yo ___ de Canadá."', opts:['es','soy','estoy','son'], correct:1, weight:1, hint:'Origin uses "ser": yo soy, tú eres, él/ella es.'}, {id:'q3', text:'Which is correct for “I have been to Spain”?', opts:['He ido a España.','Fui a España.','Iba a España.','Voy a España.'], correct:0, weight:2, hint:'Present perfect: "he + participle" is common for recent experience.'}, {id:'q4', text:'Choose the correct pronoun order: "I’m going to give it to you."', opts:['Te lo voy a dar.','Lo te voy a dar.','Voy a dar te lo.','Te voy lo a dar.'], correct:0, weight:2, hint:'Indirect + direct: "te lo", "me la", etc.'}, {id:'q5', text:'Pick the correct option: "Si ___ tiempo, voy contigo."', opts:['tendré','tengo','tuviera','tenía'], correct:1, weight:1, hint:'Real condition in present: "si + present, present/future".'}, {id:'q6', text:'Choose the best translation: “I used to live in Madrid.”', opts:['Viví en Madrid.','Vivo en Madrid.','Vivía en Madrid.','He vivido en Madrid.'], correct:2, weight:2, hint:'Habitual past is usually imperfect: "vivía".'}, {id:'q7', text:'Pick the correct subjunctive trigger: "Quiero que tú ___ más."', opts:['hablas','hables','hablar','hablaste'], correct:1, weight:3, hint:'Wants/requests + que → subjunctive: "quiero que hables".'}, {id:'q8', text:'Choose the correct: "No creo que él ___ aquí."', opts:['está','esté','estaba','estará'], correct:1, weight:3, hint:'Negation of belief/opinion typically triggers subjunctive.'}, {id:'q9', text:'Pick the most natural connector: "Llegué tarde ___ había tráfico."', opts:['porque','aunque','para','si'], correct:0, weight:1, hint:'Cause: porque.'}, {id:'q10', text:'Choose the best: "Ojalá ___ mañana."', opts:['llueve','llueva','llovió','lloverá'], correct:1, weight:3, hint:'Ojalá + subjunctive.'} ]; let idx = 0; let score = 0; let answered = 0; let maxScore = questions.reduce((a,q)=>a+q.weight,0); function setProgress(){ const p = Math.min(100, Math.round((answered/questions.length)*100)); if(bar) bar.style.width = p+'%'; if(stepLabel) stepLabel.textContent = `${answered} / ${questions.length}`; } function render(){ if(resultBox) resultBox.classList.add('hidden'); const q = questions[idx]; if(!q){ finish(); return; } if(qMeta) qMeta.textContent = `Question ${idx+1} of ${questions.length}`; if(qText) qText.textContent = q.text; if(hint){ hint.classList.add('hidden'); hint.textContent = ''; } if(choices){ choices.innerHTML = ''; q.opts.forEach((o, i)=>{ const b = document.createElement('button'); b.type = 'button'; b.className = 'h7q2e w-full rounded-2xl border border-slate-900/10 bg-white px-4 py-3 text-left text-sm font-semibold text-slate-900 shadow-sm transition hover:bg-slate-50 active:scale-[.99] dark:border-white/10 dark:bg-slate-900 dark:text-white dark:hover:bg-slate-900/70'; b.textContent = o; b.setAttribute('data-choice', String(i)); b6f1k(b,'click',()=> choose(i)); choices.appendChild(b); }); const hintBtn = document.createElement('button'); hintBtn.type = 'button'; hintBtn.className = 'h7q2e mt-2 inline-flex items-center justify-center rounded-2xl border border-slate-900/15 bg-white px-3 py-2 text-xs font-semibold text-slate-900 shadow-sm transition hover:bg-slate-50 active:scale-[.99] dark:border-white/15 dark:bg-slate-900 dark:text-white dark:hover:bg-slate-900/70'; hintBtn.textContent = 'Show hint'; b6f1k(hintBtn,'click',()=>{ if(!hint) return; hint.textContent = q.hint; hint.classList.remove('hidden'); hintBtn.disabled = true; hintBtn.classList.add('opacity-60','cursor-not-allowed'); }); choices.appendChild(hintBtn); } } function choose(i){ const q = questions[idx]; const wasCorrect = i === q.correct; answered += 1; if(wasCorrect) score += q.weight; setProgress(); if(choices){ c9d2s('button[data-choice]', choices).forEach(btn=>{ const ci = Number(btn.getAttribute('data-choice')); btn.disabled = true; btn.classList.add('cursor-not-allowed'); if(ci === q.correct){ btn.classList.add('border-emerald-600/40','bg-emerald-600/10','dark:bg-emerald-400/10'); }else if(ci === i && !wasCorrect){ btn.classList.add('border-rose-600/40','bg-rose-600/10','dark:bg-rose-400/10'); }else{ btn.classList.add('opacity-70'); } }); } setTimeout(()=>{ idx += 1; if(idx >= questions.length) finish(); else render(); }, 520); } function finish(){ const pct = maxScore ? (score/maxScore) : 0; let level='A1'; let desc=''; let nextStep=''; let plan=''; if(pct < 0.22){ level='A1'; desc='You’re at the starting line. We’ll build pronunciation, present tense, and survival vocabulary so you can speak in simple situations fast.'; nextStep='Start with A1 Foundation (8–10 weeks).'; plan='Recommended plan: Starter or Core depending on your weekly availability.'; }else if(pct < 0.40){ level='A2'; desc='You have key basics. Next we’ll strengthen past tenses, pronouns, and everyday conversation speed.'; nextStep='Start with A2 Momentum (10–12 weeks).'; plan='Recommended plan: Core for consistent speaking practice.'; }else if(pct < 0.60){ level='B1'; desc='You can communicate in many daily situations. Next we’ll expand connectors, storytelling, and listening to real conversations.'; nextStep='Start with B1 Independence (12–14 weeks).'; plan='Recommended plan: Core or Intensive if you want faster results.'; }else if(pct < 0.78){ level='B2'; desc='You’re comfortable in conversations and can handle nuance. Next we’ll deepen the subjunctive, idioms, and natural phrasing.'; nextStep='Start with B2 Confidence (14–16 weeks).'; plan='Recommended plan: Intensive for maximum speaking time.'; }else if(pct < 0.92){ level='C1'; desc='Strong control and good fluency. Next we’ll focus on precision, register, advanced listening, and presentation-level speaking.'; nextStep='Start with C1 Advanced Fluency track.'; plan='Recommended plan: Intensive + optional 1:1 add-on.'; }else{ level='C2'; desc='Near-native command. We’ll refine style, rhetorical control, and specialized vocabulary for your domain.'; nextStep='Start with C2 Mastery track.'; plan='Recommended plan: Intensive + 1:1 coaching.'; } a2m9p.set('lastPlacementLevel', level); if(lvl) lvl.textContent = level; if(explain) explain.textContent = desc; if(next) next.textContent = nextStep; if(planRec) planRec.textContent = plan; if(resultBox) resultBox.classList.remove('hidden'); if(qMeta) qMeta.textContent = 'Result'; if(qText) qText.textContent = 'Your placement recommendation is ready.'; if(choices) choices.innerHTML = ''; if(hint) hint.classList.add('hidden'); if(bar) bar.style.width = '100%'; if(stepLabel) stepLabel.textContent = `${questions.length} / ${questions.length}`; } function reset(forceOpen=true){ idx = 0; score = 0; answered = 0; setProgress(); render(); if(forceOpen) p8j3e(testDialog); } b6f1k(skipBtn,'click',()=>{ answered += 1; setProgress(); idx += 1; if(idx >= questions.length) finish(); else render(); }); b6f1k(resetBtn,'click',()=> reset(false)); return { reset }; })(); const g2z8p = (function(){ const form = u3b7m('#leadForm'); const name = u3b7m('#leadName'); const email = u3b7m('#leadEmail'); const phone = u3b7m('#leadPhone'); const goal = u3b7m('#leadGoal'); const consent = u3b7m('#leadConsent'); const prefHidden = u3b7m('#leadPref'); const prefNote = u3b7m('#leadPrefNote'); const eName = u3b7m('#leadNameErr'); const eEmail = u3b7m('#leadEmailErr'); const ePhone = u3b7m('#leadPhoneErr'); const eGoal = u3b7m('#leadGoalErr'); const eConsent = u3b7m('#leadConsentErr'); const success = u3b7m('#leadSuccess'); const submitBtn = u3b7m('#leadSubmit'); function showErr(el, msg){ if(!el) return; el.textContent = msg; el.classList.toggle('hidden', !msg); } function normPhone(v){ return (v||'').trim().replace(/\s+/g,' '); } function validEmail(v){ const s = (v||'').trim(); return /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i.test(s); } function validPhone(v){ const s = normPhone(v); return /^\+?[0-9][0-9\s().-]{7,}$/.test(s); } function validate(){ const nm = (name?.value||'').trim(); const em = (email?.value||'').trim(); const ph = (phone?.value||'').trim(); const gl = (goal?.value||'').trim(); const cs = !!(consent && consent.checked); let ok = true; if(nm.length < 2){ ok=false; showErr(eName, 'Please enter your name (min 2 characters).'); } else showErr(eName, ''); if(!validEmail(em)){ ok=false; showErr(eEmail, 'Please enter a valid email address.'); } else showErr(eEmail, ''); if(!validPhone(ph)){ ok=false; showErr(ePhone, 'Please enter a valid phone number (include country code if possible).'); } else showErr(ePhone, ''); if(gl.length < 10){ ok=false; showErr(eGoal, 'Tell us your goal (min 10 characters).'); } else showErr(eGoal, ''); if(!cs){ ok=false; showErr(eConsent, 'Consent is required to contact you.'); } else showErr(eConsent, ''); return ok; } function clearSuccess(){ if(success) success.classList.add('hidden'); } function setBusy(b){ if(submitBtn){ submitBtn.disabled = b; submitBtn.classList.toggle('opacity-70', b); submitBtn.classList.toggle('cursor-not-allowed', b); submitBtn.textContent = b ? 'Sending…' : 'Send request'; } } function prefillFromState(){ clearSuccess(); if(form) form.classList.remove('hidden'); const plan = a2m9p.get('selectedPlan',''); const lvl = a2m9p.get('lastPlacementLevel',''); const parts = []; if(plan) parts.push(`Interested plan: ${plan}.`); if(lvl) parts.push(`Placement estimate: ${lvl}.`); const base = parts.length ? parts.join(' ') + ' ' : ''; if(goal && (!goal.value || goal.value.trim().length < 10)){ goal.value = base + 'My goal: '; goal.focus(); goal.setSelectionRange(goal.value.length, goal.value.length); } } c9d2s('button.k8c1w').forEach(chip=>{ b6f1k(chip,'click',()=>{ const val = chip.getAttribute('data-pref') || ''; if(prefHidden) prefHidden.value = val; c9d2s('button.k8c1w').forEach(c=>{ c.classList.remove('bg-slate-900','text-white','dark:bg-white','dark:text-slate-900'); c.classList.add('bg-white'); }); chip.classList.remove('bg-white'); chip.classList.add('bg-slate-900','text-white','dark:bg-white','dark:text-slate-900'); if(prefNote) prefNote.textContent = `Selected: ${val}`; }); }); b6f1k(form,'input',()=>{ showErr(eName,''); showErr(eEmail,''); showErr(ePhone,''); showErr(eGoal,''); showErr(eConsent,''); clearSuccess(); }); b6f1k(form,'submit',(e)=>{ e.preventDefault(); clearSuccess(); if(!validate()) return; const payload = { name: (name?.value||'').trim(), email: (email?.value||'').trim(), phone: normPhone(phone?.value||''), goal: (goal?.value||'').trim(), preference: (prefHidden?.value||'').trim(), selectedPlan: a2m9p.get('selectedPlan',''), placementLevel: a2m9p.get('lastPlacementLevel',''), ts: new Date().toISOString() }; setBusy(true); setTimeout(()=>{ try{ const arr = JSON.parse(a2m9p.get('leadRequests','[]') || '[]'); arr.push(payload); a2m9p.set('leadRequests', JSON.stringify(arr).slice(0, 45000)); }catch(err){} setBusy(false); if(success) success.classList.remove('hidden'); if(form){ name.value = payload.name; email.value = payload.email; phone.value = payload.phone; goal.value = payload.goal; if(consent) consent.checked = true; } if(typeof form.scrollIntoView === 'function') form.scrollIntoView({block:'start',behavior:'smooth'}); }, 650); }); return { prefillFromState }; })(); const i7p0c = (function(){ const banner = u3b7m('#cookieBanner'); const accept = u3b7m('#cookieAccept'); const reject = u3b7m('#cookieReject'); const closeX = u3b7m('#cookieCloseX'); const analytics = u3b7m('#cookieAnalytics'); const status = u3b7m('#cookieStatus'); const KEY = 'cookieConsentV1'; function current(){ const raw = a2m9p.get(KEY,''); if(!raw) return null; try{ return JSON.parse(raw); }catch(e){ return null; } } function show(msg){ if(!banner) return; banner.classList.remove('hidden'); if(msg && status){ status.textContent = msg; status.classList.remove('hidden'); setTimeout(()=>{ status.classList.add('hidden'); }, 2200); } } function hide(){ if(!banner) return; banner.classList.add('hidden'); } function save(consentObj){ a2m9p.set(KEY, JSON.stringify(consentObj)); } function openBanner(force){ const c = current(); if(!c || force){ if(analytics) analytics.checked = !!(c && c.analytics); show(); } } function acceptSel(){ const obj = { essential:true, analytics: !!(analytics && analytics.checked), at: new Date().toISOString() }; save(obj); hide(); } function essentialOnly(){ const obj = { essential:true, analytics:false, at: new Date().toISOString() }; save(obj); hide(); } b6f1k(accept,'click',acceptSel); b6f1k(reject,'click',essentialOnly); b6f1k(closeX,'click',()=>{ essentialOnly(); }); setTimeout(()=> openBanner(false), 650); return { openBanner }; })(); b6f1k(document,'keydown',(e)=>{ if(e.key !== 'Escape') return; [testDialog, leadDialog, syllabusDialog, compareDialog, policiesDialog].forEach(d=> x1c6h(d)); }); b6f1k(u3b7m('#testGoPricing'),'click',()=>{ x1c6h(testDialog); }); })();