diff --git a/district/migrations/0316_alter_districtcustompage_content.py b/district/migrations/0316_alter_districtcustompage_content.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ba3a85be8bb95f2997e8d29731dcc528cec1774
--- /dev/null
+++ b/district/migrations/0316_alter_districtcustompage_content.py
@@ -0,0 +1,20 @@
+# Generated by Django 5.0.7 on 2025-03-19 12:01
+
+import shared.blocks.children.chart
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0315_remove_districthomepage_ecomail_newsletter_list_categories_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districtcustompage',
+            name='content',
+            field=wagtail.fields.StreamField([('text', 0), ('advanced_text', 4), ('two_columns_text', 7), ('headline', 12), ('headline_with_picture', 15), ('picture_list', 19), ('flip_cards', 30), ('table', 31), ('popout_table', 32), ('gallery', 35), ('figure', 38), ('card', 63), ('two_columns', 73), ('three_columns', 75), ('youtube', 76), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70), ('popout_point', 79), ('chart', 101), ('related', 104), ('related_links', 104), ('badge', 107), ('new_people_group', 116), ('newsletter', 121)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor', 'template': 'styleguide2/includes/atoms/text/prose_richtext.html'}), 1: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('left', 'vlevo'), ('center', 'uprostřed'), ('right', 'vpravo')], 'label': 'zarovnání'}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black_on_white', 'černá na bílé'), ('black_on_yellow', 'černá na žluté'), ('white_on_black', 'bílá na černé'), ('white_on_blue', 'bílá na modré'), ('white_on_cyan', 'bílá na tyrkysové'), ('white_on_violet', 'bílá na fialové')], 'label': 'barva'}), 3: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor'}), 4: ('wagtail.blocks.StructBlock', [[('align', 1), ('color', 2), ('text', 3)]], {}), 5: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'levý sloupec'}), 6: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'pravý sloupec'}), 7: ('wagtail.blocks.StructBlock', [[('left_text', 5), ('right_text', 6)]], {}), 8: ('wagtail.blocks.CharBlock', (), {'label': 'Nadpis', 'max_length': 300, 'required': True}), 9: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h1', 'H1'), ('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('h5', 'H5'), ('h6', 'H6')], 'help_text': 'Čím nižší číslo, tím vyšší úroveň.', 'label': 'Úroveň nadpisu'}), 10: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('head-alt-xl', 'Velký, Bebas Neue - 6XL'), ('head-alt-lg', 'Střední, Bebas Neue - 4XL'), ('head-alt-md', 'Základní velikost - Roboto - MD'), ('head-alt-sm', 'Malý - Roboto - SM'), ('head-alt-xs', 'Extra malý - Roboto - XS')], 'help_text': 'Náhled si prohlédněte na https://styleguide2.pirati.cz/pattern/patterns/atoms/text/headings.html.', 'label': 'Velikost'}), 11: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('auto', 'Automaticky'), ('center', 'Na střed')], 'label': 'Zarovnání'}), 12: ('wagtail.blocks.StructBlock', [[('headline', 8), ('tag', 9), ('style', 10), ('align', 11)]], {}), 13: ('wagtail.blocks.CharBlock', (), {'label': 'nadpis'}), 14: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'rozměr na výšku 75px nebo více (obrázek bude zmenšen na výšku 75px)', 'label': 'obrázek'}), 15: ('wagtail.blocks.StructBlock', [[('color', 2), ('title', 13), ('picture', 14)]], {}), 16: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'Odstavec'}), 17: ('wagtail.blocks.ListBlock', (16,), {'label': 'Odstavce'}), 18: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Rozměr 30x30px nebo více (obrázek bude zmenšen na 30x30px)', 'label': 'Obrázek'}), 19: ('wagtail.blocks.StructBlock', [[('color', 2), ('items', 17), ('picture', 18)]], {}), 20: ('wagtail.blocks.CharBlock', (), {'default': 'FEC900', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva pozadí'}), 21: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje pozadí. Nelze vybrat obě najednou.', 'label': 'Obrázek', 'required': False}), 22: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje obrázek. Nelze vybrat obě najednou.', 'label': 'Pozadí', 'required': False}), 23: ('wagtail.blocks.TextBlock', (), {'help_text': 'Řádkování je manuální.', 'label': 'Nadpis'}), 24: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva textu'}), 25: ('wagtail.blocks.RichTextBlock', (), {'label': 'Obsah'}), 26: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud není vyplněn, tlačítko se neukáže.', 'label': 'Nadpis tlačítka', 'required': False}), 27: ('wagtail.blocks.CharBlock', (), {'label': 'Odkaz tlačítka', 'required': False}), 28: ('wagtail.blocks.StructBlock', [[('bg_color', 20), ('image', 21), ('background', 22), ('title', 23), ('title_color', 24), ('content', 25), ('button_text', 26), ('button_url', 27)]], {'label': 'Karta'}), 29: ('wagtail.blocks.ListBlock', (28,), {'label': 'Karty'}), 30: ('wagtail.blocks.StructBlock', [[('cards', 29)]], {}), 31: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Tabulka', 'template': 'styleguide2/includes/atoms/table/table.html'}), 32: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Rozbalovací tabulka', 'template': 'styleguide2/includes/atoms/table/popout_table.html'}), 33: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'obrázek', 'required': True}), 34: ('wagtail.blocks.ListBlock', (33,), {'group': '3. Ostatní', 'icon': 'image', 'label': 'Galerie'}), 35: ('wagtail.blocks.StructBlock', [[('gallery_items', 34)]], {'label': 'Galerie'}), 36: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': True}), 37: ('wagtail.blocks.TextBlock', (), {'label': 'Popisek', 'required': False}), 38: ('wagtail.blocks.StructBlock', [[('img', 36), ('caption', 37)]], {}), 39: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': False}), 40: ('wagtail.blocks.TextBlock', (), {'label': 'Titulek', 'required': False}), 41: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Není třeba vyplňovat, náhled bude dohledán automaticky.', 'label': 'Náhled videa (automatické pole)', 'required': False}), 42: ('wagtail.blocks.URLBlock', (), {'help_text': 'Odkaz na YouTube video bude automaticky zkonvertován na ID videa a NEBUDE uložen.', 'label': 'Odkaz na video', 'required': False}), 43: ('wagtail.blocks.CharBlock', (), {'help_text': 'Není třeba vyplňovat, bude automaticky načteno z odkazu.', 'label': 'ID videa (automatické pole)', 'required': False}), 44: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Pokud toto pole není zaškrtlé, video bude užší než text okolo.', 'label': 'Zabírá maximální šířku povolenou pro text?', 'required': True}), 45: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Automaticky spustí video bez zvuku. Pozor, některé prohlížeče blokují i automatické přehrávání videí bez zvuku.', 'label': 'Spustit video automaticky?', 'required': True}), 46: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {}), 47: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 50.04075', 'label': 'Zeměpisná šířka'}), 48: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 15.77659', 'label': 'Zeměpisná délka'}), 49: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva špendlíku (HEX)'}), 50: ('wagtail.blocks.IntegerBlock', (), {'default': 15, 'label': 'Výchozí zoom', 'max_value': 18, 'min_value': 1}), 51: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('osm-mapnik', 'OSM Mapnik'), ('stadia-osm-bright', 'Stadia OSM Bright'), ('stadia-outdoors', 'Stadia Outdoors'), ('mapbox-streets', 'Mapbox Streets'), ('mapbox-outdoors', 'Mapbox Outdoors'), ('mapbox-light', 'Mapbox Light'), ('mapbox-dark', 'Mapbox Dark'), ('mapbox-satellite', 'Mapbox Satellite'), ('mapbox-pirate', 'Mapbox Pirate Theme')], 'label': 'Styl'}), 52: ('wagtail.blocks.IntegerBlock', (), {'label': 'Výška v px', 'max_value': 1000, 'min_value': 100}), 53: ('wagtail.blocks.StructBlock', [[('lat', 47), ('lon', 48), ('hex_color', 49), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Špendlík na mapě'}), 54: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'required': True}), 55: ('wagtail.blocks.TextBlock', (), {'help_text': "Vložte surový GeoJSON objekt typu 'Feature'. Vyrobit jej můžete např. pomocí online služby geojson.io. Pokud u objektu poskytnete properties 'title' a 'description', zobrazí se jak na mapě, tak i v detailu.", 'label': 'Geodata', 'required': True}), 56: ('wagtail.blocks.URLBlock', (), {'label': 'Odkaz', 'required': False}), 57: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva (HEX)'}), 58: ('wagtail.blocks.StructBlock', [[('title', 54), ('description', 37), ('geojson', 55), ('image', 39), ('link', 56), ('hex_color', 57)]], {'required': True}), 59: ('wagtail.blocks.ListBlock', (58,), {'label': 'Součásti'}), 60: ('wagtail.blocks.StructBlock', [[('features', 59), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Mapová kolekce'}), 61: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60)]], {'label': 'Obsah', 'required': False}), 62: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Stránka', 'required': False}), 63: ('wagtail.blocks.StructBlock', [[('img', 39), ('headline', 40), ('content', 61), ('page', 62), ('link', 56)]], {}), 64: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'max_length': 128, 'required': True}), 65: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black', 'Černá'), ('white', 'Bílá'), ('pirati-yellow', 'Žlutá'), ('grey-125', 'Světle šedá'), ('blue-300', 'Modrá'), ('cyan-200', 'Tyrkysová'), ('green-400', 'Zelená'), ('violet-400', 'Vínová'), ('red-600', 'Červená')], 'label': 'Barva'}), 66: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Pokud je zapnuto, tlačítko při najetí kurzorem ukáže žlutou šipku.', 'label': 'Animovat na hover', 'required': False}), 67: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('normal', 'Normální'), ('large', 'Velká'), ('huge', 'Masivní')], 'label': 'Velikost tlačítka'}), 68: ('wagtail.blocks.StructBlock', [[('title', 64), ('color', 65), ('hoveractive', 66), ('page', 62), ('link', 56), ('align', 11), ('size', 67)]], {}), 69: ('wagtail.blocks.ListBlock', (68,), {'label': 'Tlačítka'}), 70: ('wagtail.blocks.StructBlock', [[('buttons', 69)]], {}), 71: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah levého sloupce', 'required': True}), 72: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah pravého sloupce', 'required': True}), 73: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('right_column_content', 72)]], {}), 74: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah prostředního sloupce', 'required': True}), 75: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('middle_column_content', 74), ('right_column_content', 72)]], {}), 76: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {'label': 'YouTube video'}), 77: ('wagtail.blocks.CharBlock', (), {'label': 'Název', 'required': True}), 78: ('wagtail.blocks.StreamBlock', [[('text', 0), ('headline', 12), ('table', 31)]], {'label': 'Obsah'}), 79: ('wagtail.blocks.StructBlock', [[('name', 77), ('content', 78)]], {}), 80: ('wagtail.blocks.CharBlock', (), {'label': 'Název', 'max_length': 120}), 81: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('bar', 'Graf se sloupci'), ('horizontalBar', 'Graf s vodorovnými sloupci'), ('pie', 'Koláčový graf'), ('doughnut', 'Donutový graf'), ('polarArea', 'Graf polární oblasti'), ('radar', 'Radarový graf'), ('line', 'Graf s liniemi')], 'label': 'Typ'}), 82: ('wagtail.blocks.BooleanBlock', (), {'help_text': 'Mění vzhled pouze u linových grafů.', 'label': 'Schovat body', 'required': False}), 83: ('wagtail.blocks.CharBlock', (), {'label': 'Skupina', 'max_length': 40}), 84: ('wagtail.blocks.ListBlock', (83,), {'blank': True, 'collapsed': True, 'default': [], 'label': 'Místně definované skupiny', 'required': False}), 85: ('wagtail.blocks.CharBlock', (), {'label': 'Označení zdroje dat', 'max_length': 120}), 86: ('wagtail.blocks.IntegerBlock', (), {}), 87: ('wagtail.blocks.ListBlock', (86,), {'default': [0], 'label': 'Data'}), 88: ('wagtail.blocks.StructBlock', [[('label', 85), ('data', 87)]], {}), 89: ('wagtail.blocks.ListBlock', (88,), {'blank': True, 'collapsed': True, 'default': [], 'label': 'Místní zdroje dat', 'required': False}), 90: ('wagtail.blocks.MultipleChoiceBlock', [], {'choices': shared.blocks.children.chart.get_redmine_projects, 'label': 'Projekty'}), 91: ('wagtail.blocks.BooleanBlock', (), {'label': 'Jen otevřené', 'required': False}), 92: ('wagtail.blocks.BooleanBlock', (), {'label': 'Jen uzavřené', 'required': False}), 93: ('wagtail.blocks.DateBlock', (), {'label': 'Min. datum vytvoření', 'required': True}), 94: ('wagtail.blocks.DateBlock', (), {'label': 'Max. datum vytvoření', 'required': True}), 95: ('wagtail.blocks.CharBlock', (), {'help_text': 'Např. <=2023-01-01. Více informací na pi2.cz/redmine-api', 'label': 'Filtr pro datum aktualizace', 'max_length': 128, 'required': False}), 96: ('wagtail.blocks.CharBlock', (), {'label': 'Označení úkolů uvnitř grafu', 'max_length': 128, 'required': True}), 97: ('wagtail.blocks.BooleanBlock', (), {'label': 'Rozdělit podle projektu', 'required': False}), 98: ('wagtail.blocks.BooleanBlock', (), {'label': 'Pouze růst nahoru', 'required': False}), 99: ('wagtail.blocks.StructBlock', [[('projects', 90), ('is_open', 91), ('is_closed', 92), ('created_on_min_date', 93), ('created_on_max_date', 94), ('updated_on', 95), ('issue_label', 96), ('split_per_project', 97), ('only_grow', 98)]], {'label': 'Redmine úkoly'}), 100: ('wagtail.blocks.ListBlock', (99,), {'blank': True, 'default': [], 'help_text': 'Úkoly, podle doby vytvoření. Pokud definuješ více zdrojů, datumy v nich musí být stejné.', 'label': 'Zdroje dat z Redmine (úkoly)', 'required': False}), 101: ('wagtail.blocks.StructBlock', [[('title', 80), ('chart_type', 81), ('hide_points', 82), ('local_labels', 84), ('local_datasets', 89), ('redmine_issue_datasets', 100)]], {}), 102: ('wagtail.blocks.PageChooserBlock', ('district.DistrictArticlePage',), {'label': 'Aktualita', 'required': True}), 103: ('wagtail.blocks.ListBlock', (102,), {'label': 'Seznam aktualit', 'required': True}), 104: ('wagtail.blocks.StructBlock', [[('articles', 103)]], {}), 105: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Osoba', 'page_type': ['district.DistrictPersonPage', 'district.DistrictOctopusPersonPage', 'district.DistrictManualOctopusPersonPage'], 'required': True}), 106: ('wagtail.blocks.CharBlock', (), {'help_text': 'Vlastní popisek na vizitce. Pokud není uvedeno, použije se výchozí profese osoby.', 'label': 'Popisek', 'required': False}), 107: ('wagtail.blocks.StructBlock', [[('person', 105), ('caption', 106)]], {}), 108: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek'}), 109: ('wagtail.blocks.CharBlock', (), {'help_text': 'Není třeba vyplňovat, bude automaticky vyplněno', 'label': 'Slug skupiny', 'required': False}), 110: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Detail osoby', 'page_type': ['district.DistrictPersonPage', 'district.DistrictOctopusPersonPage', 'district.DistrictManualOctopusPersonPage']}), 111: ('wagtail.blocks.ListBlock', (110,), {'default': [], 'help_text': 'S pozicemi z jejich podstránek', 'label': 'Osoby'}), 112: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Detail osoby', 'page_type': ['district.DistrictOctopusPersonPage', 'district.DistrictManualOctopusPersonPage', 'district.DistrictPersonPage']}), 113: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud není pozice vyplněná, použije se pozice ze stránky osoby.', 'label': 'Pozice', 'required': False}), 114: ('wagtail.blocks.StructBlock', [[('page', 112), ('position', 113)]], {}), 115: ('wagtail.blocks.ListBlock', (114,), {'default': [], 'help_text': 'S nastavitelnými pozicemi', 'label': 'Osoby'}), 116: ('wagtail.blocks.StructBlock', [[('title', 108), ('slug', 109), ('person_list', 111), ('person_list_with_custom_positions', 115)]], {}), 117: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud toto pole zůstane nevyplněné, použije se nastavení tohoto webu. V takovém případě se může přidat i odběratel do Ecomailu.', 'label': 'ID newsletteru v Mailtrainu', 'required': False}), 118: ('wagtail.blocks.CharBlock', (), {'default': 'Odebírej náš', 'label': 'Nadpis bloku (1. řádek)', 'required': True}), 119: ('wagtail.blocks.CharBlock', (), {'default': 'newsletter', 'label': 'Nadpis bloku (2. řádek)', 'required': True}), 120: ('wagtail.blocks.CharBlock', (), {'default': 'Fake news tam nenajdeš, ale dozvíš se, co chystáme doopravdy!', 'label': 'Popis newsletteru', 'required': True}), 121: ('wagtail.blocks.StructBlock', [[('list_id', 117), ('title_line_1', 118), ('title_line_2', 119), ('description', 120)]], {})}, verbose_name='Obsah'),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index 5804515ecaba8fe8083505b372297ec732dab62d..5e882bee469cb906d54fc7c9de3a121c3e4eb8a0 100644
--- a/district/models.py
+++ b/district/models.py
@@ -1146,11 +1146,11 @@ class DistrictCustomPage(RoutablePageMixin, MainSimplePageMixin):
 
     @cached_property
     def newsletter_subscribe_url(self):
-        newsletter_subscribe = self.reverse_subpage("newsletter_subscribe")
+        newsletter_subscribe = self.root_page.reverse_subpage("newsletter_subscribe")
 
         return (
-            self.url + newsletter_subscribe
-            if self.url is not None
+            self.root_page.url + newsletter_subscribe
+            if self.root_page.url is not None
             else newsletter_subscribe
         )  # preview fix
 
diff --git a/main/migrations/0154_mainhomepage_ecomail_newsletter_list_id_and_more.py b/main/migrations/0154_mainhomepage_ecomail_newsletter_list_id_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..ed1ac0df421c3b6453c740bec8fbbcb0ef34e4aa
--- /dev/null
+++ b/main/migrations/0154_mainhomepage_ecomail_newsletter_list_id_and_more.py
@@ -0,0 +1,23 @@
+# Generated by Django 5.0.7 on 2025-03-19 12:21
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('main', '0153_alter_mainarticlepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='mainhomepage',
+            name='ecomail_newsletter_list_id',
+            field=models.IntegerField(blank=True, null=True, verbose_name='ID Ecomail newsletteru'),
+        ),
+        migrations.AddField(
+            model_name='mainhomepage',
+            name='ecomail_newsletter_list_tags',
+            field=models.CharField(blank=True, help_text="Oddělte čárkou, například 'Tag1,Tag2,Tag3'. Bez mezer.", max_length=128, null=True, verbose_name='Tagy k přidání novým odběratelům na Ecomailu'),
+        ),
+    ]
diff --git a/main/models.py b/main/models.py
index bbb6f57621cc35c39a3c86f6c4eed7e5558fc5f7..7bc516bc04c9db092f6ad79decf9c109c607410c 100644
--- a/main/models.py
+++ b/main/models.py
@@ -66,6 +66,20 @@ class MainHomePage(MainHomePageMixin):
         use_json_field=True,
     )
 
