<!doctype html> <html lang=”en”> <head> <meta charset=”utf-8″> <meta name=”viewport” content=”width=device-width, initial-scale=1″> <meta name=”description” content=”Eight interactive A1+ EFL listening lessons by Lingualand”> <title>A1+ Listening — 8 Interactive Lessons</title> <style> :root{–ink:#17324d;–blue:#236b8e;–sky:#e8f5fa;–gold:#d69b2d;–cream:#fff9eb;–line:#c8dbe4;–green:#187a4b;–green-bg:#e9f8ef;–red:#b33a3a;–red-bg:#fff0f0;–paper:#fff;–bg:#f3f8fb;–muted:#637787;–shadow:0 12px 34px rgba(28,67,91,.11)} *{box-sizing:border-box} html{scroll-behavior:smooth} body{margin:0;background:var(–bg);color:var(–ink);font-family:Arial,Helvetica,sans-serif;line-height:1.55} button,select,input{font:inherit} button{cursor:pointer}.shell{min-height:100vh}.topbar{background:linear-gradient(120deg,#143b59,#23799c);color:#fff;padding:22px 24px;box-shadow:0 5px 18px rgba(17,55,79,.22)} .topbar-inner{max-width:1220px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:20px}.brand{display:flex;align-items:center;gap:14px}.brand-mark{width:54px;height:54px;border-radius:16px;background:var(–gold);display:grid;place-items:center;font-size:27px;box-shadow:inset 0 0 0 3px rgba(255,255,255,.25)} .brand h1{font-size:clamp(22px,3vw,34px);margin:0;line-height:1.1}.brand p{margin:5px 0 0;color:#dff3fb;font-size:14px}.home-btn{border:1px solid rgba(255,255,255,.55);background:rgba(255,255,255,.12);color:#fff;border-radius:12px;padding:10px 15px;font-weight:700} .layout{max-width:1220px;margin:0 auto;padding:26px 20px 60px;display:grid;grid-template-columns:260px minmax(0,1fr);gap:24px}.sidebar{position:sticky;top:18px;align-self:start;background:#fff;border:1px solid var(–line);border-radius:20px;padding:14px;box-shadow:var(–shadow)} .sidebar-title{font-size:12px;text-transform:uppercase;letter-spacing:.12em;color:var(–muted);font-weight:800;padding:7px 9px 11px}.lesson-nav{display:grid;gap:7px}.nav-btn{width:100%;text-align:left;border:0;background:transparent;border-radius:12px;padding:11px 12px;color:var(–ink);display:flex;align-items:center;gap:10px}.nav-btn:hover,.nav-btn.active{background:var(–sky);color:#0f5877}.nav-num{min-width:29px;height:29px;border-radius:9px;display:grid;place-items:center;background:#eef3f6;font-weight:800}.nav-btn.active .nav-num{background:var(–blue);color:#fff}.content{min-width:0} .welcome{background:linear-gradient(145deg,#fff,#f8fcfe);border:1px solid var(–line);border-radius:24px;padding:clamp(24px,5vw,48px);box-shadow:var(–shadow)}.eyebrow{margin:0 0 8px;color:var(–blue);font-size:13px;font-weight:900;text-transform:uppercase;letter-spacing:.13em}.welcome h2{font-size:clamp(30px,5vw,50px);line-height:1.08;margin:0 0 15px}.lead{font-size:18px;color:#496777;max-width:760px}.stats{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 0}.stat{background:var(–sky);border-radius:999px;padding:8px 13px;font-weight:700;color:#1b607e} .lesson-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:22px}.lesson-card{border:1px solid var(–line);background:#fff;border-radius:18px;padding:20px;text-align:left;color:var(–ink);box-shadow:0 7px 20px rgba(28,67,91,.07);transition:.18s transform,.18s box-shadow}.lesson-card:hover{transform:translateY(-3px);box-shadow:var(–shadow)}.lesson-card .card-num{color:var(–gold);font-weight:900;font-size:13px;text-transform:uppercase;letter-spacing:.1em}.lesson-card h3{font-size:20px;margin:6px 0}.lesson-card p{margin:0;color:var(–muted);font-size:14px} .lesson-head{background:#fff;border:1px solid var(–line);border-radius:22px;padding:26px;box-shadow:var(–shadow)}.lesson-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:9px}.pill{display:inline-flex;border-radius:999px;background:var(–sky);color:#176282;padding:5px 10px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.07em}.pill.gold{background:var(–cream);color:#8b6116}.lesson-head h2{font-size:clamp(28px,4vw,42px);line-height:1.1;margin:0 0 8px}.lesson-head p{margin:0;color:var(–muted)} .audio-card{margin-top:18px;border:2px solid #b8e3ee;background:linear-gradient(110deg,#f4fdff,#fff);border-radius:18px;padding:18px}.audio-label{font-weight:900;color:#176282;margin-bottom:9px}.audio-card audio{width:100%} .section{margin-top:20px;background:#fff;border:1px solid var(–line);border-radius:20px;padding:22px;box-shadow:0 8px 24px rgba(28,67,91,.07)}.section h3{font-size:22px;margin:0 0 5px}.instruction{color:var(–muted);margin:0 0 17px}.word-bank{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 17px}.word-chip{background:var(–cream);border:1px solid #efdca9;border-radius:11px;padding:7px 10px;font-weight:700;color:#73541d}.vocab-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.vocab-row{display:grid;grid-template-columns:minmax(110px,.75fr) minmax(150px,1.25fr);gap:10px;align-items:center;border:1px solid #dbe7ec;border-radius:13px;padding:10px;background:#fbfdfe}.word{font-weight:900}.select{width:100%;border:1px solid #adc6d2;border-radius:10px;background:#fff;padding:9px;color:var(–ink)} .questions{display:grid;gap:13px}.question{border:1px solid #dbe7ec;border-radius:15px;padding:15px;background:#fbfdfe}.question-title{font-weight:800;margin-bottom:10px}.options{display:grid;gap:7px}.option{display:flex;gap:9px;align-items:flex-start;border:1px solid transparent;border-radius:10px;padding:8px 9px}.option:hover{background:#f0f7fa}.option input{margin-top:4px}.order-grid{display:grid;gap:10px}.order-row{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center;border:1px solid #dbe7ec;border-radius:13px;padding:10px 12px;background:#fbfdfe}.feedback{min-height:20px;margin:7px 0 0;font-weight:700;font-size:14px}.correct{border-color:#63b988!important;background:var(–green-bg)!important}.wrong{border-color:#dd8d8d!important;background:var(–red-bg)!important}.feedback.good{color:var(–green)}.feedback.bad{color:var(–red)} .progress-card{margin-top:20px;background:#fff;border:1px solid var(–line);border-radius:18px;padding:18px;box-shadow:var(–shadow)}.progress-line{height:11px;background:#e5edf1;border-radius:999px;overflow:hidden}.progress-fill{height:100%;width:0;background:linear-gradient(90deg,var(–gold),#e8b951);transition:width .25s}.progress-text{display:flex;justify-content:space-between;gap:12px;margin-top:8px;color:var(–muted);font-weight:700}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}.btn{border:0;border-radius:12px;padding:11px 17px;font-weight:800}.btn.primary{background:var(–blue);color:#fff}.btn.primary:hover{background:#155b7b}.btn.secondary{background:#eaf1f5;color:var(–ink)}.btn.teacher{margin-left:auto;background:var(–cream);color:#765314;border:1px solid #ead49b}.score{margin-top:14px;border-radius:14px;background:var(–sky);padding:15px;font-weight:800;font-size:17px;display:none}.score.show{display:block} .teacher-panel{display:none;margin-top:18px;border:2px dashed #d6b461;background:#fffaf0;border-radius:18px;padding:20px}.teacher-panel.show{display:block}.teacher-panel h3{margin-top:0}.transcript{max-height:430px;overflow:auto;background:#fff;border:1px solid #eadfbf;border-radius:13px;padding:16px}.transcript p{margin:0 0 10px}.key{background:#fff;border:1px solid #eadfbf;border-radius:13px;padding:14px;margin-bottom:14px}.key p{margin:5px 0}.lesson-footer{display:flex;justify-content:space-between;gap:12px;margin-top:20px}.hidden{display:none!important} .toast{position:fixed;right:20px;bottom:20px;max-width:330px;background:#17324d;color:#fff;padding:13px 16px;border-radius:12px;box-shadow:var(–shadow);opacity:0;transform:translateY(12px);pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:none} .modal{position:fixed;inset:0;background:rgba(12,36,52,.56);display:none;place-items:center;padding:20px;z-index:20}.modal.show{display:grid}.modal-card{width:min(410px,100%);background:#fff;border-radius:20px;padding:24px;box-shadow:0 24px 70px rgba(0,0,0,.28)}.modal-card h2{margin:0 0 6px}.modal-card p{margin:0 0 15px;color:var(–muted)}.pin-input{width:100%;border:2px solid #adc6d2;border-radius:11px;padding:11px;font-size:18px;letter-spacing:.18em}.modal-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:15px} @media(max-width:850px){.layout{grid-template-columns:1fr}.sidebar{position:static}.lesson-nav{grid-template-columns:repeat(2,minmax(0,1fr))}.lesson-grid{grid-template-columns:1fr}.topbar-inner{align-items:flex-start}.home-btn{white-space:nowrap}} @media(max-width:580px){.topbar{padding:16px 14px}.brand-mark{display:none}.brand p{display:none}.layout{padding:16px 11px 45px}.sidebar{padding:10px}.lesson-nav{grid-template-columns:1fr}.vocab-grid{grid-template-columns:1fr}.vocab-row{grid-template-columns:1fr}.lesson-head,.section{padding:18px}.btn.teacher{margin-left:0}.progress-text{font-size:13px}.order-row{grid-template-columns:64px 1fr}} @media print{.topbar,.sidebar,.audio-card,.actions,.lesson-footer,.toast{display:none!important}.layout{display:block;padding:0}.section,.lesson-head,.progress-card{box-shadow:none;break-inside:avoid}.teacher-panel{display:block}} </style> </head> <body><div id=”accessGate” style=”min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:#f8f6fb;color:#26233a;font-family:Inter,Aptos,’Segoe UI’,Arial,sans-serif”><form id=”accessForm” style=”width:min(440px,100%);padding:28px;border:1px solid #ded8ec;border-radius:18px;background:white;box-shadow:0 18px 55px rgba(31,24,48,.13)”><h1 style=”margin:0 0 10px;font-size:1.65rem”>A1+ Exercise Access</h1><p style=”margin:0 0 18px;color:#686176″>Enter your access key to open this exercise pack.</p><label for=”accessKey” style=”display:block;margin:0 0 7px;font-weight:700″>Access key</label><input id=”accessKey” type=”password” autocomplete=”off” style=”width:100%;box-sizing:border-box;border:1px solid #cfc8dd;border-radius:10px;padding:12px 13px;font:inherit”><button type=”submit” style=”width:100%;margin-top:14px;border:0;border-radius:10px;padding:12px 14px;background:#6750a4;color:white;font-weight:800;cursor:pointer”>Unlock</button><p id=”accessError” role=”alert” style=”min-height:1.35em;margin:12px 0 0;color:#b4233b;font-weight:700″></p></form></div><div id=”exerciseApp” hidden> <div class=”shell”> <header class=”topbar”><div class=”topbar-inner”><div class=”brand”><div class=”brand-mark” aria-hidden=”true”>🎧</div><div><h1>A1+ Listening</h1><p>Eight interactive lessons • Lingualand</p></div></div><button class=”home-btn” id=”homeTop”>All lessons</button></div></header> <div class=”layout”> <aside class=”sidebar” aria-label=”Lesson navigation”><div class=”sidebar-title”>Choose a lesson</div><nav class=”lesson-nav” id=”lessonNav”></nav></aside> <main class=”content” id=”app” tabindex=”-1″></main> </div> </div> <div class=”toast” id=”toast” role=”status” aria-live=”polite”></div> <div class=”modal” id=”pinModal” role=”dialog” aria-modal=”true” aria-labelledby=”pinTitle”><div class=”modal-card”><h2 id=”pinTitle”>Teacher access</h2><p>Enter the teacher PIN to see the transcript and answer key.</p><label for=”pinInput” class=”hidden”>Teacher PIN</label><input class=”pin-input” id=”pinInput” type=”password” inputmode=”numeric” maxlength=”8″ placeholder=”PIN”><div class=”modal-actions”><button class=”btn secondary” id=”pinCancel”>Cancel</button><button class=”btn primary” id=”pinUnlock”>Unlock</button></div></div></div> <script>window.LESSONS = [ { id: “basketball-legends”, num: 1, title: “Basketball Legends”, shortTitle: “Basketball Legends”, category: “Sports”, description: “Five basketball stars and the qualities that made them inspiring.”, audio: “https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-01-basketball.mp3″, vocab: [ {word:”teammate”,meaning:”συμπαίκτης”},{word:”champion”,meaning:”πρωταθλητής”}, {word:”give up”,meaning:”παραιτούμαι”},{word:”inspire”,meaning:”εμπνέω”} ], questions: [ {prompt:”Why did Michael Jordan become one of the most famous basketball players in history?”,options:[“He was famous for his excellent passing.”,”He won many games because he was very tall.”,”He played well when his team needed him most.”],answer:2}, {prompt:”What can we learn from Kobe Bryant?”,options:[“Success comes from practising and never giving up.”,”Basketball is only about scoring points.”,”Winning is always easy.”],answer:0}, {prompt:”Which player changed the way many basketball teams play today?”,options:[“LeBron James”,”Stephen Curry”,”Giannis Antetokounmpo”],answer:1}, {prompt:”Why do many people admire LeBron James?”,options:[“He helps his teammates and also helps people in his community.”,”He only thinks about breaking records.”,”He became a famous basketball coach.”],answer:0}, {prompt:”Giannis Antetokounmpo teaches us that…”,options:[“only strong players become champions.”,”dreams can come true if you work hard.”,”basketball is the easiest sport to play.”],answer:1}, {prompt:”What is the main message of the listening?”,options:[“Great basketball players become famous because they are lucky.”,”Every basketball player is the same.”,”Talent, hard work and determination can inspire millions of people.”],answer:2} ], transcript: [ “Presenter 1: Hello, everyone, and welcome to Sports Time! Today we’re talking about five basketball legends who changed the game. They come from different countries and played in different years, but they all inspired millions of children to play basketball.”, “Presenter 2: Let’s start with Michael Jordan. Many people believe he is the greatest basketball player of all time. He played for the Chicago Bulls and won six NBA championships. Jordan was famous because he could score difficult baskets, jump very high and stay calm in important games. He showed people that confidence, practice and hard work can help anyone achieve their dreams.”, “Presenter 1: Our second legend is Kobe Bryant. Kobe spent his whole NBA career with the Los Angeles Lakers. He loved basketball so much that he practised for many hours every day. He always wanted to improve and become a better player. Today, many young athletes still admire his determination and never-give-up attitude.”, “Presenter 2: Next comes LeBron James. LeBron is one of the strongest and smartest players in basketball history. He can score points, make excellent passes and help his teammates play better. He has broken many NBA records, but he is also famous for helping children through schools and charities. He teaches us that great athletes can also help their communities.”, “Presenter 1: Now let’s meet Stephen Curry. Before Curry became famous, most teams tried to score close to the basket. Curry changed basketball with his amazing three-point shots. He showed that players could score from much farther away. Today, children all over the world practise long-distance shooting because of him.”, “Presenter 2: Our final legend is Giannis Antetokounmpo. Giannis was born in Greece, and his parents came from Nigeria. When he was young, life was not always easy for his family, but he never stopped believing in himself. Through hard work and determination, he became one of the best basketball players in the world. He won an NBA championship with the Milwaukee Bucks and inspired millions of people to follow their dreams.”, “Presenter 1: Although these five players are different, they all have something important in common.”, “Presenter 2: They worked hard, believed in themselves and inspired millions of children to enjoy basketball, never give up and always try their best.”, “Presenter 1: So, the next time you pick up a basketball, remember these five legends. Maybe one day, another young player will look up to you!”, “Presenter 2: Thanks for listening to Sports Time! See you next time!” ] }, { id: “king-arthur”, num: 2, title: “The Story of King Arthur”, shortTitle: “King Arthur”, category: “Legends”, description: “The sword in the stone, Merlin, Camelot and the Knights of the Round Table.”, audio: “https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-02-king-arthur.mp3″, vocab: [ {word:”king”,meaning:”βασιλιάς”},{word:”sword”,meaning:”σπαθί”},{word:”castle”,meaning:”κάστρο”}, {word:”wizard”,meaning:”μάγος”},{word:”knight”,meaning:”ιππότης”},{word:”magic”,meaning:”μαγεία”}, {word:”stone”,meaning:”πέτρα”},{word:”brave”,meaning:”γενναίος”} ], questionInstruction: “Choose T (True) or F (False).”, questions: [ {type:”tf”,prompt:”Arthur was a king before he found the sword.”,options:[“True”,”False”],answer:1}, {type:”tf”,prompt:”The sword was inside a stone.”,options:[“True”,”False”],answer:0}, {type:”tf”,prompt:”Many people tried to take the sword but failed.”,options:[“True”,”False”],answer:0}, {type:”tf”,prompt:”Arthur became king because he was the strongest man in England.”,options:[“True”,”False”],answer:1}, {type:”tf”,prompt:”Merlin was Arthur’s friend and helper.”,options:[“True”,”False”],answer:0}, {type:”tf”,prompt:”The Knights of the Round Table worked alone.”,options:[“True”,”False”],answer:1}, {type:”tf”,prompt:”Camelot was the name of Arthur’s castle.”,options:[“True”,”False”],answer:0}, {type:”tf”,prompt:”People still tell stories about King Arthur today.”,options:[“True”,”False”],answer:0} ], transcript: [ “Many years ago, there was a young man called Arthur. He lived in England at a time of kings, castles and knights.”, “Arthur was not a king at first. He was a kind and brave young man. One day, he saw a big stone with a beautiful sword inside it. There was a message on the stone: ‘The person who takes out this sword will become the true king of England.’”, “Many strong men tried to pull out the sword, but nobody could do it. Then Arthur tried. He pulled the sword easily from the stone. Everyone was surprised because Arthur was the new king!”, “Arthur had a wise friend called Merlin. Merlin was a wizard who helped Arthur with his advice and magic. Together, they went to a wonderful castle called Camelot.”, “King Arthur had many brave knights. They were called the Knights of the Round Table because they sat around a big round table. They worked together and helped people.”, “People remember King Arthur because he was a fair and caring king. We do not know if Arthur was a real person or only a legend, but his story is still famous today.” ] }, { id: “dolphins”, num: 3, title: “Amazing Dolphins”, shortTitle: “Dolphins”, category: “Nature”, description: “A lively conversation about dolphins, their bodies, food and communication.”, audio: “https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-03-dolphins.mp3″, vocab: [ {word:”mammal”,meaning:”θηλαστικό”},{word:”lungs”,meaning:”πνεύμονες”},{word:”breathe”,meaning:”αναπνέω”}, {word:”surface”,meaning:”επιφάνεια”},{word:”blowhole”,meaning:”αναπνευστική οπή”},{word:”swallow”,meaning:”καταπίνω”}, {word:”whole”,meaning:”ολόκληρος”},{word:”whistle”,meaning:”σφύριγμα”},{word:”click”,meaning:”ήχος κλικ”}, {word:”calf”,meaning:”νεογνό δελφινιού”} ], questions: [ {prompt:”Why did Emma think dolphins were fish?”,options:[“Because they eat fish.”,”Because they live in the sea.”,”Because they can stay underwater.”],answer:1}, {prompt:”How do dolphins breathe?”,options:[“Through a blowhole.”,”Through their mouths.”,”Under the water.”],answer:0}, {prompt:”How long do bottlenose dolphins usually stay underwater before coming up to breathe?”,options:[“About an hour.”,”About forty minutes.”,”Only a few minutes.”],answer:2}, {prompt:”What does Emma say about dolphins’ food?”,options:[“They only eat fish and squid.”,”Some dolphins also eat crabs and shrimp.”,”They usually eat small sea plants.”],answer:1}, {prompt:”What is unusual about the way dolphins eat?”,options:[“They often swallow fish whole.”,”They only eat when they are together.”,”They chew their food for a long time.”],answer:0}, {prompt:”Why do dolphins sometimes push fish into a group?”,options:[“To play with them.”,”To protect them.”,”To catch them more easily.”],answer:2}, {prompt:”What can clicking sounds help a dolphin do?”,options:[“Call its mother.”,”Find things in the water.”,”Breathe when it is underwater.”],answer:1}, {prompt:”What is special about a dolphin’s ‘signature whistle’?”,options:[“It is a little like its own name.”,”It tells other dolphins where food is.”,”Only baby dolphins can make it.”],answer:0}, {prompt:”What does Emma say about young dolphins?”,options:[“They can swim alone after a few days.”,”They stay with their mothers for one year.”,”They can stay with their mothers for several years.”],answer:2}, {prompt:”What surprises Leo near the end of the conversation?”,options:[“A baby dolphin is called a calf.”,”Some female dolphins can live for 60 years or more.”,”Dolphins can eat crabs and shrimp.”],answer:1} ], transcript: [ “Emma: Leo, have you finished our dolphin project?”, “Leo: Almost. I found some really interesting facts last night.”, “Emma: Me too! I always thought dolphins were fish because they live in the sea.”, “Leo: I thought that too when I was younger. But dolphins are mammals. They have lungs and they need air to breathe.”, “Emma: Right. They come to the surface and breathe through the blowhole on top of their head.”, “Leo: Exactly. And do you know how long they can stay under the water?”, “Emma: Hmm… maybe an hour?”, “Leo: No! Bottlenose dolphins usually stay under the water for only a few minutes before they come up to breathe.”, “Emma: Oh, I was completely wrong! I found some information about their food. Dolphins eat fish and squid, and some also eat crabs and shrimp.”, “Leo: Yes, and here’s the funny part. They have lots of teeth, but they don’t usually chew their food.”, “Emma: I know! They often swallow fish whole.”, “Leo: Imagine eating your lunch like that!”, “Emma: No, thank you! But dolphins sometimes work together to catch their food, don’t they?”, “Leo: Yes. They can swim together and push fish into a group. Then it’s easier to catch them.”, “Emma: Dolphins are very clever animals. They also make different sounds.”, “Leo: They do. They use whistles to communicate with other dolphins, and they also make clicking sounds.”, “Emma: The clicks help them find things in the water, right?”, “Leo: Yes. A dolphin makes a click and listens for the sound when it comes back. This can help it find a fish, even when the water is dark.”, “Emma: So they don’t always need their eyes to find food.”, “Leo: Exactly. Oh, and I found something really cool about their whistles. A dolphin can have its own special whistle.”, “Emma: Yes! I read about that too. It’s called a ‘signature whistle.’”, “Leo: It’s a little like having a name.”, “Emma: That’s probably my favourite dolphin fact. But I’ve got another one. Do you know what a baby dolphin is called?”, “Leo: A baby dolphin?”, “Emma: It’s called a calf.”, “Leo: Like a baby cow?”, “Emma: Exactly! And a young dolphin can stay with its mother for several years.”, “Leo: I didn’t know that. How long can dolphins live?”, “Emma: Bottlenose dolphins can live for more than 40 years. Some females can even live for 60 years or more.”, “Leo: Sixty? That’s much longer than I thought.”, “Emma: So, what are we going to put in our project? We have too many facts now!”, “Leo: Let’s choose our five favourites.”, “Emma: OK. The special whistle has to be one of them.”, “Leo: Definitely. And swallowing fish whole!”, “Emma: Of course you’d choose the food fact!”, “Leo: Hey, it’s important information!”, “Emma: Sure it is, Leo!” ] }, { id:”orpheus-eurydice”,num:4,title:”Orpheus and Eurydice”,shortTitle:”Orpheus & Eurydice”,category:”Greek Mythology”, description:”A story about music, love and a promise that was broken too soon.”,audio:”https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-04-orpheus-eurydice.mp3″, vocab:[ {word:”musician”,meaning:”μουσικός”},{word:”lyre”,meaning:”λύρα”},{word:”countryside”,meaning:”εξοχή”}, {word:”snake”,meaning:”φίδι”},{word:”heartbroken”,meaning:”συντετριμμένος”},{word:”Underworld”,meaning:”Κάτω Κόσμος”}, {word:”allow”,meaning:”επιτρέπω”},{word:”promise”,meaning:”υπόσχεση”},{word:”anxious”,meaning:”ανήσυχος”}, {word:”disappear”,meaning:”εξαφανίζομαι”} ], questions:[ {prompt:”What happened when Orpheus played the lyre?”,options:[“People and animals stopped to listen.”,”Everyone ran away.”,”The weather changed.”],answer:0}, {prompt:”Where was Eurydice when the snake bit her?”,options:[“on Olympus”,”in the countryside”,”in the Underworld”],answer:1}, {prompt:”Why did Orpheus travel to the Underworld?”,options:[“to find Hades”,”to play for the gods”,”to bring Eurydice home”],answer:2}, {prompt:”Why did Hades and Persephone help him?”,options:[“His music was beautiful and sad.”,”He gave them a present.”,”They were afraid of him.”],answer:0}, {prompt:”What promise did Orpheus make?”,options:[“He would never play music again.”,”He would not look behind him.”,”He would stay in the Underworld.”],answer:1}, {prompt:”What happened after Orpheus turned around?”,options:[“Eurydice walked outside.”,”Hades followed him.”,”Eurydice disappeared forever.”],answer:2} ], order:[ {text:”Orpheus travelled to the Underworld.”,order:3},{text:”Orpheus and Eurydice got married.”,order:1}, {text:”Eurydice disappeared into the darkness.”,order:5},{text:”A snake bit Eurydice.”,order:2}, {text:”Eurydice followed Orpheus towards the exit.”,order:4} ], transcript:[ “Not many love stories are as sad as the story of Orpheus and Eurydice. Orpheus was a wonderful musician. He played the lyre, and people, birds and even wild animals stopped to listen to him.”, “Orpheus married Eurydice, and they were very happy. But one day, Eurydice was walking in the countryside when a snake bit her. Sadly, she died.”, “Orpheus could not accept her death. He was heartbroken and desperate, so he travelled to the Underworld to bring her home. There, he played his lyre for Hades and Persephone. His music was so beautiful and sad that they agreed to help him.”, “They allowed Eurydice to follow Orpheus back to the world of the living. However, he had to make one promise: he could not look behind him until they were both outside.”, “During the long, dark walk, Orpheus heard Eurydice’s soft steps, but he could not see her. Near the exit, he became anxious and turned around too soon. He saw Eurydice for one short moment. Then she disappeared into the darkness forever.”, “Orpheus returned home alone. Do you think you could keep such a difficult promise?” ] }, { id:”hephaestus-hera”,num:5,title:”Hephaestus and Hera”,shortTitle:”Hephaestus & Hera”,category:”Greek Mythology”, description:”The rejected god who became the greatest metalworker on Olympus.”,audio:”https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-05-hephaestus-hera.mp3″, vocab:[ {word:”god”,meaning:”θεός”},{word:”weak”,meaning:”αδύναμος”},{word:”throw”,meaning:”ρίχνω”}, {word:”island”,meaning:”νησί”},{word:”protect”,meaning:”προστατεύω”},{word:”metalworker”,meaning:”μεταλλουργός”}, {word:”armour”,meaning:”πανοπλία”},{word:”jewellery”,meaning:”κοσμήματα”},{word:”hidden”,meaning:”κρυμμένος”}, {word:”set free”,meaning:”ελευθερώνω”} ], questions:[ {prompt:”What was different about Hephaestus?”,options:[“He had a weak leg.”,”He could not speak.”,”He was not a god.”],answer:0}, {prompt:”Where did Hephaestus find a home?”,options:[“in Athens”,”on Lemnos”,”on Crete”],answer:1}, {prompt:”What did Hephaestus become?”,options:[“a famous musician”,”a powerful king”,”a talented metalworker”],answer:2}, {prompt:”What happened when Hera sat on the chair?”,options:[“Magical chains trapped her.”,”The chair broke.”,”She fell asleep.”],answer:0}, {prompt:”Who helped Hephaestus decide to return?”,options:[“Zeus”,”Dionysus”,”Ares”],answer:1}, {prompt:”Why did Hephaestus become important to the gods?”,options:[“He was Hera’s son.”,”He lived on Lemnos.”,”He had a great talent.”],answer:2} ], order:[ {text:”Hephaestus made a golden chair.”,order:3},{text:”The gods welcomed Hephaestus on Olympus.”,order:5}, {text:”Hera threw Hephaestus from Olympus.”,order:1},{text:”Dionysus spoke kindly to Hephaestus.”,order:4}, {text:”The people of Lemnos protected Hephaestus.”,order:2} ], transcript:[ “People often imagine that all the Greek gods were beautiful and strong. However, the story of Hephaestus was different. Hephaestus was the god of fire and metalwork. In one famous version of the myth, he was born with a weak leg. His mother, Hera, was unhappy and threw him down from Olympus.”, “Hephaestus fell onto the island of Lemnos. Luckily, the people there protected him and gave him a home. As he grew older, he learned to work with fire and metal. He became a talented metalworker and made strong armour, beautiful jewellery and useful tools.”, “However, Hephaestus did not forget what Hera did to him. He made her a beautiful golden chair with hidden magical chains. When Hera sat down, the chains trapped her. None of the gods could free her.”, “At first, Hephaestus refused to return to Olympus. Then Dionysus visited him and spoke to him kindly. Finally, Hephaestus agreed to go back. He opened the chains and set Hera free.”, “After that, the gods welcomed Hephaestus. He stayed on Olympus and worked in his own workshop. His beginning was difficult, but his great talent gave him an important place among the gods. Can a difficult beginning stop a talented person?” ] }, { id:”prometheus”,num:6,title:”Prometheus: Friend of Humans”,shortTitle:”Prometheus”,category:”Greek Mythology”, description:”The Titan who stole fire and accepted a terrible punishment for humanity.”,audio:”https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-06-prometheus.mp3″, vocab:[ {word:”Titan”,meaning:”Τιτάνας”},{word:”desperate”,meaning:”απελπισμένος”},{word:”steal”,meaning:”κλέβω”}, {word:”flame”,meaning:”φλόγα”},{word:”tool”,meaning:”εργαλείο”},{word:”punish”,meaning:”τιμωρώ”}, {word:”chain”,meaning:”αλυσοδένω”},{word:”eagle”,meaning:”αετός”},{word:”liver”,meaning:”συκώτι”}, {word:”set free”,meaning:”ελευθερώνω”} ], questions:[ {prompt:”Why did Prometheus want to help humans?”,options:[“They had a hard life.”,”They gave him food.”,”They lived on Olympus.”],answer:0}, {prompt:”What did Zeus do when Prometheus asked for fire?”,options:[“He gave him a flame.”,”He refused.”,”He asked Hera.”],answer:1}, {prompt:”Where did Prometheus hide the flame?”,options:[“under a rock”,”inside a box”,”inside a plant stem”],answer:2}, {prompt:”How did fire protect humans?”,options:[“It kept wild animals away.”,”It made them invisible.”,”It stopped the rain.”],answer:0}, {prompt:”What happened to Prometheus every day?”,options:[“His chains disappeared.”,”An eagle ate part of his liver.”,”Zeus visited him.”],answer:1}, {prompt:”Who finally set Prometheus free?”,options:[“Theseus”,”Orpheus”,”Heracles”],answer:2} ], order:[ {text:”Zeus refused to give fire to humans.”,order:2},{text:”Heracles set Prometheus free.”,order:5}, {text:”Prometheus saw that humans had a hard life.”,order:1},{text:”Fire changed people’s lives.”,order:4}, {text:”Prometheus stole a flame.”,order:3} ], transcript:[ “Not many people know the story of Prometheus from Ancient Greek mythology. Prometheus was a Titan who cared deeply about humans. He saw their hard life and wanted to make it easier.”, “Prometheus asked Zeus, the king of the gods, to give fire to humans. But Zeus did not like his idea and refused. Prometheus felt sad and desperate. Then he decided to steal the fire and secretly give it to the people. He took a small flame, hid it inside a plant stem and carried it down to Earth.”, “Fire changed people’s lives. They could now keep warm, cook food, make better tools, see in the dark and even keep wild animals away. To them, Prometheus was a hero.”, “When Zeus saw that humans were happier, safer and stronger, he became very angry. He punished Prometheus and chained him to a rock. Every day, an eagle came and ate part of his liver. During the night, his liver grew back and the punishment began again.”, “Prometheus remained there for many years. Then, one day, Heracles came, killed the eagle and set him free. His punishment was over, but humans never forgot his gift. Can you think of another hero of humankind?” ] }, { id:”daedalus-icarus”,num:7,title:”Daedalus and Icarus”,shortTitle:”Daedalus & Icarus”,category:”Greek Mythology”, description:”An escape through the sky and a warning that Icarus forgot.”,audio:”https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-07-daedalus-icarus.mp3″, vocab:[ {word:”inventor”,meaning:”εφευρέτης”},{word:”escape”,meaning:”δραπετεύω”},{word:”feather”,meaning:”φτερό”}, {word:”thread”,meaning:”κλωστή”},{word:”wax”,meaning:”κερί”},{word:”wing”,meaning:”φτερούγα”}, {word:”warning”,meaning:”προειδοποίηση”},{word:”excited”,meaning:”ενθουσιασμένος”},{word:”melt”,meaning:”λιώνω”}, {word:”heartbroken”,meaning:”συντετριμμένος”} ], questions:[ {prompt:”Why did Daedalus want to fly?”,options:[“He wanted to escape from Crete.”,”He wanted an adventure.”,”He wanted to catch birds.”],answer:0}, {prompt:”Why could they not leave by ship?”,options:[“They had no money.”,”Guards watched the ports.”,”The sea was dangerous.”],answer:1}, {prompt:”What held the feathers together?”,options:[“water and rope”,”wood and glue”,”thread and wax”],answer:2}, {prompt:”Where did Daedalus tell Icarus to fly?”,options:[“in the middle of the sky”,”close to the sea”,”near the sun”],answer:0}, {prompt:”Why did Icarus fly too high?”,options:[“He wanted to see Crete.”,”He became excited.”,”He followed his father.”],answer:1}, {prompt:”How did Daedalus feel at the end?”,options:[“angry”,”proud”,”heartbroken”],answer:2} ], order:[ {text:”Icarus flew too high.”,order:4},{text:”Daedalus made two pairs of wings.”,order:2}, {text:”Daedalus landed safely but alone.”,order:5},{text:”King Minos stopped them from leaving.”,order:1}, {text:”Daedalus warned Icarus.”,order:3} ], transcript:[ “Have you ever wanted to fly like a bird? Daedalus did, but not for an adventure. He was a clever inventor who lived on Crete with his son, Icarus. King Minos did not allow them to leave. Guards watched the ports, so they could not escape by ship.”, “Daedalus watched the birds and had a brilliant idea. He collected feathers and joined them with thread and wax. Soon, he made two pairs of wings: one for himself and one for Icarus.”, “Before they left, Daedalus gave his son an important warning. Icarus had to fly in the middle of the sky. If he flew too low, the sea would make the feathers wet. If he flew too high, the hot sun would melt the wax. Icarus promised to listen.”, “At first, Icarus stayed close to his father. Then he became excited and flew higher and higher. He felt free and forgot the warning. The sun melted the wax, the feathers fell from his wings and Icarus fell into the sea.”, “Daedalus landed safely on another island, but he was heartbroken. He was free, but he had lost his son. What can happen when excitement makes us forget good advice?” ] }, { id:”theseus-aegeus”,num:8,title:”Theseus and Aegeus”,shortTitle:”Theseus & Aegeus”,category:”Greek Mythology”, description:”The Minotaur, Ariadne’s thread and the black sail that Theseus forgot.”,audio:”https://lingualand.gr/new/wp-content/uploads/2026/08/a1plus-listening-pack-audio-08-theseus-aegeus.mp3″, vocab:[ {word:”war”,meaning:”πόλεμος”},{word:”maze”,meaning:”λαβύρινθος”},{word:”monster”,meaning:”τέρας”}, {word:”volunteer”,meaning:”προσφέρομαι εθελοντικά”},{word:”sail”,meaning:”πανί πλοίου”},{word:”safe”,meaning:”ασφαλής”}, {word:”sword”,meaning:”σπαθί”},{word:”thread”,meaning:”νήμα”},{word:”entrance”,meaning:”είσοδος”}, {word:”forget”,meaning:”ξεχνώ”} ], questions:[ {prompt:”Why did Athens send young people to Crete?”,options:[“Athens lost a war.”,”They wanted to visit Minos.”,”They wanted an adventure.”],answer:0}, {prompt:”Why did Theseus volunteer to go?”,options:[“He wanted to become king.”,”He wanted to stop the terrible journeys.”,”He wanted to find Ariadne.”],answer:1}, {prompt:”What colour sail meant that Theseus was safe?”,options:[“black”,”blue”,”white”],answer:2}, {prompt:”What did Ariadne give Theseus?”,options:[“a sword and thread”,”a map and a key”,”a lamp and rope”],answer:0}, {prompt:”How did Theseus find the way out?”,options:[“He followed the Minotaur.”,”He followed the thread.”,”He followed a soldier.”],answer:1}, {prompt:”Why did Aegeus believe Theseus was dead?”,options:[“The ship was late.”,”Ariadne told him.”,”The ship still had its black sail.”],answer:2} ], order:[ {text:”Ariadne gave Theseus a sword and thread.”,order:3},{text:”Theseus forgot to change the sail.”,order:5}, {text:”Athens lost a war.”,order:1},{text:”Theseus volunteered to go to Crete.”,order:2}, {text:”Theseus killed the Minotaur.”,order:4} ], transcript:[ “Would you enter a dangerous maze to save others? Theseus did. Long ago, Athens lost a war against King Minos of Crete. After that, the city had to send fourteen young people to Crete. There, they entered a huge maze called the Labyrinth. A terrible monster, the Minotaur, lived inside it.”, “Theseus, the son of King Aegeus, volunteered to go. He wanted to kill the Minotaur and stop the terrible journeys. Before he left, Aegeus asked him to put up a white sail if he returned safely. The ship usually carried a black sail.”, “On Crete, Princess Ariadne helped Theseus. She gave him a sword and a ball of thread. Theseus tied one end of the thread at the entrance. He found and killed the Minotaur. Then he followed the thread back and escaped from the Labyrinth.”, “Theseus sailed home, happy but tired. Sadly, he forgot to change the black sail. Aegeus saw it and believed that his son was dead. In his sadness, he jumped into the sea.”, “Theseus returned as a hero, but he had lost his father. The sea was later named after Aegeus. Can a happy ending also be sad?” ] } ]; </script> <script> (()=>{ const lessons=window.LESSONS||[]; const app=document.getElementById(‘app’); const nav=document.getElementById(‘lessonNav’); const letters=’ABCDEFGHIJKLMNOPQRSTUVWXYZ’; let current=null; let teacherUnlocked=false; const esc=s=>String(s).replace(/[&<>'”]/g,c=>({‘&’:’&’,'<‘:’<’,’>’:’>’,”‘”:’'’,'”‘:’"’}[c])); const toast=msg=>{const t=document.getElementById(‘toast’);t.textContent=msg;t.classList.add(‘show’);clearTimeout(t._timer);t._timer=setTimeout(()=>t.classList.remove(‘show’),2600)}; function makeBank(vocab,seed){const arr=vocab.map(x=>x.meaning);for(let i=arr.length-1;i>0;i–){const j=(i*seed+seed+3)%(i+1);[arr[i],arr[j]]=[arr[j],arr[i]]}if(arr.some((x,i)=>x===vocab[i].meaning))arr.push(arr.shift());return arr} function renderNav(){nav.innerHTML=lessons.map(l=>`<button class=”nav-btn” data-id=”${l.id}”><span class=”nav-num”>${l.num}</span><span>${esc(l.shortTitle||l.title)}</span></button>`).join(”);nav.querySelectorAll(‘button’).forEach(b=>b.onclick=()=>openLesson(b.dataset.id))} function renderHome(){current=null;document.querySelectorAll(‘.nav-btn’).forEach(x=>x.classList.remove(‘active’));app.innerHTML=`<section class=”welcome”><p class=”eyebrow”>Complete interactive collection</p><h2>Listen, learn and check your answers.</h2><p class=”lead”>Choose one of the eight A1+ lessons. Every lesson includes a clear vocabulary warm-up, the original audio, interactive comprehension and instant feedback.</p><div class=”stats”><span class=”stat”>8 listening lessons</span><span class=”stat”>8 audio tracks</span><span class=”stat”>Automatic scoring</span><span class=”stat”>Teacher transcripts & keys</span></div><div class=”lesson-grid”>${lessons.map(l=>`<button class=”lesson-card” data-id=”${l.id}”><span class=”card-num”>Lesson ${l.num} · ${esc(l.category)}</span><h3>${esc(l.title)}</h3><p>${esc(l.description)}</p></button>`).join(”)}</div></section>`;app.querySelectorAll(‘.lesson-card’).forEach(b=>b.onclick=()=>openLesson(b.dataset.id));app.focus()} function openLesson(id){const l=lessons.find(x=>x.id===id);if(!l)return;current=l;document.querySelectorAll(‘.nav-btn’).forEach(x=>x.classList.toggle(‘active’,x.dataset.id===id));const bank=makeBank(l.vocab,l.num+2);const total=l.vocab.length+l.questions.length+(l.order?l.order.length:0);app.innerHTML=` <section class=”lesson-head”><div class=”lesson-meta”><span class=”pill”>Lesson ${l.num}</span><span class=”pill gold”>${esc(l.category)}</span><span class=”pill”>CEFR A1+</span></div><h2>${esc(l.title)}</h2><p>${esc(l.description)}</p></section> <section class=”section” id=”vocab”><h3>1. Before you listen</h3><p class=”instruction”>Match each English word with its Greek meaning. The word bank is shuffled.</p><div class=”word-bank”>${bank.map(x=>`<span class=”word-chip”>${esc(x)}</span>`).join(”)}</div><div class=”vocab-grid”>${l.vocab.map((v,i)=>`<div class=”vocab-row” data-correct=”${esc(v.meaning)}”><span class=”word”>${i+1}. ${esc(v.word)}</span><select class=”select vocab-select” aria-label=”Greek meaning of ${esc(v.word)}”><option value=””>Choose the meaning</option>${bank.map(x=>`<option value=”${esc(x)}”>${esc(x)}</option>`).join(”)}</select></div>`).join(”)}</div></section> <section class=”audio-card”><div class=”audio-label”>🎧 Listen to the lesson</div><audio controls preload=”metadata” src=”${esc(l.audio)}”>Your browser does not support audio.</audio></section> <section class=”section” id=”questions”><h3>2. Listening comprehension</h3><p class=”instruction”>${l.questionInstruction||’Choose the correct answer.’}</p><div class=”questions”>${l.questions.map((q,i)=>`<div class=”question” data-answer=”${q.answer}”><div class=”question-title”>${i+1}. ${esc(q.prompt)}</div><div class=”options”>${q.options.map((o,j)=>`<label class=”option”><input type=”radio” name=”q${l.num}-${i}” value=”${j}”><span>${q.type===’tf’?”:letters[j]+’) ‘}${esc(o)}</span></label>`).join(”)}</div><p class=”feedback” aria-live=”polite”></p></div>`).join(”)}</div></section> ${l.order?`<section class=”section” id=”order”><h3>3. Put the events in order</h3><p class=”instruction”>Choose numbers 1–5 in the order you hear the events.</p><div class=”order-grid”>${l.order.map((o,i)=>`<div class=”order-row” data-answer=”${o.order}”><select class=”select order-select” aria-label=”Order number for event ${i+1}”><option value=””>Order</option>${[1,2,3,4,5].map(n=>`<option value=”${n}”>${n}</option>`).join(”)}</select><span>${esc(o.text)}</span></div>`).join(”)}</div></section>`:”} <section class=”progress-card”><div class=”progress-line”><div class=”progress-fill” id=”progressFill”></div></div><div class=”progress-text”><span id=”progressText”>0 of ${total} answered</span><span>${total} items</span></div><div class=”actions”><button class=”btn primary” id=”checkBtn”>Check my answers</button><button class=”btn secondary” id=”resetBtn”>Try again</button><button class=”btn teacher” id=”teacherBtn”>🔒 Teacher materials</button></div><div class=”score” id=”scoreBox”></div></section> <section class=”teacher-panel” id=”teacherPanel”><h3>Teacher materials</h3><div class=”key”><p><strong>Vocabulary:</strong> ${l.vocab.map((v,i)=>`${i+1}. ${esc(v.word)} — ${esc(v.meaning)}`).join(‘ · ‘)}</p><p><strong>Comprehension:</strong> ${l.questions.map((q,i)=>`${i+1}${q.type===’tf’?’ ‘+esc(q.options[q.answer]):letters[q.answer].toLowerCase()}`).join(‘, ‘)}</p>${l.order?`<p><strong>Correct order:</strong> ${[…l.order].sort((a,b)=>a.order-b.order).map(o=>`${o.order}. ${esc(o.text)}`).join(‘ → ‘)}</p>`:”}</div><div class=”transcript”><h4>Transcript</h4>${l.transcript.map(p=>`<p>${esc(p)}</p>`).join(”)}</div></section> <div class=”lesson-footer”><button class=”btn secondary” id=”prevBtn” ${l.num===1?’disabled’:”}>← Previous</button><button class=”btn secondary” id=”nextBtn” ${l.num===lessons.length?’disabled’:”}>Next →</button></div>`; app.querySelectorAll(‘select,input’).forEach(x=>x.addEventListener(‘change’,updateProgress));document.getElementById(‘checkBtn’).onclick=check;document.getElementById(‘resetBtn’).onclick=reset;document.getElementById(‘teacherBtn’).onclick=showTeacher;document.getElementById(‘prevBtn’).onclick=()=>l.num>1&&openLesson(lessons[l.num-2].id);document.getElementById(‘nextBtn’).onclick=()=>l.num<lessons.length&&openLesson(lessons[l.num].id);window.scrollTo({top:0,behavior:’smooth’});app.focus(); } function allItems(){return […app.querySelectorAll(‘.vocab-row’),…app.querySelectorAll(‘.question’),…app.querySelectorAll(‘.order-row’)]} function isAnswered(el){if(el.classList.contains(‘vocab-row’)||el.classList.contains(‘order-row’))return !!el.querySelector(‘select’).value;return !!el.querySelector(‘input:checked’)} function updateProgress(){const items=allItems(),done=items.filter(isAnswered).length;document.getElementById(‘progressFill’).style.width=`${items.length?done/items.length*100:0}%`;document.getElementById(‘progressText’).textContent=`${done} of ${items.length} answered`} function check(){let score=0;const items=allItems();items.forEach(el=>{let value,answer;if(el.classList.contains(‘question’)){value=el.querySelector(‘input:checked’)?.value;answer=el.dataset.answer;el.querySelectorAll(‘.option’).forEach(x=>x.classList.remove(‘correct’,’wrong’));const fb=el.querySelector(‘.feedback’);if(value==null){fb.textContent=’Please choose an answer.’;fb.className=’feedback bad’;return}const selected=el.querySelector(`input[value=”${value}”]`).closest(‘.option’);if(String(value)===String(answer)){score++;selected.classList.add(‘correct’);fb.textContent=’Correct!’;fb.className=’feedback good’}else{selected.classList.add(‘wrong’);el.querySelector(`input[value=”${answer}”]`).closest(‘.option’).classList.add(‘correct’);fb.textContent=’Have another look after listening again.’;fb.className=’feedback bad’}}else{const select=el.querySelector(‘select’);value=select.value;answer=el.dataset.correct||el.dataset.answer;el.classList.remove(‘correct’,’wrong’);if(value&&String(value)===String(answer)){score++;el.classList.add(‘correct’)}else if(value){el.classList.add(‘wrong’)}}});const box=document.getElementById(‘scoreBox’);box.classList.add(‘show’);const pct=Math.round(score/items.length*100);box.innerHTML=`Your score: <strong>${score} / ${items.length}</strong> (${pct}%)${score===items.length?’ — Excellent work! 🌟’:score>=items.length*.7?’ — Very good! Listen once more and fix the remaining items.’:’ — Listen again and try once more.’}`;updateProgress();box.scrollIntoView({behavior:’smooth’,block:’center’})} function reset(){app.querySelectorAll(‘select’).forEach(x=>x.value=”);app.querySelectorAll(‘input[type=radio]’).forEach(x=>x.checked=false);app.querySelectorAll(‘.correct,.wrong’).forEach(x=>x.classList.remove(‘correct’,’wrong’));app.querySelectorAll(‘.feedback’).forEach(x=>{x.textContent=”;x.className=’feedback’});document.getElementById(‘scoreBox’).classList.remove(‘show’);updateProgress();toast(‘The lesson has been reset.’)} function toggleTeacherPanel(){const panel=document.getElementById(‘teacherPanel’);panel.classList.toggle(‘show’);document.getElementById(‘teacherBtn’).textContent=panel.classList.contains(‘show’)?’Hide teacher materials’:’🔓 Teacher materials’} function showTeacher(){if(!teacherUnlocked){const modal=document.getElementById(‘pinModal’);modal.classList.add(‘show’);const input=document.getElementById(‘pinInput’);input.value=”;setTimeout(()=>input.focus(),20);return}toggleTeacherPanel()} function closePin(){document.getElementById(‘pinModal’).classList.remove(‘show’)} function unlockTeacher(){const input=document.getElementById(‘pinInput’);if(input.value!==’1972′){toast(‘The teacher PIN is not correct.’);input.select();return}teacherUnlocked=true;closePin();toggleTeacherPanel();toast(‘Teacher materials unlocked.’)} document.getElementById(‘pinCancel’).onclick=closePin;document.getElementById(‘pinUnlock’).onclick=unlockTeacher;document.getElementById(‘pinInput’).addEventListener(‘keydown’,e=>{if(e.key===’Enter’)unlockTeacher();if(e.key===’Escape’)closePin()});document.getElementById(‘pinModal’).addEventListener(‘click’,e=>{if(e.target.id===’pinModal’)closePin()}); document.getElementById(‘homeTop’).onclick=renderHome;renderNav();renderHome(); })(); </script> </div><script>(function(){const expectedHash=’bc5d5f040ace37368fa65f2800cbb0b15e9671f8f451d16967b9d462ff2dbf44′;const gate=document.getElementById(‘accessGate’);const app=document.getElementById(‘exerciseApp’);const form=document.getElementById(‘accessForm’);const input=document.getElementById(‘accessKey’);const error=document.getElementById(‘accessError’);async function digest(value){const bytes=new TextEncoder().encode(value);const hash=await crypto.subtle.digest(‘SHA-256′,bytes);return Array.from(new Uint8Array(hash)).map(b=>b.toString(16).padStart(2,’0’)).join(”)}function unlock(){gate.hidden=true;app.hidden=false;try{window.dispatchEvent(new Event(‘resize’))}catch(e){}}form.addEventListener(‘submit’,async function(event){event.preventDefault();error.textContent=”;if(await digest(input.value)===expectedHash){unlock()}else{input.value=”;error.textContent=’Incorrect access key.’;input.focus()}});input.focus()})();</script></body> </html>