Merge commit '8be91ee3d9' as 'themes/tabi-lean'

This commit is contained in:
Fabian Montero 2025-09-14 16:00:14 -06:00
commit 2c6602e3b2
336 changed files with 25227 additions and 0 deletions

1
themes/tabi-lean/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
public

21
themes/tabi-lean/LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Óscar Fernández
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.

View file

@ -0,0 +1,517 @@
base_url = "https://welpo.github.io/tabi"
title = "~/tabi"
description = "tabi is an accessible Zola theme with search, multi-language support, optional JavaScript, a perfect Lighthouse score, and comprehensive documentation. Crafted for personal websites and blogs."
author = "welpo"
generate_feeds = true
compile_sass = true
minify_html = true
build_search_index = true
# To translate the entire theme, there must be a file with the same language code
# in the `i18n` folder of your site or the tabi theme.
# For example, "i18n/fr.toml" for French or "i18n/zh-Hans.toml" for Simplified Chinese.
# Otherwise the theme will be in English.
# See https://welpo.github.io/tabi/blog/faq-languages/ for more details.
default_language = "en"
taxonomies = [{name = "tags", feed = true}]
[search]
# Whether to include the title of the page/section in the index.
include_title = true
# Whether to include the description of the page/section in the index.
include_description = true
# Whether to include the path of the page/section in the index.
include_path = true
# Whether to include the rendered content of the page/section in the index.
include_content = true
# At which character to truncate the content to. Useful if you have a lot of pages and the index would
# become too big to load on the site. Defaults to not being set.
# truncate_content_length = 100
# Whether to produce the search index as a javascript file or as a JSON file.
# Accepted value "elasticlunr_javascript" or "elasticlunr_json".
index_format = "elasticlunr_json"
[markdown]
highlight_code = true
bottom_footnotes = true
# To use a Zola built-in theme, CSP needs to allow unsafe-inline for style-src.
highlight_theme = "css"
smart_punctuation = true
# Set to 'external' to add an indicator next to external links.
external_links_class = "external"
[link_checker]
internal_level = "warn"
skip_prefixes = [
"https://www.vultr.com/",
]
skip_anchor_prefixes = [
"https://github.com/",
]
[languages.es]
title = "~/tabi"
description = "tabi es un tema accesible para Zola con búsqueda, soporte multilingüe, JavaScript opcional, una puntuación perfecta en Lighthouse y documentación exhaustiva. Diseñado para sitios web y blogs personales."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
build_search_index = true
[languages.ca]
title = "~/tabi"
description = "tabi és un tema accessible per a Zola amb cerca, suport multilingüe, JavaScript opcional, una puntuació perfecta a Lighthouse i documentació exhaustiva. Dissenyat per a llocs web i blogs personals."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
[languages.ar]
title = "~/تابي"
description = "تابي هو قالب Zola سريع وحديث مع دعم متعدد اللغات و JavaScript اختياري ودرجة Lighthouse مثالية."
generate_feeds = true
taxonomies = [{name = "tags", feed = true}]
build_search_index = false
[extra]
# Check out the documentation (or the comments below) to learn how to customise tabi:
# https://welpo.github.io/tabi/blog/mastering-tabi-settings/
# Search index format.
# For Zola 0.17.X users only.
# This MUST MATCH the setting in [search].index_format.
# Example: If [search].index_format is "elasticlunr_javascript", set:
# index_format = "elasticlunr_javascript"
# index_format = ""
# Use sans-serif font everywhere.
# By default, the serif font is only used in articles.
override_serif_with_sans = false
# Enable JavaScript theme toggler to allow users to switch between dark/light mode.
# If disabled, your site will use the theme specified in the `default_theme` variable.
theme_switcher = true
# This setting determines the default theme on load ("light" or "dark").
# To follow the user's OS theme, leave it empty or unset.
default_theme = ""
# Choose the colourscheme (skin) for the theme. Default is "teal".
# Skin available: blue, lavender, mint, red, sakura, teal, monochrome, lowcontrast_orange, lowcontrast_peach, lowcontrast_pink, indigo_ingot, evangelion
# See them live and learn how to create your own: https://welpo.github.io/tabi/blog/customise-tabi/#skins
# WARNING! "lowcontrast" skins, while aesthetically pleasing, may not provide optimal
# contrast (in light theme) for readability and might not be suitable for all users.
# Furthermore, low contrasting elements will affect your Google Lighthouse rating.
# All other skins have optimal contrast.
skin = ""
# Set browser theme colour. Can be a single colour or [light, dark].
# Note: Bright colors may be ignored in dark mode.
# More details: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta/name/theme-color
browser_theme_color = "#087e96"
# browser_theme_color = ["#ffffff", "#000000"] # Example of light/dark colours.
# List additional stylesheets to load site-wide.
# These stylesheets should be located in your site's `static` directory.
# Example: stylesheets = ["extra1.css", "path/extra2.css"]
# You can load a stylesheet for a single post by adding it to the [extra] section of the post's front matter, following this same format.
stylesheets = []
# Sets the default canonical URL for all pages.
# Individual pages can override this in the [extra] section using canonical_url.
# Example: "$base_url/blog/post1" will get the canonical URL "https://example.com/blog/post1".
# Note: To ensure accuracy in terms of matching content, consider setting 'canonical_url' individually per page.
# base_canonical_url = "https://example.com"
# Remote repository for your Zola site.
# Used for `show_remote_changes` and `show_remote_source` (see below).
# Supports GitHub, GitLab, Gitea, and Codeberg.
remote_repository_url = "https://github.com/welpo/tabi"
# Set this to "auto" to try and auto-detect the platform based on the repository URL.
# Accepted values are "github", "gitlab", "gitea", and "codeberg".
remote_repository_git_platform = "auto" # Defaults to "auto".
# Branch in the repo hosting the Zola site.
remote_repository_branch = "main" # Defaults to "main".
# Show a link to the commit history of updated posts, right next to the last updated date.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
show_remote_changes = true # Defaults to true.
# Show a link to the repository of the site, right next to the "Powered by Zola & tabi" text.
show_remote_source = true # Defaults to true.
# Add a "copy" button to code blocks (loads ~700 bytes of JavaScript).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
copy_button = true
# Make code block names clickable if they are URLs (loads ~400 bytes of JavaScript).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
code_block_name_links = false
# Force left-to-right (LTR) direction for code blocks.
# Set to false to allow code to follow the document's natural direction.
# Can be set at page or section levels. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
force_codeblock_ltr = true
# Show the author(s) of a page.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
show_author = false
# Show the reading time of a page.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
show_reading_time = true
# Show the date of a page below its title.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
show_date = true
# Determines how dates are displayed in the post listing (e.g. front page or /blog). Options:
# "date" - Show only the original date of the post (default if unset).
# "updated" - Show only the last updated date of the post. If there is no last updated date, it shows the original date.
# "both" - Show both the original date and the last updated date.
post_listing_date = "date"
# Enable iine like buttons on all posts: https://iine.to/
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
iine = true
iine_icon = "thumbs_up" # See https://iine.to/#customise
# Unify like counts across all language versions of the same page.
# When enabled, likes on /es/blog/hello/ will count towards /blog/hello/ (default language).
iine_unified_languages = true
# Show "Jump to posts" link next to series' title.
# By default, the link appears automatically when a series description exceeds 2000 characters.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
# show_jump_to_posts = true
# Determines if indexes should be increasing (false) or decreasing (true) in series' posts list.
# It has only effect if the section uses indexes metadata (which is only the case for series as of now).
# Can be set at section levels, following the hierarchy: section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
post_listing_index_reversed = false # Defaults to false.
# DEPRECATED!
# Use Zola's built-in `bottom_footnotes = true` in the [markdown] section instead. (Available since v0.19.0)
# Adds backlinks to footnotes (loads ~500 bytes of JavaScripts).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
footnote_backlinks = false
# Enable KaTeX for all posts.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
katex = false
# Enable Mermaid diagrams for all posts.
# Loads ~2.5MB of JavaScript.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
mermaid = false
# Serve Mermaid JavaScript locally. Version bundled with tabi.
# If set to false, it will load the latest version from JSDelivr.
# Only relevant when `mermaid = true`.
serve_local_mermaid = true
# Show links to previous and next articles at the bottom of posts.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
show_previous_next_article_links = false
# Invert order of the links to previous and next articles at the bottom of posts.
# By default, next articles are on the left side of the page and previous articles are on the right side.
# To reverse the order (next articles on the right and previous articles on the left), set it to true.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
invert_previous_next_article_links = false
# Whether the navigation for previous/next article should match the full width of the site (same as the navigation bar at the top) or the article width.
# To match the navigation bar at the top, set it to true.
previous_next_article_links_full_width = true
# Quick navigation buttons.
# Adds "go up" and "go to comments" buttons on the bottom right (hidden for mobile).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
quick_navigation_buttons = false
# Add a Table of Contents to posts, right below the title and metadata.
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
toc = false
# Date format used when listing posts (main page, /blog section, tag posts list…)
# Default is "6th July 2049" in English and "%d %B %Y" in other languages.
long_date_format = "%d %B %Y"
# Date format used for blog posts.
# Default is "6th July 2049" in English and "%-d %B %Y" in other languages.
short_date_format = ""
# Date format used for the archive page.
# Default is "06 July" in English and "%d %b" in other languages.
archive_date_format = ""
# Per-language date format overrides.
# Examples: Spanish uses "3 de febrero de 2024", German uses "3. Februar 2024"
date_formats = [
{ lang = "es", long = "%d de %B de %Y", short = "%-d %b %Y" },
{ lang = "de", long = "%d. %B %Y", short = "%d.%m.%Y", archive = "%d. %b" },
]
# Custom separator used in title tag and posts metadata (between date, time to read, and tags).
separator = "•"
# Use a shorter layout for All tags listing.
# Default: tag_name n post[s]
# Compact: tag_name^n (superscript number)
compact_tags = false
# How tags are sorted in a Tags listing based on templates/tags/list.html.
# "name" for alphabetical, "frequency" for descending count of posts.
# Default: "name".
tag_sorting = "name"
# Show clickable tags above cards.html template (e.g. projects/) to filter the displayed items.
# Loads JS to filter. If JS is disabled, the buttons are links to the tag's page.
# Can be set at the section or config.toml level, following the hierarchy: section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
# Default: true
enable_cards_tag_filtering = true
# Invert the order of the site title and page title in the browser tab.
# Example: true => "Blog • ~/tabi", false => "~/tabi • Blog"
invert_title_order = false
# Full path after the base URL required. So if you were to place it in "static" it would be "/favicon.png"
favicon = "img/seedling.png"
# Add an emoji here to use it as favicon.
# Compatibility: https://caniuse.com/link-icon-svg
favicon_emoji = "🌱"
# Path to the fallback image for social media cards (the preview image shown when sharing a link on WhatsApp, LinkedIn…).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
# Learn how to create these images in batch and automatically:
# https://osc.garden/blog/automating-social-media-cards-zola/
social_media_card = "index.jpg"
menu = [
{ name = "blog", url = "blog", trailing_slash = true },
{ name = "archive", url = "archive", trailing_slash = true },
{ name = "tags", url = "tags", trailing_slash = true },
{ name = "projects", url = "projects", trailing_slash = true },
]
# The RSS icon will be shown if (1) it's enabled and (2) the following variable is set to true.
# Note for Zola 0.19.X users: when `feed_filenames` has two filenames, only the first one will be linked in the footer.
feed_icon = true
# Show the full post content in the Atom feed.
# If it's set to false, only the description or summary will be shown.
full_content_in_feed = false
# Email address for footer's social section.
# Protect against spambots:
# 1. Use base64 for email (convert at https://www.base64encode.org/ or `printf 'your@email.com' | base64`).
# 2. Or, set 'encode_plaintext_email' to true for auto-encoding (only protects on site, not in public repos).
email = "dGFiaUBvc2MuZ2FyZGVu"
# Decoding requires ~400 bytes of JavaScript. If JS is disabled, the email won't be displayed.
encode_plaintext_email = true # Setting is ignored if email is already encoded.
# Social media links for the footer.
# Built-in icons: https://github.com/welpo/tabi/tree/main/static/social_icons
# To use a custom icon, add it to your site's `static/social_icons` directory.
socials = [
{ name = "github", url = "https://github.com/welpo/", icon = "github" },
{ name = "soundcloud", url = "https://soundcloud.com/oskerwyld", icon = "soundcloud" },
{ name = "instagram", url = "https://instagram.com/oskerwyld", icon = "instagram" },
{ name = "youtube", url = "https://youtube.com/@oskerwyld", icon = "youtube" },
{ name = "spotify", url = "https://open.spotify.com/artist/5Hv2bYBhMp1lUHFri06xkE", icon = "spotify" },
]
# Fediverse profile.
# Adds metadata to feature the author's profile in Mastodon link previews.
# Example: for @username@example.com, use:
# fediverse_creator = { handle = "username", domain = "example.com" }
# Extra menu to show on the footer, below socials section.
footer_menu = [
{url = "about", name = "about", trailing_slash = true},
{url = "privacy", name = "privacy", trailing_slash = true},
{url = "https://tabi-stats.osc.garden", name = "site_statistics", trailing_slash = true},
{url = "sitemap.xml", name = "sitemap", trailing_slash = false},
]
# Enable a copyright notice for the footer, shown between socials and the "Powered by" text.
# $TITLE will be replaced by the website's title.
# $CURRENT_YEAR will be replaced by the current year.
# $AUTHOR will be replaced by the `author` variable.
# $SEPARATOR will be replaced by the `separator` variable.
# Markdown is supported (links, emphasis, etc).
# copyright = "$TITLE © $CURRENT_YEAR $AUTHOR $SEPARATOR Unless otherwise noted, the content in this website is available under the [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) license."
# For multi-language sites, you can set a different copyright for each language.
# The old way of setting `translated_copyright = true` and using i18n files is deprecated.
# If a translation is missing for language, the `copyright` value will be used.
# copyright_translations.es = "$TITLE © $CURRENT_YEAR $AUTHOR $SEPARATOR A menos que se indique lo contrario, el contenido de esta web está disponible bajo la licencia [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)."
# Custom security headers. What urls should your website be able to connect to?
# You need to specify the CSP and the URLs associated with the directive.
# Useful if you want to load remote content safely (embed YouTube videos, which needs frame-src, for example).
# Default directive is self.
# Default config, allows for https remote images and embedding YouTube and Vimeo content.
# This configuration (along with the right webserver settings) gets an A+ in Mozilla's Observatory: https://observatory.mozilla.org
# Note: to use a Zola built-in syntax highlighting theme, allow unsafe-inline for style-src.
allowed_domains = [
{ directive = "font-src", domains = ["'self'", "data:"] },
{ directive = "img-src", domains = ["'self'", "https://*", "data:"] },
{ directive = "media-src", domains = ["'self'", "https://cdn.jsdelivr.net/"] },
{ directive = "script-src", domains = ["'self'"] },
{ directive = "style-src", domains = ["'self'"] },
{ directive = "frame-src", domains = ["player.vimeo.com", "https://www.youtube-nocookie.com"] },
]
# Enable the CSP directives configured (or default).
# Can be set at page or section levels, following the hierarchy: page > section > config. See: https://welpo.github.io/tabi/blog/mastering-tabi-settings/#settings-hierarchy
enable_csp = true
# Font subsetting configuration.
# This feature helps prevent text flashing in Firefox when using custom fonts.
# See: https://welpo.github.io/tabi/blog/custom-font-subset/
# Enable or disable font subsetting completely, both built-in and custom subsets.
enable_subset = true
# Use a custom subset of characters for the header.
# If true, tabi will load the `static/custom_subset.css` file.
# If false, tabi will use the default language-specific subset (English or Spanish).
custom_subset = true
[extra.analytics]
# Specify which analytics service you want to use.
# Supported options: ["goatcounter", "umami", "plausible"]
service = "goatcounter"
# Unique identifier for tracking.
# For GoatCounter, this is the code you choose during signup.
# For Umami, this is the website ID.
# For Plausible, this is the domain name (e.g. "example.com").
# Note: Leave this field empty if you're self-hosting GoatCounter.
# id = "yourID"
# Optional: Specify the URL for self-hosted analytics instances.
# For GoatCounter: Base URL like "https://stats.example.com"
# For Umami: Base URL like "https://umami.example.com"
# For Plausible: Base URL like "https://plausible.example.com"
# Leave this field empty if you're using the service's default hosting.
self_hosted_url = "https://tabi-stats.osc.garden"
# Optional: For Umami, enable this option to respect users' Do Not Track (DNT) settings. The default is true.
do_not_track = true
# giscus support for comments. https://giscus.app
# Setup instructions: https://welpo.github.io/tabi/blog/comments/#setup
[extra.giscus]
enabled_for_all_posts = false # Enables giscus on all posts. It can be enabled on individual posts by setting `giscus = true` in the [extra] section of a post's front matter.
automatic_loading = true # If set to false, a "Load comments" button will be shown.
repo = "welpo/tabi-comments"
repo_id = "R_kgDOJ59Urw" # Find this value in https://giscus.app/
category = "Announcements"
category_id = "DIC_kwDOJ59Ur84CX0QG" # Find this value in https://giscus.app/
mapping = "slug" # Available: pathname; url; title; slug. "slug" will use the post's filename (slug); this is the only way to share comments between languages.
strict_title_matching = 1 # 1 to enable, 0 to disable. https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#data-strict
enable_reactions = 1 # 1 to enable, 0 to disable.
comment_box_above_comments = false
light_theme = "noborder_light"
dark_theme = "noborder_dark"
lang = "" # Leave blank to match the page's language.
lazy_loading = true
# utterances support for comments. https://utteranc.es
# Setup instructions: https://welpo.github.io/tabi/blog/comments/#setup
[extra.utterances]
enabled_for_all_posts = false # Enables utterances on all posts. It can be enabled on individual posts by setting `utterances = true` in the [extra] section of a post's front matter.
automatic_loading = true # If set to false, a "Load comments" button will be shown.
repo = "yourGithubUsername/yourRepo" # https://utteranc.es/#heading-repository
issue_term = "slug" # Available: pathname; url; title; slug. "slug" will use the post's filename (slug); this is the only way to share comments between languages. https://utteranc.es/#heading-mapping
label = "💬" # https://utteranc.es/#heading-issue-label
light_theme = "github-light" # https://utteranc.es/#heading-theme
dark_theme = "photon-dark" # https://utteranc.es/#heading-theme
lazy_loading = true
# Hyvor Talk support for comments. https://talk.hyvor.com
[extra.hyvortalk]
enabled_for_all_posts = false # Enables hyvortalk on all posts. It can be enabled on individual posts by setting `hyvortalk = true` in the [extra] section of a post's front matter.
automatic_loading = true # If set to false, a "Load comments" button will be shown.
website_id = "1234"
page_id_is_slug = true # If true, it will use the post's filename (slug) as id; this is the only way to share comments between languages. If false, it will use the entire url as id.
lang = "" # Leave blank to match the page's language.
page_author = "" # Email (or base64 encoded email) of the author.
lazy_loading = true
# Isso support for comments. https://isso-comments.de/
# You need to self-host the backend first: https://blog.phusion.nl/2018/08/16/isso-simple-self-hosted-commenting-system/
# More info on some settings: https://isso-comments.de/docs/reference/client-config/
[extra.isso]
enabled_for_all_posts = false # Enables Isso on all posts. It can be enabled on individual posts by setting `isso = true` in the [extra] section of a post's front matter.
automatic_loading = true # If set to false, a "Load comments" button will be shown.
endpoint_url = "" # Accepts relative paths like "/comments/" or "/isso/", as well as full urls like "https://example.com/comments/". Include the trailing slash.
page_id_is_slug = true # If true, it will use the relative path for the default language as id; this is the only way to share comments between languages. If false, it will use the entire url as id.
lang = "" # Leave blank to match the page's language.
max_comments_top = "inf" # Number of top level comments to show by default. If some comments are not shown, an “X Hidden” link is shown.
max_comments_nested = "5" # Number of nested comments to show by default. If some comments are not shown, an “X Hidden” link is shown.
avatar = true
voting = true
page_author_hashes = "" # hash (or list of hashes) of the author.
lazy_loading = true # Loads when the comments are in the viewport (using the Intersection Observer API).
[extra.webmentions]
# To disable for a specific section or page, set webmentions = false in that page/section's front matter's [extra] section.
enable = false
# Specify the domain registered with webmention.io.
domain = ""
# The HTML ID for the object to fill in with the webmention data.
# Defaults to "webmentions"
# id = "webmentions"
# data configuration for the webmention.min.js script
# The base URL to use for this page. Defaults to window.location
# page_url =
# Additional URLs to check, separated by |s
# add_urls
# The maximum number of words to render in reply mentions.
# wordcount = 20
# The maximum number of mentions to retrieve. Defaults to 30.
# max_webmentions = 30
# By default, Webmentions render using the mf2 'url' element, which plays
# nicely with webmention bridges (such as brid.gy and telegraph)
# but allows certain spoofing attacks. If you would like to prevent
# spoofing, set this to a non-empty string (e.g. "true").
# prevent_spoofing
# What to order the responses by; defaults to 'published'. See
# https://github.com/aaronpk/webmention.io#api
# sort_by
# The order to sort the responses by; defaults to 'up' (i.e. oldest
# first). See https://github.com/aaronpk/webmention.io#api
# sort_dir
# If set to a non-empty string (e.g. "true"), will display comment-type responses
# (replies/mentions/etc.) as being part of the reactions
# (favorites/bookmarks/etc.) instead of in a separate comment list.
# comments_are_reactions = "true"
# h-card configuration
# Will identify you on the indieweb (see https://microformats.org/wiki/h-card)
[extra.hcard]
# Enable home page h-card.
# enable = true
# Add your email to the card if extra.email is set and not encoded.
# with_mail = true
# Add your social links ('socials' config) to the card.
# with_social_links = true
# Homepage url. Defaults to the value of 'base_url'.
# homepage = "https://myhomepage.net"
# avatar = "img/profile.webp"
# Display name, default to the value of 'author'.
# full_name = "John Doe"
# Small bio, as shown on social media profiles.
# biography = "Fond of the indieweb"
#
# You can add any property from https://microformats.org/wiki/h-card#Properties
# Make sure to replace all '-' characters by '_'
# Examples:
# p_nickname = "nickname"
# p_locality = "Bordeaux"
# p_country_name = "France"

