{"id":5534,"date":"2026-07-01T20:13:42","date_gmt":"2026-07-01T20:13:42","guid":{"rendered":"https:\/\/allenglish4u.com\/complete-ket-unit-14-rw\/"},"modified":"2026-07-05T02:43:08","modified_gmt":"2026-07-05T02:43:08","slug":"complete-ket-unit-14-rw","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/complete-ket-unit-14-rw\/","title":{"rendered":"Complete KET \u2014 Unit 14 \u00b7 Reading &#038; Writing"},"content":{"rendered":"\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Fraunces:opsz,wght@9..144,700&display=swap');\n\n\/* escape WP wrapper *\/\n.entry-content,.wp-block-post-content,.is-layout-constrained{max-width:none !important;width:auto !important;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important;}\n.wp-block-post-title{display:none !important;}\n\n:root{\n  --accent-1:#F97316;--accent-2:#F43F5E;--gold:#F9C74F;--green:#10B981;--red:#EF4444;\n  --light-1:#FFF7ED;--light-2:#FFFBF5;--white:#FFFFFF;--text:#0F172A;--muted:#475569;--subtle:#64748B;\n  --border:#E2E8F0;--dark-1:#1B0F02;--dark-2:#2D1A06;--r-10:10px;--r-16:16px;--r-22:22px;\n  --sh-card:0 2px 8px rgba(0,0,0,.06);--sh-lg:0 12px 40px rgba(0,0,0,.12);\n}\n*{margin:0;padding:0;box-sizing:border-box}\nhtml{scroll-behavior:smooth}\nbody{font-family:'Plus Jakarta Sans',system-ui,sans-serif;color:var(--text);background:var(--light-2);-webkit-font-smoothing:antialiased;overflow-x:hidden;}\n.serif{font-family:'Fraunces',Georgia,serif;font-weight:700;letter-spacing:-.01em}\n.wrap{max-width:1080px;margin:0 auto;padding:0 24px}\na{color:inherit;text-decoration:none}\nbutton{font-family:inherit;cursor:pointer;border:none;background:none}\n\n\/* HEADER *\/\n.header{position:fixed;top:0;left:0;right:0;z-index:100;transition:background .28s ease,box-shadow .28s ease;border-bottom:1px solid transparent;}\n.header.solid{background:rgba(255,255,255,.92);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid var(--border);box-shadow:0 1px 0 rgba(15,23,42,.02);}\n.header-inner{display:flex;align-items:center;gap:28px;height:72px;max-width:1200px;margin:0 auto;padding:0 24px}\n.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}\n.brand img{width:40px;height:40px;border-radius:11px;object-fit:cover;box-shadow:var(--sh-card)}\n.brand-name{font-weight:800;font-size:18px;letter-spacing:-.02em;color:#fff;transition:color .28s ease}\n.header.solid .brand-name{color:var(--text)}\n.nav{display:flex;align-items:center;gap:4px;margin-left:8px}\n.nav a{position:relative;padding:9px 13px;font-size:14.5px;font-weight:600;color:rgba(255,255,255,.82);border-radius:var(--r-10);transition:color .16s ease,background .16s ease;}\n.nav a:hover{color:#fff;background:rgba(255,255,255,.08)}\n.header.solid .nav a{color:var(--muted)}\n.header.solid .nav a:hover{color:var(--text);background:var(--light-1)}\n.header-right{margin-left:auto;display:flex;align-items:center;gap:10px}\n.btn-back{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;font-weight:700;font-size:14px;background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.22);transition:background .16s ease}\n.btn-back:hover{background:rgba(255,255,255,.22)}\n.header.solid .btn-back{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.hamburger{display:none;width:40px;height:40px;border-radius:50%;color:#fff;align-items:center;justify-content:center}\n.header.solid .hamburger{color:var(--text)}\n\n\/* HERO *\/\n.hero{position:relative;min-height:360px;padding:120px 0 56px;background:linear-gradient(135deg,#FB923C 0%,#F43F5E 55%,#7C2D12 100%);color:#fff;overflow:hidden;}\n.hero::before{content:\"\";position:absolute;inset:0;background-image:radial-gradient(circle at 20% 30%,rgba(255,255,255,.15) 0%,transparent 50%),radial-gradient(circle at 80% 70%,rgba(255,255,255,.10) 0%,transparent 50%);pointer-events:none}\n.hero .wrap{position:relative;z-index:1}\n.kicker{display:inline-block;font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:700;opacity:.92;margin-bottom:14px}\n.hero h1{font-size:clamp(34px,5vw,52px);line-height:1.05;margin-bottom:14px}\n.hero h1 span{font-style:italic;color:var(--gold)}\n.hero p.sub{font-size:17px;line-height:1.6;max-width:680px;opacity:.95;margin-bottom:22px}\n.hero-meta{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:24px}\n.meta-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;background:rgba(255,255,255,.18);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.24);font-size:13px;font-weight:600}\n.meta-pill .dot{width:6px;height:6px;border-radius:50%;background:var(--gold)}\n.cta-row{display:flex;gap:12px;flex-wrap:wrap}\n.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:15px;box-shadow:0 10px 30px rgba(0,0,0,.2);transition:transform .16s ease}\n.btn-primary:hover{transform:translateY(-2px)}\n.btn-ghost{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:rgba(255,255,255,.12);color:#fff;font-weight:700;font-size:15px;border:1px solid rgba(255,255,255,.32);transition:background .16s ease}\n.btn-ghost:hover{background:rgba(255,255,255,.22)}\n\n\/* SCORE BAR *\/\n.score-bar{position:sticky;top:72px;z-index:50;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border-bottom:1px solid var(--border);padding:14px 0;}\n.sb-inner{display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n.sb-prog{flex:1;min-width:200px}\n.sb-prog-bar{height:8px;background:var(--light-1);border-radius:999px;overflow:hidden}\n.sb-prog-fill{height:100%;background:linear-gradient(90deg,var(--accent-1),var(--accent-2));border-radius:999px;transition:width .3s ease;width:0}\n.sb-prog-label{font-size:12px;color:var(--muted);margin-top:5px;font-weight:600}\n.sb-score{display:flex;align-items:center;gap:10px;font-weight:700;font-size:14.5px;color:var(--text)}\n.sb-score b{font-size:18px;color:var(--accent-1)}\n.btn-submit{display:inline-flex;align-items:center;gap:7px;padding:10px 18px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:14px;box-shadow:0 6px 18px rgba(249,115,22,.32);transition:transform .15s ease,opacity .15s ease}\n.btn-submit:hover{transform:translateY(-1px)}\n.btn-reset{padding:10px 16px;border-radius:999px;background:#fff;color:var(--muted);font-weight:600;font-size:13px;border:1px solid var(--border);transition:background .15s ease}\n.btn-reset:hover{background:var(--light-1);color:var(--text)}\n\n\/* PARTS *\/\n.part-section{padding:48px 0;border-bottom:1px solid var(--border)}\n.part-section:nth-of-type(even){background:#fff}\n.part-head{display:flex;align-items:flex-start;gap:18px;margin-bottom:24px}\n.part-num{flex-shrink:0;width:60px;height:60px;border-radius:18px;background:linear-gradient(135deg,var(--accent-1),var(--accent-2));color:#fff;display:grid;place-items:center;font-family:'Fraunces',serif;font-weight:700;font-size:24px;box-shadow:0 8px 22px rgba(249,115,22,.3);}\n.part-head-text h2{font-size:26px;line-height:1.15;margin-bottom:6px}\n.part-head-text .qrange{display:inline-block;font-size:12.5px;font-weight:700;color:var(--accent-1);background:var(--light-1);padding:4px 10px;border-radius:999px;letter-spacing:.04em;margin-bottom:8px}\n.part-head-text p{color:var(--muted);font-size:15px;line-height:1.55;max-width:740px}\n\n\/* READING PASSAGE (cloze with gap numbers) *\/\n.passage{background:#fff;border:1px solid var(--border);border-radius:18px;padding:24px 26px;margin:8px 0 22px;font-size:16px;line-height:2;color:var(--text);box-shadow:var(--sh-card);position:relative;overflow:hidden}\n.passage h3{font-family:'Fraunces',serif;font-size:24px;color:var(--accent-2);margin-bottom:12px;text-align:center}\n.passage p{margin-bottom:12px}\n.gap{display:inline-block;min-width:78px;border-bottom:2px dashed var(--accent-1);text-align:center;font-weight:800;color:var(--accent-1);padding:0 6px}\n.gap-num{font-size:11px;font-weight:800;color:var(--accent-1);vertical-align:super}\n.cl-ex{color:var(--accent-2);font-weight:800;border-bottom:2px solid var(--accent-1);padding:0 3px}\n\n\/* EMAIL card *\/\n.email-card{background:#fff;border:1px solid var(--border);border-radius:18px;padding:0;margin:8px 0 22px;box-shadow:var(--sh-card);overflow:hidden}\n.email-head{background:linear-gradient(100deg,var(--light-1),#fff);border-bottom:1px solid var(--border);padding:12px 22px;font-weight:700;font-size:14px;color:var(--accent-2);display:flex;align-items:center;gap:9px}\n.email-body{padding:20px 24px;font-size:16px;line-height:2.05;color:var(--text)}\n.email-body p{margin-bottom:12px}\n\n\/* INPUT BLANK (open cloze) *\/\n.input-blank{display:inline-block;min-width:96px;border:none;border-bottom:2px solid var(--accent-1);background:#FFF7ED;font-family:inherit;font-size:15px;font-weight:700;color:var(--accent-2);text-align:center;padding:2px 6px;margin:0 2px;border-radius:6px 6px 0 0;outline:none;transition:background .15s ease,border-color .15s ease}\n.input-blank:focus{background:#fff;border-color:var(--accent-2);box-shadow:0 2px 8px rgba(244,63,94,.15)}\n.input-blank.correct{background:rgba(16,185,129,.14);border-color:var(--green);color:#065F46}\n.input-blank.wrong{background:rgba(239,68,68,.10);border-color:var(--red);color:#991B1B}\n.blank-num{font-size:11px;font-weight:800;color:var(--accent-1);vertical-align:super}\n.blank-wrap{display:inline-flex;flex-direction:column;align-items:center;vertical-align:middle}\n.blank-ans{display:none;font-size:11px;font-weight:800;color:var(--green);margin-top:2px}\n.blank-ans.show{display:block}\n\n\/* questions list *\/\n.q-list{display:flex;flex-direction:column;gap:16px;margin-top:8px}\n.q-item{background:#fff;border:1px solid var(--border);border-radius:16px;padding:18px 20px;display:flex;flex-direction:column;gap:12px;transition:border-color .2s ease,box-shadow .2s ease;}\n.q-item.correct{border-color:var(--green);box-shadow:0 0 0 3px rgba(16,185,129,.12)}\n.q-item.wrong{border-color:var(--red);box-shadow:0 0 0 3px rgba(239,68,68,.12)}\n.q-text{flex:1;font-size:15.5px;line-height:1.55;color:var(--text);display:flex;gap:10px;align-items:flex-start}\n.q-text b.qn{color:var(--accent-1);font-weight:800}\n.q-opts{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;margin-top:2px}\n.opt{display:inline-flex;align-items:flex-start;gap:9px;padding:9px 14px;border-radius:10px;background:#F8FAFF;border:1.5px solid var(--border);font-weight:600;font-size:14px;color:var(--text);cursor:pointer;transition:all .15s ease;user-select:none;line-height:1.45;min-width:150px}\n.opt:hover{background:var(--light-1);border-color:var(--accent-1)}\n.opt input{display:none}\n.opt .opt-letter{flex-shrink:0;font-weight:800;color:var(--accent-1);background:#fff;width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:12.5px;border:1px solid var(--border)}\n.opt.selected{background:linear-gradient(100deg,rgba(249,115,22,.12),rgba(244,63,94,.12));border-color:var(--accent-1)}\n.opt.selected .opt-letter{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.opt.correct-opt{background:rgba(16,185,129,.12) !important;border-color:var(--green) !important}\n.opt.correct-opt .opt-letter{background:var(--green) !important;color:#fff !important;border-color:transparent !important}\n.opt.wrong-opt{background:rgba(239,68,68,.10) !important;border-color:var(--red) !important}\n.opt.wrong-opt .opt-letter{background:var(--red) !important;color:#fff !important;border-color:transparent !important}\n.feedback{font-size:13px;font-weight:600;display:none;padding:8px 12px;border-radius:8px;margin-top:4px}\n.q-item.answered .feedback{display:block}\n.q-item.correct .feedback{background:rgba(16,185,129,.12);color:#065F46}\n.q-item.wrong .feedback{background:rgba(239,68,68,.10);color:#991B1B}\n\n\/* WRITING *\/\n.writing-card{background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:22px;margin-top:18px}\n.prompt-box{background:var(--light-1);border-left:4px solid var(--accent-1);padding:14px 18px;border-radius:0 12px 12px 0;margin-bottom:18px;font-size:15px;line-height:1.6}\n.prompt-box ul{margin:10px 0 4px 22px}\n.prompt-box li{margin-bottom:4px}\n.writing-area{width:100%;min-height:150px;padding:14px;font-family:inherit;font-size:15px;line-height:1.55;border:2px solid var(--border);border-radius:12px;background:#FAFBFC;color:var(--text);outline:none;resize:vertical;transition:border-color .2s ease}\n.writing-area:focus{border-color:var(--accent-1);background:#fff}\n.wc-counter{display:flex;justify-content:space-between;margin-top:8px;font-size:13px;color:var(--muted);font-weight:600}\n.wc-counter.ok{color:var(--green)}\n.sample-toggle{margin-top:14px;display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:13.5px;border:none;cursor:pointer}\n.sample-box{display:none;margin-top:14px;padding:14px 18px;background:#FEF3C7;border-left:4px solid var(--gold);border-radius:0 12px 12px 0;font-size:14.5px;line-height:1.6}\n.sample-box.show{display:block}\n.sample-box h5{font-family:'Fraunces',serif;font-size:16px;margin-bottom:10px;color:#92400E}\n\n\/* SHOW ANSWER *\/\n.show-ans-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:8px;background:rgba(249,115,22,.10);color:var(--accent-1);font-weight:700;font-size:12px;border:1px solid rgba(249,115,22,.30);cursor:pointer;transition:all .15s ease;font-family:inherit;align-self:flex-start;margin-top:4px;letter-spacing:.02em;}\n.show-ans-btn:hover{background:rgba(249,115,22,.18);border-color:var(--accent-1)}\n.show-ans-btn[disabled]{opacity:.45;cursor:not-allowed}\n.reveal-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}\n\n\/* RESULTS BANNER *\/\n.results-banner{display:none;margin:32px auto;padding:30px;border-radius:22px;background:linear-gradient(135deg,#FB923C,#F43F5E);color:#fff;text-align:center;max-width:720px;box-shadow:0 16px 50px rgba(249,115,22,.3);}\n.results-banner.show{display:block}\n.results-banner h3{font-size:30px;font-family:'Fraunces',serif;margin-bottom:10px}\n.results-banner .score-big{font-size:64px;font-weight:800;line-height:1;margin:14px 0;font-family:'Fraunces',serif}\n.results-banner p{opacity:.95;font-size:15px}\n\n\/* FOOTER *\/\n.footer{background:var(--dark-1);color:#9CA3AF;padding:36px 0;text-align:center;font-size:13.5px}\n.footer a{color:var(--gold);font-weight:600}\n\n\/* MOBILE *\/\n@media (max-width:820px){\n  .nav{display:none}.hamburger{display:flex}.hero{padding:110px 0 50px}\n  .part-head{flex-direction:column;gap:12px}.part-num{width:50px;height:50px;font-size:22px}\n  .sb-inner{gap:10px}.sb-prog{order:3;flex:1 1 100%}\n}\n@media (max-width:640px){.opt{min-width:100%}}\n\n\/* drawer *\/\n.drawer{position:fixed;inset:0;background:rgba(15,23,42,.65);z-index:200;display:none;align-items:flex-start;justify-content:flex-end}\n.drawer.open{display:flex}\n.drawer-panel{width:280px;background:#fff;height:100%;padding:24px;display:flex;flex-direction:column;gap:8px}\n.drawer-panel a{padding:12px 14px;border-radius:10px;font-weight:600;color:var(--text)}\n.drawer-panel a:hover{background:var(--light-1)}\n.drawer-close{align-self:flex-end;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:var(--muted)}\n\n\/* Submit panel *\/\n.submit-panel{margin:40px auto 24px;background:linear-gradient(135deg,#fff,var(--light-1));border:1.5px solid var(--border);padding:30px;border-radius:22px;text-align:center;max-width:720px;box-shadow:0 4px 20px rgba(0,0,0,.06)}\n.submit-panel h3{font-family:'Fraunces',serif;font-size:24px;margin-bottom:8px;color:var(--text)}\n.submit-panel p.intro{color:var(--muted);margin-bottom:18px;font-size:14.5px}\n.submit-panel .sp-buttons{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}\n.btn-submit-big{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:800;font-size:16px;box-shadow:0 10px 26px rgba(249,115,22,.35);cursor:pointer;transition:transform .15s ease}\n.btn-submit-big:hover{transform:translateY(-2px)}\n.btn-reset-big{padding:14px 24px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:14.5px;border:1.5px solid var(--border);cursor:pointer}\n.btn-reset-big:hover{background:var(--light-1)}\n<\/style>\n\n<!-- HEADER -->\n<header class=\"header\" id=\"hdr\">\n  <div class=\"header-inner\">\n    <a href=\"https:\/\/allenglish4u.com\" class=\"brand\">\n      <img decoding=\"async\" src=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Transparent-background-MacBook-Pro-cua-Hang.png\" alt=\"AE4U\">\n      <span class=\"brand-name\">All English 4U<\/span>\n    <\/a>\n    <nav class=\"nav\">\n      <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"active\">Cambridge<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n      <\/nav>\n    <div class=\"header-right\">\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-back\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M19 12H5M11 18l-6-6 6-6\"\/><\/svg>\n        Back\n      <\/a>\n      <button class=\"hamburger\" id=\"hamb\" aria-label=\"Menu\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M3 6h18M3 12h18M3 18h18\"\/><\/svg>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<div class=\"drawer\" id=\"drawer\">\n  <div class=\"drawer-panel\">\n    <button class=\"drawer-close\" id=\"drawerClose\" aria-label=\"Close\">\n      <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M18 6L6 18M6 6l12 12\"\/><\/svg>\n    <\/button>\n    <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">Cambridge<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n    <\/div>\n<\/div>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"wrap\">\n    <span class=\"kicker\">Complete Key for Schools \u00b7 Unit 14<\/span>\n    <h1 class=\"serif\">Reading &amp; Writing<br><span>Keep in touch!<\/span><\/h1>\n    <p class=\"sub\">Practise the Reading (Part 4 and Part 5) tasks from Unit 14 of <i>Complete Key for Schools<\/i>. First read a text about skywriting and choose the correct word for each gap, then complete an email by writing one word in each gap \u2014 with instant auto-grading. Finish with a short writing task about communication and friends.<\/p>\n    <div class=\"hero-meta\">\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>Reading Part 4<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>Reading Part 5<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>12 auto-graded<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>+ Writing task<\/span>\n    <\/div>\n    <div class=\"cta-row\">\n      <a href=\"#reading4\" class=\"btn-primary\">\n        Start\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\n      <\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-ghost\">All Cambridge Tests<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- SCORE BAR -->\n<div class=\"score-bar\" id=\"scoreBar\">\n  <div class=\"wrap sb-inner\">\n    <div class=\"sb-score\">Score <b><span id=\"scoreNow\">0<\/span>\/12<\/b><\/div>\n    <div class=\"sb-prog\">\n      <div class=\"sb-prog-bar\"><div class=\"sb-prog-fill\" id=\"progFill\"><\/div><\/div>\n      <div class=\"sb-prog-label\"><span id=\"answeredCount\">0<\/span> of 12 answered<\/div>\n    <\/div>\n    <button class=\"btn-submit\" id=\"submitBtn\">\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>\n      Submit &amp; Grade\n    <\/button>\n    <button class=\"btn-reset\" id=\"resetBtn\">Reset<\/button>\n  <\/div>\n<\/div>\n\n<!-- ============== READING PART 4 ============== -->\n<section class=\"part-section\" id=\"reading4\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">4<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Reading \u00b7 Part 4 \u00b7 Questions 1\u20136<\/span>\n        <h2 class=\"serif\">Skywriting<\/h2>\n        <p>Read the text about skywriting. For each question, choose the correct answer (<b>A<\/b>, <b>B<\/b> or <b>C<\/b>) for each gap.<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"passage\">\n      <h3>Skywriting<\/h3>\n      <p>You don&#8217;t see much skywriting these days, but many years ago it was a very <span class=\"gap\" data-gap=\"1\">1<\/span><span class=\"gap-num\">(1)<\/span> kind of advertising. Drinks companies and car makers <span class=\"gap\" data-gap=\"2\">2<\/span><span class=\"gap-num\">(2)<\/span> skywriting companies lots of money to get their messages into the sky.<\/p>\n      <p>Skywriting has always been expensive and difficult and you can never <span class=\"gap\" data-gap=\"3\">3<\/span><span class=\"gap-num\">(3)<\/span> what the weather will be like. &#8216;We have to have blue skies,&#8217; says Susan Althrop, who has a skywriting business in France. &#8216;Customers can <span class=\"gap\" data-gap=\"4\">4<\/span><span class=\"gap-num\">(4)<\/span> a flight for next month, but it might be cloudy or windy!&#8217;<\/p>\n      <p>There aren&#8217;t <span class=\"gap\" data-gap=\"5\">5<\/span><span class=\"gap-num\">(5)<\/span> skywriters left now. Susan&#8217;s customers are usually companies looking for an unusual <span class=\"gap\" data-gap=\"6\">6<\/span><span class=\"gap-num\">(6)<\/span> to advertise. Each job costs around \u20ac5,000 \u2013 so people have to be quite rich to do it!<\/p>\n    <\/div>\n    <div class=\"q-list\" id=\"reading4List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== READING PART 5 ============== -->\n<section class=\"part-section\" id=\"reading5\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">5<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Reading \u00b7 Part 5 \u00b7 Questions 7\u201312<\/span>\n        <h2 class=\"serif\">An email to Linn<\/h2>\n        <p>Complete the email. For each question (<b>7\u201312<\/b>), write the correct answer. Write <b>one word<\/b> for each gap. Gap <b>(0)<\/b> is an example: <b>was<\/b>. Type your answer in each box, then Submit to grade.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"email-card\">\n      <div class=\"email-head\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"\/><path d=\"M3 7l9 6 9-6\"\/><\/svg>\n        New message\n      <\/div>\n      <div class=\"email-body\">\n        <p>Hi Linn,<\/p>\n        <p>It <span class=\"cl-ex\">was<\/span><span class=\"gap-num\">(0)<\/span> great to meet you at the summer camp in the UK. I really enjoyed learning more English with you. I&#8217;ve never had so <span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"7\" data-num=\"7\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 7\"><span class=\"blank-num\">(7)<\/span><span class=\"blank-ans\" data-ansfor=\"7\"><\/span><\/span> fun in a class before!<\/p>\n        <p><span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"8\" data-num=\"8\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 8\"><span class=\"blank-num\">(8)<\/span><span class=\"blank-ans\" data-ansfor=\"8\"><\/span><\/span> is great that our class has a Snapchat group, but I also like writing emails. I wrote <span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"9\" data-num=\"9\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 9\"><span class=\"blank-num\">(9)<\/span><span class=\"blank-ans\" data-ansfor=\"9\"><\/span><\/span> Haru yesterday. He says he&#8217;s thinking <span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"10\" data-num=\"10\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 10\"><span class=\"blank-num\">(10)<\/span><span class=\"blank-ans\" data-ansfor=\"10\"><\/span><\/span> going to summer camp again next year.<\/p>\n        <p>I also sent Beppe a message, but he hasn&#8217;t written back yet. <span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"11\" data-num=\"11\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 11\"><span class=\"blank-num\">(11)<\/span><span class=\"blank-ans\" data-ansfor=\"11\"><\/span><\/span> you heard from him?<\/p>\n        <p>I have to go now. My Spanish class starts <span class=\"blank-wrap\"><input class=\"input-blank\" data-q=\"12\" data-num=\"12\" type=\"text\" autocomplete=\"off\" spellcheck=\"false\" aria-label=\"Gap 12\"><span class=\"blank-num\">(12)<\/span><span class=\"blank-ans\" data-ansfor=\"12\"><\/span><\/span> five minutes.<\/p>\n        <p>Love, Eva<\/p>\n      <\/div>\n    <\/div>\n    <div class=\"reveal-row\">\n      <button class=\"show-ans-btn\" id=\"revealP5\">&#128065; Show all Part 5 answers<\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== WRITING ============== -->\n<section class=\"part-section\" id=\"writing\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">W<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Writing \u00b7 Topic task<\/span>\n        <h2 class=\"serif\">How you keep in touch<\/h2>\n        <p>Unit 14 is about communication and staying in touch with friends. Write a short paragraph (<b>25 words or more<\/b>) about how you communicate with your friends. Then compare it with the model answer.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"writing-card\">\n      <div class=\"prompt-box\">\n        <b>Write about how you keep in touch with your friends and family.<\/b> Use the guiding questions below to help you.\n        <ul>\n          <li>How do you usually communicate with your friends \u2014 messages, phone calls, video or in person?<\/li>\n          <li>Which way do you like most, and why?<\/li>\n          <li>What was the last message you sent, and who did you send it to?<\/li>\n        <\/ul>\n      <\/div>\n\n      <textarea class=\"writing-area\" id=\"writingArea\" placeholder=\"Write your paragraph here (25 words or more)...\"><\/textarea>\n      <div class=\"wc-counter\" id=\"wcCounter\">0 words \u00b7 target 25 or more<\/div>\n      <button class=\"sample-toggle\" id=\"sampleToggle\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n        Show Model Answer\n      <\/button>\n      <div class=\"sample-box\" id=\"sampleBox\">\n        <h5>Model paragraph \u2014 25+ words<\/h5>\n        <div style=\"background:#fff;border-left:3px solid var(--green);padding:10px 14px;border-radius:0 8px 8px 0;line-height:1.6\">\n          I usually keep in touch with my friends by sending messages on my phone. I like video calls most because I can see everyone. Yesterday I sent a funny photo to my best friend, and we chatted for an hour.\n        <\/div>\n        <p style=\"margin-top:12px;font-size:13.5px;color:#92400E\"><b>Tip:<\/b> use communication verbs from this unit (<i>message, chat, call, keep in touch<\/i>) and give a reason for your favourite way with <i>because<\/i>.<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- SUBMIT PANEL -->\n<div class=\"wrap\">\n  <div class=\"submit-panel\">\n    <h3>&#127919; Finished?<\/h3>\n    <p class=\"intro\">Submit to grade the 12 reading questions (Part 4 + Part 5), or use &#128065; Show Answer on each question.<\/p>\n    <div class=\"sp-buttons\">\n      <button class=\"btn-submit-big\" onclick=\"document.getElementById('submitBtn').click()\">&#10003; Submit &amp; Grade<\/button>\n      <button class=\"btn-reset-big\" onclick=\"document.getElementById('resetBtn').click()\">&#128260; Reset<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- RESULTS BANNER -->\n<div class=\"wrap\">\n  <div class=\"results-banner\" id=\"resultsBanner\">\n    <h3>Complete KET \u00b7 Unit 14 \u2014 Reading &amp; Writing<\/h3>\n    <div class=\"score-big\"><span id=\"finalScore\">0<\/span>\/12<\/div>\n    <p id=\"resultsMsg\">Great effort! Scroll up to review your answers \u2014 correct ones are green, wrong ones red. Then write your paragraph and check the model answer.<\/p>\n    <div style=\"margin-top:18px\"><button class=\"btn-primary\" onclick=\"window.scrollTo({top:0,behavior:'smooth'})\" style=\"background:#fff;color:var(--accent-2)\">Back to top<\/button><\/div>\n  <\/div>\n<\/div>\n\n<!-- FOOTER -->\n<footer class=\"footer\">\n  <div class=\"wrap\">\n    <p>\u00a9 2026 All English 4U \u00b7 <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">All Cambridge Tests<\/a> \u00b7 <a href=\"https:\/\/allenglish4u.com\/contact\/\">Contact<\/a><\/p>\n  <\/div>\n<\/footer>\n\n<script>\n(function(){\nvar hdr=document.getElementById('hdr');\nvar setSolid=function(){if(window.scrollY>40){hdr.classList.add('solid')}else{hdr.classList.remove('solid')}};\nwindow.addEventListener('scroll',setSolid,{passive:true});setSolid();\nvar hamb=document.getElementById('hamb'),drawer=document.getElementById('drawer'),dClose=document.getElementById('drawerClose');\nif(hamb){hamb.addEventListener('click',function(){drawer.classList.add('open')})}\nif(dClose){dClose.addEventListener('click',function(){drawer.classList.remove('open')})}\nif(drawer){drawer.addEventListener('click',function(e){if(e.target===drawer){drawer.classList.remove('open')}})}\n\n\/\/ ===== DATA: Reading Part 4 (3-option MC cloze) =====\nvar RP4 = [\n  {n:1,opts:[['A','popular'],['B','favourite'],['C','busy']],ans:'A'},\n  {n:2,opts:[['A','made'],['B','paid'],['C','bought']],ans:'B'},\n  {n:3,opts:[['A','think'],['B','hope'],['C','know']],ans:'C'},\n  {n:4,opts:[['A','book'],['B','keep'],['C','save']],ans:'A'},\n  {n:5,opts:[['A','some'],['B','much'],['C','many']],ans:'C'},\n  {n:6,opts:[['A','way'],['B','sort'],['C','type']],ans:'A'}\n];\n\n\/\/ ===== DATA: Reading Part 5 (open cloze) \u2014 accepted answers (case-insensitive) =====\nvar RP5 = [\n  {n:7,accept:['much']},\n  {n:8,accept:['it']},\n  {n:9,accept:['to']},\n  {n:10,accept:['about','of']},\n  {n:11,accept:['have']},\n  {n:12,accept:['in']}\n];\n\nvar TOTAL = RP4.length + RP5.length;\n\n\/\/ ===== Rendering Part 4 =====\nfunction escapeHtml(s){return String(s).replace(\/[&<>\"']\/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]})}\nfunction renderRP4(listEl, data){\n  data.forEach(function(q){\n    var div=document.createElement('div');\n    div.className='q-item'; div.dataset.qid=q.n;\n    var optsHTML='';\n    q.opts.forEach(function(o){\n      optsHTML += '<label class=\"opt\" data-letter=\"'+o[0]+'\"><input type=\"radio\" name=\"q'+q.n+'\" value=\"'+o[0]+'\"><span class=\"opt-letter\">'+o[0]+'<\/span><span>'+escapeHtml(o[1])+'<\/span><\/label>';\n    });\n    div.innerHTML =\n      '<div class=\"q-text\"><b class=\"qn\">'+q.n+'.<\/b><span>Choose the correct word for gap '+q.n+'.<\/span><\/div>'+\n      '<div class=\"q-opts\">'+optsHTML+'<\/div>'+\n      '<div class=\"feedback\"><\/div>';\n    listEl.appendChild(div);\n  });\n}\nrenderRP4(document.getElementById('reading4List'),RP4);\n\n\/\/ ===== Wire Part 4 option clicks =====\ndocument.querySelectorAll('.opt').forEach(function(opt){\n  opt.addEventListener('click',function(e){\n    e.preventDefault();\n    var input=opt.querySelector('input');\n    var group=opt.parentElement;\n    group.querySelectorAll('.opt').forEach(function(o){o.classList.remove('selected')});\n    opt.classList.add('selected');\n    input.checked=true;\n    updateProgress();\n    syncGap(opt);\n  });\n});\n\nfunction syncGap(opt){\n  var name=opt.querySelector('input').name;\n  var qid=name.replace('q','');\n  var letter=opt.dataset.letter;\n  var q=RP4.find(function(x){return String(x.n)===String(qid)});\n  if(!q){return}\n  var pair=q.opts.find(function(o){return o[0]===letter});\n  var gapEl=document.querySelector('.gap[data-gap=\"'+qid+'\"]');\n  if(gapEl){if(pair){gapEl.textContent=pair[1]}else{gapEl.textContent=qid}}\n}\n\nfunction getMcqAns(qid){var sel=document.querySelector('input[name=\"q'+qid+'\"]:checked');if(sel){return sel.value}return null;}\n\n\/\/ ===== Part 5 helpers =====\nfunction normalize(s){return String(s).trim().toLowerCase().replace(\/[.,!?;:]+$\/,'')}\nfunction getBlankEl(qid){return document.querySelector('.input-blank[data-q=\"'+qid+'\"]')}\nfunction isP5Filled(qid){var el=getBlankEl(qid);if(!el){return false}return normalize(el.value).length>0}\nfunction isP5Correct(q){\n  var el=getBlankEl(q.n);\n  if(!el){return false}\n  var v=normalize(el.value);\n  var ok=false;\n  q.accept.forEach(function(a){if(normalize(a)===v){ok=true}});\n  return ok;\n}\n\nfunction answeredCount(){\n  var n=0;\n  RP4.forEach(function(q){if(getMcqAns(q.n)){n++}});\n  RP5.forEach(function(q){if(isP5Filled(q.n)){n++}});\n  return n;\n}\nfunction updateProgress(){\n  var a=answeredCount();\n  document.getElementById('answeredCount').textContent=a;\n  document.getElementById('progFill').style.width=(a\/TOTAL*100)+'%';\n}\ndocument.querySelectorAll('.input-blank').forEach(function(inp){\n  inp.addEventListener('input',function(){updateProgress()});\n});\n\n\/\/ ===== SUBMIT =====\ndocument.getElementById('submitBtn').addEventListener('click',function(){\n  var score=0;\n  \/\/ Part 4\n  RP4.forEach(function(q){\n    var v=getMcqAns(q.n), item=document.querySelector('.q-item[data-qid=\"'+q.n+'\"]');\n    if(!item){return}\n    item.classList.add('answered');\n    item.querySelectorAll('.opt').forEach(function(o){\n      var L=o.dataset.letter;\n      if(L===q.ans){o.classList.add('correct-opt')}\n      if(v===L){if(L!==q.ans){o.classList.add('wrong-opt')}}\n    });\n    var fb=item.querySelector('.feedback');\n    if(v===q.ans){score++; item.classList.add('correct'); fb.textContent='\u2714 Correct \u2014 '+q.ans}\n    else{\n      item.classList.add('wrong');\n      if(v){fb.textContent='\u2718 Wrong \u2014 correct answer: '+q.ans+' (you chose '+v+')'}\n      else{fb.textContent='\u2718 Wrong \u2014 correct answer: '+q.ans+' (no answer)'}\n    }\n  });\n  \/\/ Part 5\n  RP5.forEach(function(q){\n    var el=getBlankEl(q.n);\n    if(!el){return}\n    el.classList.remove('correct','wrong');\n    var ansSpan=document.querySelector('.blank-ans[data-ansfor=\"'+q.n+'\"]');\n    if(isP5Correct(q)){\n      score++; el.classList.add('correct');\n      if(ansSpan){ansSpan.textContent=''; ansSpan.classList.remove('show')}\n    }else{\n      el.classList.add('wrong');\n      if(ansSpan){ansSpan.textContent='= '+q.accept.join(' \/ '); ansSpan.classList.add('show')}\n    }\n  });\n\n  document.getElementById('scoreNow').textContent=score;\n  document.getElementById('finalScore').textContent=score;\n  var pct=Math.round(score\/TOTAL*100);\n  var msg='';\n  if(pct>=85){msg='\ud83c\udfc6 Excellent! You chose the right words for the gaps.'}\n  else if(pct>=67){msg='\ud83d\udc4d Good job! Check the gaps you missed.'}\n  else if(pct>=50){msg='\ud83d\udcda Keep practising \u2014 read the words around each gap.'}\n  else{msg='\ud83d\udcaa Read the whole text again and look at the words before and after each gap.'}\n  document.getElementById('resultsMsg').textContent=msg;\n  document.getElementById('resultsBanner').classList.add('show');\n  setTimeout(function(){document.getElementById('resultsBanner').scrollIntoView({behavior:'smooth',block:'center'})},120);\n});\n\ndocument.getElementById('resetBtn').addEventListener('click',function(){if(!confirm('Reset all answers?')){return}location.reload();});\n\n\/\/ ===== Writing word counter =====\nvar ta=document.getElementById('writingArea'),wc=document.getElementById('wcCounter');\nta.addEventListener('input',function(){\n  var w=ta.value.trim().split(\/\\s+\/).filter(Boolean).length;\n  wc.textContent=w+' words \u00b7 target 25 or more';\n  wc.classList.remove('ok');\n  if(w>=25){wc.classList.add('ok')}\n});\ndocument.getElementById('sampleToggle').addEventListener('click',function(){document.getElementById('sampleBox').classList.toggle('show');});\n\n\/\/ ===== SHOW ANSWER PER-Q (Part 4) =====\ndocument.querySelectorAll('#reading4List .q-item').forEach(function(item){\n  if(item.querySelector('.show-ans-btn')){return}\n  var qid=parseInt(item.dataset.qid);\n  var q=RP4.find(function(x){return x.n===qid});\n  if(!q){return}\n  var btn=document.createElement('button');\n  btn.className='show-ans-btn'; btn.type='button';\n  btn.innerHTML='\\u{1F441} Show Answer';\n  btn.addEventListener('click',function(){\n    var correctOpt=item.querySelector('.opt[data-letter=\"'+q.ans+'\"]');\n    if(correctOpt){correctOpt.classList.add('correct-opt');syncGap(correctOpt);}\n    var fb=item.querySelector('.feedback');\n    if(fb){item.classList.add('answered'); fb.style.background='rgba(16,185,129,.12)'; fb.style.color='#065F46'; fb.textContent='\\u{1F441} Answer: '+q.ans;}\n    btn.disabled=true;\n  });\n  item.appendChild(btn);\n});\n\n\/\/ ===== SHOW ALL Part 5 answers =====\ndocument.getElementById('revealP5').addEventListener('click',function(){\n  RP5.forEach(function(q){\n    var ansSpan=document.querySelector('.blank-ans[data-ansfor=\"'+q.n+'\"]');\n    if(ansSpan){ansSpan.textContent='= '+q.accept.join(' \/ '); ansSpan.classList.add('show')}\n    var el=getBlankEl(q.n);\n    if(el){if(!el.value){el.value=q.accept[0]}}\n  });\n  this.disabled=true;\n  updateProgress();\n});\n\nupdateProgress();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>All English 4U Grammar IELTS TOEFL Cambridge CELPIP Dictation Back Grammar IELTS TOEFL Cambridge CELPIP Dictation Complete Key for Schools \u00b7 Unit 14 Reading &amp; WritingKeep in touch! Practise the Reading (Part 4 and Part 5) tasks from Unit 14 of Complete Key for Schools. First read a text about skywriting and choose the correct [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-5534","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/5534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=5534"}],"version-history":[{"count":2,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/5534\/revisions"}],"predecessor-version":[{"id":5818,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/5534\/revisions\/5818"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=5534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}