{"id":168,"date":"2026-04-18T23:15:30","date_gmt":"2026-04-18T23:15:30","guid":{"rendered":"https:\/\/allenglish4u.com\/?page_id=168"},"modified":"2026-04-30T03:56:49","modified_gmt":"2026-04-30T03:56:49","slug":"dictation-b1-allergies","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/dictation\/dictation-b1-allergies\/","title":{"rendered":"Dictation B1 &#8211; Allergies"},"content":{"rendered":"\n<main class=\"lesson-page\">\n\n  <nav class=\"lesson-breadcrumb\" aria-label=\"Breadcrumb\">\n    <a href=\"..\/\">Home<\/a><span class=\"sep\">\u203a<\/span>\n    <a href=\"..\/pages\/dictation.html\">Dictation<\/a><span class=\"sep\">\u203a<\/span>\n    <a href=\"..\/pages\/dictation.html#b1\">B1 Intermediate<\/a><span class=\"sep\">\u203a<\/span>\n    <span>Allergies &amp; Health<\/span>\n  <\/nav>\n\n  <header class=\"lesson-header\">\n    <div class=\"lesson-tags\">\n      <span class=\"lesson-tag lesson-tag--purple\">\ud83c\udfa4 Dictation<\/span>\n      <span class=\"lesson-tag lesson-tag--outline\">B1 Intermediate<\/span>\n      <span class=\"lesson-tag lesson-tag--outline\">Topic 2<\/span>\n    <\/div>\n    <h1 class=\"lesson-title\">Allergies &amp; Health<\/h1>\n    <div class=\"lesson-meta\">\n      <span>\u23f1 ~5\u20136 min<\/span>\n      <span>\ud83c\udfa7 Listening + Spelling<\/span>\n      <span>\u270f\ufe0f Fill-in-the-Blank Exercise<\/span>\n    <\/div>\n  <\/header>\n\n  <!-- YouTube ID: 134rCuzHjg4 -->\n  <div class=\"lesson-video-wrap\">\n    <iframe\n      src=\"https:\/\/www.youtube.com\/embed\/134rCuzHjg4?rel=0&#038;modestbranding=1&#038;color=white\"\n      title=\"Dictation B1 \u2014 Allergies &amp; Health\"\n      allowfullscreen\n      loading=\"lazy\">\n    <\/iframe>\n  <\/div>\n\n  <div class=\"lesson-exercise\">\n    <div class=\"lesson-exercise-header\">\n      <span class=\"lesson-exercise-icon\">\u270f\ufe0f<\/span>\n      <div>\n        <h2 class=\"lesson-exercise-title\">Practice Exercise \u2014 Fill in the Blanks<\/h2>\n        <p class=\"lesson-exercise-desc\">Listen carefully and fill in the missing words. Health and allergy vocabulary \u2014 focus on correct spelling!<\/p>\n      <\/div>\n    <\/div>\n    <!-- Custom JS Exercise Engine Container -->\n    <div id=\"exercise-allergies-b1\"><\/div>\n  <\/div>\n\n  <nav class=\"lesson-nav\" aria-label=\"Lesson navigation\">\n    <a href=\"dictation-b1-inventions.html\" class=\"lesson-nav-btn lesson-nav-prev\">\u2190 Previous Lesson<\/a>\n    <a href=\"dictation-b1-planet-earth.html\" class=\"lesson-nav-btn lesson-nav-next\">Next Lesson \u2192<\/a>\n  <\/nav>\n\n<\/main>\n\n<!-- ================= AUTOMATED ASSETS ================= -->\n<style>\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   ALL ENGLISH 4U \u2014 GLOBAL STYLESHEET\n   Complete design system with responsive components\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 RESET & TOKENS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }\nhtml { scroll-behavior: smooth; font-size: 16px; }\n\n:root {\n  --c-blue-950:  #021638;  --c-blue-900:  #0A1F5C;  --c-blue-800:  #0D3785;\n  --c-blue-700:  #1245A8;  --c-blue-600:  #1565C0;  --c-blue-500:  #1976D2;\n  --c-blue-400:  #2196F3;  --c-blue-300:  #64B5F6;  --c-blue-200:  #90CAF9;\n  --c-blue-100:  #BBDEFB;  --c-blue-50:   #E3F2FD;  --c-blue-25:   #F0F7FF;\n  --c-green-700: #1B5E20;  --c-green-500: #2E7D32;  --c-green-400: #43A047;\n  --c-green-200: #A5D6A7;  --c-green-100: #C8E6C9;  --c-green-50:  #E8F5E9;\n  --c-orange-700: #BF360C; --c-orange-500: #E64A19; --c-orange-200: #FFAB91; --c-orange-100: #FFCCBC;\n  --c-orange-50:  #FBE9E7;\n  --c-purple-700: #4A148C; --c-purple-500: #6A1B9A; --c-purple-200: #CE93D8; --c-purple-100: #E1BEE7;\n  --c-purple-50:  #F3E5F5;\n  --c-dark:   #07112B;     --c-text:   #1A2B4A;     --c-muted:  #4E6280;\n  --c-subtle: #8FA3BF;     --c-border: #E2EAF4;     --c-bg:     #F8FAFF;\n  --c-white:  #FFFFFF;\n  --f-sans:  'Plus Jakarta Sans', system-ui, -apple-system, sans-serif;\n  --f-serif: 'Fraunces', Georgia, serif;\n  --space-xs:  4px;   --space-sm:  8px;   --space-md:  16px;  --space-lg:  24px;\n  --space-xl:  40px;  --space-2xl: 64px;  --space-3xl: 96px;\n  --r-sm:  6px;  --r-md:  10px;  --r-lg:  16px;  --r-xl:  24px;  --r-2xl: 32px;\n  --shadow-sm: 0 1px 4px rgba(7,17,43,0.06);\n  --shadow-md: 0 4px 20px rgba(7,17,43,0.08);\n  --shadow-lg: 0 12px 40px rgba(7,17,43,0.12);\n  --shadow-xl: 0 24px 64px rgba(7,17,43,0.16);\n  --shadow-blue-md: 0 8px 24px rgba(21,101,192,0.30);\n  --shadow-blue-lg: 0 16px 48px rgba(21,101,192,0.38);\n  --t-fast:   150ms ease;  --t-normal: 250ms ease;  --t-slow:   400ms ease;\n}\n\nbody {\n  font-family: var(--f-sans);\n  color: var(--c-text);\n  background: var(--c-white);\n  line-height: 1.6;\n  -webkit-font-smoothing: antialiased;\n  overflow-x: hidden;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 UTILITIES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.container { max-width: 1200px; margin: 0 auto; padding: 0 5%; }\n.section-label {\n  display: inline-block;\n  font-size: 12px; font-weight: 700; letter-spacing: .1em;\n  text-transform: uppercase; color: var(--c-blue-500);\n  margin-bottom: 12px;\n}\n.section-title {\n  font-size: clamp(28px, 4vw, 44px);\n  font-weight: 800; color: var(--c-dark);\n  line-height: 1.12; letter-spacing: -0.5px;\n  margin-bottom: 14px;\n}\n.section-sub {\n  font-size: 17px; color: var(--c-muted);\n  line-height: 1.75; max-width: 560px;\n}\n.section-sub.center { margin: 0 auto; text-align: center; }\n\n\/* Scroll reveal animations *\/\n.reveal {\n  opacity: 0;\n  transform: translateY(28px);\n  transition: opacity .65s cubic-bezier(.22,1,.36,1), transform .65s cubic-bezier(.22,1,.36,1);\n}\n.reveal.visible { opacity: 1; transform: none; }\n.reveal-d1 { transition-delay: .1s; }\n.reveal-d2 { transition-delay: .2s; }\n.reveal-d3 { transition-delay: .3s; }\n.reveal-d4 { transition-delay: .4s; }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 NAVBAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.navbar {\n  position: sticky; top: 0; z-index: 200;\n  height: 70px; display: flex; align-items: center;\n  padding: 0 5%;\n  background: rgba(255,255,255,0.88);\n  backdrop-filter: blur(24px) saturate(180%);\n  -webkit-backdrop-filter: blur(24px) saturate(180%);\n  border-bottom: 1px solid rgba(21,101,192,0.08);\n  transition: box-shadow var(--t-normal);\n}\n.navbar.scrolled { box-shadow: 0 4px 24px rgba(7,17,43,0.08); }\n\n.nav-logo {\n  display: flex; align-items: center; gap: 10px;\n  text-decoration: none; flex-shrink: 0; margin-right: auto;\n}\n.nav-logo-badge {\n  width: 38px; height: 38px; border-radius: 10px;\n  background: linear-gradient(135deg, var(--c-blue-500) 0%, var(--c-blue-800) 100%);\n  display: flex; align-items: center; justify-content: center;\n  font-size: 13px; font-weight: 800; color: #fff; letter-spacing: -.5px;\n  box-shadow: 0 4px 12px rgba(21,101,192,0.35);\n}\n.nav-logo-img {\n  width: 36px !important;\n  height: 36px !important;\n  max-width: 36px !important;\n  max-height: 36px !important;\n  border-radius: 50%;\n  object-fit: cover;\n  flex-shrink: 0;\n  display: block;\n  box-shadow: 0 3px 10px rgba(21,101,192,0.30);\n  transition: transform var(--t-fast);\n}\n.nav-logo:hover .nav-logo-img { transform: scale(1.08); }\n.nav-logo-name {\n  font-size: 17px; font-weight: 800; color: var(--c-blue-700);\n  letter-spacing: -.3px;\n}\n\n.nav-links {\n  display: flex; align-items: center; gap: 2px;\n}\n.nav-links a {\n  font-size: 14px; font-weight: 500; color: var(--c-muted);\n  text-decoration: none; padding: 7px 16px; border-radius: var(--r-md);\n  transition: color var(--t-fast), background var(--t-fast);\n}\n.nav-links a:hover, .nav-links a.active {\n  color: var(--c-blue-600); background: var(--c-blue-25);\n}\n\n.nav-cta {\n  margin-left: 20px;\n  display: flex; align-items: center; gap: 6px;\n  background: linear-gradient(135deg, var(--c-blue-500) 0%, var(--c-blue-700) 100%);\n  color: #fff; border: none; border-radius: var(--r-md);\n  padding: 10px 20px; font-size: 14px; font-weight: 700;\n  cursor: pointer; font-family: var(--f-sans);\n  box-shadow: var(--shadow-blue-md);\n  transition: transform var(--t-fast), box-shadow var(--t-fast);\n}\n.nav-cta:hover { transform: translateY(-1px); box-shadow: var(--shadow-blue-lg); }\n\n.nav-hamburger {\n  display: none; flex-direction: column; gap: 5px;\n  width: 28px; cursor: pointer; padding: 4px; margin-left: 16px;\n}\n.nav-hamburger span {\n  display: block; height: 2px; background: var(--c-text);\n  border-radius: 2px; transition: var(--t-normal);\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 HERO \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.hero {\n  position: relative; overflow: hidden;\n  min-height: 660px;\n  background: linear-gradient(145deg, var(--c-blue-950) 0%, var(--c-blue-900) 30%,\n                                      var(--c-blue-700) 65%, var(--c-blue-500) 100%);\n  display: flex; align-items: center;\n  padding: 80px 5% 60px;\n}\n\n.hero::before {\n  content: '';\n  position: absolute; inset: 0; pointer-events: none;\n  background:\n    radial-gradient(ellipse 900px 700px at 75% 55%, rgba(33,150,243,.14) 0%, transparent 55%),\n    radial-gradient(ellipse 500px 500px at 92%  8%, rgba(100,181,246,.12) 0%, transparent 50%),\n    radial-gradient(ellipse 350px 350px at  4% 85%, rgba(13,55,133,.40) 0%, transparent 55%),\n    radial-gradient(ellipse 240px 240px at 50% 90%, rgba(21,101,192,.25) 0%, transparent 50%);\n}\n\n.hero-inner {\n  position: relative; z-index: 2;\n  display: flex; align-items: center;\n  gap: 56px; width: 100%; max-width: 1200px; margin: 0 auto;\n}\n\n.hero-content { flex: 0 0 520px; max-width: 520px; }\n\n.hero-badge {\n  display: inline-flex; align-items: center; gap: 9px;\n  background: rgba(255,255,255,.10);\n  border: 1px solid rgba(255,255,255,.18);\n  border-radius: 99px; padding: 6px 16px 6px 10px;\n  font-size: 13px; font-weight: 500; color: rgba(255,255,255,.90);\n  margin-bottom: 28px;\n  backdrop-filter: blur(12px);\n}\n\n.hero-h1 {\n  font-size: clamp(36px, 4.5vw, 60px);\n  font-weight: 800; color: #fff;\n  line-height: 1.08; letter-spacing: -1.5px;\n  margin-bottom: 22px;\n}\n.hero-h1 .gradient-text {\n  background: linear-gradient(95deg, var(--c-blue-300) 0%, var(--c-blue-200) 50%, #fff 100%);\n  -webkit-background-clip: text; -webkit-text-fill-color: transparent;\n  background-clip: text;\n}\n\n.hero-sub {\n  font-size: 17px; color: rgba(255,255,255,.72);\n  line-height: 1.75; margin-bottom: 36px;\n}\n\n.hero-btns { display: flex; gap: 12px; margin-bottom: 48px; flex-wrap: wrap; }\n\n.btn-hero-primary {\n  display: flex; align-items: center; gap: 8px;\n  background: #fff; color: var(--c-blue-700);\n  border: none; border-radius: var(--r-md);\n  padding: 15px 28px; font-size: 15px; font-weight: 800;\n  cursor: pointer; font-family: var(--f-sans);\n  box-shadow: 0 8px 32px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.8);\n  transition: transform var(--t-fast), box-shadow var(--t-fast);\n}\n.btn-hero-primary:hover { transform: translateY(-2px); box-shadow: 0 14px 40px rgba(0,0,0,.30); }\n\n.btn-hero-ghost {\n  display: flex; align-items: center; gap: 8px;\n  background: rgba(255,255,255,.09);\n  border: 1.5px solid rgba(255,255,255,.25);\n  color: #fff; border-radius: var(--r-md);\n  padding: 15px 28px; font-size: 15px; font-weight: 700;\n  cursor: pointer; font-family: var(--f-sans);\n  backdrop-filter: blur(12px);\n  transition: background var(--t-fast), border-color var(--t-fast);\n}\n.btn-hero-ghost:hover { background: rgba(255,255,255,.16); border-color: rgba(255,255,255,.42); }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TRUST BAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.trust-bar {\n  background: var(--c-blue-25);\n  border-top: 1px solid rgba(21,101,192,.08);\n  border-bottom: 1px solid rgba(21,101,192,.08);\n  padding: 18px 5%;\n  display: flex; align-items: center; justify-content: center;\n  gap: 40px; flex-wrap: wrap;\n}\n.trust-item {\n  display: flex; align-items: center; gap: 8px;\n  font-size: 13px; color: var(--c-muted); font-weight: 500;\n}\n.trust-item strong { color: var(--c-blue-700); }\n.trust-sep {\n  width: 1px; height: 20px;\n  background: var(--c-blue-100);\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 CARDS GRID \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.cards-section { padding: var(--space-3xl) 5%; background: #fff; }\n.cards-header {\n  display: flex; align-items: flex-end;\n  justify-content: space-between; gap: 24px;\n  margin-bottom: var(--space-2xl);\n}\n\n.cards-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n  gap: 20px;\n}\n\n.course-card {\n  border-radius: var(--r-xl);\n  background: #fff;\n  border: 1px solid var(--c-border);\n  box-shadow: var(--shadow-sm);\n  overflow: hidden;\n  display: flex; flex-direction: column;\n  transition: transform var(--t-normal), box-shadow var(--t-normal), border-color var(--t-normal);\n  cursor: pointer;\n  text-decoration: none; color: inherit;\n}\n.course-card:hover {\n  transform: translateY(-6px);\n  box-shadow: var(--shadow-xl);\n  border-color: transparent;\n}\n\n.card-thumb {\n  height: 172px; position: relative;\n  display: flex; align-items: center; justify-content: center;\n  overflow: hidden;\n}\n.card-thumb::after {\n  content: '';\n  position: absolute;\n  bottom: 0; left: 0; right: 0; height: 64px;\n  background: linear-gradient(to top, rgba(0,0,0,.2), transparent);\n}\n.card-thumb-grammar::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: linear-gradient(140deg, #1245A8 0%, #2196F3 55%, #64B5F6 100%);\n}\n.card-thumb-toefl::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: linear-gradient(140deg, #1B5E20 0%, #43A047 55%, #A5D6A7 100%);\n}\n.card-thumb-ielts::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: linear-gradient(140deg, #870000 0%, #E64A19 55%, #FFAB40 100%);\n}\n.card-thumb-dictation::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: linear-gradient(140deg, #2D0044 0%, #6A1B9A 55%, #CE93D8 100%);\n}\n\n.thumb-emoji {\n  font-size: 62px;\n  filter: drop-shadow(0 6px 16px rgba(0,0,0,.20));\n  z-index: 1; position: relative;\n  transition: transform var(--t-normal);\n}\n.course-card:hover .thumb-emoji { transform: scale(1.1) rotate(-4deg); }\n\n.thumb-count {\n  position: absolute; bottom: 10px; right: 12px; z-index: 2;\n  background: rgba(0,0,0,.40); color: #fff;\n  font-size: 11px; font-weight: 700;\n  padding: 3px 9px; border-radius: 99px;\n  backdrop-filter: blur(6px);\n}\n\n.card-body { padding: 20px; flex: 1; display: flex; flex-direction: column; }\n.card-tag {\n  display: inline-flex; align-items: center;\n  font-size: 11px; font-weight: 700;\n  padding: 3px 11px; border-radius: 99px;\n  margin-bottom: 12px; align-self: flex-start;\n}\n.tag-blue   { background: var(--c-blue-50);   color: var(--c-blue-700); }\n.tag-green  { background: var(--c-green-50);  color: var(--c-green-700); }\n.tag-orange { background: var(--c-orange-50); color: var(--c-orange-700); }\n.tag-purple { background: var(--c-purple-50); color: var(--c-purple-700); }\n\n.card-title {\n  font-size: 20px; font-weight: 800; color: var(--c-dark);\n  margin-bottom: 8px; line-height: 1.2;\n}\n.card-desc {\n  font-size: 14px; color: var(--c-muted); line-height: 1.68;\n  margin-bottom: 20px; flex: 1;\n}\n\n.card-footer {\n  display: flex; align-items: center;\n  justify-content: space-between;\n  padding-top: 16px; border-top: 1px solid var(--c-border);\n}\n.card-cta {\n  display: flex; align-items: center; gap: 5px;\n  font-size: 13px; font-weight: 700;\n  border: none; background: none; cursor: pointer;\n  font-family: var(--f-sans);\n  padding: 8px 14px; border-radius: var(--r-md);\n  transition: background var(--t-fast);\n}\n.cta-blue   { color: var(--c-blue-700);   background: var(--c-blue-50); }\n.cta-green  { color: var(--c-green-700);  background: var(--c-green-50); }\n.cta-orange { color: var(--c-orange-700); background: var(--c-orange-50); }\n.cta-purple { color: var(--c-purple-700); background: var(--c-purple-50); }\n.cta-blue:hover   { background: var(--c-blue-100); }\n.cta-green:hover  { background: var(--c-green-100); }\n.cta-orange:hover { background: var(--c-orange-100); }\n.cta-purple:hover { background: var(--c-purple-100); }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LESSON PAGE HEADER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.page-header {\n  background: linear-gradient(145deg, var(--c-blue-950) 0%, var(--c-blue-700) 100%);\n  color: #fff;\n  padding: 60px 5% 40px;\n  position: relative; overflow: hidden;\n}\n.page-header::before {\n  content: '';\n  position: absolute; inset: 0;\n  background: radial-gradient(ellipse 800px 500px at 75% 50%, rgba(33,150,243,.15), transparent);\n}\n.page-header-inner { position: relative; z-index: 1; max-width: 1200px; margin: 0 auto; }\n.page-header-label {\n  display: inline-block;\n  font-size: 12px; font-weight: 700; letter-spacing: .1em;\n  text-transform: uppercase; color: var(--c-blue-300);\n  margin-bottom: 8px;\n}\n.page-header h1 {\n  font-size: clamp(28px, 4vw, 44px);\n  font-weight: 800;\n  line-height: 1.12; letter-spacing: -0.5px;\n  margin-bottom: 14px;\n}\n.page-header p {\n  font-size: 16px; color: rgba(255,255,255,.75);\n  line-height: 1.6; max-width: 600px;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 FOOTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nfooter {\n  background: var(--c-blue-950);\n  border-top: 1px solid rgba(255,255,255,.04);\n  padding: 56px 5% 28px;\n}\n.footer-grid {\n  display: grid;\n  grid-template-columns: 1.6fr 1fr 1fr 1fr;\n  gap: 40px; margin-bottom: 48px;\n}\n\n.footer-brand-logo {\n  width: 42px; height: 42px; border-radius: 11px;\n  background: linear-gradient(135deg, var(--c-blue-500), var(--c-blue-800));\n  display: flex; align-items: center; justify-content: center;\n  font-size: 14px; font-weight: 800; color: #fff;\n  margin-bottom: 14px;\n}\n.footer-brand-logo-img {\n  width: 44px !important;\n  height: 44px !important;\n  max-width: 44px !important;\n  max-height: 44px !important;\n  border-radius: 50%;\n  object-fit: cover;\n  display: block;\n  margin-bottom: 14px;\n  box-shadow: 0 4px 14px rgba(21,101,192,0.40);\n}\n.footer-brand-name { font-size: 18px; font-weight: 800; color: #fff; margin-bottom: 8px; }\n.footer-brand-desc {\n  font-size: 13px; color: rgba(255,255,255,.38);\n  line-height: 1.7; margin-bottom: 20px;\n}\n\n.footer-col h5 {\n  font-size: 12px; font-weight: 700; color: rgba(255,255,255,.85);\n  text-transform: uppercase; letter-spacing: .08em;\n  margin-bottom: 18px;\n}\n.footer-col a {\n  display: block; font-size: 13px;\n  color: rgba(255,255,255,.40); text-decoration: none;\n  margin-bottom: 10px; transition: color var(--t-fast);\n}\n.footer-col a:hover { color: rgba(255,255,255,.85); }\n\n.footer-bottom {\n  border-top: 1px solid rgba(255,255,255,.06);\n  padding-top: 24px;\n  display: flex; align-items: center;\n  justify-content: space-between; flex-wrap: wrap; gap: 12px;\n}\n.footer-copy { font-size: 12px; color: rgba(255,255,255,.25); }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SCROLL REVEAL ANIMATIONS \u2500\u2500\u2500 *\/\n.reveal {\n  opacity: 0;\n  transform: translateY(24px);\n  transition: opacity 0.55s cubic-bezier(.22,1,.36,1), transform 0.55s cubic-bezier(.22,1,.36,1);\n}\n.reveal.visible {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n\/* Stagger delays *\/\n.reveal-d1 { transition-delay: 0.10s; }\n.reveal-d2 { transition-delay: 0.18s; }\n.reveal-d3 { transition-delay: 0.26s; }\n.reveal-d4 { transition-delay: 0.34s; }\n\n\/* Reduce motion accessibility *\/\n@media (prefers-reduced-motion: reduce) {\n  .reveal {\n    opacity: 1; transform: none;\n    transition: none;\n  }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 RESPONSIVE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 1024px) {\n  .nav-links, .nav-cta { display: none; }\n  .nav-hamburger { display: flex; }\n\n}\n@media (max-width: 768px) {\n  .cards-header { flex-direction: column; align-items: flex-start; }\n  .footer-grid { grid-template-columns: 1fr 1fr; }\n  .trust-bar { gap: 20px; }\n  .trust-sep { display: none; }\n  .hero { padding: 60px 5% 48px; min-height: auto; }\n  .hero-content { flex: 1 1 auto; max-width: 100%; }\n  .hero-h1 { font-size: clamp(28px, 8vw, 44px); }\n}\n@media (max-width: 480px) {\n  .footer-grid { grid-template-columns: 1fr; }\n  .hero-btns { flex-direction: column; }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 MOBILE NAV \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\/* Overlay backdrop *\/\n#nav-overlay {\n  display: none;\n  position: fixed; inset: 0; z-index: 299;\n  background: rgba(2,22,56,0.55);\n  backdrop-filter: blur(4px);\n  -webkit-backdrop-filter: blur(4px);\n  opacity: 0;\n  transition: opacity var(--t-normal);\n}\n#nav-overlay.show {\n  display: block;\n  opacity: 1;\n}\n\n\/* Mobile nav drawer *\/\n#mobile-nav {\n  position: fixed;\n  top: 0; right: -340px;\n  width: min(340px, 92vw);\n  height: 100dvh;\n  z-index: 300;\n  background: #fff;\n  box-shadow: -8px 0 40px rgba(7,17,43,0.18);\n  display: flex; flex-direction: column;\n  overflow-y: auto;\n  transition: right var(--t-slow) cubic-bezier(.22,1,.36,1);\n  border-radius: 0;\n}\n#mobile-nav.open { right: 0; }\n\n.mobile-nav-header {\n  display: flex; align-items: center;\n  justify-content: space-between;\n  padding: 18px 20px;\n  border-bottom: 1px solid var(--c-border);\n  flex-shrink: 0;\n}\n.mobile-brand {\n  display: flex; align-items: center; gap: 10px;\n}\n.mobile-brand-name {\n  font-size: 16px; font-weight: 800;\n  color: var(--c-blue-700);\n}\n.mobile-close {\n  width: 36px; height: 36px;\n  border: 1px solid var(--c-border);\n  border-radius: var(--r-md);\n  background: var(--c-bg);\n  color: var(--c-muted);\n  font-size: 14px; cursor: pointer;\n  display: flex; align-items: center; justify-content: center;\n  transition: background var(--t-fast), color var(--t-fast);\n}\n.mobile-close:hover { background: var(--c-blue-50); color: var(--c-blue-700); }\n\n.mobile-nav-links {\n  flex: 1; padding: 20px 16px;\n  display: flex; flex-direction: column; gap: 4px;\n}\n.mobile-nav-links a {\n  display: flex; align-items: center;\n  font-size: 15px; font-weight: 600;\n  color: var(--c-text); text-decoration: none;\n  padding: 12px 16px; border-radius: var(--r-md);\n  transition: background var(--t-fast), color var(--t-fast);\n}\n.mobile-nav-links a:hover,\n.mobile-nav-links a.active {\n  background: var(--c-blue-50);\n  color: var(--c-blue-700);\n}\n\n.mobile-nav-cta {\n  padding: 20px 16px 28px;\n  border-top: 1px solid var(--c-border);\n  flex-shrink: 0;\n}\n.btn-mobile-cta {\n  display: flex; align-items: center; justify-content: center;\n  gap: 8px; width: 100%;\n  background: linear-gradient(135deg, var(--c-blue-500), var(--c-blue-700));\n  color: #fff; border: none; border-radius: var(--r-md);\n  padding: 14px 24px; font-size: 15px; font-weight: 700;\n  cursor: pointer; font-family: var(--f-sans); text-decoration: none;\n  box-shadow: var(--shadow-blue-md);\n  transition: opacity var(--t-fast);\n}\n.btn-mobile-cta:hover { opacity: 0.9; }\n\n\/* Hamburger animation when open *\/\n.nav-hamburger[aria-expanded=\"true\"] span:nth-child(1) {\n  transform: translateY(7px) rotate(45deg);\n}\n.nav-hamburger[aria-expanded=\"true\"] span:nth-child(2) {\n  opacity: 0;\n}\n.nav-hamburger[aria-expanded=\"true\"] span:nth-child(3) {\n  transform: translateY(-7px) rotate(-45deg);\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LESSON PAGE HEADER (enhanced) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.page-header .breadcrumb-nav {\n  display: flex; align-items: center; gap: 6px;\n  font-size: 12px; font-weight: 600;\n  color: rgba(255,255,255,.55);\n  margin-bottom: 14px; flex-wrap: wrap;\n}\n.page-header .breadcrumb-nav a {\n  color: rgba(255,255,255,.70); text-decoration: none;\n  transition: color var(--t-fast);\n}\n.page-header .breadcrumb-nav a:hover { color: #fff; }\n.page-header .breadcrumb-nav .sep { color: rgba(255,255,255,.30); }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PROGRESS INDICATOR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.lesson-progress-bar {\n  position: fixed; top: 0; left: 0; right: 0; height: 3px;\n  background: linear-gradient(90deg, var(--c-blue-500), var(--c-blue-300));\n  transform-origin: left;\n  transform: scaleX(0);\n  z-index: 201;\n  transition: transform 0.1s linear;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 COURSE CARD GLOW \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.course-card {\n  --mouse-x: 50%;\n  --mouse-y: 50%;\n}\n.course-card::after {\n  content: '';\n  position: absolute; inset: 0;\n  border-radius: var(--r-xl);\n  opacity: 0;\n  background: radial-gradient(\n    200px circle at var(--mouse-x) var(--mouse-y),\n    rgba(21,101,192,0.06),\n    transparent 70%\n  );\n  transition: opacity var(--t-fast);\n  pointer-events: none;\n}\n.course-card:hover::after { opacity: 1; }\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 COMING SOON BADGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.badge-soon {\n  display: inline-flex; align-items: center;\n  font-size: 10px; font-weight: 700;\n  padding: 2px 8px; border-radius: 99px;\n  background: rgba(0,0,0,.08); color: var(--c-muted);\n  letter-spacing: .04em; text-transform: uppercase;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 TOAST NOTIFICATION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ae4u-toast {\n  position: fixed; bottom: 24px; right: 24px;\n  background: var(--c-blue-900);\n  color: #fff; border-radius: var(--r-md);\n  padding: 14px 20px; font-size: 14px;\n  box-shadow: 0 8px 32px rgba(0,0,0,.25);\n  z-index: 400;\n  transform: translateY(80px);\n  opacity: 0;\n  transition: transform var(--t-normal), opacity var(--t-normal);\n}\n.ae4u-toast.show {\n  transform: translateY(0); opacity: 1;\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 STICKY PROGRESS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@keyframes pulse-dot {\n  0%, 100% { transform: scale(1); opacity: 1; }\n  50% { transform: scale(1.35); opacity: .65; }\n}\n\n\/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 LESSON PAGE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.lesson-page {\n  max-width: 900px;\n  margin: 0 auto;\n  padding: 48px 5% 80px;\n}\n\n.lesson-breadcrumb {\n  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;\n  font-size: 13px; font-weight: 500; color: var(--c-muted);\n  margin-bottom: 22px;\n}\n.lesson-breadcrumb a { color: var(--c-blue-600); text-decoration: none; }\n.lesson-breadcrumb a:hover { text-decoration: underline; }\n.lesson-breadcrumb .sep { color: var(--c-border); }\n\n.lesson-header { margin-bottom: 32px; }\n.lesson-tags { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }\n.lesson-tag {\n  display: inline-flex; align-items: center; gap: 5px;\n  font-size: 11px; font-weight: 700; letter-spacing: .06em;\n  padding: 4px 12px; border-radius: 99px; text-transform: uppercase;\n}\n.lesson-tag--green  { background: var(--c-green-50);  color: var(--c-green-700); }\n.lesson-tag--purple { background: var(--c-purple-50); color: var(--c-purple-700); }\n.lesson-tag--blue   { background: var(--c-blue-50);   color: var(--c-blue-700); }\n.lesson-tag--orange { background: var(--c-orange-50); color: var(--c-orange-700); }\n.lesson-tag--outline {\n  background: var(--c-bg); border: 1px solid var(--c-border); color: var(--c-muted);\n}\n\n.lesson-title {\n  font-size: clamp(24px, 4vw, 38px);\n  font-weight: 800; color: var(--c-dark);\n  line-height: 1.12; letter-spacing: -0.5px; margin-bottom: 14px;\n}\n.lesson-meta {\n  display: flex; align-items: center; gap: 20px;\n  font-size: 14px; color: var(--c-muted); flex-wrap: wrap;\n}\n\n\/* \u2500\u2500 Video \u2500\u2500 *\/\n.lesson-video-wrap {\n  position: relative; width: 100%; padding-bottom: 56.25%; height: 0;\n  overflow: hidden; border-radius: var(--r-xl);\n  box-shadow: var(--shadow-lg);\n  margin-bottom: 48px; background: #000;\n}\n.lesson-video-wrap iframe {\n  position: absolute; top: 0; left: 0;\n  width: 100%; height: 100%; border: none;\n}\n\n.lesson-video-soon {\n  display: flex; flex-direction: column; align-items: center;\n  justify-content: center; text-align: center;\n  aspect-ratio: 16 \/ 9;\n  background: linear-gradient(145deg, var(--c-blue-950) 0%, var(--c-blue-900) 100%);\n  border-radius: var(--r-xl); margin-bottom: 48px; padding: 40px 24px; gap: 10px;\n}\n.lesson-video-soon strong { color: #fff; font-size: 20px; font-weight: 800; display: block; }\n.lesson-video-soon p { color: rgba(255,255,255,.60); font-size: 14px; margin: 0; line-height: 1.65; }\n.lesson-video-soon a { color: var(--c-blue-300); }\n\n\/* \u2500\u2500 Exercise \u2500\u2500 *\/\n.lesson-exercise {\n  background: var(--c-bg); border: 1px solid var(--c-border);\n  border-radius: var(--r-xl); padding: 28px; margin-bottom: 48px;\n}\n.lesson-exercise-header {\n  display: flex; gap: 14px; align-items: flex-start;\n  padding-bottom: 20px; margin-bottom: 20px;\n  border-bottom: 1px solid var(--c-border);\n}\n.lesson-exercise-icon { font-size: 26px; flex-shrink: 0; line-height: 1; }\n.lesson-exercise-title { font-size: 16px; font-weight: 700; color: var(--c-blue-900); margin: 0 0 4px; }\n.lesson-exercise-desc  { font-size: 13px; color: var(--c-muted); margin: 0; }\n\n.lesson-h5p-placeholder {\n  background: #fff; border: 2px dashed var(--c-border);\n  border-radius: var(--r-lg); padding: 48px 24px; text-align: center; color: var(--c-muted);\n}\n.lesson-h5p-icon { font-size: 40px; display: block; margin-bottom: 14px; }\n.lesson-h5p-placeholder strong { display: block; font-size: 16px; color: var(--c-dark); margin-bottom: 6px; }\n.lesson-h5p-placeholder span   { font-size: 12px; }\n\n\/* \u2500\u2500 Prev \/ Next navigation \u2500\u2500 *\/\n.lesson-nav {\n  display: flex; align-items: center;\n  justify-content: space-between; gap: 12px;\n  padding-top: 24px; border-top: 1px solid var(--c-border);\n}\n.lesson-nav-btn {\n  display: inline-flex; align-items: center; gap: 8px;\n  font-size: 14px; font-weight: 700; font-family: var(--f-sans);\n  padding: 11px 22px; border-radius: var(--r-md);\n  text-decoration: none !important; border: none; cursor: pointer;\n  transition: all var(--t-fast);\n}\n.lesson-nav-prev { background: var(--c-blue-50);   color: var(--c-blue-700); }\n.lesson-nav-prev:hover { background: var(--c-blue-100); color: var(--c-blue-700); }\n.lesson-nav-next { background: var(--c-blue-600); color: #fff !important; margin-left: auto; }\n.lesson-nav-next:hover { background: var(--c-blue-700); }\n.lesson-nav-disabled { opacity: 0.4; cursor: default; pointer-events: none; }\n\n@media (max-width: 520px) {\n  .lesson-nav { flex-direction: column; }\n  .lesson-nav-next, .lesson-nav-prev { width: 100%; justify-content: center; margin-left: 0; }\n  .lesson-meta { gap: 12px; }\n}\n\n\n\/**\n * ================================================================\n * All English 4U \u2014 Custom CSS Overrides\n * D\u00e1n v\u00e0o: WP Admin \u2192 Appearance \u2192 Customize \u2192 Additional CSS\n * Ho\u1eb7c upload qua SFTP \u2192 theme child stylesheet\n * ================================================================\n * SECTIONS:\n *   1. Design Tokens (CSS Variables)\n *   2. Global Base\n *   3. Navigation\n *   4. Lesson Page Layout\n *   5. H5P Overrides\n *   6. Responsive\n * ================================================================\n *\/\n\n\/* \u2500\u2500 1. DESIGN TOKENS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n:root {\n  --ae4u-blue-950:  #021638;\n  --ae4u-blue-900:  #0A1F5C;\n  --ae4u-blue-700:  #1245A8;\n  --ae4u-blue-600:  #1565C0;\n  --ae4u-blue-500:  #1976D2;\n  --ae4u-blue-50:   #E3F2FD;\n  --ae4u-green-500: #2E7D32;\n  --ae4u-green-50:  #E8F5E9;\n  --ae4u-text:      #1A2B4A;\n  --ae4u-muted:     #4E6280;\n  --ae4u-border:    #E2EAF4;\n  --ae4u-bg:        #F8FAFF;\n  --ae4u-radius-md: 10px;\n  --ae4u-radius-lg: 16px;\n  --ae4u-font:      'Plus Jakarta Sans', system-ui, -apple-system, sans-serif;\n}\n\n\/* \u2500\u2500 2. GLOBAL BASE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nbody {\n  font-family: var(--ae4u-font) !important;\n  color: var(--ae4u-text);\n  background: #fff;\n}\n\n\/* T\u1eaft default blog post style tr\u00ean lesson pages *\/\n.wp-block-post-title {\n  font-size: clamp(22px, 3vw, 36px);\n  font-weight: 800;\n  color: var(--ae4u-blue-900);\n  letter-spacing: -0.5px;\n  line-height: 1.2;\n  margin-bottom: 20px;\n}\n\n\/* \u2500\u2500 3. NAVIGATION (Extendable theme override) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.wp-block-navigation {\n  gap: 4px;\n}\n\n.wp-block-navigation-item__content {\n  font-size: 14px;\n  font-weight: 500;\n  color: var(--ae4u-muted);\n  padding: 7px 16px;\n  border-radius: var(--ae4u-radius-md);\n  transition: color 150ms ease, background 150ms ease;\n}\n\n.wp-block-navigation-item__content:hover {\n  color: var(--ae4u-blue-600);\n  background: var(--ae4u-blue-50);\n  text-decoration: none;\n}\n\n\/* Logo text *\/\n.wp-block-site-title a {\n  font-size: 18px;\n  font-weight: 800;\n  color: var(--ae4u-blue-700);\n  letter-spacing: -0.3px;\n  text-decoration: none;\n}\n\n\/* \u2500\u2500 4. LESSON PAGE LAYOUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n\/* YouTube embed container *\/\n.wp-block-embed-youtube {\n  border-radius: var(--ae4u-radius-lg);\n  overflow: hidden;\n  box-shadow: 0 8px 32px rgba(7, 17, 43, 0.12);\n  margin-bottom: 24px;\n}\n\n\/* H5P exercise wrapper *\/\n.h5p-iframe-wrapper {\n  background: var(--ae4u-bg);\n  border: 1px solid var(--ae4u-border);\n  border-radius: var(--ae4u-radius-lg);\n  padding: 4px;\n  margin-top: 8px;\n  overflow: hidden;\n}\n\n\/* Lesson page max-width *\/\n.wp-site-blocks .wp-block-post-content {\n  max-width: 860px;\n  margin: 0 auto;\n  padding: 0 20px 60px;\n}\n\n\/* Breadcrumb \/ back link *\/\n.lesson-back-link {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--ae4u-blue-600);\n  text-decoration: none;\n  padding: 6px 14px;\n  background: var(--ae4u-blue-50);\n  border-radius: var(--ae4u-radius-md);\n  margin-bottom: 20px;\n  transition: background 150ms ease;\n}\n\n.lesson-back-link:hover {\n  background: var(--ae4u-blue-50);\n  text-decoration: none;\n  filter: brightness(0.95);\n}\n\n\/* \u2500\u2500 5. H5P OVERRIDES \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n\/* Kh\u1edbp m\u00e0u button H5P v\u1edbi design system *\/\n.h5p-content .h5p-joubelui-button,\n.h5p-content button[class*=\"h5p-\"] {\n  background: var(--ae4u-blue-600) !important;\n  color: #fff !important;\n  border-radius: var(--ae4u-radius-md) !important;\n  font-family: var(--ae4u-font) !important;\n  font-weight: 700 !important;\n  border: none !important;\n  padding: 10px 20px !important;\n}\n\n.h5p-content .h5p-joubelui-button:hover {\n  background: var(--ae4u-blue-700) !important;\n}\n\n\/* H5P score bar *\/\n.h5p-joubelui-score-bar-full {\n  background: var(--ae4u-blue-500) !important;\n}\n\n\/* H5P container min-height *\/\n.h5p-iframe-wrapper iframe {\n  min-height: 300px;\n}\n\n\/* \u2500\u2500 6. RESPONSIVE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 768px) {\n  .wp-block-post-title {\n    font-size: 24px;\n  }\n\n  .wp-block-embed-youtube {\n    border-radius: 10px;\n    margin-bottom: 16px;\n  }\n\n  .h5p-iframe-wrapper {\n    border-radius: 10px;\n    padding: 2px;\n  }\n\n  .wp-site-blocks .wp-block-post-content {\n    padding: 0 16px 40px;\n  }\n}\n\n@media (max-width: 480px) {\n  .wp-block-navigation {\n    display: none; \/* Mobile nav handled by theme hamburger *\/\n  }\n}\n\n\/* \u2500\u2500 7. LESSON PAGE \u2014 Full Layout \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n\/* Breadcrumb bar *\/\n.ae4u-breadcrumb {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--ae4u-muted);\n  margin-bottom: 14px;\n  flex-wrap: wrap;\n}\n.ae4u-breadcrumb a {\n  color: var(--ae4u-blue-600);\n  text-decoration: none;\n  transition: color 150ms;\n}\n.ae4u-breadcrumb a:hover { color: var(--ae4u-blue-700); }\n.ae4u-breadcrumb .ae4u-sep { color: var(--ae4u-border); }\n\n\/* Meta chips *\/\n.ae4u-lesson-chips {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-bottom: 28px;\n}\n.ae4u-chip {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  font-size: 12px;\n  font-weight: 600;\n  padding: 4px 12px;\n  border-radius: 99px;\n  background: var(--ae4u-bg);\n  border: 1px solid var(--ae4u-border);\n  color: var(--ae4u-muted);\n}\n.ae4u-chip--green {\n  background: var(--ae4u-green-50);\n  border-color: transparent;\n  color: var(--ae4u-green-500);\n}\n\n\/* Exercise section wrapper *\/\n.ae4u-exercise-section {\n  background: var(--ae4u-bg);\n  border: 1px solid var(--ae4u-border);\n  border-radius: var(--ae4u-radius-lg);\n  padding: 28px;\n  margin-top: 8px;\n}\n\/* wp:group adds extra padding \u2014 reset it *\/\n.ae4u-exercise-section.wp-block-group {\n  padding: 28px !important;\n}\n\n\/* Exercise header row *\/\n.ae4u-exercise-label {\n  display: flex;\n  align-items: flex-start;\n  gap: 14px;\n  margin-bottom: 20px;\n  padding-bottom: 18px;\n  border-bottom: 1px solid var(--ae4u-border);\n}\n.ae4u-exercise-icon { font-size: 26px; flex-shrink: 0; }\n.ae4u-exercise-title {\n  font-size: 16px !important;\n  font-weight: 700 !important;\n  color: var(--ae4u-blue-900) !important;\n  margin: 0 0 3px !important;\n  line-height: 1.3 !important;\n}\n.ae4u-exercise-desc {\n  font-size: 13px !important;\n  color: var(--ae4u-muted) !important;\n  margin: 0 !important;\n  line-height: 1.5 !important;\n}\n\n\/* Prev \/ Next navigation *\/\n.ae4u-lesson-nav {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n  margin-top: 44px;\n  padding-top: 24px;\n  border-top: 1px solid var(--ae4u-border);\n}\n.ae4u-lesson-nav__prev,\n.ae4u-lesson-nav__next {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 14px;\n  font-weight: 700;\n  padding: 10px 20px;\n  border-radius: var(--ae4u-radius-md);\n  text-decoration: none !important;\n  transition: background 150ms, color 150ms;\n}\n.ae4u-lesson-nav__prev {\n  color: var(--ae4u-blue-600);\n  background: var(--ae4u-blue-50);\n}\n.ae4u-lesson-nav__prev:hover { filter: brightness(0.95); }\n.ae4u-lesson-nav__next {\n  color: #fff !important;\n  background: var(--ae4u-blue-600);\n  margin-left: auto;\n}\n.ae4u-lesson-nav__next:hover { background: var(--ae4u-blue-700); }\n.ae4u-lesson-nav__disabled {\n  opacity: 0.4;\n  cursor: default;\n  pointer-events: none;\n}\n\n@media (max-width: 520px) {\n  .ae4u-lesson-nav { flex-direction: column; align-items: stretch; }\n  .ae4u-lesson-nav__next { margin-left: 0; justify-content: center; }\n  .ae4u-lesson-nav__prev { justify-content: center; }\n}\n\n\/* \u2500\u2500 8. COURSE INDEX PAGE (TOEFL \/ Dictation) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.ae4u-index-wrap { padding: 4px 0 48px; }\n.ae4u-step-section { margin-bottom: 64px; }\n\n.ae4u-step-header { margin-bottom: 24px; }\n.ae4u-step-title {\n  font-size: 26px; font-weight: 800;\n  color: var(--ae4u-blue-900);\n  margin: 0 0 6px; line-height: 1.2;\n}\n.ae4u-step-desc {\n  font-size: 15px; color: var(--ae4u-muted);\n  line-height: 1.6; margin: 0;\n}\n\n.ae4u-book-block { margin-bottom: 40px; }\n.ae4u-book-label {\n  display: flex; align-items: center; gap: 8px;\n  font-size: 12px; font-weight: 700;\n  letter-spacing: .07em; text-transform: uppercase;\n  color: var(--ae4u-green-500);\n  padding-bottom: 10px;\n  border-bottom: 2px solid #C8E6C9;\n  margin-bottom: 16px;\n}\n.ae4u-book-icon {\n  width: 26px; height: 26px; border-radius: 6px;\n  background: var(--ae4u-green-50);\n  display: flex; align-items: center; justify-content: center;\n  font-size: 13px;\n}\n\n.ae4u-lessons-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(175px, 1fr));\n  gap: 12px;\n}\n\n.ae4u-lesson-card {\n  border: 1px solid var(--ae4u-border);\n  border-radius: var(--ae4u-radius-md);\n  padding: 16px 14px;\n  text-decoration: none !important;\n  display: flex; flex-direction: column; gap: 4px;\n  transition: transform 200ms, box-shadow 200ms, border-color 200ms;\n}\n.ae4u-lesson-card--available {\n  background: #fff;\n  border-color: #A5D6A7;\n  color: var(--ae4u-blue-900);\n}\n.ae4u-lesson-card--available:hover {\n  transform: translateY(-3px);\n  box-shadow: 0 8px 24px rgba(46,125,50,.14);\n  border-color: var(--ae4u-green-500);\n}\n.ae4u-lesson-card--soon {\n  background: var(--ae4u-bg);\n  border-color: var(--ae4u-border);\n  color: var(--ae4u-muted);\n  cursor: default;\n}\n.ae4u-lesson-card__num {\n  font-size: 11px; font-weight: 700;\n  letter-spacing: .06em; text-transform: uppercase;\n}\n.ae4u-lesson-card--available .ae4u-lesson-card__num { color: var(--ae4u-green-500); }\n.ae4u-lesson-card--soon    .ae4u-lesson-card__num { color: var(--ae4u-muted); opacity: .7; }\n.ae4u-lesson-card__title {\n  font-size: 13px; font-weight: 600;\n  line-height: 1.35; flex: 1;\n}\n.ae4u-lesson-card__badges {\n  display: flex; gap: 5px; flex-wrap: wrap; margin-top: 8px;\n}\n.ae4u-badge--video, .ae4u-badge--h5p {\n  font-size: 10px; font-weight: 700;\n  padding: 2px 8px; border-radius: 99px;\n}\n.ae4u-badge--video { background: var(--ae4u-blue-50);  color: var(--ae4u-blue-600); }\n.ae4u-badge--h5p   { background: var(--ae4u-green-50); color: var(--ae4u-green-500); }\n.ae4u-badge--soon  { font-size: 11px; margin-top: 6px; color: var(--ae4u-muted); }\n\n\/* Step 2 uses blue accent instead of green *\/\n.ae4u-step-section--step2 .ae4u-book-label { color: var(--ae4u-blue-600); border-color: var(--ae4u-blue-50); }\n.ae4u-step-section--step2 .ae4u-book-icon  { background: var(--ae4u-blue-50); }\n.ae4u-step-section--step2 .ae4u-lesson-card--available { border-color: #90CAF9; }\n.ae4u-step-section--step2 .ae4u-lesson-card--available .ae4u-lesson-card__num { color: var(--ae4u-blue-600); }\n.ae4u-step-section--step2 .ae4u-lesson-card--available:hover { box-shadow: 0 8px 24px rgba(21,101,192,.14); border-color: var(--ae4u-blue-600); }\n\n@media (max-width: 480px) {\n  .ae4u-lessons-grid { grid-template-columns: repeat(2, 1fr); }\n  .ae4u-step-title { font-size: 22px; }\n}\n\n\/* \u2500\u2500 AE4U Exercise Engine Styles \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n.ae4u-exercise-wrapper {\n  background: #ffffff;\n  border: 1px solid var(--c-border, #E2EAF4);\n  border-radius: var(--r-xl, 24px);\n  padding: 40px;\n  box-shadow: 0 12px 32px rgba(2, 22, 56, 0.04);\n  margin-bottom: 56px;\n  position: relative;\n  overflow: hidden;\n}\n\n\/* Optional subtle background pattern \/ gradient *\/\n.ae4u-exercise-wrapper::before {\n  content: '';\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 6px;\n  background: linear-gradient(90deg, var(--c-blue-500, #1976D2), var(--c-purple-500, #9C27B0));\n}\n\n.ae4u-exercise-text {\n  font-size: 18px;\n  line-height: 2.2;\n  color: var(--c-text, #1A2B4A);\n  font-weight: 500;\n  margin-bottom: 32px;\n}\n\n\/* Blank Inputs *\/\n.ae4u-blank-input {\n  display: inline-block;\n  min-width: 60px;\n  padding: 4px 12px;\n  margin: 0 4px;\n  font-family: inherit;\n  font-size: 17px;\n  font-weight: 700;\n  color: var(--c-blue-900, #0A1F5C);\n  background: var(--c-bg, #F8FAFF);\n  border: 2px solid var(--c-blue-100, #D0E2F5);\n  border-radius: 8px;\n  text-align: center;\n  transition: all 0.2s ease;\n  outline: none;\n  box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);\n}\n\n.ae4u-blank-input:focus {\n  border-color: var(--c-blue-500, #1976D2);\n  background: #ffffff;\n  box-shadow: 0 0 0 4px var(--c-blue-50, #E3F2FD);\n  transform: translateY(-1px);\n}\n\n\/* Status: Correct *\/\n.ae4u-blank-input.is-correct {\n  border-color: var(--c-green-500, #2E7D32);\n  background: var(--c-green-50, #E8F5E9);\n  color: var(--c-green-700, #1B5E20);\n  pointer-events: none;\n}\n\n\/* Status: Incorrect *\/\n.ae4u-blank-input.is-incorrect {\n  border-color: #E53935;\n  background: #FFEBEE;\n  color: #C62828;\n  animation: ae4u-shake 0.4s ease-in-out;\n}\n\n\/* Controls *\/\n.ae4u-exercise-controls {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 16px;\n  padding-top: 24px;\n  border-top: 1px solid var(--c-border, #E2EAF4);\n  flex-wrap: wrap;\n}\n\n.ae4u-exercise-score {\n  font-size: 15px;\n  font-weight: 700;\n  color: var(--c-muted, #4E6280);\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.ae4u-score-badge {\n  background: var(--c-blue-50, #E3F2FD);\n  color: var(--c-blue-700, #1245A8);\n  padding: 4px 12px;\n  border-radius: 99px;\n  font-size: 14px;\n}\n\n.ae4u-btn-group {\n  display: flex;\n  gap: 12px;\n}\n\n.ae4u-btn {\n  padding: 12px 24px;\n  border-radius: 12px;\n  font-size: 15px;\n  font-weight: 800;\n  font-family: inherit;\n  cursor: pointer;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  transition: all 0.2s ease;\n  border: none;\n}\n\n.ae4u-btn-primary {\n  background: linear-gradient(135deg, var(--c-blue-500, #1976D2), var(--c-blue-700, #1245A8));\n  color: #ffffff;\n  box-shadow: 0 4px 12px rgba(25, 118, 210, 0.25);\n}\n\n.ae4u-btn-primary:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 6px 16px rgba(25, 118, 210, 0.35);\n}\n\n.ae4u-btn-primary:active {\n  transform: translateY(0);\n}\n\n.ae4u-btn-secondary {\n  background: var(--c-bg, #F8FAFF);\n  color: var(--c-muted, #4E6280);\n  border: 1px solid var(--c-border, #E2EAF4);\n}\n\n.ae4u-btn-secondary:hover {\n  background: #E2EAF4;\n  color: var(--c-dark, #021638);\n}\n\n\/* Animations *\/\n@keyframes ae4u-shake {\n  0%, 100% { transform: translateX(0); }\n  25% { transform: translateX(-4px); }\n  50% { transform: translateX(4px); }\n  75% { transform: translateX(-4px); }\n}\n\n@keyframes ae4u-pop-in {\n  0% { transform: scale(0.9); opacity: 0; }\n  100% { transform: scale(1); opacity: 1; }\n}\n\n.ae4u-success-message {\n  display: none;\n  background: var(--c-green-50, #E8F5E9);\n  border: 1px solid #A5D6A7;\n  border-radius: 12px;\n  padding: 20px;\n  margin-top: 24px;\n  text-align: center;\n  animation: ae4u-pop-in 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards;\n}\n\n.ae4u-success-message h4 {\n  color: var(--c-green-700, #1B5E20);\n  font-size: 18px;\n  font-weight: 800;\n  margin-bottom: 4px;\n}\n\n.ae4u-success-message p {\n  color: var(--c-green-700, #1B5E20);\n  font-size: 14px;\n  margin: 0;\n  opacity: 0.9;\n}\n\n\/* \u2500\u2500 Drag & Drop Specific Styles \u2500\u2500 *\/\n.ae4u-word-bank {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 12px;\n  padding: 24px;\n  background: var(--c-blue-50, #E3F2FD);\n  border: 1px dashed var(--c-blue-300, #90CAF9);\n  border-radius: 16px;\n  margin-bottom: 32px;\n  min-height: 70px;\n  align-items: center;\n  justify-content: center;\n  transition: background 0.2s ease;\n}\n\n.ae4u-word-bank.is-dragover {\n  background: var(--c-blue-100, #BBDEFB);\n  border-color: var(--c-blue-500, #1976D2);\n}\n\n.ae4u-draggable {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 8px 16px;\n  background: #ffffff;\n  color: var(--c-blue-900, #0A1F5C);\n  border: 2px solid var(--c-blue-200, #90CAF9);\n  border-radius: 8px;\n  font-size: 16px;\n  font-weight: 700;\n  cursor: grab;\n  user-select: none;\n  box-shadow: 0 4px 12px rgba(2, 22, 56, 0.08);\n  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;\n  touch-action: manipulation;\n}\n\n.ae4u-draggable:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 6px 16px rgba(2, 22, 56, 0.12);\n  border-color: var(--c-blue-400, #42A5F5);\n}\n\n.ae4u-draggable:active, .ae4u-draggable.is-dragging {\n  cursor: grabbing;\n  transform: scale(1.05);\n  box-shadow: 0 8px 24px rgba(2, 22, 56, 0.15);\n}\n\n.ae4u-draggable.is-selected {\n  border-color: var(--c-blue-600, #1E88E5);\n  background: var(--c-blue-50, #E3F2FD);\n  transform: scale(1.05);\n}\n\n.ae4u-drop-zone {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 80px;\n  height: 42px;\n  margin: 0 4px;\n  background: var(--c-bg, #F8FAFF);\n  border: 2px dashed var(--c-border, #CBD5E1);\n  border-radius: 8px;\n  vertical-align: middle;\n  transition: all 0.2s ease;\n  cursor: pointer;\n}\n\n.ae4u-drop-zone.is-dragover {\n  border-color: var(--c-blue-500, #1976D2);\n  background: var(--c-blue-50, #E3F2FD);\n  transform: scale(1.05);\n}\n\n.ae4u-drop-zone.has-item {\n  border-style: solid;\n  border-color: var(--c-blue-200, #90CAF9);\n  background: transparent;\n}\n\n.ae4u-drop-zone .ae4u-draggable {\n  margin: -2px; \/* Pull tight to hide container borders *\/\n  box-shadow: none;\n}\n\n.ae4u-drop-zone.is-correct {\n  border-color: var(--c-green-500, #2E7D32);\n}\n\n.ae4u-drop-zone.is-correct .ae4u-draggable {\n  background: var(--c-green-50, #E8F5E9);\n  color: var(--c-green-700, #1B5E20);\n  border-color: var(--c-green-500, #2E7D32);\n  cursor: default;\n  pointer-events: none;\n}\n\n.ae4u-drop-zone.is-incorrect {\n  border-color: #E53935;\n  animation: ae4u-shake 0.4s ease-in-out;\n}\n\n.ae4u-drop-zone.is-incorrect .ae4u-draggable {\n  background: #FFEBEE;\n  color: #C62828;\n  border-color: #E53935;\n}\n\n@media (max-width: 600px) {\n  .ae4u-exercise-wrapper {\n    padding: 24px;\n  }\n  .ae4u-exercise-controls {\n    flex-direction: column;\n    align-items: stretch;\n  }\n  .ae4u-btn-group {\n    flex-direction: column;\n  }\n  .ae4u-btn {\n    justify-content: center;\n  }\n  .ae4u-exercise-score {\n    justify-content: center;\n    margin-bottom: 12px;\n  }\n}\n\n\/* \u2500\u2500 Multiple Choice Specific Styles \u2500\u2500 *\/\n.ae4u-mc-question-wrap {\n  margin-bottom: 32px;\n  padding: 24px;\n  background: var(--c-bg, #F8FAFF);\n  border: 1px solid var(--c-border, #E2EAF4);\n  border-radius: var(--r-xl, 24px);\n  transition: all 0.2s ease;\n}\n\n.ae4u-mc-question-wrap.is-incorrect {\n  border-color: #E53935;\n  background: #FFEBEE;\n  animation: ae4u-shake 0.4s ease-in-out;\n}\n\n.ae4u-mc-question {\n  font-size: 18px;\n  font-weight: 800;\n  color: var(--c-dark, #021638);\n  margin-bottom: 16px;\n  margin-top: 0;\n}\n\n.ae4u-mc-options {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.ae4u-mc-option {\n  display: flex;\n  align-items: center;\n  padding: 16px 20px;\n  background: #ffffff;\n  border: 2px solid var(--c-blue-100, #D0E2F5);\n  border-radius: 12px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.ae4u-mc-option:hover {\n  border-color: var(--c-blue-300, #90CAF9);\n  background: var(--c-blue-25, #F0F7FF);\n}\n\n.ae4u-mc-option input[type=\"radio\"] {\n  width: 20px;\n  height: 20px;\n  margin-right: 16px;\n  accent-color: var(--c-blue-600, #1E88E5);\n  cursor: pointer;\n}\n\n.ae4u-mc-option-text {\n  font-size: 16px;\n  font-weight: 600;\n  color: var(--c-text, #1A2B4A);\n}\n\n\/* Selected state *\/\n.ae4u-mc-option.selected {\n  border-color: var(--c-blue-500, #1976D2);\n  background: var(--c-blue-50, #E3F2FD);\n}\n\n\/* Validation states *\/\n.ae4u-mc-option.is-correct {\n  border-color: var(--c-green-500, #2E7D32);\n  background: var(--c-green-50, #E8F5E9);\n}\n.ae4u-mc-option.is-correct .ae4u-mc-option-text {\n  color: var(--c-green-700, #1B5E20);\n}\n\n.ae4u-mc-option.is-incorrect {\n  border-color: #E53935;\n  background: #FFEBEE;\n}\n.ae4u-mc-option.is-incorrect .ae4u-mc-option-text {\n  color: #C62828;\n}\n\n<\/style>\n<script>\n\/**\n * All English 4U \u2014 Main JavaScript\n * Purpose: Navbar scroll, hamburger menu, scroll reveal, smooth scroll\n * Usage: Included in every page via <script src=\"js\/main.js\">\n *\/\n\n(function () {\n  'use strict';\n\n  \/* \u2500\u2500 1. Navbar scroll shadow \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  const navbar = document.getElementById('navbar');\n  if (navbar) {\n    const handleScroll = function () {\n      navbar.classList.toggle('scrolled', window.scrollY > 12);\n    };\n    window.addEventListener('scroll', handleScroll, { passive: true });\n    handleScroll(); \/\/ Run on load\n  }\n\n  \/* \u2500\u2500 2. Hamburger \/ Mobile nav \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  const hamburger = document.getElementById('hamburger');\n  const navLinks  = document.querySelector('.nav-links');\n\n  if (hamburger && navLinks) {\n    \/\/ Create mobile overlay nav if not present\n    let mobileNav = document.getElementById('mobile-nav');\n    if (!mobileNav) {\n      mobileNav = document.createElement('div');\n      mobileNav.id = 'mobile-nav';\n      mobileNav.setAttribute('role', 'dialog');\n      mobileNav.setAttribute('aria-label', 'Mobile navigation');\n      mobileNav.innerHTML = `\n        <div class=\"mobile-nav-header\">\n          <div class=\"mobile-brand\">\n            <div class=\"nav-logo-badge\">A4U<\/div>\n            <span class=\"mobile-brand-name\">All English 4U<\/span>\n          <\/div>\n          <button class=\"mobile-close\" id=\"mobile-close\" aria-label=\"Close menu\">\u2715<\/button>\n        <\/div>\n        <nav class=\"mobile-nav-links\">\n          ${navLinks.innerHTML}\n        <\/nav>\n        <div class=\"mobile-nav-cta\">\n          <a href=\"${navLinks.closest('nav') &#038;&#038; navLinks.closest('nav').querySelector('.nav-cta') ? \n            '#' : 'toefl-index.html'}\" class=\"btn-mobile-cta\">\ud83c\udf93 Start Learning Free<\/a>\n        <\/div>\n      `;\n      document.body.appendChild(mobileNav);\n    }\n\n    \/\/ Overlay backdrop\n    let overlay = document.getElementById('nav-overlay');\n    if (!overlay) {\n      overlay = document.createElement('div');\n      overlay.id = 'nav-overlay';\n      overlay.setAttribute('aria-hidden', 'true');\n      document.body.appendChild(overlay);\n    }\n\n    function openMobileNav() {\n      mobileNav.classList.add('open');\n      overlay.classList.add('show');\n      hamburger.setAttribute('aria-expanded', 'true');\n      document.body.style.overflow = 'hidden';\n    }\n\n    function closeMobileNav() {\n      mobileNav.classList.remove('open');\n      overlay.classList.remove('show');\n      hamburger.setAttribute('aria-expanded', 'false');\n      document.body.style.overflow = '';\n    }\n\n    hamburger.addEventListener('click', function () {\n      const isOpen = mobileNav.classList.contains('open');\n      isOpen ? closeMobileNav() : openMobileNav();\n    });\n\n    const closeBtn = document.getElementById('mobile-close');\n    if (closeBtn) closeBtn.addEventListener('click', closeMobileNav);\n    overlay.addEventListener('click', closeMobileNav);\n\n    \/\/ Close on escape key\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape') closeMobileNav();\n    });\n\n    \/\/ Close when a nav link inside mobile nav is clicked\n    mobileNav.querySelectorAll('a').forEach(function (link) {\n      link.addEventListener('click', closeMobileNav);\n    });\n  }\n\n  \/* \u2500\u2500 3. Set active nav link based on current page \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  const currentPath = window.location.pathname;\n  const currentFile = currentPath.split('\/').pop() || 'index.html';\n\n  document.querySelectorAll('.nav-links a, .mobile-nav-links a').forEach(function (link) {\n    const href = link.getAttribute('href') || '';\n    const linkFile = href.split('\/').pop();\n\n    \/\/ Exact match or homepage match\n    if (\n      (currentFile === linkFile) ||\n      (currentFile === 'index.html' && href === '\/') ||\n      (currentFile === '' && href === '\/')\n    ) {\n      link.classList.add('active');\n    }\n  });\n\n  \/* \u2500\u2500 4. Scroll reveal animations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  const revealEls = document.querySelectorAll('.reveal');\n  if ('IntersectionObserver' in window && revealEls.length) {\n    const io = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting) {\n            entry.target.classList.add('visible');\n            io.unobserve(entry.target);\n          }\n        });\n      },\n      { threshold: 0.08, rootMargin: '0px 0px -32px 0px' }\n    );\n    revealEls.forEach(function (el) { io.observe(el); });\n  } else {\n    revealEls.forEach(function (el) { el.classList.add('visible'); });\n  }\n\n  \/* \u2500\u2500 5. Smooth scroll for anchor links \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  document.querySelectorAll('a[href^=\"#\"]').forEach(function (a) {\n    a.addEventListener('click', function (e) {\n      const id = a.getAttribute('href');\n      if (id === '#') return;\n      const target = document.querySelector(id);\n      if (target) {\n        e.preventDefault();\n        target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      }\n    });\n  });\n\n  \/* \u2500\u2500 6. Counter animation for stat numbers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function animateCounter(el) {\n    const target = parseFloat(el.dataset.count);\n    const suffix = el.dataset.suffix || '';\n    const prefix = el.dataset.prefix || '';\n    const duration = 1800;\n    const start    = performance.now();\n\n    function update(now) {\n      const elapsed  = Math.min(now - start, duration);\n      const progress = elapsed \/ duration;\n      \/\/ Ease-out cubic\n      const eased = 1 - Math.pow(1 - progress, 3);\n      const value = target * eased;\n\n      \/\/ Format nicely\n      let display;\n      if (target >= 1000) {\n        display = Math.round(value).toLocaleString();\n      } else if (target % 1 !== 0) {\n        display = value.toFixed(1);\n      } else {\n        display = Math.round(value).toString();\n      }\n      el.textContent = prefix + display + suffix;\n\n      if (elapsed < duration) {\n        requestAnimationFrame(update);\n      } else {\n        el.textContent = prefix + (target >= 1000 ? target.toLocaleString() : target) + suffix;\n      }\n    }\n    requestAnimationFrame(update);\n  }\n\n  \/\/ Observe stat counters\n  const counters = document.querySelectorAll('[data-count]');\n  if (counters.length && 'IntersectionObserver' in window) {\n    const counterIO = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (entry.isIntersecting) {\n          animateCounter(entry.target);\n          counterIO.unobserve(entry.target);\n        }\n      });\n    }, { threshold: 0.5 });\n    counters.forEach(function (el) { counterIO.observe(el); });\n  }\n\n  \/* \u2500\u2500 7. Card hover glow effect \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  document.querySelectorAll('.course-card').forEach(function (card) {\n    card.addEventListener('mousemove', function (e) {\n      const rect = card.getBoundingClientRect();\n      const x = ((e.clientX - rect.left) \/ rect.width)  * 100;\n      const y = ((e.clientY - rect.top)  \/ rect.height) * 100;\n      card.style.setProperty('--mouse-x', x + '%');\n      card.style.setProperty('--mouse-y', y + '%');\n    });\n  });\n\n  \/* \u2500\u2500 5. Contact Form Handler & FAQ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  const contactForm = document.getElementById('contactForm');\n  const contactSuccess = document.getElementById('formSuccess');\n  const contactBtn = document.getElementById('submitBtn');\n\n  if (contactForm) {\n    contactForm.addEventListener('submit', function (e) {\n      e.preventDefault();\n      if(contactBtn) {\n        contactBtn.textContent = 'Sending...';\n        contactBtn.disabled = true;\n      }\n\n      \/\/ Simulate sending (replace with actual WPForms or fetch() on WordPress)\n      setTimeout(function () {\n        contactForm.style.display = 'none';\n        if(contactSuccess) contactSuccess.classList.add('show');\n      }, 900);\n    });\n  }\n\n  \/\/ FAQ accordion\n  document.querySelectorAll('.faq-q').forEach(function (btn) {\n    btn.addEventListener('click', function () {\n      const item = btn.closest('.faq-item');\n      if(!item) return;\n      const isOpen = item.classList.contains('open');\n\n      \/\/ Close all\n      document.querySelectorAll('.faq-item').forEach(function (i) {\n        i.classList.remove('open');\n        const qBtn = i.querySelector('.faq-q');\n        if(qBtn) qBtn.setAttribute('aria-expanded', 'false');\n      });\n\n      \/\/ Open clicked (if was closed)\n      if (!isOpen) {\n        item.classList.add('open');\n        btn.setAttribute('aria-expanded', 'true');\n      }\n    });\n  });\n\n})();\n\n\/**\n * AE4U Interactive Exercise Engine\n * Version: 1.2\n * Description: Custom JS engine for Fill-in-the-Blanks, Drag-the-Words, and Multiple-Choice.\n *\/\n\nclass AE4UExercise {\n  constructor(containerId, data) {\n    this.container = document.getElementById(containerId);\n    if (!this.container) return;\n\n    this.data = data;\n    this.id = data.id || 'exercise_' + Math.random().toString(36).substr(2, 9);\n    this.type = data.type || 'fill-in-the-blanks'; \/\/ 'fill-in-the-blanks' | 'drag-the-words' | 'multiple-choice'\n    this.totalBlanks = 0;\n    this.correctCount = 0;\n    this.isCompleted = false;\n    this.words = []; \/\/ Used for drag-the-words\n\n    this.render();\n    this.loadProgress();\n  }\n\n  \/\/ ---- PARSING ----\n  \n  parseText(text) {\n    if (this.type === 'multiple-choice') {\n      this.totalBlanks = this.data.questions ? this.data.questions.length : 1;\n      let html = '';\n      const qs = this.data.questions || [this.data];\n      qs.forEach((q, qIndex) => {\n        html += `<div class=\"ae4u-mc-question-wrap\" data-qindex=\"${qIndex}\">`;\n        if (q.question) html += `<h4 class=\"ae4u-mc-question\">${qIndex + 1}. ${q.question}<\/h4>`;\n        html += `<div class=\"ae4u-mc-options\">`;\n        q.options.forEach((opt, optIndex) => {\n          html += `\n            <label class=\"ae4u-mc-option\">\n              <input type=\"radio\" name=\"mc_${this.id}_${qIndex}\" value=\"${optIndex}\" data-correct=\"${opt.correct ? 'true' : 'false'}\">\n              <span class=\"ae4u-mc-option-text\">${opt.text}<\/span>\n            <\/label>\n          `;\n        });\n        html += `<\/div><\/div>`;\n      });\n      return html;\n    }\n\n    const regex = \/\\*([^\\*]+)\\*\/g;\n    let blankIndex = 0;\n    this.words = [];\n\n    return text.replace(regex, (match, answer) => {\n      this.totalBlanks++;\n      const ans = answer.trim();\n      this.words.push(ans);\n      \n      if (this.type === 'drag-the-words') {\n        return `<div class=\"ae4u-drop-zone\" data-answer=\"${ans}\" data-index=\"${blankIndex++}\"><\/div>`;\n      } else {\n        const width = Math.max(60, ans.length * 12 + 24);\n        return `<input type=\"text\" \n                       class=\"ae4u-blank-input\" \n                       data-answer=\"${ans}\" \n                       data-index=\"${blankIndex++}\"\n                       style=\"width: ${width}px\"\n                       autocomplete=\"off\" \n                       spellcheck=\"false\">`;\n      }\n    });\n  }\n\n  \/\/ ---- RENDERING ----\n\n  render() {\n    const parsedHTML = this.parseText(this.data.text);\n    \n    \/\/ Shuffle words for word bank if drag-the-words\n    let wordBankHTML = '';\n    if (this.type === 'drag-the-words') {\n      const shuffled = [...this.words].sort(() => Math.random() - 0.5);\n      const draggables = shuffled.map(w => `<div class=\"ae4u-draggable\" draggable=\"true\" data-word=\"${w}\">${w}<\/div>`).join('');\n      wordBankHTML = `<div class=\"ae4u-word-bank\" id=\"bank-${this.id}\">${draggables}<\/div>`;\n    }\n\n    this.container.innerHTML = `\n      <div class=\"ae4u-exercise-wrapper\">\n        ${wordBankHTML}\n        <div class=\"ae4u-exercise-text\">\n          ${parsedHTML}\n        <\/div>\n        \n        <div class=\"ae4u-success-message\" id=\"success-${this.id}\">\n          <h4>\ud83c\udf89 Excellent Work!<\/h4>\n          <p>You have successfully completed this exercise.<\/p>\n        <\/div>\n\n        <div class=\"ae4u-exercise-controls\">\n          <div class=\"ae4u-exercise-score\">\n            Score: <span class=\"ae4u-score-badge\" id=\"score-${this.id}\">0 \/ ${this.totalBlanks}<\/span>\n          <\/div>\n          <div class=\"ae4u-btn-group\">\n            <button class=\"ae4u-btn ae4u-btn-secondary\" id=\"btn-show-${this.id}\">\ud83d\udc41\ufe0f Show Answers<\/button>\n            <button class=\"ae4u-btn ae4u-btn-primary\" id=\"btn-check-${this.id}\">\u2705 Check Answers<\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n\n    \/\/ Cache DOM\n    this.btnCheck = document.getElementById(`btn-check-${this.id}`);\n    this.btnShow = document.getElementById(`btn-show-${this.id}`);\n    this.scoreBadge = document.getElementById(`score-${this.id}`);\n    this.successMsg = document.getElementById(`success-${this.id}`);\n\n    \/\/ Bind Controls\n    this.btnCheck.addEventListener('click', () => this.checkAnswers());\n    this.btnShow.addEventListener('click', () => this.showAnswers());\n\n    \/\/ Bind Exercise Mechanics\n    if (this.type === 'drag-the-words') {\n      this.initDragAndDrop();\n    } else if (this.type === 'multiple-choice') {\n      this.initMultipleChoice();\n    } else {\n      this.initFillBlanks();\n    }\n  }\n\n  \/\/ ---- MECHANICS: MULTIPLE CHOICE ----\n  \n  initMultipleChoice() {\n    this.options = Array.from(this.container.querySelectorAll('.ae4u-mc-option input'));\n    this.options.forEach(opt => {\n      opt.addEventListener('change', () => {\n        \/\/ Remove error state from parent when user changes selection\n        const wrap = opt.closest('.ae4u-mc-question-wrap');\n        wrap.classList.remove('is-incorrect');\n        const labels = wrap.querySelectorAll('.ae4u-mc-option');\n        labels.forEach(l => l.classList.remove('selected', 'is-incorrect', 'is-correct'));\n        opt.closest('.ae4u-mc-option').classList.add('selected');\n      });\n    });\n  }\n\n  \/\/ ---- MECHANICS: FILL IN THE BLANKS ----\n\n  initFillBlanks() {\n    this.inputs = Array.from(this.container.querySelectorAll('.ae4u-blank-input'));\n    this.inputs.forEach((input, index) => {\n      input.addEventListener('keydown', (e) => {\n        input.classList.remove('is-incorrect');\n        if (e.key === 'Enter') {\n          e.preventDefault();\n          if (index < this.inputs.length - 1) this.inputs[index + 1].focus();\n          else this.checkAnswers();\n        }\n      });\n    });\n  }\n\n  \/\/ ---- MECHANICS: DRAG THE WORDS (HYBRID CLICK\/DRAG) ----\n\n  initDragAndDrop() {\n    this.dropZones = Array.from(this.container.querySelectorAll('.ae4u-drop-zone'));\n    this.wordBank = document.getElementById(`bank-${this.id}`);\n    let selectedWord = null;\n\n    const clearSelection = () => {\n      if (selectedWord) selectedWord.classList.remove('is-selected');\n      selectedWord = null;\n    };\n\n    \/\/ Word Bank Clicks\n    this.container.addEventListener('click', (e) => {\n      \/\/ 1. Click on a draggable word (in bank or in dropzone)\n      if (e.target.classList.contains('ae4u-draggable')) {\n        const wordEl = e.target;\n        \n        \/\/ If it's already in a drop zone, move it back to bank\n        if (wordEl.parentElement.classList.contains('ae4u-drop-zone')) {\n          const zone = wordEl.parentElement;\n          this.wordBank.appendChild(wordEl);\n          zone.classList.remove('has-item', 'is-incorrect', 'is-correct');\n          return;\n        }\n\n        \/\/ If in bank, select it\n        if (selectedWord === wordEl) {\n          clearSelection(); \/\/ Deselect\n        } else {\n          clearSelection();\n          selectedWord = wordEl;\n          selectedWord.classList.add('is-selected');\n        }\n      } \n      \/\/ 2. Click on a drop zone\n      else if (e.target.classList.contains('ae4u-drop-zone') || e.target.closest('.ae4u-drop-zone')) {\n        const zone = e.target.classList.contains('ae4u-drop-zone') ? e.target : e.target.closest('.ae4u-drop-zone');\n        \n        \/\/ If we have a selected word, drop it here\n        if (selectedWord && !zone.classList.contains('is-correct')) {\n          \/\/ If zone already has a word, move existing word back to bank\n          if (zone.children.length > 0) {\n            this.wordBank.appendChild(zone.children[0]);\n          }\n          zone.appendChild(selectedWord);\n          zone.classList.add('has-item');\n          zone.classList.remove('is-incorrect');\n          clearSelection();\n        }\n      }\n    });\n    \n    \/\/ Desktop Drag & Drop API support\n    let draggedItem = null;\n    this.container.addEventListener('dragstart', (e) => {\n      if (e.target.classList.contains('ae4u-draggable')) {\n        draggedItem = e.target;\n        setTimeout(() => e.target.classList.add('is-dragging'), 0);\n      }\n    });\n\n    this.container.addEventListener('dragend', (e) => {\n      if (e.target.classList.contains('ae4u-draggable')) {\n        e.target.classList.remove('is-dragging');\n        draggedItem = null;\n      }\n    });\n\n    this.dropZones.forEach(zone => {\n      zone.addEventListener('dragover', e => {\n        e.preventDefault();\n        if (!zone.classList.contains('is-correct')) zone.classList.add('is-dragover');\n      });\n      zone.addEventListener('dragleave', () => zone.classList.remove('is-dragover'));\n      zone.addEventListener('drop', e => {\n        e.preventDefault();\n        zone.classList.remove('is-dragover');\n        if (draggedItem && !zone.classList.contains('is-correct')) {\n          if (zone.children.length > 0) this.wordBank.appendChild(zone.children[0]);\n          zone.appendChild(draggedItem);\n          zone.classList.add('has-item');\n          zone.classList.remove('is-incorrect');\n        }\n      });\n    });\n\n    this.wordBank.addEventListener('dragover', e => { e.preventDefault(); this.wordBank.classList.add('is-dragover'); });\n    this.wordBank.addEventListener('dragleave', () => this.wordBank.classList.remove('is-dragover'));\n    this.wordBank.addEventListener('drop', e => {\n      e.preventDefault();\n      this.wordBank.classList.remove('is-dragover');\n      if (draggedItem) {\n        this.wordBank.appendChild(draggedItem);\n        if (draggedItem.parentElement.classList.contains('ae4u-drop-zone')) {\n          draggedItem.parentElement.classList.remove('has-item', 'is-incorrect');\n        }\n      }\n    });\n  }\n\n  \/\/ ---- VALIDATION ----\n\n  checkAnswers() {\n    if (this.isCompleted) return;\n    this.correctCount = 0;\n\n    if (this.type === 'drag-the-words') {\n      this.dropZones.forEach(zone => {\n        const correctAnswer = zone.dataset.answer.toLowerCase();\n        const droppedWord = zone.children.length > 0 ? zone.children[0].dataset.word.toLowerCase() : null;\n\n        if (!droppedWord) {\n          zone.classList.remove('is-incorrect', 'is-correct');\n          return;\n        }\n\n        if (droppedWord === correctAnswer) {\n          zone.classList.add('is-correct');\n          zone.classList.remove('is-incorrect');\n          this.correctCount++;\n        } else {\n          zone.classList.add('is-incorrect');\n          zone.classList.remove('is-correct');\n          void zone.offsetWidth; \/\/ trigger reflow for animation\n        }\n      });\n    } else if (this.type === 'multiple-choice') {\n      const wraps = this.container.querySelectorAll('.ae4u-mc-question-wrap');\n      wraps.forEach(wrap => {\n        const selected = wrap.querySelector('input:checked');\n        if (!selected) {\n          wrap.classList.remove('is-incorrect', 'is-correct');\n          return;\n        }\n        \n        const label = selected.closest('.ae4u-mc-option');\n        if (selected.dataset.correct === 'true') {\n          label.classList.add('is-correct');\n          label.classList.remove('is-incorrect');\n          this.correctCount++;\n        } else {\n          label.classList.add('is-incorrect');\n          label.classList.remove('is-correct');\n          wrap.classList.add('is-incorrect'); \/\/ Trigger shake\n          void wrap.offsetWidth;\n        }\n      });\n    } else {\n      this.inputs.forEach(input => {\n        const userAnswer = input.value.trim().toLowerCase();\n        const correctAnswer = input.dataset.answer.toLowerCase();\n\n        if (userAnswer === '') {\n          input.classList.remove('is-incorrect', 'is-correct');\n          return;\n        }\n\n        if (userAnswer === correctAnswer) {\n          input.classList.add('is-correct');\n          input.classList.remove('is-incorrect');\n          this.correctCount++;\n        } else {\n          input.classList.add('is-incorrect');\n          input.classList.remove('is-correct');\n          void input.offsetWidth;\n        }\n      });\n    }\n\n    this.updateScore();\n    if (this.correctCount === this.totalBlanks) this.handleCompletion();\n  }\n\n  showAnswers() {\n    if (this.type === 'drag-the-words') {\n      this.dropZones.forEach(zone => {\n        const correctWord = zone.dataset.answer;\n        \/\/ Find the draggable element with this word\n        const el = this.container.querySelector(`.ae4u-draggable[data-word=\"${correctWord}\"]`);\n        if (el) {\n          zone.appendChild(el);\n          zone.classList.add('has-item', 'is-correct');\n          zone.classList.remove('is-incorrect');\n        }\n      });\n    } else if (this.type === 'multiple-choice') {\n      const allCorrect = this.container.querySelectorAll('input[data-correct=\"true\"]');\n      allCorrect.forEach(opt => {\n        opt.checked = true;\n        const label = opt.closest('.ae4u-mc-option');\n        label.classList.add('is-correct');\n        label.classList.remove('is-incorrect');\n      });\n    } else {\n      this.inputs.forEach(input => {\n        input.value = input.dataset.answer;\n        input.classList.add('is-correct');\n        input.classList.remove('is-incorrect');\n      });\n    }\n    \n    this.correctCount = this.totalBlanks;\n    this.updateScore();\n    this.handleCompletion(true);\n  }\n\n  \/\/ ---- UTILS ----\n\n  updateScore() {\n    this.scoreBadge.textContent = `${this.correctCount} \/ ${this.totalBlanks}`;\n  }\n\n  handleCompletion(isShown = false) {\n    this.isCompleted = true;\n    this.btnCheck.style.display = 'none';\n    this.btnShow.style.display = 'none';\n    if (!isShown) this.successMsg.style.display = 'block';\n    \n    \/\/ In drag-the-words, hide empty word bank\n    if (this.type === 'drag-the-words' && this.wordBank) {\n      if (this.wordBank.children.length === 0) {\n        this.wordBank.style.display = 'none';\n      }\n    }\n    \n    this.saveProgress();\n  }\n\n  saveProgress() {\n    try {\n      const progress = JSON.parse(localStorage.getItem('ae4u_progress') || '{}');\n      progress[this.id] = { completed: true, score: this.correctCount, total: this.totalBlanks, date: new Date().toISOString() };\n      localStorage.setItem('ae4u_progress', JSON.stringify(progress));\n    } catch (e) {}\n  }\n\n  loadProgress() {\n    try {\n      const progress = JSON.parse(localStorage.getItem('ae4u_progress') || '{}');\n      if (progress[this.id] && progress[this.id].completed) {\n        \/\/ Feature: Pre-fill answers if completed (omitted for brevity)\n      }\n    } catch (e) {}\n  }\n}\n\nwindow.AE4UExercise = AE4UExercise;\n\n<\/script>\n<!-- ==================================================== -->\n\n\n\n<div class=\"wp-block-group ext-animate--on is-nowrap is-layout-flex wp-container-core-group-is-layout-cb0a7ccb wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube ext-animate--on wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"[Images] Cambridge IELTS 5 | Listening Test 1 | All English 4U\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/5q6F5lxot-s?list=PLmmEx97WdP1TMhbYxnHqdAbuYwSK6KXZv\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<p class=\"ext-animate--on wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-columns ext-animate--on is-layout-flex wp-container-core-columns-is-layout-cb0a7ccb wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube ext-animate--on wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"[Images] Cambridge IELTS 5 | Listening Test 1 | All English 4U\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/5q6F5lxot-s?list=PLmmEx97WdP1TMhbYxnHqdAbuYwSK6KXZv\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped ext-animate--on wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" data-id=\"291\" src=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1-1024x576.png\" alt=\"\" class=\"wp-image-291\" srcset=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1-1024x576.png 1024w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1-300x169.png 300w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1-768x432.png 768w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1-1536x864.png 1536w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<figure class=\"wp-block-image size-large ext-animate--on\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1024x576.png\" alt=\"\" class=\"wp-image-290\" srcset=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1024x576.png 1024w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-300x169.png 300w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-768x432.png 768w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening-1536x864.png 1536w, https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Get-Ready-for-IELTS_U1_Friends-Abroad_Listening.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"ext-animate--on wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"ext-animate--on wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Home\u203a Dictation\u203a B1 Intermediate\u203a Allergies &amp; Health \ud83c\udfa4 Dictation B1 Intermediate Topic 2 Allergies &amp; Health \u23f1 ~5\u20136 min \ud83c\udfa7 Listening + Spelling \u270f\ufe0f Fill-in-the-Blank Exercise \u270f\ufe0f Practice Exercise \u2014 Fill in the Blanks Listen carefully and fill in the missing words. Health and allergy vocabulary \u2014 focus on correct spelling! \u2190 Previous Lesson Next [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":137,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-168","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":5,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/168\/revisions"}],"predecessor-version":[{"id":292,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/168\/revisions\/292"}],"up":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/137"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}