View file

@ -0,0 +1,113 @@
# Hello, the Arabic language has many pronouns and words, and each word indicates a different meaning,
# unlike the English language, in which, on the other hand, the word can refer to a person and a group.
# This translation is for individual use, if you are a company or organization, I have put a comment in
# front of each translation that refers to the person and the other word that refers to the organization
language_name = "العربية" # Shown in language picker for multi-language sites.
date_locale = "ar_SA" # The locale code for time and date formatting.
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "التدوينات"
archive = "الأرشيف"
tags = "الوسوم"
projects = "مشاريعي" #Change this to "المشاريع" if the site is for an organization.
about = "عني" #Change this to "عنا" or "من نحن" if the site is for an organization.
contact = "تواصل معي" #Change this to "تواصل معنا" if the site is for an organization.
privacy = "الخصوصية"
site_statistics = "إحصائيات المدونة"
sitemap = "خريطة المدونة"
# Search.
search = "بحث"
search_icon_title = "أنقر هنا أو اضغط $SHORTCUT لفتح البحث" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "مسح البحث"
zero_results = "لم يتم العثور على نتائج" #No search results.
one_results = "تم العثور على نتيجة واحدة" # One search result.
two_results = "تم العثور على نتيجتين" # Two search results.
few_results = "تم العثور على $NUMBER نتائج" # for 3 to 10 search results.
many_results = "تم العثور على $NUMBER نتيجة" # 11 or more search results.
# Navigation.
pinned = "مثبتة"
jump_to_posts = "الإنتقال إلى التدوينات"
read_more = "إقرأ المزيد"
one_posts = "تدوينة واحدة" #One blog post.
two_posts = "تدوينتين" #Two blog posts.
few_posts = "$NUMBER تدوينات" #3 to 10 blog posts.
many_posts = "$NUMBER تدوينة" #11 or more blog posts.
prev = "السابق" # As in "Previous" page.
next = "التالي" # As in "Next" page.
of = "من" # E.g. Page 1 "of" 3
all_posts = "جميع التدوينات"
all_tags = "جميع الوسوم"
all_projects = "جميع المشاريع"
featured_projects = "المشاريع المميزة"
language_selection = "تحديد اللغة"
toggle_mode = "تبديل الاوضاع $MODE" # $MODE will be replaced by a value (or both) below.
dark = "داكن"
light = "فاتح"
reset_mode = "إعادة تعيين الوضع"
# Quick navigation buttons.
toggle_toc = "إظهار / إخفاء جدول المحتويات"
go_to_top = "انتقل إلى أعلى الصفحة"
go_to_comments = "انتقل إلى التعليقات"
# Post metadata.
by_author = "بقلم $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = "، " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " و " # For multiple authors. Ensure spacing where necessary.
draft = "مسودة"
zero_min_read = "الوقت المتوقع للقراءة: أقل من دقيقة" #Less than one minute read.
one_min_read = "الوقت المتوقع للقراءة: دقيقة واحدة" #One minute read.
two_min_read = "الوقت المتوقع للقراءة: دقيقتان" #Two minutes read.
few_min_read = "الوقت المتوقع للقراءة: $NUMBER دقائق" #3 to 10 minutes read.
many_min_read = "الوقت المتوقع للقراءة: $NUMBER دقيقة" #11 or more minutes read.
zero_words = "لا توجد كلمات" # No words.
one_words = "كلمة واحدة" # One word.
two_words = "كلمتين" # Two words.
few_words = "$NUMBER كلمات" # 3 to 10 words.
many_words = "$NUMBER كلمة" # 11 or more words.
last_updated_on = "تم التحديث في $DATE"
see_changes = "الإطلاع على التغييرات"
# Post body.
table_of_contents = "جدول المحتويات"
load_comments = "إظهار التعليقات"
# Copy code block button.
copied = "تم النسخ!"
copy_code_to_clipboard = "نسخ الشِفرة إلى الحافظة"
# iine appreciation button.
like_this_post = "أعجبني"
# Footer: Powered by Zola and tabi.
powered_by = "مُشَغل بواسطة"
and = "و"
site_source = "شِفرة الموقع"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "الصفحة غير موجودة"
translation_missing = "أو لم يتم ترجمتها إلى اللغة التي تطلبها"
check_url = "تحقق من أن الرابط صحيح أو"
go_home = "انتقل إلى الصفحة الرئيسية"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "إظهار الإقتباس الأصلي"
show_translation = "إظهار الترجمة"
open_quotation_mark = '"'
close_quotation_mark = '"'
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "الخلاصة تجدها هنا، تُسمى أيضًا Atom. اشترك عبر نسخ الرابط إلى برنامج قارئ الخُلاصات الذي تستخدمه. قم بزيارة About Feeds لمعرفة المزيد والبدء. انه مجانا."
visit_the_site = "زيارة الموقع"
recent_posts = "المنشورات الأخيرة"

View file

@ -0,0 +1,98 @@
language_name = "Català" # Shown in language picker for multi-language sites.
date_locale = "ca_ES"
full_stop ="." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "arxiu"
tags = "etiquetes"
projects = "projectes"
about = "sobre mi"
contact = "contacte"
privacy = "política de privadesa"
site_statistics = "estadístiques del lloc"
sitemap = "mapa del lloc"
# Search.
search = "Cercar"
search_icon_title = "Fes clic o prem $SHORTCUT per obrir la cerca" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Esborrar cerca" # Title of the X icon next to search input.
zero_results = "No s'han trobat resultats"
one_results = "$NUMBER resultat" # "1 result"
many_results = "$NUMBER resultats" # "3 results"
# Navigation.
pinned = "Fixada"
jump_to_posts = "Saltar als articles"
read_more = "Llegir més"
one_posts = "$NUMBER entrada"
many_posts = "$NUMBER entrades"
prev = "Anterior" # As in "Previous" page.
next = "Següent" # As in "Next" page.
of = "de" # E.g. Page 1 "of" 3
all_posts = "Totes les entrades"
all_tags = "Totes les etiquetes"
all_projects = "Tots els projectes"
featured_projects = "Projectes destacats"
language_selection = "Selecció d'idioma"
toggle_mode = "Canvia el mode $MODE" # $MODE will be replaced by a value (or both) below.
dark = "obscur"
light = "clar"
reset_mode = "Restableix el mode al valor predeterminat"
# Quick navigation buttons.
toggle_toc = "Mostrar/ocultar la taula de continguts"
go_to_top = "Vés a l'inici de la pàgina"
go_to_comments = "Vés a la secció de comentaris"
# Post metadata.
by_author = "Per $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " i " # For multiple authors. Ensure spacing where necessary.
draft = "ESBORRANY"
zero_min_read = "<1 min de lectura"
one_min_read = "$NUMBER min de lectura"
many_min_read = "$NUMBER mins de lectura"
zero_words = "Cap paraula"
one_words = "$NUMBER paraula"
many_words = "$NUMBER paraules"
last_updated_on = "Actualitzat el $DATE"
see_changes = "Veure canvis"
# Post body.
table_of_contents = "Taula de contingut"
load_comments = "Carregar comentaris"
# Copy code block button.
copied = "Copiat!"
copy_code_to_clipboard = "Copia el codi al porta-retalls"
# iine appreciation button.
like_this_post = "M'agrada aquesta publicació"
# Footer: Powered by Zola and tabi.
powered_by = "Propulsat per"
and = "i"
site_source = "Codi del lloc"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "La pàgina que has sol·licitat sembla que no existeix"
translation_missing = "o encara no s'ha traduït al teu idioma"
check_url = "Comprova l'URL per detectar errors o"
go_home = "torna a la pàgina d'inici"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Mostra la cita original"
show_translation = "Mostra la traducció"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Aquest és un canal web, també conegut com a canal Atom. Subscriu-te copiant l'URL de la barra d'adreces al teu lector de notícies. Visita About Feeds per aprendre més i començar. És gratuït."
visit_the_site = "Visita la web"
recent_posts = "Publicacions recents"

View file

@ -0,0 +1,102 @@
# This has been machine translated.
# If you would like to help correct errors or improve the translation,
# please open an issue or submit a pull request.
# https://github.com/welpo/tabi
language_name = "Deutsch" # Shown in language picker for multi-language sites.
date_locale = "de_DE"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archiv"
tags = "tags"
projects = "projekte"
about = "über"
contact = "kontakt"
privacy = "datenschutzrichtlinie"
site_statistics = "seitenstatistiken"
sitemap = "seitenübersicht"
# Search.
search = "Suchen"
search_icon_title = "Klicken oder $SHORTCUT drücken, um die Suche zu öffnen" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Suche löschen" # Title of the X icon next to search input.
zero_results = "Keine Ergebnisse gefunden"
one_results = "$NUMBER Ergebnis" # "1 result"
many_results = "$NUMBER Ergebnisse" # "3 results"
# Navigation.
pinned = "Angeheftet"
jump_to_posts = "Zu den Beiträgen springen"
read_more = "Weiterlesen"
one_posts = "$NUMBER Beitrag"
many_posts = "$NUMBER Beiträge"
prev = "Vorherig" # As in "Previous" page.
next = "Nächst" # As in "Next" page.
of = "von" # E.g. Page 1 "of" 3
all_posts = "Alle Beiträge"
all_tags = "Alle Tags"
all_projects = "Alle Projekte"
featured_projects = "Empfohlene Projekte"
language_selection = "Sprachauswahl"
toggle_mode = "Wechsle in den $MODE Modus" # $MODE will be replaced by a value (or both) below.
dark = "dunkel"
light = "hell"
reset_mode = "Modus auf Standard zurücksetzen"
# Quick navigation buttons.
toggle_toc = "Inhaltsverzeichnis ein-/ausblenden"
go_to_top = "Zum Seitenanfang"
go_to_comments = "Zum Kommentarbereich"
# Post metadata.
by_author = "Von $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " und " # For multiple authors. Ensure spacing where necessary.
draft = "ENTWURF"
zero_min_read = "weniger als 1 Min. Lesezeit"
one_min_read = "$NUMBER Min. Lesezeit"
many_min_read = "$NUMBER Min. Lesezeit"
zero_words = "Keine Wörter"
one_words = "$NUMBER Wort"
many_words = "$NUMBER Wörter"
last_updated_on = "Aktualisiert am $DATE"
see_changes = "Änderungen anzeigen"
# Post body.
table_of_contents = "Inhaltsverzeichnis"
load_comments = "Kommentare laden"
# Copy code block button.
copied = "Kopiert!"
copy_code_to_clipboard = "Code in die Zwischenablage kopieren"
# iine appreciation button.
like_this_post = "Dieser Beitrag gefällt mir"
# Footer.
powered_by = "Angetrieben von"
and = "und"
site_source = "Quellcode der Seite"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Die Seite, die du angefordert hast, scheint nicht zu existieren"
translation_missing = "oder wurde noch nicht in deine Sprache übersetzt"
check_url = "Überprüfe die URL auf Fehler oder"
go_home = "zurück zur Startseite gehen"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Originalzitat anzeigen"
show_translation = "Übersetzung anzeigen"
open_quotation_mark = "„"
close_quotation_mark = "“"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Dies ist ein Web-Feed, auch bekannt als Atom-Feed. Abonnieren Sie, indem Sie die URL aus der Adressleiste in Ihren Nachrichtenleser kopieren. Besuchen Sie About Feeds, um mehr zu erfahren und loszulegen. Es ist kostenlos."
visit_the_site = "Besuchen Sie die Webseite"
recent_posts = "Aktuelle Beiträge"

View file

@ -0,0 +1,98 @@
language_name = "English" # Shown in language picker for multi-language sites.
date_locale = "en_GB"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archive"
tags = "tags"
projects = "projects"
about = "about"
contact = "contact"
privacy = "privacy policy"
site_statistics = "site statistics"
sitemap = "sitemap"
# Search.
search = "Search"
search_icon_title = "Click or press $SHORTCUT to open search" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Clear search" # Title of the X icon next to search input.
zero_results = "No results"
one_results = "$NUMBER result" # "1 result"
many_results = "$NUMBER results" # "3 results"
# Navigation.
pinned = "Pinned"
jump_to_posts = "Jump to posts"
read_more = "Read more"
one_posts = "$NUMBER post"
many_posts = "$NUMBER posts" # "3 posts"
prev = "Prev" # As in "Previous" page.
next = "Next" # As in "Next" page.
of = "of" # E.g. Page 1 "of" 3
all_posts = "All posts"
all_tags = "All tags"
all_projects = "All projects"
featured_projects = "Featured projects"
language_selection = "Language selection"
toggle_mode = "Toggle $MODE mode" # $MODE will be replaced by a value (or both) below.
dark = "dark"
light = "light"
reset_mode = "Reset mode to default"
# Quick navigation buttons.
toggle_toc = "Toggle Table of Contents"
go_to_top = "Go to the top of the page"
go_to_comments = "Go to the comments section"
# Post metadata.
by_author = "By $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " and " # For multiple authors. Ensure spacing where necessary.
draft = "DRAFT"
zero_min_read = "<1 min read"
one_min_read = "$NUMBER min read"
many_min_read = "$NUMBER min read"
zero_words = "No words"
one_words = "$NUMBER word"
many_words = "$NUMBER words"
last_updated_on = "Updated on $DATE"
see_changes = "See changes"
# Post body.
table_of_contents = "Table of Contents"
load_comments = "Load comments"
# Copy code block button.
copied = "Copied!"
copy_code_to_clipboard = "Copy code to clipboard"
# iine appreciation button.
like_this_post = "Like this post"
# Footer: Powered by Zola and tabi.
powered_by = "Powered by"
and = "&"
site_source = "Site source"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "The page you've requested seems to be missing"
translation_missing = "or hasn't been translated into your language yet"
check_url = "Check the URL for errors or"
go_home = "go back to the homepage"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Show original quote"
show_translation = "Show translation"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "This is a web feed, also known as an Atom feed. Subscribe by copying the URL from the address bar into your newsreader. Visit About Feeds to learn more and get started. It's free."
visit_the_site = "Visit website"
recent_posts = "Recent posts"

View file

@ -0,0 +1,98 @@
language_name = "Español" # Shown in language picker for multi-language sites.
date_locale = "es_ES"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archivo"
tags = "etiquetas"
projects = "proyectos"
about = "sobre mí"
contact = "contacto"
privacy = "política de privacidad"
site_statistics = "estadísticas del sitio"
sitemap = "mapa del sitio"
# Search.
search = "Buscar"
search_icon_title = "Haz clic o usa $SHORTCUT para abrir la búsqueda" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Borrar búsqueda" # Title of the X icon next to search input.
zero_results = "No hay resultados"
one_results = "$NUMBER resultado"
many_results = "$NUMBER resultados"
# Navigation.
pinned = "Fijada"
jump_to_posts = "Saltar a las entradas"
read_more = "Leer más"
one_posts = "$NUMBER entrada"
many_posts = "$NUMBER entradas"
prev = "Anterior" # As in "Previous" page.
next = "Siguiente" # As in "Next" page.
of = "de" # E.g. Page 1 "of" 3
all_posts = "Todas las entradas"
all_tags = "Todas las etiquetas"
all_projects = "Todos los proyectos"
featured_projects = "Proyectos destacados"
language_selection = "Selección de idioma"
toggle_mode = "Cambiar a modo $MODE" # $MODE will be replaced by a value (or both) below.
dark = "oscuro"
light = "claro"
reset_mode = "Restablecer modo a configuración predeterminada"
# Quick navigation buttons.
toggle_toc = "Mostrar/ocultar la tabla de contenidos"
go_to_top = "Ir al inicio de la página"
go_to_comments = "Ir a la sección de comentarios"
# Post metadata.
by_author = "Por $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " y " # For multiple authors. Ensure spacing where necessary.
draft = "BORRADOR"
zero_min_read = "<1 min de lectura"
one_min_read = "$NUMBER min de lectura"
many_min_read = "$NUMBER mins de lectura"
zero_words = "Cero palabras"
one_words = "$NUMBER palabra"
many_words = "$NUMBER palabras"
last_updated_on = "Actualizado el $DATE"
see_changes = "Ver cambios"
# Post body.
table_of_contents = "Tabla de contenido"
load_comments = "Cargar comentarios"
# Copy code block button.
copied = "Copiado!"
copy_code_to_clipboard = "Copiar código al portapapeles"
# iine appreciation button.
like_this_post = "Me gusta esta publicación"
# Footer: Powered by Zola and tabi.
powered_by = "Impulsado por"
and = "y"
site_source = "Código del sitio"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "La página que has solicitado parece no existir"
translation_missing = "o aún no se ha traducido a tu idioma"
check_url = "Revisa la URL en busca de errores o"
go_home = "regresa a la página de inicio"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Mostrar cita original"
show_translation = "Mostrar traducción"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Esta es una fuente web, también conocida como fuente Atom. Suscríbete copiando la URL de la barra de direcciones en tu lector de noticias. Visita About Feeds para aprender más y empezar. Es gratis. "
visit_the_site = "Visita la web"
recent_posts = "Publicaciones recientes"

View file

