diff --git a/elections/migrations/0001_initial.py b/elections/migrations/0001_initial.py
index 87462623935b0c68c040059d3ae02787cea31280..cca8f85181a799b06cccbca46e996ff8408c4135 100644
--- a/elections/migrations/0001_initial.py
+++ b/elections/migrations/0001_initial.py
@@ -1,163 +1,887 @@
 # Generated by Django 4.1.10 on 2024-01-06 16:43
 
-from django.db import migrations, models
 import django.db.models.deletion
 import django.utils.timezone
 import modelcluster.fields
-import shared.blocks.main
-import shared.models.base
 import wagtail.blocks
 import wagtail.contrib.routable_page.models
 import wagtail.documents.blocks
 import wagtail.fields
 import wagtail.images.blocks
 import wagtailmetadata.models
+from django.db import migrations, models
 
+import shared.blocks.main
+import shared.models.base
 
-class Migration(migrations.Migration):
 
+class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('main', '0065_alter_mainarticlepage_content_and_more'),
-        ('wagtailimages', '0025_alter_image_file_alter_rendition_file'),
-        ('shared', '0003_initial'),
-        ('calendar_utils', '0004_auto_20220505_1228'),
-        ('taggit', '0005_auto_20220424_2025'),
-        ('wagtailcore', '0083_workflowcontenttype'),
+        ("main", "0065_alter_mainarticlepage_content_and_more"),
+        ("wagtailimages", "0025_alter_image_file_alter_rendition_file"),
+        ("shared", "0003_initial"),
+        ("calendar_utils", "0004_auto_20220505_1228"),
+        ("taggit", "0005_auto_20220424_2025"),
+        ("wagtailcore", "0083_workflowcontenttype"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='ElectionsArticlePage',
+            name="ElectionsArticlePage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('date', models.DateField(default=django.utils.timezone.now, verbose_name='datum')),
-                ('perex', models.TextField(verbose_name='perex')),
-                ('author', models.CharField(blank=True, max_length=250, null=True, verbose_name='autor')),
-                ('shared_type', models.TextField(blank=True, null=True)),
-                ('content', wagtail.fields.StreamField([('text', wagtail.blocks.RichTextBlock(template='styleguide2/includes/atoms/text/prose_richtext.html')), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(label='Citace')), ('autor_name', wagtail.blocks.CharBlock(label='Jméno autora'))])), ('download', wagtail.blocks.StructBlock([('file', wagtail.documents.blocks.DocumentChooserBlock(label='Stáhnutelný soubor'))]))], blank=True, use_json_field=True, verbose_name='Článek')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "date",
+                    models.DateField(
+                        default=django.utils.timezone.now, verbose_name="datum"
+                    ),
+                ),
+                ("perex", models.TextField(verbose_name="perex")),
+                (
+                    "author",
+                    models.CharField(
+                        blank=True, max_length=250, null=True, verbose_name="autor"
+                    ),
+                ),
+                ("shared_type", models.TextField(blank=True, null=True)),
+                (
+                    "content",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "text",
+                                wagtail.blocks.RichTextBlock(
+                                    template="styleguide2/includes/atoms/text/prose_richtext.html"
+                                ),
+                            ),
+                            (
+                                "quote",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "quote",
+                                            wagtail.blocks.CharBlock(label="Citace"),
+                                        ),
+                                        (
+                                            "autor_name",
+                                            wagtail.blocks.CharBlock(
+                                                label="Jméno autora"
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "download",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "file",
+                                            wagtail.documents.blocks.DocumentChooserBlock(
+                                                label="Stáhnutelný soubor"
+                                            ),
+                                        )
+                                    ]
+                                ),
+                            ),
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Článek",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Aktualita',
-                'abstract': False,
+                "verbose_name": "Aktualita",
+                "abstract": False,
             },
-            bases=(shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                shared.models.base.SubpageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='ElectionsSearchPage',
+            name="ElectionsSearchPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "search_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Search image",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Vyhledávací stránka',
-                'abstract': False,
+                "verbose_name": "Vyhledávací stránka",
+                "abstract": False,
             },
