{"id":747,"date":"2026-03-04T12:56:00","date_gmt":"2026-03-04T12:56:00","guid":{"rendered":"https:\/\/i-cte.org\/robot\/?p=747"},"modified":"2026-03-05T04:19:42","modified_gmt":"2026-03-05T04:19:42","slug":"ai-for-language-polishing","status":"publish","type":"post","link":"https:\/\/i-cte.org\/robot\/ai-for-language-polishing\/","title":{"rendered":"AI for Language Polishing"},"content":{"rendered":"\n<!-- \u2705 ICTE Teacher Micro-Lesson \u2014 AI for Language Polishing (Academic tone + clarity)\n     WP-safe single block, Multi-speaker Google Voices (2 voices), Reading + MCQs + Examples\n     Focus: paraphrasing vs rewriting, redundancy, cohesion, avoiding \u201cAI-sounding\u201d prose\n-->\n<div id=\"icte-polishing\">\n\n  <!-- \u2705 TOP MENU -->\n  <nav class=\"icte-menu\" aria-label=\"AI polishing lesson navigation\">\n    <a href=\"#\" class=\"is-current\" data-view=\"conversation\">Conversation<\/a>\n    <a href=\"#\" data-view=\"concepts\">Core Concepts<\/a>\n    <a href=\"#\" data-view=\"reading\">Reading<\/a>\n    <a href=\"#\" data-view=\"examples\">Examples<\/a>\n    <a href=\"#\" data-view=\"listening\">Listening<\/a>\n    <a href=\"#\" data-view=\"lab\">Polishing Lab<\/a>\n    <a href=\"#\" data-view=\"progress\">Progress<\/a>\n  <\/nav>\n\n  <section class=\"icte-shell\" aria-label=\"ICTE AI language polishing lesson\">\n\n    <!-- \u2705 Header -->\n    <header class=\"icte-hero\">\n      <div class=\"icte-hero__text\">\n        <h2>AI for Language Polishing<\/h2>\n        <p class=\"muted\">\n          Learn to use AI for <b>paraphrasing vs. rewriting<\/b>, reducing <b>redundancy<\/b>, improving <b>cohesion<\/b>,\n          and avoiding <b>\u201cAI-sounding\u201d<\/b> prose. Includes a <b>reading text<\/b>, <b>MCQ quiz<\/b>, <b>examples<\/b>, and a\n          <b>two-speaker Google Voices<\/b> listening dialogue.\n        <\/p>\n      <\/div>\n\n      <div class=\"icte-hero__controls\">\n        <div class=\"icte-pill\">\n          <span class=\"dot\" id=\"icteMicDot\" aria-hidden=\"true\"><\/span>\n          <span id=\"icteMicStatus\">Mic: Off<\/span>\n        <\/div>\n\n        <div class=\"icte-row\">\n          <button class=\"btn\" id=\"icteStartVoice\" type=\"button\">Start Voice<\/button>\n          <button class=\"btn ghost\" id=\"icteStopVoice\" type=\"button\">Stop<\/button>\n        <\/div>\n\n        <!-- \u2705 Multi-speaker Google Voices -->\n        <div class=\"grid2\" style=\"margin-top:10px;\">\n          <label class=\"icte-label\">\n            Speaker A (Google)\n            <select id=\"voiceA\" class=\"icte-select\" aria-label=\"Speaker A voice\"><\/select>\n          <\/label>\n\n          <label class=\"icte-label\">\n            Speaker B (Google)\n            <select id=\"voiceB\" class=\"icte-select\" aria-label=\"Speaker B voice\"><\/select>\n          <\/label>\n        <\/div>\n\n        <div class=\"icte-small muted\">\n          Tip: For best voice options, use Chrome\/Edge. If voices don\u2019t appear yet, click once on the page and wait 2\u20133 seconds.\n        <\/div>\n      <\/div>\n    <\/header>\n\n    <!-- \u2705 Views -->\n    <main class=\"icte-main\">\n\n      <!-- ===================== -->\n      <!-- \u2705 1) CONVERSATION -->\n      <!-- ===================== -->\n      <section class=\"view is-active\" data-view=\"conversation\" aria-label=\"Conversation coaching\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>1) Conversation (Polishing Coach)<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"conv-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"convReset\">Reset<\/button>\n            <\/div>\n          <\/div>\n\n          <p class=\"muted\">\n            You will build a safe, effective polishing prompt step-by-step. Target outcomes:\n            <b>clarity<\/b>, <b>academic tone<\/b>, <b>less redundancy<\/b>, and <b>natural voice<\/b>.\n          <\/p>\n\n          <div class=\"chat\" id=\"convChat\" aria-live=\"polite\" aria-label=\"Conversation chat log\"><\/div>\n\n          <div class=\"chatbar\">\n            <input id=\"convText\" class=\"input\" type=\"text\" placeholder=\"Type your answer (optional)...\" autocomplete=\"off\" \/>\n            <button class=\"btn\" id=\"convSend\" type=\"button\">Send<\/button>\n            <button class=\"btn ghost\" id=\"convHear\" type=\"button\">\ud83d\udd0a Read last question<\/button>\n          <\/div>\n\n          <div class=\"muted icte-small\">\n            Coach tip: Always tell AI what to <b>preserve<\/b> (meaning, citations, terminology) and what to <b>avoid<\/b> (fabrication, inflated claims).\n          <\/div>\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 2) CORE CONCEPTS -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"concepts\" aria-label=\"Core concepts\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>2) Core Concepts (Quick Guide)<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"concepts-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"conceptsSpeak\">\ud83d\udd0a Read quick guide<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\">\n            <b>Key distinction:<\/b> <b>Paraphrasing<\/b> = same meaning, new wording, similar scope. <b>Rewriting<\/b> = restructure and improve logic\/flow.\n          <\/div>\n\n          <div class=\"grid2\">\n            <div class=\"qitem\">\n              <div class=\"qtext\">Paraphrasing (use when\u2026)<\/div>\n              <ul class=\"ul\">\n                <li>You need a different phrasing but the same meaning and scope.<\/li>\n                <li>You must keep the original claim strength (no exaggeration).<\/li>\n                <li>You must keep key terms (constructs, variables, technical labels).<\/li>\n              <\/ul>\n            <\/div>\n\n            <div class=\"qitem\">\n              <div class=\"qtext\">Rewriting (use when\u2026)<\/div>\n              <ul class=\"ul\">\n                <li>Your sentence order is unclear or repetitive.<\/li>\n                <li>You need stronger cohesion (topic sentences, transitions, pronoun clarity).<\/li>\n                <li>You want a more academic, concise, readable paragraph.<\/li>\n              <\/ul>\n            <\/div>\n          <\/div>\n\n          <div class=\"grid2\" style=\"margin-top:12px;\">\n            <div class=\"qitem\">\n              <div class=\"qtext\">Reduce redundancy (common targets)<\/div>\n              <ul class=\"ul\">\n                <li>Duplicated meaning (e.g., \u201ceach and every,\u201d \u201cbasic fundamentals\u201d).<\/li>\n                <li>Filler phrases (e.g., \u201cit should be noted that,\u201d \u201cin order to\u201d).<\/li>\n                <li>Over-hedging or stacked qualifiers (e.g., \u201csomewhat relatively quite\u201d).<\/li>\n              <\/ul>\n            <\/div>\n\n            <div class=\"qitem\">\n              <div class=\"qtext\">Improve cohesion (tools)<\/div>\n              <ul class=\"ul\">\n                <li>Clear topic sentence \u2192 supporting points \u2192 concluding link.<\/li>\n                <li>Controlled transitions (However, Therefore, In contrast, For example).<\/li>\n                <li>Reference clarity (avoid \u201cthis\/it\/they\u201d with unclear antecedents).<\/li>\n              <\/ul>\n            <\/div>\n          <\/div>\n\n          <div class=\"qitem\" style=\"margin-top:12px;\">\n            <div class=\"qtext\">Avoid \u201cAI-sounding\u201d prose (red flags)<\/div>\n            <div class=\"grid2\">\n              <div>\n                <ul class=\"ul\">\n                  <li>Overly symmetrical sentences and repeated templates.<\/li>\n                  <li>Generic intensifiers (e.g., \u201ccrucial,\u201d \u201csignificant,\u201d \u201cever-evolving\u201d) without evidence.<\/li>\n                  <li>Long, inflated noun phrases (\u201cthe utilization of\u2026 in the context of\u2026\u201d).<\/li>\n                <\/ul>\n              <\/div>\n              <div>\n                <ul class=\"ul\">\n                  <li>Too many transitions (\u201cMoreover,\u201d \u201cFurthermore,\u201d every sentence).<\/li>\n                  <li>Vague claims (\u201cThis suggests that\u2026\u201d) without specifying what and why.<\/li>\n                  <li>Unnecessary disclaimers (\u201cIt is important to note that\u2026\u201d).<\/li>\n                <\/ul>\n              <\/div>\n            <\/div>\n          <\/div>\n\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 3) READING + QUIZ -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"reading\" aria-label=\"Reading and quiz\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>3) Reading + Comprehension Quiz<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"reading-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"readTextBtn\">\ud83d\udd0a Read the text<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"quizCheck\">Check answers<\/button>\n            <\/div>\n          <\/div>\n\n          <!-- \u2705 Reading text -->\n          <article class=\"reading\" id=\"readingText\" aria-label=\"Reading text about AI language polishing\">\n            <div class=\"reading-title\">Reading: Using AI to polish academic writing (without losing your voice)<\/div>\n\n            <div class=\"reading-p\">\n              <b>1<\/b> AI can help polish academic writing, but it should be used as an <b>editing assistant<\/b>, not as the author.\n              A safe approach is to give AI a clear task, set boundaries, and then evaluate the output with your own judgment.\n              When used carefully, AI can improve clarity, reduce repetition, and suggest smoother transitions.\n            <\/div>\n\n            <div class=\"reading-p\">\n              <b>2<\/b> A key skill is knowing the difference between <b>paraphrasing<\/b> and <b>rewriting<\/b>.\n              Paraphrasing keeps the same meaning and scope but changes wording.\n              Rewriting is deeper: it may reorganize sentences, improve logic, and strengthen cohesion.\n              In research writing, paraphrase carefully so you do not change the strength of a claim or misrepresent a source.\n            <\/div>\n\n            <div class=\"reading-p\">\n              <b>3<\/b> Good polishing removes <b>redundancy<\/b>.\n              Redundancy often appears as repeated ideas across sentences, unnecessary filler phrases, or wordy expressions.\n              For example, \u201cin order to\u201d can often become \u201cto,\u201d and \u201cdue to the fact that\u201d can become \u201cbecause.\u201d\n              Shorter does not always mean better, but clearer usually means fewer unnecessary words.\n            <\/div>\n\n            <div class=\"reading-p\">\n              <b>4<\/b> Another focus is <b>cohesion<\/b>.\n              Cohesion is how sentences connect so the reader can follow the argument.\n              Polishing may involve adding a clearer topic sentence, replacing vague pronouns, or using transitions sparingly.\n              Effective cohesion makes the paragraph feel like one connected idea rather than a list of separate statements.\n            <\/div>\n\n            <div class=\"reading-p\">\n              <b>5<\/b> Writers should also avoid \u201c<b>AI-sounding<\/b>\u201d prose.\n              This style often includes inflated vocabulary, generic claims, and too many transitions.\n              A practical strategy is to ask AI for <b>two versions<\/b>: one very concise and one more detailed,\n              and then choose the best parts to revise manually.\n              Finally, never ask AI to invent citations; keep references unchanged unless you verify them yourself.\n            <\/div>\n          <\/article>\n\n          <!-- \u2705 Quiz -->\n          <h4 class=\"h4\" style=\"margin-top:12px;\">Comprehension check (choose the best answer)<\/h4>\n          <div id=\"quiz\" class=\"stack\"><\/div>\n          <div class=\"feedback\" id=\"quizFb\" aria-live=\"polite\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 4) EXAMPLES -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"examples\" aria-label=\"Examples\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>4) Examples (Paraphrase vs Rewrite vs Polish)<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"examples-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"examplesSpeak\">\ud83d\udd0a Read examples<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\">\n            <b>Use rule:<\/b> If you are working from a source, paraphrase responsibly. If you are improving your own draft, rewrite\/polish.\n          <\/div>\n\n          <div class=\"qitem\">\n            <div class=\"qtext\">Original (student draft)<\/div>\n            <pre class=\"pre\" id=\"exOriginal\"><\/pre>\n          <\/div>\n\n          <div class=\"grid2\" style=\"margin-top:12px;\">\n            <div class=\"qitem\">\n              <div class=\"qtext\">A) Paraphrase (same meaning, new wording)<\/div>\n              <pre class=\"pre\" id=\"exParaphrase\"><\/pre>\n            <\/div>\n\n            <div class=\"qitem\">\n              <div class=\"qtext\">B) Rewrite (restructure for logic + flow)<\/div>\n              <pre class=\"pre\" id=\"exRewrite\"><\/pre>\n            <\/div>\n          <\/div>\n\n          <div class=\"qitem\" style=\"margin-top:12px;\">\n            <div class=\"qtext\">C) Polish (academic tone + clarity, less redundancy, better cohesion)<\/div>\n            <pre class=\"pre\" id=\"exPolish\"><\/pre>\n          <\/div>\n\n          <div class=\"grid2\" style=\"margin-top:12px;\">\n            <div class=\"qitem\">\n              <div class=\"qtext\">\u201cAI-sounding\u201d \u2192 more natural academic voice<\/div>\n              <pre class=\"pre\" id=\"exDeAI\"><\/pre>\n            <\/div>\n\n            <div class=\"qitem\">\n              <div class=\"qtext\">Prompt templates (copy &#038; adapt)<\/div>\n              <pre class=\"pre\" id=\"exPrompts\"><\/pre>\n            <\/div>\n          <\/div>\n\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 5) LISTENING (2 voices) -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"listening\" aria-label=\"Two-speaker listening\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>5) Listening (Two Google Voices) \u2014 \u201cPolish without changing meaning\u201d<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"list-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini\" type=\"button\" id=\"listenPlay\">\u25b6\ufe0f Play dialogue<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"listenStop\">\u23f9 Stop<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"listenCheck\">Check answers<\/button>\n            <\/div>\n          <\/div>\n\n          <p class=\"muted\">\n            Listen to two researchers discussing paraphrasing vs rewriting and \u201cAI-sounding\u201d style.\n            Then answer the questions.\n          <\/p>\n\n          <div id=\"listenQ\" class=\"stack\"><\/div>\n          <div class=\"feedback\" id=\"listenFb\" aria-live=\"polite\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 6) POLISHING LAB -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"lab\" aria-label=\"Polishing lab\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>6) Polishing Lab (Build a strong editing prompt)<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini\" type=\"button\" data-say=\"lab-instr\">\ud83d\udd0a Read instructions<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"labBuild\">Generate prompt<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"labCopy\">Copy prompt<\/button>\n              <button class=\"btn mini ghost\" type=\"button\" id=\"labScore\">Self-check<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\">\n            Paste a paragraph, choose a polishing goal, and generate a safe prompt you can use in any AI tool.\n            <b>Keep citations and meaning unchanged.<\/b>\n          <\/div>\n\n          <div class=\"grid2\">\n            <div class=\"qitem\">\n              <div class=\"qtext\">A) Paste your paragraph<\/div>\n              <textarea class=\"textarea\" id=\"labText\" rows=\"8\" placeholder=\"Paste your paragraph here...\"><\/textarea>\n              <div class=\"icte-small muted\" style=\"margin-top:6px;\">\n                Tip: If this is from a source, label it as \u201csource-based\u201d and ask AI to keep claim strength unchanged.\n              <\/div>\n            <\/div>\n\n            <div class=\"qitem\">\n              <div class=\"qtext\">B) Choose your goal<\/div>\n              <label class=\"icte-label\">Goal<\/label>\n              <select class=\"icte-select\" id=\"labGoal\" aria-label=\"Polishing goal\">\n                <option value=\"paraphrase\">Paraphrase (same meaning, new wording)<\/option>\n                <option value=\"rewrite\">Rewrite (restructure for flow + logic)<\/option>\n                <option value=\"tighten\">Tighten (reduce redundancy + wordiness)<\/option>\n                <option value=\"cohesion\">Improve cohesion (topic sentence + transitions + clarity)<\/option>\n                <option value=\"deai\">De-AI style (more natural academic voice)<\/option>\n                <option value=\"tone\">Academic tone (formal but readable)<\/option>\n              <\/select>\n\n              <label class=\"icte-label\">Academic level<\/label>\n              <select class=\"icte-select\" id=\"labLevel\" aria-label=\"Academic level\">\n                <option value=\"undergrad\">Undergraduate<\/option>\n                <option value=\"masters\" selected>Master\u2019s<\/option>\n                <option value=\"phd\">PhD<\/option>\n              <\/select>\n\n              <label class=\"icte-label\">Constraints (recommended)<\/label>\n              <div class=\"stack\" id=\"labConstraints\"><\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"qitem\" style=\"margin-top:12px;\">\n            <div class=\"qtext\">Generated prompt (copy into your AI tool)<\/div>\n            <pre class=\"pre\" id=\"labPrompt\"><\/pre>\n          <\/div>\n\n          <div class=\"feedback\" id=\"labFb\" aria-live=\"polite\"><\/div>\n        <\/div>\n      <\/section>\n\n      <!-- ===================== -->\n      <!-- \u2705 7) PROGRESS -->\n      <!-- ===================== -->\n      <section class=\"view\" data-view=\"progress\" aria-label=\"Progress tracking\">\n        <div class=\"card\">\n          <div class=\"card-h\">\n            <h3>Progress<\/h3>\n            <div class=\"card-actions\">\n              <button class=\"btn mini ghost\" type=\"button\" id=\"progressReset\">Clear progress<\/button>\n            <\/div>\n          <\/div>\n\n          <div class=\"progress-grid\">\n            <div class=\"pbox\">\n              <div class=\"pnum\" id=\"pDone\">0<\/div>\n              <div class=\"muted\">Activities completed<\/div>\n            <\/div>\n            <div class=\"pbox\">\n              <div class=\"pnum\" id=\"pScore\">0%<\/div>\n              <div class=\"muted\">Average score<\/div>\n            <\/div>\n            <div class=\"pbox\">\n              <div class=\"pnum\" id=\"pChecks\">0<\/div>\n              <div class=\"muted\">Safety checks used<\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"note\">\n            Saved in your browser (local storage). Switching browsers\/devices resets progress.\n          <\/div>\n\n          <h4 class=\"h4\">Safety &#038; quality checklist bank<\/h4>\n          <div class=\"bank\" id=\"checksBank\"><\/div>\n        <\/div>\n      <\/section>\n\n    <\/main>\n  <\/section>\n\n  <style>\n    \/* ===== WP-SAFE STYLES (scoped) ===== *\/\n    #icte-polishing *{ box-sizing:border-box; }\n    #icte-polishing{\n      --green:#28a745;\n      --dark:#132018;\n      --card:#ffffff;\n      --muted:#6b7280;\n      --line:#e5e7eb;\n      --shadow:0 8px 24px rgba(17,24,39,.08);\n      --radius:16px;\n      font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n      color:#111827;\n    }\n    #icte-polishing .icte-menu{\n      width:100%;\n      background:var(--green);\n      padding:10px 12px;\n      text-align:center;\n      overflow-x:auto;\n      white-space:nowrap;\n      position:sticky;\n      top:0;\n      z-index:999;\n      box-shadow:0 2px 10px rgba(0,0,0,.12);\n      border-radius:12px;\n      margin-bottom:12px;\n    }\n    #icte-polishing .icte-menu a{\n      display:inline-block;\n      color:#fff;\n      text-decoration:none;\n      font-weight:900;\n      padding:8px 10px;\n      border-radius:999px;\n      margin:0 3px;\n      opacity:.92;\n      transition:.15s;\n    }\n    #icte-polishing .icte-menu a:hover{ opacity:1; background:rgba(255,255,255,.14); }\n    #icte-polishing .icte-menu a.is-current{ background:#fff; color:var(--dark); opacity:1; }\n\n    #icte-polishing .icte-shell{ max-width:1100px; margin:0 auto; }\n    #icte-polishing .icte-hero{\n      display:grid;\n      grid-template-columns: 1.15fr .85fr;\n      gap:14px;\n      background:linear-gradient(135deg,#e9fff0, #ffffff);\n      border:1px solid var(--line);\n      border-radius:var(--radius);\n      padding:16px;\n      box-shadow:var(--shadow);\n      margin-bottom:14px;\n    }\n    @media (max-width: 920px){ #icte-polishing .icte-hero{ grid-template-columns:1fr; } }\n    #icte-polishing h2{ margin:0 0 6px 0; font-size:22px; }\n    #icte-polishing .muted{ color:var(--muted); }\n\n    #icte-polishing .icte-hero__controls{\n      border-left:1px dashed var(--line);\n      padding-left:14px;\n    }\n    @media (max-width: 920px){\n      #icte-polishing .icte-hero__controls{ border-left:none; padding-left:0; border-top:1px dashed var(--line); padding-top:12px; }\n    }\n\n    #icte-polishing .icte-row{ display:flex; gap:8px; flex-wrap:wrap; }\n    #icte-polishing .icte-label{ display:block; font-size:12px; font-weight:900; margin-top:8px; }\n    #icte-polishing .icte-select{\n      width:100%;\n      padding:10px 10px;\n      border:1px solid var(--line);\n      border-radius:12px;\n      background:#fff;\n      outline:none;\n      margin-top:6px;\n    }\n\n    #icte-polishing .icte-pill{\n      display:flex; align-items:center; gap:8px;\n      padding:10px 12px;\n      border:1px solid var(--line);\n      border-radius:999px;\n      background:#fff;\n      margin-bottom:10px;\n      font-weight:900;\n    }\n    #icte-polishing .dot{\n      width:10px; height:10px; border-radius:50%;\n      background:#9ca3af;\n      box-shadow:0 0 0 4px rgba(156,163,175,.18);\n    }\n    #icte-polishing .dot.on{\n      background:#22c55e;\n      box-shadow:0 0 0 4px rgba(34,197,94,.18);\n    }\n\n    #icte-polishing .btn{\n      border:none;\n      padding:10px 12px;\n      border-radius:12px;\n      background:var(--green);\n      color:#fff;\n      font-weight:900;\n      cursor:pointer;\n      transition:.15s;\n    }\n    #icte-polishing .btn:hover{ filter:brightness(.95); transform:translateY(-1px); }\n    #icte-polishing .btn:active{ transform:translateY(0); }\n    #icte-polishing .btn.ghost{\n      background:#fff;\n      color:#111827;\n      border:1px solid var(--line);\n    }\n    #icte-polishing .btn.mini{ padding:8px 10px; border-radius:10px; font-size:13px; }\n    #icte-polishing .icte-small{ font-size:12px; }\n\n    #icte-polishing .card{\n      background:var(--card);\n      border:1px solid var(--line);\n      border-radius:var(--radius);\n      padding:14px;\n      box-shadow:var(--shadow);\n      margin-bottom:14px;\n    }\n    #icte-polishing .card-h{\n      display:flex; gap:10px; align-items:flex-start; justify-content:space-between;\n      border-bottom:1px solid var(--line);\n      padding-bottom:10px;\n      margin-bottom:10px;\n    }\n    #icte-polishing .card-h h3{ margin:0; font-size:18px; }\n    #icte-polishing .card-actions{ display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; }\n\n    #icte-polishing .view{ display:none; }\n    #icte-polishing .view.is-active{ display:block; }\n\n    #icte-polishing .chat{\n      background:#0b1220;\n      color:#e5e7eb;\n      border-radius:14px;\n      padding:12px;\n      min-height:220px;\n      max-height:420px;\n      overflow:auto;\n      border:1px solid rgba(255,255,255,.08);\n    }\n    #icte-polishing .msg{ margin:10px 0; display:flex; gap:10px; align-items:flex-start; }\n    #icte-polishing .who{\n      min-width:90px;\n      font-weight:900;\n      font-size:12px;\n      color:#93c5fd;\n      text-transform:uppercase;\n      letter-spacing:.06em;\n    }\n    #icte-polishing .bubble{\n      flex:1;\n      background:rgba(255,255,255,.06);\n      padding:10px 10px;\n      border-radius:12px;\n      line-height:1.45;\n      border:1px solid rgba(255,255,255,.06);\n      white-space:pre-line;\n    }\n    #icte-polishing .msg.user .who{ color:#86efac; }\n    #icte-polishing .msg.user .bubble{ background:rgba(34,197,94,.10); border-color:rgba(34,197,94,.18); }\n\n    #icte-polishing .chatbar{\n      margin-top:10px;\n      display:flex;\n      gap:8px;\n      align-items:center;\n    }\n    #icte-polishing .input{\n      flex:1;\n      padding:12px 12px;\n      border:1px solid var(--line);\n      border-radius:12px;\n      outline:none;\n    }\n    #icte-polishing .textarea{\n      width:100%;\n      padding:12px;\n      border:1px solid var(--line);\n      border-radius:12px;\n      outline:none;\n      resize:vertical;\n    }\n\n    #icte-polishing .grid2{\n      display:grid;\n      grid-template-columns:1fr 1fr;\n      gap:14px;\n      margin-top:10px;\n    }\n    @media (max-width: 920px){ #icte-polishing .grid2{ grid-template-columns:1fr; } }\n\n    #icte-polishing .stack{ display:flex; flex-direction:column; gap:10px; }\n    #icte-polishing .h4{ margin:0 0 6px 0; font-size:15px; }\n    #icte-polishing .qitem{\n      padding:10px;\n      border:1px solid var(--line);\n      border-radius:14px;\n      background:#fafafa;\n    }\n    #icte-polishing .qtext{ font-weight:900; margin-bottom:8px; }\n\n    #icte-polishing .feedback{\n      margin-top:10px;\n      padding:10px 12px;\n      border-radius:14px;\n      border:1px solid var(--line);\n      background:#f9fafb;\n      font-weight:800;\n      display:none;\n      white-space:pre-line;\n    }\n    #icte-polishing .feedback.ok{ display:block; border-color:rgba(34,197,94,.35); background:#ecfdf5; }\n    #icte-polishing .feedback.bad{ display:block; border-color:rgba(239,68,68,.35); background:#fef2f2; }\n\n    #icte-polishing .note{\n      background:#eff6ff;\n      border:1px solid rgba(59,130,246,.22);\n      padding:10px 12px;\n      border-radius:14px;\n      margin:10px 0;\n    }\n\n    #icte-polishing .reading{\n      border:1px solid var(--line);\n      border-radius:14px;\n      padding:12px;\n      background:#fff;\n      margin-top:10px;\n    }\n    #icte-polishing .reading-title{ font-weight:900; margin-bottom:8px; }\n    #icte-polishing .reading-p{ padding:8px 0; border-top:1px dashed var(--line); }\n    #icte-polishing .reading-p:first-of-type{ border-top:none; }\n\n    #icte-polishing .progress-grid{\n      display:grid;\n      grid-template-columns:repeat(3,1fr);\n      gap:12px;\n      margin-top:10px;\n      margin-bottom:10px;\n    }\n    @media (max-width: 920px){ #icte-polishing .progress-grid{ grid-template-columns:1fr; } }\n    #icte-polishing .pbox{\n      border:1px solid var(--line);\n      border-radius:16px;\n      background:#fff;\n      padding:12px;\n      text-align:center;\n      box-shadow:var(--shadow);\n    }\n    #icte-polishing .pnum{ font-size:28px; font-weight:1000; }\n\n    #icte-polishing .bank{\n      border:1px solid var(--line);\n      border-radius:14px;\n      padding:12px;\n      background:#fff;\n      display:flex;\n      flex-wrap:wrap;\n      gap:8px;\n    }\n    #icte-polishing .tag{\n      border:1px solid var(--line);\n      background:#f9fafb;\n      padding:6px 10px;\n      border-radius:999px;\n      font-weight:900;\n      font-size:13px;\n    }\n\n    #icte-polishing .pre{\n      white-space:pre-wrap;\n      background:#0b1220;\n      color:#e5e7eb;\n      border-radius:12px;\n      padding:12px;\n      border:1px solid rgba(255,255,255,.08);\n      overflow:auto;\n      font-size:13px;\n      line-height:1.45;\n    }\n\n    #icte-polishing .opt{\n      display:flex;\n      gap:10px;\n      align-items:flex-start;\n      padding:8px 10px;\n      border:1px solid var(--line);\n      border-radius:12px;\n      background:#fff;\n    }\n    #icte-polishing .ul{ margin:0; padding-left:18px; }\n    #icte-polishing .ul li{ margin:6px 0; }\n  <\/style>\n\n  <script>\n    (function(){\n      const root = document.getElementById('icte-polishing');\n      if(!root) return;\n\n      \/* =========================\n         Helpers\n      ========================= *\/\n      const qs = (sel, el=root) => el.querySelector(sel);\n      const qsa = (sel, el=root) => Array.from(el.querySelectorAll(sel));\n      const clamp = (n,min,max)=>Math.max(min,Math.min(max,n));\n      const norm = (s)=> (s||\"\").toString().trim();\n      const esc = (s)=> (s||\"\").replace(\/[&<>\"']\/g, m=>({ \"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#039;\" }[m]));\n      const shuffle = (arr)=> arr.map(v=>({v, r:Math.random()})).sort((a,b)=>a.r-b.r).map(o=>o.v);\n\n      \/* =========================\n         Navigation\n      ========================= *\/\n      const navLinks = qsa('.icte-menu a');\n      const views = qsa('.view');\n      function showView(name){\n        views.forEach(v=> v.classList.toggle('is-active', v.getAttribute('data-view')===name));\n        navLinks.forEach(a=> a.classList.toggle('is-current', a.getAttribute('data-view')===name));\n        window.scrollTo({top: root.offsetTop - 10, behavior:'smooth'});\n      }\n      navLinks.forEach(a=>{\n        a.addEventListener('click', (e)=>{\n          e.preventDefault();\n          const v = a.getAttribute('data-view');\n          if(v) showView(v);\n        });\n      });\n\n      \/* =========================\n         Multi-speaker Google Voices (SpeechSynthesis)\n      ========================= *\/\n      const voiceASelect = qs('#voiceA');\n      const voiceBSelect = qs('#voiceB');\n\n      let allVoices = [];\n      let googleVoicesEN = [];\n      let voiceA = null;\n      let voiceB = null;\n\n      function isEnglish(v){\n        const l = (v.lang||\"\").toLowerCase();\n        return l.startsWith(\"en\");\n      }\n      function isGoogle(v){\n        const n = (v.name||\"\").toLowerCase();\n        return n.includes(\"google\");\n      }\n      function looksMaleName(name){\n        const n = (name||\"\").toLowerCase();\n        return n.includes(\"male\") || n.includes(\"david\") || n.includes(\"mark\") || n.includes(\"daniel\");\n      }\n      function looksFemaleName(name){\n        const n = (name||\"\").toLowerCase();\n        return n.includes(\"female\") || n.includes(\"susan\") || n.includes(\"amy\") || n.includes(\"emma\");\n      }\n\n      function pickDefaultVoices(list){\n        \/\/ Try to pick one \"male-ish\" and one \"female-ish\" by name heuristics; fallback to first two distinct.\n        const a = list.find(v=>looksFemaleName(v.name)) || list[0] || null;\n        const b =\n          list.find(v=>v !== a && looksMaleName(v.name)) ||\n          list.find(v=>v !== a) ||\n          a ||\n          null;\n        return {a, b};\n      }\n\n      function loadVoices(){\n        if(!window.speechSynthesis) return;\n        allVoices = speechSynthesis.getVoices() || [];\n        const google = allVoices.filter(v => isEnglish(v) && isGoogle(v));\n        const english = allVoices.filter(v => isEnglish(v));\n        googleVoicesEN = google.length ? google : english;\n\n        const buildSelect = (sel, list) => {\n          sel.innerHTML = \"\";\n          list.forEach((v,i)=>{\n            const opt = document.createElement('option');\n            opt.value = String(i);\n            opt.textContent = `${v.name} (${v.lang})`;\n            sel.appendChild(opt);\n          });\n        };\n\n        buildSelect(voiceASelect, googleVoicesEN);\n        buildSelect(voiceBSelect, googleVoicesEN);\n\n        const picked = pickDefaultVoices(googleVoicesEN);\n        voiceA = picked.a;\n        voiceB = picked.b;\n\n        voiceASelect.value = String(Math.max(0, googleVoicesEN.indexOf(voiceA)));\n        voiceBSelect.value = String(Math.max(0, googleVoicesEN.indexOf(voiceB)));\n\n        voiceASelect.onchange = ()=>{\n          const idx = parseInt(voiceASelect.value,10);\n          voiceA = googleVoicesEN[idx] || voiceA;\n        };\n        voiceBSelect.onchange = ()=>{\n          const idx = parseInt(voiceBSelect.value,10);\n          voiceB = googleVoicesEN[idx] || voiceB;\n        };\n      }\n\n      if(window.speechSynthesis){\n        loadVoices();\n        speechSynthesis.onvoiceschanged = loadVoices;\n      }\n\n      function stopSpeak(){ if(window.speechSynthesis) speechSynthesis.cancel(); }\n\n      function speakAs(role, text, opts){\n        const t = norm(text);\n        if(!t || !window.speechSynthesis) return Promise.resolve();\n        const o = opts || {};\n        const u = new SpeechSynthesisUtterance(t);\n        if(role === \"A\" && voiceA) u.voice = voiceA;\n        if(role === \"B\" && voiceB) u.voice = voiceB;\n        u.rate = o.rate ?? 1.02;\n        u.pitch = o.pitch ?? 1.0;\n        u.volume = o.volume ?? 1.0;\n        return new Promise(resolve=>{\n          u.onend = resolve;\n          u.onerror = resolve;\n          speechSynthesis.speak(u);\n        });\n      }\n\n      async function speakDialogue(lines){\n        stopSpeak();\n        for(const line of lines){\n          await speakAs(line.role, line.text);\n        }\n      }\n\n      \/* =========================\n         Mic Speech Recognition (ASR)\n      ========================= *\/\n      const micDot = qs('#icteMicDot');\n      const micStatus = qs('#icteMicStatus');\n      const btnStartVoice = qs('#icteStartVoice');\n      const btnStopVoice = qs('#icteStopVoice');\n\n      let recognition = null;\n      let listening = false;\n      let lastPromptSpoken = \"\";\n\n      function setMicUI(on){\n        listening = on;\n        micDot.classList.toggle('on', on);\n        micStatus.textContent = on ? \"Mic: Listening\u2026\" : \"Mic: Off\";\n      }\n\n      function initRecognition(){\n        const SR = window.SpeechRecognition || window.webkitSpeechRecognition;\n        if(!SR) return null;\n        const r = new SR();\n        r.lang = 'en-US';\n        r.continuous = true;\n        r.interimResults = false;\n        r.maxAlternatives = 1;\n        return r;\n      }\n\n      function startListening(){\n        if(listening) return;\n        recognition = recognition || initRecognition();\n        if(!recognition){\n          alert(\"Speech Recognition is not available in this browser. Use Chrome\/Edge, or type your answers.\");\n          return;\n        }\n        recognition.onresult = (e)=>{\n          const res = e.results[e.results.length - 1];\n          const transcript = res && res[0] ? res[0].transcript : \"\";\n          handleVoiceTranscript(transcript);\n        };\n        recognition.onerror = ()=> setMicUI(false);\n        recognition.onend = ()=>{ if(listening){ try{ recognition.start(); }catch(_){ } } };\n        setMicUI(true);\n        try{ recognition.start(); }catch(_){ }\n      }\n\n      function stopListening(){\n        setMicUI(false);\n        try{ recognition && recognition.stop(); }catch(_){ }\n      }\n      btnStartVoice.addEventListener('click', startListening);\n      btnStopVoice.addEventListener('click', stopListening);\n\n      \/* =========================\n         Progress (localStorage)\n      ========================= *\/\n      const LS_KEY = \"icte_polishing_progress_v1\";\n      const progress = JSON.parse(localStorage.getItem(LS_KEY) || \"{}\");\n\n      function saveProgress(){ localStorage.setItem(LS_KEY, JSON.stringify(progress)); renderProgress(); }\n      function markDone(key, scorePct){\n        progress[key] = { done:true, score: clamp(scorePct,0,100), ts: Date.now() };\n        saveProgress();\n      }\n      function resetProgress(){ localStorage.removeItem(LS_KEY); location.reload(); }\n      qs('#progressReset').addEventListener('click', resetProgress);\n\n      const checks = [\n        {k:\"preserve_meaning\", label:\"Preserve meaning\"},\n        {k:\"preserve_claim\", label:\"Preserve claim strength\"},\n        {k:\"keep_terms\", label:\"Keep key terms\"},\n        {k:\"keep_citations\", label:\"Keep citations unchanged\"},\n        {k:\"no_new_claims\", label:\"No new claims\"},\n        {k:\"less_wordy\", label:\"Reduce wordiness\"},\n        {k:\"cohesion\", label:\"Improve cohesion\"},\n        {k:\"natural_voice\", label:\"Avoid AI-sounding style\"}\n      ];\n      qs('#checksBank').innerHTML = checks.map(x=>`<span class=\"tag\">${esc(x.label)}<\/span>`).join(\"\");\n\n      function addCheck(k){\n        progress._checks = progress._checks || {};\n        progress._checks[k] = true;\n        saveProgress();\n      }\n\n      function renderProgress(){\n        const items = Object.values(progress).filter(p=>p && p.done);\n        const done = items.length;\n        const avg = done ? Math.round(items.reduce((s,p)=>s+(p.score||0),0)\/done) : 0;\n        qs('#pDone').textContent = String(done);\n        qs('#pScore').textContent = String(avg) + \"%\";\n        qs('#pChecks').textContent = String(Object.keys(progress._checks || {}).length);\n      }\n\n      \/* =========================\n         Instruction TTS map\n      ========================= *\/\n      const SAY = {\n        \"conv-instr\": \"Conversation. Build a polishing prompt step by step: goal, audience, what to preserve, what to change, and safety rules like no fabricated claims or citations.\",\n        \"concepts-instr\": \"Core concepts. Review paraphrasing versus rewriting, redundancy reduction, cohesion improvement, and how to avoid AI-sounding prose.\",\n        \"reading-instr\": \"Reading. Read the text and answer the comprehension questions. Then check your score.\",\n        \"examples-instr\": \"Examples. Compare paraphrase, rewrite, and polish. Notice which changes improve clarity without changing meaning.\",\n        \"list-instr\": \"Listening. Two researchers discuss polishing without changing meaning. Listen and answer the questions.\",\n        \"lab-instr\": \"Polishing lab. Paste a paragraph, choose a goal, select constraints, and generate a safe prompt you can use in any AI tool.\"\n      };\n      qsa('[data-say]').forEach(btn=>{\n        btn.addEventListener('click', async ()=>{\n          const k = btn.getAttribute('data-say');\n          if(SAY[k]) await speakAs(\"A\", SAY[k]);\n        });\n      });\n\n      \/* =========================\n         1) Conversation coach\n      ========================= *\/\n      const convChat = qs('#convChat');\n      const convText = qs('#convText');\n      const convSend = qs('#convSend');\n      const convHear = qs('#convHear');\n      const convReset = qs('#convReset');\n\n      let convStep = 0;\n      const convSteps = [\n        { bot: \"Choose your goal: paraphrase, rewrite, tighten, cohesion, de-AI style, or academic tone. (Type one word.)\",\n          check: (a)=> \/^(paraphrase|rewrite|tighten|cohesion|de-?ai|tone)$\/i.test(a),\n          tips: \"Type: paraphrase \/ rewrite \/ tighten \/ cohesion \/ de-ai \/ tone.\"\n        },\n        { bot: \"What must be preserved? (Pick at least TWO: meaning, claim strength, key terms, citations.)\",\n          check: (a)=> \/(meaning|claim|terms|citations)\/i.test(a) && (a.match(\/meaning|claim|terms|citations\/gi)||[]).length >= 2,\n          tips: \"Example: Preserve meaning and claim strength; keep key terms and citations unchanged.\"\n        },\n        { bot: \"What should be improved? (Pick at least TWO: clarity, concision, cohesion, tone, grammar.)\",\n          check: (a)=> \/(clarity|concision|cohesion|tone|grammar)\/i.test(a) && (a.match(\/clarity|concision|cohesion|tone|grammar\/gi)||[]).length >= 2,\n          tips: \"Example: Improve clarity and cohesion; reduce redundancy; keep tone academic.\"\n        },\n        { bot: \"Add ONE safety rule. Example: Do not add new claims; do not invent citations; keep references unchanged.\",\n          check: (a)=> \/(no new claims|do not add|don't add|do not invent|keep citations|keep references)\/i.test(a),\n          tips: \"Include: do not add new claims OR do not invent citations.\"\n        },\n        { bot: \"Now write a final prompt you could paste into an AI tool (2\u20134 lines).\",\n          check: (a)=> a.length >= 80 && \/(preserve|keep|do not|don't|rewrite|paraphrase|tighten|cohesion|tone)\/i.test(a),\n          tips: \"Write a short prompt with goal + preserve + improve + safety.\"\n        }\n      ];\n\n      function addMsg(who, text){\n        const div = document.createElement('div');\n        div.className = 'msg ' + (who==='You' ? 'user' : 'bot');\n        div.innerHTML = `<div class=\"who\">${esc(who)}<\/div><div class=\"bubble\">${esc(text)}<\/div>`;\n        convChat.appendChild(div);\n        convChat.scrollTop = convChat.scrollHeight;\n      }\n\n      async function botAsk(){\n        const step = convSteps[convStep];\n        if(!step){\n          addMsg(\"Coach\",\"Nice work. Your prompt is safer and more likely to produce a clean academic polish without changing meaning.\");\n          markDone(\"conversation\", 100);\n          await speakAs(\"A\",\"Nice work. Your prompt is safer and more likely to produce a clean academic polish without changing meaning.\");\n          return;\n        }\n        addMsg(\"Coach\", step.bot);\n        lastPromptSpoken = step.bot;\n        await speakAs(\"A\", step.bot);\n      }\n\n      function scoreAnswer(a){\n        const step = convSteps[convStep];\n        const ok = step.check(norm(a));\n        const msg = ok ? \"\u2705 Good. Keep going.\" : \"\u26a0\ufe0f Try again. \" + step.tips;\n        return {ok, msg};\n      }\n\n      async function handleConversationInput(text){\n        const a = norm(text);\n        if(!a) return;\n        addMsg(\"You\", a);\n\n        if(\/meaning\/i.test(a)) addCheck(\"preserve_meaning\");\n        if(\/claim\/i.test(a)) addCheck(\"preserve_claim\");\n        if(\/terms\/i.test(a)) addCheck(\"keep_terms\");\n        if(\/citations|references\/i.test(a)) addCheck(\"keep_citations\");\n        if(\/no new claims|do not add|don't add\/i.test(a)) addCheck(\"no_new_claims\");\n        if(\/wordy|redund|tighten|concision\/i.test(a)) addCheck(\"less_wordy\");\n        if(\/cohesion|transition|flow\/i.test(a)) addCheck(\"cohesion\");\n        if(\/ai-sounding|de-ai|natural\/i.test(a)) addCheck(\"natural_voice\");\n\n        progress._text = (progress._text||\"\") + \" \" + a;\n        saveProgress();\n\n        const {ok, msg} = scoreAnswer(a);\n        addMsg(\"Coach\", msg);\n        await speakAs(\"A\", msg);\n\n        if(ok){ convStep++; setTimeout(()=> botAsk(), 350); }\n        else { setTimeout(()=> speakAs(\"A\",\"Please try again. \" + convSteps[convStep].bot), 350); }\n      }\n\n      convSend.addEventListener('click', ()=> { handleConversationInput(convText.value); convText.value=\"\"; });\n      convText.addEventListener('keydown', (e)=>{\n        if(e.key === \"Enter\"){ e.preventDefault(); handleConversationInput(convText.value); convText.value=\"\"; }\n      });\n      convHear.addEventListener('click', ()=> speakAs(\"A\", lastPromptSpoken || \"No question yet.\"));\n      convReset.addEventListener('click', ()=>{\n        convChat.innerHTML = \"\";\n        convStep = 0;\n        addMsg(\"Coach\",\"Ready. Let\u2019s build a safe polishing prompt.\");\n        botAsk();\n      });\n\n      addMsg(\"Coach\",\"Ready. Let\u2019s build a safe polishing prompt.\");\n      botAsk();\n\n      function activeViewName(){\n        const v = qs('.view.is-active');\n        return v ? v.getAttribute('data-view') : \"conversation\";\n      }\n\n      function handleVoiceTranscript(t){\n        const text = norm(t);\n        if(!text) return;\n\n        const v = activeViewName();\n        if(v === \"conversation\"){ handleConversationInput(text); return; }\n\n        if(v === \"lab\"){\n          const box = qs('#labText');\n          if(box){\n            box.value = (box.value ? (box.value + \"\\n\") : \"\") + text;\n            speakAs(\"A\",\"I heard: \" + text);\n            updateLabPrompt();\n          }\n          return;\n        }\n        speakAs(\"A\",\"I heard: \" + text);\n      }\n\n      \/* =========================\n         Core concepts speak\n      ========================= *\/\n      qs('#conceptsSpeak').addEventListener('click', ()=>{\n        const txt =\n          \"Quick guide. Paraphrasing keeps meaning but changes wording. Rewriting changes structure to improve clarity and cohesion. Reduce redundancy by removing filler phrases and repeated ideas. Improve cohesion with a clear topic sentence, controlled transitions, and clear references. Avoid AI sounding prose by using simple, specific language and removing inflated phrases.\";\n        speakAs(\"A\", txt);\n      });\n\n      \/* =========================\n         Reading TTS\n      ========================= *\/\n      qs('#readTextBtn').addEventListener('click', ()=>{\n        const parts = qsa('#readingText .reading-p').map(p=>p.textContent).join(\" \");\n        speakAs(\"A\", \"Reading. \" + parts);\n      });\n\n      \/* =========================\n         Quiz\n      ========================= *\/\n      const quiz = qs('#quiz');\n      const quizFb = qs('#quizFb');\n\n      const quizItems = [\n        { q:\"1) In the reading, AI is described mainly as\u2026\",\n          ans:\"An editing assistant, not the author\",\n          opts:[\n            \"An editing assistant, not the author\",\n            \"A replacement for researcher judgment\",\n            \"A tool that always verifies citations\",\n            \"A tool that should invent better references\"\n          ]\n        },\n        { q:\"2) Paraphrasing should primarily\u2026\",\n          ans:\"Keep meaning and scope while changing wording\",\n          opts:[\n            \"Add stronger claims to sound more academic\",\n            \"Keep meaning and scope while changing wording\",\n            \"Change citations to newer sources automatically\",\n            \"Remove all technical terms\"\n          ]\n        },\n        { q:\"3) Rewriting is different because it\u2026\",\n          ans:\"Can reorganize sentences to improve logic and cohesion\",\n          opts:[\n            \"Only swaps synonyms\",\n            \"Can reorganize sentences to improve logic and cohesion\",\n            \"Always shortens text to half length\",\n            \"Must remove transitions\"\n          ]\n        },\n        { q:\"4) Which is an example of reducing redundancy?\",\n          ans:\"Change \u201cdue to the fact that\u201d to \u201cbecause\u201d\",\n          opts:[\n            \"Add \u201cmoreover\u201d to every sentence\",\n            \"Change \u201cdue to the fact that\u201d to \u201cbecause\u201d\",\n            \"Repeat the key idea three times for emphasis\",\n            \"Add extra adjectives to sound academic\"\n          ]\n        },\n        { q:\"5) Cohesion mainly helps the reader by\u2026\",\n          ans:\"Making sentences connect into one clear argument\",\n          opts:[\n            \"Making sentences connect into one clear argument\",\n            \"Adding more difficult vocabulary\",\n            \"Increasing paragraph length\",\n            \"Replacing evidence with general statements\"\n          ]\n        },\n        { q:\"6) A safe practice with citations is to\u2026\",\n          ans:\"Keep references unchanged unless you verify them yourself\",\n          opts:[\n            \"Ask AI to invent missing citations\",\n            \"Keep references unchanged unless you verify them yourself\",\n            \"Replace all citations with \u2018et al.\u2019\",\n            \"Remove citations to avoid checking\"\n          ]\n        }\n      ];\n\n      function renderQuiz(){\n        quiz.innerHTML = quizItems.map((it)=>{\n          const options = ['<option value=\"\">Choose\u2026<\/option>']\n            .concat(it.opts.map(o=>`<option value=\"${esc(o)}\">${esc(o)}<\/option>`))\n            .join(\"\");\n          return `\n            <div class=\"qitem\">\n              <div class=\"qtext\">${esc(it.q)}<\/div>\n              <select class=\"icte-select\" data-ans=\"${esc(it.ans)}\">${options}<\/select>\n            <\/div>\n          `;\n        }).join(\"\");\n      }\n      renderQuiz();\n\n      qs('#quizCheck').addEventListener('click', ()=>{\n        const sels = qsa('#quiz select');\n        let correct = 0;\n        sels.forEach(s=>{\n          const ok = s.value === s.getAttribute('data-ans');\n          s.style.borderColor = ok ? \"rgba(34,197,94,.6)\" : \"rgba(239,68,68,.6)\";\n          if(ok) correct++;\n        });\n        const pct = Math.round((correct \/ sels.length) * 100);\n        quizFb.className = \"feedback \" + (pct>=70 ? \"ok\":\"bad\");\n        quizFb.textContent = `Score: ${correct}\/${sels.length} (${pct}%).`;\n        markDone(\"reading_quiz\", pct);\n      });\n\n      \/* =========================\n         Examples content\n      ========================= *\/\n      const exOriginal = qs('#exOriginal');\n      const exParaphrase = qs('#exParaphrase');\n      const exRewrite = qs('#exRewrite');\n      const exPolish = qs('#exPolish');\n      const exDeAI = qs('#exDeAI');\n      const exPrompts = qs('#exPrompts');\n\n      exOriginal.textContent =\n`Many students use AI tools for their writing and it is very useful. However, it is also problematic because it can create many issues. In this study, we try to investigate the impact of AI chatbot usage on speaking performance and it is important to note that the findings are significant for teachers and students in the classroom context.`;\n\n      exParaphrase.textContent =\n`Many students use AI tools to support writing, and these tools can be helpful. At the same time, they may cause problems. This study examines how using an AI chatbot influences speaking performance, and the results may matter for both teachers and students in classroom settings.`;\n\n      exRewrite.textContent =\n`AI tools are increasingly used by students to support writing, but their use can also introduce challenges. This study investigates whether AI chatbot use affects speaking performance. The findings are intended to inform classroom practice for teachers and students.`;\n\n      exPolish.textContent =\n`Students increasingly use AI tools to support writing, yet their use can also introduce challenges that require careful guidance. This study examines whether AI chatbot use influences speaking performance and discusses implications for classroom practice.`;\n\n      exDeAI.textContent =\n`AI-sounding:\n\u201cIt is important to note that the findings are significant in the context of the classroom setting.\u201d\n\nMore natural:\n\u201cThese findings have practical implications for classroom teaching.\u201d\n\nAI-sounding:\n\u201cThis study aims to investigate the impact of\u2026\u201d\n\nMore natural:\n\u201cThis study examines whether\u2026\u201d`;\n\n      exPrompts.textContent =\n`PROMPT 1 \u2014 Paraphrase (source-based):\nParaphrase the text below in academic English. Preserve meaning and claim strength. Keep key terms and citations unchanged. Do not add new claims. Provide:\n(1) a paraphrase, (2) a brief note explaining what you changed and why.\n\nPROMPT 2 \u2014 Rewrite (improve logic + cohesion):\nRewrite the paragraph for clarity and cohesion. Keep meaning, claim strength, and terminology. Reduce redundancy and wordiness. Keep citations unchanged. Provide two versions:\nVersion A: very concise (1\u20132 sentences)\nVersion B: slightly more detailed (3\u20134 sentences)\n\nPROMPT 3 \u2014 De-AI style (natural academic voice):\nEdit the paragraph to sound natural and specific. Remove inflated phrases and generic intensifiers. Prefer concrete verbs over abstract nouns. Do not add new content or citations. Provide:\n(1) revised paragraph, (2) list of 5 key edits (before \u2192 after).`;\n\n      qs('#examplesSpeak').addEventListener('click', ()=>{\n        const txt = [\n          \"Examples. Original draft.\",\n          exOriginal.textContent,\n          \"Paraphrase version.\",\n          exParaphrase.textContent,\n          \"Rewrite version.\",\n          exRewrite.textContent,\n          \"Polished version.\",\n          exPolish.textContent\n        ].join(\" \");\n        speakAs(\"A\", txt);\n      });\n\n      \/* =========================\n         Listening\n      ========================= *\/\n      const listenFb = qs('#listenFb');\n      const listenQ = qs('#listenQ');\n\n      const dialogue = [\n        {role:\"A\", text:\"I asked AI to polish my paragraph, but I\u2019m worried it changed the meaning.\"},\n        {role:\"B\", text:\"That\u2019s why you must specify constraints: preserve meaning, keep claim strength, and keep citations unchanged.\"},\n        {role:\"A\", text:\"When should I paraphrase instead of rewrite?\"},\n        {role:\"B\", text:\"Paraphrase when you must keep the same scope and meaning, especially for source-based writing. Rewrite when your own draft needs better flow and cohesion.\"},\n        {role:\"A\", text:\"My supervisor said my writing sounds like AI. What does that mean?\"},\n        {role:\"B\", text:\"Usually it means inflated phrases and generic claims. Ask for a more natural academic voice, fewer fillers, and more specific verbs.\"},\n        {role:\"A\", text:\"So the safest workflow is AI as editor, then I revise and verify.\"},\n        {role:\"B\", text:\"Exactly. You remain responsible for accuracy, references, and final style.\"}\n      ];\n\n      const listenItems = [\n        {q:\"1) What is the key protection against meaning changes?\", ans:\"Specify constraints to preserve meaning and claim strength\"},\n        {q:\"2) Paraphrasing is best for\u2026\", ans:\"Source-based writing where scope must stay the same\"},\n        {q:\"3) Rewriting is best for\u2026\", ans:\"Improving flow and cohesion in your own draft\"},\n        {q:\"4) \u201cAI-sounding\u201d style often includes\u2026\", ans:\"Inflated phrases and generic claims\"}\n      ];\n\n      function renderListenQ(){\n        const optsMap = {\n          \"Specify constraints to preserve meaning and claim strength\":[\n            \"Specify constraints to preserve meaning and claim strength\",\n            \"Add more complex vocabulary\",\n            \"Remove all citations\"\n          ],\n          \"Source-based writing where scope must stay the same\":[\n            \"Source-based writing where scope must stay the same\",\n            \"Any time you want stronger claims\",\n            \"Only when you need longer paragraphs\"\n          ],\n          \"Improving flow and cohesion in your own draft\":[\n            \"Improving flow and cohesion in your own draft\",\n            \"Changing the topic of the paragraph\",\n            \"Inventing new evidence\"\n          ],\n          \"Inflated phrases and generic claims\":[\n            \"Inflated phrases and generic claims\",\n            \"More specific verbs and concrete nouns\",\n            \"Clear topic sentences\"\n          ]\n        };\n\n        listenQ.innerHTML = listenItems.map((it)=>{\n          const options = ['<option value=\"\">Choose\u2026<\/option>']\n            .concat((optsMap[it.ans]||[it.ans]).map(o=>`<option value=\"${esc(o)}\">${esc(o)}<\/option>`)).join(\"\");\n          return `\n            <div class=\"qitem\">\n              <div class=\"qtext\">${esc(it.q)}<\/div>\n              <select class=\"icte-select\" data-ans=\"${esc(it.ans)}\">${options}<\/select>\n            <\/div>\n          `;\n        }).join(\"\");\n      }\n      renderListenQ();\n\n      qs('#listenPlay').addEventListener('click', async ()=>{\n        if(googleVoicesEN.length >= 2 && voiceA === voiceB){\n          voiceB = googleVoicesEN.find(v => v !== voiceA) || voiceB;\n          voiceBSelect.value = String(googleVoicesEN.indexOf(voiceB));\n        }\n        await speakDialogue(dialogue);\n      });\n      qs('#listenStop').addEventListener('click', stopSpeak);\n\n      qs('#listenCheck').addEventListener('click', ()=>{\n        const sels = qsa('#listenQ select');\n        let correct = 0;\n        sels.forEach(s=>{\n          const ok = s.value === s.getAttribute('data-ans');\n          s.style.borderColor = ok ? \"rgba(34,197,94,.6)\" : \"rgba(239,68,68,.6)\";\n          if(ok) correct++;\n        });\n        const pct = Math.round((correct \/ sels.length) * 100);\n        listenFb.className = \"feedback \" + (pct>=70 ? \"ok\":\"bad\");\n        listenFb.textContent = `Score: ${correct}\/${sels.length} (${pct}%).`;\n        markDone(\"listening\", pct);\n      });\n\n      \/* =========================\n         Polishing Lab\n      ========================= *\/\n      const labText = qs('#labText');\n      const labGoal = qs('#labGoal');\n      const labLevel = qs('#labLevel');\n      const labPrompt = qs('#labPrompt');\n      const labFb = qs('#labFb');\n\n      const labConstraintItems = [\n        {id:\"c_meaning\", label:\"Preserve meaning (no new content)\", checkKey:\"preserve_meaning\", on:true},\n        {id:\"c_claim\", label:\"Preserve claim strength (no exaggeration)\", checkKey:\"preserve_claim\", on:true},\n        {id:\"c_terms\", label:\"Keep key terms\/constructs unchanged\", checkKey:\"keep_terms\", on:true},\n        {id:\"c_cite\", label:\"Keep citations\/references unchanged\", checkKey:\"keep_citations\", on:true},\n        {id:\"c_nonew\", label:\"Do not add new claims or evidence\", checkKey:\"no_new_claims\", on:true},\n        {id:\"c_tight\", label:\"Reduce wordiness and redundancy\", checkKey:\"less_wordy\", on:false},\n        {id:\"c_cohesion\", label:\"Improve cohesion (topic sentence + transitions)\", checkKey:\"cohesion\", on:false},\n        {id:\"c_deai\", label:\"Avoid AI-sounding style (natural academic voice)\", checkKey:\"natural_voice\", on:false}\n      ];\n\n      const labConstraintsBox = qs('#labConstraints');\n      labConstraintsBox.innerHTML = labConstraintItems.map(x=>`\n        <label class=\"opt\">\n          <input type=\"checkbox\" id=\"${esc(x.id)}\" ${x.on ? \"checked\":\"\"} \/>\n          <span><b>${esc(x.label)}<\/b><\/span>\n        <\/label>\n      `).join(\"\");\n\n      function goalInstructions(goal){\n        switch(goal){\n          case \"paraphrase\":\n            return \"Paraphrase the paragraph in academic English. Keep the same meaning and scope. Do not change claim strength.\";\n          case \"rewrite\":\n            return \"Rewrite the paragraph to improve logic, clarity, and flow. You may restructure sentences, but preserve meaning.\";\n          case \"tighten\":\n            return \"Tighten the paragraph by removing redundancy and wordiness while preserving meaning and key terms.\";\n          case \"cohesion\":\n            return \"Improve cohesion: add a clearer topic sentence, strengthen transitions sparingly, and clarify references (this\/it\/they).\";\n          case \"deai\":\n            return \"Edit to avoid AI-sounding prose: remove inflated phrases, avoid generic intensifiers, prefer specific verbs and concrete nouns.\";\n          case \"tone\":\n            return \"Adjust tone to academic: formal but readable, precise, and cautious where appropriate (no inflated claims).\";\n          default:\n            return \"Polish the paragraph for clarity and academic tone.\";\n        }\n      }\n\n      function selectedConstraintsText(){\n        const selected = labConstraintItems.filter(x => qs(\"#\"+x.id).checked);\n        selected.forEach(x => addCheck(x.checkKey));\n        const lines = selected.map(x => \"- \" + x.label);\n        return lines.length ? lines.join(\"\\n\") : \"- (No constraints selected)\";\n      }\n\n      function levelHint(level){\n        if(level===\"undergrad\") return \"Audience: undergraduate academic writing (clear, direct, minimal jargon).\";\n        if(level===\"phd\") return \"Audience: PhD-level academic writing (precise, cautious claims, stronger cohesion).\";\n        return \"Audience: master\u2019s-level academic writing (formal, readable, balanced).\";\n      }\n\n      function updateLabPrompt(){\n        const text = norm(labText.value) || \"[PASTE YOUR PARAGRAPH HERE]\";\n        const goal = labGoal.value;\n        const lvl = labLevel.value;\n\n        const prompt =\n`ROLE: You are an academic writing editor.\n\nTASK:\n${goalInstructions(goal)}\n\nCONTEXT:\n${levelHint(lvl)}\n\nCONSTRAINTS (must follow):\n${selectedConstraintsText()}\n\nOUTPUT (use this structure):\n1) Revised paragraph\n2) Bullet list of key edits (5\u20138 items, \u201cbefore \u2192 after\u201d)\n3) One-line note: what you did NOT change (meaning\/claims\/citations)\n\nTEXT TO EDIT:\n${text}`;\n\n        labPrompt.textContent = prompt;\n      }\n\n      function labSelfScore(){\n        const t = norm(labText.value);\n        const selected = labConstraintItems.filter(x => qs(\"#\"+x.id).checked).length;\n        const hasText = t.length >= 40;\n        const hasCore = qs(\"#c_meaning\").checked && qs(\"#c_claim\").checked && qs(\"#c_cite\").checked;\n        const pct = Math.round(((hasText?1:0) + (hasCore?1:0) + (selected>=4?1:0)) \/ 3 * 100);\n\n        labFb.className = \"feedback \" + (pct>=70 ? \"ok\":\"bad\");\n        labFb.textContent =\n          `Self-check: ${pct}%\\n` +\n          `- Text pasted: ${hasText ? \"Yes\" : \"No\"}\\n` +\n          `- Core safeguards (meaning + claim + citations): ${hasCore ? \"Yes\" : \"No\"}\\n` +\n          `- Constraints selected (>=4): ${selected>=4 ? \"Yes\" : \"No\"}`;\n\n        markDone(\"lab\", pct);\n      }\n\n      qs('#labBuild').addEventListener('click', updateLabPrompt);\n      qs('#labScore').addEventListener('click', labSelfScore);\n\n      qsa('#labConstraints input[type=\"checkbox\"]').forEach(cb => cb.addEventListener('change', updateLabPrompt));\n      labGoal.addEventListener('change', updateLabPrompt);\n      labLevel.addEventListener('change', updateLabPrompt);\n      labText.addEventListener('input', updateLabPrompt);\n\n      qs('#labCopy').addEventListener('click', async ()=>{\n        const txt = labPrompt.textContent || \"\";\n        if(!txt.trim()){\n          labFb.className = \"feedback bad\";\n          labFb.textContent = \"\u26a0\ufe0f Generate the prompt first.\";\n          return;\n        }\n        try{\n          await navigator.clipboard.writeText(txt);\n          labFb.className = \"feedback ok\";\n          labFb.textContent = \"\u2705 Copied to clipboard.\";\n        }catch(_){\n          labFb.className = \"feedback bad\";\n          labFb.textContent = \"\u26a0\ufe0f Clipboard blocked. Copy manually from the box.\";\n        }\n      });\n\n      \/\/ Init lab prompt\n      updateLabPrompt();\n\n      \/* =========================\n         Final init\n      ========================= *\/\n      renderProgress();\n\n    })();\n  <\/script>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Conversation Core Concepts Reading Examples Listening Polishing Lab Progress AI for Language Polishing Learn to use AI for paraphrasing vs.<\/p>\n","protected":false},"author":1,"featured_media":748,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_layout":"default_layout","footnotes":""},"categories":[53,45],"tags":[],"class_list":["post-747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-basics","category-ai-for-teachers"],"_links":{"self":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/747","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=747"}],"version-history":[{"count":2,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/747\/revisions"}],"predecessor-version":[{"id":759,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/posts\/747\/revisions\/759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media\/748"}],"wp:attachment":[{"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/media?parent=747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/categories?post=747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i-cte.org\/robot\/wp-json\/wp\/v2\/tags?post=747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}