@ -0,0 +1,98 @@
language_name = "Eesti" # Shown in language picker for multi-language sites.
date_locale = "et_EE"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blogi"
archive = "arhiiv"
tags = "sildid"
projects = "projektid"
about = "minust"
contact = "kontakt"
privacy = "privaatsuspoliitika"
site_statistics = "saidi statistika"
sitemap = "saidikaart"
# Search.
search = "Otsing"
search_icon_title = "Otsingu avamiseks klõpsake või vajutage $SHORTCUT" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Tühjenda otsing" # Title of the X icon next to search input.
zero_results = "Tulemusi pole"
one_results = "$NUMBER tulemus" # "1 result"
many_results = "$NUMBER tulemust" # "3 results"
# Navigation.
pinned = "Kinnitatud"
jump_to_posts = "Hüppa postitusteni"
read_more = "Loe edasi"
one_posts = "$NUMBER postitus"
many_posts = "$NUMBER postitust" # "3 posts"
prev = "Eelmine" # As in "Previous" page.
next = "Järgmine" # As in "Next" page.
of = "/" # E.g. Page 1 "of" 3
all_posts = "Kõik postitused"
all_tags = "Kõik sildid"
all_projects = "Kõik projektid"
featured_projects = "Esiletõstetud projektid"
language_selection = "Keele valik"
toggle_mode = "Lülita $MODE režiim" # $MODE will be replaced by a value (or both) below.
dark = "tume"
light = "hele"
reset_mode = "Lähtesta vaikerežiim"
# Quick navigation buttons.
toggle_toc = "Sisukorra kuvamine/peitmine"
go_to_top = "Mine lehe ülaossa"
go_to_comments = "Mine kommentaaride juurde"
# Post metadata.
by_author = "Autor: $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " ja " # For multiple authors. Ensure spacing where necessary.
draft = "MUSTAND"
zero_min_read = "Lugemisaeg <1 min"
one_min_read = "Lugemisaeg $NUMBER min"
many_min_read = "Lugemisaeg $NUMBER min"
zero_words = "Sõnu pole"
one_words = "$NUMBER sõna"
many_words = "$NUMBER sõna"
last_updated_on = "Uuendatud $DATE"
see_changes = "Vaata muudatusi"
# Post body.
table_of_contents = "Sisukord"
load_comments = "Lae kommentaarid"
# Copy code block button.
copied = "Kopeeritud!"
copy_code_to_clipboard = "Kopeeri kood lõikelauale"
# iine appreciation button.
like_this_post = "Mulle meeldib see postitus"
# Footer: Powered by Zola and tabi.
powered_by = "Toetab"
and = "ja"
site_source = "Saidi lähtekood"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Tundub, et otsitud lehte ei leitud"
translation_missing = "või pole seda veel teie keelde tõlgitud"
check_url = "Kontrollige URL-i vigade suhtes või"
go_home = "minge tagasi avalehele"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Näita originaaltsitaati"
show_translation = "Näita tõlget"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "See on veebivoog, tuntud ka kui Atom-voog. Tellimiseks kopeerige URL aadressiribalt oma uudistelugerisse. Külastage About Feeds lehte, et õppida ja alustada. See on tasuta."
visit_the_site = "Külasta veebisaiti"
recent_posts = "Viimased postitused"

View file

@ -0,0 +1,99 @@
language_name = "فارسی" # Shown in language picker for multi-language sites.
date_locale = "fa_IR"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "وبلاگ"
archive = "آرشیو"
tags = "برچسب‌ها"
projects = "پروژه‌ها"
about = "درباره"
contact = "تماس"
privacy = "سیاست حفظ حریم خصوصی"
site_statistics = "آمار سایت"
sitemap = "نقشه سایت"
# Search.
search = "جستجو"
search_icon_title = "برای باز کردن جستجو کلیک کنید یا $SHORTCUT را فشار دهید" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "پاک کردن جستجو" # Title of the X icon next to search input.
zero_results = "بدون نتیجه"
one_results = "$NUMBER نتیجه" # "1 result"
many_results = "$NUMBER نتیجه" # "3 results"
# Navigation.
pinned = "سنجاق‌شده"
jump_to_posts = "پرش به نوشته‌ها"
read_more = "ادامه مطلب"
one_posts = "$NUMBER مطلب"
many_posts = "$NUMBER مطلب" # "3 posts"
prev = "قبلی" # As in "Previous" page.
next = "بعدی" # As in "Next" page.
of = "از" # E.g. Page 1 "of" 3
all_posts = "همه مطالب"
all_tags = "همه برچسب‌ها"
all_projects = "همه پروژه‌ها"
featured_projects = "پروژه‌های برجسته"
language_selection = "انتخاب زبان"
toggle_mode = "تغییر حالت $MODE" # $MODE will be replaced by a value (or both) below.
dark = "تیره"
light = "روشن"
reset_mode = "بازنشانی حالت به حالت پیش‌فرض"
# Quick navigation buttons.
toggle_toc = "تغییر جدول محتوا"
go_to_top = "رفتن به بالای صفحه"
go_to_comments = "رفتن به بخش نظرات"
# Post metadata.
by_author = "توسط $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = "، " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " و " # For multiple authors. Ensure spacing where necessary.
draft = "پیش‌نویس"
zero_min_read = "خواندن کمتر از ۱ دقیقه"
one_min_read = "خواندن $NUMBER دقیقه"
many_min_read = "خواندن $NUMBER دقیقه"
zero_words = "هیچ کلمه‌ای"
one_words = "$NUMBER کلمه"
many_words = "$NUMBER کلمه"
last_updated_on = "آخرین به‌روزرسانی در $DATE"
see_changes = "مشاهده تغییرات"
# Post body.
table_of_contents = "فهرست مطالب"
load_comments = "بارگذاری نظرات"
# Copy code block button.
copied = "کپی شد!"
copy_code_to_clipboard = "کپی کد به کلیپ‌بورد"
# iine appreciation button.
like_this_post = "این مقاله را دوست دارم"
# Footer: Powered by Zola and tabi.
powered_by = "قدرت گرفته از"
and = "و"
site_source = "منبع سایت"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "صفحه‌ای که درخواست کرده‌اید به نظر می‌رسد از دست رفته است"
translation_missing = "یا هنوز به زبان شما ترجمه نشده است"
check_url = "آدرس اینترنتی را بررسی کنید و یا"
go_home = "به صفحه اصلی برگردید"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "نقل قول اصلی را نشان بده"
show_translation = "ترجمه را نشان بده"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "این یک فید وب است، همچنین به عنوان یک فید Atom شناخته می‌شود. با کپی کردن URL از نوار آدرس به خواننده اخباری خود مشترک شوید. برای یادگیری بیشتر و شروع به کار بروید به About Feeds. این رایگان است."
visit_the_site = "بازدید از وب‌سایت"
recent_posts = "مطالب اخیر"

View file

@ -0,0 +1,102 @@
language_name = "suomi" # Shown in language picker for multi-language sites.
date_locale = "fi_FI"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blogi"
archive = "arkisto"
tags = "tunnisteet"
projects = "projektit"
diagrams = "kaaviot"
about = "minusta"
contact = "yhteystiedot"
privacy = "tietosuojakäytäntö"
site_statistics = "tilastot"
sitemap = "sivustokartta"
# Search.
search = "Hae"
search_icon_title = "Paina $SHORTCUT avataksesi haun" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Tyhjennä haku" # Title of the X icon next to search input.
zero_results = "Ei tuloksia"
one_results = "$NUMBER tulos" # "1 result"
many_results = "$NUMBER tulosta" # "3 results"
# Navigation.
# Some will prefer artikkeli (=article) instead of julkaisu (=publication), but this is more general
pinned = "Kiinnitetty"
jump_to_posts = "Siirry julkaisuihin"
read_more = "Lue lisää"
one_posts = "$NUMBER julkaisu"
many_posts = "$NUMBER julkaisua" # "3 posts"
prev = "Edellinen" # As in "Previous" page.
next = "Seuraava" # As in "Next" page.
of = "/" # E.g. Page 1 "of" 3
all_posts = "Kaikki julkaisut"
all_tags = "Kaikki tunnisteet"
all_projects = "Kaikki projektit"
featured_projects = "Esittelyprojektit"
language_selection = "Kielivalinta"
toggle_mode = "Vaihda $MODE" # $MODE will be replaced by a value (or both) below. Literally "Change $MODE"
# The declension assumes that both values are used. e.g. "Change dark mode" wouldn't work and would need the "to" preposition
# It also omits the "mode" word: "Change dark/light mode" instead of "Change dark mode/light mode"
dark = "tumma"
light = "vaalea tila"
reset_mode = "Palauta oletustilaan"
# Quick navigation buttons.
toggle_toc = "Sisällysluettelo päälle/pois"
go_to_top = "Siirry sivun alkuun"
go_to_comments = "Siirry kommenttiosioon"
# Post metadata.
by_author = "Kirjoittanut $AUTHOR" # $AUTHOR will be replaced by the author(s). Literally "Written by $AUTHOR"
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " ja " # For multiple authors. Ensure spacing where necessary.
draft = "LUONNOS"
zero_min_read = "<1 min. lukuaika"
one_min_read = "$NUMBER min. lukuaika"
many_min_read = "$NUMBER min. lukuaika"
zero_words = "Ei sanoja"
one_words = "$NUMBER sana"
many_words = "$NUMBER sanaa"
last_updated_on = "Päivitetty $DATE"
see_changes = "Katso muutokset"
# Post body.
table_of_contents = "Sisällysluettelo"
load_comments = "Lataa kommentit"
# Copy code block button.
copied = "Kopioitu!"
copy_code_to_clipboard = "Kopioi koodi leikepöydälle"
# iine appreciation button.
like_this_post = "Pidän tästä kirjoituksesta"
# Footer: Powered by Zola and tabi.
powered_by = "Pyörii ohjelmilla" # "Works using the software"
and = "&"
site_source = "Sivuston lähdekoodi"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Pyytämääsi sivua ei löydy"
translation_missing = "tai sitä ei ole vielä käännetty kielellesi"
check_url = "Tarkista URL-osoitteesta mahdolliset virheet tai"
go_home = "palaa etusivulle"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Näytä alkuperäinen lainaus"
show_translation = "Näytä käännös"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Tämä on verkkosyöte, joka tunnetaan myös nimellä Atom-syöte. Tilaa kopioimalla URL-osoite osoitepalkista uutislukijaasi. Käy sivulla About Feeds saadaksesi lisätietoja ja aloittaakeksi. Se on ilmaista."
visit_the_site = "Vieraile sivustolla"
recent_posts = "Viimeisimmät julkaisut"

View file

@ -0,0 +1,98 @@
language_name = "Français" # Shown in language picker for multi-language sites.
date_locale = "fr_FR"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archives"
tags = "étiquettes"
projects = "projets"
about = "à propos"
contact = "contact"
privacy = "politique de confidentialité"
site_statistics = "statistiques du site"
sitemap = "plan du site"
# Search.
search = "Rechercher"
search_icon_title = "Cliquez ou appuyez sur $SHORTCUT pour ouvrir la recherche" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Effacer la recherche" # Title of the X icon next to search input.
zero_results = "Aucun résultat trouvé"
one_results = "$NUMBER résultat" # "1 result"
many_results = "$NUMBER résultats" # "3 results"
# Navigation.
pinned = "Épinglé"
jump_to_posts = "Aller aux articles"
read_more = "Lire plus"
one_posts = "$NUMBER article"
many_posts = "$NUMBER articles"
prev = "Précédent" # As in "Previous" page.
next = "Suivant" # As in "Next" page.
of = "sur" # E.g. Page 1 "of" 3
all_posts = "Tous les articles"
all_tags = "Toutes les étiquettes"
all_projects = "Tous les projets"
featured_projects = "Projets à la une"
language_selection = "Sélection de la langue"
toggle_mode = "Basculer en mode $MODE" # $MODE will be replaced by a value (or both) below.
dark = "sombre"
light = "clair"
reset_mode = "Réinitialiser le mode aux valeurs par défaut"
# Quick navigation buttons.
toggle_toc = "Afficher/Masquer la table des matières"
go_to_top = "Aller en haut de la page"
go_to_comments = "Aller à la section des commentaires"
# Post metadata.
by_author = "Par $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " et " # For multiple authors. Ensure spacing where necessary.
draft = "BROUILLON"
zero_min_read = "<1 min de lecture"
one_min_read = "$NUMBER min de lecture"
many_min_read = "$NUMBER min de lecture"
zero_words = "aucun mot"
one_words = "$NUMBER mot"
many_words = "$NUMBER mots"
last_updated_on = "Mis à jour le $DATE"
see_changes = "Voir les modifications"
# Post body.
table_of_contents = "Table des matières"
load_comments = "Afficher les commentaires"
# Copy code block button.
copied = "Copié !"
copy_code_to_clipboard = "Copier le code dans le presse-papier"
# iine appreciation button.
like_this_post = "J'aime cet article"
# Footer: Powered by Zola and tabi.
powered_by = "Propulsé par"
and = "et"
site_source = "Code du site"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "La page que vous avez demandée semble être manquante"
translation_missing = "ou n'a pas encore été traduite dans votre langue"
check_url = "Vérifiez que l'URL ne contient pas d'erreur ou"
go_home = "retournez à la page d'accueil"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Afficher la citation originale"
show_translation = "Afficher la traduction"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Ceci est un flux web, également connu sous le nom de flux Atom. Abonnez-vous en copiant l'URL de la barre d'adresse dans votre lecteur de nouvelles. Visitez About Feeds pour en savoir plus et commencez. C'est gratuit."
visit_the_site = "Visitez le site web"
recent_posts = "Articles récents"

View file

@ -0,0 +1,100 @@
# This has been machine translated.
# If you would like to help correct errors or improve the translation, please open an issue or submit a pull request.
language_name = "हिंदी" # Shown in language picker for multi-language sites.
date_locale = "hi_IN"
full_stop ="।" # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "ब्लॉग"
archive = "संग्रह"
tags = "टैग"
projects = "परियोजनाएं"
about = "बारे में"
contact = "संपर्क"
privacy = "गोपनीयता नीति"
site_statistics = "साइट सांख्यिकी"
sitemap = "साइटमैप"
# Search.
search = "खोजें"
search_icon_title = "$SHORTCUT दबाएँ या क्लिक करें खोज खोलने के लिए" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "खोज साफ करें" # Title of the X icon next to search input.
zero_results = "कोई परिणाम नहीं मिला"
one_results = "$NUMBER परिणाम" # "1 result"
many_results = "$NUMBER परिणाम" # "3 results"
# Navigation.
pinned = "पिन किया गया"
jump_to_posts = "पोस्ट पर जाएं"
read_more = "और पढ़ें"
one_posts = "$NUMBER पोस्ट"
many_posts = "$NUMBER पोस्ट्स"
prev = "पिछला" # As in "Previous" page.
next = "अगला" # As in "Next" page.
of = "का" # E.g. Page 1 "of" 3
all_posts = "सभी पोस्ट्स"
all_tags = "सभी टैग्स"
all_projects = "सभी प्रोजेक्ट"
featured_projects = "विशेष प्रोजेक्ट"
language_selection = "भाषा चयन"
toggle_mode = "$MODE मोड में टॉगल करें" # $MODE will be replaced by a value (or both) below.
dark = "अंधेरा"
light = "रोशनी"
reset_mode = "मोड को साइट डिफ़ॉल्ट पर रीसेट करें"
# Quick navigation buttons.
toggle_toc = "विषय-सूची टॉगल करें"
go_to_top = "पृष्ठ के शीर्ष पर जाएं"
go_to_comments = "टिप्पणी अनुभाग में जाएं"
# Post metadata.
by_author = "$AUTHOR द्वारा" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " और " # For multiple authors. Ensure spacing where necessary.
draft = "मसौदा"
zero_min_read = "कम से कम 1 मिनट पठन समय"
one_min_read = "$NUMBER मिनट पठन समय"
many_min_read = "$NUMBER मिनट पठन समय"
zero_words = "कोई शब्द नहीं"
one_words = "$NUMBER शब्द"
many_words = "$NUMBER शब्द"
last_updated_on = "$DATE को अपडेट किया गया"
see_changes = "बदलाव देखें"
# Post body.
table_of_contents = "विषय सूची"
load_comments = "कमेंट्स लोड करें"
# Copy code block button.
copied = "कॉपी किया गया!"
copy_code_to_clipboard = "कोड क्लिपबोर्ड में कॉपी करें"
# iine appreciation button.
like_this_post = "मुझे यह पोस्ट पसंद है"
# Footer: Powered by Zola and tabi.
powered_by = "चालित द्वारा"
and = "और"
site_source = "साइट का स्रोत"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "आपके द्वारा अनुरोधित पृष्ठ मौजूद नहीं है"
translation_missing = "या फिर आपकी भाषा में अनुवाद नहीं किया गया है"
check_url = "URL में त्रुटियों की जांच करें या"
go_home = "मुख्य पृष्ठ पर वापस जाएं"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "मौलिक उद्धरण दिखाएं"
show_translation = "अनुवाद दिखाएं"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "यह एक वेब फ़ीड है, जिसे एटम फ़ीड भी कहा जाता है। अपने न्यूज़रीडर में एड्रेस बार से URL कॉपी करके सब्सक्राइब करें। About Feeds पर जाकर और अधिक जानकारी प्राप्त करें और शुरू करें। यह सेवा मुफ़्त है।"
visit_the_site = "वेबसाइट पर जाएं"
recent_posts = "हाल की पोस्ट्स"

View file

@ -0,0 +1,97 @@
language_name = "Italiano" # Shown in language picker for multi-language sites.
date_locale = "it_IT"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archivio"
tags = "tag"
projects = "progetti"
about = "chi sono"
contact = "contatto"
privacy = "politica sulla privacy"
site_statistics = "statistiche del sito"
sitemap = "mappa del sito"
# Search.
search = "Cerca"
search_icon_title = "Clicca o premi $SHORTCUT per aprire la ricerca" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Cancella ricerca" # Title of the X icon next to search input.
zero_results = "Nessun risultato trovato"
one_results = "$NUMBER risultato"
many_results = "$NUMBER risultati"
# Navigation.
pinned = "In evidenza"
jump_to_posts = "Vai ai post"
read_more = "Leggi di più"
one_posts = "$NUMBER post"
many_posts = "$NUMBER post"
prev = "Precedente" # As in "Previous" page.
next = "Successivo" # As in "Next" page.
of = "di" # E.g. Page 1 "of" 3
all_posts = "Tutti i post"
all_tags = "Tutti i tag"
all_projects = "Tutti i progetti"
featured_projects = "Progetti in evidenza"
language_selection = "Selezione della lingua"
toggle_mode = "Passa alla modalità $MODE" # $MODE will be replaced by a value (or both) below.
dark = "scuro"
light = "chiaro"
reset_mode = "Reimposta la modalità alle impostazioni predefinite"
# Quick navigation buttons.
toggle_toc = "Attiva/Disattiva indice"
go_to_top = "Vai in cima alla pagina"
go_to_comments = "Vai alla sezione commenti"
# Post metadata.
by_author = "Di $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " e " # For multiple authors. Ensure spacing where necessary.
draft = "BOZZA"
zero_min_read = "<1 min di lettura"
one_min_read = "$NUMBER min di lettura"
many_min_read = "$NUMBER min di lettura"
zero_words = "Nessuna parola"
one_words = "$NUMBER parola"
many_words = "$NUMBER parole"
last_updated_on = "Aggiornato il $DATE"
see_changes = "Vedi modifiche"
# Post body.
table_of_contents = "Indice"
load_comments = "Carica commenti"
# Copy code block button.
copied = "Copiato!"
copy_code_to_clipboard = "Copia codice negli appunti"
# iine appreciation button.
like_this_post = "Mi piace questo post"
# Footer: Powered by Zola and tabi.
powered_by = "Alimentato da"
and = "e"
site_source = "Codice del sito"
# 404 error.
page_missing = "La pagina che hai richiesto sembra non esistere"
translation_missing = "o non è ancora stata tradotta nella tua lingua"
check_url = "Controlla l'URL per errori o"
go_home = "torna alla homepage"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Mostra citazione originale"
show_translation = "Mostra traduzione"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Questo è un feed web, noto anche come feed Atom. Iscriviti copiando l'URL dalla barra degli indirizzi nel tuo lettore di notizie. Visita About Feeds per saperne di più e iniziare. È gratuito."
visit_the_site = "Visita il sito web"
recent_posts = "Post recenti"

View file