-            bases=(shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                shared.models.base.SubpageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='ElectionsHomePage',
+            name="ElectionsHomePage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('title_suffix', models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice | Piráti', výsledný titulek bude 'Kontakt | MS Pardubice | Piráti'. Pokud příponu nevyplníte, použije se název webu.", max_length=100, null=True, verbose_name='Přípona titulku stránky')),
-                ('important_item_name', models.CharField(blank=True, help_text='Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.', max_length=16, null=True, verbose_name='Jméno')),
-                ('important_item_url', models.URLField(blank=True, null=True, verbose_name='Adresa')),
-                ('menu', wagtail.fields.StreamField([('menu_item', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.', label='Titulek', required=True)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]))], blank=True, use_json_field=True, verbose_name='Položky')),
-                ('menu_button_name', models.CharField(max_length=16, verbose_name='Text na tlačítku pro zapojení')),
-                ('menu_button_content', wagtail.fields.StreamField([('navbar_menu_item', wagtail.blocks.StructBlock([('button_link', wagtail.blocks.URLBlock(label='Odkaz tlačítka')), ('button_text', wagtail.blocks.CharBlock(label='Text tlačítka'))]))], blank=True, use_json_field=True, verbose_name='Obsah menu pro zapojení se')),
-                ('footer_other_links', wagtail.fields.StreamField([('other_links', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('list', wagtail.blocks.ListBlock(shared.blocks.main.LinkBlock, label='Seznam odkazů s titulkem'))]))], blank=True, use_json_field=True, verbose_name='Odkazy v zápatí webu')),
-                ('footer_person_list', wagtail.fields.StreamField([('person', wagtail.blocks.StructBlock([('position', wagtail.blocks.CharBlock(label='Název pozice', required=False)), ('person', wagtail.blocks.PageChooserBlock(label='Osoba', page_type=['main.MainPersonPage']))]))], blank=True, use_json_field=True, verbose_name='Osoby v zápatí webu')),
-                ('matomo_id', models.IntegerField(blank=True, null=True, verbose_name='Matomo ID pro sledování návštěvnosti')),
-                ('social_links', wagtail.fields.StreamField([('social_links', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Název')), ('link', wagtail.blocks.URLBlock(label='Odkaz')), ('icon', wagtail.blocks.CharBlock(help_text='Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku', label='Ikona'))]))], blank=True, use_json_field=True, verbose_name='Odkazy na sociální sítě')),
-                ('content', wagtail.fields.StreamField([('carousel', wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek na pozadí'))])), ('candidate', wagtail.blocks.StructBlock([('candidates', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['elections.ElectionsCandidatePage'])), ('image', wagtail.images.blocks.ImageChooserBlock(help_text='Pokud není vybrán, použije se obrázek ze stránky kandidáta', label='Obrázek', required=False)), ('description', wagtail.blocks.TextBlock(label='Popis'))]), label='Kandidáti'))])), ('program', wagtail.blocks.StructBlock([('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.IntegerBlock(label='Číslo')), ('name', wagtail.blocks.CharBlock(label='Název')), ('points', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.IntegerBlock(label='Číslo')), ('content', wagtail.blocks.TextBlock(label='Obsah'))]), label='Body'))]), label='Kategorie')), ('long_version_url', wagtail.blocks.URLBlock(label='Odkaz na celou verzi programu')), ('long_version_text', wagtail.blocks.CharBlock(label='Nadpis odkazu na celou verzi programu'))])), ('news', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Nejnovější články se načtou automaticky', label='Titulek')), ('description', wagtail.blocks.TextBlock(label='Popis'))], template='styleguide2/includes/organisms/articles/elections/articles_section.html'))], blank=True, use_json_field=True, verbose_name='Hlavní obsah')),
-                ('gdpr_and_cookies_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='main.mainsimplepage', verbose_name='Stránka pro GDPR')),
-                ('important_item_page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.page', verbose_name='Stránka')),
-                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "title_suffix",
+                    models.CharField(
+                        blank=True,
+                        help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice | Piráti', výsledný titulek bude 'Kontakt | MS Pardubice | Piráti'. Pokud příponu nevyplníte, použije se název webu.",
+                        max_length=100,
+                        null=True,
+                        verbose_name="Přípona titulku stránky",
+                    ),
+                ),
+                (
+                    "important_item_name",
+                    models.CharField(
+                        blank=True,
+                        help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.",
+                        max_length=16,
+                        null=True,
+                        verbose_name="Jméno",
+                    ),
+                ),
+                (
+                    "important_item_url",
+                    models.URLField(blank=True, null=True, verbose_name="Adresa"),
+                ),
+                (
+                    "menu",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "menu_item",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Pokud není odkazovaná stránka na Majáku, použij možnost zadání samotné adresy níže.",
+                                                label="Titulek",
+                                                required=True,
+                                            ),
+                                        ),
+                                        (
+                                            "page",
+                                            wagtail.blocks.PageChooserBlock(
+                                                label="Stránka", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Odkaz", required=False
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Položky",
+                    ),
+                ),
+                (
+                    "menu_button_name",
+                    models.CharField(
+                        max_length=16, verbose_name="Text na tlačítku pro zapojení"
+                    ),
+                ),
+                (
+                    "menu_button_content",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "navbar_menu_item",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "button_link",
+                                            wagtail.blocks.URLBlock(
+                                                label="Odkaz tlačítka"
+                                            ),
+                                        ),
+                                        (
+                                            "button_text",
+                                            wagtail.blocks.CharBlock(
+                                                label="Text tlačítka"
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Obsah menu pro zapojení se",
+                    ),
+                ),
+                (
+                    "footer_other_links",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "other_links",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(label="Titulek"),
+                                        ),
+                                        (
+                                            "list",
+                                            wagtail.blocks.ListBlock(
+                                                shared.blocks.main.LinkBlock,
+                                                label="Seznam odkazů s titulkem",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Odkazy v zápatí webu",
+                    ),
+                ),
+                (
+                    "footer_person_list",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "person",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "position",
+                                            wagtail.blocks.CharBlock(
+                                                label="Název pozice", required=False
+                                            ),
+                                        ),
+                                        (
+                                            "person",
+                                            wagtail.blocks.PageChooserBlock(
+                                                label="Osoba",
+                                                page_type=["main.MainPersonPage"],
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Osoby v zápatí webu",
+                    ),
+                ),
+                (
+                    "matomo_id",
+                    models.IntegerField(
+                        blank=True,
+                        null=True,
+                        verbose_name="Matomo ID pro sledování návštěvnosti",
+                    ),
+                ),
+                (
+                    "social_links",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "social_links",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "text",
+                                            wagtail.blocks.CharBlock(label="Název"),
+                                        ),
+                                        (
+                                            "link",
+                                            wagtail.blocks.URLBlock(label="Odkaz"),
+                                        ),
+                                        (
+                                            "icon",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku",
+                                                label="Ikona",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Odkazy na sociální sítě",
+                    ),
+                ),
+                (
+                    "content",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "carousel",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "image",
+                                            wagtail.images.blocks.ImageChooserBlock(
+                                                label="Obrázek na pozadí"
+                                            ),
+                                        )
+                                    ]
+                                ),
+                            ),
+                            (
+                                "candidate",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "candidates",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.StructBlock(
+                                                    [
+                                                        (
+                                                            "page",
+                                                            wagtail.blocks.PageChooserBlock(
+                                                                label="Stránka",
+                                                                page_type=[
+                                                                    "elections.ElectionsCandidatePage"
+                                                                ],
+                                                            ),
+                                                        ),
+                                                        (
+                                                            "image",
+                                                            wagtail.images.blocks.ImageChooserBlock(
+                                                                help_text="Pokud není vybrán, použije se obrázek ze stránky kandidáta",
+                                                                label="Obrázek",
+                                                                required=False,
+                                                            ),
+                                                        ),
+                                                        (
+                                                            "description",
+                                                            wagtail.blocks.TextBlock(
+                                                                label="Popis"
+                                                            ),
+                                                        ),
+                                                    ]
+                                                ),
+                                                label="Kandidáti",
+                                            ),
+                                        )
+                                    ]
+                                ),
+                            ),
+                            (
+                                "program",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "categories",
+                                            wagtail.blocks.ListBlock(
+                                                wagtail.blocks.StructBlock(
+                                                    [
+                                                        (
+                                                            "number",
+                                                            wagtail.blocks.IntegerBlock(
+                                                                label="Číslo"
+                                                            ),
+                                                        ),
+                                                        (
+                                                            "name",
+                                                            wagtail.blocks.CharBlock(
+                                                                label="Název"
+                                                            ),
+                                                        ),
+                                                        (
+                                                            "points",
+                                                            wagtail.blocks.ListBlock(
+                                                                wagtail.blocks.StructBlock(
+                                                                    [
+                                                                        (
+                                                                            "number",
+                                                                            wagtail.blocks.IntegerBlock(
+                                                                                label="Číslo"
+                                                                            ),
+                                                                        ),
+                                                                        (
+                                                                            "content",
+                                                                            wagtail.blocks.TextBlock(
+                                                                                label="Obsah"
+                                                                            ),
+                                                                        ),
+                                                                    ]
+                                                                ),
+                                                                label="Body",
+                                                            ),
+                                                        ),
+                                                    ]
+                                                ),
+                                                label="Kategorie",
+                                            ),
+                                        ),
+                                        (
+                                            "long_version_url",
+                                            wagtail.blocks.URLBlock(
+                                                label="Odkaz na celou verzi programu"
+                                            ),
+                                        ),
+                                        (
+                                            "long_version_text",
+                                            wagtail.blocks.CharBlock(
+                                                label="Nadpis odkazu na celou verzi programu"
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            ),
+                            (
+                                "news",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "title",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Nejnovější články se načtou automaticky",
+                                                label="Titulek",
+                                            ),
+                                        ),
+                                        (
+                                            "description",
+                                            wagtail.blocks.TextBlock(label="Popis"),
+                                        ),
+                                    ],
+                                    template="styleguide2/includes/organisms/articles/elections/articles_section.html",
+                                ),
+                            ),
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Hlavní obsah",
+                    ),
+                ),
+                (
+                    "gdpr_and_cookies_page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="main.mainsimplepage",
+                        verbose_name="Stránka pro GDPR",
+                    ),
+                ),
+                (
+                    "important_item_page",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.PROTECT,
+                        related_name="+",
+                        to="wagtailcore.page",
+                        verbose_name="Stránka",
+                    ),
+                ),
+                (
+                    "search_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Search image",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Volební web',
+                "verbose_name": "Volební web",
             },