+    ecomail_newsletter_list_id = models.IntegerField(
+        "ID Ecomail newsletteru",
+        blank=True,
+        null=True,
+    )
+
+    ecomail_newsletter_list_tags = models.CharField(
+        "Tagy k přidání novým odběratelům na Ecomailu",
+        max_length=128,
+        blank=True,
+        null=True,
+        help_text="Oddělte čárkou, například 'Tag1,Tag2,Tag3'. Bez mezer."
+    )
+
     # content
     content = StreamField(
         [
@@ -130,7 +144,14 @@ class MainHomePage(MainHomePageMixin):
             ObjectList(MainHomePageMixin.content_panels, heading="Obsah"),
             ObjectList(menu_panels, heading="HlaviÄŤka"),
             ObjectList(MainHomePageMixin.footer_panels, heading="PatiÄŤka"),
-            ObjectList(MainHomePageMixin.settings_panels, heading="NastavenĂ­"),
+            ObjectList(
+                MainHomePageMixin.settings_panels
+                + [
+                    FieldPanel("ecomail_newsletter_list_id"),
+                    FieldPanel("ecomail_newsletter_list_tags")
+                ],
+                heading="NastavenĂ­"
+            ),
             ObjectList(MainHomePageMixin.promote_panels, heading="Metadata"),
         ]
     )