@ -0,0 +1,102 @@
# This has been machine translated.
# If you would like to help correct errors or improve the translation,
# please open an issue or submit a pull request.
# https://github.com/welpo/tabi
language_name = "日本語" # Shown in language picker for multi-language sites.
date_locale = "ja_JP"
full_stop = "。" # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "ブログ"
archive = "アーカイブ"
tags = "タグ"
projects = "プロジェクト"
about = "自己紹介"
contact = "お問い合わせ"
privacy = "プライバシーポリシー"
site_statistics = "サイト統計"
sitemap = "サイトマップ"
# Search.
search = "検索"
search_icon_title = "$SHORTCUTを押すか、クリックして検索を開く" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "検索をクリア" # Title of the X icon next to search input.
zero_results = "結果が見つかりません"
one_results = "$NUMBER 結果" # "1 result"
many_results = "$NUMBER 結果" # "3 results"
# Navigation.
pinned = "固定"
jump_to_posts = "投稿へジャンプ"
read_more = "続きを読む"
one_posts = "$NUMBER 投稿"
many_posts = "$NUMBER 投稿"
prev = "前" # As in "Previous" page.
next = "次" # As in "Next" page.
of = "中" # E.g. Page 1 "of" 3
all_posts = "すべての投稿"
all_tags = "すべてのタグ"
all_projects = "全てのプロジェクト"
featured_projects = "注目のプロジェクト"
language_selection = "言語選択"
toggle_mode = "$MODE モードに切り替え" # $MODE will be replaced by a value (or both) below.
dark = "暗い"
light = "明るい"
reset_mode = "モードをサイトのデフォルトにリセット"
# Quick navigation buttons.
toggle_toc = "目次を切り替え"
go_to_top = "ページの先頭へ"
go_to_comments = "コメントセクションへ"
# Post metadata.
by_author = "$AUTHOR によって" # $AUTHOR will be replaced by the author(s).
author_separator = "、" # For multiple authors. Ensure spacing where necessary.
author_conjunction = "と" # For multiple authors. Ensure spacing where necessary.
draft = "ドラフト"
zero_min_read = "1分未満の読了時間"
one_min_read = "$NUMBER 分の読了時間"
many_min_read = "$NUMBER 分の読了時間"
zero_words = "単語数ゼロ"
one_words = "$NUMBER 単語"
many_words = "$NUMBER 単語"
last_updated_on = "$DATE に更新"
see_changes = "変更を見る"
# Post body.
table_of_contents = "目次"
load_comments = "コメントを読む"
# Copy code block button.
copied = "コピーしました!"
copy_code_to_clipboard = "コードをクリップボードにコピー"
# iine appreciation button.
like_this_post = "いいね!"
# Footer: Powered by Zola and tabi.
powered_by = "Powered by"
and = "と"
site_source = "サイトのソースコード"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "お探しのページは存在しません"
translation_missing = "または、まだあなたの言語に翻訳されていません"
check_url = "URLが正しいか確認してください、または"
go_home = "ホームページに戻る"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "オリジナルの引用を見る"
show_translation = "翻訳を見る"
open_quotation_mark = "「"
close_quotation_mark = "」"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "これはウェブフィードです、また、Atomフィードとしても知られています。URLをアドレスバーからニュースリーダーにコピーして登録してください。About Feedsを訪れて、詳細を知り、始めてください。無料です。"
visit_the_site = "ウェブサイトを訪れる"
recent_posts = "最近の投稿"

View file

@ -0,0 +1,102 @@
# This has been machine translated.
# If you would like to help correct errors or improve the translation,
# please open an issue or submit a pull request.
# https://github.com/welpo/tabi
language_name = "한국어" # Shown in language picker for multi-language sites.
date_locale = "ko_KR"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "블로그"
archive = "아카이브"
tags = "태그"
projects = "프로젝트"
about = "소개"
contact = "연락처"
privacy = "개인정보 처리방침"
site_statistics = "사이트 통계"
sitemap = "사이트맵"
# Search.
search = "검색"
search_icon_title = "클릭하거나 $SHORTCUT을 눌러 검색 열기" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "검색 지우기" # Title of the X icon next to search input.
zero_results = "결과 없음"
one_results = "$NUMBER 결과" # "1 result"
many_results = "$NUMBER 결과" # "3 results"
# Navigation.
pinned = "고정됨"
jump_to_posts = "게시물로 이동"
read_more = "더 읽기"
one_posts = "$NUMBER 게시물"
many_posts = "$NUMBER 게시물"
prev = "이전" # As in "Previous" page.
next = "다음" # As in "Next" page.
of = "중" # E.g. Page 1 "of" 3
all_posts = "모든 게시물"
all_tags = "모든 태그"
all_projects = "모든 프로젝트"
featured_projects = "추천 프로젝트"
language_selection = "언어 선택"
toggle_mode = "$MODE 모드로 전환" # $MODE will be replaced by a value (or both) below.
dark = "어두운"
light = "밝은"
reset_mode = "모드를 사이트 기본값으로 재설정"
# Quick navigation buttons.
toggle_toc = "목차 토글"
go_to_top = "페이지 상단으로"
go_to_comments = "댓글 섹션으로"
# Post metadata.
by_author = "$AUTHOR 작성" # $AUTHOR will be replaced by the author(s).
author_separator = "、" # For multiple authors. Ensure spacing where necessary.
author_conjunction = "와" # For multiple authors. Ensure spacing where necessary.
draft = "임시 저장"
zero_min_read = "1분 미만 읽기"
one_min_read = "$NUMBER 분 읽기"
many_min_read = "$NUMBER 분 읽기"
zero_words = "단어 없음"
one_words = "$NUMBER 단어"
many_words = "$NUMBER 단어"
last_updated_on = "$DATE에 업데이트됨"
see_changes = "변경사항 보기"
# Post body.
table_of_contents = "목차"
load_comments = "댓글 불러오기"
# Copy code block button.
copied = "복사됨!"
copy_code_to_clipboard = "코드를 클립보드에 복사"
# iine appreciation button.
like_this_post = "이 글이 좋아요"
# Footer: Powered by Zola and tabi.
powered_by = "제공됨"
and = "&"
site_source = "사이트 소스"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "요청하신 페이지가 없습니다"
translation_missing = "또는 아직 해당 언어로 번역되지 않았습니다"
check_url = "URL을 확인하거나"
go_home = "홈페이지로 돌아가기"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "원문 인용 보기"
show_translation = "번역 보기"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "이것은 웹 피드이며, Atom 피드로도 알려져 있습니다. 주소 표시 줄의 URL을 뉴스 리더로 복사하여 구독하세요. About Feeds를 방문하여 자세히 알아보고 시작하세요. 무료입니다."
visit_the_site = "웹사이트 방문하기"
recent_posts = "최근 게시물"

View file

@ -0,0 +1,98 @@
language_name = "Dutch" # Shown in language picker for multi-language sites.
date_locale = "nl_NL" #nl_BE can also be used for Flemish
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "archief"
tags = "labels"
projects = "projecten"
about = "over ons"
contact = "contact"
privacy = "privacybeleid"
site_statistics = "website statistieken"
sitemap = "sitemap"
# Search.
search = "Zoeken"
search_icon_title = "Klik of druk op $SHORTCUT om de zoekopdracht te openen" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Verwijder zoekopdracht" # Title of the X icon next to search input.
zero_results = "Geen resultaten"
one_results = "$NUMBER resultaat" # "1 result"
many_results = "$NUMBER resultaten" # "3 results"
# Navigation.
pinned = "Vastgezet"
jump_to_posts = "Naar berichten springen"
read_more = "Lees meer"
one_posts = "$NUMBER bericht" # "1 post"
many_posts = "$NUMBER berichten" # "3 posts"
prev = "Vorige" # As in "Previous" page. - Vorige pagina
next = "Volgende" # As in "Next" page. - Volgende pagina
of = "van" # E.g. Page 1 "of" 3
all_posts = "Alle berichten"
all_tags = "Alle labels"
all_projects = "Alle projecten"
featured_projects = "Aanbevolen projecten"
language_selection = "Selecteer taal"
toggle_mode = "Schakel de $MODE-modus in" # $MODE will be replaced by a value (or both) below.
dark = "donker"
light = "licht"
reset_mode = "Reset de modus naar de standaardwaarde"
# Quick navigation buttons.
toggle_toc = "Schakel inhoudsopgave in of uit"
go_to_top = "Ga naar de bovenkant van de pagina"
go_to_comments = "Ga naar opmerkingen"
# Post metadata.
by_author = "Door $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " en " # For multiple authors. Ensure spacing where necessary.
draft = "VOORLOPIGE VERSIE"
zero_min_read = "<1 minuut lezen"
one_min_read = "$NUMBER minuut lezen"
many_min_read = "$NUMBER minuten lezen"
zero_words = "Geen woorden"
one_words = "$NUMBER woord"
many_words = "$NUMBER woorden"
last_updated_on = "Bijgewerkt op $DATE"
see_changes = "Zie wijzigingen"
# Post body.
table_of_contents = "Inhoudsopgave"
load_comments = "Laad opmerkingen"
# Copy code block button.
copied = "Gekopieerd!"
copy_code_to_clipboard = "Kopieer code naar klembord"
# iine appreciation button.
like_this_post = "Vind ik leuk"
# Footer: Powered by Zola and tabi.
powered_by = "Aangedreven door"
and = "&"
site_source = "Sitebron"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Het lijkt erop dat de door u opgevraagde pagina ontbreekt"
translation_missing = "of het is nog niet in jouw taal vertaald"
check_url = "Controleer de URL op fouten of"
go_home = "ga terug naar de startpagina"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Toon origineel citaat"
show_translation = "Vertaling tonen"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Dit is een webfeed, ook wel Atom-feed genoemd. Abonneer u door de URL uit de adresbalk naar uw nieuwslezer te kopiëren. Ga naar About Feeds voor meer informatie en om aan de slag te gaan. Het is gratis."
visit_the_site = "Bezoek website"
recent_posts = "Recente berichten"

View file

@ -0,0 +1,98 @@
language_name = "ଓଡ଼ିଆ" # Shown in language picker for multi-language sites.
date_locale = "or_IN"
full_stop = "।" # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "ବ୍ଲଗ"
archive = "ଆର୍କାଇଭ"
tags = "ଟ୍ୟାଗଗୁଡ଼ିକ"
projects = "ପ୍ରକଳ୍ପଗୁଡ଼ିକ"
about = "ବାବଦରେ"
contact = "ଯୋଗାଯୋଗ"
privacy = "ଗୋପନୀୟତା ନୀତି"
site_statistics = "ସାଇଟ ପରିସଂଖ୍ୟାନ"
sitemap = "ସାଇଟମ୍ୟାପ"
# Search.
search = "ଖୋଜନ୍ତୁ"
search_icon_title = "ଖୋଜିବାକୁ $SHORTCUT କୁ ଚିପନ୍ତୁ କିମ୍ବା କ୍ଲିକ କରନ୍ତୁ" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "ଖୋଜା ସଫା କରନ୍ତୁ" # Title of the X icon next to search input.
zero_results = "କିଛି ମିଳିଲା ନାହିଁ"
one_results = "$NUMBER ପରିଣାମ" # "1 result"
many_results = "$NUMBER ପରିଣାମଗୁଡ଼ିକ" # "3 results"
# Navigation.
pinned = "ପିନ୍ କରାଯାଇଛି"
jump_to_posts = "ପୋଷ୍ଟକୁ ଯାଆନ୍ତୁ"
read_more = "ଆହୁରି ପଢ଼ନ୍ତୁ"
one_posts = "$NUMBER ପୋଷ୍ଟ"
many_posts = "$NUMBER ପୋଷ୍ଟଗୁଡ଼ିକ" # "3 posts"
prev = "ପୂର୍ବ" # As in "Previous" page.
next = "ପର" # As in "Next" page.
of = "ର" # E.g. Page 1 "of" 3
all_posts = "ସମସ୍ତ ପୋଷ୍ଟଗୁଡ଼ିକ"
all_tags = "ସମସ୍ତ ଟ୍ୟାଗଗୁଡ଼ିକ"
all_projects = "ସମସ୍ତ ପ୍ରକଳ୍ପଗୁଡ଼ିକ"
featured_projects = "ବିଶେଷ ପ୍ରକଳ୍ପଗୁଡ଼ିକ"
language_selection = "ଭାଷା ଚୟନ"
toggle_mode = "$MODE ଟଗଲ କରନ୍ତୁ" # $MODE will be replaced by a value (or both) below.
dark = "ଅନ୍ଧାର"
light = "ଆଲୋକ"
reset_mode = "ସାଇଟର ମୂଳ ମୋଡକୁ ଆଣନ୍ତୁ"
# Quick navigation buttons.
toggle_toc = "ସୂଚୀପତ୍ର ଟଗଲ କରନ୍ତୁ"
go_to_top = "ପୃଷ୍ଠାର ଶୀର୍ଷକୁ ଯାଆନ୍ତୁ"
go_to_comments = "ମତାମତ ବିଭାଗକୁ ଯାଆନ୍ତୁ"
# Post metadata.
by_author = "$AUTHOR ଙ୍କ ଦ୍ୱାରା" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " ଏବଂ " # For multiple authors. Ensure spacing where necessary.
draft = "ଡ୍ରାଫ୍ଟ"
zero_min_read = "<୧ ମିନିଟ ପଢ଼ିବା ସମୟ"
one_min_read = "$NUMBER ମିନିଟ ପଢ଼ିବା ସମୟ"
many_min_read = "$NUMBER ମିନିଟ ପଢ଼ିବା ସମୟ"
zero_words = "କୌଣସି ଶବ୍ଦ ନାହିଁ "
one_words = "$NUMBER ଶବ୍ଦ"
many_words = "$NUMBER ଶବ୍ଦଗୁଡ଼ିକ"
last_updated_on = "$DATE ଦିନ ଅଦ୍ୟତନ ହୋଇଥିଲା"
see_changes = "ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"
# Post body.
table_of_contents = "ସୂଚୀପତ୍ର"
load_comments = "ମତାମତ ଲୋଡ କରନ୍ତୁ"
# Copy code block button.
copied = "କପି ହେଲା!"
copy_code_to_clipboard = "କ୍ଲିପବୋର୍ଡକୁ କପି କରନ୍ତୁ"
# iine appreciation button.
like_this_post = "ମୋର ଏହି ପୋସ୍ଟ ଭଲ ଲାଗେ"
# Footer: Powered by Zola and tabi.
powered_by = "ଚାଳିତ ଦ୍ୱାରା"
and = "ଏବଂ"
site_source = "ସାଇଟ ଉତ୍ସ"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "ଆପଣ ଯେଉଁ ପୃଷ୍ଠାଟିକୁ ଅନୁରୋଧ କରିଥିଲେ ତାହା ନାହିଁ"
translation_missing = "କିମ୍ବା ଆପଣଙ୍କର ଭାଷାକୁ ଏପର୍ଯ୍ୟନ୍ତ ଅନୁବାଦିତ ହୋଇନାହିଁ"
check_url = "ତୃଟିଗୁଡ଼ିକ ପାଇଁ URL କୁ ଦେଖନ୍ତୁ କିମ୍ବା"
go_home = "ମୂଳ ପୃଷ୍ଠାକୁ ଫେରିଯାଆନ୍ତୁ"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "ମୂଳ ଉଦ୍ଧୃତ ଦେଖାନ୍ତୁ"
show_translation = "ଅନୁବାଦ ଦେଖାନ୍ତୁ"
open_quotation_mark = "“"
close_quotation_mark = "”"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "ଏହା ଏକ ୱେବ୍ ଫିଡ୍, ଯାହାକୁ ଆଟମ୍ ଫିଡ୍ ମଧ୍ୟ କୁହାଯାଏ। ଠିକଣା ବାରରୁ URL କୁ ଆପଣଙ୍କ ନ୍ୟୁଜ୍ ରିଡରରେ କପି କରି ସବ୍ସ୍କ୍ରାଇବ୍ କରନ୍ତୁ। ଅଧିକ ଜାଣିବା ଏବଂ ଆରମ୍ଭ କରିବାକୁ About Feeds ଯାଆନ୍ତୁ। ଏହା ମାଗଣା ଅଟେ ।"
visit_the_site = "ୱେବସାଇଟକୁ ଯାଆନ୍ତୁ"
recent_posts = "ସାମ୍ପ୍ରତିକ ପୋଷ୍ଟଗୁଡିକ"

View file

@ -0,0 +1,98 @@
language_name = "Português" # Shown in language picker for multi-language sites.
date_locale = "pt_PT"
full_stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "blog"
archive = "arquivo"
tags = "etiquetas"
projects = "projetos"
about = "sobre"
contact = "contacto"
privacy = "política de privacidade"
site_statistics = "estatísticas do site"
sitemap = "mapa do site"
# Search.
search = "Pesquisar"
search_icon_title = "Clique ou pressione $SHORTCUT para abrir a pesquisa" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Limpar pesquisa" # Title of the X icon next to search input.
zero_results = "Nenhum resultado encontrado"
one_results = "$NUMBER resultado" # "1 result"
many_results = "$NUMBER resultados" # "3 results"
# Navigation.
pinned = "Fixado"
jump_to_posts = "Ir para as publicações"
read_more = "Ler mais"
one_posts = "$NUMBER publicação"
many_posts = "$NUMBER publicações"
prev = "Anterior" # As in "Previous" page.
next = "Seguinte" # As in "Next" page.
of = "de" # E.g. Page 1 "of" 3
all_posts = "Todas as publicações"
all_tags = "Todas as etiquetas"
all_projects = "Todos os projetos"
featured_projects = "Projetos em destaque"
language_selection = "Seleção de idioma"
toggle_mode = "Alternar para o modo $MODE" # $MODE will be replaced by a value (or both) below.
dark = "escuro"
light = "claro"
reset_mode = "Repor o modo para o padrão"
# Quick navigation buttons.
toggle_toc = "Alternar Índice"
go_to_top = "Ir para o topo da página"
go_to_comments = "Ir para a seção de comentários"
# Post metadata.
by_author = "Por $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " e " # For multiple authors. Ensure spacing where necessary.
draft = "RASCUNHO"
zero_min_read = "<1 min de leitura"
one_min_read = "$NUMBER min de leitura"
many_min_read = "$NUMBER mins de leitura"
zero_words = "Nenhuma palavra"
one_words = "$NUMBER palavra"
many_words = "$NUMBER palavras"
last_updated_on = "Atualizado em $DATE"
see_changes = "Ver alterações"
# Post body.
table_of_contents = "Índice de conteúdo"
load_comments = "Carregar comentários"
# Copy code block button.
copied = "Copiado!"
copy_code_to_clipboard = "Copiar código para a área de transferência"
# iine appreciation button.
like_this_post = "Gosto desta publicação"
# Footer: Powered by Zola and tabi.
powered_by = "Impulsionado por"
and = "e"
site_source = "Código do site"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "A página que solicitou não existe"
translation_missing = "ou ainda não foi traduzida para o seu idioma"
check_url = "Verifique se o URL está correto ou"
go_home = "volte à página inicial"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Mostrar citação original"
show_translation = "Mostrar tradução"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Isto é um feed web, também conhecido como feed Atom. Subscreva copiando o URL da barra de endereços para o seu leitor de notícias. Visite About Feeds para aprender mais e começar. É grátis."
visit_the_site = "Visite o website"
recent_posts = "Publicações recentes"

View file

@ -0,0 +1,107 @@
language_name = "Русский" # Shown in language picker for multi-language sites.
date_locale = "ru_RU"
full-stop = "." # Used at the end of a sentence.
# Note on pluralization prefixes:
# - few_: for numbers ending in 2-4, except 12-14, in genitive singular.
# - many_: for all others, including 5-9, 0, and teens (11-14), in genitive plural.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "блог"
archive = "архив"
tags = "теги"
projects = "проекты"
about = "обо мне"
contact = "контакт"
privacy = "политика конфиденциальности"
site_statistics = "статистика сайта"
sitemap = "карта сайта"
# Search.
search = "Поиск"
search_icon_title = "Нажмите или используйте $SHORTCUT для открытия поиска" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Очистить поиск" # Title of the X icon next to search input.
zero_results = "Нет результатов"
one_results = "$NUMBER результат"
few_results = "$NUMBER результата" # 2, 3, 4 but not 12-14
many_results = "$NUMBER результатов" # 5-9, 0, 11-14, and others
# Navigation.
pinned = "Закреплено"
jump_to_posts = "Перейти к записям"
read_more = "Читать далее"
post = "пост"
one_posts = "$NUMBER пост"
few_posts = "$NUMBER поста" # 2, 3, 4 but not 12-14
many_posts = "$NUMBER постов" # 5-9, 0, 11-14, and others
prev = "Пред." # As in "Previous" page.
next = "След." # As in "Next" page.
of = "из" # E.g. Page 1 "of" 3
all_posts = "Все посты"
all_tags = "Все теги"
all_projects = "Все проекты"
featured_projects = "Избранные проекты"
language_selection = "Выбор языка"
toggle_mode = "Переключить на режим $MODE" # $MODE will be replaced by a value (or both) below.
dark = "тёмный"
light = "светлый"
reset_mode = "Сбросить режим к стандартным настройкам сайта"
# Quick navigation buttons.
toggle_toc = "Показать/Скрыть оглавление"
go_to_top = "Перейти в начало страницы"
go_to_comments = "Перейти к комментариям"
# Post metadata.
by_author = "От $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " и " # For multiple authors. Ensure spacing where necessary.
draft = "ЧЕРНОВИК"
zero_min_read = "<1 мин чтения"
one_min_read = "$NUMBER мин чтения"
few_min_read = "$NUMBER мин чтения" # 2, 3, 4 but not 12-14
many_min_read = "$NUMBER мин чтения" # 5-9, 0, 11-14, and others
zero_words = "Нет слов"
one_words = "$NUMBER слово"
few_words = "$NUMBER слова" # 2, 3, 4 but not 12-14
many_words = "$NUMBER слов" # 5-9, 0, 11-14, and others
last_updated_on = "Обновлено $DATE"
see_changes = "Смотреть изменения"
# Post body.
table_of_contents = "Содержание"
load_comments = "Загрузить комментарии"
# Copy code block button.
copied = "Скопировано!"
copy_code_to_clipboard = "Скопировать код в буфер обмена"
# iine appreciation button.
like_this_post = "Мне нравится эта статья"
# Footer: Powered by Zola and tabi.
powered_by = "Под управлением"
and = "&"
site_source = "Исходный код сайта"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Запрашиваемая вами страница отсутствует"
translation_missing = "или еще не переведена на ваш язык"
check_url = "Проверьте URL на ошибки или"
go_home = "вернитесь на главную страницу"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Показать оригинальную цитату"
show_translation = "Показать перевод"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Это веб-фид, известный также как Atom-фид. Чтобы подписаться, скопируйте URL из адресной строки в ваш RSS-ридер. Посетите About Feeds для дополнительной информации и начала использования."
visit_the_site = "Посетить веб-сайт"
recent_posts = "Последние посты"

