core-maugli 1.0.2

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 (206) hide show
  1. package/LICENSE +727 -0
  2. package/README.md +108 -0
  3. package/bin/index.js +9 -0
  4. package/bin/init.js +38 -0
  5. package/package.json +73 -0
  6. package/public/blackbox.webp +0 -0
  7. package/public/favicon.svg +10 -0
  8. package/public/footerlabel.svg +18 -0
  9. package/public/icon-192.png +0 -0
  10. package/public/icon-512.png +0 -0
  11. package/public/img/page-images/blog_default.webp +0 -0
  12. package/public/logo-icon.svg +3 -0
  13. package/public/logoblog-icon.svg +10 -0
  14. package/public/manifest.webmanifest +21 -0
  15. package/public/maugli_for_animation.svg +6 -0
  16. package/public/mauglilabel.svg +17 -0
  17. package/public/tr-about-1200.webp +0 -0
  18. package/public/tr-about-400.webp +0 -0
  19. package/public/tr-about-800.webp +0 -0
  20. package/public/tr-about.webp +0 -0
  21. package/public/tr-post-1-1200.webp +0 -0
  22. package/public/tr-post-1-400.webp +0 -0
  23. package/public/tr-post-1-800.webp +0 -0
  24. package/public/tr-post0-1200.webp +0 -0
  25. package/public/tr-post0-400.webp +0 -0
  26. package/public/tr-post0-800.webp +0 -0
  27. package/public/tr-post0.webp +0 -0
  28. package/public/tr-prewiew.webp +0 -0
  29. package/resize-all.cjs +29 -0
  30. package/scripts/featured.js +208 -0
  31. package/scripts/update-with-backup.js +34 -0
  32. package/scripts/upgrade-config.js +90 -0
  33. package/scripts/verify-assets.js +28 -0
  34. package/src/assets/img/default/autor_default.webp +0 -0
  35. package/src/assets/img/default/blog_default.webp +0 -0
  36. package/src/assets/img/default/product_default.webp +0 -0
  37. package/src/assets/img/default/project_default.webp +0 -0
  38. package/src/assets/img/default/rubric_default.webp +0 -0
  39. package/src/assets/img/examples/authors/anna.webp +0 -0
  40. package/src/assets/img/examples/authors/carlos.webp +0 -0
  41. package/src/assets/img/examples/authors/daria.webp +0 -0
  42. package/src/assets/img/examples/authors/dmitry.webp +0 -0
  43. package/src/assets/img/examples/authors/igor.webp +0 -0
  44. package/src/assets/img/examples/authors/john.webp +0 -0
  45. package/src/assets/img/examples/blog/post-1-avtomatizaciya-marketinga-kak-ii-osvobozhdaet-predprinimatelei-ot-cifrovogo-rabstva.webp +0 -0
  46. package/src/assets/img/examples/blog/post_11.webp +0 -0
  47. package/src/assets/img/examples/blog/post_12.webp +0 -0
  48. package/src/assets/img/examples/blog/post_1_jsonld_guide.webp +0 -0
  49. package/src/assets/img/examples/blog/test-post.webp +0 -0
  50. package/src/assets/img/examples/blog/tr-post-1.webp +0 -0
  51. package/src/assets/img/examples/products/product_1.webp +0 -0
  52. package/src/assets/img/examples/products/product_2.webp +0 -0
  53. package/src/assets/img/examples/projects/project_1.webp +0 -0
  54. package/src/assets/img/examples/projects/project_2.webp +0 -0
  55. package/src/components/ArticleMeta.astro +103 -0
  56. package/src/components/AuthorCard.astro +95 -0
  57. package/src/components/AuthorLink.astro +25 -0
  58. package/src/components/AuthorLinksGroup.astro +135 -0
  59. package/src/components/Avatar.astro +32 -0
  60. package/src/components/BaseHead.astro +121 -0
  61. package/src/components/Breadcrumbs.astro +90 -0
  62. package/src/components/Button.astro +25 -0
  63. package/src/components/Card.astro +99 -0
  64. package/src/components/ContentFooter.astro +147 -0
  65. package/src/components/CopyLinkButton.astro +133 -0
  66. package/src/components/CountBadge.astro +17 -0
  67. package/src/components/Footer.astro +122 -0
  68. package/src/components/FormattedDate.astro +59 -0
  69. package/src/components/Header.astro +18 -0
  70. package/src/components/HeroImage.astro +38 -0
  71. package/src/components/IconButton.astro +23 -0
  72. package/src/components/Image.astro +13 -0
  73. package/src/components/InfoCard.astro +123 -0
  74. package/src/components/LanguageSwitcher.astro +122 -0
  75. package/src/components/MaugliFloatingLabel.astro +454 -0
  76. package/src/components/MobileTagsAndShare.astro +71 -0
  77. package/src/components/Nav.astro +151 -0
  78. package/src/components/NavLink.astro +31 -0
  79. package/src/components/Pagination.astro +70 -0
  80. package/src/components/PostPreview.astro +22 -0
  81. package/src/components/ProductBannerCard.astro +47 -0
  82. package/src/components/ProductPreview.astro +21 -0
  83. package/src/components/ProjectPreview.astro +21 -0
  84. package/src/components/RubricCard.astro +142 -0
  85. package/src/components/ShareIcon.astro +93 -0
  86. package/src/components/ShareLink.astro +58 -0
  87. package/src/components/Subscribe.astro +68 -0
  88. package/src/components/SummaryFAQCard.astro +106 -0
  89. package/src/components/TableOfContents.astro +143 -0
  90. package/src/components/TagPill.astro +41 -0
  91. package/src/components/TagPills.astro +42 -0
  92. package/src/components/TagsAndShare.astro +379 -0
  93. package/src/components/TagsSection.astro +203 -0
  94. package/src/components/ThemeToggle.astro +58 -0
  95. package/src/config/maugli.config.ts +213 -0
  96. package/src/content/authors/daria-zorina.md +42 -0
  97. package/src/content/authors/default-autor.md +47 -0
  98. package/src/content/authors/igor-sokolov.md +43 -0
  99. package/src/content/authors/john-walker.md +46 -0
  100. package/src/content/blog/jsonld-guide.md +260 -0
  101. package/src/content/blog/post-0.md +49 -0
  102. package/src/content/blog/post-1-avtomatizaciya-marketinga-kak-ii-osvobozhdaet-predprinimatelei-ot-cifrovogo-rabstva.md +72 -0
  103. package/src/content/blog/post-agent-experience-mcp-biznes-v-epohu-ii-agentov.md +116 -0
  104. package/src/content/blog/test-post-2025-07-11.md +73 -0
  105. package/src/content/config.ts +80 -0
  106. package/src/content/pages/about.md +40 -0
  107. package/src/content/pages/about.mdx +27 -0
  108. package/src/content/pages/authors.mdx +49 -0
  109. package/src/content/pages/blog.mdx +31 -0
  110. package/src/content/pages/contact.md +10 -0
  111. package/src/content/pages/products.mdx +30 -0
  112. package/src/content/pages/projects.mdx +28 -0
  113. package/src/content/pages/rubrics.mdx +35 -0
  114. package/src/content/pages/terms.md +12 -0
  115. package/src/content/products/example-product.md +28 -0
  116. package/src/content/products/maugli-editor.md +35 -0
  117. package/src/content/products/maugli-freeblog.md +162 -0
  118. package/src/content/projects/example-project.md +28 -0
  119. package/src/content/projects/project-1.md +70 -0
  120. package/src/content/projects/project-2.md +33 -0
  121. package/src/content/tags/ai-business.mdx +18 -0
  122. package/src/content/tags/automation.mdx +18 -0
  123. package/src/content/tags/content-strategy.mdx +18 -0
  124. package/src/content/tags/growth-marketing.mdx +18 -0
  125. package/src/content/tags/industry-reviews.mdx +18 -0
  126. package/src/content/tags/interesting.mdx +18 -0
  127. package/src/content/tags/seo-ai-seo.mdx +18 -0
  128. package/src/content.config.ts +260 -0
  129. package/src/data/site-config.ts +164 -0
  130. package/src/i18n/de.json +126 -0
  131. package/src/i18n/en.json +126 -0
  132. package/src/i18n/es.json +126 -0
  133. package/src/i18n/fr.json +126 -0
  134. package/src/i18n/index.ts +10 -0
  135. package/src/i18n/ja.json +126 -0
  136. package/src/i18n/languages.ts +23 -0
  137. package/src/i18n/pt.json +126 -0
  138. package/src/i18n/ru.json +123 -0
  139. package/src/i18n/zh.json +126 -0
  140. package/src/icons/ArrowLeft.astro +13 -0
  141. package/src/icons/ArrowRight.astro +13 -0
  142. package/src/icons/flags/brazil.svg +14 -0
  143. package/src/icons/flags/china.svg +15 -0
  144. package/src/icons/flags/france.svg +12 -0
  145. package/src/icons/flags/germany.svg +12 -0
  146. package/src/icons/flags/japan.svg +11 -0
  147. package/src/icons/flags/russia.svg +12 -0
  148. package/src/icons/flags/spain.svg +12 -0
  149. package/src/icons/flags/united arab emirates.svg +13 -0
  150. package/src/icons/flags/united states.svg +15 -0
  151. package/src/icons/socials/BlueskyIcon.astro +9 -0
  152. package/src/icons/socials/EmailIcon.astro +8 -0
  153. package/src/icons/socials/LinkedinIcon.astro +9 -0
  154. package/src/icons/socials/MastodonIcon.astro +9 -0
  155. package/src/icons/socials/MediumIcon.astro +9 -0
  156. package/src/icons/socials/RedditIcon.astro +11 -0
  157. package/src/icons/socials/TelegramIcon.astro +11 -0
  158. package/src/icons/socials/TwitterIcon.astro +9 -0
  159. package/src/img/default/autor_default.webp +0 -0
  160. package/src/img/default/default.webp +0 -0
  161. package/src/img/default/rubric_default.webp +0 -0
  162. package/src/img/default/test.webp +0 -0
  163. package/src/img/default/test2.webp +0 -0
  164. package/src/img/examples/authors/anna.webp +0 -0
  165. package/src/img/examples/authors/carlos.webp +0 -0
  166. package/src/img/examples/authors/daria.webp +0 -0
  167. package/src/img/examples/authors/dmitry.webp +0 -0
  168. package/src/img/examples/authors/igor.webp +0 -0
  169. package/src/img/examples/authors/john.webp +0 -0
  170. package/src/img/examples/blog/post-1-avtomatizaciya-marketinga-kak-ii-osvobozhdaet-predprinimatelei-ot-cifrovogo-rabstva.webp +0 -0
  171. package/src/img/examples/blog/post-2-avtomatizaciya-kontenta-kak-neiroseti-ubivayut-perfekcionizm-v-biznese.webp +0 -0
  172. package/src/img/examples/blog/post-3-laik-ne-valyuta-kak-avtomatizaciya-marketinga-spasaet-ot-lozhnyh-metrik.webp +0 -0
  173. package/src/img/examples/blog/post-5-5-fatalnyh-oshibok-marketinga-kotorye-ubivayut-startapy-na-starte.webp +0 -0
  174. package/src/img/examples/blog/post-6-5-strategii-kontent-marketinga-dlya-startapov-avtomatizaciya-i-revolyuciya.webp +0 -0
  175. package/src/img/examples/blog/post-7-viralnyi-kontent-ne-udacha-a-strategiya-avtomatizaciya-marketinga.webp +0 -0
  176. package/src/img/examples/blog/post-agent-experience-mcp-biznes-v-epohu-ii-agentov.webp +0 -0
  177. package/src/img/examples/blog/post_1_jsonld_guide.webp +0 -0
  178. package/src/img/examples/blog/tr-post-1.webp +0 -0
  179. package/src/layouts/BaseLayout.astro +59 -0
  180. package/src/pages/404.astro +24 -0
  181. package/src/pages/[...id].astro +50 -0
  182. package/src/pages/about.astro +0 -0
  183. package/src/pages/authors/[...page].astro +105 -0
  184. package/src/pages/authors/[id].astro +165 -0
  185. package/src/pages/blog/[...page].astro +59 -0
  186. package/src/pages/blog/[id].astro +175 -0
  187. package/src/pages/index.astro +90 -0
  188. package/src/pages/products/[...page].astro +50 -0
  189. package/src/pages/products/[id].astro +221 -0
  190. package/src/pages/projects/[...page].astro +74 -0
  191. package/src/pages/projects/[id].astro +165 -0
  192. package/src/pages/projects/tags/[id]/[...page].astro +58 -0
  193. package/src/pages/rss.xml.js +5 -0
  194. package/src/pages/tags/[id]/[...page].astro +110 -0
  195. package/src/pages/tags/index.astro +124 -0
  196. package/src/scripts/infoCardFadeIn.js +22 -0
  197. package/src/styles/global.css +272 -0
  198. package/src/utils/common-utils.ts +0 -0
  199. package/src/utils/content-loader.ts +14 -0
  200. package/src/utils/data-utils.ts +49 -0
  201. package/src/utils/featuredManager.ts +118 -0
  202. package/src/utils/posts.ts +43 -0
  203. package/src/utils/reading-time.ts +28 -0
  204. package/src/utils/remark-slugify.js +8 -0
  205. package/src/utils/rss.ts +23 -0
  206. package/typograf-batch.js +49 -0
