PageSourceSearch

https://www.localsdozen.com/

html localsdozen.com collected 2026-10-04 08:07:36 UTC 77,964 bytes, 2,262 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5    <meta charset="utf-8">
6    <meta name="viewport" content="width=device-width, initial-scale=1">
7    <title>The Local&#x27;s Dozen | Toronto&#x27;s Best Free Events Listings This Week</title>
8
9    <link rel="stylesheet" href="/assets/built/screen.css?v=hyaPx3lkD4rPhRRw">
10
11    <meta name="description" content="a dozen-ish curated free events in Toronto this week from festivals to book events to farmers&#x27; markets and more.">
12    <link rel="icon" href="https://www.localsdozen.com/content/images/size/w256h256/2026/06/the-local-s-dozen-centred_1-1.png" type="image/png">
13    <link rel="canonical" href="https://www.localsdozen.com/">
14    <meta name="referrer" content="no-referrer-when-downgrade">
15    <link rel="next" href="https://www.localsdozen.com/page/2/">
16    
17    <meta property="og:site_name" content="The Local&#x27;s Dozen">
18    <meta property="og:type" content="website">
19    <meta property="og:title" content="The Local&#x27;s Dozen">
20    <meta property="og:description" content="a dozen-ish curated free events in Toronto this week from festivals to book events to farmers&#x27; markets and more.">
21    <meta property="og:url" content="https://www.localsdozen.com/">
22    <meta name="twitter:card" content="summary">
23    <meta name="twitter:title" content="The Local&#x27;s Dozen">
24    <meta name="twitter:description" content="a dozen-ish curated free events in Toronto this week from festivals to book events to farmers&#x27; markets and more.">
25    <meta name="twitter:url" content="https://www.localsdozen.com/">
26    
27    
27<script type="application/ld+json">
28{
29    "@context": "https://schema.org",
30    "@type": "WebSite",
31    "publisher": {
32        "@type": "Organization",
33        "name": "The Local's Dozen",
34        "url": "https://www.localsdozen.com/",
35        "logo": {
36            "@type": "ImageObject",
37            "url": "https://www.localsdozen.com/content/images/size/w256h256/2026/06/the-local-s-dozen-centred_1-1.png",
38            "width": 60,
39            "height": 60
40        }
41    },
42    "url": "https://www.localsdozen.com/",
43    "name": "The Local's Dozen",
44    "mainEntityOfPage": "https://www.localsdozen.com/",
45    "description": "a dozen-ish curated free events in Toronto this week from festivals to book events to farmers' markets and more."
46}
47    </script>
47
48
49    <meta name="generator" content="Ghost 6.67">
50    <link rel="alternate" type="application/rss+xml" title="The Local&#x27;s Dozen" href="https://www.localsdozen.com/daily-posts/rss/">
51    
51<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://www.localsdozen.com/" data-key="819dc1cde5b95403085ef9cae7" data-api="https://www.localsdozen.com/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
51<style id="gh-members-styles">.gh-post-upgrade-cta-content,
52.gh-post-upgrade-cta {
53    display: flex;
54    flex-direction: column;
55    align-items: center;
56    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
57    text-align: center;
58    width: 100%;
59    color: #ffffff;
60    font-size: 16px;
61}
62
63.gh-post-upgrade-cta-content {
64    border-radius: 8px;
65    padding: 40px 4vw;
66}
67
68.gh-post-upgrade-cta h2 {
69    color: #ffffff;
70    font-size: 28px;
71    letter-spacing: -0.2px;
72    margin: 0;
73    padding: 0;
74}
75
76.gh-post-upgrade-cta p {
77    margin: 20px 0 0;
78    padding: 0;
79}
80
81.gh-post-upgrade-cta small {
82    font-size: 16px;
83    letter-spacing: -0.2px;
84}
85
86.gh-post-upgrade-cta a {
87    color: #ffffff;
88    cursor: pointer;
89    font-weight: 500;
90    box-shadow: none;
91    text-decoration: underline;
92}
93
94.gh-post-upgrade-cta a:hover {
95    color: #ffffff;
96    opacity: 0.8;
97    box-shadow: none;
98    text-decoration: underline;
99}
100
101.gh-post-upgrade-cta a.gh-btn {
102    display: block;
103    background: #ffffff;
104    text-decoration: none;
105    margin: 28px 0 0;
106    padding: 8px 18px;
107    border-radius: 4px;
108    font-size: 16px;
109    font-weight: 600;
110}
111
112.gh-post-upgrade-cta a.gh-btn:hover {
113    opacity: 0.92;
114}</style>
114<script async src="https://js.stripe.com/v3/"></script>
114
115    
115<script defer src="https://jsdelivr.net" data-key="819dc1cde5b95403085ef9cae7" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://www.localsdozen.com/" data-locale="en" crossorigin="anonymous"></script>
115
116    
117    <link href="https://www.localsdozen.com/webmentions/receive/" rel="webmention">
118    
118<script defer src="/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
118
119    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
120    
120<script defer src="/public/comment-counts.min.js?v=oFYkaGLdiMqB8VN9" data-ghost-comments-counts-api="https://www.localsdozen.com/members/api/comments/counts/"></script>
120
121    
121<script defer src="/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
121
122    
122<script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://www.localsdozen.com/.ghost/analytics/api/v1/page_hit"  tb_site_uuid="ec2ae83a-b4b3-4820-9013-497da3b3713c" tb_post_uuid="undefined" tb_post_type="null" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script>
122<style>:root {--ghost-accent-color: #edddb4;}</style>
123    <!-- Google Analytics -->
124<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 124-125
124
125<script async src="https://www.googletagmanager.com/gtag/js?id=
125G-G59YVBRJKM
vendor: 12 bytes, line 125
125"></script>
126<script>
127  
vendor: 134 bytes, lines 127-131
127window.dataLayer = window.dataLayer || [];
128  function gtag(){dataLayer.push(arguments);}
129  gtag('js', new Date());
130
131  gtag('config', '
131G-G59YVBRJKM
vendor: 4 bytes, line 131
131');
132</script>
132
133
134
135<!-- // add custom fonts -->
136<link rel="preconnect" href="https://fonts.googleapis.com">
137<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
138<link href="https://googleapis.com" rel="stylesheet">
139
140<style>
141:root {
142    --font-base: 'News Cycle', sans-serif; /* Changes body text */
143    --font-headings: 'Special Elite', system-ui; /* Changes headings */
144}
145
146</style>
147<!-- HIDE TAGS ON THE WHOLE SITE -->
148<style>
149  /* Hides tags on the homepage and daily post feed cards */
150  .feed-calendar,
151  .feed-length,
152  .feed-item .feed-primary-tag {
153    display: none !important;
154  }
155
156  /* Hides the tag/category header on the /tag/daily archive page */
157  .archive-header .archive-tag,
158  .archive-header .archive-description,
159  .tag-template .archive-header {
160    display: none !important;
161  }
162
163  /* Hides the tag label at the top of individual post pages */
164  .single-meta .single-meta-tag,
165  .post-template .single-meta-tag {
166    display: none !important;
167  }
168</style>
169<!-- ADD DROPDOWN MENU ABILITY USE DASH (-) IN ORDER TO SHOW UP AS DROPDOWN ITEM -->
170<style>
171/* ============================================================
172   GHOST EDITION — HIERARCHICAL NAVIGATION
173   ------------------------------------------------------------
174   Ghost Primary Navigation:
175   
176   Calendars
177   - Outdoor Movies
178   - Live Music
179   - Fitness
180   - Farmers' Markets
181   - Art
182   About
183   Support
184
185   Desktop:
186   • Dropdown opens on hover/focus/click
187   • Submenu floats below parent
188   • No tree lines
189
190   Mobile:
191   • Submenu opens by tapping arrow
192   • Child items use indented tree styling
193   
194   Edition breakpoint:
195   • Desktop/tablet: 768px+
196   • Mobile/hamburger: 767px and below
197   ============================================================ */
198
199
200/* ============================================================
201   SHARED
202   ============================================================ */
203
204.gh-head .nav > .gh-nav-dropdown {
205    position: relative;
206}
207
208
209/* ------------------------------------------------------------
210   Dropdown arrow button
211   ------------------------------------------------------------ */
212
213.gh-nav-dropdown-toggle {
214    appearance: none;
215    -webkit-appearance: none;
216
217    display: inline-flex;
218    align-items: center;
219    justify-content: center;
220
221    width: 22px;
222    height: 22px;
223
224    margin: 0 0 0 5px;
225    padding: 0;
226
227    border: 0;
228    outline: 0;
229
230    background: transparent;
231    color: inherit;
232
233    font: inherit;
234    cursor: pointer;
235
236    vertical-align: middle;
237}
238
239
240/* Arrow / chevron */
241
242.gh-nav-dropdown-toggle::after {
243    content: "";
244
245    display: block;
246
247    width: 6px;
248    height: 6px;
249
250    border-right: 2px solid currentColor;
251    border-bottom: 2px solid currentColor;
252
253    transform: rotate(45deg) translate(-1px, -1px);
254    transform-origin: center;
255
256    transition: transform 150ms ease;
257}
258
259
260/* Keyboard focus */
261
262.gh-nav-dropdown-toggle:focus-visible {
263    outline: 2px solid currentColor;
264    outline-offset: 2px;
265    border-radius: 3px;
266}
267
268
269/* ------------------------------------------------------------
270   Submenu base reset
271   ------------------------------------------------------------ */
272
273.gh-nav-submenu {
274    margin: 0;
275    padding: 0;
276
277    list-style: none;
278}
279
280.gh-nav-submenu > li {
281    margin: 0;
282    padding: 0;
283
284    list-style: none;
285}
286
287.gh-nav-submenu > li::marker {
288    content: "";
289}
290
291
292/* ============================================================
293   DESKTOP / TABLET — 768px+
294   ============================================================ */
295
296@media (min-width: 768px) {
297
298    /* --------------------------------------------------------
299       Keep dropdown parent aligned with the normal Edition menu
300       -------------------------------------------------------- */
301
302    .gh-head .nav > .gh-nav-dropdown {
303        position: relative !important;
304
305        display: flex !important;
306        align-items: center !important;
307
308        width: auto !important;
309        height: auto !important;
310
311        margin-top: 0 !important;
312        margin-bottom: 0 !important;
313    }
314
315
316    .gh-head .nav > .gh-nav-dropdown > a {
317        display: inline-flex !important;
318        align-items: center !important;
319
320        margin: 0 !important;
321    }
322
323
324    .gh-head .nav > .gh-nav-dropdown > .gh-nav-dropdown-toggle {
325        flex: 0 0 auto;
326    }
327
328
329    /* --------------------------------------------------------
330       Floating desktop dropdown
331       -------------------------------------------------------- */
332
333    .gh-head .gh-nav-dropdown > .gh-nav-submenu {
334        position: absolute !important;
335
336        top: calc(100% + 12px) !important;
337        bottom: auto !important;
338
339        left: 50% !important;
340        right: auto !important;
341
342        z-index: 10000;
343
344        display: block !important;
345
346        min-width: 210px;
347        width: max-content;
348        max-width: min(320px, calc(100vw - 32px));
349
350        margin: 0 !important;
351        padding: 7px !important;
352
353        list-style: none !important;
354
355        background: var(--color-background, #fff);
356
357        border: 1px solid rgba(0, 0, 0, 0.10) !important;
358        border-radius: 8px !important;
359
360        box-shadow:
361            0 12px 30px rgba(0, 0, 0, 0.10),
362            0 2px 5px rgba(0, 0, 0, 0.04);
363
364        visibility: hidden;
365        opacity: 0;
366
367        pointer-events: none;
368
369        transform: translate(-50%, -5px);
370
371        transition:
372            opacity 150ms ease,
373            transform 150ms ease,
374            visibility 150ms ease;
375    }
376
377
378    /* Invisible gap bridge so hover doesn't drop while
379       moving the pointer from Calendars to the submenu */
380
381    .gh-head .gh-nav-dropdown > .gh-nav-submenu::before {
382        content: "";
383
384        position: absolute;
385
386        left: 0;
387        right: 0;
388        bottom: 100%;
389
390        height: 14px;
391    }
392
393
394    /* --------------------------------------------------------
395       Desktop submenu items
396       -------------------------------------------------------- */
397
398    .gh-head .gh-nav-submenu > li {
399        position: static !important;
400
401        display: block !important;
402
403        width: 100% !important;
404
405        margin: 0 !important;
406        padding: 0 !important;
407
408        border: 0 !important;
409
410        opacity: 1 !important;
411        transform: none !important;
412    }
413
414
415    /* Remove mobile tree branches on desktop */
416
417    .gh-head .gh-nav-submenu > li::before,
418    .gh-head .gh-nav-submenu > li::after {
419        content: none !important;
420        display: none !important;
421    }
422
423
424    .gh-head .gh-nav-submenu > li > a {
425        display: block !important;
426
427        width: 100%;
428
429        padding: 9px 12px !important;
430
431        border: 0 !important;
432        border-radius: 5px;
433
434        color: inherit !important;
435        background: transparent;
436
437        font: inherit;
438        font-size: inherit;
439        font-weight: 500;
440        line-height: 1.35;
441
442        text-align: left;
443        text-decoration: none !important;
444
445        white-space: nowrap;
446
447        opacity: 1 !important;
448        transform: none !important;
449
450        box-sizing: border-box;
451    }
452
453
454    .gh-head .gh-nav-submenu > li > a:hover,
455    .gh-head .gh-nav-submenu > li > a:focus-visible {
456        background: rgba(0, 0, 0, 0.055);
457    }
458
459
460    /* --------------------------------------------------------
461       SHOW DROPDOWN
462
463       Hover = desktop mouse
464       focus-within = keyboard
465       is-open = arrow click/touch devices
466       -------------------------------------------------------- */
467
468    .gh-head .gh-nav-dropdown:hover > .gh-nav-submenu,
469    .gh-head .gh-nav-dropdown:focus-within > .gh-nav-submenu,
470    .gh-head .gh-nav-dropdown.is-open > .gh-nav-submenu {
471        visibility: visible;
472        opacity: 1;
473
474        pointer-events: auto;
475
476        transform: translate(-50%, 0);
477    }
478
479
480    /* Rotate arrow while menu is visible */
481
482    .gh-head .gh-nav-dropdown:hover
483        > .gh-nav-dropdown-toggle::after,
484
485    .gh-head .gh-nav-dropdown:focus-within
486        > .gh-nav-dropdown-toggle::after,
487
488    .gh-head .gh-nav-dropdown.is-open
489        > .gh-nav-dropdown-toggle::after {
490
491        transform: rotate(225deg) translate(-1px, -1px);
492    }
493}
494
495
496/* ============================================================
497   MOBILE / HAMBURGER — 767px and below
498   ============================================================ */
499
500@media (max-width: 767px) {
501
502    /* --------------------------------------------------------
503       Parent
504       -------------------------------------------------------- */
505
506    .gh-head .nav > .gh-nav-dropdown {
507        position: relative !important;
508
509        display: block !important;
510
511        width: auto !important;
512
513        margin: 0 !important;
514
515        text-align: center;
516    }
517
518
519    .gh-head .gh-nav-dropdown > a {
520        display: inline !important;
521    }
522
523
524    /* Slightly larger touch target */
525
526    .gh-nav-dropdown-toggle {
527        width: 30px;
528        height: 30px;
529
530        margin-left: 5px;
531
532        vertical-align: 3px;
533    }
534
535
536    /* --------------------------------------------------------
537       Mobile submenu
538
539       Hidden until arrow is tapped.
540       It stays in normal document flow rather than floating.
541       -------------------------------------------------------- */
542
543    .gh-head .gh-nav-dropdown > .gh-nav-submenu {
544        position: relative !important;
545
546        top: auto !important;
547        right: auto !important;
548        bottom: auto !important;
549        left: auto !important;
550
551        z-index: auto !important;
552
553        display: none !important;
554
555        width: max-content;
556        max-width: calc(100vw - 64px);
557
558        margin: 9px auto 6px !important;
559        padding: 3px 0 3px 18px !important;
560
561        list-style: none !important;
562
563        background: transparent !important;
564
565        border: 0 !important;
566        border-left: 1px solid rgba(21, 23, 26, 0.28) !important;
567        border-radius: 0 !important;
568
569        box-shadow: none !important;
570
571        visibility: visible !important;
572        opacity: 1 !important;
573
574        pointer-events: auto !important;
575
576        transform: none !important;
577
578        text-align: left;
579    }
580
581
582    /* Show mobile submenu after tapping arrow */
583
584    .gh-head .gh-nav-dropdown.is-open > .gh-nav-submenu {
585        display: block !important;
586    }
587
588
589    /* --------------------------------------------------------
590       Mobile submenu children
591       -------------------------------------------------------- */
592
593    .gh-head .gh-nav-submenu > li {
594        position: relative !important;
595
596        display: block !important;
597
598        width: auto !important;
599
600        margin: 0 !important;
601        padding: 0 !important;
602
603        list-style: none !important;
604
605        border: 0 !important;
606
607        opacity: 1 !important;
608        transform: none !important;
609    }
610
611
612    /* Horizontal branch from tree */
613
614    .gh-head .gh-nav-submenu > li::before {
615        content: "" !important;
616
617        position: absolute;
618
619        top: 50%;
620        left: -18px;
621
622        display: block !important;
623
624        width: 10px;
625        height: 0;
626
627        border-top: 1px solid rgba(21, 23, 26, 0.28);
628
629        transform: translateY(-50%);
630    }
631
632
633    /*
634     * Cover the vertical line underneath the final item so
635     * the tree terminates cleanly.
636     */
637
638    .gh-head .gh-nav-submenu > li:last-child::after {
639        content: "" !important;
640
641        position: absolute;
642
643        top: 50%;
644        bottom: -10px;
645        left: -19px;
646
647        display: block !important;
648
649        width: 3px;
650
651        background: var(--color-background, #fff);
652    }
653
654
655    .gh-head .gh-nav-submenu > li > a {
656        position: relative;
657
658        display: block !important;
659
660        width: auto !important;
661
662        padding: 6px 2px !important;
663
664        border: 0 !important;
665
666        color: inherit !important;
667        background: transparent !important;
668
669        font: inherit;
670        font-size: 0.88em !important;
671        font-weight: 500 !important;
672        line-height: 1.35 !important;
673
674        text-align: left;
675        text-decoration: none !important;
676
677        white-space: normal;
678
679        opacity: 0.78 !important;
680        transform: none !important;
681    }
682
683
684    .gh-head .gh-nav-submenu > li > a:active {
685        opacity: 1 !important;
686    }
687
688
689    /* Rotate arrow when mobile submenu is open */
690
691    .gh-head .gh-nav-dropdown.is-open
692        > .gh-nav-dropdown-toggle::after {
693
694        transform: rotate(225deg) translate(-1px, -1px);
695    }
696}
697
698
699/* ============================================================
700   DARK MODE / DARK THEME SUPPORT
701   ============================================================ */
702
703@media (prefers-color-scheme: dark) {
704
705    @media (min-width: 768px) {
706
707        .gh-head .gh-nav-dropdown > .gh-nav-submenu {
708            border-color: rgba(255, 255, 255, 0.14) !important;
709        }
710
711        .gh-head .gh-nav-submenu > li > a:hover,
712        .gh-head .gh-nav-submenu > li > a:focus-visible {
713            background: rgba(255, 255, 255, 0.08);
714        }
715    }
716
717    @media (max-width: 767px) {
718
719        .gh-head .gh-nav-dropdown > .gh-nav-submenu {
720            border-left-color:
721                rgba(255, 255, 255, 0.30) !important;
722        }
723
724        .gh-head .gh-nav-submenu > li::before {
725            border-top-color:
726                rgba(255, 255, 255, 0.30);
727        }
728    }
729}
730
731
732/* ============================================================
733   REDUCED MOTION
734   ============================================================ */
735
736@media (prefers-reduced-motion: reduce) {
737
738    .gh-nav-dropdown-toggle::after,
739    .gh-head .gh-nav-dropdown > .gh-nav-submenu {
740        transition: none !important;
741    }
742}
743</style>
744<!-- CODE TO RESTYLE NEWSLETTER SIGNUP ON CALENDAR PAGES -->
745<style>
746/* ========================================================================== 
747   LOCAL'S DOZEN — CALENDAR SIGNUP CARDS
748
749   Applies only to native Ghost Signup cards inside posts/pages tagged with
750   the internal tag #calendar (rendered by Ghost as .tag-hash-calendar).
751
752   Ghost editor setup for each calendar:
753   - Add a native Signup card
754   - Choose Regular width
755   - Do not add an image
756   - Set that calendar's heading, subtitle, button and member label in the card
757   ========================================================================== */
758
759/* Card shell */
760.tag-hash-calendar .kg-signup-card,
761.tag-hash-calendar .kg-signup-card * {
762    box-sizing: border-box;
763}
764
765.tag-hash-calendar .kg-signup-card {
766    --ld-calendar-ink: var(--darker-gray-color, #1a1a1a);
767    --ld-calendar-muted: var(--secondary-text-color, #777);
768    --ld-calendar-paper: var(--lighter-gray-color, #f6f6f6);
769    --ld-calendar-line: var(--light-gray-color, #e6e6e6);
770    --ld-calendar-white: var(--white-color, #fff);
771
772    container-type: inline-size;
773    width: 100% !important;
774    max-width: 100% !important;
775    min-height: 0 !important;
776    margin: 32px 0 !important;
777    padding: 0 !important;
778    overflow: visible !important;
779    color: var(--ld-calendar-ink) !important;
780    background: transparent !important;
781    border: 0 !important;
782    border-radius: 0 !important;
783    box-shadow: none !important;
784}
785
786/* Keep every calendar signup compact, even if an image layout was selected. */
787.tag-hash-calendar .kg-signup-card-content {
788    display: block !important;
789    width: 100% !important;
790    min-height: 0 !important;
791    padding: 0 !important;
792    background: transparent !important;
793}
794
795.tag-hash-calendar .kg-signup-card-content > picture,
796.tag-hash-calendar .kg-signup-card-image {
797    display: none !important;
798}
799
800/* Horizontal editorial strip */
801.tag-hash-calendar .kg-signup-card-text {
802    display: grid !important;
803    grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.25fr);
804    grid-template-rows: auto auto;
805    column-gap: 24px;
806    row-gap: 6px;
807    align-items: center;
808    width: 100% !important;
809    min-width: 0;
810    min-height: 0 !important;
811    margin: 0 !important;
812    padding: 20px 32px 20px 24px !important;
813    color: var(--ld-calendar-ink) !important;
814    text-align: left !important;
815    background: var(--ld-calendar-paper) !important;
816    border-top: 5px solid var(--ld-calendar-ink) !important;
817    border-right: 0 !important;
818    border-bottom: 1px solid var(--ld-calendar-line) !important;
819    border-left: 0 !important;
820    border-radius: 0 !important;
821}
822
823/* Copy */
824.tag-hash-calendar .kg-signup-card-heading {
825    grid-column: 1;
826    grid-row: 1;
827    align-self: end;
828    min-width: 0;
829    margin: 0 !important;
830    padding: 0 !important;
831    color: var(--ld-calendar-ink) !important;
832    font-family: var(--gh-font-heading, var(--font-serif, Georgia, "Times New Roman", serif)) !important;
833    font-size: clamp(21px, 2.2vw, 26px) !important;
834    font-weight: 800 !important;
835    line-height: 1.08 !important;
836    letter-spacing: -0.025em !important;
837    text-align: left !important;
838}
839
840.tag-hash-calendar .kg-signup-card-subheading {
841    grid-column: 1;
842    grid-row: 2;
843    align-self: start;
844    min-width: 0;
845    margin: 0 !important;
846    padding: 0 !important;
847    color: var(--ld-calendar-muted) !important;
848    font-family: var(--gh-font-body, var(--font-sans, Arial, sans-serif)) !important;
849    font-size: 15px !important;
850    font-weight: 400 !important;
851    line-height: 1.35 !important;
852    letter-spacing: 0 !important;
853    text-align: left !important;
854}
855
856/* Form */
857.tag-hash-calendar .kg-signup-card-form {
858    grid-column: 2;
859    grid-row: 1 / span 2;
860    align-self: center;
861    width: 100% !important;
862    min-width: 0;
863    margin: 0 !important;
864    padding: 0 !important;
865}
866
867.tag-hash-calendar .kg-signup-card-fields {
868    display: grid !important;
869    grid-template-columns: minmax(0, 1fr) max-content;
870    gap: 8px;
871    align-items: stretch;
872    width: 100% !important;
873    min-width: 0;
874    margin: 0 !important;
875    padding: 0 !important;
876    border: 0 !important;
877    background: transparent !important;
878}
879
880.tag-hash-calendar .kg-signup-card-input,
881.tag-hash-calendar .kg-signup-card-button {
882    height: 46px !important;
883    min-height: 46px !important;
884    margin: 0 !important;
885    border-radius: 5px !important;
886    font-family: var(--gh-font-body, var(--font-sans, Arial, sans-serif)) !important;
887    font-size: 15px !important;
888    line-height: 1 !important;
889}
890
891.tag-hash-calendar .kg-signup-card-input {
892    display: block !important;
893    width: 100% !important;
894    min-width: 0 !important;
895    padding: 0 14px !important;
896    color: var(--ld-calendar-ink) !important;
897    appearance: none;
898    background: var(--ld-calendar-white) !important;
899    border: 1px solid var(--ld-calendar-line) !important;
900    outline: none !important;
901    box-shadow: none !important;
902}
903
904.tag-hash-calendar .kg-signup-card-input::placeholder {
905    color: var(--ld-calendar-muted) !important;
906    opacity: 0.75;
907}
908
909.tag-hash-calendar .kg-signup-card-input:focus {
910    border-color: var(--ld-calendar-ink) !important;
911    box-shadow: 0 0 0 1px var(--ld-calendar-ink) !important;
912}
913
914.tag-hash-calendar .kg-signup-card-button {
915    position: relative !important;
916    display: inline-flex !important;
917    align-items: center !important;
918    justify-content: center !important;
919    width: auto !important;
920    max-width: 100% !important;
921    padding: 0 18px !important;
922    color: var(--ld-calendar-white) !important;
923    font-weight: 800 !important;
924    white-space: nowrap;
925    text-transform: none !important;
926    letter-spacing: 0 !important;
927    cursor: pointer;
928    background: var(--ld-calendar-ink) !important;
929    border: 1px solid var(--ld-calendar-ink) !important;
930    outline: none !important;
931    box-shadow: none !important;
932    transition: opacity 120ms ease, transform 120ms ease;
933}
934
935.tag-hash-calendar .kg-signup-card-button:hover {
936    opacity: 0.84;
937    transform: translateY(-1px);
938}
939
940.tag-hash-calendar .kg-signup-card-button:focus-visible {
941    outline: 2px solid var(--ld-calendar-ink) !important;
942    outline-offset: 3px !important;
943}
944
945/* Ghost's loading, success and error states */
946.tag-hash-calendar .kg-signup-card-success,
947.tag-hash-calendar .kg-signup-card-error {
948    color: var(--ld-calendar-muted) !important;
949    font-family: var(--gh-font-body, var(--font-sans, Arial, sans-serif)) !important;
950    font-size: 13px !important;
951    line-height: 1.35 !important;
952    text-align: left !important;
953}
954
955.tag-hash-calendar .kg-signup-card-error {
956    margin-top: 8px !important;
957    color: #9d2727 !important;
958}
959
960/* The subtitle already provides the useful supporting copy. */
961.tag-hash-calendar .kg-signup-card-disclaimer {
962    display: none !important;
963}
964
965/* Stack based on the card's real content width, not the full browser width. */
966@container (max-width: 620px) {
967    .tag-hash-calendar .kg-signup-card-text {
968        grid-template-columns: minmax(0, 1fr);
969        grid-template-rows: auto;
970        row-gap: 0;
971        padding: 20px !important;
972    }
973
974    .tag-hash-calendar .kg-signup-card-heading,
975    .tag-hash-calendar .kg-signup-card-subheading,
976    .tag-hash-calendar .kg-signup-card-form {
977        grid-column: 1;
978        grid-row: auto;
979    }
980
981    .tag-hash-calendar .kg-signup-card-subheading {
982        margin-top: 6px !important;
983    }
984
985    .tag-hash-calendar .kg-signup-card-form {
986        margin-top: 16px !important;
987    }
988}
989
990@container (max-width: 480px) {
991    .tag-hash-calendar .kg-signup-card-fields {
992        grid-template-columns: minmax(0, 1fr);
993    }
994
995    .tag-hash-calendar .kg-signup-card-button {
996        width: 100% !important;
997    }
998}
999
1000/* Fallback for older browsers without container queries. */
1001@supports not (container-type: inline-size) {
1002    @media (max-width: 700px) {
1003        .tag-hash-calendar .kg-signup-card-text {
1004            grid-template-columns: minmax(0, 1fr);
1005            grid-template-rows: auto;
1006            row-gap: 0;
1007            padding: 20px !important;
1008        }
1009
1010        .tag-hash-calendar .kg-signup-card-heading,
1011        .tag-hash-calendar .kg-signup-card-subheading,
1012        .tag-hash-calendar .kg-signup-card-form {
1013            grid-column: 1;
1014            grid-row: auto;
1015        }
1016
1017        .tag-hash-calendar .kg-signup-card-subheading {
1018            margin-top: 6px !important;
1019        }
1020
1021        .tag-hash-calendar .kg-signup-card-form {
1022            margin-top: 16px !important;
1023        }
1024    }
1025
1026    @media (max-width: 520px) {
1027        .tag-hash-calendar .kg-signup-card-fields {
1028            grid-template-columns: minmax(0, 1fr);
1029        }
1030
1031        .tag-hash-calendar .kg-signup-card-button {
1032            width: 100% !important;
1033        }
1034    }
1035}
1036</style>
1037<!-- homepage set thumbnails back to the width of the header image in Edition theme -->
1038<style>
1039/* Local's Dozen — show complete weekly feature images on homepage */
1040
1041.home-template .feed-image.u-placeholder.rectangle::before {
1042    display: none !important;
1043}
1044
1045.home-template .feed-image .u-object-fit {
1046    position: relative !important;
1047    top: auto !important;
1048    left: auto !important;
1049    width: 100% !important;
1050    height: auto !important;
1051    object-fit: contain !important;
1052    display: block !important;
1053}
1054</style>
1055</head>
1056
1057<body class="home-template is-head-left-logo">
1058<div class="site">
1059
1060    <header id="gh-head" class="gh-head gh-outer">
1061        <div class="gh-head-inner">
1062            <div class="gh-head-brand">
1063                <div class="gh-head-brand-wrapper">
1064                    <a class="gh-head-logo" href="https://www.localsdozen.com">
1065                            The Local&#x27;s Dozen
1066                    </a>
1067                </div>
1068                <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
1069                <button class="gh-burger" aria-label="Toggle menu"></button>
1070            </div>
1071
1072            <nav class="gh-head-menu">
1073                <ul class="nav">
1074    <li class="nav-home nav-current"><a href="https://www.localsdozen.com/">Home</a></li>
1075    <li class="nav-daily-picks"><a href="https://www.localsdozen.com/daily/">Daily Picks</a></li>
1076    <li class="nav-calendars"><a href="https://www.localsdozen.com/calendars/">Calendars</a></li>
1077    <li class="nav-outdoor-movies"><a href="https://www.localsdozen.com/toronto-free-outdoor-movies-calendar-2026/">- Outdoor Movies</a></li>
1078    <li class="nav-live-music"><a href="https://www.localsdozen.com/toronto-outdoor-live-music-2026/">- Live Music</a></li>
1079    <li class="nav-fitness"><a href="https://www.localsdozen.com/toronto-free-outdoor-fitness-calendar/">- Fitness</a></li>
1080    <li class="nav-farmers-markets"><a href="https://www.localsdozen.com/toronto-farmers-markets/">- Farmers&#x27; Markets</a></li>
1081    <li class="nav-art"><a href="https://www.localsdozen.com/toronto-art-calendar/">- Art</a></li>
1082    <li class="nav-about"><a href="https://www.localsdozen.com/about/">About</a></li>
1083    <li class="nav-support"><a href="https://www.localsdozen.com/support-the-locals-dozen/">Support</a></li>
1084</ul>
1085
1086            </nav>
1087
1088            <div class="gh-head-actions">
1089                    <button class="gh-search gh-icon-btn" aria-label="Search this site" data-ghost-search><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" width="20" height="20"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg></button>
1090                    <div class="gh-head-members">
1091                                <a class="gh-head-link" href="#/portal/signin" data-portal="signin">Sign in</a>
1092                                <a class="gh-head-btn gh-btn gh-primary-btn" href="#/portal/signup" data-portal="signup">Subscribe</a>
1093                    </div>
1094            </div>
1095        </div>
1096    </header>
1097
1098        <div class="cover gh-outer">
1099
1100    <div class="cover-content">
1101            <div class="cover-description">
1102                        twelve things that are worth leaving the house for every week.
1103            </div>
1104
1105                    <form class="form-wrapper cover-form" data-members-form>
1106                        <input class="auth-email" type="email" name="email" data-members-email placeholder="Your email address" required="true">
1107                        <button class="form-button" type="submit" aria-label="Submit">
1108                            <span class="default">Subscribe</span>
1109                            <span class="loader"><svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 40">
1110    <path opacity="0.3" fill="currentColor" d="M20.201,5.169c-8.254,0-14.946,6.692-14.946,14.946c0,8.255,6.692,14.946,14.946,14.946 s14.946-6.691,14.946-14.946C35.146,11.861,28.455,5.169,20.201,5.169z M20.201,31.749c-6.425,0-11.634-5.208-11.634-11.634 c0-6.425,5.209-11.634,11.634-11.634c6.425,0,11.633,5.209,11.633,11.634C31.834,26.541,26.626,31.749,20.201,31.749z" />
1111    <path fill="currentColor" d="M26.013,10.047l1.654-2.866c-2.198-1.272-4.743-2.012-7.466-2.012h0v3.312h0 C22.32,8.481,24.301,9.057,26.013,10.047z">
1112        <animateTransform attributeType="xml" attributeName="transform" type="rotate" from="0 20 20" to="360 20 20" dur="0.5s" repeatCount="indefinite" />
1113    </path>
1114</svg></span>
1115                            <span class="success">Email sent</span>
1116                        </button>
1117                    </form>
1118    </div>
1119
1120    <button class="button-icon cover-arrow">
1121        <svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" fill="currentColor" viewBox="0 0 256 256" class="icon">
1122    <rect width="256" height="256" fill="none"></rect><polyline points="208 96 128 176 48 96" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="24"></polyline>
1123</svg>    </button>
1124</div>
1125    <div class="site-content">
1126        
1127<main class="site-main">
1128
1129    <header class="feed-header gh-canvas">
1130            <div class="feed-header-wrapper">
1131                <h2 class="feed-header-title">Latest</h2>
1132            </div>
1133    </header>
1134
1135    <div class="post-feed expanded gh-feed gh-canvas">
1136            <article class="feed post tag-weekly featured" data-month="October 2026">
1137
1138    <div class="feed-calendar">
1139        <div class="feed-calendar-day">
1140            02
1141        </div>
1142        <div class="feed-calendar-month">
1143            Oct
1144        </div>
1145    </div>
1146
1147        <div class="feed-image u-placeholder rectangle">
1148                <img
1149                    class="u-object-fit"
1150                    srcset="/content/images/size/w400/2026/10/localsdozen-2026-10-02-featured-3-.png 400w,
1151/content/images/size/w750/2026/10/localsdozen-2026-10-02-featured-3-.png 750w,
1152/content/images/size/w960/2026/10/localsdozen-2026-10-02-featured-3-.png 960w,
1153/content/images/size/w1140/2026/10/localsdozen-2026-10-02-featured-3-.png 1140w"
1154                    sizes="(min-width: 576px) 160px, 90vw"
1155                    src="/content/images/size/w750/2026/10/localsdozen-2026-10-02-featured-3-.png"
1156                    alt="what to see and what to skip at nuit blanche in toronto"
1157                    loading="lazy"
1158                >
1159        </div>
1160
1161    <div class="feed-wrapper">
1162        <h2 class="feed-title">what to see and what to skip at nuit blanche in toronto</h2>
1163            <div class="feed-excerpt">it&#39;s the 20th anniversary, and there are 70+ art projects. It is possible to see them all, but</div>
1164        <div class="feed-right">
1165            <time class="feed-date" datetime="2026-10-02">
1166                02 Oct 2026
1167            </time>
1168            <div class="feed-visibility feed-visibility-public">
1169                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1170    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1171</svg>            </div>
1172                <div class="feed-length">
1173                    10 min read
1174                </div>
1175                
1175<script
1176    data-ghost-comment-count="6abd839db3c1000001dbefef"
1177    data-ghost-comment-count-empty=""
1178    data-ghost-comment-count-singular="comment"
1179    data-ghost-comment-count-plural="comments"
1180    data-ghost-comment-count-tag="div"
1181    data-ghost-comment-count-class-name="feed-comments"
1182    data-ghost-comment-count-autowrap="true"
1183>
1184</script>
1184
1185            <div class="feed-icon">
1186                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1187    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1188</svg>            </div>
1189        </div>
1190    </div>
1191
1192    <a class="u-permalink" href="/what-to-see-and-what-to-skip-at-nuit-blanche-in-toronto/" aria-label="what to see and what to skip at nuit blanche in toronto"></a>
1193
1194</article>            <article class="feed post tag-weekly" data-month="September 2026">
1195
1196    <div class="feed-calendar">
1197        <div class="feed-calendar-day">
1198            30
1199        </div>
1200        <div class="feed-calendar-month">
1201            Sep
1202        </div>
1203    </div>
1204
1205        <div class="feed-image u-placeholder rectangle">
1206                <img
1207                    class="u-object-fit"
1208                    srcset="/content/images/size/w400/2026/10/localsdozen-2026-10-02-featured.png 400w,
1209/content/images/size/w750/2026/10/localsdozen-2026-10-02-featured.png 750w,
1210/content/images/size/w960/2026/10/localsdozen-2026-10-02-featured.png 960w,
1211/content/images/size/w1140/2026/10/localsdozen-2026-10-02-featured.png 1140w"
1212                    sizes="(min-width: 576px) 160px, 90vw"
1213                    src="/content/images/size/w750/2026/10/localsdozen-2026-10-02-featured.png"
1214                    alt="nuit x 20 | Oct 2 - Oct 8 2026"
1215                    loading="lazy"
1216                >
1217        </div>
1218
1219    <div class="feed-wrapper">
1220        <h2 class="feed-title">nuit x 20 | Oct 2 - Oct 8 2026</h2>
1221            <div class="feed-excerpt">It&#39;s the 20th anniversary of Nuit Blanche this weekend, proof that art can be made accessible and generate</div>
1222        <div class="feed-right">
1223            <time class="feed-date" datetime="2026-09-30">
1224                30 Sep 2026
1225            </time>
1226            <div class="feed-visibility feed-visibility-public">
1227                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1228    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1229</svg>            </div>
1230                <div class="feed-length">
1231                    14 min read
1232                </div>
1233                
1233<script
1234    data-ghost-comment-count="6abd6cc0b3c1000001dbefe9"
1235    data-ghost-comment-count-empty=""
1236    data-ghost-comment-count-singular="comment"
1237    data-ghost-comment-count-plural="comments"
1238    data-ghost-comment-count-tag="div"
1239    data-ghost-comment-count-class-name="feed-comments"
1240    data-ghost-comment-count-autowrap="true"
1241>
1242</script>
1242
1243            <div class="feed-icon">
1244                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1245    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1246</svg>            </div>
1247        </div>
1248    </div>
1249
1250    <a class="u-permalink" href="/nuit-x-20-oct-2-oct-8-2026/" aria-label="nuit x 20 | Oct 2 - Oct 8 2026"></a>
1251
1252</article>            <article class="feed post tag-weekly" data-month="September 2026">
1253
1254    <div class="feed-calendar">
1255        <div class="feed-calendar-day">
1256            23
1257        </div>
1258        <div class="feed-calendar-month">
1259            Sep
1260        </div>
1261    </div>
1262
1263        <div class="feed-image u-placeholder rectangle">
1264                <img
1265                    class="u-object-fit"
1266                    srcset="/content/images/size/w400/2026/09/localsdozen-2026-09-25-featured.png 400w,
1267/content/images/size/w750/2026/09/localsdozen-2026-09-25-featured.png 750w,
1268/content/images/size/w960/2026/09/localsdozen-2026-09-25-featured.png 960w,
1269/content/images/size/w1140/2026/09/localsdozen-2026-09-25-featured.png 1140w"
1270                    sizes="(min-width: 576px) 160px, 90vw"
1271                    src="/content/images/size/w750/2026/09/localsdozen-2026-09-25-featured.png"
1272                    alt="the fall | Sep 25 - Oct 1 2026"
1273                    loading="lazy"
1274                >
1275        </div>
1276
1277    <div class="feed-wrapper">
1278        <h2 class="feed-title">the fall | Sep 25 - Oct 1 2026</h2>
1279            <div class="feed-excerpt">It&#39;s officially a new season but events haven&#39;t slowed down on weekends. When it does slow</div>
1280        <div class="feed-right">
1281            <time class="feed-date" datetime="2026-09-23">
1282                23 Sep 2026
1283            </time>
1284            <div class="feed-visibility feed-visibility-public">
1285                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1286    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1287</svg>            </div>
1288                <div class="feed-length">
1289                    11 min read
1290                </div>
1291                
1291<script
1292    data-ghost-comment-count="6ab4814eef7a2d0001e196d8"
1293    data-ghost-comment-count-empty=""
1294    data-ghost-comment-count-singular="comment"
1295    data-ghost-comment-count-plural="comments"
1296    data-ghost-comment-count-tag="div"
1297    data-ghost-comment-count-class-name="feed-comments"
1298    data-ghost-comment-count-autowrap="true"
1299>
1300</script>
1300
1301            <div class="feed-icon">
1302                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1303    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1304</svg>            </div>
1305        </div>
1306    </div>
1307
1308    <a class="u-permalink" href="/the-fall-sep-25-oct-1-2026/" aria-label="the fall | Sep 25 - Oct 1 2026"></a>
1309
1310</article>            <article class="feed post tag-weekly" data-month="September 2026">
1311
1312    <div class="feed-calendar">
1313        <div class="feed-calendar-day">
1314            16
1315        </div>
1316        <div class="feed-calendar-month">
1317            Sep
1318        </div>
1319    </div>
1320
1321        <div class="feed-image u-placeholder rectangle">
1322                <img
1323                    class="u-object-fit"
1324                    srcset="/content/images/size/w400/2026/09/localsdozen-2026-09-18-featured-1-.png 400w,
1325/content/images/size/w750/2026/09/localsdozen-2026-09-18-featured-1-.png 750w,
1326/content/images/size/w960/2026/09/localsdozen-2026-09-18-featured-1-.png 960w,
1327/content/images/size/w1140/2026/09/localsdozen-2026-09-18-featured-1-.png 1140w"
1328                    sizes="(min-width: 576px) 160px, 90vw"
1329                    src="/content/images/size/w750/2026/09/localsdozen-2026-09-18-featured-1-.png"
1330                    alt="remnants of summer | Sep 18 - Sep 24 2026"
1331                    loading="lazy"
1332                >
1333        </div>
1334
1335    <div class="feed-wrapper">
1336        <h2 class="feed-title">remnants of summer | Sep 18 - Sep 24 2026</h2>
1337            <div class="feed-excerpt">The last big weekend of festivals is here with TIFF still going on and a brand new waterfront weekend experience.</div>
1338        <div class="feed-right">
1339            <time class="feed-date" datetime="2026-09-16">
1340                16 Sep 2026
1341            </time>
1342            <div class="feed-visibility feed-visibility-public">
1343                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1344    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1345</svg>            </div>
1346                <div class="feed-length">
1347                    10 min read
1348                </div>
1349                
1349<script
1350    data-ghost-comment-count="6aab3923afdfdc00015a8ea6"
1351    data-ghost-comment-count-empty=""
1352    data-ghost-comment-count-singular="comment"
1353    data-ghost-comment-count-plural="comments"
1354    data-ghost-comment-count-tag="div"
1355    data-ghost-comment-count-class-name="feed-comments"
1356    data-ghost-comment-count-autowrap="true"
1357>
1358</script>
1358
1359            <div class="feed-icon">
1360                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1361    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1362</svg>            </div>
1363        </div>
1364    </div>
1365
1366    <a class="u-permalink" href="/remnants-of-summer-sep-18-sep-24-2026/" aria-label="remnants of summer | Sep 18 - Sep 24 2026"></a>
1367
1368</article>            <article class="feed post tag-weekly" data-month="September 2026">
1369
1370    <div class="feed-calendar">
1371        <div class="feed-calendar-day">
1372            09
1373        </div>
1374        <div class="feed-calendar-month">
1375            Sep
1376        </div>
1377    </div>
1378
1379        <div class="feed-image u-placeholder rectangle">
1380                <img
1381                    class="u-object-fit"
1382                    srcset="/content/images/size/w400/2026/09/localsdozen-2026-09-11-featured.png 400w,
1383/content/images/size/w750/2026/09/localsdozen-2026-09-11-featured.png 750w,
1384/content/images/size/w960/2026/09/localsdozen-2026-09-11-featured.png 960w,
1385/content/images/size/w1140/2026/09/localsdozen-2026-09-11-featured.png 1140w"
1386                    sizes="(min-width: 576px) 160px, 90vw"
1387                    src="/content/images/size/w750/2026/09/localsdozen-2026-09-11-featured.png"
1388                    alt="25 years | Sep 11 - Sep 17 2026"
1389                    loading="lazy"
1390                >
1391        </div>
1392
1393    <div class="feed-wrapper">
1394        <h2 class="feed-title">25 years | Sep 11 - Sep 17 2026</h2>
1395            <div class="feed-excerpt">Two things this week that I couldn&#39;t believe. I saw Halloween decorations already out and more importantly, it&</div>
1396        <div class="feed-right">
1397            <time class="feed-date" datetime="2026-09-09">
1398                09 Sep 2026
1399            </time>
1400            <div class="feed-visibility feed-visibility-public">
1401                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1402    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1403</svg>            </div>
1404                <div class="feed-length">
1405                    11 min read
1406                </div>
1407                
1407<script
1408    data-ghost-comment-count="6aa1ec93d35f2a0001dbb8cb"
1409    data-ghost-comment-count-empty=""
1410    data-ghost-comment-count-singular="comment"
1411    data-ghost-comment-count-plural="comments"
1412    data-ghost-comment-count-tag="div"
1413    data-ghost-comment-count-class-name="feed-comments"
1414    data-ghost-comment-count-autowrap="true"
1415>
1416</script>
1416
1417            <div class="feed-icon">
1418                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1419    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1420</svg>            </div>
1421        </div>
1422    </div>
1423
1424    <a class="u-permalink" href="/25-years-sep-11-sep-17-2026/" aria-label="25 years | Sep 11 - Sep 17 2026"></a>
1425
1426</article>            <article class="feed post tag-weekly" data-month="September 2026">
1427
1428    <div class="feed-calendar">
1429        <div class="feed-calendar-day">
1430            02
1431        </div>
1432        <div class="feed-calendar-month">
1433            Sep
1434        </div>
1435    </div>
1436
1437        <div class="feed-image u-placeholder rectangle">
1438                <img
1439                    class="u-object-fit"
1440                    srcset="/content/images/size/w400/2026/09/localsdozen-2026-09-04-featured.png 400w,
1441/content/images/size/w750/2026/09/localsdozen-2026-09-04-featured.png 750w,
1442/content/images/size/w960/2026/09/localsdozen-2026-09-04-featured.png 960w,
1443/content/images/size/w1140/2026/09/localsdozen-2026-09-04-featured.png 1140w"
1444                    sizes="(min-width: 576px) 160px, 90vw"
1445                    src="/content/images/size/w750/2026/09/localsdozen-2026-09-04-featured.png"
1446                    alt="what a storm | Sep 4 - Sep 10 2026"
1447                    loading="lazy"
1448                >
1449        </div>
1450
1451    <div class="feed-wrapper">
1452        <h2 class="feed-title">what a storm | Sep 4 - Sep 10 2026</h2>
1453            <div class="feed-excerpt">What was that?? Hail, winds going crazy, and everyone&#39;s phone blasting the same sound as the amber alert.</div>
1454        <div class="feed-right">
1455            <time class="feed-date" datetime="2026-09-02">
1456                02 Sep 2026
1457            </time>
1458            <div class="feed-visibility feed-visibility-public">
1459                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1460    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1461</svg>            </div>
1462                <div class="feed-length">
1463                    10 min read
1464                </div>
1465                
1465<script
1466    data-ghost-comment-count="6a989876f2105d0001e2e0f1"
1467    data-ghost-comment-count-empty=""
1468    data-ghost-comment-count-singular="comment"
1469    data-ghost-comment-count-plural="comments"
1470    data-ghost-comment-count-tag="div"
1471    data-ghost-comment-count-class-name="feed-comments"
1472    data-ghost-comment-count-autowrap="true"
1473>
1474</script>
1474
1475            <div class="feed-icon">
1476                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1477    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1478</svg>            </div>
1479        </div>
1480    </div>
1481
1482    <a class="u-permalink" href="/what-a-storm-sep-4-sep-10-2026/" aria-label="what a storm | Sep 4 - Sep 10 2026"></a>
1483
1484</article>            <article class="feed post tag-weekly" data-month="August 2026">
1485
1486    <div class="feed-calendar">
1487        <div class="feed-calendar-day">
1488            26
1489        </div>
1490        <div class="feed-calendar-month">
1491            Aug
1492        </div>
1493    </div>
1494
1495        <div class="feed-image u-placeholder rectangle">
1496                <img
1497                    class="u-object-fit"
1498                    srcset="/content/images/size/w400/2026/08/localsdozen-2026-08-26-featured--2-.png 400w,
1499/content/images/size/w750/2026/08/localsdozen-2026-08-26-featured--2-.png 750w,
1500/content/images/size/w960/2026/08/localsdozen-2026-08-26-featured--2-.png 960w,
1501/content/images/size/w1140/2026/08/localsdozen-2026-08-26-featured--2-.png 1140w"
1502                    sizes="(min-width: 576px) 160px, 90vw"
1503                    src="/content/images/size/w750/2026/08/localsdozen-2026-08-26-featured--2-.png"
1504                    alt="oh dolly | Aug 26 - Sep 3 2026"
1505                    loading="lazy"
1506                >
1507        </div>
1508
1509    <div class="feed-wrapper">
1510        <h2 class="feed-title">oh dolly | Aug 26 - Sep 3 2026</h2>
1511            <div class="feed-excerpt">A few changes this week. I&#39;m going to try and fix the way these go out. The newsletter</div>
1512        <div class="feed-right">
1513            <time class="feed-date" datetime="2026-08-26">
1514                26 Aug 2026
1515            </time>
1516            <div class="feed-visibility feed-visibility-public">
1517                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1518    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1519</svg>            </div>
1520                <div class="feed-length">
1521                    12 min read
1522                </div>
1523                
1523<script
1524    data-ghost-comment-count="6a8f4543d5da5f0001c5d331"
1525    data-ghost-comment-count-empty=""
1526    data-ghost-comment-count-singular="comment"
1527    data-ghost-comment-count-plural="comments"
1528    data-ghost-comment-count-tag="div"
1529    data-ghost-comment-count-class-name="feed-comments"
1530    data-ghost-comment-count-autowrap="true"
1531>
1532</script>
1532
1533            <div class="feed-icon">
1534                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1535    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1536</svg>            </div>
1537        </div>
1538    </div>
1539
1540    <a class="u-permalink" href="/oh-dolly-aug-26-sep-3-2026/" aria-label="oh dolly | Aug 26 - Sep 3 2026"></a>
1541
1542</article>            <article class="feed post tag-weekly" data-month="August 2026">
1543
1544    <div class="feed-calendar">
1545        <div class="feed-calendar-day">
1546            19
1547        </div>
1548        <div class="feed-calendar-month">
1549            Aug
1550        </div>
1551    </div>
1552
1553        <div class="feed-image u-placeholder rectangle">
1554                <img
1555                    class="u-object-fit"
1556                    srcset="/content/images/size/w400/2026/08/localsdozen-2026-08-19-featured-2-.png 400w,
1557/content/images/size/w750/2026/08/localsdozen-2026-08-19-featured-2-.png 750w,
1558/content/images/size/w960/2026/08/localsdozen-2026-08-19-featured-2-.png 960w,
1559/content/images/size/w1140/2026/08/localsdozen-2026-08-19-featured-2-.png 1140w"
1560                    sizes="(min-width: 576px) 160px, 90vw"
1561                    src="/content/images/size/w750/2026/08/localsdozen-2026-08-19-featured-2-.png"
1562                    alt="exhibition season | Aug 19 - Aug 25 2026"
1563                    loading="lazy"
1564                >
1565        </div>
1566
1567    <div class="feed-wrapper">
1568        <h2 class="feed-title">exhibition season | Aug 19 - Aug 25 2026</h2>
1569            <div class="feed-excerpt">the CNE begins this weekend and if you can get in, all the concerts are free including Shaggy, a large</div>
1570        <div class="feed-right">
1571            <time class="feed-date" datetime="2026-08-19">
1572                19 Aug 2026
1573            </time>
1574            <div class="feed-visibility feed-visibility-public">
1575                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1576    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1577</svg>            </div>
1578                <div class="feed-length">
1579                    14 min read
1580                </div>
1581                
1581<script
1582    data-ghost-comment-count="6a85e7161a156000011b9689"
1583    data-ghost-comment-count-empty=""
1584    data-ghost-comment-count-singular="comment"
1585    data-ghost-comment-count-plural="comments"
1586    data-ghost-comment-count-tag="div"
1587    data-ghost-comment-count-class-name="feed-comments"
1588    data-ghost-comment-count-autowrap="true"
1589>
1590</script>
1590
1591            <div class="feed-icon">
1592                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1593    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1594</svg>            </div>
1595        </div>
1596    </div>
1597
1598    <a class="u-permalink" href="/exhibition-season-aug-19-aug-25-2026/" aria-label="exhibition season | Aug 19 - Aug 25 2026"></a>
1599
1600</article>            <article class="feed post tag-weekly" data-month="August 2026">
1601
1602    <div class="feed-calendar">
1603        <div class="feed-calendar-day">
1604            12
1605        </div>
1606        <div class="feed-calendar-month">
1607            Aug
1608        </div>
1609    </div>
1610
1611        <div class="feed-image u-placeholder rectangle">
1612                <img
1613                    class="u-object-fit"
1614                    srcset="/content/images/size/w400/2026/08/localsdozen-2026-08-12-featured-1-.png 400w,
1615/content/images/size/w750/2026/08/localsdozen-2026-08-12-featured-1-.png 750w,
1616/content/images/size/w960/2026/08/localsdozen-2026-08-12-featured-1-.png 960w,
1617/content/images/size/w1140/2026/08/localsdozen-2026-08-12-featured-1-.png 1140w"
1618                    sizes="(min-width: 576px) 160px, 90vw"
1619                    src="/content/images/size/w750/2026/08/localsdozen-2026-08-12-featured-1-.png"
1620                    alt="this will never end | Aug 12 - Aug 18 2026"
1621                    loading="lazy"
1622                >
1623        </div>
1624
1625    <div class="feed-wrapper">
1626        <h2 class="feed-title">this will never end | Aug 12 - Aug 18 2026</h2>
1627            <div class="feed-excerpt">This is the week I take for granted. The weather has been good for months, the big events on the</div>
1628        <div class="feed-right">
1629            <time class="feed-date" datetime="2026-08-12">
1630                12 Aug 2026
1631            </time>
1632            <div class="feed-visibility feed-visibility-public">
1633                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1634    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1635</svg>            </div>
1636                <div class="feed-length">
1637                    9 min read
1638                </div>
1639                
1639<script
1640    data-ghost-comment-count="6a7cba497c01b50001348d19"
1641    data-ghost-comment-count-empty=""
1642    data-ghost-comment-count-singular="comment"
1643    data-ghost-comment-count-plural="comments"
1644    data-ghost-comment-count-tag="div"
1645    data-ghost-comment-count-class-name="feed-comments"
1646    data-ghost-comment-count-autowrap="true"
1647>
1648</script>
1648
1649            <div class="feed-icon">
1650                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1651    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1652</svg>            </div>
1653        </div>
1654    </div>
1655
1656    <a class="u-permalink" href="/this-will-never-end-aug-12-aug-18-2026/" aria-label="this will never end | Aug 12 - Aug 18 2026"></a>
1657
1658</article>            <article class="feed post tag-weekly" data-month="August 2026">
1659
1660    <div class="feed-calendar">
1661        <div class="feed-calendar-day">
1662            05
1663        </div>
1664        <div class="feed-calendar-month">
1665            Aug
1666        </div>
1667    </div>
1668
1669        <div class="feed-image u-placeholder rectangle">
1670                <img
1671                    class="u-object-fit"
1672                    srcset="/content/images/size/w400/2026/08/localsdozen-2026-08-05-featured-2-.png 400w,
1673/content/images/size/w750/2026/08/localsdozen-2026-08-05-featured-2-.png 750w,
1674/content/images/size/w960/2026/08/localsdozen-2026-08-05-featured-2-.png 960w,
1675/content/images/size/w1140/2026/08/localsdozen-2026-08-05-featured-2-.png 1140w"
1676                    sizes="(min-width: 576px) 160px, 90vw"
1677                    src="/content/images/size/w750/2026/08/localsdozen-2026-08-05-featured-2-.png"
1678                    alt="the second half | Aug 5 - Aug 11 2026"
1679                    loading="lazy"
1680                >
1681        </div>
1682
1683    <div class="feed-wrapper">
1684        <h2 class="feed-title">the second half | Aug 5 - Aug 11 2026</h2>
1685            <div class="feed-excerpt">Welcome to the heart of August. We&#39;ve got a brief respite from the full on events schedule that&</div>
1686        <div class="feed-right">
1687            <time class="feed-date" datetime="2026-08-05">
1688                05 Aug 2026
1689            </time>
1690            <div class="feed-visibility feed-visibility-public">
1691                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1692    <path d="M16 23.027L24.24 28l-2.187-9.373 7.28-6.307-9.587-.827-3.747-8.827-3.747 8.827-9.587.827 7.267 6.307L7.759 28l8.24-4.973z"></path>
1693</svg>            </div>
1694                <div class="feed-length">
1695                    10 min read
1696                </div>
1697                
1697<script
1698    data-ghost-comment-count="6a7385213b5ac20001129f64"
1699    data-ghost-comment-count-empty=""
1700    data-ghost-comment-count-singular="comment"
1701    data-ghost-comment-count-plural="comments"
1702    data-ghost-comment-count-tag="div"
1703    data-ghost-comment-count-class-name="feed-comments"
1704    data-ghost-comment-count-autowrap="true"
1705>
1706</script>
1706
1707            <div class="feed-icon">
1708                <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
1709    <path d="M11.453 22.107L17.56 16l-6.107-6.12L13.333 8l8 8-8 8-1.88-1.893z"></path>
1710</svg>            </div>
1711        </div>
1712    </div>
1713
1714    <a class="u-permalink" href="/the-second-half-aug-5-aug-11-2026/" aria-label="the second half | Aug 5 - Aug 11 2026"></a>
1715
1716</article>    </div>
1717
1718    <nav class="load-more">
1719    <button class="button button-secondary gh-loadmore">Load more</button>
1720</nav>
1721
1722</main>
1723
1724
1725    </div>
1726
1727    <footer class="gh-foot gh-outer">
1728        <div class="gh-foot-inner gh-inner">
1729            <div class="gh-copyright">
1730                The Local&#x27;s Dozen © 2026
1731            </div>
1732            <div class="gh-foot-center">
1733                <div class="gh-social-links">
1734                        <a href="https://www.instagram.com/localsdozen" target="_blank" rel="noopener" aria-label="Instagram">
1735<svg class="icon" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
1736    <path d="M12 2.982C14.937 2.982 15.285 2.993 16.445 3.046C17.1424 3.05412 17.8331 3.18233 18.487 3.425C18.965 3.60111 19.3973 3.88237 19.752 4.248C20.1176 4.60269 20.3989 5.035 20.575 5.513C20.8177 6.16685 20.9459 6.85762 20.954 7.555C21.007 8.715 21.018 9.063 21.018 12C21.018 14.937 21.007 15.285 20.954 16.445C20.9459 17.1424 20.8177 17.8331 20.575 18.487C20.3919 18.9615 20.1116 19.3924 19.752 19.752C19.3924 20.1116 18.9615 20.3919 18.487 20.575C17.8331 20.8177 17.1424 20.9459 16.445 20.954C15.285 21.007 14.937 21.018 12 21.018C9.063 21.018 8.715 21.007 7.555 20.954C6.85762 20.9459 6.16685 20.8177 5.513 20.575C5.035 20.3989 4.60269 20.1176 4.248 19.752C3.88237 19.3973 3.60111 18.965 3.425 18.487C3.18233 17.8331 3.05412 17.1424 3.046 16.445C2.993 15.285 2.982 14.937 2.982 12C2.982 9.063 2.993 8.715 3.046 7.555C3.05412 6.85762 3.18233 6.16685 3.425 5.513C3.60111 5.035 3.88237 4.60269 4.248 4.248C4.60269 3.88237 5.035 3.60111 5.513 3.425C6.16685 3.18233 6.85762 3.05412 7.555 3.046C8.715 2.993 9.063 2.982 12 2.982ZM12 1C9.013 1 8.638 1.013 7.465 1.066C6.55258 1.08486 5.6499 1.25762 4.795 1.577C4.06355 1.86017 3.3994 2.29319 2.84521 2.84824C2.29102 3.40329 1.85904 4.06811 1.577 4.8C1.25762 5.6549 1.08486 6.55758 1.066 7.47C1.013 8.638 1 9.013 1 12C1 14.987 1.013 15.362 1.066 16.535C1.08486 17.4474 1.25762 18.3501 1.577 19.205C1.86017 19.9365 2.29319 20.6006 2.84824 21.1548C3.40329 21.709 4.06811 22.141 4.8 22.423C5.6549 22.7424 6.55758 22.9151 7.47 22.934C8.638 22.987 9.013 23 12 23C14.987 23 15.362 22.987 16.535 22.934C17.4474 22.9151 18.3501 22.7424 19.205 22.423C19.9365 22.1398 20.6006 21.7068 21.1548 21.1518C21.709 20.5967 22.141 19.9319 22.423 19.2C22.7424 18.3451 22.9151 17.4424 22.934 16.53C22.987 15.362 23 14.987 23 12C23 9.013 22.987 8.638 22.934 7.465C22.9151 6.55258 22.7424 5.6499 22.423 4.795C22.1398 4.06355 21.7068 3.3994 21.1518 2.84521C20.5967 2.29102 19.9319 1.85904 19.2 1.577C18.3451 1.25762 17.4424 1.08486 16.53 1.066C15.362 1.013 14.987 1 12 1Z"/>
1737    <path d="M11.9996 6.35107C10.8823 6.35107 9.79015 6.68238 8.86117 7.3031C7.9322 7.92382 7.20815 8.80608 6.78059 9.8383C6.35303 10.8705 6.24116 12.0063 6.45913 13.1021C6.6771 14.1979 7.21512 15.2045 8.00514 15.9945C8.79517 16.7845 9.80172 17.3226 10.8975 17.5405C11.9933 17.7585 13.1291 17.6466 14.1614 17.2191C15.1936 16.7915 16.0758 16.0675 16.6966 15.1385C17.3173 14.2095 17.6486 13.1173 17.6486 12.0001C17.6486 10.5019 17.0534 9.06502 15.994 8.00563C14.9346 6.94624 13.4978 6.35107 11.9996 6.35107ZM11.9996 15.6671C11.2743 15.6671 10.5653 15.452 9.96231 15.0491C9.35928 14.6461 8.88927 14.0734 8.61172 13.4034C8.33418 12.7333 8.26156 11.996 8.40305 11.2847C8.54454 10.5734 8.89379 9.91995 9.40663 9.40711C9.91947 8.89427 10.5729 8.54503 11.2842 8.40353C11.9955 8.26204 12.7328 8.33466 13.4029 8.61221C14.0729 8.88975 14.6457 9.35976 15.0486 9.9628C15.4515 10.5658 15.6666 11.2748 15.6666 12.0001C15.6666 12.9726 15.2802 13.9053 14.5925 14.593C13.9049 15.2807 12.9721 15.6671 11.9996 15.6671Z"/>
1738    <path d="M17.8718 7.44811C18.6008 7.44811 19.1918 6.85712 19.1918 6.12811C19.1918 5.39909 18.6008 4.80811 17.8718 4.80811C17.1427 4.80811 16.5518 5.39909 16.5518 6.12811C16.5518 6.85712 17.1427 7.44811 17.8718 7.44811Z"/>
1739</svg>
1740                        </a>
1741                </div>
1742                    <nav class="gh-foot-menu">
1743                        <ul class="nav">
1744    <li class="nav-get-the-locals-dozen nav-current"><a href="#/portal/">get the local&#x27;s dozen</a></li>
1745    <li class="nav-privacy-policy"><a href="https://www.localsdozen.com/privacy-policy/">Privacy Policy</a></li>
1746    <li class="nav-terms-of-service"><a href="https://www.localsdozen.com/terms-of-service/">Terms of Service</a></li>
1747</ul>
1748
1749                    </nav>
1750            </div>
1751            <div class="gh-powered-by">
1752                Powered by <a href="https://ghost.org/" target="_blank" rel="noopener">Ghost</a>
1753            </div>
1754        </div>
1755    </footer>
1756
1757</div>
1758
1759
1760<script>
1761    if (document.body.classList.contains('with-full-cover') && (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {
1762        document.getElementsByClassName('cover')[0].style.height = window.innerHeight + 'px';
1763    }
1764</script>
1764
1765
1766<script src="/assets/built/main.min.js?v=2TMHKzwU3AY3IYVp"></script>
1766
1767
1768<!-- CODE FOR MENU DROPDOWN -->
1769<script>
1770document.addEventListener("DOMContentLoaded", function () {
1771    const NAV_SELECTOR =
1772        ".gh-head-menu > .nav, " +
1773        ".gh-head-menu .nav";
1774
1775    let submenuCounter = 0;
1776    let repairTimer = null;
1777
1778    /*
1779     * ---------------------------------------------------------
1780     * Basic helpers
1781     * ---------------------------------------------------------
1782     */
1783
1784    function directChild(parent, selector) {
1785        return Array.from(parent.children).find(function (child) {
1786            return child.matches(selector);
1787        });
1788    }
1789
1790    function directLink(item) {
1791        return directChild(item, "a");
1792    }
1793
1794    function originalLabel(link) {
1795        return (
1796            link.dataset.ghOriginalNavLabel ||
1797            link.textContent
1798        ).trim();
1799    }
1800
1801    function isSubmenuLabel(label) {
1802        return /^[-–—]\s*/.test(label);
1803    }
1804
1805    function cleanSubmenuLabel(label) {
1806        return label.replace(/^[-–—]\s*/, "").trim();
1807    }
1808
1809    /*
1810     * ---------------------------------------------------------
1811     * Open / close our dropdowns
1812     * ---------------------------------------------------------
1813     */
1814
1815    function setOpen(parentItem, open) {
1816        const toggle = directChild(
1817            parentItem,
1818            ".gh-nav-dropdown-toggle"
1819        );
1820
1821        parentItem.classList.toggle("is-open", open);
1822
1823        if (!toggle) {
1824            return;
1825        }
1826
1827        const parentLink = directLink(parentItem);
1828
1829        const parentName = parentLink
1830            ? parentLink.textContent.trim()
1831            : "this item";
1832
1833        toggle.setAttribute(
1834            "aria-expanded",
1835            String(open)
1836        );
1837
1838        toggle.setAttribute(
1839            "aria-label",
1840            (open
1841                ? "Hide submenu for "
1842                : "Show submenu for "
1843            ) + parentName
1844        );
1845    }
1846
1847    /*
1848     * ---------------------------------------------------------
1849     * Undo Edition's native "..." overflow menu
1850     * ---------------------------------------------------------
1851     *
1852     * Edition may have already moved some of our Ghost
1853     * navigation items into its native gh-dropdown before this
1854     * script gets to organise the dashed submenu items.
1855     *
1856     * We move those LI elements back into the original nav first.
1857     */
1858
1859    function restoreEditionOverflow(nav) {
1860        const moreToggles = Array.from(nav.children).filter(
1861            function (child) {
1862                return child.matches(
1863                    ".nav-more-toggle, .gh-more-toggle"
1864                );
1865            }
1866        );
1867
1868        moreToggles.forEach(function (moreToggle) {
1869            const overflow =
1870                moreToggle.querySelector(":scope > .gh-dropdown") ||
1871                moreToggle.querySelector(".gh-dropdown");
1872
1873            if (overflow) {
1874                /*
1875                 * Preserve the order Edition gave the items.
1876                 */
1877                Array.from(overflow.children).forEach(
1878                    function (item) {
1879                        if (item.tagName === "LI") {
1880                            nav.insertBefore(item, moreToggle);
1881                        }
1882                    }
1883                );
1884            }
1885
1886            /*
1887             * Once its contents are restored, remove the
1888             * three-dot button entirely.
1889             */
1890            moreToggle.remove();
1891        });
1892
1893        /*
1894         * Edition can leave dropdown-state classes behind after
1895         * we remove its native overflow control.
1896         */
1897        const head =
1898            nav.closest("#gh-head") ||
1899            nav.closest(".gh-head") ||
1900            nav.closest(".gh-navigation");
1901
1902        if (head) {
1903            head.classList.remove(
1904                "is-dropdown-open",
1905                "is-dropdown-mega"
1906            );
1907        }
1908
1909        document.body.classList.remove(
1910            "is-dropdown-open",
1911            "is-dropdown-mega"
1912        );
1913    }
1914
1915    /*
1916     * ---------------------------------------------------------
1917     * Create one of our custom parent dropdowns
1918     * ---------------------------------------------------------
1919     */
1920
1921    function ensureDropdown(parentItem, parentLink) {
1922        let toggle = directChild(
1923            parentItem,
1924            ".gh-nav-dropdown-toggle"
1925        );
1926
1927        let submenu = directChild(
1928            parentItem,
1929            ".gh-nav-submenu"
1930        );
1931
1932        parentItem.classList.add("gh-nav-dropdown");
1933
1934        if (!toggle) {
1935            toggle = document.createElement("button");
1936            toggle.type = "button";
1937            toggle.className = "gh-nav-dropdown-toggle";
1938            toggle.setAttribute(
1939                "aria-expanded",
1940                "false"
1941            );
1942
1943            /*
1944             * Keep the original Ghost anchor exactly where
1945             * Edition expects it and add the arrow beside it.
1946             */
1947            parentLink.insertAdjacentElement(
1948                "afterend",
1949                toggle
1950            );
1951        }
1952
1953        if (!submenu) {
1954            submenuCounter += 1;
1955
1956            submenu = document.createElement("ul");
1957            submenu.className = "gh-nav-submenu";
1958            submenu.id =
1959                "gh-nav-submenu-" + submenuCounter;
1960
1961            parentItem.appendChild(submenu);
1962        }
1963
1964        if (!submenu.id) {
1965            submenuCounter += 1;
1966            submenu.id =
1967                "gh-nav-submenu-" + submenuCounter;
1968        }
1969
1970        toggle.setAttribute(
1971            "aria-controls",
1972            submenu.id
1973        );
1974
1975        toggle.setAttribute(
1976            "aria-label",
1977            "Show submenu for " +
1978                parentLink.textContent.trim()
1979        );
1980
1981        return submenu;
1982    }
1983
1984    /*
1985     * ---------------------------------------------------------
1986     * Convert Ghost's flat navigation into our hierarchy
1987     * ---------------------------------------------------------
1988     */
1989
1990    function processNavigation(nav) {
1991        if (
1992            !nav ||
1993            !nav.isConnected ||
1994            nav.closest(".gh-nav-submenu")
1995        ) {
1996            return;
1997        }
1998
1999        /*
2000         * IMPORTANT:
2001         * First undo whatever Edition did with its native ...
2002         * menu. Only then work out the hierarchy.
2003         */
2004        restoreEditionOverflow(nav);
2005
2006        const items = Array.from(nav.children).filter(
2007            function (item) {
2008                return item.tagName === "LI";
2009            }
2010        );
2011
2012        let currentParent = null;
2013
2014        items.forEach(function (item) {
2015            const link = directLink(item);
2016
2017            if (!link) {
2018                currentParent = null;
2019                return;
2020            }
2021
2022            const label = originalLabel(link);
2023
2024            /*
2025             * Regular item = possible parent.
2026             */
2027            if (!isSubmenuLabel(label)) {
2028                currentParent = {
2029                    item: item,
2030                    link: link,
2031                    submenu: directChild(
2032                        item,
2033                        ".gh-nav-submenu"
2034                    )
2035                };
2036
2037                return;
2038            }
2039
2040            /*
2041             * Don't hide an accidental orphaned dashed item.
2042             */
2043            if (!currentParent) {
2044                return;
2045            }
2046
2047            if (!currentParent.submenu) {
2048                currentParent.submenu =
2049                    ensureDropdown(
2050                        currentParent.item,
2051                        currentParent.link
2052                    );
2053            }
2054
2055            /*
2056             * Remember the original dashed version. Edition may
2057             * rebuild its navigation during a future resize.
2058             */
2059            if (!link.dataset.ghOriginalNavLabel) {
2060                link.dataset.ghOriginalNavLabel = label;
2061            }
2062
2063            /*
2064             * Strip the dash from what visitors actually see.
2065             */
2066            link.textContent =
2067                cleanSubmenuLabel(label);
2068
2069            item.classList.add(
2070                "gh-nav-submenu-item"
2071            );
2072
2073            currentParent.submenu.appendChild(item);
2074        });
2075    }
2076
2077    /*
2078     * ---------------------------------------------------------
2079     * Repair all primary navigation instances
2080     * ---------------------------------------------------------
2081     */
2082
2083    function repairAllNavigations() {
2084        document
2085            .querySelectorAll(NAV_SELECTOR)
2086            .forEach(processNavigation);
2087    }
2088
2089    function scheduleRepair(delay) {
2090        window.clearTimeout(repairTimer);
2091
2092        repairTimer = window.setTimeout(
2093            repairAllNavigations,
2094            delay || 25
2095        );
2096    }
2097
2098    /*
2099     * Initial pass.
2100     */
2101    repairAllNavigations();
2102
2103    /*
2104     * Edition can finish its own header calculations after our
2105     * DOMContentLoaded callback, so check again when everything
2106     * on the page has loaded.
2107     */
2108    window.addEventListener("load", function () {
2109        scheduleRepair(20);
2110    });
2111
2112    /*
2113     * ---------------------------------------------------------
2114     * Watch Edition's navigation
2115     * ---------------------------------------------------------
2116     *
2117     * This is the important resize fix.
2118     *
2119     * Edition rebuilds/moves navigation elements when the
2120     * available width changes. Whenever it does, wait until its
2121     * changes finish and then reconstruct our hierarchy.
2122     */
2123
2124    const headMenu = document.querySelector(
2125        ".gh-head-menu"
2126    );
2127
2128    if (headMenu) {
2129        const observer = new MutationObserver(
2130            function () {
2131                scheduleRepair(25);
2132            }
2133        );
2134
2135        observer.observe(headMenu, {
2136            childList: true,
2137            subtree: true
2138        });
2139    }
2140
2141    /*
2142     * Edition's own resize code may run shortly after the actual
2143     * browser resize event, so our repair deliberately runs
2144     * afterward rather than fighting it simultaneously.
2145     */
2146    window.addEventListener("resize", function () {
2147        scheduleRepair(75);
2148    });
2149
2150    /*
2151     * ---------------------------------------------------------
2152     * Dropdown interaction
2153     * ---------------------------------------------------------
2154     */
2155
2156    document.addEventListener(
2157        "click",
2158        function (event) {
2159            const toggle = event.target.closest(
2160                ".gh-nav-dropdown-toggle"
2161            );
2162
2163            if (toggle) {
2164                event.preventDefault();
2165                event.stopPropagation();
2166
2167                const parentItem = toggle.closest(
2168                    ".gh-nav-dropdown"
2169                );
2170
2171                if (!parentItem) {
2172                    return;
2173                }
2174
2175                const nav = parentItem.closest(".nav");
2176
2177                const shouldOpen =
2178                    !parentItem.classList.contains(
2179                        "is-open"
2180                    );
2181
2182                /*
2183                 * Close sibling dropdowns first.
2184                 */
2185                if (nav) {
2186                    Array.from(nav.children).forEach(
2187                        function (item) {
2188                            if (
2189                                item !== parentItem &&
2190                                item.classList &&
2191                                item.classList.contains(
2192                                    "gh-nav-dropdown"
2193                                )
2194                            ) {
2195                                setOpen(item, false);
2196                            }
2197                        }
2198                    );
2199                }
2200
2201                setOpen(parentItem, shouldOpen);
2202                return;
2203            }
2204
2205            /*
2206             * Click outside closes open dropdowns.
2207             */
2208            document
2209                .querySelectorAll(
2210                    ".gh-nav-dropdown.is-open"
2211                )
2212                .forEach(function (parentItem) {
2213                    if (
2214                        !parentItem.contains(
2215                            event.target
2216                        )
2217                    ) {
2218                        setOpen(
2219                            parentItem,
2220                            false
2221                        );
2222                    }
2223                });
2224        }
2225    );
2226
2227    /*
2228     * Escape closes the active dropdown.
2229     */
2230    document.addEventListener(
2231        "keydown",
2232        function (event) {
2233            if (event.key !== "Escape") {
2234                return;
2235            }
2236
2237            document
2238                .querySelectorAll(
2239                    ".gh-nav-dropdown.is-open"
2240                )
2241                .forEach(function (parentItem) {
2242                    const toggle = directChild(
2243                        parentItem,
2244                        ".gh-nav-dropdown-toggle"
2245                    );
2246
2247                    setOpen(
2248                        parentItem,
2249                        false
2250                    );
2251
2252                    if (toggle) {
2253                        toggle.focus();
2254                    }
2255                });
2256        }
2257    );
2258});
2259</script>
2259
2260
2261</body>
2262</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.