View file

@ -0,0 +1,111 @@
# This has been machine translated.
# If you would like to help correct errors or improve the translation,
# please open an issue or submit a pull request.
# https://github.com/welpo/tabi
# Note on pluralization prefixes:
# - few_: for numbers ending in 2-4, except 12-14, in genitive singular.
# - many_: for all others, including 5-9, 0, and teens (11-14), in genitive plural.
language_name = "Українська" # Shown in language picker for multi-language sites.
date_locale = "uk_UA"
full-stop = "." # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "блог"
archive = "архів"
tags = "теги"
projects = "проєкти"
about = "про мене"
contact = "контакт"
privacy = "політика конфіденційності"
site_statistics = "статистика сайту"
sitemap = "карта сайту"
# Search.
search = "Пошук"
search_icon_title = "Натисніть або використовуйте $SHORTCUT, щоб відкрити пошук" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "Очистити пошук" # Title of the X icon next to search input.
zero_results = "Немає результатів"
one_results = "$NUMBER результат"
few_results = "$NUMBER результати"
many_results = "$NUMBER результатів"
# Navigation.
pinned = "Закріплено"
jump_to_posts = "Перейти до дописів"
read_more = "Читати далі"
one_posts = "$NUMBER пост"
few_posts = "$NUMBER пости" # 2, 3, 4 but not 12-14
many_posts = "$NUMBER постів" # 5-9, 0, 11-14, and others
prev = "Попер." # As in "Previous" page.
next = "Наст." # As in "Next" page.
of = "з" # E.g. Page 1 "of" 3
all_posts = "Всі пости"
all_tags = "Всі теги"
all_projects = "Усі проекти"
featured_projects = "Обрані проекти"
language_selection = "Вибір мови"
toggle_mode = "Перемкнути в режим $MODE" # $MODE will be replaced by a value (or both) below.
dark = "темний"
light = "світлий"
reset_mode = "Скинути режим до типових налаштувань сайту"
# Quick navigation buttons.
toggle_toc = "Показати/Сховати зміст"
go_to_top = "Перейти на початок сторінки"
go_to_comments = "Перейти до коментарів"
# Post metadata.
by_author = "Від $AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = ", " # For multiple authors. Ensure spacing where necessary.
author_conjunction = " і " # For multiple authors. Ensure spacing where necessary.
draft = "ЧЕРНЕТКА"
zero_min_read = "<1 хв. читання"
one_min_read = "$NUMBER хв. читання"
few_min_read = "$NUMBER хв. читання" # 2, 3, 4 but not 12-14
many_min_read = "$NUMBER хв. читання" # 5-9, 0, 11-14, and others
zero_words = "Без слів"
one_words = "$NUMBER слово"
few_words = "$NUMBER слова" # 2, 3, 4 but not 12-14
many_words = "$NUMBER слів" # 5-9, 0, 11-14, and others
last_updated_on = "Оновлено $DATE"
see_changes = "Переглянути зміни"
# Post body.
table_of_contents = "Зміст"
load_comments = "Завантажити коментарі"
# Copy code block button.
copied = "Скопійовано!"
copy_code_to_clipboard = "Копіювати код у буфер обміну"
# iine appreciation button.
like_this_post = "Мені подобається ця стаття"
# Footer: Powered by Zola and tabi.
powered_by = "Під управлінням"
and = "та"
site_source = "Вихідний код сайту"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "Сторінка, яку ви запитуєте, відсутня"
translation_missing = "або ще не перекладена на вашу мову"
check_url = "Перевірте URL на помилки або"
go_home = "поверніться на головну сторінку"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "Показати оригінальну цитату"
show_translation = "Показати переклад"
open_quotation_mark = "«"
close_quotation_mark = "»"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "Це веб-канал, також відомий як Atom-канал. Щоб підписатися, скопіюйте URL з адресного рядка у ваш RSS-читач. Відвідайте About Feeds для додаткової інформації та початку використання."
visit_the_site = "Відвідати веб-сайт"
recent_posts = "Останні пости"

View file

@ -0,0 +1,98 @@
language_name = "简体中文" # Shown in language picker for multi-language sites.
date_locale = "zh_CN"
full_stop = "。" # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "博客"
archive = "归档"
tags = "标签"
projects = "项目"
about = "关于"
contact = "联系方式" # Machine translated.
privacy = "隐私政策" # Machine translated.
site_statistics = "网站统计" # Machine translated.
sitemap = "站点地图" # Machine translated.
# Search.
search = "搜索"
search_icon_title = "点击或按 $SHORTCUT 开启搜索" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "清除搜索" # Title of the X icon next to search input.
zero_results = "没有找到结果"
one_results = "$NUMBER 个结果"
many_results = "$NUMBER 个结果"
# Navigation.
pinned = "置顶"
jump_to_posts = "跳转到文章"
read_more = "阅读全文"
one_posts = "$NUMBER 篇文章"
many_posts = "$NUMBER 篇文章"
prev = "上一页" # As in "Previous" page.
next = "下一页" # As in "Next" page.
of = "/" # E.g. Page 1 "of" 3
all_posts = "所有文章"
all_tags = "所有标签"
all_projects = "所有项目" # Machine translated.
featured_projects = "特色项目" # Machine translated.
language_selection = "语言选择" # Machine translated.
toggle_mode = "切换到$MODE模式" # $MODE will be replaced by a value (or both) below. Machine translated.
dark = "暗" # Machine translated.
light = "亮" # Machine translated.
reset_mode = "将模式重置为网站默认值" # Machine translated.
# Quick navigation buttons.
toggle_toc = "切换目录" # Machine translated.
go_to_top = "返回页面顶部" # Machine translated.
go_to_comments = "转到评论区" # Machine translated.
# Post metadata.
by_author = "由$AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = "、" # For multiple authors. Ensure spacing where necessary.
author_conjunction = "和" # For multiple authors. Ensure spacing where necessary.
draft = "草稿"
zero_min_read = "少于1分钟阅读"
one_min_read = "$NUMBER 分钟阅读"
many_min_read = "$NUMBER 分钟阅读"
zero_words = "没有字"
one_words = "$NUMBER 字"
many_words = "$NUMBER 字"
last_updated_on = "更新于 $DATE"
see_changes = "修改纪录"
# Post body.
table_of_contents = "目录"
load_comments = "载入留言"
# Copy code block button.
copied = "已复制!" # Machine translated.
copy_code_to_clipboard = "复制代码到剪贴板" # Machine translated.
# iine appreciation button.
like_this_post = "喜欢这篇文章"
# Footer: Powered by Zola and tabi.
powered_by = "网站基于"
and = "和"
site_source = "查看原始码"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "您请求的页面似乎不存在"
translation_missing = "或尚未翻译成您的语言"
check_url = "请检查网址是否有误或"
go_home = "返回首页"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "显示原文"
show_translation = "显示译文"
open_quotation_mark = "「"
close_quotation_mark = "」"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "这是Web Feed又称为Atom Feed把现在的网址复制到新闻阅读器即可订阅本站文章。造访「About Feeds」来了解更多资讯。"
visit_the_site = "造访网站"
recent_posts = "近期文章"

View file

@ -0,0 +1,98 @@
language_name = "繁體中文" # Shown in language picker for multi-language sites.
date_locale = "zh_TW"
full_stop = "。" # Used at the end of a sentence.
# Menu items.
# Should match the names in config.extra.menu and config.extra.footer_menu.
blog = "網誌"
archive = "歸檔"
tags = "標籤"
projects = "專案"
about = "關於"
contact = "聯絡方式" # Machine translated.
privacy = "隱私政策" # Machine translated.
site_statistics = "網站統計" # Machine translated.
sitemap = "網站地圖" # Machine translated.
# Search.
search = "搜尋"
search_icon_title = "點擊或按 $SHORTCUT 來開啟搜尋" # $SHORTCUT will be replaced with the actual keyboard shortcut.
clear_search = "清除搜尋" # Title of the X icon next to search input.
zero_results = "沒有找到結果"
one_results = "$NUMBER 個結果"
many_results = "$NUMBER 個結果"
# Navigation.
pinned = "釘選"
jump_to_posts = "跳轉到文章"
read_more = "閱讀全文"
one_posts = "$NUMBER 篇文章"
many_posts = "$NUMBER 篇文章"
prev = "上一頁" # As in "Previous" page.
next = "下一頁" # As in "Next" page.
of = "/" # E.g. Page 1 "of" 3
all_posts = "所有文章"
all_tags = "所有標籤"
all_projects = "所有項目" # Machine translated.
featured_projects = "精選項目" # Machine translated.
language_selection = "語言選擇" # Machine translated.
toggle_mode = "切換到$MODE模式" # $MODE will be replaced by a value (or both) below. Machine translated.
dark = "暗" # Machine translated.
light = "亮" # Machine translated.
reset_mode = "將模式重置為網站默認值" # Machine translated.
# Quick navigation buttons.
toggle_toc = "切換目錄" # Machine translated.
go_to_top = "返回頁面頂部" # Machine translated.
go_to_comments = "轉到評論區" # Machine translated.
# Post metadata.
by_author = "由$AUTHOR" # $AUTHOR will be replaced by the author(s).
author_separator = "、" # For multiple authors. Ensure spacing where necessary.
author_conjunction = "和" # For multiple authors. Ensure spacing where necessary.
draft = "草稿"
zero_min_read = "少於1分鐘閱讀"
one_min_read = "$NUMBER 分鐘閱讀"
many_min_read = "$NUMBER 分鐘閱讀"
zero_words = "沒有字"
one_words = "$NUMBER 字"
many_words = "$NUMBER 字"
last_updated_on = "更新於 $DATE"
see_changes = "修改紀錄"
# Post body.
table_of_contents = "目錄"
load_comments = "載入留言"
# Copy code block button.
copied = "已复制!" # Machine translated.
copy_code_to_clipboard = "复制代码到剪贴板" # Machine translated.
# iine appreciation button.
like_this_post = "喜歡這篇文章"
# Footer: Powered by Zola and tabi.
powered_by = "網站基於"
and = "和"
site_source = "查看原始碼"
# 404 error.
# https://welpo.github.io/tabi/404.html
page_missing = "您請求的頁面不存在"
translation_missing = "或尚未被翻譯成繁體中文"
check_url = "請檢查網址是否有誤或"
go_home = "返回首頁"
# For multilingual quote shortcode.
# https://welpo.github.io/tabi/blog/shortcodes/#multilingual-quotes
show_original_quote = "顯示原文"
show_translation = "顯示翻譯"
open_quotation_mark = "「"
close_quotation_mark = "」"
# Translations for stylised Atom feed.
# https://welpo.github.io/tabi/atom.xml
# Must contain "About Feeds"; it will become a link.
about_feeds = "這是Web Feed又稱為Atom Feed把現在的網址複製到新聞閱讀器即可訂閱本站文章。造訪「About Feeds」來了解更多資訊。"
visit_the_site = "造訪網站"
recent_posts = "近期文章"

View file

@ -0,0 +1,330 @@
@use 'parts/_admonitions.scss';
@use 'parts/_archive.scss';
@use 'parts/_aside.scss';
@use 'parts/_cards.scss';
@use 'parts/_code.scss';
@use 'parts/_comments.scss';
@use 'parts/_footer.scss';
@use 'parts/_header-anchor.scss';
@use 'parts/_header.scss';
@use 'parts/_home-banner.scss';
@use 'parts/_iine.scss';
@use 'parts/_image-hover.scss';
@use 'parts/_image-toggler.scss';
@use 'parts/_image.scss';
@use 'parts/_misc.scss';
@use 'parts/_multilingual_quote.scss';
@use 'parts/_pagination.scss';
@use 'parts/_posts_list.scss';
@use 'parts/_quick_navigation_buttons.scss';
@use 'parts/_search.scss';
@use 'parts/_spoiler.scss';
@use 'parts/_syntax_theme.scss';
@use 'parts/_table.scss';
@use 'parts/_tags.scss';
@use 'parts/_theme-switch.scss';
@use 'parts/_webmention.scss';
@use 'parts/_zola-error.scss';
@font-face {
src: local('Hack'),
url('fonts/HackNerdFontMono-Regular.ttf') format("truetype");
font-family: 'Hack';
font-display: swap;
}
@mixin theme-variables($theme) {
@if $theme =='light' {
--background-color: white;
--bg-0: #f0f0f0;
--bg-1: #e7e7e7;
--bg-2: #fefefe;
--bg-3: #d8dcdd;
--hover-color: white;
--primary-color: #087E96;
--divider-color: #d7d7d7;
--text-color: #222226;
--text-color-high-contrast: #313333;
--meta-color: #5b5b65;
--codeblock-bg: #26232e;
--codeblock-highlight: #383444;
--theme-switcher-svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z'/%3E%3C/svg%3E%0A");
color-scheme: light;
}
@else {
--background-color: #1f1f1f;
--bg-0: #2f2f2f;
--bg-1: #3c3c3c;
--bg-2: #171717;
--bg-3: #535555;
--hover-color: black;
--primary-color: #91e0ee;
--divider-color: #4a4a4a;
--text-color: #D4D4D4;
--text-color-high-contrast: #eceeef;
--meta-color: #B0B0B0;
--codeblock-bg: #19181e;
--codeblock-highlight: #282834;
--theme-switcher-svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 96 960 960' %3E%3Cpath d='M480 776q-83 0-141.5-58.5T280 576q0-83 58.5-141.5T480 376q83 0 141.5 58.5T680 576q0 83-58.5 141.5T480 776ZM80 616q-17 0-28.5-11.5T40 576q0-17 11.5-28.5T80 536h80q17 0 28.5 11.5T200 576q0 17-11.5 28.5T160 616H80Zm720 0q-17 0-28.5-11.5T760 576q0-17 11.5-28.5T800 536h80q17 0 28.5 11.5T920 576q0 17-11.5 28.5T880 616h-80ZM480 296q-17 0-28.5-11.5T440 256v-80q0-17 11.5-28.5T480 136q17 0 28.5 11.5T520 176v80q0 17-11.5 28.5T480 296Zm0 720q-17 0-28.5-11.5T440 976v-80q0-17 11.5-28.5T480 856q17 0 28.5 11.5T520 896v80q0 17-11.5 28.5T480 1016ZM226 378l-43-42q-12-11-11.5-28t11.5-29q12-12 29-12t28 12l42 43q11 12 11 28t-11 28q-11 12-27.5 11.5T226 378Zm494 495-42-43q-11-12-11-28.5t11-27.5q11-12 27.5-11.5T734 774l43 42q12 11 11.5 28T777 873q-12 12-29 12t-28-12Zm-42-495q-12-11-11.5-27.5T678 322l42-43q11-12 28-11.5t29 11.5q12 12 12 29t-12 28l-43 42q-12 11-28 11t-28-11ZM183 873q-12-12-12-29t12-28l43-42q12-11 28.5-11t27.5 11q12 11 11.5 27.5T282 830l-42 43q-11 12-28 11.5T183 873Z'/%3E%3C/svg%3E");
color-scheme: dark;
}
}
:root {
@include theme-variables('light');
--max-layout-width: 1000px;
--normal-layout-width: 600px;
--medium-layout-width: 400px;
--small-layout-width: 200px;
--paragraph-spacing: max(2.3vmin, 24px);
--sans-serif-font: 'Hack', Helvetica, Arial, sans-serif;
--serif-font: 'Hack', 'Georgia', serif;
--code-font: 'Hack';
scrollbar-color: var(--primary-color) transparent;
accent-color: var(--primary-color);
line-height: 190%;
font-family: var(--sans-serif-font);
}
[data-theme='dark'] {
@include theme-variables('dark');
.invertible-image {
filter: invert(.88);
}
.dimmable-image {
filter: brightness(.8) contrast(1.2);
}
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
.invertible-image {
filter: invert(.88);
}
.dimmable-image {
filter: brightness(.8) contrast(1.2);
}
}
}
html {
background-color: var(--background-color);
color: var(--text-color);
line-height: 1.6em;
text-rendering: optimizeLegibility;
}
body {
display: flex;
flex-direction: column;
margin-inline: 5vmin;
margin-block: 0;
min-height: 100vh;
}
.content {
word-wrap: break-word;
margin: 0 auto;
margin-top: 6vmin;
margin-block-end: 4rem;
width: 100%;
max-width: var(--max-layout-width);
}
.use-sans-serif {
--serif-font: var(--sans-serif-font);
}
article {
$base-margin: 6rem;
position: relative;
margin: 0 auto;
max-width: calc(var(--max-layout-width) - 2*$base-margin);
p,
li,
details,
summary {
font-family: var(--serif-font);
}
strong {
font-weight: 620;
}
.full-width {
margin-inline-start: -$base-margin;
margin-inline-end: -$base-margin;
max-width: calc(100% + 2*$base-margin);
}
li {
p:not(:last-child) {
margin-block-end: 0;
}
p + :last-child {
margin-block-end: var(--paragraph-spacing);
}
}
}
.section-title {
display: flex;
margin: 0;
margin-top: -0.15em;
color: var(--text-color-high-contrast);
font-weight: 550;
font-size: 2.2em;
line-height: 1.2em;
}
.last-updated {
margin-top: -5vmin;
}
h1,
h2,
h3,
h4,
h5,
h6 {
display: block;
position: relative;
margin: 0;
}
h1 {
margin-top: 0.67em;
font-weight: 550;
font-size: 1.62rem;
}
h2 {
margin-top: 0.5em;
font-weight: 550;
font-size: 1.4rem;
}
h3 {
margin-top: 0.3em;
font-weight: 550;
font-size: 1.2rem;
}
h4 {
margin-top: 0.83em;
font-weight: 550;
font-size: 1rem;
}
h5 {
margin-top: 0.83em;
font-weight: normal;
font-size: 1rem;
}
p {
margin-top: 0.4rem;
margin-block-end: var(--paragraph-spacing);
font-size: 1em;
line-height: 2rem;
}
strong {
font-weight: 580;
}
.centered-text {
text-align: center;
}
video {
max-width: 100%;
}
.center-content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin: 0;
width: 100%;
height: 100vh;
text-align: center;
}
.subheader {
margin-block-end: 2rem;
}
.mobile-only {
display: none;
}
@media only screen and (max-width: 1000px) {
.content {
max-width: var(--normal-layout-width);
}
body {
margin: 0 32px;
}
article .full-width {
display: block;
margin-inline-start: 0;
margin-inline-end: 0;
max-width: none;
overflow-x: auto;
}
.mobile-only {
display: block;
}
}
@media only screen and (max-width: 600px) {
.content {
margin-top: 0rem;
max-width: var(--medium-layout-width);
}
article {
margin-top: 1.3rem;
}
body {
margin-inline: 16px;
margin-block: 0;
}
}
@media only screen and (max-width: 300px) {
.content {
max-width: var(--small-layout-width);
}
}
@media all and (min-width: 600px) {
html {
font-size: 16.5px;
}
}
@media all and (min-width: 960px) {
html {
font-size: 20px;
}
}

View file

