PageSourceSearch

https://www.timestables.com/

html timestables.com collected 2026-10-01 13:13:24 UTC 91,417 bytes, 2,437 lines download raw bytes

1<!DOCTYPE html>
2
3<html lang="en">
4
5<head>
6
7	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
8	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
9
10	<title>Multiplication Tables with times tables games</title>
11	<meta name="description" content="Come and learn your multiplication tables. Improve with the 5-step plan, the tempo test, multiplication games, printable worksheets and get the diploma." />			
12	<meta name="apple-mobile-web-app-capable" content="yes" />
13
14	<meta property="og:description" content="Come and learn your multiplication tables. Improve with the 5-step plan, the tempo test, multiplication games, printable worksheets and get the diploma." />
15	<meta property="og:image" content="https://cdn-t-1.bvkstatic.com/us/static/images/times-table.png" />
16	<meta property="og:title" content="Multiplication Tables with times tables games" />
17	<meta property="og:type" content="website" />
18	<meta property="og:url" content="https://www.timestables.com/" />
19	<!-- Favicons -->
20	<link rel="apple-touch-icon" sizes="57x57" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-57x57.png">
21	<link rel="apple-touch-icon" sizes="114x114" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-114x114.png">
22	<link rel="apple-touch-icon" sizes="72x72" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-72x72.png">
23	<link rel="apple-touch-icon" sizes="144x144" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-144x144.png">
24	<link rel="apple-touch-icon" sizes="60x60" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-60x60.png">
25	<link rel="apple-touch-icon" sizes="120x120" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-120x120.png">
26	<link rel="apple-touch-icon" sizes="76x76" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-76x76.png">
27	<link rel="apple-touch-icon" sizes="152x152" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-152x152.png">
28	<link rel="apple-touch-icon" sizes="180x180" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/apple-touch-icon-180x180.png">
29	<link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-192x192.png" sizes="192x192">
30	<link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-160x160.png" sizes="160x160">
31	<link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-96x96.png" sizes="96x96">
32	<link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-16x16.png" sizes="16x16">
33	<link rel="icon" type="image/png" href="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/favicon-32x32.png" sizes="32x32">
34	<meta name="msapplication-TileColor" content="#ffffff">
35	<meta name="msapplication-TileImage" content="https://cdn-t-1.bvkstatic.com/us/static/images/favicons/mstile-144x144.png">
36	<link rel="canonical" href="https://www.timestables.com/" />
37	<link rel="alternate" hreflang="en" href="https://www.timestables.com/" />
38�	<link rel="alternate" hreflang="es" href="https://www.tablasdemultiplicar.com/" />
39�	<link rel="alternate" hreflang="pl" href="https://www.tabliczkamnożenia.pl/" />
40�	<link rel="alternate" hreflang="fr-FR" href="https://www.tablesdemultiplication.fr/" />
41�	<link rel="alternate" hreflang="it" href="https://www.tabelline.it/" />
42�	<link rel="alternate" hreflang="de-DE" href="https://www.einmaleins.de/" />
43�	<link rel="alternate" hreflang="nl-NL" href="https://www.tafeldiploma.nl/" />
44�	<link rel="alternate" hreflang="pt-BR" href="https://www.tabuadademultiplicar.com.br/" />
45�	<link rel="alternate" hreflang="tr" href="https://www.carpimtablosu.com/" />
46�	<link rel="alternate" hreflang="en-GB" href="https://www.timestables.co.uk/" />
47�	<link rel="alternate" hreflang="de-AT" href="https://www.einmaleins.at/" />
48�	<link rel="alternate" hreflang="de-CH" href="https://www.einmaleinslernen.ch/" />
49�	<link rel="alternate" hreflang="fr-CH" href="https://www.tabledemultiplication.ch/" />
50�	<link rel="alternate" hreflang="nl-BE" href="https://www.demaaltafels.be/" />
51�	<link rel="alternate" hreflang="pt-PT" href="https://www.tabuadas.pt/" />
52�	<link rel="alternate" hreflang="en-NZ" href="https://www.timestables.co.nz/" />
53�	<link rel="alternate" hreflang="no" href="https://www.gangetabellen.net/" />
54�	<link rel="alternate" hreflang="ro" href="https://www.tablainmultirii.ro/" />
55�	<link rel="alternate" hreflang="ms" href="https://www.sifirdarab.com/" />
56�	<link rel="alternate" hreflang="id" href="https://www.tabelperkalian.com/" />
57�	<link rel="alternate" hreflang="da" href="https://www.gangetabeller.dk/" />
58�	<link rel="alternate" hreflang="sv" href="https://www.multiplikationstabellen.se/" />
59�	<link rel="alternate" hreflang="fi" href="https://www.kertotaulut.com/" />
60
61	<!-- Favicons -->
62
63	<!-- Less (use for development only
64	<link href="static/styles/style.less" rel="stylesheet/less" />
65	
65<script src="static/scripts/less-1.7.0.min.js" ></script>
65
66	/Less -->
67	<link rel="stylesheet" href="/assets/vendor/font-awesome/4.7.0/css/font-awesome.min.css?v=26955053">
68	<link href="/assets/styles/log.css?v=a22bcb3e" rel="stylesheet" />
69	<link href="/assets/styles/style.css?v=2cddf085" rel="stylesheet" />
70<style>
71
72ul.steplist {
73	list-style-type: disc !important;
74	margin-left:23px;
75}
76</style>
77<style type="text/css">
78.adslot { display:inline-block; width: 336px; height: 280px; }
79@media (min-width:320px) { .adslot { display:none; } #adtxt2{ display:none; } }
80@media (min-width:360px) and (orientation: portrait) { .adslot { display:none; } #adtxt2{ display:none; } }
81@media (min-width:604px) { .adslot { display:none; } #adtxt2{ display:none; } }
82@media (min-width:1025px) { .adslot { display:inline-block; width:336px; height: 280px; } #adtxt2{ display:block; }}
83
84.adslot2 { display:inline-block; width: 1000px; height: 90px; max-height:90px; }
85@media (min-width:320px) { .adslot2 { display:none; } .adtxt{ display:none; } }
86@media (min-width:360px) and (orientation: portrait) { .adslot2 { display:none; } .adtxt{ display:none; } }
87@media (min-width:740px) { .adslot2 { display:inline-block; width: 728px; height: 90px; } .adtxt{ display:block; } }
88@media (min-width:1000px) { .adslot2 { display:inline-block; width: 1000px; height: 90px; } .adtxt{ display:block; } }
89
90
91</style>
92<style type="text/css">
93.board-wrap
94{
95	width:25%;
96	padding:3px !important;
97}
98.exeImg
99{
100	width: 32%;
101}
102
103@media screen and (max-width: 480px) {
104
105	.board-wrap
106	{
107		width:33.33%;
108		padding:3px !important;
109	}
110	.exeImg
111	{
112		width: 300px;
113	}
114
115}
116.prizetable{
117	position:absolute;
118	bottom:-3px;
119	right:2px;
120	width:100px;
121	opacity:0.8;
122}
123.board:hover .prizetable{
124	opacity:1;
125}
126
127.spelThumb{
128color:#fff;
129font-weight:bold;
130position: relative;
131float: left;
132width: 176px;
133height: 137px;
134max-width:44%;
135margin-right: 20px;
136margin-bottom: 0px;
137margin-top:5px;
138font-size: 12px;
139text-align: center;
140transition: all 0.2s ease;
141}
142
143.spelThumb img{
144	border-radius: 8px;
145	width: 100%;
146	box-shadow: 0 2px 2px 0 rgb(0 0 0 / 20%), 0 2px 6px 0 rgb(0 0 0 / 19%);
147}
148    
149.spelThumb:hover .htext {
150    opacity: 1;
151}
152
153.spelThumb:hover .hinnertext{
154	transition: all 0.3s ease;
155	transform: translateZ(0);
156	opacity:1;
157	
158}
159#advak{
160	float:left;
161	text-align:left;
162	margin-top:20px;
163	height:90px;
164}
165
166.htext {
167    width: 100%;
168    position: absolute;
169    bottom: 5px;
170    border-bottom-right-radius: 7px;
171    border-bottom-left-radius: 7px;
172    font-size: 12px;
173    min-height: 40px;
174    font-weight: bold;
175    left: 0px;
176    color: #fff;
177    background: #000202d4;
178    background: linear-gradient(transparent 25%,rgba(0,0,0,.65));
179    height: 100%;
180    opacity: 0;
181    transition: all 0.3s ease;
182}
183.hinnertext{
184	position:absolute;
185	transform: translate3d(0,10px,0);
186	left:0px;
187	width:100%;
188	transition: all 0.3s ease;
189	transition-delay: .1s;
190	bottom:10px;
191	opacity:0;
192}
193div.spelThumb:hover{
194	transform: scale(1.04) translate3d(0,-4px,0);
195}
196
197.spelThumb a{
198text-decoration: none;
199
200}
201
202</style>
203<script type="application/ld+json" class="saswp-schema-markup-output">{"@context":"https:\/\/schema.org","@type":"FAQPage","@id":"https:\/\/www.timestables.com\/#FAQ","mainEntity":[[{"@type":"Question","name":"How can I learn my times tables fast?","acceptedAnswer":{"@type":"Answer","text":"Learn them in chunks. Start with the easy times tables like 10, 2, and 5. Use methods like skip counting, adding and exercising daily for 15 minutes for a maximum long-term result. "}},{"@type":"Question","name":"What is the hardest times table in the world?","acceptedAnswer":{"@type":"Answer","text":"The 7 times table is the hardest to learn because 7 is a prime number, and so the last digit does not repeat itself until 10 times 7. The hardest times table question is 6 times 8."}},{"@type":"Question","name":"Which times table is the easiest?","acceptedAnswer":{"@type":"Answer","text":"The 10 times table is one of the easiest to learn. For a start, numbers in the 10 times table always end in a 0. And then the 5 and the 2 multiplication tables are also one of the easiest."}}]]}</script>
203					
203<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7769276089683868"></script>
203
204		</head>
205
206<body class="grid">
207
208	<header class="page-header clear" style="position:relative;">
209		
210			<div class="col-2-3 logo">
211			
212				<div class="col-2-5 module icon">
213				<a href="https://www.timestables.com/"><img src="https://cdn-t-1.bvkstatic.com/us//static/images/icon-tafels-oefenen.png" title="Times tables Logo" alt="Times tables Logo" width="220" height="128" /></a>
214				</div>
215			
216				<div class="col-3-5 module word " style="margin-top:5%;">
217				<img src="https://cdn-t-1.bvkstatic.com/us//static/images/logo-timestables-com.png" alt="Timestables.com" title="Timestables.com" width="330" height="40" />
218						<span class="payoff" style="color: #40650f;">Learn the multiplication tables here!</span>
219				</div>
220		
221		</div>
222		<link rel="stylesheet" href="/assets/vendor/font-awesome/5.15.4/css/all.min.css?v=ecd507b3">
223				
224				<div id="loginArea">
225			<a id="adultPortalLink" href="https://www.timestables.com/teacher-parent-portal/" class="adult-link">
226				Teacher / Parent			</a>
227			<div id="usrVak"></div>
228		</div>
229		
230		<style>
231		#loginArea {
232			position: absolute;
233			top: 8px;
234			right: 15px;
235			display: flex;
236			gap: 6px;
237			align-items: center;
238			font-size: 13px;
239			z-index: 10000;
240		}
241		.header-btn {
242			display: inline-flex;
243			align-items: center;
244			gap: 5px;
245			padding: 6px 10px;
246			border-radius: 5px;
247			text-decoration: none;
248			font-weight: 600;
249			border: 2px solid;
250		}
251		.header-btn-green {
252			background: #f0f7ef;
253			color: #40650f;
254			border-color: #689662;
255		}
256		.header-btn-green:hover {
257			background: #e0eedc;
258		}
259		.header-btn-blue {
260			background: #e8f4fc;
261			color: #0e3c67;
262			border-color: #37a7e9;
263		}
264		.header-btn-blue:hover {
265			background: #d7edfb;
266		}
267		.header-btn i {
268			font-size: 14px;
269		}
270		#usrVak {
271			display: flex;
272			align-items: center;
273			gap: 6px;
274		}
275		#usrVak .loginLink {
276			display: inline-flex;
277			align-items: center;
278			gap: 5px;
279			padding: 6px 10px;
280			border-radius: 5px;
281			cursor: pointer;
282			font-weight: 600;
283			border: 2px solid;
284		}
285		#usrVak #loglink {
286			background: #e8f4fc;
287			color: #0e3c67;
288			border-color: #37a7e9;
289		}
290		#usrVak #loglink:hover {
291			background: #d7edfb;
292		}
293		#usrVak #reglink {
294			background: #37a7e9;
295			color: white;
296			border-color: #37a7e9;
297		}
298		#usrVak #reglink:hover {
299			background: #2d8bc4;
300		}
301		#usrVak .loginLink i {
302			font-size: 14px;
303		}
304		#usrVak .logged-in-info {
305			display: flex;
306			align-items: center;
307			gap: 8px;
308			padding: 4px 10px;
309			background: #f0f7ef;
310			border: 2px solid #689662;
311			border-radius: 5px;
312			color: #40650f;
313			font-weight: 600;
314		}
315		#usrVak .logged-in-info a {
316			color: #37a7e9;
317		}
318		.adult-link {
319			color: #666;
320			text-decoration: none;
321			font-size: 12px;
322			padding: 4px 8px;
323			border-radius: 3px;
324			transition: color 0.2s, background 0.2s;
325		}
326		.adult-link:hover {
327			color: #40650f;
328			background: #f0f7ef;
329		}
330		@media (max-width:900px) {
331			#loginArea {
332				position: relative;
333				top: auto;
334				right: auto;
335				float: right;
336				margin: 5px 10px;
337				flex-wrap: wrap;
338				justify-content: flex-end;
339			}
340			#usrVak .loginLink span {
341				display: none;
342			}
343		}
344		</style>					
345		
346	</header>
347
348	 
349	 			<div id="topAd" style="text-align:left;clear:both;padding:0 0 4px 0;margin-top:-10px;">
350		<div class="adtxt" style="font-size:11px;line-height:12px;padding-left:14%;text-align:left;width:200px;">Advertisement</div>
351								<!-- Tafel-home-1[0] -->
352			 <ins class="adsbygoogle adslot2"
353			 data-ad-client="ca-pub-7769276089683868"
354			 data-ad-slot="9814119650">
355			</ins>
356			
357		
358	 </div>
359	 	<div class="page-content clear">
360
361		<div class="col-4-5">
362
363			<div class="main-content module">
364			
365				<div class="wysiwyg" style="padding:0;">
366				
367					<h1 class="page-heading" style="margin:0 auto 1px;font-size:28px;">Learn your multiplication tables</h1> 
368				
369					<p>At Timestables.com you can easily practice all of your tables. The arithmetic problems are clear and simple so you can immediately get started on practicing your  tables. Select one of the multiplication table you wish to practice from the list below and show what you can do on the speed test or printout great worksheets. </p>				
370					
371					</div>
372						<h2 style="text-align:left;margin-bottom:10px;">Which multiplication table do you want to learn?</h2>
373							<ul class="boards clear">
374				
375									<li class="board-wrap col-1-3">
376						<a href="https://www.timestables.com/1-times-table.html" class="boardlink">
377						<div class="board" style="padding:0;position:relative;">
378							<div class="content" style="font-size:16px;padding:0;text-align:center;">1 times table</div>
379						<span class="prizetable">
380							<span style="float:right;width:27px;" id="t1s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
381							
382							<span style="float:right;width:17px;" id="t1s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
383							<span style="float:right;width:17px;" id="t1s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
384							<span style="float:right;width:17px;" id="t1s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
385							<span style="float:right;width:17px;" id="t1s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
386							</span>
387						</div>
388						</a>
389					</li>
390												<li class="board-wrap col-1-3">
391						<a href="https://www.timestables.com/2-times-table.html" class="boardlink">
392						<div class="board" style="padding:0;position:relative;">
393							<div class="content" style="font-size:16px;padding:0;text-align:center;">2 times table</div>
394						<span class="prizetable">
395							<span style="float:right;width:27px;" id="t2s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
396							
397							<span style="float:right;width:17px;" id="t2s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
398							<span style="float:right;width:17px;" id="t2s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
399							<span style="float:right;width:17px;" id="t2s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
400							<span style="float:right;width:17px;" id="t2s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
401							</span>
402						</div>
403						</a>
404					</li>
405												<li class="board-wrap col-1-3">
406						<a href="https://www.timestables.com/3-times-table.html" class="boardlink">
407						<div class="board" style="padding:0;position:relative;">
408							<div class="content" style="font-size:16px;padding:0;text-align:center;">3 times table</div>
409						<span class="prizetable">
410							<span style="float:right;width:27px;" id="t3s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
411							
412							<span style="float:right;width:17px;" id="t3s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
413							<span style="float:right;width:17px;" id="t3s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
414							<span style="float:right;width:17px;" id="t3s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
415							<span style="float:right;width:17px;" id="t3s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
416							</span>
417						</div>
418						</a>
419					</li>
420												<li class="board-wrap col-1-3">
421						<a href="https://www.timestables.com/4-times-table.html" class="boardlink">
422						<div class="board" style="padding:0;position:relative;">
423							<div class="content" style="font-size:16px;padding:0;text-align:center;">4 times table</div>
424						<span class="prizetable">
425							<span style="float:right;width:27px;" id="t4s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
426							
427							<span style="float:right;width:17px;" id="t4s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
428							<span style="float:right;width:17px;" id="t4s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
429							<span style="float:right;width:17px;" id="t4s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
430							<span style="float:right;width:17px;" id="t4s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
431							</span>
432						</div>
433						</a>
434					</li>
435												<li class="board-wrap col-1-3">
436						<a href="https://www.timestables.com/5-times-table.html" class="boardlink">
437						<div class="board" style="padding:0;position:relative;">
438							<div class="content" style="font-size:16px;padding:0;text-align:center;">5 times table</div>
439						<span class="prizetable">
440							<span style="float:right;width:27px;" id="t5s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
441							
442							<span style="float:right;width:17px;" id="t5s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
443							<span style="float:right;width:17px;" id="t5s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
444							<span style="float:right;width:17px;" id="t5s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
445							<span style="float:right;width:17px;" id="t5s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
446							</span>
447						</div>
448						</a>
449					</li>
450												<li class="board-wrap col-1-3">
451						<a href="https://www.timestables.com/6-times-table.html" class="boardlink">
452						<div class="board" style="padding:0;position:relative;">
453							<div class="content" style="font-size:16px;padding:0;text-align:center;">6 times table</div>
454						<span class="prizetable">
455							<span style="float:right;width:27px;" id="t6s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
456							
457							<span style="float:right;width:17px;" id="t6s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
458							<span style="float:right;width:17px;" id="t6s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
459							<span style="float:right;width:17px;" id="t6s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
460							<span style="float:right;width:17px;" id="t6s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
461							</span>
462						</div>
463						</a>
464					</li>
465												<li class="board-wrap col-1-3">
466						<a href="https://www.timestables.com/7-times-table.html" class="boardlink">
467						<div class="board" style="padding:0;position:relative;">
468							<div class="content" style="font-size:16px;padding:0;text-align:center;">7 times table</div>
469						<span class="prizetable">
470							<span style="float:right;width:27px;" id="t7s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
471							
472							<span style="float:right;width:17px;" id="t7s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
473							<span style="float:right;width:17px;" id="t7s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
474							<span style="float:right;width:17px;" id="t7s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
475							<span style="float:right;width:17px;" id="t7s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
476							</span>
477						</div>
478						</a>
479					</li>
480												<li class="board-wrap col-1-3">
481						<a href="https://www.timestables.com/8-times-table.html" class="boardlink">
482						<div class="board" style="padding:0;position:relative;">
483							<div class="content" style="font-size:16px;padding:0;text-align:center;">8 times table</div>
484						<span class="prizetable">
485							<span style="float:right;width:27px;" id="t8s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
486							
487							<span style="float:right;width:17px;" id="t8s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
488							<span style="float:right;width:17px;" id="t8s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
489							<span style="float:right;width:17px;" id="t8s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
490							<span style="float:right;width:17px;" id="t8s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
491							</span>
492						</div>
493						</a>
494					</li>
495												<li class="board-wrap col-1-3">
496						<a href="https://www.timestables.com/9-times-table.html" class="boardlink">
497						<div class="board" style="padding:0;position:relative;">
498							<div class="content" style="font-size:16px;padding:0;text-align:center;">9 times table</div>
499						<span class="prizetable">
500							<span style="float:right;width:27px;" id="t9s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
501							
502							<span style="float:right;width:17px;" id="t9s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
503							<span style="float:right;width:17px;" id="t9s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
504							<span style="float:right;width:17px;" id="t9s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
505							<span style="float:right;width:17px;" id="t9s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
506							</span>
507						</div>
508						</a>
509					</li>
510												<li class="board-wrap col-1-3">
511						<a href="https://www.timestables.com/10-times-table.html" class="boardlink">
512						<div class="board" style="padding:0;position:relative;">
513							<div class="content" style="font-size:16px;padding:0;text-align:center;">10 times table</div>
514						<span class="prizetable">
515							<span style="float:right;width:27px;" id="t10s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
516							
517							<span style="float:right;width:17px;" id="t10s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
518							<span style="float:right;width:17px;" id="t10s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
519							<span style="float:right;width:17px;" id="t10s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
520							<span style="float:right;width:17px;" id="t10s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
521							</span>
522						</div>
523						</a>
524					</li>
525												<li class="board-wrap col-1-3">
526						<a href="https://www.timestables.com/11-times-table.html" class="boardlink">
527						<div class="board" style="padding:0;position:relative;">
528							<div class="content" style="font-size:16px;padding:0;text-align:center;">11
528 times table</div>
529						<span class="prizetable">
530							<span style="float:right;width:27px;" id="t11s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
531							
532							<span style="float:right;width:17px;" id="t11s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
533							<span style="float:right;width:17px;" id="t11s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
534							<span style="float:right;width:17px;" id="t11s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
535							<span style="float:right;width:17px;" id="t11s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
536							</span>
537						</div>
538						</a>
539					</li>
540												<li class="board-wrap col-1-3">
541						<a href="https://www.timestables.com/12-times-table.html" class="boardlink">
542						<div class="board" style="padding:0;position:relative;">
543							<div class="content" style="font-size:16px;padding:0;text-align:center;">12 times table</div>
544						<span class="prizetable">
545							<span style="float:right;width:27px;" id="t12s5"><img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" /></span>
546							
547							<span style="float:right;width:17px;" id="t12s4"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
548							<span style="float:right;width:17px;" id="t12s3"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
549							<span style="float:right;width:17px;" id="t12s2"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
550							<span style="float:right;width:17px;" id="t12s1"><img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" /></span>
551							</span>
552						</div>
553						</a>
554					</li>
555											
556				</ul>	
557			
558			
559							
560												
561							<h2 style="text-align:left;">Speed test and multiplication tables diploma.</h2>
562						<div class="wysiwyg" style="padding:0;">
563					
564												
565					<a href="https://www.timestables.com/speed-test/">
566					<img class="exeImg" src="https://cdn-t-1.bvkstatic.com/us/speed-test.png" alt="Speed test" /></a>
567					<a href="https://www.timestables.com/diploma/">
568					<img class="exeImg" src="https://cdn-t-1.bvkstatic.com/us/tables-diploma.png" alt="Tables diploma" /></a>
569											<a href="https://www.timestables.com/100-seconds/">
570					<img class="exeImg" src="https://cdn-t-1.bvkstatic.com/100-seconds.png" alt="100 seconds" /></a>
571					
572											
573					
574					<br />
575					</div>
576					
577					
578			
579			
580				
581				
582				<h2 style="text-align:left;">Multiplication games</h2>
583			
584<a href="https://www.timestables.com/3x3-obby.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/obby.png" /><span class="htext"><span class="hinnertext">3x3 Obby</span></span></div></a><a href="https://www.timestables.com/3x3-mini-games.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-mini-games-updated.png" /><span class="htext"><span class="hinnertext">3x3 Mini Games</span></span></div></a><a href="https://www.timestables.com/3x3-speed-escape.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-escape-thumbnail-1.png" /><span class="htext"><span class="hinnertext">3x3 Speed Escape</span></span></div></a><a href="https://www.timestables.com/3x3-tsunami.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/tsunami-thumbnail.png" /><span class="htext"><span class="hinnertext">3x3 Tsunami</span></span></div></a><a href="https://www.timestables.com/3x3-dress-up.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-dress-up.png" /><span class="htext"><span class="hinnertext">3x3 Dress Up</span></span></div></a><a href="https://www.timestables.com/3x3-garden.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-garden.png" /><span class="htext"><span class="hinnertext">3x3 Garden</span></span></div></a><a href="https://www.timestables.com/panda-resort.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/panda-resort-updated.png" /><span class="htext"><span class="hinnertext">Panda Resort Game</span></span></div></a><a href="https://www.timestables.com/3x3-runner.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-runner-2.png" /><span class="htext"><span class="hinnertext">
5843x3 Runner</span></span></div></a><a href="https://www.timestables.com/spoinky.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/spoinky-thumb.png" /><span class="htext"><span class="hinnertext">Spoinky</span></span></div></a><a href="https://www.timestables.com/3x3-island.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/3x3-island-thumb.png" /><span class="htext"><span class="hinnertext">3x3 Island</span></span></div></a><a href="https://www.timestables.com/highway-times-tables.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/highway-thumb-2.png" /><span class="htext"><span class="hinnertext">Highway Times Tables</span></span></div></a><a href="https://www.timestables.com/multiplication-mage.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/mage-thumb.png" /><span class="htext"><span class="hinnertext">Multiplication Mage</span></span></div></a><a href="https://www.timestables.com/watermelon-times-tables.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/watermelon.png" /><span class="htext"><span class="hinnertext">Watermelon Times Tables</span></span></div></a><a href="https://www.timestables.com/sticky-tables.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/sticky-tables-3.png" /><span class="htext"><span class="hinnertext">Sticky Tables</span></span></div></a><a href="https://www.timestables.com/color-sprint.html" style="color:#fff;"><div class="spelThumb"  style="margin-bottom:0px;"><img src="https://cdn-t-1.bvkstatic.com/us/static/images/games/color-sprint.png" /><span class="htext"><span class="hinnertext">Color Sprint</span></span></div></a>						
585											
586		<br style="clear:both;" />
587		
588							<div style="text-align:left;float:left;margin-right:20px;">
589						<h3>Play against other players!</h3>
590						<a style="color:#000;" href="https://www.timestables.com/multiplayer-speed-quiz/">
591					<img class="exeImg" style="width:300px;border: 3px #9db2f1 solid; border-radius: 5px;" src="https://cdn-t-1.bvkstatic.com/us/multiplayer-speed-quiz.png" title="Multiplayer Speed Quiz" alt="Multiplayer Speed Quiz" /><br /> Multiplayer Speed Quiz</a>
592				</div>
593
594			<br style="clear:both;" />
595					
596				
597				<br style="clear:both;" />
598					<div class="wysiwyg">
599					<p>Choose the table you want to practice from the following. First you can practice the multiplication facts in sequence and once you have got the hang of that you can practice all the sums in random order for each table. If you have forgotten any answers, just go back to the 'all tables in sequence' page and practice them again thoroughly before trying again.</p>				
600					<p>Once you have got the hang of a number of tables you can select the speed test and choose the tables you want to practice getting quicker at. If you make a mistake, you came see what the right answer is at the end of the test. This will help you learn all of your tables. The speed test is good practice for getting your tables diploma. On the tables diploma you answer all the questions against one clock, and if you get all of them right you will get your tables diploma. There are two tables diplomas. The little diploma is made up of 30 questions. Your little diploma shows you can do the 1,2,3,4,5 and 10 times tables. For the big tables diploma you are given 40 questions which include all the tables from 1 to 12. </p>	
601					<p>Learn the multiplication tables in an interactive way with the free math multiplication learning games for 2nd, 3rd, 4th and 5th grade. The game element in the times tables games make it even more fun learn.</p>					</div>
602
603
604
605
606			
607				<div class="wysiwyg">
608				<img src="https://cdn-t-1.bvkstatic.com/us/multiplication-tables.png"  alt="Multiplication tables" style="max-width:100%;" />
609				<h2>Practice your multiplication tables</h2>
610				<img src="https://cdn-t-1.bvkstatic.com/us/static/images/times-table.png" alt="times table cloud" style="float:right;padding:3px;" />
611				<p>Here you can find additional information about practicing multiplication tables at primary school. The 1 times table, 2 times table, 3 times table, 4 times table, 5 times table and 10 times table are the first times tables to be learned. The 6 times table, 7 times table, 8 times table, 9 times table, 11 times table, 12 times table and of course all the tables in random order are the next step. </p>
612
613<p>Not every child finds it easy to learn all the tables, so it is a good idea to keep on practicing them regularly after you learned them. There are a few tricks which make it easier to learn the tables and continue to master them, such as putting the smallest number first, which makes it easier for many children to answer correctly. For example 4 x 9 is easier to work out than 9 x 4. Switching the multiplication sum around makes it easier to answer. What also often helps is to use the tables you know 
613well for answering the sums in the more difficult tables. One example of this is 6 x 7, which is often said to be tricky. If you do 5 x 7 first and then add 1 x 7 it is suddenly easier to answer. You can do this the other way round too. For instance with 4 x 7 you can do 5 x 7 first then subtract 1 x 7. </p>
614
615<p>Why do we put so much effort into learning tables? Well, the multiplication tables keep on coming up in the next primary school years and even when you're at secondary school. You don't see them as tables, but as part of bigger mathematical problems. And it isn't only at school, but in your everyday life it is useful to know your times tables well so you can quickly work things out, for instance when you are buying or selling vegetables on the market. If you have any questions, comments or ideas for Timestables.com, please use our contact form. We'd be glad to hear from you. </p>
616
617<h2>The 5-step plan</h2>
618<p>
619Learn the times tables with the 5-step plan. We developed an innovative five step plan to help pupils learn the times tables in an effective and efficient way. This method has been tested at several schools and is recommended by teachers. 
620<br />
621The steps are:
622<br />
623</p>
624
625<ul class="steplist">
626<li>Step 1a: View, read aloud and repeat. To get familiar with the table. </li>
627<li>Step 1b: Fill in your times tables answers in sequence and check if you got them all right. </li>
628<li>Step 2: Drag the correct answers to the questions. </li>
629<li>Step 3: Fill in your answers for the mixed questions and check if you got them all right. </li>
630<li>Step 4: Multiple choice questions will help you to improve by looking at the questions in a different way. </li>
631<li>Step 5: Proof your knowledge and get the diploma. </li>
632</ul>
633
634<p>When you finished the 5 steps you can play the memory game or exercise with the worksheet. Other way to train more are with the tempo test, the 1 minute test or to play the times tables games. </p><p>
635We advise to exercise daily for 15 minutes for maximum result. </p>
636<h2>Information for teachers, tutors and parents</h2>
637
638<p>Our times tables website is trusted by educators, parents, and tutors around the world to help children build strong multiplication skills. With powerful remote learning tools and digital classrooms, it's easy to integrate our platform into any learning setting from schools to home environments.</p>
639
640<p>We use gamification in learning to make math fun and motivating, encouraging students to stay engaged while they build confidence in their times tables. Whether you're part of a classroom or working one-on-one, our resources are designed for flexible, effective learning.</p>
641
642<p>Many tutors rely on our platform to support their math tutoring online and private tutoring services, thanks to its simple interface and adaptive practice features. It's also an excellent fit for families using a homeschooling curriculum, offering structure and variety across all multiplication topics.</p>
643
644<p>Our educational software is compatible with modern e-learning platforms and is often used alongside online courses and math programs for kids to enhance instruction. With easy access and proven results, our site is a valuable tool for anyone supporting a child’s math journey, helping to improve early math skills and achieve lasting math learning success.</p>
645
646<p>This website is optimized not only for desktop and laptop computers, but also for Apple devices (iPhone, iPad) and Android devices, including tablets. On mobile devices, our site functions like an app for a smooth and easy learning experience.</p>
647
648<p>Explore our features and see how we’re helping learners succeed!</p>
649
650
651
652<h2>Frequently Asked Questions</h2>
653<div style='margin-bottom:10px;'><strong>How can I learn my times tables fast?</strong><br />Learn them in chunks. Start with the easy times tables like 10, 2, and 5. Use methods like skip counting, adding and exercising daily for 15 minutes for a maximum long-term result. </div>
654<div style='margin-bottom:10px;'><strong>What is the hardest times table in the world?</strong><br />The 7 times table is the hardest to learn because 7 is a prime number, and so the last digit does not repeat itself until 10 times 7. The hardest times table question is 6 times 8.</div>
655<div style='margin-bottom:10px;'><strong>Which times table is the easiest?</strong><br />The 10 times table is one of the easiest to learn. For a start, numbers in the 10 times table always end in a 0. And then the 5 and the 2 multiplication tables are also one of the easiest.</div>
656<br />
657
658
659
660
661<h2>Practice your time tables online</h2>
662<p>Multiplication tables are important and there are not many places where you can learn them quickly and easily, so we have come up with Timestables.com! Practicing your tables online is really easy at Timestables.com. The multiplication games are clear and simple so you can get started right away. Click on one of the tables to get started right away. Fill in the answers in the lines and when you've finished, click on 'check'. You will see right away which answers are correct and which are incorrect. You can also practice different times tables in one exercise so you can test whether you know them all.</p>
663<p>You can also practice the tables interactively with the free multiplication games. On the multiplication games page we now have an answer-dragging game and a table balloons game. </p>
664<p>Multiplication tables form the basis for the calculations that you do in the following years, so it’s important that you fully understand them. </p>
665
666<p>
667Do you want to practice more math? Go to <a href="https://www.mathdiploma.com/" style="color:#8c806e;" target="_blank">Mathdiploma.com</a> - Here you can practice addition, subtraction, multiplying, dividing and a lot more!  <br />
668</p>							</div>
669				<span style="margin-left:20px;float:right;">
670				<a href='javascript:void((function()%7Bvar%20e=document.createElement(&apos;script&apos;);e.setAttribute(&apos;type&apos;,&apos;text/javascript&apos;);e.setAttribute(&apos;charset&apos;,&apos;UTF-8&apos;);e.setAttribute(&apos;src&apos;,&apos;https://assets.pinterest.com/js/pinmarklet.js?r=&apos;+Math.random()*99999999);document.body.appendChild(e)%7D)());'><img src="https://cdn-t-1.bvkstatic.com/us/static/images/pinit.png" alt="pin it"/></a>
671				</span>
672				<br style="clear:both;" />
673							</div>
674
675		</div>
676
677		<aside class="col-1-5 sidebar">
678
679			<div class="sidebar-trigger">
680				<div class="fr button" >
681					<div class="icon">
682						<div class="one"></div><div class="two"></div><div class="three"></div>
683					</div>
684					<div class="text">Menu</div>
685				</div>
686			</div>
687
688			<div class="module widget">
689				<h3 class="heading">Menu</h3>
690				<ul class="nav">					<li><span class="arrow">►</span> <a href="https://www.timestables.com/">Home</a></li>
691											<li><span class="arrow">►</span> <a href="https://www.timestables.com/multiplication-games/">Multiplication games</a></li>
692										<li><span class="arrow">►</span> <a href="https://www.timestables.com/speed-test/">Speed Test X</a></li>
693					<li><span class="arrow">►</span> <a href="https://www.timestables.com/diploma/">Diploma</a></li>
694									
695					<li><span class="arrow">►</span> <a href="https://www.timestables.com/times-table-chart/">Multiplication chart</a></li>
696																														
697					<li><span class="arrow">►</span> <a href="https://www.timestables.com/worksheets/">Worksheets</a></li>
698															<li><span class="arrow">►</span> <a href="https://www.timestables.com/trophy-cabinet/">Trophy Cabinet</a></li>
699									<li><span class="arrow">►</span> <a href="https://www.timestables.com/contact/">Contact</a></li>
700				</ul>
701			</div>
702
703				</aside>
704
705	</div>
706
707		<footer class="page-footer">
708		<div class="col-1-1 copyright">
709			<div class="module">				<p>&copy; Copyright 2026 Timestables.com - <a href="https://www.timestables.com/privacy/">Disclaimer and Privacy Statement</a> - <a href="https://www.timestables.com/about-us/">About us</a> - <a href="https://www.timestables.com/cookies/">Cookies</a></p>
710			</div>
711			<div class="footer-lang-menu" style="text-align:center;padding:5px 0;position:relative;">
712				<span onclick="catClick();" onmouseover="catBoxOver();" onmouseout="catBoxOut();" class="vlagB" style="cursor:pointer;display:inline-block;">- English (US)</span>
713				<div onmouseover="resCatOver();" onmouseout="resCatOut();" id="resultC" class="vlagV" style="display:none;position:absolute;bottom:100%;left:50%;transform:translateX(-50%);background:#fff;border:1px solid #ccc;padding:8px 12px;z-index:999;white-space:nowrap;">
714	- <a style="margin-right:3px;" href="https://www.timestables.com/">English (US)</a><br />
715- <a style="margin-right:3px;" href="https://www.tablasdemultiplicar.com/">Español</a><br />
716- <a style="margin-right:3px;" href="https://www.tabliczkamnożenia.pl/">Polski</a><br />
717- <a style="margin-right:3px;" href="https://www.tablesdemultiplication.fr/">Français (FR)</a><br />
718- <a style="margin-right:3px;" href="https://www.tabelline.it/">Italiano</a><br />
719- <a style="margin-right:3px;" href="https://www.einmaleins.de/">Deutsch (DE)</a><br />
720- <a style="margin-right:3px;" href="https://www.tafeldiploma.nl/">Nederlands (NL)</a><br />
721- <a style="margin-right:3px;" href="https://www.tabuadademultiplicar.com.br/">Português (Brasil)</a><br />
722- <a style="margin-right:3px;" href="https://www.carpimtablosu.com/">Türkçe</a><br />
723- <a style="margin-right:3px;" href="https://www.timestables.co.uk/">English (UK)</a><br />
724- <a style="margin-right:3px;" href="https://www.einmaleins.at/">Deutsch (AT)</a><br />
725- <a style="margin-right:3px;" href="https://www.einmaleinslernen.ch/">Deutsch (CH)</a><br />
726- <a style="margin-right:3px;" href="https://www.tabledemultiplication.ch/">Français (CH)</a><br />
727- <a style="margin-right:3px;" href="https://www.demaaltafels.be/">Nederlands (BE)</a><br />
728- <a style="margin-right:3px;" href="https://www.tabuadas.pt/">Português (PT)</a><br />
729- <a style="margin-right:3px;" href="https://www.timestables.co.nz/">English (NZ)</a><br />
730- <a style="margin-right:3px;" href="https://www.gangetabellen.net/">Norsk</a><br />
731- <a style="margin-right:3px;" href="https://www.tablainmultirii.ro/">Română</a><br />
732- <a style="margin-right:3px;" href="https://www.sifirdarab.com/">Bahasa Melayu</a><br />
733- <a style="margin-right:3px;" href="https://www.tabelperkalian.com/">Bahasa Indonesia</a><br />
734- <a style="margin-right:3px;" href="https://www.gangetabeller.dk/">Dansk</a><br />
735- <a style="margin-right:3px;" href="https://www.multiplikationstabellen.se/">Svenska</a><br />
736- <a style="margin-right:3px;" href="https://www.kertotaulut.com/">Suomi</a><br />				</div>
737			</div>
738		</div>
739	</footer>
740
741	
742<script src="/assets/vendor/jquery/3.6.0/jquery.min.js?v=8fb8fee4"></script>
vendor: 1 bytes, line 742
742
743<script>
744var catShow = false;
745var catOver = false;
746var catBoxOverBool = false;
747var timeoutFired = false;
748function catClick(){
749	if(!catShow){
750		$('#resultC').show();
751		catShow = true;
752	} else {
753		$('#resultC').hide();
754		catShow = false;
755	}
756}
757function resCatOver(){ catOver = true; }
758function resCatOut(){
759	catOver = false;
760	if(catBoxOverBool == false){
761		setTimeout(function(){sluitResC()},50);
762	}
763}
764function sluitResC(){
765	if(catBoxOverBool == false && catOver == false){
766		$('#resultC').hide();
767		catShow = false;
768	}
769}
770function openResC(){
771	if(catBoxOverBool == true && catShow == false){
772		$('#resultC').show();
773		catShow = true;
774	}
775}
776function catBoxOver(){
777	catBoxOverBool = true;
778	if(catShow == false){
779		timeoutFired = true;
780		setTimeout(function(){openResC()},1000);
781	}
782}
783function catBoxOut(){
784	catBoxOverBool = false;
785	if(catOver == false){
786		setTimeout(function(){sluitResC()},50);
787	}
788}
789
790window.dataLayer = window.dataLayer || [];
791function gtag(){dataLayer.push(arguments);}
792
793$(document).ready(function($){
794
795
796var t=setInterval(mainLoop,100);
797$(window).on("unload", function(e) {clearInterval(t); console.log("Handler for .unload() called."); return ""; });
798
799function mainLoop(){
800	// Pages without the login header (e.g. contact) never define loginChecked;
801	// treat those as a guest visit instead of throwing on every tick.
802	if(typeof loginChecked === 'undefined' || loginChecked)
803	{
804		clearInterval(t);
805		var loggedIn = (window.loggedIn === true);
806		console.log("login is checked!");
807		console.log("checked login is: "+loggedIn);
808
809		(function(){
810			var s = document.createElement('script');
811			s.async = true;
812			s.src = 'https://www.googletagmanager.com/gtag/js?id=UA-57797082-7';
813			document.head.appendChild(s);
814		})();
815		gtag('js', new Date());
816		console.log("Analytics:"+loggedIn);
817		gtag('set', 'user_properties', { login: loggedIn ? '1' : '0' });
818		gtag('config', 'UA-57797082-7', { anonymize_ip: true });
819		gtag('config', 'UA-57797082-21', { anonymize_ip: true });
820	}
821	else
822	{
823		//console.log("Loop loop checked");
824	}
825
826}
827
828function setCookieIpad(name,value,days) {
829    var expires = "";
830    if (days) {
831        var date = new Date();
832        date.setTime(date.getTime() + (days*24*60*60*1000));
833        expires = "; expires=" + date.toUTCString();
834    }
835    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
836}
837function getCookieIpad(name) {
838    var nameEQ = name + "=";
839    var ca = document.cookie.split(';');
840    for(var i=0;i < ca.length;i++) {
841        var c = ca[i];
842        while (c.charAt(0)==' ') c = c.substring(1,c.length);
843        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
844    }
845    return null;
846}
847function eraseCookieIpad(name) {   
848    document.cookie = name+'=; Max-Age=-99999999; path=/';  
849}
850
851if(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)
852{
853  if(!getCookieIpad('isIpad')=='1')
854  {
855	setCookieIpad('isIpad','1',365);
856  }
857}
858else
859{
860	eraseCookieIpad('isIpad');
861}
862
863
864});
865
866</script>
866	
867<!-- Student Login Modal -->
868<div id="logVak" class="cd-popup">
869	<div class="cd-popup-container">
870		<div class="modal-header">
871			<h3>Student Login</h3>
872			<p>Log in to save your progress</p>
873		</div>
874		<form id="logForm" action="#" method="post">
875		<div class="modal-body">
876			<div class="form-group">
877				<label for="lUserName">Username:</label>
878				<input type="text" required id="lUserName" autocapitalize="none" name="lUserName" />
879			</div>
880			<div class="form-group">
881				<label for="lPassword">Password:</label>
882				<input type="password" required id="lPassword" name="lPassword" autocapitalize="none" autocorrect="off" autocomplete="off" spellcheck="false" />
883			</div>
884			<span class="error-text" id="errorLogText"></span>
885		</div>
886		<input type="submit" value="sbmt" style="visibility:hidden;position:absolute;" />
887		<div class="modal-footer">
888			<button type="button" id="logButton" class="btn-primary">Login</button>
889		</div>
890		</form>
891		<div class="modal-alt">
892			<p>Teacher or parent?<br />
893			<a href="#" id="switchToAdultLogin">Click here to log in &rarr;</a></p>
894			<p style="margin:8px 0 0;">No account yet?<br />
895			<a href="#" id="studentSwitchToSignup">Sign up for free</a></p>
896		</div>
897		<a href="#0" class="cd-popup-close img-replace"></a>
898	</div>
899</div>
900
901<!-- Teacher/Parent Login Modal -->
902<div id="adultLogVak" class="cd-popup">
903	<div class="cd-popup-container">
904		<div class="modal-header modal-header-green">
905			<h3>Teacher / Parent Login</h3>
906			<p>Manage your students</p>
907		</div>
908
909		<div class="role-tabs">
910			<button type="button" class="role-tab active" data-role="teacher">Teacher</button>
911			<button type="button" class="role-tab" data-role="parent">Parent</button>
912		</div>
913
914		<form id="adultLogForm" action="#" method="post">
915		<input type="hidden" id="adultLoginRole" name="role" value="teacher" />
916		<div class="modal-body">
917			<div class="form-group">
918				<label for="adultEmail">E-mail</label>
919				<input type="email" required id="adultEmail" name="adultEmail" />
920			</div>
921			<div class="form-group">
922				<label for="adultPassword">Password:</label>
923				<input type="password" required id="adultPassword" name="adultPassword" />
924			</div>
925			<span class="error-text" id="errorAdultLogText"></span>
926			<p style="margin:8px 0 0;text-align:right;"><a href="https://www.timestables.com/forgot-password.php?type=teacher" id="adultLostPassLink" style="font-size:13px;color:#7f8c9b;text-decoration:none;">Lost password?</a></p>
927		</div>
928		<input type="submit" value="sbmt" style="visibility:hidden;position:absolute;" />
929		<div class="modal-footer">
930			<button type="button" id="adultLogButton" class="btn-primary btn-green">Login</button>
931		</div>
932		</form>
933
934		<div class="modal-alt">
935			<p>No account yet? <a href="#" id="switchToSignup">Sign up for free</a></p>
936			<a href="#" id="backToStudentLogin">&larr; Back to student login</a>
937		</div>
938		<a href="#0" class="cd-popup-close img-replace"></a>
939	</div>
940</div>
941
942<!-- Sign Up Role Selection Modal -->
943<div id="regVak" class="cd-popup">
944	<div class="cd-popup-container">
945		<div class="modal-header">
946			<h3>Create a Free Account</h3>
947			<p>Choose your role</p>
948		</div>
949
950		<div class="modal-body">
951			<div class="role-card" id="selectTeacher">
952				<span class="role-icon">&#x1F469;&#x200D;&#x1F3EB;</span>
953				<div class="role-info">
954					<strong>I'm a teacher</strong>
955					<span>Create classes and track your students' progress</span>
956				</div>
957				<span class="role-arrow">&rarr;</span>
958			</div>
959			<div class="role-card" id="selectParent">
960				<span class="role-icon">&#x1F468;&#x200D;&#x1F469;&#x200D;&#x1F467;</span>
961				<div class="role-info">
962					<strong>I'm a parent</strong>
963					<span>Create accounts for your children</span>
964				</div>
965				<span class="role-arrow">&rarr;</span>
966			</div>
967
968			<div class="info-box">
969				Students: ask your teacher or parent to create an account for you.			</div>
970		</div>
971
972		<div class="modal-alt">
973			<a href="#" id="backToLoginFromReg">&larr; Already have an account? Log in</a>
974		</div>
975		<a href="#0" class="cd-popup-close img-replace"></a>
976	</div>
977</div>
978
979<!-- Registration Form Modal -->
980<div id="regFormVak" class="cd-popup">
981	<div class="cd-popup-container">
982		<div class="modal-header" id="regHeader">
983			<h3 id="regFormTitle">Teacher Registration</h3>
984			<p id="regFormSubtitle">Create your account</p>
985		</div>
986
987		<form id="regForm" action="javascript:void(0);">
988		<input type="hidden" id="regRole" name="regRole" value="teacher" />
989		<div class="modal-body">
990			<div class="form-row">
991				<div class="form-group">
992					<label for="regFirstName">First name</label>
993					<input type="text" required id="regFirstName" name="firstName" />
994				</div>
995				<div class="form-group">
996					<label for="regSurName">Last name</label>
997					<input type="text" required id="regSurName" name="surName" />
998				</div>
999			</div>
1000			<div class="form-group">
1001				<label for="regEmail">E-mail</label>
1002				<input type="email" required id="regEmail" name="email" />
1003			</div>
1004			<div class="form-group">
1005				<label for="regPassword">Password:</label>
1006				<input type="password" required id="regPassword" name="password" placeholder="Min. 6 characters" />
1007			</div>
1008			<div class="form-group">
1009				<label for="regPassword2">Please re-enter your password:</label>
1010				<input type="password" required id="regPassword2" name="password2" />
1011			</div>
1012			<span class="error-text" id="errorRegText"></span>
1013		</div>
1014		</form>
1015
1016		<div class="modal-footer modal-footer-split">
1017			<button type="button" id="regBackButton" class="btn-secondary">&larr; Back</button>
1018			<button type="button" id="regButton" class="btn-primary">Create Account</button>
1019		</div>
1020		<a href="#0" class="cd-popup-close img-replace"></a>
1021	</div>
1022</div>
1023
1024<style>
1025/* Modal Position - higher on screen */
1026.cd-popup-container {
1027	margin: 2em auto !important;
1028	max-width: 380px;
1029}
1030
1031@media only screen and (min-width: 768px) {
1032	.cd-popup-container {
1033		margin: 3em auto !important;
1034	}
1035}
1036
1037/* log.css pads every .cd-popup-container p (legacy message popups);
1038   the redesigned modals size their own paragraphs */
1039.cd-popup-container .modal-header p,
1040.cd-popup-container .modal-body p,
1041.cd-popup-container .modal-alt p {
1042	padding: 0;
1043}
1044
1045/* Modal Header */
1046.modal-header {
1047	background: #37a7e9;
1048	color: white;
1049	padding: 18px 20px;
1050	text-align: center;
1051	border-radius: 0.25em 0.25em 0 0;
1052}
1053
1054.modal-header-green {
1055	background: #689662;
1056}
1057
1058.modal-header h3 {
1059	margin: 0 0 4px;
1060	font-size: 20px;
1061	font-weight: 700;
1062	/* explicit: game.css has a stray global h2,h3 color rule that would
1063	   otherwise repaint the heading grey on pages that load it */
1064	color: #fff;
1065}
1066
1067.modal-header p {
1068	margin: 0;
1069	font-size: 13px;
1070	opacity: 0.9;
1071	color: #fff;
1072}
1073
1074/* Modal Body */
1075.modal-body {
1076	padding: 20px;
1077	background: #fff;
1078}
1079
1080/* Form Elements */
1081.form-group {
1082	margin-bottom: 14px;
1083	text-align: left;
1084}
1085
1086.form-group label {
1087	display: block;
1088	font-size: 13px;
1089	font-weight: 600;
1090	color: #333;
1091	margin-bottom: 4px;
1092}
1093
1094.form-group input {
1095	width: 100%;
1096	padding: 10px 12px;
1097	border: 2px solid #ddd;
1098	border-radius: 6px;
1099	font-size: 15px;
1100	box-sizing: border-box;
1101}
1102
1103.form-group input:focus {
1104	border-color: #37a7e9;
1105	outline: none;
1106}
1107
1108.form-row {
1109	display: flex;
1110	gap: 12px;
1111}
1112
1113.form-row .form-group {
1114	flex: 1;
1115}
1116
1117.error-text {
1118	color: #d32f2f;
1119	font-size: 13px;
1120	display: block;
1121}
1122
1123/* Modal Footer */
1124.modal-footer {
1125	padding: 0 20px 20px;
1126	background: #fff;
1127}
1128
1129.modal-footer-split {
1130	display: flex;
1131	gap: 10px;
1132}
1133
1134/* Buttons */
1135.btn-primary, .btn-secondary {
1136	width: 100%;
1137	padding: 12px;
1138	border: none;
1139	border-radius: 6px;
1140	font-size: 15px;
1141	font-weight: 600;
1142	cursor: pointer;
1143}
1144
1145.btn-primary {
1146	background: #37a7e9;
1147	color: white;
1148}
1149
1150.btn-primary:hover {
1151	background: #2d8bc4;
1152}
1153
1154.btn-primary.btn-green {
1155	background: #689662;
1156}
1157
1158.btn-primary.btn-green:hover {
1159	background: #567a51;
1160}
1161
1162.btn-secondary {
1163	background: #f5f5f5;
1164	color: #333;
1165	border: 2px solid #ddd;
1166}
1167
1168.btn-secondary:hover {
1169	background: #eee;
1170}
1171
1172/* Modal Alt/Footer Links */
1173.modal-alt {
1174	padding: 14px 20px;
1175	background: #f5f5f5;
1176	text-align: center;
1177	font-size: 13px;
1178	border-radius: 0 0 0.4em 0.4em;
1179}
1180
1181.modal-alt p {
1182	margin: 0 0 6px;
1183	color: #666;
1184}
1185
1186.modal-alt a {
1187	color: #37a7e9;
1188	text-decoration: none;
1189	font-weight: 600;
1190}
1191
1192.modal-alt a:hover {
1193	text-decoration: underline;
1194}
1195
1196/* Role Tabs */
1197.role-tabs {
1198	display: flex;
1199	background: #fff;
1200	padding: 15px 20px 0;
1201	gap: 8px;
1202}
1203
1204.role-tab {
1205	flex: 1;
1206	padding: 10px;
1207	border: 2px solid #ddd;
1208	border-radius: 6px;
1209	background: #fff;
1210	font-size: 14px;
1211	font-weight: 600;
1212	cursor: pointer;
1213	color: #666;
1214}
1215
1216.role-tab:hover {
1217	border-color: #689662;
1218}
1219
1220.role-tab.active {
1221	border-color: #689662;
1222	background: #f0f7ef;
1223	color: #40650f;
1224}
1225
1226/* Role Cards */
1227.role-card {
1228	display: flex;
1229	align-items: center;
1230	padding: 14px;
1231	border: 2px solid #ddd;
1232	border-radius: 8px;
1233	cursor: pointer;
1234	margin-bottom: 10px;
1235	background: #fff;
1236}
1237
1238.role-card:hover {
1239	border-color: #37a7e9;
1240	background: #f5fafd;
1241}
1242
1243.role-card .role-icon {
1244	font-size: 28px;
1245	margin-right: 12px;
1246}
1247
1248.role-card .role-info {
1249	flex: 1;
1250	text-align: left;
1251}
1252
1253.role-card .role-info strong {
1254	display: block;
1255	font-size: 15px;
1256	color: #333;
1257}
1258
1259.role-card .role-info span {
1260	font-size: 12px;
1261	color: #666;
1262}
1263
1264.role-card .role-arrow {
1265	color: #999;
1266	font-size: 18px;
1267}
1268
1269.role-card:hover .role-arrow {
1270	color: #37a7e9;
1271}
1272
1273/* Info Box */
1274.info-box {
1275	background: #fff8e1;
1276	border: 1px solid #ffe082;
1277	border-radius: 6px;
1278	padding: 10px 12px;
1279	font-size: 12px;
1280	color: #f57c00;
1281	margin-top: 5px;
1282}
1283
1284/* Close Button */
1285.cd-popup-container .cd-popup-close {
1286	position: absolute;
1287	top: 10px;
1288	right: 10px;
1289	width: 28px;
1290	height: 28px;
1291	background: rgba(0,0,0,0.2);
1292	border-radius: 50%;
1293	cursor: pointer;
1294}
1295
1296.cd-popup-container .cd-popup-close::before,
1297.cd-popup-container .cd-popup-close::after {
1298	content: '';
1299	position: absolute;
1300	top: 50%;
1301	left: 50%;
1302	width: 14px;
1303	height: 2px;
1304	background: #fff;
1305	margin-left: -7px;
1306	margin-top: -1px;
1307}
1308
1309.cd-popup-container .cd-popup-close::before {
1310	transform: rotate(45deg);
1311}
1312
1313.cd-popup-container .cd-popup-close::after {
1314	transform: rotate(-45deg);
1315}
1316
1317.cd-popup-container .cd-popup-close:hover {
1318	background: rgba(0,0,0,0.4);
1319}
1320
1321/* Responsive */
1322@media (max-width: 480px) {
1323	.cd-popup-container {
1324		width: 95%;
1325		margin: 1em auto !important;
1326	}
1327
1328	.form-row {
1329		flex-direction: column;
1330		gap: 0;
1331	}
1332}
1333
1334/* User Dropdown Menu */
1335.user-dropdown {
1336	position: relative;
1337	display: inline-block;
1338}
1339
1340.user-dropdown-toggle {
1341	display: flex;
1342	align-items: center;
1343	gap: 8px;
1344	padding: 6px 12px;
1345	background: #f0f7ef;
1346	border: 2px solid #689662;
1347	border-radius: 6px;
1348	cursor: pointer;
1349	font-size: 13px;
1350	font-weight: 600;
1351	color: #40650f;
1352	font-family: inherit;
1353}
1354
1355.user-dropdown-toggle:hover {
1356	background: #e0eedc;
1357}
1358
1359.user-dropdown.open .user-dropdown-toggle {
1360	border-bottom-left-radius: 0;
1361	border-bottom-right-radius: 0;
1362}
1363
1364.user-dropdown-toggle .user-stats {
1365	display: flex;
1366	gap: 8px;
1367}
1368
1369.user-dropdown-toggle .stat {
1370	display: flex;
1371	align-items: center;
1372	gap: 3px;
1373}
1374
1375.user-dropdown-toggle .stat img {
1376	height: 16px;
1377	vertical-align: middle;
1378}
1379
1380.user-dropdown-toggle .user-name {
1381	max-width: 100px;
1382	overflow: hidden;
1383	text-overflow: ellipsis;
1384	white-space: nowrap;
1385}
1386
1387.user-dropdown-toggle i.fa-chevron-down {
1388	font-size: 10px;
1389	transition: transform 0.2s;
1390}
1391
1392.user-dropdown.open .user-dropdown-toggle i.fa-chevron-down {
1393	transform: rotate(180deg);
1394}
1395
1396.user-dropdown-menu {
1397	display: none;
1398	position: absolute;
1399	top: 100%;
1400	right: 0;
1401	min-width: 100%;
1402	background: #fff;
1403	border: 2px solid #689662;
1404	border-top: none;
1405	border-radius: 0 0 6px 6px;
1406	box-shadow: 0 4px 12px rgba(0,0,0,0.15);
1407	z-index: 1000;
1408}
1409
1410.user-dropdown.open .user-dropdown-menu {
1411	display: block;
1412}
1413
1414.dropdown-item {
1415	display: flex;
1416	align-items: center;
1417	gap: 8px;
1418	padding: 10px 14px;
1419	color: #333;
1420	text-decoration: none;
1421	font-size: 13px;
1422	font-weight: 500;
1423	white-space: nowrap;
1424}
1425
1426.dropdown-item:hover {
1427	background: #f5f5f5;
1428}
1429
1430.dropdown-item i {
1431	width: 16px;
1432	text-align: center;
1433	color: #689662;
1434}
1435
1436.dropdown-item-logout {
1437	border-top: 1px solid #eee;
1438}
1439
1440.dropdown-item-logout i {
1441	color: #d32f2f;
1442}
1443
1444.dropdown-item-logout:hover {
1445	background: #fff5f5;
1446}
1447
1448@media (max-width: 900px) {
1449	.user-dropdown-toggle .user-name {
1450		display: none;
1451	}
1452	.user-dropdown-toggle .user-stats {
1453		gap: 6px;
1454	}
1455}
1456
1457@media (max-width: 500px) {
1458	.user-dropdown-toggle .stat span {
1459		display: none;
1460	}
1461}
1462
1463/* Task Badge (inside dropdown menu) */
1464.task-badge {
1465	background: #e53935;
1466	color: white;
1467	font-size: 11px;
1468	font-weight: 700;
1469	padding: 2px 6px;
1470	border-radius: 10px;
1471	margin-left: auto;
1472}
1473
1474/* Task notification dot (on header toggle button) */
1475.header-task-dot {
1476	position: absolute;
1477	top: -4px;
1478	right: -4px;
1479	width: 10px;
1480	height: 10px;
1481	background: #e53935;
1482	border-radius: 50%;
1483	border: 2px solid white;
1484	box-shadow: 0 1px 3px rgba(0,0,0,0.3);
1485	z-index: 1;
1486}
1487
1488/* Shake badge when menu opens with new tasks */
1489@keyframes badgeShake {
1490	0%, 100% { transform: translateX(0); }
1491	20% { transform: translateX(-3px); }
1492	40% { transform: translateX(3px); }
1493	60% { transform: translateX(-2px); }
1494	80% { transform: translateX(2px); }
1495}
1496#myTasksLink .task-badge.shake {
1497	animation: badgeShake 0.5s ease-in-out;
1498}
1499
1500/* XP Level Badge (in header button) */
1501.xp-level-badge-header {
1502	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1503	color: white;
1504	font-size: 11px;
1505	font-weight: 700;
1506	padding: 4px 10px;
1507	border-radius: 12px;
1508	white-space: nowrap;
1509	margin-left: auto;
1510}
1511
1512/* User Name in Dropdown */
1513.dropdown-user-name {
1514	padding: 10px 14px;
1515	font-weight: 700;
1516	color: #2C3E50;
1517	border-bottom: 1px solid #eee;
1518	font-size: 14px;
1519}
1520.dropdown-user-name i {
1521	color: #7F8C8D;
1522	margin-right: 4px;
1523}
1524
1525/* XP Header in Dropdown */
1526.dropdown-xp-header {
1527	padding: 12px 14px;
1528	background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1529	border-bottom: 1px solid #eee;
1530}
1531
1532.xp-title-row {
1533	display: flex;
1534	justify-content: space-between;
1535	align-items: center;
1536	margin-bottom: 6px;
1537}
1538
1539.xp-title {
1540	color: white;
1541	font-size: 12px;
1542	font-weight: 700;
1543}
1544
1545.xp-amount {
1546	color: #FFD700;
1547	font-size: 11px;
1548	font-weight: 700;
1549}
1550
1551.xp-bar-dropdown {
1552	height: 8px;
1553	background: rgba(0,0,0,0.2);
1554	border-radius: 4px;
1555	overflow: hidden;
1556	margin-bottom: 4px;
1557}
1558
1559.xp-bar-fill-dropdown {
1560	height: 100%;
1561	background: linear-gradient(90deg, #FFD700 0%, #FFA500 100%);
1562	border-radius: 4px;
1563	transition: width 0.5s ease-out;
1564}
1565
1566.xp-progress-text {
1567	color: rgba(255,255,255,0.8);
1568	font-size: 10px;
1569	text-align: center;
1570}
1571
1572/* Dashboard link highlight */
1573.dropdown-item-dashboard {
1574	background: #f8f4ff;
1575}
1576
1577.dropdown-item-dashboard i {
1578	color: #667eea;
1579}
1580
1581.dropdown-item-dashboard:hover {
1582	background: #efe8ff;
1583}
1584
1585@media (max-width: 600px) {
1586	.xp-bar-mini {
1587		display: none;
1588	}
1589	.xp-level-badge {
1590		font-size: 9px;
1591		padding: 2px 6px;
1592	}
1593}
1594
1595/* Student Tasks Modal */
1596.tasks-modal-content {
1597	padding: 10px 0;
1598}
1599
1600.tasks-empty {
1601	text-align: center;
1602	padding: 30px 20px;
1603	color: #689662;
1604}
1605
1606.tasks-empty i {
1607	font-size: 48px;
1608	margin-bottom: 12px;
1609	opacity: 0.7;
1610}
1611
1612.tasks-empty p {
1613	font-size: 15px;
1614	margin: 0;
1615}
1616
1617.tasks-list {
1618	list-style: none;
1619	margin: 0;
1620	padding: 0;
1621}
1622
1623.task-item {
1624	display: flex;
1625	align-items: center;
1626	justify-content: space-between;
1627	padding: 14px 16px;
1628	border-bottom: 1px solid #eee;
1629	gap: 12px;
1630}
1631
1632.task-item:last-child {
1633	border-bottom: none;
1634}
1635
1636.task-info {
1637	flex: 1;
1638	min-width: 0;
1639}
1640
1641.task-info strong {
1642	display: block;
1643	font-size: 14px;
1644	color: #333;
1645	margin-bottom: 4px;
1646}
1647
1648.task-info .task-type {
1649	font-size: 12px;
1650	color: #888;
1651}
1652
1653.task-start-btn {
1654	display: inline-flex;
1655	align-items: center;
1656	gap: 6px;
1657	padding: 8px 16px;
1658	background: #689662;
1659	color: white;
1660	border-radius: 6px;
1661	text-decoration: none;
1662	font-size: 13px;
1663	font-weight: 600;
1664	white-space: nowrap;
1665	transition: background 0.2s;
1666}
1667
1668.task-start-btn:hover {
1669	background: #567d51;
1670	color: white;
1671}
1672
1673.task-start-btn i {
1674	font-size: 11px;
1675}
1676</style>
1677	
1677<script>
1678function fixIos() {
1679	var ua = window.navigator.userAgent;
1680	var iOS = !!ua.match(/iP(ad|hone)/i);
1681	var iOS11 = /OS 11_(\d{1,2})/.test(ua);
1682	if (iOS && iOS11) {
1683		$("body").addClass("iosBugFixCaret");
1684	}
1685}
1686
1687function closeAllPopups() {
1688	$('.cd-popup').removeClass('is-visible');
1689	$("body").removeClass("iosBugFixCaret");
1690	// Clear all form fields
1691	$("#lUserName, #lPassword, #adultEmail, #adultPassword").val("");
1692	$("#regFirstName, #regSurName, #regEmail, #regPassword, #regPassword2").val("");
1693	$(".error-text").html("");
1694}
1695
1696function hasFormData(popupId) {
1697	var hasData = false;
1698	$('#' + popupId + ' input[type="text"], #' + popupId + ' input[type="email"], #' + popupId + ' input[type="password"]').each(function() {
1699		if ($(this).val().trim() !== '') {
1700			hasData = true;
1701			return false;
1702		}
1703	});
1704	return hasData;
1705}
1706
1707// Safely parse JSON - handles case where jQuery already parsed it
1708function safeParseJSON(data) {
1709	if (typeof data === 'object') {
1710		return data;
1711	}
1712	try {
1713		return JSON.parse(data);
1714	} catch (e) {
1715		console.error('JSON parse error:', e);
1716		return null;
1717	}
1718}
1719
1720function initLoginHandlers() {
1721	// Close popup on X click, ESC, or clicking outside
1722	$('.cd-popup').on('click', function(event) {
1723		var $popup = $(this);
1724		var $container = $popup.find('.cd-popup-container');
1725		var popupId = $popup.attr('id');
1726
1727		// Close if clicking X button (always close, even with data)
1728		if ($(event.target).is('.cd-popup-close')) {
1729			event.preventDefault();
1730			closeAllPopups();
1731			return;
1732		}
1733
1734		// Close if clicking outside the modal container (on the overlay)
1735		// But only if no form data has been entered
1736		if (!$container.is(event.target) && $container.has(event.target).length === 0) {
1737			// A click handler inside the popup may have re-rendered its content
1738			// (speed-test results list -> showResult), detaching the clicked
1739			// element before the event bubbles here. A detached target is an
1740			// inside click, not an overlay click.
1741			if (!$.contains(document.documentElement, event.target)) {
1742				return;
1743			}
1744			if (!hasFormData(popupId)) {
1745				closeAllPopups();
1746			}
1747		}
1748	});
1749
1750	$(document).keyup(function(event) {
1751		if (event.which == '27') {
1752			// Check if any visible popup has form data
1753			var hasData = false;
1754			$('.cd-popup.is-visible').each(function() {
1755				if (hasFormData($(this).attr('id'))) {
1756					hasData = true;
1757					return false;
1758				}
1759			});
1760			// Only close if no data entered
1761			if (!hasData) {
1762				closeAllPopups();
1763			}
1764		}
1765	});
1766
1767	// Switch from student login to adult login
1768	$(document).on('click', '#switchToAdultLogin', function(e) {
1769		e.preventDefault();
1770		$('#logVak').removeClass('is-visible');
1771		$('#adultLogVak').addClass('is-visible');
1772		fixIos();
1773		setTimeout(function() { $('#adultEmail').focus(); }, 100);
1774	});
1775
1776	// Switch from adult login back to student login
1777	$(document).on('click', '#backToStudentLogin', function(e) {
1778		e.preventDefault();
1779		$('#adultLogVak').removeClass('is-visible');
1780		$('#logVak').addClass('is-visible');
1781		fixIos();
1782		setTimeout(function() { $('#lUserName').focus(); }, 100);
1783	});
1784
1785	// Switch from adult login to signup
1786	$(document).on('click', '#switchToSignup', function(e) {
1787		e.preventDefault();
1788		$('#adultLogVak').removeClass('is-visible');
1789		$('#regVak').addClass('is-visible');
1790		fixIos();
1791	});
1792
1793	// Switch from student login to signup
1794	$(document).on('click', '#studentSwitchToSignup', function(e) {
1795		e.preventDefault();
1796		$('#logVak').removeClass('is-visible');
1797		$('#regVak').addClass('is-visible');
1798		fixIos();
1799	});
1800
1801	// Back to login from registration role selection
1802	$(document).on('click', '#backToLoginFromReg', function(e) {
1803		e.preventDefault();
1804		$('#regVak').removeClass('is-visible');
1805		$('#logVak').addClass('is-visible');
1806		fixIos();
1807	});
1808
1809	// Role tabs in adult login
1810	$(document).on('click', '.role-tab', function(e) {
1811		e.preventDefault();
1812		$('.role-tab').removeClass('active');
1813		$(this).addClass('active');
1814		$('#adultLoginRole').val($(this).data('role'));
1815		// Keep the forgot-password link pointing at the selected role's flow
1816		var lp = document.getElementById('adultLostPassLink');
1817		if (lp) { lp.href = lp.href.replace(/type=(teacher|parent)/, 'type=' + $(this).data('role')); }
1818	});
1819
1820	// Select Teacher role for registration
1821	$(document).on('click', '#selectTeacher', function(e) {
1822		e.preventDefault();
1823		$('#regRole').val('teacher');
1824		$('#regFormTitle').text("Teacher Registration");
1825		$('#regFormSubtitle').text("Create your account");
1826		$('#regHeader').removeClass('modal-header-green');
1827		$('#regVak').removeClass('is-visible');
1828		$('#regFormVak').addClass('is-visible');
1829		fixIos();
1830		setTimeout(function() { $('#regFirstName').focus(); }, 100);
1831	});
1832
1833	// Select Parent role for registration
1834	$(document).on('click', '#selectParent', function(e) {
1835		e.preventDefault();
1836		$('#regRole').val('parent');
1837		$('#regFormTitle').text("Parent Registration");
1838		$('#regFormSubtitle').text("Create your account");
1839		$('#regHeader').addClass('modal-header-green');
1840		$('#regVak').removeClass('is-visible');
1841		$('#regFormVak').addClass('is-visible');
1842		fixIos();
1843		setTimeout(function() { $('#regFirstName').focus(); }, 100);
1844	});
1845
1846	// Back from registration form to role selection
1847	$(document).on('click', '#regBackButton', function(e) {
1848		e.preventDefault();
1849		$('#regFormVak').removeClass('is-visible');
1850		$('#regVak').addClass('is-visible');
1851		fixIos();
1852	});
1853
1854	// Student login form submit. preventDefault: Enter would otherwise ALSO
1855	// natively submit the form (hidden submit input), reloading the page and
1856	// closing the modal before the AJAX result - e.g. a failed login - shows.
1857	$('#logForm input').keydown(function(e) {
1858		if (e.keyCode == 13) {
1859			e.preventDefault();
1860			loginFunc();
1861		}
1862	});
1863
1864	$(document).on('click', '#logButton', function() {
1865		loginFunc();
1866	});
1867
1868	// Adult login form submit
1869	$('#adultLogForm input').keydown(function(e) {
1870		if (e.keyCode == 13) {
1871			e.preventDefault();
1872			adultLoginFunc();
1873		}
1874	});
1875
1876	$(document).on('click', '#adultLogButton', function() {
1877		adultLoginFunc();
1878	});
1879
1880	// Registration form submit
1881	$(document).on('click', '#regButton', function() {
1882		regFunc();
1883	});
1884}
1885
1886// Student login function
1887function loginFunc() {
1888	var uname = $("#lUserName").val();
1889	var pword = $("#lPassword").val();
1890
1891	if (uname.length == 0) {
1892		$('#errorLogText').html("Please enter a username.");
1893		$("#lUserName").focus();
1894	} else if (pword.length == 0) {
1895		$('#errorLogText').html("Please enter a password.");
1896		$("#lPassword").focus();
1897	} else {
1898		$.post("../login.user.php", {
1899			name: uname,
1900			pw: pword
1901		}, function(data, status) {
1902			var obj = safeParseJSON(data);
1903			if (!obj) {
1904				$('#errorLogText').html("Login failed - please try again");
1905				return;
1906			}
1907			if (obj.log == true) {
1908				closeAllPopups();
1909				toastr.info('Welcome back ' + uname + '');
1910				checkSession();
1911			} else {
1912				if (obj.message == "nouser") {
1913					$('#errorLogText').html("We do not recognize this username.");
1914				} else if (obj.message == "wrongpass") {
1915					$('#errorLogText').html("Your password is incorrect.");
1916				}
1917			}
1918		});
1919	}
1920}
1921
1922// Teacher/Parent login function
1923function adultLoginFunc() {
1924	var email = $("#adultEmail").val();
1925	var pword = $("#adultPassword").val();
1926	var role = $("#adultLoginRole").val();
1927
1928	if (email.length == 0) {
1929		$('#errorAdultLogText').html("Enter your email address");
1930		$("#adultEmail").focus();
1931	} else if (pword.length == 0) {
1932		$('#errorAdultLogText').html("Please enter a password.");
1933		$("#adultPassword").focus();
1934	} else {
1935		var loginUrl = role === 'teacher' ? 'https://www.timestables.com/login.teacher.php' : 'https://www.timestables.com/login.parent.php';
1936		$.post(loginUrl, {
1937			email: email,
1938			pw: pword
1939		}, function(data, status) {
1940			var obj = safeParseJSON(data);
1941			if (!obj) {
1942				$('#errorAdultLogText').html("Login failed - please try again");
1943				return;
1944			}
1945			if (obj.log == true) {
1946				closeAllPopups();
1947				// Redirect to dashboard
1948				var dashboardUrl = role === 'teacher' ? 'https://www.timestables.com/teacher-login/' : 'https://www.timestables.com/parent/';
1949				window.location.href = dashboardUrl;
1950			} else {
1951				if (obj.message == "nouser") {
1952					$('#errorAdultLogText').html("Email address not found");
1953				} else if (obj.message == "wrongpass") {
1954					$('#errorAdultLogText').html("Your password is incorrect.");
1955				} else if (obj.message == "wrongcredentials") {
1956					$('#errorAdultLogText').html("Your login details are incorrect.");
1957				} else {
1958					$('#errorAdultLogText').html(obj.message || "Login failed - please try again");
1959				}
1960			}
1961		});
1962	}
1963}
1964
1965// Teacher/Parent registration function
1966function regFunc() {
1967	var firstName = $("#regFirstName").val();
1968	var surName = $("#regSurName").val();
1969	var email = $("#regEmail").val();
1970	var pword = $("#regPassword").val();
1971	var pword2 = $("#regPassword2").val();
1972	var role = $("#regRole").val();
1973
1974	if (firstName.length == 0) {
1975		$('#errorRegText').html("Enter your first name");
1976		$("#regFirstName").focus();
1977	} else if (surName.length == 0) {
1978		$('#errorRegText').html("Enter your last name");
1979		$("#regSurName").focus();
1980	} else if (email.length == 0) {
1981		$('#errorRegText').html("Enter your email address");
1982		$("#regEmail").focus();
1983	} else if (pword.length == 0) {
1984		$('#errorRegText').html("Please enter a password.");
1985		$("#regPassword").focus();
1986	} else if (pword.length < 6) {
1987		$('#errorRegText').html("Password must be at least 6 characters");
1988		$("#regPassword").focus();
1989	} else if (pword !== pword2) {
1990		$('#errorRegText').html("Passwords do not match.");
1991		$("#regPassword2").focus();
1992	} else {
1993		var regUrl = role === 'teacher' ? 'https://www.timestables.com/register.teacher.php' : 'https://www.timestables.com/register.parent.php';
1994		$.post(regUrl, {
1995			firstName: firstName,
1996			surName: surName,
1997			email: email,
1998			pw: pword
1999		}, function(data, status) {
2000			console.log(data);
2001			var obj = safeParseJSON(data);
2002			if (!obj) {
2003				$('#errorRegText').html("Registration failed - please try again");
2004				return;
2005			}
2006			if (obj.reg == true) {
2007				closeAllPopups();
2008				toastr.success('You have successfully registered!', '');
2009				// Redirect to dashboard
2010				var dashboardUrl = role === 'teacher' ? 'https://www.timestables.com/teacher-login/' : 'https://www.timestables.com/parent/';
2011				window.location.href = dashboardUrl;
2012			} else {
2013				$('#errorRegText').html(obj.message || "Registration failed - please try again");
2014			}
2015		});
2016	}
2017}
2018
2019// Setup login UI when session check completes
2020// Canonical header session check: one shared implementation of the medal /
2021// diploma counting (medals = Soort 1 with Diploma 0, diplomas = any Diploma > 0)
2022// so the ~40 page templates stop carrying drifting copies. Templates keep a
2023// local `function checkSession() { checkSessionHeader(); }` wrapper.
2024function checkSessionHeader() {
2025$.post("../check.session.php", {}, function(data, status){
2026    var obj = safeParseJSON(data);
2027    var medalCount = 0, diplomaCount = 0;
2028    if(obj!==false && obj!==null){
2029        var medalLength = obj.medals ? obj.medals.length : 0;
2030        for (var i = 0; i < medalLength; i++) {
2031            if(obj.medals[i].Soort==1 && obj.medals[i].Diploma==0) medalCount++;
2032            if(obj.medals[i].Diploma>0) diplomaCount++;
2033        }
2034    }
2035    setupLoginUI(obj, medalCount, diplomaCount);
2036});
2037}
2038
2039// Instant header for guests: render the login/signup buttons immediately
2040// instead of waiting for the session round-trip. Browsers with the "liu"
2041// hint cookie (set on confirmed login) skip this to avoid a wrong flash;
2042// checkSession still runs afterwards and settles the real state.
2043$(function() {
2044	if (!/(?:^|;\s*)liu=1/.test(document.cookie)) {
2045		setupLoginUI(null, 0, 0);
2046	}
2047});
2048
2049function setupLoginUI(obj, medalCount, diplomaCount) {
2050	if (obj && obj.ok == true) {
2051		loggedIn = true;
2052		document.cookie = "liu=1; path=/; max-age=2592000";
2053		console.log("logged in");
2054		var diamondCount = obj.diamonds || 0;
2055		var dropdownHtml = '<div class="user-dropdown">' +
2056			'<span class="header-task-dot" id="headerTaskDot" style="display:none;"></span>' +
2057			'<button class="user-dropdown-toggle">' +
2058				'<span class="user-stats">' +
2059					'<span class="stat">' + medalCount + ' <img src="https://www.tafeldiploma.nl/medalgoud.png" alt="" /></span>' +
2060					'<span class="stat">' + diplomaCount + ' <img src="https://www.tafeldiploma.nl/diploma-icon.png" alt="" /></span>' +
2061					'<span class="stat">' + diamondCount + ' <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="height:16px;vertical-align:middle;"><polygon points="12,2 22,9 12,22 2,9" fill="#4FC3F7" stroke="#0288D1" stroke-width="1.5"/><polygon points="12,2 7,9 12,22 17,9" fill="#B3E5FC" stroke="#0288D1" stroke-width="0.5" opacity="0.6"/></svg></span>' +
2062				'</span>' +
2063				'<span class="xp-level-badge-header" id="userXpMini" style="display:none;">Level <span id="userLevel">1</span></span>' +
2064				'<i class="fas fa-chevron-down"></i>' +
2065			'</button>' +
2066			'<div class="user-dropdown-menu">' +
2067				'<div class="dropdown-user-name"><i class="fas fa-user"></i> ' + obj.name + '</div>' +
2068				'<div class="dropdown-xp-header" id="dropdownXpHeader" style="display:none;">' +
2069					'<div class="xp-title-row"><span class="xp-title" id="headerXpLevelTitle">Beginner</span><span class="xp-amount" id="xpAmount">0 XP</span></div>' +
2070					'<div class="xp-bar-dropdown"><div class="xp-bar-fill-dropdown" id="xpBarDropdown" style="width:0%"></div></div>' +
2071					'<div class="xp-progress-text" id="xpProgressText">0 / 100 XP</div>' +
2072				'</div>' +
2073				'<a href="https://www.timestables.com/student-dashboard/" class="dropdown-item dropdown-item-dashboard">' +
2074					'<i class="fas fa-home"></i> My page' +
2075				'</a>' +
2076				'<a href="https://www.timestables.com/my-tasks/" class="dropdown-item" id="myTasksLink">' +
2077					'<i class="fas fa-tasks"></i> My tasks' +
2078					'<span class="task-badge" id="taskBadge" style="display:none;"></span>' +
2079				'</a>' +
2080				'<a href="https://www.timestables.com/trophy-cabinet/" class="dropdown-item">' +
2081					'<i class="fas fa-trophy"></i> Trophy Cabinet' +
2082				'</a>' +
2083				'<a href="https://www.timestables.com/logout.php" class="dropdown-item dropdown-item-logout">' +
2084					'<i class="fas fa-sign-out-alt"></i> Log out' +
2085				'</a>' +
2086			'</div>' +
2087		'</div>';
2088		$('#usrVak').html(dropdownHtml);
2089
2090		// Load pending tasks count and XP progress
2091		loadStudentTaskCount();
2092		loadStudentXpProgress();
2093
2094		// Toggle dropdown on click
2095		$(document).off('click', '.user-dropdown-toggle').on('click', '.user-dropdown-toggle', function(e) {
2096			e.stopPropagation();
2097			var dd = $(this).parent();
2098			dd.toggleClass('open');
2099			if (dd.hasClass('open')) {
2100				$('#headerTaskDot').hide();
2101				if (_hasNewTasks) {
2102					var badge = $('#taskBadge');
2103					badge.removeClass('shake');
2104					void badge[0].offsetWidth;
2105					badge.addClass('shake');
2106					badge.one('animationend', function() { $(this).removeClass('shake'); });
2107					_hasNewTasks = false;
2108					markTasksSeen();
2109				}
2110			}
2111		});
2112
2113		// Close dropdown when clicking outside
2114		$(document).off('click.userdropdown').on('click.userdropdown', function(e) {
2115			if (!$(e.target).closest('.user-dropdown').length) {
2116				$('.user-dropdown').removeClass('open');
2117			}
2118		});
2119
2120		if (typeof checkSize === 'function') {
2121			setTimeout(function() { checkSize(); }, 200);
2122		}
2123	} else {
2124		document.cookie = "liu=; path=/; max-age=0";
2125		// Show login/signup buttons for non-logged in users
2126		$('#usrVak').html('<span id="loglink" class="loginLink"><i class="fas fa-sign-in-alt" aria-hidden="true"></i><span>Login</span></span><span id="reglink" class="loginLink cd-popup-trigger"><i class="fas fa-user-plus" aria-hidden="true"></i><span>Create free account</span></span>');
2127		console.log("not logged in");
2128
2129		// Open student login popup
2130		$(document).off('click', '#loglink').on('click', '#loglink', function(event) {
2131			event.preventDefault();
2132			$('#logVak').addClass('is-visible');
2133			fixIos();
2134			setTimeout(function() { $('#lUserName').focus(); }, 100);
2135		});
2136
2137		// Open registration role selection popup
2138		$(document).off('click', '#reglink').on('click', '#reglink', function(event) {
2139			event.preventDefault();
2140			$('#regVak').addClass('is-visible');
2141			fixIos();
2142		});
2143
2144		if (typeof checkSize === 'function') {
2145			setTimeout(function() { checkSize(); }, 200);
2146		}
2147	}
2148
2149	loginChecked = true;
2150		$('#usrVak').show();
2151	}
2152
2153// Student Tasks Functions - Load pending task count for badge
2154var _pendingTasks = [];
2155var _hasNewTasks = false;
2156
2157function loadStudentTaskCount() {
2158	$.post('https://www.timestables.com/get.tasks.student.php', {}, function(data) {
2159		var response = typeof data === 'string' ? safeParseJSON(data) : data;
2160		if (response && response.success && response.tasks) {
2161			_pendingTasks = response.tasks;
2162			var count = _pendingTasks.length;
2163
2164			// Show total count in dropdown menu badge
2165			if (count > 0) {
2166				$('#taskBadge').text(count).show();
2167			} else {
2168				$('#taskBadge').hide();
2169			}
2170
2171			// Check for NEW (unseen) tasks
2172			var seenIds = JSON.parse(localStorage.getItem('seenTaskIds') || '[]');
2173			var currentIds = [];
2174			var hasNew = false;
2175			for (var i = 0; i < _pendingTasks.length; i++) {
2176				currentIds.push(_pendingTasks[i].TaskID);
2177				if (seenIds.indexOf(_pendingTasks[i].TaskID) === -1) hasNew = true;
2178			}
2179			// Prune seen IDs that are no longer pending (completed/removed)
2180			var pruned = seenIds.filter(function(id) { return currentIds.indexOf(id) !== -1; });
2181			if (pruned.length !== seenIds.length) {
2182				localStorage.setItem('seenTaskIds', JSON.stringify(pruned));
2183			}
2184
2185			// Red dot on header button when there are new tasks
2186			_hasNewTasks = hasNew;
2187			if (hasNew) {
2188				$('#headerTaskDot').show();
2189			} else {
2190				$('#headerTaskDot').hide();
2191			}
2192		}
2193	});
2194}
2195
2196// Mark all current pending tasks as seen
2197function markTasksSeen() {
2198	if (!_pendingTasks.length) return;
2199	var ids = [];
2200	for (var i = 0; i < _pendingTasks.length; i++) ids.push(_pendingTasks[i].TaskID);
2201	localStorage.setItem('seenTaskIds', JSON.stringify(ids));
2202	_hasNewTasks = false;
2203	$('#headerTaskDot').hide();
2204}
2205
2206// Load student XP progress
2207function loadStudentXpProgress() {
2208	$.post('https://www.timestables.com/get.xp.progress.php', {}, function(data) {
2209		var response = typeof data === 'string' ? safeParseJSON(data) : data;
2210		if (response && response.success && response.progress) {
2211			var p = response.progress;
2212			// Update level badge in header
2213			$('#userLevel').text(p.level);
2214			$('#userXpMini').show();
2215			// Update dropdown XP header (bar only shows in dropdown)
2216			$('#headerXpLevelTitle').text(p.title);
2217			$('#xpAmount').text(p.xp.toLocaleString() + ' XP');
2218			$('#xpBarDropdown').css('width', p.progressPercent + '%');
2219			$('#xpProgressText').text(p.xp.toLocaleString() + ' / ' + p.nextLevelXP.toLocaleString() + ' XP');
2220			$('#dropdownXpHeader').show();
2221		}
2222	});
2223}
2224</script>
2224
2225
2226<script src="/assets/scripts/custom.js?v=dc25d92e" ></script>
vendor: 1 bytes, line 2226
2226
2227<script src="/assets/vendor/toastr/2.1.3/toastr.min.js?v=b36f28de"></script>
2227
2228
2229		
2230<script>
2231function getCookie(cname) {
2232  var name = cname + "=";
2233  var decodedCookie = decodeURIComponent(document.cookie);
2234  var ca = decodedCookie.split(';');
2235  for(var i = 0; i <ca.length; i++) {
2236    var c = ca[i];
2237    while (c.charAt(0) == ' ') {
2238      c = c.substring(1);
2239    }
2240    if (c.indexOf(name) == 0) {
2241      return c.substring(name.length, c.length);
2242    }
2243  }
2244  return "";
2245}
2246var pA = getCookie("cookieconsent_status");
2247
2248$(document).ready(function(){
2249				(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1;
2250(adsbygoogle = window.adsbygoogle || []).push({});
2251					
2252
2253});
2254	
2255 </script>
2255 <style>.none {
2256	display:none!important;
2257}</style>
2258<link rel="stylesheet" type="text/css" href="/assets/vendor/cookieconsent2/3.1.0/cookieconsent.min.css?v=ac9205ab" />
2259<script src="/assets/vendor/cookieconsent2/3.1.0/cookieconsent.min.js?v=a0664de8"></script>
vendor: 2 bytes, line 2259
2259
2260<script>
2261window.addEventListener("load", function(){
2262	
2263window.cookieconsent.initialise({
2264  "palette": {
2265    "popup": {
2266      "background": "#3c404d",
2267      "text": "#d6d6d6"
2268    },
2269    "button": {
2270      "background": "#8bed4f"
2271    }
2272  },
2273  "theme": "classic",
2274    "revokable":false,
2275  "revokeBtn":"<div class='none cc-revoke {{classes}}'>Cookie Policy</div>",
2276  "content": {
2277    "message": "We use cookies to ensure you get the best experience on our website.",   
2278    "allow": "Allow cookies",
2279    "dismiss": "Ok",
2280    "deny": "Decline cookies",
2281    "link": "Read more",
2282    "href": "https://www.timestables.com/cookies/"
2283  }
2284
2285})});
2286</script>
2286
2287
2288<script>
2289var loggedIn = false;
2290var loginChecked = false;
2291
2292$(document).ready(function($) {
2293	checkSession();
2294	initLoginHandlers();
2295});
2296
2297function checkSession() {
2298	$.post("../check.session.t.php", {}, function(data, status) {
2299		console.log("" + data);
2300		var obj = JSON.parse(data);
2301
2302		if (obj !== false) {
2303			// Reset all medal slots to placeholder state
2304			for (var rt = 1; rt <= 12; rt++) {
2305				for (var rs = 1; rs <= 4; rs++) {
2306					$('#t' + rt + 's' + rs).html('<img src="https://cdn-t-1.bvkstatic.com/medalgoud-holder.png" style="height:20px;opacity:0.5;" />');
2307				}
2308				$('#t' + rt + 's5').html('<img src="https://cdn-t-1.bvkstatic.com/diploma-holder.png" style="height:20px;opacity:0.5;" />');
2309			}
2310
2311			var tafelMed = [];
2312			clearArray = [];
2313			var highScores = [];
2314			var highscore;
2315			var medalLength = obj.medals.length;
2316			console.log(medalLength);
2317			var medalCount = 0;
2318			var diplomaCount = 0;
2319			var hcount = 0;
2320
2321			for (var k = 0; k < 13; k++) {
2322				tafelMed[k] = [];
2323				for (var s = 0; s <= 5; s++) {
2324					tafelMed[k][s] = 0;
2325				}
2326			}
2327
2328			for (var j = 0; j < medalLength; j++) {
2329				tafelMed[obj.medals[j].Tafel][obj.medals[j].Stap] = tafelMed[obj.medals[j].Tafel][obj.medals[j].Stap] + 1;
2330			}
2331
2332			for (var i = 0; i < medalLength; i++) {
2333				if (obj.medals[i].Stap < 5 && obj.medals[i].Tafel > 0) {
2334					var prize = "https://cdn-t-1.bvkstatic.com/medalgoud.png";
2335					if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] == 2) {
2336						prize = "/ribbon.png";
2337					} else if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] >= 3) {
2338						prize = "/trophy3.png";
2339					}
2340					clearArray.push('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + ',' + $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html());
2341					$('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html('<img src="' + prize + '" style="height:20px;" class="medaillePlaatje" />');
2342				} else if (obj.medals[i].Stap == 5) {
2343					var diploma = "https://cdn-t-1.bvkstatic.com/diploma-icon.png";
2344					if (tafelMed[obj.medals[i].Tafel][obj.medals[i].Stap] >= 2) {
2345						diploma = "/diploma-gold-holder.png";
2346					}
2347					clearArray.push('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + ',' + $('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html());
2348					$('#t' + obj.medals[i].Tafel + 's' + obj.medals[i].Stap + '').html('<img src="' + diploma + '" style="height:20px;" class="diplomaPlaatje" />');
2349				}
2350
2351				if (obj.medals[i].Soort == 3) {
2352					highScores[hcount] = obj.medals[i].Score;
2353					hcount++;
2354				}
2355
2356				if (obj.medals[i].Soort == 1 && obj.medals[i].Diploma == 0) {
2357					medalCount++;
2358				}
2359				if (obj.medals[i].Diploma > 0) {
2360					diplomaCount++;
2361				}
2362			}
2363		}
2364
2365		// Setup login UI using shared function
2366		setupLoginUI(obj, medalCount, diplomaCount);
2367	});
2368}
2369// 30-09-2026 20:50:02</script>
2369
2370
2371	
2371<script>
2372
2373	var ajax = {};
2374ajax.x = function () {
2375    if (typeof XMLHttpRequest !== 'undefined') {
2376        return new XMLHttpRequest();
2377    }
2378    var versions = [
2379        "MSXML2.XmlHttp.6.0",
2380        "MSXML2.XmlHttp.5.0",
2381        "MSXML2.XmlHttp.4.0",
2382        "MSXML2.XmlHttp.3.0",
2383        "MSXML2.XmlHttp.2.0",
2384        "Microsoft.XmlHttp"
2385    ];
2386
2387    var xhr;
2388    for (var i = 0; i < versions.length; i++) {
2389        try {
2390            xhr = new ActiveXObject(versions[i]);
2391            break;
2392        } catch (e) {
2393        }
2394    }
2395    return xhr;
2396};
2397
2398ajax.send = function (url, callback, method, data, async) {
2399    if (async === undefined) {
2400        async = true;
2401    }
2402    var x = ajax.x();
2403    x.open(method, url, async);
2404    x.onreadystatechange = function () {
2405        if (x.readyState == 4) {
2406            callback(x.responseText)
2407        }
2408    };
2409    if (method == 'POST') {
2410        x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
2411    }
2412    x.send(data)
2413};
2414
2415ajax.post = function (url, data, callback, async) {
2416    var query = [];
2417    for (var key in data) {
2418        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
2419    }
2420    ajax.send(url, callback, 'POST', query.join('&'), async)
2421};
2422
2423
2424/*
2425window.onerror = function(msg, url, line)
2426{
2427	//console.log("Log"+msg);
2428	//ajax.post('/log.error.t.php', {msg: msg,url: url, line: line}, function() {});
2429};
2430
2431*/
2432
2433</script>
vendor: 1 bytes, line 2433
2433
2434<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"c40f8a7fd99f4720a88f5b58bed72eb2","spa":2}' crossorigin="anonymous"></script>
2434
2435</body>
2436
2437</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.