update theme without example page

This commit is contained in:
Christoph Cullmann 2024-04-29 22:50:58 +02:00
parent ccbdfed13b
commit 0150905493
729 changed files with 50 additions and 58030 deletions

View file

@ -2,4 +2,4 @@
[module.hugoVersion] [module.hugoVersion]
extended = true extended = true
min = "0.87.0" min = "0.87.0"
max = "0.124.1" max = "0.125.4"

View file

@ -1,6 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

View file

@ -1,76 +0,0 @@
var layouts = [
"background",
"hero",
"profile",
"page",
"card"
]
var currentLayout = 0
function switchHomeLayout() {
var old = currentLayout
currentLayout = currentLayout == layouts.length - 1 ? 0 : currentLayout + 1
var oldDiv = document.getElementById(layouts[old])
var currentDiv = document.getElementById(layouts[currentLayout])
const layoutCode = document.querySelectorAll("code[id=layout]");
currentDiv.style.display = "block";
oldDiv.style.display = "none";
layoutCode.forEach(function (el) {
el.innerText = layouts[currentLayout];
});
}
window.addEventListener("DOMContentLoaded", (event) => {
document.querySelectorAll("#switch-layout-button").forEach((button) =>
button.addEventListener("click", function (e) {
e.preventDefault();
switchHomeLayout();
})
);
});
var list_config = [
"CardViewProse",
"CardViewScreenWidth",
"NormalView"
]
var titles = {
"CardViewProse" : "card view with constrained width",
"CardViewScreenWidth" : "card view with full width",
"NormalView" : "standard list view"
}
var currentConfig = 0
function switchList() {
var old = currentConfig
currentConfig = currentConfig == list_config.length - 1 ? 0 : currentConfig + 1
var oldDiv = document.getElementById(list_config[old])
var currentDiv = document.getElementById(list_config[currentConfig])
const configCode = document.querySelectorAll("code[id=config]");
currentDiv.style.display = "block";
oldDiv.style.display = "none";
configCode.forEach(function (el) {
el.innerText = titles[list_config[currentConfig]];
});
}
window.addEventListener("DOMContentLoaded", (event) => {
document.querySelectorAll("#switch-config-button").forEach((button) =>
button.addEventListener("click", function (e) {
e.preventDefault();
switchList();
})
);
});

View file

@ -1,68 +0,0 @@
# -- Site Configuration --
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/getting-started/
theme = "blowfish"
baseURL = "https://localhost:1313"
defaultContentLanguage = "en"
disableLanguages = [] #to allow translation work requiring shipping to production
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
enableRobotsTXT = true
paginate = 100
summaryLength = 30
hasCJKLanguage = true
buildDrafts = false
buildFuture = false
googleAnalytics = "G-PEDMYR1V0K"
[imaging]
anchor = 'Center'
[taxonomies]
tag = "tags"
category = "categories"
author = "authors"
series = "series"
[sitemap]
changefreq = 'always'
filename = 'sitemap.xml'
priority = 0.5
[outputs]
home = ["HTML", "RSS", "JSON"]
[related]
threshold = 0
toLower = false
[[related.indices]]
name = "tags"
weight = 100
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "series"
weight = 50
[[related.indices]]
name = "authors"
weight = 20
[[related.indices]]
name = "date"
weight = 10
[[related.indices]]
applyFilter = false
name = 'fragmentrefs'
type = 'fragments'
weight = 10

View file

@ -1,22 +0,0 @@
languageCode = "en"
languageName = "English"
weight = 1
title = "Blowfish"
[params]
displayName = "English"
isoCode = "en"
rtl = false
dateFormat = "2 January 2006"
logo = "img/blowfish_logo_transparent.png"
description = "A powerful, lightweight theme for Hugo."
[author]
name = "Blowfish"
image = "img/blowfish_logo.png"
headline = "A powerful, lightweight theme for Hugo."
bio = "A powerful, lightweight theme for Hugo."
links = [
{ x-twitter = "https://twitter.com/burufugu" },
{ github = "https://github.com/nunocoracao/blowfish" },
]

View file

@ -1,22 +0,0 @@
languageCode = "it"
languageName = "Italiano"
weight = 2
title = "Blowfish"
[params]
displayName = "Italiano"
isoCode = "it"
rtl = false
dateFormat = "2 January 2006"
logo = "img/blowfish_logo_transparent.png"
description = "Un potente, leggero tema per Hugo."
[author]
name = "Blowfish"
image = "img/blowfish_logo.png"
headline = "Un potente, leggero tema per Hugo."
bio = "Un potente, leggero tema per Hugo."
links = [
{ x-twitter = "https://twitter.com/burufugu" },
{ github = "https://github.com/nunocoracao/blowfish" },
]

View file

@ -1,22 +0,0 @@
languageCode = "ja"
languageName = "日本語"
weight = 3
title = "Blowfish"
[params]
displayName = "日本語"
isoCode = "ja"
rtl = false
dateFormat = "2006-01-02"
logo = "img/blowfish_logo_transparent.png"
description = "強力で、軽量な Hugo のテーマです。"
[author]
name = "Blowfish"
image = "img/blowfish_logo.png"
headline = "強力で、軽量な Hugo のテーマです。"
bio = "強力で、軽量な Hugo のテーマです。"
links = [
{ x-twitter = "https://twitter.com/burufugu" },
{ github = "https://github.com/nunocoracao/blowfish" },
]

View file

@ -1,22 +0,0 @@
languageCode = "zh-cn"
languageName = "简体中文"
weight = 4
title = "Blowfish"
[params]
displayName = "简体中文"
isoCode = "zh-cn"
rtl = false
dateFormat = "2006-01-02"
logo = "img/blowfish_logo_transparent.png"
description = "一个强大、轻量级的 Hugo 主题。"
[author]
name = "Blowfish"
image = "img/blowfish_logo.png"
headline = "一个强大、轻量级的 Hugo 主题。"
bio = "一个强大、轻量级的 Hugo 主题。"
links = [
{ x-twitter = "https://twitter.com/burufugu" },
{ github = "https://github.com/nunocoracao/blowfish" },
]

View file

@ -1,13 +0,0 @@
# -- Markup --
# These settings are required for the theme to function.
[goldmark]
[goldmark.renderer]
unsafe = true
[highlight]
noClasses = false
[tableOfContents]
startLevel = 2
endLevel = 4

View file

@ -1,91 +0,0 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
[[main]]
name = "Docs"
pageRef = "docs"
weight = 10
[[main]]
name = "Shortcodes"
pageRef = "docs/shortcodes"
weight = 15
[[main]]
name = "Examples"
weight = 20
[[main]]
name = "Samples"
parent = "Examples"
pageRef = "samples"
weight = 16
[[main]]
name = "Showcase"
parent = "Examples"
pageRef = "examples"
weight = 30
[[main]]
name = "Recipes"
parent = "Examples"
pageRef = "guides"
weight = 40
[[main]]
name = "Users"
pageRef = "users"
weight = 90
[[main]]
name = "Merch"
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
weight = 100
#[[main]]
# name = "Test"
# pageRef = "pagTest"
# weight = 1000
[[main]]
identifier = "twitter"
pre = "x-twitter"
url = "https://twitter.com/burufugu"
weight = 200
#[[main]]
# identifier = "mastodon"
# pre = "mastodon"
# weight = 300
# url = "https://masto.ai/@blowfish"
[[main]]
identifier = "github"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 400
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "Tags"
pageRef = "tags"
weight = 10
[[footer]]
name = "Authors"
pageRef = "authors"
weight = 20

View file

@ -1,91 +0,0 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
[[main]]
name = "Documenti"
pageRef = "docs"
weight = 10
[[main]]
name = "Shortcodes"
pageRef = "docs/shortcodes"
weight = 15
[[main]]
name = "Esempi"
weight = 20
[[main]]
name = "Campioni"
parent = "Esempi"
pageRef = "samples"
weight = 16
[[main]]
name = "Vetrina"
parent = "Esempi"
pageRef = "examples"
weight = 30
[[main]]
name = "Ricette"
parent = "Esempi"
pageRef = "guides"
weight = 40
[[main]]
name = "Utenti"
pageRef = "users"
weight = 90
[[main]]
name = "Merch"
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
weight = 100
#[[main]]
# name = "Test"
# pageRef = "pagTest"
# weight = 1000
[[main]]
identifier = "twitter"
pre = "x-twitter"
url = "https://twitter.com/burufugu"
weight = 200
#[[main]]
# identifier = "mastodon"
# pre = "mastodon"
# weight = 300
# url = "https://masto.ai/@blowfish"
[[main]]
identifier = "github"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 400
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "Tags"
pageRef = "tags"
weight = 10
[[footer]]
name = "Autori"
pageRef = "authors"
weight = 20

View file

@ -1,91 +0,0 @@
# -- メインメニュー --
# メインメニューはページトップのヘッダーに表示されます。
# 利用可能なパラメーターは name, pageRef, page, url, title, weight です。
#
# 最もシンプルなメニュー設定はこちらです:
# name = このメニューリンクに表示される名前
# pageRef = ページやセクションのリンクに利用される識別子
#
# デフォルトでは、メニューはアルファベット順に並べられます。
# これは、 weight value で上書き可能です。
# このメニューは weight が低い値から高い値に順に表示されます。
[[main]]
name = "資料"
pageRef = "docs"
weight = 10
[[main]]
name = "ショートコード"
pageRef = "docs/shortcodes"
weight = 15
[[main]]
name = "例"
weight = 20
[[main]]
name = "サンプル"
parent = "例"
pageRef = "samples"
weight = 16
[[main]]
name = "ショーケース"
parent = "例"
pageRef = "examples"
weight = 30
[[main]]
name = "レシピ"
parent = "例"
pageRef = "guides"
weight = 40
[[main]]
name = "ユーザー"
pageRef = "users"
weight = 90
[[main]]
name = "グッズ"
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
weight = 100
#[[main]]
# name = "テスト"
# pageRef = "pagTest"
# weight = 1000
[[main]]
identifier = "twitter"
pre = "x-twitter"
url = "https://twitter.com/burufugu"
weight = 200
#[[main]]
# identifier = "mastodon"
# pre = "mastodon"
# weight = 300
# url = "https://masto.ai/@blowfish"
[[main]]
identifier = "github"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 400
# -- フッターメニュー --
# このフッターメニューはページ下部のコピーライト表示の前に表示されます。
# 上記のメインメニューと同様に設定できます。
[[footer]]
name = "タグ"
pageRef = "tags"
weight = 10
[[footer]]
name = "著者"
pageRef = "authors"
weight = 20

View file

@ -1,91 +0,0 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
[[main]]
name = "文档"
pageRef = "docs"
weight = 10
[[main]]
name = "简码"
pageRef = "docs/shortcodes"
weight = 15
[[main]]
name = "示例"
weight = 20
[[main]]
name = "功能示例"
parent = "示例"
pageRef = "samples"
weight = 16
[[main]]
name = "模板示例"
parent = "示例"
pageRef = "examples"
weight = 30
[[main]]
name = "部署指南"
parent = "示例"
pageRef = "guides"
weight = 40
[[main]]
name = "用户列表"
pageRef = "users"
weight = 90
[[main]]
name = "周边"
url = "https://www.teepublic.com/user/blowfish-store/t-shirts"
weight = 100
#[[main]]
# name = "Test"
# pageRef = "pagTest"
# weight = 1000
[[main]]
identifier = "twitter"
pre = "x-twitter"
url = "https://twitter.com/burufugu"
weight = 200
#[[main]]
# identifier = "mastodon"
# pre = "mastodon"
# weight = 300
# url = "https://masto.ai/@blowfish"
[[main]]
identifier = "github"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 400
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "标签"
pageRef = "tags"
weight = 10
[[footer]]
name = "作者"
pageRef = "authors"
weight = 20

View file

@ -1,147 +0,0 @@
# -- Theme Options --
# These options control how the theme functions and allow you to
# customise the display of your website.
#
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/configuration/#theme-parameters
colorScheme = "blowfish"
defaultAppearance = "dark" # valid options: light or dark
autoSwitchAppearance = true
enableSearch = true
enableCodeCopy = true
mainSections = ["docs"]
# robots = ""
disableImageOptimization = false
disableTextInHeader = false
defaultBackgroundImage = "/img/background.svg"
defaultFeaturedImage = "/img/featured.svg"
highlightCurrentMenuArea = true
smartTOC = true
smartTOCHideUnfocusedChildren = false
[header]
layout = "fixed" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
[footer]
showMenu = true
showCopyright = true
showThemeAttribution = true
showAppearanceSwitcher = true
showScrollToTop = true
[homepage]
layout = "custom" # valid options: page, profile, hero, card, background, custom
# homepageImage = "/img/iceland.jpg" # used in: hero, and card
showRecent = false
showRecentItems = 6
showMoreLink = true
showMoreLinkDest = "docs"
cardView = true
cardViewScreenWidth = false
layoutBackgroundBlur = true # only used when layout equals background
[article]
showDate = false
showViews = true
showLikes = true
showDateOnlyInArticle = false
showDateUpdated = false
showAuthor = true
# showAuthorBottom = false
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background
showBreadcrumbs = true
showDraftLabel = true
showEdit = true
editURL = "https://github.com/nunocoracao/blowfish/tree/main/exampleSite/content"
editAppendPath = true
seriesOpened = false
showHeadingAnchors = true
showPagination = true
invertPagination = false
showReadingTime = true
showTableOfContents = true
showRelatedContent = true
relatedContentLimit = 6
showTaxonomies = true
showAuthorsBadges = true
showWordCount = false
sharingLinks = [ "linkedin", "twitter", "reddit", "whatsapp", "telegram", "pinterest", "facebook", "email"]
showZenMode = true
[list]
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background
layoutBackgroundHeaderSpace = false
showBreadcrumbs = false
showSummary = false
showViews = true
showLikes = true
showTableOfContents = true
showCards = true
groupByYear = false
cardView = true
cardViewScreenWidth = false
constrainItemsWidth = false
[sitemap]
excludedKinds = []
[taxonomy]
showTermCount = true
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = true
showLikes = true
showTableOfContents = true
cardView = false
[term]
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = true
showLikes = true
showTableOfContents = true
groupByYear = false
cardView = true
cardViewScreenWidth = false
[firebase]
apiKey = "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY"
authDomain = "blowfish-21fff.firebaseapp.com"
projectId = "blowfish-21fff"
storageBucket = "blowfish-21fff.appspot.com"
messagingSenderId = "60108104191"
appId = "1:60108104191:web:039842ebe1370698b487ca"
measurementId = "G-PEDMYR1V0K"
[fathomAnalytics]
# site = "ABC12345"
# domain = "llama.yoursite.com"
[umamiAnalytics]
# websiteid = "ABC12345"
# domain = "llama.yoursite.com"
[buymeacoffee]
identifier = "nunocoracao"
globalWidget = true
globalWidgetMessage = ""
globalWidgetColor = "#FFDD00"
globalWidgetPosition = "Right"
[verification]
# google = ""
# bing = ""
# pinterest = ""
# yandex = ""

View file

@ -1,25 +0,0 @@
---
title: "Benvenuti a Blowfish!"
description: "Questa pagina è stata creata utilizzando il tema Blowfish per Hugo."
---
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
{{< icon "triangle-exclamation" >}}
</span>
<span class="flex items-center justify-between grow dark:text-neutral-300">
<span class="prose dark:prose-invert">Questa è una demo del layout <code id="layout">background</code>.</span>
<pulsante
id="interruttore-layout-pulsante"
class="px-4 !text-neutral !no-underline round-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
>
Cambia layout &orarr;
</pulsante>
</span>
</div>
```node
npx blowfish-tools
```
{{< youtubeLite id="SgXhGb-7QbU" label="Demo degli strumenti Blowfish" >}}

View file

@ -1,29 +0,0 @@
---
title: "Blowfish へようこそ! :tada:"
description: "このページは Hugo の Blowfish テーマを利用して構築されています。"
---
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
{{< icon "triangle-exclamation" >}}
</span>
<span class="flex items-center justify-between grow dark:text-neutral-300">
<span class="prose dark:prose-invert">こちらは <code id="layout">background</code> レイアウトのデモです。</span>
<button
id="switch-layout-button"
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
>
レイアウトを変更する&orarr;
</button>
</span>
</div>
```node
npx blowfish-tools
```
{{< youtubeLite id="SgXhGb-7QbU" label="Blowfish-tools demo" >}}

View file

@ -1,29 +0,0 @@
---
title: "Welcome to Blowfish! :tada:"
description: "This page was built using the Blowfish theme for Hugo."
---
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
{{< icon "triangle-exclamation" >}}
</span>
<span class="flex items-center justify-between grow dark:text-neutral-300">
<span class="prose dark:prose-invert">This is a demo of the <code id="layout">background</code> layout.</span>
<button
id="switch-layout-button"
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
>
Switch layout &orarr;
</button>
</span>
</div>
```node
npx blowfish-tools
```
{{< youtubeLite id="SgXhGb-7QbU" label="Blowfish-tools demo" >}}

View file

@ -1,29 +0,0 @@
---
title: "欢迎来到 Blowfish! :tada:"
description: "此页面是使用 Hugo 的 Blowfish 主题搭建的"
---
<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
<span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
{{< icon "triangle-exclamation" >}}
</span>
<span class="flex items-center justify-between grow dark:text-neutral-300">
<span class="prose dark:prose-invert"> 这是 <code id="layout">background</code> 的样式示例。</span>
<button
id="switch-layout-button"
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
>
切换 layout &orarr;
</button>
</span>
</div>
```node
npx blowfish-tools
```
{{< youtubeLite id="SgXhGb-7QbU" label="Blowfish-tools demo" >}}

View file

@ -1,5 +0,0 @@
---
title: "Esempio di elenco di tassonomia degli autori"
---
Un rapido esempio di come iniziare a utilizzare le tassonomie degli autori nei tuoi articoli.

View file

@ -1,5 +0,0 @@
---
title: "著者の分類リストの例"
---
あなたの記事でどのように著者の分類を開始するかの簡単な例です。

View file

@ -1,5 +0,0 @@
---
title: "Authors Taxonomy Listing Example"
---
A quick example of how to start using author taxonomies in your articles.

View file

@ -1,5 +0,0 @@
---
title: "作者列表示例"
---
在你的文章中添加不同作者的简单示例。

View file

@ -1,5 +0,0 @@
---
title: "Nuno Coraçao"
---
La fantastica biografia di Nuno.

View file

@ -1,5 +0,0 @@
---
title: "Nuno Coração"
---
Nuno の素晴らしいダミープロフィールです。

View file

@ -1,5 +0,0 @@
---
title: "Nuno Coração"
---
Nuno's awesome dummy bio.

View file

@ -1,5 +0,0 @@
---
title: "Nuno Coração"
---
假装这里有一份 Nuno 的简介。

View file

@ -1,5 +0,0 @@
---
title: "Secondo autore fittizio"
---
La fantastica biografia fittizia di Dummy Second Author.

View file

@ -1,5 +0,0 @@
---
title: "2人目のダミー作者"
---
2人目のダミー作者の素晴らしいダミープロフィールです。

View file

@ -1,5 +0,0 @@
---
title: "Dummy Second Author"
---
Dummy Second Author's awesome dummy bio.

View file

@ -1,5 +0,0 @@
---
title: "Dummy Second Author"
---
假装这里有一份第二位作者的简介。

View file

@ -1,15 +0,0 @@
---
title: "Documenti"
description: "Scopri come utilizzare Blowfish e le sue funzionalità."
cascade:
showDate: false
showAuthor: false
invertPagination: true
---
{{< lead >}}
Semplice ma potente. Scopri come utilizzare Blowfish e le sue funzionalità.
{{< /lead >}}
Questa sezione contiene tutto ciò che devi sapere su Blowfish. Se sei nuovo, consulta la guida [Installazione]({{< ref "docs/installation" >}}) per iniziare o visita la sezione [Esempi]({{< ref "samples" >}}) per vedere cosa può fare Blowfish.

View file

@ -1,17 +0,0 @@
---
title: "資料"
description: "Blowfish の利用方法と特徴について学ぶ。"
cascade:
showDate: false
showAuthor: false
invertPagination: true
---
{{< lead >}}
シンプル、それでいて強力。 Blowfish の利用方法と特徴について学ぶ。
{{< /lead >}}
このセクションは Blowfish について知る必要のある全てのことが含まれています。新しく作成する場合は、開始するために[インストール]({{< ref "docs/installation" >}})ガイド、または Blowfish が何が出来るか[サンプル]({{< ref "samples" >}})セクションに訪れてください。
---

View file

@ -1,17 +0,0 @@
---
title: "Documentation"
description: "Learn how to use Blowfish and its features."
cascade:
showDate: false
showAuthor: false
invertPagination: true
---
{{< lead >}}
Simple, yet powerful. Learn how to use Blowfish and its features.
{{< /lead >}}
This section contains everything you need to know about Blowfish. If you're new, check out the [Installation]({{< ref "docs/installation" >}}) guide to begin or visit the [Samples]({{< ref "samples" >}}) section to see what Blowfish can do.
---

View file

@ -1,18 +0,0 @@
---
title: "文档"
description: "如何使用 Blowfish。"
cascade:
showDate: false
showAuthor: false
invertPagination: true
---
{{< lead >}}
了解如何使用简单而强大的 Blowfish。
{{< /lead >}}
本章节包含了你需要了解的有关 Blowfish 的所有信息。如果你是新用户,请查阅[安装]({{< ref "docs/installation" >}}) 指南,或者访问[示例]({{< ref "samples" >}}) 来了解 Blowfish 能做什么。
---

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

View file