@ -0,0 +1,159 @@
@mixin admonition-type($type) {
border-color: var(--admonition-#{$type}-border);
background-color: var(--admonition-#{$type}-bg);
> .admonition-content > p > code {
background-color: var(--admonition-#{$type}-code);
}
a {
border-bottom: 1px solid var(--admonition-#{$type}-border);
color: var(--admonition-#{$type}-border);
&:hover {
background-color: var(--admonition-#{$type}-border);
color: var(--hover-color);
}
}
.admonition-icon {
background-color: var(--admonition-#{$type}-border);
}
}
:root {
/* Note */
--admonition-note-border: #5b6167;
--admonition-note-bg: #f2f4f7;
--admonition-note-code: #e1e3ed;
/* Tip */
--admonition-tip-border: #03970f;
--admonition-tip-bg: #f0fdf0;
--admonition-tip-code: #d3edc5;
/* Info */
--admonition-info-border: #15a2b2;
--admonition-info-bg: #f5fbff;
--admonition-info-code: #d5e2f2;
/* Warning */
--admonition-warning-border: #eea719;
--admonition-warning-bg: #fff8e6;
--admonition-warning-code: #feee96;
/* Danger */
--admonition-danger-border: #d8292e;
--admonition-danger-bg: #ffebed;
--admonition-danger-code: #fcc1c5;
}
@mixin dark-theme-variables {
/* Note */
--admonition-note-border: #d0d1d4;
--admonition-note-bg: #3d3e40;
--admonition-note-code: #495057;
/* Tip */
--admonition-tip-border: #01b010;
--admonition-tip-bg: #013100;
--admonition-tip-code: #005f00;
/* Info */
--admonition-info-border: #50a9d5;
--admonition-info-bg: #193C47;
--admonition-info-code: #245e70;
/* Warning */
--admonition-warning-border: #e19d0a;
--admonition-warning-bg: #4f3a01;
--admonition-warning-code: #8c6b00;
/* Danger */
--admonition-danger-border: #e74f54;
--admonition-danger-bg: #4c1012;
--admonition-danger-code: #8c2e00;
}
[data-theme='dark'] {
@include dark-theme-variables;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include dark-theme-variables;
}
}
.admonition {
display: flex;
align-items: flex-start;
margin-block: 1em;
border-radius: 10px;
border-inline-start: 6px solid;
padding: 0.8rem;
color: var(--text-color-high-contrast);
font-family: var(--sans-serif-font);
p {
margin-inline-start: -1.75rem;
margin-block-end: 0;
font-family: inherit;
}
a {
code {
color: inherit;
}
}
}
.admonition-content {
flex: 1;
strong {
font-weight: 580;
}
}
.admonition-icon {
display: flex;
align-items: center;
margin: 0.3rem;
background-size: contain;
background-repeat: no-repeat;
aspect-ratio: 1/1;
width: 1.5rem;
}
.admonition-title {
opacity: 0.92;
font-weight: bold;
font-size: 0.82rem;
}
.admonition-icon-note {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3E%3C/svg%3E");
}
.admonition-icon-tip {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M480-78.258q-33.718 0-56.974-22.166-23.256-22.167-23.59-55.885h161.128q-.334 33.718-23.59 55.885Q513.718-78.258 480-78.258ZM318.257-210.515v-67.588h323.486v67.588H318.257Zm7.846-121.128q-67.692-42.487-106.896-109.134-39.205-66.648-39.205-147.479 0-123.769 88.149-211.884 88.149-88.115 211.967-88.115 123.817 0 211.849 88.115 88.031 88.115 88.031 211.884 0 80.831-38.999 147.479-39 66.647-107.102 109.134H326.103Zm21.927-67.588h264.351q46.311-32 73.17-81.681 26.859-49.68 26.859-107.144 0-96.918-68-164.765-68-67.846-164.564-67.846t-164.41 67.713q-67.846 67.712-67.846 164.725 0 57.52 26.859 107.259t73.581 81.739Zm131.97 0Z'/%3E%3C/svg%3E");
}
.admonition-icon-info {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M479.789-288Q495-288 505.5-298.289q10.5-10.29 10.5-25.5Q516-339 505.711-349.5q-10.29-10.5-25.5-10.5Q465-360 454.5-349.711q-10.5 10.29-10.5 25.5Q444-309 454.289-298.5q10.29 10.5 25.5 10.5ZM444-432h72v-240h-72v240Zm36.276 336Q401-96 331-126q-70-30-122.5-82.5T126-330.958q-30-69.959-30-149.5Q96-560 126-629.5t82.5-122Q261-804 330.958-834q69.959-30 149.5-30Q560-864 629.5-834t122 82.5Q804-699 834-629.276q30 69.725 30 149Q864-401 834-331q-30 70-82.5 122.5T629.276-126q-69.725 30-149 30ZM480-168q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z'/%3E%3C/svg%3E");
}
.admonition-icon-warning {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M109-120q-11 0-20-5.5T75-140q-5-9-5.5-19.5T75-180l370-640q6-10 15.5-15t19.5-5q10 0 19.5 5t15.5 15l370 640q6 10 5.5 20.5T885-140q-5 9-14 14.5t-20 5.5H109Zm69-80h604L480-720 178-200Zm302-40q17 0 28.5-11.5T520-280q0-17-11.5-28.5T480-320q-17 0-28.5 11.5T440-280q0 17 11.5 28.5T480-240Zm0-120q17 0 28.5-11.5T520-400v-120q0-17-11.5-28.5T480-560q-17 0-28.5 11.5T440-520v120q0 17 11.5 28.5T480-360Zm0-100Z'/%3E%3C/svg%3E");
}
.admonition-icon-danger {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M239.256-400q0 58.091 27.975 108.995t76.13 81.237q-5.616-8.513-8.487-18.398-2.872-9.885-2.872-19.167 1.333-26.436 12.153-50.307 10.821-23.872 31.41-43.461L480-443.921l105.819 102.82q18.923 19.311 29.885 43.321 10.961 24.011 12.294 50.447 0 9.282-2.872 19.167-2.871 9.885-7.82 18.398 47.488-30.333 75.796-81.237Q721.41-341.909 721.41-400q0-47.622-19.258-93.169-19.259-45.547-53.998-82.549-19.951 13.41-42.202 19.859Q583.7-549.41 561-549.41q-62.448 0-105.108-38.039-42.661-38.038-51.225-98.628v-9.744q-39.385 31.949-69.898 67.68-30.513 35.73-51.987 74.166t-32.5 77.464Q239.256-437.483 239.256-400ZM480-349.539l-57.436 56.436q-12.154 11.821-17.731 26.029-5.577 14.208-5.577 29.074 0 32.769 23.498 55.757 23.497 22.987 57.246 22.987 33.432 0 57.421-22.906 23.989-22.906 23.989-55.561 0-16.162-6.116-30.162-6.116-13.999-17.454-25.154l-57.84-56.5Zm-11.002-469.022V-708q0 38.637 26.832 64.819 26.831 26.183 65.17 26.183 15.609 0 30.818-5.923 15.208-5.923 28.131-17.718l22.615-24.102q67.564 44.128 106.999 114.917 39.435 70.79 39.435 150.156 0 128.206-89.846 218.103Q609.307-91.668 480-91.668q-129.027 0-218.68-89.652-89.652-89.653-89.652-218.68 0-119.178 79.371-232.447t217.959-186.114Z'/%3E%3C/svg%3E");
}
.admonition.note { @include admonition-type('note'); }
.admonition.tip { @include admonition-type('tip'); }
.admonition.info { @include admonition-type('info'); }
.admonition.warning { @include admonition-type('warning'); }
.admonition.danger { @include admonition-type('danger'); }

View file

@ -0,0 +1,37 @@
.archive {
margin-block-start: 4vmin;
.listing-title {
margin-block-end: 1rem;
font-size: 1.5rem;
}
.listing-item {
display: flex;
gap: 1rem;
margin-block-end: 0.5rem;
padding-inline: 1rem;
padding-block: 0.2rem;
.post-time {
padding-inline-start: 1vmin;
min-inline-size: 5rem;
text-align: start;
.date {
color: var(--meta-color);
white-space: nowrap;
}
}
}
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
margin-bottom: 1.3rem;
}
}

View file

@ -0,0 +1,31 @@
aside {
margin-block-end: var(--paragraph-spacing);
border-radius: 4px;
background: var(--bg-0);
padding-block: 0.8rem;
padding-inline: 1rem;
color: var(--meta-color);
font-size: 0.9rem;
article & p {
margin: 0;
font-family: var(--sans-serif-font);
}
@media only screen and (min-width: 1300px) {
position: absolute;
inset-inline-start: -14rem;
margin-block: 0;
border-radius: 0;
background: none;
padding: 0;
width: 12rem;
text-align: end;
&[data-position="right"] {
inset-inline-start: auto;
inset-inline-end: -14rem;
text-align: start;
}
}
}

View file

@ -0,0 +1,105 @@
.filter-controls {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 12px;
margin-top: 1.2rem;
margin-bottom: -1rem;
padding: 0;
list-style: none;
#all-projects-filter {
display: none;
}
.taxonomy-item {
margin: 0;
a {
display: inline-block;
box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;
border-radius: 1rem;
background: var(--bg-2);
padding: 0 16px;
color: var(--text-color);
font-size: 0.8rem;
text-decoration: none;
&:hover {
background: var(--primary-color);
color: var(--hover-color);
}
&.active {
background: var(--primary-color);
color: var(--hover-color);
}
}
}
}
.cards {
display: grid;
grid-template-rows: auto;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
margin-top: 4vmin;
padding-block: 12px;
.card {
box-shadow: rgba(50, 50, 93, 0.25) 0px 2px 5px -1px, rgba(0, 0, 0, 0.3) 0px 1px 3px -1px;
border-radius: 1rem;
background: var(--bg-2);
min-height: 100px;
overflow: hidden;
&:hover {
background-color: var(--primary-color);
}
&:hover .card-description {
color: var(--hover-color);
}
.card-info {
padding-inline: 24px;
padding-block-start: 0;
padding-block-end: 24px;
text-align: center;
}
.card-image {
$margin: 1.6rem;
margin: $margin;
margin-bottom: $margin / 1.5;
width: calc(100% - $margin * 2);
height: auto;
}
.card-image-placeholder {
width: 100%;
height: 12px;
}
.card-description {
margin-top: 0.5em;
overflow: hidden;
color: var(--text-color);
}
}
}
@media all and (max-width: 720px) {
.cards {
gap: 18px;
}
.filter-controls {
gap: 8px;
margin: 18px 0;
.taxonomy-item a {
padding: 4px 12px;
}
}
}

View file

@ -0,0 +1,152 @@
code {
-webkit-text-size-adjust: 100%;
border-radius: 5px;
background-color: var(--bg-1);
padding-inline: 0.2em;
padding-block: 0.1em;
font-size: 0.9rem;
font-family: var(--code-font);
mark {
display: block;
filter: brightness(110%);
background-color: var(--codeblock-highlight);
color: inherit;
}
table {
margin: 0rem;
border-collapse: collapse;
border-spacing: 0rem;
width: 100%;
text-align: start;
td,
th,
tr {
border: none;
padding: 0rem;
}
// Line number col.
tbody td:first-child {
opacity: 50%;
padding-inline-end: 0.8rem;
width: 1px; // Without this, iOS Safari centres short lines.
user-select: none;
text-align: end;
}
tbody tr:nth-child(even) {
background-color: inherit;
}
}
}
a:hover code {
background-color: inherit;
padding-block: 0;
}
pre {
display: block;
position: relative;
border-radius: 5px;
padding-inline: 1rem;
padding-block-start: 2.4rem;
padding-block-end: 1rem;
overflow: hidden;
overflow-x: auto;
line-height: 1.4;
code,
code td {
font-size: 0.8rem; // Fits ~77 characters.
}
// Supports both native Zola way of adding src, and old shortcode-based logic.
// See: https://github.com/welpo/tabi/pull/489
&::after,
code .source-path {
display: block;
position: absolute;
top: 0;
inset-inline-end: 1.3rem;
padding-top: 0.3rem;
padding-inline-end: 1.3rem;
max-width: calc(100% - 14em);
height: 0.9rem;
overflow: hidden;
content: attr(data-name);
color: var(--hover-color);
font-size: 0.65rem;
text-align: end;
text-overflow: ellipsis;
white-space: nowrap;
}
code {
display: block;
border: 0rem;
border-radius: 5px;
background-color: transparent;
padding: 0rem;
overflow-x: auto;
color: inherit;
white-space: pre;
&::before {
display: block;
position: absolute;
top: 0;
inset-inline-start: 0;
background-color: var(--primary-color);
padding: 0.3rem;
padding-inline-start: 1rem;
width: calc(100% - 1.3rem);
height: 0.9rem;
content: attr(data-lang);
color: var(--hover-color);
font-size: 0.65rem;
text-align: start;
text-transform: uppercase;
}
}
}
// Default to LTR codeblocks.
code, pre {
direction: ltr;
}
// Allows RTL codeblocks if `force_codeblock_ltr` is set to false.
html[data-code-direction="inherit"] {
code, pre {
direction: inherit;
}
}
.copy-code {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M217.002-67.694q-37.732 0-64.02-26.288-26.287-26.287-26.287-64.019V-707.69h77.999v549.689q0 4.615 3.846 8.462 3.846 3.846 8.462 3.846h451.689v77.999H217.002Zm175.999-175.999q-37.733 0-64.02-26.287T302.694-334v-463.383q0-37.732 26.287-64.02 26.287-26.287 64.02-26.287h365.383q37.732 0 64.019 26.287 26.288 26.288 26.288 64.02V-334q0 37.733-26.288 64.02-26.287 26.287-64.019 26.287H393.001Zm0-77.998h365.383q4.615 0 8.462-3.847 3.846-3.846 3.846-8.462v-463.383q0-4.616-3.846-8.462-3.847-3.846-8.462-3.846H393.001q-4.616 0-8.462 3.846-3.847 3.846-3.847 8.462V-334q0 4.616 3.847 8.462 3.846 3.847 8.462 3.847Zm-12.309 0v-488V-321.691Z'/%3E%3C/svg%3E");
position: absolute;
top: 0.3rem;
align-self: center;
z-index: 1;
cursor: pointer;
inset-inline-end: 0.7rem;
background: var(--hover-color);
background-size: contain;
width: 0.9rem;
height: 0.9rem;
color: white;
}
.copy-code.checked {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M395-253 194-455l83-83 118 117 288-287 83 84-371 371Z'/%3E%3C/svg%3E");
width: 1rem;
height: 1rem;
}
.copy-code.error {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960' %3E%3Cpath d='M479.386-248Q509-248 529-267.386q20-19.386 20-49T529.614-366.5q-19.386-20.5-49-20.5T431-366.886q-20 20.114-20 49.728t19.386 49.386q19.386 19.772 49 19.772ZM416-431h128v-265H416v265Zm64.276 381q-88.916 0-167.743-33.104-78.828-33.103-137.577-91.852-58.749-58.749-91.852-137.535Q50-391.277 50-480.458q0-89.438 33.162-167.491 33.163-78.053 92.175-136.942 59.011-58.889 137.533-91.999Q391.393-910 480.458-910q89.428 0 167.518 33.093T784.94-784.94q58.874 58.874 91.967 137.215Q910-569.385 910-480.192q0 89.192-33.11 167.518-33.11 78.326-91.999 137.337-58.889 59.012-137.167 92.174Q569.447-50 480.276-50Z'/%3E%3C/svg%3E");
}

View file

@ -0,0 +1,33 @@
.utterances-frame {
width: 100%;
}
.comments {
margin-top: 2rem;
border-top: var(--divider-color) solid 0.5px;
border-bottom: var(--divider-color) solid 0.5px;
padding-top: 2rem;
padding-bottom: 2rem;
iframe {
margin: 0;
border: none;
aspect-ratio: inherit;
width: 100%;
max-width: 100%;
}
.load-comments-button {
display: block;
cursor: pointer;
margin: 0.5em auto;
border: none;
background: none;
padding-block: 0.5em;
padding-inline: 1em;
color: inherit;
font-size: 0.95rem;
font-family: var(--sans-serif-font);
text-decoration: none;
}
}

View file

@ -0,0 +1,91 @@
footer {
margin-top: auto;
margin-block-end: 1.4rem;
color: var(--meta-color);
font-size: 0.88rem;
font-family: var(--post-font-family);
text-align: center;
.nav-links {
color: var(--primary-color);
}
p {
margin: 0;
}
}
footer section {
display: flex;
flex-direction: column;
align-items: center;
gap: 0rem;
}
footer nav {
display: flex;
margin: 0 0rem;
}
.socials {
display: flex;
flex-grow: 0;
flex-wrap: wrap;
justify-content: center;
align-items: flex-end;
svg {
max-height: 15px;
}
ul {
gap: 5px;
}
}
.social {
display: flex;
justify-content: center;
align-items: center;
background-image: unset;
padding: 0.5vmin;
}
.social > img {
aspect-ratio: 1/1;
width: 1.5rem;
height: auto;
color: #000000;
}
.social {
&:hover {
& > img {
filter: invert(1);
}
}
}
@mixin dark-theme-social {
.social {
&:hover {
& > img {
filter: invert(0);
}
}
& > img {
filter: invert(1);
}
}
}
[data-theme="dark"] {
@include dark-theme-social;
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) {
@include dark-theme-social;
}
}

View file

@ -0,0 +1,35 @@
.header-anchor {
display: inline-flex;
position: absolute;
justify-content: center;
align-items: center;
opacity: 0;
margin-inline-start: -2rem;
padding-inline-end: 0.3rem;
width: 1.9rem;
height: 100%;
user-select: none;
@media (max-width: 500px) {
display: none;
}
}
.link-icon {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.78 3.653a3.936 3.936 0 1 1 5.567 5.567l-3.627 3.627a3.936 3.936 0 0 1-5.88-.353.75.75 0 0 0-1.18.928 5.436 5.436 0 0 0 8.12.486l3.628-3.628a5.436 5.436 0 1 0-7.688-7.688l-3 3a.75.75 0 0 0 1.06 1.061l3-3Z'%3E%3C/path%3E%3Cpath d='M7.28 11.153a3.936 3.936 0 0 1 5.88.353.75.75 0 0 0 1.18-.928 5.436 5.436 0 0 0-8.12-.486L2.592 13.72a5.436 5.436 0 1 0 7.688 7.688l3-3a.75.75 0 1 0-1.06-1.06l-3 3a3.936 3.936 0 0 1-5.567-5.568l3.627-3.627Z'%3E%3C/path%3E%3C/svg%3E");
align-self: center;
cursor: pointer;
background: var(--text-color);
width: 1rem;
height: 1rem;
}
h1, h2, h3, h4, h5, h6 {
&:hover .header-anchor {
opacity: 1;
}
.header-anchor:hover {
background-color: transparent;
}
}

View file

@ -0,0 +1,197 @@
header {
width: 100%;
font-family: 'Inter Subset', var(--sans-serif-font);
}
.page-header {
margin-block: 4rem 1rem;
font-size: 3em;
line-height: 100%;
font-family: var(--header-font);
}
.navbar {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
margin: 0 auto;
padding-block: 1em;
max-width: var(--max-layout-width);
}
.nav-navs {
display: flex;
flex-wrap: wrap;
align-items: center;
ul {
display: flex;
flex-wrap: inherit;
justify-content: inherit;
align-items: inherit;
gap: 1px;
margin: 0;
padding: 0;
list-style: none;
}
}
.menu-icons-container {
display: flex;
align-items: center;
margin-left: auto;
}
.menu-icons-group {
gap: 1px;
margin: 0;
padding: 0;
}
.nav-links {
justify-content: right;
padding: 0.66rem;
color: var(--text-color);
font-weight: 340;
font-size: 1em;
line-height: 2.5;
text-decoration: none;
}
.home-title {
margin-inline-start: -0.12rem;
border: none;
padding: 0.12rem;
color: var(--primary-color);
font-weight: 450;
font-size: 1.7em;
text-decoration: none;
}
.meta {
padding: 0;
padding-top: 0.7vmin;
padding-bottom: 3vmin;
color: var(--meta-color);
font-weight: 300;
font-size: 0.8rem;
line-height: 1.4rem;
letter-spacing: -0.4px;
a {
color: var(--meta-color);
font-weight: inherit;
text-decoration: none;
text-decoration-color: none;
}
ul,
li {
display: inline-block;
margin-inline-end: 0.2rem;
font-family: var(--sans-serif-font);
list-style-type: none;
}
.tag {
margin-inline-end: 0;
}
}
.separator {
margin-inline-end: 0.2rem;
user-select: none;
}
.language-switcher {
display: flex;
justify-content: center;
align-items: center;
margin-inline-start: 0.5rem;
margin-inline-end: 0.5rem;
.language-switcher-icon {
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-width='1.8' d='M1 12a11 11 90 0 0 22 0 11 11 90 0 0-22 0m1-4h20M2 16h20M11 1a21 21 90 0 0 0 22m2-22a21 21 90 0 1 0 22'/%3E%3C/svg%3E%0A");
position: relative;
align-self: center;
cursor: pointer;
background: var(--text-color);
width: 1rem;
height: 1rem;
&:hover {
background: var(--meta-color);
}
}
}
.dropdown {
display: inline-block;
position: relative;
z-index: 1;
font-size: 0.8rem;
&:hover .dropdown-content,
&:focus-within .dropdown-content {
display: block;
}
summary {
list-style: none;
&::-webkit-details-marker {
display: none;
}
}
.dropdown-content {
display: none;
position: absolute;
left: 50%;
transform: translateX(-50%);
z-index: 1;
background: var(--background-color);
padding-inline-start: 0.5rem;
padding-inline-end: 0.5rem;
text-align: center;
white-space: nowrap;
a {
display: block;
}
}
}
@media only screen and (max-width: 1000px) {
.navbar {
max-width: var(--normal-layout-width);
}
.nav-navs {
display: flex;
justify-content: center;
}
.menu-icons-container {
margin-left: 0;
}
}
@media only screen and (max-width: 600px) {
.nav-navs {
margin-top: 0.8rem;
}
.navbar {
flex-direction: column;
align-items: center;
}
}
@media only screen and (max-width: 300px) {
.navbar {
max-width: var(--small-layout-width);
}
}

View file

@ -0,0 +1,82 @@
#banner-container-home {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin: 0.2rem auto;
width: 100%;
@media only screen and (max-width: 600px) {
display: block;
margin-block-end: 2rem;
}
#home-banner-text {
flex: 1;
margin-block-end: 1.5rem;
color: var(--primary-color);
font-size: 1.875rem;
line-height: 3rem;
li {
font-size: 1rem;
}
#home-banner-header {
margin: 0;
margin-block-end: 1rem;
font-weight: 550;
font-size: 2.8rem;
@media only screen and (max-width: 600px) {
margin-block-end: 0;
font-size: 2.2rem;
}
}
#banner-home-subtitle {
color: var(--text-color);
font-weight: 250;
line-height: 1.75rem;
p {
font-size: 1rem;
}
a {
font-weight: 400;
}
}
@media only screen and (max-width: 600px) {
width: 100%;
}
}
#image-container-home {
position: relative;
margin: auto 0;
padding-inline-start: 2rem;
max-width: 11rem;
overflow: hidden;
text-align: center;
#banner-home-img {
border: none;
aspect-ratio: 1 / 1;
width: 100%;
height: 100%;
object-fit: cover;
@media only screen and (max-width: 600px) {
max-width: 12rem;
max-height: 12rem;
}
}
@media only screen and (max-width: 600px) {
padding-inline-start: 0;
width: 100%;
max-width: none;
}
}
}

