{"id":36713,"date":"2026-04-29T07:50:08","date_gmt":"2026-04-29T02:20:08","guid":{"rendered":"https:\/\/atsixty.com\/?p=36713"},"modified":"2026-04-29T07:51:28","modified_gmt":"2026-04-29T02:21:28","slug":"developmental-milestones","status":"publish","type":"post","link":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/","title":{"rendered":"Developmental Milestones"},"content":{"rendered":"\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<!--\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n  MORNING ROUNDS \u2014 Daily Clinical Quiz\n  Topic : Paediatric Developmental Milestones\n  File  : morning_rounds_dev_milestones.html\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n  HOW TO USE THIS TEMPLATE\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  1. Search for the section marked  \u2605 EDIT HERE \u2605\n  2. Fill in your 5 questions inside the QS array\n  3. Each question has 6 fields \u2014 all explained below\n  4. The SVG image for Q1 is optional \u2014 see its section\n  5. Change the header title and subtitle if the topic differs\n  6. Save the file with a new name, e.g. morning_rounds_cardiology.html\n  7. Paste the file's HTML into a WordPress HTML Block on a new Post\n\n  SCORING\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  +4 for each correct answer, \u22121 for each wrong answer.\n  Net score out of 20. Skipped questions score 0.\n\n  WHAT NOT TO TOUCH\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  \u2022 Everything in the <style> block (unless you want to retheme)\n  \u2022 The JavaScript logic below the QS array\n  \u2022 The hidden image div (unless adding\/changing the image)\n  \u2022 Anything with id=\"mrq01-...\" unless you also update NS below\n\n  NAV CIRCLE (PIP) BEHAVIOUR \u2014 READ BEFORE EDITING\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  buildPips() runs on every build() call (including Retry).\n  \u2022 It creates pips 1\u20135 with ids  mrq01-pip1 \u2026 mrq01-pip5\n  \u2022 It creates connector lines pl2\u2013pl5 (ONE line BEFORE each pip\n    except the first).  There is deliberately NO pl1.\n  \u2022 Default pip CSS class  : 'mr-pip'\n  \u2022 After answer CSS class  : 'mr-pip correct'  or  'mr-pip wrong'\n    (the full className is replaced \u2014 never appended piecemeal)\n  In pick():\n  \u2022 The pip for qid is coloured immediately on click.\n  \u2022 The connector LINE leading TO that pip ('pl' + qid) turns\n    .done \u2014 but ONLY when qid > 1, because pl1 does not exist.\n  \u2022 If questions are answered out of order the line colours\n    independently of the preceding pip's state (by design).\n  On Retry:\n  \u2022 build() \u2192 buildPips() wipes innerHTML and rebuilds from scratch,\n    so no stale colour state can carry over.\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n-->\n<title>Morning Rounds \u00b7 Paediatric Developmental Milestones<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400;1,600&#038;family=Source+Serif+4:ital,wght@0,300;0,400;0,600;1,400&#038;display=swap\" rel=\"stylesheet\">\n<style>\n\/* \u2500\u2500 All styles are namespaced to #mrq01 so they don't\n   bleed into the WordPress theme around this HTML block \u2500\u2500 *\/\n#mrq01 *,#mrq01 *::before,#mrq01 *::after{box-sizing:border-box;margin:0;padding:0}\n#mrq01{\n  \/* \u2500\u2500 Colour palette \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Soothing teal-blue (identical to paeds series).\n     To change the accent colour, replace #2A6E8A (steel teal)\n     in these four lines and the conic-gradient in showScore() JS  *\/\n  --ter:#2A6E8A;\n  --ter-light:#3A8EAA;\n  --ter-pale:#E6F3F8;\n  --ter-dark:#1A4E6A;\n  \/* \u2500\u2500 Leave these alone \u2500\u2500 *\/\n  --correct:#2D6B47;--correct-bg:#EAF6EF;--correct-border:#3A9960;\n  --wrong:#B83232;--wrong-bg:#FDF0F0;--wrong-border:#E53935;\n  --ink:#1A2C38;--ink-mid:#3A5468;--ink-soft:#7A9AAA;\n  --line:#D8E8EE;--cream:#F4F9FB;--warm:#FAFEFF;\n  font-family:'Source Serif 4',Georgia,serif;\n  font-size:16px;color:var(--ink);background:var(--cream);\n  line-height:1.7;padding:0 0 64px;\n}\n#mrq01 .mr-header{background:var(--ter);color:#FAFEFF;padding:34px 24px 28px;text-align:center}\n#mrq01 .mr-eyebrow{font-size:0.68rem;letter-spacing:0.18em;text-transform:uppercase;font-weight:600;opacity:0.65;margin-bottom:10px}\n#mrq01 .mr-title{font-family:'Playfair Display',serif;font-size:1.75rem;font-weight:700;line-height:1.2;margin-bottom:4px}\n#mrq01 .mr-title em{font-style:italic;font-weight:400;opacity:0.88}\n#mrq01 .mr-subtitle{font-size:0.82rem;opacity:0.7;margin-top:8px;font-style:italic}\n#mrq01 .mr-chips{display:flex;justify-content:center;gap:10px;margin-top:18px;flex-wrap:wrap}\n#mrq01 .mr-chip{background:rgba(255,255,255,0.13);border:1px solid rgba(255,255,255,0.22);border-radius:20px;padding:4px 13px;font-size:0.73rem}\n#mrq01 .mr-sentinel{height:1px}\n\/* \u2500\u2500 Fixed progress bar \u2014 hidden until sentinel leaves viewport \u2500\u2500 *\/\n#mrq01 .mr-progress{position:fixed;top:0;left:0;right:0;z-index:9999;background:var(--warm);border-bottom:1px solid var(--line);box-shadow:0 2px 12px rgba(26,44,56,0.08);padding:9px 16px;display:none}\n#mrq01 .mr-progress.visible{display:block}\n#mrq01 .mr-prog-inner{max-width:720px;margin:0 auto;display:flex;align-items:center;justify-content:center}\n\/* \u2500\u2500 Pip row: flex container holding alternating pip-wraps and line-wraps \u2500\u2500 *\/\n#mrq01 .mr-pips{display:flex;align-items:center;justify-content:center}\n#mrq01 .mr-pip-wrap{display:flex;align-items:center}\n\/* \u2500\u2500 Connector line between two pips \u2014 turns teal (.done) when the pip\n   it LEADS TO is answered (see pick() in JS) \u2500\u2500 *\/\n#mrq01 .mr-pip-line{width:28px;height:2px;background:var(--line);transition:background 0.35s}\n#mrq01 .mr-pip-line.done{background:var(--ter)}\n\/* \u2500\u2500 Pip circle \u2014 three states:\n   default  : grey border, warm bg, soft numbered label\n   .correct : green fill, white number\n   .wrong   : red fill, white number\n   The full className is replaced (not appended) in pick() \u2500\u2500 *\/\n#mrq01 .mr-pip{width:28px;height:28px;border-radius:50%;border:2px solid var(--line);background:var(--warm);display:flex;align-items:center;justify-content:center;font-size:0.63rem;font-weight:700;color:var(--ink-soft);transition:all 0.3s;flex-shrink:0}\n#mrq01 .mr-pip.correct{background:var(--correct-border);border-color:var(--correct-border);color:#fff}\n#mrq01 .mr-pip.wrong{background:var(--wrong-border);border-color:var(--wrong-border);color:#fff}\n#mrq01 .mr-body{max-width:720px;margin:0 auto;padding:0 16px}\n#mrq01 .mr-case{background:var(--warm);border:1px solid var(--line);border-left:4px solid var(--ter);border-radius:10px;margin:28px 0;overflow:hidden;box-shadow:0 1px 6px rgba(26,44,56,0.05)}\n#mrq01 .mr-case-top{padding:16px 20px 14px;display:flex;gap:14px;align-items:flex-start}\n#mrq01 .mr-num{font-family:'Playfair Display',serif;font-size:2.2rem;font-weight:700;color:var(--ter);opacity:0.16;line-height:1;margin-top:-2px;flex-shrink:0}\n#mrq01 .mr-meta{flex:1}\n#mrq01 .mr-tag{font-size:0.61rem;font-weight:700;letter-spacing:0.14em;text-transform:uppercase;color:var(--ter);opacity:0.75;margin-bottom:5px}\n#mrq01 .mr-stem{font-size:0.94rem;color:var(--ink);line-height:1.72}\n#mrq01 .mr-stem strong{font-weight:600}\n#mrq01 .mr-stem em{font-style:italic}\n#mrq01 .mr-rule{height:1px;background:var(--line);margin:0 20px}\n#mrq01 .mr-opts{padding:12px 20px 16px;display:flex;flex-direction:column;gap:8px}\n#mrq01 .mr-opt{display:flex;align-items:flex-start;gap:11px;padding:10px 14px;border:1.5px solid var(--line);border-radius:8px;cursor:pointer;background:var(--warm);transition:border-color 0.15s,background 0.15s;-webkit-tap-highlight-color:transparent}\n#mrq01 .mr-opt:hover{border-color:var(--ter);background:var(--ter-pale)}\n#mrq01 .mr-opt.locked{cursor:default}\n#mrq01 .mr-opt.locked:hover{border-color:var(--line);background:var(--warm)}\n#mrq01 .mr-opt.correct{border-color:var(--correct-border);background:var(--correct-bg);cursor:default}\n#mrq01 .mr-opt.correct:hover{border-color:var(--correct-border);background:var(--correct-bg)}\n#mrq01 .mr-opt.wrong{border-color:var(--wrong-border);background:var(--wrong-bg);cursor:default}\n#mrq01 .mr-opt.wrong:hover{border-color:var(--wrong-border);background:var(--wrong-bg)}\n#mrq01 .mr-opt.dimmed{opacity:0.35;cursor:default}\n#mrq01 .mr-opt.dimmed:hover{border-color:var(--line);background:var(--warm)}\n#mrq01 .mr-ltr{flex-shrink:0;width:20px;height:20px;border-radius:50%;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:0.62rem;font-weight:700;color:var(--ink-soft);margin-top:2px;transition:all 0.15s}\n#mrq01 .mr-opt.correct .mr-ltr{background:var(--correct-border);border-color:var(--correct-border);color:#fff}\n#mrq01 .mr-opt.wrong .mr-ltr{background:var(--wrong-border);border-color:var(--wrong-border);color:#fff}\n#mrq01 .mr-opt-text{font-size:0.9rem;color:var(--ink-mid);line-height:1.58}\n#mrq01 .mr-opt.correct .mr-opt-text{color:var(--correct);font-weight:600}\n#mrq01 .mr-opt.wrong .mr-opt-text{color:var(--wrong)}\n#mrq01 .mr-exp{display:none;border-top:1px solid #c8e0d8;background:linear-gradient(180deg,#edf7f4 0%,#f4faf8 100%);padding:13px 20px 15px}\n#mrq01 .mr-exp-lbl{font-size:0.61rem;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;color:var(--correct);margin-bottom:6px}\n#mrq01 .mr-exp-text{font-size:0.86rem;color:#1c4a3a;line-height:1.68}\n#mrq01 .mr-exp-text strong{font-weight:600}\n#mrq01 .mr-exp-text em{font-style:italic}\n#mrq01 .mr-img-wrap{margin-top:14px;background:var(--warm);border:1px solid var(--line);border-radius:8px;padding:14px;text-align:center}\n#mrq01 .mr-img-wrap figcaption{font-size:0.73rem;color:var(--ink-soft);font-style:italic;margin-top:8px;line-height:1.4}\n#mrq01 .mr-submit-wrap{text-align:center;padding:28px 16px 8px}\n#mrq01 .mr-btn{background:var(--ter);color:#FAFEFF;border:none;border-radius:8px;padding:13px 44px;font-family:'Playfair Display',serif;font-size:1rem;font-weight:700;cursor:pointer;box-shadow:0 2px 8px rgba(42,110,138,0.28)}\n#mrq01 .mr-btn:hover{background:var(--ter-dark)}\n#mrq01 .mr-score{display:none;background:var(--warm);border:1px solid var(--line);border-top:4px solid var(--ter);border-radius:10px;margin:24px 0 0;box-shadow:0 2px 12px rgba(26,44,56,0.08);overflow:hidden}\n#mrq01 .mr-score-in{padding:28px 24px;text-align:center}\n#mrq01 .mr-score-ey{font-size:0.66rem;letter-spacing:0.14em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:12px;font-weight:600}\n#mrq01 .mr-ring{width:98px;height:98px;border-radius:50%;background:conic-gradient(var(--ter) 0%, var(--line) 0%);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;position:relative}\n#mrq01 .mr-ring::before{content:'';position:absolute;width:76px;height:76px;border-radius:50%;background:var(--warm)}\n#mrq01 .mr-ring-in{position:relative;display:flex;flex-direction:column;align-items:center;line-height:1.2}\n#mrq01 .mr-ring-pct{font-family:'Playfair Display',serif;font-size:1.3rem;font-weight:700;color:var(--ter)}\n#mrq01 .mr-ring-sub{font-size:0.54rem;color:var(--ink-soft);text-transform:uppercase;letter-spacing:0.06em}\n#mrq01 .mr-score-title{font-family:'Playfair Display',serif;font-size:1.15rem;font-weight:700;color:var(--ink);margin-bottom:4px}\n#mrq01 .mr-score-net{font-size:0.9rem;color:var(--ter);font-weight:600;margin-bottom:4px}\n#mrq01 .mr-verdict{font-size:0.83rem;color:var(--ink-soft);font-style:italic;margin-bottom:18px;padding:0 12px}\n#mrq01 .mr-bands{display:flex;justify-content:center;gap:10px;flex-wrap:wrap}\n#mrq01 .mr-band{padding:5px 13px;border-radius:16px;font-size:0.78rem;font-weight:600}\n#mrq01 .mr-band-c{background:var(--correct-bg);color:var(--correct)}\n#mrq01 .mr-band-w{background:var(--wrong-bg);color:var(--wrong)}\n#mrq01 .mr-band-s{background:var(--ter-pale);color:var(--ter)}\n#mrq01 .mr-retry{display:block;margin:18px auto 4px;background:transparent;border:2px solid var(--ter);color:var(--ter);border-radius:8px;padding:9px 28px;font-family:'Playfair Display',serif;font-size:0.92rem;font-weight:700;cursor:pointer}\n#mrq01 .mr-retry:hover{background:var(--ter);color:#FAFEFF}\n@media(max-width:480px){#mrq01 .mr-title{font-size:1.4rem}#mrq01 .mr-num{font-size:1.7rem}#mrq01 .mr-stem{font-size:0.9rem}#mrq01 .mr-opt-text{font-size:0.86rem}}\n<\/style>\n<\/head>\n<body>\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     OPTIONAL IMAGE \u2014 for Q1's Debrief section\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     SVG: Developmental milestone timeline \u2014 four streams\n     (Gross Motor, Fine Motor, Language, Social) plotted\n     across age 0\u201324 months with key milestones as labelled dots.\n     Used in Q1 (imgId: 'mrq01-img1')\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div id=\"mrq01-img1\" style=\"display:none\">\n  <figure class=\"mr-img-wrap\">\n    <!--\n      Four stream rows. X-axis = age in months (0\u201324).\n      Plot area: x 60\u2013520 (460 px = 24 months \u2192 19.17 px\/month)\n      Month \u2192 x:  0=60  3=117  6=175  9=233  12=290  15=348  18=405  24=520\n\n      Row centres (y):\n        Gross Motor : 57\n        Fine Motor  : 100\n        Language    : 143\n        Social      : 186\n\n      Milestone dot x positions (rounded):\n        2m=98  3m=117  4m=137  6m=175  9=233  10m=252  12m=290\n        15m=348  18m=405  24m=520\n    -->\n    <svg viewBox=\"0 0 560 240\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n         style=\"width:100%;max-width:560px;display:block;margin:0 auto\">\n\n      <!-- \u2500\u2500 background \u2500\u2500 -->\n      <rect x=\"0\" y=\"0\" width=\"560\" height=\"240\" rx=\"8\" fill=\"#F4F9FB\"\/>\n\n      <!-- \u2500\u2500 stream band fills \u2500\u2500 -->\n      <rect x=\"55\" y=\"38\"  width=\"470\" height=\"36\" rx=\"3\" fill=\"#E6F3F8\" opacity=\"0.7\"\/>\n      <rect x=\"55\" y=\"80\"  width=\"470\" height=\"36\" rx=\"3\" fill=\"#EAF6EF\" opacity=\"0.6\"\/>\n      <rect x=\"55\" y=\"122\" width=\"470\" height=\"36\" rx=\"3\" fill=\"#FFF8E8\" opacity=\"0.8\"\/>\n      <rect x=\"55\" y=\"164\" width=\"470\" height=\"36\" rx=\"3\" fill=\"#F8EEEE\" opacity=\"0.6\"\/>\n\n      <!-- \u2500\u2500 stream label tabs (left) \u2500\u2500 -->\n      <rect x=\"0\" y=\"38\"  width=\"54\" height=\"36\" rx=\"3\" fill=\"#2A6E8A\" opacity=\"0.15\"\/>\n      <rect x=\"0\" y=\"80\"  width=\"54\" height=\"36\" rx=\"3\" fill=\"#3A9960\" opacity=\"0.15\"\/>\n      <rect x=\"0\" y=\"122\" width=\"54\" height=\"36\" rx=\"3\" fill=\"#8A6A20\" opacity=\"0.12\"\/>\n      <rect x=\"0\" y=\"164\" width=\"54\" height=\"36\" rx=\"3\" fill=\"#7A2340\" opacity=\"0.12\"\/>\n\n      <text x=\"27\" y=\"52\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">GROSS<\/text>\n      <text x=\"27\" y=\"61\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">MOTOR<\/text>\n      <text x=\"27\" y=\"94\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">FINE<\/text>\n      <text x=\"27\" y=\"103\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">MOTOR<\/text>\n      <text x=\"27\" y=\"137\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">LANG-<\/text>\n      <text x=\"27\" y=\"146\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">UAGE<\/text>\n      <text x=\"27\" y=\"180\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">SOCIAL<\/text>\n\n      <!-- \u2500\u2500 baseline axis \u2500\u2500 -->\n      <line x1=\"55\" y1=\"206\" x2=\"525\" y2=\"206\" stroke=\"#3A5468\" stroke-width=\"1.2\"\/>\n\n      <!-- \u2500\u2500 X-axis tick marks and labels \u2500\u2500 -->\n      <!-- 0m=60, 3m=117, 6m=175, 9m=233, 12m=290, 15m=348, 18m=405, 24m=520 -->\n      <line x1=\"60\"  y1=\"204\" x2=\"60\"  y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"117\" y1=\"204\" x2=\"117\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"175\" y1=\"204\" x2=\"175\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"233\" y1=\"204\" x2=\"233\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"290\" y1=\"204\" x2=\"290\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"348\" y1=\"204\" x2=\"348\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"405\" y1=\"204\" x2=\"405\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n      <line x1=\"520\" y1=\"204\" x2=\"520\" y2=\"208\" stroke=\"#3A5468\" stroke-width=\"1\"\/>\n\n      <text x=\"60\"  y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">0<\/text>\n      <text x=\"117\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">3<\/text>\n      <text x=\"175\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">6<\/text>\n      <text x=\"233\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">9<\/text>\n      <text x=\"290\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">12<\/text>\n      <text x=\"348\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">15<\/text>\n      <text x=\"405\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">18<\/text>\n      <text x=\"520\" y=\"217\" text-anchor=\"middle\" fill=\"#7A9AAA\" font-size=\"8\" font-family=\"Georgia,serif\">24<\/text>\n      <text x=\"290\" y=\"230\" text-anchor=\"middle\" fill=\"#3A5468\" font-size=\"8\" font-family=\"Georgia,serif\">Age (months)<\/text>\n\n      <!-- \u2500\u2500 Chart title \u2500\u2500 -->\n      <text x=\"290\" y=\"16\" text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"9.5\"\n            font-family=\"Georgia,serif\" font-weight=\"bold\">\n        Developmental Milestones \u2014 Key Markers by Stream (0\u201324 months)\n      <\/text>\n\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           GROSS MOTOR  (row y-centre = 56, colour #2A6E8A)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <!-- connecting line -->\n      <polyline points=\"117,56 175,56 233,56 290,56 348,56 405,56 520,56\"\n                fill=\"none\" stroke=\"#2A6E8A\" stroke-width=\"1.2\" opacity=\"0.35\"\/>\n      <!-- dots -->\n      <circle cx=\"117\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 3m -->\n      <circle cx=\"175\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 6m -->\n      <circle cx=\"233\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 9m -->\n      <circle cx=\"290\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 12m -->\n      <circle cx=\"348\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 15m -->\n      <circle cx=\"405\" cy=\"56\" r=\"4.5\" fill=\"#C83030\" stroke=\"#2A6E8A\" stroke-width=\"1.5\"\/> <!-- 18m red-flag -->\n      <circle cx=\"520\" cy=\"56\" r=\"4\" fill=\"#2A6E8A\"\/>   <!-- 24m -->\n      <!-- labels \u2014 alternating above\/below -->\n      <text x=\"117\" y=\"47\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Head<\/text>\n      <text x=\"117\" y=\"54\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">control<\/text>\n      <text x=\"175\" y=\"68\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Sits<\/text>\n      <text x=\"175\" y=\"75\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">+support<\/text>\n      <text x=\"233\" y=\"47\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Sits<\/text>\n      <text x=\"233\" y=\"54\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">alone<\/text>\n      <text x=\"290\" y=\"68\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Pulls<\/text>\n      <text x=\"290\" y=\"75\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">to stand<\/text>\n      <text x=\"348\" y=\"47\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Walks<\/text>\n      <text x=\"348\" y=\"54\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">alone<\/text>\n      <text x=\"405\" y=\"68\"  text-anchor=\"middle\" fill=\"#C83030\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">&#9888; Red<\/text>\n      <text x=\"405\" y=\"75\"  text-anchor=\"middle\" fill=\"#C83030\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">flag<\/text>\n      <text x=\"520\" y=\"47\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">Runs \/<\/text>\n      <text x=\"520\" y=\"54\"  text-anchor=\"middle\" fill=\"#1A4E6A\" font-size=\"6.5\" font-family=\"Georgia,serif\">stairs<\/text>\n\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           FINE MOTOR  (row y-centre = 99, colour #3A9960)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <polyline points=\"117,99 175,99 233,99 290,99 348,99 405,99 520,99\"\n                fill=\"none\" stroke=\"#3A9960\" stroke-width=\"1.2\" opacity=\"0.35\"\/>\n      <circle cx=\"117\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"175\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"233\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"290\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"348\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"405\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <circle cx=\"520\" cy=\"99\" r=\"4\" fill=\"#3A9960\"\/>\n      <!-- labels -->\n      <text x=\"117\" y=\"90\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Hands<\/text>\n      <text x=\"117\" y=\"97\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">open<\/text>\n      <text x=\"175\" y=\"110\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Palmar<\/text>\n      <text x=\"175\" y=\"117\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">grasp<\/text>\n      <text x=\"233\" y=\"90\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Pincer<\/text>\n      <text x=\"233\" y=\"97\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">grasp<\/text>\n      <text x=\"290\" y=\"110\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Neat<\/text>\n      <text x=\"290\" y=\"117\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">pincer<\/text>\n      <text x=\"348\" y=\"90\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Tower<\/text>\n      <text x=\"348\" y=\"97\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">2 cubes<\/text>\n      <text x=\"405\" y=\"110\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Tower<\/text>\n      <text x=\"405\" y=\"117\" text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">4 cubes<\/text>\n      <text x=\"520\" y=\"90\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">Tower<\/text>\n      <text x=\"520\" y=\"97\"  text-anchor=\"middle\" fill=\"#2D6B47\" font-size=\"6.5\" font-family=\"Georgia,serif\">6 cubes<\/text>\n\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           LANGUAGE  (row y-centre = 142, colour #8A6A20)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <!-- 2m=98, 6m=175, 12m=290, 18m=405, 24m=520 -->\n      <polyline points=\"98,142 175,142 290,142 405,142 520,142\"\n                fill=\"none\" stroke=\"#8A6A20\" stroke-width=\"1.2\" opacity=\"0.35\"\/>\n      <circle cx=\"98\"  cy=\"142\" r=\"4\" fill=\"#8A6A20\"\/>\n      <circle cx=\"175\" cy=\"142\" r=\"4\" fill=\"#8A6A20\"\/>\n      <circle cx=\"290\" cy=\"142\" r=\"4\" fill=\"#8A6A20\"\/>\n      <circle cx=\"405\" cy=\"142\" r=\"4\" fill=\"#8A6A20\"\/>\n      <circle cx=\"520\" cy=\"142\" r=\"4.5\" fill=\"#C83030\" stroke=\"#8A6A20\" stroke-width=\"1.5\"\/>\n      <!-- labels -->\n      <text x=\"98\"  y=\"133\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">Coo \/<\/text>\n      <text x=\"98\"  y=\"140\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">smile<\/text>\n      <text x=\"175\" y=\"153\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">Babble \/<\/text>\n      <text x=\"175\" y=\"160\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">polysyll.<\/text>\n      <text x=\"290\" y=\"133\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">1 word<\/text>\n      <text x=\"290\" y=\"140\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">w\/ meaning<\/text>\n      <text x=\"405\" y=\"153\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">6-10<\/text>\n      <text x=\"405\" y=\"160\" text-anchor=\"middle\" fill=\"#7A5010\" font-size=\"6.5\" font-family=\"Georgia,serif\">words<\/text>\n      <text x=\"520\" y=\"133\" text-anchor=\"middle\" fill=\"#C83030\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">&#9888; 50+<\/text>\n      <text x=\"520\" y=\"140\" text-anchor=\"middle\" fill=\"#C83030\" font-size=\"6.5\" font-family=\"Georgia,serif\" font-weight=\"bold\">2-word<\/text>\n\n      <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n           SOCIAL  (row y-centre = 185, colour #7A2340)\n           \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n      <!-- 2m=98, 6m=175, 12m=290, 18m=405, 24m=520 -->\n      <polyline points=\"98,185 175,185 290,185 405,185 520,185\"\n                fill=\"none\" stroke=\"#7A2340\" stroke-width=\"1.2\" opacity=\"0.35\"\/>\n      <circle cx=\"98\"  cy=\"185\" r=\"4\" fill=\"#7A2340\"\/>\n      <circle cx=\"175\" cy=\"185\" r=\"4\" fill=\"#7A2340\"\/>\n      <circle cx=\"290\" cy=\"185\" r=\"4\" fill=\"#7A2340\"\/>\n      <circle cx=\"405\" cy=\"185\" r=\"4\" fill=\"#7A2340\"\/>\n      <circle cx=\"520\" cy=\"185\" r=\"4\" fill=\"#7A2340\"\/>\n      <!-- labels -->\n      <text x=\"98\"  y=\"176\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">Social<\/text>\n      <text x=\"98\"  y=\"183\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">smile<\/text>\n      <text x=\"175\" y=\"196\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">Stranger<\/text>\n      <text x=\"175\" y=\"203\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">anxiety<\/text>\n      <text x=\"290\" y=\"176\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">Waves \/<\/text>\n      <text x=\"290\" y=\"183\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">points<\/text>\n      <text x=\"405\" y=\"196\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">Symbolic<\/text>\n      <text x=\"405\" y=\"203\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">play<\/text>\n      <text x=\"520\" y=\"176\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">Parallel<\/text>\n      <text x=\"520\" y=\"183\" text-anchor=\"middle\" fill=\"#7A2340\" font-size=\"6.5\" font-family=\"Georgia,serif\">play<\/text>\n\n    <\/svg>\n    <figcaption>\n      Key developmental milestones across four streams, 0&ndash;24 months.\n      <strong>Red dots<\/strong> mark important exam thresholds: not walking by\n      <strong>18 months<\/strong> and absence of 2-word phrases by <strong>24 months<\/strong>\n      are both developmental red flags requiring formal assessment. Milestones shown\n      are median acquisition ages; a range of &plusmn;2&ndash;3 months is normal for\n      individual items, but <em>clusters<\/em> of delay across streams warrant evaluation.\n    <\/figcaption>\n  <\/figure>\n<\/div>\n\n\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 MAIN WIDGET \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n<div id=\"mrq01\">\n\n  <!-- \u2500\u2500 HEADER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"mr-header\">\n    <div class=\"mr-eyebrow\">Morning Rounds &middot; Daily Clinical Quiz<\/div>\n    <div class=\"mr-title\">\n      Paediatric Developmental Milestones<br><em>Clinical Reasoning<\/em>\n    <\/div>\n    <div class=\"mr-subtitle\">Five cases &middot; Read carefully &middot; Trust your instinct<\/div>\n    <div class=\"mr-chips\">\n      <span class=\"mr-chip\">5 Cases<\/span>\n      <span class=\"mr-chip\">+4 \/ &minus;1 scoring<\/span>\n      <span class=\"mr-chip\">Options reshuffled<\/span>\n    <\/div>\n  <\/div>\n\n  <!-- Sentinel: when this scrolls off the top, the fixed progress bar appears -->\n  <div class=\"mr-sentinel\" id=\"mrq01-sentinel\"><\/div>\n\n  <!-- \u2500\u2500 Fixed progress bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n       Pips (circles) and connector lines are built entirely by JS.\n       \u2022 Pip ids    : mrq01-pip1 \u2026 mrq01-pip5\n       \u2022 Line ids   : mrq01-pl2  \u2026 mrq01-pl5   (NO mrq01-pl1)\n       Nothing in this HTML needs editing.\n       \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"mr-progress\" id=\"mrq01-progress\">\n    <div class=\"mr-prog-inner\">\n      <div class=\"mr-pips\" id=\"mrq01-pips\"><\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"mr-body\">\n\n    <!-- Case cards are built by JS \u2014 nothing to edit here -->\n    <div id=\"mrq01-cases\"><\/div>\n\n    <div class=\"mr-submit-wrap\">\n      <button class=\"mr-btn\" id=\"mrq01-submit\">Submit for Debrief<\/button>\n    <\/div>\n\n    <!-- Score panel \u2014 built by JS, nothing to edit here -->\n    <div class=\"mr-score\" id=\"mrq01-score\">\n      <div class=\"mr-score-in\">\n        <div class=\"mr-score-ey\">Round Complete<\/div>\n        <div class=\"mr-ring\" id=\"mrq01-ring\">\n          <div class=\"mr-ring-in\">\n            <span class=\"mr-ring-pct\" id=\"mrq01-pct\">0%<\/span>\n            <span class=\"mr-ring-sub\">net<\/span>\n          <\/div>\n        <\/div>\n        <div class=\"mr-score-title\">Your Debrief<\/div>\n        <div class=\"mr-score-net\" id=\"mrq01-net\"><\/div>\n        <div class=\"mr-verdict\" id=\"mrq01-verdict\"><\/div>\n        <div class=\"mr-bands\">\n          <span class=\"mr-band mr-band-c\" id=\"mrq01-ct-c\"><\/span>\n          <span class=\"mr-band mr-band-w\" id=\"mrq01-ct-w\"><\/span>\n          <span class=\"mr-band mr-band-s\" id=\"mrq01-ct-s\"><\/span>\n        <\/div>\n        <button class=\"mr-retry\" id=\"mrq01-retry\">&#8635; New Round<\/button>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/div><!-- end #mrq01 -->\n\n\n<script>\n(function () {\n  'use strict';\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     NAMESPACE \u2014 one string that prefixes every element id.\n     If you ever put two quizzes on the same page, change\n     'mrq01' to 'mrq02' in one of them (and update every\n     id=\"mrq01-...\" in the HTML above to match).\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  var NS    = 'mrq01';\n  var TOTAL = 5;\n  var MAX   = 20;   \/* TOTAL \u00d7 4 \u2014 update if you ever change TOTAL *\/\n  var LTRS  = ['A','B','C','D'];\n\n\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u2605 EDIT HERE \u2605  \u2014 THE QUESTION BANK\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n     QS is an array of 5 question objects.\n     Each object has six fields:\n\n     id       \u2014 question number 1\u20135. Keep in order. Don't skip.\n\n     tag      \u2014 short topic label shown above the stem in small caps.\n\n     stem     \u2014 the question text. HTML tags allowed inside the string.\n\n     correct  \u2014 EXACT text of the correct option.\n                Must match one of the entries in opts, character for character.\n\n     opts     \u2014 array of exactly 4 answer strings (shuffled on every load).\n\n     exp      \u2014 explanation shown after the user answers (3\u20135 sentences).\n\n     imgId    \u2014 'mrq01-img1' to show the image in the debrief; null otherwise.\n                Set on ONE question only.\n\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n  var QS = [\n\n    \/* \u2500\u2500 Question 1 \u2500\u2500 *\/\n    {\n      id:      1,\n      tag:     'Gross Motor &mdash; Red Flags',\n      stem:    'A <strong>20-month-old boy<\/strong> is brought to the clinic because he is not yet walking independently. He was born at term with no perinatal complications. On examination he pulls to stand easily and cruises along furniture but will not take independent steps. He has <strong>mild hypotonia<\/strong> throughout and brisk deep tendon reflexes bilaterally. Language and social milestones appear appropriate for age. What is the most appropriate next step?',\n      correct: 'Refer for formal developmental assessment; independent walking by 18 months is expected \u2014 its absence at 20 months with hypotonia and brisk reflexes requires neurological evaluation',\n      opts: [\n        'Refer for formal developmental assessment; independent walking by 18 months is expected \u2014 its absence at 20 months with hypotonia and brisk reflexes requires neurological evaluation',\n        'Reassure and review at 24 months; walking by 2 years is within the normal range and hypotonia is common in toddlers',\n        'Order hip X-ray alone; the most likely cause is developmental dysplasia of the hip masquerading as motor delay',\n        'Refer to physiotherapy only, without developmental assessment; motor delay with normal language always resolves with exercise'\n      ],\n      exp:     '<strong>Independent walking<\/strong> has a median age of 12 months and a normal upper limit of <strong>18 months<\/strong>; absence beyond 18 months is a developmental red flag requiring formal assessment. The combination of <strong>hypotonia with brisk reflexes<\/strong> (upper motor neurone pattern) points toward a central cause such as cerebral palsy rather than a pure neuromuscular disorder. Isolated motor delay with preserved language is a recognised presentation of cerebral palsy, spinal muscular atrophy, or muscular dystrophy. Work-up typically includes creatine kinase, neuroimaging, and specialist referral. Reassurance beyond 18 months without investigation is inappropriate when neurological signs are present.',\n      imgId:   'mrq01-img1'\n    },\n\n    \/* \u2500\u2500 Question 2 \u2500\u2500 *\/\n    {\n      id:      2,\n      tag:     'Language Milestones &mdash; Delay',\n      stem:    'A <strong>2-year-old girl<\/strong> is reviewed because her parents are concerned about her speech. She says \"mama\" and \"dada\" and four other single words. She does not combine two words. She makes <em>good eye contact<\/em>, responds to her name consistently, follows simple two-step commands, and engages in pointing and joint attention. Her hearing test is normal. Which statement best describes this presentation?',\n      correct: 'This is an expressive language delay; a 2-year-old should have &ge;50 words and be combining 2 words \u2014 referral for speech and language therapy is indicated',\n      opts: [\n        'This is an expressive language delay; a 2-year-old should have &ge;50 words and be combining 2 words \u2014 referral for speech and language therapy is indicated',\n        'Normal development; 2-word phrases are not expected until 30 months and 6 words at age 2 is within the standard range',\n        'This presentation is diagnostic of autism spectrum disorder; good eye contact and joint attention do not exclude autism at this age',\n        'No action needed; girls acquire language later than boys and will catch up by 3 years without intervention'\n      ],\n      exp:     'Key language milestones: <strong>12 months<\/strong> \u2014 1 meaningful word; <strong>18 months<\/strong> \u2014 6&ndash;10 words; <strong>24 months<\/strong> \u2014 &ge;50 words and <strong>2-word phrases<\/strong> (e.g., \"more milk\"); <strong>36 months<\/strong> \u2014 3-word sentences, ~75% intelligible to strangers. This child has only 6 words and no word combinations at 24 months, which is <em>expressive language delay<\/em>. However, preserved joint attention, pointing, eye contact, and social reciprocity argue against autism spectrum disorder as the primary diagnosis \u2014 these are the most sensitive early markers for ASD and are intact here. <strong>Hearing must always be checked<\/strong> (done here). The correct step is <strong>speech and language therapy referral<\/strong>; the majority of children with isolated expressive delay respond well to early intervention.',\n      imgId:   null\n    },\n\n    \/* \u2500\u2500 Question 3 \u2500\u2500 *\/\n    {\n      id:      3,\n      tag:     'Fine Motor &mdash; Milestones &amp; Examination',\n      stem:    'During a routine 9-month developmental check, the health visitor observes that an infant is picking up small pieces of cereal from the table using the <strong>tip of the thumb pressed against the tip of the index finger<\/strong>. She also notes that the infant transfers objects smoothly from hand to hand. A mother in the same clinic asks about her <strong>12-month-old son<\/strong> who is still raking objects with his whole hand and has not yet developed this refined grip. Which response is most accurate?',\n      correct: 'The 9-month infant demonstrates a mature pincer grasp, which is normal; absence of the pincer grasp at 12 months is a fine motor red flag warranting developmental review',\n      opts: [\n        'The 9-month infant demonstrates a mature pincer grasp, which is normal; absence of the pincer grasp at 12 months is a fine motor red flag warranting developmental review',\n        'The 9-month infant is ahead of schedule; the pincer grasp does not normally appear until 12&ndash;15 months',\n        'The raking grasp at 12 months is normal and the pincer grasp is not expected until 18 months; no action is needed',\n        'Both infants are normal; fine motor milestones are too variable to serve as developmental screening tools before 18 months'\n      ],\n      exp:     'Fine motor grasp development follows a predictable sequence: <strong>palmar (whole-hand) grasp<\/strong> at ~5&ndash;6 months &rarr; <strong>radial-digital grasp<\/strong> (thumb + fingers) at ~7 months &rarr; <strong>inferior scissors grasp<\/strong> at ~8 months &rarr; <strong>pincer grasp<\/strong> (thumb tip to index tip) at <strong>9&ndash;10 months<\/strong> &rarr; <strong>neat pincer<\/strong> (fingertip to fingertip) by 12 months. The <em>palmar grasp reflex<\/em> (involuntary) normally disappears by 4&ndash;6 months; persistence beyond 6 months may indicate upper motor neurone pathology. Absence of a pincer grasp at 12 months is a recognised fine motor red flag and should trigger developmental assessment, as it may indicate global developmental delay, cerebral palsy, or vision impairment.',\n      imgId:   null\n    },\n\n    \/* \u2500\u2500 Question 4 \u2500\u2500 *\/\n    {\n      id:      4,\n      tag:     'Social Milestones &mdash; Autism Red Flags',\n      stem:    'A <strong>16-month-old boy<\/strong> is brought by his parents who are worried about his development. He walks independently and has 8 single words. However, he <strong>does not point to share interest<\/strong> in objects (protodeclarative pointing), <strong>does not wave bye-bye<\/strong>, makes <em>inconsistent eye contact<\/em>, and does not look up when his name is called reliably. He does not engage in pretend play. He lines up toys repetitively. Which statement regarding this presentation is most accurate?',\n      correct: 'Absent protodeclarative pointing, failure to respond to name, and absent joint attention by 12&ndash;16 months are the most sensitive early markers for autism spectrum disorder \u2014 immediate referral is warranted',\n      opts: [\n        'Absent protodeclarative pointing, failure to respond to name, and absent joint attention by 12&ndash;16 months are the most sensitive early markers for autism spectrum disorder \u2014 immediate referral is warranted',\n        'The presence of 8 single words at 16 months makes autism spectrum disorder unlikely; review at 24 months is appropriate',\n        'Independent walking is the most important milestone at this age; social concerns are secondary and should be addressed only after gross motor development is confirmed normal',\n        'These features suggest global developmental delay rather than autism; the two conditions cannot be distinguished before 3 years'\n      ],\n      exp:     'The earliest and most sensitive markers for <strong>autism spectrum disorder (ASD)<\/strong> are deficits in <em>social communication<\/em>, specifically: failure to respond to name by <strong>12 months<\/strong>, absent <strong>protodeclarative pointing<\/strong> (pointing to share interest, not just to request) by 12&ndash;14 months, absent <strong>joint attention<\/strong> (following another person\\'s gaze), and lack of social smile or imitation. These reflect the core ASD deficit in <em>shared social cognition<\/em>. The <strong>M-CHAT-R\/F<\/strong> (Modified Checklist for Autism in Toddlers) is the validated 16&ndash;30 month screening tool; a positive screen warrants immediate specialist referral. Having some words does <em>not<\/em> exclude ASD \u2014 language level is an independent variable. Early diagnosis before age 3 significantly improves outcomes with targeted behavioural intervention.',\n      imgId:   null\n    },\n\n    \/* \u2500\u2500 Question 5 \u2500\u2500 *\/\n    {\n      id:      5,\n      tag:     'Developmental Regression &mdash; Rett Syndrome',\n      stem:    'A <strong>2.5-year-old girl<\/strong> is brought with an <strong>8-month history of developmental regression<\/strong>. Her parents report she had apparently normal development until 12&ndash;18 months, including several single words which she has now completely lost. Over the past 8 months she has developed <strong>stereotyped hand-wringing movements<\/strong>, loss of purposeful hand use, acquired <strong>microcephaly<\/strong>, gait ataxia, and episodes of hyperventilation alternating with breath-holding. EEG shows diffuse slow background activity. Which diagnosis and genetic basis is most likely?',\n      correct: 'Rett syndrome; caused by mutations in the <em>MECP2<\/em> gene on the X chromosome, encoding methyl-CpG-binding protein 2 \u2014 almost exclusively affects females',\n      opts: [\n        'Rett syndrome; caused by mutations in the <em>MECP2<\/em> gene on the X chromosome, encoding methyl-CpG-binding protein 2 \u2014 almost exclusively affects females',\n        'Childhood disintegrative disorder (Heller syndrome); caused by <em>SHANK3<\/em> deletions and typically presents after 3&ndash;4 years of entirely normal development',\n        'Angelman syndrome; caused by loss of maternal <em>UBE3A<\/em> expression on chromosome 15q \u2014 presents with seizures, absent speech, and happy affect from infancy',\n        'Landau-Kleffner syndrome; acquired epileptic aphasia presenting with selective loss of language but preserved hand function and no microcephaly'\n      ],\n      exp:     '<strong>Rett syndrome<\/strong> follows a characteristic four-stage course: (I) early normal development until 6&ndash;18 months; (II) <em>rapid regression<\/em> with loss of purposeful hand use, loss of speech, and onset of stereotyped hand-wringing; (III) plateau with motor deterioration; (IV) late motor decline. It is caused by mutations in <strong><em>MECP2<\/em><\/strong> (methyl-CpG-binding protein 2) on the <strong>X chromosome<\/strong> and occurs almost exclusively in <em>females<\/em> (males with the same mutation die in utero or in infancy). Key distinguishing features from other regression syndromes: <strong>acquired microcephaly<\/strong>, <em>hand-wringing stereotypies<\/em> (replacing purposeful hand use), breathing irregularities, and onset after an initial normal period. <strong>Angelman syndrome<\/strong> presents from infancy and lacks regression; <strong>Landau-Kleffner<\/strong> has selective auditory agnosia without hand stereotypies; <strong>childhood disintegrative disorder<\/strong> requires normal development until age 3&ndash;4.',\n      imgId:   null\n    }\n\n  ];\n  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     END OF QUESTION BANK \u2014 do not edit below this line\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\n\n\n  \/* \u2500\u2500 Internal state \u2014 nothing to edit \u2500\u2500 *\/\n  var answers  = {};\n  var answered = 0;\n  var shuffled = {};\n  var done     = false;\n\n  \/* \u2500\u2500 DOM helpers \u2500\u2500 *\/\n  function byId(id) { return document.getElementById(id); }\n  function gid(suffix) { return byId(NS + '-' + suffix); }\n\n  \/* \u2500\u2500 Fisher-Yates shuffle (pure ES5) \u2500\u2500 *\/\n  function shuffleArr(arr) {\n    var a = arr.slice(), i, j, tmp;\n    for (i = a.length - 1; i > 0; i--) {\n      j = Math.floor(Math.random() * (i + 1));\n      tmp = a[i]; a[i] = a[j]; a[j] = tmp;\n    }\n    return a;\n  }\n\n  \/* \u2500\u2500 Count answers of a given value ('c' or 'w') \u2500\u2500 *\/\n  function countVal(val) {\n    var k, n = 0;\n    for (k in answers) {\n      if (answers.hasOwnProperty(k) && answers[k] === val) n++;\n    }\n    return n;\n  }\n\n  \/* \u2500\u2500 Build the five progress pips \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     Called on every build() invocation (initial load + every Retry).\n\n     Structure created (pip ids and line ids):\n\n       [pip1]  --pl2--  [pip2]  --pl3--  [pip3]  --pl4--  [pip4]  --pl5--  [pip5]\n\n     \u2022 pip ids : mrq01-pip1 \u2026 mrq01-pip5\n     \u2022 line ids: mrq01-pl2  \u2026 mrq01-pl5\n     \u2022 There is NO mrq01-pl1 \u2014 the guard  if (qid > 1)  in pick()\n       relies on this absence.  Do not add a pl1.\n\n     CSS classes after a question is answered (set in pick()):\n       pip  \u2192 'mr-pip correct'  or  'mr-pip wrong'   (full replacement)\n       line \u2192 class 'mr-pip-line done'               (appended class)\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function buildPips() {\n    var cont = gid('pips'), i, q, wLine, wPip, line, pip;\n    cont.innerHTML = '';          \/* wipe all existing pips on Retry *\/\n    for (i = 0; i < QS.length; i++) {\n      q = QS[i];\n\n      \/* \u2500\u2500 connector line \u2014 inserted BEFORE pip, but NOT before pip 1 \u2500\u2500 *\/\n      if (i > 0) {\n        wLine = document.createElement('div');\n        wLine.className = 'mr-pip-wrap';\n        line = document.createElement('div');\n        line.className = 'mr-pip-line';\n        line.id = NS + '-pl' + q.id;   \/* pl2, pl3, pl4, pl5 \u2014 never pl1 *\/\n        wLine.appendChild(line);\n        cont.appendChild(wLine);\n      }\n\n      \/* \u2500\u2500 pip circle \u2500\u2500 *\/\n      wPip = document.createElement('div');\n      wPip.className = 'mr-pip-wrap';\n      pip = document.createElement('div');\n      pip.className = 'mr-pip';         \/* default: grey, numbered *\/\n      pip.id = NS + '-pip' + q.id;      \/* pip1 \u2026 pip5 *\/\n      pip.textContent = String(q.id);\n      wPip.appendChild(pip);\n      cont.appendChild(wPip);\n    }\n  }\n\n  \/* \u2500\u2500 Build all case cards from the QS array \u2500\u2500 *\/\n  function build() {\n    var cont, i, q, opts, card, top, numDiv, meta, tag, stem,\n        rule, optsDiv, expDiv, lbl, txt, imgDiv, imgSrc, j,\n        optEl, ltrSpan, txtSpan;\n\n    cont = gid('cases');\n    cont.innerHTML = '';\n\n    \/* reset state *\/\n    answers = {}; answered = 0; shuffled = {}; done = false;\n    gid('score').style.display = 'none';\n    buildPips();\n\n    for (i = 0; i < QS.length; i++) {\n      q = QS[i];\n      opts = shuffleArr(q.opts);   \/* shuffle options fresh each load *\/\n      shuffled[q.id] = opts;       \/* store shuffled order for later use *\/\n\n      \/* \u2500\u2500 outer card \u2500\u2500 *\/\n      card = document.createElement('div');\n      card.className = 'mr-case';\n\n      \/* \u2500\u2500 top section: big number + tag + stem \u2500\u2500 *\/\n      top = document.createElement('div');\n      top.className = 'mr-case-top';\n\n      numDiv = document.createElement('div');\n      numDiv.className = 'mr-num';\n      numDiv.textContent = q.id < 10 ? '0' + q.id : String(q.id);\n\n      meta = document.createElement('div');\n      meta.className = 'mr-meta';\n\n      tag = document.createElement('div');\n      tag.className = 'mr-tag';\n      tag.innerHTML = q.tag;   \/* innerHTML so &mdash; etc. render *\/\n\n      stem = document.createElement('div');\n      stem.className = 'mr-stem';\n      stem.innerHTML = q.stem;\n\n      meta.appendChild(tag);\n      meta.appendChild(stem);\n      top.appendChild(numDiv);\n      top.appendChild(meta);\n      card.appendChild(top);\n\n      \/* \u2500\u2500 divider line \u2500\u2500 *\/\n      rule = document.createElement('div');\n      rule.className = 'mr-rule';\n      card.appendChild(rule);\n\n      \/* \u2500\u2500 answer options \u2500\u2500 *\/\n      optsDiv = document.createElement('div');\n      optsDiv.className = 'mr-opts';\n\n      for (j = 0; j < opts.length; j++) {\n        optEl = document.createElement('div');\n        optEl.className = 'mr-opt';\n        optEl.id = NS + '-o' + q.id + '-' + j;\n        optEl.setAttribute('role', 'button');\n        optEl.setAttribute('tabindex', '0');\n\n        ltrSpan = document.createElement('span');\n        ltrSpan.className = 'mr-ltr';\n        ltrSpan.textContent = LTRS[j];\n\n        txtSpan = document.createElement('span');\n        txtSpan.className = 'mr-opt-text';\n        txtSpan.innerHTML = opts[j];\n\n        optEl.appendChild(ltrSpan);\n        optEl.appendChild(txtSpan);\n        optsDiv.appendChild(optEl);\n\n        \/* IIFE to capture correct qid and oi for each click listener *\/\n        (function (qid, oi) {\n          optEl.addEventListener('click', function () { pick(qid, oi); });\n        }(q.id, j));\n      }\n      card.appendChild(optsDiv);\n\n      \/* \u2500\u2500 explanation (hidden until the user answers) \u2500\u2500 *\/\n      expDiv = document.createElement('div');\n      expDiv.className = 'mr-exp';\n      expDiv.id = NS + '-exp' + q.id;\n\n      lbl = document.createElement('div');\n      lbl.className = 'mr-exp-lbl';\n      lbl.textContent = 'Debrief';\n\n      txt = document.createElement('div');\n      txt.className = 'mr-exp-text';\n      txt.innerHTML = q.exp;\n\n      expDiv.appendChild(lbl);\n      expDiv.appendChild(txt);\n\n      \/* inject image if this question has one *\/\n      if (q.imgId) {\n        imgSrc = byId(q.imgId);\n        if (imgSrc) {\n          imgDiv = document.createElement('div');\n          imgDiv.innerHTML = imgSrc.innerHTML;  \/* clone HTML from hidden div *\/\n          expDiv.appendChild(imgDiv);\n        }\n      }\n\n      card.appendChild(expDiv);\n      cont.appendChild(card);\n    }\n  }\n\n  \/* \u2500\u2500 Handle a user clicking an option \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     After a pick:\n     1. All four options are locked (correct\/wrong\/dimmed styling).\n     2. The debrief panel for this question is revealed.\n     3. The pip for this question turns green or red.\n     4. The connector line LEADING TO this pip turns teal (.done),\n        but ONLY if qid > 1 \u2014 because mrq01-pl1 does not exist.\n     \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n  function pick(qid, oi) {\n    var q, opts, i, el, correct, pl;\n\n    if (answers[qid] !== undefined || done) return; \/* ignore if already answered *\/\n\n    \/* find the question object *\/\n    q = null;\n    for (i = 0; i < QS.length; i++) {\n      if (QS[i].id === qid) { q = QS[i]; break; }\n    }\n    if (!q) return;\n\n    opts = shuffled[qid];\n    correct = (opts[oi] === q.correct);  \/* string comparison \u2014 not index *\/\n    answers[qid] = correct ? 'c' : 'w';\n    answered++;\n\n    \/* style all four options *\/\n    for (i = 0; i < opts.length; i++) {\n      el = byId(NS + '-o' + qid + '-' + i);\n      if (opts[i] === q.correct) {\n        el.className = 'mr-opt correct locked';\n      } else if (i === oi) {\n        el.className = 'mr-opt wrong locked';\n      } else {\n        el.className = 'mr-opt dimmed locked';\n      }\n    }\n\n    \/* reveal explanation *\/\n    byId(NS + '-exp' + qid).style.display = 'block';\n\n    \/* colour the pip \u2014 full className replacement (never appended) *\/\n    byId(NS + '-pip' + qid).className = 'mr-pip ' + (correct ? 'correct' : 'wrong');\n\n    \/* colour the connector line that leads TO this pip.\n       Guard: qid > 1 because mrq01-pl1 was never created in buildPips(). *\/\n    if (qid > 1) {\n      pl = gid('pl' + qid);\n      if (pl) { pl.className = 'mr-pip-line done'; }\n    }\n  }\n\n  \/* \u2500\u2500 Show the score panel after Submit is clicked \u2500\u2500 *\/\n  function showScore() {\n    var c, w, s, net, pct, disp, verdicts, vi, sc;\n    if (done) return;\n    done = true;\n\n    c = countVal('c');\n    w = countVal('w');\n    s = TOTAL - answered;\n    net  = (c * 4) - w;\n    pct  = Math.max(0, Math.round((net \/ MAX) * 100));\n    disp = Math.min(100, Math.max(0, pct));\n\n    \/* fill the donut ring \u2014 hex must match --ter exactly *\/\n    gid('ring').style.background =\n      'conic-gradient(#2A6E8A ' + disp + '%, #D8E8EE 0%)';\n\n    gid('pct').textContent = pct + '%';\n    gid('net').textContent = 'Net Score: ' + net + ' \/ ' + MAX;\n\n    \/* pick verdict by correct count *\/\n    verdicts = [\n      [5, 'Perfect round. Exceptional clinical reasoning.'],\n      [4, 'Strong \\u2014 one nuance to revisit.'],\n      [3, 'Solid base \\u2014 consolidate the finer distinctions.'],\n      [2, 'Halfway there \\u2014 review the missed cases carefully.'],\n      [0, 'These cases repay close reading. Come back tomorrow.']\n    ];\n    gid('verdict').textContent = verdicts[4][1]; \/* default: lowest *\/\n    for (vi = 0; vi < verdicts.length; vi++) {\n      if (c >= verdicts[vi][0]) {\n        gid('verdict').textContent = verdicts[vi][1];\n        break;\n      }\n    }\n\n    \/* unicode escapes \u2014 no multi-byte literals in source *\/\n    gid('ct-c').textContent = '\\u2705 ' + c + ' Correct';\n    gid('ct-w').textContent = '\\u274C ' + w + ' Wrong';\n    gid('ct-s').textContent = '\\u23ED ' + s + ' Skipped';\n\n    sc = gid('score');\n    sc.style.display = 'block';\n    sc.scrollIntoView({ behavior: 'smooth', block: 'center' });\n  }\n\n  \/* \u2500\u2500 Sticky progress bar via IntersectionObserver \u2500\u2500\n     When the sentinel div (just below the header) leaves the\n     viewport, the fixed progress bar appears. When the sentinel\n     comes back into view (user scrolled back up), bar disappears. *\/\n  function initObserver() {\n    var sentinel = gid('sentinel'), bar = gid('progress');\n    if (!sentinel || !bar || !window.IntersectionObserver) return;\n    new IntersectionObserver(function (entries) {\n      if (!entries[0].isIntersecting) {\n        bar.className = 'mr-progress visible';\n      } else {\n        bar.className = 'mr-progress';\n      }\n    }, { threshold: 0 }).observe(sentinel);\n  }\n\n  \/* \u2500\u2500 Bootstrap \u2500\u2500 *\/\n  function init() {\n    gid('submit').addEventListener('click', showScore);\n    gid('retry').addEventListener('click', function () {\n      build();\n      window.scrollTo(0, 0);\n    });\n    initObserver();\n    build();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n\n}());\n<\/script>\n<\/body>\n<\/html>\n\n\n","protected":false},"excerpt":{"rendered":"<p>GROSS MOTOR FINE MOTOR LANG- UAGE SOCIAL 0 3 6 9 12 15 18 24 Age (months) Developmental Milestones \u2014 Key Markers by Stream (0\u201324 months) Head control Sits +support Sits alone Pulls to stand Walks alone &#9888; Red flag Runs \/ stairs Hands open Palmar grasp Pincer grasp Neat pincer Tower 2 cubes Tower&hellip;&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[24],"tags":[],"class_list":["post-36713","post","type-post","status-publish","format-standard","hentry","category-neet-pg"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Developmental Milestones - atsixty<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Developmental Milestones - atsixty\" \/>\n<meta property=\"og:description\" content=\"GROSS MOTOR FINE MOTOR LANG- UAGE SOCIAL 0 3 6 9 12 15 18 24 Age (months) Developmental Milestones \u2014 Key Markers by Stream (0\u201324 months) Head control Sits +support Sits alone Pulls to stand Walks alone &#9888; Red flag Runs \/ stairs Hands open Palmar grasp Pincer grasp Neat pincer Tower 2 cubes Tower&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/\" \/>\n<meta property=\"og:site_name\" content=\"atsixty\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-29T02:20:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-29T02:21:28+00:00\" \/>\n<meta name=\"author\" content=\"Avi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Avi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/\"},\"author\":{\"name\":\"Avi\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/#\\\/schema\\\/person\\\/cf65e7ac7d8226d95c0bdf1036f7951d\"},\"headline\":\"Developmental Milestones\",\"datePublished\":\"2026-04-29T02:20:08+00:00\",\"dateModified\":\"2026-04-29T02:21:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/\"},\"wordCount\":160,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/#\\\/schema\\\/person\\\/cf65e7ac7d8226d95c0bdf1036f7951d\"},\"articleSection\":[\"NEET PG\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/\",\"url\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/\",\"name\":\"Developmental Milestones - atsixty\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/#website\"},\"datePublished\":\"2026-04-29T02:20:08+00:00\",\"dateModified\":\"2026-04-29T02:21:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/2026\\\/04\\\/29\\\/developmental-milestones\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/atsixty.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Developmental Milestones\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/#website\",\"url\":\"https:\\\/\\\/atsixty.com\\\/\",\"name\":\"At Sixty\",\"description\":\"The Option Taken\",\"publisher\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/#\\\/schema\\\/person\\\/cf65e7ac7d8226d95c0bdf1036f7951d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/atsixty.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/atsixty.com\\\/#\\\/schema\\\/person\\\/cf65e7ac7d8226d95c0bdf1036f7951d\",\"name\":\"Avi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/atsixty.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo-agency.png\",\"url\":\"https:\\\/\\\/atsixty.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo-agency.png\",\"contentUrl\":\"https:\\\/\\\/atsixty.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo-agency.png\",\"width\":200,\"height\":200,\"caption\":\"Avi\"},\"logo\":{\"@id\":\"https:\\\/\\\/atsixty.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/logo-agency.png\"},\"sameAs\":[\"https:\\\/\\\/atsixty.com\"],\"url\":\"https:\\\/\\\/atsixty.com\\\/index.php\\\/author\\\/avinaux\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Developmental Milestones - atsixty","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/","og_locale":"en_US","og_type":"article","og_title":"Developmental Milestones - atsixty","og_description":"GROSS MOTOR FINE MOTOR LANG- UAGE SOCIAL 0 3 6 9 12 15 18 24 Age (months) Developmental Milestones \u2014 Key Markers by Stream (0\u201324 months) Head control Sits +support Sits alone Pulls to stand Walks alone &#9888; Red flag Runs \/ stairs Hands open Palmar grasp Pincer grasp Neat pincer Tower 2 cubes Tower&hellip;&nbsp;","og_url":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/","og_site_name":"atsixty","article_published_time":"2026-04-29T02:20:08+00:00","article_modified_time":"2026-04-29T02:21:28+00:00","author":"Avi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Avi","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/#article","isPartOf":{"@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/"},"author":{"name":"Avi","@id":"https:\/\/atsixty.com\/#\/schema\/person\/cf65e7ac7d8226d95c0bdf1036f7951d"},"headline":"Developmental Milestones","datePublished":"2026-04-29T02:20:08+00:00","dateModified":"2026-04-29T02:21:28+00:00","mainEntityOfPage":{"@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/"},"wordCount":160,"commentCount":0,"publisher":{"@id":"https:\/\/atsixty.com\/#\/schema\/person\/cf65e7ac7d8226d95c0bdf1036f7951d"},"articleSection":["NEET PG"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/","url":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/","name":"Developmental Milestones - atsixty","isPartOf":{"@id":"https:\/\/atsixty.com\/#website"},"datePublished":"2026-04-29T02:20:08+00:00","dateModified":"2026-04-29T02:21:28+00:00","breadcrumb":{"@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atsixty.com\/index.php\/2026\/04\/29\/developmental-milestones\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/atsixty.com\/"},{"@type":"ListItem","position":2,"name":"Developmental Milestones"}]},{"@type":"WebSite","@id":"https:\/\/atsixty.com\/#website","url":"https:\/\/atsixty.com\/","name":"At Sixty","description":"The Option Taken","publisher":{"@id":"https:\/\/atsixty.com\/#\/schema\/person\/cf65e7ac7d8226d95c0bdf1036f7951d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atsixty.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/atsixty.com\/#\/schema\/person\/cf65e7ac7d8226d95c0bdf1036f7951d","name":"Avi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/atsixty.com\/wp-content\/uploads\/2025\/08\/logo-agency.png","url":"https:\/\/atsixty.com\/wp-content\/uploads\/2025\/08\/logo-agency.png","contentUrl":"https:\/\/atsixty.com\/wp-content\/uploads\/2025\/08\/logo-agency.png","width":200,"height":200,"caption":"Avi"},"logo":{"@id":"https:\/\/atsixty.com\/wp-content\/uploads\/2025\/08\/logo-agency.png"},"sameAs":["https:\/\/atsixty.com"],"url":"https:\/\/atsixty.com\/index.php\/author\/avinaux\/"}]}},"_links":{"self":[{"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/posts\/36713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/comments?post=36713"}],"version-history":[{"count":1,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/posts\/36713\/revisions"}],"predecessor-version":[{"id":36714,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/posts\/36713\/revisions\/36714"}],"wp:attachment":[{"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/media?parent=36713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/categories?post=36713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atsixty.com\/index.php\/wp-json\/wp\/v2\/tags?post=36713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}