commit 977c4221c955cdb14a688a1c83ac88c6dde83628 Author: root Date: Wed Jul 9 04:03:21 2025 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bef5522 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +zola diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f037332 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/ametrine"] + path = themes/ametrine + url = https://codeberg.org/daudix/ametrine.git diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..b99c50d --- /dev/null +++ b/config.toml @@ -0,0 +1,204 @@ +# The base URL of the site; the only required configuration variable. +base_url = "https://mc.daudix.one" + +# The site title and description; used in feeds by default. +title = "Snug Nook Minecraft Server" +description = "" + +# The default language; used in feeds. +#default_language = "en" + +# The site theme to use. +theme = "ametrine" + +# For overriding the default output directory `public`, set it to another value (e.g.: "docs") +output_dir = "public" + +# Whether dotfiles at the root level of the output directory are preserved when (re)building the site. +# Enabling this also prevents the deletion of the output folder itself on rebuilds. +#preserve_dotfiles_in_output = false + +# When set to "true", the Sass files in the `sass` directory in the site root are compiled. +# Sass files in theme directories are always compiled. +#compile_sass = true + +# When set to "true", the generated HTML files are minified. +#minify_html = false + +# A list of glob patterns specifying asset files to ignore when the content +# directory is processed. Defaults to none, which means that all asset files are +# copied over to the `public` directory. +# Example: +# ignored_content = ["*.{graphml,xlsx}", "temp.*", "**/build_folder"] +#ignored_content = [] + +# Similar to ignored_content, a list of glob patterns specifying asset files to +# ignore when the static directory is processed. Defaults to none, which means +# that all asset files are copied over to the `public` directory +#ignored_static = [] + +# When set to "true", a feed is automatically generated. +generate_feeds = true + +# The filenames to use for the feeds. Used as the template filenames, too. +# Defaults to ["atom.xml"], which has a built-in template that renders an Atom 1.0 feed. +# There is also a built-in template "rss.xml" that renders an RSS 2.0 feed. +feed_filenames = [ "atom.xml" ] + +# The number of articles to include in the feed. All items are included if +# this limit is not set (the default). +# feed_limit = 20 + +# When set to "true", files in the `static` directory are hard-linked. Useful for large +# static files. Note that for this to work, both `static` and the +# output directory need to be on the same filesystem. Note that the theme's `static` +# files are always copied, regardless of this setting. +#hard_link_static = false + +# The default author for pages +author = "SNMC" + +# The taxonomies to be rendered for the site and their configuration of the default languages +# Example: +# taxonomies = [ +# {name = "tags", feed = true}, # each tag will have its own feed +# {name = "tags"}, # you can have taxonomies with the same name in multiple languages +# {name = "categories", paginate_by = 5}, # 5 items per page for a term +# {name = "authors"}, # Basic definition: no feed or pagination +# ] +# +#taxonomies = [] + +# When set to "true", a search index is built from the pages and section +# content for `default_language`. +build_search_index = true + +# Configuration of the Markdown rendering +[markdown] +# When set to "true", all code blocks are highlighted. +highlight_code = true + +# A list of directories used to search for additional `.sublime-syntax` and `.tmTheme` files. +#extra_syntaxes_and_themes = [] + +# The theme to use for code highlighting. +# See below for list of allowed values. +highlight_theme = "dracula" + +# When set to "true", emoji aliases translated to their corresponding +# Unicode emoji equivalent in the rendered Markdown files. (e.g.: :smile: => 😄) +render_emoji = true + +# Whether external links are to be opened in a new tab +# If this is true, a `rel="noopener"` will always automatically be added for security reasons +#external_links_target_blank = false + +# Whether to set rel="nofollow" for all external links +#external_links_no_follow = false + +# Whether to set rel="noreferrer" for all external links +#external_links_no_referrer = false + +# Whether smart punctuation is enabled (changing quotes, dashes, dots in their typographic form) +# For example, `...` into `…`, `"quote"` into `“curly”` etc +smart_punctuation = true + +# Whether to set decoding="async" and loading="lazy" for all images +# When turned on, the alt text must be plain text. +# For example, `![xx](...)` is ok but `![*x*x](...)` isn’t ok +#lazy_async_image = false + +# Configuration of the link checker. +#[link_checker] +# Skip link checking for external URLs that start with these prefixes +#skip_prefixes = [ +# "http://[2001:db8::]/", +#] + +# Skip anchor checking for external URLs that start with these prefixes +#skip_anchor_prefixes = [ +# "https://caniuse.com/", +#] + +# Treat internal link problems as either "error" or "warn", default is "error" +#internal_level = "warn" + +# Treat external link problems as either "error" or "warn", default is "error" +#external_level = "error" + +# Various slugification strategies, see below for details +# Defaults to everything being a slug +#[slugify] +#paths = "on" +#taxonomies = "on" +#anchors = "on" +# Whether to remove date prefixes for page path slugs. +# For example, content/posts/2016-10-08_a-post-with-dates.md => posts/a-post-with-dates +# When true, content/posts/2016-10-08_a-post-with-dates.md => posts/2016-10-08-a-post-with-dates +#paths_keep_dates = false + +[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 = false +# Whether to include the path of the page/section in the index +include_path = false +# 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 + +# Wether to produce the search index as a javascript file or as a JSON file +# Accepted value "elasticlunr_javascript" or "elasticlunr_json" +index_format = "elasticlunr_javascript" + +# Optional translation object for the default language +# Example: +# default_language = "fr" +# +# [translations] +# title = "Un titre" +# +[translations] + +# Additional languages definition +# You can define language specific config values and translations: +# title, description, generate_feed, feed_filename, taxonomies, build_search_index +# as well as its own search configuration and translations (see above for details on those) +[languages] +# For example +# [languages.fr] +# title = "Mon blog" +# generate_feed = true +# taxonomies = [ +# {name = "auteurs"}, +# {name = "tags"}, +# ] +# build_search_index = false + +# You can put any kind of data here. The data +# will be accessible in all templates +# Example: +# [extra] +# author = "Famous author" +# +# author value will be available using {{ config.extra.author }} in templates +# +[extra] + +[extra.footer] +show_copyright = true +show_powered_by = true +show_source = true +show_last_updated = true +copyright = "raiz1.noho.st owns this website" + +[extra.nav] +icon = "SiteIcon.png" +force_sidebar = true + +links = [ + { url = "/", name = "Home", icon = "house" }, +] diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..7d23e67 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,54 @@ ++++ +title = "Snug Nook Minecraft Server" +description = "Experience the nook in a third dimension." ++++ + +Thanks to [kevadesu](https://kevadesu.github.io/)'s initiative, we have an official Minecraft server for Snug Nook members. They provided the hosting, configuration, and everything else, while I only provided the subdomain, `mc.daudix.one`. + +![Screenshot of Snug Nook Minecraft Server in Minecraft server list. It's description is "The Snug Nook® Experience - Now in Minecraft!"](https://daudix.one/snug-nook/snmc.png#no-hover#pixels) + + + +## Version + +Currently we're running Minecraft v1.21.1. + +## Access + +Access to this server is limited to Snug Nook members only. If you would like to play on this server, join [Snug Nook](https://daudix.one/snug-nook/). + +To join: + +- In Minecraft, connect to `mc.daudix.one` +- In the [Snug Nook](https://daudix.one/snug-nook/) Discord server, run the command `/register ` in any channel +- Check your DMs for "RSCC AuthAgents" and click accept. + +## Mods/Resource Packs + +To improve and make the experience more fun, our server uses a few Fabric mods: + +- [Concurrent Chunk Management Engine](https://modrinth.com/mod/c2me-fabric) +- [Distant Horizons](https://modrinth.com/mod/distanthorizons) +- [Incendium](https://modrinth.com/datapack/incendium) +- [No Chat Reports](https://modrinth.com/mod/no-chat-reports) +- [Noisium](https://modrinth.com/mod/noisium) +- [Nullscape](https://modrinth.com/datapack/nullscape) +- [Plasmo Voice](https://modrinth.com/plugin/plasmo-voice) +- [Terralith](https://modrinth.com/datapack/terralith) + +You don't need to install any of these to play. However, for the full experience, you can install the following mods: + +- [Plasmo Voice](https://modrinth.com/plugin/plasmo-voice) +- [Xaero's Minimap](https://modrinth.com/mod/xaeros-minimap) + +And the [Sparkles](https://modrinth.com/resourcepack/sparkles) resource pack. + +## Rules + +All [Snug Nook rules](https://daudix.one/snug-nook/rules) apply to the in-game chat. Consequences for breaking the rules in the in-game chat are the same as for breaking the rules in any of Snug Nook's chats. + +In addition to the above, griefing, turning the server into 2b2t, and overall ruining the fun for everyone, will result in action. diff --git a/public/404.gif b/public/404.gif new file mode 100644 index 0000000..f71ffb4 Binary files /dev/null and b/public/404.gif differ diff --git a/public/404.html b/public/404.html new file mode 100644 index 0000000..034d91f --- /dev/null +++ b/public/404.html @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 404 - Snug Nook Minecraft Server + + + + + + + + + + + + + + + + + Skip to Main Content + + +
+ + +404 + + +

Page Not Found

+ +

The requested page could not be found. Please check that the URL is correct and does not contain any typos.

+ +
+ Go Home +
+ +
+
+
+
+
+

Powered by Zola and Ametrine +