View file

@ -0,0 +1,37 @@
.iine-button {
display: inline-flex;
align-items: center;
gap: 5px;
transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
cursor: pointer;
border: none;
background: transparent;
color: inherit;
font-family: var(--sans-serif-font);
-webkit-tap-highlight-color: transparent;
appearance: none;
margin: 0;
padding: 0;
font-size: inherit;
line-height: inherit;
.icon {
display: inline-flex;
align-items: center;
}
.counter {
margin-left: .2rem;
font-size: 0.8rem;
}
svg {
width: 1em;
height: 1em;
}
}
.iine-auto-buttons {
margin-top: 2rem;
padding: 1rem 0;
}

View file

@ -0,0 +1,22 @@
.image-hover-container {
position: relative;
width: 100%;
.image-default {
display: inline;
}
.image-hovered {
display: none;
}
&:hover {
.image-default {
display: none;
}
.image-hovered {
display: inline;
}
}
}

View file

@ -0,0 +1,24 @@
.image-label {
cursor: pointer;
}
.image-toggled {
position: absolute;
top: 0;
left: 0;
visibility: hidden;
}
.image-toggler-toggle {
display: none;
}
.image-toggler-toggle:checked ~ .image-label .image-toggled {
position: static;
visibility: visible;
}
.image-toggler-toggle:checked ~ .image-label .image-default {
position: absolute;
visibility: hidden;
}

View file

@ -0,0 +1,60 @@
figure {
display: inline-block;
box-sizing: border-box;
margin: 0;
max-width: 100%;
height: auto;
}
figcaption {
color: var(--meta-color);
font-size: 0.72rem;
font-family: var(--serif-font);
text-align: center;
}
img {
display: block;
margin: 0 auto;
max-width: 100%;
height: auto;
}
img.inline {
display: inline;
vertical-align: middle;
}
figure h4 {
margin: 0;
margin-block-end: 1em;
font-size: 1rem;
}
figure h4::before {
content: "";
}
.img-dark {
display: none;
&.inline{
display: none;
}
}
.img-light.inline {
display: inline;
}
[data-theme="dark"] {
.img-dark {
display: block;
&.inline {
display: inline;
}
}
.img-light {
display: none;
}
}

View file

@ -0,0 +1,330 @@
kbd {
border: 1px solid var(--divider-color);
border-radius: 5px;
background-color: var(--bg-0);
padding: 0.1rem 0.3rem;
font-size: 0.8rem;
}
.draft-label {
margin-inline-end: 0.3rem;
background-color: var(--primary-color);
padding-inline: 4px;
padding-block: 2px;
color: var(--hover-color);
}
.article-title {
display: block;
margin: 0;
color: var(--text-color-high-contrast);
font-weight: 550;
font-size: 2rem;
line-height: 3rem;
}
iframe {
display: block;
margin-inline-start: 15%;
margin-inline-end: 15%;
margin-block-end: 3vmin;
border: none;
aspect-ratio: 16/9;
width: 100vmin;
max-width: 70%;
}
ul {
margin-top: 0;
}
.toc-container {
margin-block-end: 4vmin;
}
.padding-top {
padding-top: 4vmin;
}
.title-container {
padding-bottom: 8px;
.social {
margin-inline-start: 0.5rem;
}
}
.bottom-divider {
border-bottom: var(--divider-color) solid 0.5px;
}
::-moz-selection {
background: var(--primary-color);
color: var(--hover-color);
text-shadow: none;
}
::selection {
background: var(--primary-color);
color: var(--hover-color);
}
.nav.tags {
display: inline-block;
}
blockquote {
margin: 0;
border-inline-start: 0.3rem solid var(--primary-color);
padding-inline-start: 1em;
}
a {
position: relative;
color: var(--primary-color);
font-weight: inherit;
text-decoration: inherit;
}
// External link styles with `external_links_class = "external"`.
main {
--external-link-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2'%3E%3Cpath d='M11 5h-6v14h14v-6'/%3E%3Cpath d='M13 11l7 -7'/%3E%3Cpath d='M21 3h-6M21 3v6'/%3E%3C/g%3E%3C/svg%3E");
a.external:not(:has(img, svg, video, picture, figure))::after {
display: inline-block;
vertical-align: -0.05em;
margin-inline-start: 0.1em;
background-color: currentColor;
width: 0.8em;
height: 0.8em;
content: '';
-webkit-mask-image: var(--external-link-icon);
-webkit-mask-size: 100% 100%;
}
&:dir(rtl) a.external:not(:has(img, svg, video, picture, figure))::after {
transform: rotate(-90deg);
}
.meta a.external:not(:has(img, svg, video, picture, figure))::after {
background-color: var(--meta-color);
}
a.external:not(:has(img, svg, video, picture, figure)):hover::after {
background-color: var(--hover-color);
}
}
a:hover {
background-color: var(--primary-color);
color: var(--hover-color);
}
a:hover rt {
color: var(--text-color);
}
a:not(.no-hover-padding):hover::before {
display: inline-block;
position: absolute;
z-index: -1;
inset-block-end: 0;
inset-block-start: 0;
inset-inline-end: -0.15em;
inset-inline-start: -0.15em;
background-color: var(--primary-color);
max-inline-size: 105%;
content: "";
}
@media screen and (max-width: 600px) {
.list > ul {
margin: 0;
padding: 0;
}
}
hr {
margin: 3.5rem 0 1rem;
border: none;
background-color: var(--divider-color);
height: 1px;
}
.footnotes-list,
.footnotes {
text-align: start;
}
.footnote-reference {
font-size: 0.7rem;
font-family: var(--serif-font);
}
.footnote-definition {
margin-block-end: 0.6rem;
sup {
margin-inline-end: 0.15rem;
font-size: 0.75rem;
font-family: var(--serif-font);
}
p {
display: inline;
}
}
.footnote-backlink {
margin-inline-start: 0.2rem;
font-size: 0.8rem;
}
.footnotes-list a[href^="#fr-"],
.footnotes a[href^="#fr-"] {
font-size: 0.8rem;
}
.footnotes code {
font-size: 0.8rem;
}
.references p {
margin-inline-start: 2.4rem;
text-indent: -2.4rem;
}
.info-box {
margin-top: 1rem;
margin-block-end: 1rem;
border: 1px solid var(--primary-color);
border-radius: 10px;
border-inline-start-width: 0.3rem;
padding: 1rem;
text-align: center;
}
#page-content {
margin-top: 4vmin;
}
.hidden {
display: none;
visibility: hidden;
}
.visually-hidden {
clip: rect(0 0 0 0);
position: absolute;
margin: -1px;
border: 0;
padding: 0;
width: 1px;
height: 1px;
overflow: hidden;
white-space: nowrap;
}
details summary {
cursor: pointer;
}
.interactive-icon {
cursor: pointer;
path {
fill: var(--text-color);
}
:hover path {
fill: var(--meta-color);
}
}
.article-navigation {
display: flex;
margin-block-start: 2rem;
border-block-start: var(--divider-color) solid 0.5px;
padding-block-start: 2rem;
div:first-child {
flex: 1;
text-align: start;
}
div:last-child {
flex: 1;
text-align: end;
}
div p {
color: var(--meta-color);
font-weight: 300;
line-height: 1.2rem;
font-family: var(--sans-serif-font);
letter-spacing: -0.4px;
}
@media (max-width: 600px) {
flex-direction: column;
div {
text-align: center !important;
}
}
}
:dir(rtl) .arrow {
display: inline-block;
transform: scaleX(-1);
}
// This for the arrows that point to a corner, (e.g. '', '', '', '')
:dir(rtl) .arrow-corner {
display: inline-block;
transform: rotate(-90deg);
}
.mermaid p {
font-family: var(--sans-serif-font) !important;
}
.mermaid .node .label {
max-width: none !important;
}
// For the `force_text_direction` shortcode.
[data-force-text-direction="ltr"] {
direction: ltr;
unicode-bidi: bidi-override;
}
[data-force-text-direction="rtl"] {
direction: rtl;
unicode-bidi: bidi-override;
}
[data-force-text-direction="ltr"] *,
[data-force-text-direction="rtl"] * {
direction: inherit;
}
.title-with-jump {
display: flex;
justify-content: space-between;
align-items: center;
}
.title-with-jump h1 {
flex: 1;
}
.jump-link {
flex-shrink: 0;
font-size: 0.9rem;
}
@media (max-width: 500px) {
.title-with-jump {
flex-direction: column;
}
}

View file

@ -0,0 +1,35 @@
.quote-container {
border: none;
}
.quote-toggle {
display: none;
}
.quote-label {
display: none;
cursor: pointer;
border-radius: 5px;
color: var(--meta-color);
font-size: 0.75rem;
font-family: var(--sans-serif-font);
text-align: center;
text-decoration: none;
}
.quote-toggle:not(:checked) ~ .quote .translated .quote-label-original,
.quote-toggle:checked ~ .quote .original .quote-label-translate {
display: inline;
}
.original {
display: none;
}
.quote-toggle:checked ~ .quote .original {
display: block;
}
.quote-toggle:checked ~ .quote .translated {
display: none;
}

View file

@ -0,0 +1,19 @@
.pagination {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 2rem;
padding: 0;
font-size: 1em;
list-style: none;
.page-item .disabled {
opacity: 0.5;
pointer-events: none;
}
.page-numbers {
color: var(--meta-color);
font-size: 0.9rem;
}
}

View file

@ -0,0 +1,172 @@
.bloglist-container {
display: grid;
grid-template-columns: 1fr 8fr;
}
$padding: 2.5rem;
.bloglist-meta {
display: flex;
align-items: flex-start;
background-color: var(--navbar-color);
padding-block: $padding;
min-width: 13.5rem;
.thumbnail-image {
margin: 0;
margin-inline: auto; // Centred by default.
max-width: 70%;
}
li.date + li.post-thumbnail .thumbnail-image {
// Styles for the thumbnail when there's a date above (either date or updated).
margin-inline: 0; // Since metadata is left aligned, the image looks weird when centred.
margin-block-start: 0.7rem;
}
ul {
margin-inline-end: 0.7rem;
padding: 0;
color: var(--meta-color);
font-weight: 300;
font-size: 0.9rem;
li {
list-style-type: none;
white-space: nowrap;
}
li.draft-label {
width: fit-content;
line-height: 1.2rem;
}
}
}
.bloglist-content {
display: flex;
position: relative;
align-items: flex-start;
background-color: var(--navbar-color);
padding: $padding 0;
.pinned-label {
display: flex;
position: absolute;
top: 0.8rem;
align-items: center;
gap: 0.3rem;
color: var(--meta-color);
font-weight: 300;
font-size: 0.8rem;
}
.pinned-label svg {
width: 0.8rem;
height: 0.8rem;
}
div {
flex: 1;
.bloglist-title {
margin: 0;
font-weight: bold;
font-size: 1.2em;
a {
color: var(--text-color-high-contrast);
font-weight: 550;
&:hover {
color: var(--hover-color);
}
}
}
.bloglist-tags {
margin-top: 0.1rem;
.tag {
display: inline-block;
margin-inline-end: 0.7rem;
font-weight: 400;
font-size: 0.75rem;
text-transform: uppercase;
}
}
.description p {
margin: 0.5rem 0 1rem;
color: var(--text-color);
font-weight: 250;
font-size: 0.9rem;
line-height: 1.5rem;
}
}
}
.all-posts {
font-weight: 350;
font-size: 1.3rem;
}
#all-projects {
margin-top: 2rem;
}
.posts-first #featured-projects {
margin-top: 4rem;
}
.projects-first #posts-list {
margin-top: 4rem;
}
@media only screen and (max-width: 1100px) {
.bloglist-container {
display: block;
}
.pinned-label svg {
margin-bottom: -2px;
}
.bloglist-meta {
border-bottom: 0;
padding-block: 2rem;
ul {
margin-block-end: 0;
width: 100%;
li {
display: inline;
margin-inline-end: 0.3rem;
}
}
.post-thumbnail {
display: none;
}
}
.bloglist-content {
flex-direction: column;
align-items: flex-start;
padding: 0;
padding-bottom: 2rem;
.pinned-label {
position: static;
margin: 0;
margin-top: -1.9rem;
}
div {
width: 100%;
}
}
}

View file

@ -0,0 +1,126 @@
#button-container {
display: flex;
position: fixed;
right: 2rem;
bottom: 2rem;
flex-direction: column;
gap: 0.6rem;
z-index: 2; // Above "copy-code" buttons. Important for the ToC.
#toc-button,
#comments-button,
#top-button {
display: flex;
justify-content: center;
align-items: center;
z-index: 2;
cursor: pointer;
border: none;
border-radius: 50%;
background-color: var(--bg-1);
padding: 0.4rem;
width: 1rem;
height: 1rem;
text-align: center;
&:hover {
background-color: var(--bg-3);
svg {
fill: var(--primary-color);
}
&::before {
background-color: transparent;
}
}
svg {
fill: var(--text-color);
width: 1rem;
height: 1rem;
}
}
#toc-floating-container {
$padding-vertical: 0.7rem;
$padding-horizontal: 1rem;
#toc-button {
position: relative;
z-index: 2;
}
.toc-container {
margin: 0;
margin-top: $padding-vertical;
max-width: 80vw;
}
.toc-content {
display: none;
position: absolute;
right: 0;
bottom: 100%;
z-index: 2;
margin-block-end: $padding-vertical;
box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
border: 1px solid var(--divider-color);
border-radius: 5px;
background-color: var(--background-color);
padding-inline-end: $padding-horizontal;
max-height: 70vh;
overflow-y: auto;
font-size: 0.8rem;
text-align: start;
white-space: nowrap; // Prevents wrapping, allowing content to define width.
ul {
padding-inline-start: $padding-horizontal;
list-style: none;
}
}
.toggle {
display: none;
&:checked {
+ .overlay,
+ .overlay + #toc-button + .toc-content {
display: block;
}
+ .overlay + #toc-button svg {
fill: var(--primary-color); // Show the ToC icon as toggled.
}
}
}
.overlay {
display: none;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
opacity: 40%;
z-index: 1; // Lower than the Table of Contents
background: var(--background-color);
}
}
}
@media (max-width: 700px) {
#button-container {
display: none !important;
}
}
@media print {
#button-container {
display: none;
}
}

View file

@ -0,0 +1,160 @@
$icon-size: 1.3rem;
#searchModal {
background: color-mix(in srgb, var(--primary-color) 5%, transparent);
text-align: start;
#searchContainer {
padding: 1rem;
}
#searchBar {
display: flex;
position: relative;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 1rem;
.search-icon {
position: absolute;
inset-inline-start: 1rem;
width: $icon-size;
height: $icon-size;
path {
fill: var(--text-color);
}
}
.close-icon {
display: none;
position: absolute;
right: $icon-size;
margin-inline-start: 1rem;
margin-inline-end: 0.5rem;
width: $icon-size;
height: $icon-size;
}
#searchInput {
flex: 1;
border: 1px solid var(--divider-color);
border-radius: 20px;
background-color: var(--input-background-color);
padding-inline: 3rem 1rem;
padding-block: 0.75rem;
width: calc(100% - 2rem);
color: var(--text-color);
font-size: 1rem;
}
}
#results-container {
display: none;
border-top: var(--divider-color) solid 0.5px;
border-bottom-right-radius: 1rem;
border-bottom-left-radius: 1rem;
overflow: hidden;
#results-info {
padding: 0.5rem;
color: var(--meta-color);
font-size: 0.8rem;
text-align: center;
}
#results {
display: flex;
flex-direction: column;
max-height: 50vh;
overflow-y: auto;
b {
font-weight: 590;
}
a {
display: block;
&:hover {
background-color: inherit;
}
}
> div {
cursor: pointer;
padding-inline: 1rem;
padding-block: 0.5rem;
&[aria-selected="true"] {
background-color: var(--primary-color);
color: var(--hover-color);
a,
span {
color: inherit;
}
}
}
span:first-child {
display: block;
color: var(--primary-color);
font-weight: 590;
}
span:nth-child(2) {
color: var(--text-color);
}
}
}
}
.search-icon {
display: block;
position: relative;
align-self: center;
margin-inline-start: 1rem;
margin-inline-end: 0.5rem;
width: $icon-size;
height: $icon-size;
}
.search-modal {
-webkit-backdrop-filter: blur(8px);
display: none;
position: fixed;
top: 0;
left: 0;
z-index: 1000;
backdrop-filter: blur(8px);
background-color: rgba(0, 0, 0, 0.1);
width: 100%;
height: 100%;
overflow: auto;
#modal-content {
position: relative;
margin: 8% auto;
border: var(--divider-color) solid 0.5px;
border-radius: 1rem;
background-color: var(--background-color);
width: 80%;
max-width: 28rem;
}
}
@media only screen and (max-width: 600px) {
.search-modal {
#modal-content {
top: 3.5rem;
width: 92%;
#results {
max-height: 70vh;
}
}
}
}

View file

@ -0,0 +1,53 @@
.spoiler-toggle {
display: none; // Hide the checkbox.
}
.spoiler-content {
display: inline-block; // Allow content to only take up its own width.
cursor: help; // Indicate interactive element.
.spoiler-hidden {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
filter: blur(6px);
user-select: none;
a {
pointer-events: none; // Make links unclickable.
}
}
}
.spoiler-toggle:checked + .spoiler-content {
.spoiler-hidden {
filter: none;
user-select: auto;
a {
pointer-events: auto; // Enable clicking on links when revealed.
}
}
}
.spoiler-container.fixed-blur {
.spoiler-content:before {
display: inline-block; // Block display within the inline flow.
filter: blur(6px);
content: 'SPOILER'; // Display the word "SPOILER".
}
.spoiler-content .spoiler-hidden {
display: none; // Completely hide the actual content.
}
.spoiler-toggle:checked + .spoiler-content {
&:before {
content: none; // Hide the word "SPOILER".
}
.spoiler-hidden {
display: inline; // Reveal the actual content.
}
}
}