-            bases=(wagtail.contrib.routable_page.models.RoutablePageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, shared.models.base.ArticlesMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                wagtail.contrib.routable_page.models.RoutablePageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                shared.models.base.ArticlesMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='ElectionsCandidatesPage',
+            name="ElectionsCandidatesPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('calendar_url', models.URLField(blank=True, help_text='Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.', null=True, verbose_name='URL kalendáře ve formátu iCal')),
-                ('calendar', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='calendar_utils.calendar')),
-                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "calendar_url",
+                    models.URLField(
+                        blank=True,
+                        help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
+                        null=True,
+                        verbose_name="URL kalendáře ve formátu iCal",
+                    ),
+                ),
+                (
+                    "calendar",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="calendar_utils.calendar",
+                    ),
+                ),
+                (
+                    "search_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Search image",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Kandidáti',
+                "verbose_name": "Kandidáti",
             },
-            bases=(shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                shared.models.base.SubpageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='ElectionsCandidatePage',
+            name="ElectionsCandidatePage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('calendar_url', models.URLField(blank=True, help_text='Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.', null=True, verbose_name='URL kalendáře ve formátu iCal')),
-                ('position', models.CharField(blank=True, max_length=64, null=True, verbose_name='Pozice/povolání')),
-                ('perex', wagtail.fields.RichTextField()),
-                ('email', models.CharField(blank=True, max_length=128, null=True, verbose_name='E-mail')),
-                ('phone', models.CharField(blank=True, max_length=16, null=True, verbose_name='Telefonní kontakt')),
-                ('social_links', wagtail.fields.StreamField([('social_links', wagtail.blocks.StructBlock([('text', wagtail.blocks.CharBlock(label='Název')), ('link', wagtail.blocks.URLBlock(label='Odkaz')), ('icon', wagtail.blocks.CharBlock(help_text='Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku', label='Ikona'))]))], blank=True, use_json_field=True, verbose_name='Odkazy na sociální sítě')),
-                ('articles_heading', models.CharField(help_text='Např. "Aktuality Mikuláše Peksy".', max_length=32, verbose_name='Nadpis sekce s články')),
-                ('related_candidates', wagtail.fields.StreamField([('candidate', wagtail.blocks.PageChooserBlock(label='Detail kandidáta', page_type=['elections.ElectionsCandidatePage']))], blank=True, use_json_field=True, verbose_name='Další kandidáti')),
-                ('calendar', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='calendar_utils.calendar')),
-                ('image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailimages.image', verbose_name='Obrázek')),
-                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "calendar_url",
+                    models.URLField(
+                        blank=True,
+                        help_text="Kalendář se po uložení stránky aktualizuje na pozadí. U plnějších kalendářů to může trvat i desítky sekund.",
+                        null=True,
+                        verbose_name="URL kalendáře ve formátu iCal",
+                    ),
+                ),
+                (
+                    "position",
+                    models.CharField(
+                        blank=True,
+                        max_length=64,
+                        null=True,
+                        verbose_name="Pozice/povolání",
+                    ),
+                ),
+                ("perex", wagtail.fields.RichTextField()),
+                (
+                    "email",
+                    models.CharField(
+                        blank=True, max_length=128, null=True, verbose_name="E-mail"
+                    ),
+                ),
+                (
+                    "phone",
+                    models.CharField(
+                        blank=True,
+                        max_length=16,
+                        null=True,
+                        verbose_name="Telefonní kontakt",
+                    ),
+                ),
+                (
+                    "social_links",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "social_links",
+                                wagtail.blocks.StructBlock(
+                                    [
+                                        (
+                                            "text",
+                                            wagtail.blocks.CharBlock(label="Název"),
+                                        ),
+                                        (
+                                            "link",
+                                            wagtail.blocks.URLBlock(label="Odkaz"),
+                                        ),
+                                        (
+                                            "icon",
+                                            wagtail.blocks.CharBlock(
+                                                help_text="Seznam ikon - https://styleguide.pirati.cz/latest/?p=viewall-atoms-icons <br/>Název ikony zadejte bez tečky na začátku",
+                                                label="Ikona",
+                                            ),
+                                        ),
+                                    ]
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Odkazy na sociální sítě",
+                    ),
+                ),
+                (
+                    "articles_heading",
+                    models.CharField(
+                        help_text='Např. "Aktuality Mikuláše Peksy".',
+                        max_length=32,
+                        verbose_name="Nadpis sekce s články",
+                    ),
+                ),
+                (
+                    "related_candidates",
+                    wagtail.fields.StreamField(
+                        [
+                            (
+                                "candidate",
+                                wagtail.blocks.PageChooserBlock(
+                                    label="Detail kandidáta",
+                                    page_type=["elections.ElectionsCandidatePage"],
+                                ),
+                            )
+                        ],
+                        blank=True,
+                        use_json_field=True,
+                        verbose_name="Další kandidáti",
+                    ),
+                ),
+                (
+                    "calendar",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.PROTECT,
+                        to="calendar_utils.calendar",
+                    ),
+                ),
+                (
+                    "image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.PROTECT,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Obrázek",
+                    ),
+                ),
+                (
+                    "search_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Search image",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Kandidát',
+                "verbose_name": "Kandidát",
             },