+
+
+ +
+
+ +
+ +
+
+
+
+
+ + + + + + + diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..27bc1f8 Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/audio-button.js b/public/audio-button.js new file mode 100644 index 0000000..ac2b5be --- /dev/null +++ b/public/audio-button.js @@ -0,0 +1,9 @@ +const audioButtons = document.querySelectorAll(".audio"); + +audioButtons.forEach(button => { + button.addEventListener("click", event => playAudio(button.dataset.audio)); +}); + +function playAudio(url) { + new Audio(url).play(); +} diff --git a/public/card.png b/public/card.png new file mode 100644 index 0000000..d17647f Binary files /dev/null and b/public/card.png differ diff --git a/public/closable.js b/public/closable.js new file mode 100644 index 0000000..ed2fa49 --- /dev/null +++ b/public/closable.js @@ -0,0 +1,34 @@ +const closable = document.querySelectorAll("details.closable"); + +closable.forEach((detail) => { + detail.addEventListener("toggle", () => { + if (detail.open) setTargetDetail(detail); + }); +}); + +function setTargetDetail(targetDetail) { + closable.forEach((detail) => { + if (detail !== targetDetail) { + detail.open = false; + } + }); +} + +document.addEventListener("click", function (event) { + const isClickInsideDetail = [...closable].some((detail) => + detail.contains(event.target) + ); + + if (!isClickInsideDetail) { + closable.forEach((detail) => { + detail.open = false; + }); + } +}); + +const expandSidebar = document.getElementById("expand-sidebar"); +const mainContent = document.getElementById("main-content"); + +mainContent.addEventListener("click", () => { + if (expandSidebar.checked) expandSidebar.checked = false; +}); diff --git a/public/comments.js b/public/comments.js new file mode 100644 index 0000000..d298c01 --- /dev/null +++ b/public/comments.js @@ -0,0 +1,420 @@ +// Based on https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/ +// Attachment, card, and spoiler code is from https://github.com/cassidyjames/cassidyjames.github.io/blob/99782788a7e3ba3cc52d6803010873abd1b02b9e/_includes/comments.html#L251-L296 + +let lazyAsyncImage = document.getElementById("lazy-async-image").textContent; +let relAttributes = document.getElementById("rel-attributes").textContent; +let dateLocale = document.getElementById("date-locale").textContent; +let host = document.getElementById("host").textContent; +let user = document.getElementById("user").textContent; +let id = document.getElementById("id").textContent; + +let articleAuthorText = document.getElementById("article-author-text").textContent; +let loadingText = document.getElementById("loading-text").textContent; +let noCommentsText = document.getElementById("no-comments-text").textContent; +let reloadText = document.getElementById("reload-text").textContent; +let sensitiveText = document.getElementById("sensitive-text").textContent; + +document.getElementById("load-comments").addEventListener("click", loadComments); + +function escapeHtml(unsafe) { + return unsafe + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +function emojify(input, emojis) { + let output = input; + + emojis.forEach((emoji) => { + let picture = document.createElement("picture"); + + let source = document.createElement("source"); + source.setAttribute("srcset", escapeHtml(emoji.url)); + source.setAttribute("media", "(prefers-reduced-motion: no-preference)"); + + let img = document.createElement("img"); + img.className = "emoji"; + img.setAttribute("src", escapeHtml(emoji.static_url)); + img.setAttribute("title", `:${emoji.shortcode}:`); + img.setAttribute("width", "24"); + img.setAttribute("height", "24"); + if (lazyAsyncImage == "true") { + img.setAttribute("decoding", "async"); + img.setAttribute("loading", "lazy"); + } + + picture.appendChild(source); + picture.appendChild(img); + + output = output.replace(`:${emoji.shortcode}:`, picture.outerHTML); + }); + + return output; +} + +function loadComments() { + let commentsWrapper = document.getElementById("comments-wrapper"); + commentsWrapper.innerHTML = ""; + + let loadCommentsButton = document.getElementById("load-comments"); + loadCommentsButton.innerHTML = loadingText; + loadCommentsButton.disabled = true; + + fetch(`https://${host}/api/v1/statuses/${id}/context`) + .then(function (response) { + return response.json(); + }) + .then(function (data) { + let descendants = data["descendants"]; + if ( + descendants && + Array.isArray(descendants) && + descendants.length > 0 + ) { + commentsWrapper.innerHTML = ""; + + descendants.forEach(function (status) { + console.log(descendants); + if (status.account.display_name.length > 0) { + status.account.display_name = escapeHtml( + status.account.display_name + ); + status.account.display_name = emojify( + status.account.display_name, + status.account.emojis + ); + } else { + status.account.display_name = status.account.username; + } + + let instance = ""; + if (status.account.acct.includes("@")) { + instance = status.account.acct.split("@")[1]; + } else { + instance = host; + } + + const isReply = status.in_reply_to_id !== id; + + let op = false; + if (status.account.acct == user) { + op = true; + } + + status.content = emojify(status.content, status.emojis); + + let comment = document.createElement("article"); + comment.id = `comment-${status.id}`; + comment.className = isReply ? "comment comment-reply" : "comment"; + comment.setAttribute("itemprop", "comment"); + comment.setAttribute("itemtype", "http://schema.org/Comment"); + + let avatarSource = document.createElement("source"); + avatarSource.setAttribute( + "srcset", + escapeHtml(status.account.avatar) + ); + avatarSource.setAttribute( + "media", + "(prefers-reduced-motion: no-preference)" + ); + + let avatarImg = document.createElement("img"); + avatarImg.className = "avatar"; + avatarImg.setAttribute( + "src", + escapeHtml(status.account.avatar_static) + ); + avatarImg.setAttribute( + "alt", + `@${status.account.username}@${instance} avatar` + ); + if (lazyAsyncImage == "true") { + avatarImg.setAttribute("decoding", "async"); + avatarImg.setAttribute("loading", "lazy"); + } + + let avatarPicture = document.createElement("picture"); + avatarPicture.appendChild(avatarSource); + avatarPicture.appendChild(avatarImg); + + let avatar = document.createElement("a"); + avatar.className = "avatar-link"; + avatar.setAttribute("href", status.account.url); + avatar.setAttribute("rel", relAttributes); + avatar.appendChild(avatarPicture); + comment.appendChild(avatar); + + let display = document.createElement("a"); + display.className = "display"; + display.setAttribute("href", status.account.url); + display.setAttribute("rel", relAttributes); + display.setAttribute("itemprop", "author"); + display.setAttribute("itemtype", "http://schema.org/Person"); + display.innerHTML = status.account.display_name; + + let instanceBadge = document.createElement("span"); + instanceBadge.className = "instance"; + instanceBadge.textContent = `@${status.account.username}@${instance}`; + + let permalink = document.createElement("a"); + permalink.setAttribute("href", status.url); + permalink.setAttribute("itemprop", "url"); + permalink.setAttribute("rel", relAttributes); + permalink.textContent = new Date( + status.created_at + ).toLocaleString(dateLocale, { + dateStyle: "long", + timeStyle: "short", + }); + + let timestamp = document.createElement("time"); + timestamp.setAttribute("datetime", status.created_at); + timestamp.classList.add("timestamp"); + timestamp.appendChild(permalink); + permalink.classList.add("external"); + + let header = document.createElement("header"); + header.appendChild(display); + header.appendChild(instanceBadge); + header.appendChild(timestamp); + comment.appendChild(header); + + let main = document.createElement("main"); + main.setAttribute("itemprop", "text"); + + if (status.sensitive == true || status.spoiler_text != "") { + let summary = document.createElement("summary"); + if (status.spoiler_text == "") { + status.spoiler_text == sensitiveText; + } + summary.innerHTML = status.spoiler_text; + + let spoiler = document.createElement("details"); + spoiler.appendChild(summary); + spoiler.innerHTML += status.content; + + main.appendChild(spoiler); + } else { + main.innerHTML = status.content; + } + comment.appendChild(main); + + let attachments = status.media_attachments; + let SUPPORTED_MEDIA = ["image", "video", "gifv", "audio"]; + let media = document.createElement("div"); + media.className = "attachments"; + if ( + attachments && + Array.isArray(attachments) && + attachments.length > 0 + ) { + attachments.forEach((attachment) => { + if (SUPPORTED_MEDIA.includes(attachment.type)) { + + let mediaElement; + switch (attachment.type) { + case "image": + mediaElement = document.createElement("img"); + mediaElement.setAttribute("src", attachment.preview_url); + + if (attachment.description != null) { + mediaElement.setAttribute("title", attachment.description); + } + + if (lazyAsyncImage == "true") { + mediaElement.setAttribute("decoding", "async"); + mediaElement.setAttribute("loading", "lazy"); + } + + if (status.sensitive == true) { + mediaElement.classList.add("spoiler"); + } + + media.appendChild(mediaElement); + break; + + case "video": + mediaElement = document.createElement("video"); + mediaElement.setAttribute("src", attachment.url); + mediaElement.setAttribute("controls", ""); + + if (attachment.description != null) { + mediaElement.setAttribute("title", attachment.description); + } + + if (status.sensitive == true) { + mediaElement.classList.add("spoiler"); + } + + media.appendChild(mediaElement); + break; + + case "gifv": + mediaElement = document.createElement("video"); + mediaElement.setAttribute("src", attachment.url); + mediaElement.setAttribute("autoplay", ""); + mediaElement.setAttribute("playsinline", ""); + mediaElement.setAttribute("loop", ""); + + if (attachment.description != null) { + mediaElement.setAttribute("title", attachment.description); + } + + if (status.sensitive == true) { + mediaElement.classList.add("spoiler"); + } + + media.appendChild(mediaElement); + break; + + case "audio": + mediaElement = document.createElement("audio"); + mediaElement.setAttribute("src", attachment.url); + mediaElement.setAttribute("controls", ""); + + if (attachment.description != null) { + mediaElement.setAttribute("title", attachment.description); + } + + media.appendChild(mediaElement); + break; + } + + let mediaLink = document.createElement("a"); + mediaLink.setAttribute("href", attachment.url); + mediaLink.setAttribute("rel", relAttributes); + mediaLink.appendChild(mediaElement); + + media.appendChild(mediaLink); + } + }); + + comment.appendChild(media); + } + + let interactions = document.createElement("footer"); + + let boosts = document.createElement("a"); + boosts.className = "boosts"; + boosts.setAttribute("href", `${status.url}/reblogs`); + + let boostsIcon = document.createElement("i"); + boostsIcon.className = "icon"; + boosts.appendChild(boostsIcon); + boosts.insertAdjacentHTML('beforeend', ` ${status.reblogs_count}`); + interactions.appendChild(boosts); + + let faves = document.createElement("a"); + faves.className = "faves"; + faves.setAttribute("href", `${status.url}/favourites`); + + let favesIcon = document.createElement("i"); + favesIcon.className = "icon"; + faves.appendChild(favesIcon); + faves.insertAdjacentHTML('beforeend', ` ${status.favourites_count}`); + interactions.appendChild(faves); + + if ( + status.reactions && + Array.isArray(status.reactions) && + status.reactions.length > 0 + ) { + let reactions = document.createElement("div"); + reactions.classList.add("reactions", "overshoot-row"); + + status.reactions.forEach(reaction => { + let reactionElement = document.createElement("span"); + reactionElement.className = "reaction"; + + if (reaction.url) { + // Custom emoji + let img = document.createElement("img"); + img.className = "emoji"; + img.setAttribute("src", escapeHtml(reaction.url)); + img.setAttribute("title", `${reaction.name}`); + img.setAttribute("width", "24"); + img.setAttribute("height", "24"); + reactionElement.appendChild(img); + } else { + // Unicode emoji + let emoji = document.createElement("span"); + emoji.textContent = reaction.name; + reactionElement.appendChild(emoji); + } + + // Append the count + let count = document.createElement("span"); + count.textContent = reaction.count; + reactionElement.appendChild(count); + + reactions.appendChild(reactionElement); + }); + + interactions.appendChild(reactions); + } + + comment.appendChild(interactions); + + if (status.card != null) { + let cardFigure = document.createElement("figure"); + + if (status.card.image != null) { + let cardImg = document.createElement("img"); + cardImg.setAttribute("src", status.card.image); + cardImg.classList.add("no-hover"); + cardFigure.appendChild(cardImg); + } + + let cardCaption = document.createElement("figcaption"); + + let cardTitle = document.createElement("strong"); + cardTitle.innerHTML = status.card.title; + cardCaption.appendChild(cardTitle); + + if (status.card.description != null && status.card.description.length > 0) { + let cardDescription = document.createElement("p"); + cardDescription.innerHTML = status.card.description; + cardCaption.appendChild(cardDescription); + } + + cardFigure.appendChild(cardCaption); + + let card = document.createElement("a"); + card.className = "card"; + card.setAttribute("href", status.card.url); + card.setAttribute("rel", relAttributes); + card.appendChild(cardFigure); + + comment.appendChild(card); + } + + if (op === true) { + comment.classList.add("op"); + instanceBadge.classList.add("op"); + instanceBadge.setAttribute("title", articleAuthorText); + } + + commentsWrapper.appendChild(comment); + }); + } + + else { + var statusText = document.createElement("p"); + statusText.innerHTML = noCommentsText; + statusText.setAttribute("id", "comments-status"); + commentsWrapper.appendChild(statusText); + } + + loadCommentsButton.innerHTML = reloadText; + }) + .catch(function (error) { + console.error('Error loading comments:', error); + }) + .finally(function () { + loadCommentsButton.disabled = false; + }); +} diff --git a/public/copy-button.js b/public/copy-button.js new file mode 100644 index 0000000..25d569e --- /dev/null +++ b/public/copy-button.js @@ -0,0 +1,66 @@ +// Based on https://www.roboleary.net/2022/01/13/copy-code-to-clipboard-blog.html +document.addEventListener("DOMContentLoaded", function () { + let blocks = document.querySelectorAll("pre[class^='language-']"); + + blocks.forEach((block) => { + if (navigator.clipboard) { + // Code block header title + let title = document.createElement("span"); + let lang = block.getAttribute("data-lang"); + title.innerHTML = lang; + + // Copy button icon + let iconCopy = document.createElement("i"); + iconCopy.className = "icon copy"; + + let iconCheck = document.createElement("i"); + iconCheck.className = "icon check"; + + // Copy button + let button = document.createElement("button"); + let copyCodeText = document.getElementById("copy-code-text").textContent; + button.setAttribute("title", copyCodeText); + button.appendChild(iconCopy); + button.appendChild(iconCheck); + + // Code block header + let header = document.createElement("div"); + header.classList.add("header"); + + if (block.classList.contains("z-code")) { + header.classList.add("z-code"); + } + + header.appendChild(title); + header.appendChild(button); + + // Container that holds header and the code block itself + let container = document.createElement("div"); + container.classList.add("pre-container"); + container.appendChild(header); + + // Move code block into the container + block.parentNode.insertBefore(container, block); + container.appendChild(block); + + button.addEventListener("click", async () => { + await copyCode(block, header, button); + }); + } + }); + + async function copyCode(block, header, button) { + let code = block.querySelector("code"); + let text = code.innerText; + + await navigator.clipboard.writeText(text); + + header.classList.add("active"); + button.setAttribute("disabled", true); + + header.addEventListener("animationend", () => { + header.classList.remove("active"); + button.removeAttribute("disabled"); + }, { once: true }); + } +}); diff --git a/public/elasticlunr.min.js b/public/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/public/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + + + + + + + + + + + + + + + + Snug Nook Minecraft Server + + + + + + + + + + + + + + + + + Skip to Main Content + + +
+ +

Snug Nook Minecraft Server

Thanks to kevadesu’s initiative, we have an official Minecraft server for Snug Nook members. They provided the hosting, configuration, and everything else, while I only provided the subdomain, mc.daudix.one.

+

Screenshot of Snug Nook Minecraft Server in Minecraft server list. It’s description is “The Snug Nook® Experience - Now in Minecraft!”

+ +

Version

+

Currently we’re running Minecraft v1.21.1.

+

Access

+

Access to this server is limited to Snug Nook members only. If you would like to play on this server, join Snug Nook.

+

To join:

+
    +
  • In Minecraft, connect to mc.daudix.one
  • +
  • In the Snug Nook Discord server, run the command /register <nickname> in any channel
  • +
  • Check your DMs for “RSCC AuthAgents” and click accept.
  • +
+

Mods/Resource Packs

+

To improve and make the experience more fun, our server uses a few Fabric mods:

+ +

You don’t need to install any of these to play. However, for the full experience, you can install the following mods:

+ +

And the Sparkles resource pack.

+

Rules

+

All Snug Nook rules apply to the in-game chat. Consequences for breaking the rules in the in-game chat are the same as for breaking the rules in any of Snug Nook’s chats.

+

In addition to the above, griefing, turning the server into 2b2t, and overall ruining the fun for everyone, will result in action.

+ + +
+
+
+
+
+

Powered by Zola and Ametrine +

