{"id":598,"date":"2026-01-09T15:28:41","date_gmt":"2026-01-09T15:28:41","guid":{"rendered":"https:\/\/i-cte.org\/robot\/?p=598"},"modified":"2026-01-09T15:28:41","modified_gmt":"2026-01-09T15:28:41","slug":"ielts-listening-test-3","status":"publish","type":"post","link":"https:\/\/i-cte.org\/robot\/ielts-listening-test-3\/","title":{"rendered":"IELTs &#8211; Listening &#8211; Test 3"},"content":{"rendered":"\n<!-- \u2705 WordPress-friendly (paste into a Custom HTML block) -->\n<div id=\"icte-listening-test3\">\n\n  <!-- \u2705 TOP GREEN MENU (site links + internal section jumps) -->\n  <nav class=\"icte-menu\" aria-label=\"ICTE Listening menu\">\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-overview\/\">Overview<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-overview\/\">Test 1<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-test-2\/\">Test 2<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-test-3\/\">Test 3<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-test-4\/\">Test 4<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-overview\/\">Reading<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-speaking-overview\/\">Speaking<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-writing-overview\/\">Writing<\/a>\n  <\/nav>\n\n  <!-- \u2705 GLOBAL CONTROLS (voices used by ALL sections) -->\n  <section class=\"icte-ielts icte-ielts--top\" aria-label=\"Global controls\">\n    <header class=\"icte-ielts__intro\">\n      <h2 class=\"icte-ielts__title\">IELTS Listening \u2013 Test 3 (Sections 1\u20134)<\/h2>\n      <p class=\"icte-ielts__sub\">\n        Practice all 4 sections on one page. Use <strong>Check Answers<\/strong> in each section for feedback.\n      <\/p>\n    <\/header>\n\n    <section class=\"icte-ielts__panel\" aria-label=\"Voice controls\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Voices (used for all sections)<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--danger\" type=\"button\" data-action=\"stop-audio\">\u23f9 Stop Audio<\/button>\n          <span class=\"icte-loader\" data-el=\"synthesis-loader\" aria-hidden=\"true\"><\/span>\n        <\/div>\n      <\/div>\n\n      <div class=\"icte-ielts__row\" style=\"align-items:flex-start;\">\n        <div class=\"icte-ielts__control\" style=\"flex:1; min-width:240px;\">\n          <label><strong>Voice A<\/strong> (Narrator \/ Speaker 1)<\/label>\n          <select data-el=\"voice-a\" aria-label=\"Select Voice A\">\n            <option value=\"\">Loading voices&#8230;<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"icte-ielts__control\" style=\"flex:1; min-width:240px;\">\n          <label><strong>Voice B<\/strong> (Speaker 2)<\/label>\n          <select data-el=\"voice-b\" aria-label=\"Select Voice B\">\n            <option value=\"\">Loading voices&#8230;<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"icte-ielts__score\" data-el=\"overallScoreBox\" aria-live=\"polite\"><\/div>\n      <\/div>\n\n      <div class=\"icte-ielts__btnRow\">\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"scroll-sec1\">Go to Section 1<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"scroll-sec2\">Go to Section 2<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"scroll-sec3\">Go to Section 3<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"scroll-sec4\">Go to Section 4<\/button>\n      <\/div>\n    <\/section>\n  <\/section>\n\n  <!-- =========================\n       SECTION 1 (1\u201310)\n  ========================== -->\n  <section class=\"icte-ielts\" id=\"sec1\" data-section=\"s1\" aria-label=\"Section 1\">\n    <header class=\"icte-ielts__intro\">\n      <h2 class=\"icte-ielts__title\">Section 1 (Questions 1\u201310): Public Library<\/h2>\n      <p class=\"icte-ielts__sub\">\n        Complete the notes below. Write <strong>ONE WORD ONLY<\/strong> for each answer.\n      <\/p>\n    <\/header>\n\n    <!-- Transcript -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Transcript S1\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Transcript (Section 1)<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"toggle-transcript\">Show Transcript<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__reading\" data-el=\"transcript-area\" style=\"display:none;\"><\/div>\n\n      <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-audio\">\ud83d\udd0a Listen (Section 1)<\/button>\n        <a class=\"icte-link\" href=\"#q-s1\">Jump to questions \u2193<\/a>\n      <\/div>\n    <\/section>\n\n    <!-- Support -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Support S1\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Support<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"clear-support\">Clear<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__helper\" data-el=\"helper-area\" aria-live=\"polite\">\n        Click <strong>Summary<\/strong>, <strong>Main ideas<\/strong>, or <strong>Keywords<\/strong>.\n      <\/div>\n    <\/section>\n\n    <!-- Controls -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Controls S1\">\n      <div class=\"icte-ielts__btnGrid\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-instructions\">\ud83d\udd0a Read Instructions<\/button>\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"read-questions\">\ud83d\udd0a Read Questions<\/button>\n        <button class=\"icte-btn icte-btn--primary\" type=\"button\" data-action=\"check\">Check Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"show\">\ud83d\udc40 Show Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"summary\">\ud83e\udde0 Summary<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"main-ideas\">\ud83d\udccc Main ideas<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"keywords\">\ud83d\udcda Keywords<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"reset\">Reset<\/button>\n      <\/div>\n      <div class=\"icte-ielts__row\" style=\"padding-top:0;\">\n        <div class=\"icte-ielts__score\" data-el=\"scoreBox\" aria-live=\"polite\"><\/div>\n      <\/div>\n    <\/section>\n\n    <!-- Questions -->\n    <section class=\"icte-ielts__panel\" id=\"q-s1\" aria-label=\"Questions 1-10\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Questions 1\u201310<\/h3>\n      <\/div>\n\n      <div class=\"icte-ielts__qArea\">\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">PUBLIC LIBRARY<\/div>\n          <div class=\"icte-note\">\n            <div><strong>Example<\/strong> The library re-opened last <strong>month<\/strong>.<\/div>\n            <div style=\"margin-top:.55rem;\"><strong>The library now has<\/strong><\/div>\n            <div>\u2022 a seating area with magazines<\/div>\n            <div>\u2022 an expanded section for books on\n              <span class=\"blank\">1 <input type=\"text\" data-q=\"1\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 a new section on local\n              <span class=\"blank\">2 <input type=\"text\" data-q=\"2\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 a community room for meetings (also possible to\n              <span class=\"blank\">3 <input type=\"text\" data-q=\"3\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              there)\n            <\/div>\n            <div>\u2022 a new section of books for\n              <span class=\"blank\">4 <input type=\"text\" data-q=\"4\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>For younger children<\/strong><\/div>\n            <div>\u2022 the next Science Club meeting: experiments using things from your\n              <span class=\"blank\">5 <input type=\"text\" data-q=\"5\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 Reading Challenge: read six books during the holidays<\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>For adults<\/strong><\/div>\n            <div>\u2022 this Friday: a local author talks about a novel based on a real\n              <span class=\"blank\">6 <input type=\"text\" data-q=\"6\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 IT support is available on Tuesdays &#8211; no\n              <span class=\"blank\">7 <input type=\"text\" data-q=\"7\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              is necessary\n            <\/div>\n            <div>\u2022 free check of blood\n              <span class=\"blank\">8 <input type=\"text\" data-q=\"8\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              and cholesterol levels (over 60s only)\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>Other information<\/strong><\/div>\n            <div>\u2022 the library shop sells wall-charts, cards and\n              <span class=\"blank\">9 <input type=\"text\" data-q=\"9\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 evenings and weekends: free\n              <span class=\"blank\">10 <input type=\"text\" data-q=\"10\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              is available\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-q__fb\" data-fb=\"1\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"2\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"3\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"4\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"5\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"6\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"7\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"8\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"9\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"10\"><\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n  <\/section>\n\n  <!-- =========================\n       SECTION 2 (11\u201320)\n  ========================== -->\n  <section class=\"icte-ielts\" id=\"sec2\" data-section=\"s2\" aria-label=\"Section 2\">\n    <header class=\"icte-ielts__intro\">\n      <h2 class=\"icte-ielts__title\">Section 2 (Questions 11\u201320): BC Travel \u2013 Activity &#038; Fitness Holidays<\/h2>\n      <p class=\"icte-ielts__sub\">\n        Questions 11\u201314: choose <strong>TWO<\/strong> letters A\u2013E. Questions 15\u201317: choose <strong>A, B or C<\/strong>.\n        Questions 18\u201320: write <strong>ONE WORD ONLY<\/strong>.\n      <\/p>\n    <\/header>\n\n    <!-- Transcript -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Transcript S2\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Transcript (Section 2)<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"toggle-transcript\">Show Transcript<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__reading\" data-el=\"transcript-area\" style=\"display:none;\"><\/div>\n      <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-audio\">\ud83d\udd0a Listen (Section 2)<\/button>\n        <a class=\"icte-link\" href=\"#q-s2\">Jump to questions \u2193<\/a>\n      <\/div>\n    <\/section>\n\n    <!-- Support -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Support S2\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Support<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"clear-support\">Clear<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__helper\" data-el=\"helper-area\" aria-live=\"polite\">\n        Click <strong>Summary<\/strong>, <strong>Main ideas<\/strong>, or <strong>Keywords<\/strong>.\n      <\/div>\n    <\/section>\n\n    <!-- Controls -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Controls S2\">\n      <div class=\"icte-ielts__btnGrid\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-instructions\">\ud83d\udd0a Read Instructions<\/button>\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"read-questions\">\ud83d\udd0a Read Questions<\/button>\n        <button class=\"icte-btn icte-btn--primary\" type=\"button\" data-action=\"check\">Check Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"show\">\ud83d\udc40 Show Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"summary\">\ud83e\udde0 Summary<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"main-ideas\">\ud83d\udccc Main ideas<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"keywords\">\ud83d\udcda Keywords<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"reset\">Reset<\/button>\n      <\/div>\n      <div class=\"icte-ielts__row\" style=\"padding-top:0;\">\n        <div class=\"icte-ielts__score\" data-el=\"scoreBox\" aria-live=\"polite\"><\/div>\n      <\/div>\n    <\/section>\n\n    <!-- Questions -->\n    <section class=\"icte-ielts__panel\" id=\"q-s2\" aria-label=\"Questions 11-20\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Questions 11\u201320<\/h3>\n      <\/div>\n\n      <div class=\"icte-ielts__qArea\">\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 11\u201312 (Choose TWO letters, A\u2013E)<\/div>\n          <div class=\"icte-note\"><strong>Which TWO age groups are taking increasing numbers of holidays with BC Travel?<\/strong><\/div>\n\n          <div class=\"icte-box\">\n            <div class=\"icte-box__title\">Age groups<\/div>\n            <div class=\"icte-box__grid\">\n              <div><strong>A<\/strong>. 16\u201330 years<\/div>\n              <div><strong>B<\/strong>. 31\u201342 years<\/div>\n              <div><strong>C<\/strong>. 43\u201354 years<\/div>\n              <div><strong>D<\/strong>. 55\u201364 years<\/div>\n              <div><strong>E<\/strong>. over 65 years<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-grid2\">\n            <div class=\"icte-day\">\n              <div><strong>11.<\/strong><\/div>\n              <select data-q=\"11\" data-type=\"select\">\n                <option value=\"\">Select A\u2013E<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"11\"><\/div>\n            <\/div>\n            <div class=\"icte-day\">\n              <div><strong>12.<\/strong><\/div>\n              <select data-q=\"12\" data-type=\"select\">\n                <option value=\"\">Select A\u2013E<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"12\"><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 13\u201314 (Choose TWO letters, A\u2013E)<\/div>\n          <div class=\"icte-note\"><strong>Which TWO are the main reasons given for the popularity of activity holidays?<\/strong><\/div>\n\n          <div class=\"icte-box\">\n            <div class=\"icte-box__title\">Reasons<\/div>\n            <div class=\"icte-box__grid\">\n              <div><strong>A<\/strong>. Clients make new friends.<\/div>\n              <div><strong>B<\/strong>. Clients learn a useful skill.<\/div>\n              <div><strong>C<\/strong>. Clients learn about a different culture.<\/div>\n              <div><strong>D<\/strong>. Clients are excited by the risk involved.<\/div>\n              <div><strong>E<\/strong>. Clients find them good value for money.<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-grid2\">\n            <div class=\"icte-day\">\n              <div><strong>13.<\/strong><\/div>\n              <select data-q=\"13\" data-type=\"select\">\n                <option value=\"\">Select A\u2013E<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"13\"><\/div>\n            <\/div>\n            <div class=\"icte-day\">\n              <div><strong>14.<\/strong><\/div>\n              <select data-q=\"14\" data-type=\"select\">\n                <option value=\"\">Select A\u2013E<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"14\"><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 15\u201317 (Choose A, B or C)<\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>15.<\/strong> How does BC Travel plan to expand the painting holidays?<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q15\" data-q=\"15\" data-type=\"radio\" value=\"A\"> A. by adding to the number of locations<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q15\" data-q=\"15\" data-type=\"radio\" value=\"B\"> B. by increasing the range of levels<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q15\" data-q=\"15\" data-type=\"radio\" value=\"C\"> C. by employing more teachers<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"15\"><\/div>\n          <\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>16.<\/strong> Why are BC Travel\u2019s cooking holidays unusual?<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q16\" data-q=\"16\" data-type=\"radio\" value=\"A\"> A. They only use organic foods.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q16\" data-q=\"16\" data-type=\"radio\" value=\"B\"> B. They have an international focus.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q16\" data-q=\"16\" data-type=\"radio\" value=\"C\"> C. They mainly involve vegetarian dishes.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"16\"><\/div>\n          <\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>17.<\/strong> What does the speaker say about the photography holidays?<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q17\" data-q=\"17\" data-type=\"radio\" value=\"A\"> A. Clients receive individual tuition.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q17\" data-q=\"17\" data-type=\"radio\" value=\"B\"> B. The tutors are also trained guides.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q17\" data-q=\"17\" data-type=\"radio\" value=\"C\"> C. Advice is given on selling photographs.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"17\"><\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 18\u201320 (ONE WORD ONLY)<\/div>\n\n          <div class=\"icte-box\">\n            <div class=\"icte-box__title\">Fitness Holidays<\/div>\n            <div class=\"icte-note\" style=\"margin:0;\">\n              <div><strong>Complete the table.<\/strong><\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-q\">\n            <div class=\"icte-q__label\">Ireland and Italy (general fitness)<\/div>\n            <div class=\"icte-note\">\n              <div>\u2022 personally designed programme<\/div>\n              <div>\u2022 also reduces\n                <span class=\"blank\">18 <input type=\"text\" data-q=\"18\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              <\/div>\n            <\/div>\n            <div class=\"icte-q__fb\" data-fb=\"18\"><\/div>\n          <\/div>\n\n          <div class=\"icte-q\">\n            <div class=\"icte-q__label\">Greece<\/div>\n            <div class=\"icte-note\">\n              <div>Main focus:\n                <span class=\"blank\">19 <input type=\"text\" data-q=\"19\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n                control\n              <\/div>\n              <div>Other comments: includes exercise on the beach<\/div>\n            <\/div>\n            <div class=\"icte-q__fb\" data-fb=\"19\"><\/div>\n          <\/div>\n\n          <div class=\"icte-q\">\n            <div class=\"icte-q__label\">Morocco (mountain biking)<\/div>\n            <div class=\"icte-note\">\n              <div>\u2022 wide variety of levels<\/div>\n              <div>\u2022 one holiday that is specially designed for\n                <span class=\"blank\">20 <input type=\"text\" data-q=\"20\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              <\/div>\n            <\/div>\n            <div class=\"icte-q__fb\" data-fb=\"20\"><\/div>\n          <\/div>\n\n        <\/div>\n\n      <\/div>\n    <\/section>\n  <\/section>\n\n  <!-- =========================\n       SECTION 3 (21\u201330)\n  ========================== -->\n  <section class=\"icte-ielts\" id=\"sec3\" data-section=\"s3\" aria-label=\"Section 3\">\n    <header class=\"icte-ielts__intro\">\n      <h2 class=\"icte-ielts__title\">Section 3 (Questions 21\u201330): Tourism Case Study \u2013 Horton Castle<\/h2>\n      <p class=\"icte-ielts__sub\">\n        Questions 21\u201326: choose from A\u2013H. Questions 27\u201330: choose <strong>A, B or C<\/strong>.\n      <\/p>\n    <\/header>\n\n    <!-- Transcript -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Transcript S3\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Transcript (Section 3)<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"toggle-transcript\">Show Transcript<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__reading\" data-el=\"transcript-area\" style=\"display:none;\"><\/div>\n      <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-audio\">\ud83d\udd0a Listen (Section 3)<\/button>\n        <a class=\"icte-link\" href=\"#q-s3\">Jump to questions \u2193<\/a>\n      <\/div>\n    <\/section>\n\n    <!-- Support -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Support S3\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Support<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"clear-support\">Clear<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__helper\" data-el=\"helper-area\" aria-live=\"polite\">\n        Click <strong>Summary<\/strong>, <strong>Main ideas<\/strong>, or <strong>Keywords<\/strong>.\n      <\/div>\n    <\/section>\n\n    <!-- Controls -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Controls S3\">\n      <div class=\"icte-ielts__btnGrid\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-instructions\">\ud83d\udd0a Read Instructions<\/button>\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"read-questions\">\ud83d\udd0a Read Questions<\/button>\n        <button class=\"icte-btn icte-btn--primary\" type=\"button\" data-action=\"check\">Check Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"show\">\ud83d\udc40 Show Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"summary\">\ud83e\udde0 Summary<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"main-ideas\">\ud83d\udccc Main ideas<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"keywords\">\ud83d\udcda Keywords<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"reset\">Reset<\/button>\n      <\/div>\n      <div class=\"icte-ielts__row\" style=\"padding-top:0;\">\n        <div class=\"icte-ielts__score\" data-el=\"scoreBox\" aria-live=\"polite\"><\/div>\n      <\/div>\n    <\/section>\n\n    <!-- Questions -->\n    <section class=\"icte-ielts__panel\" id=\"q-s3\" aria-label=\"Questions 21-30\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Questions 21\u201330<\/h3>\n      <\/div>\n\n      <div class=\"icte-ielts__qArea\">\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 21\u201326 (Choose SIX answers from the box, A\u2013H)<\/div>\n\n          <div class=\"icte-box\">\n            <div class=\"icte-box__title\">Options<\/div>\n            <div class=\"icte-box__grid\">\n              <div><strong>A<\/strong>. patterns<\/div>\n              <div><strong>B<\/strong>. names<\/div>\n              <div><strong>C<\/strong>. sources<\/div>\n              <div><strong>D<\/strong>. questions<\/div>\n              <div><strong>E<\/strong>. employees<\/div>\n              <div><strong>F<\/strong>. solutions<\/div>\n              <div><strong>G<\/strong>. headings<\/div>\n              <div><strong>H<\/strong>. officials<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-flow\">\n            <div class=\"icte-flow__title\"><strong>STAGES IN DOING A TOURISM CASE STUDY<\/strong><\/div>\n\n            <div class=\"icte-flow__step\">\n              Locate and read relevant articles, noting key information and also <strong>21<\/strong>\n              <select data-q=\"21\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"21\"><\/div>\n            <\/div>\n\n            <div class=\"icte-flow__step\">\n              Select interviewees \u2013 these may be site <strong>22<\/strong>\n              <select data-q=\"22\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              , visitors or city <strong>23<\/strong>\n              <select data-q=\"23\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"22\"><\/div>\n              <div class=\"icte-q__fb\" data-fb=\"23\"><\/div>\n            <\/div>\n\n            <div class=\"icte-flow__step\">\n              Check whether <strong>24<\/strong>\n              <select data-q=\"24\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              of interviewees can be used\n              <div class=\"icte-q__fb\" data-fb=\"24\"><\/div>\n            <\/div>\n\n            <div class=\"icte-flow__step\">\n              Select relevant information and try to identify <strong>25<\/strong>\n              <select data-q=\"25\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"25\"><\/div>\n            <\/div>\n\n            <div class=\"icte-flow__step\">\n              Do NOT end with <strong>26<\/strong>\n              <select data-q=\"26\" data-type=\"select\">\n                <option value=\"\">Select A\u2013H<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>D<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option>\n              <\/select>\n              <div class=\"icte-q__fb\" data-fb=\"26\"><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">Questions 27\u201330 (Choose A, B or C)<\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>27.<\/strong> Natalie and Dave agree one reason why so few people visit Horton Castle is that<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q27\" data-q=\"27\" data-type=\"radio\" value=\"A\"> A. the publicity is poor.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q27\" data-q=\"27\" data-type=\"radio\" value=\"B\"> B. it is difficult to get to.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q27\" data-q=\"27\" data-type=\"radio\" value=\"C\"> C. there is little there of interest.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"27\"><\/div>\n          <\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>28.<\/strong> Natalie and Dave agree that the greatest problem with a visitor centre could be<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q28\" data-q=\"28\" data-type=\"radio\" value=\"A\"> A. covering the investment costs.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q28\" data-q=\"28\" data-type=\"radio\" value=\"B\"> B. finding a big enough space for it.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q28\" data-q=\"28\" data-type=\"radio\" value=\"C\"> C. dealing with planning restrictions.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"28\"><\/div>\n          <\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>29.<\/strong> What does Dave say about conditions in the town of Horton?<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q29\" data-q=\"29\" data-type=\"radio\" value=\"A\"> A. There is a lot of unemployment.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q29\" data-q=\"29\" data-type=\"radio\" value=\"B\"> B. There are few people of working age.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q29\" data-q=\"29\" data-type=\"radio\" value=\"C\"> C. There are opportunities for skilled workers.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"29\"><\/div>\n          <\/div>\n\n          <div class=\"icte-mcq\">\n            <div class=\"icte-mcq__q\"><strong>30.<\/strong> According to Natalie, one way to prevent damage to the castle site would be to<\/div>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q30\" data-q=\"30\" data-type=\"radio\" value=\"A\"> A. insist visitors have a guide.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q30\" data-q=\"30\" data-type=\"radio\" value=\"B\"> B. make visitors keep to the paths.<\/label>\n            <label class=\"icte-opt\"><input type=\"radio\" name=\"q30\" data-q=\"30\" data-type=\"radio\" value=\"C\"> C. limit visitor numbers.<\/label>\n            <div class=\"icte-q__fb\" data-fb=\"30\"><\/div>\n          <\/div>\n        <\/div>\n\n      <\/div>\n    <\/section>\n  <\/section>\n\n  <!-- =========================\n       SECTION 4 (31\u201340)\n  ========================== -->\n  <section class=\"icte-ielts\" id=\"sec4\" data-section=\"s4\" aria-label=\"Section 4\">\n    <header class=\"icte-ielts__intro\">\n      <h2 class=\"icte-ielts__title\">Section 4 (Questions 31\u201340): Environmental Change on Birds<\/h2>\n      <p class=\"icte-ielts__sub\">\n        Complete the notes below. Write <strong>ONE WORD ONLY<\/strong> for each answer.\n      <\/p>\n    <\/header>\n\n    <!-- Transcript -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Transcript S4\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Transcript (Section 4)<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"toggle-transcript\">Show Transcript<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__reading\" data-el=\"transcript-area\" style=\"display:none;\"><\/div>\n      <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-audio\">\ud83d\udd0a Listen (Section 4)<\/button>\n        <a class=\"icte-link\" href=\"#q-s4\">Jump to questions \u2193<\/a>\n      <\/div>\n    <\/section>\n\n    <!-- Support -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Support S4\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Support<\/h3>\n        <div class=\"icte-ielts__headRight\">\n          <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"clear-support\">Clear<\/button>\n        <\/div>\n      <\/div>\n      <div class=\"icte-ielts__helper\" data-el=\"helper-area\" aria-live=\"polite\">\n        Click <strong>Summary<\/strong>, <strong>Main ideas<\/strong>, or <strong>Keywords<\/strong>.\n      <\/div>\n    <\/section>\n\n    <!-- Controls -->\n    <section class=\"icte-ielts__panel\" aria-label=\"Controls S4\">\n      <div class=\"icte-ielts__btnGrid\">\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"play-instructions\">\ud83d\udd0a Read Instructions<\/button>\n        <button class=\"icte-btn icte-btn--info\" type=\"button\" data-action=\"read-questions\">\ud83d\udd0a Read Questions<\/button>\n        <button class=\"icte-btn icte-btn--primary\" type=\"button\" data-action=\"check\">Check Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"show\">\ud83d\udc40 Show Answers<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"summary\">\ud83e\udde0 Summary<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"main-ideas\">\ud83d\udccc Main ideas<\/button>\n        <button class=\"icte-btn icte-btn--dark\" type=\"button\" data-action=\"keywords\">\ud83d\udcda Keywords<\/button>\n        <button class=\"icte-btn icte-btn--ghost\" type=\"button\" data-action=\"reset\">Reset<\/button>\n      <\/div>\n      <div class=\"icte-ielts__row\" style=\"padding-top:0;\">\n        <div class=\"icte-ielts__score\" data-el=\"scoreBox\" aria-live=\"polite\"><\/div>\n      <\/div>\n    <\/section>\n\n    <!-- Questions -->\n    <section class=\"icte-ielts__panel\" id=\"q-s4\" aria-label=\"Questions 31-40\">\n      <div class=\"icte-ielts__panelHead\">\n        <h3 class=\"icte-ielts__h3\">Questions 31\u201340<\/h3>\n      <\/div>\n\n      <div class=\"icte-ielts__qArea\">\n        <div class=\"icte-q\">\n          <div class=\"icte-q__label\">The effects of environmental change on birds<\/div>\n          <div class=\"icte-note\">\n            <div><strong>Mercury (Hg)<\/strong><\/div>\n            <div>\u2022 Highly toxic<\/div>\n            <div>\u2022 Released into the atmosphere from coal<\/div>\n            <div>\u2022 In water it may be consumed by fish<\/div>\n            <div>\u2022 It has also recently been found to affect birds which feed on\n              <span class=\"blank\">31 <input type=\"text\" data-q=\"31\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>Research on effects of mercury on birds<\/strong><\/div>\n            <div>\u2022 Claire Varian-Ramos is investigating:<\/div>\n            <div>&nbsp;&nbsp;\u2013 the effects on birds\u2019\n              <span class=\"blank\">32 <input type=\"text\" data-q=\"32\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              or mental processes (e.g., memory)\n            <\/div>\n            <div>&nbsp;&nbsp;\u2013 the effects on bird song (usually learned from a bird\u2019s\n              <span class=\"blank\">33 <input type=\"text\" data-q=\"33\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>)\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>Findings<\/strong><\/div>\n            <div>\u2022 songs learned by birds exposed to mercury are less\n              <span class=\"blank\">34 <input type=\"text\" data-q=\"34\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 this may have a negative effect on birds\u2019\n              <span class=\"blank\">35 <input type=\"text\" data-q=\"35\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>Lab-based studies<\/strong><\/div>\n            <div>\u2022 allow more\n              <span class=\"blank\">36 <input type=\"text\" data-q=\"36\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              for the experimenter\n            <\/div>\n\n            <div style=\"margin-top:.55rem;\"><strong>Implications for humans<\/strong><\/div>\n            <div>\u2022 Migrating birds such as\n              <span class=\"blank\">37 <input type=\"text\" data-q=\"37\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              may be eaten by humans\n            <\/div>\n            <div>\u2022 Mercury also causes problems in learning\n              <span class=\"blank\">38 <input type=\"text\" data-q=\"38\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n            <div>\u2022 Mercury in a mother\u2019s body from\n              <span class=\"blank\">39 <input type=\"text\" data-q=\"39\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n              may affect the unborn child\n            <\/div>\n            <div>\u2022 New regulations for mercury emissions will affect everyone\u2019s energy\n              <span class=\"blank\">40 <input type=\"text\" data-q=\"40\" data-type=\"word\" placeholder=\"ONE WORD\" \/><\/span>\n            <\/div>\n          <\/div>\n\n          <div class=\"icte-q__fb\" data-fb=\"31\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"32\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"33\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"34\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"35\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"36\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"37\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"38\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"39\"><\/div>\n          <div class=\"icte-q__fb\" data-fb=\"40\"><\/div>\n        <\/div>\n      <\/div>\n    <\/section>\n  <\/section>\n\n  <!-- \u2705 STYLES (scoped) -->\n  <style>\n    \/* ===== Scoped base ===== *\/\n    #icte-listening-test3, #icte-listening-test3 *{ box-sizing:border-box; }\n    #icte-listening-test3{ width:100%; max-width:100%; margin:0; }\n\n    \/* Menu *\/\n    #icte-listening-test3 .icte-menu{\n      width:100%; max-width:100%;\n      display:flex; flex-wrap:wrap; gap:.5rem; justify-content:center; align-items:center;\n      padding:.75rem .9rem; margin:0 0 1rem 0;\n      background:#16a34a; border-radius:14px; box-shadow:0 2px 8px rgba(0,0,0,.10);\n    }\n    #icte-listening-test3 .icte-menu a{\n      display:inline-block; text-decoration:none; font-weight:900; font-size:.95rem; color:#fff;\n      padding:.55rem .85rem; border-radius:999px; border:1px solid rgba(255,255,255,.35);\n      background:rgba(255,255,255,.12);\n    }\n    #icte-listening-test3 .icte-menu a.is-current{ background:#fff; color:#16a34a; border-color:#fff; }\n    @media (max-width:600px){\n      #icte-listening-test3 .icte-menu{ justify-content:flex-start; }\n      #icte-listening-test3 .icte-menu a{ width:100%; text-align:center; }\n    }\n\n    \/* Panels \/ Intro *\/\n    #icte-listening-test3 .icte-ielts{ width:100%; margin:1rem 0; }\n    #icte-listening-test3 .icte-ielts__intro{\n      padding:.9rem 1rem; border:1px solid rgba(0,0,0,.10); border-radius:14px;\n      background:rgba(255,255,255,.7); margin-bottom:1rem;\n    }\n    #icte-listening-test3 .icte-ielts__title{ margin:0 0 .35rem; font-size:1.2rem; font-weight:900; }\n    #icte-listening-test3 .icte-ielts__sub{ margin:0; opacity:.85; }\n\n    #icte-listening-test3 .icte-ielts__panel{\n      border:1px solid rgba(0,0,0,.10); border-radius:14px; background:rgba(255,255,255,.85);\n      overflow:hidden; margin-bottom:1rem;\n    }\n    #icte-listening-test3 .icte-ielts__panelHead{\n      display:flex; align-items:center; justify-content:space-between; gap:.75rem;\n      padding:.85rem 1rem; border-bottom:1px solid rgba(0,0,0,.08); background:rgba(0,0,0,.03);\n    }\n    #icte-listening-test3 .icte-ielts__h3{ margin:0; font-size:1.03rem; font-weight:900; }\n    #icte-listening-test3 .icte-ielts__headRight{ display:flex; gap:.55rem; align-items:center; }\n\n    #icte-listening-test3 .icte-ielts__reading{\n      padding:.95rem 1rem 1.05rem; line-height:1.75; max-height:420px; overflow:auto;\n      white-space:pre-wrap;\n    }\n\n    #icte-listening-test3 .icte-ielts__row{\n      display:flex; justify-content:space-between; gap:.75rem;\n      padding:.85rem 1rem .25rem;\n    }\n    #icte-listening-test3 .icte-ielts__control label{ display:block; margin-bottom:.35rem; }\n    #icte-listening-test3 select{\n      width:100%; max-width:520px; padding:.6rem .7rem; border-radius:12px;\n      border:1px solid rgba(0,0,0,.18); background:#fff; font:inherit;\n    }\n    #icte-listening-test3 .icte-ielts__score{\n      font-weight:900; font-size:.95rem; opacity:.9; white-space:nowrap;\n      margin-top:.25rem;\n    }\n\n    #icte-listening-test3 .icte-ielts__btnRow{\n      padding:.75rem 1rem 1rem; display:flex; gap:.6rem; flex-wrap:wrap; align-items:center;\n    }\n    #icte-listening-test3 .icte-ielts__btnRow--tight{ padding-top:0; }\n    #icte-listening-test3 .icte-ielts__btnGrid{\n      padding:.75rem 1rem 1rem;\n      display:grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap:.6rem;\n    }\n\n    #icte-listening-test3 .icte-link{\n      font-weight:900; text-decoration:none; border:1px solid rgba(0,0,0,.14);\n      border-radius:12px; padding:.55rem .75rem; color:inherit; background:rgba(255,255,255,.6);\n    }\n\n    \/* Questions *\/\n    #icte-listening-test3 .icte-ielts__qArea{ padding:.9rem 1rem 1rem; }\n    #icte-listening-test3 .icte-q{\n      padding:.75rem .8rem; border:1px solid rgba(0,0,0,.10); border-radius:12px;\n      background:rgba(255,255,255,.75); margin:0 0 .75rem;\n    }\n    #icte-listening-test3 .icte-q__label{ font-weight:900; display:block; margin-bottom:.4rem; }\n    #icte-listening-test3 .icte-note{ line-height:1.7; opacity:.95; }\n\n    #icte-listening-test3 .blank{\n      display:inline-flex; align-items:center; gap:.4rem;\n      padding:.15rem .35rem; border-radius:10px; border:1px dashed rgba(0,0,0,.25);\n      background:rgba(255,255,255,.6); margin:0 .25rem;\n    }\n    #icte-listening-test3 input[type=\"text\"]{\n      width:170px; max-width:100%;\n      padding:.55rem .65rem; border-radius:12px;\n      border:1px solid rgba(0,0,0,.18); font:inherit;\n    }\n    #icte-listening-test3 .icte-q__fb{ margin-top:.35rem; font-size:.95rem; font-weight:800; }\n\n    \/* Buttons *\/\n    #icte-listening-test3 .icte-btn{\n      appearance:none; border:1px solid transparent; border-radius:12px;\n      padding:.65rem .85rem; font-weight:900; cursor:pointer; font:inherit;\n    }\n    #icte-listening-test3 .icte-btn--primary{ background:#16a34a; color:#fff; }\n    #icte-listening-test3 .icte-btn--info{ background:#0ea5e9; color:#fff; }\n    #icte-listening-test3 .icte-btn--danger{ background:#dc2626; color:#fff; }\n    #icte-listening-test3 .icte-btn--dark{ background:#334155; color:#fff; }\n    #icte-listening-test3 .icte-btn--ghost{ background:transparent; border-color:rgba(0,0,0,.20); color:inherit; }\n\n    \/* Loader *\/\n    #icte-listening-test3 .icte-loader{\n      width:18px; height:18px; border-radius:999px;\n      border:3px solid rgba(0,0,0,.15); border-top-color:#0ea5e9;\n      display:none; animation: icteSpin 1s linear infinite;\n    }\n    @keyframes icteSpin{ to{ transform: rotate(360deg); } }\n\n    \/* Support *\/\n    #icte-listening-test3 .icte-ielts__helper{\n      padding:.95rem 1rem 1.05rem; line-height:1.7; overflow-wrap:anywhere; word-break:break-word;\n    }\n    #icte-listening-test3 .icte-ielts__helper ul{ margin:.4rem 0 0 1.1rem; }\n    #icte-listening-test3 .icte-ielts__helper li{ margin:.35rem 0; }\n    #icte-listening-test3 .icte-ielts__helper .tag{\n      display:inline-block; padding:.15rem .5rem; border-radius:999px;\n      border:1px solid rgba(0,0,0,.12); background:rgba(255,255,255,.7);\n      font-weight:900; font-size:.85rem; margin-right:.4rem;\n    }\n\n    \/* MCQ *\/\n    #icte-listening-test3 .icte-mcq{ margin:.75rem 0 1rem; padding:.7rem .75rem; border:1px solid rgba(0,0,0,.10); border-radius:12px; background:rgba(255,255,255,.65); }\n    #icte-listening-test3 .icte-mcq__q{ font-weight:900; margin-bottom:.45rem; }\n    #icte-listening-test3 .icte-opt{ display:block; margin:.35rem 0; font-weight:700; }\n    #icte-listening-test3 .icte-opt input{ margin-right:.5rem; }\n\n    \/* Boxes *\/\n    #icte-listening-test3 .icte-box{ border:1px solid rgba(0,0,0,.10); border-radius:12px; background:rgba(255,255,255,.75); padding:.75rem; margin:.65rem 0 1rem; }\n    #icte-listening-test3 .icte-box__title{ font-weight:900; margin-bottom:.5rem; }\n    #icte-listening-test3 .icte-box__grid{ display:grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap:.45rem .9rem; }\n    @media (max-width: 700px){\n      #icte-listening-test3 .icte-box__grid{ grid-template-columns:1fr; }\n    }\n\n    \/* Days grid *\/\n    #icte-listening-test3 .icte-grid2{ display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:.75rem; }\n    #icte-listening-test3 .icte-day{ border:1px solid rgba(0,0,0,.10); border-radius:12px; background:rgba(255,255,255,.65); padding:.7rem; }\n    #icte-listening-test3 .icte-day select{ max-width:100%; }\n\n    \/* Flow *\/\n    #icte-listening-test3 .icte-flow{ border:1px solid rgba(0,0,0,.10); border-radius:12px; background:rgba(255,255,255,.65); padding:.75rem; }\n    #icte-listening-test3 .icte-flow__title{ font-weight:900; margin-bottom:.6rem; }\n    #icte-listening-test3 .icte-flow__step{ padding:.6rem .6rem; border:1px dashed rgba(0,0,0,.20); border-radius:12px; background:rgba(255,255,255,.6); margin:.55rem 0; }\n    #icte-listening-test3 .icte-flow__step select{ display:inline-block; width:auto; min-width:140px; margin:0 .35rem; }\n\n    @media (max-width: 900px){\n      #icte-listening-test3 .icte-ielts__btnGrid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }\n      #icte-listening-test3 .icte-grid2{ grid-template-columns: 1fr; }\n    }\n    @media (max-width: 600px){\n      #icte-listening-test3 .icte-ielts__row{ flex-direction:column; align-items:stretch; }\n      #icte-listening-test3 .icte-ielts__btnGrid{ grid-template-columns: 1fr; }\n      #icte-listening-test3 input[type=\"text\"]{ width:100%; }\n      #icte-listening-test3 .icte-flow__step select{ width:100%; margin:.35rem 0; }\n    }\n  <\/style>\n\n  <!-- \u2705 SCRIPT -->\n  <script>\n    (function(){\n      const root = document.getElementById(\"icte-listening-test3\");\n      if (!root) return;\n\n      const $ = (sel, base=root) => base.querySelector(sel);\n      const $$ = (sel, base=root) => Array.from(base.querySelectorAll(sel));\n\n      \/* ===== Loader ===== *\/\n      function showLoader(show){\n        const el = $('[data-el=\"synthesis-loader\"]');\n        if (el) el.style.display = show ? \"inline-block\" : \"none\";\n      }\n\n      \/* ===== Speech synthesis (robust stop) ===== *\/\n      const speechOk = (\"speechSynthesis\" in window);\n      let voicesAll = [];\n      let voiceA = null;\n      let voiceB = null;\n      let playRunId = 0;\n\n      function stopSpeaking(){\n        if (!speechOk) return;\n        playRunId++;\n        window.speechSynthesis.cancel();\n        showLoader(false);\n      }\n\n      function sayWithVoice(text, voice, opts){\n        const myRun = playRunId;\n        const options = opts || {};\n        return new Promise((resolve) => {\n          if (!speechOk) return resolve();\n\n          const u = new SpeechSynthesisUtterance(String(text || \"\"));\n          u.lang  = options.lang  || (voice && voice.lang) || \"en-US\";\n          u.rate  = (typeof options.rate === \"number\") ? options.rate : 1.0;\n          u.pitch = (typeof options.pitch === \"number\") ? options.pitch : 1.0;\n          if (voice) u.voice = voice;\n\n          let done = false;\n          const finish = () => {\n            if (done) return;\n            done = true;\n            clearInterval(timer);\n            u.onend = null;\n            u.onerror = null;\n            resolve();\n          };\n\n          u.onend = finish;\n          u.onerror = finish;\n\n          const timer = setInterval(() => {\n            if (done) return;\n            if (playRunId !== myRun) return finish();\n            const speaking = window.speechSynthesis.speaking;\n            const pending  = window.speechSynthesis.pending;\n            if (!speaking && !pending) finish();\n          }, 120);\n\n          window.speechSynthesis.speak(u);\n        });\n      }\n\n      function populateVoices(){\n        if (!speechOk) return;\n\n        voicesAll = window.speechSynthesis.getVoices() || [];\n        const en = voicesAll.filter(v => (v.lang || \"\").toLowerCase().startsWith(\"en\"));\n        const usable = en.length ? en : voicesAll;\n\n        const selA = $('[data-el=\"voice-a\"]');\n        const selB = $('[data-el=\"voice-b\"]');\n        if (!selA || !selB) return;\n\n        selA.innerHTML = \"\";\n        selB.innerHTML = \"\";\n\n        usable.forEach((v, idx) => {\n          const o1 = document.createElement(\"option\");\n          o1.value = String(idx);\n          o1.textContent = `${v.name} (${v.lang})`;\n          selA.appendChild(o1);\n\n          const o2 = document.createElement(\"option\");\n          o2.value = String(idx);\n          o2.textContent = `${v.name} (${v.lang})`;\n          selB.appendChild(o2);\n        });\n\n        voiceA = usable[0] || null;\n        voiceB = usable.find(v => v.name !== (voiceA && voiceA.name)) || usable[0] || null;\n\n        if (voiceA){\n          const idx = usable.findIndex(v => v.name === voiceA.name && v.lang === voiceA.lang);\n          if (idx >= 0) selA.value = String(idx);\n        }\n        if (voiceB){\n          const idx = usable.findIndex(v => v.name === voiceB.name && v.lang === voiceB.lang);\n          if (idx >= 0) selB.value = String(idx);\n        }\n\n        selA.onchange = () => { voiceA = usable[Number(selA.value)] || usable[0] || null; };\n        selB.onchange = () => { voiceB = usable[Number(selB.value)] || usable[0] || null; };\n      }\n\n      function loadVoices(){\n        if (!speechOk) return;\n        const got = window.speechSynthesis.getVoices();\n        if (got && got.length) populateVoices();\n        else window.speechSynthesis.onvoiceschanged = populateVoices;\n      }\n\n      \/* ===== Validation ===== *\/\n      function norm(x){\n        return String(x || \"\")\n          .trim()\n          .toLowerCase()\n          .replace(\/[.,!?;:()\"']\/g, \"\")\n          .replace(\/\\s+\/g, \" \");\n      }\n      function tokenCount(x){\n        const t = String(x || \"\").trim();\n        if (!t) return 0;\n        return t.split(\/\\s+\/).length;\n      }\n\n      function setFB(sectionEl, q, msg, color){\n        const fb = sectionEl.querySelector(`[data-fb=\"${q}\"]`);\n        if (!fb) return;\n        fb.textContent = msg || \"\";\n        fb.style.color = color || \"#0f172a\";\n      }\n      function setSectionScore(sectionEl, msg){\n        const box = $('[data-el=\"scoreBox\"]', sectionEl);\n        if (box) box.textContent = msg || \"\";\n        updateOverallScore();\n      }\n\n      function setHelper(sectionEl, builder){\n        const area = $('[data-el=\"helper-area\"]', sectionEl);\n        if (!area) return;\n        area.innerHTML = \"\";\n        builder(area);\n        area.scrollIntoView({ behavior:\"smooth\", block:\"start\" });\n      }\n      function clearSupport(sectionEl){\n        const area = $('[data-el=\"helper-area\"]', sectionEl);\n        if (area) area.innerHTML = 'Click <strong>Summary<\/strong>, <strong>Main ideas<\/strong>, or <strong>Keywords<\/strong>.';\n      }\n\n      function getUserAnswer(sectionEl, q){\n        \/\/ text input\n        const txt = sectionEl.querySelector(`input[data-q=\"${q}\"][data-type=\"text\"], input[data-q=\"${q}\"][data-type=\"word\"]`);\n        if (txt) return { value: String(txt.value || \"\"), kind: txt.getAttribute(\"data-type\") };\n\n        \/\/ select\n        const sel = sectionEl.querySelector(`select[data-q=\"${q}\"]`);\n        if (sel) return { value: String(sel.value || \"\"), kind: \"select\" };\n\n        \/\/ radio\n        const checked = sectionEl.querySelector(`input[type=\"radio\"][data-q=\"${q}\"]:checked`);\n        if (checked) return { value: String(checked.value || \"\"), kind: \"radio\" };\n        const anyRadio = sectionEl.querySelector(`input[type=\"radio\"][data-q=\"${q}\"]`);\n        if (anyRadio) return { value: \"\", kind: \"radio\" };\n\n        return { value: \"\", kind: \"unknown\" };\n      }\n\n      function clearInputs(sectionEl){\n        $$('input[type=\"text\"][data-q]', sectionEl).forEach(i => i.value = \"\");\n        $$('input[type=\"radio\"][data-q]', sectionEl).forEach(r => r.checked = false);\n        $$('select[data-q]', sectionEl).forEach(s => s.value = \"\");\n      }\n\n      function toggleTranscript(sectionEl){\n        const area = $('[data-el=\"transcript-area\"]', sectionEl);\n        const btn = sectionEl.querySelector('button[data-action=\"toggle-transcript\"]');\n        if (!area || !btn) return;\n\n        const hidden = area.style.display === \"none\";\n        area.style.display = hidden ? \"block\" : \"none\";\n        btn.textContent = hidden ? \"Hide Transcript\" : \"Show Transcript\";\n        if (hidden) area.scrollIntoView({ behavior:\"smooth\", block:\"start\" });\n      }\n\n      \/* ===== Data (Test 3) ===== *\/\n      const sections = {\n        s1: {\n          title: \"Section 1\",\n          rule: \"oneWordOnly\",\n          instructionSpeak: \"Section one. Questions one to ten. Complete the notes. Write one word only for each answer.\",\n          questionsSpeak:\n            \"Public Library. Questions one to ten. \" +\n            \"One: expanded section for books on blank. \" +\n            \"Two: new section on local blank. \" +\n            \"Three: community room for meetings, also possible to blank there. \" +\n            \"Four: new section of books for blank. \" +\n            \"Five: experiments using things from your blank. \" +\n            \"Six: a novel based on a real blank. \" +\n            \"Seven: no blank is necessary. \" +\n            \"Eight: free check of blood blank and cholesterol. \" +\n            \"Nine: shop sells wall-charts, cards and blank. \" +\n            \"Ten: evenings and weekends, free blank is available.\",\n          summary:\n            \"Two friends talk about the newly re-opened public library. They describe new sections (travel and local history), a community room for meetings and study, a teen fiction section, children\u2019s activities like Science Club and a Reading Challenge, plus adult services such as IT support, health checks, a small shop, and free evening\/weekend parking.\",\n          mainIdeas: [\n            { tag:\"ONE WORD\", text:\"Write exactly ONE word (no extra articles like 'a' or 'the').\" },\n            { tag:\"Predict\", text:\"Use the note headings to predict the type of word (topic, activity, service).\" },\n            { tag:\"Paraphrase\", text:\"Listen for synonyms (e.g., 'make an appointment' = 'booking').\" },\n            { tag:\"Spelling\", text:\"Check spelling carefully (e.g., travelling\/traveling).\" },\n            { tag:\"Stay calm\", text:\"If you miss one, move on\u2014answers usually follow the notes in order.\" }\n          ],\n          keywords: [\n            { term:\"community room\", def:\"A shared room people can use for meetings or quiet activities.\" },\n            { term:\"travel books\", def:\"Books about places, journeys, and tourism.\" },\n            { term:\"local history\", def:\"Information about the history of a town\/area.\" },\n            { term:\"Science Club\", def:\"A children\u2019s club that does science activities and experiments.\" },\n            { term:\"appointment \/ booking\", def:\"A arranged time to meet or receive a service.\" },\n            { term:\"blood sugar\", def:\"The amount of sugar in the blood; checked in health tests.\" },\n            { term:\"stamps\", def:\"Small sticky labels used for posting letters\/cards.\" },\n            { term:\"parking\", def:\"A place\/service for leaving a car.\" }\n          ],\n          transcript: [\n            { speaker:\"A\", name:\"SUSIE\", text:\"Hello?\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Hi, Susie, it\u2019s Paul here. How are you? Enjoying your new job? You\u2019re working at the library, aren\u2019t you?\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes. I started when the library re-opened a month ago. It\u2019s great.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Actually Carol and I have been meaning to join for a while.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Oh, you should. It doesn\u2019t cost anything, and the new library has all sorts of facilities. It\u2019s not just a place where you borrow books. For instance, there\u2019s an area with comfortable seats where you can sit and read the magazines they have there. Some people spend the whole morning there.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Mmm. Wish I had that amount of time to spend!\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes, you must be pretty busy at present, with the children and everything?\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"We are, yes. But we\u2019re hoping to get away this summer. We\u2019re thinking of going to Greece.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Well, we\u2019ve got a much larger section of the library devoted to travel books now, so you should come and have a look. I can\u2019t remember if there\u2019s anything specifically on Greece, but I should think so.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"OK. Now Carol\u2019s organising a project for the history class she teaches at school - it\u2019s about life in the town a hundred years ago. Do you have anything that might be useful?\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes, actually we\u2019ve now got a new section with materials on the history of the town and surrounding region.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Right. I\u2019ll tell her. You can\u2019t always find that sort of thing on the internet. Now in the old library there used to be a separate room with reference books. It was a really nice quiet room.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes. We\u2019ve put those books in the main part of the library now, but we do have a room called the community room. It can be hired out for meetings, but at other times people can use it to study.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"I might use that. It\u2019s hard to find anywhere quiet at home sometimes.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"I can\u2019t remember how old your son and daughter are ... we\u2019ve introduced a special section of fiction written specially for teenagers, but they might be a bit young for that?\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Yes, they would be.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Well, we do have lots of activities for younger children.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Yes?\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"For example we have a Science Club. At the next meeting, they\u2019re going to be doing experiments with stuff that everyone has in the kitchen - sugar and flour and so on.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"They might be interested, yes.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"And we have a competition for children called Reading Challenge. That doesn\u2019t begin until after the end of term. They have to read six books, and they get a certificate if they make it.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"So that gives them something to do while they\u2019re on holiday, instead of getting bored.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"That\u2019s the idea. And there\u2019s special activities for adults too. On Friday we have a local author called Tania Streep who\u2019s going to be talking about her new novel. It\u2019s called \u2018Catch the Mouse\u2019 and she based the story on a crime that actually took place here years ago.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Right. We\u2019re not free on Friday, but I\u2019ll look out for the book.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Now this probably isn\u2019t for you, but we do have IT support available for members. We get quite a few older people coming along who are wanting to get up to speed with computer technology. It\u2019s on Tuesday mornings - they don\u2019t need to make an appointment or anything, they just turn up.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Well, my mother might be interested, I\u2019ll let her know.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"OK. And there\u2019s another service which you wouldn\u2019t expect from a library, which is a free medical check-up. The hospital arranges for someone to come along and measure the level of sugar in your blood, and they check cholesterol levels at the same time.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Really?\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes, but that\u2019s only for the over-60s, so you wouldn\u2019t qualify.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"OK. Well, I\u2019ll tell my mother, she might be interested.\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"What other information ... well, we do have a little shop with things like wallcharts and greetings cards, and also stamps so you can post the cards straightaway, which is really useful.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Yeah. Well, I\u2019ll bring the children round at the weekend and we\u2019ll join. Oh, one more thing - I\u2019ll be bringing the car, is there parking available?\" },\n            { speaker:\"A\", name:\"SUSIE\", text:\"Yes, and it\u2019s free in the evening and at weekends.\" },\n            { speaker:\"B\", name:\"PAUL\", text:\"Perfect. Well, thanks, Susie, see you ...\" }\n          ],\n          answers: {\n            1: [\"travel\", \"travelling\", \"traveling\"],\n            2: [\"history\"],\n            3: [\"study\"],\n            4: [\"teenagers\"],\n            5: [\"kitchen\"],\n            6: [\"crime\"],\n            7: [\"appointment\", \"booking\"],\n            8: [\"sugar\"],\n            9: [\"stamps\"],\n            10:[\"parking\"]\n          },\n          qList: Array.from({length:10}, (_,i)=>i+1)\n        },\n\n        s2: {\n          title: \"Section 2\",\n          rule: \"mixed\",\n          instructionSpeak: \"Section two. Questions eleven to twenty. Questions eleven to fourteen: choose two letters A to E. Questions fifteen to seventeen: choose A, B or C. Questions eighteen to twenty: write one word only.\",\n          questionsSpeak:\n            \"Questions eleven and twelve: choose two age groups A to E. \" +\n            \"Questions thirteen and fourteen: choose two reasons A to E. \" +\n            \"Questions fifteen to seventeen: choose A, B or C. \" +\n            \"Questions eighteen to twenty: complete the table with one word only.\",\n          summary:\n            \"A staff trainer explains BC Travel\u2019s specialised holidays. Older age groups are growing, and activity holidays are popular because clients meet like-minded people and learn about local culture. The company expands painting classes by employing more teachers. Cooking holidays are international, and photography holidays include one-to-one tuition. Fitness holidays reduce stress, focus on weight control in Greece, and include a family-focused mountain biking option in Morocco.\",\n          mainIdeas: [\n            { tag:\"TWO letters\", text:\"For 11\u201314, pick TWO different letters. Write only the letter.\" },\n            { tag:\"Listen for trends\", text:\"Words like 'increasing', 'growth', 'steady', 'biggest drop' signal the answers.\" },\n            { tag:\"Paraphrase\", text:\"\u2018Create lasting relationships\u2019 = \u2018make new friends\u2019.\" },\n            { tag:\"MCQ\", text:\"For 15\u201317, listen for contrasts (not X\u2026 but Y\u2026).\" },\n            { tag:\"Table\", text:\"For 18\u201320, follow the table order (Ireland\/Italy \u2192 Greece \u2192 Morocco).\" }\n          ],\n          keywords: [\n            { term:\"age group\", def:\"A range of ages (e.g., 55\u201364) considered as one category.\" },\n            { term:\"activity holiday\", def:\"A holiday focused on doing a special activity (art, cooking, photography).\" },\n            { term:\"like-minded\", def:\"People who have similar interests and attitudes.\" },\n            { term:\"one-to-one tuition\", def:\"Personal instruction for one learner.\" },\n            { term:\"personalised programme\", def:\"A plan designed specifically for one person.\" },\n            { term:\"weight control\", def:\"Managing body weight through diet\/exercise.\" },\n            { term:\"mountain biking\", def:\"Cycling on off-road mountain routes.\" },\n            { term:\"stress\", def:\"Mental pressure or worry; can be reduced by exercise and \u043e\u0442\u0434\u044b\u0445.\" }\n          ],\n          transcript: [\n            { speaker:\"A\", text:\"In this session in your training day we\u2019re going to look at some of the more specialised holidays we offer at BC Travel.\" },\n            { speaker:\"A\", text:\"Now, the travel business is very competitive and it\u2019s important to be aware of how the market\u2019s changing and developing.\" },\n            { speaker:\"A\", text:\"In terms of age groups, the over-65s are an important market, and one that\u2019s increasing steadily year on year.\" },\n            { speaker:\"A\", text:\"The fewest holidays are taken by the 31 to 42-year-olds, and that figure shows no sign of rising.\" },\n            { speaker:\"A\", text:\"The biggest market at present is still the youngest group, the 16 to 30s, but this group\u2019s also seen the biggest drop over the last few years, whereas there\u2019s a noticeable growth in the number of holidays taken by the 55 to 64-year-olds.\" },\n            { speaker:\"A\", text:\"As far as the 43 to 54-year-olds are concerned, bookings there are steady, but I have to say we haven\u2019t seen the increase we expected.\" },\n            { speaker:\"A\", text:\"One trend we\u2019re noticing with nearly all age groups is the growing popularity of holidays in which clients do some kind of specialised activity.\" },\n            { speaker:\"A\", text:\"Activity holidays usually involve rather less high-risk sports, or things like art and music.\" },\n            { speaker:\"A\", text:\"But they do often take place outside the main tourist centres, which gives an opportunity for clients to find out more about the local people and customs, and many say this is one of the most positive features of these holidays.\" },\n            { speaker:\"A\", text:\"Of course, they offer the chance to develop a new skill or talent, but clients often say that more than this, it\u2019s the chance to create lasting relationships with other like-minded people that\u2019s the main draw.\" },\n            { speaker:\"A\", text:\"Our painting holidays take place in four different centres in France and Italy, and we\u2019ve got an excellent team of artists to lead the classes. Five additional ones will be joining us this year so that we can offer a greater number of classes in each centre.\" },\n            { speaker:\"A\", text:\"As far as cooking holidays are concerned, we focus on dishes from a great many different ones.\" },\n            { speaker:\"A\", text:\"Our photography holidays take place in a wide range of countries... Groups are small, and clients can have one-to-one tuition during the holiday.\" },\n            { speaker:\"A\", text:\"Finally, let me tell you about our fitness holidays. In Ireland and Italy we run one-week general fitness classes... clients end up losing much of the stress they\u2019ve built up in their daily lives.\" },\n            { speaker:\"A\", text:\"In Greece, we have a two-week holiday for clients who want to do something about their weight... exercise classes are all held on the beach.\" },\n            { speaker:\"A\", text:\"Finally, we offer several holidays in Morocco... and we offer one which is tailored to the needs of families.\" }\n          ],\n          answers: {\n            11: [\"d\"],\n            12: [\"e\"],\n            13: [\"a\"],\n            14: [\"c\"],\n            15: [\"c\"],\n            16: [\"b\"],\n            17: [\"a\"],\n            18: [\"stress\"],\n            19: [\"weight\"],\n            20: [\"families\"]\n          },\n          qList: Array.from({length:10}, (_,i)=>i+11)\n        },\n\n        s3: {\n          title: \"Section 3\",\n          rule: \"mixed\",\n          instructionSpeak: \"Section three. Questions twenty one to thirty. Questions twenty one to twenty six: choose from A to H. Questions twenty seven to thirty: choose A, B or C.\",\n          questionsSpeak:\n            \"Questions twenty one to twenty six: choose letters A to H for the flow chart. \" +\n            \"Questions twenty seven to thirty: choose A, B or C for the Horton Castle discussion.\",\n          summary:\n            \"Two students plan a tourism case study. They discuss research and recording sources, selecting interviewees such as employees and officials, considering anonymity, and analysing information to identify patterns. They then discuss Horton Castle: poor publicity, planning restrictions for a visitor centre, lack of working-age residents, and protecting the site by keeping visitors to marked paths.\",\n          mainIdeas: [\n            { tag:\"Flow chart\", text:\"For 21\u201326, follow the stages in order: research \u2192 interviews \u2192 analysis \u2192 writing.\" },\n            { tag:\"Listen for signals\", text:\"Phrases like 'did you remember to\u2026' and 'we have to\u2026' point to blanks.\" },\n            { tag:\"Anonymity\", text:\"\u2018Anonymous\u2019 links to using or not using interviewees\u2019 names.\" },\n            { tag:\"MCQ\", text:\"For 27\u201330, listen for agreement words: 'Right', 'Exactly', 'I agree'.\" },\n            { tag:\"Distractors\", text:\"You may hear extra ideas, but only one option matches each question.\" }\n          ],\n          keywords: [\n            { term:\"case study\", def:\"A detailed study of one place\/situation to understand issues and make recommendations.\" },\n            { term:\"sources\", def:\"Where information comes from (articles, reports, websites).\" },\n            { term:\"interviewees\", def:\"People who are interviewed.\" },\n            { term:\"officials\", def:\"People with authority in an organisation\/government.\" },\n            { term:\"anonym(ous)\", def:\"Not named\/identified publicly.\" },\n            { term:\"patterns\", def:\"Trends or repeated features you can observe in data.\" },\n            { term:\"planning restrictions\", def:\"Rules\/permissions needed before building or changing a site.\" },\n            { term:\"marked paths\", def:\"Specified routes visitors should follow.\" }\n          ],\n          transcript: [\n            { speaker:\"A\", name:\"NATALIE\", text:\"Dave, I\u2019m worried about our case study. I\u2019ve done a bit of reading, but I\u2019m not sure what\u2019s involved in actually writing a case study - I missed the lecture where Dr Baker talked us through it.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"OK, well it\u2019s quite straightforward. We\u2019ve got our focus - that\u2019s tourism at the Horton Castle site. And you said you\u2019d done some reading about it.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"Yes, I found some articles and made notes of the main points.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Did you remember to keep a record of where you got the information from?\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"Sure. I know what a pain it is when you forget that.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"OK, so we can compare what we\u2019ve read. Then we have to decide on a particular problem or need at our site. And then think about who we\u2019re going to interview to get more information.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"OK. So who\u2019d that be? The people who work there? And presumably some of the tourists too?\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Yes, both those groups. So we\u2019ll need to go to the site to do that, I suppose. But we might also do some of our interviewing away from the site - we could even contact some people here in the city, like administrators involved in overseeing tourism.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"OK. So we\u2019ll need to think about our interview questions and fix times and places for the meetings. It\u2019s all going to take a lot of time.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Mmm. And if we can, we should ask our interviewees if they can bring along some numerical data that we can add to support our findings.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"And photographs?\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"I think we have plenty of those already. But Dr Baker also said we have to establish with our interviewees whether we can identify them in our case study, or whether they want to be anonymous.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"Oh, I wouldn\u2019t have thought of that.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Yes, put it all together and choose what\u2019s relevant to the problem we\u2019re focusing on, and analyse that carefully to find out if we can identify any trends or regularities there.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Then the case study itself is most quite standard: we begin by presenting the problem, and giving some background, then go through the main sections, but the thing that surprised me is that in a normal report we\u2019d end with some suggestions to deal with the problem or need we identified, but in a case study we end up with a question or a series of questions to our readers, and they decide what ought to be done.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"Oh, I hadn\u2019t realised that.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"So basically, the problem we\u2019re addressing in our case study of the Horton Castle site is why so few tourists are visiting it.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"I think there\u2019s plenty of fascinating stuff there for a really good day out, but you\u2019d never realise it from the castle website - maybe that\u2019s part of the problem.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"Yes, it\u2019s really dry and boring.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"I read somewhere a suggestion that what the castle needs is a visitor centre.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"But as it\u2019s on a historical site it\u2019d need to get special planning permission. That might be hard.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"Right.\" },\n            { speaker:\"B\", name:\"DAVE\", text:\"But it could be a good thing for the town of Horton. At present it\u2019s a bit of a ghost town. Once they\u2019ve left school and got any skills or qualifications, the young people all get out as fast as they can to get jobs in the city, and the only people left are children and those who\u2019ve retired.\" },\n            { speaker:\"A\", name:\"NATALIE\", text:\"At present the tourists can just wander round wherever they want, but if numbers increase, there might have to be some restrictions, like sticking to marked ways.\" }\n          ],\n          answers: {\n            21:[\"c\"],\n            22:[\"e\"],\n            23:[\"h\"],\n            24:[\"b\"],\n            25:[\"a\"],\n            26:[\"f\"],\n            27:[\"a\"],\n            28:[\"c\"],\n            29:[\"b\"],\n            30:[\"b\"]\n          },\n          qList: Array.from({length:10}, (_,i)=>i+21)\n        },\n\n        s4: {\n          title: \"Section 4\",\n          rule: \"oneWordOnly\",\n          instructionSpeak: \"Section four. Questions thirty one to forty. Complete the notes. Write one word only for each answer.\",\n          questionsSpeak:\n            \"Questions thirty one to forty. Complete the notes about mercury and birds. Write one word only for each answer.\",\n          summary:\n            \"A lecturer explains how mercury pollution affects birds and humans. Mercury enters ecosystems and can impact birds that eat insects. Research looks at birds\u2019 behaviour and song learning from the father. Birds exposed to mercury produce less complex songs, reducing reproduction success. Lab studies allow greater control. Migratory birds like ducks can pass mercury through the food chain, and mercury exposure may harm language development and unborn children. New regulations will increase energy costs.\",\n          mainIdeas: [\n            { tag:\"ONE WORD\", text:\"Do not write two words (e.g., write 'costs', not 'energy costs').\" },\n            { tag:\"Word form\", text:\"Check if the blank needs a noun (control) or adjective (complex).\" },\n            { tag:\"Spelling\", text:\"If you hear two acceptable words (complex\/complicated), either can be correct.\" },\n            { tag:\"Examples\", text:\"When the speaker gives an example (e.g., ducks), that often answers a blank.\" },\n            { tag:\"Cause \u2192 effect\", text:\"Follow the logic: mercury source \u2192 birds \u2192 research \u2192 humans \u2192 regulations.\" }\n          ],\n          keywords: [\n            { term:\"mercury (Hg)\", def:\"A toxic chemical element released into the environment by human activity.\" },\n            { term:\"contaminated\", def:\"Polluted; containing harmful substances.\" },\n            { term:\"behaviour\/behavior\", def:\"How an animal acts; includes mental processes like memory.\" },\n            { term:\"complex\", def:\"Having many parts; not simple (opposite: simple).\" },\n            { term:\"reproduction\", def:\"The process of producing young.\" },\n            { term:\"control\", def:\"The ability to keep variables stable in an experiment.\" },\n            { term:\"migratory\", def:\"Moving from one region to another seasonally.\" },\n            { term:\"regulations\", def:\"Official rules or laws.\" }\n          ],\n          transcript: [\n            { speaker:\"A\", text:\"OK, so we\u2019ve been looking at how man-made changes in our environment can affect wildlife. Now I\u2019ll discuss a particular example. Let\u2019s take a look at mercury.\" },\n            { speaker:\"A\", text:\"Mercury\u2019s one of the 120 or so elements that make up all matter, and it has the symbol Hg. It\u2019s a shiny, silvery substance.\" },\n            { speaker:\"A\", text:\"But it\u2019s not used much for domestic purposes now because it\u2019s highly toxic.\" },\n            { speaker:\"A\", text:\"The problem is that the amount of mercury in the environment\u2019s increasing.\" },\n            { speaker:\"A\", text:\"The main reason for this is the power plants used to produce electricity. The main source of energy that most of them use is still coal, and when it\u2019s burnt it releases mercury into the atmosphere.\" },\n            { speaker:\"A\", text:\"Some of this gets deposited into lakes and rivers, and if it\u2019s ingested by a fish it\u2019s not excreted, it stays in the fish\u2019s body and it enters the food chain.\" },\n            { speaker:\"A\", text:\"Those that eat insects can also be affected.\" },\n            { speaker:\"A\", text:\"Claire Varian-Ramos is investigating the effects on birds\u2019 behaviour, or mental processes, and the effects on bird song, usually learned from a bird\u2019s father.\" },\n            { speaker:\"A\", text:\"Songs learned by birds exposed to mercury are less complex, and this may have a negative effect on birds\u2019 reproduction.\" },\n            { speaker:\"A\", text:\"Lab-based studies allow more control for the experimenter.\" },\n            { speaker:\"A\", text:\"Because many birds are migratory, they may be transporting mercury far from contaminated sites. For example, it\u2019s been found that ducks can be eaten by humans after feeding at a contaminated site.\" },\n            { speaker:\"A\", text:\"Mercury causes developmental delays in the acquisition of language.\" },\n            { speaker:\"A\", text:\"An unborn child can be affected if the food eaten by its mother contains high levels of mercury.\" },\n            { speaker:\"A\", text:\"New regulations for mercury emissions will need billions of dollars to implement, and increase costs for everyone.\" }\n          ],\n          answers: {\n            31:[\"insects\"],\n            32:[\"behaviour\",\"behavior\"],\n            33:[\"father\"],\n            34:[\"complex\",\"complicated\"],\n            35:[\"reproduction\",\"breeding\"],\n            36:[\"control\"],\n            37:[\"duck\",\"ducks\"],\n            38:[\"language\"],\n            39:[\"food\"],\n            40:[\"cost\",\"costs\",\"price\",\"prices\",\"bill\",\"bills\"]\n          },\n          qList: Array.from({length:10}, (_,i)=>i+31)\n        }\n      };\n\n      function buildTranscriptText(sec){\n        return (sec.transcript || [])\n          .map(l => {\n            const label = l.name ? (String(l.name).toUpperCase() + \": \") : \"\";\n            return label + l.text;\n          })\n          .join(\"\\n\");\n      }\n\n      function renderTranscripts(){\n        Object.keys(sections).forEach(key => {\n          const secEl = root.querySelector(`[data-section=\"${key}\"]`);\n          if (!secEl) return;\n          const area = $('[data-el=\"transcript-area\"]', secEl);\n          if (area) area.textContent = buildTranscriptText(sections[key]);\n        });\n      }\n\n      \/* ===== Per-section actions ===== *\/\n      async function playAudio(sectionKey){\n        if (!speechOk) return;\n        stopSpeaking();\n        const myRun = playRunId;\n        showLoader(true);\n\n        const sec = sections[sectionKey];\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        if (!sec || !secEl) { showLoader(false); return; }\n\n        \/\/ \u2705 NOTE: We do NOT read speaker names. Only the lines are spoken naturally.\n        await sayWithVoice(\"Now listen.\", voiceA || null, { lang:\"en-US\" });\n        if (playRunId !== myRun) { showLoader(false); return; }\n\n        for (const l of (sec.transcript || [])){\n          if (playRunId !== myRun) { showLoader(false); return; }\n          const v = (l.speaker === \"B\") ? (voiceB || null) : (voiceA || null);\n          const opts = (l.speaker === \"B\")\n            ? { lang:\"en-US\", rate:1.02, pitch:1.05 }\n            : { lang:\"en-US\", rate:1.00, pitch:1.00 };\n          await sayWithVoice(l.text, v, opts);\n        }\n\n        showLoader(false);\n      }\n\n      async function playInstructions(sectionKey){\n        if (!speechOk) return;\n        stopSpeaking();\n        showLoader(true);\n        const sec = sections[sectionKey];\n        await sayWithVoice(sec.instructionSpeak, voiceA || null, { lang:\"en-US\" });\n        showLoader(false);\n      }\n\n      async function readQuestions(sectionKey){\n        if (!speechOk) return;\n        stopSpeaking();\n        showLoader(true);\n        const sec = sections[sectionKey];\n        await sayWithVoice(sec.questionsSpeak, voiceA || null, { lang:\"en-US\" });\n        showLoader(false);\n      }\n\n      async function showSummary(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        setHelper(secEl, (area) => {\n          const p = document.createElement(\"p\");\n          const tag = document.createElement(\"span\");\n          tag.className = \"tag\";\n          tag.textContent = \"Summary\";\n          p.appendChild(tag);\n          p.append(\" \" + sec.summary);\n          area.appendChild(p);\n        });\n\n        if (speechOk){\n          stopSpeaking();\n          showLoader(true);\n          await sayWithVoice(\"Summary. \" + sec.summary, voiceA || null, { lang:\"en-US\" });\n          showLoader(false);\n        }\n      }\n\n      async function showMainIdeas(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        setHelper(secEl, (area) => {\n          const p = document.createElement(\"p\");\n          const tag = document.createElement(\"span\");\n          tag.className = \"tag\";\n          tag.textContent = \"Main ideas\";\n          p.appendChild(tag);\n          p.append(\" Tips:\");\n          area.appendChild(p);\n\n          const ul = document.createElement(\"ul\");\n          (sec.mainIdeas || []).forEach(i => {\n            const li = document.createElement(\"li\");\n            const t = document.createElement(\"span\");\n            t.className = \"tag\";\n            t.textContent = i.tag;\n            li.appendChild(t);\n            li.append(i.text);\n            ul.appendChild(li);\n          });\n          area.appendChild(ul);\n        });\n\n        if (speechOk){\n          stopSpeaking();\n          showLoader(true);\n          const speakText = \"Main ideas. \" + (sec.mainIdeas || []).map(i => `${i.tag}. ${i.text}`).join(\" \");\n          await sayWithVoice(speakText, voiceA || null, { lang:\"en-US\" });\n          showLoader(false);\n        }\n      }\n\n      async function showKeywords(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        const items = Array.isArray(sec.keywords) ? sec.keywords : [];\n\n        setHelper(secEl, (area) => {\n          const p = document.createElement(\"p\");\n          const tag = document.createElement(\"span\");\n          tag.className = \"tag\";\n          tag.textContent = \"Keywords\";\n          p.appendChild(tag);\n          p.append(\" Key vocabulary from this section:\");\n          area.appendChild(p);\n\n          const ul = document.createElement(\"ul\");\n          if (!items.length){\n            const li = document.createElement(\"li\");\n            li.textContent = \"No keywords added yet.\";\n            ul.appendChild(li);\n          } else {\n            items.forEach(k => {\n              const li = document.createElement(\"li\");\n              li.innerHTML = `<strong>${k.term}<\/strong>: ${k.def}`;\n              ul.appendChild(li);\n            });\n          }\n          area.appendChild(ul);\n        });\n\n        if (speechOk && items.length){\n          stopSpeaking();\n          showLoader(true);\n          const speakText = \"Keywords. \" + items.map(k => `${k.term}. ${k.def}`).join(\" \");\n          await sayWithVoice(speakText, voiceA || null, { lang:\"en-US\" });\n          showLoader(false);\n        }\n      }\n\n      function checkSection(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        let correct = 0;\n        const total = sec.qList.length;\n\n        \/\/ clear prior feedback\n        sec.qList.forEach(q => setFB(secEl, q, \"\", \"\"));\n\n        sec.qList.forEach(q => {\n          const got = getUserAnswer(secEl, q);\n          const raw = String(got.value || \"\").trim();\n\n          if (!raw){\n            setFB(secEl, q, \"Please answer this question.\", \"#8a5a00\");\n            return;\n          }\n\n          \/\/ rules for text\n          if (got.kind === \"text\" || got.kind === \"word\"){\n            const tc = tokenCount(raw);\n            if (sec.rule === \"oneWordOnly\" && tc !== 1){\n              setFB(secEl, q, \"\u26a0\ufe0f ONE WORD ONLY.\", \"#8a5a00\");\n              return;\n            }\n          }\n\n          const user = norm(raw);\n          const ok = (sec.answers[q] || []).some(a => norm(a) === user);\n\n          if (ok){\n            correct++;\n            setFB(secEl, q, `\u2705 Correct (${String(sec.answers[q][0]).toUpperCase()})`, \"#065f46\");\n          } else {\n            setFB(secEl, q, `\u274c Not correct. Correct answer: ${String(sec.answers[q][0]).toUpperCase()}`, \"#991b1b\");\n          }\n        });\n\n        \/\/ store score on section element for overall\n        secEl.dataset.correct = String(correct);\n        secEl.dataset.total = String(total);\n\n        setSectionScore(secEl, `Score: ${correct}\/${total}`);\n\n        if (speechOk){\n          showLoader(true);\n          sayWithVoice(`Your score for ${sec.title} is ${correct} out of ${total}.`, voiceA || null, { lang:\"en-US\" })\n            .then(() => showLoader(false));\n        }\n      }\n\n      function showAnswers(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        sec.qList.forEach(q => {\n          setFB(secEl, q, `Correct answer: ${String(sec.answers[q][0]).toUpperCase()}`, \"#0f172a\");\n        });\n\n        setSectionScore(secEl, \"Correct answers are shown.\");\n      }\n\n      function resetSection(sectionKey){\n        const secEl = root.querySelector(`[data-section=\"${sectionKey}\"]`);\n        const sec = sections[sectionKey];\n        if (!secEl || !sec) return;\n\n        clearInputs(secEl);\n        sec.qList.forEach(q => setFB(secEl, q, \"\", \"\"));\n        secEl.dataset.correct = \"0\";\n        secEl.dataset.total = String(sec.qList.length);\n        setSectionScore(secEl, \"\");\n        clearSupport(secEl);\n        stopSpeaking();\n      }\n\n      function updateOverallScore(){\n        let totalC = 0, totalT = 0;\n        [\"s1\",\"s2\",\"s3\",\"s4\"].forEach(k => {\n          const el = root.querySelector(`[data-section=\"${k}\"]`);\n          if (!el) return;\n          const c = Number(el.dataset.correct || 0);\n          const t = Number(el.dataset.total || 0);\n          if (t > 0){ totalC += c; totalT += t; }\n        });\n        const box = $('[data-el=\"overallScoreBox\"]');\n        if (box){\n          box.textContent = totalT ? `Overall: ${totalC}\/${totalT}` : \"\";\n        }\n      }\n\n      \/* ===== Navigation highlighting ===== *\/\n      function markCurrentMenu(){\n        const here = (location.href || \"\").replace(\/\\\/$\/, \"\");\n        root.querySelectorAll(\".icte-menu a\").forEach(a => {\n          const href = (a.href || \"\").replace(\/\\\/$\/, \"\");\n          if (href && (here === href || here.startsWith(href + \"\/\"))) a.classList.add(\"is-current\");\n        });\n      }\n\n      \/* ===== Click handling (delegation) ===== *\/\n      function wire(){\n        root.addEventListener(\"click\", (e) => {\n          const btn = e.target.closest(\"button[data-action]\");\n          if (!btn) return;\n\n          const action = btn.getAttribute(\"data-action\");\n          const secEl = btn.closest(\"[data-section]\");\n          const sectionKey = secEl ? secEl.getAttribute(\"data-section\") : null;\n\n          \/\/ global\n          if (action === \"stop-audio\") return stopSpeaking();\n          if (action === \"scroll-sec1\") return document.getElementById(\"sec1\")?.scrollIntoView({behavior:\"smooth\"});\n          if (action === \"scroll-sec2\") return document.getElementById(\"sec2\")?.scrollIntoView({behavior:\"smooth\"});\n          if (action === \"scroll-sec3\") return document.getElementById(\"sec3\")?.scrollIntoView({behavior:\"smooth\"});\n          if (action === \"scroll-sec4\") return document.getElementById(\"sec4\")?.scrollIntoView({behavior:\"smooth\"});\n\n          if (!sectionKey) return;\n\n          if (action === \"toggle-transcript\") return toggleTranscript(secEl);\n          if (action === \"play-audio\") return playAudio(sectionKey);\n          if (action === \"play-instructions\") return playInstructions(sectionKey);\n          if (action === \"read-questions\") return readQuestions(sectionKey);\n          if (action === \"check\") return checkSection(sectionKey);\n          if (action === \"show\") return showAnswers(sectionKey);\n          if (action === \"summary\") return showSummary(sectionKey);\n          if (action === \"main-ideas\") return showMainIdeas(sectionKey);\n          if (action === \"keywords\") return showKeywords(sectionKey);\n          if (action === \"reset\") return resetSection(sectionKey);\n          if (action === \"clear-support\") return clearSupport(secEl);\n        });\n      }\n\n      function init(){\n        loadVoices();\n        renderTranscripts();\n        wire();\n        markCurrentMenu();\n\n        \/\/ init dataset totals so Overall works immediately\n        [\"s1\",\"s2\",\"s3\",\"s4\"].forEach(k => {\n          const el = root.querySelector(`[data-section=\"${k}\"]`);\n          if (!el) return;\n          el.dataset.correct = \"0\";\n          el.dataset.total = String(sections[k].qList.length);\n          clearSupport(el);\n        });\n        updateOverallScore();\n      }\n\n      if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", init);\n      else init();\n    })();\n  <\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Overview Test 1 Test 2 Test 3 Test 4 Reading Speaking Writing IELTS Listening \u2013 Test 3 (Sections 1\u20134) Practice<\/p>\n","protected":false},"author":1,"featured_media":583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[25,28,32],"tags":[],"class_list":["post-598","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ielts","category-listening","category-test-3"],"_links":{"self":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/comments?post=598"}],"version-history":[{"count":1,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/598\/revisions"}],"predecessor-version":[{"id":599,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/598\/revisions\/599"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media\/583"}],"wp:attachment":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media?parent=598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/categories?post=598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/tags?post=598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}