-            bases=(shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                shared.models.base.SubpageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.CreateModel(
-            name='ElectionsArticleTag',
+            name="ElectionsArticleTag",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content_object', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='elections_tagged_items', to='elections.electionsarticlepage')),
-                ('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_items', to='taggit.tag')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "content_object",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="elections_tagged_items",
+                        to="elections.electionsarticlepage",
+                    ),
+                ),
+                (
+                    "tag",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="%(app_label)s_%(class)s_items",
+                        to="taggit.tag",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
         migrations.CreateModel(
-            name='ElectionsArticlesPage',
+            name="ElectionsArticlesPage",
             fields=[
-                ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
-                ('last_import_log', models.TextField(blank=True, null=True, verbose_name='Výstup z posledního importu')),
-                ('perex', models.TextField()),
-                ('search_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image')),
-                ('shared_tags', modelcluster.fields.ParentalManyToManyField(blank=True, help_text='Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.', to='shared.sharedtag', verbose_name='Výběr tagů pro články sdílené mezi sítěmi')),
+                (
+                    "page_ptr",
+                    models.OneToOneField(
+                        auto_created=True,
+                        on_delete=django.db.models.deletion.CASCADE,
+                        parent_link=True,
+                        primary_key=True,
+                        serialize=False,
+                        to="wagtailcore.page",
+                    ),
+                ),
+                (
+                    "last_import_log",
+                    models.TextField(
+                        blank=True,
+                        null=True,
+                        verbose_name="Výstup z posledního importu",
+                    ),
+                ),
+                ("perex", models.TextField()),
+                (
+                    "search_image",
+                    models.ForeignKey(
+                        blank=True,
+                        null=True,
+                        on_delete=django.db.models.deletion.SET_NULL,
+                        related_name="+",
+                        to="wagtailimages.image",
+                        verbose_name="Search image",
+                    ),
+                ),
+                (
+                    "shared_tags",
+                    modelcluster.fields.ParentalManyToManyField(
+                        blank=True,
+                        help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.",
+                        to="shared.sharedtag",
+                        verbose_name="Výběr tagů pro články sdílené mezi sítěmi",
+                    ),
+                ),
             ],
             options={
-                'verbose_name': 'Rozcestník článků',
-                'abstract': False,
+                "verbose_name": "Rozcestník článků",
+                "abstract": False,
             },
-            bases=(wagtail.contrib.routable_page.models.RoutablePageMixin, shared.models.base.SubpageMixin, wagtailmetadata.models.WagtailImageMetadataMixin, shared.models.base.ArticlesMixin, 'wagtailcore.page', models.Model),
+            bases=(
+                wagtail.contrib.routable_page.models.RoutablePageMixin,
+                shared.models.base.SubpageMixin,
+                wagtailmetadata.models.WagtailImageMetadataMixin,
+                shared.models.base.ArticlesMixin,
+                "wagtailcore.page",
+                models.Model,
+            ),
         ),
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='author_page',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='elections.electionscandidatepage', verbose_name='Stránka autora (kandidáta)'),
+            model_name="electionsarticlepage",
+            name="author_page",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                to="elections.electionscandidatepage",
+                verbose_name="Stránka autora (kandidáta)",
+            ),
         ),
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='wagtailimages.image', verbose_name='obrázek'),
+            model_name="electionsarticlepage",
+            name="image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                to="wagtailimages.image",
+                verbose_name="obrázek",
+            ),
         ),
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='search_image',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image', verbose_name='Search image'),
+            model_name="electionsarticlepage",
+            name="search_image",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.SET_NULL,
+                related_name="+",
+                to="wagtailimages.image",
+                verbose_name="Search image",
+            ),
         ),
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='shared_from',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='wagtailcore.page'),
+            model_name="electionsarticlepage",
+            name="shared_from",
+            field=models.ForeignKey(
+                blank=True,
+                null=True,
+                on_delete=django.db.models.deletion.PROTECT,
+                related_name="+",
+                to="wagtailcore.page",
+            ),
         ),
     ]