+
+
+ +
+
+ +
+ +
+
+
+
+
+ + + + + + + diff --git a/public/processed_images/banner.1a2809bc9ba6cd2e.jpg b/public/processed_images/banner.1a2809bc9ba6cd2e.jpg new file mode 100644 index 0000000..c33103a Binary files /dev/null and b/public/processed_images/banner.1a2809bc9ba6cd2e.jpg differ diff --git a/public/processed_images/banner.2c644f2a6a177fb2.webp b/public/processed_images/banner.2c644f2a6a177fb2.webp new file mode 100644 index 0000000..7f8d36e Binary files /dev/null and b/public/processed_images/banner.2c644f2a6a177fb2.webp differ diff --git a/public/processed_images/banner.360bc891ae571e0f.webp b/public/processed_images/banner.360bc891ae571e0f.webp new file mode 100644 index 0000000..3757249 Binary files /dev/null and b/public/processed_images/banner.360bc891ae571e0f.webp differ diff --git a/public/processed_images/banner.4137a9d43817ad5a.webp b/public/processed_images/banner.4137a9d43817ad5a.webp new file mode 100644 index 0000000..1e858d4 Binary files /dev/null and b/public/processed_images/banner.4137a9d43817ad5a.webp differ diff --git a/public/processed_images/banner.52f395b2627cf513.webp b/public/processed_images/banner.52f395b2627cf513.webp new file mode 100644 index 0000000..d7e8b5f Binary files /dev/null and b/public/processed_images/banner.52f395b2627cf513.webp differ diff --git a/public/processed_images/banner.dc8df74740b0f171.jpg b/public/processed_images/banner.dc8df74740b0f171.jpg new file mode 100644 index 0000000..0fa0a85 Binary files /dev/null and b/public/processed_images/banner.dc8df74740b0f171.jpg differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..e63ccbf --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://mc.daudix.one/sitemap.xml diff --git a/public/search.js b/public/search.js new file mode 100644 index 0000000..e2398ad --- /dev/null +++ b/public/search.js @@ -0,0 +1,236 @@ +// Based on https://github.com/cydave/zola-theme-papermod/blob/fab7cd04833f0c78264b433a4fb1f4b999ef0399/static/js/search.js + +// Debounce function definition +function debounce(func, wait, immediate) { + var timeout; + return function () { + var context = this, args = arguments; + var later = function () { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; +} + +// Taken from mdbook +// The strategy is as follows: +// First, assign a value to each word in the document: +// Words that correspond to search terms (stemmer aware): 40 +// Normal words: 2 +// First word in a sentence: 8 +// Then use a sliding window with a constant number of words and count the +// sum of the values of the words within the window. Then use the window that got the +// maximum sum. If there are multiple maximas, then get the last one. +// Enclose the terms in . +function makeTeaser(body, terms) { + var TERM_WEIGHT = 40; + var NORMAL_WORD_WEIGHT = 2; + var FIRST_WORD_WEIGHT = 8; + var TEASER_MAX_WORDS = 30; + + var stemmedTerms = terms.map(function (w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var termFound = false; + var index = 0; + var weighted = []; // contains elements of ["word", weight, index_in_document] + + // split in sentences, then words + var sentences = body.toLowerCase().split(". "); + + for (var i in sentences) { + var words = sentences[i].split(" "); + var value = FIRST_WORD_WEIGHT; + + for (var j in words) { + var word = words[j]; + + if (word.length > 0) { + for (var k in stemmedTerms) { + if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { + value = TERM_WEIGHT; + termFound = true; + } + } + weighted.push([word, value, index]); + value = NORMAL_WORD_WEIGHT; + } + + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + var windowWeights = []; + var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); + // We add a window with all the weights first + var curSum = 0; + for (var i = 0; i < windowSize; i++) { + curSum += weighted[i][1]; + } + windowWeights.push(curSum); + + for (var i = 0; i < weighted.length - windowSize; i++) { + curSum -= weighted[i][1]; + curSum += weighted[i + windowSize][1]; + windowWeights.push(curSum); + } + + // If we didn't find the term, just pick the first window + var maxSumIndex = 0; + if (termFound) { + var maxFound = 0; + // backwards + for (var i = windowWeights.length - 1; i >= 0; i--) { + if (windowWeights[i] > maxFound) { + maxFound = windowWeights[i]; + maxSumIndex = i; + } + } + } + + var teaser = []; + var startIndex = weighted[maxSumIndex][2]; + for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { + var word = weighted[i]; + if (startIndex < word[2]) { + // missing text from index to start of `word` + teaser.push(body.substring(startIndex, word[2])); + startIndex = word[2]; + } + + // add around search terms + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + startIndex = word[2] + word[0].length; + teaser.push(body.substring(word[2], startIndex)); + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + } + teaser.push("…"); + return teaser.join(""); +} + +function formatSearchResultItem(item, terms) { + // Adjust this to match your desired result item structure + return '
' + + `${item.doc.title}` + + `${makeTeaser(item.doc.body, terms)}` + + '
'; +} + +function initSearch() { + var searchModal = document.getElementById("search-modal"); // Full-screen modal + var searchModalContent = document.getElementById("search-modal-content"); // Actual modal box + var searchInput = document.getElementById("search-input"); // Search input + var searchResults = document.getElementById("search-results"); // Search results + var searchButton = document.getElementById("search"); // Search button + var MAX_ITEMS = 10; + + var options = { + bool: "AND", + fields: { + title: { boost: 2 }, + body: { boost: 1 }, + } + }; + var currentTerm = ""; + var index; + + var initIndex = async function () { + if (index === undefined) { + if (typeof window.searchIndex !== "undefined") { + index = elasticlunr.Index.load(window.searchIndex); + } else { + let response = await fetch(`/search_index.${document.documentElement.lang}.json`); + index = elasticlunr.Index.load(await response.json()); + } + } + return index; + }; + + // Open search modal when clicking the search button + if (searchButton) { + searchButton.addEventListener("click", function () { + searchModal.classList.add("active"); + searchModal.addEventListener("transitionend", function handler() { + searchInput.focus(); + searchModal.removeEventListener("transitionend", handler); + }, { once: true }); + }); + } + + // Open search modal on "/" key press + window.addEventListener("keydown", (event) => { + if (event.key === "/" && document.activeElement.tagName !== "INPUT" && document.activeElement.tagName !== "TEXTAREA") { + event.preventDefault(); + searchModal.classList.add("active"); + searchModal.addEventListener("transitionend", function handler() { + searchInput.focus(); + searchModal.removeEventListener("transitionend", handler); + }, { once: true }); + } + }); + + // Close search modal on Escape key + window.addEventListener("keydown", (event) => { + if (event.key === "Escape") { + searchModal.classList.remove("active"); + } + }); + + // Close search modal when clicking outside search-modal-content + searchModal.addEventListener("click", function (e) { + if (!searchModalContent.contains(e.target)) { + searchModal.classList.remove("active"); + } + }); + + // Prevent clicks inside modal content from closing it + searchModalContent.addEventListener("click", function (e) { + e.stopPropagation(); // Stops event from reaching searchModal click handler + }); + + // Search input event + searchInput.addEventListener("keyup", debounce(async function () { + var term = searchInput.value.trim(); + if (term === currentTerm) return; + + searchResults.style.display = term === "" ? "none" : "flex"; + searchResults.innerHTML = ""; // Clear previous results + currentTerm = term; + if (term === "") return; + + var results = (await initIndex()).search(term, options); + if (results.length === 0) { + searchResults.style.display = "none"; + return; + } + + // Insert formatted search result items + for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) { + searchResults.innerHTML += formatSearchResultItem(results[i], term.split(" ")); + } + }, 150)); +} + +if (document.readyState === "complete" || + (document.readyState !== "loading" && !document.documentElement.doScroll) +) { + initSearch(); +} else { + document.addEventListener("DOMContentLoaded", initSearch); +} diff --git a/public/search_index.en.js b/public/search_index.en.js new file mode 100644 index 0000000..538ffe1 --- /dev/null +++ b/public/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"2":{"docs":{},"df":0,"b":{"docs":{},"df":0,"2":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://mc.daudix.one/":{"tf":2.0}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"’":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"’":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":2.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":2.449489742783178}},"df":1,"’":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"y":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{"https://mc.daudix.one/":{"tf":2.0}},"df":1}},"n":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":2.6457513110645907}},"df":1}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://mc.daudix.one/":{"tf":2.6457513110645907}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://mc.daudix.one/":{"tf":1.4142135623730951}},"df":1}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"’":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"’":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}},"title":{"root":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://mc.daudix.one/":{"tf":1.0}},"df":1}}}}}}},"documentStore":{"save":true,"docs":{"https://mc.daudix.one/":{"body":"Thanks to kevadesu’s initiative, we have an official Minecraft server for Snug Nook members. They provided the hosting, configuration, and everything else, while I only provided the subdomain, mc.daudix.one.\n\n\nVersion\nCurrently we’re running Minecraft v1.21.1.\nAccess\nAccess to this server is limited to Snug Nook members only. If you would like to play on this server, join Snug Nook.\nTo join:\n\nIn Minecraft, connect to mc.daudix.one\nIn the Snug Nook Discord server, run the command /register <nickname> in any channel\nCheck your DMs for “RSCC AuthAgents” and click accept.\n\nMods/Resource Packs\nTo improve and make the experience more fun, our server uses a few Fabric mods:\n\nConcurrent Chunk Management Engine\nDistant Horizons\nIncendium\nNo Chat Reports\nNoisium\nNullscape\nPlasmo Voice\nTerralith\n\nYou don’t need to install any of these to play. However, for the full experience, you can install the following mods:\n\nPlasmo Voice\nXaero’s Minimap\n\nAnd the Sparkles resource pack.\nRules\nAll Snug Nook rules apply to the in-game chat. Consequences for breaking the rules in the in-game chat are the same as for breaking the rules in any of Snug Nook’s chats.\nIn addition to the above, griefing, turning the server into 2b2t, and overall ruining the fun for everyone, will result in action.\n","id":"https://mc.daudix.one/","title":"Snug Nook Minecraft Server"}},"docInfo":{"https://mc.daudix.one/":{"body":125,"title":4}},"length":1},"lang":"English"} \ No newline at end of file diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..c9d5026 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,6 @@ + + + + https://mc.daudix.one/ + + diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..450726a --- /dev/null +++ b/public/style.css @@ -0,0 +1,5 @@ +/*! +* Ametrine v0.1.0-alpha (https://ametrine.daudix.one) +* Copyright 2025 David "Daudix" Lapshin +* Licensed under MIT (https://codeberg.org/daudix/ametrine/raw/branch/main/LICENSE.txt) +*/:root{--accent-color: hsl(var(--accent-light-h) var(--accent-light-s) var(--accent-light-l));--accent-h: var(--accent-light-h);--accent-s: var(--accent-light-s);--accent-l: var(--accent-light-l);--bg-color: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.8));--fg-muted-1: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - var(--accent-l) * 0.85) / 0.5);--fg-muted-2: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - var(--accent-l) * 0.85) / 0.6);--glass-bg-1: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.7) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.9) / var(--dim-opacity));--glass-bg-2: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.8) / var(--dim-opacity));--crt-bg: radial-gradient(hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.9)), hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.75)) 80%, hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.65)));--text-decoration-color: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--disabled-opacity));--bg-overlay: linear-gradient(rgb(255 255 255 / var(--dim-opacity)), rgb(255 255 255 / var(--dim-opacity)));--fg-color: #29242a;--fg-contrast: #fcfcfa;--red-fg: hsl(342.0779 72% 58%);--red-h: 342.0779;--red-s: 72%;--red-l: 58%;--orange-fg: hsl(15.771428 74% 54%);--orange-h: 15.771428;--orange-s: 74%;--orange-l: 54%;--yellow-fg: hsl(34.639175 91% 42%);--yellow-h: 34.639175;--yellow-s: 91%;--yellow-l: 42%;--green-fg: hsl(153.7815 61% 38%);--green-h: 153.7815;--green-s: 61%;--green-l: 38%;--blue-fg: hsl(192 71% 38%);--blue-h: 192;--blue-s: 71%;--blue-l: 38%;--purple-fg: hsl(254.11766 44% 55%);--purple-h: 254.11766;--purple-s: 44%;--purple-l: 55%;--red-bg-1: hsl(var(--red-h) var(--red-s) var(--red-l) / var(--color-opacity-1));--red-bg-2: hsl(var(--red-h) var(--red-s) var(--red-l) / var(--color-opacity-2));--orange-bg-1: hsl(var(--orange-h) var(--orange-s) var(--orange-l) / var(--color-opacity-1));--orange-bg-2: hsl(var(--orange-h) var(--orange-s) var(--orange-l) / var(--color-opacity-2));--yellow-bg-1: hsl(var(--yellow-h) var(--yellow-s) var(--yellow-l) / var(--color-opacity-1));--yellow-bg-2: hsl(var(--yellow-h) var(--yellow-s) var(--yellow-l) / var(--color-opacity-2));--green-bg-1: hsl(var(--green-h) var(--green-s) var(--green-l) / var(--color-opacity-1));--green-bg-2: hsl(var(--green-h) var(--green-s) var(--green-l) / var(--color-opacity-2));--blue-bg-1: hsl(var(--blue-h) var(--blue-s) var(--blue-l) / var(--color-opacity-1));--blue-bg-2: hsl(var(--blue-h) var(--blue-s) var(--blue-l) / var(--color-opacity-2));--purple-bg-1: hsl(var(--purple-h) var(--purple-s) var(--purple-l) / var(--color-opacity-1));--purple-bg-2: hsl(var(--purple-h) var(--purple-s) var(--purple-l) / var(--color-opacity-2));--red-fg-muted-1: hsl(var(--red-h) var(--red-s) calc(var(--red-l) - var(--red-l) * 0.85) / 0.5);--red-fg-muted-2: hsl(var(--red-h) var(--red-s) calc(var(--red-l) - var(--red-l) * 0.85) / 0.6);--orange-fg-muted-1: hsl(var(--orange-h) var(--orange-s) calc(var(--orange-l) - var(--orange-l) * 0.85) / 0.5);--orange-fg-muted-2: hsl(var(--orange-h) var(--orange-s) calc(var(--orange-l) - var(--orange-l) * 0.85) / 0.6);--yellow-fg-muted-1: hsl(var(--yellow-h) var(--yellow-s) calc(var(--yellow-l) - var(--yellow-l) * 0.85) / 0.5);--yellow-fg-muted-2: hsl(var(--yellow-h) var(--yellow-s) calc(var(--yellow-l) - var(--yellow-l) * 0.85) / 0.6);--green-fg-muted-1: hsl(var(--green-h) var(--green-s) calc(var(--green-l) - var(--green-l) * 0.85) / 0.5);--green-fg-muted-2: hsl(var(--green-h) var(--green-s) calc(var(--green-l) - var(--green-l) * 0.85) / 0.6);--blue-fg-muted-1: hsl(var(--blue-h) var(--blue-s) calc(var(--blue-l) - var(--blue-l) * 0.85) / 0.5);--blue-fg-muted-2: hsl(var(--blue-h) var(--blue-s) calc(var(--blue-l) - var(--blue-l) * 0.85) / 0.6);--purple-fg-muted-1: hsl(var(--purple-h) var(--purple-s) calc(var(--purple-l) - var(--purple-l) * 0.85) / 0.5);--purple-fg-muted-2: hsl(var(--purple-h) var(--purple-s) calc(var(--purple-l) - var(--purple-l) * 0.85) / 0.6);--shade-color: rgb(0 0 0 / 0.07);--bg-muted-neutral-1: rgb(0 0 0 / var(--color-opacity-1));--bg-muted-neutral-2: rgb(0 0 0 / var(--color-opacity-2));--fg-muted-neutral-1: rgb(0 0 0 / 0.5);--fg-muted-neutral-2: rgb(0 0 0 / 0.6);--scanlines-opacity: 0.4;--edge-highlight: inset 0 -.0625rem 0 rgb(0 0 0 / var(--color-opacity-1));--bg-muted-1: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--color-opacity-1));--bg-muted-2: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--color-opacity-2));--l: clamp(0, (l / 0.623 - 1) * -infinity, 1);--a: calc(var(--l) + (var(--dim-opacity) * (1 - var(--l))));--contrast-color: oklch(from var(--accent-color) var(--l) 0 h / var(--a));--shadow-glow: 0 0 0 .0625rem var(--bg-muted-2), 0 .125rem .375rem .125rem var(--bg-muted-1), 0 .25rem 1.5rem .25rem var(--bg-muted-2);--text-shadow-glow: var(--bg-muted-2) 0 0 .25rem, var(--accent-color) 0 0 .75rem;--container-width: 45rem;--rounded-corner: 0.75rem;--rounded-corner-small: 0.5rem;--blur: blur(0.75rem) saturate(180%);--printed: contrast(2) brightness(0.75) grayscale(1);--drop-shadow: drop-shadow(0 0.08rem 0.1rem rgb(0 0 0 / 0.35)) drop-shadow(0 0.4rem 0.7rem rgb(0 0 0 / 0.18));--font-sans-serif: "Geist";--font-monospace: "Geist Mono";--font-system-ui: system-ui, sans-serif;--font-ui-monospace: ui-monospace, monospace;--font-emoji: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-size-xx-small: 0.625rem;--font-size-x-small: 0.75rem;--font-size-small: 0.875rem;--font-size-medium: 1rem;--font-size-large: 1.25rem;--font-size-x-large: 1.5rem;--font-size-xx-large: 2rem;--font-size-xxx-large: 3rem;--font-weight-thin: 100;--font-weight-extra-light: 200;--font-weight-light: 300;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semi-bold: 600;--font-weight-bold: 700;--font-weight-extra-bold: 800;--font-weight-black: 900;--color-opacity-1: 0.1;--color-opacity-2: 0.2;--dim-opacity: 0.8;--disabled-opacity: 0.6;--shadow: 0 0 0 .0625rem rgb(0 0 0 / 0.03), 0 .0625rem .1875rem .0625rem rgb(0 0 0 / 0.07), 0 .125rem .375rem .125rem rgb(0 0 0 / 0.03);--shadow-raised: 0 0 0 .0625rem rgb(0 0 0 / 0.06), 0 .125rem .375rem .125rem rgb(0 0 0 / 0.14), 0 .25rem .75rem .25rem rgb(0 0 0 / 0.06);--shadow-glass: 0 .75rem 1.5rem -1rem rgb(0 0 0 / 0.4);--hover: scale(1.1);--active: scale(0.9);--transition: 0.2s;--transition-longer: 0.4s;--transition-long: 0.8s;--transition-bezier: 0.35s cubic-bezier(0.17, 0.89, 0.32, 1.28);--transition-bezier-longer: 0.525s cubic-bezier(0.17, 0.89, 0.32, 1.28)}@media (prefers-color-scheme: dark){:root{--bg-overlay: linear-gradient(rgb(0 0 0 / var(--dim-opacity)), rgb(0 0 0 / var(--dim-opacity)));--fg-color: #fcfcfa;--fg-contrast: #29242a;--red-fg: hsl(345.18988 100% 69%);--red-h: 345.18988;--red-s: 100%;--red-l: 69%;--orange-fg: hsl(19.731544 96% 70%);--orange-h: 19.731544;--orange-s: 96%;--orange-l: 70%;--yellow-fg: hsl(44.70588 100% 70%);--yellow-h: 44.70588;--yellow-s: 100%;--yellow-l: 70%;--green-fg: hsl(90 59% 66%);--green-h: 90;--green-s: 59%;--green-l: 66%;--blue-fg: hsl(186.42857 71% 69%);--blue-h: 186.42857;--blue-s: 71%;--blue-l: 69%;--purple-fg: hsl(249.88234 77% 78%);--purple-h: 249.88234;--purple-s: 77%;--purple-l: 78%;--red-fg-muted-1: hsl(var(--red-h) var(--red-s) calc(var(--red-l) + (100% - var(--red-l)) * 0.85) / 0.5);--red-fg-muted-2: hsl(var(--red-h) var(--red-s) calc(var(--red-l) + (100% - var(--red-l)) * 0.85) / 0.6);--orange-fg-muted-1: hsl(var(--orange-h) var(--orange-s) calc(var(--orange-l) + (100% - var(--orange-l)) * 0.85) / 0.5);--orange-fg-muted-2: hsl(var(--orange-h) var(--orange-s) calc(var(--orange-l) + (100% - var(--orange-l)) * 0.85) / 0.6);--yellow-fg-muted-1: hsl(var(--yellow-h) var(--yellow-s) calc(var(--yellow-l) + (100% - var(--yellow-l)) * 0.85) / 0.5);--yellow-fg-muted-2: hsl(var(--yellow-h) var(--yellow-s) calc(var(--yellow-l) + (100% - var(--yellow-l)) * 0.85) / 0.6);--green-fg-muted-1: hsl(var(--green-h) var(--green-s) calc(var(--green-l) + (100% - var(--green-l)) * 0.85) / 0.5);--green-fg-muted-2: hsl(var(--green-h) var(--green-s) calc(var(--green-l) + (100% - var(--green-l)) * 0.85) / 0.6);--blue-fg-muted-1: hsl(var(--blue-h) var(--blue-s) calc(var(--blue-l) + (100% - var(--blue-l)) * 0.85) / 0.5);--blue-fg-muted-2: hsl(var(--blue-h) var(--blue-s) calc(var(--blue-l) + (100% - var(--blue-l)) * 0.85) / 0.6);--purple-fg-muted-1: hsl(var(--purple-h) var(--purple-s) calc(var(--purple-l) + (100% - var(--purple-l)) * 0.85) / 0.5);--purple-fg-muted-2: hsl(var(--purple-h) var(--purple-s) calc(var(--purple-l) + (100% - var(--purple-l)) * 0.85) / 0.6);--shade-color: rgb(0 0 0 / 0.25);--bg-muted-neutral-1: rgb(255 255 255 / var(--color-opacity-1));--bg-muted-neutral-2: rgb(255 255 255 / var(--color-opacity-2));--fg-muted-neutral-1: rgb(255 255 255 / 0.5);--fg-muted-neutral-2: rgb(255 255 255 / 0.6);--scanlines-opacity: 1;--edge-highlight: inset 0 .0625rem 0 rgb(255 255 255 / var(--color-opacity-1));--accent-color: hsl(var(--accent-dark-h) var(--accent-dark-s) var(--accent-dark-l));--accent-h: var(--accent-dark-h);--accent-s: var(--accent-dark-s);--accent-l: var(--accent-dark-l);--bg-color: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.7) calc(var(--accent-l) - var(--accent-l) * 0.9));--fg-muted-1: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.85) / 0.5);--fg-muted-2: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.85) / 0.6);--glass-bg-1: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) - var(--accent-l) * 0.8) / var(--dim-opacity));--glass-bg-2: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.7) / var(--dim-opacity));--crt-bg: radial-gradient(hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.7)), hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.9)) 80%, hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.95)));--text-decoration-color: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--disabled-opacity));color-scheme:dark}}@font-face{font-style:normal;font-weight:100 900;src:url("fonts/geist.woff2?v=1.5.0") format("woff2");font-family:"Geist";font-display:swap}@font-face{font-style:italic;font-weight:100 900;src:url("fonts/geist-italic.woff2?v=1.5.0") format("woff2");font-family:"Geist";font-display:swap}@font-face{font-style:normal;font-weight:100 900;src:url("fonts/geist-mono.woff2?v=1.5.0") format("woff2");font-family:"Geist Mono";font-display:swap}@font-face{font-style:italic;font-weight:100 900;src:url("fonts/geist-mono-italic.woff2?v=1.5.0") format("woff2");font-family:"Geist Mono";font-display:swap}@keyframes slide-in-up{from{transform:translateY(-1rem);opacity:0}}@keyframes slide-in-left{from{transform:translateX(1rem);opacity:0}}@keyframes slide-in-right{from{transform:translateX(-1rem);opacity:0}}@keyframes slide-in-up-longer{from{transform:translateY(-2rem);opacity:0}to{transform:translateY(0rem);opacity:1}}@keyframes slide-in-down-longer{from{transform:translateY(2rem);opacity:0}to{transform:translateY(0rem);opacity:1}}@keyframes slide-in-left-longer{from{transform:translateX(-2rem);opacity:0}to{transform:translateY(0rem);opacity:1}}@keyframes slide-in-right-longer{from{transform:translateX(2rem);opacity:0}to{transform:translateX(0rem);opacity:1}}@keyframes slide-out-down-longer{from{transform:translateY(0rem);opacity:1}to{transform:translateY(-2rem);opacity:0}}@keyframes expand-up-left{from{transform:scale(.5) translate(-1rem, -1rem);opacity:0}}@keyframes expand-up-right{from{transform:scale(.5) translate(1rem, -1rem);opacity:0}}@keyframes expand-down-left{from{transform:scale(.5) translate(-1rem, 1rem);opacity:0}}@keyframes expand-down-right{from{transform:scale(.5) translate(1rem, 1rem);opacity:0}}:where(html){-webkit-text-size-adjust:100%;text-size-adjust:100%;line-height:1.15}:where(h1){margin-block-start:.67em;margin-block-end:.67em;font-size:2em}:where(dl,ol,ul) :where(dl,ol,ul){margin-block-start:0;margin-block-end:0}:where(hr){box-sizing:content-box;height:0;color:inherit}:where(abbr[title]){text-decoration:underline;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,pre,samp){font-size:1em;font-family:monospace,monospace}:where(small){font-size:80%}:where(table){border-color:currentColor;text-indent:0}:where(button,input,select){margin:0}:where(button){text-transform:none}:where(button,input:is([type=button i],[type=reset i],[type=submit i])){-webkit-appearance:button}:where(progress){vertical-align:baseline}:where(select){text-transform:none}:where(textarea){margin:0}:where(input[type=search i]){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{opacity:.54;color:inherit}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focus-inner{border-style:none;padding:0}:where(button,input:is([type=button i],[type=color i],[type=reset i],[type=submit i]))::-moz-focusring{outline:1px dotted ButtonText}:where(:-moz-ui-invalid){box-shadow:none}:where(dialog){position:absolute;right:0;left:0;margin:auto;border:solid;background-color:#fff;padding:1em;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;color:#000}:where(dialog:not([open])){display:none}:where(summary){display:list-item}blockquote.note{--accent-color: var(--blue-fg);--fg-muted-2: var(--blue-fg-muted-2);--text-decoration-color: hsl(var(--blue-h) var(--blue-s) var(--blue-l) / var(--disabled-opacity))}blockquote.tip{--accent-color: var(--green-fg);--fg-muted-2: var(--green-fg-muted-2);--text-decoration-color: hsl(var(--green-h) var(--green-s) var(--green-l) / var(--disabled-opacity))}blockquote.important{--accent-color: var(--purple-fg);--fg-muted-2: var(--purple-fg-muted-2);--text-decoration-color: hsl(var(--purple-h) var(--purple-s) var(--purple-l) / var(--disabled-opacity))}blockquote.warning{--accent-color: var(--yellow-fg);--fg-muted-2: var(--yellow-fg-muted-2);--text-decoration-color: hsl(var(--yellow-h) var(--yellow-s) var(--yellow-l) / var(--disabled-opacity))}blockquote.caution{--accent-color: var(--red-fg);--fg-muted-2: var(--red-fg-muted-2);--text-decoration-color: hsl(var(--red-h) var(--red-s) var(--red-l) / var(--disabled-opacity))}blockquote.edit,blockquote.fact{--accent-color: var(--fg-muted-2);--text-decoration-color: var(--fg-muted-1)}blockquote .alert-title{margin-block-end:-.75rem;color:var(--accent-color);font-weight:var(--font-weight-semi-bold)}blockquote .alert-title .icon{vertical-align:text-top;margin-inline-end:.25rem;font-size:1.25rem}.article-details{display:flex;flex-wrap:wrap;gap:.25rem .5rem;margin-block:1rem}@media only screen and (max-width: 480px){.article-details{flex-direction:column}}.article-details .item{display:inline-flex;align-items:center;gap:.5rem;color:var(--fg-muted-2);font-size:var(--font-size-small)}.article-details .item a{color:inherit;font-weight:var(--font-weight-normal);font-size:var(--font-size-small);text-decoration-color:rgba(0,0,0,0)}.article-details .item a:hover{text-decoration-style:solid;text-decoration-color:var(--fg-muted-1)}.article-details .icon{box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:.375rem;color:var(--accent-color);font-size:1.25rem}.article-details .tags{display:flex;align-items:center;gap:.5rem;margin-block-start:.5rem;border-block-start:.0625rem solid var(--bg-muted-2);padding-block-start:.5rem;width:100%}.article-details .tags ul{display:flex;flex-wrap:wrap;gap:0 .5rem;margin:0;padding-inline-start:0;list-style:none}.article-details .tags ul li{display:flex;padding:0}.article-details .tags ul a::before{content:"#"}.article-list{display:flex;flex-direction:column;gap:1rem;margin-block-start:2rem}.article-list.categories article{position:relative}.article-list.categories article:hover .open-post+.icon{transform:translateY(-50%) rotate(-10deg) scale(1.5)}.article-list.categories article .open-post+.icon{position:absolute;transform:translateY(-50%);z-index:-1;transition:var(--transition-bezier);inset-block-start:50%;inset-inline-end:-3rem;color:var(--bg-muted-1);font-size:12rem}.article-list article{display:flex;position:relative;justify-content:space-between;gap:1rem;box-shadow:var(--edge-highlight),var(--shadow);border-radius:1.5rem;background-color:var(--bg-muted-1);padding:1rem;overflow:hidden}.article-list article.draft{opacity:var(--dim-opacity);filter:grayscale(1);transition:var(--transition)}.article-list article.draft:hover{opacity:1;filter:none}.article-list article.has-banner.has-accent-color{background-image:var(--bg-overlay),var(--blurnail);background-position:center;background-size:cover}.article-list article.has-banner .open-post{position:relative;background-color:rgba(0,0,0,0);width:6rem;overflow:hidden}.article-list article.has-banner .open-post:hover::before{backdrop-filter:blur(.25rem);background-color:var(--shade-color);-webkit-backdrop-filter:blur(.25rem)}.article-list article.has-banner .open-post:hover img{transform:var(--hover)}.article-list article.has-banner .open-post:hover .icon{transform:none;opacity:1}.article-list article.has-banner .open-post::before{position:absolute;z-index:1;transition:var(--transition);inset:0;border-radius:inherit;content:""}.article-list article.has-banner .open-post img{position:absolute;transition:var(--transition);margin:0;inset:0;width:100%;height:100%;object-fit:cover}.article-list article.has-banner .open-post .icon{transform:scale(.5) translateX(-1rem);opacity:0;z-index:1;transition:all var(--transition),transform var(--transition-bezier);color:#fff}.article-list article.has-accent-color{--accent-color: hsl(var(--accent-light-h) var(--accent-light-s) var(--accent-light-l));--accent-h: var(--accent-light-h);--accent-s: var(--accent-light-s);--accent-l: var(--accent-light-l);--bg-color: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.8));--fg-muted-1: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - var(--accent-l) * 0.85) / 0.5);--fg-muted-2: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) - var(--accent-l) * 0.85) / 0.6);--glass-bg-1: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.7) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.9) / var(--dim-opacity));--glass-bg-2: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.8) / var(--dim-opacity));--crt-bg: radial-gradient(hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.9)), hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.75)) 80%, hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.65)));--text-decoration-color: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--disabled-opacity));--bg-muted-1: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--color-opacity-1));--bg-muted-2: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--color-opacity-2));--l: clamp(0, (l / 0.623 - 1) * -infinity, 1);--a: calc(var(--l) + (var(--dim-opacity) * (1 - var(--l))));--contrast-color: oklch(from var(--accent-color) var(--l) 0 h / var(--a));--shadow-glow: 0 0 0 .0625rem var(--bg-muted-2), 0 .125rem .375rem .125rem var(--bg-muted-1), 0 .25rem 1.5rem .25rem var(--bg-muted-2);--text-shadow-glow: var(--bg-muted-2) 0 0 .25rem, var(--accent-color) 0 0 .75rem}@media (prefers-color-scheme: dark){.article-list article.has-accent-color{--accent-color: hsl(var(--accent-dark-h) var(--accent-dark-s) var(--accent-dark-l));--accent-h: var(--accent-dark-h);--accent-s: var(--accent-dark-s);--accent-l: var(--accent-dark-l);--bg-color: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.7) calc(var(--accent-l) - var(--accent-l) * 0.9));--fg-muted-1: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.85) / 0.5);--fg-muted-2: hsl(var(--accent-h) var(--accent-s) calc(var(--accent-l) + (100% - var(--accent-l)) * 0.85) / 0.6);--glass-bg-1: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.6) calc(var(--accent-l) - var(--accent-l) * 0.8) / var(--dim-opacity));--glass-bg-2: hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.7) / var(--dim-opacity));--crt-bg: radial-gradient(hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.7)), hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.9)) 80%, hsl(var(--accent-h) calc(var(--accent-s) - var(--accent-s) * 0.5) calc(var(--accent-l) - var(--accent-l) * 0.95)));--text-decoration-color: hsl(var(--accent-h) var(--accent-s) var(--accent-l) / var(--disabled-opacity))}}.article-list article>div{flex:1}.article-list article>div>a{text-decoration:none}.article-list article h3{margin:0;border-inline-start:.25rem solid;border-start-start-radius:.25rem;border-end-start-radius:.25rem;padding-inline-start:.5rem;color:var(--accent-color);font-weight:var(--font-weight-semi-bold);text-decoration:none}.article-list article h3:hover::after{opacity:1}.article-list article h3::after{opacity:0;transition:var(--transition);content:" →"}.article-list article .description p{margin-block-end:.75rem}.article-list article .open-post{display:flex;justify-content:center;align-items:center;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);width:3rem;text-decoration:none}.article-list article .open-post:hover{background-color:var(--bg-muted-2)}.article-list article .open-post:active{transform:var(--active)}.article-list article .open-post .icon{font-size:1.25rem}.article-list article .article-details{margin-block-end:0}.article-list article .article-details .tags{margin-block-end:-.25rem}@media only screen and (max-width: 720px){.article-list article{flex-direction:column-reverse}.article-list article.has-banner .open-post{display:flex;width:100%;height:9rem}.article-list article h3::after{opacity:1}.article-list article .open-post{display:none}}#paginator{display:flex;justify-content:center;align-items:center;gap:.25rem;margin-block-start:4rem}#paginator:has(a#paginator-previous:active) #paginator-counter{border-start-start-radius:1rem;border-end-start-radius:1rem}#paginator:has(a#paginator-next:active) #paginator-counter{border-start-end-radius:1rem;border-end-end-radius:1rem}#paginator-first,#paginator-previous,#paginator-next,#paginator-last{display:inline-block;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:1rem;background-color:var(--bg-muted-1);padding:.5rem;color:var(--accent-color);line-height:0;text-decoration:none}a#paginator-first:hover,a#paginator-previous:hover,a#paginator-next:hover,a#paginator-last:hover{background-color:var(--bg-muted-2)}a#paginator-first:active,a#paginator-previous:active,a#paginator-next:active,a#paginator-last:active{transform:var(--active);border-radius:1rem}span#paginator-first,span#paginator-previous,span#paginator-next,span#paginator-last{opacity:var(--disabled-opacity);cursor:not-allowed}#paginator-previous{border-start-end-radius:var(--rounded-corner-small);border-end-end-radius:var(--rounded-corner-small)}#paginator-next{border-start-start-radius:var(--rounded-corner-small);border-end-start-radius:var(--rounded-corner-small)}#paginator-counter{box-shadow:var(--edge-highlight),var(--shadow-glow);background-image:linear-gradient(to bottom right, var(--accent-color), var(--bg-muted-1));color:var(--contrast-color);text-shadow:var(--text-shadow-glow);display:inline-block;transition:var(--transition-bezier);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:.25rem .5rem;font-weight:var(--font-weight-semi-bold);font-variant-numeric:tabular-nums}#article-nav{display:flex;gap:.25rem}@media only screen and (max-width: 720px){#article-nav{flex-direction:column}}#article-nav .article-nav-item{flex:1;transition:all var(--transition),transform var(--transition-bezier);border-radius:var(--rounded-corner);padding:.75rem 1rem;min-width:0;text-decoration:none}#article-nav .article-nav-item:hover{box-shadow:var(--edge-highlight),var(--shadow);background-color:var(--bg-muted-1)}#article-nav .article-nav-item:hover .article-title{color:var(--accent-color)}#article-nav .article-nav-item:active{transform:var(--active)}#article-nav .article-nav-item.article-nav-prev .nav-arrow::before{content:"← "}#article-nav .article-nav-item.article-nav-next{text-align:end}#article-nav .article-nav-item.article-nav-next .nav-arrow::after{content:" →"}#article-nav .article-nav-item .nav-arrow{margin-block-end:.5rem;color:var(--fg-muted-2);font-weight:var(--font-weight-normal)}#article-nav .article-nav-item .article-title{display:block;transition:var(--transition);max-width:100%;overflow:hidden;color:var(--fg-muted-1);text-overflow:ellipsis;white-space:nowrap}.audio{appearance:none;transition:all var(--transition),transform var(--transition-bezier);cursor:pointer;box-shadow:var(--edge-highlight);border:none;border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:0 .375rem;color:var(--accent-color);font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-medium);line-height:inherit}.audio:hover{background-color:var(--bg-muted-2)}.audio:hover .icon{animation:speaker var(--transition-long) ease-out infinite}@keyframes speaker{from{--icon: var(--icon-speaker-none)}50%{--icon: var(--icon-speaker-low)}to{--icon: var(--icon-speaker-high)}}.audio:active{transform:var(--active)}.audio .icon{vertical-align:-.1875rem;margin-inline-start:.25rem}body.has-banner{background-image:var(--bg-overlay),var(--blurnail);background-position:center;background-size:cover;background-attachment:fixed}#banner{--mask: linear-gradient(black calc(100% - 2rem), transparent);-webkit-mask-image:var(--mask);display:flex;justify-content:center;mask-image:var(--mask);margin-block:-2rem;padding-block:4rem 2rem}#banner div{position:relative;margin:0 auto;aspect-ratio:2/1;width:calc(100% - 2rem);max-width:var(--container-width)}#banner img{position:absolute;margin:0;inset:0;border-radius:var(--rounded-corner) var(--rounded-corner) 0 0;aspect-ratio:2/1;width:100%;object-fit:cover}#banner img:nth-of-type(1){opacity:var(--dim-opacity);z-index:-1;filter:blur(1.5rem);animation:banner-glow-load calc(.525s + var(--transition-long));inset-block-start:1rem}@keyframes banner-glow-load{from, 52.5%{opacity:0}}#banner img:nth-of-type(2){transform-origin:bottom;animation:banner-load calc(.525s + var(--transition-longer))}@keyframes banner-load{from, 52.5%{transform:var(--active);opacity:0;filter:blur(.75rem)}}#banner+.container article>h1:first-of-type,#banner+.container>h1:first-of-type{margin-inline:-1rem;margin-block:0;border-radius:var(--rounded-corner) var(--rounded-corner) 0 0;padding:1rem;width:unset;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem);text-decoration:none}.buttons{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.25rem;margin-block-start:2rem}.buttons.centered{justify-content:center}.buttons.start{justify-content:flex-start}.buttons.end{justify-content:flex-end}.buttons.big{gap:.5rem}.buttons.big a,.buttons.big button{border-radius:9999px;padding:.625rem 1.25rem}.buttons a{text-decoration:none}.buttons button{appearance:none;cursor:pointer;border:none;line-height:inherit;font-family:inherit}.buttons button:disabled{cursor:not-allowed}.buttons button:disabled:hover{background-color:var(--bg-muted-1)}.buttons button:disabled:active{transform:none}.buttons a,.buttons button{display:inline-block;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:.5rem 1rem;color:var(--fg-muted-1);font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-small)}.buttons a:hover,.buttons button:hover{background-color:var(--bg-muted-2);color:var(--fg-muted-2)}.buttons a:active,.buttons button:active{transform:var(--active)}.buttons a.suggested,.buttons button.suggested{box-shadow:var(--edge-highlight),var(--shadow-glow);background-image:linear-gradient(to bottom right, var(--accent-color), var(--bg-muted-1));color:var(--contrast-color);text-shadow:var(--text-shadow-glow)}.buttons a.suggested:hover,.buttons button.suggested:hover{box-shadow:var(--edge-highlight);background-color:var(--accent-color)}.category{display:flex;align-items:baseline;gap:.5rem;transition:var(--transition)}.category .title{flex-shrink:0;transition:var(--transition);color:var(--fg-muted-1);font-weight:var(--font-weight-normal);font-size:var(--font-size-small);white-space:nowrap}.category .line{flex:1;transition:var(--transition);background-color:var(--bg-muted-2);height:.0625rem}pre,code,kbd,samp{font-family:var(--font-monospace),var(--font-ui-monospace)}code:not(pre code){border-radius:var(--rounded-corner-small);background-color:var(--red-bg-1);padding:.125rem .375rem;color:var(--red-fg);font-size:var(--font-size-small);box-shadow:var(--edge-highlight)}pre{margin:1rem 0;box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:.75rem 1rem;overflow-x:auto;scrollbar-width:thin;line-height:normal}pre.z-code mark{background-color:var(--bg-muted-neutral-1);color:inherit}pre table{box-shadow:none;border-radius:0;background-color:rgba(0,0,0,0);table-layout:auto;overflow:hidden}pre table tr:nth-child(even){background-color:rgba(0,0,0,0)}pre table tr th,pre table tr td{padding:0}pre table tr th{background-color:rgba(0,0,0,0);font-weight:var(--font-weight-normal)}pre table td:nth-of-type(1){-webkit-user-select:none;user-select:none;text-align:center}pre mark{display:block;box-shadow:none;border-radius:0;background-color:var(--bg-muted-1);padding:0;color:var(--fg-color)}pre[data-linenos]{padding:1rem 0}#comments #comments-wrapper .comment header .instance.op::before{mask-image:var(--icon);-webkit-mask-image:var(--icon);display:block;background-color:currentColor;width:1em;height:1em;content:""}#comments #qrcode{float:inline-end;cursor:help;box-sizing:content-box;margin-inline-start:1rem;margin-block-start:3rem;box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:#fff;padding:.75rem;width:7.25rem;height:7.25rem}#comments #qrcode svg{pointer-events:none}@media only screen and (max-width: 720px){#comments #qrcode{display:none}}#comments #load-comments:disabled{animation:loading-shimmer var(--transition-long) ease-in-out alternate infinite;transition:none;background-image:linear-gradient(to right, var(--bg-muted-1) 50%, var(--bg-muted-2) 75%, var(--bg-muted-1) 100%);background-size:200%;background-color:rgba(0,0,0,0)}#comments #load-comments:disabled:hover{background-color:rgba(0,0,0,0)}@keyframes loading-shimmer{to{background-position-x:-200%}}#comments #comments-wrapper{display:flex;flex-direction:column;gap:2rem;margin-block-start:2rem}#comments #comments-wrapper #comments-status{color:var(--fg-muted-1);font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-x-large);text-align:center}#comments #comments-wrapper .comment{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"avatar header " "...... post " "...... media " "...... card " "...... interactions";column-gap:1rem;justify-items:start;animation:slide-in-right var(--transition-bezier)}:root[dir*=rtl] #comments #comments-wrapper .comment{animation:slide-in-left var(--transition-bezier)}@media only screen and (max-width: 720px){#comments #comments-wrapper .comment{grid-template-areas:"avatar header " "post post " "media media " "card card " "interactions interactions";align-items:start}}#comments #comments-wrapper .comment.comment-reply{position:relative;border-inline-start:.25rem solid var(--bg-muted-2);border-start-start-radius:.25rem;border-end-start-radius:.25rem;padding-inline-start:1rem}#comments #comments-wrapper .comment.comment-reply:has(+.comment-reply){border-end-start-radius:0}#comments #comments-wrapper .comment.comment-reply+.comment-reply{margin-block-start:-2rem;border-start-start-radius:0;padding-block-start:2rem}#comments #comments-wrapper .comment .avatar-link{grid-area:avatar;width:4rem;height:4rem}@media only screen and (max-width: 480px){#comments #comments-wrapper .comment .avatar-link{width:3rem;height:3rem}}#comments #comments-wrapper .comment .avatar-link .avatar{transition:var(--transition-bezier);margin:0;background-size:cover;width:100%;height:100%}#comments #comments-wrapper .comment .avatar-link .avatar:hover{transform:rotate(10deg) var(--hover);border-radius:var(--rounded-corner)}#comments #comments-wrapper .comment .avatar-link .avatar:active{transform:var(--active)}#comments #comments-wrapper .comment .mention{display:inline-block;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:.0625rem .375rem;text-decoration:none}#comments #comments-wrapper .comment .mention:hover{background-color:var(--bg-muted-2)}#comments #comments-wrapper .comment .mention:active{transform:var(--active)}#comments #comments-wrapper .comment .invisible{display:none}#comments #comments-wrapper .comment .ellipsis::after{content:"…"}#comments #comments-wrapper .comment header{display:flex;grid-area:header;flex-direction:column;width:100%;min-width:0;color:var(--fg-muted-1);line-height:1}#comments #comments-wrapper .comment header .display,#comments #comments-wrapper .comment header .instance{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#comments #comments-wrapper .comment header .display{color:var(--fg-color);line-height:1.5rem;text-decoration:none}#comments #comments-wrapper .comment header .display .emoji{cursor:unset}#comments #comments-wrapper .comment header .display .emoji:hover{transform:none}#comments #comments-wrapper .comment header .instance{margin-block-start:.25rem;font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-x-small)}#comments #comments-wrapper .comment header .instance.op{cursor:help}#comments #comments-wrapper .comment header .instance.op::before{--icon: var(--icon-seal-check);display:inline-block;vertical-align:text-top;transition:var(--transition);margin-inline-end:.25rem;font-size:1rem}#comments #comments-wrapper .comment header .timestamp{margin-block-start:.25rem}#comments #comments-wrapper .comment header .timestamp a{color:inherit;font-size:var(--font-size-x-small);text-decoration-color:rgba(0,0,0,0)}#comments #comments-wrapper .comment header .timestamp a:hover{text-decoration-style:solid;text-decoration-color:inherit}#comments #comments-wrapper .comment header .timestamp a::after{vertical-align:top}#comments #comments-wrapper .comment details[open]{border-radius:var(--rounded-corner-small);background-image:linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0) .5rem, var(--bg-muted-1) .5rem, var(--bg-muted-1) calc(100% - .5rem), rgba(0,0,0,0) calc(100% - .5rem), rgba(0,0,0,0)),linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0) .5rem, var(--bg-color) .5rem, var(--bg-color) calc(100% - .5rem), rgba(0,0,0,0) calc(100% - .5rem), rgba(0,0,0,0)),repeating-linear-gradient(45deg, var(--contrast-color), var(--contrast-color) .25rem, var(--accent-color) .25rem, var(--accent-color) .5rem)}#comments #comments-wrapper .comment details[open] summary{border-radius:0;background-image:none}#comments #comments-wrapper .comment details summary{border-radius:var(--rounded-corner-small);background-image:linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0) .5rem, var(--bg-muted-1) .5rem, var(--bg-muted-1) calc(100% - .5rem), rgba(0,0,0,0) calc(100% - .5rem), rgba(0,0,0,0)),linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0) .5rem, var(--bg-color) .5rem, var(--bg-color) calc(100% - .5rem), rgba(0,0,0,0) calc(100% - .5rem), rgba(0,0,0,0)),repeating-linear-gradient(45deg, var(--contrast-color), var(--contrast-color) .25rem, var(--accent-color) .25rem, var(--accent-color) .5rem)}#comments #comments-wrapper .comment main{grid-area:post;margin-block-start:1rem;padding:0}#comments #comments-wrapper .comment main :first-child{margin-block-start:0}#comments #comments-wrapper .comment main :last-child{margin-block-end:0}#comments #comments-wrapper .comment .attachments{display:grid;grid-template-columns:repeat(auto-fit, minmax(16rem, 1fr));grid-area:media;gap:.5rem;margin-block-start:1rem}#comments #comments-wrapper .comment .attachments img,#comments #comments-wrapper .comment .attachments video{margin:0}#comments #comments-wrapper .comment .card{grid-area:card;transition:all var(--transition),transform var(--transition-bezier);margin-block-start:1rem;width:min(var(--container-width)/2,100%);font-weight:var(--font-weight-normal);text-decoration:none}#comments #comments-wrapper .comment .card:hover img{transform:var(--hover);box-shadow:var(--edge-highlight),var(--shadow-raised);border-radius:var(--rounded-corner-small)}#comments #comments-wrapper .comment .card:hover figcaption{border-radius:var(--rounded-corner);background-color:var(--bg-muted-2)}#comments #comments-wrapper .comment .card:active{transform:var(--active)}#comments #comments-wrapper .comment .card figure{display:flex;flex-direction:column;gap:.25rem;margin:0}#comments #comments-wrapper .comment .card figure img{margin:0;border-radius:var(--rounded-corner) var(--rounded-corner) var(--rounded-corner-small) var(--rounded-corner-small);aspect-ratio:16/9;object-fit:cover}#comments #comments-wrapper .comment .card figure img+figcaption{border-radius:var(--rounded-corner-small) var(--rounded-corner-small) var(--rounded-corner) var(--rounded-corner)}#comments #comments-wrapper .comment .card figure figcaption{display:flex;flex-direction:column;gap:.25rem;transition:var(--transition);box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:1rem;color:var(--fg-color);font-size:var(--font-size-medium);text-align:start}#comments #comments-wrapper .comment .card figure figcaption p{margin:0;color:var(--fg-muted-2);font-size:var(--font-size-small)}#comments #comments-wrapper .comment footer{display:flex;grid-area:interactions;align-items:center;gap:.25rem;margin-block-start:1rem;width:100%;min-width:0}@media only screen and (max-width: 480px){#comments #comments-wrapper .comment footer{flex-wrap:wrap}}#comments #comments-wrapper .comment footer .boosts,#comments #comments-wrapper .comment footer .faves,#comments #comments-wrapper .comment footer .reaction{padding:.375rem .75rem;font-variant-numeric:tabular-nums;white-space:nowrap}#comments #comments-wrapper .comment footer .boosts,#comments #comments-wrapper .comment footer .faves{transition:all var(--transition),transform var(--transition-bezier);border-radius:1.125rem;text-decoration:none}#comments #comments-wrapper .comment footer .boosts .icon,#comments #comments-wrapper .comment footer .faves .icon{vertical-align:-.125rem;transition:var(--transition-bezier);margin-inline-end:.25rem}#comments #comments-wrapper .comment footer .boosts:hover,#comments #comments-wrapper .comment footer .faves:hover{box-shadow:var(--edge-highlight);text-decoration:none}#comments #comments-wrapper .comment footer .boosts:active,#comments #comments-wrapper .comment footer .faves:active{transform:var(--active);border-radius:1.125rem}#comments #comments-wrapper .comment footer .boosts{border-start-end-radius:var(--rounded-corner-small);border-end-end-radius:var(--rounded-corner-small);padding-inline-end:.625rem;color:var(--purple-fg)}#comments #comments-wrapper .comment footer .boosts .icon{--icon: var(--icon-repeat)}#comments #comments-wrapper .comment footer .boosts:hover{background-color:var(--purple-bg-1)}#comments #comments-wrapper .comment footer .boosts:hover .icon{transform:rotate(180deg)}#comments #comments-wrapper .comment footer .faves{border-start-start-radius:var(--rounded-corner-small);border-end-start-radius:var(--rounded-corner-small);padding-inline-start:.625rem;color:var(--yellow-fg)}#comments #comments-wrapper .comment footer .faves .icon{--icon: var(--icon-star)}#comments #comments-wrapper .comment footer .faves:hover{background-color:var(--yellow-bg-1)}#comments #comments-wrapper .comment footer .faves:hover .icon{transform:rotate(72deg)}#comments #comments-wrapper .comment footer .reactions{display:flex;gap:.25rem;margin:-.5rem -1rem;padding:.5rem 1rem;min-width:0;overflow-x:auto;scrollbar-width:none;color:var(--accent-color);font-weight:var(--font-weight-semi-bold)}#comments #comments-wrapper .comment footer .reactions .reaction{display:flex;flex-shrink:0;align-items:center;gap:.25rem;cursor:zoom-in;border:.0625rem solid var(--bg-muted-2);border-radius:1.1875rem}#comments #comments-wrapper .comment footer .reactions .reaction:hover .emoji{transform:scale(2)}#comments #comments-wrapper .comment footer .reactions .reaction .emoji{cursor:unset}#comments #comments-wrapper .comment footer .reactions .reaction span{font-variant-numeric:tabular-nums}.container{margin:0 auto;width:calc(100% - 2rem);max-width:var(--container-width)}.container-fill{display:flex;flex-direction:column;justify-content:center;margin-block-start:-2rem;height:100vh}@supports (height: 100svh){.container-fill{height:100svh}}.crt{margin:1rem 0;box-shadow:var(--shadow-glow);border-radius:var(--rounded-corner);background-image:var(--crt-bg)}.crt pre{animation:flicker .25s alternate infinite;margin:0;box-shadow:none;background-color:rgba(0,0,0,0) !important;padding:1rem 1rem;color:var(--accent-color) !important;font-weight:var(--font-weight-medium);text-shadow:var(--text-shadow-glow)}@keyframes flicker{25%{opacity:.95}50%{opacity:.85}75%{opacity:1}to{opacity:.9}}.scanlines{position:relative;overflow:hidden}.scanlines::before{display:block;position:absolute;opacity:var(--scanlines-opacity);z-index:1;animation:scanlines .1s linear infinite;inset:0;background-image:repeating-linear-gradient(to bottom, rgba(0,0,0,.25), rgba(0,0,0,.25) .125rem, rgba(0,0,0,0) .125rem, rgba(0,0,0,0) .25rem);pointer-events:none;content:""}@keyframes scanlines{to{background-position-y:.25rem}}.scanlines::after{display:block;position:absolute;opacity:.05;animation:scanline 5s linear infinite;inset:0;background-image:linear-gradient(to bottom, rgba(0,0,0,0), var(--accent-color) 16rem);background-size:auto 16rem;background-repeat:no-repeat;background-position-y:-16rem;pointer-events:none;content:""}@keyframes scanline{to{background-position-y:calc(100% + 16rem)}}.emoji{display:inline-block;vertical-align:bottom;transition:var(--transition-bezier);cursor:zoom-in;margin:0;box-shadow:none;border-radius:0;background-color:rgba(0,0,0,0);width:1.5rem;height:1.5rem}.emoji:hover{transform:scale(2)}.emoji.big{width:3rem;height:3rem}a.external::after{mask-image:var(--icon);-webkit-mask-image:var(--icon);display:block;background-color:currentColor;width:1em;height:1em;content:""}a.external::after{--icon: var(--icon-arrow-square-out);display:inline-block;vertical-align:-.125rem;opacity:var(--dim-opacity);margin-inline-start:.125rem;font-size:max(1rem,1em)}.fancy-list ul{display:flex;flex-direction:column;gap:.25rem;margin:0;padding:0;list-style:none}.fancy-list ul li{box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:.5rem .75rem}#site-footer{grid-area:footer}#site-footer a.external::after{margin-inline-start:.25rem}#site-footer .link{display:inline-block;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:0 .375rem;text-decoration:none}#site-footer .link:hover{background-color:var(--bg-muted-2)}#site-footer .link:active{transform:var(--active)}#site-footer .container{display:flex;gap:1rem;border-block-start:.0625rem solid var(--bg-muted-1);padding-block:1rem}@media only screen and (max-width: 480px){#site-footer .container{flex-direction:column}#site-footer .container .socials{justify-content:center;margin-block:1rem}}#site-footer .container>div{flex:1}#site-footer .container>div:nth-of-type(1){display:flex;flex-direction:column;gap:1rem;color:var(--fg-muted-2);font-size:var(--font-size-small)}#site-footer .container>div:nth-of-type(1) p{margin:0}#site-footer .webring{display:flex;gap:.25rem}#site-footer .webring .icon{transition:var(--transition)}#site-footer .webring .random,#site-footer .webring .previous,#site-footer .webring .next{display:inline-flex;justify-content:center;align-items:center;border-radius:9999px;padding:.25rem;font-size:1rem}#site-footer .timestamp{color:var(--fg-muted-1);font-size:var(--font-size-xx-small);font-family:var(--font-monospace)}#site-footer .socials{display:flex;justify-content:flex-end;gap:.75rem;margin:0;padding-inline-start:0;list-style:none}#site-footer .socials li{padding-inline-start:0}#site-footer .socials a{display:flex;transition:all var(--transition),transform var(--transition-bezier);height:fit-content;color:var(--fg-muted-1)}#site-footer .socials a:hover{color:var(--fg-muted-2)}#site-footer .socials a:active{transform:var(--active)}#site-footer .socials svg{fill:currentColor;width:1.5rem;height:1.5rem}.footnotes-list p{margin-block-start:0;margin-block-end:0}*{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}:root{scroll-behavior:smooth;scrollbar-color:var(--accent-color) rgba(0,0,0,0);accent-color:var(--accent-color)}body{display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:auto 1fr auto;grid-template-areas:"nav header" "nav main " "nav footer";margin:0;background-color:var(--bg-color);min-height:100vh;overflow-x:hidden;color:var(--fg-color);line-height:1.5rem;font-family:var(--font-sans-serif),var(--font-system-ui),var(--font-emoji);text-wrap:pretty;overflow-wrap:break-word}@supports (min-height: 100dvh){body{min-height:100dvh}}@media only screen and (max-width: 720px){body{grid-template-columns:3.5rem 1fr auto}}#main-content{grid-area:main;transform-origin:50% 50vh;animation:fade-in-zoom var(--transition-bezier-longer);padding:2rem 0 4rem;min-width:0}@keyframes fade-in-zoom{from{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@supports (transform-origin: 50% 50dvh){#main-content{transform-origin:50% 50dvh}}:target~#main-content{animation:none}#down:target~#main-content{animation:slide-in-down-longer var(--transition-bezier-longer)}#up:target~#main-content{animation:slide-in-up-longer var(--transition-bezier-longer)}#left:target~#main-content{animation:slide-in-left-longer var(--transition-bezier-longer)}#right:target~#main-content{animation:slide-in-right-longer var(--transition-bezier-longer)}::selection{background-color:var(--accent-color);color:var(--contrast-color)}:target:not(#main-content){scroll-margin-block-start:15vh;font-weight:var(--font-weight-light);text-shadow:var(--text-shadow-glow)}:focus-visible{animation:focus-in var(--transition);outline:.125rem solid var(--accent-color);outline-offset:.125rem}@keyframes focus-in{from{outline:.5rem solid rgba(0,0,0,0);outline-offset:.25rem}}@media (prefers-reduced-motion){*,*::before,*::after{animation-duration:0s !important;transition-duration:0s !important}}.hidden{display:none;visibility:hidden}.icon-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(12rem, 1fr));gap:.5rem}.icon-grid:hover a:not(:hover){opacity:var(--disabled-opacity)}.icon-grid a{display:flex;justify-content:start;align-items:center;gap:1rem;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:1rem;color:var(--fg-muted-2);text-decoration:none}.icon-grid a:hover{transform:translateY(-.25rem);opacity:1;filter:none;box-shadow:var(--edge-highlight),var(--shadow-glass);background-color:var(--bg-muted-2)}.icon-grid a:active{transform:var(--active)}.icon-grid a .icon{margin:0;width:4rem;height:4rem}.icon-grid a .details{display:flex;flex-direction:column;gap:.125rem}.icon-grid a .details strong{font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-large)}.icon-grid a .details p{margin:0;font-weight:var(--font-weight-normal);font-size:var(--font-size-x-small);line-height:1rem}.icon{font-style:normal;font-variant:normal;font-weight:normal;line-height:1;user-select:none;text-transform:none;-webkit-user-select:none;display:inline-block;box-sizing:content-box}.icon::before{mask-image:var(--icon);-webkit-mask-image:var(--icon);display:block;background-color:currentColor;width:1em;height:1em;content:""}iframe{display:block;margin:1rem auto;box-shadow:var(--edge-highlight),var(--shadow);border:none;border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);width:100%;max-width:100%}iframe.mastodon-embed{aspect-ratio:3/4;width:min(var(--container-width)/2,100%)}iframe.vimeo-embed,iframe.youtube-embed{aspect-ratio:16/9}iframe:fullscreen{box-shadow:none;border-radius:0}iframe:-webkit-full-screen{box-shadow:none;border-radius:0}input[type=checkbox]::before{mask-image:var(--icon);-webkit-mask-image:var(--icon);display:block;background-color:currentColor;width:1em;height:1em;content:""}input[type=radio],input[type=checkbox],input[type=color]{position:relative;appearance:none;transition:var(--transition);cursor:pointer;border:.125rem solid var(--bg-muted-2);background-color:var(--bg-muted-1);width:1rem;height:1rem}input[type=radio]:hover,input[type=checkbox]:hover,input[type=color]:hover{background-color:var(--bg-muted-2)}input[type=radio]:disabled,input[type=checkbox]:disabled,input[type=color]:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}input[type=radio]:disabled:hover,input[type=checkbox]:disabled:hover,input[type=color]:disabled:hover{background-color:var(--bg-muted-1)}input[type=radio]:disabled:hover:checked,input[type=checkbox]:disabled:hover:checked,input[type=color]:disabled:hover:checked{background-color:var(--accent-color)}input[type=radio]::before,input[type=checkbox]::before{display:block;position:absolute;transform:scale(.5);opacity:0;transition:all var(--transition),transform var(--transition-bezier);content:""}input[type=radio]:checked,input[type=checkbox]:checked{border:.15rem solid rgba(0,0,0,0);background-color:var(--accent-color)}input[type=radio]:checked::before,input[type=checkbox]:checked::before{transform:scale(1);opacity:1}input[type=radio]{vertical-align:-.1875em;border-radius:50%}input[type=radio]::before{inset-block-start:.125rem;inset-inline-start:.125rem;border-radius:50%;background-color:var(--contrast-color);width:.5rem;height:.5rem}input[type=checkbox]{vertical-align:-.1875em;border-radius:calc(var(--rounded-corner-small)/2)}input[type=checkbox]::before{--icon: var(--icon-check);transform-origin:bottom left;inset-block-start:-.125rem;inset-inline-start:-.125rem;color:var(--contrast-color);font-size:1rem}input[type=checkbox].switch{vertical-align:-.375rem;box-shadow:var(--edge-highlight);border:none;border-radius:9999px;width:2.5rem;height:1.5rem}input[type=checkbox].switch.big{vertical-align:-.625rem;width:3rem;height:2rem}input[type=checkbox].switch.big::before{width:1.5rem;height:1.5rem}input[type=checkbox].switch::before{transform:none;transform-origin:center;opacity:1;mask-image:none;inset-block-start:.25rem;inset-inline-start:.25rem;box-shadow:var(--shadow);border-radius:50%;background-color:#fff;width:1rem;height:1rem;content:""}input[type=checkbox].switch:checked{background-color:var(--accent-color)}input[type=checkbox].switch:checked::before{transform:translateX(1rem);background-color:var(--contrast-color)}:root[dir*=rtl] input[type=checkbox].switch:checked::before{transform:translateX(-1rem)}input[type=checkbox].switch:disabled::before{box-shadow:none}input[type=color]{vertical-align:-.375em;box-shadow:var(--edge-highlight);border:none;border-radius:var(--rounded-corner-small);padding:.25rem;width:3rem;height:2rem}input[type=color]::-moz-color-swatch{border:none;border-radius:calc(var(--rounded-corner-small) - .25rem)}input[type=color]::-webkit-color-swatch-wrapper{padding:0}input[type=color]::-webkit-color-swatch{border-radius:calc(var(--rounded-corner-small) - .25rem)}input[type=range]{appearance:none;transition:var(--transition);cursor:pointer;box-shadow:var(--edge-highlight);border-radius:9999px;background:var(--bg-muted-1);padding:.5rem .25rem;width:100%;height:1rem}input[type=range]::-webkit-slider-runnable-track{cursor:pointer;border-radius:9999px;background:var(--accent-color);width:100%}input[type=range]::-moz-range-track{cursor:pointer;border-radius:9999px;background:var(--accent-color);width:100%}input[type=range]::-webkit-slider-thumb{appearance:none;transition:var(--transition-bezier);cursor:ew-resize;margin-block:-.5rem;box-shadow:var(--shadow);border:none;border-radius:.25rem;background-color:#fff;width:.5rem;height:1.5rem}input[type=range]::-moz-range-thumb{appearance:none;cursor:ew-resize;margin-block:-.5rem;box-shadow:var(--shadow);border:none;border-radius:.25rem;background-color:#fff;width:.5rem;height:1.5rem}input[type=range].color::-webkit-slider-thumb{margin-block:0;outline:.25rem solid #fff;background-color:rgba(0,0,0,0);height:.5rem}input[type=range].color::-moz-range-thumb{margin-block:0;outline:.25rem solid #fff;background-color:rgba(0,0,0,0);height:.5rem}input[type=submit]{appearance:none;transition:all var(--transition),transform var(--transition-bezier);cursor:pointer;box-shadow:var(--edge-highlight);border:none;border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:.375rem .75rem;color:var(--fg-muted-1);font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-small);font-family:inherit}input[type=submit]:hover{background-color:var(--bg-muted-2)}input[type=submit]:active{transform:var(--active)}.media-grid,.media-grid-markdown p{display:grid;grid-template-columns:repeat(auto-fill, minmax(12rem, 1fr));gap:.5rem}.media-grid img,.media-grid video,.media-grid-markdown p img,.media-grid-markdown p video{margin:0}img,video{display:block;margin:1rem auto;box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);max-width:100%;max-height:calc(100vh - 2rem)}img.full,img[src*="#full"],video.full,video[src*="#full"]{width:100%}img.start,img.end,img[src*="#start"],img[src*="#end"],video.start,video.end,video[src*="#start"],video[src*="#end"]{width:calc(var(--container-width)/3)}img.start,img[src*="#start"],video.start,video[src*="#start"]{float:inline-start;transform-origin:left;margin-inline-end:1rem}:root[dir*=rtl] img.start,:root[dir*=rtl] img[src*="#start"],:root[dir*=rtl] video.start,:root[dir*=rtl] video[src*="#start"]{transform-origin:right}img.end,img[src*="#end"],video.end,video[src*="#end"]{float:inline-end;transform-origin:right;margin-inline-start:1rem}:root[dir*=rtl] img.end,:root[dir*=rtl] img[src*="#end"],:root[dir*=rtl] video.end,:root[dir*=rtl] video[src*="#end"]{transform-origin:left}img.pixels,img[src*="#pixels"],video.pixels,video[src*="#pixels"]{image-rendering:pixelated}img.transparent,img[src*="#transparent"],video.transparent,video[src*="#transparent"]{box-shadow:none;border-radius:0;background-color:rgba(0,0,0,0)}img.drop-shadow,img[src*="#drop-shadow"],video.drop-shadow,video[src*="#drop-shadow"]{filter:var(--drop-shadow)}img.spoiler,img[src*="#spoiler"],video.spoiler,video[src*="#spoiler"]{opacity:var(--dim-opacity);clip-path:inset(0 0 0 0 round var(--rounded-corner));filter:blur(1.5rem)}img.spoiler:hover,img.spoiler:active,img[src*="#spoiler"]:hover,img[src*="#spoiler"]:active,video.spoiler:hover,video.spoiler:active,video[src*="#spoiler"]:hover,video[src*="#spoiler"]:active{opacity:1;clip-path:inset(-.75rem -.75rem -.75rem -.75rem round var(--rounded-corner-small));filter:none}img.spoiler.solid,img.spoiler[src*="#solid"],img[src*="#spoiler"].solid,img[src*="#spoiler"][src*="#solid"],video.spoiler.solid,video.spoiler[src*="#solid"],video[src*="#spoiler"].solid,video[src*="#spoiler"][src*="#solid"]{clip-path:none;filter:brightness(0) contrast(.5);box-shadow:none}img.spoiler.solid:hover,img.spoiler.solid:active,img.spoiler[src*="#solid"]:hover,img.spoiler[src*="#solid"]:active,img[src*="#spoiler"].solid:hover,img[src*="#spoiler"].solid:active,img[src*="#spoiler"][src*="#solid"]:hover,img[src*="#spoiler"][src*="#solid"]:active,video.spoiler.solid:hover,video.spoiler.solid:active,video.spoiler[src*="#solid"]:hover,video.spoiler[src*="#solid"]:active,video[src*="#spoiler"].solid:hover,video[src*="#spoiler"].solid:active,video[src*="#spoiler"][src*="#solid"]:hover,video[src*="#spoiler"][src*="#solid"]:active{filter:none}@media only screen and (max-width: 720px){img.start,img.end,img[src*="#start"],img[src*="#end"],video.start,video.end,video[src*="#start"],video[src*="#end"]{float:none;margin-inline-start:auto;margin-inline-end:auto;width:auto}}img{transition:all var(--transition),transform var(--transition-bezier)}img:not(.no-hover,[src*="#no-hover"],.emoji){cursor:zoom-in}img:not(.no-hover,[src*="#no-hover"],.emoji):hover{position:relative;transform:var(--hover);z-index:1;box-shadow:var(--edge-highlight),var(--shadow-raised);border-radius:var(--rounded-corner-small)}img:not(.no-hover,[src*="#no-hover"],.emoji).start,img:not(.no-hover,[src*="#no-hover"],.emoji).end,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#start"],img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#end"]{transition:var(--transition-bezier-longer)}img:not(.no-hover,[src*="#no-hover"],.emoji).start:hover,img:not(.no-hover,[src*="#no-hover"],.emoji).end:hover,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#start"]:hover,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#end"]:hover{transform:scale(2)}@media only screen and (max-width: 720px){img:not(.no-hover,[src*="#no-hover"],.emoji).start,img:not(.no-hover,[src*="#no-hover"],.emoji).end,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#start"],img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#end"]{transform-origin:center;transition:var(--transition-bezier)}img:not(.no-hover,[src*="#no-hover"],.emoji).start:hover,img:not(.no-hover,[src*="#no-hover"],.emoji).end:hover,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#start"]:hover,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#end"]:hover{transform:var(--hover)}}img:not(.no-hover,[src*="#no-hover"],.emoji).transparent:hover,img:not(.no-hover,[src*="#no-hover"],.emoji)[src*="#transparent"]:hover{box-shadow:none}a img:not(.no-hover,[src*="#no-hover"]){cursor:pointer}video:fullscreen{box-shadow:none;border-radius:0}video:-webkit-full-screen{box-shadow:none;border-radius:0}picture{display:inline-block}#site-nav{display:flex;position:sticky;grid-area:nav;flex-direction:column;z-index:9999;transition:all var(--transition),height 0s;inset-block-start:0;padding:1rem;width:clamp(14rem,20vw,var(--container-width)/2);height:100vh}@supports (height: 100dvh){#site-nav{height:100dvh}}@media only screen and (max-width: 720px){#site-nav:has(#expand-sidebar:checked)::before{-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur)}}#site-nav::before{position:absolute;z-index:-1;transition:var(--transition);inset:0;border-inline-end:.0625rem solid var(--bg-muted-1);background-color:var(--glass-bg-1);content:""}#site-nav #nav-header{position:relative;flex:unset;margin-block-end:1rem;border-radius:0;padding:.125rem}#site-nav #nav-header.has-icon{border-radius:1.375rem;padding:.25rem;padding-inline-start:3rem;height:2.75rem}#site-nav #nav-header.has-icon:hover{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-1)}#site-nav #nav-header.has-icon:active{transform:var(--active)}#site-nav #nav-header:hover{box-shadow:none;background:rgba(0,0,0,0)}#site-nav #nav-header:hover div{gap:.25rem}#site-nav #nav-header:hover div span:nth-of-type(1){font-size:var(--font-size-small)}#site-nav #nav-header:hover div span:nth-of-type(2){height:.75rem;color:inherit;font-size:var(--font-size-x-small)}#site-nav #nav-header:active{transform:none}#site-nav #nav-header .icon{margin-inline-start:-2.75rem}#site-nav #nav-header .icon:active{transform:var(--active)}#site-nav #nav-header img{position:absolute;margin:0;inset-block-start:.25rem;inset-inline-start:.25rem;border-radius:50%;width:2.25rem;height:2.25rem}#site-nav #nav-header div{display:flex;flex:1;flex-direction:column;justify-items:center;gap:0;transition:var(--transition);min-width:0;color:var(--fg-muted-2);line-height:1}#site-nav #nav-header div span{transition:var(--transition)}#site-nav #nav-header div span:nth-of-type(1){overflow:hidden;font-size:var(--font-size-medium);text-overflow:ellipsis;white-space:nowrap}#site-nav #nav-header div span:nth-of-type(2){height:0;color:rgba(0,0,0,0);font-weight:var(--font-weight-normal);font-size:var(--font-size-xx-small)}#site-nav a,#site-nav label,#site-nav button,#site-nav summary{display:flex;align-items:center;transition:all var(--transition),transform var(--transition-bezier);border-radius:1.375rem;background-color:rgba(0,0,0,0);padding:.25rem;padding-inline-end:.875rem;overflow:hidden;color:var(--fg-muted-2);font-weight:var(--font-weight-semi-bold);white-space:nowrap}#site-nav a:hover,#site-nav label:hover,#site-nav button:hover,#site-nav summary:hover{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-1)}#site-nav a:hover .icon,#site-nav label:hover .icon,#site-nav button:hover .icon,#site-nav summary:hover .icon{background-color:var(--bg-muted-2)}#site-nav a:active,#site-nav label:active,#site-nav button:active,#site-nav summary:active{transform:var(--active)}#site-nav a{flex:1;text-decoration:none}#site-nav a.active{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-1);color:var(--accent-color)}#site-nav a.active .icon{box-shadow:var(--edge-highlight),var(--shadow-glow);background-image:linear-gradient(to bottom right, var(--accent-color), var(--bg-muted-1));color:var(--contrast-color);text-shadow:var(--text-shadow-glow);text-shadow:none}#site-nav a.active:hover{background-color:var(--bg-muted-2)}#site-nav a.active:hover .icon{box-shadow:var(--edge-highlight);background-color:var(--accent-color)}#site-nav a.new .icon{position:relative}#site-nav a.new .icon::after{position:absolute;inset-block-start:.0625rem;inset-inline-end:.0625rem;border-radius:50%;background-color:var(--accent-color);width:.75rem;height:.75rem;content:""}#site-nav .icon{transition:var(--transition);margin-inline-end:.5rem;box-shadow:var(--edge-highlight);border-radius:1.125rem;background-color:var(--bg-muted-1);padding:.5rem;font-size:1.25rem}#site-nav .icon.fallback{width:1.25rem;font-weight:var(--font-weight-semi-bold);font-size:var(--font-size-medium);line-height:1.25rem;font-family:var(--font-monospace);text-align:center}#site-nav .icon.fallback::before{content:none}#site-nav nav{display:flex;flex:1;flex-direction:column;transition:var(--transition);margin:-1rem;padding:1rem;overflow:hidden auto;scrollbar-width:thin}#site-nav nav>ul{margin:auto 0}#site-nav nav details{flex:1;box-shadow:none;border-radius:0;background-color:rgba(0,0,0,0);padding:0}#site-nav nav details[open] summary{transform:none;opacity:1;box-shadow:none;background-color:rgba(0,0,0,0)}#site-nav nav details[open] summary::before{transform:none}@supports not (block-size: calc-size(auto, size)){#site-nav nav details[open] summary~*{animation:none}}#site-nav nav details summary{display:flex;position:relative;align-items:center;transition:var(--transition);border-radius:0;padding:.25rem 0;color:var(--fg-muted-1);font-weight:var(--font-weight-normal);font-size:var(--font-size-small);white-space:nowrap}#site-nav nav details summary:hover{box-shadow:none;background-color:rgba(0,0,0,0)}#site-nav nav details summary:active{transform:none}#site-nav nav details summary::before{transform:rotate(-90deg);margin-inline-end:0;inset-block:.5rem;inset-inline-end:0;font-size:1rem}#site-nav nav details summary .line{flex:1;transition:var(--transition);margin-inline:.5rem 1.5rem;background-color:var(--bg-muted-2);height:.0625rem}#site-nav ul{display:flex;flex-direction:column;gap:.25rem;margin-block:0;padding-inline-start:0;list-style:none}#site-nav li{display:flex;transition:width var(--transition);padding-inline-start:0;width:100%}#site-nav #nav-buttons{display:flex;flex-direction:row;gap:.25rem;margin-block-start:1rem;border-block-start:.0625rem solid var(--bg-muted-2);padding-block-start:.5rem}#site-nav #nav-buttons li{flex:0;transition:var(--transition)}#site-nav #nav-buttons button,#site-nav #nav-buttons summary,#site-nav #nav-buttons label{display:inline-flex;transition:all var(--transition),transform var(--transition-bezier);border-radius:1.125rem;padding:.5rem !important;color:var(--fg-muted-2)}#site-nav #nav-buttons button:hover,#site-nav #nav-buttons summary:hover,#site-nav #nav-buttons label:hover{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-1)}#site-nav #nav-buttons button:active,#site-nav #nav-buttons summary:active,#site-nav #nav-buttons label:active{transform:var(--active)}#site-nav #nav-buttons button .icon,#site-nav #nav-buttons summary .icon,#site-nav #nav-buttons label .icon{transition:var(--transition);margin-inline-end:0;box-shadow:none;background-color:rgba(0,0,0,0);padding:0;font-size:1.25rem}#site-nav #nav-buttons button{appearance:none;cursor:pointer;border:none;background-color:rgba(0,0,0,0)}#site-nav #nav-buttons summary::before{display:none}#site-nav #nav-buttons label{cursor:pointer}#site-nav #nav-buttons details::details-content{block-size:auto}#site-nav #nav-buttons details[open]::details-content{block-size:auto}@supports not (block-size: calc-size(auto, size)){#site-nav #nav-buttons details[open] summary~*{animation:none}}#site-nav #search{appearance:none;cursor:pointer;border:none;font-size:inherit;line-height:inherit;font-family:inherit;text-align:start;text-decoration:none}#site-nav .dropdown{-webkit-backdrop-filter:var(--blur);position:absolute;flex-direction:column;transform-origin:bottom left;z-index:1;backdrop-filter:var(--blur);inset-block-end:calc(100% - .25rem);inset-inline-start:1.75rem;box-shadow:var(--edge-highlight),var(--shadow-glass);border-radius:calc(var(--rounded-corner) + .25rem);background-color:var(--glass-bg-1);padding:.25rem;width:max-content;min-width:8rem}:root[dir*=rtl] #site-nav .dropdown{transform-origin:bottom right}#site-nav .dropdown a{border-radius:var(--rounded-corner);padding:.375rem .75rem}#site-nav summary::before{position:absolute;transition:all var(--transition),transform var(--transition-bezier);inset-inline-end:.5rem}#site-nav details{position:relative;box-shadow:none;border-radius:0;background-color:rgba(0,0,0,0);padding:0}#site-nav details[open] .dropdown{animation:expand-down-left var(--transition-bezier)}:root[dir*=rtl] #site-nav details[open] .dropdown{animation:expand-down-right var(--transition-bezier)}@media only screen and (max-width: 720px){#site-nav{position:fixed;inset-block-start:0;inset-inline-start:0}#site-nav #expand-sidebar{display:block}#site-nav #expand-sidebar+label{display:flex !important}#site-nav:not(:has(#expand-sidebar:checked)){padding:1rem .5rem;width:3.5rem}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header.has-icon{margin-inline:-.125rem}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header.has-icon div{margin-inline-start:.625rem}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header.has-icon:hover{transform:var(--hover);box-shadow:none;background-color:rgba(0,0,0,0)}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header.has-icon:active{transform:var(--active)}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header:hover{box-shadow:none;background:rgba(0,0,0,0)}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header:hover img{inset-block-start:.25rem;inset-inline-start:0;width:2.5rem;height:2.5rem}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header:active{transform:none}#site-nav:not(:has(#expand-sidebar:checked)) #nav-header .icon{margin-inline-start:0}#site-nav:not(:has(#expand-sidebar:checked)) nav{margin:-1rem -.5rem;padding:1rem .375rem}#site-nav:not(:has(#expand-sidebar:checked)) nav li{width:2.75rem}#site-nav:not(:has(#expand-sidebar:checked)) nav details summary{color:rgba(0,0,0,0);font-size:0}#site-nav:not(:has(#expand-sidebar:checked)) nav details summary .line{margin-inline:0}#site-nav:not(:has(#expand-sidebar:checked)) nav .icon{margin-inline-end:1.125rem}#site-nav:not(:has(#expand-sidebar:checked)) #nav-buttons li:not(li:first-of-type){transform:translateX(-2.5rem);visibility:hidden;opacity:0}#site-nav:not(:has(#expand-sidebar:checked)) #expand-sidebar+label{margin-inline-start:.125rem}}#expand-sidebar{display:none}#expand-sidebar:focus-visible+label{animation:focus-in var(--transition);outline:.125rem solid var(--accent-color);outline-offset:.125rem}#expand-sidebar+label{display:none !important}picture#not-found{display:block}picture#not-found img{width:8rem}img#not-found{width:8rem}.overshoot{--mask: linear-gradient(to bottom, transparent, black 1rem, black calc(100% - 1rem), transparent);-webkit-mask-image:var(--mask);mask-image:var(--mask)}.overshoot-row{--mask: linear-gradient(to right, transparent, black 1rem, black calc(100% - 1rem), transparent);-webkit-mask-image:var(--mask);mask-image:var(--mask)}.pre-container{position:relative;margin:1rem 0 1rem;box-shadow:var(--shadow);border-radius:var(--rounded-corner)}.pre-container::after{position:absolute;inset:0;box-shadow:var(--edge-highlight);border-radius:inherit;pointer-events:none;content:""}.pre-container .header{display:flex;justify-content:space-between;align-items:center;transition:var(--transition);border-radius:var(--rounded-corner) var(--rounded-corner) 0 0;border-block-end:.0625rem solid rgba(0,0,0,0);background-image:linear-gradient(to right, rgba(0,0,0,0) 50%, var(--bg-muted-neutral-1) 75%, rgba(0,0,0,0) 100%);background-size:200%;padding:.25rem}.pre-container .header:not(.z-code){background-color:var(--bg-muted-1);color:var(--accent-color)}.pre-container .header:not(.z-code) button:hover{background-color:var(--bg-muted-1)}.pre-container .header:not(.z-code).active{border-block-end-color:var(--bg-muted-1)}.pre-container .header:not(.z-code).active button{background-color:var(--bg-muted-1)}.pre-container .header span{margin-inline-start:.75rem;font-weight:var(--font-weight-semi-bold)}.pre-container .header button{position:relative;appearance:none;transition:all var(--transition),transform var(--transition-bezier);cursor:pointer;border:none;border-radius:var(--rounded-corner-small);background-color:rgba(0,0,0,0);padding:.5rem;color:inherit;line-height:0}.pre-container .header button:hover{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-neutral-1)}.pre-container .header button:active{transform:var(--active)}.pre-container .header button:disabled{cursor:not-allowed}.pre-container .header button:disabled:active{transform:none}.pre-container .header button .icon{transition:all var(--transition-longer),transform var(--transition-bezier-longer);font-size:1rem}.pre-container .header button .icon.copy{--icon: var(--icon-copy);transform-origin:bottom left}.pre-container .header button .icon.check{--icon: var(--icon-check-square-offset);position:absolute;transform:scale(.5);transform-origin:top right;opacity:0;inset:.5rem}.pre-container .header.active{animation:active-shimmer var(--transition-long);border-block-end-color:var(--bg-muted-neutral-1)}.pre-container .header.active button{box-shadow:var(--edge-highlight);background-color:var(--bg-muted-neutral-1)}.pre-container .header.active button .icon.copy{transform:scale(.5);opacity:0}.pre-container .header.active button .icon.check{transform:none;opacity:1}@keyframes active-shimmer{to{background-position-x:-200%}}.pre-container pre{margin:0;box-shadow:none;border-radius:0 0 var(--rounded-corner) var(--rounded-corner)}.rainbow{-webkit-background-clip:text;filter:drop-shadow(.0625rem .0625rem rgba(0,0,0,.6));background-image:linear-gradient(to right, var(--red-fg), var(--orange-fg), var(--yellow-fg), var(--green-fg), var(--blue-fg), var(--purple-fg));background-clip:text;color:rgba(0,0,0,0)}#search-modal{display:flex;position:fixed;flex-direction:column;align-items:center;visibility:hidden;opacity:0;z-index:9999;transition:var(--transition);background-color:var(--shade-color);padding-block-start:15vh;width:100%;height:100vh;pointer-events:all}#search-modal.active{visibility:visible;opacity:1}#search-modal.active #search-modal-content{transform:none}#search-modal-content{display:flex;flex-direction:column;gap:1rem;transform:var(--hover);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);transition:all var(--transition),transform var(--transition-bezier-longer);margin:-.5rem;box-shadow:var(--edge-highlight),var(--shadow-glass);border-radius:2.25rem 2.25rem 1.75rem 1.75rem;background-color:var(--glass-bg-1);padding:1rem;width:calc(100% - 2rem);max-width:calc(var(--container-width)/1.5);overflow:hidden}#search-modal-content:has(#search-results:empty){border-radius:1.75rem;padding:.5rem;max-width:calc(var(--container-width)/2)}#search-modal-content>div{position:relative}#search-modal #search-input{flex-shrink:0;box-shadow:var(--edge-highlight);border:none;border-radius:9999px;background:var(--bg-muted-1);padding:0 1rem;width:100%;height:2.5rem;color:inherit;font-size:inherit}#search-modal #search-input::placeholder{opacity:1;color:var(--fg-muted-1)}#search-modal #search-input:placeholder-shown+div .icon{transform:none;opacity:var(--disabled-opacity);pointer-events:all}#search-modal #search-input+div .icon{position:absolute;transform:translateX(.5rem);opacity:0;transition:all var(--transition),transform var(--transition-bezier);cursor:help;inset-block-start:.625rem;inset-inline-end:1rem;pointer-events:none;color:var(--fg-muted-2);font-size:1.25rem}#search-modal #search-results{display:none;flex:1;flex-direction:column;gap:.5rem;margin:-1rem;padding:1rem;max-height:50vh;overflow:auto;scrollbar-width:thin}#search-modal #search-results .item{display:inline-flex;flex-direction:column;box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:.75rem 1rem}#search-modal #search-results .item a{text-decoration:none}#search-modal #search-results .item a::after{content:" →"}#search-modal #search-results .item span{margin-block-start:.25rem;border-block-start:rpx(1) solid var(--bg-muted-2);padding-block-start:.25rem;color:var(--fg-muted-2)}#search-modal #search-results .item span strong{color:var(--fg-color)}#skip-to-content{position:absolute;transform:translateX(-50%) translateY(calc(-100% - 1rem));z-index:9999;transition:all var(--transition),transform var(--transition-bezier);inset-inline-start:50vw;border-radius:9999px;background-color:var(--glass-bg-1);padding:.375rem .75rem;width:max-content;text-decoration:none}#skip-to-content:focus-visible,#skip-to-content:focus{-webkit-backdrop-filter:var(--blur);transform:translateX(-50%) translateY(1rem);backdrop-filter:var(--blur);box-shadow:var(--edge-highlight),var(--shadow)}span.spoiler{filter:blur(.25rem);transition:var(--transition)}span.spoiler:hover,span.spoiler:active{filter:none}span.spoiler.solid{filter:none;border-radius:var(--rounded-corner-small);background-color:var(--fg-muted-1);color:rgba(0,0,0,0)}span.spoiler.solid:hover,span.spoiler.solid:active{background-color:rgba(0,0,0,0);color:inherit}.statement-container{margin:1rem 0;box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);padding:1rem}.statement-container :last-child{margin-block-end:0}.statement-container>:nth-child(2){margin-block-start:.5rem}.statement-container .title{font-weight:var(--font-weight-semi-bold)}.statement-container .title .icon{vertical-align:-.125rem;margin-inline-end:.25rem}.statement-container.archive{--accent-color: var(--purple-fg);--text-decoration-color: hsl(var(--purple-h) var(--purple-s) var(--purple-l) / var(--disabled-opacity));background-color:var(--purple-bg-1);color:var(--purple-fg)}.statement-container.disclaimer{--accent-color: var(--red-fg);--text-decoration-color: hsl(var(--red-h) var(--red-s) var(--red-l) / var(--disabled-opacity));background-color:var(--red-bg-1);color:var(--red-fg)}.statement-container.trigger{--accent-color: var(--yellow-fg);--text-decoration-color: hsl(var(--yellow-h) var(--yellow-s) var(--yellow-l) / var(--disabled-opacity));background-color:var(--yellow-bg-1);color:var(--yellow-fg)}table{box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);border-collapse:collapse;background-color:var(--bg-muted-1);width:100%;overflow:hidden}@media only screen and (max-width: 720px){table{table-layout:fixed}}table tr:nth-child(even){background-color:var(--bg-muted-1)}table tr th,table tr td{padding:.5rem 1rem}table tr th{background-color:var(--bg-muted-2);color:var(--fg-muted-2);font-weight:var(--font-weight-semi-bold)}#tag-chips{display:flex;flex-wrap:wrap;gap:.25rem;transition:var(--transition);margin:0;padding-inline-start:0;list-style:none}#tag-chips li{display:flex;padding-inline-start:0}#tag-chips a{display:flex;transition:all var(--transition),transform var(--transition-bezier);box-shadow:var(--edge-highlight);border-radius:1rem;background-color:var(--bg-muted-1);padding:.25rem;padding-inline-start:.75rem;color:var(--fg-muted-1);font-size:var(--font-size-small);text-decoration:none}#tag-chips a:hover{background-color:var(--bg-muted-2);color:var(--fg-muted-2)}#tag-chips a:active{transform:var(--active)}#tag-chips a::before{content:"#"}#tag-chips a .counter{transition:inherit;margin-inline-start:.375rem;box-shadow:var(--edge-highlight);border-radius:inherit;background-color:inherit;aspect-ratio:1/1;height:1.5rem;font-variant-numeric:tabular-nums;text-align:center}strong.title{color:var(--accent-color);font-size:var(--font-size-large)}#toc{display:flex;flex-direction:column;max-height:calc(var(--container-width)/3)}@media only screen and (max-width: 720px){#toc{max-height:calc(var(--container-width)/2)}}#toc .title{margin-block-end:1rem}#toc .overshoot{flex:1;margin:-1rem;padding:1rem;overflow:auto;scrollbar-width:thin}#toc .overshoot ul{padding-inline-start:1rem;color:var(--fg-muted-1);font-size:var(--font-size-small)}#toc .overshoot li{padding-inline-start:0}#toc .overshoot li::marker{color:inherit}#toc .overshoot a{color:inherit;text-decoration:none}details summary::before{mask-image:var(--icon);-webkit-mask-image:var(--icon);display:block;background-color:currentColor;width:1em;height:1em;content:""}h1,h2,h3,h4,h5,h6{transition-duration:var(--transition);transition-property:text-shadow,font-weight;margin:2rem 0 1rem;color:var(--accent-color);font-weight:var(--font-weight-bold);line-height:1;letter-spacing:-.05em;text-decoration:underline;text-decoration-color:var(--bg-muted-1);text-decoration-thickness:.125em;text-wrap:balance}h1{font-size:var(--font-size-xxx-large)}h2{font-size:var(--font-size-xx-large)}h3{font-size:var(--font-size-x-large)}h4{font-size:var(--font-size-large)}h5{font-size:var(--font-size-medium)}h6{font-size:var(--font-size-small)}@media only screen and (max-width: 480px){h1{font-size:var(--font-size-xx-large)}h2{font-size:var(--font-size-x-large)}h3{font-size:var(--font-size-large)}h4{font-size:var(--font-size-medium)}h5{font-size:var(--font-size-small)}h6{font-size:var(--font-size-x-small)}}small{color:var(--fg-muted-2);font-size:var(--font-size-small)}abbr[title]{cursor:help;text-decoration:underline;text-decoration-style:dotted;text-decoration-thickness:.0625rem}figcaption{color:var(--fg-muted-2);font-size:var(--font-size-small);text-align:center}blockquote{margin:0;border-inline-start:.25rem solid var(--accent-color);border-start-start-radius:.25rem;border-end-start-radius:.25rem;padding-inline-start:.75rem;color:var(--fg-muted-2)}mark,samp,q{box-shadow:var(--edge-highlight);border-radius:var(--rounded-corner-small);padding:.125rem .375rem}mark{background-color:var(--bg-muted-1);color:var(--accent-color)}del{color:var(--red-fg);text-decoration:line-through;text-decoration-thickness:.0625rem}ins{color:var(--green-fg);text-decoration:underline;text-decoration-thickness:.0625rem}samp{background-color:var(--bg-muted-1);color:var(--fg-muted-2);font-size:var(--font-size-small)}q{background-color:var(--bg-muted-1);color:var(--fg-muted-2);font-style:italic}u{text-decoration:underline;text-decoration-style:wavy;text-decoration-color:var(--red-fg);text-decoration-thickness:.0625rem}progress{appearance:none;box-shadow:var(--edge-highlight);border:none;border-radius:9999px;background-color:var(--bg-muted-1);padding:.25rem;width:100%;height:1rem;color:var(--accent-color)}progress:indeterminate{background-color:var(--bg-muted-1)}progress:indeterminate::-moz-progress-bar{background-color:rgba(0,0,0,0)}progress::-webkit-progress-bar{background-color:rgba(0,0,0,0)}progress::-moz-progress-bar{border-radius:9999px;background-color:var(--accent-color)}progress::-webkit-progress-value{border-radius:9999px;background-color:var(--accent-color)}kbd{display:inline-block;transition:var(--transition);cursor:pointer;box-shadow:var(--edge-highlight),inset 0 -.125rem 0 var(--bg-muted-2);border-radius:var(--rounded-corner-small);background-color:var(--bg-muted-1);padding:0 .375rem;font-size:var(--font-size-small)}kbd:active{transform:translateY(.125rem);box-shadow:inset 0 .0625rem 0 var(--bg-muted-2);background-color:var(--bg-muted-2)}a{color:var(--accent-color);font-weight:var(--font-weight-semi-bold);text-decoration-color:var(--text-decoration-color);text-decoration-thickness:.0625rem}a:hover{text-decoration-style:wavy}hr{margin:2rem auto;border:.125rem solid var(--bg-muted-2);border-radius:9999px}dt{font-weight:var(--font-weight-semi-bold)}dd{margin-inline-start:1.5rem;margin-block-end:1rem}aside{float:inline-end;margin-inline-start:1rem;box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:1rem;width:calc(var(--container-width)/3)}@media only screen and (max-width: 720px){aside{float:none;margin-inline-start:0;width:100%}}aside :first-child{margin-block-start:0}aside :last-child{margin-block-end:0}details{transition:padding-block-end var(--transition);box-shadow:var(--edge-highlight),var(--shadow);border-radius:var(--rounded-corner);background-color:var(--bg-muted-1);padding:.75rem 1rem}details::details-content{display:block;opacity:0;transition-behavior:allow-discrete;transition-duration:var(--transition);transition-property:opacity,block-size,content-visibility;block-size:0;overflow:hidden}details[open]{padding-block-end:1rem}details[open]::details-content{opacity:1;block-size:auto;block-size:calc-size(auto, size)}details[open] summary{color:var(--accent-color)}details[open] summary::before{transform:scaleY(-1)}@supports not (block-size: calc-size(auto, size)){details[open] summary~*{animation:slide-in-up var(--transition-bezier)}}details summary{transition:var(--transition);cursor:pointer;color:var(--fg-muted-1);font-weight:var(--font-weight-semi-bold);list-style:none}details summary::marker,details summary::-webkit-details-marker{display:none}details summary::before{--icon: var(--icon-caret-down);display:inline-block;vertical-align:-.125rem;transition:all var(--transition),transform var(--transition-bezier);margin-inline-end:.25rem}details>:last-child,details>:last-child img{margin-block-end:0}figure{margin-inline:0}ol,ul{padding-inline-start:1.5rem}li{padding-inline-start:.25rem}li::marker{color:var(--accent-color);font-weight:var(--font-weight-semi-bold)}b,strong{font-weight:var(--font-weight-semi-bold)}.visually-hidden{clip:rect(0 0 0 0);position:absolute !important;clip-path:inset(100%);width:1px !important;height:1px !important;overflow:hidden;white-space:nowrap}h1:hover .zola-anchor,h2:hover .zola-anchor,h3:hover .zola-anchor,h4:hover .zola-anchor,h5:hover .zola-anchor,h6:hover .zola-anchor{transform:none;opacity:1}.zola-anchor{position:absolute;transform:translateX(.5rem);opacity:0;transition:var(--transition);margin-inline-start:calc(-1em - .5rem);color:var(--fg-muted-1);line-height:1}@media only screen and (max-width: 720px){.zola-anchor{display:none}}.zola-anchor:hover{color:var(--fg-muted-2)}.zola-anchor:active{transform:var(--active)}.zola-anchor:focus-visible{opacity:1}:target .zola-anchor{color:var(--bg-muted-1)}body>div:last-child:has(div:last-child[style]:not([class]):not([id])){z-index:9999 !important;background-color:var(--shade-color) !important}body>div:last-child>div:last-child[style]:not([class]):not([id]){box-shadow:var(--edge-highlight),var(--shadow-glass);border-radius:calc(var(--rounded-corner) + 1rem) !important;background-color:hsl(var(--red-h) calc(var(--red-s) - var(--red-s)*.7) calc(var(--red-l) + (100% - var(--red-l))*.9)/var(--dim-opacity)) !important;padding:1rem !important;width:fit-content;max-width:calc(100% - 2rem);-webkit-backdrop-filter:var(--blur);backdrop-filter:var(--blur);filter:none !important}@media (prefers-color-scheme: dark){body>div:last-child>div:last-child[style]:not([class]):not([id]){background-color:hsl(var(--red-h) calc(var(--red-s) - var(--red-s)*.6) calc(var(--red-l) - var(--red-l)*.8)/var(--dim-opacity)) !important}}body>div:last-child>div:last-child[style]:not([class]):not([id])>p[style]:first-child{margin-block-end:1rem !important;color:var(--red-fg) !important;font-weight:var(--font-weight-semi-bold) !important;font-size:var(--font-size-large) !important}body>div:last-child>div:last-child[style]:not([class]):not([id])>pre[style]:last-child{border-radius:var(--rounded-corner) !important;background-color:var(--bg-muted-1) !important;padding:.75rem 1rem !important;color:var(--red-fg) !important;font-weight:var(--font-weight-normal) !important} \ No newline at end of file diff --git a/public/syntax-theme-dark.css b/public/syntax-theme-dark.css new file mode 100644 index 0000000..5139929 --- /dev/null +++ b/public/syntax-theme-dark.css @@ -0,0 +1,78 @@ +/* + * theme "Monokai Pro" generated by syntect + */ + +.z-code { + color: #fcfcfa; + background-color: #2d2a2e; +} + +.z-comment { + color: #727072; +} +.z-string { + color: #ffd866; +} +.z-constant.z-numeric { + color: #ab9df2; +} +.z-constant.z-language { + color: #ab9df2; +} +.z-constant.z-character, .z-constant.z-other { + color: #ab9df2; +} +.z-variable { +} +.z-keyword { + color: #ff6188; +} +.z-storage { + color: #ff6188; +} +.z-storage.z-type { + color: #78dce8; +font-style: italic; +} +.z-entity.z-name.z-class { + color: #a9dc76; +text-decoration: underline; +} +.z-entity.z-other.z-inherited-class { + color: #a9dc76; +text-decoration: underline; +font-style: italic; +} +.z-entity.z-name.z-function { + color: #a9dc76; +} +.z-variable.z-parameter { + color: #fc9867; +font-style: italic; +} +.z-entity.z-name.z-tag { + color: #ff6188; +} +.z-entity.z-other.z-attribute-name { + color: #a9dc76; +font-style: italic; +} +.z-support.z-function { + color: #78dce8; +} +.z-support.z-constant { + color: #78dce8; +} +.z-support.z-type, .z-support.z-class { + color: #fcfcfa; +} +.z-support.z-other.z-variable { +} +.z-invalid { + color: #fcfcfa; + background-color: #ff6188; +} +.z-invalid.z-deprecated { + color: #fcfcfa; + background-color: #ae81ff; +} diff --git a/public/syntax-theme-light.css b/public/syntax-theme-light.css new file mode 100644 index 0000000..481a60c --- /dev/null +++ b/public/syntax-theme-light.css @@ -0,0 +1,78 @@ +/* + * theme "Monokai Pro Light" generated by syntect + */ + +.z-code { + color: #29242a; + background-color: #faf4f2; +} + +.z-comment { + color: #918c8e; +} +.z-string { + color: #cc7a0a; +} +.z-constant.z-numeric { + color: #7058be; +} +.z-constant.z-language { + color: #7058be; +} +.z-constant.z-character, .z-constant.z-other { + color: #7058be; +} +.z-variable { +} +.z-keyword { + color: #e14775; +} +.z-storage { + color: #e14775; +} +.z-storage.z-type { + color: #1c8ca8; +font-style: italic; +} +.z-entity.z-name.z-class { + color: #269d69; +text-decoration: underline; +} +.z-entity.z-other.z-inherited-class { + color: #269d69; +text-decoration: underline; +font-style: italic; +} +.z-entity.z-name.z-function { + color: #269d69; +} +.z-variable.z-parameter { + color: #e16032; +font-style: italic; +} +.z-entity.z-name.z-tag { + color: #e14775; +} +.z-entity.z-other.z-attribute-name { + color: #269d69; +font-style: italic; +} +.z-support.z-function { + color: #1c8ca8; +} +.z-support.z-constant { + color: #1c8ca8; +} +.z-support.z-type, .z-support.z-class { + color: #29242a; +} +.z-support.z-other.z-variable { +} +.z-invalid { + color: #fcfcfa; + background-color: #ff6188; +} +.z-invalid.z-deprecated { + color: #fcfcfa; + background-color: #7058be; +} diff --git a/themes/ametrine b/themes/ametrine new file mode 160000 index 0000000..f1305f2 --- /dev/null +++ b/themes/ametrine @@ -0,0 +1 @@ +Subproject commit f1305f26896cb894c5a88e0f6ded70134d4bd3c8 diff --git a/themes/yunohost/templates/index.html b/themes/yunohost/templates/index.html new file mode 100644 index 0000000..9d38fb6 --- /dev/null +++ b/themes/yunohost/templates/index.html @@ -0,0 +1,33 @@ + + + + + + + + + + {{ section.title }} + + + + + +
+ {{ section.content | safe }} +
+ + + + \ No newline at end of file diff --git a/themes/yunohost/theme.toml b/themes/yunohost/theme.toml new file mode 100644 index 0000000..f853b84 --- /dev/null +++ b/themes/yunohost/theme.toml @@ -0,0 +1,2 @@ +name = "yunohost" +description = "The default theme for the YunoHost Zola package"