{"id":440,"date":"2025-12-31T13:27:29","date_gmt":"2025-12-31T13:27:29","guid":{"rendered":"https:\/\/i-cte.org\/robot\/?p=440"},"modified":"2026-01-10T03:41:22","modified_gmt":"2026-01-10T03:41:22","slug":"ielts-hobby","status":"publish","type":"post","link":"https:\/\/i-cte.org\/robot\/ielts-hobby\/","title":{"rendered":"IELTs &#8211; Hobby"},"content":{"rendered":"\n<div class=\"icte-menu\">\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-cork\/\">Passage 1<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-hobby\/\">Passage 2<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-knowledge\/\">Passage 3<\/a>\n<a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-2\/\">Test 2<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-3\/\">Test 3<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-reading-test-4\/\">Test 4<\/a>\n  <a href=\"https:\/\/i-cte.org\/robot\/ielts-speaking-overview\/\">Speaking<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-listening-overview\/\">Listening<\/a>\n    <a href=\"https:\/\/i-cte.org\/robot\/ielts-writing-overview\/\">Writing<\/a>\n<\/div>\n\n<section class=\"icte-ielts\" aria-label=\"IELTS Reading - Collecting as a Hobby\">\n  <header class=\"icte-ielts__intro\">\n    <h2 class=\"icte-ielts__title\">IELTS Reading Passage 2: Collecting as a Hobby<\/h2>\n    <p class=\"icte-ielts__sub\">\n      Read the passage below. Then answer Questions 14\u201326. Use the buttons to check or show answers.\n    <\/p>\n  <\/header>\n\n  <!-- Reading -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Reading passage\">\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Reading<\/h3>\n      <div class=\"icte-ielts__headRight\">\n        <button id=\"toggle-reading\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Hide<\/button>\n        <span class=\"icte-loader\" id=\"synthesis-loader\" aria-hidden=\"true\"><\/span>\n      <\/div>\n    <\/div>\n\n    <div id=\"reading-area\" class=\"icte-ielts__reading\" role=\"region\" aria-label=\"Passage text\"><\/div>\n\n    <div class=\"icte-ielts__btnRow icte-ielts__btnRow--tight\">\n      <button id=\"play-passage\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Passage<\/button>\n      <button id=\"stop-btn\" class=\"icte-btn icte-btn--danger\" type=\"button\">\u23f9 Stop Audio<\/button>\n      <a class=\"icte-link\" href=\"#icte-questions\">Jump to questions \u2193<\/a>\n    <\/div>\n  <\/section>\n\n  <!-- Controls -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Controls\">\n    <div class=\"icte-ielts__row\">\n      <div class=\"icte-ielts__control\">\n        <label for=\"voice-select\"><strong>Choose Voice<\/strong><\/label>\n        <select id=\"voice-select\" aria-label=\"Select Voice\">\n          <option value=\"\">Loading voices&#8230;<\/option>\n        <\/select>\n      <\/div>\n\n      <div id=\"scoreBox\" class=\"icte-ielts__score\" aria-live=\"polite\"><\/div>\n    <\/div>\n\n    <div class=\"icte-ielts__btnGrid\" aria-label=\"Action buttons\">\n      <button id=\"play-instructions\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Instructions<\/button>\n      <button id=\"play-questions\" class=\"icte-btn icte-btn--info\" type=\"button\">\ud83d\udd0a Read Questions<\/button>\n      <button id=\"check-btn\" class=\"icte-btn icte-btn--primary\" type=\"button\">Check Answers<\/button>\n      <button id=\"show-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83d\udc40 Show Answers<\/button>\n      <button id=\"summary-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83e\udde0 Summary<\/button>\n      <button id=\"main-ideas-btn\" class=\"icte-btn icte-btn--dark\" type=\"button\">\ud83d\udccc Main ideas<\/button>\n      <button id=\"reset-btn\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Reset<\/button>\n    <\/div>\n  <\/section>\n\n  <!-- Support -->\n  <section class=\"icte-ielts__panel\" aria-label=\"Learning support\">\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Support<\/h3>\n      <div class=\"icte-ielts__headRight\">\n        <button id=\"clear-support\" class=\"icte-btn icte-btn--ghost\" type=\"button\">Clear<\/button>\n      <\/div>\n    <\/div>\n\n    <div id=\"helper-area\" class=\"icte-ielts__helper\" role=\"region\" aria-live=\"polite\">\n      Click <strong>Summary<\/strong> or <strong>Main ideas<\/strong>.\n    <\/div>\n  <\/section>\n\n  <!-- Questions -->\n  <section class=\"icte-ielts__panel\" id=\"icte-questions\" aria-label=\"Questions\">\n    <div class=\"icte-ielts__panelHead\">\n      <h3 class=\"icte-ielts__h3\">Questions 14\u201321 (ONE WORD ONLY)<\/h3>\n    <\/div>\n    <div id=\"oneword-area\" class=\"icte-ielts__qArea\"><\/div>\n\n    <div class=\"icte-ielts__panelHead icte-ielts__panelHead--sub\">\n      <h3 class=\"icte-ielts__h3\">Questions 22\u201326 (TRUE \/ FALSE \/ NOT GIVEN)<\/h3>\n    <\/div>\n    <div id=\"tfng-area\" class=\"icte-ielts__qArea\"><\/div>\n  <\/section>\n\n  <style>\n\/* Top green menu bar (WordPress-safe, full width) *\/\n.icte-menu{\n  width: 100%;\n  max-width: 100%;\n  box-sizing: border-box;\n  display: flex;\n  flex-wrap: wrap;\n  gap: .5rem;\n  justify-content: center;\n  align-items: center;\n  padding: .75rem .9rem;\n  margin: 0 0 1rem 0;\n\n  background: #16a34a;\n  border-radius: 14px;\n  box-shadow: 0 2px 8px rgba(0,0,0,.10);\n}\n\n\/* Menu links *\/\n.icte-menu a{\n  display: inline-block;\n  text-decoration: none;\n  font-weight: 900;\n  font-size: .95rem;\n  color: #ffffff;\n  padding: .55rem .85rem;\n  border-radius: 999px;\n  border: 1px solid rgba(255,255,255,.35);\n  background: rgba(255,255,255,.12);\n  transition: background .2s ease, transform .05s ease;\n}\n\n.icte-menu a:hover{\n  background: rgba(255,255,255,.22);\n}\n\n.icte-menu a:active{\n  transform: translateY(1px);\n}\n\n\/* Highlight current page automatically (when link matches current URL) *\/\n.icte-menu a.is-current{\n  background: #ffffff;\n  color: #16a34a;\n  border-color: #ffffff;\n}\n\n\/* Mobile-friendly *\/\n@media (max-width: 600px){\n  .icte-menu{\n    justify-content: flex-start;\n  }\n  .icte-menu a{\n    width: 100%;\n    text-align: center;\n  }\n}\n\n\n    .icte-ielts{ width:100%; margin:1rem 0; }\n    .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-ielts__title{ margin:0 0 .35rem; font-size:1.2rem; font-weight:900; }\n    .icte-ielts__sub{ margin:0; opacity:.85; }\n\n    .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-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-ielts__panelHead--sub{ margin-top:10px; border-top:1px solid rgba(0,0,0,.08); }\n    .icte-ielts__h3{ margin:0; font-size:1.03rem; font-weight:900; }\n    .icte-ielts__headRight{ display:flex; gap:.55rem; align-items:center; }\n\n    .icte-ielts__reading{\n      padding:.95rem 1rem 1.05rem;\n      line-height:1.75;\n      max-height:520px;\n      overflow:auto;\n    }\n    .icte-ielts__reading p{ margin:0 0 .9rem; }\n    .icte-ielts__reading p:last-child{ margin-bottom:0; }\n\n    .icte-ielts__row{\n      display:flex; align-items:flex-end; justify-content:space-between; gap:.75rem;\n      padding:.85rem 1rem .25rem;\n    }\n    .icte-ielts__control label{ display:block; margin-bottom:.35rem; }\n    .icte-ielts__control 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-ielts__score{\n      font-weight:900; font-size:.95rem; opacity:.9; white-space:nowrap; margin-bottom:.25rem;\n    }\n\n    .icte-ielts__btnRow{\n      padding:.75rem 1rem 1rem; display:flex; gap:.6rem; flex-wrap:wrap; align-items:center;\n    }\n    .icte-ielts__btnRow--tight{ padding-top:0; }\n    .icte-ielts__btnGrid{\n      padding:.75rem 1rem 1rem;\n      display:grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap:.6rem;\n    }\n\n    .icte-link{\n      font-weight:900;\n      text-decoration:none;\n      border:1px solid rgba(0,0,0,.14);\n      border-radius:12px;\n      padding:.55rem .75rem;\n      color:inherit;\n      background:rgba(255,255,255,.6);\n    }\n\n    .icte-ielts__qArea{ padding:.9rem 1rem 1rem; }\n\n    .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-q__label{ font-weight:900; display:block; margin-bottom:.4rem; }\n    .icte-q__controls{ display:flex; gap:.5rem; flex-wrap:wrap; align-items:center; }\n    .icte-q input[type=\"text\"]{\n      width:100%; max-width:520px; padding:.6rem .7rem; border-radius:12px;\n      border:1px solid rgba(0,0,0,.18); font:inherit;\n    }\n    .icte-q select{\n      padding:.55rem .65rem; border-radius:12px; border:1px solid rgba(0,0,0,.18);\n      background:#fff; font:inherit;\n    }\n    .icte-q__fb{ margin-top:.45rem; font-size:.95rem; font-weight:800; }\n\n    .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-btn--primary{ background:#16a34a; color:#fff; }\n    .icte-btn--info{ background:#0ea5e9; color:#fff; }\n    .icte-btn--danger{ background:#dc2626; color:#fff; }\n    .icte-btn--dark{ background:#334155; color:#fff; }\n    .icte-btn--ghost{ background:transparent; border-color:rgba(0,0,0,.20); color:inherit; }\n\n    .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    .icte-ielts__helper{\n      padding:.95rem 1rem 1.05rem;\n      line-height:1.7;\n      overflow-wrap:anywhere;\n      word-break:break-word;\n    }\n    .icte-ielts__helper ul{ margin:.4rem 0 0 1.1rem; }\n    .icte-ielts__helper li{ margin:.35rem 0; }\n    .icte-ielts__helper .tag{\n      display:inline-block;\n      padding:.15rem .5rem;\n      border-radius:999px;\n      border:1px solid rgba(0,0,0,.12);\n      background:rgba(255,255,255,.7);\n      font-weight:900;\n      font-size:.85rem;\n      margin-right:.4rem;\n    }\n\n    @media (max-width: 900px){\n      .icte-ielts__btnGrid{ grid-template-columns: repeat(2, minmax(0, 1fr)); }\n    }\n    @media (max-width: 600px){\n      .icte-ielts__row{ align-items:stretch; flex-direction:column; }\n      .icte-ielts__score{ white-space: normal; }\n      .icte-ielts__btnGrid{ grid-template-columns: 1fr; }\n    }\n  <\/style>\n\n  <script>\n    \/* ===== Reading text (provided by you) ===== *\/\n    const readingText = `COLLECTING AS A HOBBY\nCollecting must be one of the most varied of human activities, and it's one that many of us psychologists find fascinating. Many forms of collecting have been dignified with a technical name: an archtophilist collects teddy bears, a philatelist collects postage stamps, and a deltiologist collects postcards. Amassing hundreds or even thousands of postcards, chocolate wrappers or whatever, takes time, energy and money that could surely be put to much more productive use. And yet there are millions of collectors around the world. Why do they do it?\n\nThere are the people who collect because they want to make money \u2014 this could be called an instrumental reason for collecting; that is, collecting as a means to an end. They'll look for, say, antiques that they can buy cheaply and expect to be able to sell at a profit. But there may well be a psychological element, too \u2014 buying cheap and selling dear can give the collector a sense of triumph. And as selling online is so easy, more and more people are joining in.\n\nMany collectors collect to develop their social life, attending meetings of a group of collectors and exchanging information on items. This is a variant on joining a bridge club or a gym, and similarly brings them into contact with like-minded people.\n\nAnother motive for collecting is the desire to find something special, or a particular example of the collected item, such as a rare early recording by a particular singer. Some may spend their whole lives in a hunt for this. Psychologically, this can give a purpose to a life that otherwise feels aimless. There is a danger, though, that if the individual is ever lucky enough to find what they're looking for, rather than celebrating their success, they may feel empty, now that the goal that drove them on has gone.\n\nIf you think about collecting postage stamps, another potential reason for it \u2014 or, perhaps, a result of collecting \u2014 is its educational value. Stamp collecting opens a window to other countries, and to the plants, animals, or famous people shown on their stamps. Similarly, in the 19th century, many collectors amassed fossils, animals and plants from around the globe, and their collections provided a vast amount of information about the natural world. Without those collections, our understanding would be greatly inferior to what it is.\n\nIn the past and nowadays, too, though to a lesser extent \u2014 a popular form of collecting, particularly among boys and men, was trainspotting. This might involve trying to see every locomotive of a particular type, using published data that identifies each one, and ticking off each engine as it is seen. Trainspotters exchange information, these days often by mobile phone, so they can work out where to go to, to see a particular engine. As a by-product, many practitioners of the hobby become very knowledgeable about railway operations, or the technical specifications of different engine types.\n\nSimilarly, people who collect dolls may go beyond simply enlarging their collection, and develop an interest in the way that dolls are made, or the materials that are used. These have changed over the centuries from the wood that was standard in 16th century Europe, through the wax and porcelain of later centuries, to the plastics of today's dolls. Or collectors might be inspired to study how dolls reflect notions of what children like, or ought to like.\n\nNot all collectors are interested in learning from their hobby, though, so what we might call a psychological reason for collecting is the need for a sense of control, perhaps as a way of dealing with insecurity. Stamp collectors, for instance, arrange their stamps in albums, usually very neatly, organising their collection according to certain commonplace principles \u2014 perhaps by country in alphabetical order, or grouping stamps by what they depict \u2014 people, birds, maps, and so on.\n\nOne reason, conscious or not, for what someone chooses to collect is to show the collector's individualism. Someone who decides to collect something as unexpected as dog collars, for instance, may be conveying their belief that they must be interesting themselves. And believe it or not, there is at least one dog collar museum in existence, and it grew out of a personal collection.\n\nOf course, all hobbies give pleasure, but the common factor in collecting is usually passion: pleasure is putting it far too mildly. More than most other hobbies, collecting can be totally engrossing, and can give a strong sense of personal fulfilment. To non-collectors it may appear an eccentric, if harmless, way of spending time, but potentially, collecting has a lot going for it.`;\n\n    \/* ===== Questions 14\u201326 (from your PDF) ===== *\/\n    const oneWordQuestions = [\n      { id: 14, prompt: \"The writer mentions collecting ________ as an example of collecting in order to make money.\", answer: \"antiques\" },\n      { id: 15, prompt: \"Collectors may get a feeling of ________ from buying and selling items.\", answer: \"triumph\" },\n      { id: 16, prompt: \"Collectors\u2019 clubs provide opportunities to share ________.\", answer: \"information\" },\n      { id: 17, prompt: \"Collectors\u2019 clubs offer ________ with people who have similar interests.\", answer: \"contact\" },\n      { id: 18, prompt: \"Collecting sometimes involves a life-long ________ for a special item.\", answer: \"hunt\" },\n      { id: 19, prompt: \"Searching for something particular may prevent people from feeling their life is completely ________.\", answer: \"aimless\" },\n      { id: 20, prompt: \"Stamp collecting may be ________ because it provides facts about different countries.\", answer: \"educational\" },\n      { id: 21, prompt: \"________ tends to be mostly a male hobby.\", answer: \"trainspotting\" }\n    ];\n\n    const tfngQuestions = [\n      { id: 22, text: \"The number of people buying dolls has grown over the centuries.\", answer: \"NOT GIVEN\" },\n      { id: 23, text: \"Sixteenth century European dolls were normally made of wax and porcelain.\", answer: \"FALSE\" },\n      { id: 24, text: \"Arranging a stamp collection by the size of the stamps is less common than other methods.\", answer: \"NOT GIVEN\" },\n      { id: 25, text: \"Someone who collects unusual objects may want others to think he or she is also unusual.\", answer: \"TRUE\" },\n      { id: 26, text: \"Collecting gives a feeling that other hobbies are unlikely to inspire.\", answer: \"TRUE\" }\n    ];\n\n    \/* ===== Speech ===== *\/\n    const speechSynthesisSupported = (\"speechSynthesis\" in window);\n    let voices = [];\n    let selectedVoice = null;\n\n    function showSynthesisLoader(show){\n      const loader = document.getElementById(\"synthesis-loader\");\n      if (!loader) return;\n      loader.style.display = show ? \"inline-block\" : \"none\";\n    }\n\n    function stopSpeaking(){\n      if (speechSynthesisSupported) {\n        window.speechSynthesis.cancel();\n        showSynthesisLoader(false);\n      }\n    }\n\n    function sayText(text, lang){\n      return new Promise((resolve) => {\n        if (!speechSynthesisSupported) return resolve();\n        const u = new SpeechSynthesisUtterance(String(text || \"\"));\n        u.lang = lang || \"en-US\";\n        u.rate = 1.0;\n        u.pitch = 1.0;\n        if (selectedVoice) u.voice = selectedVoice;\n        u.onend = resolve;\n        u.onerror = resolve;\n        window.speechSynthesis.speak(u);\n      });\n    }\n\n    function loadVoices(){\n      if (!speechSynthesisSupported) return;\n      voices = window.speechSynthesis.getVoices();\n      if (voices.length === 0) {\n        window.speechSynthesis.onvoiceschanged = () => {\n          voices = window.speechSynthesis.getVoices();\n          populateVoiceList();\n        };\n      } else {\n        populateVoiceList();\n      }\n    }\n\n    function populateVoiceList(){\n      const voiceSelect = document.getElementById(\"voice-select\");\n      if (!voiceSelect) return;\n\n      voiceSelect.innerHTML = \"\";\n      const en = voices.filter(v => (v.lang || \"\").toLowerCase().startsWith(\"en\"));\n      const usable = en.length ? en : voices;\n\n      usable.forEach((v, idx) => {\n        const opt = document.createElement(\"option\");\n        opt.value = String(idx);\n        opt.textContent = `${v.name} (${v.lang})`;\n        voiceSelect.appendChild(opt);\n      });\n\n      selectedVoice = usable[0] || null;\n      voiceSelect.onchange = () => {\n        selectedVoice = usable[Number(voiceSelect.value)] || usable[0] || null;\n      };\n    }\n\n    \/* ===== Reading render ===== *\/\n    function renderReading(){\n      const area = document.getElementById(\"reading-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      const parts = readingText.split(\/\\n\\s*\\n\/g).map(p => p.trim()).filter(Boolean);\n      parts.forEach(p => {\n        const el = document.createElement(\"p\");\n        el.textContent = p;\n        area.appendChild(el);\n      });\n    }\n\n    \/* ===== Question render ===== *\/\n    function renderOneWord(){\n      const area = document.getElementById(\"oneword-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      oneWordQuestions.forEach(q => {\n        const box = document.createElement(\"div\");\n        box.className = \"icte-q\";\n\n        const label = document.createElement(\"label\");\n        label.className = \"icte-q__label\";\n        label.htmlFor = `ow-${q.id}`;\n        label.textContent = `${q.id}. ${q.prompt}`;\n        box.appendChild(label);\n\n        const controls = document.createElement(\"div\");\n        controls.className = \"icte-q__controls\";\n\n        const input = document.createElement(\"input\");\n        input.type = \"text\";\n        input.id = `ow-${q.id}`;\n        input.placeholder = \"ONE WORD ONLY\";\n        controls.appendChild(input);\n\n        box.appendChild(controls);\n\n        const fb = document.createElement(\"div\");\n        fb.className = \"icte-q__fb\";\n        fb.id = `fb-${q.id}`;\n        box.appendChild(fb);\n\n        area.appendChild(box);\n      });\n    }\n\n    function renderTFNG(){\n      const area = document.getElementById(\"tfng-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n\n      tfngQuestions.forEach(q => {\n        const box = document.createElement(\"div\");\n        box.className = \"icte-q\";\n\n        const label = document.createElement(\"label\");\n        label.className = \"icte-q__label\";\n        label.htmlFor = `tfng-${q.id}`;\n        label.textContent = `${q.id}. ${q.text}`;\n        box.appendChild(label);\n\n        const controls = document.createElement(\"div\");\n        controls.className = \"icte-q__controls\";\n\n        const sel = document.createElement(\"select\");\n        sel.id = `tfng-${q.id}`;\n        sel.innerHTML = `\n          <option value=\"\">Choose\u2026<\/option>\n          <option value=\"TRUE\">TRUE<\/option>\n          <option value=\"FALSE\">FALSE<\/option>\n          <option value=\"NOT GIVEN\">NOT GIVEN<\/option>\n        `;\n        controls.appendChild(sel);\n\n        box.appendChild(controls);\n\n        const fb = document.createElement(\"div\");\n        fb.className = \"icte-q__fb\";\n        fb.id = `fb-${q.id}`;\n        box.appendChild(fb);\n\n        area.appendChild(box);\n      });\n    }\n\n    \/* ===== Checking ===== *\/\n    function setScore(text){\n      const scoreBox = document.getElementById(\"scoreBox\");\n      if (scoreBox) scoreBox.textContent = text || \"\";\n    }\n\n    function normWord(x){ return String(x || \"\").trim().toLowerCase().replace(\/[.,!?;:()\"']\/g, \"\"); }\n    function isOneWord(x){ const t = String(x || \"\").trim(); return !!t && t.split(\/\\s+\/).length === 1; }\n    function normChoice(x){ return String(x || \"\").trim().toUpperCase(); }\n\n    function checkAnswers(){\n      const total = oneWordQuestions.length + tfngQuestions.length;\n      let correct = 0, attempted = 0;\n\n      oneWordQuestions.forEach(q => {\n        const input = document.getElementById(`ow-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!input || !fb) return;\n\n        const raw = String(input.value || \"\").trim();\n        if (!raw) { fb.textContent = \"Please write ONE WORD.\"; fb.style.color = \"#8a5a00\"; return; }\n        attempted++;\n\n        if (!isOneWord(raw)) { fb.textContent = `\u26a0\ufe0f ONE WORD ONLY. Correct answer: ${q.answer}`; fb.style.color = \"#8a5a00\"; return; }\n\n        if (normWord(raw) === normWord(q.answer)) {\n          correct++;\n          fb.textContent = `\u2705 Correct (${q.answer})`;\n          fb.style.color = \"#065f46\";\n        } else {\n          fb.textContent = `\u274c Not correct. Correct answer: ${q.answer}`;\n          fb.style.color = \"#991b1b\";\n        }\n      });\n\n      tfngQuestions.forEach(q => {\n        const sel = document.getElementById(`tfng-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!sel || !fb) return;\n\n        const user = normChoice(sel.value);\n        if (!user) { fb.textContent = \"Please choose TRUE \/ FALSE \/ NOT GIVEN.\"; fb.style.color = \"#8a5a00\"; return; }\n        attempted++;\n\n        if (user === q.answer) {\n          correct++;\n          fb.textContent = `\u2705 Correct (${q.answer})`;\n          fb.style.color = \"#065f46\";\n        } else {\n          fb.textContent = `\u274c Not correct. Correct answer: ${q.answer}`;\n          fb.style.color = \"#991b1b\";\n        }\n      });\n\n      setScore(`Score: ${correct}\/${total} (attempted: ${attempted}\/${total})`);\n\n      if (speechSynthesisSupported) {\n        showSynthesisLoader(true);\n        sayText(`Your score is ${correct} out of ${total}.`, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    function showAllCorrectAnswers(){\n      [...oneWordQuestions, ...tfngQuestions].forEach(q => {\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (!fb) return;\n        fb.textContent = `Correct answer: ${q.answer}`;\n        fb.style.color = \"#0f172a\";\n      });\n      setScore(\"Correct answers are shown.\");\n    }\n\n    function resetAll(){\n      oneWordQuestions.forEach(q => {\n        const input = document.getElementById(`ow-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (input) input.value = \"\";\n        if (fb) fb.textContent = \"\";\n      });\n      tfngQuestions.forEach(q => {\n        const sel = document.getElementById(`tfng-${q.id}`);\n        const fb = document.getElementById(`fb-${q.id}`);\n        if (sel) sel.value = \"\";\n        if (fb) fb.textContent = \"\";\n      });\n      setScore(\"\");\n      stopSpeaking();\n    }\n\n    \/* ===== Support ===== *\/\n    function setHelperContent(nodesBuilder){\n      const area = document.getElementById(\"helper-area\");\n      if (!area) return;\n      area.innerHTML = \"\";\n      nodesBuilder(area);\n      area.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n\n    function getSummaryText(){\n      return [\n        \"Collecting is a very common human activity with many forms and specialist names.\",\n        \"People may collect for money (buying cheaply and selling for profit), for social reasons (clubs and meetings), or to search for a rare or special item.\",\n        \"Collecting can also have educational value, building knowledge about countries, nature, or technical details such as trains and railway operations.\",\n        \"For some people, collecting creates a sense of control and order, and it can express individualism through unusual collections.\",\n        \"Overall, collecting is often driven by strong passion and can be deeply engaging and personally fulfilling.\"\n      ].join(\" \");\n    }\n\n    function showSummary(){\n      const summaryText = getSummaryText();\n      setHelperContent((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(\" \" + summaryText);\n        area.appendChild(p);\n      });\n\n      if (speechSynthesisSupported) {\n        stopSpeaking();\n        showSynthesisLoader(true);\n        sayText(\"Summary. \" + summaryText, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    function getMainIdeasForQuestions(){\n      return [\n        { tag: \"Q14\u201321\", text: \"ONE WORD ONLY from the passage. No extra words like 'a\/the'.\" },\n        { tag: \"Money motive\", text: \"Example: antiques; psychological reward: triumph.\" },\n        { tag: \"Social motive\", text: \"Collectors meet, exchange information, and gain contact with like-minded people.\" },\n        { tag: \"Rare item search\", text: \"A life-long hunt can give purpose to an otherwise aimless life, but success may feel empty.\" },\n        { tag: \"Educational value\", text: \"Stamp collecting teaches about countries; collections helped science (fossils, plants, animals).\" },\n        { tag: \"Trainspotting\", text: \"Especially among boys and men; uses data lists; builds technical knowledge.\" },\n        { tag: \"Dolls\", text: \"Materials changed: wood (16th century Europe) \u2192 wax\/porcelain later \u2192 plastics today.\" },\n        { tag: \"Control & order\", text: \"Collectors may organise neatly (country alphabetical; themes like birds\/maps\/people).\" },\n        { tag: \"Individualism\", text: \"Unusual collections (e.g., dog collars) can signal uniqueness\/being interesting.\" },\n        { tag: \"Q22\u201326 TF\/NG\", text: \"TRUE\/FALSE only if the passage clearly says; if not mentioned, choose NOT GIVEN.\" }\n      ];\n    }\n\n    function showMainIdeas(){\n      const items = getMainIdeasForQuestions();\n\n      setHelperContent((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(\" Important points to remember for answering the questions:\");\n        area.appendChild(p);\n\n        const ul = document.createElement(\"ul\");\n        items.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 (speechSynthesisSupported) {\n        stopSpeaking();\n        showSynthesisLoader(true);\n        const speakText = \"Main ideas. \" + items.map(i => `${i.tag}. ${i.text}`).join(\" \");\n        sayText(speakText, \"en-US\").then(() => showSynthesisLoader(false));\n      }\n    }\n\n    \/* ===== Audio buttons ===== *\/\n    async function playInstructions(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n      const msg =\n        \"For questions fourteen to twenty-one, write one word only from the passage. \" +\n        \"For questions twenty-two to twenty-six, choose true, false, or not given.\";\n      await sayText(msg, \"en-US\");\n      showSynthesisLoader(false);\n    }\n\n    async function playQuestions(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n\n      await sayText(\"Questions fourteen to twenty-one. Write one word only.\", \"en-US\");\n      for (const q of oneWordQuestions) await sayText(`Question ${q.id}. ${q.prompt}`, \"en-US\");\n\n      await sayText(\"Questions twenty-two to twenty-six. Choose true, false, or not given.\", \"en-US\");\n      for (const q of tfngQuestions) await sayText(`Question ${q.id}. ${q.text}`, \"en-US\");\n\n      showSynthesisLoader(false);\n    }\n\n    async function playPassage(){\n      if (!speechSynthesisSupported) return;\n      stopSpeaking();\n      showSynthesisLoader(true);\n      await sayText(\"Now, listen to the reading passage. Collecting as a hobby.\", \"en-US\");\n      await sayText(readingText.replace(\/\\n\\s*\\n\/g, \"  \"), \"en-US\");\n      showSynthesisLoader(false);\n    }\n\n    function wireUI(){\n      const playIns = document.getElementById(\"play-instructions\");\n      const playQs = document.getElementById(\"play-questions\");\n      const playPass = document.getElementById(\"play-passage\");\n      const checkBtn = document.getElementById(\"check-btn\");\n      const showBtn = document.getElementById(\"show-btn\");\n      const resetBtn = document.getElementById(\"reset-btn\");\n      const stopBtn = document.getElementById(\"stop-btn\");\n      const toggleReading = document.getElementById(\"toggle-reading\");\n      const readingArea = document.getElementById(\"reading-area\");\n      const summaryBtn = document.getElementById(\"summary-btn\");\n      const mainIdeasBtn = document.getElementById(\"main-ideas-btn\");\n      const clearSupport = document.getElementById(\"clear-support\");\n\n      if (playIns) playIns.onclick = playInstructions;\n      if (playQs) playQs.onclick = playQuestions;\n      if (playPass) playPass.onclick = playPassage;\n      if (checkBtn) checkBtn.onclick = checkAnswers;\n      if (showBtn) showBtn.onclick = showAllCorrectAnswers;\n      if (resetBtn) resetBtn.onclick = resetAll;\n      if (stopBtn) stopBtn.onclick = stopSpeaking;\n      if (summaryBtn) summaryBtn.onclick = showSummary;\n      if (mainIdeasBtn) mainIdeasBtn.onclick = showMainIdeas;\n\n      if (clearSupport) clearSupport.onclick = () => {\n        const area = document.getElementById(\"helper-area\");\n        if (area) area.innerHTML = 'Click <strong>Summary<\/strong> or <strong>Main ideas<\/strong>.';\n      };\n\n      if (toggleReading && readingArea) {\n        toggleReading.onclick = () => {\n          const hidden = readingArea.style.display === \"none\";\n          readingArea.style.display = hidden ? \"block\" : \"none\";\n          toggleReading.textContent = hidden ? \"Hide\" : \"Show\";\n        };\n      }\n    }\n\n    function initialize(){\n      loadVoices();\n      renderReading();\n      renderOneWord();\n      renderTFNG();\n      wireUI();\n    }\n\n    document.addEventListener(\"DOMContentLoaded\", initialize);\n    (function markCurrentMenu(){\n  const here = (location.href || \"\").replace(\/\\\/$\/, \"\");\n  document.querySelectorAll(\".icte-menu a\").forEach(a => {\n    const href = (a.href || \"\").replace(\/\\\/$\/, \"\");\n    if (href && here.includes(href)) a.classList.add(\"is-current\");\n  });\n})();\n\n  <\/script>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Passage 1 Passage 2 Passage 3 Test 2 Test 3 Test 4 Speaking Listening Writing IELTS Reading Passage 2: Collecting<\/p>\n","protected":false},"author":1,"featured_media":441,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[25,26,27],"tags":[],"class_list":["post-440","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ielts","category-reading","category-test-1"],"_links":{"self":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/440","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=440"}],"version-history":[{"count":3,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/440\/revisions"}],"predecessor-version":[{"id":611,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/440\/revisions\/611"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media\/441"}],"wp:attachment":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media?parent=440"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/categories?post=440"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/tags?post=440"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}