diff --git a/elections/migrations/0002_initial.py b/elections/migrations/0002_initial.py
index 6851ae7e80e1749df9d05793da0781db177b180e..bcccf91c2d1373e61574a1e7a7770b6aadc8921a 100644
--- a/elections/migrations/0002_initial.py
+++ b/elections/migrations/0002_initial.py
@@ -1,28 +1,39 @@
 # Generated by Django 4.1.10 on 2024-01-06 16:43
 
-from django.db import migrations
 import modelcluster.contrib.taggit
+from django.db import migrations
 
 
 class Migration(migrations.Migration):
-
     initial = True
 
     dependencies = [
-        ('taggit', '0005_auto_20220424_2025'),
-        ('elections', '0001_initial'),
-        ('shared', '0004_sharedtaggedelectionsarticle'),
+        ("taggit", "0005_auto_20220424_2025"),
+        ("elections", "0001_initial"),
+        ("shared", "0004_sharedtaggedelectionsarticle"),
     ]
 
     operations = [
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='shared_tags',
-            field=modelcluster.contrib.taggit.ClusterTaggableManager(blank=True, help_text='A comma-separated list of tags.', through='shared.SharedTaggedElectionsArticle', to='shared.SharedTag', verbose_name='Tagy pro sdílení mezi weby'),
+            model_name="electionsarticlepage",
+            name="shared_tags",
+            field=modelcluster.contrib.taggit.ClusterTaggableManager(
+                blank=True,
+                help_text="A comma-separated list of tags.",
+                through="shared.SharedTaggedElectionsArticle",
+                to="shared.SharedTag",
+                verbose_name="Tagy pro sdílení mezi weby",
+            ),
         ),
         migrations.AddField(
-            model_name='electionsarticlepage',
-            name='tags',
-            field=modelcluster.contrib.taggit.ClusterTaggableManager(blank=True, help_text='A comma-separated list of tags.', through='elections.ElectionsArticleTag', to='taggit.Tag', verbose_name='Tags'),
+            model_name="electionsarticlepage",
+            name="tags",
+            field=modelcluster.contrib.taggit.ClusterTaggableManager(
+                blank=True,
+                help_text="A comma-separated list of tags.",
+                through="elections.ElectionsArticleTag",
+                to="taggit.Tag",
+                verbose_name="Tags",
+            ),
         ),
     ]
diff --git a/main/migrations/0065_alter_mainarticlepage_content_and_more.py b/main/migrations/0065_alter_mainarticlepage_content_and_more.py
index 2f78fc9fdfbeb4a2fd3dd091cb639c82f158e15b..c32b219192311343d3b7a2eb7fa42e8ab18fe745 100644
--- a/main/migrations/0065_alter_mainarticlepage_content_and_more.py
+++ b/main/migrations/0065_alter_mainarticlepage_content_and_more.py
@@ -1,56 +1,453 @@
 # Generated by Django 4.1.10 on 2024-01-06 16:43
 
-from django.db import migrations
 import django.db.models.deletion
-import main.blocks
 import modelcluster.fields
-import shared.blocks.main
 import wagtail.blocks
 import wagtail.documents.blocks
 import wagtail.fields
 import wagtail.images.blocks
+from django.db import migrations
 
+import main.blocks
+import shared.blocks.main
 
-class Migration(migrations.Migration):
 
