{"id":1701,"date":"2026-05-10T08:20:59","date_gmt":"2026-05-10T08:20:59","guid":{"rendered":"https:\/\/geoisteaching.com\/?page_id=1701"},"modified":"2026-05-10T08:36:22","modified_gmt":"2026-05-10T08:36:22","slug":"cod","status":"publish","type":"page","link":"https:\/\/geoisteaching.com\/?page_id=1701","title":{"rendered":"COD"},"content":{"rendered":"<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Lectia 1 &#8211; COD | GeoIsTeaching<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lora:ital,wght@0,400;0,600;1,400&#038;family=DM+Sans:wght@300;400;500;600&#038;display=swap\" rel=\"stylesheet\">\n<style>\n:root {\n  --navy: #1a2340;\n  --navy2: #2c3e6b;\n  --gold: #c49a2e;\n  --gold-light: #f0d078;\n  --gold-pale: #fdf6e3;\n  --cream: #fafaf7;\n  --white: #ffffff;\n  --text: #1a1a2e;\n  --muted: #5a6070;\n  --border: #e8e2d4;\n  --correct: #2d7a4f;\n  --correct-bg: #edf7f2;\n  --wrong: #b33a3a;\n  --wrong-bg: #fdf0f0;\n  --oral: #1a6b8a;\n  --oral-bg: #e8f4f8;\n  --radius: 14px;\n  --shadow: 0 2px 16px rgba(26,35,64,0.08);\n}\n* { box-sizing: border-box; margin: 0; padding: 0; }\nbody { font-family: 'DM Sans', sans-serif; background: var(--cream); color: var(--text); line-height: 1.7; }\n\n\/* TOP NAV *\/\n.top-nav { background: var(--navy); padding: 0 32px; display: flex; align-items: center; gap: 0; overflow-x: auto; position: sticky; top: 0; z-index: 100; }\n.brand { font-family: 'Lora', serif; font-size: 15px; color: var(--gold-light); margin-right: 32px; white-space: nowrap; padding: 18px 0; }\n.tab-btn { background: none; border: none; color: rgba(255,255,255,0.55); font-family: 'DM Sans', sans-serif; font-size: 13px; font-weight: 500; padding: 18px 16px; cursor: pointer; white-space: nowrap; border-bottom: 3px solid transparent; transition: all 0.2s; }\n.tab-btn:hover { color: rgba(255,255,255,0.85); }\n.tab-btn.active { color: var(--gold-light); border-bottom-color: var(--gold); }\n\n\/* PROGRESS BAR *\/\n.progress-bar-wrap { background: #e8e2d4; height: 4px; width: 100%; }\n.progress-bar-fill { background: var(--gold); height: 4px; transition: width 0.4s; }\n\n\/* MAIN *\/\n.lesson { display: none; max-width: 820px; margin: 0 auto; padding: 48px 24px 80px; }\n.lesson.active { display: block; }\n.lesson-header { margin-bottom: 40px; }\n.lesson-num { font-size: 11px; font-weight: 600; letter-spacing: 2.5px; text-transform: uppercase; color: var(--gold); margin-bottom: 8px; }\n.lesson-title { font-family: 'Lora', serif; font-size: clamp(24px, 4vw, 34px); font-weight: 600; color: var(--navy); line-height: 1.25; margin-bottom: 10px; }\n.lesson-subtitle { font-size: 15px; color: var(--muted); max-width: 560px; }\n\n\/* SECTION *\/\n.section { margin-bottom: 44px; }\n.section-title { font-family: 'Lora', serif; font-size: 18px; font-weight: 600; color: var(--navy); margin-bottom: 18px; padding-bottom: 10px; border-bottom: 2px solid var(--gold-pale); display: flex; align-items: center; gap: 10px; }\n.section-title::before { content: ''; display: inline-block; width: 4px; height: 20px; background: var(--gold); border-radius: 2px; }\n\n\/* EXERCISE TYPE BADGE *\/\n.ex-type-badge { display: inline-flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; padding: 4px 12px; border-radius: 20px; margin-bottom: 16px; }\n.badge-audio { background: #e8f4f8; color: var(--oral); }\n.badge-dictare { background: #fff3e0; color: #b36000; }\n.badge-traducere { background: #f0f4ff; color: #3a5abf; }\n.badge-oral { background: #fde8f0; color: #a0264a; }\n.badge-scriere { background: var(--gold-pale); color: #7a5500; }\n\n\/* RULE BOX *\/\n.rule-box { background: var(--navy); color: white; border-radius: var(--radius); padding: 24px 28px; margin-bottom: 20px; }\n.rule-box h4 { font-family: 'Lora', serif; font-size: 14px; color: var(--gold-light); margin-bottom: 12px; font-weight: 600; }\n.rule-box p { font-size: 14px; color: rgba(255,255,255,0.88); line-height: 1.75; margin-bottom: 8px; }\n.rule-box p:last-child { margin-bottom: 0; }\n\n\/* TABLE *\/\n.gram-table { width: 100%; border-collapse: collapse; font-size: 14px; margin-bottom: 20px; border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); }\n.gram-table th { background: var(--navy2); color: white; padding: 11px 14px; text-align: left; font-weight: 500; font-size: 13px; }\n.gram-table td { padding: 10px 14px; border-bottom: 1px solid var(--border); background: white; vertical-align: top; font-size: 13px; }\n.gram-table tr:last-child td { border-bottom: none; }\n.gram-table tr:hover td { background: var(--gold-pale); }\n.gram-table .fr { font-family: 'Lora', serif; font-style: italic; color: var(--navy); }\n.gram-table em { color: var(--gold); font-style: normal; font-weight: 600; }\n\n\/* ALERT *\/\n.alert { border-left: 4px solid var(--gold); background: var(--gold-pale); border-radius: 0 var(--radius) var(--radius) 0; padding: 14px 18px; margin-bottom: 20px; font-size: 14px; line-height: 1.7; }\n.alert strong { color: var(--navy); display: block; margin-bottom: 4px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px; }\n\n\/* ORDER DIAGRAM *\/\n.order-diagram { background: white; border: 1px solid var(--border); border-radius: var(--radius); padding: 20px; margin-bottom: 20px; overflow-x: auto; }\n.order-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }\n.order-row:last-child { margin-bottom: 0; }\n.order-label { font-size: 12px; color: var(--muted); font-weight: 500; min-width: 90px; }\n.order-box { background: var(--navy); color: white; padding: 7px 12px; border-radius: 8px; font-size: 13px; font-family: 'Lora', serif; font-style: italic; white-space: nowrap; }\n.order-box.hi { background: var(--gold); color: var(--navy); font-weight: 700; font-style: normal; }\n.order-arrow { color: var(--muted); font-size: 14px; }\n\n\/* AUDIO CARD *\/\n.audio-card { background: white; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; margin-bottom: 16px; }\n.audio-row { display: flex; align-items: flex-start; border-bottom: 1px solid var(--border); }\n.audio-row:last-child { border-bottom: none; }\n.audio-num { background: var(--gold-pale); color: var(--gold); font-size: 11px; font-weight: 700; padding: 14px 12px; min-width: 34px; text-align: center; border-right: 1px solid var(--border); }\n.audio-content { padding: 12px 16px; flex: 1; }\n.audio-fr { font-family: 'Lora', serif; font-style: italic; font-size: 15px; color: var(--navy); }\n.audio-fr strong { font-style: normal; background: var(--gold-pale); color: var(--gold); padding: 1px 5px; border-radius: 4px; font-weight: 700; }\n.audio-ro { font-size: 13px; color: var(--muted); margin-top: 3px; }\n.audio-actions { display: flex; gap: 8px; margin-top: 8px; flex-wrap: wrap; }\n.tts-btn { display: inline-flex; align-items: center; gap: 5px; background: none; border: 1px solid var(--border); color: var(--muted); font-size: 12px; font-family: 'DM Sans', sans-serif; padding: 4px 10px; border-radius: 20px; cursor: pointer; transition: all 0.2s; }\n.tts-btn:hover { background: var(--navy); color: white; border-color: var(--navy); }\n.tts-btn.slow { border-color: #b36000; color: #b36000; }\n.tts-btn.slow:hover { background: #b36000; color: white; }\n\n\/* DICTATION EXERCISE *\/\n.dictation-card { background: white; border: 1.5px solid #ffe0b2; border-radius: var(--radius); padding: 20px 24px; margin-bottom: 16px; }\n.dictation-card h4 { font-size: 13px; color: #b36000; font-weight: 700; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }\n.dictation-btns { display: flex; gap: 8px; margin-bottom: 14px; flex-wrap: wrap; }\n.dict-play { background: #b36000; color: white; border: none; border-radius: 20px; padding: 8px 18px; font-size: 13px; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; }\n.dict-play:hover { background: #8a4a00; }\n.dict-play.slow-btn { background: white; color: #b36000; border: 1.5px solid #b36000; }\n.dict-play.slow-btn:hover { background: #fff3e0; }\n.dict-textarea { width: 100%; border: 1.5px solid var(--border); border-radius: 10px; padding: 10px 14px; font-family: 'DM Sans', sans-serif; font-size: 14px; min-height: 60px; resize: vertical; outline: none; transition: border-color 0.2s; }\n.dict-textarea:focus { border-color: #b36000; }\n.dict-textarea.correct { border-color: var(--correct); background: var(--correct-bg); }\n.dict-textarea.wrong { border-color: var(--wrong); background: var(--wrong-bg); }\n.dict-check { background: var(--navy); color: white; border: none; border-radius: 20px; padding: 8px 20px; font-size: 13px; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; margin-top: 10px; }\n.dict-check:hover { background: var(--navy2); }\n\n\/* TRANSLATION EXERCISE *\/\n.transl-card { background: white; border: 1.5px solid #c5cae9; border-radius: var(--radius); padding: 20px 24px; margin-bottom: 16px; }\n.transl-card h4 { font-size: 13px; color: #3a5abf; font-weight: 700; margin-bottom: 10px; }\n.transl-ro { font-size: 15px; color: var(--navy); margin-bottom: 12px; line-height: 1.6; font-weight: 500; }\n.transl-ro em { color: var(--gold); font-style: normal; }\n.transl-hint { font-size: 12px; color: var(--muted); margin-bottom: 10px; font-style: italic; }\n.transl-input { width: 100%; border: 1.5px solid var(--border); border-radius: 10px; padding: 10px 14px; font-family: 'Lora', serif; font-style: italic; font-size: 14px; outline: none; transition: border-color 0.2s; }\n.transl-input:focus { border-color: #3a5abf; }\n.transl-input.correct { border-color: var(--correct); background: var(--correct-bg); }\n.transl-input.wrong { border-color: var(--wrong); background: var(--wrong-bg); }\n.transl-check { background: #3a5abf; color: white; border: none; border-radius: 20px; padding: 8px 20px; font-size: 13px; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; margin-top: 10px; }\n.transl-check:hover { background: #2a3f9f; }\n.reveal-btn { background: none; border: 1px solid var(--border); color: var(--muted); border-radius: 20px; padding: 6px 14px; font-size: 12px; font-family: 'DM Sans', sans-serif; cursor: pointer; margin-top: 8px; margin-left: 8px; }\n.answer-reveal { display: none; background: var(--gold-pale); border-radius: 8px; padding: 10px 14px; margin-top: 10px; font-family: 'Lora', serif; font-style: italic; font-size: 14px; color: var(--navy); border-left: 3px solid var(--gold); }\n.answer-reveal.show { display: block; }\n\n\/* FEEDBACK *\/\n.feedback { font-size: 13px; margin-top: 8px; padding: 7px 12px; border-radius: 8px; display: none; }\n.feedback.show-correct { background: var(--correct-bg); color: var(--correct); display: block; }\n.feedback.show-wrong { background: var(--wrong-bg); color: var(--wrong); display: block; }\n\n\/* ORAL EXERCISE *\/\n.oral-card { background: white; border: 1.5px solid #f8bbd0; border-radius: var(--radius); padding: 20px 24px; margin-bottom: 16px; }\n.oral-card h4 { font-size: 13px; color: #a0264a; font-weight: 700; margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }\n.oral-prompt { font-family: 'Lora', serif; font-style: italic; font-size: 15px; color: var(--navy); margin-bottom: 6px; line-height: 1.6; }\n.oral-prompt strong { font-style: normal; background: var(--gold-pale); color: var(--gold); padding: 1px 5px; border-radius: 4px; }\n.oral-expected { font-size: 13px; color: var(--muted); margin-bottom: 14px; }\n.oral-expected span { font-family: 'Lora', serif; font-style: italic; color: var(--navy2); font-weight: 500; }\n.oral-controls { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }\n.model-btn { background: var(--navy); color: white; border: none; border-radius: 20px; padding: 8px 16px; font-size: 13px; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; }\n.model-btn:hover { background: var(--navy2); }\n.rec-btn { background: #a0264a; color: white; border: none; border-radius: 20px; padding: 8px 16px; font-size: 13px; font-family: 'DM Sans', sans-serif; font-weight: 600; cursor: pointer; display: flex; align-items: center; gap: 6px; transition: all 0.2s; }\n.rec-btn:hover { background: #7a1a38; }\n.rec-btn.recording { background: #e53935; animation: pulse 1.2s infinite; }\n@keyframes pulse { 0%,100%{opacity:1;} 50%{opacity:0.6;} }\n.transcript-box { background: #fde8f0; border: 1px solid #f8bbd0; border-radius: 10px; padding: 10px 14px; font-size: 14px; color: var(--navy); min-height: 40px; font-family: 'Lora', serif; font-style: italic; }\n.speech-status { font-size: 12px; color: var(--muted); margin-top: 6px; font-style: italic; }\n.oral-eval { display: none; margin-top: 10px; font-size: 13px; padding: 8px 14px; border-radius: 8px; }\n.oral-eval.good { background: var(--correct-bg); color: var(--correct); display: block; }\n.oral-eval.partial { background: #fff8e1; color: #b36000; display: block; }\n.oral-eval.bad { background: var(--wrong-bg); color: var(--wrong); display: block; }\n\n\/* CHOICE *\/\n.choices { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }\n.choice-btn { background: white; border: 1.5px solid var(--border); border-radius: 8px; padding: 7px 16px; font-family: 'DM Sans', sans-serif; font-size: 14px; cursor: pointer; transition: all 0.2s; }\n.choice-btn:hover { border-color: var(--gold); background: var(--gold-pale); }\n.choice-btn.correct { background: var(--correct-bg); border-color: var(--correct); color: var(--correct); font-weight: 600; }\n.choice-btn.wrong { background: var(--wrong-bg); border-color: var(--wrong); color: var(--wrong); }\n\n\/* STANDARD EXERCISE *\/\n.exercises { background: white; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; margin-bottom: 20px; }\n.ex-header { background: var(--navy2); color: white; padding: 13px 18px; font-size: 13px; font-weight: 500; display: flex; align-items: center; gap: 8px; }\n.ex-header span { background: var(--gold); color: var(--navy); border-radius: 50%; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 700; }\n.ex-item { padding: 16px 18px; border-bottom: 1px solid var(--border); }\n.ex-item:last-child { border-bottom: none; }\n.ex-q { font-family: 'Lora', serif; font-size: 14px; color: var(--navy); margin-bottom: 10px; line-height: 1.65; }\n.ex-q em { color: var(--gold); font-style: normal; font-weight: 600; }\n.ex-input { border: 1.5px solid var(--border); border-radius: 8px; padding: 8px 12px; font-family: 'DM Sans', sans-serif; font-size: 14px; color: var(--text); width: 100%; max-width: 300px; outline: none; transition: border-color 0.2s; }\n.ex-input:focus { border-color: var(--gold); }\n.ex-input.correct { border-color: var(--correct); background: var(--correct-bg); }\n.ex-input.wrong { border-color: var(--wrong); background: var(--wrong-bg); }\n\n\/* CHECK BTN *\/\n.check-btn { margin-top: 20px; background: var(--navy); color: white; border: none; border-radius: 50px; padding: 12px 28px; font-family: 'DM Sans', sans-serif; font-size: 14px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; }\n.check-btn:hover { background: var(--navy2); }\n.score-display { margin-top: 16px; background: var(--gold-pale); border: 1px solid var(--gold); border-radius: var(--radius); padding: 14px 18px; font-size: 14px; color: var(--navy); display: none; }\n.score-display strong { color: var(--gold); }\n\n\/* TTS SCRIPT *\/\n.tts-script { background: #f8f4ee; border: 1px dashed var(--gold); border-radius: var(--radius); padding: 20px 24px; margin-top: 32px; }\n.tts-script h4 { font-size: 11px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: var(--gold); margin-bottom: 14px; }\n.tts-line { font-family: 'Lora', serif; font-size: 14px; color: var(--navy); margin-bottom: 8px; padding: 7px 12px; background: white; border-radius: 8px; border-left: 3px solid var(--gold); }\n\n\/* BROWSER SUPPORT *\/\n.no-speech { background: #fff3e0; border: 1px solid #ffe0b2; border-radius: 10px; padding: 10px 14px; font-size: 13px; color: #b36000; display: none; margin-bottom: 12px; }\n<\/style>\n<\/head>\n<body>\n\n<nav class=\"top-nav\">\n  <div class=\"brand\">GeoIsTeaching<\/div>\n  <button class=\"tab-btn active\" onclick=\"showTab(0)\">Teorie + Audio<\/button>\n  <button class=\"tab-btn\" onclick=\"showTab(1)\">Dictare<\/button>\n  <button class=\"tab-btn\" onclick=\"showTab(2)\">Traducere<\/button>\n  <button class=\"tab-btn\" onclick=\"showTab(3)\">Scriere<\/button>\n  <button class=\"tab-btn\" onclick=\"showTab(4)\">Oral<\/button>\n<\/nav>\n<div class=\"progress-bar-wrap\"><div class=\"progress-bar-fill\" id=\"progress\" style=\"width:20%\"><\/div><\/div>\n\n<!-- ===== TAB 0: TEORIE + AUDIO ===== -->\n<div class=\"lesson active\" id=\"tab-0\">\n  <div class=\"lesson-header\">\n    <div class=\"lesson-num\">Lectia 1 &#8211; COD<\/div>\n    <h1 class=\"lesson-title\">Les pronoms COD<br>le, la, l&#8217;, les<\/h1>\n    <p class=\"lesson-subtitle\">Teoria, tabelele si exemplele audio. Asculta fiecare propozitie in ritm normal si incetinit.<\/p>\n  <\/div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">Regula de baza<\/div>\n    <div class=\"rule-box\">\n      <h4>Ce este COD-ul?<\/h4>\n      <p>COD (complement d&#8217;objet direct) raspunde la &#8222;pe cine?&#8221; sau &#8222;ce?&#8221;. Se plaseaza INAINTEA verbului &#8211; cu exceptia imperativului afirmativ.<\/p>\n      <p>Forma depinde de genul si numarul substantivului inlocuit, nu de subiect.<\/p>\n    <\/div>\n\n    <table class=\"gram-table\">\n      <tr><th>Pronume<\/th><th>Inlocuieste<\/th><th>Exemplu<\/th><\/tr>\n      <tr><td><strong>le<\/strong><\/td><td>masc. singular<\/td><td class=\"fr\">Tu connais ce film? &#8211; Je <em>le<\/em> connais.<\/td><\/tr>\n      <tr><td><strong>la<\/strong><\/td><td>fem. singular<\/td><td class=\"fr\">Tu vois Marie? &#8211; Je ne <em>la<\/em> vois pas.<\/td><\/tr>\n      <tr><td><strong>l&#8217;<\/strong><\/td><td>masc.\/fem. + vocala\/h muet<\/td><td class=\"fr\">Tu aimes l&#8217;opera? &#8211; Je <em>l&#8217;<\/em>adore.<\/td><\/tr>\n      <tr><td><strong>les<\/strong><\/td><td>plural (masc. si fem.)<\/td><td class=\"fr\">Tu as lu ces rapports? &#8211; Je <em>les<\/em> ai tous lus.<\/td><\/tr>\n    <\/table>\n\n    <div class=\"alert\">\n      <strong>Acord cu participiul trecut!<\/strong>\n      Cand COD-ul precede verbul la temps composes, participiul se acorda in gen si numar.<br>\n      <em>Les documents que j&#8217;ai <strong>sign\u00e9s<\/strong>.<\/em> \/ <em>La lettre que tu as <strong>envoy\u00e9e<\/strong>.<\/em>\n    <\/div>\n  <\/div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">Pozitia in propozitie<\/div>\n    <div class=\"order-diagram\">\n      <div class=\"order-row\">\n        <span class=\"order-label\">Afirmativ<\/span>\n        <div class=\"order-box\">Sujet<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box hi\">le\/la\/les<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box\">verbe<\/div>\n      <\/div>\n      <div class=\"order-row\">\n        <span class=\"order-label\">Negativ<\/span>\n        <div class=\"order-box\">Sujet + ne<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box hi\">le\/la\/les<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box\">verbe + pas<\/div>\n      <\/div>\n      <div class=\"order-row\">\n        <span class=\"order-label\">Imp. afirm.<\/span>\n        <div class=\"order-box\">Verbe<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box hi\">-le\/-la\/-les<\/div>\n        <span class=\"order-arrow\" style=\"color:var(--gold)\">dupa verb, cu cratima<\/span>\n      <\/div>\n      <div class=\"order-row\">\n        <span class=\"order-label\">Imp. negativ<\/span>\n        <div class=\"order-box\">Ne<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box hi\">le\/la\/les<\/div><span class=\"order-arrow\">+<\/span>\n        <div class=\"order-box\">verbe + pas<\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"section\">\n    <div class=\"section-title\">Exemple audio<\/div>\n    <div class=\"ex-type-badge badge-audio\">\ud83d\udd0a Audio &#8211; asculta si repeta<\/div>\n\n    <div class=\"audio-card\">\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">1<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Je <strong>le<\/strong> lis chaque matin. \/ Je ne <strong>le<\/strong> lis pas.<\/div>\n          <div class=\"audio-ro\">Il citesc (ziarul) in fiecare dimineata. \/ Nu il citesc.<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Je le lis chaque matin. Je ne le lis pas.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Je le lis chaque matin. Je ne le lis pas.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">2<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Tu as envoy\u00e9 la facture? Oui, je <strong>l&#8217;<\/strong>ai envoy\u00e9e hier.<\/div>\n          <div class=\"audio-ro\">Ai trimis factura? Da, am trimis-o ieri. (acord: envoy\u00e9e &#8211; fem.)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Tu as envoy\u00e9 la facture? Oui, je l\\'ai envoy\u00e9e hier.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Tu as envoy\u00e9 la facture? Oui, je l\\'ai envoy\u00e9e hier.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">3<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Ces propositions sont int\u00e9ressantes. Examinez-<strong>les<\/strong> attentivement!<\/div>\n          <div class=\"audio-ro\">Aceste propuneri sunt interesante. Examinati-le cu atentie! (imp. afirm.)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Ces propositions sont int\u00e9ressantes. Examinez-les attentivement!', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Ces propositions sont int\u00e9ressantes. Examinez-les attentivement!', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">4<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Ce rapport? Ne <strong>le<\/strong> partagez pas encore.<\/div>\n          <div class=\"audio-ro\">Acest raport? Nu il distribuiti inca. (imp. negativ)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Ce rapport? Ne le partagez pas encore.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Ce rapport? Ne le partagez pas encore.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">5<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Elle attend son manager depuis une heure. Elle <strong>l&#8217;<\/strong>attend depuis une heure.<\/div>\n          <div class=\"audio-ro\">Ea isi asteapta managerul de o ora. Il asteapta de o ora.<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Elle attend son manager depuis une heure. Elle l\\'attend depuis une heure.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Elle attend son manager depuis une heure. Elle l\\'attend depuis une heure.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">6<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Nous avons valid\u00e9 ces modifications ce matin. Nous <strong>les<\/strong> avons valid\u00e9es ce matin.<\/div>\n          <div class=\"audio-ro\">Am validat aceste modificari azi dimineata. Le-am validat azi dimineata. (acord: valid\u00e9es)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Nous avons valid\u00e9 ces modifications ce matin. Nous les avons valid\u00e9es ce matin.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Nous avons valid\u00e9 ces modifications ce matin. Nous les avons valid\u00e9es ce matin.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">7<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Tu as contact\u00e9 l&#8217;\u00e9quipe RH? Oui, je <strong>l&#8217;<\/strong>ai contact\u00e9e hier matin.<\/div>\n          <div class=\"audio-ro\">Ai contactat echipa HR? Da, am contactat-o ieri dimineata. (\u00e9quipe = fem.)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Tu as contact\u00e9 l\\'\u00e9quipe RH? Oui, je l\\'ai contact\u00e9e hier matin.', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Tu as contact\u00e9 l\\'\u00e9quipe RH? Oui, je l\\'ai contact\u00e9e hier matin.', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"audio-row\">\n        <div class=\"audio-num\">8<\/div>\n        <div class=\"audio-content\">\n          <div class=\"audio-fr\">Ne lisez pas cette clause trop vite! Ne <strong>la<\/strong> lisez pas trop vite!<\/div>\n          <div class=\"audio-ro\">Nu cititi aceasta clauza prea repede! Nu o cititi prea repede! (imp. negativ)<\/div>\n          <div class=\"audio-actions\">\n            <button class=\"tts-btn\" onclick=\"speak('Ne lisez pas cette clause trop vite! Ne la lisez pas trop vite!', 1)\">\u25b6 Normal<\/button>\n            <button class=\"tts-btn slow\" onclick=\"speak('Ne lisez pas cette clause trop vite! Ne la lisez pas trop vite!', 0.65)\">\u25b6 Incetinit<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div style=\"text-align:center; margin-top: 32px;\">\n    <button class=\"check-btn\" onclick=\"showTab(1)\">Continua spre Dictare \u2192<\/button>\n  <\/div>\n<\/div>\n\n<!-- ===== TAB 1: DICTARE ===== -->\n<div class=\"lesson\" id=\"tab-1\">\n  <div class=\"lesson-header\">\n    <div class=\"lesson-num\">Lectia 1 &#8211; COD &#8211; Dictare<\/div>\n    <h1 class=\"lesson-title\">Exercitii de dictare<\/h1>\n    <p class=\"lesson-subtitle\">Asculta propozitia si scrie exact ce auzi. Poti asculta de mai multe ori, inclusiv incetinit.<\/p>\n  <\/div>\n\n  <div class=\"ex-type-badge badge-dictare\">\ud83c\udfa7 Dictare &#8211; asculta si scrie<\/div>\n\n  <div id=\"dict-1\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 1<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Je le lis chaque matin.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Je le lis chaque matin.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt1\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt1','Je le lis chaque matin.','fb-dt1')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt1\"><\/div>\n  <\/div>\n\n  <div id=\"dict-2\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 2<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Tu as envoy\u00e9 la facture? Je l\\'ai envoy\u00e9e hier.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Tu as envoy\u00e9 la facture? Je l\\'ai envoy\u00e9e hier.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt2\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt2','Tu as envoy\u00e9 la facture? Je l\\'ai envoy\u00e9e hier.','fb-dt2')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt2\"><\/div>\n  <\/div>\n\n  <div id=\"dict-3\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 3<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Examinez-les attentivement avant de les signer.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Examinez-les attentivement avant de les signer.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt3\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt3','Examinez-les attentivement avant de les signer.','fb-dt3')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt3\"><\/div>\n  <\/div>\n\n  <div id=\"dict-4\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 4<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Ne le partagez pas encore, il n\\'est pas finalis\u00e9.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Ne le partagez pas encore, il n\\'est pas finalis\u00e9.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt4\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt4','Ne le partagez pas encore, il n\\'est pas finalis\u00e9.','fb-dt4')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt4\"><\/div>\n  <\/div>\n\n  <div id=\"dict-5\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 5<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Nous les avons valid\u00e9es ce matin sans probl\u00e8me.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Nous les avons valid\u00e9es ce matin sans probl\u00e8me.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt5\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt5','Nous les avons valid\u00e9es ce matin sans probl\u00e8me.','fb-dt5')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt5\"><\/div>\n  <\/div>\n\n  <div id=\"dict-6\" class=\"dictation-card\">\n    <h4>\ud83c\udfa7 Propozitia 6 (mai dificila)<\/h4>\n    <div class=\"dictation-btns\">\n      <button class=\"dict-play\" onclick=\"speak('Je l\\'ai rencontr\u00e9e lors du s\u00e9minaire et je l\\'ai trouv\u00e9e tr\u00e8s comp\u00e9tente.', 1)\">\u25b6 Asculta<\/button>\n      <button class=\"dict-play slow-btn\" onclick=\"speak('Je l\\'ai rencontr\u00e9e lors du s\u00e9minaire et je l\\'ai trouv\u00e9e tr\u00e8s comp\u00e9tente.', 0.65)\">\u25b6 Incetinit<\/button>\n    <\/div>\n    <textarea class=\"dict-textarea\" id=\"dt6\" placeholder=\"Scrie aici ce ai auzit...\"><\/textarea>\n    <br>\n    <button class=\"dict-check\" onclick=\"checkDictation('dt6','Je l\\'ai rencontr\u00e9e lors du s\u00e9minaire et je l\\'ai trouv\u00e9e tr\u00e8s comp\u00e9tente.','fb-dt6')\">Verifica<\/button>\n    <div class=\"feedback\" id=\"fb-dt6\"><\/div>\n  <\/div>\n\n  <div style=\"text-align:center; margin-top: 32px;\">\n    <button class=\"check-btn\" onclick=\"showTab(2)\">Continua spre Traducere \u2192<\/button>\n  <\/div>\n<\/div>\n\n<!-- ===== TAB 2: TRADUCERE ===== -->\n<div class=\"lesson\" id=\"tab-2\">\n  <div class=\"lesson-header\">\n    <div class=\"lesson-num\">Lectia 1 &#8211; COD &#8211; Traducere<\/div>\n    <h1 class=\"lesson-title\">Exercitii de traducere<\/h1>\n    <p class=\"lesson-subtitle\">Citeste propozitia in romana si formuleaz-o in franceza. Atentie la alegerea pronumelui si la pozitia lui in propozitie.<\/p>\n  <\/div>\n\n  <div class=\"ex-type-badge badge-traducere\">\ud83d\udd01 Traducere RO \u2192 FR<\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 1<\/h4>\n    <div class=\"transl-ro\">Il citesc (raportul) in fiecare dimineata.<\/div>\n    <div class=\"transl-hint\">Indiciu: raport = masc. singular<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr1\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr1',['je le lis chaque matin','je le lis tous les matins'],'fb-tr1','rev-tr1')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr1')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr1\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr1\">Je le lis chaque matin.<\/div>\n  <\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 2<\/h4>\n    <div class=\"transl-ro\">Nu am trimis-o inca. (factura = fem.)<\/div>\n    <div class=\"transl-hint\">Indiciu: negatie + COD + pass\u00e9 compos\u00e9<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr2\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr2',['je ne l\\'ai pas encore envoy\u00e9e','je ne l\\'ai pas envoy\u00e9e encore'],'fb-tr2','rev-tr2')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr2')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr2\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr2\">Je ne l&#8217;ai pas encore envoy\u00e9e.<\/div>\n  <\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 3<\/h4>\n    <div class=\"transl-ro\">Examinati-le cu atentie inainte de a le semna!<\/div>\n    <div class=\"transl-hint\">Indiciu: imperativ afirmativ &#8211; COD dupa verb cu cratima<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr3\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr3',['examinez-les attentivement avant de les signer','examinez-les avec attention avant de les signer'],'fb-tr3','rev-tr3')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr3')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr3\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr3\">Examinez-les attentivement avant de les signer!<\/div>\n  <\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 4<\/h4>\n    <div class=\"transl-ro\">Nu il distribuiti inca, nu este finalizat.<\/div>\n    <div class=\"transl-hint\">Indiciu: imperativ negativ &#8211; COD ramane inaintea verbului<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr4\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr4',['ne le partagez pas encore, il n\\'est pas finalis\u00e9','ne le distribuez pas encore, il n\\'est pas finalis\u00e9'],'fb-tr4','rev-tr4')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr4')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr4\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr4\">Ne le partagez pas encore, il n&#8217;est pas finalis\u00e9.<\/div>\n  <\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 5<\/h4>\n    <div class=\"transl-ro\">Am intalnit-o la seminar si am gasit-o foarte competenta.<\/div>\n    <div class=\"transl-hint\">Indiciu: persoana fem. &#8211; acord obligatoriu cu participiul!<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr5\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr5',['je l\\'ai rencontr\u00e9e au s\u00e9minaire et je l\\'ai trouv\u00e9e tr\u00e8s comp\u00e9tente','je l\\'ai rencontr\u00e9e lors du s\u00e9minaire et je l\\'ai trouv\u00e9e tr\u00e8s comp\u00e9tente'],'fb-tr5','rev-tr5')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr5')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr5\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr5\">Je l&#8217;ai rencontr\u00e9e lors du s\u00e9minaire et je l&#8217;ai trouv\u00e9e tr\u00e8s comp\u00e9tente.<\/div>\n  <\/div>\n\n  <div class=\"transl-card\">\n    <h4>Propozitia 6<\/h4>\n    <div class=\"transl-ro\">Le-am validat pe toate azi dimineata, fara nicio problema.<\/div>\n    <div class=\"transl-hint\">Indiciu: fem. plural &#8211; acord la participiu!<\/div>\n    <input class=\"transl-input\" type=\"text\" id=\"tr6\" placeholder=\"Scrie in franceza...\">\n    <br>\n    <button class=\"transl-check\" onclick=\"checkTransl('tr6',['nous les avons valid\u00e9es ce matin sans probl\u00e8me','je les ai valid\u00e9es ce matin sans probl\u00e8me'],'fb-tr6','rev-tr6')\">Verifica<\/button>\n    <button class=\"reveal-btn\" onclick=\"revealAnswer('rev-tr6')\">Arata raspunsul<\/button>\n    <div class=\"feedback\" id=\"fb-tr6\"><\/div>\n    <div class=\"answer-reveal\" id=\"rev-tr6\">Nous les avons valid\u00e9es ce matin sans probl\u00e8me.<\/div>\n  <\/div>\n\n  <div style=\"text-align:center; margin-top: 32px;\">\n    <button class=\"check-btn\" onclick=\"showTab(3)\">Continua spre Scriere \u2192<\/button>\n  <\/div>\n<\/div>\n\n<!-- ===== TAB 3: SCRIERE ===== -->\n<div class=\"lesson\" id=\"tab-3\">\n  <div class=\"lesson-header\">\n    <div class=\"lesson-num\">Lectia 1 &#8211; COD &#8211; Scriere<\/div>\n    <h1 class=\"lesson-title\">Exercitii de reformulare<\/h1>\n    <p class=\"lesson-subtitle\">Inlocuieste substantivul subliniat cu pronumele COD corect si rescrie propozitia intreaga.<\/p>\n  <\/div>\n\n  <div class=\"ex-type-badge badge-scriere\">\u270f\ufe0f Reformulare &#8211; rescrie propozitia<\/div>\n\n  <div class=\"exercises\">\n    <div class=\"ex-header\"><span>A<\/span> Inlocuiti cu pronumele COD si rescrieti propozitia<\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Elle attend <em>son manager<\/em> depuis une heure.<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"elle l'attend depuis une heure\" id=\"sc1\">\n      <div class=\"feedback\" id=\"fb-sc1\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Nous avons valid\u00e9 <em>ces modifications<\/em> ce matin.<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"nous les avons valid\u00e9es ce matin\" id=\"sc2\">\n      <div class=\"feedback\" id=\"fb-sc2\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Tu as contact\u00e9 <em>l&#8217;\u00e9quipe RH<\/em>?<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"tu l'as contact\u00e9e?\" id=\"sc3\">\n      <div class=\"feedback\" id=\"fb-sc3\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Ne lisez pas <em>cette clause<\/em> trop vite!<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"ne la lisez pas trop vite!\" id=\"sc4\">\n      <div class=\"feedback\" id=\"fb-sc4\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Signez <em>ce contrat<\/em> avant vendredi!<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"signez-le avant vendredi!\" id=\"sc5\">\n      <div class=\"feedback\" id=\"fb-sc5\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Est-ce qu&#8217;il a compris <em>les instructions<\/em>?<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"est-ce qu'il les a comprises?\" id=\"sc6\">\n      <div class=\"feedback\" id=\"fb-sc6\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Je vais envoyer <em>la proposition<\/em> demain.<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"je vais l'envoyer demain\" id=\"sc7\">\n      <div class=\"feedback\" id=\"fb-sc7\"><\/div>\n    <\/div>\n\n    <div class=\"ex-item\">\n      <div class=\"ex-q\">Il faut analyser <em>ce rapport<\/em> avant la r\u00e9union.<br>\u2192<\/div>\n      <input class=\"ex-input\" style=\"max-width:100%\" type=\"text\" placeholder=\"Rescrie propozitia completa...\" data-answer=\"il faut l'analyser avant la r\u00e9union\" id=\"sc8\">\n      <div class=\"feedback\" id=\"fb-sc8\"><\/div>\n    <\/div>\n  <\/div>\n\n  <button class=\"check-btn\" onclick=\"checkScriere()\">Verifica toate<\/button>\n  <div class=\"score-display\" id=\"score-scriere\"><\/div>\n\n  <div style=\"text-align:center; margin-top: 32px;\">\n    <button class=\"check-btn\" onclick=\"showTab(4)\">Continua spre Oral \u2192<\/button>\n  <\/div>\n<\/div>\n\n<!-- ===== TAB 4: ORAL ===== -->\n<div class=\"lesson\" id=\"tab-4\">\n  <div class=\"lesson-header\">\n    <div class=\"lesson-num\">Lectia 1 &#8211; COD &#8211; Oral<\/div>\n    <h1 class=\"lesson-title\">Exercitii orale<\/h1>\n    <p class=\"lesson-subtitle\">Asculta modelul, apoi inregistreaza-ti raspunsul. Browserul va transcrie ce spui si vei putea compara cu raspunsul corect.<\/p>\n  <\/div>\n\n  <div class=\"no-speech\" id=\"no-speech-msg\">\n    Browserul tau nu suporta recunoasterea vocala. Incearca Chrome sau Edge pentru aceasta functie.\n  <\/div>\n\n  <div class=\"ex-type-badge badge-oral\">\ud83c\udfa4 Oral &#8211; asculta, repeta, reformuleaza<\/div>\n\n  <div class=\"oral-card\">\n    <h4>\ud83c\udfa4 Exercitiul 1 &#8211; Repeta dupa model<\/h4>\n    <div class=\"oral-prompt\">Je <strong>le<\/strong> lis chaque matin. \/ Je ne <strong>le<\/strong> lis pas.<\/div>\n    <div class=\"oral-expected\">Repeta exact: <span>Je le lis chaque matin. Je ne le lis pas.<\/span><\/div>\n    <div class=\"oral-controls\">\n      <button class=\"model-btn\" onclick=\"speak('Je le lis chaque matin. Je ne le lis pas.', 0.9)\">\u25b6 Asculta modelul<\/button>\n      <button class=\"rec-btn\" id=\"rec-1\" onclick=\"toggleRecording(1, 'je le lis chaque matin je ne le lis pas', 'transcript-1', 'eval-1')\">\ud83c\udf99 Inregistreaza<\/button>\n    <\/div>\n    <div class=\"transcript-box\" id=\"transcript-1\">Apasa &#8222;Inregistreaza&#8221; si vorbeste&#8230;<\/div>\n    <div class=\"speech-status\" id=\"status-1\"><\/div>\n    <div class=\"oral-eval\" id=\"eval-1\"><\/div>\n  <\/div>\n\n  <div class=\"oral-card\">\n    <h4>\ud83c\udfa4 Exercitiul 2 &#8211; Repeta dupa model<\/h4>\n    <div class=\"oral-prompt\">Ces propositions sont int\u00e9ressantes. Examinez-<strong>les<\/strong> attentivement!<\/div>\n    <div class=\"oral-expected\">Repeta exact: <span>Ces propositions sont int\u00e9ressantes. Examinez-les attentivement!<\/span><\/div>\n    <div class=\"oral-controls\">\n      <button class=\"model-btn\" onclick=\"speak('Ces propositions sont int\u00e9ressantes. Examinez-les attentivement!', 0.9)\">\u25b6 Asculta modelul<\/button>\n      <button class=\"rec-btn\" id=\"rec-2\" onclick=\"toggleRecording(2, 'ces propositions sont int\u00e9ressantes examinez les attentivement', 'transcript-2', 'eval-2')\">\ud83c\udf99 Inregistreaza<\/button>\n    <\/div>\n    <div class=\"transcript-box\" id=\"transcript-2\">Apasa &#8222;Inregistreaza&#8221; si vorbeste&#8230;<\/div>\n    <div class=\"speech-status\" id=\"status-2\"><\/div>\n    <div class=\"oral-eval\" id=\"eval-2\"><\/div>\n  <\/div>\n\n  <div class=\"oral-card\">\n    <h4>\ud83c\udfa4 Exercitiul 3 &#8211; Reformulare orala<\/h4>\n    <div class=\"oral-prompt\">Asculta intrebarea, raspunde cu pronumele COD:<br>&#8222;Tu as lu <strong>ce rapport<\/strong>?&#8221;<\/div>\n    <div class=\"oral-expected\">Raspuns asteptat: <span>Oui, je l&#8217;ai lu. \/ Non, je ne l&#8217;ai pas lu.<\/span><\/div>\n    <div class=\"oral-controls\">\n      <button class=\"model-btn\" onclick=\"speak('Tu as lu ce rapport?', 0.9)\">\u25b6 Asculta intrebarea<\/button>\n      <button class=\"model-btn\" style=\"background:var(--correct)\" onclick=\"speak('Oui, je l\\'ai lu. Non, je ne l\\'ai pas lu.', 0.9)\">\u25b6 Raspuns model<\/button>\n      <button class=\"rec-btn\" id=\"rec-3\" onclick=\"toggleRecording(3, 'je l\\'ai lu je ne l\\'ai pas lu', 'transcript-3', 'eval-3')\">\ud83c\udf99 Raspunde oral<\/button>\n    <\/div>\n    <div class=\"transcript-box\" id=\"transcript-3\">Apasa &#8222;Inregistreaza&#8221; si vorbeste&#8230;<\/div>\n    <div class=\"speech-status\" id=\"status-3\"><\/div>\n    <div class=\"oral-eval\" id=\"eval-3\"><\/div>\n  <\/div>\n\n  <div class=\"oral-card\">\n    <h4>\ud83c\udfa4 Exercitiul 4 &#8211; Reformulare orala<\/h4>\n    <div class=\"oral-prompt\">Raspunde la intrebare cu pronumele COD:<br>&#8222;Vous avez valid\u00e9 <strong>ces modifications<\/strong>?&#8221;<\/div>\n    <div class=\"oral-expected\">Raspuns asteptat: <span>Oui, nous les avons valid\u00e9es. \/ Non, nous ne les avons pas valid\u00e9es.<\/span><\/div>\n    <div class=\"oral-controls\">\n      <button class=\"model-btn\" onclick=\"speak('Vous avez valid\u00e9 ces modifications?', 0.9)\">\u25b6 Asculta intrebarea<\/button>\n      <button class=\"model-btn\" style=\"background:var(--correct)\" onclick=\"speak('Oui, nous les avons valid\u00e9es. Non, nous ne les avons pas valid\u00e9es.', 0.9)\">\u25b6 Raspuns model<\/button>\n      <button class=\"rec-btn\" id=\"rec-4\" onclick=\"toggleRecording(4, 'nous les avons valid\u00e9es nous ne les avons pas valid\u00e9es', 'transcript-4', 'eval-4')\">\ud83c\udf99 Raspunde oral<\/button>\n    <\/div>\n    <div class=\"transcript-box\" id=\"transcript-4\">Apasa &#8222;Inregistreaza&#8221; si vorbeste&#8230;<\/div>\n    <div class=\"speech-status\" id=\"status-4\"><\/div>\n    <div class=\"oral-eval\" id=\"eval-4\"><\/div>\n  <\/div>\n\n  <div class=\"oral-card\">\n    <h4>\ud83c\udfa4 Exercitiul 5 &#8211; Reformulare orala libera<\/h4>\n    <div class=\"oral-prompt\">Rephraseaza urmatoarea propozitie inlocuind substantivul cu pronumele COD:<br>&#8222;Il faut envoyer <strong>la proposition<\/strong> avant demain.&#8221;<\/div>\n    <div class=\"oral-expected\">Raspuns asteptat: <span>Il faut l&#8217;envoyer avant demain.<\/span><\/div>\n    <div class=\"oral-controls\">\n      <button class=\"model-btn\" onclick=\"speak('Il faut envoyer la proposition avant demain.', 0.9)\">\u25b6 Asculta<\/button>\n      <button class=\"model-btn\" style=\"background:var(--correct)\" onclick=\"speak('Il faut l\\'envoyer avant demain.', 0.9)\">\u25b6 Raspuns model<\/button>\n      <button class=\"rec-btn\" id=\"rec-5\" onclick=\"toggleRecording(5, 'il faut l\\'envoyer avant demain', 'transcript-5', 'eval-5')\">\ud83c\udf99 Raspunde oral<\/button>\n    <\/div>\n    <div class=\"transcript-box\" id=\"transcript-5\">Apasa &#8222;Inregistreaza&#8221; si vorbeste&#8230;<\/div>\n    <div class=\"speech-status\" id=\"status-5\"><\/div>\n    <div class=\"oral-eval\" id=\"eval-5\"><\/div>\n  <\/div>\n\n  <div class=\"tts-script\">\n    <h4>Script TTS &#8211; toate exemplele lectiei<\/h4>\n    <div class=\"tts-line\">Je le lis chaque matin. Je ne le lis pas.<\/div>\n    <div class=\"tts-line\">Tu as envoy\u00e9 la facture ? Je l&#8217;ai envoy\u00e9e hier.<\/div>\n    <div class=\"tts-line\">Examinez-les attentivement avant de les signer.<\/div>\n    <div class=\"tts-line\">Ne le partagez pas encore, il n&#8217;est pas finalis\u00e9.<\/div>\n    <div class=\"tts-line\">Nous les avons valid\u00e9es ce matin sans probl\u00e8me.<\/div>\n    <div class=\"tts-line\">Je l&#8217;ai rencontr\u00e9e lors du s\u00e9minaire et je l&#8217;ai trouv\u00e9e tr\u00e8s comp\u00e9tente.<\/div>\n    <div class=\"tts-line\">Il faut l&#8217;envoyer avant demain.<\/div>\n  <\/div>\n<\/div>\n\n<script>\n\/\/ ---- TABS ----\nconst tabProgress = [20, 40, 60, 80, 100];\nfunction showTab(idx) {\n  document.querySelectorAll('.lesson').forEach((l,i) => l.classList.toggle('active', i===idx));\n  document.querySelectorAll('.tab-btn').forEach((b,i) => b.classList.toggle('active', i===idx));\n  document.getElementById('progress').style.width = tabProgress[idx] + '%';\n  window.scrollTo(0,0);\n}\n\n\/\/ ---- TTS ----\nfunction speak(text, rate) {\n  if (!('speechSynthesis' in window)) return;\n  window.speechSynthesis.cancel();\n  const u = new SpeechSynthesisUtterance(text);\n  u.lang = 'fr-FR';\n  u.rate = rate || 0.9;\n  u.pitch = 1;\n  const voices = window.speechSynthesis.getVoices();\n  const frVoice = voices.find(v => v.lang && v.lang.startsWith('fr'));\n  if (frVoice) u.voice = frVoice;\n  window.speechSynthesis.speak(u);\n}\nif ('speechSynthesis' in window) {\n  window.speechSynthesis.onvoiceschanged = () => window.speechSynthesis.getVoices();\n}\n\n\/\/ ---- NORMALIZE ----\nfunction norm(s) {\n  return (s||'').toLowerCase().trim()\n    .replace(\/['']\/g,\"'\")\n    .replace(\/\\s+\/g,' ')\n    .replace(\/[\u00e0\u00e2\u00e4]\/g,'a')\n    .replace(\/[\u00e9\u00e8\u00ea\u00eb]\/g,'e')\n    .replace(\/[\u00ee\u00ef]\/g,'i')\n    .replace(\/[\u00f4\u00f6]\/g,'o')\n    .replace(\/[\u00f9\u00fb\u00fc]\/g,'u')\n    .replace(\/\u00e7\/g,'c')\n    .replace(\/[.,!?]\/g,'');\n}\n\n\/\/ ---- DICTATION ----\nfunction checkDictation(inputId, answer, fbId) {\n  const el = document.getElementById(inputId);\n  const fb = document.getElementById(fbId);\n  const userVal = norm(el.value);\n  const correctVal = norm(answer);\n  const isOk = userVal === correctVal;\n  el.classList.remove('correct','wrong');\n  el.classList.add(isOk ? 'correct' : 'wrong');\n  fb.className = 'feedback ' + (isOk ? 'show-correct' : 'show-wrong');\n  if (isOk) {\n    fb.textContent = 'Perfect! Ai scris corect.';\n  } else {\n    const words = correctVal.split(' ');\n    const userWords = userVal.split(' ');\n    let wrong = [];\n    words.forEach((w,i) => { if (userWords[i] !== w) wrong.push(w); });\n    fb.innerHTML = 'Raspuns corect: <em>' + answer + '<\/em>';\n  }\n}\n\n\/\/ ---- TRANSLATION ----\nfunction checkTransl(inputId, answers, fbId, revId) {\n  const el = document.getElementById(inputId);\n  const fb = document.getElementById(fbId);\n  const userVal = norm(el.value);\n  const isOk = answers.some(a => norm(a) === userVal);\n  el.classList.remove('correct','wrong');\n  el.classList.add(isOk ? 'correct' : 'wrong');\n  fb.className = 'feedback ' + (isOk ? 'show-correct' : 'show-wrong');\n  fb.textContent = isOk ? 'Corect!' : 'Nu e exact - apasa \"Arata raspunsul\" pentru a vedea varianta corecta.';\n}\n\nfunction revealAnswer(revId) {\n  const el = document.getElementById(revId);\n  el.classList.add('show');\n}\n\n\/\/ ---- SCRIERE CHECK ----\nfunction checkScriere() {\n  const items = [\n    {id:'sc1', ans:'elle l\\'attend depuis une heure'},\n    {id:'sc2', ans:'nous les avons validees ce matin'},\n    {id:'sc3', ans:['tu l\\'as contactee?','tu l\\'as contactee']},\n    {id:'sc4', ans:'ne la lisez pas trop vite!'},\n    {id:'sc5', ans:'signez-le avant vendredi!'},\n    {id:'sc6', ans:'est-ce qu\\'il les a comprises?'},\n    {id:'sc7', ans:'je vais l\\'envoyer demain'},\n    {id:'sc8', ans:'il faut l\\'analyser avant la reunion'}\n  ];\n  let correct = 0;\n  items.forEach(item => {\n    const el = document.getElementById(item.id);\n    const fb = document.getElementById('fb-' + item.id);\n    const userVal = norm(el.value);\n    const answers = Array.isArray(item.ans) ? item.ans : [item.ans];\n    const isOk = answers.some(a => norm(a) === userVal);\n    el.classList.remove('correct','wrong');\n    el.classList.add(isOk ? 'correct' : 'wrong');\n    if (fb) {\n      fb.className = 'feedback ' + (isOk ? 'show-correct' : 'show-wrong');\n      fb.textContent = isOk ? 'Corect!' : 'Raspuns corect: ' + (Array.isArray(item.ans) ? item.ans[0] : item.ans);\n    }\n    if (isOk) correct++;\n  });\n  const score = document.getElementById('score-scriere');\n  score.style.display = 'block';\n  const pct = Math.round(correct\/items.length*100);\n  score.innerHTML = 'Scor: <strong>' + correct + ' \/ ' + items.length + '<\/strong> (' + pct + '%) - ' + (pct>=80?'Excelent!':pct>=60?'Bine, revezi greselile.':'Reciteste teoria si incearca din nou.');\n}\n\n\/\/ ---- WEB SPEECH API - RECORDING ----\nlet activeRecognition = null;\nlet activeRecBtn = null;\n\nfunction toggleRecording(num, expected, transcriptId, evalId) {\n  const btn = document.getElementById('rec-' + num);\n  if (activeRecognition) {\n    activeRecognition.stop();\n    activeRecognition = null;\n    if (activeRecBtn) {\n      activeRecBtn.classList.remove('recording');\n      activeRecBtn.textContent = '\ud83c\udf99 Inregistreaza';\n    }\n    if (activeRecBtn === btn) {\n      activeRecBtn = null;\n      return;\n    }\n  }\n  startRecording(num, expected, transcriptId, evalId, btn);\n}\n\nfunction startRecording(num, expected, transcriptId, evalId, btn) {\n  const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\n  if (!SpeechRecognition) {\n    document.getElementById('no-speech-msg').style.display = 'block';\n    return;\n  }\n  const rec = new SpeechRecognition();\n  rec.lang = 'fr-FR';\n  rec.interimResults = true;\n  rec.continuous = false;\n  rec.maxAlternatives = 3;\n\n  activeRecognition = rec;\n  activeRecBtn = btn;\n  btn.classList.add('recording');\n  btn.textContent = '\u23f9 Stop';\n\n  const transcriptEl = document.getElementById(transcriptId);\n  const statusEl = document.getElementById('status-' + num);\n  const evalEl = document.getElementById(evalId);\n\n  transcriptEl.textContent = '...';\n  statusEl.textContent = 'Se asculta...';\n  evalEl.className = 'oral-eval';\n\n  rec.onresult = (e) => {\n    let interim = '';\n    let final = '';\n    for (let i = e.resultIndex; i < e.results.length; i++) {\n      if (e.results[i].isFinal) final += e.results[i][0].transcript;\n      else interim += e.results[i][0].transcript;\n    }\n    transcriptEl.textContent = final || interim;\n  };\n\n  rec.onend = () => {\n    btn.classList.remove('recording');\n    btn.textContent = '\ud83c\udf99 Inregistreaza din nou';\n    statusEl.textContent = 'Inregistrare finalizata.';\n    activeRecognition = null;\n    activeRecBtn = null;\n    evaluateOral(transcriptEl.textContent, expected, evalId);\n  };\n\n  rec.onerror = (e) => {\n    btn.classList.remove('recording');\n    btn.textContent = '\ud83c\udf99 Inregistreaza';\n    statusEl.textContent = 'Eroare: ' + e.error;\n    activeRecognition = null;\n    activeRecBtn = null;\n  };\n\n  rec.start();\n}\n\nfunction evaluateOral(spoken, expected, evalId) {\n  const evalEl = document.getElementById(evalId);\n  const spokenNorm = norm(spoken);\n  const expectedNorm = norm(expected);\n  const expectedWords = expectedNorm.split(' ').filter(Boolean);\n  const spokenWords = spokenNorm.split(' ').filter(Boolean);\n  const matched = expectedWords.filter(w => spokenWords.includes(w)).length;\n  const pct = matched \/ expectedWords.length;\n\n  if (pct >= 0.85) {\n    evalEl.className = 'oral-eval good';\n    evalEl.textContent = 'Excelent! Pronuntia si structura sunt corecte.';\n  } else if (pct >= 0.55) {\n    evalEl.className = 'oral-eval partial';\n    evalEl.textContent = 'Partial corect (' + Math.round(pct*100) + '%). Asculta modelul si incearca din nou.';\n  } else {\n    evalEl.className = 'oral-eval bad';\n    evalEl.textContent = 'Nu am recunoscut raspunsul asteptat. Asculta modelul incetinit si repeta.';\n  }\n}\n<\/script>\n<\/body>\n<\/html>","protected":false},"excerpt":{"rendered":"<p>Lectia 1 &#8211; COD | GeoIsTeaching GeoIsTeaching Teorie + Audio Dictare Traducere Scriere Oral Lectia 1 &#8211; COD Les pronoms CODle, la, l&#8217;, les Teoria, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"pmpro_default_level":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"class_list":["post-1701","page","type-page","status-publish","hentry","pmpro-has-access"],"aioseo_notices":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/pages\/1701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geoisteaching.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1701"}],"version-history":[{"count":2,"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/pages\/1701\/revisions"}],"predecessor-version":[{"id":1704,"href":"https:\/\/geoisteaching.com\/index.php?rest_route=\/wp\/v2\/pages\/1701\/revisions\/1704"}],"wp:attachment":[{"href":"https:\/\/geoisteaching.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}