@@ -0,0 +1,17 @@
1
+ <svg width="160" height="52" viewBox="0 0 160 52" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M62.0719 17.1937C61.2026 17.1937 60.454 16.9884 59.8262 16.5779C59.1983 16.1674 58.7154 15.602 58.3773 14.8816C58.0392 14.1612 57.8702 13.3381 57.8702 12.4125C57.8702 11.4707 58.0433 10.6396 58.3894 9.9192C58.7395 9.19477 59.2265 8.62931 59.8503 8.22282C60.4782 7.81231 61.2106 7.60706 62.0478 7.60706C62.6997 7.60706 63.2873 7.7278 63.8105 7.96927C64.3337 8.21075 64.7624 8.54882 65.0964 8.98348C65.4304 9.41814 65.6377 9.92524 65.7182 10.5048H64.2935C64.1848 10.0822 63.9434 9.70791 63.5691 9.38192C63.1988 9.0519 62.6997 8.88689 62.0719 8.88689C61.5165 8.88689 61.0295 9.03177 60.611 9.32155C60.1964 9.60729 59.8724 10.0118 59.639 10.535C59.4096 11.0541 59.2949 11.6639 59.2949 12.3642C59.2949 13.0805 59.4076 13.7044 59.633 14.2356C59.8624 14.7669 60.1844 15.1794 60.5989 15.4732C61.0175 15.767 61.5085 15.9139 62.0719 15.9139C62.4422 15.9139 62.7782 15.8495 63.0801 15.7207C63.3819 15.5919 63.6375 15.4068 63.8468 15.1653C64.056 14.9238 64.205 14.634 64.2935 14.296H65.7182C65.6377 14.8433 65.4385 15.3363 65.1206 15.775C64.8066 16.2097 64.3901 16.5558 63.8709 16.8134C63.3558 17.0669 62.7561 17.1937 62.0719 17.1937Z" fill="#73EC8A"/>
3
+ <path d="M67.8009 17.0005V7.7278H69.1774V9.12836H69.274C69.443 8.66956 69.7489 8.29728 70.1916 8.01153C70.6343 7.72578 71.1333 7.58291 71.6887 7.58291C71.7934 7.58291 71.9242 7.58492 72.0811 7.58895C72.2381 7.59297 72.3568 7.59901 72.4373 7.60706V9.05592C72.389 9.04385 72.2783 9.02574 72.1053 9.00159C71.9363 8.97342 71.7572 8.95933 71.568 8.95933C71.1172 8.95933 70.7148 9.05391 70.3606 9.24307C70.0105 9.4282 69.7328 9.68577 69.5275 10.0158C69.3263 10.3418 69.2257 10.7141 69.2257 11.1326V17.0005H67.8009Z" fill="#73EC8A"/>
4
+ <path d="M77.7317 17.1937C76.8382 17.1937 76.0675 16.9965 75.4196 16.6021C74.7756 16.2036 74.2786 15.6483 73.9284 14.9359C73.5823 14.2195 73.4093 13.3864 73.4093 12.4366C73.4093 11.4868 73.5823 10.6497 73.9284 9.92524C74.2786 9.19678 74.7656 8.62931 75.3894 8.22282C76.0172 7.81231 76.7497 7.60706 77.5868 7.60706C78.0698 7.60706 78.5467 7.68755 79.0176 7.84853C79.4885 8.00952 79.9171 8.27112 80.3034 8.63334C80.6898 8.99153 80.9977 9.46643 81.2271 10.0581C81.4565 10.6497 81.5712 11.3781 81.5712 12.2434V12.8471H74.4235V11.6156H80.1223C80.1223 11.0924 80.0177 10.6255 79.8084 10.215C79.6032 9.8045 79.3094 9.48052 78.927 9.24307C78.5487 9.00561 78.102 8.88689 77.5868 8.88689C77.0193 8.88689 76.5283 9.02775 76.1138 9.30947C75.7033 9.58717 75.3874 9.94939 75.166 10.3961C74.9447 10.8429 74.834 11.3218 74.834 11.8329V12.6539C74.834 13.3542 74.9547 13.9478 75.1962 14.4348C75.4417 14.9178 75.7818 15.286 76.2164 15.5396C76.6511 15.7891 77.1562 15.9139 77.7317 15.9139C78.106 15.9139 78.4441 15.8616 78.7459 15.7569C79.0518 15.6483 79.3154 15.4873 79.5367 15.274C79.7581 15.0566 79.9292 14.787 80.0499 14.465L81.4263 14.8514C81.2814 15.3182 81.0379 15.7287 80.6958 16.0829C80.3537 16.4331 79.9312 16.7067 79.4281 16.9039C78.925 17.0971 78.3595 17.1937 77.7317 17.1937Z" fill="#73EC8A"/>
5
+ <path d="M86.4671 17.2179C85.8796 17.2179 85.3463 17.1072 84.8674 16.8858C84.3884 16.6604 84.0081 16.3365 83.7264 15.9139C83.4447 15.4873 83.3038 14.9721 83.3038 14.3684C83.3038 13.8372 83.4084 13.4065 83.6177 13.0765C83.827 12.7425 84.1067 12.4809 84.4568 12.2917C84.807 12.1026 85.1934 11.9617 85.6159 11.8691C86.0425 11.7725 86.4712 11.6961 86.9018 11.6397C87.4652 11.5673 87.922 11.513 88.2722 11.4767C88.6264 11.4365 88.8839 11.3701 89.0449 11.2775C89.2099 11.1849 89.2924 11.024 89.2924 10.7946V10.7463C89.2924 10.1506 89.1294 9.68779 88.8034 9.35777C88.4815 9.02775 87.9925 8.86274 87.3365 8.86274C86.6563 8.86274 86.123 9.01165 85.7367 9.30947C85.3503 9.60729 85.0787 9.92524 84.9217 10.2633L83.5694 9.78035C83.8109 9.21691 84.1329 8.77822 84.5353 8.4643C84.9418 8.14636 85.3845 7.925 85.8634 7.80024C86.3464 7.67145 86.8213 7.60706 87.2882 7.60706C87.586 7.60706 87.9281 7.64328 88.3144 7.71572C88.7048 7.78414 89.0811 7.92701 89.4434 8.14434C89.8096 8.36167 90.1134 8.68968 90.3549 9.12836C90.5964 9.56705 90.7171 10.1546 90.7171 10.8911V17.0005H89.2924V15.7448H89.22C89.1234 15.9461 88.9624 16.1614 88.737 16.3908C88.5117 16.6202 88.2118 16.8154 87.8375 16.9764C87.4632 17.1374 87.0064 17.2179 86.4671 17.2179ZM86.6845 15.938C87.2479 15.938 87.7228 15.8273 88.1092 15.606C88.4996 15.3846 88.7934 15.0989 88.9906 14.7487C89.1918 14.3986 89.2924 14.0304 89.2924 13.644V12.34C89.2321 12.4125 89.0992 12.4789 88.894 12.5392C88.6928 12.5956 88.4593 12.6459 88.1937 12.6902C87.9321 12.7304 87.6765 12.7666 87.427 12.7988C87.1815 12.827 86.9823 12.8511 86.8294 12.8713C86.4591 12.9196 86.113 12.998 85.791 13.1067C85.4731 13.2113 85.2155 13.3703 85.0183 13.5836C84.8251 13.7929 84.7285 14.0786 84.7285 14.4409C84.7285 14.9359 84.9116 15.3102 85.2779 15.5637C85.6481 15.8133 86.117 15.938 86.6845 15.938Z" fill="#73EC8A"/>
6
+ <path d="M97.3502 7.7278V8.93518H92.5448V7.7278H97.3502ZM93.9454 5.50621H95.3701V14.3443C95.3701 14.7467 95.4285 15.0486 95.5452 15.2498C95.6659 15.447 95.8189 15.5798 96.004 15.6483C96.1931 15.7126 96.3924 15.7448 96.6016 15.7448C96.7586 15.7448 96.8874 15.7368 96.988 15.7207C97.0886 15.7006 97.1691 15.6845 97.2295 15.6724L97.5193 16.9522C97.4227 16.9884 97.2878 17.0247 97.1148 17.0609C96.9417 17.1011 96.7224 17.1213 96.4568 17.1213C96.0543 17.1213 95.6599 17.0347 95.2735 16.8617C94.8912 16.6886 94.5732 16.425 94.3197 16.0708C94.0702 15.7167 93.9454 15.2699 93.9454 14.7306V5.50621Z" fill="#73EC8A"/>
7
+ <path d="M103.282 17.1937C102.388 17.1937 101.617 16.9965 100.969 16.6021C100.325 16.2036 99.8284 15.6483 99.4782 14.9359C99.1321 14.2195 98.9591 13.3864 98.9591 12.4366C98.9591 11.4868 99.1321 10.6497 99.4782 9.92524C99.8284 9.19678 100.315 8.62931 100.939 8.22282C101.567 7.81231 102.299 7.60706 103.137 7.60706C103.62 7.60706 104.096 7.68755 104.567 7.84853C105.038 8.00952 105.467 8.27112 105.853 8.63334C106.24 8.99153 106.547 9.46643 106.777 10.0581C107.006 10.6497 107.121 11.3781 107.121 12.2434V12.8471H99.9733V11.6156H105.672C105.672 11.0924 105.567 10.6255 105.358 10.215C105.153 9.8045 104.859 9.48052 104.477 9.24307C104.099 9.00561 103.652 8.88689 103.137 8.88689C102.569 8.88689 102.078 9.02775 101.664 9.30947C101.253 9.58717 100.937 9.94939 100.716 10.3961C100.494 10.8429 100.384 11.3218 100.384 11.8329V12.6539C100.384 13.3542 100.505 13.9478 100.746 14.4348C100.991 14.9178 101.332 15.286 101.766 15.5396C102.201 15.7891 102.706 15.9139 103.282 15.9139C103.656 15.9139 103.994 15.8616 104.296 15.7569C104.602 15.6483 104.865 15.4873 105.087 15.274C105.308 15.0566 105.479 14.787 105.6 14.465L106.976 14.8514C106.831 15.3182 106.588 15.7287 106.246 16.0829C105.904 16.4331 105.481 16.7067 104.978 16.9039C104.475 17.0971 103.909 17.1937 103.282 17.1937Z" fill="#73EC8A"/>
8
+ <path d="M112.79 17.1937C112.017 17.1937 111.335 16.9985 110.743 16.6081C110.152 16.2137 109.689 15.6583 109.355 14.9419C109.021 14.2215 108.854 13.3703 108.854 12.3883C108.854 11.4143 109.021 10.5692 109.355 9.8528C109.689 9.13641 110.154 8.58303 110.749 8.19264C111.345 7.80225 112.033 7.60706 112.814 7.60706C113.418 7.60706 113.894 7.70767 114.245 7.9089C114.599 8.10611 114.868 8.33149 115.054 8.58504C115.243 8.83457 115.39 9.03982 115.494 9.20081H115.615V4.63689H117.04V17.0005H115.663V15.5758H115.494C115.39 15.7448 115.241 15.9581 115.047 16.2157C114.854 16.4693 114.579 16.6967 114.22 16.8979C113.862 17.0951 113.385 17.1937 112.79 17.1937ZM112.983 15.9139C113.554 15.9139 114.037 15.765 114.432 15.4671C114.826 15.1653 115.126 14.7487 115.331 14.2175C115.536 13.6822 115.639 13.0644 115.639 12.3642C115.639 11.6719 115.538 11.0662 115.337 10.547C115.136 10.0238 114.838 9.61736 114.444 9.32758C114.049 9.03378 113.562 8.88689 112.983 8.88689C112.379 8.88689 111.876 9.04183 111.474 9.35173C111.075 9.6576 110.775 10.0742 110.574 10.6014C110.377 11.1246 110.278 11.7122 110.278 12.3642C110.278 13.0242 110.379 13.6239 110.58 14.1632C110.785 14.6984 111.087 15.1251 111.486 15.443C111.888 15.7569 112.387 15.9139 112.983 15.9139Z" fill="#73EC8A"/>
9
+ <path d="M128.395 17.1937C127.558 17.1937 126.824 16.9945 126.192 16.596C125.564 16.1976 125.073 15.6402 124.719 14.9238C124.369 14.2074 124.193 13.3703 124.193 12.4125C124.193 11.4465 124.369 10.6034 124.719 9.88298C125.073 9.16257 125.564 8.60315 126.192 8.20471C126.824 7.80628 127.558 7.60706 128.395 7.60706C129.232 7.60706 129.965 7.80628 130.593 8.20471C131.224 8.60315 131.715 9.16257 132.066 9.88298C132.42 10.6034 132.597 11.4465 132.597 12.4125C132.597 13.3703 132.42 14.2074 132.066 14.9238C131.715 15.6402 131.224 16.1976 130.593 16.596C129.965 16.9945 129.232 17.1937 128.395 17.1937ZM128.395 15.9139C129.031 15.9139 129.554 15.7509 129.965 15.4249C130.375 15.0989 130.679 14.6703 130.876 14.139C131.074 13.6078 131.172 13.0322 131.172 12.4125C131.172 11.7927 131.074 11.2151 130.876 10.6799C130.679 10.1446 130.375 9.71193 129.965 9.38192C129.554 9.0519 129.031 8.88689 128.395 8.88689C127.759 8.88689 127.236 9.0519 126.826 9.38192C126.415 9.71193 126.111 10.1446 125.914 10.6799C125.717 11.2151 125.618 11.7927 125.618 12.4125C125.618 13.0322 125.717 13.6078 125.914 14.139C126.111 14.6703 126.415 15.0989 126.826 15.4249C127.236 15.7509 127.759 15.9139 128.395 15.9139Z" fill="#73EC8A"/>
10
+ <path d="M136.196 11.4224V17.0005H134.772V7.7278H136.148V9.17666H136.269C136.486 8.70578 136.816 8.32746 137.259 8.04172C137.702 7.75194 138.273 7.60706 138.973 7.60706C139.601 7.60706 140.151 7.73585 140.621 7.99342C141.092 8.24697 141.459 8.63334 141.72 9.15251C141.982 9.66766 142.113 10.3197 142.113 11.1085V17.0005H140.688V11.2051C140.688 10.4766 140.499 9.90914 140.12 9.50265C139.742 9.09214 139.223 8.88689 138.563 8.88689C138.108 8.88689 137.702 8.98549 137.343 9.1827C136.989 9.3799 136.71 9.66766 136.504 10.046C136.299 10.4243 136.196 10.8831 136.196 11.4224Z" fill="#73EC8A"/>
11
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M139.186 20.6354C141.316 20.6354 143.063 21.0825 144.426 21.9772C145.609 22.7332 146.603 23.6626 147.409 24.7643V21.274H149.794V40.7018C149.794 43.9965 148.906 46.5883 147.131 48.4772C145.356 50.366 142.679 51.3102 139.1 51.3102C137.864 51.3101 136.572 51.183 135.223 50.9273C133.888 50.6717 132.581 50.2455 131.303 49.649L132.156 47.3912C133.334 47.9451 134.52 48.3495 135.713 48.6051C136.92 48.8749 138.064 49.0094 139.143 49.0094C141.813 49.0094 143.858 48.314 145.278 46.9225C146.698 45.5449 147.409 43.7691 147.409 41.5963V38.2291C146.603 39.3219 145.609 40.2528 144.426 41.0211C143.063 41.9157 141.316 42.3638 139.186 42.3639C137.041 42.3639 135.159 41.8731 133.54 40.8932C131.921 39.8991 130.657 38.5786 129.748 36.9313C129.531 36.5302 129.34 36.1192 129.175 35.6988V41.7242H126.788V39.0397C125.837 40.2325 124.758 41.085 123.551 41.5963C122.358 42.1076 121.122 42.3629 119.844 42.3629C118.055 42.3629 116.571 41.9939 115.392 41.2555C114.213 40.5028 113.333 39.5649 112.75 38.443C112.168 37.3212 111.877 36.185 111.877 35.0348V21.274H114.263V34.3111C114.263 36.0151 114.803 37.3994 115.882 38.4645C116.961 39.5295 118.424 40.062 120.27 40.0621C121.463 40.0621 122.55 39.7859 123.53 39.232C124.524 38.6782 125.312 37.9038 125.894 36.9098C126.49 35.9015 126.788 34.7364 126.788 33.4156V21.274H129.175V27.3189C129.7 26.0003 130.439 24.845 131.389 23.8522C132.341 22.8438 133.476 22.055 134.797 21.4869C136.118 20.9189 137.581 20.6354 139.186 20.6354ZM139.186 22.9361C137.581 22.9361 136.161 23.2833 134.925 23.9791C133.69 24.675 132.716 25.6692 132.006 26.9615C131.31 28.2397 130.962 29.7528 130.962 31.4996C130.962 33.2462 131.31 34.7587 132.006 36.0367C132.716 37.3149 133.69 38.3091 134.925 39.0191C136.161 39.715 137.581 40.0631 139.186 40.0631C140.79 40.063 142.21 39.7149 143.446 39.0191C144.681 38.3091 145.647 37.3149 146.343 36.0367C147.053 34.7587 147.408 33.2463 147.409 31.4996C147.409 29.7528 147.053 28.2397 146.343 26.9615C145.647 25.6693 144.681 24.6749 143.446 23.9791C142.21 23.2834 140.79 22.9362 139.186 22.9361Z" fill="white"/>
12
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M18.6771 0.120707C20.7422 -0.207104 22.8171 0.10975 24.5277 1.35508C24.6634 1.45379 24.7958 1.55757 24.9242 1.66563C25.0524 1.77368 25.1769 1.88675 25.2972 2.00352C25.4173 2.12025 25.5335 2.24094 25.6449 2.36582C25.7564 2.49077 25.863 2.62001 25.9652 2.75254C26.0675 2.88518 26.1656 3.0221 26.2581 3.16172C26.3507 3.30115 26.4376 3.4439 26.5199 3.58946C26.6021 3.73523 26.6797 3.88357 26.7513 4.03477C26.8229 4.18597 26.8889 4.33984 26.9495 4.49571C28.8609 9.42977 25.033 13.3125 25.7552 18.068C25.793 18.2335 25.8389 18.5178 25.9183 18.777C26.2569 18.8452 26.5851 18.9429 26.8988 19.068C26.9502 19.0372 27.0015 19.0054 27.0521 18.9713C27.7879 18.4746 28.4459 17.8486 29.1253 17.2779C30.4136 16.1961 31.7624 15.1954 32.8441 13.8941C32.98 13.7303 33.1098 13.5619 33.2327 13.3883C33.3556 13.2146 33.472 13.0356 33.5814 12.8531C33.6903 12.6708 33.7923 12.4846 33.887 12.2945C33.9818 12.1043 34.0689 11.9104 34.1488 11.7135C34.584 10.6419 34.7329 9.53499 34.7249 8.38633C33.3962 8.19003 32.3077 7.76891 31.4788 6.6666C31.4394 6.61355 31.4012 6.55937 31.3646 6.5045C31.3279 6.44972 31.293 6.39395 31.2591 6.3375C31.2253 6.28094 31.1926 6.22289 31.1615 6.16465C31.1305 6.10652 31.1006 6.04753 31.0726 5.98789C31.0444 5.92815 31.0175 5.86727 30.9925 5.80625C30.9674 5.74532 30.9432 5.68381 30.9212 5.62168C30.8992 5.55961 30.8794 5.49641 30.8607 5.43321C30.8418 5.37014 30.8246 5.30664 30.8089 5.24278C30.7932 5.1787 30.7785 5.11415 30.766 5.04942C30.7535 4.98475 30.7431 4.91937 30.7337 4.8541C30.7246 4.78891 30.7164 4.72337 30.7103 4.65782C30.7044 4.59228 30.7003 4.52627 30.6976 4.46055C30.6948 4.39491 30.694 4.32902 30.6947 4.26328C30.6952 4.19744 30.6976 4.13084 30.7015 4.06504C30.7053 3.99951 30.71 3.93402 30.7171 3.86875C30.7243 3.8033 30.7331 3.73757 30.7435 3.67246C30.9136 2.5536 31.5098 1.64006 32.4232 0.973246C33.2082 0.400357 34.3726 0.0678415 35.3421 0.234964C36.5068 0.435881 37.5691 1.05856 38.2347 2.03868C38.2725 2.09334 38.3089 2.14925 38.3441 2.20567C38.3792 2.2622 38.4133 2.31943 38.4456 2.37754C38.4778 2.43567 38.509 2.49467 38.5384 2.5543C38.5679 2.61409 38.596 2.67487 38.6224 2.73594C38.6487 2.79702 38.6732 2.85912 38.6966 2.92149C38.72 2.98378 38.7419 3.04662 38.762 3.10996C38.7823 3.17321 38.8016 3.23708 38.8187 3.30137C38.8357 3.36562 38.8508 3.43073 38.8646 3.49571C38.8784 3.56079 38.8911 3.62634 38.9017 3.692C38.9124 3.7576 38.9207 3.82413 38.9281 3.89024C38.9355 3.95615 38.9416 4.02224 38.9456 4.08848C38.9497 4.15474 38.9526 4.22133 38.9534 4.2877C38.9541 4.35421 38.9529 4.42135 38.9505 4.48789C38.948 4.55432 38.9436 4.62089 38.9378 4.68711C38.932 4.7533 38.9244 4.81952 38.9154 4.88535C38.9063 4.95105 38.8954 5.01645 38.8831 5.08164C38.7872 5.56859 38.5927 6.2719 38.2913 6.67246C37.9939 7.06776 37.425 7.33121 37.2796 7.817C37.1567 8.22872 37.1996 8.7414 37.1634 9.17149C37.0863 10.0863 36.9182 11.0185 36.6156 11.8873C35.5044 15.0765 33.0438 17.0606 30.5286 19.1324C30.0192 19.552 29.4402 19.9908 28.9583 20.482C29.6246 21.2 30.105 22.0901 30.3255 23.0758C32.4695 23.1373 34.6754 23.1731 36.3284 21.5846C38.3565 19.6354 38.4757 16.7763 39.3451 14.2867C39.4694 13.9344 39.6103 13.588 39.7669 13.2486C39.9235 12.9093 40.096 12.578 40.2835 12.2545C40.4711 11.931 40.6732 11.6161 40.89 11.3111C41.1068 11.0061 41.3381 10.7112 41.5824 10.4273C42.2896 9.61042 43.1817 8.86144 44.2074 8.4791C44.8125 8.8473 45.2342 9.37985 45.6966 9.90391C47.1496 11.5504 48.4378 13.3137 48.9642 15.4752C49.4733 17.5658 49.2528 19.6104 48.6771 21.6578C48.4981 22.294 48.2072 23.0135 48.1781 23.6754C48.144 24.4537 48.5422 25.3349 48.7904 26.0621C49.6572 28.6037 49.5805 31.1118 48.1322 33.4361C47.1534 35.0068 45.7221 36.1841 44.6742 37.691C43.8906 38.8177 43.3989 40.1148 42.6761 41.2789C41.1724 43.7007 38.6106 45.5263 35.9427 46.4918C34.9215 46.8614 33.864 47.1012 32.807 47.3434C29.4609 48.11 26.555 48.5599 23.4691 46.6324C21.0819 45.1416 18.7898 42.3038 18.1566 39.5543C17.93 38.5704 17.9696 37.5944 18.0648 36.5973C15.9644 37.0671 14.0742 37.4561 12.721 39.2682C13.6676 40.1962 14.3329 41.1579 14.3382 42.526C14.3422 43.5826 13.9066 44.5647 13.1546 45.3082C12.3676 46.0863 11.2487 46.506 10.1419 46.4859C9.03952 46.466 7.99103 46.0279 7.23568 45.2262C6.49071 44.4351 6.04571 43.3491 6.08919 42.2613C6.09217 42.1949 6.09672 42.1283 6.10286 42.0621C6.10912 41.9955 6.11678 41.9282 6.1263 41.8619C6.1358 41.796 6.14674 41.7301 6.15951 41.6647C6.17229 41.5989 6.18747 41.5333 6.20345 41.4684C6.2194 41.4035 6.23699 41.3391 6.25619 41.275C6.27537 41.2109 6.29544 41.1466 6.31771 41.0836C6.34005 41.0205 6.36454 40.958 6.38997 40.8961C6.41535 40.8342 6.44261 40.7722 6.47103 40.7115C6.49945 40.651 6.5296 40.5909 6.56087 40.5318C6.59219 40.4729 6.62439 40.4144 6.65853 40.357C6.69277 40.2997 6.72903 40.2429 6.76595 40.1871C6.80298 40.1313 6.84139 40.0758 6.88119 40.0221C6.92097 39.9681 6.96289 39.9149 7.00521 39.8629C7.04755 39.811 7.09118 39.7594 7.13607 39.7096C7.18086 39.6599 7.2275 39.6115 7.27474 39.5641C7.32208 39.5165 7.37069 39.4696 7.42025 39.4244C8.24786 38.6714 9.30663 38.3915 10.4066 38.3824C11.0939 37.5314 11.7717 36.6837 12.7171 36.0982C14.2913 35.1235 16.0416 34.8347 17.7689 34.2731C20.5262 33.3762 21.9222 31.8574 22.0531 29.2467C20.6904 28.5032 19.6706 27.221 19.2796 25.693C16.1629 26.6519 13.7485 30.1593 11.0755 31.8795C10.2278 32.425 9.28321 32.889 8.31185 33.1715C7.35944 33.4484 6.2442 33.5929 5.38216 34.0875C4.83833 34.3997 4.43932 34.9122 3.94271 35.2857C3.6933 35.4732 3.41014 35.6129 3.09115 35.5484C2.8468 35.4989 2.72413 35.3127 2.61947 35.107C2.09509 34.0772 1.85118 32.4985 1.46126 31.3375C1.19012 30.5304 0.824845 29.7609 0.545248 28.9576C-0.13762 26.9952 -0.197443 24.8735 0.470052 22.9C0.741063 22.0992 1.25094 21.3921 1.49251 20.5826C1.50006 20.5575 1.50691 20.5317 1.514 20.5064C1.36652 19.8599 1.20927 19.2113 1.09408 18.5582C0.629891 15.9251 1.09163 13.1416 2.66927 10.9391C4.82219 7.93387 7.45546 7.62787 10.0892 5.57578C11.6774 4.33825 12.8009 2.69648 14.5589 1.64317C15.8081 0.894923 17.2348 0.349741 18.6771 0.120707ZM26.2181 29.7584C25.7367 29.8829 25.2307 29.9468 24.7093 29.94C24.6091 29.9387 24.5093 29.9347 24.4105 29.9283C24.01 31.8951 23.348 33.6328 21.5794 34.9068C21.2508 35.1436 20.9029 35.3592 20.5609 35.5768C20.0231 37.3926 20.2482 39.1154 21.1566 40.7701C22.2928 42.8401 24.0438 44.833 26.3919 45.5231C27.7364 45.9179 29.2245 45.7852 30.5433 45.36C29.091 43.9281 27.9363 42.5036 27.9202 40.3736C27.9112 39.1552 28.2604 37.9744 28.4095 36.7731C28.7219 34.2582 27.8379 31.6969 26.2181 29.7584ZM41.4554 38.1705C40.3617 38.3223 39.2627 38.3996 38.1585 38.401C35.4163 38.4186 32.5499 38.135 30.3128 40.0484C30.3229 41.2878 30.6218 42.1511 31.512 43.0221C31.5883 43.0964 31.6667 43.1683 31.7474 43.2379C32.7239 43.9912 33.807 44.4741 35.0697 44.3131C37.059 44.0589 39.0057 42.2873 40.1702 40.7721C40.5784 40.2408 41.6315 38.8849 41.6898 38.234L41.6077 38.1578L41.4554 38.1705ZM30.1898 26.0299C29.8465 27.0905 29.1956 28.0128 28.3431 28.6949C28.6401 29.1335 28.9756 29.5571 29.2376 30.0084C30.4972 32.1777 30.8434 34.5332 30.8099 36.9986C31.7516 36.6284 32.6812 36.3293 33.6888 36.1949C36.6828 35.7957 39.9967 36.4987 42.848 35.2994C44.5512 34.5828 45.8391 33.1512 46.5111 31.4576C47.1755 29.7834 47.1944 28.2783 46.4798 26.6256C45.7572 27.3829 45.0313 28.1561 44.1663 28.7564C42.0522 30.2235 39.4041 30.5654 37.0492 29.4459C36.3133 29.0962 35.6386 28.6162 34.9583 28.1725C33.4437 27.1845 31.9486 26.4097 30.1898 26.0299ZM7.03451 19.6354C6.98106 19.6384 6.92764 19.6428 6.87435 19.6471C5.39027 19.9653 4.28818 20.8878 3.48177 22.1451C3.42046 22.2392 3.36146 22.3353 3.30501 22.4322C3.24852 22.5291 3.19446 22.6276 3.1429 22.7272C3.09135 22.8269 3.0419 22.9278 2.99544 23.0299C2.94885 23.132 2.905 23.2361 2.86361 23.3404C2.82228 23.4446 2.78338 23.5498 2.7474 23.6559C2.71129 23.7622 2.67749 23.8702 2.64681 23.9781C2.6161 24.0861 2.58803 24.1951 2.56283 24.3043C2.53766 24.4133 2.51519 24.5231 2.49544 24.6334C2.47575 24.7437 2.45883 24.8551 2.44466 24.9664C2.43049 25.0778 2.41904 25.1895 2.41048 25.3014C2.40185 25.4132 2.39585 25.5253 2.3929 25.6373C2.38996 25.7494 2.39023 25.8622 2.3929 25.9742C2.39565 26.0863 2.40122 26.1984 2.40951 26.3102C2.4178 26.4221 2.4288 26.5338 2.44271 26.6451C2.45655 26.7564 2.47305 26.8676 2.49251 26.9781C2.51197 27.0886 2.53392 27.1989 2.55892 27.3082C2.94782 28.9708 3.69351 30.5949 4.22005 32.2232C5.80971 31.1376 7.82233 31.0684 9.48958 30.0904C11.9731 28.5735 13.8042 26.2133 16.2191 24.5738C15.6143 24.0327 14.8826 23.657 14.2474 23.1539C12.0651 21.4257 10.0354 19.4731 7.03451 19.6354ZM24.7962 20.6773C22.7963 20.6773 21.1753 22.2985 21.1751 24.2984C21.1751 26.2985 22.7962 27.9205 24.7962 27.9205C26.7962 27.9204 28.4173 26.2984 28.4173 24.2984C28.4172 22.2986 26.7961 20.6775 24.7962 20.6773ZM43.8324 11.4488C43.0289 12.1922 42.3727 12.969 41.9066 13.9645C41.2915 15.2788 41.1232 16.7031 40.7718 18.0934C39.8675 21.6688 37.9314 24.1686 34.2396 25.0426C35.4388 25.8212 36.6669 26.7716 37.9701 27.357C39.3027 27.8182 40.7142 27.9414 42.0179 27.3199C44.0095 26.3703 45.4689 23.8909 46.1576 21.8951C46.9844 19.4986 47.1969 16.7643 46.0443 14.4361C45.5152 13.3678 44.7272 12.2511 43.8324 11.4488ZM15.1742 11.4635C14.2222 9.13876 11.8031 8.55335 9.4974 9.03379C7.46641 9.4572 5.52447 10.8922 4.39876 12.6061C3.22808 14.3886 3.08261 16.5389 3.51497 18.5787C3.52681 18.6341 3.53982 18.6896 3.55306 18.7447C5.12576 17.5777 6.7357 17.0624 8.70247 17.3522C10.2343 17.5778 11.5913 18.2751 12.849 19.1481C14.8281 20.5221 16.4069 22.4069 18.9788 22.5934C19.104 22.6024 19.2331 22.6096 19.3636 22.6129C19.6493 21.7076 20.158 20.9015 20.8255 20.2574C20.4748 20.0556 20.1204 19.8533 19.8314 19.5856C19.8006 19.5676 19.7692 19.5496 19.7386 19.5309C19.3846 19.3146 19.0689 18.9929 18.7738 18.7047C17.5389 17.4986 16.6416 16.1442 16.0628 14.5191C15.7083 13.5231 15.5708 12.4324 15.1742 11.4635ZM19.8529 2.20371C17.617 2.24302 15.638 3.47342 14.1302 5.04258C13.662 5.52988 13.2353 6.06534 12.7962 6.57871C14.6389 7.12496 16.1372 8.07611 17.0706 9.79356C17.5199 10.6204 17.7418 11.5068 17.9818 12.4078C18.7646 15.3457 19.5395 16.2739 21.9359 17.9996C22.3104 18.2277 22.6927 18.4426 23.0824 18.6441C23.0589 18.2541 23.0383 17.8679 23.0482 17.4772C23.0408 16.1591 23.2249 14.8866 23.556 13.6109C23.8509 12.4752 24.299 11.3834 24.5951 10.2506C25.1848 7.99427 25.1993 5.25276 23.4085 3.5045C22.4541 2.57285 21.1727 2.18065 19.8529 2.20371Z" fill="white"/>
13
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M99.0257 20.6354C101.184 20.6354 102.946 21.0825 104.309 21.9772C105.492 22.7331 106.486 23.6516 107.291 24.732V21.274H109.677V41.7242H107.291V38.2652C106.485 39.3479 105.492 40.2742 104.309 41.0426C102.946 41.9231 101.184 42.3639 99.0257 42.3639C96.8955 42.3639 95.0207 41.8731 93.4017 40.8932C91.797 39.8991 90.54 38.5785 89.6312 36.9313C89.3832 36.4746 89.1708 36.0048 88.9915 35.5231V41.7242H86.6048V28.6871C86.6048 26.9832 86.1294 25.5988 85.1781 24.5338C84.2266 23.4687 82.8134 22.9361 80.9388 22.9361C79.7175 22.9361 78.6024 23.2124 77.5941 23.7662C76.6 24.3201 75.8048 25.1017 75.2083 26.11C74.6262 27.1039 74.3353 28.2612 74.3353 29.5816V41.7242H71.9495V28.6871C71.9495 26.9831 71.4732 25.5988 70.5218 24.5338C69.5703 23.4687 68.1572 22.9361 66.2826 22.9361C65.0613 22.9362 63.9461 23.2124 62.9378 23.7662C61.9438 24.3201 61.1485 25.1017 60.5521 26.11C59.97 27.1039 59.6791 28.2612 59.679 29.5816V41.7242H57.2933V21.274H59.679V24.3844C60.3039 23.4755 60.9928 22.7512 61.7454 22.2115C62.5123 21.6577 63.3148 21.2596 64.1527 21.0182C64.9903 20.7626 65.8423 20.6354 66.7083 20.6354C68.5686 20.6354 70.0601 21.0326 71.182 21.8277C72.3181 22.623 73.1424 23.5891 73.6536 24.7252C74.8892 23.0352 76.1815 21.9347 77.5306 21.4234C78.8796 20.898 80.1576 20.6354 81.3646 20.6354C83.1682 20.6354 84.6313 21.0043 85.7533 21.7428C86.8751 22.4812 87.6922 23.4182 88.2035 24.5543C88.6638 25.5371 88.9218 26.5312 88.9788 27.5357C89.0048 27.4652 89.0286 27.3938 89.056 27.3238C89.5814 26.0032 90.3131 24.8462 91.2503 23.8522C92.2018 22.8438 93.3378 22.055 94.6585 21.4869C95.9793 20.9189 97.4351 20.6354 99.0257 20.6354ZM99.0687 22.9361C97.464 22.9361 96.0434 23.2833 94.8079 23.9791C93.5724 24.675 92.5991 25.6692 91.889 26.9615C91.1931 28.2397 90.8451 29.7528 90.8451 31.4996C90.8451 33.2462 91.1932 34.7587 91.889 36.0367C92.5991 37.3149 93.5724 38.3091 94.8079 39.0191C96.0434 39.715 97.464 40.0631 99.0687 40.0631C100.673 40.063 102.093 39.7149 103.328 39.0191C104.564 38.3091 105.53 37.3149 106.226 36.0367C106.936 34.7587 107.291 33.2463 107.291 31.4996C107.291 29.7528 106.936 28.2397 106.226 26.9615C105.53 25.6693 104.564 24.6749 103.328 23.9791C102.093 23.2834 100.673 22.9362 99.0687 22.9361Z" fill="white"/>
14
+ <path d="M158.805 41.7252H156.419V21.275H158.805V41.7252Z" fill="white"/>
15
+ <path d="M154.308 41.7242H151.922V11.0494H154.308V41.7242Z" fill="white"/>
16
+ <path d="M157.612 12.9674C158.165 12.9674 158.634 13.1656 159.018 13.5631C159.416 13.9465 159.615 14.4155 159.615 14.9693C159.615 15.5232 159.416 15.9994 159.018 16.3971C158.634 16.7804 158.165 16.9723 157.612 16.9723C157.058 16.9722 156.582 16.7803 156.185 16.3971C155.801 15.9994 155.61 15.5232 155.61 14.9693C155.61 14.4155 155.801 13.9465 156.185 13.5631C156.582 13.1657 157.058 12.9675 157.612 12.9674Z" fill="white"/>
17
+ </svg>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/resize-all.cjs ADDED
@@ -0,0 +1,29 @@
1
+ // resize-all.js
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+ const sharp = require('sharp');
5
+
6
+ // Какие размеры тебе нужны
7
+ const sizes = [400, 800, 1200];
8
+
9
+ const inputDir = './public'; // свои пути
10
+ const outputDir = './public';
11
+
12
+ // Перебираем все файлы в исходной папке
13
+ fs.readdirSync(inputDir).forEach(file => {
14
+ const ext = path.extname(file);
15
+ const base = path.basename(file, ext);
16
+ if (!['.jpg', '.jpeg', '.png', '.webp'].includes(ext.toLowerCase())) return;
17
+
18
+ sizes.forEach(width => {
19
+ sharp(path.join(inputDir, file))
20
+ .resize(width)
21
+ .toFile(path.join(outputDir, `${base}-${width}${ext}`), (err) => {
22
+ if (err) console.error(`Ошибка на ${base}-${width}${ext}:`, err);
23
+ else console.log(`Сделан: ${base}-${width}${ext}`);
24
+ });
25
+ });
26
+
27
+ // Копируем оригинал тоже (максимальный)
28
+ fs.copyFileSync(path.join(inputDir, file), path.join(outputDir, `${base}${ext}`));
29
+ });
@@ -0,0 +1,208 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Скрипт для управления featured постами
5
+ * Использование:
6
+ * npm run featured:add post-slug
7
+ * npm run featured:remove post-slug
8
+ * npm run featured:list
9
+ */
10
+
11
+ import fs from 'fs/promises';
12
+ import path from 'path';
13
+ import { fileURLToPath } from 'url';
14
+
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = path.dirname(__filename);
17
+
18
+ const BLOG_CONTENT_DIR = path.join(__dirname, '../src/content/blog');
19
+ const MAX_FEATURED = 3;
20
+
21
+ const [,, command, postId] = process.argv;
22
+
23
+ /**
24
+ * Получает все посты из директории
25
+ */
26
+ async function getAllPosts() {
27
+ try {
28
+ const files = await fs.readdir(BLOG_CONTENT_DIR);
29
+ const posts = [];
30
+
31
+ for (const file of files) {
32
+ if (file.endsWith('.md')) {
33
+ const filePath = path.join(BLOG_CONTENT_DIR, file);
34
+ const content = await fs.readFile(filePath, 'utf-8');
35
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
36
+
37
+ if (frontmatterMatch) {
38
+ const frontmatter = frontmatterMatch[1];
39
+ const isFeatured = frontmatter.includes('isFeatured: true');
40
+ const titleMatch = frontmatter.match(/title:\s*['"]?(.*?)['"]?\s*$/m);
41
+ const dateMatch = frontmatter.match(/publishDate:\s*['"]?(.*?)['"]?\s*$/m);
42
+
43
+ posts.push({
44
+ id: file.replace('.md', ''),
45
+ title: titleMatch ? titleMatch[1] : 'Без названия',
46
+ publishDate: dateMatch ? new Date(dateMatch[1]) : new Date(),
47
+ isFeatured,
48
+ filePath
49
+ });
50
+ }
51
+ }
52
+ }
53
+
54
+ return posts;
55
+ } catch (error) {
56
+ console.error('Ошибка при чтении постов:', error);
57
+ return [];
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Изменяет статус isFeatured в frontmatter файла
63
+ */
64
+ async function setFeaturedStatus(postId, isFeatured) {
65
+ const filePath = path.join(BLOG_CONTENT_DIR, `${postId}.md`);
66
+
67
+ try {
68
+ const content = await fs.readFile(filePath, 'utf-8');
69
+
70
+ // Разделяем на frontmatter и содержимое
71
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
72
+
73
+ if (!frontmatterMatch) {
74
+ throw new Error(`Не найден frontmatter в файле: ${filePath}`);
75
+ }
76
+
77
+ let [, frontmatter, body] = frontmatterMatch;
78
+
79
+ // Обновляем или добавляем isFeatured
80
+ if (frontmatter.includes('isFeatured:')) {
81
+ // Заменяем существующее значение
82
+ frontmatter = frontmatter.replace(
83
+ /isFeatured:\s*(true|false)/,
84
+ `isFeatured: ${isFeatured}`
85
+ );
86
+ } else {
87
+ // Добавляем новое поле после title (если есть)
88
+ if (frontmatter.includes('title:')) {
89
+ frontmatter = frontmatter.replace(
90
+ /(title:.*\n)/,
91
+ `$1isFeatured: ${isFeatured}\n`
92
+ );
93
+ } else {
94
+ // Добавляем в конец frontmatter
95
+ frontmatter = `${frontmatter.trim()}\nisFeatured: ${isFeatured}`;
96
+ }
97
+ }
98
+
99
+ // Записываем обновленный файл
100
+ const updatedContent = `---\n${frontmatter}\n---\n${body}`;
101
+ await fs.writeFile(filePath, updatedContent, 'utf-8');
102
+
103
+ } catch (error) {
104
+ console.error(`Ошибка при обновлении файла ${filePath}:`, error);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Добавляет статью в featured и управляет лимитом
110
+ */
111
+ async function addFeatured(newPostId) {
112
+ try {
113
+ const allPosts = await getAllPosts();
114
+
115
+ // Находим текущие featured посты, отсортированные по дате (старые первые)
116
+ const currentFeatured = allPosts
117
+ .filter(post => post.isFeatured)
118
+ .sort((a, b) => a.publishDate.getTime() - b.publishDate.getTime());
119
+
120
+ // Если уже есть MAX_FEATURED featured постов, удаляем самый старый
121
+ if (currentFeatured.length >= MAX_FEATURED) {
122
+ const oldestFeatured = currentFeatured[0];
123
+ await setFeaturedStatus(oldestFeatured.id, false);
124
+ console.log(`🗑️ Убрали из featured самый старый пост: ${oldestFeatured.id}`);
125
+ }
126
+
127
+ // Добавляем новый пост в featured
128
+ await setFeaturedStatus(newPostId, true);
129
+ console.log(`⭐ Добавили в featured: ${newPostId}`);
130
+
131
+ // Выводим текущий список featured постов
132
+ await logCurrentFeatured();
133
+
134
+ } catch (error) {
135
+ console.error('Ошибка при управлении featured постами:', error);
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Убирает статью из featured
141
+ */
142
+ async function removeFeatured(postId) {
143
+ await setFeaturedStatus(postId, false);
144
+ }
145
+
146
+ /**
147
+ * Выводит текущий список featured постов
148
+ */
149
+ async function logCurrentFeatured() {
150
+ try {
151
+ const allPosts = await getAllPosts();
152
+ const featured = allPosts
153
+ .filter(post => post.isFeatured)
154
+ .sort((a, b) => b.publishDate.getTime() - a.publishDate.getTime());
155
+
156
+ console.log('\n📌 Текущие featured посты:');
157
+ featured.forEach((post, index) => {
158
+ console.log(`${index + 1}. ${post.id} (${post.publishDate.toLocaleDateString()})`);
159
+ });
160
+ console.log(`📊 Всего featured: ${featured.length}/${MAX_FEATURED}\n`);
161
+
162
+ } catch (error) {
163
+ console.error('Ошибка при получении featured постов:', error);
164
+ }
165
+ }
166
+
167
+ async function main() {
168
+ switch (command) {
169
+ case 'add':
170
+ if (!postId) {
171
+ console.error('❌ Укажите ID поста: npm run featured:add post-id');
172
+ process.exit(1);
173
+ }
174
+ await addFeatured(postId);
175
+ break;
176
+
177
+ case 'remove':
178
+ if (!postId) {
179
+ console.error('❌ Укажите ID поста: npm run featured:remove post-id');
180
+ process.exit(1);
181
+ }
182
+ await removeFeatured(postId);
183
+ console.log(`🗑️ Убрали из featured: ${postId}`);
184
+ await logCurrentFeatured();
185
+ break;
186
+
187
+ case 'list':
188
+ await logCurrentFeatured();
189
+ break;
190
+
191
+ default:
192
+ console.log(`
193
+ 📌 Управление featured постами
194
+
195
+ Команды:
196
+ add <post-id> - Добавить пост в featured (макс. 3)
197
+ remove <post-id> - Убрать пост из featured
198
+ list - Показать текущие featured посты
199
+
200
+ Примеры:
201
+ npm run featured:add post-1-avtomatizaciya-marketinga-kak-ii-osvobozhdaet-predprinimatelei-ot-cifrovogo-rabstva
202
+ npm run featured:remove post-2-avtomatizaciya-kontenta-kak-neiroseti-ubivayut-perfekcionizm-v-biznese
203
+ npm run featured:list
204
+ `);
205
+ }
206
+ }
207
+
208
+ main().catch(console.error);
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'fs/promises';
3
+ import path from 'path';
4
+ import { execSync } from 'child_process';
5
+
6
+ async function main() {
7
+ const root = process.cwd();
8
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
9
+ const backupDir = path.join(root, `maugli-backup-${stamp}`);
10
+ await fs.mkdir(backupDir, { recursive: true });
11
+
12
+ const items = [
13
+ { src: 'src/content', dest: 'content' },
14
+ { src: 'src/styles/global.css', dest: 'global.css' },
15
+ { src: 'src/config/maugli.config.ts', dest: 'maugli.config.ts' }
16
+ ];
17
+
18
+ for (const { src, dest } of items) {
19
+ const from = path.join(root, src);
20
+ try {
21
+ await fs.cp(from, path.join(backupDir, dest), { recursive: true });
22
+ } catch (err) {
23
+ // ignore missing files
24
+ }
25
+ }
26
+
27
+ console.log(`Backup created at ${backupDir}`);
28
+ execSync('npm update', { stdio: 'inherit' });
29
+ }
30
+
31
+ main().catch(err => {
32
+ console.error('Backup update failed:', err);
33
+ process.exit(1);
34
+ });
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env node
2
+
3
+ import fs from 'fs/promises';
4
+ import path from 'path';
5
+ import os from 'os';
6
+ import { fileURLToPath, pathToFileURL } from 'url';
7
+ import ts from 'typescript';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+
12
+ const defaultConfigPath = path.join(__dirname, '../src/config/maugli.config.ts');
13
+ const userConfigPath = path.join(process.cwd(), 'src/config/maugli.config.ts');
14
+
15
+ async function loadTsModule(filePath) {
16
+ const code = await fs.readFile(filePath, 'utf8');
17
+ const js = ts.transpileModule(code, {
18
+ compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2020 }
19
+ }).outputText;
20
+ const tmp = path.join(os.tmpdir(), `maugli-${Date.now()}.mjs`);
21
+ await fs.writeFile(tmp, js, 'utf8');
22
+ const mod = await import(pathToFileURL(tmp).href);
23
+ await fs.unlink(tmp);
24
+ return mod;
25
+ }
26
+
27
+ function mergeMissing(target, source) {
28
+ for (const key of Object.keys(source)) {
29
+ if (key === 'configVersion') continue;
30
+ const sv = source[key];
31
+ const tv = target[key];
32
+ if (sv && typeof sv === 'object' && !Array.isArray(sv)) {
33
+ if (!tv || typeof tv !== 'object' || Array.isArray(tv)) {
34
+ if (!(key in target)) target[key] = sv;
35
+ } else {
36
+ mergeMissing(tv, sv);
37
+ }
38
+ } else {
39
+ if (!(key in target)) target[key] = sv;
40
+ }
41
+ }
42
+ }
43
+
44
+ async function main() {
45
+ const pkg = await loadTsModule(defaultConfigPath);
46
+ const defCfg = pkg.maugliConfig;
47
+ const newVersion = pkg.MAUGLI_CONFIG_VERSION || defCfg.configVersion;
48
+
49
+ let user;
50
+ try {
51
+ user = await loadTsModule(userConfigPath);
52
+ } catch (err) {
53
+ console.error(`Cannot find user config at ${userConfigPath}`);
54
+ process.exit(1);
55
+ }
56
+ const userCfg = user.maugliConfig;
57
+ if (userCfg.configVersion === newVersion) {
58
+ console.log('maugli.config.ts is already up to date');
59
+ return;
60
+ }
61
+
62
+ mergeMissing(userCfg, defCfg);
63
+ userCfg.configVersion = newVersion;
64
+
65
+ const defText = await fs.readFile(defaultConfigPath, 'utf8');
66
+ const headerEnd = defText.indexOf('export const maugliConfig');
67
+ let header = defText.slice(0, headerEnd);
68
+ header = header.replace(/MAUGLI_CONFIG_VERSION\s*=\s*['\"][^'\"]*['\"]/, `MAUGLI_CONFIG_VERSION = '${newVersion}'`);
69
+ let bracePos = defText.indexOf('{', headerEnd);
70
+ let count = 0, i = bracePos;
71
+ for (; i < defText.length; i++) {
72
+ if (defText[i] === '{') count++;
73
+ else if (defText[i] === '}') count--;
74
+ if (count === 0) break;
75
+ }
76
+ let j = i;
77
+ while (j < defText.length && defText[j] !== ';') j++;
78
+ const tail = defText.slice(j + 1);
79
+
80
+ const newObject = JSON.stringify(userCfg, null, 2);
81
+ const result = `${header}export const maugliConfig: MaugliConfig = ${newObject};${tail}`;
82
+ await fs.writeFile(userConfigPath, result, 'utf8');
83
+ console.log(`Upgraded maugli.config.ts to version ${newVersion}`);
84
+ }
85
+
86
+ main().catch(err => {
87
+ console.error('Upgrade failed:', err);
88
+ process.exit(1);
89
+ });
90
+
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'fs';
3
+ import { createHash } from 'crypto';
4
+
5
+ const files = {
6
+ 'src/components/MaugliFloatingLabel.astro': 'ca96de8e3632806e83ab7db3973c569b0e039f98e2d8830175a559a0b239108e',
7
+ 'public/footerlabel.svg': '641b87e957ed5525b45f0bb94671e55f256302a64bbcd2f738a118bffa1f6bfe'
8
+ };
9
+
10
+ for (const [file, expectedHash] of Object.entries(files)) {
11
+ const content = readFileSync(file);
12
+ const hash = createHash('sha256').update(content).digest('hex');
13
+ if (hash !== expectedHash) {
14
+ console.error(`❌ Hash mismatch for ${file}. Build aborted.`);
15
+ process.exit(1);
16
+ }
17
+ }
18
+
19
+ const configContent = readFileSync('src/config/maugli.config.ts', 'utf8');
20
+ const proMatch = configContent.match(/isProTemplate:\s*(true|false)/);
21
+ const isProTemplate = proMatch && proMatch[1] === 'true';
22
+
23
+ if (isProTemplate && process.env.MAUGLI_LICENSE_CONFIRMED !== 'true') {
24
+ console.error('❌ Pro template requires a confirmed license. Set MAUGLI_LICENSE_CONFIRMED=true.');
25
+ process.exit(1);
26
+ }
27
+
28
+ console.log('✅ Asset hashes and license verified.');
@@ -0,0 +1,103 @@
1
+ ---
2
+ import { type CollectionEntry } from 'astro:content';
3
+ import { getFilteredCollection } from '../utils/content-loader';
4
+ import { maugliConfig } from '../config/maugli.config';
5
+ import { LANGUAGES } from '../i18n/languages';
6
+ import FormattedDate from './FormattedDate.astro';
7
+ // Универсальный импорт словарей по доступным языкам
8
+ const dicts: Record<string, any> = {};
9
+ for (const lang of LANGUAGES) {
10
+ try {
11
+ dicts[lang.code] = await import(`../i18n/${lang.code}.json`).then((m) => m.default);
12
+ } catch {}
13
+ }
14
+ const lang = maugliConfig.defaultLang || 'en';
15
+ const dict = dicts[lang] || dicts['en'] || {};
16
+
17
+ export interface Props {
18
+ publishDate?: Date;
19
+ readingTime?: string;
20
+ post?: CollectionEntry<'blog'>;
21
+ author?: string;
22
+ authorImage?: string;
23
+ class?: string;
24
+ }
25
+
26
+ const { publishDate, readingTime = '5', post, author, authorImage, class: className = '' } = Astro.props;
27
+
28
+ // Логика выбора дефолтного автора:
29
+ // 1. Если defaultAuthorId указан и есть в коллекции — он дефолтный.
30
+ // 2. Если defaultAuthorId не указан или такого автора нет — дефолтный автор = первый из коллекции.
31
+ // 3. Если в статье указан автор, но его нет в коллекции — используем дефолтного автора.
32
+ // 4. Если коллекция авторов пуста — ошибка.
33
+
34
+ let authors = [];
35
+ try {
36
+ authors = await getFilteredCollection('authors');
37
+ } catch (e) {
38
+ console.warn('Не удалось загрузить коллекцию авторов:', e);
39
+ }
40
+
41
+ if (authors.length === 0) {
42
+ throw new Error('В коллекции авторов нет ни одного автора. Создайте хотя бы одного автора!');
43
+ }
44
+
45
+ let defaultAuthorData = null;
46
+ if (maugliConfig.defaultAuthorId) {
47
+ defaultAuthorData = authors.find((a) => a.id === maugliConfig.defaultAuthorId);
48
+ }
49
+ if (!defaultAuthorData) {
50
+ defaultAuthorData = authors[0];
51
+ }
52
+
53
+ let authorId = post?.data.author || defaultAuthorData.id;
54
+ let authorData = authors.find((a) => a.id === authorId);
55
+ if (!authorData) {
56
+ authorData = defaultAuthorData;
57
+ authorId = defaultAuthorData.id;
58
+ }
59
+ let authorName = authorData.data.name;
60
+ let authorImg = authorData.data.avatar || 'src/img/default/autor_default.webp';
61
+ ---
62
+
63
+ <!-- Метаинформация сверху -->
64
+ <div class:list={['mb-6 flex items-center gap-4 text-sm', className]}>
65
+ <div class="flex items-center gap-2">
66
+ {
67
+ authorId ? (
68
+ <a
69
+ href={`/authors/${authorId}`}
70
+ class="author-link flex items-center gap-2 hover:opacity-80 transition-opacity duration-200 cursor-pointer"
71
+ title={`${dict.pages.authors.goToAuthor}: ${authorName}`}
72
+ data-astro-reload
73
+ style="text-decoration: none; color: inherit; z-index: 10; position: relative;"
74
+ >
75
+ <img src={authorImg} alt={authorName} class="w-8 h-8 rounded-full" />
76
+ <span class="font-medium hover:text-[var(--brand-color)] transition-colors duration-200">{authorName}</span>
77
+ </a>
78
+ ) : (
79
+ <>
80
+ <img src={authorImg} alt={authorName} class="w-8 h-8 rounded-full" />
81
+ <span class="font-medium">{authorName}</span>
82
+ </>
83
+ )
84
+ }
85
+ </div>
86
+ {
87
+ publishDate && (
88
+ <>
89
+ <span style="color: var(--text-muted)">•</span>
90
+ <div style="color: var(--text-muted)">
91
+ <FormattedDate date={publishDate} />
92
+ </div>
93
+ </>
94
+ )
95
+ }
96
+ <span style="color: var(--text-muted)">•</span>
97
+ <div class="flex items-center gap-1" style="color: var(--text-muted)">
98
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
99
+ <path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20"></path>
100
+ </svg>
101
+ <span>{readingTime} {dict.pages.index.minutes}</span>
102
+ </div>
103
+ </div>