+class Migration(migrations.Migration):
     dependencies = [
-        ('main', '0064_alter_mainhomepage_content'),
+        ("main", "0064_alter_mainhomepage_content"),
     ]
 
     operations = [
         migrations.AlterField(
-            model_name='mainarticlepage',
-            name='content',
-            field=wagtail.fields.StreamField([('text', wagtail.blocks.RichTextBlock(template='styleguide2/includes/atoms/text/prose_richtext.html')), ('quote', wagtail.blocks.StructBlock([('quote', wagtail.blocks.CharBlock(label='Citace')), ('autor_name', wagtail.blocks.CharBlock(label='Jméno autora'))])), ('download', wagtail.blocks.StructBlock([('file', wagtail.documents.blocks.DocumentChooserBlock(label='Stáhnutelný soubor'))]))], blank=True, use_json_field=True, verbose_name='Článek'),
+            model_name="mainarticlepage",
+            name="content",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text",
+                        wagtail.blocks.RichTextBlock(
+                            template="styleguide2/includes/atoms/text/prose_richtext.html"
+                        ),
+                    ),
+                    (
+                        "quote",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("quote", wagtail.blocks.CharBlock(label="Citace")),
+                                (
+                                    "autor_name",
+                                    wagtail.blocks.CharBlock(label="Jméno autora"),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "download",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "file",
+                                    wagtail.documents.blocks.DocumentChooserBlock(
+                                        label="Stáhnutelný soubor"
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Článek",
+            ),
         ),
         migrations.AlterField(
-            model_name='mainarticletag',
-            name='content_object',
-            field=modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='main_tagged_items', to='main.mainarticlepage'),
+            model_name="mainarticletag",
+            name="content_object",
+            field=modelcluster.fields.ParentalKey(
+                on_delete=django.db.models.deletion.CASCADE,
+                related_name="main_tagged_items",
+                to="main.mainarticlepage",
+            ),
         ),
         migrations.AlterField(
-            model_name='maincrossroadpage',
-            name='headlined_cards_content',
-            field=wagtail.fields.StreamField([('headlined_cards', wagtail.blocks.StructBlock([('headline', wagtail.blocks.CharBlock(label='Titulek bloku', required=False)), ('card_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainArticlePage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))], template='styleguide2/includes/molecules/boxes/card_box_block.html'), label='Karty s odkazy'))]))], blank=True, use_json_field=True, verbose_name='Karty rozcestníku s nadpisem'),
+            model_name="maincrossroadpage",
+            name="headlined_cards_content",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "headlined_cards",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "headline",
+                                    wagtail.blocks.CharBlock(
+                                        label="Titulek bloku", required=False
+                                    ),
+                                ),
+                                (
+                                    "card_items",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.StructBlock(
+                                            [
+                                                (
+                                                    "image",
+                                                    wagtail.images.blocks.ImageChooserBlock(
+                                                        label="Obrázek"
+                                                    ),
+                                                ),
+                                                (
+                                                    "title",
+                                                    wagtail.blocks.CharBlock(
+                                                        label="Titulek", required=True
+                                                    ),
+                                                ),
+                                                (
+                                                    "text",
+                                                    wagtail.blocks.RichTextBlock(
+                                                        label="Krátký text pod nadpisem",
+                                                        required=False,
+                                                    ),
+                                                ),
+                                                (
+                                                    "page",
+                                                    wagtail.blocks.PageChooserBlock(
+                                                        label="Stránka",
+                                                        page_type=[
+                                                            "main.MainArticlesPage",
+                                                            "main.MainArticlePage",
+                                                            "main.MainProgramPage",
+                                                            "main.MainPeoplePage",
+                                                            "main.MainPersonPage",
+                                                            "main.MainSimplePage",
+                                                            "main.MainContactPage",
+                                                            "main.MainCrossroadPage",
+                                                        ],
+                                                        required=False,
+                                                    ),
+                                                ),
+                                                (
+                                                    "link",
+                                                    wagtail.blocks.URLBlock(
+                                                        label="Odkaz", required=False
+                                                    ),
+                                                ),
+                                            ],
+                                            template="styleguide2/includes/molecules/boxes/card_box_block.html",
+                                        ),
+                                        label="Karty s odkazy",
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Karty rozcestníku s nadpisem",
+            ),
         ),
         migrations.AlterField(
-            model_name='mainhomepage',
-            name='content',
-            field=wagtail.fields.StreamField([('carousel', wagtail.blocks.StructBlock([('desktop_line_1', wagtail.blocks.TextBlock(label='Desktop první řádek')), ('desktop_line_2', wagtail.blocks.TextBlock(label='Desktop druhý řádek')), ('mobile_line_1', wagtail.blocks.TextBlock(label='První mobilní řádek')), ('mobile_line_2', wagtail.blocks.TextBlock(label='Druhý mobilní řádek')), ('mobile_line_3', wagtail.blocks.TextBlock(label='Třetí mobilní řádek'))])), ('news', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Nejnovější články se načtou automaticky', label='Titulek')), ('description', wagtail.blocks.TextBlock(label='Popis'))], template='styleguide2/includes/organisms/articles/articles_section.html')), ('europarl_news', wagtail.blocks.StructBlock([])), ('people', wagtail.blocks.StructBlock([('title_line_1', wagtail.blocks.CharBlock(label='První řádek titulku')), ('title_line_2', wagtail.blocks.CharBlock(label='Druhý řádek titulku')), ('description', wagtail.blocks.TextBlock(label='Popis')), ('list', wagtail.blocks.ListBlock(main.blocks.BoxBlock, label='Boxíky'))])), ('regions', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text='Články pro regiony se načtou automaticky', label='Titulek'))])), ('boxes', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Nadpis')), ('list', wagtail.blocks.ListBlock(main.blocks.BoxBlock, label='Boxíky')), ('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek pozadí', required=False))]))], blank=True, use_json_field=True, verbose_name='Hlavní obsah'),
+            model_name="mainhomepage",
+            name="content",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "carousel",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "desktop_line_1",
+                                    wagtail.blocks.TextBlock(
+                                        label="Desktop první řádek"
+                                    ),
+                                ),
+                                (
+                                    "desktop_line_2",
+                                    wagtail.blocks.TextBlock(
+                                        label="Desktop druhý řádek"
+                                    ),
+                                ),
+                                (
+                                    "mobile_line_1",
+                                    wagtail.blocks.TextBlock(
+                                        label="První mobilní řádek"
+                                    ),
+                                ),
+                                (
+                                    "mobile_line_2",
+                                    wagtail.blocks.TextBlock(
+                                        label="Druhý mobilní řádek"
+                                    ),
+                                ),
+                                (
+                                    "mobile_line_3",
+                                    wagtail.blocks.TextBlock(
+                                        label="Třetí mobilní řádek"
+                                    ),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "news",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "title",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Nejnovější články se načtou automaticky",
+                                        label="Titulek",
+                                    ),
+                                ),
+                                (
+                                    "description",
+                                    wagtail.blocks.TextBlock(label="Popis"),
+                                ),
+                            ],
+                            template="styleguide2/includes/organisms/articles/articles_section.html",
+                        ),
+                    ),
+                    ("europarl_news", wagtail.blocks.StructBlock([])),
+                    (
+                        "people",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "title_line_1",
+                                    wagtail.blocks.CharBlock(
+                                        label="První řádek titulku"
+                                    ),
+                                ),
+                                (
+                                    "title_line_2",
+                                    wagtail.blocks.CharBlock(
+                                        label="Druhý řádek titulku"
+                                    ),
+                                ),
+                                (
+                                    "description",
+                                    wagtail.blocks.TextBlock(label="Popis"),
+                                ),
+                                (
+                                    "list",
+                                    wagtail.blocks.ListBlock(
+                                        main.blocks.BoxBlock, label="Boxíky"
+                                    ),
+                                ),
+                            ]
+                        ),
+                    ),
+                    (
+                        "regions",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "title",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Články pro regiony se načtou automaticky",
+                                        label="Titulek",
+                                    ),
+                                )
+                            ]
+                        ),
+                    ),
+                    (
+                        "boxes",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("title", wagtail.blocks.CharBlock(label="Nadpis")),
+                                (
+                                    "list",
+                                    wagtail.blocks.ListBlock(
+                                        main.blocks.BoxBlock, label="Boxíky"
+                                    ),
+                                ),
+                                (
+                                    "image",
+                                    wagtail.images.blocks.ImageChooserBlock(
+                                        label="Obrázek pozadí", required=False
+                                    ),
+                                ),
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Hlavní obsah",
+            ),
         ),
         migrations.AlterField(
-            model_name='mainhomepage',
-            name='footer_other_links',
-            field=wagtail.fields.StreamField([('other_links', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('list', wagtail.blocks.ListBlock(shared.blocks.main.LinkBlock, label='Seznam odkazů s titulkem'))]))], blank=True, use_json_field=True, verbose_name='Odkazy v zápatí webu'),
+            model_name="mainhomepage",
+            name="footer_other_links",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "other_links",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("title", wagtail.blocks.CharBlock(label="Titulek")),
+                                (
+                                    "list",
+                                    wagtail.blocks.ListBlock(
+                                        shared.blocks.main.LinkBlock,
+                                        label="Seznam odkazů s titulkem",
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Odkazy v zápatí webu",
+            ),
         ),
         migrations.AlterField(
-            model_name='mainpeoplepage',
-            name='people',
-            field=wagtail.fields.StreamField([('people_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug skupiny', required=False)), ('person_list', wagtail.blocks.ListBlock(wagtail.blocks.PageChooserBlock(label='Detail osoby', page_type=['main.MainPersonPage']), label='Skupina osob'))], label='Seznam osob')), ('team_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Název sekce týmů')), ('slug', wagtail.blocks.CharBlock(help_text='Není třeba vyplňovat, bude automaticky vyplněno', label='Slug sekce', required=False)), ('team_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('headline', wagtail.blocks.CharBlock(label='Titulek bloku', required=False)), ('card_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['main.MainArticlesPage', 'main.MainArticlePage', 'main.MainProgramPage', 'main.MainPeoplePage', 'main.MainPersonPage', 'main.MainSimplePage', 'main.MainContactPage', 'main.MainCrossroadPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))], template='styleguide2/includes/molecules/boxes/card_box_block.html'), label='Karty s odkazy'))], label='Karta týmu'), label='Týmy'))]))], blank=True, use_json_field=True, verbose_name='Lidé a týmy'),
+            model_name="mainpeoplepage",
+            name="people",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "people_group",
+                        wagtail.blocks.StructBlock(
+                            [
+                                ("title", wagtail.blocks.CharBlock(label="Titulek")),
+                                (
+                                    "slug",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Není třeba vyplňovat, bude automaticky vyplněno",
+                                        label="Slug skupiny",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "person_list",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.PageChooserBlock(
+                                            label="Detail osoby",
+                                            page_type=["main.MainPersonPage"],
+                                        ),
+                                        label="Skupina osob",
+                                    ),
+                                ),
+                            ],
+                            label="Seznam osob",
+                        ),
+                    ),
+                    (
+                        "team_group",
+                        wagtail.blocks.StructBlock(
+                            [
+                                (
+                                    "title",
+                                    wagtail.blocks.CharBlock(label="Název sekce týmů"),
+                                ),
+                                (
+                                    "slug",
+                                    wagtail.blocks.CharBlock(
+                                        help_text="Není třeba vyplňovat, bude automaticky vyplněno",
+                                        label="Slug sekce",
+                                        required=False,
+                                    ),
+                                ),
+                                (
+                                    "team_list",
+                                    wagtail.blocks.ListBlock(
+                                        wagtail.blocks.StructBlock(
+                                            [
+                                                (
+                                                    "headline",
+                                                    wagtail.blocks.CharBlock(
+                                                        label="Titulek bloku",
+                                                        required=False,
+                                                    ),
+                                                ),
+                                                (
+                                                    "card_items",
+                                                    wagtail.blocks.ListBlock(
+                                                        wagtail.blocks.StructBlock(
+                                                            [
+                                                                (
+                                                                    "image",
+                                                                    wagtail.images.blocks.ImageChooserBlock(
+                                                                        label="Obrázek"
+                                                                    ),
+                                                                ),
+                                                                (
+                                                                    "title",
+                                                                    wagtail.blocks.CharBlock(
+                                                                        label="Titulek",
+                                                                        required=True,
+                                                                    ),
+                                                                ),
+                                                                (
+                                                                    "text",
+                                                                    wagtail.blocks.RichTextBlock(
+                                                                        label="Krátký text pod nadpisem",
+                                                                        required=False,
+                                                                    ),
+                                                                ),
+                                                                (
+                                                                    "page",
+                                                                    wagtail.blocks.PageChooserBlock(
+                                                                        label="Stránka",
+                                                                        page_type=[
+                                                                            "main.MainArticlesPage",
+                                                                            "main.MainArticlePage",
+                                                                            "main.MainProgramPage",
+                                                                            "main.MainPeoplePage",
+                                                                            "main.MainPersonPage",
+                                                                            "main.MainSimplePage",
+                                                                            "main.MainContactPage",
+                                                                            "main.MainCrossroadPage",
+                                                                        ],
+                                                                        required=False,
+                                                                    ),
+                                                                ),
+                                                                (
+                                                                    "link",
+                                                                    wagtail.blocks.URLBlock(
+                                                                        label="Odkaz",
+                                                                        required=False,
+                                                                    ),
+                                                                ),
+                                                            ],
+                                                            template="styleguide2/includes/molecules/boxes/card_box_block.html",
+                                                        ),
+                                                        label="Karty s odkazy",
+                                                    ),
+                                                ),
+                                            ],
+                                            label="Karta týmu",
+                                        ),
+                                        label="Týmy",
+                                    ),
+                                ),
+                            ]
+                        ),
+                    ),
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Lidé a týmy",
+            ),
         ),
         migrations.AlterField(
-            model_name='mainsimplepage',
-            name='content',
-            field=wagtail.fields.StreamField([('text', wagtail.blocks.RichTextBlock(template='styleguide2/includes/atoms/text/prose_richtext.html'))], blank=True, use_json_field=True, verbose_name='Hlavní obsah'),
+            model_name="mainsimplepage",
+            name="content",
+            field=wagtail.fields.StreamField(
+                [
+                    (
+                        "text",
+                        wagtail.blocks.RichTextBlock(
+                            template="styleguide2/includes/atoms/text/prose_richtext.html"
+                        ),
+                    )
+                ],
+                blank=True,
+                use_json_field=True,
+                verbose_name="Hlavní obsah",
+            ),
         ),
     ]
