PageSourceSearch

https://www.bestcrosswords.com/

html bestcrosswords.com collected 2026-10-02 11:55:06 UTC 27,060 bytes, 743 lines download raw bytes

1<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml">
2
3<head>
4	<title>Free Crossword Puzzles - Play Online Daily | BestCrosswords</title>
5	<base href=""></base>
6	
7	<link href="https://www.bestcrosswords.com/" rel="canonical"/>
8	
9	
10	
11<!--  Favicon begins -->
12<link href="/apple-touch-icon.png" sizes="180x180" rel="apple-touch-icon"/>
13<link href="/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon-precomposed"/>
14<link href="/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon-precomposed"/>
15<link href="/apple-touch-icon-72x72.png" sizes="72x72" rel="apple-touch-icon-precomposed"/>
16<link href="/apple-touch-icon-144x144.png" sizes="144x144" rel="apple-touch-icon-precomposed"/>
17<link href="/apple-touch-icon-60x60.png" sizes="60x60" rel="apple-touch-icon-precomposed"/>
18<link href="/apple-touch-icon-120x120.png" sizes="120x120" rel="apple-touch-icon-precomposed"/>
19<link href="/apple-touch-icon-76x76.png" sizes="76x76" rel="apple-touch-icon-precomposed"/>
20<link href="/apple-touch-icon-152x152.png" sizes="152x152" rel="apple-touch-icon-precomposed"/>
21<link sizes="196x196" href="/favicon-196x196.png" type="image/png" rel="icon"/>
22<link sizes="96x96" href="/favicon-96x96.png" type="image/png" rel="icon"/>
23<link sizes="32x32" href="/favicon-32x32.png" type="image/png" rel="icon"/>
24<link sizes="16x16" href="/favicon-16x16.png" type="image/png" rel="icon"/>
25<link sizes="128x128" href="/favicon-128.png" type="image/png" rel="icon"/>
26<link href="/site.webmanifest" rel="manifest"/>
27<link color="#5bbad5" href="/safari-pinned-tab.svg" rel="mask-icon"/>
28<meta content="#FFFFFF" name="msapplication-TileColor"/>
29<meta content="/mstile-144x144.png" name="msapplication-TileImage"/>
30<meta content="/mstile-70x70.png" name="msapplication-square70x70logo"/>
31<meta content="/mstile-150x150.png" name="msapplication-square150x150logo"/>
32<meta content="/mstile-310x150.png" name="msapplication-wide310x150logo"/>
33<meta content="/mstile-310x310.png" name="msapplication-square310x310logo"/>
34<meta content="BestCrosswords" name="apple-mobile-web-app-title"/>
35<meta content="BestCrosswords" name="application-name"/>
36<!--  Favicon ends -->
37
38	
39	<meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." name="description"/>
40	
41	<meta content="width=device-width, initial-scale=1" name="viewport"/>
42
43	<meta content="https://www.bestcrosswords.com/images/facebook/sharing-1200x630.png" property="og:image"/>
44	<meta content="website" property="og:type"/>
45	<meta content="BestCrosswords.com" property="og:site_name"/>
46	<meta content="134872327288621" property="fb:app_id"/>
47	<meta content="Free Crossword Puzzles - Play Online Daily | BestCrosswords" property="og:title"/>
48	<meta content="/bestcrosswords" property="bc:context"/>
49	<meta content="https://www.bestcrosswords.com/" property="og:url"/>
50	<meta content="/" property="bc:url"/>
51	
52	<meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." property="og:description"/>
53	
54
55	<meta content="summary_large_image" name="twitter:card"/>
56	<meta content="Free Crossword Puzzles - Play Online Daily | BestCrosswords" name="twitter:title"/>
57	
58	<meta content="Play free crossword puzzles online - 8 new every day plus an archive of 100,000+ grids. No sign-up needed. Solve on any device or print them at home." name="twitter:description"/>
59	
60	<meta content="https://www.bestcrosswords.com/images/facebook/sharing-1200x630.png" name="twitter:image"/>
61
62	
63	<link title="BestCrosswords.com recent puzzles" type="application/rss+xml" href="https://www.bestcrosswords.com/syndication/feed/constructorgrid/rss/v1" rel="alternate"/>
64	
65
66	
67	
67<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"BestCrosswords","url":"https://www.bestcrosswords.com/"}</script>
67
68	
69
70	
71<!-- Google reCAPTCHA: begin -->
72<link type="text/css" rel="stylesheet" href="/bestcrosswords/assets/meta/d9f50f75/pages/Home-latestpuzzles.css"/><link type="text/css" rel="stylesheet" href="/bestcrosswords/assets/meta/bf52fa3b/components/usertools/RecentPuzzles-style.css"/><style>
73	.grecaptcha-badge {
74		visibility: collapse !important;
75	}
76</style>
77<!-- Google reCAPTCHA: end -->
78
79<!-- https://getbootstrap.com/: begin -->
80<link href="/bestcrosswords/css/third-party/bootstrap-5.3.8.min.css?cbid=fdc2140963ddb7b9c63dfe7a22af255d" rel="stylesheet"/>
81<!-- https://getbootstrap.com/: end -->
82
83	<link href="/bestcrosswords/css/stylesheet.min.css?cbid=fb8fcabdaac37607a977503d517b7ed8" rel="stylesheet"/>
84
85	<!-- Insert blocks: start -->
86	
87
88
89
90	
91	
92
93	<!-- Insert blocks: end -->
94
95<meta content="gwtPropError" name="gwt:onPropertyErrorFn"/><meta content="gwtLoadError" name="gwt:onLoadErrorFn"/></head>
96
97
98<body data-page-initialized="true" class="mainBody" style="background-image: url(/bestcrosswords/images/body-background.png?cbid=b6ca5634f1d7d6c5e45d7f25576f0cac);">
99
100
101
102
103<!-- See main.js/AdapexExpandableAdDetector -->
104<div id="adapex-expandable-ad-detector-container">
105<div class="ng-rounded-area" id="container">
106
107	<div class="bc-banner center" id="bc-banner-page_top">
108		
109	</div>
110
111	<div id="header">
112		
113
114
115<!-- md-end: only the expanded navbar closes on the header rule (see #navbar in stylesheet.css). -->
116<div class="d-flex align-items-center align-items-md-end" id="navbar">
117	
118	<nav class="navbar navbar-expand-md navbar-light bg-light justify-content-start me-2">
119		<div class="navbar-brand">
120			<a href="/"><img height="57" class="logolarge d-none d-md-inline-block" title="Daily Crossword Puzzles" style="background: white;" alt="Daily Crossword Puzzles" width="168" src="/bestcrosswords/images/logo.svg?cbid=ee4e6cc6cb99fab32fbd87183a1e01aa"/><img height="40" class="logosmall d-inline-block d-md-none" title="Daily Crossword Puzzles" style="background: white;" width="40" alt="Daily Crossword Puzzles" src="/bestcrosswords/images/favicon.svg?cbid=fab9535bcdfa938c74c506bc2a3840f3"/></a>
121			<label class="d-none d-md-block">Free Crossword Puzzles</label>
122		</div>
123		<button aria-label="Toggle navigation" aria-expanded="false" aria-controls="bcnavbar" data-bs-target="#bcnavbar" data-bs-toggle="collapse" type="button" class="navbar-toggler">
124			<span class="navbar-toggler-icon"> </span>
125		</button>
126		<div id="bcnavbar" class="collapse navbar-collapse">
127			<div>
128				<ul class="navbar-nav me-auto">
129
130					<li class="nav-item tab-blue dropdown active">
131
132							<a class="nav-link dropdown-toggle" id="pageHome" aria-haspopup="true" aria-expanded="false" data-bs-toggle="dropdown" role="button" href="/">Play Puzzles</a>
133							<div class="dropdown-menu" aria-labelledby="pageHome">
134
135										<a class="dropdown-item" href="/themed-crossword-puzzles">Themed Crossword Puzzles</a>
136
137										<a class="dropdown-item" href="/daily-crossword-puzzles">Daily Crossword Puzzles</a>
138
139										<a class="dropdown-item" href="/crossword-puzzles-tournament">Crossword Tournament</a>
140
141										      <div class="dropdown-divider"></div>
142
143										<a class="dropdown-item" href="/about-our-puzzles">About Our Puzzles</a>
144
145										<a class="dropdown-item" href="/help">Help</a>
146
147							</div>
148
149
150					</li>
151
152					<li class="nav-item tab-green">
153
154							<a class="nav-link" id="pageprintableHome" href="/printable-crossword-puzzles">Print</a>
155
156					</li>
157
158					<li class="nav-item tab-orange dropdown">
159
160							<a class="nav-link" id="pagesyndicationIntro" href="/crossword-puzzles-for-publishing">Publishing</a>
161
162					</li>
163
164					<li class="nav-item tab-pink dropdown">
165
166							<a class="nav-link" id="pagescoresScores" href="/crossword-puzzles-tournament/scores">Scores</a>
167
168					</li>
169
170					<li class="nav-item tab-black">
171
172							<a class="nav-link" id="pageblogBlog" href="/blog">Blog</a>
173
174					</li>
175
176				</ul>
177			</div>
178		</div>
179	</nav>
180
181	<div class="ms-auto">
182	 <div class="btn-group" id="logindiv">
183
184
185
186
187<div id="recentpuzzles" class="btn-group">
188	<button disabled="disabled" title="Puzzles in progress" aria-expanded="false" aria-haspopup="true" data-bs-display="static" data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary dropdown-toggle">
189		<span class="badge rounded-pill bg-danger text-white">0</span>
190	</button>
191	<div aria-labelledby="recentpuzzles" class="dropdown-menu dropdown-menu-end shadow">
192	</div>
193</div>
194
195	<div class="btn-group">
196		<button aria-expanded="false" aria-haspopup="true" data-bs-display="static" data-bs-toggle="dropdown" class="btn btn-secondary dropdown-toggle" type="button">
197			
198			Login
199		</button>
200
201		<!-- Login form / personal area drop down -->
202		<div class="dropdown-menu dropdown-menu-end shadow p-3">
203
204			
205				<form style="margin: 0;" id="login" name="login" action="/bestcrosswords/api/login" method="post">
206<input value="/" name="srcUrl" type="hidden"></input>
207
208					<div class="mb-3">
209	      		<label for="login-username" class="form-label">Username</label>
210						<input autocapitalize="off" class="form-control" autofocus="autofocus" autocomplete="username" autocorrect="off" id="login-username" value="" name="username" type="text"></input>
211	    		</div>
212			    <div class="mb-3">
213			      <label for="login-password" class="form-label">Password</label>
214						<input autocapitalize="off" class="form-control" autocomplete="current-password" autocorrect="off" id="login-password" value="" name="password" type="password"></input>
215						<div class="mt-1">
216							<a tabindex="-1" class="bc-link" href="/password-reminder">Forgot password?</a>
217						</div>
218			    </div>
219			    <div class="mb-3">
220				    <button class="btn btn-bcgrey" type="submit">Login</button>
221				  </div>
222			    <div class="mb-0">
223						Don't have an account?
224						<a tabindex="-1" class="bc-link" href="/signup">Sign up here!</a>
225					</div>
226				</form>
227				<table style="width: 100%;">
228	<tr style="vertical-align: middle;">
229		<td style="width: 50%;"><hr/></td>
230		<td style="padding: 0 1em;">Or</td>
231		<td style="width: 50%;"><hr/></td>
232	</tr>
233</table>
234
235				<div class="center">
236					<a class="bc-link" href="https://www.facebook.com/v25.0/dialog/oauth?client_id=134872327288621&amp;redirect_uri=https%3A%2F%2Fwww.bestcrosswords.com%2Fbestcrosswords%2Fapi%2Ffacebook%2Flogin&amp;scope=email">
237
238		<img alt="login button" src="/bestcrosswords/images/facebook/login_large.png?cbid=6cb43faa7174fd4e650413ea250149f4"/>
239
240
241</a>
242
243				</div>
244			
245
246		</div>
247	</div>
248
249</div>
250
251
252</div>
253</div>
254
255
256
257	</div>
258
259	<table class="layout" id="maintable">
260		<tr style="vertical-align: top;">
261
262			
263
264			<td>
265				<div id="maincontent">
266					
267	
268	
269
270
271
272
273	<h1 class="blue" id="page-heading">
274		Free Crossword Puzzles to Play Online
275	</h1>
276
277
278<p style="margin-top: 0; padding-top: 0; margin-bottom: 0;">
279Welcome to BestCrosswords - one of the web's largest free crossword
280collections. Play up to 15 fresh puzzles every day, or dig into an archive
281of over 100,000 grids. Solve right in your browser on any device, or print
282them for later. No account required to start.
283</p>
284
285<div class="mb-4 d-flex justify-content-center">
286	<div id="latestpuzzles">
287
288	<div>
289		<h2>Themed crosswords from contributors</h2>
290		<ul class="list-group list-group-flush">
291	
292	
293	
294		<li class="list-group-item list-group-item-action">
295			<img alt="Recent puzzle" src="/bestcrosswords/images/schedule_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/>
296			<a href="/themed-crossword-puzzles/313020-what-a-turn-on" class="bc-link">What a Turn-on!</a>
297			<span class="latestpuzzlesallkind-author">by Barb Olson</span><span class="latestpuzzlesallkind-published-on">,
298			published 2 hours ago</span>
299		</li>
300	
301	
302	
303	
304		<li class="list-group-item list-group-item-action">
305			<img alt="Featured puzzle" src="/bestcrosswords/images/recycling_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/>
306			<a href="/themed-crossword-puzzles/3924-days-of-yore" class="bc-link">Days Of Yore</a>
307			<span class="latestpuzzlesallkind-author">by William Gee</span><span class="latestpuzzlesallkind-published-on">,
308			<em>featured today</em></span>
309		</li>
310	
311	
312	
313	
314	
315	
316		<li class="list-group-item list-group-item-action">
317			<img alt="Older puzzle" src="/bestcrosswords/images/history_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/>
318			<a href="/themed-crossword-puzzles/313019-yuck" class="bc-link">Yuck</a>
319			<span class="latestpuzzlesallkind-author">by Mark McClain</span><span class="latestpuzzlesallkind-published-on">,
320			published yesterday</span>
321		</li>
322	
323	
324	
325	
326	
327		<li class="list-group-item list-group-item-action">
328			<img alt="Older puzzle" src="/bestcrosswords/images/history_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/>
329			<a href="/themed-crossword-puzzles/313018-the-body-of-the-beast" class="bc-link">The Body Of The Beast</a>
330			<span class="latestpuzzlesallkind-author">by Stu Mlot</span><span class="latestpuzzlesallkind-published-on">,
331			published on 9/30/2026</span>
332		</li>
333	
334	
335	
336	
337	
338	
339		<li class="list-group-item list-group-item-action">
340			<img alt="Favorite puzzle" src="/bestcrosswords/images/favorite_24dp_5F6368_FILL0_wght400_GRAD0_opsz24.svg"/>
341			<a href="/themed-crossword-puzzles/313012-coast-to-coast" class="bc-link">Coast To Coast</a>
342			<span class="latestpuzzlesallkind-author">by Stu Mlot</span><span class="latestpuzzlesallkind-published-on">,
343			<em>most popular last week</em></span>
344		</li>
345	
346	
347			<li class="list-group-item list-group-item-action">
348				<a title="Display more puzzles" href="/themed-crossword-puzzles/archive" class="bc-link">Play more themed crosswords</a>
349				from our archive
350			</li>
351			<li class="list-group-item list-group-item-action">
352				<a title="Meet our constructors" href="/constructors" class="bc-link">Meet our contributors</a>
353			</li>
354		</ul>
355	</div>
356
357	<div>
358		<h2>American puzzles from BestCrosswords</h2>
359		<ul class="list-group list-group-flush">
360			<li class="list-group-item list-group-item-action">
361				<a href="/daily-crossword-puzzles" class="bc-link">7
362					free daily crossword puzzles</a><span class="latestpuzzlesallkind-published-on">, published
363		7 hours ago</span>
364			</li>
365			<li class="list-group-item list-group-item-action">
366				<a href="/crossword-puzzles-tournament" class="bc-link">7
367					tournament puzzles</a><span class="latestpuzzlesallkind-published-on">, published
368		7 hours ago</span>
369			</li>
370			<li class="list-group-item list-group-item-action">
371				<a href="/printable-crossword-puzzles" class="bc-link">7
372					printable puzzles</a><span class="latestpuzzlesallkind-published-on">, published
373		7 hours ago</span>
374			</li>
375		</ul>
376
377		<h2>Grids for publishing</h2>
378		<ul class="list-group list-group-flush">
379			<li class="list-group-item list-group-item-action">
380				<a title="Buy puzzles for print publishing" href="/crossword-puzzles-for-publishing/print" class="bc-link">Buy puzzles</a>
381				for print publishing
382			</li>
383			<li class="list-group-item list-group-item-action">
384				<a title="Embed our interactive crossword in your website" href="/crossword-puzzles-for-publishing" class="bc-link">Embed
385					our interactive crossword</a>
386				in your website
387			</li>
388		</ul>
389	</div>
390
391</div>
392</div>
393
394<h2 class="mb-3">
394Having a hard time deciding which puzzles to play? Let us help you.</h2>
395
396<p>
397	<strong>Themed crosswords</strong>
398	are published daily by a group of skilled contributors.
399	The puzzles are smart, sophisticated, funny and yet relatively easy to
400	solve. The crosswords are available for free to all users.
401	<a href="/themed-crossword-puzzles" class="bc-link">Start playing today's theme</a>
402</p>
403
404<p>
405	<strong>Daily crossword puzzles</strong>
406	are fun, light and great for those who want to
407	train their memory, enrich their vocabulary and maintain cognitive skills.
408	The section features seven daily crossword puzzles of increasing difficulty.
409	<a href="/daily-crossword-puzzles" class="bc-link">Play today's free daily crossword puzzles</a>
410</p>
411
412<p>
413	<strong>Crossword tournament</strong>
414	are for those addicted players who want to put their solving skills to test.
415	The tournament starts on the first of every month and the winner is
416	announced at the end of the month.
417	The tournament is open to
418	<span class="bc-account-type">registered</span> members only.
419	Participants are scored on speed and accuracy.
420	Seven new puzzles are published daily, available to play on that day only.
421	It's not too late to
422	<a href="/crossword-puzzles-tournament" class="bc-link">enroll in this month's tournament</a>
423</p>
424
425<p>
426	<strong>Printable crosswords</strong>
427	are for those who prefer solving using
428	a pen and paper. Both daily and themed
429	crossword puzzles are featured in this section and
430	solutions are available the next day.
431	<a href="/printable-crossword-puzzles" class="bc-link">Print today's batch</a>
432
433</p>
434
435
436
437
438				</div>
439			</td>
440		</tr>
441	</table>
442
443	<div class="bc-banner center" id="bc-banner-below_content">
444		
445	</div>
446
447	<div id="footer">
448		
449
450	<div class="footerlinks">
451		<a class="bc-link" href="/help">Help</a>
452		<div>|</div>
453		<a class="bc-link" href="/contact">Contact Us</a>
454		<div>|</div>
455		<a class="bc-link" href="/terms-of-service">Terms of
456			Service</a>
457		<div>|</div>
458		<a class="bc-link" href="/privacy-policy">Privacy Policy</a>
459		<div>|</div>
460		<a class="bc-link" href="/sitemap">Sitemap</a>
461		<div>|</div>
462		<a class="bc-link feedLink" style="background-image: url(/bestcrosswords/images/feed-icon-14x14.png?cbid=2168a573d0d45bd2f9a89b8236453d61);" href="https://www.bestcrosswords.com/syndication/feed/constructorgrid/rss/v1">RSS
463			feed</a>
464	</div>
465	<div class="copyright">
466		Copyright © 2000-2026 <a href="http://www.pyromod.com" class="bc-link">Pyromod Software Inc</a>. All Rights Reserved.
467	</div>
468	<div data-href="https://www.facebook.com/BestCrosswords/" data-share="false" class="fb-like" data-action="like" data-layout="button_count" style="min-height: 28px;" data-size="large" data-show-faces="false">
469	</div>
470
471
472	</div>
473
474
475</div>
476</div>
477
478
479
480
481
482
483
484
485
486
487
488
489
490<!-- Disable Facebook SDK needed by the like button to improve Lighthouse score -->
491<!-- <span jwcid="@facebook/FacebookJavascriptSDK"/> -->
492
493
494<!-- Google Analytics: begin -->
495<script>
496    // @formatter:off
497
498    /**
499	 * Setup
500     */
501    // G4A - See https://www.googletagmanager.com/gtag/js?id=G-92YWLZ7L86 loaded below.
502    window.dataLayer= window.dataLayer || [];
503    function gtag(){dataLayer.push(arguments);}
504    gtag('js', new Date()); // Do we really need this?
505	let gtag_config = {
506        'transport_type': 'beacon',
507	};
508	
509    gtag_config['page_path'] = '/bestcrosswords/Home/';
510	
511    gtag('config', 'G-92YWLZ7L86', gtag_config);
512
513    /**
514	 * Send page view
515     */
516    // GA4 - not needed, gtag config call will send the page view in non debug mode.
517    //gtag('event', 'page_view');
518    // @formatter:on
519</script>
vendor: 1 bytes, line 519
519
520<script src="/bestcrosswords/js/analytics.min.js?cbid=2fba22b63279375329a739542878534b"></script>
vendor: 58 bytes, lines 520-521
520
521<script src="https://www.googletagmanager.com/gtag/js?id=
521G-92YWLZ7L86
vendor: 26 bytes, line 521
521" async="async"></script>
522<!-- Google Analytics: end -->
523
524
525
526<!-- jquery: begin -->
527<script src="/bestcrosswords/js/third-party/jquery-3.7.1.min.js"></script>
527
528<!-- jquery: end -->
529
530<!-- fontmetrics: begin -->
531<script src="/bestcrosswords/js/third-party/FontMetrics.2017.11.26.min.js"></script>
531
532<!-- fontmetrics: end -->
533
534<!-- https://github.com/sdecima/javascript-detect-element-resize/: begin -->
535<script src="/bestcrosswords/js/third-party/javascript-detect-element-resize-jquery-0.5.3.min.js"></script>
535
536<!-- https://github.com/sdecima/javascript-detect-element-resize/: end -->
537
538<!-- https://github.com/jeanphil77/current-device: begin -->
539<script src="/bestcrosswords/js/third-party/current-device-2.0.2.1.min.js"></script>
539
540<!-- https://github.com/jeanphil77/current-device: end -->
541
542<!-- https://modernizr.com: begin -->
543<script src="/bestcrosswords/js/third-party/modernizr-custom-3.6.0.1.min.js"></script>
543
544<!-- https://modernizr.com: end -->
545
546<!-- https://getbootstrap.com/: begin -->
547<script src="/bestcrosswords/js/third-party/bootstrap.bundle-5.3.8.min.js?cbid=5cc1b73e70520fa84b1846afe0ec8fb6"></script>
547
548<!-- https://getbootstrap.com/: end -->
549
550<!-- In-house JS library: begin -->
551<script src="/bestcrosswords/js/main.min.js?cbid=55ae124dfc557d570e953d89b703daba"></script>
551
552<!-- In-house JS library: end -->
553
554
555
556<!-- Push notifications: begin -->
557
558	
558<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-app.js"></script>
558
559
560	
560<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-messaging.js"></script>
560
561
562	
562<script src="https://www.gstatic.com/firebasejs/8.6.8/firebase-analytics.js"></script>
562
563
564<script src="/bestcrosswords/js/notifications.js"></script>
vendor: 1 bytes, line 564
564
565<script>
566	notif_InitBrowser(function () {
567		notif_Messaging.onMessage(function (payload) {
568			notif_Log("Notification received while in foreground: ", payload);
569			notif_SendGAEvent("Received (foreground)", payload.data.title);
570			notif_sendDesktopNotification(payload.data.title, payload.data.body, payload.data.url, payload.data.image);
571		});
572		notif_InstallServiceWorker();
573	});
574</script>
574
575<!-- Push notifications: end -->
576
577
578<!-- Insert blocks: start -->
579
580
581
582
583
584
585	
585<script>		$(function () {
586            let idleMinutes = 0;
587            $(this).mousemove(function () {
588                idleMinutes = 0;
589            });
590            $(this).keypress(function () {
591                idleMinutes = 0;
592            });
593            setInterval(function () {
594                idleMinutes++;
595            }, 60000)
596
597            function userIsActive() {
598                return idleMinutes <= 3;
599            }
600
601            function reloadRecentPuzzles() {
602                // Refresh only if user is active to reduce load on the site.
603                if (userIsActive()) {
604                    $.ajax({
605                        url: getWebContext() + "/api/prefs/puzzlesinprogress",
606                    }).done(function (data) {
607                        let html = '';
608                        let itemCount = isMobile() ? Math.min(data.length, 5) : data.length;
609                        for (let i = 0; i < itemCount; i++) {
610                            let item = data[i];
611                            html += "<a class='dropdown-item' href='" +
612                                item['url'] + "'>" + item['title'] + "<\/a>";
613                        }
614                        $('#recentpuzzles .badge').html(itemCount);
615                        if (itemCount > 0) {
616                            $('#recentpuzzles .btn').removeAttr('disabled');
617                        } else {
618                            $('#recentpuzzles .btn').attr('disabled', 'disabled');
619                        }
620                        $('#recentpuzzles .dropdown-menu').html(html);
621                    });
622                }
623                // Schedule next run
624                setTimeout(reloadRecentPuzzles, 60000);
625            }
626
627            reloadRecentPuzzles();
628        });
629</script>
629
630	
630<script>$(function () {
631    // Position left bar ad in the ideal position.
632    const adjustLeftBarAdPosition = function () {
633        const banner = $('#leftbar-ads');
634        if (banner.length === 0) {
635            return;
636        }
637        const leftbar = $('#leftbar');
638        if (leftbar.length === 0) {
639            return;
640        }
641        const padding = 10;
642        const viewportHeight = window.innerHeight;
643        const bannerRect = banner.get(0).getBoundingClientRect();
644        const leftbarRect = leftbar.get(0).getBoundingClientRect();
645        const bannerHeight = bannerRect.bottom - bannerRect.top;
646        // Margins are relative to the content box, so the cell's top padding has to come off every
647        // position computed from the viewport or the engine below.
648        const leftbarTop = leftbarRect.top + parseFloat(window.getComputedStyle(leftbar.get(0)).paddingTop);
649        const minTopMargin = 0;
650        const maxTopMargin = leftbarRect.bottom - leftbarTop - bannerHeight;
651
652        // Keeping the banner at the top of the viewport by default, tracking user scrolling.
653        let topMargin = padding - leftbarTop;
654        let position = 'viewport';
655        // However, if we can find the engine on the page, we attempt to align the ad
656        // with the top of the engine, but only if it doesn't cause the ad to be clipped.
657        // This is to handle the large screens with the engine at the bottom of the viewport,
658        // causing the ad to be away from the user main focus area.
659        const engine = $('.bc-gwt-app-load');
660        if (engine.length > 0) {
661            if (engine.height() < 300) {
662                // Engine not loaded yet, schedule a retry...
663                setTimeout(adjustLeftBarAdPosition, 250);
664            } else {
665                // Engine is loaded.
666                const engineRect = engine.get(0).getBoundingClientRect();
667                if (engineRect.top > 0) {
668                    const bannerWouldBeClipped = engineRect.top + bannerHeight > viewportHeight;
669                    if (!bannerWouldBeClipped) {
670                        topMargin = engineRect.top - leftbarTop;
671                        position = 'engine';
672                    }
673                }
674            }
675        }
676        topMargin = Math.min(topMargin, maxTopMargin);
677        topMargin = Math.max(topMargin, minTopMargin);
678        banner.css("margin-top", topMargin + "px");
679    };
680
681    // Constantly update ad visibility as the user scrolls / resizes the window.
682    window.addEventListener('scroll', adjustLeftBarAdPosition);
683    window.addEventListener('resize', adjustLeftBarAdPosition);
684
685    // Set baseline position, in case the page is reloaded while scrolled.
686    adjustLeftBarAdPosition();
687});
688
689$(function () {
690    const banner = $('#leftbar-ads');
691    if (banner.length === 0) {
692        return;
693    }
694    if (banner.height() > 0) {
695        $('#removeAds').show();
696    }
697});
698</script>
698
699	
700	
700<script>
701		$(function () {
702            $('#latestpuzzles').find('.list-group-item-action').on('click', function () {
703                var href = $(this).find('a').attr('href');
704                if (href) {
705                    window.location.href = href;
706                }
707            });
708        })
709	</script>
709
710
711
712<!-- Insert blocks: end -->
713
714<!-- Google Analytics old cookies cleanup: BEGIN -->
715<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>
vendor: 1 bytes, line 715
715
716<script>
717    function deleteCookie(name) {
718        ['', 'www.bestcrosswords.com', '.bestcrosswords.com', 'bestcrosswords.com'].forEach(function (domain) {
719            ['', '/', '/bestcrosswords'].forEach(function (path) {
720                let options = {};
721                if (domain) {
722                    options['domain'] = domain;
723                }
724                if (path) {
725                    options['path'] = path;
726                }
727                console.log("Removing cookie", name, options);
728                Cookies.remove(name, options);
729            });
730        });
731    }
732
733    for (let name in Cookies.get()) {
734        if (name.startsWith('_gd')) {
735            deleteCookie(name);
736        }
737    }
738</script>
738
739<!-- Google Analytics old cookies cleanup: END -->
740
741</body>
742
743</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.