core-maugli 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +29 -15
  2. package/package.json +6 -13
  3. package/public/img/examples/blog/previews/post-1-avtomatizaciya-marketinga-kak-ii-osvobozhdaet-predprinimatelei-ot-cifrovogo-rabstva.webp +0 -0
  4. package/public/img/examples/blog/previews/post-2-avtomatizaciya-kontenta-kak-neiroseti-ubivayut-perfekcionizm-v-biznese.webp +0 -0
  5. package/public/img/examples/blog/previews/post-3-laik-ne-valyuta-kak-avtomatizaciya-marketinga-spasaet-ot-lozhnyh-metrik.webp +0 -0
  6. package/public/img/examples/blog/previews/post-5-5-fatalnyh-oshibok-marketinga-kotorye-ubivayut-startapy-na-starte.webp +0 -0
  7. package/public/img/examples/blog/previews/post-6-5-strategii-kontent-marketinga-dlya-startapov-avtomatizaciya-i-revolyuciya.webp +0 -0
  8. package/public/img/examples/blog/previews/post-7-viralnyi-kontent-ne-udacha-a-strategiya-avtomatizaciya-marketinga.webp +0 -0
  9. package/public/img/examples/blog/previews/post-agent-experience-mcp-biznes-v-epohu-ii-agentov.webp +0 -0
  10. package/public/img/examples/blog/previews/post_11.webp +0 -0
  11. package/public/img/examples/blog/previews/post_12.webp +0 -0
  12. package/public/img/examples/blog/previews/post_1_jsonld_guide.webp +0 -0
  13. package/public/img/examples/blog/previews/test-post.webp +0 -0
  14. package/public/img/examples/blog/previews/tr-post-1.webp +0 -0
  15. package/public/img/examples/products/previews/product_1.webp +0 -0
  16. package/public/img/examples/products/previews/product_2.webp +0 -0
  17. package/public/img/examples/projects/previews/project_1.webp +0 -0
  18. package/public/img/examples/projects/previews/project_2.webp +0 -0
  19. package/scripts/generate-previews.js +175 -0
  20. package/scripts/update-components.js +166 -0
  21. package/scripts/upgrade-config.js +23 -3
  22. package/src/components/LanguageSwitcher.astro +2 -16
  23. package/astro.config.mjs +0 -92
  24. package/bin/init.js +0 -201
  25. package/public/img/default/autor_default.webp +0 -0
  26. package/public/img/default/blog_default.webp +0 -0
  27. package/public/img/default/default.webp +0 -0
  28. package/public/img/default/product_default.webp +0 -0
  29. package/public/img/default/project_default.webp +0 -0
  30. package/public/img/default/rubric_default.webp +0 -0
  31. package/public/img/default/test.webp +0 -0
  32. package/public/img/default/test2.webp +0 -0
  33. package/resize-all.cjs +0 -29
  34. package/src/i18n/de.json +0 -126
  35. package/src/i18n/en.json +0 -126
  36. package/src/i18n/es.json +0 -126
  37. package/src/i18n/fr.json +0 -126
  38. package/src/i18n/index.ts +0 -10
  39. package/src/i18n/ja.json +0 -126
  40. package/src/i18n/languages.ts +0 -23
  41. package/src/i18n/pt.json +0 -126
  42. package/src/i18n/ru.json +0 -123
  43. package/src/i18n/zh.json +0 -126
  44. package/src/icons/ArrowLeft.astro +0 -13
  45. package/src/icons/ArrowRight.astro +0 -13
  46. package/src/icons/flags/brazil.svg +0 -14
  47. package/src/icons/flags/china.svg +0 -15
  48. package/src/icons/flags/france.svg +0 -12
  49. package/src/icons/flags/germany.svg +0 -12
  50. package/src/icons/flags/japan.svg +0 -11
  51. package/src/icons/flags/russia.svg +0 -12
  52. package/src/icons/flags/spain.svg +0 -12
  53. package/src/icons/flags/united arab emirates.svg +0 -13
  54. package/src/icons/flags/united states.svg +0 -15
  55. package/src/icons/socials/BlueskyIcon.astro +0 -9
  56. package/src/icons/socials/EmailIcon.astro +0 -8
  57. package/src/icons/socials/LinkedinIcon.astro +0 -9
  58. package/src/icons/socials/MastodonIcon.astro +0 -9
  59. package/src/icons/socials/MediumIcon.astro +0 -9
  60. package/src/icons/socials/RedditIcon.astro +0 -11
  61. package/src/icons/socials/TelegramIcon.astro +0 -11
  62. package/src/icons/socials/TwitterIcon.astro +0 -9
  63. package/src/layouts/BaseLayout.astro +0 -59
  64. package/src/pages/404.astro +0 -24
  65. package/src/pages/[...id].astro +0 -50
  66. package/src/pages/about.astro +0 -0
  67. package/src/pages/authors/[...page].astro +0 -105
  68. package/src/pages/authors/[id].astro +0 -175
  69. package/src/pages/blog/[...page].astro +0 -59
  70. package/src/pages/blog/[id].astro +0 -175
  71. package/src/pages/index.astro +0 -90
  72. package/src/pages/products/[...page].astro +0 -50
  73. package/src/pages/products/[id].astro +0 -221
  74. package/src/pages/projects/[...page].astro +0 -74
  75. package/src/pages/projects/[id].astro +0 -165
  76. package/src/pages/projects/tags/[id]/[...page].astro +0 -58
  77. package/src/pages/rss.xml.js +0 -5
  78. package/src/pages/tags/[id]/[...page].astro +0 -110
  79. package/src/pages/tags/index.astro +0 -124
  80. package/src/scripts/infoCardFadeIn.js +0 -22
  81. package/src/styles/global.css +0 -273
  82. package/src/utils/common-utils.ts +0 -0
  83. package/src/utils/content-loader.ts +0 -14
  84. package/src/utils/data-utils.ts +0 -49
  85. package/src/utils/featuredManager.ts +0 -118
  86. package/src/utils/posts.ts +0 -43
  87. package/src/utils/reading-time.ts +0 -28
  88. package/src/utils/remark-slugify.js +0 -8
  89. package/src/utils/rss.ts +0 -23
  90. package/tsconfig.json +0 -8
  91. package/typograf-batch.js +0 -49
  92. package/vite.config.js +0 -11