View file

@ -0,0 +1,342 @@
/*
* based on "Catppuccin Frappe" https://github.com/catppuccin/catppuccin
*/
:root {
--rosewater: #f2d5cf;
--flamingo: #eebebe;
--pink: #f4b8e4;
--mauve: #ca9ee6;
--red: #e78284;
--maroon: #ea999c;
--peach: #ef9f76;
--yellow: #e5c890;
--green: #a6d189;
--teal: #81c8be;
--sky: #99d1db;
--blue: #8caaee;
--lavender: #b4befe;
--text: #cdd6f4;
--overlay0: #737994;
}
.z-code {
background-color: var(--codeblock-bg);
color: var(--text);
}
.z-comment {
color: var(--overlay0);
font-style: italic;
}
.z-string {
color: var(--green);
&.z-regexp {
color: var(--sky);
}
}
.z-constant.z-numeric,
.z-string.z-regexp {
color: var(--sky);
}
.z-constant {
&.z-character.z-escape {
color: var(--sky);
}
&.z-language {
color: var(--lavender);
}
}
.z-support.z-function.z-builtin.z-variable.z-other.z-constant {
color: var(--sky);
}
.z-keyword {
color: var(--red);
&.z-control {
&.z-loop,
&.z-conditional,
&.z-c + + {
color: var(--mauve);
}
&.z-return,
&.z-flow.z-return {
color: var(--pink);
}
}
}
.z-support.z-type.z-exception {
color: var(--sky);
}
.z-keyword.z-operator {
color: var(--teal);
}
.z-punctuation {
&.z-accessor {
color: var(--teal);
}
&.z-section {
color: var(--text);
}
}
.z-keyword.z-control.z-import.z-include {
color: var(--peach);
}
.z-storage {
color: var(--red);
&.z-type {
color: var(--yellow);
}
&.z-modifier {
color: var(--red);
}
}
.z-entity.z-name.z-namespace,
.z-meta.z-path,
.z-storage.z-type.z-class {
color: var(--rosewater);
}
.z-entity.z-name.z-label {
color: var(--blue);
}
.z-keyword.z-declaration.z-class {
color: var(--red);
}
.z-entity.z-name.z-class,
.z-meta.z-toc-list.z-full-identifier {
color: var(--teal);
}
.z-entity {
&.z-other.z-inherited-class {
color: var(--teal);
}
&.z-name.z-function {
color: var(--blue);
font-style: italic;
}
}
.z-variable.z-function {
color: var(--blue);
font-style: italic;
}
.z-entity.z-name.z-function.z-preprocessor,
.z-keyword.z-control.z-import {
color: var(--red);
}
.z-entity.z-name.z-function {
&.z-constructor,
&.z-destructor {
color: var(--lavender);
}
}
.z-variable.z-parameter.z-function {
color: var(--rosewater);
}
.z-keyword.z-declaration.z-function {
color: var(--maroon);
}
.z-support {
&.z-function {
color: var(--teal);
}
&.z-constant {
color: var(--blue);
}
&.z-type,
&.z-class {
color: var(--blue);
font-style: italic;
}
}
.z-variable {
&.z-function {
color: var(--blue);
}
&.z-parameter {
color: var(--rosewater);
}
&.z-other {
color: var(--text);
&.z-member {
color: var(--rosewater);
}
}
&.z-language {
color: var(--peach);
}
}
.z-entity {
&.z-name.z-tag {
color: var(--sky);
}
&.z-other.z-attribute-name {
color: var(--mauve);
font-style: italic;
}
}
.z-punctuation.z-definition.z-tag {
color: var(--maroon);
}
.z-markup.z-underline.z-link.z-markdown {
color: var(--rosewater);
font-style: underline;
font-style: italic;
}
.z-comment.z-block.z-markdown,
.z-meta.z-code-fence {
color: var(--peach);
font-style: italic;
}
.z-markup.z-raw {
&.z-code-fence,
&.z-inline {
color: var(--peach);
font-style: italic;
}
}
.z-punctuation.z-definition.z-heading,
.z-entity.z-name.z-section {
color: var(--blue);
}
.z-markup {
&.z-italic {
color: var(--maroon);
font-style: italic;
}
&.z-bold {
color: var(--maroon);
font-weight: bold;
}
}
.z-constant.z-character.z-escape,
.z-source.z-shell.z-bash .z-meta.z-function.z-shell .z-meta.z-compound.z-shell .z-meta.z-function-call.z-identifier.z-shell {
color: var(--pink);
}
.z-variable.z-language.z-shell {
color: var(--red);
}
.z-source.z-lua .z-meta.z-function.z-lua .z-meta.z-block.z-lua .z-meta.z-mapping {
&.z-value.z-lua .z-meta.z-mapping.z-key.z-lua .z-string.z-unquoted.z-key.z-lua {
color: var(--lavender);
}
&.z-key.z-lua .z-string.z-unquoted.z-key.z-lua {
color: var(--flamingo);
}
}
.z-entity.z-name.z-constant.z-java {
color: var(--peach);
}
.z-support {
&.z-type.z-property-name.z-css {
color: var(--flamingo);
}
&.z-constant.z-property-value.z-css {
color: var(--text);
}
}
.z-constant.z-numeric.z-suffix.z-css,
.z-keyword.z-other.z-unit.z-css,
.z-variable.z-other.z-custom-property.z-name.z-css,
.z-support.z-type.z-custom-property.z-name.z-css,
.z-punctuation.z-definition.z-custom-property.z-css {
color: var(--peach);
}
.z-entity.z-name.z-tag.z-css {
color: var(--lavender);
}
.z-variable.z-other.z-sass {
color: var(--peach);
}
.z-invalid {
background-color: var(--red);
color: var(--text);
&.z-deprecated {
background-color: var(--mauve);
color: var(--text);
}
}
.z-meta.z-diff {
color: --OVERLAY0;
&.z-header {
color: --OVERLAY0;
}
}
.z-markup {
&.z-deleted {
color: var(--red);
}
&.z-inserted {
color: var(--green);
}
&.z-changed {
color: var(--yellow);
}
}
.z-message.z-error {
color: var(--red);
}

View file

@ -0,0 +1,38 @@
table {
margin: 1rem auto;
border-style: hidden !important;
border-radius: 5px;
border-collapse: collapse;
border-spacing: 0;
overflow: hidden;
font: inherit;
text-align: center;
th,
td {
border: 1px solid var(--bg-1);
padding-inline: 13px;
padding-block: 6px;
font-size: large;
}
thead tr {
background-color: var(--primary-color);
color: var(--hover-color);
code {
background-color: transparent;
}
}
tbody {
tr:nth-child(even) {
background-color: var(--bg-0);
}
}
details,
summary {
font-family: inherit !important;
}
}

View file

@ -0,0 +1,41 @@
#tag-cloud {
margin-top: 4vmin;
ul {
margin: 0;
padding: 0;
list-style: none;
}
.tags-item {
margin-block-end: 1rem;
}
}
@mixin column-count($count) {
-webkit-column-count: $count;
-moz-column-count: $count;
column-count: $count;
}
.two-columns ul {
@include column-count(2);
}
.three-columns ul {
@include column-count(3);
}
@media (max-width: 1000px) {
.three-columns ul {
@include column-count(2);
}
}
@media (max-width: 600px) {
.two-columns ul,
.three-columns ul {
@include column-count(1);
}
}

View file

@ -0,0 +1,42 @@
.theme-switcher {
-webkit-mask: var(--theme-switcher-svg);
position: relative;
align-self: center;
cursor: pointer;
margin-inline-start: 0.5rem;
background: var(--text-color);
width: 1rem;
height: 1rem;
&:hover {
background: var(--meta-color);
}
}
.theme-switcher-wrapper {
position: relative;
}
.theme-resetter {
-webkit-mask: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" %3E%3Cpath d="M295.87-193.869v-78.001h291.152q43.63 0 72.369-33.424 28.739-33.423 28.739-79.271t-28.739-79.391Q630.652-497.5 587.022-497.5H343.913l87.478 87.478-55.652 55.153L193.869-536.5l181.87-181.631 55.652 55.653-87.478 86.978h243.109q75.435 0 127.272 56.522 51.837 56.521 51.837 134.174 0 77.652-51.837 134.293-51.837 56.642-127.272 56.642H295.87Z"/%3E%3C/svg%3E');
position: absolute;
visibility: hidden;
opacity: 0;
transition: opacity 0.3s ease, visibility 0.3s ease;
transition-delay: 0.5s;
cursor: pointer;
inset-block-start: -0.6rem;
inset-inline-end: -0.6rem;
background: var(--text-color);
width: 0.8rem;
height: 0.8rem;
}
.theme-switcher-wrapper:hover .theme-resetter.has-custom-theme {
visibility: visible;
opacity: 1;
transition: opacity 0.1s ease, visibility 0.1s ease;
transition-delay: 0s;
&:hover {
background: var(--meta-color);
}
}

View file

@ -0,0 +1,149 @@
#webmentions {
position: relative;
z-index: 100;
margin: 0;
background-color: var(--background-color);
color: var(--text-color);
line-height: 1.2em;
h2 {
margin-bottom: 1.5em;
font-size: 1.1em;
}
h3 {
display: flex;
align-items: center;
font-size: 0.9em;
svg {
margin-inline-end: 0.2rem;
}
.svg-icon,
span {
margin-inline-end: .3rem;
}
}
ol {
padding: 0;
}
li,
p {
font-family: inherit;
}
.likes {
display: flex;
flex-wrap: wrap;
margin-top: 0.5rem;
padding: 0;
list-style: none;
li {
position: relative;
transition: transform 0.8s ease-out, z-index 0s linear 0.4s;
margin-bottom: .375rem;
margin-inline-start: -.75rem;
&:first-child {
margin-inline-start: 0;
}
&:hover {
transform: scale(1.3) translateY(-4px);
z-index: 10;
transition: transform 0.05s ease-out, z-index 0s linear 0s;
}
img {
display: block;
border: 2px solid var(--background-color, white);
border-radius: 50%;
aspect-ratio: 1/1;
width: 2.5rem;
height: 2.5rem;
object-fit: cover;
}
}
}
.comment {
margin-bottom: 1rem;
border-radius: 10px;
background: var(--bg-0);
padding: 1rem;
overflow: hidden;
font-size: 80%;
div {
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
}
p {
margin-bottom: 0;
line-height: 1.5em;
}
.p-author {
font-style: bold;
font-size: 1.3em;
}
.u-url {
font-style: italic;
text-decoration: underline;
}
.u-author {
display: flex;
align-items: center;
img {
display: block;
margin-inline-end: .625rem;
width: 2rem;
max-width: 100%;
height: 2rem;
}
}
}
form {
input {
flex: 1;
border: 1px solid var(--divider-color);
border-radius: 20px 0px 0px 20px;
background-color: var(--input-background-color);
padding-inline: 1rem 1rem;
padding-block: .75rem;
width: calc(60% - 2rem);
color: var(--text-color);
font-size: 1rem;
}
button {
flex: 1;
border: 1px solid var(--divider-color);
border-radius: 0px 20px 20px 0px;
background-color: var(--input-background-color);
padding-inline: 0.7rem 0.7rem;
padding-block: .75rem;
width: 7rem;
color: var(--text-color);
font-size: 1rem;
}
button:hover {
cursor: pointer;
background-color: var(--primary-color);
color: var(--hover-color);
}
}
}

View file

@ -0,0 +1,28 @@
// Styles Zola error messages. See https://github.com/welpo/tabi/pull/359
body > div:last-child > div:last-child[style]:not([class]):not([id]) {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 9999;
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px, rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
border: 2px solid var(--admonition-danger-border);
border-radius: 5px;
background-color: var(--admonition-danger-bg);
padding: 15px;
width: fit-content;
max-width: 80%;
}
body > div:last-child > div:last-child[style]:not([class]):not([id]) > p[style]:first-child {
margin: 0;
color: var(--admonition-danger-border);
font-weight: bold;
}
body > div:last-child > div:last-child[style]:not([class]):not([id]) > pre[style]:last-child {
margin-block-end: 0;
background-color: var(--admonition-danger-code);
padding: 10px;
overflow-x: auto;
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #3271E7; // Contrast ratio: 4.51:1
}
@else if $theme == 'dark' {
--primary-color: #6cacff; // Contrast ratio: 7.05:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,24 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
// Evangelion Unit-02.
--primary-color: #d12e36; // Contrast ratio: 5.05:1
}
@else if $theme == 'dark' {
// Evangelion Unit-01.
--primary-color: #c09bd9; // Contrast ratio: 7.01:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #1460bd; // Contrast ratio: 6.1:1
}
@else if $theme == 'dark' {
--primary-color: #e6c212; // Contrast ratio: 9.48:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #9055d8; // Contrast ratio: 4.69:1
}
@else if $theme == 'dark' {
--primary-color: #cba2e8; // Contrast ratio: 7.74:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,26 @@
// WARNING! This skin, in light theme, may not provide optimal contrast for readability
// and might not be suitable for users with certain types of visual impairment.
// Furthermore, low contrast will affect your Google Lighthouse rating.
// For more information on web accessibility: https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #f56a00; // Contrast ratio: 3.02:1. Not very accessible.
}
@else if $theme == 'dark' {
--primary-color: #ec984f; // Contrast ratio: 7.19:1. Accessible.
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,26 @@
// WARNING! This skin, in light theme, may not provide optimal contrast for readability
// and might not be suitable for users with certain types of visual impairment.
// Furthermore, low contrast will affect your Google Lighthouse rating.
// For more information on web accessibility: https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #ffa057; // Contrast ratio: 2.01:1. Not very accessible.
}
@else if $theme == 'dark' {
--primary-color: #ffab7f; // Contrast ratio: 8.93:1. Accessible.
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,26 @@
// WARNING! This skin, in light theme, may not provide optimal contrast for readability
// and might not be suitable for users with certain types of visual impairment.
// Furthermore, low contrast will affect your Google Lighthouse rating.
// For more information on web accessibility: https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum.html
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #ee59d2; // Contrast ratio: 3:1. Not very accessible.
}
@else if $theme == 'dark' {
--primary-color: #f49ee9; // Contrast ratio: 9.87:1. Accessible.
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #00804d; // Contrast ratio: 5:1
}
@else if $theme == 'dark' {
--primary-color: #00b86e; // Contrast ratio: 6.34:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #727272; // Contrast ratio: 4.81:1
}
@else if $theme == 'dark' {
--primary-color: #b3b3b3; // Contrast ratio: 7.86:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #ca4963; // Contrast ratio: 4.52:1.
}
@else if $theme == 'dark' {
--primary-color: #ea535f; // Contrast ratio: 4.63:1.
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,22 @@
@mixin theme-variables($theme) {
@if $theme =='light' {
--primary-color: #D33C5C; // Contrast ratio: 4.61:1
}
@else if $theme == 'dark' {
--primary-color: #fabed2; // Contrast ratio: 10.48:1
}
}
:root {
@include theme-variables('light');
}
[data-theme='dark'] {
@include theme-variables('dark');
}
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

View file

@ -0,0 +1,33 @@
// When creating your own skin, you can use https://webaim.org/resources/contrastchecker/
// to verify the accessibility and readability of your colourscheme.
// The default light background is #fff and the dark background is #1f1f1f.
// This defines theme-specific variables.
@mixin theme-variables($theme) {
@if $theme =='light' {
// Light theme colours.
--primary-color: #087e96; // Contrast ratio: 4.73:1
}
@else if $theme == 'dark' {
// Dark theme colours.
--primary-color: #91e0ee; // Contrast ratio: 11.06:1
}
}
// Apply light theme variables by default.
:root {
@include theme-variables('light');
}
// Apply dark theme variables when dark theme is explicitly set.
[data-theme='dark'] {
@include theme-variables('dark');
}
// Apply dark theme variables when user's system prefers dark mode
// and the theme is not explicitly set to light.
@media (prefers-color-scheme: dark) {
:root:not([data-theme='light']) {
@include theme-variables('dark');
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:atom="http://www.w3.org/2005/Atom" xmlns:tabi="https://github.com/welpo/tabi">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<xsl:attribute name="data-theme">
<xsl:value-of select="/atom:feed/tabi:metadata/tabi:default_theme"/>
</xsl:attribute>
<head>
<title>
<xsl:value-of select="/atom:feed/atom:title"/> • Feed
</title>
<meta charset="utf-8"/>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<xsl:variable name="baseUrl" select="/atom:feed/tabi:metadata/tabi:base_url"/>
<link rel="stylesheet" href="{$baseUrl}/main.css"/>
<link rel="stylesheet" href="{/atom:feed/atom:link[@rel='extra-stylesheet']/@href}" />
</head>
<body dir="auto">
<div class="content">
<main>
<div class="info-box">
<!-- This block replaces the text "About Feeds" with a hyperlink in the translated string -->
<xsl:choose>
<xsl:when test="contains(/atom:feed/tabi:metadata/tabi:about_feeds, 'About Feeds')">
<xsl:value-of select="substring-before(/atom:feed/tabi:metadata/tabi:about_feeds, 'About Feeds')"/>
<a href="https://aboutfeeds.com/" target="_blank">About Feeds</a>
<xsl:value-of select="substring-after(/atom:feed/tabi:metadata/tabi:about_feeds, 'About Feeds')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/atom:feed/tabi:metadata/tabi:about_feeds"/>
</xsl:otherwise>
</xsl:choose>
</div>
<section id="banner-home-subtitle">
<div class="padding-top home-title">
<xsl:value-of select="/atom:feed/atom:title"/>
</div>
<p>
<xsl:value-of select="/atom:feed/atom:subtitle"/>
</p>
<a class="readmore">
<xsl:attribute name="href">
<xsl:value-of select="/atom:feed/atom:link[@rel='alternate']/@href"/>
</xsl:attribute>
<xsl:value-of select="/atom:feed/tabi:metadata/tabi:visit_the_site" />
<xsl:if test="/atom:feed/tabi:metadata/tabi:current_section != /atom:feed/atom:title">
<xsl:text>: </xsl:text>
<xsl:value-of select="/atom:feed/tabi:metadata/tabi:current_section" />
</xsl:if>
<span class="arrow"></span>
</a>
<p></p>
</section>
<div class="padding-top listing-title bottom-divider">
<h1><xsl:value-of select="/atom:feed/tabi:metadata/tabi:recent_posts" /></h1>
</div>
<xsl:variable name="post_listing_date" select="/atom:feed/tabi:metadata/tabi:post_listing_date"/>
<div class="bloglist-container">
<xsl:for-each select="/atom:feed/atom:entry">
<section class="bloglist-meta bottom-divider">
<ul>
<xsl:variable name="show_date" select="$post_listing_date = 'date' or $post_listing_date = 'both'"/>
<xsl:variable name="show_updated" select="$post_listing_date = 'updated' or $post_listing_date = 'both'"/>
<xsl:if test="$show_date">
<li class="date">
<xsl:value-of select="substring(atom:published, 0, 11)"/>
</li>
</xsl:if>
<xsl:if test="$show_date and $show_updated">
<li class="mobile-only">
<xsl:value-of select="/atom:feed/tabi:metadata/tabi:separator"/>
</li>
</xsl:if>
<xsl:if test="$show_updated">
<li class="date">
<xsl:variable name="update_string" select="/atom:feed/tabi:metadata/tabi:last_updated_on"/>
<xsl:variable name="update_date" select="substring(atom:updated, 0, 11)"/>
<xsl:value-of select="substring-before($update_string, '$DATE')"/>
<xsl:value-of select="$update_date"/>
<xsl:value-of select="substring-after($update_string, '$DATE')"/>
</li>
</xsl:if>
</ul>
</section>
<section class="bloglist-content bottom-divider">
<div>
<div class="bloglist-title">
<a>
<xsl:attribute name="href">
<xsl:value-of select="atom:link/@href"/>
</xsl:attribute>
<xsl:value-of select="atom:title"/>
</a>
</div>
<div class="description">
<xsl:value-of select="atom:summary"/>
</div>
<a class="readmore" href="">
<xsl:attribute name="href">
<xsl:value-of select="atom:link/@href"/>
</xsl:attribute>
</a>
</div>
</section>
</xsl:for-each>
</div>
</main>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

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