@ -1,146 +0,0 @@
<svg id="canvas" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="0 0 600 600"><rect width="600" height="600" fill="transparent"></rect><mask id="mask" mask-type="alpha" maskUnits="userSpaceOnUse"><rect transform="translate(0, 0)" width="600" height="600" fill="white"></rect></mask><svg><path transform="translate(0, 0 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><path transform="translate(0, 3600 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="
translate(0, 120)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(0, 10800 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(0,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(0,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#03045e" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(0, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(0, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8"></circle></svg><svg><path transform="translate(0,360) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(0,360) translate(30,30) rotate(90) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(0, 25200 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(0, 480)
" fill="
#0077b6
"></circle></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(0, 540)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(3600, 0 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="
translate(60, 60)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="
translate(60, 120)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(3600, 10800 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><path transform="translate(3600, 14400 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><path transform="
translate(60, 300)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(60, 360)
" fill="
#03045e
"></circle></svg><svg><path transform="translate(60,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(60,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(60,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(60,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(3600, 32400 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 0)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(120,60) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0V0z"></path><path transform="translate(120,60) translate(30,30) rotate(180) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 120)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(120, 180) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(120, 180) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)" fill="#03045e" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)" fill="#00b4d8"></circle></svg><svg><path transform="translate(7200, 18000 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="translate(7200, 21600 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 420)
" fill="
#023e8a
"></circle></svg><svg><path transform="
translate(120, 480)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 540)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(10800, 0 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="
translate(180, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(180,120) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(180,120) translate(30,30) rotate(90) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(180, 180)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(180, 240)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(180,300) translate(30,30) rotate(0) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(180,300) translate(30,30) rotate(0) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(180, 360)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><path transform="
translate(180, 420)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="
translate(180, 480)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="translate(10800, 32400 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="translate(14400, 0 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0077b6"></path></svg><svg><path transform="translate(240, 60) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(240, 60) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="
translate(240, 120)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><path transform="
translate(240, 180)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><path transform="translate(14400, 14400 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#caf0f8"></path></svg><svg><path transform="
translate(240, 300)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><path transform="translate(240, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(240, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4"></circle></svg><svg><path transform="translate(240,420) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0V0z"></path><path transform="translate(240,420) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(240,480) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(240,480) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(240, 540)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(18000, 0 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0077b6"></path></svg><svg><path transform="
translate(300, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(18000, 7200 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="
translate(300, 180)
" d="M0 0h60v60H0z" fill="
#caf0f8"></path></svg><svg><path transform="translate(300,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(300,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(300, 300)
" d="M0 0h60v60H0z" fill="
#03045e"></path></svg><svg><path transform="translate(18000, 21600 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#48cae4"></path></svg><svg><path transform="
translate(300, 420)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(18000, 28800 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><path transform="translate(300,540) translate(30,30) rotate(0) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(300,540) translate(30,30) rotate(0) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(360,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M60 0v60H0V0z"></path><path transform="translate(360,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 60)
" fill="
#caf0f8
"></circle></svg><svg><path transform="translate(360,120) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0V0z"></path><path transform="translate(360,120) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(360, 180)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="translate(360,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0V0z"></path><path transform="translate(360,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(360, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(360, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="
translate(360, 360)
" d="M0 0h60v60H0z" fill="
#ade8f4"></path></svg><svg><path transform="translate(360,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(360,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 480)
" fill="
#ade8f4
"></circle></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 540)
" fill="
#ade8f4
"></circle></svg><svg><path transform="translate(420,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0V0z"></path><path transform="translate(420,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 3600 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0096c7"></path></svg><svg><path transform="
translate(420, 120)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="translate(420,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#0077b6" d="M60 0v60H0V0z"></path><path transform="translate(420,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 14400 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#48cae4"></path></svg><svg><path transform="translate(420,300) translate(30,30) rotate(180) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0V0z"></path><path transform="translate(420,300) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 21600 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(420, 420)
" fill="
#023e8a
"></circle></svg><svg><path transform="translate(420,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(420,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(420, 540)
" d="M0 0h60v60H0z" fill="
#ade8f4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(480, 0)
" fill="
#03045e
"></circle></svg><svg><path transform="
translate(480, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(28800, 7200 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(480,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(480,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(480, 240)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="
translate(480, 300)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(480, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(480, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#03045e"></circle></svg><svg><path transform="translate(480,420) translate(30,30) rotate(180) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(480,420) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(480, 480)
" fill="
#03045e
"></circle></svg><svg><path transform="translate(28800, 32400 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(540,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(540,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(540, 60) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 60) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6"></circle></svg><svg><path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)" fill="#90e0ef" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7"></circle></svg><svg><path transform="translate(32400, 10800 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="translate(540, 240) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 240) translate(30,30) rotate(90) translate(-30,-30)" fill="#0077b6"></circle></svg><svg><path transform="
translate(540, 300)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(540, 360) translate(30,30) rotate(0) translate(-30,-30)" fill="#00b4d8" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 360) translate(30,30) rotate(0) translate(-30,-30)" fill="#00b4d8"></circle></svg><svg><path transform="
translate(540, 420)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="
translate(540, 480)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(540, 540)
" fill="
#0096c7
"></circle></svg></svg>

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -1,235 +0,0 @@
---
title: "Advanced Customisation"
date: 2020-08-08
draft: false
description: "Learn how to build Blowfish manually."
slug: "advanced-customisation"
tags: ["advanced", "css", "docs"]
series: ["Documentation"]
series_order: 13
---
There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.
If you need further advice, post your questions on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).
## Hugo project structure
Before leaping into it, first a quick note about [Hugo project structure](https://gohugo.io/getting-started/directory-structure/) and best practices for managing your content and theme customisations.
{{< alert >}}
**In summary:** Never directly edit the theme files. Only make customisations in your Hugo project's sub-directories, not in the themes directory itself.
{{< /alert >}}
Blowfish is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overridden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.
In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your `themes/` directory, you should always leave these files intact.
The correct way to adjust any theme behaviour is by overriding files using Hugo's powerful [file lookup order](https://gohugo.io/templates/lookup-order/). In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.
For example, if you wanted to override the main article template in Blowfish, you can simply create your own `layouts/_default/single.html` file and place it in the root of your project. This file will then override the `single.html` from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.
As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.
## Change image optimization settings
Hugo has various builtin methods to resize, crop and optimize images.
As an example - in `layouts/partials/article-link/card.html`, you have the following code:
```go
{{ with .Resize "600x" }}
<div class="w-full thumbnail_card nozoom" style="background-image:url({{ .RelPermalink }});"></div>
{{ end }}
```
The default behavior of Hugo here is to resize the image to 600px keeping the ratio.
It is worth noting here that default image configurations such as [anchor point](https://gohugo.io/content-management/image-processing/#anchor) can also be set in your [site configuration](https://gohugo.io/content-management/image-processing/#processing-options) as well as in the template itself.
See the [Hugo docs on image processing](https://gohugo.io/content-management/image-processing/#image-processing-methods) for more info.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the `colorScheme` theme parameter. Refer to the [Getting Started]({{< ref "getting-started#colour-schemes" >}}) section to learn more about the built-in schemes.
In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a `<scheme-name>.css` file in the `assets/css/schemes/` folder. Once the file is created, simply refer to it by name in the theme configuration.
{{< alert "github">}}
**Note:** generating these files manually can be hard, I've built a `nodejs` terminal tool to help with that, [Fugu](https://github.com/nunocoracao/fugu). In a nutshell, you pass the main three `hex` values of your color palette and the program will output a css file that can be imported directly into Blowfish.
{{< /alert >}}
Blowfish defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour.
Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values.
```css
:root {
--color-primary-500: 139, 92, 246;
}
```
This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`.
Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
## Overriding the stylesheet
Sometimes you need to add a custom style to style your own HTML elements. Blowfish provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a `custom.css` file in your project's `assets/css/` folder.
The `custom.css` file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.
### Using additional fonts
Blowfish allows you to easily change the font for your site. After creating a `custom.css` file in your project's `assets/css/` folder, place you font file inside a `fonts` folder within the `static` root folder.
```shell
.
├── assets
│ └── css
│ └── custom.css
...
└─── static
└── fonts
└─── font.ttf
```
This makes the font available to the website. Now, the font can just import it in your `custom.css` and replaced wherever you see fit. The example below shows what replacing the font for the entire `html` would look like.
```css
@font-face {
font-family: font;
src: url('/fonts/font.ttf');
}
html {
font-family: font;
}
```
### Adjusting the font size
Changing the font size of your website is one example of overriding the default stylesheet. Blowfish makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to `12pt`, but it can be changed to whatever value you prefer.
Create a `custom.css` file using the [instructions above]({{< ref "#overriding-the-stylesheet" >}}) and add the following CSS declaration:
```css
/* Increase the default font size */
html {
font-size: 13pt;
}
```
Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`.
## Building the theme CSS from source
If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.
{{< alert >}}
**Note:** Building the theme manually is intended for advanced users.
{{< /alert >}}
Let's step through how building the Tailwind CSS works.
### Tailwind configuration
In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory:
```js
// themes/blowfish/tailwind.config.js
module.exports = {
content: [
"./layouts/**/*.html",
"./content/**/*.{html,md}",
"./themes/blowfish/layouts/**/*.html",
"./themes/blowfish/content/**/*.{html,md}",
],
// and more...
};
```
This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Blowfish in your project as a subdirectory at `themes/blowfish/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods.
### Project structure
In order to take advantage of the default configuration, your project should look something like this...
```shell
.
├── assets
│ └── css
│ └── compiled
│ └── main.css # this is the file we will generate
├── config # site config
│ └── _default
├── content # site content
│ ├── _index.md
│ ├── projects
│ │ └── _index.md
│ └── blog
│ └── _index.md
├── layouts # custom layouts for your site
│ ├── partials
│ │ └── extend-article-link/simple.html
│ ├── projects
│ │ └── list.html
│ └── shortcodes
│ └── disclaimer.html
└── themes
└── blowfish # git submodule or manual theme install
```
This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file.
### Install dependencies
In order for this to work you'll need to change into the `themes/blowfish/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step.
```shell
cd themes/blowfish
npm install
```
### Run the Tailwind compiler
With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:
```shell
cd ../..
./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit
```
It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project).
The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.
Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode.
### Make a build script
To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts...
```js
// package.json
{
"name": "my-website",
"version": "1.0.0",
"description": "",
"scripts": {
"server": "hugo server -b http://localhost -p 8000",
"dev": "NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
},
// and more...
}
```
Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build.
🙋‍♀️ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).

View file

@ -1,235 +0,0 @@
---
title: "Advanced Customisation"
date: 2020-08-08
draft: false
description: "Learn how to build Blowfish manually."
slug: "advanced-customisation"
tags: ["advanced", "css", "docs"]
series: ["Documentation"]
series_order: 13
---
There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.
If you need further advice, post your questions on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).
## Hugo project structure
Before leaping into it, first a quick note about [Hugo project structure](https://gohugo.io/getting-started/directory-structure/) and best practices for managing your content and theme customisations.
{{< alert >}}
**In summary:** Never directly edit the theme files. Only make customisations in your Hugo project's sub-directories, not in the themes directory itself.
{{< /alert >}}
Blowfish is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overridden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.
In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your `themes/` directory, you should always leave these files intact.
The correct way to adjust any theme behaviour is by overriding files using Hugo's powerful [file lookup order](https://gohugo.io/templates/lookup-order/). In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.
For example, if you wanted to override the main article template in Blowfish, you can simply create your own `layouts/_default/single.html` file and place it in the root of your project. This file will then override the `single.html` from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.
As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.
## Change image optimization settings
Hugo has various builtin methods to resize, crop and optimize images.
As an example - in `layouts/partials/article-link/card.html`, you have the following code:
```go
{{ with .Resize "600x" }}
<div class="w-full thumbnail_card nozoom" style="background-image:url({{ .RelPermalink }});"></div>
{{ end }}
```
The default behavior of Hugo here is to resize the image to 600px keeping the ratio.
It is worth noting here that default image configurations such as [anchor point](https://gohugo.io/content-management/image-processing/#anchor) can also be set in your [site configuration](https://gohugo.io/content-management/image-processing/#processing-options) as well as in the template itself.
See the [Hugo docs on image processing](https://gohugo.io/content-management/image-processing/#image-processing-methods) for more info.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the `colorScheme` theme parameter. Refer to the [Getting Started]({{< ref "getting-started#colour-schemes" >}}) section to learn more about the built-in schemes.
In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a `<scheme-name>.css` file in the `assets/css/schemes/` folder. Once the file is created, simply refer to it by name in the theme configuration.
{{< alert "github">}}
**Note:** generating these files manually can be hard, I've built a `nodejs` terminal tool to help with that, [Fugu](https://github.com/nunocoracao/fugu). In a nutshell, you pass the main three `hex` values of your color palette and the program will output a css file that can be imported directly into Blowfish.
{{< /alert >}}
Blowfish defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour.
Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values.
```css
:root {
--color-primary-500: 139, 92, 246;
}
```
This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`.
Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
## Overriding the stylesheet
Sometimes you need to add a custom style to style your own HTML elements. Blowfish provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a `custom.css` file in your project's `assets/css/` folder.
The `custom.css` file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.
### Using additional fonts
Blowfish allows you to easily change the font for your site. After creating a `custom.css` file in your project's `assets/css/` folder, place you font file inside a `fonts` folder within the `static` root folder.
```shell
.
├── assets
│ └── css
│ └── custom.css
...
└─── static
└── fonts
└─── font.ttf
```
This makes the font available to the website. Now, the font can just import it in your `custom.css` and replaced wherever you see fit. The example below shows what replacing the font for the entire `html` would look like.
```css
@font-face {
font-family: font;
src: url('/fonts/font.ttf');
}
html {
font-family: font;
}
```
### Adjusting the font size
Changing the font size of your website is one example of overriding the default stylesheet. Blowfish makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to `12pt`, but it can be changed to whatever value you prefer.
Create a `custom.css` file using the [instructions above]({{< ref "#overriding-the-stylesheet" >}}) and add the following CSS declaration:
```css
/* Increase the default font size */
html {
font-size: 13pt;
}
```
Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`.
## Building the theme CSS from source
If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.
{{< alert >}}
**Note:** Building the theme manually is intended for advanced users.
{{< /alert >}}
Let's step through how building the Tailwind CSS works.
### Tailwind configuration
In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory:
```js
// themes/blowfish/tailwind.config.js
module.exports = {
content: [
"./layouts/**/*.html",
"./content/**/*.{html,md}",
"./themes/blowfish/layouts/**/*.html",
"./themes/blowfish/content/**/*.{html,md}",
],
// and more...
};
```
This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Blowfish in your project as a subdirectory at `themes/blowfish/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods.
### Project structure
In order to take advantage of the default configuration, your project should look something like this...
```shell
.
├── assets
│ └── css
│ └── compiled
│ └── main.css # this is the file we will generate
├── config # site config
│ └── _default
├── content # site content
│ ├── _index.md
│ ├── projects
│ │ └── _index.md
│ └── blog
│ └── _index.md
├── layouts # custom layouts for your site
│ ├── partials
│ │ └── extend-article-link/simple.html
│ ├── projects
│ │ └── list.html
│ └── shortcodes
│ └── disclaimer.html
└── themes
└── blowfish # git submodule or manual theme install
```
This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file.
### Install dependencies
In order for this to work you'll need to change into the `themes/blowfish/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step.
```shell
cd themes/blowfish
npm install
```
### Run the Tailwind compiler
With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:
```shell
cd ../..
./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit
```
It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project).
The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.
Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode.
### Make a build script
To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts...
```js
// package.json
{
"name": "my-website",
"version": "1.0.0",
"description": "",
"scripts": {
"server": "hugo server -b http://localhost -p 8000",
"dev": "NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
},
// and more...
}
```
Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build.
🙋‍♀️ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).

View file

@ -1,235 +0,0 @@
---
title: "Advanced Customisation"
date: 2020-08-08
draft: false
description: "Learn how to build Blowfish manually."
slug: "advanced-customisation"
tags: ["advanced", "css", "docs"]
series: ["Documentation"]
series_order: 13
---
There are many ways you can make advanced changes to Blowfish. Read below to learn more about what can be customised and the best way of achieving your desired result.
If you need further advice, post your questions on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).
## Hugo project structure
Before leaping into it, first a quick note about [Hugo project structure](https://gohugo.io/getting-started/directory-structure/) and best practices for managing your content and theme customisations.
{{< alert >}}
**In summary:** Never directly edit the theme files. Only make customisations in your Hugo project's sub-directories, not in the themes directory itself.
{{< /alert >}}
Blowfish is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overridden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.
In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your `themes/` directory, you should always leave these files intact.
The correct way to adjust any theme behaviour is by overriding files using Hugo's powerful [file lookup order](https://gohugo.io/templates/lookup-order/). In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.
For example, if you wanted to override the main article template in Blowfish, you can simply create your own `layouts/_default/single.html` file and place it in the root of your project. This file will then override the `single.html` from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.
As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.
## Change image optimization settings
Hugo has various builtin methods to resize, crop and optimize images.
As an example - in `layouts/partials/article-link/card.html`, you have the following code:
```go
{{ with .Resize "600x" }}
<div class="w-full thumbnail_card nozoom" style="background-image:url({{ .RelPermalink }});"></div>
{{ end }}
```
The default behavior of Hugo here is to resize the image to 600px keeping the ratio.
It is worth noting here that default image configurations such as [anchor point](https://gohugo.io/content-management/image-processing/#anchor) can also be set in your [site configuration](https://gohugo.io/content-management/image-processing/#processing-options) as well as in the template itself.
See the [Hugo docs on image processing](https://gohugo.io/content-management/image-processing/#image-processing-methods) for more info.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the `colorScheme` theme parameter. Refer to the [Getting Started]({{< ref "getting-started#colour-schemes" >}}) section to learn more about the built-in schemes.
In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a `<scheme-name>.css` file in the `assets/css/schemes/` folder. Once the file is created, simply refer to it by name in the theme configuration.
{{< alert "github">}}
**Note:** generating these files manually can be hard, I've built a `nodejs` terminal tool to help with that, [Fugu](https://github.com/nunocoracao/fugu). In a nutshell, you pass the main three `hex` values of your color palette and the program will output a css file that can be imported directly into Blowfish.
{{< /alert >}}
Blowfish defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour.
Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values.
```css
:root {
--color-primary-500: 139, 92, 246;
}
```
This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`.
Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
## Overriding the stylesheet
Sometimes you need to add a custom style to style your own HTML elements. Blowfish provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a `custom.css` file in your project's `assets/css/` folder.
The `custom.css` file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.
### Using additional fonts
Blowfish allows you to easily change the font for your site. After creating a `custom.css` file in your project's `assets/css/` folder, place you font file inside a `fonts` folder within the `static` root folder.
```shell
.
├── assets
│ └── css
│ └── custom.css
...
└─── static
└── fonts
└─── font.ttf
```
This makes the font available to the website. Now, the font can just import it in your `custom.css` and replaced wherever you see fit. The example below shows what replacing the font for the entire `html` would look like.
```css
@font-face {
font-family: font;
src: url('/fonts/font.ttf');
}
html {
font-family: font;
}
```
### Adjusting the font size
Changing the font size of your website is one example of overriding the default stylesheet. Blowfish makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to `12pt`, but it can be changed to whatever value you prefer.
Create a `custom.css` file using the [instructions above]({{< ref "#overriding-the-stylesheet" >}}) and add the following CSS declaration:
```css
/* Increase the default font size */
html {
font-size: 13pt;
}
```
Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`.
## Building the theme CSS from source
If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.
{{< alert >}}
**Note:** Building the theme manually is intended for advanced users.
{{< /alert >}}
Let's step through how building the Tailwind CSS works.
### Tailwind configuration
In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory:
```js
// themes/blowfish/tailwind.config.js
module.exports = {
content: [
"./layouts/**/*.html",
"./content/**/*.{html,md}",
"./themes/blowfish/layouts/**/*.html",
"./themes/blowfish/content/**/*.{html,md}",
],
// and more...
};
```
This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Blowfish in your project as a subdirectory at `themes/blowfish/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods.
### Project structure
In order to take advantage of the default configuration, your project should look something like this...
```shell
.
├── assets
│ └── css
│ └── compiled
│ └── main.css # this is the file we will generate
├── config # site config
│ └── _default
├── content # site content
│ ├── _index.md
│ ├── projects
│ │ └── _index.md
│ └── blog
│ └── _index.md
├── layouts # custom layouts for your site
│ ├── partials
│ │ └── extend-article-link/simple.html
│ ├── projects
│ │ └── list.html
│ └── shortcodes
│ └── disclaimer.html
└── themes
└── blowfish # git submodule or manual theme install
```
This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file.
### Install dependencies
In order for this to work you'll need to change into the `themes/blowfish/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step.
```shell
cd themes/blowfish
npm install
```
### Run the Tailwind compiler
With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:
```shell
cd ../..
./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit
```
It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project).
The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.
Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode.
### Make a build script
To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts...
```js
// package.json
{
"name": "my-website",
"version": "1.0.0",
"description": "",
"scripts": {
"server": "hugo server -b http://localhost -p 8000",
"dev": "NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
},
// and more...
}
```
Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build.
🙋‍♀️ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions).

View file

@ -1,237 +0,0 @@
---
title: 进阶自定义
date: 2020-08-08
draft: false
description: "了解如何手动构建 Blowfish。"
slug: "advanced-customisation"
tags: ["高级", "CSS", "文档"]
series: ["部署教程"]
series_order: 13
---
您可以通过多种方式对 Blowfish 进行高级自定义。请阅读下文,了解更多可自定义的内容以及实现想要效果的最佳方法。
如果您需要更多指导,请在 [GitHub Discussions](https://github.com/nunocoracao/blowfish/discussions) 上提问。
## Hugo 项目结构
在开始讨论之前,首先简要介绍一下 [Hugo 项目结构](https://gohugo.io/getting-started/directory-struct/) 以及管理内容和主题自定义的最佳方式。
{{< alert >}}
**总结:** 切勿直接编辑主题文件。一定要仅在 Hugo 项目的子目录中进行自定义,而不是在主题目录中进行自定义。
{{< /alert >}}
Blowfish 旨在利用所有标准的 Hugo 参数操作。它旨在允许在不更改任何核心主题文件的情况下自定义和覆盖主题的所有方面。这也给您提供了一种无缝升级的体验,同时让您完全控制网站的外观和感觉。
为了实现这一点,您永远不应该直接手动更改任何主题核心文件。无论你是使用 Hugo 模块安装,还是作为 git 子模块安装,还是手动将主题安装在 `themes/` 目录中,你都应该始终保持这些主题文件不变。
调整主题行为的正确方法是通过使用 Hugo 强大的[文件查找顺序](https://gohugo.io/templates/lookup-order/)覆盖文件。总之,查找顺序确保了包含在你的项目目录中的文件都会优先于主题文件。
例如,如果您想覆盖 Blowfish 中的主要文章模板, 您可以创建自己的 `layouts/_default/single.html` 文件并将其放在项目的根目录中。然后,此文件将覆盖主题文件中的 `single.html` 同时也不会对主题文件本身进行更改。 这适用于任何主题文件HTML 模板、partials、shortcodes、config 文件、data、assets 等等。
只要您遵循这个方法,您将始终能够无缝更新主题(或测试不同的主题版本),而不必担心会丢失任何自定义更改。
## 修改图片优化设置
Hugo 有各种内置的方法来调整大小,裁剪和优化图像。
举个例子,如果在 `layouts/partials/article-link/card.html` 中,您有以下代码:
```go
{{ with .Resize "600x" }}
<div class="w-full thumbnail_card nozoom" style="background-image:url({{ .RelPermalink }});"></div>
{{ end }}
```
Hugo 将默认把图像大小调整为 600px 同时保持比例不变。
值得注意的是,默认的图像设置比如[锚点](https://gohugo.io/content-management/image-processing/#anchor) 也可以在你的 [站点配置](https://gohugo.io/content-management/image-processing/#processing-options) 中修改,就和修改模板一样。
想要了解更多信息,请再参考 [有关图像处理的 Hugo 文档](https://gohugo.io/content-management/image-processing/#image-processing-methods)。
## 配色方案
Blowfish 附带了多种开箱即用的配色方案。想要更改基本配色方案,您可以设置 `colorScheme` 主题参数。请参阅[快速上手#配色方案]({{< ref "getting-started#colour-schemes" >}}) 以了解更多内置方案。
除了默认方案之外,您还可以创建自己的方案并根据自己的喜好重新设计整个网站的样式。 通过在 `assets/css/schemes/` 中创建 `<scheme-name>.css` 文件可以创建新的配色方案。创建文件后,只需在主题配置中按名称引用它即可。
{{< alert "github">}}
**注意:** 手动生成这些文件可能会比较困难,我编写了一个 `nodejs` 工具 [Fugu](https://github.com/nunocoracao/fugu) 来帮助解决这个问题。简而言之,您只需要提供调色板的三个主要 `hex` 值,程序将生成一个可以直接导入到 Blowfish 中的 css 文件。
{{< /alert >}}
Blowfish 使用一种定义了整个主题中使用的三色调色板。这三种颜色被定义为 `neutral``primary``secondary` 颜色,每种颜色包含十种色调。
由于 Tailwind CSS 3.0 计算不透明度颜色值的方式,方案中指定的颜色需要通过提供红色、绿色和蓝色值来[符合特定格式](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) 。
```css
:root {
--color-primary-500: 139, 92, 246;
}
```
此示例为一个 `primary-500` 的 CSS 颜色变量,红色值为 `139`,绿色值为 `92`,蓝色值为 `246`
您可以使用现有主题样式表之一作为模板并自由配置自己的颜色。如果想要寻求一些灵感,请查看官方 [Tailwind 调色板参考](https://tailwindcss.com/docs/customizing-colors#color-palette-reference) 。
## 覆盖样式
有时您需要添加自定义样式来设置您自己的 HTML 元素的样式。 Blowfish 允许您覆盖自己的 CSS 样式表中的默认样式来进行自定义。只需在项目的 `assets/css/` 文件夹中创建一个 `custom.css` 文件即可。
`custom.css` 文件将被 Hugo 优化并在所有其他主题样式之后自动加载,这意味着自定义文件中的任何内容都将优先于默认值。
### 使用附加字体
Blowfish 可以让您轻松更改网站的字体。在项目的 `assets/css/` 文件夹中创建 `custom.css` 文件后,将字体文件放入 `static/fonts` 文件夹中。
```shell
.
├── assets
│ └── css
│ └── custom.css
...
└─── static
└── fonts
└─── font.ttf
```
这样,该字体便可供网站使用。现在,可以将字体导入到您的 `custom.css` 中,并在您认为合适的地方进行替换。下面的示例展示了替换整个 `html` 字体的方法。
```css
@font-face {
font-family: font;
src: url('/fonts/font.ttf');
}
html {
font-family: font;
}
```
### 调整字体大小
我们也提供更改网站的字体大小的示例。 Blowfish 使这一切变得简单,因为它在整个主题中使用源自基本 HTML 语言的缩放字体大小方法。默认情况下Tailwind 将默认大小设置为 `12pt` ,但您可以将其更改为喜欢的大小。
参考[上面的说明]({{< ref "#overriding-the-stylesheet" >}}) 创建一个 `custom.css` 文件并添加以下 CSS 声明:
```css
/* Increase the default font size */
html {
font-size: 13pt;
}
```
只需更改此值,您网站上的所有字体大小都将调整为此新大小。因此,要增加使用的整体字体大小,请将该值设置为大于 `12pt` 。同样,要减小字体大小,请将值设置为小于 `12pt`
## 从源代码构建主题 CSS
如果您想进行大量更改,您可以利用 Tailwind CSS 的 JIT 编译器并从头开始重建整个主题 CSS。尤其是您想要调整 Tailwind 配置或向主样式表添加额外的 Tailwind 类的时候,这种方法将非常有用。
{{< alert >}}
**注意:** 手动构建主题仅适用于高级用户。
{{< /alert >}}
让我们逐步了解构建 Tailwind CSS 的工作原理。
### Tailwind 配置
为了生成仅包含用于实际使用的 Tailwind 类的 CSS 文件JIT 编译器需要扫描所有 HTML 模板和 Markdown 文档,以检查 markup 中存在哪些样式。编译器将根据主题目录根目录中的 `tailwind.config.js` 文件来完成此操作:
```js
// themes/blowfish/tailwind.config.js
module.exports = {
content: [
"./layouts/**/*.html",
"./content/**/*.{html,md}",
"./themes/blowfish/layouts/**/*.html",
"./themes/blowfish/content/**/*.{html,md}",
],
// 更多...
};
```
此默认配置包含了这些路径,以便您可以十分方便地生成自己的 CSS 文件,而无需修改它,前提是您遵循我们的主题项目结构。也就是说,**您必须将 Blowfish 主题文件夹 `themes/blowfish/` 作为子目录包含在项目中**。这意味着您无法使用 Hugo Modules 方式来安装主题,而必须使用 git 子模块(推荐)或手动安装。 [安装文档]({{< ref "installation" >}}) 介绍了如何使用以上方法安装主题。
### 项目结构
为了充分利用默认配置,您的项目结构应该如下所示:
```shell
.
├── assets
│ └── css
│ └── compiled
│ └── main.css # 这是我们生成的文件
├── config # 站点配置
│ └── _default
├── content # site content
│ ├── _index.md
│ ├── projects
│ │ └── _index.md
│ └── blog
│ └── _index.md
├── layouts # 站点的自定义布局
│ ├── partials
│ │ └── extend-article-link/simple.html
│ ├── projects
│ │ └── list.html
│ └── shortcodes
│ └── disclaimer.html
└── themes
└── blowfish # Git 子模块或本地复制安装
```
此示例结构添加了一个新自定义的 `projects` 内容类型,具有自定义的 layout 以及自定义的 shortcodes 和扩展的 partials 。如果项目遵循类似结构,所需要做的就是仅仅是重新编译 `main.css` 文件。
### 安装依赖项
为了使 Tailwind 正常工作,您需要更改终端工作目录为 `themes/blowfish/` 并安装项目依赖项。您需要安装 [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install)。
```shell
cd themes/blowfish
npm install
```
### 运行 Tailwind 编译器
安装依赖项后,接下来可以使用 [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) 来调用 JIT 编译器。返回 Hugo 项目的根目录并在终端输入以下命令:
```shell
cd ../..
./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit
```
这个命令稍微有点复杂,因为涉及到几个路径。但本质上你是在调用 Tailwind CLI 并提供下面三个参数:
- Tailwind 配置文件 `tailwind.config.js`
- 主题的 `main.css` 文件
- 编译产出后的 CSS 文件的位置 `assets/css/compiled/`
配置文件将自动检查项目中以及主题中的所有内容和布局,并构建一个新的 CSS 文件,其中包含网站所需的所有 CSS。由于 Hugo 处理文件层次结构的方式,此文件现在将自动覆盖主题附带的文件。
每次更改布局并需要新的 Tailwind CSS 样式时,您只需重新运行命令并生成新的 CSS 文件即可。您还可以在命令末尾添加 `-w` 以在监视模式下运行 JIT 编译器。
### 制作构建脚本
要完成此解决方案,您可以通过为这些命令添加别名来简化整个过程,或者参照我的操作,将该 `package.json` 添加到包含必要脚本的项目的根目录:
```js
// package.json
{
"name": "my-website",
"version": "1.0.0",
"description": "",
"scripts": {
"server": "hugo server -b http://localhost -p 8000",
"dev": "NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
},
// and more...
}
```
现在,当您想要设计站点时,可以调用 `npm run dev` ,编译器将以监视模式运行。当您准备好部署时,运行 `npm run build` ,您将生成一个编译好的 Tailwind CSS。
🙋‍♀️ 如果您需要帮助,请随时在 [GitHub Discusions](https://github.com/nunocoracao/blowfish/discussions) 上提问。

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

View file

@ -1,827 +0,0 @@
<svg id="canvas" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs"
viewBox="0 0 600 600">
<rect width="600" height="600" fill="transparent"></rect>
<mask id="mask" mask-type="alpha" maskUnits="userSpaceOnUse">
<rect transform="translate(0, 0)" width="600" height="600" fill="white"></rect>
</mask>
<svg>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(0, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(0, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#023e8a"></path>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(0, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(0, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(0, 540)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(60, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<rect transform="translate(60, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(60, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(60, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(60, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(60, 240)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 300)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 420)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 540)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 540)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 0)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(120, 0)" cx="30" cy="30" r="30" fill="#023e8a" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<rect transform="translate(120, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(120, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#ade8f4"></path>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#48cae4" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(120, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(120, 420)" cx="30" cy="30" r="30" fill="#90e0ef"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 0) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 0) translate(30,30) rotate(180) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="#023e8a" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(180, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<rect transform="translate(180, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(180, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(180, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<rect transform="translate(240, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(240, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(240, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(240, 60)" cx="30" cy="30" r="30" fill="#0096c7"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#48cae4"></path>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(240, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(240, 480)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(300, 60)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#023e8a"></path>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#48cae4"></path>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="#48cae4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(360, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(360, 420)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(360, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(420, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(420, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(420, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(420, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(480, 60)" cx="30" cy="30" r="30" fill="#03045e"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(480, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(480, 360)" cx="30" cy="30" r="30" fill="#caf0f8"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0077b6" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(540, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 51 KiB

View file

@ -1,347 +0,0 @@
---
title: "Configuration"
date: 2020-08-14
draft: false
description: "All the configuration variables available in Blowfish."
slug: "configuration"
tags: ["config", "docs"]
series: ["Documentation"]
series_order: 4
---
Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.
The theme ships with a default configuration that gets you up and running with a basic blog or static website.
{{< alert "fire" >}}
We just launched a CLI tool to help you get started with Blowfish. It will help you with installation and configuration. Install the CLI tool globally using:
```bash
npx blowfish-tools
```
{{< /alert >}}
> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.
The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.
{{< alert >}}
As outlined in the [installation instructions]({{< ref "/docs/installation#set-up-theme-configuration-files" >}}), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `config.toml` file in your project root.
{{< /alert >}}
## Site configuration
Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.
The site configuration is managed through the `config/_default/config.toml` file. The table below outlines all the settings that the Blowfish takes advantage of.
Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`).
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `theme` | `"blowfish"` | When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `blowfish` for the theme to function. |
| `baseURL` | _Not set_ | The URL to the root of the website. |
| `defaultContentLanguage` | `"en"` | This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes. |
| `enableRobotsTXT` | `true` | When enabled, a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made `robots.txt`, set to `false` and place your file in the `static` directory. For complete control, you may provide a [custom layout]({{< ref "content-examples#custom-layouts" >}}) to generate this file. |
| `paginate` | `10` | The number of articles listed on each page of the article listing. |
| `summaryLength` | `0` | The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden. |
| `outputs.home` | `["HTML", "RSS", "JSON"]` | The output formats that are generated for the site. Blowfish requires HTML, RSS and JSON for all theme components to work correctly. |
| `permalinks` | _Not set_ | Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration. |
| `taxonomies` | _Not set_ | Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration. |
<!-- prettier-ignore-end -->
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
## Language and i18n
Blowfish is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.
The theme currently supports the following languages by default:
| Language | Code |
| ---------------------------- | ------- |
| Arabic | `ar` |
| Bulgarian | `bg` |
| Bengali | `bn` |
| Catalan | `ca` |
| Czech | `cs` |
| German | `de` |
| English | `en` |
| Spanish (Spain) | `es` |
| Finnish | `fi` |
| French | `fr` |
| Hebrew | `he` |
| Croatian | `hr` |
| Hungarian | `hu` |
| Indonesian | `id` |
| Italian | `it` |
| Japanese | `ja` |
| Korean | `ko` |
| Polish | `pl` |
| Portuguese (Brazil) | `pt-br` |
| Portuguese (Portugal) | `pt-pt` |
| Romanian | `ro` |
| Russian | `ru` |
| Turkish | `tr` |
| Vietnamese | `vi` |
| Simplified Chinese (China) | `zh-cn` |
| Traditional Chinese (Taiwan) | `zh-tw` |
The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/nunocoracao/blowfish/pulls).
### Configuration
In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Blowfish includes an English language configuration at `config/_default/languages.en.toml`.
The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`.
{{< alert >}}
**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename.
{{< /alert >}}
#### Global
<!-- prettier-ignore-start -->
| Name | Default | Description |
| -------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `languageCode` | `"en"` | The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive. |
| `languageName` | `"English"` | The name of the language. |
| `weight` | `1` | The weight determines the order of languages when building multilingual sites. |
| `title` | `"Blowfish"` | The title of the website. This will be displayed in the site header and footer. |
<!-- prettier-ignore-end -->
#### Params
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ---------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params.displayName` | `"EN"` | The name used when the language appears on the website. |
| `params.isoCode` | `"en"` | The ISO language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`). |
| `params.rtl` | `false` | Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Blowfish fully supports using RTL and LTR languages at the same time and will dynamically adjust to both. |
| `params.dateFormat` | `"2 January 2006"` | How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats. |
| `params.logo` | _Not set_ | The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. |
| `params.secondaryLogo` | _Not set_ | The relative path to the secondary site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. This should have an inverted/contrasting colour scheme to `logo`. If set, this logo will be shown when users toggle from the `defaultAppearance` mode. |
| `params.description` | _Not set_ | The website description. This will be used in the site metadata. |
| `params.copyright` | _Not set_ | A Markdown string for the site footer copyright message can include the placeholder { year } to dynamically insert the current year. If none is provided, Blowfish will automatically generate a copyright string using the site `title`. |
<!-- prettier-ignore-end -->
#### Author
| Name | Default | Description |
| ----------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `author.name` | _Not set_ | The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used. |
| `author.image` | _Not set_ | Path to the image file of the author. The image should be a 1:1 aspect ratio. The image can be placed in the site's `assets/` folder or can be external url. |
| `author.headline` | _Not set_ | A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name. |
| `author.bio` | _Not set_ | A Markdown string containing the author's bio. It will be displayed in article footers. |
| `author.links` | _Not set_ | The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`. |
<!-- prettier-ignore-end -->
### Menus
Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.
Menu config files are named with the format `menus.[language-code].toml`. Always ensure that the language code used in the menus configuration matches the languages configuration.
The [Getting Started]({{< ref "getting-started#menus" >}}) section explains more about the structure of this file. You can also refer to the [Hugo menu docs](https://gohugo.io/content-management/menus/) for more configuration examples.
## Theme parameters
Blowfish provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the `config/_default/params.toml` file.
Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details.
<!-- prettier-ignore-start -->
### Global
| Name | Default | Description |
| ------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `colorScheme` | `"blowfish"` | The theme colour scheme to use. Valid values are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details. |
| `defaultAppearance` | `"light"` | The default theme appearance, either `light` or `dark`. |
| `autoSwitchAppearance` | `true` | Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`. |
| `enableSearch` | `false` | Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly. |
| `enableCodeCopy` | `false` | Whether copy-to-clipboard buttons are enabled for `<code>` blocks. The `highlight.noClasses` parameter must be set to `false` for code copy to function correctly. Read more about [other configuration files](#other-configuration-files) below. |
| `mainSections` | _Not set_ | The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used. |
| `showViews` | _Not set_ | Whether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below. |
| `showLikes` | _Not set_ | Whether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `robots` | _Not set_ | String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `disableImageZoom` | `false` | Disables image zoom feature across all the images in the site. |
| `disableImageOptimization` | `false` | Disables image resize and optimization features across all the images in the site. |
| `disableTextInHeader` | `false` | Disables text in header, useful for logo based headers. |
| `defaultBackgroundImage` | _Not set_ | Default background image for both `background` homepage layout and `background` hero style |
| `defaultFeaturedImage` | _Not set_ | Default background image for all `featured` images across articles, will be overridden by a local `featured` image. |
| `highlightCurrentMenuArea` | _Not set_ | Marks menu entries in the main menu when selected |
| `smartTOC` | _Not set_ | Activate smart Table of Contents, items in view will be highlighted. |
| `smartTOCHideUnfocusedChildren` | _Not set_ | When smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus. |
### Header
| Name | Default | Description |
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| `header.layout` | `"basic"` | Defines the header for the entire site, supported values are `basic`, `fixed`, `fixed-fill`, and `fixed-fill-blur`. |
### Footer
| Name | Default | Description |
| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `footer.showMenu` | `true` | Show/hide the footer menu, which can be configured in the `[[footer]]` section of the `config/_default/menus.en.toml` file. |
| `footer.showCopyright` | `true` | Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the `copyright` parameter in the [languages configuration](#language-and-i18n). |
| `footer.showThemeAttribution` | `true` | Whether or not to show the "powered by" theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page). |
| `footer.showAppearanceSwitcher` | `false` | Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference. |
| `footer.showScrollToTop` | `true` | When set to `true` the scroll to top arrow is displayed. |
### Homepage
| Name | Default | Description |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `homepage.layout` | `"profile"` | The layout of the homepage. Valid values are `page`, `profile`, `hero`, `card`, `background`, or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.homepageImage` | _Not set_ | Image to be used in `hero` and `card` layouts. Can be set as local image from asset directory or external image url. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.showRecent` | `false` | Whether or not to display the recent articles list on the homepage. |
| `homepage.showRecentItems` | 5 | How many articles to display if showRecent is true. If variable is set to 0 or if it isn't defined the system will default to 5 articles. |
| `homepage.showMoreLink` | `false` | Whether or not to display a show more link at the end of your posts that takes the user to a predefined place. |
| `homepage.showMoreLinkDest` | `/posts` | The destination of the show more button. |
| `homepage.cardView` | `false` | Display recent articles as a gallery of cards. |
| `homepage.cardViewScreenWidth` | `false` | Enhance the width of the recent articles card gallery to take the full width available. |
| `homepage.layoutBackgroundBlur` | `false` | Makes the background image in the homepage layout blur with the scroll |
### Article
| Name | Default | Description |
| ------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `article.showDate` | `true` | Whether or not article dates are displayed. |
| `article.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showDateOnlyInArticle` | `false` | Show date within article even if not displayed in article listings/cards. |
| `article.showDateUpdated` | `false` | Whether or not the dates articles were updated are displayed. |
| `article.showAuthor` | `true` | Whether or not the author box is displayed in the article footer. |
| `article.showAuthorBottom` | `false` | Author boxes are displayed at the bottom of each page instead of the top. |
| `article.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each article page. |
| `article.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `article.layoutBackgroundBlur` | `true` | Makes the background image in the background article heroStyle blur with the scroll |
| `article.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `article.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the article header. |
| `article.showDraftLabel` | `true` | Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`. |
| `article.showEdit` | `false` | Whether or not the link to edit the article content should be displayed. |
| `article.editURL` | _Not set_ | When `article.showEdit` is active, the URL for the edit link. |
| `article.editAppendPath` | `true` | When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`. |
| `article.seriesOpened` | `false` | Whether or not the series module will be displayed open by default or not. |
| `article.showHeadingAnchors` | `true` | Whether or not heading anchor links are displayed alongside headings within articles. |
| `article.showPagination` | `true` | Whether or not the next/previous article links are displayed in the article footer. |
| `article.invertPagination` | `false` | Whether or not to flip the direction of the next/previous article links. |
| `article.showReadingTime` | `true` | Whether or not article reading times are displayed. |
| `article.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
| `article.showRelatedContent` | `false` | Display related content for each post. Might required additional configuration to your `config.toml`. Please check the theme `config.toml` if you want to enable this feature and copy all the relevant *related* entries. Also check [Hugo's docs](https://gohugo.io/content-management/related/) on related content. |
| `article.relatedContentLimit` | `3` | Limit of related articles to display if ` showRelatedContent` is turned on. |
| `article.showTaxonomies` | `false` | Whether or not the taxonomies related to this article are displayed. |
| `article.showAuthorsBadges` | `false` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `article.showWordCount` | `false` | Whether or not article word counts are displayed. |
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "linkedin", "twitter", "reddit", "pinterest", "facebook", "email", "whatsapp", and "telegram" |
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
### List
| Name | Default | Description |
| ---------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each list page. |
| `list.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `list.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the header on list pages. |
| `list.layoutBackgroundBlur` | `true` | Makes the background image in the background list heroStyle blur with the scroll |
| `list.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on list pages. |
| `list.showSummary` | `false` | Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration). |
| `list.showViews` | `false` | Whether or not list views are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showLikes` | `false` | Whether or not list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showCards` | `false` | Whether or not each article is displayed as a card or as simple inline text. |
| `list.groupByYear` | `true` | Whether or not articles are grouped by year on list pages. |
| `list.cardView` | `false` | Display lists as a gallery of cards. |
| `list.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
| `list.constrainItemsWidth` | `false` | Limit item width to `prose` to increase readability. Useful when no feature images are available. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
### Sitemap
| Name | Default | Description |
| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sitemap.excludedKinds` | `["taxonomy", "term"]` | Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values. |
### Taxonomy
| Name | Default | Description |
| ------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------- |
| `taxonomy.showTermCount` | `true` | Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing. |
| `taxonomy.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each taxonomy page. |
| `taxonomy.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `taxonomy.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the taxonomy header. |
| `taxonomy.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showTableOfContents` | `false` | Whether or not the table of contents is displayed on taxonomies. |
| `taxonomy.cardView` | `false` | Display lists as a gallery of cards. |
### Term
| Name | Default | Description |
| -------------------------- | --------- | ---------------------------------------------------------------------------------------------------------- |
| `term.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each term page. |
| `term.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `term.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the term header. |
| `term.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showTableOfContents` | `false` | Whether or not the table of contents is displayed on terms. |
| `term.groupByYear` | `false` | Whether or not articles are grouped by year on term pages. |
| `term.cardView` | `false` | Display lists as a gallery of cards. |
| `term.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
### Firebase
| Name | Default | Description |
| ---------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `firebase.apiKey` | _Not set_ | Firebase apiKey, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.authDomain` | _Not set_ | Firebase authDomain, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.projectId` | _Not set_ | Firebase projectId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.storageBucket` | _Not set_ | Firebase storageBucket, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.messagingSenderId` | _Not set_ | Firebase messagingSenderId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.appId` | _Not set_ | Firebase appId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.measurementId` | _Not set_ | Firebase measurementId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
### Fathom Analytics
| Name | Default | Description |
| ------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `fathomAnalytics.site` | _Not set_ | The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `fathomAnalytics.domain` | _Not set_ | If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain. |
### Umami Analytics
| Name | Default | Description |
| -------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `umamiAnalytics.websiteid` | _Not set_ | The site code generated by Umami Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `umamiAnalytics.domain` | _Not set_ | If using a custom domain with Umami Analytics, provide it here to serve `script.js` from the custom domain. |
### BuyMeACoffee
| Name | Default | Description |
| ----------------------------------- | --------- | --------------------------------------------------------------------------- |
| `buymeacoffee.identifier` | _Not set_ | The identifier to the target buymeacoffee account. |
| `buymeacoffee.globalWidget` | _Not set_ | Activate the global buymeacoffee widget. |
| `buymeacoffee.globalWidgetMessage` | _Not set_ | Message what will be displayed the first time a new user lands on the site. |
| `buymeacoffee.globalWidgetColor` | _Not set_ | Widget color in hex format. |
| `buymeacoffee.globalWidgetPosition` | _Not set_ | Position of the widget, i.e. "Left" or "Right" |
### Verifications
| Name | Default | Description |
| ------------------------ | --------- | --------------------------------------------------------------------------------------- |
| `verification.google` | _Not set_ | The site verification string provided by Google to be included in the site metadata. |
| `verification.bing` | _Not set_ | The site verification string provided by Bing to be included in the site metadata. |
| `verification.pinterest` | _Not set_ | The site verification string provided by Pinterest to be included in the site metadata. |
| `verification.yandex` | _Not set_ | The site verification string provided by Yandex to be included in the site metadata. |
<!-- prettier-ignore-end -->
## Other configuration files
The theme also includes a `markup.toml` configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Blowfish.
Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour.

View file

@ -1,347 +0,0 @@
---
title: "Configuration"
date: 2020-08-14
draft: false
description: "All the configuration variables available in Blowfish."
slug: "configuration"
tags: ["config", "docs"]
series: ["Documentation"]
series_order: 4
---
Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.
The theme ships with a default configuration that gets you up and running with a basic blog or static website.
{{< alert "fire" >}}
We just launched a CLI tool to help you get started with Blowfish. It will help you with installation and configuration. Install the CLI tool globally using:
```bash
npx blowfish-tools
```
{{< /alert >}}
> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.
The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.
{{< alert >}}
As outlined in the [installation instructions]({{< ref "/docs/installation#set-up-theme-configuration-files" >}}), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `config.toml` file in your project root.
{{< /alert >}}
## Site configuration
Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.
The site configuration is managed through the `config/_default/config.toml` file. The table below outlines all the settings that the Blowfish takes advantage of.
Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`).
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `theme` | `"blowfish"` | When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `blowfish` for the theme to function. |
| `baseURL` | _Not set_ | The URL to the root of the website. |
| `defaultContentLanguage` | `"en"` | This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes. |
| `enableRobotsTXT` | `true` | When enabled, a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made `robots.txt`, set to `false` and place your file in the `static` directory. For complete control, you may provide a [custom layout]({{< ref "content-examples#custom-layouts" >}}) to generate this file. |
| `paginate` | `10` | The number of articles listed on each page of the article listing. |
| `summaryLength` | `0` | The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden. |
| `outputs.home` | `["HTML", "RSS", "JSON"]` | The output formats that are generated for the site. Blowfish requires HTML, RSS and JSON for all theme components to work correctly. |
| `permalinks` | _Not set_ | Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration. |
| `taxonomies` | _Not set_ | Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration. |
<!-- prettier-ignore-end -->
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
## Language and i18n
Blowfish is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.
The theme currently supports the following languages by default:
| Language | Code |
| ---------------------------- | ------- |
| Arabic | `ar` |
| Bulgarian | `bg` |
| Bengali | `bn` |
| Catalan | `ca` |
| Czech | `cs` |
| German | `de` |
| English | `en` |
| Spanish (Spain) | `es` |
| Finnish | `fi` |
| French | `fr` |
| Hebrew | `he` |
| Croatian | `hr` |
| Hungarian | `hu` |
| Indonesian | `id` |
| Italian | `it` |
| Japanese | `ja` |
| Korean | `ko` |
| Polish | `pl` |
| Portuguese (Brazil) | `pt-br` |
| Portuguese (Portugal) | `pt-pt` |
| Romanian | `ro` |
| Russian | `ru` |
| Turkish | `tr` |
| Vietnamese | `vi` |
| Simplified Chinese (China) | `zh-cn` |
| Traditional Chinese (Taiwan) | `zh-tw` |
The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/nunocoracao/blowfish/pulls).
### Configuration
In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Blowfish includes an English language configuration at `config/_default/languages.en.toml`.
The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`.
{{< alert >}}
**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename.
{{< /alert >}}
#### Global
<!-- prettier-ignore-start -->
| Name | Default | Description |
| -------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `languageCode` | `"en"` | The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive. |
| `languageName` | `"English"` | The name of the language. |
| `weight` | `1` | The weight determines the order of languages when building multilingual sites. |
| `title` | `"Blowfish"` | The title of the website. This will be displayed in the site header and footer. |
<!-- prettier-ignore-end -->
#### Params
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ---------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params.displayName` | `"EN"` | The name used when the language appears on the website. |
| `params.isoCode` | `"en"` | The ISO language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`). |
| `params.rtl` | `false` | Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Blowfish fully supports using RTL and LTR languages at the same time and will dynamically adjust to both. |
| `params.dateFormat` | `"2 January 2006"` | How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats. |
| `params.logo` | _Not set_ | The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. |
| `params.secondaryLogo` | _Not set_ | The relative path to the secondary site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. This should have an inverted/contrasting colour scheme to `logo`. If set, this logo will be shown when users toggle from the `defaultAppearance` mode. |
| `params.description` | _Not set_ | The website description. This will be used in the site metadata. |
| `params.copyright` | _Not set_ | A Markdown string for the site footer copyright message can include the placeholder { year } to dynamically insert the current year. If none is provided, Blowfish will automatically generate a copyright string using the site `title`. |
<!-- prettier-ignore-end -->
#### Author
| Name | Default | Description |
| ----------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `author.name` | _Not set_ | The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used. |
| `author.image` | _Not set_ | Path to the image file of the author. The image should be a 1:1 aspect ratio. The image can be placed in the site's `assets/` folder or can be external url. |
| `author.headline` | _Not set_ | A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name. |
| `author.bio` | _Not set_ | A Markdown string containing the author's bio. It will be displayed in article footers. |
| `author.links` | _Not set_ | The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`. |
<!-- prettier-ignore-end -->
### Menus
Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.
Menu config files are named with the format `menus.[language-code].toml`. Always ensure that the language code used in the menus configuration matches the languages configuration.
The [Getting Started]({{< ref "getting-started#menus" >}}) section explains more about the structure of this file. You can also refer to the [Hugo menu docs](https://gohugo.io/content-management/menus/) for more configuration examples.
## Theme parameters
Blowfish provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the `config/_default/params.toml` file.
Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details.
<!-- prettier-ignore-start -->
### Global
| Name | Default | Description |
| ------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `colorScheme` | `"blowfish"` | The theme colour scheme to use. Valid values are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details. |
| `defaultAppearance` | `"light"` | The default theme appearance, either `light` or `dark`. |
| `autoSwitchAppearance` | `true` | Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`. |
| `enableSearch` | `false` | Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly. |
| `enableCodeCopy` | `false` | Whether copy-to-clipboard buttons are enabled for `<code>` blocks. The `highlight.noClasses` parameter must be set to `false` for code copy to function correctly. Read more about [other configuration files](#other-configuration-files) below. |
| `mainSections` | _Not set_ | The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used. |
| `showViews` | _Not set_ | Whether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below. |
| `showLikes` | _Not set_ | Whether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `robots` | _Not set_ | String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `disableImageZoom` | `false` | Disables image zoom feature across all the images in the site. |
| `disableImageOptimization` | `false` | Disables image resize and optimization features across all the images in the site. |
| `disableTextInHeader` | `false` | Disables text in header, useful for logo based headers. |
| `defaultBackgroundImage` | _Not set_ | Default background image for both `background` homepage layout and `background` hero style |
| `defaultFeaturedImage` | _Not set_ | Default background image for all `featured` images across articles, will be overridden by a local `featured` image. |
| `highlightCurrentMenuArea` | _Not set_ | Marks menu entries in the main menu when selected |
| `smartTOC` | _Not set_ | Activate smart Table of Contents, items in view will be highlighted. |
| `smartTOCHideUnfocusedChildren` | _Not set_ | When smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus. |
### Header
| Name | Default | Description |
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| `header.layout` | `"basic"` | Defines the header for the entire site, supported values are `basic`, `fixed`, `fixed-fill`, and `fixed-fill-blur`. |
### Footer
| Name | Default | Description |
| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `footer.showMenu` | `true` | Show/hide the footer menu, which can be configured in the `[[footer]]` section of the `config/_default/menus.en.toml` file. |
| `footer.showCopyright` | `true` | Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the `copyright` parameter in the [languages configuration](#language-and-i18n). |
| `footer.showThemeAttribution` | `true` | Whether or not to show the "powered by" theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page). |
| `footer.showAppearanceSwitcher` | `false` | Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference. |
| `footer.showScrollToTop` | `true` | When set to `true` the scroll to top arrow is displayed. |
### Homepage
| Name | Default | Description |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `homepage.layout` | `"profile"` | The layout of the homepage. Valid values are `page`, `profile`, `hero`, `card`, `background`, or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.homepageImage` | _Not set_ | Image to be used in `hero` and `card` layouts. Can be set as local image from asset directory or external image url. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.showRecent` | `false` | Whether or not to display the recent articles list on the homepage. |
| `homepage.showRecentItems` | 5 | How many articles to display if showRecent is true. If variable is set to 0 or if it isn't defined the system will default to 5 articles. |
| `homepage.showMoreLink` | `false` | Whether or not to display a show more link at the end of your posts that takes the user to a predefined place. |
| `homepage.showMoreLinkDest` | `/posts` | The destination of the show more button. |
| `homepage.cardView` | `false` | Display recent articles as a gallery of cards. |
| `homepage.cardViewScreenWidth` | `false` | Enhance the width of the recent articles card gallery to take the full width available. |
| `homepage.layoutBackgroundBlur` | `false` | Makes the background image in the homepage layout blur with the scroll |
### Article
| Name | Default | Description |
| ------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `article.showDate` | `true` | Whether or not article dates are displayed. |
| `article.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showDateOnlyInArticle` | `false` | Show date within article even if not displayed in article listings/cards. |
| `article.showDateUpdated` | `false` | Whether or not the dates articles were updated are displayed. |
| `article.showAuthor` | `true` | Whether or not the author box is displayed in the article footer. |
| `article.showAuthorBottom` | `false` | Author boxes are displayed at the bottom of each page instead of the top. |
| `article.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each article page. |
| `article.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `article.layoutBackgroundBlur` | `true` | Makes the background image in the background article heroStyle blur with the scroll |
| `article.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `article.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the article header. |
| `article.showDraftLabel` | `true` | Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`. |
| `article.showEdit` | `false` | Whether or not the link to edit the article content should be displayed. |
| `article.editURL` | _Not set_ | When `article.showEdit` is active, the URL for the edit link. |
| `article.editAppendPath` | `true` | When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`. |
| `article.seriesOpened` | `false` | Whether or not the series module will be displayed open by default or not. |
| `article.showHeadingAnchors` | `true` | Whether or not heading anchor links are displayed alongside headings within articles. |
| `article.showPagination` | `true` | Whether or not the next/previous article links are displayed in the article footer. |
| `article.invertPagination` | `false` | Whether or not to flip the direction of the next/previous article links. |
| `article.showReadingTime` | `true` | Whether or not article reading times are displayed. |
| `article.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
| `article.showRelatedContent` | `false` | Display related content for each post. Might required additional configuration to your `config.toml`. Please check the theme `config.toml` if you want to enable this feature and copy all the relevant *related* entries. Also check [Hugo's docs](https://gohugo.io/content-management/related/) on related content. |
| `article.relatedContentLimit` | `3` | Limit of related articles to display if ` showRelatedContent` is turned on. |
| `article.showTaxonomies` | `false` | Whether or not the taxonomies related to this article are displayed. |
| `article.showAuthorsBadges` | `false` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `article.showWordCount` | `false` | Whether or not article word counts are displayed. |
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "linkedin", "twitter", "reddit", "pinterest", "facebook", "email", "whatsapp", and "telegram" |
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
### List
| Name | Default | Description |
| ---------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each list page. |
| `list.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `list.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the header on list pages. |
| `list.layoutBackgroundBlur` | `true` | Makes the background image in the background list heroStyle blur with the scroll |
| `list.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on list pages. |
| `list.showSummary` | `false` | Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration). |
| `list.showViews` | `false` | Whether or not list views are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showLikes` | `false` | Whether or not list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showCards` | `false` | Whether or not each article is displayed as a card or as simple inline text. |
| `list.groupByYear` | `true` | Whether or not articles are grouped by year on list pages. |
| `list.cardView` | `false` | Display lists as a gallery of cards. |
| `list.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
| `list.constrainItemsWidth` | `false` | Limit item width to `prose` to increase readability. Useful when no feature images are available. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
### Sitemap
| Name | Default | Description |
| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sitemap.excludedKinds` | `["taxonomy", "term"]` | Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values. |
### Taxonomy
| Name | Default | Description |
| ------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------- |
| `taxonomy.showTermCount` | `true` | Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing. |
| `taxonomy.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each taxonomy page. |
| `taxonomy.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `taxonomy.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the taxonomy header. |
| `taxonomy.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showTableOfContents` | `false` | Whether or not the table of contents is displayed on taxonomies. |
| `taxonomy.cardView` | `false` | Display lists as a gallery of cards. |
### Term
| Name | Default | Description |
| -------------------------- | --------- | ---------------------------------------------------------------------------------------------------------- |
| `term.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each term page. |
| `term.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `term.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the term header. |
| `term.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showTableOfContents` | `false` | Whether or not the table of contents is displayed on terms. |
| `term.groupByYear` | `false` | Whether or not articles are grouped by year on term pages. |
| `term.cardView` | `false` | Display lists as a gallery of cards. |
| `term.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
### Firebase
| Name | Default | Description |
| ---------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `firebase.apiKey` | _Not set_ | Firebase apiKey, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.authDomain` | _Not set_ | Firebase authDomain, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.projectId` | _Not set_ | Firebase projectId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.storageBucket` | _Not set_ | Firebase storageBucket, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.messagingSenderId` | _Not set_ | Firebase messagingSenderId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.appId` | _Not set_ | Firebase appId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.measurementId` | _Not set_ | Firebase measurementId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
### Fathom Analytics
| Name | Default | Description |
| ------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `fathomAnalytics.site` | _Not set_ | The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `fathomAnalytics.domain` | _Not set_ | If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain. |
### Umami Analytics
| Name | Default | Description |
| -------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `umamiAnalytics.websiteid` | _Not set_ | The site code generated by Umami Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `umamiAnalytics.domain` | _Not set_ | If using a custom domain with Umami Analytics, provide it here to serve `script.js` from the custom domain. |
### BuyMeACoffee
| Name | Default | Description |
| ----------------------------------- | --------- | --------------------------------------------------------------------------- |
| `buymeacoffee.identifier` | _Not set_ | The identifier to the target buymeacoffee account. |
| `buymeacoffee.globalWidget` | _Not set_ | Activate the global buymeacoffee widget. |
| `buymeacoffee.globalWidgetMessage` | _Not set_ | Message what will be displayed the first time a new user lands on the site. |
| `buymeacoffee.globalWidgetColor` | _Not set_ | Widget color in hex format. |
| `buymeacoffee.globalWidgetPosition` | _Not set_ | Position of the widget, i.e. "Left" or "Right" |
### Verifications
| Name | Default | Description |
| ------------------------ | --------- | --------------------------------------------------------------------------------------- |
| `verification.google` | _Not set_ | The site verification string provided by Google to be included in the site metadata. |
| `verification.bing` | _Not set_ | The site verification string provided by Bing to be included in the site metadata. |
| `verification.pinterest` | _Not set_ | The site verification string provided by Pinterest to be included in the site metadata. |
| `verification.yandex` | _Not set_ | The site verification string provided by Yandex to be included in the site metadata. |
<!-- prettier-ignore-end -->
## Other configuration files
The theme also includes a `markup.toml` configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Blowfish.
Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour.

View file

@ -1,348 +0,0 @@
---
title: "Configuration"
date: 2020-08-14
draft: false
description: "All the configuration variables available in Blowfish."
slug: "configuration"
tags: ["config", "docs"]
series: ["Documentation"]
series_order: 4
---
Blowfish is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.
The theme ships with a default configuration that gets you up and running with a basic blog or static website.
{{< alert "fire" >}}
We just launched a CLI tool to help you get started with Blowfish. It will help you with installation and configuration. Install the CLI tool globally using:
```bash
npx blowfish-tools
```
{{< /alert >}}
> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.
The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.
{{< alert >}}
As outlined in the [installation instructions]({{< ref "/docs/installation#set-up-theme-configuration-files" >}}), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `config.toml` file in your project root.
{{< /alert >}}
## Site configuration
Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.
The site configuration is managed through the `config/_default/config.toml` file. The table below outlines all the settings that the Blowfish takes advantage of.
Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`).
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `theme` | `"blowfish"` | When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `blowfish` for the theme to function. |
| `baseURL` | _Not set_ | The URL to the root of the website. |
| `defaultContentLanguage` | `"en"` | This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes. |
| `enableRobotsTXT` | `true` | When enabled, a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made `robots.txt`, set to `false` and place your file in the `static` directory. For complete control, you may provide a [custom layout]({{< ref "content-examples#custom-layouts" >}}) to generate this file. |
| `paginate` | `10` | The number of articles listed on each page of the article listing. |
| `summaryLength` | `0` | The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden. |
| `outputs.home` | `["HTML", "RSS", "JSON"]` | The output formats that are generated for the site. Blowfish requires HTML, RSS and JSON for all theme components to work correctly. |
| `permalinks` | _Not set_ | Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration. |
| `taxonomies` | _Not set_ | Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration. |
<!-- prettier-ignore-end -->
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
## Language and i18n
Blowfish is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.
The theme currently supports the following languages by default:
| Language | Code |
| ---------------------------- | ------- |
| Arabic | `ar` |
| Bulgarian | `bg` |
| Bengali | `bn` |
| Catalan | `ca` |
| Czech | `cs` |
| German | `de` |
| English | `en` |
| Spanish (Spain) | `es` |
| Finnish | `fi` |
| French | `fr` |
| Hebrew | `he` |
| Croatian | `hr` |
| Hungarian | `hu` |
| Indonesian | `id` |
| Italian | `it` |
| Japanese | `ja` |
| Korean | `ko` |
| Polish | `pl` |
| Portuguese (Brazil) | `pt-br` |
| Portuguese (Portugal) | `pt-pt` |
| Romanian | `ro` |
| Russian | `ru` |
| Turkish | `tr` |
| Vietnamese | `vi` |
| Simplified Chinese (China) | `zh-cn` |
| Traditional Chinese (Taiwan) | `zh-tw` |
The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/nunocoracao/blowfish/pulls).
### Configuration
In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Blowfish includes an English language configuration at `config/_default/languages.en.toml`.
The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`.
{{< alert >}}
**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename.
{{< /alert >}}
#### Global
<!-- prettier-ignore-start -->
| Name | Default | Description |
| -------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `languageCode` | `"en"` | The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive. |
| `languageName` | `"English"` | The name of the language. |
| `weight` | `1` | The weight determines the order of languages when building multilingual sites. |
| `title` | `"Blowfish"` | The title of the website. This will be displayed in the site header and footer. |
<!-- prettier-ignore-end -->
#### Params
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ---------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `params.displayName` | `"EN"` | The name used when the language appears on the website. |
| `params.isoCode` | `"en"` | The ISO language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`). |
| `params.rtl` | `false` | Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Blowfish fully supports using RTL and LTR languages at the same time and will dynamically adjust to both. |
| `params.dateFormat` | `"2 January 2006"` | How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats. |
| `params.logo` | _Not set_ | The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. |
| `params.secondaryLogo` | _Not set_ | The relative path to the secondary site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions. This should have an inverted/contrasting colour scheme to `logo`. If set, this logo will be shown when users toggle from the `defaultAppearance` mode. |
| `params.description` | _Not set_ | The website description. This will be used in the site metadata. |
| `params.copyright` | _Not set_ | A Markdown string for the site footer copyright message can include the placeholder { year } to dynamically insert the current year. If none is provided, Blowfish will automatically generate a copyright string using the site `title`. |
<!-- prettier-ignore-end -->
#### Author
| Name | Default | Description |
| ----------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `author.name` | _Not set_ | The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used. |
| `author.image` | _Not set_ | Path to the image file of the author. The image should be a 1:1 aspect ratio. The image can be placed in the site's `assets/` folder or can be external url. |
| `author.headline` | _Not set_ | A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name. |
| `author.bio` | _Not set_ | A Markdown string containing the author's bio. It will be displayed in article footers. |
| `author.links` | _Not set_ | The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`. |
<!-- prettier-ignore-end -->
### Menus
Blowfish also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.
Menu config files are named with the format `menus.[language-code].toml`. Always ensure that the language code used in the menus configuration matches the languages configuration.
The [Getting Started]({{< ref "getting-started#menus" >}}) section explains more about the structure of this file. You can also refer to the [Hugo menu docs](https://gohugo.io/content-management/menus/) for more configuration examples.
## Theme parameters
Blowfish provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the `config/_default/params.toml` file.
Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details.
<!-- prettier-ignore-start -->
### Global
| Name | Default | Description |
| ------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `colorScheme` | `"blowfish"` | The theme colour scheme to use. Valid values are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details. |
| `defaultAppearance` | `"light"` | The default theme appearance, either `light` or `dark`. |
| `autoSwitchAppearance` | `true` | Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`. |
| `enableSearch` | `false` | Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly. |
| `enableCodeCopy` | `false` | Whether copy-to-clipboard buttons are enabled for `<code>` blocks. The `highlight.noClasses` parameter must be set to `false` for code copy to function correctly. Read more about [other configuration files](#other-configuration-files) below. |
| `mainSections` | _Not set_ | The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used. |
| `showViews` | _Not set_ | Whether or not articles and list views are displayed. This requires firebase integrations to be enabled, look below. |
| `showLikes` | _Not set_ | Whether or not articles and list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `robots` | _Not set_ | String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `disableImageZoom` | `false` | Disables image zoom feature across all the images in the site. |
| `disableImageOptimization` | `false` | Disables image resize and optimization features across all the images in the site. |
| `disableTextInHeader` | `false` | Disables text in header, useful for logo based headers. |
| `defaultBackgroundImage` | _Not set_ | Default background image for both `background` homepage layout and `background` hero style |
| `defaultFeaturedImage` | _Not set_ | Default background image for all `featured` images across articles, will be overridden by a local `featured` image. |
| `highlightCurrentMenuArea` | _Not set_ | Marks menu entries in the main menu when selected |
| `smartTOC` | _Not set_ | Activate smart Table of Contents, items in view will be highlighted. |
| `smartTOCHideUnfocusedChildren` | _Not set_ | When smart Table of Contents is turned on, this will hide deeper levels of the table when they are not in focus. |
### Header
| Name | Default | Description |
| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| `header.layout` | `"basic"` | Defines the header for the entire site, supported values are `basic`, `fixed`, `fixed-fill`, and `fixed-fill-blur`. |
### Footer
| Name | Default | Description |
| ------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `footer.showMenu` | `true` | Show/hide the footer menu, which can be configured in the `[[footer]]` section of the `config/_default/menus.en.toml` file. |
| `footer.showCopyright` | `true` | Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the `copyright` parameter in the [languages configuration](#language-and-i18n). |
| `footer.showThemeAttribution` | `true` | Whether or not to show the "powered by" theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page). |
| `footer.showAppearanceSwitcher` | `false` | Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference. |
| `footer.showScrollToTop` | `true` | When set to `true` the scroll to top arrow is displayed. |
### Homepage
| Name | Default | Description |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `homepage.layout` | `"profile"` | The layout of the homepage. Valid values are `page`, `profile`, `hero`, `card`, `background`, or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.homepageImage` | _Not set_ | Image to be used in `hero` and `card` layouts. Can be set as local image from asset directory or external image url. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details. |
| `homepage.showRecent` | `false` | Whether or not to display the recent articles list on the homepage. |
| `homepage.showRecentItems` | 5 | How many articles to display if showRecent is true. If variable is set to 0 or if it isn't defined the system will default to 5 articles. |
| `homepage.showMoreLink` | `false` | Whether or not to display a show more link at the end of your posts that takes the user to a predefined place. |
| `homepage.showMoreLinkDest` | `/posts` | The destination of the show more button. |
| `homepage.cardView` | `false` | Display recent articles as a gallery of cards. |
| `homepage.cardViewScreenWidth` | `false` | Enhance the width of the recent articles card gallery to take the full width available. |
| `homepage.layoutBackgroundBlur` | `false` | Makes the background image in the homepage layout blur with the scroll |
### Article
| Name | Default | Description |
| ------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `article.showDate` | `true` | Whether or not article dates are displayed. |
| `article.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `article.showDateOnlyInArticle` | `false` | Show date within article even if not displayed in article listings/cards. |
| `article.showDateUpdated` | `false` | Whether or not the dates articles were updated are displayed. |
| `article.showAuthor` | `true` | Whether or not the author box is displayed in the article footer. |
| `article.showAuthorBottom` | `false` | Author boxes are displayed at the bottom of each page instead of the top. |
| `article.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each article page. |
| `article.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `article.layoutBackgroundBlur` | `true` | Makes the background image in the background article heroStyle blur with the scroll |
| `article.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `article.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the article header. |
| `article.showDraftLabel` | `true` | Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`. |
| `article.showEdit` | `false` | Whether or not the link to edit the article content should be displayed. |
| `article.editURL` | _Not set_ | When `article.showEdit` is active, the URL for the edit link. |
| `article.editAppendPath` | `true` | When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`. |
| `article.seriesOpened` | `false` | Whether or not the series module will be displayed open by default or not. |
| `article.showHeadingAnchors` | `true` | Whether or not heading anchor links are displayed alongside headings within articles. |
| `article.showPagination` | `true` | Whether or not the next/previous article links are displayed in the article footer. |
| `article.invertPagination` | `false` | Whether or not to flip the direction of the next/previous article links. |
| `article.showReadingTime` | `true` | Whether or not article reading times are displayed. |
| `article.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
| `article.showRelatedContent` | `false` | Display related content for each post. Might required additional configuration to your `config.toml`. Please check the theme `config.toml` if you want to enable this feature and copy all the relevant *related* entries. Also check [Hugo's docs](https://gohugo.io/content-management/related/) on related content. |
| `article.relatedContentLimit` | `3` | Limit of related articles to display if ` showRelatedContent` is turned on. |
| `article.showTaxonomies` | `false` | Whether or not the taxonomies related to this article are displayed. |
| `article.showAuthorsBadges` | `false` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `article.showWordCount` | `false` | Whether or not article word counts are displayed. |
| `article.showComments` | `false` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `article.sharingLinks` | _Not set_ | Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed. Available values are: "linkedin", "twitter", "reddit", "pinterest", "facebook", "email", "whatsapp", and "telegram" |
| `article.showZenMode` | `false` | Flag to activate Zen Mode reading feature for articles. |
### List
| Name | Default | Description |
| ---------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each list page. |
| `list.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `list.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the header on list pages. |
| `list.layoutBackgroundBlur` | `true` | Makes the background image in the background list heroStyle blur with the scroll |
| `list.layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on list pages. |
| `list.showSummary` | `false` | Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration). |
| `list.showViews` | `false` | Whether or not list views are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showLikes` | `false` | Whether or not list likes are displayed. This requires firebase integrations to be enabled, look below. |
| `list.showCards` | `false` | Whether or not each article is displayed as a card or as simple inline text. |
| `list.groupByYear` | `true` | Whether or not articles are grouped by year on list pages. |
| `list.cardView` | `false` | Display lists as a gallery of cards. |
| `list.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
| `list.constrainItemsWidth` | `false` | Limit item width to `prose` to increase readability. Useful when no feature images are available. |
| `list.showTableOfContents` | `false` | Whether or not the table of contents is displayed on articles. |
### Sitemap
| Name | Default | Description |
| ----------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sitemap.excludedKinds` | `["taxonomy", "term"]` | Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values. |
### Taxonomy
| Name | Default | Description |
| ------------------------------ | --------- | ---------------------------------------------------------------------------------------------------------- |
| `taxonomy.showTermCount` | `true` | Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing. |
| `taxonomy.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each taxonomy page. |
| `taxonomy.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `taxonomy.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the taxonomy header. |
| `taxonomy.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `taxonomy.showTableOfContents` | `false` | Whether or not the table of contents is displayed on taxonomies. |
| `taxonomy.cardView` | `false` | Display lists as a gallery of cards. |
### Term
| Name | Default | Description |
| -------------------------- | --------- | ---------------------------------------------------------------------------------------------------------- |
| `term.showHero` | `false` | Whether the thumbnail image will be shown as a hero image within each term page. |
| `term.heroStyle` | _Not set_ | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `term.showBreadcrumbs` | `false` | Whether or not breadcrumbs are displayed in the term header. |
| `term.showViews` | `false` | Whether or not article views are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showLikes` | `false` | Whether or not article likes are displayed. This requires firebase integrations to be enabled, look below. |
| `term.showTableOfContents` | `false` | Whether or not the table of contents is displayed on terms. |
| `term.groupByYear` | `false` | Whether or not articles are grouped by year on term pages. |
| `term.cardView` | `false` | Display lists as a gallery of cards. |
| `term.cardViewScreenWidth` | `false` | Enhance the width of card galleries in lists to take the full width available. |
### Firebase
| Name | Default | Description |
| ---------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `firebase.apiKey` | _Not set_ | Firebase apiKey, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.authDomain` | _Not set_ | Firebase authDomain, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.projectId` | _Not set_ | Firebase projectId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.storageBucket` | _Not set_ | Firebase storageBucket, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.messagingSenderId` | _Not set_ | Firebase messagingSenderId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.appId` | _Not set_ | Firebase appId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
| `firebase.measurementId` | _Not set_ | Firebase measurementId, required to integrate against Firebase. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish. |
### Fathom Analytics
| Name | Default | Description |
| ------------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `fathomAnalytics.site` | _Not set_ | The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `fathomAnalytics.domain` | _Not set_ | If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain. |
### Umami Analytics
| Name | Default | Description |
| -------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `umamiAnalytics.websiteid` | _Not set_ | The site code generated by Umami Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details. |
| `umamiAnalytics.domain` | _Not set_ | If using a custom domain with Umami Analytics, provide it here to serve `script.js` from the custom domain. |
### BuyMeACoffee
| Name | Default | Description |
| ----------------------------------- | --------- | --------------------------------------------------------------------------- |
| `buymeacoffee.identifier` | _Not set_ | The identifier to the target buymeacoffee account. |
| `buymeacoffee.globalWidget` | _Not set_ | Activate the global buymeacoffee widget. |
| `buymeacoffee.globalWidgetMessage` | _Not set_ | Message what will be displayed the first time a new user lands on the site. |
| `buymeacoffee.globalWidgetColor` | _Not set_ | Widget color in hex format. |
| `buymeacoffee.globalWidgetPosition` | _Not set_ | Position of the widget, i.e. "Left" or "Right" |
### Verifications
| Name | Default | Description |
| ------------------------ | --------- | --------------------------------------------------------------------------------------- |
| `verification.google` | _Not set_ | The site verification string provided by Google to be included in the site metadata. |
| `verification.bing` | _Not set_ | The site verification string provided by Bing to be included in the site metadata. |
| `verification.pinterest` | _Not set_ | The site verification string provided by Pinterest to be included in the site metadata. |
| `verification.yandex` | _Not set_ | The site verification string provided by Yandex to be included in the site metadata. |
<!-- prettier-ignore-end -->
## Other configuration files
The theme also includes a `markup.toml` configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Blowfish.
Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to function incorrectly and could result in unintended behaviour.

View file

@ -1,353 +0,0 @@
---
title: "配置"
date: 2020-08-14
draft: false
description: "介绍 Blowfish 中所有可用的的配置变量。"
slug: "configuration"
tags: ["配置", "文档"]
series: ["部署教程"]
series_order: 4
---
Blowfish 适宜个高度定制化的主题,使用到了一些 Hugo 中最新的特性来简化配置方式。
主题附带了默认配置,可以让你快速启动一个基本的博客或静态网站。
{{< alert "fire" >}}
我们刚刚推出了 CLI 工具,来帮助你快速上手 Blowfish。它将帮助你进行安装和配置。使用以下命令可以全局范围安装 CLI 工具:
```bash
npx blowfish-tools
```
{{< /alert >}}
> 配置文件是基于 TOML 格式的,这也是 Hugo 默认支持的语法。当然如果你愿意,也可以将配置转换成 YAML 或 JSON 格式。
默认情况下,在每个文件中都定义了主题中的可用参数,因此你可以自由调整设置来满足你的需求。
{{< alert >}}
正如[安装说明]({{< ref "/docs/installation#set-up-theme-configuration-files" >}})中的内容,如果你想调整主题配置,可以修改 Hugo 项目中 `config/_default/` 文件夹下的文件,并删除项目根目录中的 `config.toml` 文件。
{{< /alert >}}
## 网站配置
Blowfish 主题支持了 Hugo 框架中定义的所有标准配置变量。但如果希望有更好的体验,需要设置一些特定的配置。
网站配置是通过 `config/_default/config.toml` 文件管理的。下面的表格展示了 Blowfish 中的所有设置.
值得注意的是,表格中提供的变量名可以使用点表示法来简化 TOML 数据结构,例如 `outputs.home` 指的是 `[outputs] home`
<!-- prettier-ignore-start -->
| 名称 | 默认值 | 描述 |
| ------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `theme` | `"blowfish"` | 当你使用 Hugo 模块安装时,应该移除这个配置项。但对 Git 子模块或本地文件复制的安装方式,必须将其设置为 blowfish 才能正常工作。 |
| `baseURL` | 无 | 网站 URL 根地址。 |
| `defaultContentLanguage` | `"en"` | 这个值决定了主题中组件和内容所使用的默认语言。 参考 [语言和 i18n](#language-and-i18n) 部分来了解 blowfish 支持的所有语言代码。 |
| `enableRobotsTXT` | `true` | 当开启这个值,`robots.txt` 文件将会被创建在站点根目录, 这将允许搜索引擎抓取整个网站。如果你想要自己提供 `robots.txt`,那么设置这个值为 `false` 并把你的文件放置到 `static` 目录下。 为了实现完全控制,你可以需要提供一个 [自定义布局]({{< ref "content-examples#custom-layouts" >}}) 来生成此文件。 |
| `paginate` | `10` | 定义文章列表中,每页展示的文章数量。 |
| `summaryLength` | `0` | 当[扉页参数]({{< ref "front-matter" >}}) 中没有提供文章摘要时,此参数定义了自动生成文章摘要的单词数量。如果值为`0`,则默认使用第一句话作为摘要。当摘要被隐藏,这个值没有任何效果。 |
| `outputs.home` | `["HTML", "RSS", "JSON"]` | 为站点自动生成输出格式。Blowfish 要求 HTML、RSS 和 JSON 都需要有,以保证主题组件可以正常运作。 |
| `permalinks` | 无 | 参考 [Hugo 文档](https://gohugo.io/content-management/urls/#permalinks) 中的自定义文章的固定链接配置。 |
| `taxonomies` | 无 | 参考 [整理内容]({{< ref "getting-started#organising-content" >}}) 中的分类器配置。 |
<!-- prettier-ignore-end -->
## 缩略图
Blowfish 的创立开端旨在便于为文章添加视觉效果。如果你熟悉 Hugo 的文章结构,只需要在你文章所在的文件夹中,放置一个以`feature*`开头的图像文件Blowfish支持所有格式的文件但更推荐使用 `.png``.jpg`。就这样Blowfish 就能够将图像文件作为文章的缩略图,而且能够在社交平台的 `<a target="_blank" href="https://oembed.com/">oEmbed</a>` 卡片中使用。
[这里]({{< ref "thumbnails" >}}) 可以看到更多内容,同时我们提供了一个[示例]({{< ref "thumbnail_sample" >}}),以便你具体看看如何操作。
## 语言和i18n
Blowfish 针对多语言网站进行了优化,主题的资源素材目前已经翻译成了多个语言版本。语言配置允许你生成多个版本的内容介绍,为网站的访问者提供他们母语的定制化体验。
Blowfish 主题目前默认支持了以下语言:
| 语言 | 代码 |
| ---------------------------- | ------- |
| Arabic | `ar` |
| Bulgarian | `bg` |
| Bengali | `bn` |
| Catalan | `ca` |
| Czech | `cs` |
| German | `de` |
| English | `en` |
| Spanish (Spain) | `es` |
| Finnish | `fi` |
| French | `fr` |
| Hebrew | `he` |
| Croatian | `hr` |
| Hungarian | `hu` |
| Indonesian | `id` |
| Italian | `it` |
| Japanese | `ja` |
| Korean | `ko` |
| Polish | `pl` |
| Portuguese (Brazil) | `pt-br` |
| Portuguese (Portugal) | `pt-pt` |
| Romanian | `ro` |
| Russian | `ru` |
| Turkish | `tr` |
| Vietnamese | `vi` |
| Simplified Chinese (China) | `zh-cn` |
| Traditional Chinese (Taiwan) | `zh-tw` |
组件和静态资源的默认翻译在 `i18n/[code].yaml` 文件中,当然如果你想自定义,覆盖对应的文件即可。你也可以使用这种方法添加新的语言。如果你想与社区分享心得翻译,请[提交PR](https://github.com/nunocoracao/blowfish/pulls)。
### 配置
为了让 Blowfish 尽可能的灵活每个网站都至少语言创建一个语言配置文件。默认情况下Blowfish 提供了 `config/_default/languages.en.toml` 文件以默认支持英语。
默认的文件可以用来作为创建其他语言的一个模板,如果你希望用英语以外的语言撰写网站,也可以对其重命名。只需要格式遵循 `languages.[language-code].toml` 的命名即可。
{{< alert >}}
**注意:** 保证 [网站设置](#site-configuration) 中的 `defaultContentLanguage`参数和你提供的语言配置文件相匹配。
{{< /alert >}}
#### 全局
<!-- prettier-ignore-start -->
| 名称 | 默认值 | 描述 |
| -------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `languageCode` | `"en"` | Hugo 中的默认语言代码。他可以是一个高层级语言(例如 `en`),也可以是一个变体子语言(例如 `en-au`),但一定需要和语言配置文件中的语言代码相匹配。为了符合 HTML 的规范并设置设置大小写敏感的 `isoCode`Hugo希望这个值最好是小写。 |
| `languageName` | `"English"` | 语言名称。 |
| `weight` | `1` | 权重决定了在构建多语言时的语言顺序。 |
| `title` | `"Blowfish"` | 网站的标题。它将在网站头部和底部进行展示。 |
<!-- prettier-ignore-end -->
#### 参数
<!-- prettier-ignore-start -->
| 名称 | 默认值 | 描述 |
| ---------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `params.displayName` | `"EN"` | 语言在网站中的展示名。 |
| `params.isoCode` | `"en"` | 用于 HTML 元数据的 ISO 语言代码。他可以是一个高层级语言(例如 `en`),也可以是一个变体子语言(例如 `en-au`)。 |
| `params.rtl` | `false` | 用于指定是否是 RTL 语言。设置为 `true` 则网站会从右向左重拍内容。Blowfish 完全支持同时使用 RTL 和 LTR 语言,并将动态调整。 |
| `params.dateFormat` | `"2 January 2006"` | 用于指定如何日期格式化。参考 [Hugo 文档](https://gohugo.io/functions/format/#gos-layout-string) 了解可以支持的格式。 |
| `params.logo` | 无 | `assets/` 文件夹中站点 logo 的相对路径。该 logo 文件需要提供 2x 分辨率并支持任何图像尺寸。 |
| `params.secondaryLogo` | 无 | `assets/` 文件夹中站点次要 logo 的相对路径。该 logo 文件需要提供 2x 分辨率并支持任何图像尺寸。这个 logo 的颜色方案应该是和上面的是相反或对比的。如果设置了这个值,当用户从 `defaultAppearance` 模式切换时,将会显示这个 logo。 |
| `params.description` | 无 | 网站表述。此参数将会被用作站点元数据。 |
| `params.copyright` | 无 | 此参数是一个 Markdown用于网站页脚的版权声明。此参数可以包含占位符 { year } ,以此动态插入当前年份。 如果没有提供Blowfish 将会使用网站 `title` 自动生成版权信息。 |
<!-- prettier-ignore-end -->
#### 作者
| 名称 | 默认值 | 描述 |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `author.name` | 无 | 作者名。此参数将展示在文章页脚。并且如果主页使用了个人资料布局,也会展示此值。 |
| `author.image` | 无 | 作者头像的文件路径。图像应该是 1:1 的宽高比。可以放在网站的 `assets/` 文件夹中,也可以是外部 URL。 |
| `author.headline` | 无 | 包含作者头衔的 Markdown。它将展示在主页中作者姓名打分下方。 |
| `author.bio` | 无 | 包含作者简介的 Markdown。它将展示在文章页脚。 |
| `author.links` | 无 | 与作者详细信息一起显示的链接。配置文件中包含示例链接,取消注释即可启用。链接展示的顺序由他们在数组中定义的顺序决定。如果你想自定义链接,可以在 `assets/icons/` 中提供相应的SVG图片。 |
<!-- prettier-ignore-end -->
### 菜单
Blowfish 还支持针对特定语言的菜单配置。菜单配置文件的命名规则和语言配置文件的格式类似。只需要在文件名中提供语言代码Hugo 就可以知道这是针对哪种语言的菜单。
菜单配置文件的命名格式是 `menus.[language-code].toml`。请始终确保菜单配置项中使用的语言代码和语言配置相匹配。
[入门指南]({{< ref "getting-started#menus" >}})部分更详细地介绍了这个文件的结构。你还可以参考 [Hugo 菜单文档](https://gohugo.io/content-management/menus/),以获取更多配置示例。
## 主题参数
Blowfish 提供了大量控制主题功能的配置参数,下面的表格中列举了 `config/_default/params.toml` 文件中所有的可用参数。
下面列举的文章参数是全局默认值,都可以在每个文章中的前置元数据内容中进行覆盖。详细可以参考 [扉页参数]({{< ref "front-matter" >}})。
<!-- prettier-ignore-start -->
### 全局
| 名称 | 默认值 | 描述 |
| ------------------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `colorScheme` | `"blowfish"` | 主题使用的颜色方案。合法的值有: `blowfish` (默认)、`avocado`、`fire`、`ocean`、`forest`、`princess`、`neon`、`bloody`、`terminal`、`marvel`、`noir`、`autumn`、`congo` 和 `slate`。 具体参考[颜色方案]({{< ref "getting-started#colour-schemes" >}})以获取更多信息。 |
| `defaultAppearance` | `"light"` | 默认的主题外观,可以是 `light` 或者 `dark`。 |
| `autoSwitchAppearance` | `true` | 主题外观是否根据访问者操作系统的偏好自动切换。设置为 `false` 会强制网站始终使用 `defaultAppearance`。 |
| `enableSearch` | `false` | 是否开启网站的搜索功能,设为 `true` 即为启用。注意,搜索功能依赖于[站点设置](#site-configuration)中的 `outputs.home` 设置,请确保此值配置正确。 |
| `enableCodeCopy` | `false` | 是否可以将`<code>`代码块复制到剪贴板。想要使用代码复制功能,需要将 `highlight.noClasses` 参数设置为 `false`。 阅读 [其他配置文件](#other-configuration-files) 以获取更多信息。 |
| `mainSections` | 无 | 指定最近文章中应该展示的模块。 如果没有指定,则使用文章数量最多的板块。 |
| `showViews` | 无 | 是否显示文章和列表页面的阅读量。这需要集成 firebase ,具体可以看下面。 |
| `showLikes` | 无 | 是否显示文章和列表页面的点赞量。这需要集成 firebase ,具体可以看下面。 |
| `robots` | 无 | 用于支持搜索引擎爬虫如何处理你的网站。如果设置了该值,它将被输出在页面头部。具体的参数值请参考 [Google 文档](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)。 |
| `disableImageZoom` | `false` | 禁用网站上所有图片缩放功能。 |
| `disableImageOptimization` | `false` | 禁用图片上所有图片的调整大小和优化功能。 |
| `disableTextInHeader` | `false` | 禁用文本类型的标题,对基于 logo 的标题很有用。 |
| `defaultBackgroundImage` | 无 | 设置默认背景图,用于 `background``hero` 布局下的主页。 |
| `defaultFeaturedImage` | 无 | 设置默认背景图片,用于所有文章的`featured`图片,可以通过文章目录中的 `featured` 图片替换。 |
| `highlightCurrentMenuArea` | 无 | 当菜单被选择时,标记主菜单中的菜单项。 |
| `smartTOC` | 无 | 开启智能目录,视图中的项目将会被高亮显示。 |
| `smartTOCHideUnfocusedChildren` | 无 | 当开启智能目录,如果目录级别不再被聚焦时,将会隐藏更深层次的目录。 |
### 页头
| 名称 | 默认值 | 描述 |
| --------------- | --------- | --------------------------------------------------------------------------------------------- |
| `header.layout` | `"basic"` | 定义整个站点的页头的布局,支持的参数有 `basic`、`fixed`、`fixed-fill`、and `fixed-fill-blur`. |
### 页脚
| 名称 | 默认值 | 描述 |
| ------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------- |
| `footer.showMenu` | `true` | 显示/隐藏页面底部菜单,该菜单可以在 `config/_default/menus.en.toml` 文件中的 `[[footer]]` 部分进行配置。 |
| `footer.showCopyright` | `true` | 是否在底部显示 copyright 版权信息。请注意,如果你想定制,可以在[语言配置](#language-and-i18n)中使用 `copyright` 参数。 |
| `footer.showThemeAttribution` | `true` | 是否在网站底部中显示"powered by" 的主题归属信息。如果禁用此参数,请考虑在你网站的其他位置设置主题归属信息,例如在关于页面。 |
| `footer.showAppearanceSwitcher` | `false` | 是否在也页面底部显示外观切换器。浏览器的本地存储会缓存访问者的偏好设置。 |
| `footer.showScrollToTop` | `true` | 当设置为 `true` 时,显示返回顶部的箭头按钮。 |
### 主页
| 名称 | 默认值 | 描述 |
| ------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `homepage.layout` | `"profile"` | 首页布局参数。合法的参数值有: `page`、`profile`、`hero`、`card`、`background` 或 `custom`。当你设置为 `custom` 时,你必须创建 `/layouts/partials/home/custom.html` 文件以定制自己的布局。参考[主页布局]({{< ref "homepage-layout" >}})来获取更多信息。 |
| `homepage.homepageImage` | 无 | 在 `hero``card` 布局中使用的图像。图片可以来自于本地的资源目录,也可以是外部图像 URL。参考 [主页布局]({{< ref "homepage-layout" >}}) 来获取更多信息。 |
| `homepage.showRecent` | `false` | 是否在主页展示最新文章列表。 |
| `homepage.showRecentItems` | 5 | 如果将 `showRecent` 设置为 `true`此参数用于显示多少篇文章。如果没有设置或者为0则默认显示5篇文章。 |
| `homepage.showMoreLink` | `false` | 是否在主页底部添加“显示更多”,该链接会降会用带到一个预定义位置。 |
| `homepage.showMoreLinkDest` | `/posts` | 更多按钮所指向的位置。 |
| `homepage.cardView` | `false` | 将列表展示为卡片容器。 |
| `homepage.cardViewScreenWidth` | `false` | 增强列表中卡片的宽度,使其可以占据可用的全部宽度。 |
| `homepage.layoutBackgroundBlur` | `false` | 向下滚动主页时,是否模糊背景图。 |
### 文章页
| 名称 | 默认值 | 描述 |
| ------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `article.showDate` | `true` | 是否显示日期。 |
| `article.showViews` | `false` | 是否显示文章阅读量。这需要集成 firebase ,具体可以看下面。 |
| `article.showLikes` | `false` | 是否显示文章点赞量。这需要集成 firebase ,具体可以看下面。 |
| `article.showDateOnlyInArticle` | `false` | 是否在文章内显示日期,不影响文章列表或卡片页面的日期显示。 |
| `article.showDateUpdated` | `false` | 是否展示文章的更新日期。 |
| `article.showAuthor` | `true` | 是否在文章底部显示作者框。 |
| `article.showAuthorBottom` | `false` | 作者框显示在每页的底部而不是顶部。 |
| `article.showHero` | `false` | 缩略图是否会在每个页面中作为 hero 图像显示。 |
| `article.heroStyle` | 无 | hero 图像的展示样式,可选的参数值有:`basic`、`big`、`background`、`thumbAndBackground`。 |
| `article.layoutBackgroundBlur` | `true` | 向下滚动文章页时,是否模糊背景图。 |
| `article.layoutBackgroundHeaderSpace` | `true` | 在标题和正文之间添加空白区域间隔。 |
| `article.showBreadcrumbs` | `false` | 是否在标题栏显示面包屑导航。 |
| `article.showDraftLabel` | `true` | 当使用 `--buildDrafts` 构建网站时,是否在文章旁边显示草稿。 |
| `article.showEdit` | `false` | 是否展示编辑文章的链接。 |
| `article.editURL` | 无 | 当激活 `article.showEdit` 参数,此参数用于设置文章的编辑链接。 |
| `article.editAppendPath` | `true` | 当激活 `article.showEdit` 参数,是否将文章的路径附加到 `article.editURL` 参数所设置的 URL 后面。 |
| `article.seriesOpened` | `false` | 是否默认显示打开系列模块、 |
| `article.showHeadingAnchors` | `true` | 是否在文章标题旁添加锚点。 |
| `article.showPagination` | `true` | 是否在文章末尾展示上一篇/下一篇的文章链接。 |
| `article.invertPagination` | `false` | 是否翻转下一篇/上一篇文章链接的方向。 |
| `article.showReadingTime` | `true` | 是否展示文章的阅读时间。如果你的语言包含 CJK 语言,需要在 `config.toml` 中开启 `hasCJKLanguage` 参数。 |
| `article.showTableOfContents` | `false` | 是否展示文章的目录。 |
| `article.showRelatedContent` | `false` | 为文章显示相关内容。如果你想要启用此功能,请检查 `config.toml` 文件并复制所有 *related* 相关的参数,如果你想自定义,也可以对 `config.toml` 添加额外配置。更多内容请参考 [Hugo 文档](https://gohugo.io/content-management/related/) 中关于 *related* 的内容。 |
| `article.relatedContentLimit` | `3` | 如果启用`showRelatedContent`,则限制显示相关文章的数量。 |
| `article.showTaxonomies` | `false` | 是否显示文章的分类或标签信息。 |
| `article.showAuthorsBadges` | `false` | 是否在文章或列表中显示 `authors` 分类。这需要开启多个作者 `multiple authors``authors` 分类法。 请阅读 [这个网页]({{< ref "multi-author" >}}) 来获取更多内容。 |
| `article.showWordCount` | `false` | 是否显示文章的字数。 如果你的语言属于 CJK 语言,需要在 `config.toml` 中开启 `hasCJKLanguage` 参数。 |
| `article.showComments` | `false` | 是否在文章末尾添加 [评论部分]({{< ref "partials#comments" >}})。 |
| `article.sharingLinks` | 无 | 在文章末尾显示的分享链接。如果没有提供或设置为 `false`,则不会显示任何分享链接。可用的值包括:"linkedin"、"twitter"、"reddit"、"pinterest"、"facebook"、"email"、"whatsapp" 和 "telegram" |
| `article.showZenMode` | `false` | 指定是否激活文章阅读的禅模式,即隐藏常规的界面元素。 |
### 列表页
| 名称 | 默认值 | 描述 |
| ---------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `list.showHero` | `false` | 缩略图是否会在每个页面中作为 hero 图像显示。 |
| `list.heroStyle` | 无 | hero 图像的展示样式,可选的参数值有:`basic`、`big`、`background`、`thumbAndBackground`。 |
| `list.showBreadcrumbs` | `false` | 是否在标题栏显示面包屑导航。 |
| `list.layoutBackgroundBlur` | `true` | 向下滚动列表页时,是否模糊背景图。 |
| `list.layoutBackgroundHeaderSpace` | `true` | 在标题和正文之间添加空白区域间隔。 |
| `list.showTableOfContents` | `false` | 是否展示目录。 |
| `list.showSummary` | `false` | 是否在列表页显示文章摘要。如果在[扉页参数]({{< ref "front-matter" >}})中没有提供摘要,那么将会使用[站点配置](#site-configuration) 中的 `summaryLength` 参数自动生成一个。 |
| `list.showViews` | `false` | 是否显示文章阅读量。这需要集成 firebase ,具体可以看下面。 |
| `list.showLikes` | `false` | 是否显示文章点赞量。这需要集成 firebase ,具体可以看下面。 |
| `list.showCards` | `false` | 是否将每个文章显示未卡片或简单的内联文本。 |
| `list.groupByYear` | `true` | 是否根据年做聚合。 |
| `list.cardView` | `false` | 将列表展示为卡片容器。 |
| `list.cardViewScreenWidth` | `false` | 增强列表中卡片的宽度,使其可以占据可用的全部宽度。 |
| `list.constrainItemsWidth` | `false` | 将项目宽度限制为 `prose` 以提高可读性。在没有 featurn 图片的时候非常有用。 |
| `list.showTableOfContents` | `false` | 是否显示目录。 |
### Sitemap
| 名称 | 默认值 | 描述 |
| ----------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `sitemap.excludedKinds` | `["taxonomy", "term"]` | 从生成的 `/sitemap.xml` 文件中排除的内容。 具体的配置请参考[Hugo 文档](https://gohugo.io/templates/section-templates/#page-kinds)。 |
### 分类法
| 名称 | 默认值 | 描述 |
| ------------------------------ | ------- | ----------------------------------------------------------------------------------------- |
| `taxonomy.showTermCount` | `true` | 是否在分类列表总显示对应的数量。 |
| `taxonomy.showHero` | `false` | 缩略图是否会在每个页面中作为 hero 图像显示。 |
| `taxonomy.heroStyle` | 无 | hero 图像的展示样式,可选的参数值有:`basic`、`big`、`background`、`thumbAndBackground`。 |
| `taxonomy.showBreadcrumbs` | `false` | 是否在标题栏显示面包屑导航。 |
| `taxonomy.showViews` | `false` | 是否显示文章阅读量。这需要集成 firebase ,具体可以看下面。 |
| `taxonomy.showLikes` | `false` | 是否显示文章点赞量。这需要集成 firebase ,具体可以看下面。 |
| `taxonomy.showTableOfContents` | `false` | 是否显示目录。 |
| `taxonomy.cardView` | `false` | 将列表展示为卡片容器。 |
### 术语
| 名称 | 默认值 | 描述 |
| -------------------------- | ------- | ------------------------------------------------------------------------------------------ |
| `term.showHero` | `false` | 缩略图是否会在每个页面中作为 hero 图像显示。 |
| `term.heroStyle` | 无 | hero 图像的展示样式,可选的参数值有: `basic`、`big`、`background`、`thumbAndBackground`。 |
| `term.showBreadcrumbs` | `false` | 是否在标题栏显示面包屑导航。 |
| `term.showViews` | `false` | 是否显示文章阅读量。这需要集成 firebase ,具体可以看下面。 |
| `term.showLikes` | `false` | 是否显示文章点赞量。这需要集成 firebase ,具体可以看下面。 |
| `term.showTableOfContents` | `false` | 是否显示目录。 |
| `term.groupByYear` | `false` | 是否根据年做聚合。 |
| `term.cardView` | `false` | 将列表展示为卡片容器。 |
| `term.cardViewScreenWidth` | `false` | 增强列表中卡片的宽度,使其可以占据可用的全部宽度。 |
### Firebase
| 名称 | 默认值 | 描述 |
| ---------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `firebase.apiKey` | 无 | Firebase apiKey 与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.authDomain` | 无 | Firebase authDomain与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.projectId` | 无 | Firebase projectId与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.storageBucket` | 无 | Firebase storageBucket与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.messagingSenderId` | 无 | Firebase messagingSenderId与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.appId` | 无 | Firebase appId与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
| `firebase.measurementId` | 无 | Firebase measurementId与 Firebase 集成的必填参数。了解如何将 Firebase 集成进 Blowfish 请参考 [这个页面]({{< ref "firebase-views" >}})。 |
### Fathom Analytics
| 名称 | 默认值 | 描述 |
| ------------------------ | ------ | ------------------------------------------------------------------------------------------- |
| `fathomAnalytics.site` | 无 | 支持 Fathom 站点分析平台。更多详细内容请参考 [分析文档]({{< ref "partials#analytics" >}})。 |
| `fathomAnalytics.domain` | 无 | 如果使用自定义域名的 Fathom Analytics请在此提供以便从自定义域名获取 `script.js`。 |
### Umami Analytics
| Name | Default | Description |
| -------------------------- | --------- | ------------------------------------------------------------------------------------------ |
| `umamiAnalytics.websiteid` | _Not set_ | 支持 Umami 站点分析平台。更多详细内容请参考 [分析文档]({{< ref "partials#analytics" >}})。 |
| `umamiAnalytics.domain` | _Not set_ | 如果使用自定义域名的 Umami Analytics请在此提供以便从自定义域名获取 `script.js`。 |
### BuyMeACoffee
| 名称 | 默认值 | 描述 |
| ----------------------------------- | ------ | ---------------------------------- |
| `buymeacoffee.identifier` | 无 | buymeacoffee 账号的用户名。 |
| `buymeacoffee.globalWidget` | 无 | 激活位于全局的 buymeacoffee 组件。 |
| `buymeacoffee.globalWidgetMessage` | 无 | 新用户首次访问网站时显示的消息。 |
| `buymeacoffee.globalWidgetColor` | 无 | 组件颜色,使用 HEX 格式。 |
| `buymeacoffee.globalWidgetPosition` | 无 | 组件位置,例如 "Left" 或 "Right"。 |
### 验证
| 名称 | 默认值 | 描述 |
| ------------------------ | ------ | -------------------------------------------------------- |
| `verification.google` | 无 | Google 提供的网站验证字符串,用于在网站元数据中包含。 |
| `verification.bing` | 无 | Bing 提供的网站验证字符串,用于在网站元数据中包含。 |
| `verification.pinterest` | 无 | Pinterest 提供的网站验证字符串,用于在网站元数据中包含。 |
| `verification.yandex` | 无 | Yandex 提供的网站验证字符串,用于在网站元数据中包含。 |
<!-- prettier-ignore-end -->
## 别的配置文件
Blowfish 主题还包括 `markup.toml` 配置文件。这个文件包含了一些重要参数,来确保 Hugo 正确配置以生成使用 Blowfish 创建的网站。
需要确保次文件在 `config` 目录中,并设置所需要的值。否则某些功能可能无法正确启用,并可能导致意外行为。

View file

@ -1,257 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative" width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.2950529742247572" x="0" y="0" width="711.6800000000001" height="711.6800000000001" patternUnits="userSpaceOnUse">
<g transform="scale(2.7800000000000002)"><circle cx="180.39755796770348" cy="144.2104368598822" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;17.85434406280291" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-44.622752456562516s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-44.622752456562516s"></animate>
</circle><circle cx="16.825168708189995" cy="32.834595161139454" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.39487920677064" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
</circle><circle cx="272.82516870819" cy="32.834595161139454" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.39487920677064" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
</circle><circle cx="16.825168708189995" cy="288.8345951611395" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.39487920677064" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
</circle><circle cx="272.82516870819" cy="288.8345951611395" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.39487920677064" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.52246651250024s"></animate>
</circle><circle cx="133.7281341523537" cy="37.557212373233874" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;24.44944303845901" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-33.76558939460953s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-33.76558939460953s"></animate>
</circle><circle cx="9.311746119524932" cy="139.87259197506899" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;42.09217911991696" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.268240533907207s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.268240533907207s"></animate>
</circle><circle cx="265.3117461195249" cy="139.87259197506899" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;42.09217911991696" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.268240533907207s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.268240533907207s"></animate>
</circle><circle cx="228.8288862878399" cy="50.59785782429598" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;19.868262625397918" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-23.68489264848651s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-23.68489264848651s"></animate>
</circle><circle cx="77.20196271561525" cy="31.611804700405518" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;45.28258812229561" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.661787725688292s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.661787725688292s"></animate>
</circle><circle cx="77.20196271561525" cy="287.6118047004055" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;45.28258812229561" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.661787725688292s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.661787725688292s"></animate>
</circle><circle cx="153.86297348533364" cy="53.13721410068965" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;56.59657006893606" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-26.846959941207736s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-26.846959941207736s"></animate>
</circle><circle cx="153.86297348533364" cy="309.1372141006897" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;56.59657006893606" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-26.846959941207736s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-26.846959941207736s"></animate>
</circle><circle cx="238.25141956589107" cy="242.3948925366868" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;7.110432319564012" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.8377648779141s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.8377648779141s"></animate>
</circle><circle cx="171.29587360943597" cy="93.62941553592991" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;64.80517552507085" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-41.081630071778505s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-41.081630071778505s"></animate>
</circle><circle cx="33.7803997203791" cy="200.65918731382288" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;23.874060138252702" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.74940953893833s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.74940953893833s"></animate>
</circle><circle cx="171.68455092137125" cy="208.29640936292603" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;10.804694032911527" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-46.827942545330814s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-46.827942545330814s"></animate>
</circle><circle cx="79.4759072969399" cy="14.760241106300118" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;63.07191175406126" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-38.31065839827809s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-38.31065839827809s"></animate>
</circle><circle cx="79.4759072969399" cy="270.7602411063001" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;63.07191175406126" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-38.31065839827809s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-38.31065839827809s"></animate>
</circle><circle cx="34.30718832814177" cy="60.207260607353895" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;36.85782580252244" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-33.9202714458405s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-33.9202714458405s"></animate>
</circle><circle cx="290.30718832814176" cy="60.207260607353895" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;36.85782580252244" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-33.9202714458405s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-33.9202714458405s"></animate>
</circle><circle cx="141.57461629003254" cy="187.07605677907222" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;51.82556427519147" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-39.3497070269789s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-39.3497070269789s"></animate>
</circle><circle cx="89.86556463252813" cy="191.98681310799674" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;42.52162149867297" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.730611990382005s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.730611990382005s"></animate>
</circle><circle cx="135.68751640285163" cy="79.13898775934953" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;13.167119065627332" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-5.604152896601732s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-5.604152896601732s"></animate>
</circle><circle cx="222.37419164851048" cy="172.5138843825768" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;30.712438068878654" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-11.730564332626214s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-11.730564332626214s"></animate>
</circle><circle cx="65.37962957434202" cy="71.08214856672792" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;51.390991126295845" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.53817444257383s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.53817444257383s"></animate>
</circle><circle cx="146.90696443169887" cy="160.58661584710634" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;30.874027084269912" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-48.61529961868726s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-48.61529961868726s"></animate>
</circle><circle cx="20.6640150520578" cy="116.652000839832" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;20.32462575632799" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-16.94818532763218s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-16.94818532763218s"></animate>
</circle><circle cx="14.794147949099273" cy="178.87974595952937" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;62.66357119046049" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.398483724039195s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.398483724039195s"></animate>
</circle><circle cx="270.7941479490993" cy="178.87974595952937" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;62.66357119046049" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.398483724039195s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-22.398483724039195s"></animate>
</circle><circle cx="31.287373376921607" cy="70.1833739363135" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;15.295461964288506" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-13.161686681828998s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-13.161686681828998s"></animate>
</circle><circle cx="178.84317419706238" cy="167.34091291757605" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;62.162205555011425" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-23.327170625044392s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-23.327170625044392s"></animate>
</circle><circle cx="154.05316621664582" cy="55.033341833431564" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;39.67588542484934" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-15.452897657374963s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-15.452897657374963s"></animate>
</circle><circle cx="72.19223514179198" cy="135.19246311905093" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;20.804220090813203" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-45.51768235650617s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-45.51768235650617s"></animate>
</circle><circle cx="150.9364802116815" cy="160.51205929354626" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;36.57407641397833" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.280565367328037s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-28.280565367328037s"></animate>
</circle><circle cx="200.40953970115999" cy="54.21097279269783" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;18.303774190487488" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.214535605827784s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-16.214535605827784s"></animate>
</circle><circle cx="180.31885618742604" cy="242.78087924898603" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;11.71365962730546" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-33.612535536027956s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-33.612535536027956s"></animate>
</circle><circle cx="203.8062010106876" cy="232.68973192108191" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;5.455675580739268" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-11.86697370110249s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-11.86697370110249s"></animate>
</circle><circle cx="171.6066941076269" cy="48.04474014530398" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;38.59286259496349" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-29.250466319872224s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-29.250466319872224s"></animate>
</circle><circle cx="125.11525876384411" cy="149.77467373569812" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;46.62256816012656" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-10.699532836506153s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-10.699532836506153s"></animate>
</circle><circle cx="89.16772547042389" cy="100.43557995027065" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.90728701564909" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-20.057887262682318s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-20.057887262682318s"></animate>
</circle><circle cx="163.0802387343303" cy="125.70388388233474" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;60.89399699890593" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-29.04746538184899s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-29.04746538184899s"></animate>
</circle><circle cx="147.29969577601045" cy="40.152117547871356" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.17094951058618" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-8.699383046276775s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-8.699383046276775s"></animate>
</circle><circle cx="147.29969577601045" cy="296.15211754787134" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.17094951058618" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-8.699383046276775s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-8.699383046276775s"></animate>
</circle><circle cx="50.39439200506233" cy="147.3941729324677" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;50.69970142939741" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.544702694456348s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.544702694456348s"></animate>
</circle><circle cx="306.39439200506234" cy="147.3941729324677" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;50.69970142939741" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.544702694456348s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.544702694456348s"></animate>
</circle><circle cx="188.7139101584322" cy="210.7115210762685" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;29.504019948829963" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-32.532647237390165s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-32.532647237390165s"></animate>
</circle><circle cx="114.22207446357659" cy="124.76935492926279" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;11.986008541965333" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.917226446523447s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.917226446523447s"></animate>
</circle><circle cx="194.31954289149434" cy="166.65089356408262" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;20.194181381536055" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-30.020995894146097s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-30.020995894146097s"></animate>
</circle><circle cx="184.86541783077774" cy="44.886087590301756" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;56.99589341531981" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-36.60809296354671s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-36.60809296354671s"></animate>
</circle><circle cx="184.86541783077774" cy="300.88608759030177" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;56.99589341531981" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-36.60809296354671s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-36.60809296354671s"></animate>
</circle><circle cx="128.6294815429427" cy="20.412863761372066" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;58.14291539416182" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.6283523615141s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.6283523615141s"></animate>
</circle><circle cx="128.6294815429427" cy="276.4128637613721" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;58.14291539416182" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.6283523615141s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-38.6283523615141s"></animate>
</circle><circle cx="94.65360523910455" cy="237.65373752048882" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;10.872426017373087" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.286612875431295s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-17.286612875431295s"></animate>
</circle><circle cx="186.84577473379255" cy="4.291441103039755" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.03848537207753" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-30.97916037182813s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-30.97916037182813s"></animate>
</circle><circle cx="186.84577473379255" cy="260.29144110303974" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;50.03848537207753" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-30.97916037182813s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-30.97916037182813s"></animate>
</circle><circle cx="3.1171684515748126" cy="10.536170179400985" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;31.72037969636405" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
</circle><circle cx="259.1171684515748" cy="10.536170179400985" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;31.72037969636405" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
</circle><circle cx="3.1171684515748126" cy="266.536170179401" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;31.72037969636405" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
</circle><circle cx="259.1171684515748" cy="266.536170179401" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;31.72037969636405" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-29.18270767825585s"></animate>
</circle><circle cx="188.74527992387326" cy="21.78088381944502" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;24.62604013195285" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-15.60412108402891s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-15.60412108402891s"></animate>
</circle><circle cx="188.74527992387326" cy="277.780883819445" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;24.62604013195285" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-15.60412108402891s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-15.60412108402891s"></animate>
</circle><circle cx="25.856888539646313" cy="42.26884688505775" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.95560071224433" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
</circle><circle cx="281.8568885396463" cy="42.26884688505775" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.95560071224433" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
</circle><circle cx="25.856888539646313" cy="298.26884688505777" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.95560071224433" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
</circle><circle cx="281.8568885396463" cy="298.26884688505777" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.95560071224433" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-16.780876976602578s"></animate>
</circle><circle cx="80.07378641634132" cy="99.95189316646443" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;31.25308753538168" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-44.38933261009856s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-44.38933261009856s"></animate>
</circle><circle cx="115.28452115370486" cy="183.50469529806404" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;43.47190520350591" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.01262905715093s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-35.01262905715093s"></animate>
</circle><circle cx="178.06444021126137" cy="196.65069638203684" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;55.28300103432255" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-31.907669721653242s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-31.907669721653242s"></animate>
</circle><circle cx="44.16845143857357" cy="102.58764890706274" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;56.592641937222965" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-21.452416790316818s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-21.452416790316818s"></animate>
</circle><circle cx="300.1684514385736" cy="102.58764890706274" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;56.592641937222965" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-21.452416790316818s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-21.452416790316818s"></animate>
</circle><circle cx="79.90917564776078" cy="58.24933597303385" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;17.76697933939279" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-6.018058267098058s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-6.018058267098058s"></animate>
</circle><circle cx="99.51047224071066" cy="68.21685313096823" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;32.538025421938485" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-24.711449309412114s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-24.711449309412114s"></animate>
</circle><circle cx="170.23837150372032" cy="80.50555967618685" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;49.47798543600463" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-27.302250080429058s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-27.302250080429058s"></animate>
</circle><circle cx="146.82045516936643" cy="81.4540879579799" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;17.51784178229697" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-14.316475870551947s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-14.316475870551947s"></animate>
</circle><circle cx="85.89692843138472" cy="166.66227056758296" r="0" fill="none" stroke="#5e6fa3" stroke-width="8">
<animate attributeName="r" values="0;43.09830041436764" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-25.33233432848061s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-25.33233432848061s"></animate>
</circle><circle cx="177.2226960369944" cy="175.07899171519415" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;43.73555785023012" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-25.121497689569683s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-25.121497689569683s"></animate>
</circle><circle cx="216.86808064093213" cy="27.577527215605766" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;4.737877261879547" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-15.904900634836528s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-15.904900634836528s"></animate>
</circle><circle cx="110.04710192749121" cy="180.18493319620214" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;44.77556931875715" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-1.5780314591062772s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="25s" begin="-1.5780314591062772s"></animate>
</circle><circle cx="64.71846547185336" cy="75.44443893159085" r="0" fill="none" stroke="#93dbe9" stroke-width="8">
<animate attributeName="r" values="0;9.889551183237941" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-36.2183301855013s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-36.2183301855013s"></animate>
</circle><circle cx="40.659167565439354" cy="80.92354614012416" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.03611543920749" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-40.52530054760075s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-40.52530054760075s"></animate>
</circle><circle cx="296.65916756543936" cy="80.92354614012416" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;47.03611543920749" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-40.52530054760075s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="16.666666666666668s" begin="-40.52530054760075s"></animate>
</circle><circle cx="158.9398261520183" cy="96.5683673937937" r="0" fill="none" stroke="#689cc5" stroke-width="8">
<animate attributeName="r" values="0;9.89977495248037" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-2.5412705195820062s"></animate>
<animate attributeName="opacity" values="1;0" keyTimes="0;1" calcMode="spline" repeatCount="indefinite" keySplines="0 0.5 0.5 1" dur="12.5s" begin="-2.5412705195820062s"></animate>
</circle></g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.2950529742247572)"></rect>
</svg>

Before

Width:  |  Height:  |  Size: 42 KiB

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 218 KiB

View file

@ -1,318 +0,0 @@
---
title: "Content Examples"
date: 2020-08-09
draft: false
description: "All the partials available in Blowfish."
slug: "content-examples"
tags: ["content", "example"]
series: ["Documentation"]
series_order: 12
---
If you've been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.
{{< alert >}}
**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources.
{{< /alert >}}
The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.
## Branch pages
Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**.
Blowfish will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title.
### Homepage
| | |
| ------------ | -------------------- |
| **Layout:** | `layouts/index.html` |
| **Content:** | `content/_index.md` |
The homepage in Blowfish is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section.
If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage.
**Example:**
```yaml
---
title: "Welcome to Blowfish!"
description: "This is a demo of adding content to the homepage."
---
Welcome to my website! I'm really happy you stopped by.
```
_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._
### List pages
| | |
| ------------ | ---------------------------- |
| **Layout:** | `layouts/_default/list.html` |
| **Content:** | `content/../_index.md` |
List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.
Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects.
A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory.
```shell
.
└── content
└── projects
├── _index.md # /projects
├── first-project.md # /projects/first-project
└── another-project
├── index.md # /projects/another-project
└── project.jpg
```
Hugo will generate URLs for the pages in your projects folder accordingly.
Just like the homepage, content in the `_index.md` file will be output into the generated list index. Blowfish will then list any pages in this section below the content.
**Example:**
```yaml
---
title: "Projects"
description: "Learn about some of my projects."
cascade:
showReadingTime: false
---
This section contains all my current projects.
```
_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._
The [samples section]({{< ref "samples" >}}) of this site is an example of a list page.
### Taxonomy pages
| | |
| ---------------- | -------------------------------- |
| **List layout:** | `layouts/_default/taxonomy.html` |
| **Term layout:** | `layouts/_default/term.html` |
| **Content:** | `content/../_index.md` |
Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.
The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`.
Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name.
```toml
# config/_default/taxonomies.toml
animal = "animals"
```
Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy.
Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter:
```yaml
---
title: "Into the Lion's Den"
description: "This week we're learning about lions."
animals: ["lion", "cat"]
---
```
This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`.
Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`.
The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages.
The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way.
In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name.
```shell
.
└── content
└── animals
├── _index.md # /animals
└── lion
└── _index.md # /animals/lion
```
Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion".
To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site.
## Leaf pages
| | |
| ------------------------- | ------------------------------- |
| **Layout:** | `layouts/_default/single.html` |
| **Content (standalone):** | `content/../page-name.md` |
| **Content (bundled):** | `content/../page-name/index.md` |
Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.
The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.
```shell
.
└── content
└── blog
├── first-post.md # /blog/first-post
├── second-post.md # /blog/second-post
└── third-post
├── index.md # /blog/third-post
└── image.jpg
```
When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.
**Example:**
```yaml
---
title: "My First Blog Post"
date: 2022-01-25
description: "Welcome to my blog!"
summary: "Learn more about me and why I am starting this blog."
tags: ["welcome", "new", "about", "first"]
---
_This_ is the content of my blog post.
```
Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed.
### External links
Blowfish has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site.
In order to create an external link article, some special front matter needs to be set:
```yaml
---
title: "My Medium post"
date: 2022-01-25
externalUrl: "https://medium.com/"
summary: "I wrote a post on Medium."
showReadingTime: false
_build:
render: "false"
list: "local"
---
```
Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Blowfish that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.
Additionally, we use a special Hugo front matter parameter `_build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL!
The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content.
```shell
hugo new -k external posts/my-post.md
```
### Simple pages
| | |
| ----------------- | ------------------------------ |
| **Layout:** | `layouts/_default/simple.html` |
| **Front Matter:** | `layout: "simple"` |
Blowfish also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.
The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page [front matter]({{< ref "front-matter" >}}) variables.
To enable the simple layout on a particular page, add the `layout` front matter variable with a value of `"simple"`:
```yaml
---
title: "My landing page"
date: 2022-03-08
layout: "simple"
---
This page content is now full-width.
```
## Custom layouts
One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.
Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/).
### Overriding default layouts
Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.
For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised.
### Custom section layouts
It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.
Let's step through an example that creates a custom "Projects" page that lists projects using a special layout.
In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file.
```shell
.
└── content
│ └── projects
│ ├── _index.md
│ ├── first-project.md
│ └── second-project.md
└── layouts
└── projects
└── list.html
```
This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files.
```yaml
---
title: "Blowfish"
date: 2021-08-11
icon: "github"
description: "A theme for Hugo built with Tailwind CSS."
topics: ["Hugo", "Web", "Tailwind"]
externalUrl: "https://github.com/nunocoracao/blowfish/"
---
```
_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_
With the projects defined, now we can create a list template that outputs the details of each project.
```go
{{ define "main" }}
<section class="mt-8">
{{ range .Pages }}
<article class="pb-6">
<a class="flex" href="{{ .Params.externalUrl }}">
<div class="mr-3 text-3xl text-neutral-300">
<span class="relative inline-block align-text-bottom">
{{ partial "icon.html" .Params.icon }}
</span>
</div>
<div>
<h3 class="flex text-xl font-semibold">
{{ .Title }}
</h3>
<p class="text-sm text-neutral-400">
{{ .Description }}
</p>
</div>
</a>
</article>
{{ end }}
</section>
{{ end }}
```
Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.
Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section.
When making custom templates like this one, it's always easiest to take a look at how the default Blowfish template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too.

View file

@ -1,318 +0,0 @@
---
title: "Content Examples"
date: 2020-08-09
draft: false
description: "All the partials available in Blowfish."
slug: "content-examples"
tags: ["content", "example"]
series: ["Documentation"]
series_order: 12
---
If you've been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.
{{< alert >}}
**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources.
{{< /alert >}}
The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.
## Branch pages
Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**.
Blowfish will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title.
### Homepage
| | |
| ------------ | -------------------- |
| **Layout:** | `layouts/index.html` |
| **Content:** | `content/_index.md` |
The homepage in Blowfish is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section.
If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage.
**Example:**
```yaml
---
title: "Welcome to Blowfish!"
description: "This is a demo of adding content to the homepage."
---
Welcome to my website! I'm really happy you stopped by.
```
_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._
### List pages
| | |
| ------------ | ---------------------------- |
| **Layout:** | `layouts/_default/list.html` |
| **Content:** | `content/../_index.md` |
List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.
Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects.
A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory.
```shell
.
└── content
└── projects
├── _index.md # /projects
├── first-project.md # /projects/first-project
└── another-project
├── index.md # /projects/another-project
└── project.jpg
```
Hugo will generate URLs for the pages in your projects folder accordingly.
Just like the homepage, content in the `_index.md` file will be output into the generated list index. Blowfish will then list any pages in this section below the content.
**Example:**
```yaml
---
title: "Projects"
description: "Learn about some of my projects."
cascade:
showReadingTime: false
---
This section contains all my current projects.
```
_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._
The [samples section]({{< ref "samples" >}}) of this site is an example of a list page.
### Taxonomy pages
| | |
| ---------------- | -------------------------------- |
| **List layout:** | `layouts/_default/taxonomy.html` |
| **Term layout:** | `layouts/_default/term.html` |
| **Content:** | `content/../_index.md` |
Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.
The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`.
Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name.
```toml
# config/_default/taxonomies.toml
animal = "animals"
```
Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy.
Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter:
```yaml
---
title: "Into the Lion's Den"
description: "This week we're learning about lions."
animals: ["lion", "cat"]
---
```
This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`.
Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`.
The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages.
The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way.
In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name.
```shell
.
└── content
└── animals
├── _index.md # /animals
└── lion
└── _index.md # /animals/lion
```
Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion".
To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site.
## Leaf pages
| | |
| ------------------------- | ------------------------------- |
| **Layout:** | `layouts/_default/single.html` |
| **Content (standalone):** | `content/../page-name.md` |
| **Content (bundled):** | `content/../page-name/index.md` |
Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.
The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.
```shell
.
└── content
└── blog
├── first-post.md # /blog/first-post
├── second-post.md # /blog/second-post
└── third-post
├── index.md # /blog/third-post
└── image.jpg
```
When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.
**Example:**
```yaml
---
title: "My First Blog Post"
date: 2022-01-25
description: "Welcome to my blog!"
summary: "Learn more about me and why I am starting this blog."
tags: ["welcome", "new", "about", "first"]
---
_This_ is the content of my blog post.
```
Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed.
### External links
Blowfish has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site.
In order to create an external link article, some special front matter needs to be set:
```yaml
---
title: "My Medium post"
date: 2022-01-25
externalUrl: "https://medium.com/"
summary: "I wrote a post on Medium."
showReadingTime: false
_build:
render: "false"
list: "local"
---
```
Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Blowfish that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.
Additionally, we use a special Hugo front matter parameter `_build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL!
The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content.
```shell
hugo new -k external posts/my-post.md
```
### Simple pages
| | |
| ----------------- | ------------------------------ |
| **Layout:** | `layouts/_default/simple.html` |
| **Front Matter:** | `layout: "simple"` |
Blowfish also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.
The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page [front matter]({{< ref "front-matter" >}}) variables.
To enable the simple layout on a particular page, add the `layout` front matter variable with a value of `"simple"`:
```yaml
---
title: "My landing page"
date: 2022-03-08
layout: "simple"
---
This page content is now full-width.
```
## Custom layouts
One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.
Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/).
### Overriding default layouts
Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.
For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised.
### Custom section layouts
It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.
Let's step through an example that creates a custom "Projects" page that lists projects using a special layout.
In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file.
```shell
.
└── content
│ └── projects
│ ├── _index.md
│ ├── first-project.md
│ └── second-project.md
└── layouts
└── projects
└── list.html
```
This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files.
```yaml
---
title: "Blowfish"
date: 2021-08-11
icon: "github"
description: "A theme for Hugo built with Tailwind CSS."
topics: ["Hugo", "Web", "Tailwind"]
externalUrl: "https://github.com/nunocoracao/blowfish/"
---
```
_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_
With the projects defined, now we can create a list template that outputs the details of each project.
```go
{{ define "main" }}
<section class="mt-8">
{{ range .Pages }}
<article class="pb-6">
<a class="flex" href="{{ .Params.externalUrl }}">
<div class="mr-3 text-3xl text-neutral-300">
<span class="relative inline-block align-text-bottom">
{{ partial "icon.html" .Params.icon }}
</span>
</div>
<div>
<h3 class="flex text-xl font-semibold">
{{ .Title }}
</h3>
<p class="text-sm text-neutral-400">
{{ .Description }}
</p>
</div>
</a>
</article>
{{ end }}
</section>
{{ end }}
```
Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.
Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section.
When making custom templates like this one, it's always easiest to take a look at how the default Blowfish template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too.

View file

@ -1,318 +0,0 @@
---
title: "Content Examples"
date: 2020-08-09
draft: false
description: "All the partials available in Blowfish."
slug: "content-examples"
tags: ["content", "example"]
series: ["Documentation"]
series_order: 12
---
If you've been reading the documentation in order, you should now know about all the features and configurations available in Blowfish. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.
{{< alert >}}
**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources.
{{< /alert >}}
The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.
## Branch pages
Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**.
Blowfish will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title.
### Homepage
| | |
| ------------ | -------------------- |
| **Layout:** | `layouts/index.html` |
| **Content:** | `content/_index.md` |
The homepage in Blowfish is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section.
If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage.
**Example:**
```yaml
---
title: "Welcome to Blowfish!"
description: "This is a demo of adding content to the homepage."
---
Welcome to my website! I'm really happy you stopped by.
```
_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._
### List pages
| | |
| ------------ | ---------------------------- |
| **Layout:** | `layouts/_default/list.html` |
| **Content:** | `content/../_index.md` |
List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.
Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects.
A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory.
```shell
.
└── content
└── projects
├── _index.md # /projects
├── first-project.md # /projects/first-project
└── another-project
├── index.md # /projects/another-project
└── project.jpg
```
Hugo will generate URLs for the pages in your projects folder accordingly.
Just like the homepage, content in the `_index.md` file will be output into the generated list index. Blowfish will then list any pages in this section below the content.
**Example:**
```yaml
---
title: "Projects"
description: "Learn about some of my projects."
cascade:
showReadingTime: false
---
This section contains all my current projects.
```
_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._
The [samples section]({{< ref "samples" >}}) of this site is an example of a list page.
### Taxonomy pages
| | |
| ---------------- | -------------------------------- |
| **List layout:** | `layouts/_default/taxonomy.html` |
| **Term layout:** | `layouts/_default/term.html` |
| **Content:** | `content/../_index.md` |
Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.
The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`.
Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name.
```toml
# config/_default/taxonomies.toml
animal = "animals"
```
Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy.
Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter:
```yaml
---
title: "Into the Lion's Den"
description: "This week we're learning about lions."
animals: ["lion", "cat"]
---
```
This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`.
Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`.
The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages.
The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way.
In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name.
```shell
.
└── content
└── animals
├── _index.md # /animals
└── lion
└── _index.md # /animals/lion
```
Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion".
To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site.
## Leaf pages
| | |
| ------------------------- | ------------------------------- |
| **Layout:** | `layouts/_default/single.html` |
| **Content (standalone):** | `content/../page-name.md` |
| **Content (bundled):** | `content/../page-name/index.md` |
Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.
The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.
```shell
.
└── content
└── blog
├── first-post.md # /blog/first-post
├── second-post.md # /blog/second-post
└── third-post
├── index.md # /blog/third-post
└── image.jpg
```
When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.
**Example:**
```yaml
---
title: "My First Blog Post"
date: 2022-01-25
description: "Welcome to my blog!"
summary: "Learn more about me and why I am starting this blog."
tags: ["welcome", "new", "about", "first"]
---
_This_ is the content of my blog post.
```
Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed.
### External links
Blowfish has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site.
In order to create an external link article, some special front matter needs to be set:
```yaml
---
title: "My Medium post"
date: 2022-01-25
externalUrl: "https://medium.com/"
summary: "I wrote a post on Medium."
showReadingTime: false
_build:
render: "false"
list: "local"
---
```
Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Blowfish that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.
Additionally, we use a special Hugo front matter parameter `_build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL!
The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content.
```shell
hugo new -k external posts/my-post.md
```
### Simple pages
| | |
| ----------------- | ------------------------------ |
| **Layout:** | `layouts/_default/simple.html` |
| **Front Matter:** | `layout: "simple"` |
Blowfish also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.
The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page [front matter]({{< ref "front-matter" >}}) variables.
To enable the simple layout on a particular page, add the `layout` front matter variable with a value of `"simple"`:
```yaml
---
title: "My landing page"
date: 2022-03-08
layout: "simple"
---
This page content is now full-width.
```
## Custom layouts
One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.
Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/).
### Overriding default layouts
Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.
For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised.
### Custom section layouts
It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.
Let's step through an example that creates a custom "Projects" page that lists projects using a special layout.
In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file.
```shell
.
└── content
│ └── projects
│ ├── _index.md
│ ├── first-project.md
│ └── second-project.md
└── layouts
└── projects
└── list.html
```
This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files.
```yaml
---
title: "Blowfish"
date: 2021-08-11
icon: "github"
description: "A theme for Hugo built with Tailwind CSS."
topics: ["Hugo", "Web", "Tailwind"]
externalUrl: "https://github.com/nunocoracao/blowfish/"
---
```
_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_
With the projects defined, now we can create a list template that outputs the details of each project.
```go
{{ define "main" }}
<section class="mt-8">
{{ range .Pages }}
<article class="pb-6">
<a class="flex" href="{{ .Params.externalUrl }}">
<div class="mr-3 text-3xl text-neutral-300">
<span class="relative inline-block align-text-bottom">
{{ partial "icon.html" .Params.icon }}
</span>
</div>
<div>
<h3 class="flex text-xl font-semibold">
{{ .Title }}
</h3>
<p class="text-sm text-neutral-400">
{{ .Description }}
</p>
</div>
</a>
</article>
{{ end }}
</section>
{{ end }}
```
Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.
Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section.
When making custom templates like this one, it's always easiest to take a look at how the default Blowfish template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too.

View file

@ -1,318 +0,0 @@
---
title: "内容示例"
date: 2020-08-09
draft: false
description: "包含 Blowfish 中所有可用部分的示例、"
slug: "content-examples"
tags: ["内容", "示例"]
series: ["部署教程"]
series_order: 12
---
如果你已经按顺序阅读了文档,那么你现在应该已经了解了 Blowfish 中所有的功能和配置信息。这个页面旨在把所有内容整合在一起,并提供一些你会在 Hugo 项目中使用的示例。
{{< alert >}}
**提示:** 如果你是Hugo的新用户请务必阅读[官方文档](https://gohugo.io/content-management/page-bundles/),了解更多关于页面捆绑和资源的概念。
{{< /alert >}}
这个页面上的示例都可以根据不同的场景进行调整,期待你在做自己项目的同时,提出一些对特定内容格式化的想法。
## 分支页面
Hugo 中的分支页面包括主页、部分列表页面和分类页面等内容,请记住,这些分支页面的文件名都是 **`_index.md`**。
Blowfish 支持在分支页面中设置[扉页参数]({{< ref "front-matter" >}}),在扉页中设置的参数将会覆盖在配置文件中设置的参数默认值。例如,在分支页面中的 `title` 参数将会覆盖页面标题的默认值。
### 主页
| | |
| ------------ | -------------------- |
| **Layout:** | `layouts/index.html` |
| **Content:** | `content/_index.md` |
Blowfish 中的主页比较特殊,它的整体设计是由主页的布局参数控制的。你可以在 [主页布局]({{< ref "homepage-layout" >}}) 来获取更多内容。
如果你想自定义主页的内容,你仅需创建一个 `content/_index.md` 文件。该文件中的任何内容都会包含在你的主页中。
**示例:**
```yaml
---
title: "欢迎来到 Blowfish "
description: "这是往主页中添加内容的例子。"
---
欢迎来到我的网站!我很高兴你的来访。
```
_这个例子设置了一个自定义标题并在页面正文中添加了一些额外的内容。当然任何的 Markdown 都是可接受的包括短代码、图片和连接。_
### 列表页
| | |
| ------------ | ---------------------------- |
| **Layout:** | `layouts/_default/list.html` |
| **Content:** | `content/../_index.md` |
列表页将所有页面聚合到一个目录下,并为访问者提供了一种浏览页面的方式。博客或者作品集是一个典型案例,因为这两种类型的网站会将帖子或项目整合到一个列表页中。
创建一个列表页就如同创建子目录一样简单。例如,要创建一个 "Projects" 列表页,你可以创建`content/projects/`。然后为你的项目创建一个 Markdown 文件。
Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects.
列表页面默认会自动生成,如果你想在列表添加一些页自定义内容,还需要在此目录创建一个 `_index.md` 文件。
```shell
.
└── content
└── projects
├── _index.md # /projects
├── first-project.md # /projects/first-project
└── another-project
├── index.md # /projects/another-project
└── project.jpg
```
Hugo 将会自动为目录中对应的项目页面生成 URL。
类似于主页,列表页面也可以通过 `_index.md` 文件来添加自定义的内容。Blowfish将会在自定义内容的下方展示这个列表所包含的所有子页面。
**示例:**
```yaml
---
title: "项目"
description: "了解我的一些项目。"
cascade:
showReadingTime: false
---
本节包含了我所有的当前项目。
```
_在上面的示例中这里的 `cascade` 参数被用来隐藏该列表页下任何子页面的阅读时间。这样做是的任何子页面都不会显示阅读时间这是一种为整个部分添加默认参数的好方法。_
[样本部分]({{< ref "samples" >}})提供了列表页面的例子。
### 分类页面
| | |
| ---------------- | -------------------------------- |
| **List layout:** | `layouts/_default/taxonomy.html` |
| **Term layout:** | `layouts/_default/term.html` |
| **Content:** | `content/../_index.md` |
分类页面有两种形式:分类列表和分类术语。列表页面显示给定分类中每个属于的列表,术语页面显示与给定术语相关的页面列表。
术语这个词可能会有些令人困惑,所以这里让我们举个例子,假设将 `animals` 分类。
首先,想要在 Hugo 中使用分类,需要先进行配置。通过创建 `config/_default/taxonomies.toml` 文件并定义分类名称来完成创建。
```toml
# config/_default/taxonomies.toml
animal = "animals"
```
Hugo 期望分类定义式 单数 = “复数” 的形式,所以这里添加单数 `animal` 等于复数 `animals` 来创建我们的分类示例。
现在 `animals` 分类就有了,需要在内容中添加它。下面是一个简单的在扉页参数中添加分类的例子:
```yaml
---
title: "进入狮子的巢穴"
description: "这周我们学习狮子。"
animals: ["lion", "cat"]
---
```
现在我们已经在 `animals` 分类中添加了 `lion``cat` 两个术语。
目前看起来还不太明显,但是 Hugo 将会为这个分类自动生成分类列表页和两个术语页。默认情况下可以在 `/animals/` 地址访问列表页,在 `/animals/lion/``/animals/cat/` 访问术语页。
这个列表页会列举出所有包含在这个分类中的术语。在上面的例子中,`/animals/` 页面会包含 "lion" 和 "cat" 的链接,以此将访问者导向至具体的术语页。
术语页将会列举出包含这个术语的所有页面。这些术语页面本质上和[列表页面](#list-pages)相同,并且以类似的方式运作。
如果你想在分类页面中添加自定义的内容,只需要对应文件夹的目录中创建 `_index.md` 文件即可。
```shell
.
└── content
└── animals
├── _index.md # /animals
└── lion
└── _index.md # /animals/lion
```
这些 `_index.md` 中的内容都会放置在生成的分类页面上。与其他页面一样,[扉页参数]({{< ref "front-matter" >}})中设置的变量也可以用来覆盖默认值。比如你可以有一个标签名是`lion`,但是可以将其覆盖成 "Lion"。
想要查看实际效果,可以看[标签分类列表]({{< ref "tags" >}})。
## 叶子页面
| | |
| ------------------------- | ------------------------------- |
| **Layout:** | `layouts/_default/single.html` |
| **Content (standalone):** | `content/../page-name.md` |
| **Content (bundled):** | `content/../page-name/index.md` |
Hugo 中的页面叶子页面是一个标准的内容页面,它不包含子页面的页面。可以作为关于页面,或者位于个人博客网站中的文章。
最重要的是,与分支页面不同,叶子页面应该被命名为 `index.md`,而不是带下划线的`_index.md`。叶子页面比较特殊,它可以是一个在列表页面中的一个有唯一名称的文件,也可以是在一个有唯一名称的页面捆绑包。
```shell
.
└── content
└── blog
├── first-post.md # /blog/first-post
├── second-post.md # /blog/second-post
└── third-post
├── index.md # /blog/third-post
└── image.jpg
```
当页面中包含类似图片的资源,应该使用页面捆绑包,即子目录的方式。页面捆绑包时一个包含 `index.md` 文件的子目录。将资源和页面内容打包在同一个目录中是必要的,因为许多短代码和其他主题逻辑假设资源和页面捆绑在一起,
**示例:**
```yaml
---
title: "我的第一篇博客文章"
date: 2022-01-25
description: "欢迎来到我的博客"
summary: "了解更多关于我和我创建博客的初衷。"
tags: ["welcome", "new", "about", "first"]
---
_这_ 是博客的内容。
```
叶子页面有很多的[扉页参数]({{< ref "front-matter" >}}),来帮你你自定义展示它。
### 外部链接
Blowfish 允许外部页面链接和文章列表一起显示在列表页。如果你在第三方网站如Medium有文章或者你想连接到研究论文而不想在 Hugo 中复制内容,这将非常有用。
为了创建一个外部链接文章,需要设置一些特殊的扉页参数:
```yaml
---
title: "我的 Medium 文章"
date: 2022-01-25
externalUrl: "https://medium.com/"
summary: "我在Medium上写了一篇文章。"
showReadingTime: false
_build:
render: "false"
list: "local"
---
```
除了像 `title``summary` 这种普通的扉页参数外,需要设置 `externalUrl` 参数来告诉 Blowfish 这不是一篇普通的文章。访问者在访问后,会被重定向到这里提供的 URL。
此外,我们使用了 `_build` 参数来避免 Hugo 生成一个普通页面。因为我们是一个连接到外部的 URL生成页面是没有意义的。
Hugo 中可以通过命令来快速生成一个外部链接的文件,在创建新的外部链接是,只需要指定 `-k external` 即可。这让生成外部链接文章变得更简单。
```shell
hugo new -k external posts/my-post.md
```
### 简单页面
| | |
| ----------------- | ------------------------------ |
| **Layout:** | `layouts/_default/simple.html` |
| **Front Matter:** | `layout: "simple"` |
Blowfish 包含了一个用于简单页面的布局。简单布局是一个全宽的模板,并仅仅展示 Markdown 中的内容,不包含任何主题中的特性。
简单布局中唯一可用的特性是面包屑导航和分享链接。这个行为也是通过 [扉页参数]({{< ref "front-matter" >}}) 来控制。
如果想在特定页面上启用简单布局,添加 `layout` 扉页参数,并设置为 `"simple"`
```yaml
---
title: "我的着陆页"
date: 2022-03-08
layout: "simple"
---
这个页面的内容是全宽的。
```
## 自定义布局
Hugo 的其中一个好处就是它让整个站点、单独内容或页面创建自定义布局变得容易。
自定义布局遵循所有 Hugo 的模板规则,更多信息可以在 [Hugo 官方文档](https://gohugo.io/templates/introduction/) 中找到。
### 覆盖默认布局
上面讨论的每种内容类型都列出了其对应的布局文件。如果你在本地项目中创建了这个文件,它将覆盖主题的默认模板,由此可以来自定义网站的样式布局。
例如,创建一个 `layouts/_default/single.html` 文件,此文件将允许用户完全自定义叶子页面的布局。
### 自定义部分布局
如果你想为个别内容创建自定义布局也很简单。这在使用特定样式列出某种类型内容时会非常有效。
让我们简单看一个例子,来了解如何为"Projects"页面创建自定义的特殊布局。
为了做到这一点使用常规的Hugo规则来在 `content` 目录下组织你的内容。此外,在和 `layout` 目录中创建和内容部分相同的目录结构,并在此目录下添加一个 `list.html` 文件,此文件是 "projects" 内容的一个新的列表页布局。
```shell
.
└── content
│ └── projects
│ ├── _index.md
│ ├── first-project.md
│ └── second-project.md
└── layouts
└── projects
└── list.html
```
`list.html` 文件将会覆盖默认的模板,但只会作用在 `projects` 部分。我们先看看 `_index.md` 文件的内容。
```yaml
---
title: "Blowfish"
date: 2021-08-11
icon: "github"
description: "用Tailwind CSS构建的Hugo主题。"
topics: ["Hugo", "Web", "Tailwind"]
externalUrl: "https://github.com/nunocoracao/blowfish/"
---
```
_在这个例子中我们为每个项目添加了一些参数然后我们在列表模板中可以使用他们。虽然这个例子没有页面的内容但这并不组织你添加内容。这是自己的的自定义模板完全可以随心所欲_
定义了项目内容后,现在我们可以创建一个列表模板来输出项目中的信息。
```go
{{ define "main" }}
<section class="mt-8">
{{ range .Pages }}
<article class="pb-6">
<a class="flex" href="{{ .Params.externalUrl }}">
<div class="mr-3 text-3xl text-neutral-300">
<span class="relative inline-block align-text-bottom">
{{ partial "icon.html" .Params.icon }}
</span>
</div>
<div>
<h3 class="flex text-xl font-semibold">
{{ .Title }}
</h3>
<p class="text-sm text-neutral-400">
{{ .Description }}
</p>
</div>
</a>
</article>
{{ end }}
</section>
{{ end }}
```
尽管这是一个比较简单的例子,但你可以看到这里的 `list.html` 文件遍历了本节中的所有子页面,然后输出了每个页面的 HTML 链接 和图标。每个项目的扉页参数被用来确定显示哪些信息。
Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.
请记住,构建网站的时候需要重新编译 Tailwind CSS一定要确保相关的样式和类可用。这在[高级定制]({{< ref "advanced-customisation" >}})部分有更详细的说明。
当尝试使用自定义模板时,请务必先了解默认的 Blowfish 模板是如何工作的,然后将其作为指南或模板。补充一点,[Hugo 文档](https://gohugo.io/templates/introduction/) 也是学习创建自定义模板的宝贵资源。

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 102 KiB

View file

@ -1,55 +0,0 @@
---
title: "Firebase: Views & Likes"
date: 2020-08-03
draft: false
description: "Learn how to integrate Firebase and get dynamic data for views and likes."
slug: "firebase-views"
tags: ["firebase", "views", likes]
series: ["Documentation"]
series_order: 15
---
In order to be able to support dynamic data across your website we've added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.
1. Go to <a target="_blank" href="https://firebase.com">Firebase website</a> and create an account for free
2. Create a new project
3. Select analytics location
4. Setup firebase in Blowfish by getting the variables for your project and setting them inside `params.toml` file. More details can be found in <a target="_blank" href="{{< ref "configuration/#theme-parameters" >}}">this page</a>. You can find an example of the file Firebase will provide below, notice the parameters within the FirebaseConfig object.
```
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY",
authDomain: "blowfish-21fff.firebaseapp.com",
projectId: "blowfish-21fff",
storageBucket: "blowfish-21fff.appspot.com",
messagingSenderId: "60108104191",
appId: "1:60108104191:web:039842ebe1370698b487ca",
measurementId: "G-PEDMYR1V0K"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
```
6. Enable anonymous authorization - Select Build and open Authentication. Select get started, click Anonymous and turn it on, save.
7. Enjoy - you can now activate views and likes on Blowfish for all (or specific) articles.

View file

@ -1,55 +0,0 @@
---
title: "Firebase: Views & Likes"
date: 2020-08-03
draft: false
description: "Learn how to integrate Firebase and get dynamic data for views and likes."
slug: "firebase-views"
tags: ["firebase", "views", likes]
series: ["Documentation"]
series_order: 15
---
In order to be able to support dynamic data across your website we've added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.
1. Go to <a target="_blank" href="https://firebase.com">Firebase website</a> and create an account for free
2. Create a new project
3. Select analytics location
4. Setup firebase in Blowfish by getting the variables for your project and setting them inside `params.toml` file. More details can be found in <a target="_blank" href="{{< ref "configuration/#theme-parameters" >}}">this page</a>. You can find an example of the file Firebase will provide below, notice the parameters within the FirebaseConfig object.
```
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY",
authDomain: "blowfish-21fff.firebaseapp.com",
projectId: "blowfish-21fff",
storageBucket: "blowfish-21fff.appspot.com",
messagingSenderId: "60108104191",
appId: "1:60108104191:web:039842ebe1370698b487ca",
measurementId: "G-PEDMYR1V0K"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
```
6. Enable anonymous authorization - Select Build and open Authentication. Select get started, click Anonymous and turn it on, save.
7. Enjoy - you can now activate views and likes on Blowfish for all (or specific) articles.

View file

@ -1,55 +0,0 @@
---
title: "Firebase: Views & Likes"
date: 2020-08-03
draft: false
description: "Learn how to integrate Firebase and get dynamic data for views and likes."
slug: "firebase-views"
tags: ["firebase", "views", likes]
series: ["Documentation"]
series_order: 15
---
In order to be able to support dynamic data across your website we've added the support to integrate Firebase. This will allow you to use the views feature across lists and posts.
1. Go to <a target="_blank" href="https://firebase.com">Firebase website</a> and create an account for free
2. Create a new project
3. Select analytics location
4. Setup firebase in Blowfish by getting the variables for your project and setting them inside `params.toml` file. More details can be found in <a target="_blank" href="{{< ref "configuration/#theme-parameters" >}}">this page</a>. You can find an example of the file Firebase will provide below, notice the parameters within the FirebaseConfig object.
```
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY",
authDomain: "blowfish-21fff.firebaseapp.com",
projectId: "blowfish-21fff",
storageBucket: "blowfish-21fff.appspot.com",
messagingSenderId: "60108104191",
appId: "1:60108104191:web:039842ebe1370698b487ca",
measurementId: "G-PEDMYR1V0K"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. Setup Firestore - Select Build and open Firestore. Create a new database and choose to start in production mode. Select server location and wait. Once that is started you need to configure the rules. Just copy and paste the file below and press publish.
```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
```
6. Enable anonymous authorization - Select Build and open Authentication. Select get started, click Anonymous and turn it on, save.
7. Enjoy - you can now activate views and likes on Blowfish for all (or specific) articles.

View file

@ -1,55 +0,0 @@
---
title: "Firebase: 阅读量 & 点赞量"
date: 2020-08-03
draft: false
description: "了解 Blowfish 如何集成 Firebase并动态显示阅读量和点赞量。"
slug: "firebase-views"
tags: ["firebase", "阅读量", "点赞量"]
series: ["部署教程"]
series_order: 15
---
为了能够在网站中获取动态数据,我们支持了对 Firebase 的集成。这将允许你在列表和文章中使用阅读量功能。
1. 访问 <a target="_blank" href="https://firebase.com">Firebase</a> 并创建一个账户
2. 创建一个新项目
3. 选择分析位置
4. Blowfish 是通过 `params.toml` 配置文件中的 firebase 相关参数,来和 firebase 集成的,更多的细节内容可以参考 <a target="_blank" href="{{< ref "configuration/#theme-parameters" >}}">这个页面</a>。你可以在下面找到集成 firebase 的文件示例,请注意 FirebaseConfig 对象内的参数。
```
// 从你需要的 SDK 中导入所需的函数
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// 你 Web 应用的 Firebase 配置
// 对于 Firebase JS SDK v7.20.0 以及更高版本measurementId 参数是可选的
const firebaseConfig = {
apiKey: "AIzaSyB5tqlqDky77Vb4Tc4apiHV4hRZI18KGiY",
authDomain: "blowfish-21fff.firebaseapp.com",
projectId: "blowfish-21fff",
storageBucket: "blowfish-21fff.appspot.com",
messagingSenderId: "60108104191",
appId: "1:60108104191:web:039842ebe1370698b487ca",
measurementId: "G-PEDMYR1V0K"
};
// 初始化 Firebase
const app = initializeApp(firebaseConfig);
const analytics = getAnalytics(app);
```
5. 设置 Firestore - 选择 Build 并打开 Firestore. 创建一个数据库,并在生产环境中启动。选择服务器位置然后等待其部署完成。启动之后你需要配置规则。只需要复制并粘贴下面的内容,然后点击发布即可。
```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
```
6. 开启匿名授权 - 选择 Build 并打开 Authentication。选择开始点击 Anonymous 并开启,保存。
7. 享受 - 现在可以激活 Blowfish 中文章阅读量和点赞量的功能。

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 85 KiB

View file

@ -1,58 +0,0 @@
---
title: "Front Matter"
date: 2020-08-10
draft: false
description: "All the front matter variables available in Blowfish."
slug: "front-matter"
tags: ["front matter", "config", "docs"]
series: ["Documentation"]
series_order: 7
---
In addition to the [default Hugo front matter parameters](https://gohugo.io/content-management/front-matter/#front-matter-variables), Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.
Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default.
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `title` | _Not set_ | The name of the article. |
| `description` | _Not set_ | The text description for the article. It is used in the HTML metadata. |
| `externalUrl` | _Not set_ | If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website. |
| `editURL` | `article.editURL` | When `showEdit` is active, the URL for the edit link. |
| `editAppendPath` | `article.editAppendPath` | When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`. |
| `groupByYear` | `list.groupByYear` | Whether or not articles are grouped by year on list pages. |
| `menu` | _Not set_ | When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`. |
| `robots` | _Not set_ | String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `sharingLinks` | `article.sharingLinks` | Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed. |
| `showAuthor` | `article.showAuthor` | Whether or not the author box for the default author is displayed in the article footer. |
| `showAuthorBottom` | `article.showAuthorBottom` | Author boxes are displayed at the bottom of each page instead of the top. |
| `authors` | _Not set_ | Array of values for authors, if set it overrides `showAuthor` settings for page or site. Used on the multiple authors feature, check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `showAuthorsBadges` | `article.showAuthorsBadges` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `featureimage` | _Not set_ | External URL for feature image |
| `featureimagecaption` | _Not set_ | Caption for feature image. Only displayed in heroStyle `big` |
| `showHero` | `article.showHero` | Whether the thumbnail image will be shown as a hero image within the article page. |
| `heroStyle` | `article.heroStyle` | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `showBreadcrumbs` | `article.showBreadcrumbs` or `list.showBreadcrumbs` | Whether the breadcrumbs are displayed in the article or list header. |
| `showDate` | `article.showDate` | Whether or not the article date is displayed. The date is set using the `date` parameter. |
| `showDateUpdated` | `article.showDateUpdated` | Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter. |
| `showEdit` | `article.showEdit` | Whether or not the link to edit the article content should be displayed. |
| `showHeadingAnchors` | `article.showHeadingAnchors` | Whether or not heading anchor links are displayed alongside headings within this article. |
| `showPagination` | `article.showPagination` | Whether or not the next/previous article links are displayed in the article footer. |
| `invertPagination` | `article.invertPagination` | Whether or not to flip the direction of the next/previous article links. |
| `showReadingTime` | `article.showReadingTime` | Whether or not the article reading time is displayed. |
| `showTaxonomies` | `article.showTaxonomies` | Whether or not the taxonomies that relate to this article are displayed. |
| `showTableOfContents` | `article.showTableOfContents` | Whether or not the table of contents is displayed on this article. |
| `showWordCount` | `article.showWordCount` | Whether or not the article word count is displayed. |
| `showComments` | `article.showComments` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `showSummary` | `list.showSummary` | Whether or not the article summary should be displayed on list pages. |
| `showViews` | `article.showViews` | Whether or not the article views should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `showLikes` | `article.showLikes` | Whether or not the article likes should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `seriesOpened` | `article.seriesOpened` | Whether or not the series module will be displayed open by default or not. |
| `series` | _Not set_ | Array of series the article belongs to, we recommend using only one series per article. |
| `series_order` | _Not set_ | Number of the article within the series. |
| `summary` | Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}})) | When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article. |
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | Whether or not this article is included in the generated `/sitemap.xml` file. |
| `layoutBackgroundBlur` | `true` | Makes the background image in the background heroStyle blur with the scroll |
| `layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
<!-- prettier-ignore-end -->

View file

@ -1,58 +0,0 @@
---
title: "Front Matter"
date: 2020-08-10
draft: false
description: "All the front matter variables available in Blowfish."
slug: "front-matter"
tags: ["front matter", "config", "docs"]
series: ["Documentation"]
series_order: 7
---
In addition to the [default Hugo front matter parameters](https://gohugo.io/content-management/front-matter/#front-matter-variables), Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.
Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default.
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `title` | _Not set_ | The name of the article. |
| `description` | _Not set_ | The text description for the article. It is used in the HTML metadata. |
| `externalUrl` | _Not set_ | If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website. |
| `editURL` | `article.editURL` | When `showEdit` is active, the URL for the edit link. |
| `editAppendPath` | `article.editAppendPath` | When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`. |
| `groupByYear` | `list.groupByYear` | Whether or not articles are grouped by year on list pages. |
| `menu` | _Not set_ | When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`. |
| `robots` | _Not set_ | String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `sharingLinks` | `article.sharingLinks` | Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed. |
| `showAuthor` | `article.showAuthor` | Whether or not the author box for the default author is displayed in the article footer. |
| `showAuthorBottom` | `article.showAuthorBottom` | Author boxes are displayed at the bottom of each page instead of the top. |
| `authors` | _Not set_ | Array of values for authors, if set it overrides `showAuthor` settings for page or site. Used on the multiple authors feature, check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `showAuthorsBadges` | `article.showAuthorsBadges` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `featureimage` | _Not set_ | External URL for feature image |
| `featureimagecaption` | _Not set_ | Caption for feature image. Only displayed in heroStyle `big` |
| `showHero` | `article.showHero` | Whether the thumbnail image will be shown as a hero image within the article page. |
| `heroStyle` | `article.heroStyle` | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `showBreadcrumbs` | `article.showBreadcrumbs` or `list.showBreadcrumbs` | Whether the breadcrumbs are displayed in the article or list header. |
| `showDate` | `article.showDate` | Whether or not the article date is displayed. The date is set using the `date` parameter. |
| `showDateUpdated` | `article.showDateUpdated` | Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter. |
| `showEdit` | `article.showEdit` | Whether or not the link to edit the article content should be displayed. |
| `showHeadingAnchors` | `article.showHeadingAnchors` | Whether or not heading anchor links are displayed alongside headings within this article. |
| `showPagination` | `article.showPagination` | Whether or not the next/previous article links are displayed in the article footer. |
| `invertPagination` | `article.invertPagination` | Whether or not to flip the direction of the next/previous article links. |
| `showReadingTime` | `article.showReadingTime` | Whether or not the article reading time is displayed. |
| `showTaxonomies` | `article.showTaxonomies` | Whether or not the taxonomies that relate to this article are displayed. |
| `showTableOfContents` | `article.showTableOfContents` | Whether or not the table of contents is displayed on this article. |
| `showWordCount` | `article.showWordCount` | Whether or not the article word count is displayed. |
| `showComments` | `article.showComments` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `showSummary` | `list.showSummary` | Whether or not the article summary should be displayed on list pages. |
| `showViews` | `article.showViews` | Whether or not the article views should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `showLikes` | `article.showLikes` | Whether or not the article likes should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `seriesOpened` | `article.seriesOpened` | Whether or not the series module will be displayed open by default or not. |
| `series` | _Not set_ | Array of series the article belongs to, we recommend using only one series per article. |
| `series_order` | _Not set_ | Number of the article within the series. |
| `summary` | Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}})) | When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article. |
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | Whether or not this article is included in the generated `/sitemap.xml` file. |
| `layoutBackgroundBlur` | `true` | Makes the background image in the background heroStyle blur with the scroll |
| `layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
<!-- prettier-ignore-end -->

View file

@ -1,58 +0,0 @@
---
title: "Front Matter"
date: 2020-08-10
draft: false
description: "All the front matter variables available in Blowfish."
slug: "front-matter"
tags: ["front matter", "config", "docs"]
series: ["Documentation"]
series_order: 7
---
In addition to the [default Hugo front matter parameters](https://gohugo.io/content-management/front-matter/#front-matter-variables), Blowfish adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.
Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default.
<!-- prettier-ignore-start -->
| Name | Default | Description |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `title` | _Not set_ | The name of the article. |
| `description` | _Not set_ | The text description for the article. It is used in the HTML metadata. |
| `externalUrl` | _Not set_ | If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website. |
| `editURL` | `article.editURL` | When `showEdit` is active, the URL for the edit link. |
| `editAppendPath` | `article.editAppendPath` | When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`. |
| `groupByYear` | `list.groupByYear` | Whether or not articles are grouped by year on list pages. |
| `menu` | _Not set_ | When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`. |
| `robots` | _Not set_ | String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values. |
| `sharingLinks` | `article.sharingLinks` | Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed. |
| `showAuthor` | `article.showAuthor` | Whether or not the author box for the default author is displayed in the article footer. |
| `showAuthorBottom` | `article.showAuthorBottom` | Author boxes are displayed at the bottom of each page instead of the top. |
| `authors` | _Not set_ | Array of values for authors, if set it overrides `showAuthor` settings for page or site. Used on the multiple authors feature, check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `showAuthorsBadges` | `article.showAuthorsBadges` | Whether the `authors` taxonomies are are displayed in the article or list header. This requires the setup of `multiple authors` and the `authors` taxonomy. Check [this page]({{< ref "multi-author" >}}) for more details on how to configure that feature. |
| `featureimage` | _Not set_ | External URL for feature image |
| `featureimagecaption` | _Not set_ | Caption for feature image. Only displayed in heroStyle `big` |
| `showHero` | `article.showHero` | Whether the thumbnail image will be shown as a hero image within the article page. |
| `heroStyle` | `article.heroStyle` | Style to display the hero image, valid options are: `basic`, `big`, `background`, `thumbAndBackground`. |
| `showBreadcrumbs` | `article.showBreadcrumbs` or `list.showBreadcrumbs` | Whether the breadcrumbs are displayed in the article or list header. |
| `showDate` | `article.showDate` | Whether or not the article date is displayed. The date is set using the `date` parameter. |
| `showDateUpdated` | `article.showDateUpdated` | Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter. |
| `showEdit` | `article.showEdit` | Whether or not the link to edit the article content should be displayed. |
| `showHeadingAnchors` | `article.showHeadingAnchors` | Whether or not heading anchor links are displayed alongside headings within this article. |
| `showPagination` | `article.showPagination` | Whether or not the next/previous article links are displayed in the article footer. |
| `invertPagination` | `article.invertPagination` | Whether or not to flip the direction of the next/previous article links. |
| `showReadingTime` | `article.showReadingTime` | Whether or not the article reading time is displayed. |
| `showTaxonomies` | `article.showTaxonomies` | Whether or not the taxonomies that relate to this article are displayed. |
| `showTableOfContents` | `article.showTableOfContents` | Whether or not the table of contents is displayed on this article. |
| `showWordCount` | `article.showWordCount` | Whether or not the article word count is displayed. |
| `showComments` | `article.showComments` | Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer. |
| `showSummary` | `list.showSummary` | Whether or not the article summary should be displayed on list pages. |
| `showViews` | `article.showViews` | Whether or not the article views should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `showLikes` | `article.showLikes` | Whether or not the article likes should be displayed in lists and detailed view. This requires a firebase integration. Check [this page]({{< ref "firebase-views" >}}) for a guide on how to integrate Firebase into Blowfish |
| `seriesOpened` | `article.seriesOpened` | Whether or not the series module will be displayed open by default or not. |
| `series` | _Not set_ | Array of series the article belongs to, we recommend using only one series per article. |
| `series_order` | _Not set_ | Number of the article within the series. |
| `summary` | Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}})) | When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article. |
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | Whether or not this article is included in the generated `/sitemap.xml` file. |
| `layoutBackgroundBlur` | `true` | Makes the background image in the background heroStyle blur with the scroll |
| `layoutBackgroundHeaderSpace` | `true` | Add space between the header and the body. |
<!-- prettier-ignore-end -->

View file

@ -1,58 +0,0 @@
---
title: "Front Matter"
date: 2020-08-10
draft: false
description: "文本主要介绍 Blowfish 中页面中可以添加的所有的 Front Matter 参数。"
slug: "front-matter"
tags: ["front matter", "配置", "文档"]
series: ["部署教程"]
series_order: 7
---
除了 [Hugo 中默认的 front matter](https://gohugo.io/content-management/front-matter/#front-matter-variables)Blowfish 主题中还添加了大量的参数选项来自定义单个页面的展示方式。所有可用的扉页参数如下。
front matter 参数中的默认值是从[基础配置]({{< ref "configuration" >}})中继承的,所有只有当你想要覆盖默认值时,才需要在当前页面指定这些参数。
<!-- prettier-ignore-start -->
| 名称 | 默认值 | 描述 |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `title` | 无 | 文章名称。 |
| `description` | 无 | 文章的描述信息,它会被添加在 HTML 的 `<meta>` 元数据中。 |
| `externalUrl` | 无 | 如果文章发布在第三方网站上,这里提供只想对应文章的 URL 地址。提供 URL 将会组织生成内容页面,对这篇文章的任何引用都会直接跳转到第三方网站的 URL 上面。 |
| `editURL` | `article.editURL` | 当激活 `showEdit` 参数时,此参数用来设置编辑文章的 URL。 |
| `editAppendPath` | `article.editAppendPath` | 当激活 `showEdit` 参数时,该参数指定是否将当前文章路径添加到 `editURL` 设置的 URL 后面。 |
| `groupByYear` | `list.groupByYear` | 是否在列表页面按年份对文章进行分组。 |
| `menu` | 无 | 当设置此值,这篇内容的链接将会出现在菜单中。有效值是 `main``footer`。 |
| `robots` | 无 | 支持搜索引擎的爬虫如何处理这篇文章。如果设置了此值,它将在页面头部输出。更多内容请参考 [Google 文档](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives)。 |
| `sharingLinks` | `article.sharingLinks` | 指定文章结尾显示哪些分享链接。如果没有设置或设置为 `false` ,则没有分享链接。 |
| `showAuthor` | `article.showAuthor` | 是否在页脚处显示作者框。 |
| `showAuthorBottom` | `article.showAuthorBottom` | 作者框显示在每页的底部而不是顶部。 |
| `authors` | 无 | 用于展示多创作者的数组,如果设置了将会覆盖 `showAuthor` 设置。这里使用了多作者的特性,查看[这个页面]({{< ref "multi-author" >}})来获取更多信息。 |
| `showAuthorsBadges` | `article.showAuthorsBadges` | 是否在文章和列表页展示`authors`作者分类。想是它生效需要开启`multiple authors`多创作者和 `authors` 作者分类。 查看[这个页面]({{< ref "multi-author" >}})来获取更多信息。 |
| `featureimage` | 无 | 基于外部 URL 的特征图片链接。 |
| `featureimagecaption` | 无 | 特征图片的说明,仅在 hero 样式的 `big` 风格下展示。 |
| `showHero` | `article.showHero` | 是否在文章页面将所裸土作为文章页面内的 hero 图片显示。 |
| `heroStyle` | `article.heroStyle` | hero 图片的风格,合法的值有: `basic`、`big`、`background`、`thumbAndBackground`。 |
| `showBreadcrumbs` | `article.showBreadcrumbs` or `list.showBreadcrumbs` | 是否在文章或列表页面显示面包屑导航。 |
| `showDate` | `article.showDate` | 是否显示文章的日期。具体日期使用 `date` 参数设置。 |
| `showDateUpdated` | `article.showDateUpdated` | 是否显示文章的更新日期。具体日期使用 `lastmod` 参数设置。 |
| `showEdit` | `article.showEdit` | 是否显示编辑文章内容的链接。 |
| `showHeadingAnchors` | `article.showHeadingAnchors` | 是否在文章的标题旁显示锚点链接。 |
| `showPagination` | `article.showPagination` | 是否在文章页脚显示下一篇/上一篇链接。 |
| `invertPagination` | `article.invertPagination` | 是否翻转下一篇/上一篇的链接方向。 |
| `showReadingTime` | `article.showReadingTime` | 是否显示文章的预估阅读时间。 |
| `showTaxonomies` | `article.showTaxonomies` | 是否显示文章关联的分类/标签。 |
| `showTableOfContents` | `article.showTableOfContents` | 是否显示文章目录。 |
| `showWordCount` | `article.showWordCount` | 是否显示文章字数统计。如果你的语言属于 CJK 语言,需要在 `config.toml` 中开启 `hasCJKLanguage` 参数。 |
| `showComments` | `article.showComments` | 是否在文章页脚显示 [评论部分]({{< ref "partials#comments" >}})。 |
| `showSummary` | `list.showSummary` | 是否在文章或列表页显示摘要。 |
| `showViews` | `article.showViews` | 是否显示文章和列表页面的阅读量。这需要集成 firebase ,具体可以看[这个页面]({{< ref "firebase-views" >}})来了解如何在 Blowfish 中集成firebase。 |
| `showLikes` | `article.showLikes` | 是否显示文章和列表页面的点赞量。这需要集成 firebase ,具体可以看[这个页面]({{< ref "firebase-views" >}})来了解如何在 Blowfish 中集成firebase。 |
| `seriesOpened` | `article.seriesOpened` | 是否打开系列模块。 |
| `series` | 无 | 文章所属的系列数组,我们建议每篇文章只属于一个系列。 |
| `series_order` | 无 | 文章在系列中的编号。 |
| `summary` | Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}})) | 当启用 `showSummary`这是作为这篇文章摘要的Markdown字符串。 |
| `xml` | `true` unless excluded by `sitemap.excludedKinds` | 是否将这篇文章包含在生成的 `/sitemap.xml` 文件中。 |
| `layoutBackgroundBlur` | `true` | 向下滚动主页时,是否模糊背景图。 |
| `layoutBackgroundHeaderSpace` | `true` | 在标题和正文之间添加空白区域间隔。 |
<!-- prettier-ignore-end -->

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

View file

@ -1,516 +0,0 @@
<svg height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs"
viewBox="0 0 600 600">
<rect width="600" height="600" fill="transparent"></rect>
<mask id="mask" mask-type="alpha" maskUnits="userSpaceOnUse">
<rect transform="translate(0, 0)" width="600" height="600" fill="white"></rect>
</mask>
<svg>
<rect transform="translate(0, 0)" fill="#ade8f4" width="60" height="60"></rect>
<rect transform="translate(0, 0)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 60)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(0, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(0, 120)" fill="#00b4d8" width="60" height="60"></rect>
<rect transform="translate(0, 120)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 180)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(0, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(0, 180)" fill="#03045e" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 240)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(0, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(0, 240)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 300)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(0, 360)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(0, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(0, 360)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 420)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(0, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(0, 420)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 480)" fill="#ade8f4" width="60" height="60"></rect>
<rect transform="translate(0, 480)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(0, 540)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(0, 540) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(0, 540)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(60, 0)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(60, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(60, 60)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(60, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(60, 60)" fill="#caf0f8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(60, 120)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(60, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(60, 180)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(60, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(60, 240)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(60, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(60, 300)" fill="#0077b6" width="60" height="60"></rect>
<rect transform="translate(60, 300)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(60, 360)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(60, 360) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(60, 360)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(60, 420)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(60, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(60, 480)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(60, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(60, 480)" fill="#0077b6" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(60, 540)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(60, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(60, 540)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(120, 0)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(120, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 60)" fill="#90e0ef" width="60" height="60"></rect>
<rect transform="translate(120, 60)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(120, 120)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(120, 120) translate(30,30) rotate(180) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 180)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(120, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 240)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(120, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 300)" fill="#00b4d8" width="60" height="60"></rect>
<rect transform="translate(120, 300)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(120, 360)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(120, 360) translate(30,30) rotate(0) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 420)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(120, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 480)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(120, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="#48cae4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(120, 540)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(180, 0)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(180, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(180, 0)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 60)" fill="#03045e" width="60" height="60"></rect>
<rect transform="translate(180, 60)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 120)" fill="#0077b6" width="60" height="60"></rect>
<rect transform="translate(180, 120)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 180)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(180, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(180, 180)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 240)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(180, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(180, 300)" fill="#023e8a" width="60" height="60"></rect>
<rect transform="translate(180, 300)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 360)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(180, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(180, 360)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 420)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(180, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#48cae4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(180, 480)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(180, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(180, 480)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(180, 540)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(180, 540) translate(30,30) rotate(90) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(240, 0)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(240, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(240, 60)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(240, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(240, 120)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(240, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(240, 120)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 180)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(240, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(240, 180)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 240)" fill="#48cae4" width="60" height="60"></rect>
<rect transform="translate(240, 240)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 300)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(240, 300)" fill="#0077b6" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 360)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(240, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(240, 420)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(240, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(240, 420)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 480)" fill="#03045e" width="60" height="60"></rect>
<rect transform="translate(240, 480)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(240, 540)" fill="#ade8f4" width="60" height="60"></rect>
<rect transform="translate(240, 540)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 0)" fill="#0096c7" width="60" height="60"></rect>
<rect transform="translate(300, 0)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 60)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(300, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(300, 60)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 120)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(300, 120) translate(30,30) rotate(0) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(300, 180)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(300, 180)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 240)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(300, 300)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(300, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(300, 300)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 360)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(300, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(300, 360)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 420)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(300, 420) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(300, 480)" fill="#00b4d8" width="60" height="60"></rect>
<rect transform="translate(300, 480)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(300, 540)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 0)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(360, 0) translate(30,30) rotate(180) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(360, 0)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(360, 60)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(360, 60) translate(30,30) rotate(90) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 120)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(360, 120) translate(30,30) rotate(180) translate(-30,-30)"
fill="#00b4d8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 180)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(360, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#48cae4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(360, 180)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(360, 240)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(360, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0077b6" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 300)" fill="#0077b6" width="60" height="60"></rect>
<path transform="translate(360, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(360, 300)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(360, 360)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(360, 360) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 420)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(360, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(360, 480)" fill="#0077b6" width="60" height="60"></rect>
<rect transform="translate(360, 480)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(360, 540)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(360, 540) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 0)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="#48cae4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 60)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(420, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 120)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(420, 120) translate(30,30) rotate(180) translate(-30,-30)"
fill="#48cae4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(420, 120)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(420, 180)" fill="#00b4d8" width="60" height="60"></rect>
<rect transform="translate(420, 180)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(420, 240)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(420, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 300)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(420, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(420, 300)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(420, 360)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#03045e" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 420)" fill="#023e8a" width="60" height="60"></rect>
<path transform="translate(420, 420) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(420, 480)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(420, 480) translate(30,30) rotate(0) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(420, 480)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(420, 540)" fill="#48cae4" width="60" height="60"></rect>
<path transform="translate(420, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(420, 540)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 0)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(480, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(480, 0)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 60)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(480, 60) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(480, 120)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(480, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(480, 120)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 180)" fill="#023e8a" width="60" height="60"></rect>
<rect transform="translate(480, 180)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 240)" fill="#00b4d8" width="60" height="60"></rect>
<path transform="translate(480, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(480, 300)" fill="#90e0ef" width="60" height="60"></rect>
<path transform="translate(480, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="#023e8a" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(480, 360)" fill="#48cae4" width="60" height="60"></rect>
<rect transform="translate(480, 360)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 420)" fill="#caf0f8" width="60" height="60"></rect>
<path transform="translate(480, 420) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(480, 420)" fill="#023e8a" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 480)" fill="#0096c7" width="60" height="60"></rect>
<rect transform="translate(480, 480)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(480, 540)" fill="#0077b6" width="60" height="60"></rect>
<rect transform="translate(480, 540)" fill="#00b4d8" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 0)" fill="#0096c7" width="60" height="60"></rect>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(540, 60)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(540, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="#ade8f4" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(540, 60)" fill="#0077b6" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 120)" fill="#90e0ef" width="60" height="60"></rect>
<rect transform="translate(540, 120)" fill="#48cae4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 180)" fill="#ade8f4" width="60" height="60"></rect>
<rect transform="translate(540, 180)" fill="#0096c7" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 240)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(540, 300)" fill="#00b4d8" width="60" height="60"></rect>
<rect transform="translate(540, 300)" fill="#0077b6" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 360)" fill="#03045e" width="60" height="60"></rect>
<path transform="translate(540, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#caf0f8" d="M60 0H0v60L60 0z"></path>
<rect transform="translate(540, 360)" fill="#90e0ef" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 420)" fill="#ade8f4" width="60" height="60"></rect>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="#0096c7" d="M60 0H0v60L60 0z"></path>
</svg>
<svg>
<rect transform="translate(540, 480)" fill="#0077b6" width="60" height="60"></rect>
<rect transform="translate(540, 480)" fill="#ade8f4" x="15" y="15" width="30" height="30"></rect>
</svg>
<svg>
<rect transform="translate(540, 540)" fill="#48cae4" width="60" height="60"></rect>
<rect transform="translate(540, 540)" fill="#0077b6" x="15" y="15" width="30" height="30"></rect>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 28 KiB

View file

@ -1,272 +0,0 @@
---
title: "Per iniziare"
date: 2020-08-15
draft: false
description: "Tutte le variabili del front matter sono disponibili in Blowfish."
slug: "per-iniziare"
tags: ["installazione", "documenti"]
series: ["Documentazione"]
series_order: 3
---
{{< alert >}}
Questa sezione presuppone che si sia già [installato il tema Blowfish]({{< ref "docs/installation" >}}).
{{< /alert >}}
</br>
{{< alert "fire" >}}
Abbiamo appena lanciato uno strumento CLI per aiutarvi a iniziare con Blowfish. Vi aiuterà con l'installazione e la configurazione. Installate lo strumento CLI a livello globale utilizzando:
```bash
npx blowfish-tools
```
{{< /alert >}}
The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.
## Basic configuration
Before creating any content, there are a few things you should set for a new installation. Starting in the `config.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content.
```toml
# config/_default/config.toml
baseURL = "https://your_domain.com/"
languageCode = "en"
```
The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.
Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`.
{{< alert >}}
Note that the language code in the language config filename should match the `languageCode` setting in `config.toml`.
{{< /alert >}}
```toml
# config/_default/languages.en.toml
title = "My awesome website"
[author]
name = "My name"
image = "img/author.jpg"
headline = "A generally awesome human"
bio = "A little bit about me"
links = [
{ twitter = "https://twitter.com/username" }
]
```
The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed.
If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the scheme, simply set the `colorScheme` theme parameter. Valid options are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`.
```toml
# config/_default/params.toml
colorScheme = "blowfish"
```
Blowfish defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). The three main colours are used for the header, footer, and accent colours. Here are the colors for each scheme:
#### Blowfish (default)
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Avocado
{{< swatches "#78716c" "#84cc16" "#10b981" >}}
#### Fire
{{< swatches "#78716c" "#f97316" "#f43f5e" >}}
#### Ocean
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Forest
{{< swatches "#658c86" "#3bf5df" "#06d45c" >}}
#### Princess
{{< swatches "#8c658c" "#f53bf2" "#7706d4" >}}
#### Neon
{{< swatches "#8338ec" "#ff006e" "#3a86ff" >}}
#### Bloody
{{< swatches "#d90429" "#8d99ae" "#457b9d" >}}
#### Terminal
{{< swatches "#004b23" "#38b000" "#1a759f" >}}
#### Marvel
{{< swatches "#2541b2" "#d81159" "#ffbc42" >}}
#### Noir
{{< swatches "#5c6b73" "#9db4c0" "#00a5cf" >}}
#### Autumn
{{< swatches "#0a9396" "#ee9b00" "#bb3e03" >}}
#### Congo
{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}}
#### Slate
{{< swatches "#6B7280" "#64748b" "#6B7280" >}}
Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details.
## Organising content
By default, Blowfish doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio.
Here's a quick overview of a basic Blowfish project. All content is placed within the `content` folder:
```shell
.
├── assets
│ └── img
│ └── author.jpg
├── config
│ └── _default
├── content
│ ├── _index.md
│ ├── about.md
│ └── posts
│ ├── _index.md
│ ├── first-post.md
│ └── another-post
│ ├── aardvark.jpg
│ └── index.md
└── themes
└── blowfish
```
It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information.
Blowfish is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_.
Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuration file:
```toml
# config/_default/taxonomies.toml
topic = "topics"
```
This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies.
When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.
## Menus
Blowfish has two menus that can be customised to suit the content and layout of your site. The `main` menu appears in the site header and the `footer` menu appears at the bottom of the page just above the copyright notice.
Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use.
```toml
# config/_default/menus.toml
[[main]]
name = "Blog"
pageRef = "posts"
weight = 10
[[main]]
name = "Topics"
pageRef = "topics"
weight = 20
[[main]]
pre = "github"
name = "GitHub"
url = "https://github.com/nunocoracao/blowfish"
weight = 30
[[main]]
identifier = "github2"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 40
[[footer]]
name = "Privacy"
url = "https://external-link"
```
The `name` parameter specifies the text that is used in the menu link. You can also optionally provide a `title` which fills the HTML title attribute for the link.
The `pageRef` parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the `url` parameter can be used.
The `pre` parameter allows you to place an icon from [Blowfish's icon set]({{< ref "samples/icons" >}}) on the menu entry. This parameter can be used with `name` parameter or by itself. If you want to use multiple menu entries with just icons please set the `identifier`parameter otherwise Hugo will default to the naming tag as the id and probably not display all the menu entries.
Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`.
Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.
### Nested menus
The theme also supports nested menus. In order to use them you just need to define a parent entry in `menu.toml` and its sub-menus using the `parent` parameter to reference the parent. All properties can be used for sub-menus. `pageRef` and `url` can also be used in the parent entry. Nested menus are only available in the main menu not for the footer.
```toml
# config/_default/menus.toml
[[main]]
name = "Parent"
weight = 20
[[main]]
name = "sub-menu 1"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 2"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 3"
parent = "Parent"
pre = "github"
pageRef = "samples"
weight = 20
```
### Sub-Navigation menu
Additionally, you can also configure a sub-navigation menu. Just define new menu entries as `subnavigation` in `menus.toml`.
This will render a second line with sub-categories below the main header menu.
```toml
# config/_default/menus.toml
[[subnavigation]]
name = "An interesting topic"
pageRef = "tags/interesting-topic"
weight = 10
[[subnavigation]]
name = "My Awesome Category"
pageRef = "categories/awesome"
weight = 20
```
The default `name` is the `pageRef` title cased.
## Thumbnails & Backgrounds
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then be able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
Additionally, Blowfish also supports background hero images in articles and lists. In order to use a different image than the featured one, add an image file in which the name starts with `background*`.
## Detailed configuration
The steps above are the bare minimum configuration. If you now run `hugo server` you will be presented with a blank Blowfish website. Detailed configuration is covered in the [Configuration]({{< ref "configuration" >}}) section.

View file

@ -1,272 +0,0 @@
---
title: "Getting Started"
date: 2020-08-15
draft: false
description: "All the front matter variables available in Blowfish."
slug: "getting-started"
tags: ["installation", "docs"]
series: ["Documentation"]
series_order: 3
---
{{< alert >}}
This section assumes you have already [installed the Blowfish theme]({{< ref "docs/installation" >}}).
{{< /alert >}}
</br>
{{< alert "fire" >}}
We just launched a CLI tool to help you get started with Blowfish. It will help you with installation and configuration. Install the CLI tool globally using:
```bash
npx blowfish-tools
```
{{< /alert >}}
The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.
## Basic configuration
Before creating any content, there are a few things you should set for a new installation. Starting in the `config.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content.
```toml
# config/_default/config.toml
baseURL = "https://your_domain.com/"
languageCode = "en"
```
The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.
Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`.
{{< alert >}}
Note that the language code in the language config filename should match the `languageCode` setting in `config.toml`.
{{< /alert >}}
```toml
# config/_default/languages.en.toml
title = "My awesome website"
[author]
name = "My name"
image = "img/author.jpg"
headline = "A generally awesome human"
bio = "A little bit about me"
links = [
{ twitter = "https://twitter.com/username" }
]
```
The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed.
If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the scheme, simply set the `colorScheme` theme parameter. Valid options are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`.
```toml
# config/_default/params.toml
colorScheme = "blowfish"
```
Blowfish defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). The three main colours are used for the header, footer, and accent colours. Here are the colors for each scheme:
#### Blowfish (default)
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Avocado
{{< swatches "#78716c" "#84cc16" "#10b981" >}}
#### Fire
{{< swatches "#78716c" "#f97316" "#f43f5e" >}}
#### Ocean
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Forest
{{< swatches "#658c86" "#3bf5df" "#06d45c" >}}
#### Princess
{{< swatches "#8c658c" "#f53bf2" "#7706d4" >}}
#### Neon
{{< swatches "#8338ec" "#ff006e" "#3a86ff" >}}
#### Bloody
{{< swatches "#d90429" "#8d99ae" "#457b9d" >}}
#### Terminal
{{< swatches "#004b23" "#38b000" "#1a759f" >}}
#### Marvel
{{< swatches "#2541b2" "#d81159" "#ffbc42" >}}
#### Noir
{{< swatches "#5c6b73" "#9db4c0" "#00a5cf" >}}
#### Autumn
{{< swatches "#0a9396" "#ee9b00" "#bb3e03" >}}
#### Congo
{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}}
#### Slate
{{< swatches "#6B7280" "#64748b" "#6B7280" >}}
Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details.
## Organising content
By default, Blowfish doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio.
Here's a quick overview of a basic Blowfish project. All content is placed within the `content` folder:
```shell
.
├── assets
│ └── img
│ └── author.jpg
├── config
│ └── _default
├── content
│ ├── _index.md
│ ├── about.md
│ └── posts
│ ├── _index.md
│ ├── first-post.md
│ └── another-post
│ ├── aardvark.jpg
│ └── index.md
└── themes
└── blowfish
```
It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information.
Blowfish is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_.
Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuration file:
```toml
# config/_default/taxonomies.toml
topic = "topics"
```
This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies.
When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.
## Menus
Blowfish has two menus that can be customised to suit the content and layout of your site. The `main` menu appears in the site header and the `footer` menu appears at the bottom of the page just above the copyright notice.
Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use.
```toml
# config/_default/menus.toml
[[main]]
name = "Blog"
pageRef = "posts"
weight = 10
[[main]]
name = "Topics"
pageRef = "topics"
weight = 20
[[main]]
pre = "github"
name = "GitHub"
url = "https://github.com/nunocoracao/blowfish"
weight = 30
[[main]]
identifier = "github2"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 40
[[footer]]
name = "Privacy"
url = "https://external-link"
```
The `name` parameter specifies the text that is used in the menu link. You can also optionally provide a `title` which fills the HTML title attribute for the link.
The `pageRef` parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the `url` parameter can be used.
The `pre` parameter allows you to place an icon from [Blowfish's icon set]({{< ref "samples/icons" >}}) on the menu entry. This parameter can be used with `name` parameter or by itself. If you want to use multiple menu entries with just icons please set the `identifier`parameter otherwise Hugo will default to the naming tag as the id and probably not display all the menu entries.
Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`.
Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.
### Nested menus
The theme also supports nested menus. In order to use them you just need to define a parent entry in `menu.toml` and its sub-menus using the `parent` parameter to reference the parent. All properties can be used for sub-menus. `pageRef` and `url` can also be used in the parent entry. Nested menus are only available in the main menu not for the footer.
```toml
# config/_default/menus.toml
[[main]]
name = "Parent"
weight = 20
[[main]]
name = "sub-menu 1"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 2"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 3"
parent = "Parent"
pre = "github"
pageRef = "samples"
weight = 20
```
### Sub-Navigation menu
Additionally, you can also configure a sub-navigation menu. Just define new menu entries as `subnavigation` in `menus.toml`.
This will render a second line with sub-categories below the main header menu.
```toml
# config/_default/menus.toml
[[subnavigation]]
name = "An interesting topic"
pageRef = "tags/interesting-topic"
weight = 10
[[subnavigation]]
name = "My Awesome Category"
pageRef = "categories/awesome"
weight = 20
```
The default `name` is the `pageRef` title cased.
## Thumbnails & Backgrounds
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then be able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
Additionally, Blowfish also supports background hero images in articles and lists. In order to use a different image than the featured one, add an image file in which the name starts with `background*`.
## Detailed configuration
The steps above are the bare minimum configuration. If you now run `hugo server` you will be presented with a blank Blowfish website. Detailed configuration is covered in the [Configuration]({{< ref "configuration" >}}) section.

View file

@ -1,272 +0,0 @@
---
title: "Getting Started"
date: 2020-08-15
draft: false
description: "All the front matter variables available in Blowfish."
slug: "getting-started"
tags: ["installation", "docs"]
series: ["Documentation"]
series_order: 3
---
{{< alert >}}
This section assumes you have already [installed the Blowfish theme]({{< ref "docs/installation" >}}).
{{< /alert >}}
</br>
{{< alert "fire" >}}
We just launched a CLI tool to help you get started with Blowfish. It will help you with installation and configuration. Install the CLI tool globally using:
```bash
npx blowfish-tools
```
{{< /alert >}}
The config files that ship with Blowfish contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.
## Basic configuration
Before creating any content, there are a few things you should set for a new installation. Starting in the `config.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content.
```toml
# config/_default/config.toml
baseURL = "https://your_domain.com/"
languageCode = "en"
```
The next step is to configure the language settings. Although Blowfish supports multilingual setups, for now, just configure the main language.
Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`.
{{< alert >}}
Note that the language code in the language config filename should match the `languageCode` setting in `config.toml`.
{{< /alert >}}
```toml
# config/_default/languages.en.toml
title = "My awesome website"
[author]
name = "My name"
image = "img/author.jpg"
headline = "A generally awesome human"
bio = "A little bit about me"
links = [
{ twitter = "https://twitter.com/username" }
]
```
The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed.
If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section.
## Colour schemes
Blowfish ships with a number of colour schemes out of the box. To change the scheme, simply set the `colorScheme` theme parameter. Valid options are `blowfish` (default), `avocado`, `fire`, `ocean`, `forest`, `princess`, `neon`, `bloody`, `terminal`, `marvel`, `noir`, `autumn`, `congo`, and`slate`.
```toml
# config/_default/params.toml
colorScheme = "blowfish"
```
Blowfish defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference). The three main colours are used for the header, footer, and accent colours. Here are the colors for each scheme:
#### Blowfish (default)
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Avocado
{{< swatches "#78716c" "#84cc16" "#10b981" >}}
#### Fire
{{< swatches "#78716c" "#f97316" "#f43f5e" >}}
#### Ocean
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Forest
{{< swatches "#658c86" "#3bf5df" "#06d45c" >}}
#### Princess
{{< swatches "#8c658c" "#f53bf2" "#7706d4" >}}
#### Neon
{{< swatches "#8338ec" "#ff006e" "#3a86ff" >}}
#### Bloody
{{< swatches "#d90429" "#8d99ae" "#457b9d" >}}
#### Terminal
{{< swatches "#004b23" "#38b000" "#1a759f" >}}
#### Marvel
{{< swatches "#2541b2" "#d81159" "#ffbc42" >}}
#### Noir
{{< swatches "#5c6b73" "#9db4c0" "#00a5cf" >}}
#### Autumn
{{< swatches "#0a9396" "#ee9b00" "#bb3e03" >}}
#### Congo
{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}}
#### Slate
{{< swatches "#6B7280" "#64748b" "#6B7280" >}}
Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details.
## Organising content
By default, Blowfish doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio.
Here's a quick overview of a basic Blowfish project. All content is placed within the `content` folder:
```shell
.
├── assets
│ └── img
│ └── author.jpg
├── config
│ └── _default
├── content
│ ├── _index.md
│ ├── about.md
│ └── posts
│ ├── _index.md
│ ├── first-post.md
│ └── another-post
│ ├── aardvark.jpg
│ └── index.md
└── themes
└── blowfish
```
It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information.
Blowfish is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_.
Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuration file:
```toml
# config/_default/taxonomies.toml
topic = "topics"
```
This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies.
When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.
## Menus
Blowfish has two menus that can be customised to suit the content and layout of your site. The `main` menu appears in the site header and the `footer` menu appears at the bottom of the page just above the copyright notice.
Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use.
```toml
# config/_default/menus.toml
[[main]]
name = "Blog"
pageRef = "posts"
weight = 10
[[main]]
name = "Topics"
pageRef = "topics"
weight = 20
[[main]]
pre = "github"
name = "GitHub"
url = "https://github.com/nunocoracao/blowfish"
weight = 30
[[main]]
identifier = "github2"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 40
[[footer]]
name = "Privacy"
url = "https://external-link"
```
The `name` parameter specifies the text that is used in the menu link. You can also optionally provide a `title` which fills the HTML title attribute for the link.
The `pageRef` parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the `url` parameter can be used.
The `pre` parameter allows you to place an icon from [Blowfish's icon set]({{< ref "samples/icons" >}}) on the menu entry. This parameter can be used with `name` parameter or by itself. If you want to use multiple menu entries with just icons please set the `identifier`parameter otherwise Hugo will default to the naming tag as the id and probably not display all the menu entries.
Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`.
Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.
### Nested menus
The theme also supports nested menus. In order to use them you just need to define a parent entry in `menu.toml` and its sub-menus using the `parent` parameter to reference the parent. All properties can be used for sub-menus. `pageRef` and `url` can also be used in the parent entry. Nested menus are only available in the main menu not for the footer.
```toml
# config/_default/menus.toml
[[main]]
name = "Parent"
weight = 20
[[main]]
name = "sub-menu 1"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 2"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 3"
parent = "Parent"
pre = "github"
pageRef = "samples"
weight = 20
```
### Sub-Navigation menu
Additionally, you can also configure a sub-navigation menu. Just define new menu entries as `subnavigation` in `menus.toml`.
This will render a second line with sub-categories below the main header menu.
```toml
# config/_default/menus.toml
[[subnavigation]]
name = "An interesting topic"
pageRef = "tags/interesting-topic"
weight = 10
[[subnavigation]]
name = "My Awesome Category"
pageRef = "categories/awesome"
weight = 20
```
The default `name` is the `pageRef` title cased.
## Thumbnails & Backgrounds
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported but we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then be able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is also a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see how you can do it.
Additionally, Blowfish also supports background hero images in articles and lists. In order to use a different image than the featured one, add an image file in which the name starts with `background*`.
## Detailed configuration
The steps above are the bare minimum configuration. If you now run `hugo server` you will be presented with a blank Blowfish website. Detailed configuration is covered in the [Configuration]({{< ref "configuration" >}}) section.

View file

@ -1,272 +0,0 @@
---
title: "入门指南"
date: 2020-08-15
draft: false
description: "所有在你要使用 Blowfish 主题搭建网站之前的准备工作"
slug: "getting-started"
tags: ["安装", "文档"]
series: ["部署教程"]
series_order: 3
---
{{< alert >}}
本节内容需要已经阅读了 [安装 Blowfish 主题]({{< ref "docs/installation" >}})。
{{< /alert >}}
</br>
{{< alert "fire" >}}
我们刚刚推出了一个 CLI 工具,用来帮助你快速开始 Blowfish。 它将帮助你安装和配置 Blowfish 主题。 可以使用以下命令全局安装 CLI 工具:
```bash
npx blowfish-tools
```
{{< /alert >}}
Blowfish 中的配置文件中包含了主题需要的所有可能的设置选项。但默认情况下大多数设置都是被注释的,你只需要取消注释就可以激活或者修改设定选项。
## 基础设置
在刚刚安装完成,创建内容之前,有几个设置需要关注。从 `config.toml` 开始,设置 `baseURL``languageCode` 参数。`languageCode`参数是用来指定你创作内容的主要语言。
```toml
# config/_default/config.toml
baseURL = "https://your_domain.com/"
languageCode = "en"
```
下一步是设置语言。尽管 Blowfish 支持多语言,但是 `config.toml` 只能配置一个主语言。
`config/_default` 文件夹中找到 `languages.en.toml`。如果你的主语言是英语,你可以直接使用此文件。否则需要重命名为主语言对应的文件名。例如,如果主语言是法语,那么需要将文件命名为 `languages.fr.toml`
{{< alert >}}
注意:语言配置文件名中的语言代码需要与 `config.toml``languageCode` 相匹配。
{{< /alert >}}
```toml
# config/_default/languages.en.toml
title = "My awesome website"
[author]
name = "My name"
image = "img/author.jpg"
headline = "A generally awesome human"
bio = "A little bit about me"
links = [
{ twitter = "https://twitter.com/username" }
]
```
`[author]` 属性决定了作者信息的展示方式。 作者的图片信息应该放在 `assets/` 文件夹中。作者相关的链接将会按照排列顺序依次展示。
如果你还需要额外属性,在配置部分会有详细说明。
## 颜色方案
Blowfish 主题中包含了数个颜色方案,这些方案可以快速使用。如果需要修改方案,只需要简单的设置 `colorScheme` 参数即可。`colorScheme` 可选的值有`blowfish` (默认)、`avocado`、`fire`、`ocean`、`forest`、`princess`、`neon`、`bloody`、`terminal`、`marvel`、`noir`、`autumn`、`congo`和`slate`。
```toml
# config/_default/params.toml
colorScheme = "blowfish"
```
Blowfish 定义了一种由三种主色调构成的配色方案每种主色调包含了10种子色调10个色调是借鉴 [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference) 中的定义。Blowfish 中定义了多个预置的三色主题,以便在整个主题中使用。
#### Blowfish默认
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Avocado
{{< swatches "#78716c" "#84cc16" "#10b981" >}}
#### Fire
{{< swatches "#78716c" "#f97316" "#f43f5e" >}}
#### Ocean
{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
#### Forest
{{< swatches "#658c86" "#3bf5df" "#06d45c" >}}
#### Princess
{{< swatches "#8c658c" "#f53bf2" "#7706d4" >}}
#### Neon
{{< swatches "#8338ec" "#ff006e" "#3a86ff" >}}
#### Bloody
{{< swatches "#d90429" "#8d99ae" "#457b9d" >}}
#### Terminal
{{< swatches "#004b23" "#38b000" "#1a759f" >}}
#### Marvel
{{< swatches "#2541b2" "#d81159" "#ffbc42" >}}
#### Noir
{{< swatches "#5c6b73" "#9db4c0" "#00a5cf" >}}
#### Autumn
{{< swatches "#0a9396" "#ee9b00" "#bb3e03" >}}
#### Congo
{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}}
#### Slate
{{< swatches "#6B7280" "#64748b" "#6B7280" >}}
这些是内置的配色方案,你也可以去自定义这一部分,请参阅 [高级自定义]({{< ref "advanced-customisation#colour-schemes" >}}) 。
## 整理内容
默认情况下, Blowfish 不强制你使用特定类型的内容。这样你可以随意自定义你想要的内容。你可能喜欢用作静态网站页面、博客帖子,或作为作品集中的某个项目。
这是基本 Blowfish 项目的快速概览。所有内容都放在 `content` 文件夹中:
```shell
.
├── assets
│ └── img
│ └── author.jpg
├── config
│ └── _default
├── content
│ ├── _index.md
│ ├── about.md
│ └── posts
│ ├── _index.md
│ ├── first-post.md
│ └── another-post
│ ├── aardvark.jpg
│ └── index.md
└── themes
└── blowfish
```
一定要熟练掌握在 Hugo 中组织你想要的内容,此主题也旨在充分利用 Hugo 中页面页面捆绑的逻辑。请阅读 [Hugo 官方文档](https://gohugo.io/content-management/organization/) 以获取更多内容。
Blowfish 在分类方法上面也非常灵活。有的人喜欢使用标签_tags_和类别_categories_来分组内容而有的人喜欢用话题_topics_
Hugo 默认是使用帖子、标签和类别,这三种可以开箱即用的。但如果你希望自定义,那么可以创建 `taxonomies.toml` 配置文件来实现:
```toml
# config/_default/taxonomies.toml
topic = "topics"
```
这将把默认的标签和分类替换成话题。有关 Hugo 中命名分类法的更多内容,可以参考 [Hugo 分类方法](https://gohugo.io/content-management/taxonomies/)。
当你创建了一个新的分类法时,需要调整网站上的导航链接,以确保新分类可以指向正确的内容,下面会详细介绍。
## 菜单
Blowfish 有两个可以定制的菜单,以此来适配网站中的内容和布局。`main`菜单出现在网站头部,`footer`菜单出现在页面底部和版权声明上方。
这两个菜单都是配置在 `menus.en.toml` 文件中。与语言配置文件类似,如果你希望使用另一种语言,请重命名这个文件并将 `en` 替换为你所希望的语言代码。
```toml
# config/_default/menus.toml
[[main]]
name = "Blog"
pageRef = "posts"
weight = 10
[[main]]
name = "Topics"
pageRef = "topics"
weight = 20
[[main]]
pre = "github"
name = "GitHub"
url = "https://github.com/nunocoracao/blowfish"
weight = 30
[[main]]
identifier = "github2"
pre = "github"
url = "https://github.com/nunocoracao/blowfish"
weight = 40
[[footer]]
name = "Privacy"
url = "https://external-link"
```
`name` 参数用于指定菜单中的文本。你还可以选择性的提供一个 `title` 标题,它将会被填充到链接的 HTML 代码的 `title` 属性中。
`pageRef` 参数用于引用 Hugo 的分类。这是配置菜单最简单的方法,你无需引用任何 Hugo 内容项,它会自动构建正确的链接。如果你需要链接到外部 URL那么可以使用 `url` 参数。
`pre` 参数用于设置菜单条目上的图标,这个图标需要是 [Blowfish 图标集]({{< ref "samples/icons" >}})中的一个。这个参与可以和 `name` 一起使用,也可以单独使用。如果你指向展示图标,请设置 `identifier` 参数,否则 Hugo 将默认使用 `name` 作为 id可能不会显示所有菜单项。
菜单中的多个链接将会根据 `weight` 权重参数进行从低到高排序,如果权重值一样那么会按照 `name` 字母顺序排序。
这两个菜单都是完全可选的,如果不需要也可以注释掉。你可以使用文件中提供的模板作为示例。
### 嵌套菜单
Blowfish 还支持嵌套菜单。你需要在`menu.toml` 中定义一个父级菜单项及其子菜单,使用 `parent` 可以指定子菜单项的父级。在上面菜单部分提到的所有参数一样适用于子菜单项,同样地,`pageRef` 和 `url` 也可以在父菜单项中使用。还需要注意一点,嵌套菜单只能在 `main` 菜单中可用,即网站头部的菜单。
```toml
# config/_default/menus.toml
[[main]]
name = "Parent"
weight = 20
[[main]]
name = "sub-menu 1"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 2"
parent = "Parent"
pageRef = "samples"
weight = 20
[[main]]
name = "sub-menu 3"
parent = "Parent"
pre = "github"
pageRef = "samples"
weight = 20
```
### 子导航菜单
此外,你可以设置一个子导航菜单。只需要在 `menus.toml` 中将新的菜单项定义为 `subnavigation` 即可。
这将在主菜单下面展示第二行,其中包含子类别项。
```toml
# config/_default/menus.toml
[[subnavigation]]
name = "An interesting topic"
pageRef = "tags/interesting-topic"
weight = 10
[[subnavigation]]
name = "My Awesome Category"
pageRef = "categories/awesome"
weight = 20
```
默认的 `name``pageRef` 的首字母大写。
## 缩略图 & 背景
Blowfish 的创立开端旨在便于为文章添加视觉效果。如果你熟悉 Hugo 的文章结构,只需要在你文章所在的文件夹中,放置一个以`feature*`开头的图像文件Blowfish支持所有格式的文件但更推荐使用 `.png``.jpg`。就这样Blowfish 就能够将图像文件作为文章的缩略图,而且能够在社交平台的 `<a target="_blank" href="https://oembed.com/">oEmbed</a>` 卡片中使用。
[这里]({{< ref "thumbnails" >}}) 有一个指南,提供了个人更多的内容和[示例]({{< ref "thumbnail_sample" >}})。如果你想看看具体如何操作可以看这里。
Blowfish 还支持在文章和列表中使用背景图。为了使与缩略图不同,可以添加一个名为 `background*` 开头的图像文件。当然如果你没有设置背景图片Blowfish 会默认使用缩略图作为背景图。
## 详细配置
上面的步骤介绍了最基本的配置。如果你现在运行 `hugo server`,你将会看到一个空白的 Blowfish 网站。更加详细的内容在[配置]({{< ref "configuration" >}})中介绍。

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 85 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 198 KiB

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

View file

@ -1,146 +0,0 @@
<svg id="canvas" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="0 0 600 600"><rect width="600" height="600" fill="transparent"></rect><mask id="mask" mask-type="alpha" maskUnits="userSpaceOnUse"><rect transform="translate(0, 0)" width="600" height="600" fill="white"></rect></mask><svg><path transform="translate(0, 0 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><path transform="translate(0, 3600 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="
translate(0, 120)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(0, 10800 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(0,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(0,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#03045e" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(0, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(0, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8"></circle></svg><svg><path transform="translate(0,360) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(0,360) translate(30,30) rotate(90) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(0, 25200 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(0, 480)
" fill="
#0077b6
"></circle></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(0, 540)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(3600, 0 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="
translate(60, 60)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="
translate(60, 120)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(3600, 10800 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><path transform="translate(3600, 14400 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><path transform="
translate(60, 300)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(60, 360)
" fill="
#03045e
"></circle></svg><svg><path transform="translate(60,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(60,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(60,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(60,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(3600, 32400 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#03045e"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 0)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(120,60) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0V0z"></path><path transform="translate(120,60) translate(30,30) rotate(180) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 120)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(120, 180) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(120, 180) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)" fill="#03045e" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)" fill="#00b4d8"></circle></svg><svg><path transform="translate(7200, 18000 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="translate(7200, 21600 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 420)
" fill="
#023e8a
"></circle></svg><svg><path transform="
translate(120, 480)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(120, 540)
" fill="
#00b4d8
"></circle></svg><svg><path transform="translate(10800, 0 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="
translate(180, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(180,120) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(180,120) translate(30,30) rotate(90) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(180, 180)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(180, 240)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(180,300) translate(30,30) rotate(0) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(180,300) translate(30,30) rotate(0) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(180, 360)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><path transform="
translate(180, 420)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="
translate(180, 480)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="translate(10800, 32400 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="translate(14400, 0 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0077b6"></path></svg><svg><path transform="translate(240, 60) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(240, 60) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="
translate(240, 120)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><path transform="
translate(240, 180)
" d="M0 0h60v60H0z" fill="
#00b4d8"></path></svg><svg><path transform="translate(14400, 14400 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#caf0f8"></path></svg><svg><path transform="
translate(240, 300)
" d="M0 0h60v60H0z" fill="
#0096c7"></path></svg><svg><path transform="translate(240, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(240, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4"></circle></svg><svg><path transform="translate(240,420) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0V0z"></path><path transform="translate(240,420) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(240,480) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(240,480) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(240, 540)
" fill="
#90e0ef
"></circle></svg><svg><path transform="translate(18000, 0 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0077b6"></path></svg><svg><path transform="
translate(300, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(18000, 7200 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#ade8f4"></path></svg><svg><path transform="
translate(300, 180)
" d="M0 0h60v60H0z" fill="
#caf0f8"></path></svg><svg><path transform="translate(300,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(300,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(300, 300)
" d="M0 0h60v60H0z" fill="
#03045e"></path></svg><svg><path transform="translate(18000, 21600 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#48cae4"></path></svg><svg><path transform="
translate(300, 420)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(18000, 28800 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><path transform="translate(300,540) translate(30,30) rotate(0) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(300,540) translate(30,30) rotate(0) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(360,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M60 0v60H0V0z"></path><path transform="translate(360,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 60)
" fill="
#caf0f8
"></circle></svg><svg><path transform="translate(360,120) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0V0z"></path><path transform="translate(360,120) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(360, 180)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="translate(360,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0V0z"></path><path transform="translate(360,240) translate(30,30) rotate(270) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(360, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(360, 300) translate(30,30) rotate(180) translate(-30,-30)" fill="#023e8a"></circle></svg><svg><path transform="
translate(360, 360)
" d="M0 0h60v60H0z" fill="
#ade8f4"></path></svg><svg><path transform="translate(360,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0V0z"></path><path transform="translate(360,420) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 480)
" fill="
#ade8f4
"></circle></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(360, 540)
" fill="
#ade8f4
"></circle></svg><svg><path transform="translate(420,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0V0z"></path><path transform="translate(420,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#0096c7" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 3600 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#0096c7"></path></svg><svg><path transform="
translate(420, 120)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="translate(420,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#0077b6" d="M60 0v60H0V0z"></path><path transform="translate(420,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 14400 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#48cae4"></path></svg><svg><path transform="translate(420,300) translate(30,30) rotate(180) translate(-30,-30)" fill="#00b4d8" d="M60 0v60H0V0z"></path><path transform="translate(420,300) translate(30,30) rotate(180) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(25200, 21600 translate(30,30) rotate(180) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#023e8a"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(420, 420)
" fill="
#023e8a
"></circle></svg><svg><path transform="translate(420,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0V0z"></path><path transform="translate(420,480) translate(30,30) rotate(90) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(420, 540)
" d="M0 0h60v60H0z" fill="
#ade8f4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(480, 0)
" fill="
#03045e
"></circle></svg><svg><path transform="
translate(480, 60)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(28800, 7200 translate(30,30) rotate(270) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(480,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#48cae4" d="M60 0v60H0V0z"></path><path transform="translate(480,180) translate(30,30) rotate(90) translate(-30,-30)" fill="#ade8f4" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="
translate(480, 240)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><path transform="
translate(480, 300)
" d="M0 0h60v60H0z" fill="
#90e0ef"></path></svg><svg><path transform="translate(480, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#ade8f4" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(480, 360) translate(30,30) rotate(270) translate(-30,-30)" fill="#03045e"></circle></svg><svg><path transform="translate(480,420) translate(30,30) rotate(180) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(480,420) translate(30,30) rotate(180) translate(-30,-30)" fill="#caf0f8" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(480, 480)
" fill="
#03045e
"></circle></svg><svg><path transform="translate(28800, 32400 translate(30,30) rotate(90) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#00b4d8"></path></svg><svg><path transform="translate(540,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#90e0ef" d="M60 0v60H0V0z"></path><path transform="translate(540,0) translate(30,30) rotate(270) translate(-30,-30)" fill="#023e8a" d="M60 0v60H0C0 26.863 26.863 0 60 0z"></path></svg><svg><path transform="translate(540, 60) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 60) translate(30,30) rotate(270) translate(-30,-30)" fill="#0077b6"></circle></svg><svg><path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)" fill="#90e0ef" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7"></circle></svg><svg><path transform="translate(32400, 10800 translate(30,30) rotate(0) translate(-30,-30)" d="M0 60C33.1371 60 60 33.1371 60 5.24537e-06L5.24537e-06 0L0 60Z" fill="#90e0ef"></path></svg><svg><path transform="translate(540, 240) translate(30,30) rotate(90) translate(-30,-30)" fill="#0096c7" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 240) translate(30,30) rotate(90) translate(-30,-30)" fill="#0077b6"></circle></svg><svg><path transform="
translate(540, 300)
" d="M0 0h60v60H0z" fill="
#023e8a"></path></svg><svg><path transform="translate(540, 360) translate(30,30) rotate(0) translate(-30,-30)" fill="#00b4d8" d="M0 0h60v60H0z"></path><circle cx="30" cy="30" r="30" transform="translate(540, 360) translate(30,30) rotate(0) translate(-30,-30)" fill="#00b4d8"></circle></svg><svg><path transform="
translate(540, 420)
" d="M0 0h60v60H0z" fill="
#0077b6"></path></svg><svg><path transform="
translate(540, 480)
" d="M0 0h60v60H0z" fill="
#48cae4"></path></svg><svg><circle cx="30" cy="30" r="30" transform="
translate(540, 540)
" fill="
#0096c7
"></circle></svg></svg>

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 737 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 811 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 892 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 KiB

View file

@ -1,89 +0,0 @@
---
title: "Homepage Layout"
date: 2020-08-13
draft: false
description: "Configuring the homepage layout in the Blowfish theme."
slug: "homepage-layout"
tags: ["homepage", "layouts", "docs"]
series: ["Documentation"]
series_order: 5
---
Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.
The layout of the homepage is controlled by the `homepage.layout` setting in the `params.toml` configuration file. Additionally, all layouts have the option to include a listing of [recent articles](#recent-articles).
## Profile layout
The default layout is the profile layout, which is great for personal websites and blogs. It puts the author's details front and centre by providing an image and links to social profiles.
<img class="thumbnailshadow" src="img/home-profile.png"/>
The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details.
Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.
To enable the Profile layout, set `homepage.layout = "profile"` in the `params.toml` configuration file.
## Page layout
The page layout is simply a normal content page that displays your Markdown content. It's great for static websites and provides a lot of flexibility.
<img class="thumbnailshadow" src="img/home-page.png"/>
To enable the Page layout, set `homepage.layout = "page"` in the `params.toml` configuration file.
## Hero layout
The hero layout brings together ideas from the profile and card layouts. This one not only displays information on the author of the site but it also loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-hero.png"/>
To enable the Hero layout, set `homepage.layout = "hero"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Background layout
The background layout is a more smooth version of the hero layout. As in the Hero layout, this one also displays both information on the author of the site and loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-background.png"/>
To enable the Background layout, set `homepage.layout = "background"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Card layout
The card layout is an extension of the page layout. It provides the same level of flexibility by also displaying your markdown content and adds a card image to display visual content.
<img class="thumbnailshadow" src="img/home-card.png"/>
To enable the Card layout, set `homepage.layout = "card"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Custom layout
If the built-in homepage layouts aren't sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.
To enable the Custom layout, set `homepage.layout = "custom"` in the `params.toml` configuration file.
With the configuration value set, create a new `custom.html` file and place it in `layouts/partials/home/custom.html`. Now whatever is in the `custom.html` file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.
To include [recent articles](#recent-articles) on the custom layout, use the `recent-articles/main.html` partial.
As an example, the [homepage]({{< ref "/" >}}) on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the [GitHub repo](https://github.com/nunocoracao/blowfish/blob/main/exampleSite/layouts/partials/home/custom.html) to see how it works.
## Recent articles
All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the `homepage.showRecent` setting to `true` in the `params.toml` configuration file.
<img class="thumbnailshadow" src="img/home-list.png"/>
The articles listed in this section are derived from the `mainSections` setting which allows for whatever content types you are using on your website. For instance, if you had content sections for _posts_ and _projects_ you could set this setting to `["posts", "projects"]` and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: `["blog"]`.
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported bue we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see an example.
## Card Gallery
Blowfish also supports displaying the standard lists of articles as card galleries. You can config this both for the recent section in the homepage and for lists of articles across your website. For homepage you can use `homepage.cardView` and `homepage.cardViewScreenWidth`; and for lists use `list.cardView` and `list.cardViewScreenWidth`. Check the [Configuration docs]({{< ref "configuration" >}}) for more details, and the homepage for a live demo.

View file

@ -1,89 +0,0 @@
---
title: "Homepage Layout"
date: 2020-08-13
draft: false
description: "Configuring the homepage layout in the Blowfish theme."
slug: "homepage-layout"
tags: ["homepage", "layouts", "docs"]
series: ["Documentation"]
series_order: 5
---
Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.
The layout of the homepage is controlled by the `homepage.layout` setting in the `params.toml` configuration file. Additionally, all layouts have the option to include a listing of [recent articles](#recent-articles).
## Profile layout
The default layout is the profile layout, which is great for personal websites and blogs. It puts the author's details front and centre by providing an image and links to social profiles.
<img class="thumbnailshadow" src="img/home-profile.png"/>
The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details.
Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.
To enable the Profile layout, set `homepage.layout = "profile"` in the `params.toml` configuration file.
## Page layout
The page layout is simply a normal content page that displays your Markdown content. It's great for static websites and provides a lot of flexibility.
<img class="thumbnailshadow" src="img/home-page.png"/>
To enable the Page layout, set `homepage.layout = "page"` in the `params.toml` configuration file.
## Hero layout
The hero layout brings together ideas from the profile and card layouts. This one not only displays information on the author of the site but it also loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-hero.png"/>
To enable the Hero layout, set `homepage.layout = "hero"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Background layout
The background layout is a more smooth version of the hero layout. As in the Hero layout, this one also displays both information on the author of the site and loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-background.png"/>
To enable the Background layout, set `homepage.layout = "background"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Card layout
The card layout is an extension of the page layout. It provides the same level of flexibility by also displaying your markdown content and adds a card image to display visual content.
<img class="thumbnailshadow" src="img/home-card.png"/>
To enable the Card layout, set `homepage.layout = "card"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Custom layout
If the built-in homepage layouts aren't sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.
To enable the Custom layout, set `homepage.layout = "custom"` in the `params.toml` configuration file.
With the configuration value set, create a new `custom.html` file and place it in `layouts/partials/home/custom.html`. Now whatever is in the `custom.html` file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.
To include [recent articles](#recent-articles) on the custom layout, use the `recent-articles/main.html` partial.
As an example, the [homepage]({{< ref "/" >}}) on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the [GitHub repo](https://github.com/nunocoracao/blowfish/blob/main/exampleSite/layouts/partials/home/custom.html) to see how it works.
## Recent articles
All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the `homepage.showRecent` setting to `true` in the `params.toml` configuration file.
<img class="thumbnailshadow" src="img/home-list.png"/>
The articles listed in this section are derived from the `mainSections` setting which allows for whatever content types you are using on your website. For instance, if you had content sections for _posts_ and _projects_ you could set this setting to `["posts", "projects"]` and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: `["blog"]`.
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported bue we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see an example.
## Card Gallery
Blowfish also supports displaying the standard lists of articles as card galleries. You can config this both for the recent section in the homepage and for lists of articles across your website. For homepage you can use `homepage.cardView` and `homepage.cardViewScreenWidth`; and for lists use `list.cardView` and `list.cardViewScreenWidth`. Check the [Configuration docs]({{< ref "configuration" >}}) for more details, and the homepage for a live demo.

View file

@ -1,89 +0,0 @@
---
title: "Homepage Layout"
date: 2020-08-13
draft: false
description: "Configuring the homepage layout in the Blowfish theme."
slug: "homepage-layout"
tags: ["homepage", "layouts", "docs"]
series: ["Documentation"]
series_order: 5
---
Blowfish provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.
The layout of the homepage is controlled by the `homepage.layout` setting in the `params.toml` configuration file. Additionally, all layouts have the option to include a listing of [recent articles](#recent-articles).
## Profile layout
The default layout is the profile layout, which is great for personal websites and blogs. It puts the author's details front and centre by providing an image and links to social profiles.
<img class="thumbnailshadow" src="img/home-profile.png"/>
The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details.
Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.
To enable the Profile layout, set `homepage.layout = "profile"` in the `params.toml` configuration file.
## Page layout
The page layout is simply a normal content page that displays your Markdown content. It's great for static websites and provides a lot of flexibility.
<img class="thumbnailshadow" src="img/home-page.png"/>
To enable the Page layout, set `homepage.layout = "page"` in the `params.toml` configuration file.
## Hero layout
The hero layout brings together ideas from the profile and card layouts. This one not only displays information on the author of the site but it also loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-hero.png"/>
To enable the Hero layout, set `homepage.layout = "hero"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Background layout
The background layout is a more smooth version of the hero layout. As in the Hero layout, this one also displays both information on the author of the site and loads your markdown beneath it.
<img class="thumbnailshadow" src="img/home-background.png"/>
To enable the Background layout, set `homepage.layout = "background"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Card layout
The card layout is an extension of the page layout. It provides the same level of flexibility by also displaying your markdown content and adds a card image to display visual content.
<img class="thumbnailshadow" src="img/home-card.png"/>
To enable the Card layout, set `homepage.layout = "card"` and `homepage.homepageImage` in the `params.toml` configuration file.
## Custom layout
If the built-in homepage layouts aren't sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.
To enable the Custom layout, set `homepage.layout = "custom"` in the `params.toml` configuration file.
With the configuration value set, create a new `custom.html` file and place it in `layouts/partials/home/custom.html`. Now whatever is in the `custom.html` file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.
To include [recent articles](#recent-articles) on the custom layout, use the `recent-articles/main.html` partial.
As an example, the [homepage]({{< ref "/" >}}) on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the [GitHub repo](https://github.com/nunocoracao/blowfish/blob/main/exampleSite/layouts/partials/home/custom.html) to see how it works.
## Recent articles
All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the `homepage.showRecent` setting to `true` in the `params.toml` configuration file.
<img class="thumbnailshadow" src="img/home-list.png"/>
The articles listed in this section are derived from the `mainSections` setting which allows for whatever content types you are using on your website. For instance, if you had content sections for _posts_ and _projects_ you could set this setting to `["posts", "projects"]` and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: `["blog"]`.
## Thumbnails
Blowfish was built so it would be easy to add visual support to your articles. If your familiar with Hugo article structure, you just need to place an image file (almost all formats are supported bue we recommend `.png` or `.jpg`) that starts with `feature*` inside your article folder. And that's it, Blowfish will then able to both use the image as a thumbnail within your website as well as for <a target="_blank" href="https://oembed.com/">oEmbed</a> cards across social platforms.
[Here]({{< ref "thumbnails" >}}) is a guide with more info and a [sample]({{< ref "thumbnail_sample" >}}) if you want to see an example.
## Card Gallery
Blowfish also supports displaying the standard lists of articles as card galleries. You can config this both for the recent section in the homepage and for lists of articles across your website. For homepage you can use `homepage.cardView` and `homepage.cardViewScreenWidth`; and for lists use `list.cardView` and `list.cardViewScreenWidth`. Check the [Configuration docs]({{< ref "configuration" >}}) for more details, and the homepage for a live demo.

View file

@ -1,91 +0,0 @@
---
title: "主页布局"
date: 2020-08-13
draft: false
description: "在 Blowfish 主题中设置主页布局。"
slug: "homepage-layout"
tags: ["主页", "布局", "文档"]
series: ["部署教程"]
series_order: 5
---
Blowfish 提供了一个完全灵活的主页布局。你可以选择两种主要模板,并提供了额外的参数来帮助调整设计。当然,你也可以提供自己的模板,完全控制主页的内容。
主页布局由 `params.toml` 配置文件中的 `homepage.layout` 参数来控制的。此外所有布局都默认包括 [最近文章](#recent-articles)。
## 个人资料布局 (profile)
默认的布局是 profile 布局,这非常适合个人网站和博客。它将作者的详细信息置于中心位置,并附带了头像和社交平台的链接。
<img class="thumbnailshadow" src="img/home-profile.png"/>
作者信息是在语言配置文件中提供的。具体的参数详情,请参考[快速入门]({{< ref "getting-started" >}})和[语言配置]({{< ref "configuration##language-and-i18n" >}})的内容。
此外,主页内容中提供的任何 Markdown 都会显示在作者资料的下方。这对使用短代码显示简介或其他主页的自定义内容提供了更多的灵活性。
如果想要启用 profile 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "profile"`
## 页面布局page
页面布局只会简单的显示你的 Markdown 内容,这种方式非常适合静态网站,并提供了很多灵活性。
<img class="thumbnailshadow" src="img/home-page.png"/>
如果想要启用 page 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "page"`
## 英雄布局hero
英雄布局hearo组合了个人资料布局profile和卡片布局card。它不仅显示了网站作者的个人信息还在个人资料下方加载了你的 markdown 内容。
<img class="thumbnailshadow" src="img/home-hero.png"/>
如果想要启用 hero 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "hero"`
## 背景布局background
背景布局background相对于英雄布局hero更叫平滑。和英雄布局hero类似它也显示了网站作者的信息并在其下方加载 markdown 内容。
<img class="thumbnailshadow" src="img/home-background.png"/>
如果想要启用 background 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "background"``homepage.homepageImage`
## 卡片布局card
卡片模板card是在页面布局上的扩展它同样提供了灵活性。在显示了你的 markdown 内容的同时,展示了一个卡片组件中的图像。
<img class="thumbnailshadow" src="img/home-card.png"/>
如果想要启用 card 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "card"``homepage.homepageImage`
## 自定义布局custom
如果以上几个布局还没有满足你的需求,你还可以自己创建自定义布局。这样你可以基于一个空白的画布,来完全控制页面上的内容。
如果想要启用 custom 布局,请在 `params.toml` 配置文件中设置 `homepage.layout = "custom"`
配置好参数后,在 `layouts/partials/home` 目录下创建一个 `custom.html` 文件。 `custom.html` 文件中定义的任何内容都会被放置在网站主页的内容区域。你可以使用 HTML、Tailwind 或 Hugo 模板函数来定义你的布局。
如果你想在自定义布局上添加 [最近文章](#recent-articles),请使用 `recent-articles/main.html` 中的内容。
如果你想在网站[主页]({{< ref "/" >}})使用自定义布局来实现在个人资料和页面布局之间的切换。这里的[GitHub 仓库](https://github.com/nunocoracao/blowfish/blob/main/exampleSite/layouts/partials/home/custom.html)有一个例子可以参考。
## 最近文章
所有的主页布局都可以在主要内容下方显示最近文章。如果想要启用此功能,只需要在 `params.toml` 配置文件中将 `homepage.showRecent` 参数设置为 `true` 即可。
<img class="thumbnailshadow" src="img/home-list.png"/>
这部分会列举出你在 `mainSections` 参数中设置的文章列表,此参数允许你使用网站上的任何内容类型。例如,如果你想在最新文章中展示 _posts__projects_ 内容中的文章,你可以将此值设置为 `["posts", "projects"]`这两个部分中的所有文章都会填充到最近文章列表中。Blowfish 主题期望这个参数是一个数组,如果你只想设置一个部分的所有文章,你可以设置为 `["blog"]` 即可。
## 缩略图
Blowfish 为你的文章提供了视觉支持。如果你熟悉 Hugo 的文章结构,只需要在你的文章对应的文件夹中防止一个以`feature*`开头的图像文件即可,图像类型几乎支持所有格式,更推荐使用`.png` 或者 `.jpg`。这样一来Blowfish 将会在你的网站内使用该图片作为缩略图,并用在社交媒体平台上的 <a target="_blank" href="https://oembed.com/">oEmbed</a> 卡片中。
[这是]({{< ref "thumbnails" >}})有更多详细内容,并且有一个便于理解的[示例]({{< ref "thumbnail_sample" >}})。
## 卡片画廊
Blowfish 支持将标准的文章列表显示为卡片画廊,你可以在主页的最近文章和网站上的文章列表中配置这个选项。
- 对于主页可以使用 `homepage.cardView``homepage.cardViewScreenWidth` 参数
- 对于列表页可以使用 `list.cardView``list.cardViewScreenWidth` 参数
请查看 [配置文件]({{< ref "configuration" >}}) 以获取更多信息。

View file

@ -1,24 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative" width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.1520523902861448" x="0" y="0" width="665.6" height="665.6" patternUnits="userSpaceOnUse">
<g transform="scale(2.6)"><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#93dbe9" stroke-width="10" transform="translate(0 -36.57142857142857)">
<animateTransform attributeName="transform" type="translate" values="256 -36.57142857142857;0 -36.57142857142857;256 -36.57142857142857" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="0s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#689cc5" stroke-width="10" transform="translate(0 0)">
<animateTransform attributeName="transform" type="translate" values="0 0;256 0;0 0" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-1.4285714285714284s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#5e6fa3" stroke-width="10" transform="translate(0 36.57142857142857)">
<animateTransform attributeName="transform" type="translate" values="256 36.57142857142857;0 36.57142857142857;256 36.57142857142857" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-2.8571428571428568s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#3b4368" stroke-width="10" transform="translate(0 73.14285714285714)">
<animateTransform attributeName="transform" type="translate" values="0 73.14285714285714;256 73.14285714285714;0 73.14285714285714" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-4.285714285714286s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#191d3a" stroke-width="10" transform="translate(0 109.71428571428571)">
<animateTransform attributeName="transform" type="translate" values="256 109.71428571428571;0 109.71428571428571;256 109.71428571428571" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-5.7142857142857135s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#d9dbee" stroke-width="10" transform="translate(0 146.28571428571428)">
<animateTransform attributeName="transform" type="translate" values="0 146.28571428571428;256 146.28571428571428;0 146.28571428571428" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-7.142857142857142s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#b3b7e2" stroke-width="10" transform="translate(0 182.85714285714286)">
<animateTransform attributeName="transform" type="translate" values="256 182.85714285714286;0 182.85714285714286;256 182.85714285714286" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="-8.571428571428571s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path><path d="M -256 9.314285714285713 C -192 9.314285714285713 -192 2 -128 2 C -64 2 -64 9.314285714285713 2 9.314285714285713 C 64 9.314285714285713 64 2 128 2 C 192 2 192 9.314285714285713 256 9.314285714285713 L 384 384 L -384 384 L -384 9.314285714285713 Z" fill="none" stroke="#93dbe9" stroke-width="10" transform="translate(0 219.42857142857142)">
<animateTransform attributeName="transform" type="translate" values="0 219.42857142857142;256 219.42857142857142;0 219.42857142857142" keyTimes="0;0.5;1" dur="20s" repeatCount="indefinite" calcMode="spline" begin="0s" keySplines="0.5 0 0.5 1;0.5 0 0.5 1"></animateTransform>
</path></g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.1520523902861448)"></rect>
</svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

View file

@ -1,574 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="margin:auto;background:rgba(NaN, NaN, NaN, 0);display:block;z-index:1;position:relative"
width="1084" height="322" preserveAspectRatio="xMidYMid" viewBox="0 0 1084 322">
<defs>
<pattern id="pid-0.7735807359934106" x="0" y="0" width="345.6" height="345.6"
patternUnits="userSpaceOnUse">
<g transform="scale(1.35)">
<g>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-392.9466164550751"
y2="-356.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="-136.94661645507512"
y2="-100.71486810970526" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="237.6288884328494" x2="201.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="493.6288884328494" x2="457.39714008747956" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="749.6288884328494" x2="713.3971400874796" y1="119.05338354492488"
y2="155.28513189029474" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-315.78580967507213"
y2="-250.59951000952657" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="-59.78580967507213"
y2="5.400489990473432" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="244.43797352167968" x2="179.25167385613412" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="500.4379735216797" x2="435.2516738561341" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="756.4379735216796" x2="691.2516738561342" y1="196.21419032492787"
y2="261.40048999047343" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-419.1419191885881"
y2="-408.6876264533025" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="-163.14191918858808"
y2="-152.68762645330253" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="219.6724359102308" x2="209.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="475.6724359102308" x2="465.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="731.6724359102308" x2="721.2181431749452" y1="92.85808081141191"
y2="103.31237354669749" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-455.36580187080335"
y2="-414.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="-199.36580187080335"
y2="-158.51832813841827" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="112.00565118011832" x2="71.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="368.0056511801183" x2="327.15817744773324" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="624.0056511801183" x2="583.1581774477332" y1="56.63419812919665"
y2="97.48167186158173" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-386.3431893904281"
y2="-374.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="-130.3431893904281"
y2="-118.79904413070864" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="60.932966336476014" x2="49.388821076756514" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="316.932966336476" x2="305.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="572.932966336476" x2="561.3888210767565" y1="125.65681060957188"
y2="137.20095586929136" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-514.3281644464968"
y2="-445.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-258.3281644464968"
y2="-189.6299317778301" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="359.7831021245981" x2="291.08486945593137" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="615.783102124598" x2="547.0848694559314" y1="-2.328164446496814"
y2="66.37006822216988" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="103.78310212459807" x2="35.08486945593138" y1="253.67183555350317"
y2="322.3700682221699" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-345.7825853785539"
y2="-328.21892433108655" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="-89.78258537855393"
y2="-72.21892433108653" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="211.69894364075495" x2="194.13528259328754" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="467.6989436407549" x2="450.13528259328757" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="723.6989436407549" x2="706.1352825932876" y1="166.21741462144607"
y2="183.78107566891347" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-358.20462232004485"
y2="-320.4841121756778" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="-102.20462232004485"
y2="-64.48411217567781" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="44.012515207413756" x2="6.2920050630466875" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="300.01251520741374" x2="262.2920050630467" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="556.0125152074138" x2="518.2920050630466" y1="153.79537767995515"
y2="191.5158878243222" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-388.58315519083214"
y2="-314.64041065275103" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="-132.58315519083212"
y2="-58.64041065275106" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="105.49237048043514" x2="31.549625942354083" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="361.49237048043517" x2="287.54962594235406" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="617.4923704804352" x2="543.549625942354" y1="123.41684480916788"
y2="197.35958934724894" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10s"></animateTransform>
</g>
<g>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-491.54340345671585"
y2="-445.8925129343306" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="-235.54340345671582"
y2="-189.89251293433065" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="95.73622575770466" x2="50.085335235319484" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="351.7362257577047" x2="306.08533523531946" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="607.7362257577047" x2="562.0853352353195" y1="20.45659654328417"
y2="66.10748706566935" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-399.57066004520647"
y2="-362.8231936709304" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="-143.57066004520647"
y2="-106.82319367093038" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="263.34308373797757" x2="226.59561736370148" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="519.3430837379776" x2="482.5956173637015" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="775.3430837379776" x2="738.5956173637014" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="7.343083737977565" x2="-29.40438263629852" y1="112.42933995479353"
y2="149.17680632906962" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-306.8322292334449"
y2="-251.03682770553996" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="-50.83222923344488"
y2="4.963172294460037" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="29.5343611349199" x2="-26.261040392985034" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="285.5343611349199" x2="229.73895960701498" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="541.5343611349199" x2="485.738959607015" y1="205.16777076655512"
y2="260.96317229446004" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-488.69307011557567"
y2="-427.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="-232.69307011557567"
y2="-171.1575026813755" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="235.025028503587" x2="173.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="491.025028503587" x2="429.48946106938683" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="747.025028503587" x2="685.4894610693868" y1="23.306929884424335"
y2="84.84249731862451" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-301.8947818400279"
y2="-277.50857675558507" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="-45.89478184002789"
y2="-21.508576755585096" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.00990918130768" x2="200.62370409686488" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="481.00990918130765" x2="456.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="737.0099091813076" x2="712.6237040968649" y1="210.1052181599721"
y2="234.4914232444149" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-433.44104288192347"
y2="-363.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="-177.44104288192347"
y2="-107.94420654280447" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="171.55017713954658" x2="102.05334080042758" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="427.5501771395466" x2="358.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="683.5501771395466" x2="614.0533408004276" y1="78.55895711807653"
y2="148.05579345719553" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-501.35381307548454"
y2="-471.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="-245.35381307548454"
y2="-215.01705243386965" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="258.4358284744095" x2="228.09906783279462" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="514.4358284744095" x2="484.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="770.4358284744095" x2="740.0990678327946" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="2.4358284744095045" x2="-27.900932167205383" y1="10.646186924515469"
y2="40.98294756613034" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-501.848219302404"
y2="-460.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="-245.848219302404"
y2="-204.46516162532055" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="35.41624886616098" x2="-5.966808810922494" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="291.41624886616097" x2="250.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="547.416248866161" x2="506.0331911890775" y1="10.151780697595989"
y2="51.53483837467946" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-432.2099852185223"
y2="-414.37228215372727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="-176.2099852185223"
y2="-158.3722821537273" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="90.76285286976488" x2="72.92514980496989" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="346.76285286976486" x2="328.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="602.7628528697649" x2="584.9251498049699" y1="79.79001478147771"
y2="97.6277178462727" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="5s"></animateTransform>
</g>
<g>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-428.16241164724204"
y2="-410.18853258778427" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="-172.16241164724207"
y2="-154.18853258778424" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="93.6896305353637" x2="75.71575147590588" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="349.6896305353637" x2="331.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="605.6896305353637" x2="587.7157514759059" y1="83.83758835275793"
y2="101.81146741221576" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-277.4402694987808"
y2="-237.67220340720178" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="-21.440269498780822"
y2="18.327796592798222" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="207.24941141296466" x2="167.48134532138562" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="463.24941141296466" x2="423.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="719.2494114129647" x2="679.4813453213856" y1="234.55973050121918"
y2="274.3277965927982" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-450.47058961727"
y2="-401.42986850569355" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="-194.47058961727"
y2="-145.42986850569352" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="69.19671201083756" x2="20.15599089926107" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="325.1967120108376" x2="276.15599089926104" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="581.1967120108376" x2="532.155990899261" y1="61.52941038272999"
y2="110.57013149430648" stroke-width="15" stroke="#93dbe9" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-382.0608413517932"
y2="-332.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="-126.06084135179321"
y2="-76.21432137190436" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="153.36870174443493" x2="103.52218176454608" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="409.36870174443493" x2="359.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="665.3687017444349" x2="615.5221817645461" y1="129.93915864820679"
y2="179.78567862809564" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-370.2400239914425"
y2="-323.7492852305512" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="-114.24002399144254"
y2="-67.74928523055118" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="49.20494471467643" x2="2.7142059537850685" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="305.20494471467646" x2="258.71420595378504" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="561.2049447146765" x2="514.714205953785" y1="141.75997600855746"
y2="188.25071476944882" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-519.71103601744"
y2="-467.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-263.71103601744005"
y2="-211.71324951344457" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="340.6808460539986" x2="288.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="596.6808460539986" x2="544.6830595500031" y1="-7.711036017440037"
y2="44.28675048655542" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="84.6808460539986" x2="32.68305955000314" y1="248.28896398255995"
y2="300.28675048655543" stroke-width="15" stroke="#689cc5" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-402.3103840834626"
y2="-362.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="-146.31038408346262"
y2="-106.59298411979296" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="225.38342310559023" x2="185.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="481.3834231055902" x2="441.66602314192056" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="737.3834231055903" x2="697.6660231419205" y1="109.68961591653738"
y2="149.40701588020704" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-347.54024364607716"
y2="-278.2294307371681" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="-91.54024364607716"
y2="-22.229430737168116" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="172.83662370669697" x2="103.52581079778793" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="428.83662370669697" x2="359.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="684.836623706697" x2="615.5258107977879" y1="164.45975635392284"
y2="233.77056926283188" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-513.2094299494303"
y2="-498.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-257.2094299494303"
y2="-242.4634873012858" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="510.8543594952038" x2="496.10841684705935" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="766.8543594952039" x2="752.1084168470593" y1="-1.209429949430282"
y2="13.536512698714214" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<line x1="254.85435949520382" x2="240.10841684705935" y1="254.79057005056973"
y2="269.5365126987142" stroke-width="15" stroke="#5e6fa3" stroke-linecap="round"></line>
<animateTransform attributeName="transform" type="translate" values="0 0;-256 256"
keyTimes="0;1" repeatCount="indefinite" dur="10.3333333333333335s"></animateTransform>
</g>
</g>
</pattern>
</defs>
<rect x="0" y="0" width="1084" height="322" fill="url(#pid-0.7735807359934106)"></rect>
</svg>

View file

@ -1,827 +0,0 @@
<svg id="canvas" height="100%" xmlns="http://www.w3.org/2000/svg" version="1.1"
xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs"
viewBox="0 0 600 600">
<rect width="600" height="600" fill="transparent"></rect>
<mask id="mask" mask-type="alpha" maskUnits="userSpaceOnUse">
<rect transform="translate(0, 0)" width="600" height="600" fill="white"></rect>
</mask>
<svg>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 60) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(0, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(0, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#023e8a"></path>
<path transform="translate(0, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(0, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(0, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(0, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(0, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(0, 540)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(60, 0) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(60, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<rect transform="translate(60, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(60, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(60, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(60, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(60, 240)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 300)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(60, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 420)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(60, 540)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(60, 540)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 0)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(120, 0)" cx="30" cy="30" r="30" fill="#023e8a" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<rect transform="translate(120, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(120, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#ade8f4"></path>
<path transform="translate(120, 240) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(120, 300) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#48cae4" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(120, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(120, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(120, 420)" cx="30" cy="30" r="30" fill="#90e0ef"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 480) translate(30,30) rotate(180) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(120, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 0) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 0) translate(30,30) rotate(180) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="#023e8a" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(180, 120) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(180, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(180, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(180, 300) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(180, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<rect transform="translate(180, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(180, 420) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(180, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(180, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<rect transform="translate(240, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" x="0" y="0" width="60" height="60" stroke="#48cae4" stroke-width="2"></rect>
<path transform="translate(240, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" d="M0 0L60 60" stroke="#48cae4" stroke-width="2"></path>
</svg>
<svg>
<path transform="translate(240, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(240, 60)" cx="30" cy="30" r="30" fill="#0096c7"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(240, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#48cae4"></path>
<path transform="translate(240, 180) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(240, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(240, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(240, 360) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(240, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(240, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(240, 480)" cx="30" cy="30" r="30" fill="#48cae4"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(240, 540) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(300, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(300, 60)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#023e8a"></path>
<path transform="translate(300, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(300, 240) translate(30,30) rotate(270) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#48cae4"></path>
<path transform="translate(300, 300) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(300, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(360, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="#48cae4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(360, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2" d="M30 0h30v60h-30z"></path>
<path transform="translate(360, 180) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 300) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 360) translate(30,30) rotate(180) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(360, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(360, 420)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(360, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 480) translate(30,30) rotate(90) translate(-30,-30)"
fill="#0096c7" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(360, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#00b4d8"></path>
<path transform="translate(420, 0) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 60) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 120)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(420, 120)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 180) translate(30,30) rotate(90) translate(-30,-30)"
fill="#90e0ef" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(420, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 360) translate(30,30) rotate(90) translate(-30,-30)"
fill="#caf0f8" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(420, 420)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(420, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(420, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(420, 540) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(480, 0) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 60)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(480, 60)" cx="30" cy="30" r="30" fill="#03045e"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(480, 120) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 180) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(480, 240) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(480, 300)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
</svg>
<svg>
<path transform="translate(480, 360)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(480, 360)" cx="30" cy="30" r="30" fill="#caf0f8"
stroke="#48cae4" stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 420) translate(30,30) rotate(270) translate(-30,-30)"
fill="#03045e" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 480) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(480, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 0) translate(30,30) rotate(270) translate(-30,-30)"
fill="#0077b6" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(540, 60) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0096c7"></path>
<path transform="translate(540, 120) translate(30,30) rotate(90) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
<path transform="translate(540, 180) translate(30,30) rotate(0) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 240) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 300) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
<svg>
<path transform="translate(540, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 360) translate(30,30) rotate(270) translate(-30,-30)"
fill="#ade8f4" stroke="#48cae4" stroke-width="2"
d="M0 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
</svg>
<svg>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
d="M0 30C0 48.05 15.3348 60 30 60V0C15.3348 0 0 14.9129 0 30Z" stroke="#48cae4"
stroke-width="2" fill="#0077b6"></path>
<path transform="translate(540, 420) translate(30,30) rotate(180) translate(-30,-30)"
d="M60 30C60 14.9129 48.4719 0 30 0L30 60C48.4719 60 60 48.05 60 30Z" stroke="#48cae4"
stroke-width="2" fill="none"></path>
</svg>
<svg>
<path transform="translate(540, 480)" fill="none" stroke="#48cae4" stroke-width="2"
d="M0 0h60v60h-60z"></path>
<circle transform="translate(540, 480)" cx="30" cy="30" r="30" fill="none" stroke="#48cae4"
stroke-width="2"></circle>
</svg>
<svg>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2" d="M0 0h60v60h-60z"></path>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0 16.569 13.432 30 30 30v-60c-16.568 0-30 13.432-30 30z"></path>
<path transform="translate(540, 540) translate(30,30) rotate(180) translate(-30,-30)"
fill="none" stroke="#48cae4" stroke-width="2"
d="M30 30c0-16.57-13.431-30-30-30v60c16.569 0 30-13.432 30-30z"></path>
</svg>
</svg>

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -1,148 +0,0 @@
---
title: "Hosting & Deployment"
date: 2020-08-07
draft: false
description: "Learn how to deploy a Blowfish site."
slug: "hosting-deployment"
tags: ["docs", "hosting", "deployment", "github", "netlify", "render"]
series: ["Documentation"]
series_order: 14
---
There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.
Blowfish is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There's usually no special configuration required for this to work as long as the `baseURL` parameter has been configured in the `config.toml` file.
The official Hugo [Hosting and Deployment](https://gohugo.io/hosting-and-deployment/) docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.
**Choose your provider:**
- [GitHub Pages](#github-pages)
- [Netlify](#netlify)
- [Render](#render)
- [Cloudflare Pages](#cloudflare-pages)
- [Shared hosting, VPS or private web server](#shared-hosting-vps-or-private-web-server)
---
## GitHub Pages
GitHub allows hosting on [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.
The file needs to be in YAML format, placed within the `.github/workflows/` directory of your GitHub repository and named with a `.yml` extension.
{{< alert >}}
**Important:** Ensure you set the correct branch name under `branches` and in the deploy step `if` parameter to the source branch used in your project.
{{< /alert >}}
```yaml
# .github/workflows/gh-pages.yml
name: GitHub Pages
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-20.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/main' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./public
```
Push the config file to GitHub and the action should automatically run. It may fail the first time and you'll need to visit the **Settings > Pages** section of your GitHub repo to check the source is correct. It should be set to use the `gh-pages` branch.
{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source" >}}
Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.
## Netlify
To deploy to [Netlify](https://www.netlify.com), create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you'll be using.
{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}}
Then in the root of your site repository, create a `netlify.toml` file:
```toml
# netlify.toml
[build]
command = "hugo mod get -u && hugo --gc --minify -b $URL"
publish = "public"
[build.environment]
NODE_ENV = "production"
GO_VERSION = "1.16"
TZ = "UTC" # Set to preferred timezone
[context.production.environment]
HUGO_VERSION = "0.104.1"
HUGO_ENV = "production"
[context.deploy-preview.environment]
HUGO_VERSION = "0.104.1"
```
This configuration assumes you are deploying Blowfish as a Hugo module. If you have installed the theme using another method, change the build command to simply `hugo --gc --minify -b $URL`.
When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.
## Render
Deploying to [Render](https://render.com) is very straightforward and all configuration is via the Render UI.
Create a new **Static Site** and link it to your project's code repository. Then simply configure the build command to be `hugo --gc --minify` and publish directory to be `public`.
{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}}
The site will automatically build and deploy whenever you push a change to your repo.
## Cloudflare Pages
Cloudflare offers the [Pages](https://pages.cloudflare.com/) service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare's CDN. Follow their [Hugo deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) to get started.
The Rocket Loader™ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.
This problem can be fixed by disabling it:
- Go to the [Cloudflare dashboard](https://dash.cloudflare.com)
- Click on your domain name in the list
- Click _Optimization_ in the _Speed_ section
- Scroll down to _Rocket Loader™_ and disable it
Hugo sites built with Blowfish still load very quickly, even with this feature disabled.
## Shared hosting, VPS or private web server
Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.
Make sure that the `baseURL` parameter in `config.toml` is set to the full URL to the root of your website (including any sub domains or sub-folders).
Then build your site using `hugo` and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named `public`.
_If you need a hosting provider, check out [Vultr](https://www.vultr.com/?ref=8957394-8H) or [DigitalOcean](https://m.do.co/c/36841235e565). Signing up using these affiliate links will give you up to $100 in free credit so you can try the service._

View file

@ -1,148 +0,0 @@
---
title: "Hosting & Deployment"
date: 2020-08-07
draft: false
description: "Learn how to deploy a Blowfish site."
slug: "hosting-deployment"
tags: ["docs", "hosting", "deployment", "github", "netlify", "render"]
series: ["Documentation"]
series_order: 14
---
There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.
Blowfish is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There's usually no special configuration required for this to work as long as the `baseURL` parameter has been configured in the `config.toml` file.
The official Hugo [Hosting and Deployment](https://gohugo.io/hosting-and-deployment/) docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.
**Choose your provider:**
- [GitHub Pages](#github-pages)
- [Netlify](#netlify)
- [Render](#render)
- [Cloudflare Pages](#cloudflare-pages)
- [Shared hosting, VPS or private web server](#shared-hosting-vps-or-private-web-server)
---
## GitHub Pages
GitHub allows hosting on [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.
The file needs to be in YAML format, placed within the `.github/workflows/` directory of your GitHub repository and named with a `.yml` extension.
{{< alert >}}
**Important:** Ensure you set the correct branch name under `branches` and in the deploy step `if` parameter to the source branch used in your project.
{{< /alert >}}
```yaml
# .github/workflows/gh-pages.yml
name: GitHub Pages
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-20.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/main' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./public
```
Push the config file to GitHub and the action should automatically run. It may fail the first time and you'll need to visit the **Settings > Pages** section of your GitHub repo to check the source is correct. It should be set to use the `gh-pages` branch.
{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source" >}}
Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.
## Netlify
To deploy to [Netlify](https://www.netlify.com), create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you'll be using.
{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}}
Then in the root of your site repository, create a `netlify.toml` file:
```toml
# netlify.toml
[build]
command = "hugo mod get -u && hugo --gc --minify -b $URL"
publish = "public"
[build.environment]
NODE_ENV = "production"
GO_VERSION = "1.16"
TZ = "UTC" # Set to preferred timezone
[context.production.environment]
HUGO_VERSION = "0.104.1"
HUGO_ENV = "production"
[context.deploy-preview.environment]
HUGO_VERSION = "0.104.1"
```
This configuration assumes you are deploying Blowfish as a Hugo module. If you have installed the theme using another method, change the build command to simply `hugo --gc --minify -b $URL`.
When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.
## Render
Deploying to [Render](https://render.com) is very straightforward and all configuration is via the Render UI.
Create a new **Static Site** and link it to your project's code repository. Then simply configure the build command to be `hugo --gc --minify` and publish directory to be `public`.
{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}}
The site will automatically build and deploy whenever you push a change to your repo.
## Cloudflare Pages
Cloudflare offers the [Pages](https://pages.cloudflare.com/) service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare's CDN. Follow their [Hugo deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) to get started.
The Rocket Loader™ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.
This problem can be fixed by disabling it:
- Go to the [Cloudflare dashboard](https://dash.cloudflare.com)
- Click on your domain name in the list
- Click _Optimization_ in the _Speed_ section
- Scroll down to _Rocket Loader™_ and disable it
Hugo sites built with Blowfish still load very quickly, even with this feature disabled.
## Shared hosting, VPS or private web server
Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.
Make sure that the `baseURL` parameter in `config.toml` is set to the full URL to the root of your website (including any sub domains or sub-folders).
Then build your site using `hugo` and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named `public`.
_If you need a hosting provider, check out [Vultr](https://www.vultr.com/?ref=8957394-8H) or [DigitalOcean](https://m.do.co/c/36841235e565). Signing up using these affiliate links will give you up to $100 in free credit so you can try the service._

View file

@ -1,148 +0,0 @@
---
title: "Hosting & Deployment"
date: 2020-08-07
draft: false
description: "Learn how to deploy a Blowfish site."
slug: "hosting-deployment"
tags: ["docs", "hosting", "deployment", "github", "netlify", "render"]
series: ["Documentation"]
series_order: 14
---
There are many ways to deploy your Hugo website built with Blowfish. The theme is designed to be flexible in almost any deployment scenario.
Blowfish is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There's usually no special configuration required for this to work as long as the `baseURL` parameter has been configured in the `config.toml` file.
The official Hugo [Hosting and Deployment](https://gohugo.io/hosting-and-deployment/) docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.
**Choose your provider:**
- [GitHub Pages](#github-pages)
- [Netlify](#netlify)
- [Render](#render)
- [Cloudflare Pages](#cloudflare-pages)
- [Shared hosting, VPS or private web server](#shared-hosting-vps-or-private-web-server)
---
## GitHub Pages
GitHub allows hosting on [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.
The file needs to be in YAML format, placed within the `.github/workflows/` directory of your GitHub repository and named with a `.yml` extension.
{{< alert >}}
**Important:** Ensure you set the correct branch name under `branches` and in the deploy step `if` parameter to the source branch used in your project.
{{< /alert >}}
```yaml
# .github/workflows/gh-pages.yml
name: GitHub Pages
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-20.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
- name: Build
run: hugo --minify
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/main' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: gh-pages
publish_dir: ./public
```
Push the config file to GitHub and the action should automatically run. It may fail the first time and you'll need to visit the **Settings > Pages** section of your GitHub repo to check the source is correct. It should be set to use the `gh-pages` branch.
{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source" >}}
Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.
## Netlify
To deploy to [Netlify](https://www.netlify.com), create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you'll be using.
{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}}
Then in the root of your site repository, create a `netlify.toml` file:
```toml
# netlify.toml
[build]
command = "hugo mod get -u && hugo --gc --minify -b $URL"
publish = "public"
[build.environment]
NODE_ENV = "production"
GO_VERSION = "1.16"
TZ = "UTC" # Set to preferred timezone
[context.production.environment]
HUGO_VERSION = "0.104.1"
HUGO_ENV = "production"
[context.deploy-preview.environment]
HUGO_VERSION = "0.104.1"
```
This configuration assumes you are deploying Blowfish as a Hugo module. If you have installed the theme using another method, change the build command to simply `hugo --gc --minify -b $URL`.
When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.
## Render
Deploying to [Render](https://render.com) is very straightforward and all configuration is via the Render UI.
Create a new **Static Site** and link it to your project's code repository. Then simply configure the build command to be `hugo --gc --minify` and publish directory to be `public`.
{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}}
The site will automatically build and deploy whenever you push a change to your repo.
## Cloudflare Pages
Cloudflare offers the [Pages](https://pages.cloudflare.com/) service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare's CDN. Follow their [Hugo deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) to get started.
The Rocket Loader™ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.
This problem can be fixed by disabling it:
- Go to the [Cloudflare dashboard](https://dash.cloudflare.com)
- Click on your domain name in the list
- Click _Optimization_ in the _Speed_ section
- Scroll down to _Rocket Loader™_ and disable it
Hugo sites built with Blowfish still load very quickly, even with this feature disabled.
## Shared hosting, VPS or private web server
Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.
Make sure that the `baseURL` parameter in `config.toml` is set to the full URL to the root of your website (including any sub domains or sub-folders).
Then build your site using `hugo` and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named `public`.
_If you need a hosting provider, check out [Vultr](https://www.vultr.com/?ref=8957394-8H) or [DigitalOcean](https://m.do.co/c/36841235e565). Signing up using these affiliate links will give you up to $100 in free credit so you can try the service._

Some files were not shown because too many files have changed in this diff Show more