diff --git a/shared/blocks/parents/struct.py b/shared/blocks/parents/struct.py
index a2d15d8be9aff9dda51b9099227c6a8f8682f8e3..b7d8f0eebc2ad7da02b0e81e8c58a51727f37a80 100644
--- a/shared/blocks/parents/struct.py
+++ b/shared/blocks/parents/struct.py
@@ -149,7 +149,14 @@ class CardBlock(blocks.StructBlock):
 
 
 class NewsletterSubscriptionBlock(blocks.StructBlock):
-    list_id = blocks.CharBlock(label="ID newsletteru", required=True)
+    list_id = blocks.CharBlock(
+        label="ID newsletteru v Mailtrainu",
+        required=False,
+        help_text=(
+            "Pokud toto pole zůstane nevyplněné, použije se nastavení tohoto webu. "
+            "V takovém případě se může přidat i odběratel do Ecomailu."
+        )
+    )
 
     title_line_1 = blocks.CharBlock(
         label="Nadpis bloku (1. řádek)", required=True, default="Odebírej náš"
diff --git a/shared/models/main.py b/shared/models/main.py
index 9926976063d8f1432a14971b1ee616a40c0ab0a4..54c522275dfbd790cd1ead34dcdd7d0623f41887 100644
--- a/shared/models/main.py
+++ b/shared/models/main.py
@@ -1251,7 +1251,7 @@ class MainHomePageMixin(
 
                 messages.success(
                     request,
-                    "Zkontroluj si prosím schránku, poslali jsme ti potvrzovací email.",
+                    "Odběr úspěšně vytvořen.",
                 )
 
                 try:
diff --git a/shared/utils.py b/shared/utils.py
index 07bd03558a642cb0cf3a86e8c52f5851f1dc177b..506b60f37f1232cefa5f0cd73af58b821275a490 100644
--- a/shared/utils.py
+++ b/shared/utils.py
@@ -71,7 +71,7 @@ def subscribe_to_newsletter(email, list_id):
 
 
 def subscribe_to_ecomail_newsletter(email, list_id: int, categories: str):
-    split_categories = categories.split(",")
+    split_categories = categories.split(",") if categories is not None else []
 
     data = {
         "subscriber_data": {
diff --git a/shared_legacy/blocks/base.py b/shared_legacy/blocks/base.py
index f79b14c769d25326c37bb8c3104a134562237688..c8079c52a78764131a151e8c5fdcd7b6684f2194 100644
--- a/shared_legacy/blocks/base.py
+++ b/shared_legacy/blocks/base.py
@@ -1073,7 +1073,14 @@ class FooterLinksBlock(blocks.StructBlock):
 
 
 class NewsletterSubscriptionBlock(blocks.StructBlock):
-    list_id = blocks.CharBlock(label="ID newsletteru", required=True)
+    list_id = blocks.CharBlock(
+        label="ID newsletteru v Mailtrainu",
+        required=False,
+        help_text=(
+            "Pokud toto pole zůstane nevyplněné, použije se nastavení tohoto webu. "
+            "V takovém případě se může přidat i odběratel do Ecomailu."
+        )
+    )
     description = blocks.CharBlock(
         label="Popis newsletteru",
         required=True,
diff --git a/uniweb/migrations/0127_alter_uniwebflexiblepage_content_and_more.py b/uniweb/migrations/0127_alter_uniwebflexiblepage_content_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ba524340a714ada000f9289f984a1990726038c
--- /dev/null
+++ b/uniweb/migrations/0127_alter_uniwebflexiblepage_content_and_more.py
@@ -0,0 +1,24 @@
+# Generated by Django 5.0.7 on 2025-03-19 12:01
+
+import wagtail.fields
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('uniweb', '0126_alter_uniwebarticlepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='uniwebflexiblepage',
+            name='content',
+            field=wagtail.fields.StreamField([('text', 0), ('advanced_text', 4), ('two_columns_text', 7), ('headline', 12), ('headline_with_picture', 15), ('picture_list', 19), ('flip_cards', 30), ('table', 31), ('popout_table', 32), ('gallery', 35), ('figure', 38), ('card', 63), ('two_columns', 73), ('three_columns', 75), ('youtube', 76), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70), ('popout_point', 79), ('calendar', 82), ('newsletter', 87)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor', 'template': 'styleguide2/includes/atoms/text/prose_richtext.html'}), 1: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('left', 'vlevo'), ('center', 'uprostřed'), ('right', 'vpravo')], 'label': 'zarovnání'}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black_on_white', 'černá na bílé'), ('black_on_yellow', 'černá na žluté'), ('white_on_black', 'bílá na černé'), ('white_on_blue', 'bílá na modré'), ('white_on_cyan', 'bílá na tyrkysové'), ('white_on_violet', 'bílá na fialové')], 'label': 'barva'}), 3: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor'}), 4: ('wagtail.blocks.StructBlock', [[('align', 1), ('color', 2), ('text', 3)]], {}), 5: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'levý sloupec'}), 6: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'pravý sloupec'}), 7: ('wagtail.blocks.StructBlock', [[('left_text', 5), ('right_text', 6)]], {}), 8: ('wagtail.blocks.CharBlock', (), {'label': 'Nadpis', 'max_length': 300, 'required': True}), 9: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h1', 'H1'), ('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('h5', 'H5'), ('h6', 'H6')], 'help_text': 'Čím nižší číslo, tím vyšší úroveň.', 'label': 'Úroveň nadpisu'}), 10: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('head-alt-xl', 'Velký, Bebas Neue - 6XL'), ('head-alt-lg', 'Střední, Bebas Neue - 4XL'), ('head-alt-md', 'Základní velikost - Roboto - MD'), ('head-alt-sm', 'Malý - Roboto - SM'), ('head-alt-xs', 'Extra malý - Roboto - XS')], 'help_text': 'Náhled si prohlédněte na https://styleguide2.pirati.cz/pattern/patterns/atoms/text/headings.html.', 'label': 'Velikost'}), 11: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('auto', 'Automaticky'), ('center', 'Na střed')], 'label': 'Zarovnání'}), 12: ('wagtail.blocks.StructBlock', [[('headline', 8), ('tag', 9), ('style', 10), ('align', 11)]], {}), 13: ('wagtail.blocks.CharBlock', (), {'label': 'nadpis'}), 14: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'rozměr na výšku 75px nebo více (obrázek bude zmenšen na výšku 75px)', 'label': 'obrázek'}), 15: ('wagtail.blocks.StructBlock', [[('color', 2), ('title', 13), ('picture', 14)]], {}), 16: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'Odstavec'}), 17: ('wagtail.blocks.ListBlock', (16,), {'label': 'Odstavce'}), 18: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Rozměr 30x30px nebo více (obrázek bude zmenšen na 30x30px)', 'label': 'Obrázek'}), 19: ('wagtail.blocks.StructBlock', [[('color', 2), ('items', 17), ('picture', 18)]], {}), 20: ('wagtail.blocks.CharBlock', (), {'default': 'FEC900', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva pozadí'}), 21: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje pozadí. Nelze vybrat obě najednou.', 'label': 'Obrázek', 'required': False}), 22: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje obrázek. Nelze vybrat obě najednou.', 'label': 'Pozadí', 'required': False}), 23: ('wagtail.blocks.TextBlock', (), {'help_text': 'Řádkování je manuální.', 'label': 'Nadpis'}), 24: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva textu'}), 25: ('wagtail.blocks.RichTextBlock', (), {'label': 'Obsah'}), 26: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud není vyplněn, tlačítko se neukáže.', 'label': 'Nadpis tlačítka', 'required': False}), 27: ('wagtail.blocks.CharBlock', (), {'label': 'Odkaz tlačítka', 'required': False}), 28: ('wagtail.blocks.StructBlock', [[('bg_color', 20), ('image', 21), ('background', 22), ('title', 23), ('title_color', 24), ('content', 25), ('button_text', 26), ('button_url', 27)]], {'label': 'Karta'}), 29: ('wagtail.blocks.ListBlock', (28,), {'label': 'Karty'}), 30: ('wagtail.blocks.StructBlock', [[('cards', 29)]], {}), 31: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Tabulka', 'template': 'styleguide2/includes/atoms/table/table.html'}), 32: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Rozbalovací tabulka', 'template': 'styleguide2/includes/atoms/table/popout_table.html'}), 33: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'obrázek', 'required': True}), 34: ('wagtail.blocks.ListBlock', (33,), {'group': '3. Ostatní', 'icon': 'image', 'label': 'Galerie'}), 35: ('wagtail.blocks.StructBlock', [[('gallery_items', 34)]], {'label': 'Galerie'}), 36: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': True}), 37: ('wagtail.blocks.TextBlock', (), {'label': 'Popisek', 'required': False}), 38: ('wagtail.blocks.StructBlock', [[('img', 36), ('caption', 37)]], {}), 39: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': False}), 40: ('wagtail.blocks.TextBlock', (), {'label': 'Titulek', 'required': False}), 41: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Není třeba vyplňovat, náhled bude dohledán automaticky.', 'label': 'Náhled videa (automatické pole)', 'required': False}), 42: ('wagtail.blocks.URLBlock', (), {'help_text': 'Odkaz na YouTube video bude automaticky zkonvertován na ID videa a NEBUDE uložen.', 'label': 'Odkaz na video', 'required': False}), 43: ('wagtail.blocks.CharBlock', (), {'help_text': 'Není třeba vyplňovat, bude automaticky načteno z odkazu.', 'label': 'ID videa (automatické pole)', 'required': False}), 44: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Pokud toto pole není zaškrtlé, video bude užší než text okolo.', 'label': 'Zabírá maximální šířku povolenou pro text?', 'required': True}), 45: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Automaticky spustí video bez zvuku. Pozor, některé prohlížeče blokují i automatické přehrávání videí bez zvuku.', 'label': 'Spustit video automaticky?', 'required': True}), 46: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {}), 47: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 50.04075', 'label': 'Zeměpisná šířka'}), 48: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 15.77659', 'label': 'Zeměpisná délka'}), 49: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva špendlíku (HEX)'}), 50: ('wagtail.blocks.IntegerBlock', (), {'default': 15, 'label': 'Výchozí zoom', 'max_value': 18, 'min_value': 1}), 51: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('osm-mapnik', 'OSM Mapnik'), ('stadia-osm-bright', 'Stadia OSM Bright'), ('stadia-outdoors', 'Stadia Outdoors'), ('mapbox-streets', 'Mapbox Streets'), ('mapbox-outdoors', 'Mapbox Outdoors'), ('mapbox-light', 'Mapbox Light'), ('mapbox-dark', 'Mapbox Dark'), ('mapbox-satellite', 'Mapbox Satellite'), ('mapbox-pirate', 'Mapbox Pirate Theme')], 'label': 'Styl'}), 52: ('wagtail.blocks.IntegerBlock', (), {'label': 'Výška v px', 'max_value': 1000, 'min_value': 100}), 53: ('wagtail.blocks.StructBlock', [[('lat', 47), ('lon', 48), ('hex_color', 49), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Špendlík na mapě'}), 54: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'required': True}), 55: ('wagtail.blocks.TextBlock', (), {'help_text': "Vložte surový GeoJSON objekt typu 'Feature'. Vyrobit jej můžete např. pomocí online služby geojson.io. Pokud u objektu poskytnete properties 'title' a 'description', zobrazí se jak na mapě, tak i v detailu.", 'label': 'Geodata', 'required': True}), 56: ('wagtail.blocks.URLBlock', (), {'label': 'Odkaz', 'required': False}), 57: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva (HEX)'}), 58: ('wagtail.blocks.StructBlock', [[('title', 54), ('description', 37), ('geojson', 55), ('image', 39), ('link', 56), ('hex_color', 57)]], {'required': True}), 59: ('wagtail.blocks.ListBlock', (58,), {'label': 'Součásti'}), 60: ('wagtail.blocks.StructBlock', [[('features', 59), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Mapová kolekce'}), 61: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60)]], {'label': 'Obsah', 'required': False}), 62: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Stránka', 'required': False}), 63: ('wagtail.blocks.StructBlock', [[('img', 39), ('headline', 40), ('content', 61), ('page', 62), ('link', 56)]], {}), 64: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'max_length': 128, 'required': True}), 65: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black', 'Černá'), ('white', 'Bílá'), ('pirati-yellow', 'Žlutá'), ('grey-125', 'Světle šedá'), ('blue-300', 'Modrá'), ('cyan-200', 'Tyrkysová'), ('green-400', 'Zelená'), ('violet-400', 'Vínová'), ('red-600', 'Červená')], 'label': 'Barva'}), 66: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Pokud je zapnuto, tlačítko při najetí kurzorem ukáže žlutou šipku.', 'label': 'Animovat na hover', 'required': False}), 67: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('normal', 'Normální'), ('large', 'Velká'), ('huge', 'Masivní')], 'label': 'Velikost tlačítka'}), 68: ('wagtail.blocks.StructBlock', [[('title', 64), ('color', 65), ('hoveractive', 66), ('page', 62), ('link', 56), ('align', 11), ('size', 67)]], {}), 69: ('wagtail.blocks.ListBlock', (68,), {'label': 'Tlačítka'}), 70: ('wagtail.blocks.StructBlock', [[('buttons', 69)]], {}), 71: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah levého sloupce', 'required': True}), 72: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah pravého sloupce', 'required': True}), 73: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('right_column_content', 72)]], {}), 74: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah prostředního sloupce', 'required': True}), 75: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('middle_column_content', 74), ('right_column_content', 72)]], {}), 76: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {'label': 'YouTube video'}), 77: ('wagtail.blocks.CharBlock', (), {'label': 'Název', 'required': True}), 78: ('wagtail.blocks.StreamBlock', [[('text', 0), ('headline', 12), ('table', 31)]], {'label': 'Obsah'}), 79: ('wagtail.blocks.StructBlock', [[('name', 77), ('content', 78)]], {}), 80: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'required': False}), 81: ('wagtail.blocks.static_block.StaticBlock', (), {'admin_text': 'Adresa kalendáře se zadává v nastavení hlavní stránky webu', 'label': 'Volba kalendáře'}), 82: ('wagtail.blocks.StructBlock', [[('title', 80), ('info', 81)]], {}), 83: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud toto pole zůstane nevyplněné, použije se nastavení tohoto webu. V takovém případě se může přidat i odběratel do Ecomailu.', 'label': 'ID newsletteru v Mailtrainu', 'required': False}), 84: ('wagtail.blocks.CharBlock', (), {'default': 'Odebírej náš', 'label': 'Nadpis bloku (1. řádek)', 'required': True}), 85: ('wagtail.blocks.CharBlock', (), {'default': 'newsletter', 'label': 'Nadpis bloku (2. řádek)', 'required': True}), 86: ('wagtail.blocks.CharBlock', (), {'default': 'Fake news tam nenajdeš, ale dozvíš se, co chystáme doopravdy!', 'label': 'Popis newsletteru', 'required': True}), 87: ('wagtail.blocks.StructBlock', [[('list_id', 83), ('title_line_1', 84), ('title_line_2', 85), ('description', 86)]], {})}, verbose_name='obsah stránky'),
+        ),
+        migrations.AlterField(
+            model_name='uniwebhomepage',
+            name='content',
+            field=wagtail.fields.StreamField([('text', 0), ('advanced_text', 4), ('two_columns_text', 7), ('headline', 12), ('headline_with_picture', 15), ('picture_list', 19), ('flip_cards', 30), ('table', 31), ('popout_table', 32), ('gallery', 35), ('figure', 38), ('card', 63), ('two_columns', 73), ('three_columns', 75), ('youtube', 76), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70), ('popout_point', 79), ('calendar', 82), ('newsletter', 87), ('news_block', 90)], blank=True, block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor', 'template': 'styleguide2/includes/atoms/text/prose_richtext.html'}), 1: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('left', 'vlevo'), ('center', 'uprostřed'), ('right', 'vpravo')], 'label': 'zarovnání'}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black_on_white', 'černá na bílé'), ('black_on_yellow', 'černá na žluté'), ('white_on_black', 'bílá na černé'), ('white_on_blue', 'bílá na modré'), ('white_on_cyan', 'bílá na tyrkysové'), ('white_on_violet', 'bílá na fialové')], 'label': 'barva'}), 3: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'group': '1. Text', 'label': 'Textový editor'}), 4: ('wagtail.blocks.StructBlock', [[('align', 1), ('color', 2), ('text', 3)]], {}), 5: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'levý sloupec'}), 6: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'pravý sloupec'}), 7: ('wagtail.blocks.StructBlock', [[('left_text', 5), ('right_text', 6)]], {}), 8: ('wagtail.blocks.CharBlock', (), {'label': 'Nadpis', 'max_length': 300, 'required': True}), 9: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('h1', 'H1'), ('h2', 'H2'), ('h3', 'H3'), ('h4', 'H4'), ('h5', 'H5'), ('h6', 'H6')], 'help_text': 'Čím nižší číslo, tím vyšší úroveň.', 'label': 'Úroveň nadpisu'}), 10: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('head-alt-xl', 'Velký, Bebas Neue - 6XL'), ('head-alt-lg', 'Střední, Bebas Neue - 4XL'), ('head-alt-md', 'Základní velikost - Roboto - MD'), ('head-alt-sm', 'Malý - Roboto - SM'), ('head-alt-xs', 'Extra malý - Roboto - XS')], 'help_text': 'Náhled si prohlédněte na https://styleguide2.pirati.cz/pattern/patterns/atoms/text/headings.html.', 'label': 'Velikost'}), 11: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('auto', 'Automaticky'), ('center', 'Na střed')], 'label': 'Zarovnání'}), 12: ('wagtail.blocks.StructBlock', [[('headline', 8), ('tag', 9), ('style', 10), ('align', 11)]], {}), 13: ('wagtail.blocks.CharBlock', (), {'label': 'nadpis'}), 14: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'rozměr na výšku 75px nebo více (obrázek bude zmenšen na výšku 75px)', 'label': 'obrázek'}), 15: ('wagtail.blocks.StructBlock', [[('color', 2), ('title', 13), ('picture', 14)]], {}), 16: ('wagtail.blocks.RichTextBlock', (), {'features': ['h2', 'h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], 'label': 'Odstavec'}), 17: ('wagtail.blocks.ListBlock', (16,), {'label': 'Odstavce'}), 18: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Rozměr 30x30px nebo více (obrázek bude zmenšen na 30x30px)', 'label': 'Obrázek'}), 19: ('wagtail.blocks.StructBlock', [[('color', 2), ('items', 17), ('picture', 18)]], {}), 20: ('wagtail.blocks.CharBlock', (), {'default': 'FEC900', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva pozadí'}), 21: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje pozadí. Nelze vybrat obě najednou.', 'label': 'Obrázek', 'required': False}), 22: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Nahrazuje obrázek. Nelze vybrat obě najednou.', 'label': 'Pozadí', 'required': False}), 23: ('wagtail.blocks.TextBlock', (), {'help_text': 'Řádkování je manuální.', 'label': 'Nadpis'}), 24: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': "Kód barvy lze vytvořit např. <a href='https://mdn.github.io/css-examples/tools/color-picker/' target='_blank'>zde</a>.", 'label': 'Barva textu'}), 25: ('wagtail.blocks.RichTextBlock', (), {'label': 'Obsah'}), 26: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud není vyplněn, tlačítko se neukáže.', 'label': 'Nadpis tlačítka', 'required': False}), 27: ('wagtail.blocks.CharBlock', (), {'label': 'Odkaz tlačítka', 'required': False}), 28: ('wagtail.blocks.StructBlock', [[('bg_color', 20), ('image', 21), ('background', 22), ('title', 23), ('title_color', 24), ('content', 25), ('button_text', 26), ('button_url', 27)]], {'label': 'Karta'}), 29: ('wagtail.blocks.ListBlock', (28,), {'label': 'Karty'}), 30: ('wagtail.blocks.StructBlock', [[('cards', 29)]], {}), 31: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Tabulka', 'template': 'styleguide2/includes/atoms/table/table.html'}), 32: ('wagtail.contrib.table_block.blocks.TableBlock', (), {'group': '3. Ostatní', 'label': 'Rozbalovací tabulka', 'template': 'styleguide2/includes/atoms/table/popout_table.html'}), 33: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'obrázek', 'required': True}), 34: ('wagtail.blocks.ListBlock', (33,), {'group': '3. Ostatní', 'icon': 'image', 'label': 'Galerie'}), 35: ('wagtail.blocks.StructBlock', [[('gallery_items', 34)]], {'label': 'Galerie'}), 36: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': True}), 37: ('wagtail.blocks.TextBlock', (), {'label': 'Popisek', 'required': False}), 38: ('wagtail.blocks.StructBlock', [[('img', 36), ('caption', 37)]], {}), 39: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Obrázek', 'required': False}), 40: ('wagtail.blocks.TextBlock', (), {'label': 'Titulek', 'required': False}), 41: ('wagtail.images.blocks.ImageChooserBlock', (), {'help_text': 'Není třeba vyplňovat, náhled bude dohledán automaticky.', 'label': 'Náhled videa (automatické pole)', 'required': False}), 42: ('wagtail.blocks.URLBlock', (), {'help_text': 'Odkaz na YouTube video bude automaticky zkonvertován na ID videa a NEBUDE uložen.', 'label': 'Odkaz na video', 'required': False}), 43: ('wagtail.blocks.CharBlock', (), {'help_text': 'Není třeba vyplňovat, bude automaticky načteno z odkazu.', 'label': 'ID videa (automatické pole)', 'required': False}), 44: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Pokud toto pole není zaškrtlé, video bude užší než text okolo.', 'label': 'Zabírá maximální šířku povolenou pro text?', 'required': True}), 45: ('wagtail.blocks.BooleanBlock', (), {'default': False, 'help_text': 'Automaticky spustí video bez zvuku. Pozor, některé prohlížeče blokují i automatické přehrávání videí bez zvuku.', 'label': 'Spustit video automaticky?', 'required': True}), 46: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {}), 47: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 50.04075', 'label': 'Zeměpisná šířka'}), 48: ('wagtail.blocks.DecimalBlock', (), {'help_text': 'Např. 15.77659', 'label': 'Zeměpisná délka'}), 49: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva špendlíku (HEX)'}), 50: ('wagtail.blocks.IntegerBlock', (), {'default': 15, 'label': 'Výchozí zoom', 'max_value': 18, 'min_value': 1}), 51: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('osm-mapnik', 'OSM Mapnik'), ('stadia-osm-bright', 'Stadia OSM Bright'), ('stadia-outdoors', 'Stadia Outdoors'), ('mapbox-streets', 'Mapbox Streets'), ('mapbox-outdoors', 'Mapbox Outdoors'), ('mapbox-light', 'Mapbox Light'), ('mapbox-dark', 'Mapbox Dark'), ('mapbox-satellite', 'Mapbox Satellite'), ('mapbox-pirate', 'Mapbox Pirate Theme')], 'label': 'Styl'}), 52: ('wagtail.blocks.IntegerBlock', (), {'label': 'Výška v px', 'max_value': 1000, 'min_value': 100}), 53: ('wagtail.blocks.StructBlock', [[('lat', 47), ('lon', 48), ('hex_color', 49), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Špendlík na mapě'}), 54: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'required': True}), 55: ('wagtail.blocks.TextBlock', (), {'help_text': "Vložte surový GeoJSON objekt typu 'Feature'. Vyrobit jej můžete např. pomocí online služby geojson.io. Pokud u objektu poskytnete properties 'title' a 'description', zobrazí se jak na mapě, tak i v detailu.", 'label': 'Geodata', 'required': True}), 56: ('wagtail.blocks.URLBlock', (), {'label': 'Odkaz', 'required': False}), 57: ('wagtail.blocks.CharBlock', (), {'default': '000000', 'help_text': 'Zadejte barvu pomocí HEX notace (bez # na začátku).', 'label': 'Barva (HEX)'}), 58: ('wagtail.blocks.StructBlock', [[('title', 54), ('description', 37), ('geojson', 55), ('image', 39), ('link', 56), ('hex_color', 57)]], {'required': True}), 59: ('wagtail.blocks.ListBlock', (58,), {'label': 'Součásti'}), 60: ('wagtail.blocks.StructBlock', [[('features', 59), ('zoom', 50), ('style', 51), ('height', 52)]], {'label': 'Mapová kolekce'}), 61: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60)]], {'label': 'Obsah', 'required': False}), 62: ('wagtail.blocks.PageChooserBlock', (), {'label': 'Stránka', 'required': False}), 63: ('wagtail.blocks.StructBlock', [[('img', 39), ('headline', 40), ('content', 61), ('page', 62), ('link', 56)]], {}), 64: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'max_length': 128, 'required': True}), 65: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('black', 'Černá'), ('white', 'Bílá'), ('pirati-yellow', 'Žlutá'), ('grey-125', 'Světle šedá'), ('blue-300', 'Modrá'), ('cyan-200', 'Tyrkysová'), ('green-400', 'Zelená'), ('violet-400', 'Vínová'), ('red-600', 'Červená')], 'label': 'Barva'}), 66: ('wagtail.blocks.BooleanBlock', (), {'default': True, 'help_text': 'Pokud je zapnuto, tlačítko při najetí kurzorem ukáže žlutou šipku.', 'label': 'Animovat na hover', 'required': False}), 67: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('normal', 'Normální'), ('large', 'Velká'), ('huge', 'Masivní')], 'label': 'Velikost tlačítka'}), 68: ('wagtail.blocks.StructBlock', [[('title', 64), ('color', 65), ('hoveractive', 66), ('page', 62), ('link', 56), ('align', 11), ('size', 67)]], {}), 69: ('wagtail.blocks.ListBlock', (68,), {'label': 'Tlačítka'}), 70: ('wagtail.blocks.StructBlock', [[('buttons', 69)]], {}), 71: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah levého sloupce', 'required': True}), 72: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah pravého sloupce', 'required': True}), 73: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('right_column_content', 72)]], {}), 74: ('wagtail.blocks.StreamBlock', [[('text', 3), ('table', 31), ('card', 63), ('figure', 38), ('youtube', 46), ('map_point', 53), ('map_collection', 60), ('button', 68), ('button_group', 70)]], {'label': 'Obsah prostředního sloupce', 'required': True}), 75: ('wagtail.blocks.StructBlock', [[('left_column_content', 71), ('middle_column_content', 74), ('right_column_content', 72)]], {}), 76: ('wagtail.blocks.StructBlock', [[('poster_image', 41), ('video_url', 42), ('video_id', 43), ('is_full_width', 44), ('autoplay', 45)]], {'label': 'YouTube video'}), 77: ('wagtail.blocks.CharBlock', (), {'label': 'Název', 'required': True}), 78: ('wagtail.blocks.StreamBlock', [[('text', 0), ('headline', 12), ('table', 31)]], {'label': 'Obsah'}), 79: ('wagtail.blocks.StructBlock', [[('name', 77), ('content', 78)]], {}), 80: ('wagtail.blocks.CharBlock', (), {'label': 'Titulek', 'required': False}), 81: ('wagtail.blocks.static_block.StaticBlock', (), {'admin_text': 'Adresa kalendáře se zadává v nastavení hlavní stránky webu', 'label': 'Volba kalendáře'}), 82: ('wagtail.blocks.StructBlock', [[('title', 80), ('info', 81)]], {}), 83: ('wagtail.blocks.CharBlock', (), {'help_text': 'Pokud toto pole zůstane nevyplněné, použije se nastavení tohoto webu. V takovém případě se může přidat i odběratel do Ecomailu.', 'label': 'ID newsletteru v Mailtrainu', 'required': False}), 84: ('wagtail.blocks.CharBlock', (), {'default': 'Odebírej náš', 'label': 'Nadpis bloku (1. řádek)', 'required': True}), 85: ('wagtail.blocks.CharBlock', (), {'default': 'newsletter', 'label': 'Nadpis bloku (2. řádek)', 'required': True}), 86: ('wagtail.blocks.CharBlock', (), {'default': 'Fake news tam nenajdeš, ale dozvíš se, co chystáme doopravdy!', 'label': 'Popis newsletteru', 'required': True}), 87: ('wagtail.blocks.StructBlock', [[('list_id', 83), ('title_line_1', 84), ('title_line_2', 85), ('description', 86)]], {}), 88: ('wagtail.blocks.CharBlock', (), {'help_text': 'Nejnovější články se načtou automaticky', 'label': 'Titulek'}), 89: ('wagtail.blocks.TextBlock', (), {'label': 'Popis', 'required': False}), 90: ('wagtail.blocks.StructBlock', [[('title', 88), ('description', 89)]], {'group': '3. Ostatní', 'template': 'styleguide2/includes/organisms/articles/district/articles_section.html'})}, verbose_name='obsah stránky'),
+        ),
+    ]