Added and internalized Pico theme for customization

This commit is contained in:
Aron Petau 2025-04-29 20:02:54 +02:00
parent 8e7f72ce8b
commit 8c90bb2dfc
71 changed files with 4587 additions and 0 deletions

View file

@ -0,0 +1,52 @@
name: Deploy Zola with GitHub Pages
on:
push:
branches: ["main"]
env:
ZOLA_VER: "v0.18.0"
permissions:
contents: read
pages: write
id-token: write
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: get Zola binary
run: |
curl -LJO https://github.com/getzola/zola/releases/download/${ZOLA_VER}/zola-${ZOLA_VER}-x86_64-unknown-linux-gnu.tar.gz
tar -xvf zola-${ZOLA_VER}-x86_64-unknown-linux-gnu.tar.gz
chmod +x zola
- name: Build Zola site
run: ./zola build
# - name: Minify
# uses: kuznetsov17/minify@v1.3
# id: minify-site
# with:
# dir: 'public'
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'public/'
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

21
themes/pico/LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 kuznetsov17
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

134
themes/pico/README.md Normal file
View file

@ -0,0 +1,134 @@
# Configuration
# General
I am not the best webmaster, but should be somewhat responsive.
I intentionally using the bigger fonts to make, feel free to change it in main.css
# Light mode
Now light mode also supported.
# Important
Please make sure to set up your base_url with trailing slash:
```toml
base_url = "https://kuznetsov17.github.io/pico/"
```
# Comments
Theme supports [Giscuss](https://giscuss.app) for comments. The configuration is done via config.toml. Here you can see the example section used for this page deployment:
```toml
[extra.giscus]
data_repo="kuznetsov17/pico"
data_repo_id="R_kgDOLIfXYA"
data_category="General"
data_category_id="DIC_kwDOLIfXYM4Ccn56"
data_mapping="title"
data_strict="0"
data_reactions_enabled="0"
data_emit_metadata="0"
data_input_position="top"
data_theme="//kuznetsov17.github.io/pico/css/gs_dark.css"
data_lang="en"
crossorigin="anonymous"
nonce=""
```
# Page configurations
Customize the page blocks by setting configuration in **[extra]** section:
```toml
show_copyright = true / false # enables / disables footer with copyright
show_comments = true / false # enables / disables comments
show_shares = true / false # enables / disables section with social share buttons
show_toc = true / false # enables / disable TOC
show_date = true / false # displays publication date in page
```
# Blog
I am using this theme for my [notes](https://viku.me/notes/), or probably blog.
The section template supports pagination, tags, sorts the pages by publication date. You may see the working example [here](@/notes/_index.md)
# Search
The theme supports the search using [elasticrunrjs](http://elasticlunr.com). To enable the search, you will need the following configuration in **config.toml**:
```toml
build_search_index = true
[search]
index_format = "elasticlunr_json"
```
# config.toml extras
```toml
author = "John Doe" # author. Will be puth in page metadata
description = "Some description, if you somehow didn't set it in page / section settings"
logo_src = "images/logo.svg" # logo src
avatar_src = "images/avatar.png" # avatar src
index_page="index" # name of the index page. Should be one of top_menu to make things work
top_menu = ["index","features","notes"] # Menu items
copyright_string = "Сreated by John Doe in 2024 %YEAR% for fun." # footer content. %YEAR% will be replaced with current year
nonce = "${SOME_HASH_VALUE}" # used for JavaScript src nonce
```
# timeline
```
{% timeline() %}
[{
"title":"Lorem Ipsum Event",
"body":"Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
"date":"Jul-2023"
},
{
"title":"Lorem Ipsum event 2",
"body":"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.",
"date":"Jun-2022"
}]
{% end %}
```
# Callouts
```
{% callout(type = 'warning') %}
This is an example of **Warning** callout. [Some link](#)
{% end %}
{% callout(type = 'alert') %}
This is an example of **Alert** callout. [Some link](#)
{% end %}
{% callout(type = 'info') %}
This is an example of **Info** callout. [Some link](#)
{% end %}
```
# Mermaid
Read more on how to use mermaid in their [documentation](https://mermaid.js.org/syntax/examples.html)
```
{% mermaid() %}
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit
{% end %}
```
```
{% mermaid() %}
graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D
{% end %}
```
# Thanks to
- [Giscuss](https://giscuss.app) for excellent comments system
- [bootstrap icons](https://icons.getbootstrap.com) for great social icons
- [Urbanist Font](https://fonts.google.com/specimen/Urbanist)
- [Mulush Font](https://fonts.google.com/specimen/Mulish)
# Screenshot
![Screenshot](https://github.com/kuznetsov17/pico/blob/main/screenshot.png?raw=true)

55
themes/pico/config.toml Normal file
View file

@ -0,0 +1,55 @@
# The URL the site will be built for
base_url = "https://kuznetsov17.github.io/pico/"
minify_html = true
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = true
taxonomies = [
{name = "tags"},
]
[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = true
highlight_theme = "css"
[search]
index_format = "elasticlunr_json"
[extra]
index_page="index"
top_menu = ["index","features","notes"]
copyright_string = "Сreated by Vitaliy Kuznetsov in 2015 %YEAR% for fun. Powered by [zola](https://getzola.org/) and [pico](https://github.com/kuznetsov17/pico)."
author = "John Doe"
avatar_src = "images/avatar.png"
logo_src = "images/logo.webp"
nonce=""
description = "Some Description"
[extra.giscus]
data_repo="kuznetsov17/pico"
data_repo_id="R_kgDOLQ4cpw"
data_category="General"
data_category_id="DIC_kwDOLQ4cp84CdIjK"
data_mapping="url"
data_strict="0"
data_reactions_enabled="0"
data_emit_metadata="0"
data_input_position="bottom"
data_lang="en"
crossorigin="anonymous"
src="https://giscus.app/client.js"
[extra.footer.icons]
github = "#"
linkedin = "#"

View file

@ -0,0 +1,69 @@
+++
title = "Homepage"
description = "Page description"
# Whether to sort pages by "date", "weight", or "none". More on that below
sort_by = "none"
# Used by the parent section to order its subsections.
# Lower values have priority.
weight = 0
# Template to use to render this section page
template = "index.html"
# Apply the given template to ALL pages below the section, recursively.
# If you have several nested sections each with a page_template set, the page
# will always use the closest to itself.
# However, a page own `template` variable will always have priority.
# Not set by default
#page_template =
# How many pages to be displayed per paginated page.
# No pagination will happen if this isn't set or if the value is 0
paginate_by = 10
# If set, will be the path used by paginated page and the page number will be appended after it.
# For example the default would be page/1
paginate_path = "page"
# Whether to insert a link for each header like the ones you can see in this site if you hover one
# The default template can be overridden by creating a `anchor-link.html` in the `templates` directory
# Options are "left", "right" and "none"
insert_anchor_links = "none"
# Whether the section pages should be in the search index. This is only used if
# `build_search_index` is set to true in the config
in_search_index = true
# Whether to render that section homepage or not.
# Useful when the section is only there to organize things but is not meant
# to be used directly
render = true
# Whether to redirect when landing on that section. Defaults to not being set.
# Useful for the same reason as `render` but when you don't want a 404 when
# landing on the root section page.
# Example: redirect_to = "documentation/content/overview"
# redirect_to = "/notes/"
# Whether the section should pass its pages on to the parent section. Defaults to `false`.
# Useful when the section shouldn't split up the parent section, like
# sections for each year under a posts section.
transparent = false
# Use aliases if you are moving content but want to redirect previous URLs to the
# current one. This takes an array of path, not URLs.
aliases = []
# Your own data
[extra]
show_shares = false
index = true
+++
This is the index page of **pico** zola theme.
Lightweight and clean. Built on top of [simple grid](https://simplegrid.io)
See some useful info in [features](@/features.md) page

View file

@ -0,0 +1,140 @@
+++
title = "Features"
date = 2024-02-11
description = "Some theme features"
draft = false
[taxonomies]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "zola, theme"
show_toc = true
show_date = false
+++
# General
I am not the best webmaster, but should be somewhat responsive.
I intentionally using the bigger fonts to make, feel free to change it in main.css
# Light mode
Now light mode also supported.
# Important
Please make sure to set up your base_url with trailing slash:
```toml
base_url = "https://kuznetsov17.github.io/pico/"
```
# Comments
Theme supports [Giscuss](https://giscuss.app) for comments. The configuration is done via config.toml. Here you can see the example section used for this page deployment:
```toml
[extra.giscus]
data_repo="kuznetsov17/pico"
data_repo_id="R_kgDOLIfXYA"
data_category="General"
data_category_id="DIC_kwDOLIfXYM4Ccn56"
data_mapping="title"
data_strict="0"
data_reactions_enabled="0"
data_emit_metadata="0"
data_input_position="top"
data_theme="//kuznetsov17.github.io/pico/css/gs_dark.css"
data_lang="en"
crossorigin="anonymous"
nonce=""
```
# Page configurations
Customize the page blocks by setting configuration in **[extra]** section:
```toml
show_copyright = true / false # enables / disables footer with copyright
show_comments = true / false # enables / disables comments
show_shares = true / false # enables / disables section with social share buttons
show_toc = true / false # enables / disable TOC
show_date = true / false # displays publication date in page
```
# Blog
I am using this theme for my [notes](https://viku.me/notes/), or probably blog.
The section template supports pagination, tags, sorts the pages by publication date. You may see the working example [here](@/notes/_index.md)
# Search
The theme supports the search using [elasticrunrjs](http://elasticlunr.com). To enable the search, you will need the following configuration in **config.toml**:
```toml
build_search_index = true
[search]
index_format = "elasticlunr_json"
```
# config.toml extras
```toml
author = "John Doe" # author. Will be puth in page metadata
description = "Some description, if you somehow didn't set it in page / section settings"
logo_src = "images/logo.svg" # logo src
avatar_src = "images/avatar.png" # avatar src
index_page="index" # name of the index page. Should be one of top_menu to make things work
top_menu = ["index","features","notes"] # Menu items
copyright_string = "Сreated by John Doe in 2024 %YEAR% for fun." # footer content. %YEAR% will be replaced with current year
nonce = "${SOME_HASH_VALUE}" # used for JavaScript src nonce
```
# timeline
{% timeline() %}
[{
"title":"Lorem Ipsum Event",
"body":"Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
"date":"Jul-2023"
},
{
"title":"Lorem Ipsum event 2",
"body":"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.",
"date":"Jun-2022"
}]
{% end %}
# Callouts
{% callout(type = 'warning') %}
This is an example of **Warning** callout. [Some link](#)
{% end %}
{% callout(type = 'alert') %}
This is an example of **Alert** callout. [Some link](#)
{% end %}
{% callout(type = 'info') %}
This is an example of **Info** callout. [Some link](#)
{% end %}
# Mermaid
Read more on how to use mermaid in their [documentation](https://mermaid.js.org/syntax/examples.html)
{% mermaid() %}
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit
{% end %}
{% mermaid() %}
graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D
{% end %}

View file

@ -0,0 +1,58 @@
+++
title = "Notes"
description = "Notes"
# Whether to sort pages by "date", "weight", or "none". More on that below
sort_by = "date"
# Used by the parent section to order its subsections.
# Lower values have priority.
weight = 0
# Template to use to render this section page
template = "section.html"
page_template = "page.html"
# How many pages to be displayed per paginated page.
# No pagination will happen if this isn't set or if the value is 0
paginate_by = 5
# If set, will be the path used by paginated page and the page number will be appended after it.
# For example the default would be page/1
paginate_path = "page"
# Whether to insert a link for each header like the ones you can see in this site if you hover one
# The default template can be overridden by creating a `anchor-link.html` in the `templates` directory
# Options are "left", "right" and "none"
insert_anchor_links = "none"
# Whether the section pages should be in the search index. This is only used if
# `build_search_index` is set to true in the config
in_search_index = true
# Whether to render that section homepage or not.
# Useful when the section is only there to organize things but is not meant
# to be used directly
render = true
# Whether to redirect when landing on that section. Defaults to not being set.
# Useful for the same reason as `render` but when you don't want a 404 when
# landing on the root section page.
# Example: redirect_to = "documentation/content/overview"
# redirect_to = "/"
# Whether the section should pass its pages on to the parent section. Defaults to `false`.
# Useful when the section shouldn't split up the parent section, like
# sections for each year under a posts section.
transparent = false
# Use aliases if you are moving content but want to redirect previous URLs to the
# current one. This takes an array of path, not URLs.
aliases = []
# Your own data
[extra]
show_shares = false
show_copyright = true
+++

View file

@ -0,0 +1,73 @@
+++
title = "Note 1"
date = 2024-01-23
description = "Note 1"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,73 @@
+++
title = "Note 2"
date = 2023-01-23
description = "Note 2"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,73 @@
+++
title = "Note 3"
date = 2023-01-22
description = "Note 3"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,73 @@
+++
title = "Note 4"
date = 2023-01-18
description = "Note 4"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,73 @@
+++
title = "Note 5"
date = 2023-01-19
description = "Note 5"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,73 @@
+++
title = "Note 6"
date = 2023-01-20
description = "Note 6"
draft = false
[taxonomies]
tags = ["tag1","tag3"]
[extra]
show_copyright = true
show_comments = true
show_shares = true
keywords = "cloud,infrastructure,security,management,migration"
+++
# Omnibus pars illis et haec
## Dixi deus nutrici annis precaris inminet Alcides
Lorem markdownum Quid, magnique exit adicit pedibus signat.
[Velle](http://caluere.org/nefas) illum ego ignibus summam natum, hoc dixisse
illa. Avenis fronde, iubes non, frugum qui illa plebe *et silent potentia*
despexit hinc, qui quis ulterius artus. Ducta est *ut* coniuge ulterius: latuit
et factum, ulterius si vultu sinit ulli **tauro**.
Mirum ad numina formam tremebunda regi repulsae, Pergama moras. Rigent aera
latitantem Cycnus interritus meruere ipsa invia differt. Est orasse in species
mater movet cernunt, est grandia, peregrinum! Vetus refugitque, populi! Ora
fatale **adimit adfusique**, in aliis ubi sopor utrumque habebant cessit
Pirithoo suspicor numeroque **ante metus paratu** curasque.
## Saevoque arripit prosiluit quod ire saevarum excussit
Illa palmis, fuit est *obnoxius* infamia sucos vertitur perque capillis gesserat
vertigine. Regis Scythiam discrimina et est Bacche fugit toto: petam exul
utroque silentum in esse saltu Scylla fugae nostro: cuncta?
1. In est
2. Via ille temperie neque
3. Sunt patriaeque tandem necem non redituram causa
4. Cum abire
## Qui gente ut caeli longe
Urbem tibi non rexit ille ternis dissuadet magis religatus circumspice matris,
fecit. Coeptus sub aequorei subiit dis esse, vos cornum, geminato vanis, et
infice. Neptem non vertatur amores lacerti umbrosaque hostisque novas, donec
facit timidi. Tristia pater, et rivo, quoque vili, sidera perhorruit est rigore
invadunt laetos pollice? Umerosque dato cornua iam: ecce armis [et
truncoque](http://www.amplexus.org/praecipitique) natus.
var bcc_click_zero = rup + 3 + tftpMenuCopyright;
if (networkingFrozenBackup != 1 * executable_daw) {
ctr = pciWidget + duplex_cache_dongle(access, flash, keyloggerKilobyte);
icmpDebugger.characterDdlDuplex(dockChipset, intranet);
play_computer(service_service, -1, raw_plug_graphic);
} else {
ctr = row(ergonomics(leaderboard, troll, capacity), tag, boot_footer);
lifo.card_bar(publishing_integrated_username, boot - phpHypermediaMap);
}
terahertz_bounce -= blobHostCaps(controlMalwareBackbone,
file_architecture_tiger(pci));
sidebarShift(console_yahoo);
Carinis protinus urbe in iter et sit animam opus singultibus extensus Antiphates
simul guttis! Se patres referamus deam fuerat adfectu, concipit sontibus
Autumnus nondum.

View file

@ -0,0 +1,61 @@
.co-container {
margin: 0 auto;
position: relative;
padding-top: 1em;
padding-bottom: 1em;
.callout {
a:hover {
color: var(--hover-color);
}
background-color: var(--code-bg-color);
width: 80%;
margin: 0 auto;
position: relative;
padding: .6em;
* {
padding: 0;
margin: 0;
color: var(--co-icon)
}
.co-body {
line-height: 1.5em;
font-size: 1em;
}
.co-img {
float: left;
text-align: right;
padding-right: 1em;
height: 1em;
vertical-align: middle;
display: inline-block;
svg {
height: 1.3em;
width: 1.3em;
fill: var(--font-color);
vertical-align: middle;
display: inline-block;
}
}
&.warning {
border: 1px solid var(--co-warning);
border-left: 8px solid var(--co-warning);
svg {
fill: var(--co-warning)
}
}
&.alert {
border: 1px solid var(--co-alert);
border-left: 8px solid var(--co-alert);
svg {
fill: var(--co-alert)
}
}
&.info {
border: 1px solid var(--co-info);
border-left: 8px solid var(--co-info);
svg {
fill: var(--co-info)
}
}
}
}

View file

@ -0,0 +1,79 @@
pre {
background: var(--code-bg-color);
padding: 1.5em;
// margin: 1.5em;
code, span {
font-family: monospace;
font-size: 1rem;
white-space: pre-wrap;
word-wrap: break-word;
}
span .z-key span {
color: var(--code-kw-color);
font-weight: bold;
}
}
pre[data-linenos] {
padding: 1rem 0;
}
pre table td {
padding: 0;
}
pre table td:nth-of-type(1) {
text-align: center;
user-select: none;
}
pre mark {
display: block;
}
pre table {
width: 100%;
border-collapse: collapse;
}
.z-keyword, .z-entity, .z-function, .z-option {
font-weight: bold;
color: var(--code-kw-color);
}
.z-qualified-name .z-storage {
color: var(--code-fg-color);
}
.z-generic-name {
color: var(--code-fg-color);
}
.z-string {
color: var(--code-string-color);
}
.z-comment {
color: var(--code-comment-color);
}
.z-variable.z-readwrite {
color: var(--code-string-color);
}
.icon-copy {
mask: url('../icons/copy.svg');
&.clicked {
mask: url('../icons/copied.svg');
}
}
pre {
border-radius: .5em;
position: relative;
.copybutton {
outline: none;
padding: .4em;
position: absolute;
margin: .5em;
right: 0;
top: 0;
width: 16px;
height: 16px;
&.icon-copy {
mask-size: 20px;
mask-repeat: no-repeat;
}
}
}

View file

@ -0,0 +1,69 @@
@font-face {
font-family: "Urbanist";
src: url('../fonts/urbanist.ttf') format("truetype");
}
@font-face {
font-family: "Mulish";
src: url('../fonts/mulish.ttf') format("truetype");
}
html,body {
height: 100%;
min-height: 100%;
}
body {
font-family: var(--font-family);
background-color: var(--bg-color);
color: var(--main-color);
}
p {
line-height: 1.2em;
font-size: 1em;
font-weight: normal;
}
a:link, a:visited, a:active {
color: var(--main-color);
}
a:hover {
color: var(--hover-color);
}
svg {
pointer-events: all;
}
h1,h2,h3,h4,h5,h6,b, strong {
font-weight: 500;
}
.invis {
color: var(--main-color);
filter: opacity(0.6);
}
.pagination {
text-align: center;
font-size: .8em;
a:link, a:visited, a:active {
padding-top: .5em;
padding-bottom: .5em;
padding-left: .8em;
padding-right: .8em;
border-bottom: .2em solid var(--main-color);
margin: .5em;
}
a:hover {
color: var(--main-color);
background-color: var(--hover-bg);
svg:hover {
fill: var(--hover-color);
}
}
a.current {
background-color: var(--hover-bg);
}
}
.shares {
ul {
li {
list-style: none;
display: inline-block;
padding: .5em;
}
}
}

View file

@ -0,0 +1,15 @@
#footer-wrapper {
border-top: 1px solid var(--main-color);
}
.footer-icons {
float: right;
padding-top: .3em;
}
.footer-text {
float: left;
p {
padding-top: .3em;
margin: 0;
}
}

View file

@ -0,0 +1,82 @@
#header-container {
h1 {
padding: 0;
margin: 0;
font-weight: 300;
}
p {
margin:0;
padding: 0;
}
}
#cIcon {
float: right;
}
#searchBox {
float: right;
vertical-align: bottom;
svg {
fill: var(--main-color);
padding-right: .5em;
}
input {
appearance: none;
font-family: var(--font-family);
font-size: 1em;
color: var(--main-color);
background: none;
outline: none;
border: 1px solid var(--main-color);
outline: none;
transition: .5s;
}
}
#menu {
float: left;
}
#top {
border-bottom: 1px solid var(--main-color);
padding-bottom: 1em;
a:link, a:visited, a:active {
font-size : 1.2em;
padding-left: .5em;
padding-right: .5em;
padding-bottom: .9em;
text-decoration: underline;
border: 0;
}
a.active {
background-color: var(--main-color);
color: var(--bg-color);
:hover {
color: var(--bg-color);
}
}
ul {
padding: 0;
margin: 0;
list-style: none;
};
li {
display: inline-block;
}
}
#themeIcon {
float: right;
svg {
width: 1.2em;
height: 1.2em;
vertical-align: middle;
display: inline-block;
fill: var(--main-color);
padding-left: .5em;
cursor: pointer;
:hover {
fill: var(--hover-color)
}
}
}

View file

@ -0,0 +1,98 @@
.icon-search {
mask: url('../icons/search.svg');
}
.icon-github {
mask: url('../icons/github.svg');
}
.footer {
&.icon {
display: inline-block;
width: 1.2em;
height: 1.2em;
vertical-align: middle;
margin-left: .2em;
}
}
.post-list {
&.icon {
display: inline-block;
width: .8em;
height: .8em;
vertical-align: middle;
margin-left: .25em;
color: var(--main-color);
filter: opacity(0.6);
}
}
.head {
&.icon {
width: 1.4em;
height: 1.4em;
vertical-align: middle;
display: inline-block;
margin-left: .2em;
margin-right: .2em;
}
}
.shares {
&.icon {
width: 2em;
height: 2em;
}
}
.icon-gh {
mask: url('../icons/gh.svg');
}
.icon-linkedin {
mask: url('../icons/linkedin.svg');
}
.icon-fb {
mask: url('../icons/fb.svg');
}
.icon-wa {
mask: url('../icons/wa.svg');
}
.icon-tg {
mask: url('../icons/tg.svg');
}
.icon-dark {
mask: url('../icons/dark.svg');
cursor: pointer;
}
.icon-light {
mask: url('../icons/light.svg');
cursor: pointer;
}
.closeBtn {
margin: .5em;
mask: url('../icons/close.svg');
cursor: pointer;
&.icon {
height: 1.5em;
width: 1.5em;
// padding: 1em;
:hover {
fill: var(--hover-color);
}
}
}
.icon-time {
mask: url('../icons/time.svg');
}
.icon {
display: inline-block;
background: var(--main-color);
mask-size: cover;
}
.icon:hover,
.icon:focus {
background: var(--hover-color);
}
.icon-time:hover,
.icon-search:hover,
.icon-search:focus {
background: var(--main-color);
}

View file

@ -0,0 +1,17 @@
#index-text {
font-size: 1.2em;
font-weight: 300;
}
#flexbox {
display: flex;
align-items : center;
}
#index-image {
text-align: center;
display: block;
img {
border-radius: 50%;
width: 75%;
height: 75%;
}
}

View file

@ -0,0 +1,9 @@
.mermaid {
text-align: center;
// margin: 0 auto;
margin-top: 1em;
margin-bottom: 1em;
strong {
font-weight: bold;
}
}

View file

@ -0,0 +1,61 @@
.content {
min-height: 80vh;
font-size: 1.2em;
font-weight: lighter;
ul {
li {
font-weight: 300;
}
}
table {
border-spacing: 0;
border-right: 1px solid var(--main-color);
border-bottom: 1px solid var(--main-color);
th, td {
padding: .5em;
border-top: 1px solid var(--main-color);
border-left: 1px solid var(--main-color);
}
th {
background-color: var(--hover-bg);
}
}
}
.post-tags {
ul {
padding: 0;
li {
list-style: none;
display: inline-block;
}
}
}
main {
min-height: 80vh;
padding-bottom: 2em;
}
.toc {
font-weight: normal;
ul {
padding-left: .5em;
li{
display: list-item;
padding-left: .5em;
font-size: 1em;
line-height: 1.2em;
list-style: none;
}
}
}
.badges {
padding: 1em;
background-color: var(--code-bg-color);
img {
width: 6em;
height: 6em;
}
}

View file

@ -0,0 +1,47 @@
#sResults {
position: relative;
}
.search-results {
display: none;
border-radius: .3em;
padding: 0;
list-style: none;
text-align: left;
right: 25em;
width: 450px;
background-color: var(--bg-color);
border: 1px solid var(--hover-color);
position: absolute;
z-index: 990;
opacity: .95;
&__items {
list-style: none;
z-index: 991;
}
h4 {
padding: 0;
}
.teaser {
font-size: 0.8em;
}
li {
padding: 0;
list-style: none;
z-index: 998;
&:first-of-type {
margin-top: 0;
}
}
&__item {
list-style: none;
display: block;
z-index: 999;
padding: 1em;
border-bottom: 1px solid var(--hover-color);
a {
display: inline-block;
}
}
}

View file

@ -0,0 +1,33 @@
.reading-time {
padding-left: .5em;
line-height: 1em;
font-size: .9em;
}
#catlist, #taglist {
ul {
list-style: none;
li {
list-style: none;
}
}
}
#taglist {
font-weight: normal;
a:link, a:visited, a:active {
text-decoration: none;
}
}
#catlist {
b {
font-weight: 500;
}
a:link, a:visited, a:active {
text-decoration: none;
}
}
.post-desc {
font-weight: 100;
font-size: .9em;
line-height: 1em;
padding-bottom: 1em;
}

View file

@ -0,0 +1,50 @@
@mixin setSVGIcon($svgs) {
@each $svg in $svgs {
.skillcard-icon-#{$svg} {
mask-image: url('/icons/#{$svg}.svg');
}
}
}
@include setSVGIcon(('aws', 'gcp', 'gh', 'git','rack', 'code'));
.cards-wrapper {
display: grid;
// margin: 0 auto;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: minmax(250px, auto);
text-align: center;
padding: 0 auto;
width: 85%;
margin-bottom: 2em;
}
.panel {
border-top: .2em solid var(--hover-color);
margin: .2em;
transition: all .5s;
display: inline;
overflow-y: scroll;
max-height: 14em;
.skillcard-details {
text-align: left;
font-size: .9em;
ul {
// padding: 0;
li {
// list-style: outside;
}
}
}
.skillcard-icon {
text-align: center;
width: 100%;
height: 2em;
background: var(--main-color);
mask-position: center;
mask-repeat: no-repeat;
mask-size: 75% 75%;
padding-top: .5em;
padding-bottom: .5em;
transition: all .5s;
}
}

View file

@ -0,0 +1,70 @@
#timeline-content {
margin-top: 50px;
text-align: center;
p {
font-size: .8em;
font-weight: lighter;
h3 {
font-size: 1em;
font-weight: lighter;
}
}
}
/* Timeline */
.timeline {
border-left: 4px solid var(--hover-color);
border-bottom-right-radius: 4px;
border-top-right-radius: 4px;
background: var(--code-bg-color);
margin: auto;
// position: relative;
padding: 50px;
list-style: none;
text-align: left;
// font-weight: 400;
max-width: 60%;
}
.timeline .event {
margin-bottom: 4em;
position: relative;
list-style: none;
line-height: 1.5em;
font-size: 1.2em;
font-weight: 400;
width: 100%;
h3 p {
line-height: .5em;
font-weight:700;
}
}
.timeline .event:last-of-type {
padding-bottom: 0;
margin-bottom: 0;
border: none;
}
.timeline .event:before,
.timeline .event:after {
position: absolute;
display: block;
top: 0;
}
.timeline .event:before {
left: -8em;
line-height: .5em;
color: var(--invis-color);
content: attr(data-date);
ul, li {
list-style: none;
}
}
.timeline .event:after {
box-shadow: 0 0 0 4px var(--hover-color);
left: -2.5em;
background: var(--code-bg-color);
border-radius: 50%;
height: .5em;
width: .5em;
content: "";
}

View file

@ -0,0 +1,53 @@
* {
--font-family: 'Mulish', Halvetica, Arial;
}
:root {
--co-warning: rgba(255, 145, 0, 0.8);
--co-alert: rgb(255, 0, 21);
--co-info: rgb(0, 123, 255);
--main-color-light: #011627;
--bg-color-light: #F4F9E9;
--hover-color-light: #FF3366;
--hover-bg-light: #e7ebde;
--code-bg-color-light: #e2e6d9;
--code-fg-color-light: #383a42;
--code-kw-color-light: #054865;
--code-string-color-light:#448743;
--code-comment-color-light:#a9a9a9;
--main-color-dark: #EEEEEE;
--bg-color-dark: #222831;
--hover-color-dark: #369ce4;
--hover-bg-dark: #393E46;
--code-bg-color-dark: #303947;
--code-fg-color-dark: #dcdfe4;
--code-kw-color-dark: #9a8240;
--code-string-color-dark:#6e8e57;
--code-comment-color-dark:#686767;
}
[color-theme="light"] {
--main-color: var(--main-color-light);
--bg-color: var(--bg-color-light);
--hover-color: var(--hover-color-light);
--hover-bg: var(--hover-bg-light);
--code-bg-color: var(--code-bg-color-light);
--code-fg-color: var(--code-fg-color-light);
--code-kw-color: var(--code-kw-color-light);
--code-string-color: var(--code-string-color-light);
--code-comment-color: var(--code-comment-color-light);
}
[color-theme="dark"] {
--main-color: var(--main-color-dark);
--bg-color: var(--bg-color-dark);
--hover-color: var(--hover-color-dark);
--hover-bg: var(--hover-bg-dark);
--code-bg-color: var(--code-bg-color-dark);
--code-fg-color: var(--code-fg-color-dark);
--code-kw-color: var(--code-kw-color-dark);
--code-string-color: var(--code-string-color-dark);
--code-comment-color: var(--code-comment-color-dark);
}

View file

@ -0,0 +1,124 @@
// SIMPLE GRID - SASS/SCSS
// universal
html,
body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
left: 0;
top: 0;
font-size: 100%;
}
// utility
.left {
text-align: left;
}
.right {
text-align: right;
}
.center {
text-align: center;
margin-left: auto;
margin-right: auto;
}
.justify {
text-align: justify;
}
.hidden-sm {
display: none;
}
// grid
$width: 96%;
$gutter: 4%;
$breakpoint-small: 33.75em; // 540px
$breakpoint-med: 45em; // 720px
$breakpoint-large: 60em; // 960px
.container {
width: 90%;
margin-left: auto;
margin-right: auto;
@media only screen and (min-width: $breakpoint-small) {
width: 80%;
}
@media only screen and (min-width: $breakpoint-large) {
width: 100%;
}
}
.row {
position: relative;
width: 100%;
}
.row [class^="col"] {
float: left;
margin: 0.5rem 2%;
min-height: 0.125rem;
}
.row::after {
content: "";
display: table;
clear: both;
}
.col-1,
.col-2,
.col-3,
.col-4,
.col-5,
.col-6,
.col-7,
.col-8,
.col-9,
.col-10,
.col-11,
.col-12 {
width: $width;
}
.col-1-sm { width:($width / 12) - ($gutter * 11 / 12); }
.col-2-sm { width: ($width / 6) - ($gutter * 10 / 12); }
.col-3-sm { width: ($width / 4) - ($gutter * 9 / 12); }
.col-4-sm { width: ($width / 3) - ($gutter * 8 / 12); }
.col-5-sm { width: ($width / (12 / 5)) - ($gutter * 7 / 12); }
.col-6-sm { width: ($width / 2) - ($gutter * 6 / 12); }
.col-7-sm { width: ($width / (12 / 7)) - ($gutter * 5 / 12); }
.col-8-sm { width: ($width / (12 / 8)) - ($gutter * 4 / 12); }
.col-9-sm { width: ($width / (12 / 9)) - ($gutter * 3 / 12); }
.col-10-sm { width: ($width / (12 / 10)) - ($gutter * 2 / 12); }
.col-11-sm { width: ($width / (12 / 11)) - ($gutter * 1 / 12); }
.col-12-sm { width: $width; }
@media only screen and (min-width: $breakpoint-med) {
.col-1 { width:($width / 12) - ($gutter * 11 / 12); }
.col-2 { width: ($width / 6) - ($gutter * 10 / 12); }
.col-3 { width: ($width / 4) - ($gutter * 9 / 12); }
.col-4 { width: ($width / 3) - ($gutter * 8 / 12); }
.col-5 { width: ($width / (12 / 5)) - ($gutter * 7 / 12); }
.col-6 { width: ($width / 2) - ($gutter * 6 / 12); }
.col-7 { width: ($width / (12 / 7)) - ($gutter * 5 / 12); }
.col-8 { width: ($width / (12 / 8)) - ($gutter * 4 / 12); }
.col-9 { width: ($width / (12 / 9)) - ($gutter * 3 / 12); }
.col-10 { width: ($width / (12 / 10)) - ($gutter * 2 / 12); }
.col-11 { width: ($width / (12 / 11)) - ($gutter * 1 / 12); }
.col-12 { width: $width; }
.hidden-sm {
display: block;
}
}

View file

@ -0,0 +1,14 @@
@import '_header',
'_icons',
'_page',
'_index',
'_vars',
'_section',
'_common',
'_callout',
'_code',
'_mermaid',
'_timeline',
'_footer',
'_search',
'_skillcards';

BIN
themes/pico/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View file

@ -0,0 +1,125 @@
/*! Modified from GitHub's dark theme in primer/primitives.
* MIT License
* Copyright (c) 2018 GitHub Inc.
* https://github.com/primer/primitives/blob/main/LICENSE
*/
main {
--color-prettylights-syntax-comment: #8b949e;
--color-prettylights-syntax-constant: #79c0ff;
--color-prettylights-syntax-entity: #d2a8ff;
--color-prettylights-syntax-storage-modifier-import: #c9d1d9;
--color-prettylights-syntax-entity-tag: #7ee787;
--color-prettylights-syntax-keyword: #ff7b72;
--color-prettylights-syntax-string: #a5d6ff;
--color-prettylights-syntax-variable: #ffa657;
--color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
--color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
--color-prettylights-syntax-invalid-illegal-bg: #8e1519;
--color-prettylights-syntax-carriage-return-text: #f0f6fc;
--color-prettylights-syntax-carriage-return-bg: #b62324;
--color-prettylights-syntax-string-regexp: #7ee787;
--color-prettylights-syntax-markup-list: #f2cc60;
--color-prettylights-syntax-markup-heading: #1f6feb;
--color-prettylights-syntax-markup-italic: #c9d1d9;
--color-prettylights-syntax-markup-bold: #c9d1d9;
--color-prettylights-syntax-markup-deleted-text: #ffdcd7;
--color-prettylights-syntax-markup-deleted-bg: #67060c;
--color-prettylights-syntax-markup-inserted-text: #aff5b4;
--color-prettylights-syntax-markup-inserted-bg: #033a16;
--color-prettylights-syntax-markup-changed-text: #ffdfb6;
--color-prettylights-syntax-markup-changed-bg: #5a1e02;
--color-prettylights-syntax-markup-ignored-text: #c9d1d9;
--color-prettylights-syntax-markup-ignored-bg: #1158c7;
--color-prettylights-syntax-meta-diff-range: #d2a8ff;
--color-prettylights-syntax-brackethighlighter-angle: #8b949e;
--color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
--color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
--color-btn-text: #c9d1d9;
--color-btn-bg: rgb(45 51 59 / 80%);
--color-btn-border: rgb(240 246 252 / 10%);
--color-btn-shadow: 0 0 transparent;
--color-btn-inset-shadow: 0 0 transparent;
--color-btn-hover-bg: rgb(45 51 59 / 50%);
--color-btn-hover-border: #8b949e;
--color-btn-active-bg: hsl(212deg 12% 18% / 50%);
--color-btn-active-border: #6e7681;
--color-btn-selected-bg: rgb(45 51 59 / 50%);
--color-btn-primary-text: #fff;
--color-btn-primary-bg: #238636;
--color-btn-primary-border: rgb(240 246 252 / 10%);
--color-btn-primary-shadow: 0 0 transparent;
--color-btn-primary-inset-shadow: 0 0 transparent;
--color-btn-primary-hover-bg: #2ea043;
--color-btn-primary-hover-border: rgb(240 246 252 / 10%);
--color-btn-primary-selected-bg: #238636;
--color-btn-primary-selected-shadow: 0 0 transparent;
--color-btn-primary-disabled-text: rgb(240 246 252 / 50%);
--color-btn-primary-disabled-bg: rgb(35 134 54 / 60%);
--color-btn-primary-disabled-border: rgb(240 246 252 / 10%);
--color-action-list-item-default-hover-bg: rgb(144 157 171 / 12%);
--color-segmented-control-bg: rgb(99 110 123 / 10%);
--color-segmented-control-button-bg: transparent;
--color-segmented-control-button-selected-border: #636e7b;
--color-fg-default: #c9d1d9;
--color-fg-muted: #8b949e;
--color-fg-subtle: #484f58;
--color-canvas-default: transparent;
--color-canvas-overlay: rgb(22 27 34 / 90%);
--color-canvas-inset: transparent;
--color-canvas-subtle: transparent;
--color-border-default: #30363d;
--color-border-muted: #21262d;
--color-neutral-muted: rgb(110 118 129 / 5%);
--color-neutral-subtle: rgb(110 118 129 / 10%);
--color-accent-fg: #58a6ff;
--color-accent-emphasis: #1f6feb;
--color-accent-muted: rgb(56 139 253 / 40%);
--color-accent-subtle: rgb(65 132 228 / 10%);
--color-success-fg: #3fb950;
--color-attention-fg: #c69026;
--color-attention-muted: rgb(174 124 20 / 40%);
--color-attention-subtle: rgb(174 124 20 / 15%);
--color-danger-fg: #f85149;
--color-danger-muted: rgb(229 83 75 / 40%);
--color-danger-subtle: rgb(229 83 75 / 10%);
--color-primer-shadow-inset: 0 0 transparent;
--color-scale-gray-7: #21262d;
--color-scale-blue-8: #0c2d6b;
/*! Extensions from @primer/css/alerts/flash.scss */
--color-social-reaction-bg-hover: var(--color-scale-gray-7);
--color-social-reaction-bg-reacted-hover: var(--color-scale-blue-8);
}
main .pagination-loader-container {
background-image: url("https://github.com/images/modules/pulls/progressive-disclosure-line-dark.svg");
}
.gsc-pagination-button {
background-color: var(--color-btn-bg);
}
.gsc-homepage-bg {
background: linear-gradient(135deg, #05485c, #032e58, #2f0154);
background-size: 600% 600%;
animation: gradient 21s ease infinite;
}
@keyframes gradient {
0% {
background-position: 2% 0%;
}
50% {
background-position: 99% 100%;
}
100% {
background-position: 2% 0%;
}
}
main .gsc-loading-image {
background-image: url("https://github.githubassets.com/images/mona-loading-dark.gif");
}

View file

@ -0,0 +1,99 @@
/*! MIT License
* Copyright (c) 2018 GitHub Inc.
* https://github.com/primer/primitives/blob/main/LICENSE
*/
main {
--color-prettylights-syntax-comment: #6e7781;
--color-prettylights-syntax-constant: #0550ae;
--color-prettylights-syntax-entity: #8250df;
--color-prettylights-syntax-storage-modifier-import: #24292f;
--color-prettylights-syntax-entity-tag: #116329;
--color-prettylights-syntax-keyword: #cf222e;
--color-prettylights-syntax-string: #0a3069;
--color-prettylights-syntax-variable: #953800;
--color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
--color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
--color-prettylights-syntax-invalid-illegal-bg: #82071e;
--color-prettylights-syntax-carriage-return-text: #f6f8fa;
--color-prettylights-syntax-carriage-return-bg: #cf222e;
--color-prettylights-syntax-string-regexp: #116329;
--color-prettylights-syntax-markup-list: #3b2300;
--color-prettylights-syntax-markup-heading: #0550ae;
--color-prettylights-syntax-markup-italic: #24292f;
--color-prettylights-syntax-markup-bold: #24292f;
--color-prettylights-syntax-markup-deleted-text: #82071e;
--color-prettylights-syntax-markup-deleted-bg: #ffebe9;
--color-prettylights-syntax-markup-inserted-text: #116329;
--color-prettylights-syntax-markup-inserted-bg: #dafbe1;
--color-prettylights-syntax-markup-changed-text: #953800;
--color-prettylights-syntax-markup-changed-bg: #ffd8b5;
--color-prettylights-syntax-markup-ignored-text: #eaeef2;
--color-prettylights-syntax-markup-ignored-bg: #0550ae;
--color-prettylights-syntax-meta-diff-range: #8250df;
--color-prettylights-syntax-brackethighlighter-angle: #57606a;
--color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
--color-prettylights-syntax-constant-other-reference-link: #0a3069;
--color-btn-text: #24292f;
--color-btn-bg: #f6f8fa;
--color-btn-border: rgb(27 31 36 / 15%);
--color-btn-shadow: 0 0 transparent;
--color-btn-inset-shadow: 0 0 transparent;
--color-btn-hover-bg: #f3f4f6;
--color-btn-hover-border: rgb(27 31 36 / 15%);
--color-btn-active-bg: hsl(220deg 14% 93% / 100%);
--color-btn-active-border: rgb(27 31 36 / 15%);
--color-btn-selected-bg: hsl(220deg 14% 94% / 100%);
--color-btn-primary-text: #fff;
--color-btn-primary-bg: #2da44e;
--color-btn-primary-border: rgb(27 31 36 / 15%);
--color-btn-primary-shadow: 0 0 transparent;
--color-btn-primary-inset-shadow: 0 0 transparent;
--color-btn-primary-hover-bg: #2c974b;
--color-btn-primary-hover-border: rgb(27 31 36 / 15%);
--color-btn-primary-selected-bg: hsl(137deg 55% 36% / 100%);
--color-btn-primary-selected-shadow: 0 0 transparent;
--color-btn-primary-disabled-text: rgb(255 255 255 / 80%);
--color-btn-primary-disabled-bg: #94d3a2;
--color-btn-primary-disabled-border: rgb(27 31 36 / 15%);
--color-segmented-control-button-bg: transparent;
--color-fg-default: #24292f;
--color-fg-muted: #57606a;
--color-fg-subtle: #6e7781;
--color-canvas-default: transparent;
--color-canvas-overlay: #fff;
--color-canvas-inset: transparent;
--color-canvas-subtle: transparent;
--color-border-default: #adb4b9;
--color-border-muted: hsl(210deg 18% 87% / 100%);
--color-neutral-muted: rgb(175 184 193 / 20%);
--color-accent-fg: #0969da;
--color-accent-emphasis: #0969da;
--color-accent-muted: rgb(130, 136, 141);
--color-accent-subtle: #ddf4ff;
--color-success-fg: #1a7f37;
--color-attention-fg: #9a6700;
--color-attention-muted: rgb(212 167 44 / 40%);
--color-attention-subtle: #fff8c5;
--color-danger-fg: #cf222e;
--color-danger-muted: rgb(255 129 130 / 40%);
--color-danger-subtle: #ffebe9;
--color-primer-shadow-inset: 0 0 transparent;
--color-primer-shadow-focus: 0 0 0 3px rgb(9 105 218 / 30%);
--color-scale-gray-1: #eaeef2;
--color-scale-blue-1: #b6e3ff;
/*! Extensions from @primer/css/alerts/flash.scss */
--color-social-reaction-bg-hover: var(--color-scale-gray-1);
--color-social-reaction-bg-reacted-hover: var(--color-scale-blue-1);
color-scheme: light;
}
main .pagination-loader-container {
background-image: url("https://github.com/images/modules/pulls/progressive-disclosure-line.svg");
}
main .gsc-loading-image {
background-image: url("https://github.githubassets.com/images/mona-loading-default.gif");
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M64 80c-8.8 0-16 7.2-16 16V416c0 8.8 7.2 16 16 16H448c8.8 0 16-7.2 16-16V96c0-8.8-7.2-16-16-16H64zM0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm175 79c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"/></svg>

After

Width:  |  Height:  |  Size: 513 B

View file

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0"/>
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1z"/>
<path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0z"/>
</svg>

After

Width:  |  Height:  |  Size: 580 B

View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1z"/>
<path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0z"/>
</svg>

After

Width:  |  Height:  |  Size: 421 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8M8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0m0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13m8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5M3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8m10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0m-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0m9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707M4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708"/></svg>

After

Width:  |  Height:  |  Size: 741 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M16 8.049c0-4.446-3.582-8.05-8-8.05C3.58 0-.002 3.603-.002 8.05c0 4.017 2.926 7.347 6.75 7.951v-5.625h-2.03V8.05H6.75V6.275c0-2.017 1.195-3.131 3.022-3.131.876 0 1.791.157 1.791.157v1.98h-1.009c-.993 0-1.303.621-1.303 1.258v1.51h2.218l-.354 2.326H9.25V16c3.824-.604 6.75-3.934 6.75-7.951"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8"/></svg>

After

Width:  |  Height:  |  Size: 640 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M6 .278a.77.77 0 0 1 .08.858 7.2 7.2 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277q.792-.001 1.533-.16a.79.79 0 0 1 .81.316.73.73 0 0 1-.031.893A8.35 8.35 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.75.75 0 0 1 6 .278M4.858 1.311A7.27 7.27 0 0 0 1.025 7.71c0 4.02 3.279 7.276 7.319 7.276a7.32 7.32 0 0 0 5.205-2.162q-.506.063-1.029.063c-4.61 0-8.343-3.714-8.343-8.29 0-1.167.242-2.278.681-3.286"/></svg>

After

Width:  |  Height:  |  Size: 500 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854zm4.943 12.248V6.169H2.542v7.225zm-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248S2.4 3.226 2.4 3.934c0 .694.521 1.248 1.327 1.248zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016l.016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225z"/>
</svg>

After

Width:  |  Height:  |  Size: 598 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM208 352a144 144 0 1 0 0-288 144 144 0 1 0 0 288z"/></svg>

After

Width:  |  Height:  |  Size: 312 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.287 5.906q-1.168.486-4.666 2.01-.567.225-.595.442c-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294q.39.01.868-.32 3.269-2.206 3.374-2.23c.05-.012.12-.026.166.016s.042.12.037.141c-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8 8 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629q.14.092.27.187c.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.4 1.4 0 0 0-.013-.315.34.34 0 0 0-.114-.217.53.53 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09"/>
</svg>

After

Width:  |  Height:  |  Size: 673 B

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71z"/><path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m7-8A7 7 0 1 1 1 8a7 7 0 0 1 14 0"/></svg>

After

Width:  |  Height:  |  Size: 235 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M13.601 2.326A7.85 7.85 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.9 7.9 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.9 7.9 0 0 0 13.6 2.326zM7.994 14.521a6.6 6.6 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.56 6.56 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592m3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.73.73 0 0 0-.529.247c-.182.198-.691.677-.691 1.654s.71 1.916.81 2.049c.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

View file

@ -0,0 +1,17 @@
function enableCopy() {
document.querySelectorAll('pre:not(.mermaid)').forEach(node => {
let copyBtn = document.createElement("span");
copyBtn.classList.add('copybutton');
copyBtn.classList.add('icon');
copyBtn.classList.add('icon-copy');
node.appendChild(copyBtn);
copyBtn.addEventListener("click", async () => {
if (navigator.clipboard) {
let text = node.querySelectorAll('code')[0].innerText;
await navigator.clipboard.writeText(text);
copyBtn.classList.add('clicked');
}
setTimeout(() => copyBtn.classList.remove('clicked'), 600);
})
})
}

View file

@ -0,0 +1,105 @@
const cIcon = document.getElementById('cIcon');
mmdElements = document.getElementsByClassName('mermaid');
const mmdHTML = [];
for (let i = 0; i < mmdElements.length; i++) {
mmdHTML[i] = mmdElements[i].innerHTML;
}
function mermaidRender(theme) {
if ( theme == 'dark' ) {
initOptions = {
startOnLoad: false,
theme: 'dark'
}
}
else {
initOptions = {
startOnLoad: false,
theme: 'neutral'
}
}
for (let i = 0; i < mmdElements.length; i++) {
delete mmdElements[i].dataset.processed;
mmdElements[i].innerHTML = mmdHTML[i];
}
mermaid.initialize(initOptions);
mermaid.run();
}
function giscusRender(theme) {
if (document.head.dataset['commentsEnabled'] == 'true'){
baseUrl = document.head.dataset['baseUrl'];
themes = {
"dark": `${baseUrl}css/gs_dark.css`,
"light":`${baseUrl}css/gs_light.css`
}
giscus = document.getElementById('giscusScript');
if (giscus){
giscus.remove();
}
let js = document.createElement('script');
js.setAttribute("id", 'giscusScript');
js.setAttribute("src", document.head.dataset['giscusSrc']);
js.setAttribute("data-repo", document.head.dataset['giscusRepo']);
js.setAttribute("data-repo-id", document.head.dataset['giscusRepoId']);
js.setAttribute("data-category", document.head.dataset['giscusCategory']);
js.setAttribute("data-category-id", document.head.dataset['giscusCategoryId']);
js.setAttribute("data-mapping", document.head.dataset['giscusMapping']);
js.setAttribute("data-strict",document.head.dataset['giscusStrict']);
js.setAttribute("data-reactions-enabled",document.head.dataset['giscusReactionsEnabled']);
js.setAttribute("data-emit-metadata", document.head.dataset['giscusEmitMetadata']);
js.setAttribute("data-input-position", document.head.dataset['giscusInputPosition']);
js.setAttribute("data-theme", themes[theme]);
js.setAttribute("data-lang", document.head.dataset['giscusLang']);
js.setAttribute("crossorigin", document.head.dataset['giscusCrossorigin']);
js.setAttribute("nonce", document.head.dataset['giscusNonce']);
js.async = true;
commentsBase = document.getElementById('giscusWidget').appendChild(js);
}
}
function setStartTheme(){
let targetColorTheme = '';
let currentTheme = localStorage.getItem('color-theme');
if (currentTheme != null) {
targetColorTheme = currentTheme
} else {
const darkThemeMq = window.matchMedia("(prefers-color-scheme: dark)");
if (darkThemeMq.matches) {
targetColorTheme = 'dark';
// opposite = 'light';
} else {
targetColorTheme = 'light';
// opposite = 'dark';
}
}
cIcon.classList.remove('icon-'+currentTheme);
cIcon.classList.add('icon-'+targetColorTheme);
document.head.dataset.colorTheme = targetColorTheme;
document.documentElement.setAttribute('color-theme', targetColorTheme);
localStorage.setItem('color-theme',targetColorTheme);
giscusRender(targetColorTheme);
mermaidRender(targetColorTheme);
}
function switchTheme() {
currentTheme = document.documentElement.getAttribute('color-theme')
if (currentTheme == 'dark') {
targetColorTheme = 'light';
}
if ( currentTheme == 'light') {
targetColorTheme = 'dark';
}
cIcon.classList.remove('icon-'+currentTheme);
cIcon.classList.add('icon-'+targetColorTheme);
document.documentElement.setAttribute('color-theme', targetColorTheme);
document.head.dataset.colorTheme = targetColorTheme;
localStorage.setItem('color-theme',targetColorTheme);
giscusRender(targetColorTheme)
mermaidRender(targetColorTheme)
}
document.getElementById("cIcon").addEventListener("click", switchTheme);

View file

@ -0,0 +1,8 @@
document.addEventListener("DOMContentLoaded", function(event){
setStartTheme();
enableCopy();
if (document.head.dataset['buildSearchIndex'] == "true") {
initSearch();
}
});

1759
themes/pico/static/js/mermaid.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,202 @@
function debounce(func, wait) {
var timeout;
return function () {
var context = this;
var args = arguments;
clearTimeout(timeout);
timeout = setTimeout(function () {
timeout = null;
func.apply(context, args);
}, wait);
};
}
function makeTeaser(body, terms) {
var TERM_WEIGHT = 40;
var NORMAL_WORD_WEIGHT = 2;
var FIRST_WORD_WEIGHT = 8;
var TEASER_MAX_WORDS = 20;
var stemmedTerms = terms.map(function (w) {
return elasticlunr.stemmer(w.toLowerCase());
});
var termFound = false;
var index = 0;
var weighted = []; // contains elements of ["word", weight, index_in_document]
// split in sentences, then words
var sentences = body.toLowerCase().split(". ");
for (var i in sentences) {
var words = sentences[i].split(" ");
var value = FIRST_WORD_WEIGHT;
for (var j in words) {
var word = words[j];
if (word.length > 0) {
for (var k in stemmedTerms) {
if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) {
value = TERM_WEIGHT;
termFound = true;
}
}
weighted.push([word, value, index]);
value = NORMAL_WORD_WEIGHT;
}
index += word.length;
index += 1; // ' ' or '.' if last word in sentence
}
index += 1; // because we split at a two-char boundary '. '
}
if (weighted.length === 0) {
return body;
}
var windowWeights = [];
var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS);
// We add a window with all the weights first
var curSum = 0;
for (var i = 0; i < windowSize; i++) {
curSum += weighted[i][1];
}
windowWeights.push(curSum);
for (var i = 0; i < weighted.length - windowSize; i++) {
curSum -= weighted[i][1];
curSum += weighted[i + windowSize][1];
windowWeights.push(curSum);
}
// If we didn't find the term, just pick the first window
var maxSumIndex = 0;
if (termFound) {
var maxFound = 0;
// backwards
for (var i = windowWeights.length - 1; i >= 0; i--) {
if (windowWeights[i] > maxFound) {
maxFound = windowWeights[i];
maxSumIndex = i;
}
}
}
var teaser = [];
var startIndex = weighted[maxSumIndex][2];
for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) {
var word = weighted[i];
if (startIndex < word[2]) {
// missing text from index to start of `word`
teaser.push(body.substring(startIndex, word[2]));
startIndex = word[2];
}
// add <em/> around search terms
if (word[1] === TERM_WEIGHT) {
teaser.push("<b>");
}
startIndex = word[2] + word[0].length;
teaser.push(body.substring(word[2], startIndex));
if (word[1] === TERM_WEIGHT) {
teaser.push("</b>");
}
}
teaser.push("…");
return teaser.join("");
}
function formatSearchResultItem(item, terms) {
return '<div class="search-results__item">'
+ `<h4><a href="${item.ref}">${item.doc.title}</a></h4>`
+ `<div class="teaser">${makeTeaser(item.doc.body, terms)}</div>`
+ '</div>';
}
function initSearch() {
var $searchInput = document.getElementById("searchInput");
var $searchResults = document.getElementById('sResults');
var $searchResultsItems = document.getElementById('sResultsUL')
var MAX_ITEMS = 5;
var options = {
bool: "AND",
fields: {
title: {boost: 2},
body: {boost: 1},
}
};
var currentTerm = "";
var index;
var initIndex = async function () {
if (index === undefined) {
let $baseUrl = document.head.dataset['baseUrl']
index = fetch($baseUrl + "search_index.en.json")
.then(
async function(response) {
return await elasticlunr.Index.load(await response.json());
}
);
}
let res = await index;
return res;
}
$searchInput.addEventListener("keyup", debounce(async function() {
if ($searchInput.value != '') {
$searchInput.classList.add("textIn")
} else {
$searchInput.classList.remove("textIn")
}
var term = $searchInput.value.trim();
if (term === currentTerm) {
return;
}
$searchResults.style.display = term === "" ? "none" : "block";
$searchResultsItems.innerHTML = "";
$searchResults.style.top = `${document.documentElement.scrollTop}px`;
$searchResultsItems.style.display="block";
$searchResultsItems.style.transition="opacity 3s";
currentTerm = term;
if (term === "") {
return;
}
var results = (await initIndex()).search(term, options);
if (results.length === 0) {
$searchResults.style.display = "none";
return;
}
var item = document.createElement("li");
clSearch = `<span class="closeBtn icon icon-close" onclick="closeSearchResults();"></span>`
item.innerHTML = clSearch;
$searchResultsItems.appendChild(item);
for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) {
var item = document.createElement("li");
item.innerHTML = formatSearchResultItem(results[i], term.split(" "));
$searchResultsItems.appendChild(item);
}
}, 150));
window.addEventListener('click', function(e) {
if ($searchResults.style.display == "block" && !$searchResults.contains(e.target)) {
$searchResults.style.display = "block";
}
});
}
function closeSearchResults() {
document.getElementById("sResults").style.display="none";
document.getElementById("searchInput").value="";
document.getElementById("searchInput").classList.remove("textIn");
initSearch;
}

View file

@ -0,0 +1,14 @@
<div class="row">
<div class="col-12 center">
<h1>Ooops! 404!</h1>
</div>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8 center">
<div id="indextext" >
<p>Something is definetly went wrong, as you tried to reach page that doesn't exist here. Try to start from the <a href="{{ config.base_url }}">beginning</a></p>
</div>
</div>
</div>

View file

@ -0,0 +1,60 @@
{% set cdn_version = now() | date(format="%d%m%Y%H%M%S") %}
<!DOCTYPE html>
<html lang="en">
<head
data-base-url="{{config.base_url | safe }}"
data-giscus-repo="{{config.extra.giscus.data_repo | safe}}"
data-giscus-repo-id="{{config.extra.giscus.data_repo_id | safe}}"
data-giscus-category="{{config.extra.giscus.data_category | safe}}"
data-giscus-category-id="{{config.extra.giscus.data_category_id | safe}}"
data-giscus-mapping="{{config.extra.giscus.data_mapping | safe}}"
data-giscus-strict="{{config.extra.giscus.data_strict | safe}}"
data-giscus-reactions-enabled="{{config.extra.giscus.data_reactions_enabled | safe}}"
data-giscus-emit-metadata="{{config.extra.giscus.data_emit_metadata | safe}}"
data-giscus-input-position="{{config.extra.giscus.data_input_position | safe}}"
data-giscus-lang="{{config.extra.giscus.data_lang | safe}}"
data-giscus-crossorigin="{{config.extra.giscus.crossorigin | safe}}"
data-giscus-nonce="{{config.extra.nonce | safe}}"
data-giscus-src="{{config.extra.giscus.src | safe}}"
data-build-search-index="{{config.build_search_index | safe}}"
data-comments-enabled="{%- if page.extra.show_comments -%}true{%- else -%}false{%- endif -%}">
<meta charset="utf-8">
<title>
{%- if page.title -%} {{ page.title }}
{%- elif section.title -%} {{ section.title }}
{%- endif -%}
</title>
{% if dsc is not defined %}
<meta name="description" content="{{ config.extra.description }}">
{% else %}
<meta name="description" content="{{ dsc }}">
<meta name="viewport" content="width=device-width, initial-scale=1">
{% endif %}
<meta name="author" content="{{config.extra.author}}">
{% if page.extra.keywords is defined %}<meta name="keywords" content="{{ page.extra.keywords }}">{% endif %}
<link type="text/css" rel="stylesheet" href="{{config.base_url | safe }}css/grid.css?v={{ cdn_version }}">
<link type="text/css" rel="stylesheet" href="{{config.base_url | safe }}css/style.css?v={{ cdn_version }}">
<link rel="icon" type="image/png" href="{{config.base_url | safe }}images/favicon.webp">
<link rel="mask-icon" type="image/png" href="{{config.base_url | safe }}images/favicon.webp">
{% if config.extra.stats and config.mode != 'serve' %}
<script async src="{{config.extra.stats.script_src}}" data-website-id="{{config.extra.stats.site_id}}" nonce="{{config.extra.nonce}}"></script>
{% endif %}
<script src = "{{config.base_url | safe }}js/codecopy.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
<script src="{{config.base_url | safe }}js/mermaid.min.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
{%- if config.build_search_index -%}
<script src="{{config.base_url | safe }}elasticlunr.min.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
<script src="{{config.base_url | safe }}js/search.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
{%- endif -%}
</head>
<body>
{% include 'header.html' %}
<main>
<div class="container" id="main-container">
{% block content %} {% endblock %}
</div>
</main>
{% include 'footer.html' %}
<script src = "{{config.base_url | safe }}js/colortheme.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
<script src = "{{config.base_url | safe }}js/init.js?v={{ cdn_version }}" nonce="{{config.extra.nonce}}"></script>
</body>
</html>

View file

@ -0,0 +1,7 @@
{% if page.extra.show_comments %}
<div class="row">
<div class="col-2"></div>
<div class="col-8" id="giscusWidget">
</div>
</div>
{% endif %}

View file

@ -0,0 +1,18 @@
{% block footer %}
{% if page.extra.show_copyright or section.extra.show_copyright or term is defined %}
{%- set YEAR = now() | date(format="%Y") -%}
<footer class="row">
<div class="col-2"></div>
<div class="col-8" id="footer-wrapper">
<div class="footer-text">{{ config.extra.copyright_string | replace (from="%YEAR%", to=YEAR) | markdown | safe }}</div>
{% if config.extra.footer.icons.github %}
<div class="footer-icons"><a href="{{config.extra.footer.icons.github}}" class="icon footer icon-gh"></a></div>
{% endif %}
{% if config.extra.footer.icons.linkedin %}
<div class="footer-icons"><a href="{{config.extra.footer.icons.linkedin}}" class="icon footer icon-linkedin"></a></div>
{% endif %}
</div>
<div class="col-2"></div>
</footer>
{% endif %}
{% endblock footer %}

View file

@ -0,0 +1,36 @@
{% block header %}
<header>
<div class="container" id="header-container">
<div class="row">
<div class="col-2"></div>
<div class="col-8" id="top">
<div id="menu">
<ul>
{% for menuitem in config.extra.top_menu %}
<li><a href="{% if menuitem == config.extra.index_page %}{{config.base_url | safe }}{% else %}{{config.base_url | safe }}{{ menuitem }}{% endif %}" class="{% if menuitem in current_url and menuitem != '/' %} active{% elif menuitem == config.extra.index_page and current_url == config.base_url %} active{% endif %}">{{ menuitem }}</a></li>
{% endfor %}
</ul>
</div>
{%- if config.build_search_index -%}
<div id="searchBox">
<span class="icon icon-search head"></span>
<input id="searchInput" name="search">
</div>
{%- endif -%}
<span id="cIcon" class="icon head"></span>
</div>
<div class="col-2"></div>
</div>
</div>
</header>
{%- if config.build_search_index -%}
<div class="row">
<div class="col-12">
<div id="sResults">
<ul id="sResultsUL" class="search-results">
</ul>
</div>
</div>
</div>
{%- endif -%}
{% endblock header %}

View file

@ -0,0 +1,21 @@
{% extends "base.html" %}
{% block content %}
<div class="row content" id="flexbox">
<div class="col-2"></div>
<div class="col-5 content" id="index-text">
<h1 class="center">
About
</h1>
{% if section.content %} {{ section.content | safe }}
{% elif page.content %}
{{ page.content }}
{% endif %}
</div>
<div class="col-3">
<div id = "index-image">
<img src="{{config.base_url}}{{ config.extra.avatar_src }}" alt="avatar" class="avatar">
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,72 @@
{% extends "base.html" %}
{% block content %}
<div class="row">
<div class="col-2"></div>
<div class="col-8 content">
<h1 class="center">
{%- if page.title -%}{{ page.title | safe }}
{%- elif section.title -%}{{ section.title | safe }}
{%- endif -%}
</h1>
{% if page.extras.show_date %}
<h6>{{ page.date | date(format="%e %b %Y") }}</h6>
{% endif %}
<span class="post-tags">
<ul>
{% if page.taxonomies.tags %}
{% for tag in page.taxonomies.tags %}
<li><a href="{{ get_taxonomy_url(kind='tags', name=tag) | safe }}" class="singlepost-tags">#{{ tag }}</a>&nbsp;</li>
{% endfor %}
{% endif %}
</ul>
</span>
{%- if post.description -%}<div class="fullpost-desc">
<blockquote>{{ page.description }}</blockquote>
</div>{%- endif -%}
<div>
{% if page.toc and page.extra.show_toc %}
<details>
<summary><span class="toc-header">Contents</span></summary>
<ul class="toc">
{% for h1 in page.toc %}
<li class="toc"><a href="{{ h1.permalink | safe }}">{{ h1.title }}</a>
{% if h1.children %}
<ul class="toc">
{% for h2 in h1.children %}
<li class="toc"><a href="{{ h2.permalink | safe }}">{{ h2.title }}</a></li>
{% if h2.children %}
<ul class="toc">
{% for h3 in h2.children %}
<li class="toc"><a href="{{ h3.permalink | safe }}">{{ h3.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
</details>
{% endif %}
{%- if page.content -%}
{{ page.content | safe }}
{%- elif secion.content -%}
{{ section.content | safe }}
{%- endif -%}
</div>
</div>
<div class="col-2"></div>
</div>
<div class="row postnav">
<div class="col-2"></div>
<div class="col-8">
<div class="col-6 left">{% if page.higher %}<a class="postnav" href="{{page.higher.permalink | safe}}">&larr; {{page.higher.title}}</a>{% endif %}</div>
<div class="col-6 right">{% if page.lower %}<a class="postnav" href="{{page.lower.permalink | safe}}">{{page.lower.title}} &rarr;</a>{% endif %}</div>
</div>
<div class="col-2"></div>
</div>
</div>
{% include "shares.html" %}
{% include "comments.html" %}
{% endblock %}

View file

@ -0,0 +1,41 @@
{% extends "base.html" %}
{% block content %}
<div class="row content">
<div class="col-2"></div>
<div class="col-6 content" id="catlist">
<h1 class="center">{{ section.title }}</h1>
<ul>
{% for post in paginator.pages %}
<li><b><a href="{{ post.permalink | safe }}">
{{ post.date | date(format="%e %b %Y") }} <span class="invis">&raquo;</span>
{{ post.title }}</a></b><span class="icon icon-time post-list"></span><span class="invis reading-time">{{ post.reading_time }} min read</span>
{%- if post.description -%}<div class="invis post-desc">{{ post.description }}</div>{%- endif -%}
</li>
{% endfor %}
</ul>
<div class="pagination">
{%- if paginator.previous or paginator.next -%}
{%- set pag_start = 1 -%}
{%- set pag_end = paginator.number_pagers -%}
{%- if paginator.previous -%}<a href = "{{ paginator.previous }}">&larr;</a>{%- endif -%}
{%- for i in range(start=pag_start, end=pag_end+1) -%}
<a class="{% if paginator.current_index == i %} current {% endif %}" href="{{ paginator.base_url | safe }}{{ i ~ '/' }}">{{i}}</a>
{%- endfor -%}
{%- if paginator.next -%}<a href = {{paginator.next}}>&rarr;</a>{%- endif -%}
{%- endif -%}
</div>
</div>
<div class="col-2" id="taglist">
{% if section.ancestors %}
<h4>Tags:</h4>
{% set tags = get_taxonomy(kind="tags") %}
<ul>
{% for tag in tags.items %}
<li><a href="{{ tag.permalink | safe }}">{{ tag.name }}</a> ({{ tag.pages | length }})</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,16 @@
{% if page.extra.show_shares %}
<div class="row">
<div class="col-2"></div>
<div class="col-8 center shares">
<ul>
<li><a href = "https://www.linkedin.com/sharing/share-offsite/?url={{ current_url | safe }}" class="icon icon-linkedin shares"></a></li>
<li><a href="http://www.facebook.com/sharer.php?u={{ current_url | safe }}" class="icon icon-fb shares"></a></li>
<li><a href = "https://t.me/share/url?url={{ current_url | safe }}" class="icon icon-tg shares"></a></li>
<li><a href= "https://api.whatsapp.com/send?text={{ current_url | safe }}" class="icon icon-wa shares"></a></li>
</ul>
</div>
<div class="col-2"></div>
</div>
{% endif %}

View file

@ -0,0 +1,3 @@
<div class="badges center">
{{ body | markdown | replace(from="%20", to=" ") | safe }}
</div>

View file

@ -0,0 +1,22 @@
{% if type == 'warning' %}
{% set img = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8 4a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 4m.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2"/>
</svg>' %}
{% elif type == 'alert'%}
{% set img = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M4.5 7.5a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1z"/>
</svg>' %}
{% elif type == 'info' %}
{% set img = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/>
</svg>' %}
{% endif %}
<div class="co-container">
<div class="callout {{ type }}">
<span class="co-img">{{ img |safe }}</span>
<span class="co-body">
{{ body | markdown | safe}}
</span>
</div>
</div>

View file

@ -0,0 +1,3 @@
<pre class="mermaid">
{{ body | safe }}
</pre>

View file

@ -0,0 +1,11 @@
{% set raw = load_data(literal = body, format='toml') %}
{% set cards = raw.cards %}
<div class="cards-wrapper center">
{% for card in cards %}
<div class="panel">
<div class="skillcard-icon skillcard-icon-{{card.icon}}"></div>
<div class="skillcard-title"><strong>{{ card.title | safe }}</strong></div>
<div class="skillcard-details">{{ card.details | markdown | safe }}</div>
</div>
{% endfor %}
</div>

View file

@ -0,0 +1,12 @@
{% set dt = load_data(literal = body, format="json") %}
<div id="timeline-content">
<ul class="timeline">
{% for d in dt %}
<li class="event" data-date="{{ d.date |safe }}">
<h3>{{ d.title | markdown | safe}}</h3>
<p>{{ d.body | safe }}</p>
</li>
{% endfor %}
</ul>
</div>

View file

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block content %}
<div class="row">
<div class="col-12" id="content">
{% if terms %}
<ul>
{% for term in terms %}
<li><a class = "taglink" href="{{ term.permalink | safe }}">{{ term.name }}</a> ({{ term.pages | length }});</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,31 @@
{% extends "base.html" %}
{% block content %}
<div class="row content">
<div class="col-2"></div>
<div class="col-6 content" id="catlist">
<h1 class="center">Tag: {{ term.name }}</h1>
<ul>
{% for post in term.pages %}
<li><b><a href="{{ post.permalink | safe }}">
{{ post.date | date(format="%e %b %Y") }} <span class="invis">&raquo;</span>
{{ post.title }}</a></b><span class="icon icon-time post-list"></span><span class="invis reading-time">{{ post.reading_time }} min read</span>
{%- if post.description -%}<div class="invis post-desc">{{ post.description }}</div>{%- endif -%}
</li>
{% endfor %}
</ul>
<div class="pagination">
{%- if paginator.previous or paginator.next -%}
{%- set pag_start = 1 -%}
{%- set pag_end = paginator.number_pagers -%}
{%- if paginator.previous -%}<a href = "{{ paginator.previous }}">&larr;</a>{%- endif -%}
{%- for i in range(start=pag_start, end=pag_end+1) -%}
<a class="{% if paginator.current_index == i %} current {% endif %}" href="{{ paginator.base_url | safe }}{{ i ~ '/' }}">{{i}}</a>
{%- endfor -%}
{%- if paginator.next -%}<a href = {{paginator.next}}>&rarr;</a>{%- endif -%}
{%- endif -%}
</div>
</div>
</div>
<div class="col-2"></div>
</div>
{% endblock %}

14
themes/pico/theme.toml Normal file
View file

@ -0,0 +1,14 @@
name = "pico"
description = "Clean and minimalistic dark theme"
license = "MIT"
homepage = "https://github.com/kuznetsov17/pico"
# The minimum version of Zola required
min_version = "0.18.0"
# An optional live demo URL
demo = "https://kuznetsov17.github.io/pico/"
[author]
name = "Vitaliy Kuznetsov"
homepage = "https://viku.me"