diff --git a/shared/migrations/0004_sharedtaggedelectionsarticle.py b/shared/migrations/0004_sharedtaggedelectionsarticle.py
index 401321ccdd44824c83f3ef3896f9df601fefb58d..0b6aaba68512302a8585d2c6fdf98f467461363d 100644
--- a/shared/migrations/0004_sharedtaggedelectionsarticle.py
+++ b/shared/migrations/0004_sharedtaggedelectionsarticle.py
@@ -1,27 +1,48 @@
 # Generated by Django 4.1.10 on 2024-01-06 16:43
 
-from django.db import migrations, models
 import django.db.models.deletion
 import modelcluster.fields
+from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
-
     dependencies = [
-        ('elections', '0001_initial'),
-        ('shared', '0003_initial'),
+        ("elections", "0001_initial"),
+        ("shared", "0003_initial"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='SharedTaggedElectionsArticle',
+            name="SharedTaggedElectionsArticle",
             fields=[
-                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('content_object', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='shared_elections_articles', to='elections.electionsarticlepage')),
-                ('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='shared_elections_tags', to='shared.sharedtag')),
+                (
+                    "id",
+                    models.AutoField(
+                        auto_created=True,
+                        primary_key=True,
+                        serialize=False,
+                        verbose_name="ID",
+                    ),
+                ),
+                (
+                    "content_object",
+                    modelcluster.fields.ParentalKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="shared_elections_articles",
+                        to="elections.electionsarticlepage",
+                    ),
+                ),
+                (
+                    "tag",
+                    models.ForeignKey(
+                        on_delete=django.db.models.deletion.CASCADE,
+                        related_name="shared_elections_tags",
+                        to="shared.sharedtag",
+                    ),
+                ),
             ],
             options={
-                'abstract': False,
+                "abstract": False,
             },
         ),
     ]