1<!DOCTYPE html> 2<html lang="en"> 3<!-- OVERRIDES (must stay ABOVE <head>) --> 4<meta name="page-title" content="Bradley's Maths â GCSE & IGCSE Resources"> 5<meta name="page-description" content="Master Higher Tier Maths with worksheets, model answers, and predicted papers."> 6<meta name="page-url" content="https://bradleysmaths.co.uk/"> 7<meta name="page-og-image" content="/images/01/g_13.png"> 8<meta name="page-type" content="homepage"> 9 10<head> 11 <!-- Google Analytics -->
vendor: 68 bytes, lines 11-12
11 12 <script async src="https://www.googletagmanager.com/gtag/js?id=
12G-PY6CVXTWP4
vendor: 16 bytes, lines 12-13
12"></script> 13
13<script> 14
vendor: 145 bytes, lines 14-17
14window.dataLayer = window.dataLayer || []; 15 function gtag(){dataLayer.push(arguments);} 16 gtag('js', new Date()); 17 gtag('config', '
17G-PY6CVXTWP4
vendor: 8 bytes, lines 17-18
17'); 18
18</script>
18 19 20 <!-- Fonts --> 21 <link href="https://fonts.googleapis.com/css2?family=Merriweather:wght@400;600&display=swap" rel="stylesheet"> 22 23 <!-- Basic SEO --> 24 <meta charset="UTF-8"> 25 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 26 27 <!-- PWA App Links --> 28 <link rel="manifest" href="/manifest.json"> 29 <meta name="theme-color" content="#5C2092"> 30 <link rel="apple-touch-icon" href="/images/app-icon-192.png"> 31 32 <!-- DEFAULTS (will be replaced by overrides if present) --> 33 <title>Bradley's Maths</title> 34 <meta name="description" content="Higher Tier GCSE & IGCSE Maths resources. Worksheets, model answers, and predicted papers."> 35 36 <!-- Canonical (dynamic) --> 37 <link id="canonical-link" rel="canonical" href=""> 38 39 <!-- Open Graph (dynamic) --> 40 <meta property="og:title" content=""> 41 <meta property="og:description" content=""> 42 <meta property="og:type" content=""> 43 <meta property="og:url" content=""> 44 <meta property="og:site_name" content="Bradley's Maths"> 45 <meta property="og:image" content=""> 46 47 <!-- Styles --> 48 <link rel="stylesheet" href="/styles.css"> 49 50 <!-- MathJax --> 51
51<script> 52 window.MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] } }; 53 </script>
53 54
54<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
54 55 56 <!-- JSON-LD container --> 57
57<script id="jsonld-block" type="application/ld+json"></script>
57 58 59 <!-- DYNAMIC META SCRIPT --> 60
60<script> 61 document.addEventListener("DOMContentLoaded", function () { 62 63 // Read overrides 64 const title = document.querySelector('meta[name="page-title"]')?.content || "Bradley's Maths"; 65 const desc = document.querySelector('meta[name="page-description"]')?.content || "Higher Tier GCSE & IGCSE Maths resources."; 66 const url = document.querySelector('meta[name="page-url"]')?.content || window.location.href; 67 const img = document.querySelector('meta[name="page-og-image"]')?.content || "/images/social-preview.png"; 68 const type = document.querySelector('meta[name="page-type"]')?.content || "webpage"; 69 70 // Apply title + description 71 document.title = title; 72 document.querySelector('meta[name="description"]').setAttribute("content", desc); 73 74 // Canonical 75 document.getElementById("canonical-link").setAttribute("href", url); 76 77 // Open Graph 78 document.querySelector('meta[property="og:title"]').setAttribute("content", title); 79 document.querySelector('meta[property="og:description"]').setAttribute("content", desc); 80 document.querySelector('meta[property="og:url"]').setAttribute("content", url); 81 document.querySelector('meta[property="og:image"]').setAttribute("content", img); 82 83 // OG type 84 const ogType = (type === "article") ? "article" : 85 (type === "homepage") ? "website" : 86 "website"; 87 document.querySelector('meta[property="og:type"]').setAttribute("content", ogType); 88 89 // JSON-LD generation 90 let jsonld = {}; 91 92 if (type === "homepage") { 93 jsonld = { 94 "@context": "https://schema.org", 95 "@type": "WebSite", 96 "name": "Bradley's Maths", 97 "url": url, 98 "potentialAction": { 99 "@type": "SearchAction", 100 "target": url + "?q={search_term_string}", 101 "query-input": "required name=search_term_string" 102 } 103 }; 104 } 105 106 if (type === "webpage") { 107 jsonld = { 108 "@context": "https://schema.org", 109 "@type": "WebPage", 110 "name": title, 111 "url": url 112 }; 113 } 114 115 if (type === "article") { 116 jsonld = { 117 "@context": "https://schema.org", 118 "@type": "Article", 119 "headline": title, 120 "description": desc, 121 "url": url, 122 "image": img, 123 "author": { "@type": "Person", "name": "William Bradley" } 124 }; 125 } 126 127 document.getElementById("jsonld-block").textContent = JSON.stringify(jsonld, null, 2); 128 }); 129 </script>
129 130 131</head> 132 133<body> 134 <!-- NAVIGATION BAR --> 135 <nav class="navbar"> 136 <a href="index.html" class="nav-brand">Bradley's Maths</a> 137 <button class="hamburger" onclick="toggleMenu()">â°</button> 138 139 <div class="nav-links" id="navLinks"> 140 <a href="index.html" class="highlight-link">Home</a> 141 142 <a href="unified-revision-hub.html">The Revision Hub</a> 143 144 <a href="blog/index.html">Blog</a> 145 146 <a href="gcse.html">GCSE</a> 147 148 <a href="igcse.html">IGCSE (0580)</a> 149 150 <a href="qa.html">Q&A / Request a Topic</a> 151 152 <a href="https://payhip.com/bradleysmaths">Store</a> 153 154 <a href="https://www.youtube.com/@BradleysMaths" style="color:#ff9999;">YouTube</a> 155 <!-- Hide the dark mode button for now 156 <button id="theme-toggle" class="btn-theme" onclick="toggleTheme()"> 157 ð Dark Mode 158 </button> 159 --> 160 </div> 161 </nav> 162 163 <div class="credential-bar"> 164 <span>Retired British International Head Teacher</span> 165 <span>â¢</span> 166 <span>UK GCSE & IGCSE Mathematics Specialist</span> 167 </div> 168 169<!-- COURSE PATHWAYS --> 170 171 <h1>Bradley's Maths</h1> 172 173 <h2>Structured, Exam-Focused Mathematics</h2> 174 175 <p class="section-intro"> 176 Choose the course you are studying to access structured worksheets, 177 prediction papers and daily exam practice. 178 </p> 179 180 181 <div class="btn-group"> 182 <a href="gcse.html" class="btn btn-large btn-gcse"> 183 GCSE Mathematics<br> 184 <span class="btn-sub">AQA ⢠Edexcel ⢠OCR ⢠WJEC</span> 185 </a> 186 187 <a href="igcse.html" class="btn btn-large btn-igcse"> 188 Cambridge IGCSE Mathematics<br> 189 <span class="btn-sub">Syllabus 0580</span> 190 </a> 191 </div> 192 193 <div class="container"> 194 <div class="trust-badge"> 195 <h2 style="text-align: center; color: #2c3e50;">Trusted by International Educators</h2> 196 </div> 197 <!-- Jeff's Quote --> 198 <div class="resource-card"> 199 200 <p style="font-style: italic;">"I gave your Paper 2 to my students... <strong>I did not find a single wrong answer!</strong> Your solution document is superb. I have described your website to all 40 of my Extended students."</p> 201 <p style="font-weight: bold; margin-top: 10px; color: #34495e;">â J.H., Senior Maths Teacher</p> 202 203 </div> 204 205 <!-- Seef's Quote --> 206 <div class="resource-card"> 207 208 <p style="font-style: italic;">"These are <strong>brilliant.</strong> Mr. Bradley was our Principal and has many years of experience as an excellent mathematics teacher. I've sent the link to all our Y10 and Y11 students."</p> 209 <p style="font-weight: bold; margin-top: 10px; color: #34495e;">â S. M., IBDP Coordinator and Mathematics Teacher</p> 210 211 </div> 212 </div> 213 214 215<!-- FOOTER --> 216 <div class="footer"> 217 218 <p>© 2025 Bradley's Maths</p> 219 220 </div> 221 222 <!-- JAVASCRIPT (Keep your existing script here) --> 223
223<script src="problems-main.js"></script>
223 224
224<script src="engine.js"></script>
224 225
225<script src="dark.js"></script>
225 226 <!-- Register Service Worker for PWA --> 227
227<script> 228 if ('serviceWorker' in navigator) { 229 window.addEventListener('load', () => { 230 navigator.serviceWorker.register('/sw.js').then(reg => { 231 console.log('App ready for download!', reg.scope); 232 }).catch(err => { 233 console.error('App download registration failed:', err); 234 }); 235 }); 236 } 237 </script>
237 238 239</body> 240</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.