package/src/i18n/zh.json DELETED
@@ -1,126 +0,0 @@
1
- {
2
- "buttons": {
3
- "share": "分享",
4
- "subscribe": "订阅",
5
- "moreAboutProduct": "更多产品信息",
6
- "copied": "已复制!",
7
- "copyLink": "复制链接",
8
- "copyLinkToArticle": "复制文章链接",
9
- "morePosts": "更多文章"
10
- },
11
- "form": {
12
- "emailPlaceholder": "电子邮件",
13
- "emailLabel": "电子邮件",
14
- "subscribeAriaLabel": "订阅表单"
15
- },
16
-
17
- "nav": {
18
- "blog": "博客",
19
- "products": "产品",
20
- "projects": "案例",
21
- "authors": "作者",
22
- "tags": "主题",
23
- "openMenu": "打开菜单",
24
- "closeMenu": "关闭菜单"
25
- },
26
- "pages": {
27
- "authors": {
28
- "title": "作者",
29
- "description": "认识为 {brand} 撰稿的专家团队",
30
- "goToAuthor": "前往作者",
31
- "avatarAlt": "头像",
32
- "onPlatform": "在"
33
- },
34
- "tags": {
35
- "title": "分类",
36
- "description": "按类别查看所有文章",
37
- "blogRubrics": "博客分类"
38
- },
39
- "index": {
40
- "title": "<博客>",
41
- "description": "关于自动化的 AI 视角博客",
42
- "articles": "文章",
43
- "minutes": "分钟"
44
- },
45
- "products": {
46
- "title": "产品",
47
- "description": "所有 Maugli 产品"
48
- },
49
- "projects": {
50
- "tagTitle": "按标签的服务",
51
- "title": "服务"
52
- },
53
- "blog": {
54
- "moreByTag": "更多相关主题"
55
- },
56
- "productsId": {
57
- "articlesByTag": "相关文章",
58
- "casesByTag": "相关案例"
59
- }
60
- },
61
- "socials": {
62
- "email": "电子邮件",
63
- "linkedin": "LinkedIn",
64
- "twitter": "Twitter",
65
- "telegram": "Telegram",
66
- "reddit": "Reddit",
67
- "medium": "Medium",
68
- "mastodon": "Mastodon",
69
- "bluesky": "Bluesky"
70
- },
71
- "footer": {
72
- "allRightsReserved": "版权所有"
73
- },
74
- "shareIconAriaLabel": {
75
- "twitter": "分享到 Twitter",
76
- "copy": "复制链接",
77
- "telegram": "分享到 Telegram",
78
- "linkedin": "分享到 LinkedIn",
79
- "whatsapp": "分享到 WhatsApp",
80
- "facebook": "分享到 Facebook",
81
- "copied": "链接已复制"
82
- },
83
- "date": {
84
- "today": "今天",
85
- "yesterday": "昨天"
86
- },
87
- "sidebarAriaLabel": "侧边栏",
88
- "summaryFAQCard": {
89
- "ariaLabel": "摘要和常见问题",
90
- "summaryLabel": "摘要:",
91
- "faqLabel": "常见问题:"
92
- },
93
- "tableOfContents": {
94
- "title": "目录",
95
- "ariaLabel": "目录"
96
- },
97
- "tagPill": {
98
- "ariaLabel": "标签:{tag}"
99
- },
100
- "tagPills": {
101
- "ariaLabel": "标签:{name} ({count})"
102
- },
103
- "tagsSection": {
104
- "allCases": "所有案例",
105
- "allArticles": "所有文章",
106
- "allTags": "所有标签",
107
- "rubricAlt": "分类",
108
- "tagAriaLabel": "标签:{name} ({count})"
109
- },
110
- "themeToggle": {
111
- "ariaLabel": "切换颜色模式"
112
- },
113
- "pagination": {
114
- "goToPage": "跳转到第 {page} 页,共 {lastPage} 页",
115
- "pageOf": "第 {currentPage} 页,共 {lastPage} 页"
116
- },
117
- "subscribe": {
118
- "heading": "订阅更新",
119
- "mutedText": "第一时间获取最新文章和新闻!"
120
- },
121
- "notFound": {
122
- "title": "未找到页面",
123
- "description": "抱歉,此页面不存在或已被删除。",
124
- "button": "返回首页"
125
- }
126
- }
@@ -1,13 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from 'astro/types';
3
-
4
- type Props = HTMLAttributes<'svg'>;
5
-
6
- const { class: className, ...props } = Astro.props;
7
- ---
8
-
9
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class={className} {...props}>
10
- <path
11
- d="M19.714 12c0 0.533-0.432 0.964-0.964 0.964v0h-11.172l4.14 4.138c0.175 0.175 0.283 0.416 0.283 0.683 0 0.533-0.432 0.965-0.965 0.965-0.267 0-0.508-0.108-0.683-0.283v0l-5.785-5.785c-0.175-0.175-0.283-0.416-0.283-0.683s0.108-0.508 0.283-0.683l5.785-5.785c0.175-0.175 0.416-0.283 0.683-0.283 0.533 0 0.965 0.432 0.965 0.965 0 0.267-0.108 0.508-0.283 0.683v0l-4.14 4.138h11.172c0.533 0 0.964 0.432 0.964 0.964v0z"
12
- ></path>
13
- </svg>
@@ -1,13 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from 'astro/types';
3
-
4
- type Props = HTMLAttributes<'svg'>;
5
-
6
- const { class: className, ...props } = Astro.props;
7
- ---
8
-
9
- <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class={className} {...props}>
10
- <path
11
- d="M4.286 12c0-0.533 0.432-0.964 0.964-0.964v0h11.172l-4.14-4.138c-0.175-0.175-0.283-0.416-0.283-0.683 0-0.533 0.432-0.965 0.965-0.965 0.267 0 0.508 0.108 0.683 0.283v0l5.785 5.785c0.175 0.175 0.283 0.416 0.283 0.683s-0.108 0.508-0.283 0.683l-5.785 5.785c-0.175 0.175-0.416 0.283-0.683 0.283-0.533 0-0.965-0.432-0.965-0.965 0-0.267 0.108-0.508 0.283-0.683v0l4.14-4.138h-11.172c-0.533 0-0.964-0.432-0.964-0.964v0z"
12
- ></path>
13
- </svg>
@@ -1,14 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_105_27)">
3
- <path d="M256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512Z" fill="#6DA544"/>
4
- <path d="M255.999 100.174L467.477 256L255.999 411.826L44.5215 256L255.999 100.174Z" fill="#FFDA44"/>
5
- <path d="M256 345.043C305.177 345.043 345.043 305.177 345.043 256C345.043 206.823 305.177 166.957 256 166.957C206.823 166.957 166.957 206.823 166.957 256C166.957 305.177 206.823 345.043 256 345.043Z" fill="#F0F0F0"/>
6
- <path d="M211.477 250.435C195.993 250.435 181.05 252.79 166.984 257.16C167.607 305.8 207.211 345.044 255.999 345.044C286.167 345.044 312.811 330.027 328.918 307.076C301.361 272.579 258.96 250.435 211.477 250.435V250.435Z" fill="#0052B4"/>
7
- <path d="M343.392 273.06C344.464 267.536 345.043 261.837 345.043 256C345.043 206.822 305.177 166.957 256 166.957C219.306 166.957 187.806 189.158 174.174 220.856C186.224 218.359 198.7 217.044 211.479 217.044C263.196 217.043 309.982 238.541 343.392 273.06V273.06Z" fill="#0052B4"/>
8
- </g>
9
- <defs>
10
- <clipPath id="clip0_105_27">
11
- <rect width="512" height="512" fill="white"/>
12
- </clipPath>
13
- </defs>
14
- </svg>
@@ -1,15 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_105_19)">
3
- <path d="M256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512Z" fill="#D80027"/>
4
- <path d="M140.1 155.8L162.2 223.8H233.7L175.9 265.9L198 333.9L140.1 291.9L82.2 333.9L104.4 265.9L46.5 223.8H118L140.1 155.8Z" fill="#FFDA44"/>
5
- <path d="M303.499 396.5L286.599 375.7L261.599 385.4L276.099 362.9L259.199 342L285.099 348.9L299.699 326.4L301.099 353.2L327.099 360.1L301.999 369.7L303.499 396.5Z" fill="#FFDA44"/>
6
- <path d="M337.099 335.5L345.099 309.9L323.199 294.4L349.999 294L357.899 268.4L366.599 293.8L393.399 293.5L371.899 309.5L380.499 334.9L358.599 319.4L337.099 335.5Z" fill="#FFDA44"/>
7
- <path d="M382.401 187.9L370.601 212L389.801 230.7L363.301 226.9L351.501 250.9L346.901 224.5L320.301 220.7L344.101 208.2L339.501 181.7L358.701 200.4L382.401 187.9Z" fill="#FFDA44"/>
8
- <path d="M304.2 114.9L302.2 141.6L327.1 151.7L301 158.1L299.1 184.9L285 162.1L258.9 168.5L276.2 148L262 125.3L286.9 135.4L304.2 114.9Z" fill="#FFDA44"/>
9
- </g>
10
- <defs>
11
- <clipPath id="clip0_105_19">
12
- <rect width="512" height="512" fill="white"/>
13
- </clipPath>
14
- </defs>
15
- </svg>
@@ -1,12 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_105_34)">
3
- <path d="M256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512Z" fill="#F0F0F0"/>
4
- <path d="M512 256C512 145.929 442.528 52.094 345.043 15.923V496.078C442.528 459.906 512 366.071 512 256V256Z" fill="#D80027"/>
5
- <path d="M0 256C0 366.071 69.473 459.906 166.957 496.077V15.923C69.473 52.094 0 145.929 0 256Z" fill="#0052B4"/>
6
- </g>
7
- <defs>
8
- <clipPath id="clip0_105_34">
9
- <rect width="512" height="512" fill="white"/>
10
- </clipPath>
11
- </defs>
12
- </svg>
@@ -1,12 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3719_7205)">
3
- <path d="M15.9238 345.043C52.0948 442.527 145.93 512 256.001 512C366.072 512 459.907 442.527 496.078 345.043L256.001 322.783L15.9238 345.043Z" fill="#FFDA44"/>
4
- <path d="M256.001 0C145.93 0 52.0948 69.472 15.9238 166.957L256.001 189.217L496.078 166.956C459.907 69.472 366.072 0 256.001 0Z" fill="black"/>
5
- <path d="M15.923 166.957C5.633 194.69 0 224.686 0 256C0 287.314 5.633 317.31 15.923 345.043H496.078C506.368 317.31 512 287.314 512 256C512 224.686 506.368 194.69 496.077 166.957H15.923Z" fill="#D80027"/>
6
- </g>
7
- <defs>
8
- <clipPath id="clip0_3719_7205">
9
- <rect width="512" height="512" fill="white"/>
10
- </clipPath>
11
- </defs>
12
- </svg>
@@ -1,11 +0,0 @@
1
- <svg width="512" height="513" viewBox="0 0 512 513" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_105_38)">
3
- <path d="M256 512.989C397.385 512.989 512 398.374 512 256.989C512 115.604 397.385 0.989258 256 0.989258C114.615 0.989258 0 115.604 0 256.989C0 398.374 114.615 512.989 256 512.989Z" fill="#F0F0F0"/>
4
- <path d="M255.999 368.293C317.471 368.293 367.303 318.461 367.303 256.989C367.303 195.518 317.471 145.685 255.999 145.685C194.528 145.685 144.695 195.518 144.695 256.989C144.695 318.461 194.528 368.293 255.999 368.293Z" fill="#D80027"/>
5
- </g>
6
- <defs>
7
- <clipPath id="clip0_105_38">
8
- <rect width="512" height="512" fill="white" transform="translate(0 0.989258)"/>
9
- </clipPath>
10
- </defs>
11
- </svg>
@@ -1,12 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3719_7207)">
3
- <path d="M256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512Z" fill="#F0F0F0"/>
4
- <path d="M496.077 345.043C506.368 317.31 512 287.314 512 256C512 224.686 506.368 194.69 496.077 166.957H15.923C5.633 194.69 0 224.686 0 256C0 287.314 5.633 317.31 15.923 345.043L256 367.304L496.077 345.043Z" fill="#0052B4"/>
5
- <path d="M256.001 512C366.072 512 459.907 442.528 496.078 345.043H15.9238C52.0948 442.528 145.93 512 256.001 512Z" fill="#D80027"/>
6
- </g>
7
- <defs>
8
- <clipPath id="clip0_3719_7207">
9
- <rect width="512" height="512" fill="white"/>
10
- </clipPath>
11
- </defs>
12
- </svg>
@@ -1,12 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3719_7208)">
3
- <path d="M0 255.999C0 287.313 5.633 317.309 15.923 345.042L256 367.303L496.077 345.042C506.367 317.309 512 287.313 512 255.999C512 224.685 506.367 194.689 496.077 166.956L256 144.695L15.923 166.956C5.633 194.689 0 224.685 0 255.999H0Z" fill="#FFDA44"/>
4
- <path d="M496.078 166.957C459.907 69.473 366.072 0 256.001 0C145.93 0 52.0948 69.473 15.9238 166.957H496.078Z" fill="#D80027"/>
5
- <path d="M15.9238 345.043C52.0948 442.527 145.93 512 256.001 512C366.072 512 459.907 442.527 496.078 345.043H15.9238Z" fill="#D80027"/>
6
- </g>
7
- <defs>
8
- <clipPath id="clip0_3719_7208">
9
- <rect width="512" height="512" fill="white"/>
10
- </clipPath>
11
- </defs>
12
- </svg>
@@ -1,13 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_105_41)">
3
- <path d="M256 511.999C397.385 511.999 512 397.384 512 255.999C512 114.614 397.385 -0.000976562 256 -0.000976562C114.615 -0.000976562 0 114.614 0 255.999C0 397.384 114.615 511.999 256 511.999Z" fill="#F0F0F0"/>
4
- <path d="M144.695 345.042L166.956 496.078C194.688 506.369 224.685 511.999 255.999 511.999C366.069 511.999 459.905 442.527 496.075 345.042H144.695Z" fill="black"/>
5
- <path d="M144.695 166.956L166.956 15.92C194.688 5.62902 224.685 -0.000976562 255.999 -0.000976562C366.069 -0.000976562 459.905 69.471 496.075 166.956H144.695Z" fill="#6DA544"/>
6
- <path d="M0 255.999C0 366.07 69.473 459.905 166.957 496.076V15.9221C69.473 52.0931 0 145.928 0 255.999Z" fill="#A2001D"/>
7
- </g>
8
- <defs>
9
- <clipPath id="clip0_105_41">
10
- <rect width="512" height="512" fill="white" transform="translate(0 -0.000976562)"/>
11
- </clipPath>
12
- </defs>
13
- </svg>
@@ -1,15 +0,0 @@
1
- <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <g clip-path="url(#clip0_3719_7206)">
3
- <path d="M256 512C397.385 512 512 397.385 512 256C512 114.615 397.385 0 256 0C114.615 0 0 114.615 0 256C0 397.385 114.615 512 256 512Z" fill="#F0F0F0"/>
4
- <path d="M244.869 256H511.999C511.999 232.894 508.919 210.51 503.18 189.217H244.869V256Z" fill="#D80027"/>
5
- <path d="M244.869 122.435H474.425C458.754 96.8633 438.717 74.2603 415.355 55.6523H244.869V122.435Z" fill="#D80027"/>
6
- <path d="M255.999 512C316.248 512 371.625 491.176 415.355 456.348H96.6426C140.373 491.176 195.75 512 255.999 512Z" fill="#D80027"/>
7
- <path d="M37.5734 389.566H474.425C487.006 369.037 496.763 346.597 503.18 322.783H8.81836C15.2354 346.597 24.9924 369.037 37.5734 389.566V389.566Z" fill="#D80027"/>
8
- <path d="M118.584 39.978H141.913L120.213 55.743L128.502 81.252L106.803 65.487L85.104 81.252L92.264 59.215C73.158 75.13 56.412 93.776 42.612 114.552H50.087L36.274 124.587C34.122 128.177 32.058 131.824 30.08 135.525L36.676 155.826L24.37 146.885C21.311 153.366 18.513 159.993 15.998 166.758L23.265 189.126H50.087L28.387 204.891L36.676 230.4L14.977 214.635L1.979 224.079C0.678 234.537 0 245.189 0 256H256C256 114.616 256 97.948 256 0C205.428 0 158.285 14.67 118.584 39.978V39.978ZM128.502 230.4L106.803 214.635L85.104 230.4L93.393 204.891L71.693 189.126H98.515L106.803 163.617L115.091 189.126H141.913L120.213 204.891L128.502 230.4ZM120.213 130.317L128.502 155.826L106.803 140.061L85.104 155.826L93.393 130.317L71.693 114.552H98.515L106.803 89.043L115.091 114.552H141.913L120.213 130.317ZM220.328 230.4L198.629 214.635L176.93 230.4L185.219 204.891L163.519 189.126H190.341L198.629 163.617L206.917 189.126H233.739L212.039 204.891L220.328 230.4ZM212.039 130.317L220.328 155.826L198.629 140.061L176.93 155.826L185.219 130.317L163.519 114.552H190.341L198.629 89.043L206.917 114.552H233.739L212.039 130.317ZM212.039 55.743L220.328 81.252L198.629 65.487L176.93 81.252L185.219 55.743L163.519 39.978H190.341L198.629 14.469L206.917 39.978H233.739L212.039 55.743Z" fill="#0052B4"/>
9
- </g>
10
- <defs>
11
- <clipPath id="clip0_3719_7206">
12
- <rect width="512" height="512" fill="white"/>
13
- </clipPath>
14
- </defs>
15
- </svg>
@@ -1,9 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 28 28" fill="currentColor" {...rest}>
6
- <path
7
- d="M7.20236 5.41348C9.95373 7.46657 12.9137 11.6288 14 13.8625V19.762C14 19.6365 13.9512 19.7784 13.8463 20.0841C13.2792 21.7393 11.0644 28.1994 6.00012 23.035C3.33351 20.3159 4.56801 17.5967 9.42206 16.7758C6.64512 17.2453 3.52325 16.4694 2.66677 13.427C2.42 12.5519 2 7.16122 2 6.43315C2 2.78612 5.21712 3.93245 7.20236 5.41348ZM20.7976 5.41348C18.0463 7.46657 15.0863 11.6288 14 13.8625V19.762C14 19.6365 14.0487 19.7784 14.1537 20.0841C14.7206 21.7393 16.9354 28.1994 21.9997 23.035C24.6664 20.3159 23.432 17.5967 18.5779 16.7758C21.3547 17.2453 24.4767 16.4694 25.3331 13.427C25.58 12.5519 26 7.16122 26 6.43315C26 2.78612 22.7832 3.93245 20.7976 5.41348Z"
8
- ></path>
9
- </svg>
@@ -1,8 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" {...rest}>
6
- <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
7
- <polyline points="22,6 12,13 2,6"></polyline>
8
- </svg>
@@ -1,9 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 24 24" fill="currentColor" {...rest}>
6
- <path
7
- d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"
8
- ></path>
9
- </svg>
@@ -1,9 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 28 28" fill="currentColor" {...rest}>
6
- <path
7
- d="M3.00384 9.88076C3.00384 16.0778 2.65684 23.7748 8.56284 25.3668C10.6948 25.9408 12.5268 26.0628 14.0008 25.9768C16.6748 25.8268 18.1758 25.0078 18.1758 25.0078L18.0858 23.0308C18.0858 23.0308 16.1748 23.6408 14.0268 23.5708C11.8998 23.4958 9.65684 23.3358 9.30984 20.6788C9.27784 20.4438 9.26284 20.1968 9.26284 19.9338C13.7698 21.0538 17.6118 20.4218 18.6708 20.2928C21.6248 19.9338 24.1988 18.0808 24.5258 16.3878C25.0408 13.7208 24.9998 9.87976 24.9998 9.87976C24.9998 4.67376 21.6468 3.14676 21.6468 3.14676C18.3558 1.60976 9.61784 1.62576 6.35884 3.14676C6.35684 3.14876 3.00384 4.67476 3.00384 9.88076ZM7.92684 7.21376C9.28984 5.66576 12.1278 5.56376 13.3918 7.54076L14.0028 8.58476L14.6138 7.54076C15.8828 5.55376 18.7258 5.67676 20.0788 7.21376C21.3268 8.67676 21.0478 10.0518 21.0478 16.5868H21.0458H18.5928V10.4708C18.5928 7.80876 15.2238 7.70676 15.2238 10.8398V14.1878H12.7868V10.8398C12.7868 7.70676 9.41784 7.80876 9.41784 10.4708V16.5878H6.95884C6.95884 10.0478 6.68484 8.66576 7.92684 7.21376Z"
8
- ></path>
9
- </svg>
@@ -1,9 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 24 24" fill="currentColor" {...rest}>
6
- <path
7
- d="M13.54 12a6.8 6.8 0 01-6.77 6.82A6.8 6.8 0 010 12a6.8 6.8 0 016.77-6.82A6.8 6.8 0 0113.54 12zM20.96 12c0 3.54-1.51 6.42-3.38 6.42-1.87 0-3.39-2.88-3.39-6.42s1.52-6.42 3.39-6.42 3.38 2.88 3.38 6.42M24 12c0 3.17-.53 5.75-1.19 5.75-.66 0-1.19-2.58-1.19-5.75s.53-5.75 1.19-5.75C23.47 6.25 24 8.83 24 12z"
8
- ></path>
9
- </svg>
@@ -1,11 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 28 28" fill="currentColor" {...rest}>
6
- <path
7
- fillRule="evenodd"
8
- clipRule="evenodd"
9
- d="M17.57 17.7956C16.673 17.7956 15.919 16.9304 15.919 15.8636C15.919 14.7974 16.673 13.9034 17.57 13.9034C18.467 13.9034 19.1945 14.7974 19.1945 15.8636C19.1945 16.9304 18.467 17.7956 17.57 17.7956ZM17.951 21.5444C17.1155 22.5374 15.827 23.0198 14.012 23.0198L13.9995 23.0186L13.9865 23.0198C12.1715 23.0198 10.884 22.5374 10.049 21.5444C9.9881 21.4724 9.93972 21.3866 9.90671 21.292C9.87369 21.1974 9.85669 21.0959 9.85669 20.9933C9.85669 20.8907 9.87369 20.7892 9.90671 20.6946C9.93972 20.5999 9.9881 20.5142 10.049 20.4422C10.1725 20.296 10.339 20.214 10.5125 20.214C10.686 20.214 10.8525 20.296 10.976 20.4422C11.552 21.1274 12.5365 21.461 13.9865 21.461L13.9995 21.4616L14.012 21.461C15.462 21.461 16.447 21.1274 17.024 20.4422C17.1474 20.2959 17.314 20.2138 17.4875 20.2138C17.661 20.2138 17.8275 20.2959 17.951 20.4422C18.2065 20.7476 18.2065 21.2402 17.951 21.5444ZM8.80551 15.8636C8.80551 14.798 9.55801 13.9034 10.454 13.9034C11.351 13.9034 12.0785 14.798 12.0785 15.8636C12.0785 16.9304 11.351 17.7956 10.454 17.7956C9.55751 17.7956 8.80551 16.9304 8.80551 15.8636ZM21.998 3.55881C22.6055 3.55881 23.0995 4.14682 23.0995 4.86802C23.0978 5.21684 22.9809 5.55061 22.7744 5.79614C22.5679 6.04168 22.2887 6.17893 21.998 6.17781C21.7073 6.17893 21.4281 6.04168 21.2216 5.79614C21.0151 5.55061 20.8982 5.21684 20.8965 4.86802C20.8965 4.14682 21.3905 3.55881 21.998 3.55881ZM26 13.742C26 11.8508 24.7065 10.3124 23.1155 10.3124C22.454 10.3114 21.8124 10.5832 21.298 11.0822C19.5395 9.76762 17.3075 8.97559 14.915 8.80819L16.163 4.11619L19.593 5.07621C19.683 6.56181 20.7265 7.73721 21.998 7.73721C23.328 7.73721 24.41 6.45022 24.41 4.86802C24.41 3.28702 23.3275 2 21.998 2C21.5573 1.99952 21.1248 2.1436 20.7474 2.41664C20.37 2.68968 20.0619 3.08128 19.8565 3.54918L15.8715 2.43319C15.7111 2.38757 15.5422 2.41613 15.3986 2.51321C15.255 2.61028 15.1471 2.76873 15.0965 2.95698L13.547 8.78062C10.969 8.85502 8.54599 9.65 6.65799 11.0408C6.15081 10.568 5.52672 10.3117 4.88449 10.3124C3.29349 10.3124 2 11.8508 2 13.742C2 14.9114 2.495 15.9452 3.2485 16.5638C3.217 16.8362 3.20099 17.1098 3.20099 17.387C3.20099 19.751 4.35649 21.9506 6.45499 23.579C8.46649 25.1402 11.129 26 13.9515 26C16.7735 26 19.436 25.1402 21.4475 23.579C23.546 21.9506 24.702 19.751 24.702 17.387C24.702 17.135 24.6875 16.8842 24.661 16.6352C25.4655 16.0262 26 14.957 26 13.742Z"
10
- ></path>
11
- </svg>
@@ -1,11 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 28 28" fill="currentColor" {...rest}>
6
- <path
7
- fillRule="evenodd"
8
- clipRule="evenodd"
9
- d="M1.78736 13.4709C8.76667 10.3661 13.4206 8.31934 15.7493 7.33042C22.398 4.50685 23.7795 4.01637 24.68 4.00017C24.878 3.99661 25.3208 4.04673 25.6077 4.28437C25.8499 4.48504 25.9165 4.75611 25.9484 4.94636C25.9803 5.13661 26.02 5.57001 25.9884 5.90866C25.6281 9.7739 24.0692 19.1538 23.276 23.483C22.9404 25.3148 22.2796 25.929 21.6399 25.9891C20.2496 26.1197 19.1938 25.051 17.8473 24.1497C15.7401 22.7394 14.5498 21.8615 12.5044 20.4853C10.1407 18.8949 11.673 18.0208 13.0201 16.5922C13.3726 16.2184 19.4983 10.5294 19.6169 10.0134C19.6317 9.94881 19.6455 9.70822 19.5055 9.58118C19.3655 9.45414 19.1589 9.49758 19.0098 9.53213C18.7985 9.5811 15.4323 11.8528 8.91132 16.3472C7.95585 17.0171 7.09041 17.3435 6.31501 17.3264C5.46019 17.3075 3.81586 16.8329 2.59347 16.4272C1.09416 15.9296 -0.0974649 15.6665 0.00629874 14.8214C0.0603452 14.3812 0.654034 13.931 1.78736 13.4709Z"
10
- ></path>
11
- </svg>
@@ -1,9 +0,0 @@
1
- ---
2
- const { class: className, ...rest } = Astro.props;
3
- ---
4
-
5
- <svg class={className} viewBox="0 0 24 24" fill="currentColor" {...rest}>
6
- <path
7
- d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"
8
- ></path>
9
- </svg>
@@ -1,59 +0,0 @@
1
- ---
2
- import { ClientRouter } from 'astro:transitions';
3
- import BaseHead, { type Props as HeadProps } from '../components/BaseHead.astro';
4
- import Footer from '../components/Footer.astro';
5
- import MaugliFloatingLabel from '../components/MaugliFloatingLabel.astro';
6
- import Header from '../components/Header.astro';
7
- import Nav from '../components/Nav.astro';
8
-
9
- export type Props = HeadProps & { showHeader?: boolean; fullWidth?: boolean };
10
-
11
- const { showHeader = true, fullWidth = false, ...head } = Astro.props;
12
- ---
13
-
14
- <!doctype html>
15
- <html lang="ru" class="antialiased break-words bg-main">
16
- <head>
17
- <BaseHead {...head} />
18
- <script>
19
- // Инициализация темы до загрузки DOM
20
- function initTheme() {
21
- const theme = localStorage.getItem('theme');
22
- if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
23
- document.documentElement.classList.add('dark');
24
- localStorage.setItem('theme', 'dark');
25
- } else {
26
- document.documentElement.classList.remove('dark');
27
- localStorage.setItem('theme', 'light');
28
- }
29
- }
30
-
31
- initTheme();
32
- </script>
33
- <ClientRouter />
34
- </head>
35
- <body class="bg-main text-main">
36
- <div class="flex flex-col min-h-screen px-4 md:px-8 w-full">
37
- <Nav />
38
- {showHeader && <Header />}
39
- <main class:list={['grow w-full mx-auto', fullWidth ? 'max-w-none' : 'max-w-3xl', 'pt-24']}>
40
- <slot />
41
- </main>
42
- <Footer />
43
- <MaugliFloatingLabel />
44
- </div>
45
-
46
- <script>
47
- // Сохранение темы при переходах между страницами
48
- document.addEventListener('astro:page-load', () => {
49
- // Переинициализируем тему на каждой новой странице
50
- const theme = localStorage.getItem('theme');
51
- if (theme === 'dark') {
52
- document.documentElement.classList.add('dark');
53
- } else {
54
- document.documentElement.classList.remove('dark');
55
- }
56
- });
57
- </script>
58
- </body>
59
- </html>
@@ -1,24 +0,0 @@
1
- ---
2
- import Button from '../components/Button.astro';
3
- import { maugliConfig } from '../config/maugli.config';
4
- import { LANGUAGES } from '../i18n/languages';
5
- import BaseLayout from '../layouts/BaseLayout.astro';
6
-
7
- const lang = maugliConfig.defaultLang || 'en';
8
- const languageObj = LANGUAGES.find((l) => l.code === lang) || LANGUAGES.find((l) => l.code === 'en');
9
- const t = languageObj?.dict || {};
10
- ---
11
-
12
- <BaseLayout title={t.notFound.title} showHeader={false}>
13
- <main class="flex flex-col items-center justify-center min-h-[60vh] w-full max-w-lg gap-8 p-8 rounded-xl card-shadow card-bg card-blur mx-auto">
14
- <svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg" class="mb-4">
15
- <circle cx="60" cy="60" r="56" fill="var(--brand-color, #ab3026)" fill-opacity="0.08" stroke="var(--brand-color, #ab3026)" stroke-width="8"
16
- ></circle>
17
- <circle cx="60" cy="60" r="32" fill="var(--brand-color, #ab3026)" fill-opacity="0.18"></circle>
18
- <text x="60" y="75" text-anchor="middle" font-size="48" fill="var(--brand-color, #ab3026)">404</text>
19
- </svg>
20
- <h1 class="text-3xl font-bold mb-2 text-center">{t.notFound.title}</h1>
21
- <p class="text-lg text-center mb-6">{t.notFound.description}</p>
22
- <Button href="/" class="mt-2">{t.notFound.button}</Button>
23
- </main>
24
- </BaseLayout>
@@ -1,50 +0,0 @@
1
- ---
2
- import { getCollection, render, type CollectionEntry } from 'astro:content';
3
- import HeroImage from '../components/HeroImage.astro';
4
- import { maugliConfig } from '../config/maugli.config';
5
- import { LANGUAGES } from '../i18n/languages';
6
- import BaseLayout from '../layouts/BaseLayout.astro';
7
-
8
- export async function getStaticPaths() {
9
- const pages = await getCollection('pages');
10
- return pages.map((page) => {
11
- return {
12
- params: { id: page.id },
13
- props: { page }
14
- };
15
- });
16
- }
17
-
18
- type Props = { page: CollectionEntry<'pages'> };
19
-
20
- const { page } = Astro.props;
21
- const { title, seo } = page.data;
22
- const { Content } = await render(page);
23
-
24
- const dicts: Record<string, any> = Object.fromEntries(LANGUAGES.map((l) => [l.code, l.dict]));
25
- const lang: string = typeof maugliConfig.defaultLang === 'string' && dicts[maugliConfig.defaultLang] ? maugliConfig.defaultLang : 'en';
26
- const dict = dicts[lang] || dicts['en'];
27
-
28
- const pageTitle = seo?.title ?? title ?? dict.pages?.defaultTitle ?? dicts['en'].pages?.defaultTitle ?? 'Page';
29
- const pageDesc = seo?.description ?? dict.pages?.defaultDescription ?? dicts['en'].pages?.defaultDescription ?? '';
30
- ---
31
-
32
- <BaseLayout title={pageTitle} description={pageDesc} image={seo?.image} showHeader={false} fullWidth={true}>
33
- <article class="mb-16 sm:mb-24">
34
- <HeroImage
35
- src={page.data.seo?.image?.src || '/default.webp'}
36
- alt={page.data.seo?.image?.alt || page.data.title || 'Без названия'}
37
- caption={page.data.seo?.image?.caption}
38
- width={page.data.seo?.image?.width || 1200}
39
- height={page.data.seo?.image?.height || 630}
40
- srcset={page.data.seo?.image?.srcset}
41
- sizes="(max-width: 640px) 100vw, (max-width: 1200px) 80vw, 1200px"
42
- />
43
- <header class="mb-8">
44
- <h1 class="text-3xl leading-tight font-serif font-[800] sm:text-5xl sm:leading-tight" style="color: var(--text-heading)">{title}</h1>
45
- </header>
46
- <div class="max-w-none prose sm:prose-lg">
47
- <Content />
48
- </div>
49
- </article>
50
- </BaseLayout>
File without changes
@@ -1,105 +0,0 @@
1
- ---
2
- import type { GetStaticPathsOptions, Page } from 'astro';
3
- import { getEntry, type CollectionEntry } from 'astro:content';
4
- import { getFilteredCollection } from '../../utils/content-loader';
5
- import AuthorCard from '../../components/AuthorCard.astro';
6
- import Breadcrumbs from '../../components/Breadcrumbs.astro';
7
- import InfoCard from '../../components/InfoCard.astro';
8
- import Pagination from '../../components/Pagination.astro';
9
- import Subscribe from '../../components/Subscribe.astro';
10
- import { maugliConfig } from '../../config/maugli.config';
11
- import { LANGUAGES } from '../../i18n/languages';
12
- import BaseLayout from '../../layouts/BaseLayout.astro';
13
-
14
- const dicts: Record<string, any> = Object.fromEntries(LANGUAGES.map((l) => [l.code, l.dict]));
15
- const lang: string = typeof maugliConfig.defaultLang === 'string' && dicts[maugliConfig.defaultLang] ? maugliConfig.defaultLang : 'en';
16
- const dict = dicts[lang] || dicts['en'];
17
-
18
- export async function getStaticPaths({ paginate }: GetStaticPathsOptions) {
19
- const authorsCollection = await getFilteredCollection('authors');
20
- // Сортируем авторов по имени в алфавитном порядке
21
- const authors = authorsCollection.sort((a, b) => a.data.name.localeCompare(b.data.name, 'ru'));
22
- return paginate(authors, { pageSize: 4 }); // 4 автора на страницу для красивой сетки 2x2
23
- }
24
-
25
- type Props = { page: Page<CollectionEntry<'authors'>> };
26
-
27
- const { page } = Astro.props;
28
- let authors = page.data;
29
-
30
- // Получаем все статьи
31
- let allPosts = await getFilteredCollection('blog');
32
-
33
- // Фильтрация авторов по наличию статей, если showAuthorsWithoutArticles === false
34
- if (maugliConfig.showAuthorsWithoutArticles === false) {
35
- authors = authors.filter((author) => {
36
- const authorId = author.id;
37
- // Always show default author
38
- if (authorId === maugliConfig.defaultAuthorId) return true;
39
- return allPosts.some((post) => {
40
- const postAuthor = post.data.author;
41
- if (Array.isArray(postAuthor)) {
42
- return postAuthor.includes(authorId);
43
- }
44
- return postAuthor === authorId;
45
- });
46
- });
47
- }
48
-
49
- // Prepare data for AuthorCard
50
- const authorsForCards = authors.map((author) => ({
51
- name: author.data.name,
52
- position: author.data.position,
53
- description: author.data.description,
54
- avatar: author.data.avatar,
55
- socials: author.data.socials,
56
- slug: author.id
57
- }));
58
- const authorsSection = await getEntry('pages', 'authors');
59
-
60
- // Функция для подстановки переменных в строку
61
- function interpolate(str: string, vars: Record<string, string>) {
62
- return str.replace(/\{(\w+)\}/g, (_: string, k: string) => vars[k] ?? '');
63
- }
64
-
65
- const authorsTitle = maugliConfig.pageTitles?.authors?.trim() || dict.pages?.authors?.title || dicts['en'].pages.authors.title;
66
- const authorsDescription =
67
- maugliConfig.authorsDescription?.trim() ||
68
- interpolate(dict.pages?.authors?.description || dicts['en'].pages.authors.description, { brand: maugliConfig.brand.name });
69
- ---
70
-
71
- <BaseLayout
72
- title={authorsTitle}
73
- description={authorsDescription}
74
- image={{ src: '/img/default/autor_default.webp', alt: 'Команда Maugli Content Farm' }}
75
- showHeader={false}
76
- fullWidth={true}
77
- >
78
- <div class="max-w-[1280px] mx-auto">
79
- <Breadcrumbs />
80
-
81
- <div class="mb-12 sm:mb-16">
82
- <h1 class="mb-4 text-3xl leading-tight font-serif font-[800] sm:text-5xl" style="color: var(--text-heading)">{authorsTitle}</h1>
83
- <p class="text-lg text-[var(--text-main)] opacity-80 max-w-2xl">{authorsDescription}</p>
84
- </div>
85
-
86
- <!-- Сетка карточек авторов (2 колонки для лучшего отображения) -->
87
- <div class="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-12 mb-16 justify-center">
88
- {
89
- authorsForCards.map((author) => (
90
- <div class="flex justify-center">
91
- <AuthorCard author={author} class="max-w-[360px] min-w-[360px]" />
92
- </div>
93
- ))
94
- }
95
- </div>
96
-
97
- <!-- Пагинация (показывается только если больше одной страницы) -->
98
- {page.lastPage > 1 && <Pagination page={page} class="my-16 sm:my-24" />}
99
-
100
- {authorsSection && <InfoCard title={authorsSection.data.title} description={authorsSection.body} jsonld={authorsSection.data.jsonld} class="mt-16" />}
101
- </div>
102
-
103
- <!-- Подписка -->
104
- <Subscribe class="my-16 sm:my-24" />
105
- </BaseLayout>