+
+Card-style Hugo theme designed for bloggers.
+
+## Quickstart
+
+Use this template: [CaiJimmy/hugo-theme-stack-starter](https://github.com/CaiJimmy/hugo-theme-stack-starter)
+
+## Demo
+
+Check [demo.stack.cai.im](https://demo.stack.cai.im)
+
+## Documentation
+
+- [English](https://stack.cai.im)
+- [中文](https://stack.cai.im/zh)
+
+## Copyright
+
+**Licensed under the GNU General Public License v3.0**
+
+Please do not remove the "*Theme Stack designed by Jimmy*" text and link.
+
+If you want to port this theme to another blogging platform, please let me know🙏.
diff --git a/themes/stack/archetypes/categories.md b/themes/stack/archetypes/categories.md
new file mode 100644
index 0000000..d771b29
--- /dev/null
+++ b/themes/stack/archetypes/categories.md
@@ -0,0 +1,7 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+image:
+style:
+ background: "#2a9d8f"
+ color: "#fff"
+---
\ No newline at end of file
diff --git a/themes/stack/archetypes/default.md b/themes/stack/archetypes/default.md
new file mode 100644
index 0000000..6075e9a
--- /dev/null
+++ b/themes/stack/archetypes/default.md
@@ -0,0 +1,12 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+description:
+date: {{ .Date }}
+image:
+math:
+license:
+comments: true
+draft: true
+build:
+ list: always # Change to "never" to hide the page from the list
+---
\ No newline at end of file
diff --git a/themes/stack/archetypes/tags.md b/themes/stack/archetypes/tags.md
new file mode 100644
index 0000000..2fd2fd7
--- /dev/null
+++ b/themes/stack/archetypes/tags.md
@@ -0,0 +1,5 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+description:
+image:
+---
\ No newline at end of file
diff --git a/themes/stack/assets/icons/archives.svg b/themes/stack/assets/icons/archives.svg
new file mode 100644
index 0000000..cd96cbe
--- /dev/null
+++ b/themes/stack/assets/icons/archives.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/themes/stack/assets/icons/arrow-back.svg b/themes/stack/assets/icons/arrow-back.svg
new file mode 100644
index 0000000..0f7c5f4
--- /dev/null
+++ b/themes/stack/assets/icons/arrow-back.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/themes/stack/assets/icons/back.svg b/themes/stack/assets/icons/back.svg
new file mode 100644
index 0000000..ee52db4
--- /dev/null
+++ b/themes/stack/assets/icons/back.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/themes/stack/assets/icons/brand-github.svg b/themes/stack/assets/icons/brand-github.svg
new file mode 100644
index 0000000..1fe7e0b
--- /dev/null
+++ b/themes/stack/assets/icons/brand-github.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/themes/stack/assets/icons/brand-twitter.svg b/themes/stack/assets/icons/brand-twitter.svg
new file mode 100644
index 0000000..17ab1b1
--- /dev/null
+++ b/themes/stack/assets/icons/brand-twitter.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/themes/stack/assets/icons/categories.svg b/themes/stack/assets/icons/categories.svg
new file mode 100644
index 0000000..e00ab1d
--- /dev/null
+++ b/themes/stack/assets/icons/categories.svg
@@ -0,0 +1,9 @@
+
+
+
diff --git a/themes/stack/assets/icons/chevron-left.svg b/themes/stack/assets/icons/chevron-left.svg
new file mode 100644
index 0000000..4480a0a
--- /dev/null
+++ b/themes/stack/assets/icons/chevron-left.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/themes/stack/assets/icons/chevron-right.svg b/themes/stack/assets/icons/chevron-right.svg
new file mode 100644
index 0000000..2be2e9c
--- /dev/null
+++ b/themes/stack/assets/icons/chevron-right.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/themes/stack/assets/icons/clock.svg b/themes/stack/assets/icons/clock.svg
new file mode 100644
index 0000000..a7a8be6
--- /dev/null
+++ b/themes/stack/assets/icons/clock.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/copyright.svg b/themes/stack/assets/icons/copyright.svg
new file mode 100644
index 0000000..2ac45ff
--- /dev/null
+++ b/themes/stack/assets/icons/copyright.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/date.svg b/themes/stack/assets/icons/date.svg
new file mode 100644
index 0000000..ed92a90
--- /dev/null
+++ b/themes/stack/assets/icons/date.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/themes/stack/assets/icons/dots.svg b/themes/stack/assets/icons/dots.svg
new file mode 100644
index 0000000..0e7be05
--- /dev/null
+++ b/themes/stack/assets/icons/dots.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/themes/stack/assets/icons/hash.svg b/themes/stack/assets/icons/hash.svg
new file mode 100644
index 0000000..e00ab1d
--- /dev/null
+++ b/themes/stack/assets/icons/hash.svg
@@ -0,0 +1,9 @@
+
+
+
diff --git a/themes/stack/assets/icons/home.svg b/themes/stack/assets/icons/home.svg
new file mode 100644
index 0000000..ed5fd53
--- /dev/null
+++ b/themes/stack/assets/icons/home.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/themes/stack/assets/icons/infinity.svg b/themes/stack/assets/icons/infinity.svg
new file mode 100644
index 0000000..fb40b24
--- /dev/null
+++ b/themes/stack/assets/icons/infinity.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/themes/stack/assets/icons/language.svg b/themes/stack/assets/icons/language.svg
new file mode 100644
index 0000000..66ede1c
--- /dev/null
+++ b/themes/stack/assets/icons/language.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/themes/stack/assets/icons/link.svg b/themes/stack/assets/icons/link.svg
new file mode 100644
index 0000000..3c87803
--- /dev/null
+++ b/themes/stack/assets/icons/link.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/messages.svg b/themes/stack/assets/icons/messages.svg
new file mode 100644
index 0000000..725d75c
--- /dev/null
+++ b/themes/stack/assets/icons/messages.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/rss.svg b/themes/stack/assets/icons/rss.svg
new file mode 100644
index 0000000..b92ea8f
--- /dev/null
+++ b/themes/stack/assets/icons/rss.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/themes/stack/assets/icons/search.svg b/themes/stack/assets/icons/search.svg
new file mode 100644
index 0000000..a0b0ddc
--- /dev/null
+++ b/themes/stack/assets/icons/search.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/tag.svg b/themes/stack/assets/icons/tag.svg
new file mode 100644
index 0000000..ef7a63d
--- /dev/null
+++ b/themes/stack/assets/icons/tag.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/toggle-left.svg b/themes/stack/assets/icons/toggle-left.svg
new file mode 100644
index 0000000..c3048d4
--- /dev/null
+++ b/themes/stack/assets/icons/toggle-left.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/toggle-right.svg b/themes/stack/assets/icons/toggle-right.svg
new file mode 100644
index 0000000..d3edd63
--- /dev/null
+++ b/themes/stack/assets/icons/toggle-right.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/icons/user.svg b/themes/stack/assets/icons/user.svg
new file mode 100644
index 0000000..9c92c87
--- /dev/null
+++ b/themes/stack/assets/icons/user.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/themes/stack/assets/scss/breakpoints.scss b/themes/stack/assets/scss/breakpoints.scss
new file mode 100644
index 0000000..e9e9de7
--- /dev/null
+++ b/themes/stack/assets/scss/breakpoints.scss
@@ -0,0 +1,17 @@
+$breakpoints: (
+ sm: 640px,
+ md: 768px,
+ lg: 1024px,
+ xl: 1280px,
+ 2xl: 1536px,
+);
+
+@mixin respond($breakpoint) {
+ @if not map-has-key($breakpoints, $breakpoint) {
+ @warn "'#{$breakpoint}' is not a valid breakpoint";
+ } @else {
+ @media (min-width: map-get($breakpoints, $breakpoint)) {
+ @content;
+ }
+ }
+}
diff --git a/themes/stack/assets/scss/custom.scss b/themes/stack/assets/scss/custom.scss
new file mode 100644
index 0000000..61fa80f
--- /dev/null
+++ b/themes/stack/assets/scss/custom.scss
@@ -0,0 +1 @@
+/* Place your custom SCSS in HUGO_SITE_FOLDER/assets/scss/custom.scss */
\ No newline at end of file
diff --git a/themes/stack/assets/scss/external/normalize.scss b/themes/stack/assets/scss/external/normalize.scss
new file mode 100644
index 0000000..c45a85f
--- /dev/null
+++ b/themes/stack/assets/scss/external/normalize.scss
@@ -0,0 +1,349 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+ html {
+ line-height: 1.15; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+ }
+
+ /* Sections
+ ========================================================================== */
+
+ /**
+ * Remove the margin in all browsers.
+ */
+
+ body {
+ margin: 0;
+ }
+
+ /**
+ * Render the `main` element consistently in IE.
+ */
+
+ main {
+ display: block;
+ }
+
+ /**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+ h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+ }
+
+ /* Grouping content
+ ========================================================================== */
+
+ /**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+ hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+ }
+
+ /**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+ pre {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+ }
+
+ /* Text-level semantics
+ ========================================================================== */
+
+ /**
+ * Remove the gray background on active links in IE 10.
+ */
+
+ a {
+ background-color: transparent;
+ }
+
+ /**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+ abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+ }
+
+ /**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+ b,
+ strong {
+ font-weight: bolder;
+ }
+
+ /**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+ code,
+ kbd,
+ samp {
+ font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+ }
+
+ /**
+ * Add the correct font size in all browsers.
+ */
+
+ small {
+ font-size: 80%;
+ }
+
+ /**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+ sub,
+ sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+ }
+
+ sub {
+ bottom: -0.25em;
+ }
+
+ sup {
+ top: -0.5em;
+ }
+
+ /* Embedded content
+ ========================================================================== */
+
+ /**
+ * Remove the border on images inside links in IE 10.
+ */
+
+ img {
+ border-style: none;
+ }
+
+ /* Forms
+ ========================================================================== */
+
+ /**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+ button,
+ input,
+ optgroup,
+ select,
+ textarea {
+ font-family: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+ }
+
+ /**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+ button,
+ input { /* 1 */
+ overflow: visible;
+ }
+
+ /**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+ button,
+ select { /* 1 */
+ text-transform: none;
+ }
+
+ /**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+ button,
+ [type="button"],
+ [type="reset"],
+ [type="submit"] {
+ -webkit-appearance: button;
+ }
+
+ /**
+ * Remove the inner border and padding in Firefox.
+ */
+
+ button::-moz-focus-inner,
+ [type="button"]::-moz-focus-inner,
+ [type="reset"]::-moz-focus-inner,
+ [type="submit"]::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+ }
+
+ /**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+ button:-moz-focusring,
+ [type="button"]:-moz-focusring,
+ [type="reset"]:-moz-focusring,
+ [type="submit"]:-moz-focusring {
+ outline: 1px dotted ButtonText;
+ }
+
+ /**
+ * Correct the padding in Firefox.
+ */
+
+ fieldset {
+ padding: 0.35em 0.75em 0.625em;
+ }
+
+ /**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+ legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+ }
+
+ /**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+ progress {
+ vertical-align: baseline;
+ }
+
+ /**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+ textarea {
+ overflow: auto;
+ }
+
+ /**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+ [type="checkbox"],
+ [type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+ }
+
+ /**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+ [type="number"]::-webkit-inner-spin-button,
+ [type="number"]::-webkit-outer-spin-button {
+ height: auto;
+ }
+
+ /**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+ [type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+ }
+
+ /**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+ [type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+ }
+
+ /**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+ ::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+ }
+
+ /* Interactive
+ ========================================================================== */
+
+ /*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+ details {
+ display: block;
+ }
+
+ /*
+ * Add the correct display in all browsers.
+ */
+
+ summary {
+ display: list-item;
+ }
+
+ /* Misc
+ ========================================================================== */
+
+ /**
+ * Add the correct display in IE 10+.
+ */
+
+ template {
+ display: none;
+ }
+
+ /**
+ * Add the correct display in IE 10.
+ */
+
+ [hidden] {
+ display: none;
+ }
\ No newline at end of file
diff --git a/themes/stack/assets/scss/general.scss b/themes/stack/assets/scss/general.scss
new file mode 100644
index 0000000..c362594
--- /dev/null
+++ b/themes/stack/assets/scss/general.scss
@@ -0,0 +1,31 @@
+a {
+ text-decoration: none;
+ color: var(--accent-color);
+
+ &:hover {
+ color: var(--accent-color-darker);
+ }
+
+ &.link {
+ box-shadow: 0px -2px 0px rgba(var(--link-background-color), var(--link-background-opacity)) inset;
+ transition: all 0.3s ease;
+
+ &:hover {
+ box-shadow: 0px calc(-1rem * var(--article-line-height)) 0px rgba(var(--link-background-color), var(--link-background-opacity-hover)) inset;
+ }
+ }
+}
+
+.section-title {
+ text-transform: uppercase;
+ margin-top: 0;
+ margin-bottom: var(--spacing-sm);
+ display: block;
+ font-size: 1.6rem;
+ font-weight: bold;
+ color: var(--body-text-color);
+
+ a {
+ color: var(--body-text-color);
+ }
+}
diff --git a/themes/stack/assets/scss/grid.scss b/themes/stack/assets/scss/grid.scss
new file mode 100644
index 0000000..a27e6f8
--- /dev/null
+++ b/themes/stack/assets/scss/grid.scss
@@ -0,0 +1,99 @@
+.container {
+ margin-left: auto;
+ margin-right: auto;
+
+ .left-sidebar {
+ order: -3;
+ width: 100%;
+ max-width: var(--left-sidebar-max-width);
+ }
+
+ .right-sidebar {
+ order: -1;
+ width: 100%;
+ max-width: var(--right-sidebar-max-width);
+
+ /// Display right sidebar when min-width: lg
+ @include respond(lg) {
+ display: flex;
+ }
+ }
+
+ &.extended {
+ @include respond(md) {
+ max-width: 1024px;
+ --left-sidebar-max-width: 25%;
+ --right-sidebar-max-width: 30%;
+ }
+
+ @include respond(lg) {
+ max-width: 1280px;
+ --left-sidebar-max-width: 20%;
+ --right-sidebar-max-width: 30%;
+ }
+
+ @include respond(xl) {
+ max-width: 1536px;
+ --left-sidebar-max-width: 15%;
+ --right-sidebar-max-width: 25%;
+ }
+ }
+
+ &.compact {
+ @include respond(md) {
+ --left-sidebar-max-width: 25%;
+ max-width: 768px;
+ }
+
+ @include respond(lg) {
+ max-width: 1024px;
+ --left-sidebar-max-width: 20%;
+ }
+
+ @include respond(xl) {
+ max-width: 1280px;
+ }
+ }
+}
+
+.flex {
+ display: flex;
+ flex-direction: row;
+
+ &.on-phone--column {
+ flex-direction: column;
+ @include respond(md) {
+ flex-direction: row;
+ }
+ }
+
+ .full-width {
+ width: 100%;
+ }
+}
+
+main.main {
+ order: -2;
+ min-width: 0;
+ max-width: 100%;
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ gap: var(--section-separation);
+
+ @include respond(md) {
+ padding-top: var(--main-top-padding);
+ }
+}
+
+.main-container {
+ min-height: 100vh;
+ align-items: flex-start;
+ padding: 0 var(--container-padding);
+ gap: var(--section-separation);
+ padding-top: var(--main-top-padding);
+
+ @include respond(md) {
+ padding-top: 0;
+ }
+}
diff --git a/themes/stack/assets/scss/mixins.scss b/themes/stack/assets/scss/mixins.scss
new file mode 100644
index 0000000..d905f66
--- /dev/null
+++ b/themes/stack/assets/scss/mixins.scss
@@ -0,0 +1,5 @@
+@mixin card-style {
+ background-color: var(--card-background);
+ box-shadow: var(--shadow-l1);
+ border-radius: var(--card-border-radius);
+}
diff --git a/themes/stack/assets/scss/partials/article.scss b/themes/stack/assets/scss/partials/article.scss
new file mode 100644
index 0000000..6fc5462
--- /dev/null
+++ b/themes/stack/assets/scss/partials/article.scss
@@ -0,0 +1,400 @@
+/* Default article style */
+.article-list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--section-separation);
+
+ article {
+ display: flex;
+ flex-direction: column;
+ @include card-style;
+ overflow: hidden;
+
+ transition: box-shadow 0.3s ease;
+
+ &:hover {
+ box-shadow: var(--shadow-l2);
+ }
+
+ .article-image {
+ img {
+ width: 100%;
+ height: var(--article-image-height);
+ object-fit: cover;
+ }
+ }
+ }
+}
+
+.article-details {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding: var(--card-padding);
+ gap: var(--spacing-md);
+}
+
+.article-title {
+ font-family: var(--article-font-family);
+ font-weight: 600;
+ margin: 0;
+ color: var(--card-text-color-main);
+ font-size: 2.2rem;
+
+ @include respond(xl) {
+ font-size: 2.4rem;
+ }
+
+ a {
+ color: var(--card-text-color-main);
+
+ &:hover {
+ opacity: 0.8;
+ }
+ }
+}
+
+.article-subtitle {
+ font-weight: normal;
+ color: var(--card-text-color-secondary);
+ line-height: 1.5;
+ margin: 0;
+ font-size: 1.75rem;
+ @include respond(xl) {
+ font-size: 2rem;
+ }
+}
+
+.article-title-wrapper {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+}
+
+.article-meta {
+ display: flex;
+ flex-direction: column;
+ gap: var(--spacing-lg);
+ font-size: 1.4rem;
+
+ svg {
+ vertical-align: middle;
+ width: 20px;
+ height: 20px;
+ stroke-width: 1.33;
+ flex-shrink: 0;
+ }
+
+ &,
+ time,
+ a,
+ span {
+ font-size: 1.4rem;
+ color: var(--card-text-color-tertiary);
+ }
+
+ & > .inline-meta {
+ display: inline-flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: var(--spacing-md);
+ }
+}
+
+.article-category,
+.article-tags {
+ display: flex;
+ gap: var(--spacing-sm);
+ flex-wrap: wrap;
+
+ a {
+ color: var(--accent-color-text);
+ background-color: var(--accent-color);
+ padding: 8px 16px;
+ border-radius: var(--tag-border-radius);
+ display: inline-block;
+ font-size: 1.4rem;
+ transition: background-color 0.5s ease;
+
+ &:hover {
+ color: var(--accent-color-text);
+ background-color: var(--accent-color-darker);
+ }
+ }
+}
+
+/* Compact style article list */
+.article-list--compact {
+ @include card-style;
+ --image-size: var(--article-compact-image-size);
+
+ article {
+ & > a {
+ display: flex;
+ align-items: center;
+ padding: var(--small-card-padding);
+ gap: var(--spacing-md);
+ }
+
+ &:not(:last-of-type) {
+ border-bottom: 1.5px solid var(--card-separator-color);
+ }
+
+ .article-details {
+ flex-grow: 1;
+ padding: 0;
+ min-height: var(--image-size);
+ gap: var(--spacing-sm);
+ }
+
+ .article-title {
+ margin: 0;
+ font-size: 1.6rem;
+
+ @include respond(md) {
+ font-size: 1.8rem;
+ }
+ }
+
+ .article-image {
+ img {
+ width: var(--image-size);
+ height: var(--image-size);
+ object-fit: cover;
+ }
+ }
+
+ .article-preview {
+ font-size: 1.4rem;
+ color: var(--card-text-color-tertiary);
+ line-height: 1.5;
+ }
+ }
+}
+
+/* Tile style article list */
+.article-list--tile {
+ article {
+ position: relative;
+ width: var(--article-tile-width);
+ height: var(--article-tile-height);
+ @include card-style;
+ overflow: hidden;
+ transition: box-shadow 0.3s ease;
+
+ &:hover {
+ box-shadow: var(--shadow-l2);
+ }
+
+ &.has-image {
+ .article-details {
+ background-color: var(--article-tile-overlay-bg);
+ }
+
+ .article-title {
+ color: var(--article-tile-text-color);
+ }
+ }
+
+ .article-image {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+
+ img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+ }
+
+ .article-details {
+ border-radius: var(--card-border-radius);
+ position: relative;
+ height: 100%;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-end;
+ z-index: 2;
+ padding: 15px;
+
+ @include respond(sm) {
+ padding: 20px;
+ }
+ }
+
+ .article-title {
+ font-size: 2rem;
+ font-weight: 500;
+ color: var(--card-text-color-main);
+
+ @include respond(sm) {
+ font-size: 2.2rem;
+ }
+ }
+ }
+}
+
+.mermaid:not([data-processed]) {
+ background: var(--card-background);
+ min-height: 150px;
+ border-radius: 8px;
+ position: relative;
+ overflow: hidden;
+ font-size: 0 !important;
+ line-height: 0;
+ color: transparent;
+
+ &::after {
+ visibility: visible;
+ content: "";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 28px;
+ height: 28px;
+ margin: -14px 0 0 -14px;
+ border: 3px solid var(--card-background);
+ border-top-color: var(--accent-color, #3273dc);
+ border-radius: 50%;
+ animation: mermaid-spinner 0.8s linear infinite;
+ }
+}
+
+@keyframes mermaid-spinner {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+// Mermaid diagram wrapper with expand toolbar
+.mermaid-wrapper {
+ position: relative;
+ margin: 1rem 0;
+
+ .mermaid {
+ display: flex;
+ justify-content: center;
+
+ svg {
+ display: block;
+ max-width: 100%;
+ height: auto;
+ }
+ }
+}
+
+.mermaid-toolbar {
+ position: absolute;
+ top: 0.75rem;
+ right: 0.75rem;
+ display: flex;
+ gap: 0.5rem;
+ z-index: 10;
+
+ button {
+ padding: 0.5rem 1rem;
+ background: var(--mermaid-toolbar-btn-bg);
+ border: 2px solid var(--mermaid-toolbar-btn-text);
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 1rem;
+ font-weight: 600;
+ color: var(--mermaid-toolbar-btn-text);
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
+ transition: all 0.2s;
+
+ &:hover {
+ background: var(--mermaid-toolbar-btn-text);
+ color: var(--card-background);
+ transform: scale(1.05);
+ }
+ }
+}
+
+// Mermaid fullscreen modal
+.mermaid-modal {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ background: var(--mermaid-modal-bg);
+ z-index: 9999;
+
+ &.active {
+ display: flex;
+ flex-direction: column;
+ }
+}
+
+.mermaid-modal-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 0.75rem 1rem;
+ background: rgba(255, 255, 255, 0.1);
+}
+
+.mermaid-modal-controls {
+ display: flex;
+ gap: 0.5rem;
+}
+
+.mermaid-modal-controls button,
+.mermaid-modal-close {
+ padding: 0.5rem 1rem;
+ background: var(--mermaid-modal-btn-bg);
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 0.9rem;
+ color: var(--card-text-color-main);
+
+ &:hover {
+ background: var(--mermaid-modal-btn-hover);
+ }
+}
+
+.mermaid-modal-body {
+ flex: 1;
+ overflow: hidden;
+ position: relative;
+}
+
+.mermaid-modal-content {
+ position: absolute;
+ top: 1rem;
+ left: 1rem;
+ right: 1rem;
+ bottom: 1rem;
+ border-radius: 8px;
+ overflow: hidden;
+ background: var(--mermaid-modal-content-bg);
+}
+
+.mermaid-panzoom-container {
+ display: inline-block;
+ transform-origin: 0 0;
+ visibility: hidden;
+
+ &.ready {
+ visibility: visible;
+ }
+
+ svg {
+ display: block;
+ }
+}
+
+// Off-screen container for pre-rendering alternate theme
+.mermaid-offscreen {
+ position: absolute;
+ left: -9999px;
+ visibility: hidden;
+ width: 800px;
+}
diff --git a/themes/stack/assets/scss/partials/base.scss b/themes/stack/assets/scss/partials/base.scss
new file mode 100644
index 0000000..bf345f8
--- /dev/null
+++ b/themes/stack/assets/scss/partials/base.scss
@@ -0,0 +1,21 @@
+html {
+ font-size: 62.5%;
+ overflow-y: scroll;
+ scrollbar-gutter: stable;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ background: var(--body-background);
+ margin: 0;
+ font-family: var(--base-font-family);
+ font-size: 1.6rem;
+ text-autospace: ideograph-alpha ideograph-numeric punctuation insert;
+ text-spacing-trim: trim-start allow-end;
+ -ms-text-autospace: ideograph-alpha;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
\ No newline at end of file
diff --git a/themes/stack/assets/scss/partials/comments/artalk.scss b/themes/stack/assets/scss/partials/comments/artalk.scss
new file mode 100644
index 0000000..4d8da6a
--- /dev/null
+++ b/themes/stack/assets/scss/partials/comments/artalk.scss
@@ -0,0 +1,80 @@
+@import "../../breakpoints";
+@import "../../mixins";
+
+.artalk-container {
+ @include card-style;
+ padding: 5px;
+
+ @include respond(md) {
+ padding: var(--card-padding);
+ }
+}
+
+.artalk {
+ --at-color-bg: var(--card-background);
+ --at-color-font: var(--card-text-color-main);
+ --at-color-sub: var(--card-text-color-secondary);
+ --at-color-main: var(--accent-color);
+ --at-color-border: var(--card-separator-color);
+ --at-border-radius: var(--card-border-radius);
+ --at-color-link: var(--accent-color);
+}
+
+.artalk a {
+ color: var(--at-color-link);
+ text-decoration: none;
+ transition: color 0.3s ease;
+
+ &:hover {
+ color: var(--accent-color-darker);
+ }
+}
+
+.artalk .atk-content a,
+.artalk .atk-editor-plug-preview a {
+ color: var(--accent-color);
+ box-shadow: 0px -2px 0px rgba(var(--link-background-color), var(--link-background-opacity)) inset;
+ transition: all 0.3s ease;
+
+ &:hover {
+ color: var(--accent-color-darker);
+ box-shadow: 0px calc(-1rem * var(--article-line-height)) 0px rgba(var(--link-background-color), var(--link-background-opacity-hover)) inset;
+ }
+}
+
+[data-scheme="dark"] .artalk {
+ --at-color-main: var(--accent-color);
+ --at-color-link: var(--accent-color);
+ --at-color-bg: var(--card-background);
+ --at-color-bg-transl: rgba(66, 66, 66, 0.95);
+ --at-color-bg-grey: rgba(255, 255, 255, 0.08);
+ --at-color-bg-grey-transl: rgba(255, 255, 255, 0.06);
+ --at-color-bg-light: rgba(255, 255, 255, 0.08);
+ --at-color-border: var(--card-separator-color);
+ --at-color-font: var(--card-text-color-main);
+ --at-color-deep: var(--card-text-color-main);
+ --at-color-sub: var(--card-text-color-secondary);
+ --at-color-meta: var(--card-text-color-secondary);
+ --at-color-grey: var(--card-text-color-secondary);
+ --at-color-gradient: linear-gradient(
+ 180deg,
+ transparent,
+ var(--card-background)
+ );
+}
+
+.artalk code {
+ font-family: var(--code-font-family);
+}
+
+.artalk .atk-avatar img {
+ border-radius: var(--card-border-radius);
+}
+
+[data-scheme="dark"] .artalk .atk-avatar img {
+ filter: brightness(0.75);
+}
+
+[data-scheme="dark"] .artalk .atk-send-btn {
+ color: var(--accent-color-text);
+}
diff --git a/themes/stack/assets/scss/partials/comments/disqusjs.scss b/themes/stack/assets/scss/partials/comments/disqusjs.scss
new file mode 100644
index 0000000..eb270e3
--- /dev/null
+++ b/themes/stack/assets/scss/partials/comments/disqusjs.scss
@@ -0,0 +1,394 @@
+.disqus-container {
+ background-color: var(--card-background);
+ border-radius: var(--card-border-radius);
+ box-shadow: var(--shadow-l1);
+ padding: var(--card-padding);
+}
+
+#dsqjs * {
+ margin: 0;
+ padding: 0
+}
+
+#dsqjs a {
+ text-decoration: none;
+ color: #076dd0
+}
+
+#dsqjs .dsqjs-hide {
+ display: none!important
+}
+
+#dsqjs .dsqjs-disabled {
+ cursor: not-allowed;
+ opacity: .5
+}
+
+#dsqjs #dsqjs-msg {
+ text-align: center;
+ margin-top: 4px;
+ margin-bottom: 4px;
+ font-size: 14px
+}
+
+#dsqjs #dsqjs-msg .dsqjs-msg-btn {
+ cursor: pointer
+}
+
+#dsqjs .dsqjs-bullet {
+ line-height: 1.4;
+ margin: 0 2px
+}
+
+#dsqjs .dsqjs-bullet:after {
+ color: #c2c6cc;
+ content: "·";
+ font-weight: 700
+}
+
+#dsqjs .dsqjs-clearfix:after,#dsqjs .dsqjs-clearfix:before {
+ display: table;
+ content: "";
+ line-height: 0;
+ clear: both
+}
+
+#dsqjs .dsqjs-nav {
+ position: relative;
+ margin: 0 0 20px;
+ border-bottom: 2px solid #e7e9ee
+}
+
+#dsqjs ol,#dsqjs ul {
+ list-style: none;
+ list-style-type: none
+}
+
+#dsqjs .dsqjs-no-comment {
+ text-align: center;
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+ overflow: hidden;
+ color: #2a2e2e;
+ margin-bottom: 6px
+}
+
+#dsqjs .dsqjs-nav-tab {
+ float: left;
+ text-transform: capitalize;
+ font-size: 15px;
+ padding: 12px 8px;
+ color: #656c7a;
+ display: block;
+ margin: 0 15px 0 0;
+ font-weight: 700;
+ line-height: 1;
+ position: relative;
+ transition: all .2s ease-in-out
+}
+
+#dsqjs .dsqjs-nav-tab:last-child {
+ margin: 0
+}
+
+#dsqjs .dsqjs-tab-active {
+ color: #2a2e2e
+}
+
+#dsqjs .dsqjs-tab-active>span:after {
+ content: " ";
+ display: block;
+ height: 2px;
+ background-color: #076dd0!important;
+ position: absolute;
+ bottom: -5px;
+ left: 0;
+ right: 0
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-item {
+ position: relative;
+ margin-bottom: 16px
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-avatar {
+ float: left;
+ margin-right: 10px;
+ position: relative;
+ background: #dbdfe4;
+ padding: 0;
+ display: block;
+ border-radius: 4px
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-avatar img {
+ width: 44px;
+ height: 44px;
+ display: block;
+ border-radius: 4px
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-header {
+ line-height: 1;
+ font-size: 14px;
+ margin-bottom: 3px
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-post-author {
+ color: #656c7a;
+ font-weight: 700
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-admin-badge {
+ color: #fff;
+ background: #687a86;
+ padding: 1px 3px;
+ margin-left: 4px;
+ font-size: 12px;
+ line-height: 1;
+ font-weight: 700;
+ border-radius: 3px;
+ display: inline-block;
+ position: relative;
+ top: -1px;
+ left: 1px
+}
+
+#dsqjs .dsqjs-post-list .dsqjs-post-header .dsqjs-meta {
+ display: inline-block;
+ font-size: 12px;
+ color: #656c7a
+}
+
+#dsqjs .dsqjs-post-body {
+ font-size: 15px;
+ line-height: 1.5;
+ word-wrap: break-word;
+ overflow: hidden;
+ color: #2a2e2e
+}
+
+#dsqjs .dsqjs-post-body code {
+ padding: .2em .4em;
+ margin: 0;
+ font-size: 85%;
+ background: #f5f5f5;
+ color: inherit;
+ border-radius: 3px
+}
+
+#dsqjs .dsqjs-post-body pre {
+ padding: .5em;
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ border-radius: 3px;
+ background: #f5f5f5;
+ margin: .5em 0
+}
+
+#dsqjs .dsqjs-post-body blockquote {
+ padding: 0 .8em;
+ margin: .5em 0;
+ color: #6a737d;
+ border-left: .25em solid #dfe2e5
+}
+
+#dsqjs .dsqjs-post-body p:last-child {
+ margin: 0
+}
+
+#dsqjs .dsqjs-post-list.dsqjs-children>li {
+ margin-left: 30px
+}
+
+#dsqjs .dsqjs-post-list.dsqjs-children .dsqjs-post-avatar img {
+ width: 38px;
+ height: 38px
+}
+
+#dsqjs .dsqjs-load-more {
+ font-size: 14px;
+ font-weight: 400;
+ display: block;
+ text-align: center;
+ padding: 11px 14px;
+ margin: 0 0 24px;
+ background: #687a86;
+ color: #fff;
+ cursor: pointer
+}
+
+#dsqjs .dsqjs-load-more:hover {
+ opacity: .8
+}
+
+#dsqjs footer {
+ text-align: right;
+ line-height: 1.5;
+ padding-top: 10px;
+ padding-right: 10px;
+ border-top: 2px solid #e7e9ee;
+ margin-top: 12px;
+ font-weight: 700;
+ font-size: 16px;
+ color: #555
+}
+
+#dsqjs .dsqjs-disqus-logo {
+ background-image: url(https://c.disquscdn.com/next/embed/assets/img/sprite.654110a9206fd22f08cca0798e34a65e.png);
+ background-repeat: no-repeat;
+ display: inline-block;
+ background-size: 86px 40.5px;
+ height: 16.5px;
+ width: 86px;
+}
+
+#dsqjs .dsqjs-order {
+ display: flex;
+ float: right;
+ align-items: center;
+ margin-top: 10px;
+ margin-bottom: 12px
+}
+
+#dsqjs .dsqjs-order-radio {
+ display: none
+}
+
+#dsqjs .dsqjs-order-radio:checked+.dsqjs-order-label {
+ color: #fff;
+ background-color: #888
+}
+
+#dsqjs .dsqjs-order-label {
+ display: block;
+ height: 20px;
+ line-height: 20px;
+ margin-right: 10px;
+ font-size: 12px;
+ border-radius: 2px;
+ padding: 0 5px;
+ background-color: #dcdcdc;
+ cursor: pointer
+}
+
+#dsqjs p.dsqjs-has-more {
+ margin-bottom: 24px;
+ margin-left: 48px;
+ font-size: 13px;
+ line-height: 15px
+}
+
+#dsqjs p.dsqjs-has-more a.dsqjs-has-more-btn {
+ color: #656c7a;
+ text-decoration: underline;
+ cursor: pointer
+}
+
+@media (min-width: 768px) {
+ #dsqjs .dsqjs-post-list.dsqjs-children>li {
+ margin-left:48px
+ }
+
+ #dsqjs .dsqjs-post-list .dsqjs-post-avatar {
+ margin-right: 12px
+ }
+
+ #dsqjs .dsqjs-post-list .dsqjs-post-item {
+ margin-bottom: 20px
+ }
+}
+
+@media (min-width: 1024px) {
+ #dsqjs .dsqjs-post-list.dsqjs-children>li {
+ margin-left:60px
+ }
+}
+
+:root[data-scheme="light"] {
+ #dsqjs .dsqjs-disqus-logo {
+ background-position: 0 -7px;
+ }
+}
+
+:root[data-scheme="dark"] {
+ #dsqjs {
+ --t-s: rgba(255,255,255,0.9);
+ --alt: #3e4b5e;
+ --link-hover: #47a2e0;
+ --hover-bg: #3e4b5e;
+ --tag: #3e4b5e;
+ --border: #435266;
+ --pre: #3c495b;
+ --c-bg: #2f3947;
+ --code: #c3c7cb;
+ --kbd: #4e5f77;
+ --hl: #abb2bf;
+ --hlc: #808895;
+ --hlk: #c678dd;
+ --hln: #e06c75;
+ --hll: #56b6c2;
+ --hls: #98c379;
+ --hlt: #e6c07b;
+ --hlv: #d19a66;
+ --bg: #181c27;
+ --main: #252d38;
+ --t: rgba(255,255,255,0.86);
+ --t-l: rgba(255,255,255,0.66);
+ --logo: #fff;
+ --link: #38a3fd;
+ --title: rgba(255,255,255,0.92);
+ --fab: #364151;
+ --shadow: none;
+ }
+
+ #disqus_thread {
+ color: var(--body-text-color)
+ }
+
+ #dsqjs #dsqjs-msg {
+ color: var(--t)
+ }
+
+ #dsqjs a {
+ color:var(--link)
+ }
+
+ #dsqjs a:focus,#dsqjs a:hover {
+ color: var(--link-hover)
+ }
+
+ #dsqjs .dsqjs-disqus-logo {
+ background-position: 0 -24px;
+ }
+
+ #dsqjs .dsqjs-nav,#dsqjs footer {
+ border-color: var(--hlc)
+ }
+
+ #dsqjs .dsqjs-load-more,#dsqjs .dsqjs-load-more:hover,#dsqjs .dsqjs-nav-tab,#dsqjs .dsqjs-no-comment,#dsqjs .dsqjs-post-content {
+ color: var(--t)
+ }
+
+ #dsqjs .dsqjs-order-label {
+ background-color: var(--hlc)
+ }
+
+ #dsqjs .dsqjs-order-radio:checked+.dsqjs-order-label {
+ background-color: var(--kbd)
+ }
+
+ #dsqjs .dsqjs-tab-active>span:after {
+ background-color: #2e9fff
+ }
+
+ #dsqjs .dsqjs-footer,#dsqjs .dsqjs-meta {
+ color: var(--t-l)
+ }
+
+ #dsqjs .dsqjs-post-body blockquote {
+ border-color: var(--border)
+ }
+}
diff --git a/themes/stack/assets/scss/partials/cookies.scss b/themes/stack/assets/scss/partials/cookies.scss
new file mode 100644
index 0000000..67dc82f
--- /dev/null
+++ b/themes/stack/assets/scss/partials/cookies.scss
@@ -0,0 +1,199 @@
+.cookie-banner {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 9999;
+ padding: var(--container-padding);
+ pointer-events: none;
+
+ &[aria-hidden="true"] {
+ display: none;
+ }
+}
+
+.cookie-banner__content {
+ max-width: 900px;
+ margin: 0 auto;
+ background: var(--card-background);
+ border-radius: var(--card-border-radius);
+ box-shadow: var(--shadow-l2);
+ padding: var(--card-padding);
+ display: flex;
+ flex-direction: column;
+ gap: var(--spacing-md);
+ pointer-events: auto;
+
+ @include respond(md) {
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: var(--spacing-lg);
+ }
+}
+
+.cookie-banner__text {
+ flex: 1;
+ min-width: 200px;
+
+ strong {
+ display: block;
+ color: var(--card-text-color-main);
+ font-size: 1.6rem;
+ margin-bottom: var(--spacing-xs);
+ }
+
+ p {
+ color: var(--card-text-color-secondary);
+ font-size: 1.4rem;
+ line-height: 1.6;
+ margin: 0;
+ }
+}
+
+.cookie-banner__actions {
+ display: flex;
+ gap: var(--spacing-sm);
+ flex-shrink: 0;
+}
+
+.cookie-banner__settings-link {
+ width: auto;
+ align-self: flex-start;
+ background: none;
+ border: none;
+ color: var(--accent-color);
+ font-size: 1.3rem;
+ cursor: pointer;
+ padding: 5px;
+
+ &:hover {
+ text-decoration: underline;
+ }
+
+ @include respond(md) {
+ margin-left: auto;
+ align-self: center;
+ }
+}
+
+.cookie-btn {
+ padding: 10px 20px;
+ border-radius: var(--tag-border-radius);
+ font-size: 1.4rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ border: none;
+
+ &--primary {
+ background: var(--accent-color);
+ color: var(--accent-color-text);
+
+ &:hover {
+ background: var(--accent-color-darker);
+ }
+ }
+
+ &--secondary {
+ background: transparent;
+ color: var(--card-text-color-main);
+ border: 1.5px solid var(--card-separator-color);
+
+ &:hover {
+ background: var(--card-background-selected);
+ }
+ }
+}
+
+// Cookie settings panel
+.cookie-settings {
+ padding-top: 20px;
+ border-top: 1.5px solid var(--card-separator-color);
+
+ &[aria-hidden="true"] {
+ display: none;
+ }
+
+ h3 {
+ color: var(--card-text-color-main);
+ font-size: 1.6rem;
+ margin: 0 0 var(--spacing-md) 0;
+ }
+
+ &__actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: var(--spacing-sm);
+ margin-top: var(--spacing-lg);
+ }
+}
+
+.cookie-category {
+ padding: var(--spacing-md) 0;
+ border-bottom: 1px solid var(--card-separator-color);
+
+ &:last-of-type {
+ border-bottom: none;
+ }
+
+ label {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ cursor: pointer;
+
+ input[type="checkbox"] {
+ width: 18px;
+ height: 18px;
+ accent-color: var(--accent-color);
+ cursor: pointer;
+
+ &:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+ }
+ }
+
+ strong {
+ color: var(--card-text-color-main);
+ font-size: 1.5rem;
+ }
+ }
+
+ p {
+ color: var(--card-text-color-secondary);
+ font-size: 1.3rem;
+ margin: 8px 0 0 28px;
+ line-height: 1.5;
+ }
+}
+
+// Footer link for reopening settings
+.cookie-settings-link {
+ display: inline-block;
+ color: var(--body-text-color);
+ font-size: 1.2rem;
+ cursor: pointer;
+ background: none;
+ border: none;
+ padding: 0;
+
+ &:hover {
+ color: var(--accent-color);
+ text-decoration: underline;
+ }
+}
+
+// Comments placeholder when consent not given
+.consent-placeholder {
+ @include card-style;
+ padding: var(--card-padding);
+ text-align: center;
+ color: var(--card-text-color-secondary);
+ font-size: 1.4rem;
+
+ p {
+ margin: 0 0 var(--spacing-md) 0;
+ }
+}
\ No newline at end of file
diff --git a/themes/stack/assets/scss/partials/footer.scss b/themes/stack/assets/scss/partials/footer.scss
new file mode 100644
index 0000000..4d1b9c7
--- /dev/null
+++ b/themes/stack/assets/scss/partials/footer.scss
@@ -0,0 +1,30 @@
+footer.site-footer {
+ padding: var(--spacing-lg) 0 var(--section-separation) 0;
+ font-size: 1.4rem;
+ line-height: 1.75;
+
+ &:before {
+ content: "";
+ display: block;
+ height: 3px;
+ width: 50px;
+ background: var(--body-text-color);
+ margin-bottom: var(--spacing-lg);
+ }
+
+ .copyright {
+ color: var(--accent-color);
+ font-weight: bold;
+ margin-bottom: var(--spacing-xs);
+ }
+
+ .powerby {
+ color: var(--body-text-color);
+ font-weight: normal;
+ font-size: 1.2rem;
+
+ a {
+ color: var(--body-text-color);
+ }
+ }
+}
diff --git a/themes/stack/assets/scss/partials/highlight/common.scss b/themes/stack/assets/scss/partials/highlight/common.scss
new file mode 100644
index 0000000..e2fabbf
--- /dev/null
+++ b/themes/stack/assets/scss/partials/highlight/common.scss
@@ -0,0 +1,434 @@
+/* Background */
+.chroma {
+ color: $color;
+ background-color: $background-color;
+}
+
+/* Other */
+.chroma .x {
+}
+
+/* Error */
+.chroma .err {
+ color: $error-color;
+}
+
+/* LineTableTD */
+.chroma .lntd {
+ vertical-align: top;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+/* LineTable */
+.chroma .lntable {
+ border-spacing: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: 100%;
+ display: block;
+
+ > tbody {
+ display: block;
+ width: 100%;
+ > tr {
+ display: flex;
+ width: 100%;
+ > td:last-child {
+ overflow-x: auto;
+ }
+ }
+ }
+}
+
+/* LineHighlight */
+.chroma .hl {
+ display: block;
+ width: 100%;
+ background-color: #ffffcc;
+}
+
+/* LineNumbersTable */
+.chroma .lnt {
+ margin-right: 0;
+ user-select: none;
+ padding: 0 0.4em 0 0.4em;
+ color: #7f7f7f;
+ display: block;
+}
+
+/* Optimise code block selection experience */
+span.line {
+ margin-left: 0.4em;
+}
+
+/* LineNumbers */
+.chroma .ln {
+ margin-right: 0.4em;
+ padding: 0 0.4em 0 0.4em;
+ color: #7f7f7f;
+}
+
+/* Keyword */
+.chroma .k {
+ color: $keyword-color;
+}
+
+/* KeywordConstant */
+.chroma .kc {
+ color: $keyword-color;
+}
+
+/* KeywordDeclaration */
+.chroma .kd {
+ color: $keyword-color;
+}
+
+/* KeywordNamespace */
+.chroma .kn {
+ color: #f92672;
+}
+
+/* KeywordPseudo */
+.chroma .kp {
+ color: $keyword-color;
+}
+
+/* KeywordReserved */
+.chroma .kr {
+ color: $keyword-color;
+}
+
+/* KeywordType */
+.chroma .kt {
+ color: $keyword-color;
+}
+
+/* Name */
+.chroma .n {
+ color: $text-color;
+}
+
+/* NameAttribute */
+.chroma .na {
+ color: $name-color;
+}
+
+/* NameBuiltin */
+.chroma .nb {
+ color: $text-color;
+}
+
+/* NameBuiltinPseudo */
+.chroma .bp {
+ color: $text-color;
+}
+
+/* NameClass */
+.chroma .nc {
+ color: $name-color;
+}
+
+/* NameConstant */
+.chroma .no {
+ color: $keyword-color;
+}
+
+/* NameDecorator */
+.chroma .nd {
+ color: $name-color;
+}
+
+/* NameEntity */
+.chroma .ni {
+ color: $text-color;
+}
+
+/* NameException */
+.chroma .ne {
+ color: $name-color;
+}
+
+/* NameFunction */
+.chroma .nf {
+ color: $name-color;
+}
+
+/* NameFunctionMagic */
+.chroma .fm {
+ color: $text-color;
+}
+
+/* NameLabel */
+.chroma .nl {
+ color: $text-color;
+}
+
+/* NameNamespace */
+.chroma .nn {
+ color: $text-color;
+}
+
+/* NameOther */
+.chroma .nx {
+ color: $name-color;
+}
+
+/* NameProperty */
+.chroma .py {
+ color: $text-color;
+}
+
+/* NameTag */
+.chroma .nt {
+ color: #f92672;
+}
+
+/* NameVariable */
+.chroma .nv {
+ color: $text-color;
+}
+
+/* NameVariableClass */
+.chroma .vc {
+ color: $text-color;
+}
+
+/* NameVariableGlobal */
+.chroma .vg {
+ color: $text-color;
+}
+
+/* NameVariableInstance */
+.chroma .vi {
+ color: $text-color;
+}
+
+/* NameVariableMagic */
+.chroma .vm {
+ color: $text-color;
+}
+
+/* Literal */
+.chroma .l {
+ color: #ae81ff;
+}
+
+/* LiteralDate */
+.chroma .ld {
+ color: $literal-color;
+}
+
+/* LiteralString */
+.chroma .s {
+ color: $literal-color;
+}
+
+/* LiteralStringAffix */
+.chroma .sa {
+ color: $literal-color;
+}
+
+/* LiteralStringBacktick */
+.chroma .sb {
+ color: $literal-color;
+}
+
+/* LiteralStringChar */
+.chroma .sc {
+ color: $literal-color;
+}
+
+/* LiteralStringDelimiter */
+.chroma .dl {
+ color: $literal-color;
+}
+
+/* LiteralStringDoc */
+.chroma .sd {
+ color: $literal-color;
+}
+
+/* LiteralStringDouble */
+.chroma .s2 {
+ color: $literal-color;
+}
+
+/* LiteralStringEscape */
+.chroma .se {
+ color: #ae81ff;
+}
+
+/* LiteralStringHeredoc */
+.chroma .sh {
+ color: $literal-color;
+}
+
+/* LiteralStringInterpol */
+.chroma .si {
+ color: $literal-color;
+}
+
+/* LiteralStringOther */
+.chroma .sx {
+ color: $literal-color;
+}
+
+/* LiteralStringRegex */
+.chroma .sr {
+ color: $literal-color;
+}
+
+/* LiteralStringSingle */
+.chroma .s1 {
+ color: $literal-color;
+}
+
+/* LiteralStringSymbol */
+.chroma .ss {
+ color: $literal-color;
+}
+
+/* LiteralNumber */
+.chroma .m {
+ color: #ae81ff;
+}
+
+/* LiteralNumberBin */
+.chroma .mb {
+ color: #ae81ff;
+}
+
+/* LiteralNumberFloat */
+.chroma .mf {
+ color: #ae81ff;
+}
+
+/* LiteralNumberHex */
+.chroma .mh {
+ color: #ae81ff;
+}
+
+/* LiteralNumberInteger */
+.chroma .mi {
+ color: #ae81ff;
+}
+
+/* LiteralNumberIntegerLong */
+.chroma .il {
+ color: #ae81ff;
+}
+
+/* LiteralNumberOct */
+.chroma .mo {
+ color: #ae81ff;
+}
+
+/* Operator */
+.chroma .o {
+ color: #f92672;
+}
+
+/* OperatorWord */
+.chroma .ow {
+ color: #f92672;
+}
+
+/* Punctuation */
+.chroma .p {
+ color: $text-color;
+}
+
+/* Comment */
+.chroma .c {
+ color: #75715e;
+}
+
+/* CommentHashbang */
+.chroma .ch {
+ color: #75715e;
+}
+
+/* CommentMultiline */
+.chroma .cm {
+ color: #75715e;
+}
+
+/* CommentSingle */
+.chroma .c1 {
+ color: #75715e;
+}
+
+/* CommentSpecial */
+.chroma .cs {
+ color: #75715e;
+}
+
+/* CommentPreproc */
+.chroma .cp {
+ color: #75715e;
+}
+
+/* CommentPreprocFile */
+.chroma .cpf {
+ color: #75715e;
+}
+
+/* Generic */
+.chroma .g {
+}
+
+/* GenericDeleted */
+.chroma .gd {
+ color: #f92672;
+}
+
+/* GenericEmph */
+.chroma .ge {
+ font-style: italic;
+}
+
+/* GenericError */
+.chroma .gr {
+}
+
+/* GenericHeading */
+.chroma .gh {
+}
+
+/* GenericInserted */
+.chroma .gi {
+ color: $name-color;
+}
+
+/* GenericOutput */
+.chroma .go {
+}
+
+/* GenericPrompt */
+.chroma .gp {
+}
+
+/* GenericStrong */
+.chroma .gs {
+ font-weight: bold;
+}
+
+/* GenericSubheading */
+.chroma .gu {
+ color: #75715e;
+}
+
+/* GenericTraceback */
+.chroma .gt {
+}
+
+/* GenericUnderline */
+.chroma .gl {
+}
+
+/* TextWhitespace */
+.chroma .w {
+}
diff --git a/themes/stack/assets/scss/partials/highlight/dark.scss b/themes/stack/assets/scss/partials/highlight/dark.scss
new file mode 100644
index 0000000..0d3f330
--- /dev/null
+++ b/themes/stack/assets/scss/partials/highlight/dark.scss
@@ -0,0 +1,14 @@
+/*
+* Style: monokai
+* https://xyproto.github.io/splash/docs/monokai.html
+*/
+
+$color: #f8f8f2;
+$background-color: #272822;
+$error-color: #bb0064;
+$keyword-color: #66d9ef;
+$text-color: $color;
+$name-color: #a6e22e;
+$literal-color: #e6db74;
+
+@import "common.scss";
diff --git a/themes/stack/assets/scss/partials/highlight/light.scss b/themes/stack/assets/scss/partials/highlight/light.scss
new file mode 100644
index 0000000..174b649
--- /dev/null
+++ b/themes/stack/assets/scss/partials/highlight/light.scss
@@ -0,0 +1,14 @@
+/*
+* Style: monokailight
+* https://xyproto.github.io/splash/docs/monokailight.html
+*/
+
+$color: #272822;
+$background-color: #fafafa;
+$error-color: #960050;
+$keyword-color: #00a8c8;
+$text-color: #111111;
+$name-color: #75af00;
+$literal-color: #d88200;
+
+@import "common.scss";
diff --git a/themes/stack/assets/scss/partials/layout/404.scss b/themes/stack/assets/scss/partials/layout/404.scss
new file mode 100644
index 0000000..d9d8752
--- /dev/null
+++ b/themes/stack/assets/scss/partials/layout/404.scss
@@ -0,0 +1,6 @@
+.not-found-card {
+ background-color: var(--card-background);
+ box-shadow: var(--shadow-l1);
+ border-radius: var(--card-border-radius);
+ padding: var(--card-padding);
+}
diff --git a/themes/stack/assets/scss/partials/layout/article.scss b/themes/stack/assets/scss/partials/layout/article.scss
new file mode 100644
index 0000000..54607ab
--- /dev/null
+++ b/themes/stack/assets/scss/partials/layout/article.scss
@@ -0,0 +1,486 @@
+.article-page {
+ &.hide-sidebar-sm .left-sidebar {
+ display: none;
+
+ @include respond(md) {
+ display: inherit;
+ }
+ }
+
+ .main-article {
+ background: var(--card-background);
+ border-radius: var(--card-border-radius);
+ box-shadow: var(--shadow-l1);
+ overflow: hidden;
+
+ .article-header {
+ .article-image {
+ img {
+ height: auto;
+ width: 100%;
+ max-height: 50vh;
+ object-fit: cover;
+ }
+ }
+
+ .article-details {
+ padding: var(--card-padding);
+ padding-bottom: 0;
+ }
+ }
+
+ .article-content {
+ margin: var(--card-padding) 0;
+ color: var(--card-text-color-main);
+
+ .footnotes {
+ font-family: var(--base-font-family);
+ }
+
+ img {
+ max-width: 100%;
+ height: auto;
+ }
+ }
+
+ .article-footer {
+ margin: var(--card-padding);
+ gap: var(--spacing-2xl);
+ }
+ }
+}
+
+.toc-nav {
+ overflow-x: auto;
+ max-height: 75vh;
+
+ ol,
+ ul {
+ margin: 0;
+ padding: 0;
+ }
+
+ ol {
+ list-style-type: none;
+ counter-reset: item;
+
+ li a:first-of-type::before {
+ counter-increment: item;
+ content: counters(item, ".") ". ";
+ font-weight: bold;
+ margin-right: 5px;
+ }
+ }
+
+ &>ul {
+ padding: 0 1em;
+ }
+
+ li {
+ margin: var(--spacing-md) 0 var(--spacing-md) var(--spacing-lg);
+ padding: var(--spacing-xs);
+
+ &>ol,
+ &>ul {
+ margin-top: var(--spacing-sm);
+ padding-left: var(--spacing-sm);
+ margin-bottom: calc(var(--spacing-xs) * -1);
+
+ &>li:last-child {
+ margin-bottom: 0;
+ }
+ }
+ }
+
+ li.active-class>a {
+ border-left: var(--heading-border-size) solid var(--accent-color);
+ font-weight: bold;
+ }
+
+ ul li.active-class>a {
+ display: block;
+ }
+
+ @function repeat($str, $n) {
+ $result: "";
+
+ @for $_ from 0 to $n {
+ $result: $result + $str;
+ }
+
+ @return $result;
+ }
+
+ // Support up to 6 levels of indentation for lists in ToCs
+ @for $i from 0 to 5 {
+ &>ul #{repeat("> li > ul", $i)}>li.active-class>a {
+ $n: 25 + $i * 35;
+ margin-left: calc(-#{$n}px - 1em);
+ padding-left: calc(#{$n}px + 1em - var(--heading-border-size));
+ }
+
+ &>ol #{repeat("> li > ol", $i)}>li.active-class>a {
+ $n: 9 + $i * 35;
+ margin-left: calc(-#{$n}px - 1em);
+ padding-left: calc(#{$n}px + 1em - var(--heading-border-size));
+ display: block;
+ }
+ }
+}
+
+.widget--toc,
+.article-toc {
+ display: flex;
+ flex-direction: column;
+ color: var(--card-text-color-main);
+}
+
+.widget--toc {
+ background-color: var(--card-background);
+ border-radius: var(--card-border-radius);
+ box-shadow: var(--shadow-l1);
+ overflow: hidden;
+}
+
+.article-toc {
+ padding: 0 var(--card-padding);
+ margin-top: var(--spacing-lg);
+
+ @include respond(lg) {
+ display: none;
+ }
+
+ details {
+ background-color: var(--card-background);
+ border-radius: var(--card-border-radius);
+ box-shadow: var(--shadow-l2);
+
+ &[open] {
+ .article-toc-title {
+ svg {
+ transform: rotate(90deg);
+ }
+ }
+ }
+
+ summary {
+ list-style: none;
+ padding: var(--spacing-md) var(--spacing-lg);
+ cursor: pointer;
+
+ &::-webkit-details-marker {
+ display: none;
+ }
+
+ .article-toc-title {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ text-transform: uppercase;
+ font-size: 1.4rem;
+ font-weight: bold;
+ color: var(--card-text-color-tertiary);
+
+ svg {
+ width: 20px;
+ height: 20px;
+ stroke-width: 1.33;
+ transition: transform 0.3s ease;
+ }
+ }
+ }
+ }
+}
+
+.article-content {
+ font-family: var(--article-font-family);
+ font-size: var(--article-font-size);
+ padding: 0 var(--card-padding);
+ line-height: var(--article-line-height);
+
+ &>p {
+ margin: 1.5em 0;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ margin-inline-start: calc((var(--card-padding)) * -1);
+ padding-inline-start: calc(var(--card-padding) - var(--heading-border-size));
+ border-inline-start: var(--heading-border-size) solid var(--accent-color);
+ position: relative;
+
+ a.header-anchor {
+ transition: opacity 0.3s ease;
+ opacity: 0;
+ position: absolute;
+ left: 0;
+ width: var(--card-padding);
+ text-align: center;
+ color: var(--accent-color);
+
+ &:before {
+ content: "#";
+ }
+ }
+
+ &:hover,
+ &:focus {
+ a.header-anchor {
+ opacity: 1;
+ }
+ }
+ }
+
+ figure {
+ text-align: center;
+
+ figcaption {
+ font-size: 1.4rem;
+ color: var(--card-text-color-secondary);
+ }
+ }
+
+ blockquote {
+ position: relative;
+ margin: 1.5em 0;
+ border-inline-start: var(--blockquote-border-size) solid var(--card-separator-color);
+ padding: var(--spacing-md) calc(var(--card-padding) - var(--blockquote-border-size));
+ background-color: var(--blockquote-background-color);
+
+ .cite {
+ display: block;
+ text-align: right;
+ font-size: 0.75em;
+
+ a {
+ text-decoration: underline;
+ }
+ }
+ }
+
+ blockquote.alert {
+ .alert-header {
+ display: flex;
+ align-items: center;
+ gap: 0.5em;
+ font-weight: bold;
+ }
+
+ .alert-body {
+ > :last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ $alert-types: note, tip, important, warning, caution;
+
+ @each $type in $alert-types {
+ &.alert-#{$type} {
+ border-color: var(--alert-#{$type}-color);
+ background-color: var(--alert-#{$type}-background);
+
+ .alert-title {
+ color: var(--alert-#{$type}-color);
+ }
+ }
+ }
+ }
+
+ hr {
+ width: 100px;
+ margin: 40px auto;
+ background: var(--card-text-color-tertiary);
+ height: 2px;
+ border: 0;
+ opacity: 0.55;
+ }
+
+ code {
+ color: var(--code-text-color);
+ background-color: var(--code-background-color);
+ padding: 2px 4px;
+ border-radius: var(--tag-border-radius);
+ font-family: var(--code-font-family);
+ }
+
+ a,
+ code {
+ word-break: break-word;
+ }
+
+ .gallery {
+ position: relative;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ margin: 1.5em 0;
+ gap: var(--spacing-sm);
+
+ figure {
+ margin: 0;
+ }
+ }
+
+ pre {
+ overflow-x: auto;
+ display: block;
+ background-color: var(--pre-background-color);
+ color: var(--pre-text-color);
+ font-family: var(--code-font-family);
+ line-height: 1.428571429;
+ word-break: break-all;
+ padding: var(--card-padding);
+
+ // keep Codeblocks LTR
+ [dir="rtl"] & {
+ direction: ltr;
+ }
+
+ code {
+ color: unset;
+ border: none;
+ background: none;
+ padding: 0;
+ }
+ }
+
+ .highlight {
+ background-color: var(--pre-background-color);
+ padding: var(--card-padding);
+ position: relative;
+
+ pre {
+ background-color: transparent;
+ }
+
+ &:hover {
+ .copyCodeButton {
+ opacity: 1;
+ }
+ }
+
+ // keep Codeblocks LTR
+ [dir="rtl"] & {
+ direction: ltr;
+ }
+
+ pre {
+ padding: 0;
+ margin: 0;
+ width: auto;
+ }
+ }
+
+ .copyCodeButton {
+ position: absolute;
+ top: calc(var(--card-padding));
+ right: calc(var(--card-padding));
+ background: var(--card-background);
+ border: none;
+ box-shadow: var(--shadow-l2);
+ border-radius: var(--tag-border-radius);
+ padding: 8px 16px;
+ color: var(--card-text-color-main);
+ cursor: pointer;
+ font-size: 14px;
+ opacity: 0;
+ transition: opacity 0.3s ease;
+ }
+
+ .table-wrapper {
+ padding: 0 var(--card-padding);
+ overflow-x: auto;
+ display: block;
+ }
+
+ table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ margin-bottom: 1.5em;
+ font-size: 0.96em;
+ }
+
+ th,
+ td {
+ text-align: left;
+ padding: 4px 8px 4px 10px;
+ border: 1px solid var(--table-border-color);
+ }
+
+ td {
+ vertical-align: top;
+ }
+
+ tr:nth-child(even) {
+ background-color: var(--tr-even-background-color);
+ }
+
+ .twitter-tweet {
+ color: var(--card-text-color-main);
+ }
+
+ .video-wrapper {
+ position: relative;
+ width: 100%;
+ height: 0;
+ padding-bottom: 56.25%;
+ overflow: hidden;
+
+ &>iframe,
+ &>video {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ border: 0;
+ }
+ }
+
+ .gitlab-embed-snippets {
+ margin: 0 !important;
+
+ .file-holder.snippet-file-content {
+ margin-block-end: 0 !important;
+ margin-block-start: 0 !important;
+ margin-left: calc((var(--card-padding)) * -1) !important;
+ margin-right: calc((var(--card-padding)) * -1) !important;
+ padding: 0 var(--card-padding) !important;
+ }
+ }
+
+ /// Negative margins
+ blockquote,
+ figure,
+ .highlight,
+ pre,
+ .gallery,
+ .video-wrapper,
+ .table-wrapper,
+ .s_video_simple {
+ margin-left: calc((var(--card-padding)) * -1);
+ margin-right: calc((var(--card-padding)) * -1);
+ width: calc(100% + var(--card-padding) * 2);
+ }
+
+ /// Make long KaTeX equations scrollable in the x-axis
+ .katex-display>.katex {
+ overflow-x: auto;
+ overflow-y: hidden;
+ }
+
+ kbd {
+ border: 1px solid var(--kbd-border-color);
+ font-weight: bold;
+ font-size: 0.9em;
+ line-height: 1;
+ padding: 2px 4px;
+ border-radius: 4px;
+ display: inline-block;
+ }
+}
\ No newline at end of file
diff --git a/themes/stack/assets/scss/partials/layout/list.scss b/themes/stack/assets/scss/partials/layout/list.scss
new file mode 100644
index 0000000..711bec0
--- /dev/null
+++ b/themes/stack/assets/scss/partials/layout/list.scss
@@ -0,0 +1,157 @@
+.section-card {
+ @include card-style;
+ padding: var(--small-card-padding);
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-lg);
+
+ --separation: 15px;
+
+ .section-term {
+ font-size: 2.2rem;
+ margin: 0;
+ color: var(--card-text-color-main);
+ }
+
+ .section-description {
+ font-weight: normal;
+ color: var(--card-text-color-secondary);
+ font-size: 1.6rem;
+ margin: 0;
+ }
+
+ .section-details {
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ .section-image {
+ img {
+ width: 60px;
+ height: 60px;
+ object-fit: cover;
+ }
+ }
+
+ .section-count {
+ color: var(--card-text-color-tertiary);
+ font-size: 1.4rem;
+ margin: 0;
+ font-weight: bold;
+ text-transform: uppercase;
+ }
+}
+
+@property --left-edge-fade-size {
+ syntax: "Test
+ + +``` + +### Code block indented with four spaces + + + + + +Test
+ + + +### Diff code block + +```diff +[dependencies.bevy] +git = "https://github.com/bevyengine/bevy" +rev = "11f52b8c72fc3a568e8bb4a4cd1f3eb025ac2e13" +- features = ["dynamic"] ++ features = ["jpeg", "dynamic"] +``` + +### One line code block + +```html +A paragraph
+``` + +## List Types + +### Ordered List + +1. First item +2. Second item +3. Third item + +### Unordered List + +* List item +* Another item +* And another item + +### Nested list + +* Fruit + * Apple + * Orange + * Banana +* Dairy + * Milk + * Cheese + +## Other Elements — abbr, sub, sup, kbd, mark + +GIF is a bitmap image format. + +H2O + +Xn + Yn = Zn + +Press CTRL + ALT + Delete to end the session. + +Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures. \ No newline at end of file diff --git a/themes/stack/demo/content/post/Markdown Syntax/index.zh.md b/themes/stack/demo/content/post/Markdown Syntax/index.zh.md new file mode 100644 index 0000000..14a8c86 --- /dev/null +++ b/themes/stack/demo/content/post/Markdown Syntax/index.zh.md @@ -0,0 +1,168 @@ +--- +title: Markdown 语法指南 +date: 2026-01-25 +description: 展示基本 Markdown 语法和 HTML 元素格式的示例文章。 +tags: + - markdown + - css + - html + - themes +categories: + - Documentation +image: pawel-czerwinski-8uZPynIu-rQ-unsplash.jpg +--- + +这篇文章提供了可以在 Hugo 内容文件中使用的基本 Markdown 语法示例,同时也展示了 Hugo 主题中基本 HTML 元素是否应用了 CSS 装饰。 + + + +## 标题 (Headings) + +以下 HTML `Test
+ + +``` + +### 使用四个空格缩进的代码块 + + + + + +Test
+ + + +### Diff 代码块 + +```diff +[dependencies.bevy] +git = "https://github.com/bevyengine/bevy" +rev = "11f52b8c72fc3a568e8bb4a4cd1f3eb025ac2e13" +- features = ["dynamic"] ++ features = ["jpeg", "dynamic"] +``` + +### 单行代码块 + +```html +A paragraph
+``` + +## 列表类型 (List Types) + +### 有序列表 + +1. 第一项 +2. 第二项 +3. 第三项 + +### 无序列表 + +* 列表项 +* 另一项 +* 还有一项 + +### 嵌套列表 + +* 水果 + * 苹果 + * 橘子 + * 香蕉 +* 乳制品 + * 牛奶 + * 奶酪 + +## 其他元素 — abbr, sub, sup, kbd, mark + +GIF 是一种位图图像格式。 + +H2O + +Xn + Yn = Zn + +按 CTRL + ALT + Delete 结束会话。 + +大多数蝾螈是夜行性的,捕食昆虫、蠕虫和其他小型生物。 diff --git a/themes/stack/demo/content/post/Markdown Syntax/pawel-czerwinski-8uZPynIu-rQ-unsplash.jpg b/themes/stack/demo/content/post/Markdown Syntax/pawel-czerwinski-8uZPynIu-rQ-unsplash.jpg new file mode 100644 index 0000000..1634e85 Binary files /dev/null and b/themes/stack/demo/content/post/Markdown Syntax/pawel-czerwinski-8uZPynIu-rQ-unsplash.jpg differ diff --git a/themes/stack/demo/content/post/Math Typesetting/index.md b/themes/stack/demo/content/post/Math Typesetting/index.md new file mode 100644 index 0000000..c8ed973 --- /dev/null +++ b/themes/stack/demo/content/post/Math Typesetting/index.md @@ -0,0 +1,61 @@ +--- +title: Math Typesetting +date: 2026-01-24 +description: Guide to enabling and using KaTeX in the Stack theme +math: true +categories: + - Documentation +slug: math-typesetting +--- + +The Stack theme supports rendering mathematical notation using [KaTeX](https://katex.org/). + + + +## Enabling KaTeX + +### Per-page basis + +To enable KaTeX for a specific post, include `math: true` in the post's frontmatter: + +```yaml +--- +title: "My Math Post" +math: true +--- +``` + +### Globally + +To enable KaTeX for all posts, set `article.math` to `true` in your site configuration (`params.yaml` or `params.toml`): + +```yaml +article: + math: true +``` + +## Examples + +### Inline Math + +You can include math inline by wrapping the expression in single dollar signs `$`. + +For example: `$ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $` renders as $ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $ + +### Block Math + +For larger equations, use double dollar signs `$$` to create a math block. + +$$ + \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } +$$ + +### More Complex Formula + +$$ +f(a) = \frac{1}{2\pi i} \oint_\gamma \frac{f(z)}{z-a} dz +$$ + +--- + +**Note:** For a full list of supported TeX functions, refer to the [KaTeX documentation](https://katex.org/docs/supported.html). diff --git a/themes/stack/demo/content/post/Math Typesetting/index.zh.md b/themes/stack/demo/content/post/Math Typesetting/index.zh.md new file mode 100644 index 0000000..bf5e9d3 --- /dev/null +++ b/themes/stack/demo/content/post/Math Typesetting/index.zh.md @@ -0,0 +1,61 @@ +--- +title: 数学公式 +date: 2026-01-24 +description: 在 Stack 主题中启用和使用 KaTeX 的指南 +math: true +categories: + - Documentation +slug: math-typesetting +--- + +Stack 主题支持使用 [KaTeX](https://katex.org/) 渲染数学公式。 + + + +## 启用 KaTeX + +### 按页面启用 + +要在特定文章中启用 KaTeX,请在文章的前置参数(frontmatter)中包含 `math: true`: + +```yaml +--- +title: "我的数学文章" +math: true +--- +``` + +### 全局启用 + +要为所有文章启用 KaTeX,请在网站配置(`params.yaml` 或 `params.toml`)中将 `article.math` 设置为 `true`: + +```yaml +article: + math: true +``` + +## 示例 + +### 行内公式 + +你可以通过将表达式包裹在单个美元符号 `$` 中来包含行内公式。 + +例如:`$ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $` 将渲染为 $ \varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887… $ + +### 块级公式 + +对于较大的方程式,请使用双美元符号 `$$` 创建数学块。 + +$$ + \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } } +$$ + +### 更复杂的公式 + +$$ +f(a) = \frac{1}{2\pi i} \oint_\gamma \frac{f(z)}{z-a} dz +$$ + +--- + +**注意:** 有关受支持的 TeX 函数的完整列表,请参阅 [KaTeX 文档](https://katex.org/docs/supported.html)。 diff --git a/themes/stack/demo/content/post/mermaid-diagrams/index.md b/themes/stack/demo/content/post/mermaid-diagrams/index.md new file mode 100644 index 0000000..0914b6f --- /dev/null +++ b/themes/stack/demo/content/post/mermaid-diagrams/index.md @@ -0,0 +1,603 @@ +--- +author: Hugo Authors +title: Mermaid Diagrams +date: 2025-12-23 +description: A comprehensive guide to creating diagrams with Mermaid in Hugo +categories: + - Themes + - Syntax +tags: + - Mermaid + - Diagrams + - Markdown +--- + +This theme supports [Mermaid](https://mermaid.js.org/) diagrams directly in your Markdown content. Mermaid lets you create diagrams and visualizations using text and code. + + + +## About Mermaid.js + +This theme integrates [Mermaid.js](https://mermaid.js.org/) (v11) to render diagrams from text definitions within Markdown code blocks. Mermaid is a JavaScript-based diagramming and charting tool that uses text-based syntax inspired by Markdown. + +For complete syntax documentation, see the [Mermaid.js documentation](https://mermaid.js.org/intro/syntax-reference.html). + +## Getting Started + +To create a Mermaid diagram, simply use a fenced code block with `mermaid` as the language identifier: + +````markdown +```mermaid +graph TD + A[Start] --> B[Process] + B --> C[End] +``` +```` + +The diagram will be automatically rendered when the page loads. + +## Features + +- **Auto-detection**: Mermaid script only loads on pages that contain diagrams +- **Theme Support**: Diagrams automatically adapt to light/dark mode +- **HTML Labels**: Support for HTML content in labels (like ````mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
diff --git a/themes/stack/demo/content/post/shortcodes/index.md b/themes/stack/demo/content/post/shortcodes/index.md
new file mode 100644
index 0000000..7d8ec3a
--- /dev/null
+++ b/themes/stack/demo/content/post/shortcodes/index.md
@@ -0,0 +1,116 @@
+---
+title: Shortcodes
+date: 2026-01-26
+description: Sample article showcasing various shortcodes supported by Stack theme.
+categories:
+ - Documentation
+tags:
+ - shortcodes
+ - privacy
+---
+
+Stack theme also provides some custom shortcodes to enhance your content.
+
+
+
+## Quote
+
+The `quote` shortcode allows you to display a quote with an author, source, and URL.
+
+{{< quote author="A famous person" source="The book they wrote" url="https://en.wikipedia.org/wiki/Book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+{{< /quote >}}
+
+### Usage
+
+```markdown
+{{* quote author="Author Name" source="Source Title" url="https://example.com" */>}}
+Quote content here.
+{{* /quote */>}}
+```
+
+## Video
+
+The `video` shortcode allows you to embed self-hosted or remote video files.
+
+{{< video src="https://www.w3schools.com/html/mov_bbb.mp4" >}}
+
+### Usage
+
+```markdown
+{{* video src="https://example.com/video.mp4" */>}}
+```
+
+## Bilibili
+
+Embed videos from Bilibili. Supports both `av` and `bv` IDs.
+
+{{< bilibili "BV1634y1t7xR" >}}
+
+### Usage
+
+```markdown
+{{* bilibili "BV1634y1t7xR" */>}}
+```
+
+## YouTube
+
+Hugo's built-in YouTube shortcode.
+
+{{< youtube ZJthWmvUzzc >}}
+
+### Usage
+
+```markdown
+{{* youtube ZJthWmvUzzc */>}}
+```
+
+## Tencent Video
+
+Embed videos from Tencent Video.
+
+{{< tencent "u00306ng962" >}}
+
+### Usage
+
+```markdown
+{{* tencent "u00306ng962" */>}}
+```
+
+## GitLab Snippet
+
+Embed snippets from GitLab.
+
+{{< gitlab 2349278 >}}
+
+### Usage
+
+```markdown
+{{* gitlab 2349278 */>}}
+```
+
+## Diagrams
+
+Stack supports [Mermaid](https://mermaid.js.org/) diagrams out of the box.
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+### Usage
+
+Wrap your Mermaid code in a code block with the language set to `mermaid`.
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+
diff --git a/themes/stack/demo/content/post/shortcodes/index.zh-hant-tw.md b/themes/stack/demo/content/post/shortcodes/index.zh-hant-tw.md
new file mode 100644
index 0000000..d9b7c00
--- /dev/null
+++ b/themes/stack/demo/content/post/shortcodes/index.zh-hant-tw.md
@@ -0,0 +1,116 @@
+---
+title: 短代碼
+date: 2026-01-26
+description: 展示 Stack 主題支持的各種短代碼。
+categories:
+ - Documentation
+tags:
+ - 隐私
+---
+
+Stack 主題還提供了一些自定義短代碼來增強你的內容。
+
+
+
+## 引用 (Quote)
+
+`quote` 短代碼允許你顯示帶有作者、來源和 URL 的引用。
+
+{{< quote author="一位名人" source="他們寫的書" url="https://zh.wikipedia.org/wiki/Book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+{{< /quote >}}
+
+### 用法
+
+```markdown
+{{* quote author="作者名字" source="文章標題" url="https://example.com" */>}}
+這裡是引用內容。
+{{* /quote */>}}
+```
+
+## 視頻 (Video)
+
+`video` 短代碼允許你嵌入自託管或遠程視頻文件。
+
+{{< video src="https://www.w3schools.com/html/mov_bbb.mp4" >}}
+
+### 用法
+
+```markdown
+{{* video src="https://example.com/video.mp4" */>}}
+```
+
+## Bilibili
+
+嵌入來自 Bilibili 的視頻。支持 `av` 和 `bv` 號。
+
+{{< bilibili "BV1634y1t7xR" >}}
+
+### 用法
+
+```markdown
+{{* bilibili "BV1634y1t7xR" */>}}
+```
+
+## YouTube
+
+Hugo 內置的 YouTube 短代碼。
+
+{{< youtube ZJthWmvUzzc >}}
+
+### 用法
+
+```markdown
+{{* youtube ZJthWmvUzzc */>}}
+```
+
+
+## 騰訊視頻 (Tencent Video)
+
+嵌入來自騰訊視頻的視頻。
+
+{{< tencent "u00306ng962" >}}
+
+### 用法
+
+```markdown
+{{* tencent "u00306ng962" */>}}
+```
+
+
+## GitLab Snippet
+
+嵌入來自 GitLab 的代碼片段。
+
+{{< gitlab 2349278 >}}
+
+### 用法
+
+```markdown
+{{* gitlab 2349278 */>}}
+```
+
+
+## 圖表 (Diagrams)
+
+Stack 出箱即用地支持 [Mermaid](https://mermaid.js.org/) 圖表。
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+### 用法
+
+將你的 Mermaid 代碼包裹在語言設置為 `mermaid` 的代碼塊中。
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
diff --git a/themes/stack/demo/content/post/shortcodes/index.zh.md b/themes/stack/demo/content/post/shortcodes/index.zh.md
new file mode 100644
index 0000000..8bade26
--- /dev/null
+++ b/themes/stack/demo/content/post/shortcodes/index.zh.md
@@ -0,0 +1,113 @@
+---
+title: 短代码
+date: 2026-01-26
+description: 展示 Stack 主题支持的各种短代码。
+categories:
+ - Documentation
+tags:
+ - 隐私
+---
+
+Stack 主题还提供了一些自定义短代码来增强你的内容。
+
+
+
+## 引用 (Quote)
+
+`quote` 短代码允许你显示带有作者、来源和 URL 的引用。
+
+{{< quote author="一位名人" source="他们写的书" url="https://zh.wikipedia.org/wiki/Book">}}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+{{< /quote >}}
+
+### 用法
+
+```markdown
+{{* quote author="作者名字" source="文章标题" url="https://example.com" */>}}
+这里是引用内容。
+{{* /quote */>}}
+```
+
+## 视频 (Video)
+
+`video` 短代码允许你嵌入自托管或远程视频文件。
+
+{{< video src="https://www.w3schools.com/html/mov_bbb.mp4" >}}
+
+### 用法
+
+```markdown
+{{* video src="https://example.com/video.mp4" */>}}
+```
+
+## Bilibili
+
+嵌入来自 Bilibili 的视频。支持 `av` 和 `bv` 号。
+
+{{< bilibili "BV1634y1t7xR" >}}
+
+### 用法
+
+```markdown
+{{* bilibili "BV1634y1t7xR" */>}}
+```
+
+## YouTube
+
+Hugo 内置的 YouTube 短代码。
+
+{{< youtube ZJthWmvUzzc >}}
+
+### 用法
+
+```markdown
+{{* youtube ZJthWmvUzzc */>}}
+```
+
+## 腾讯视频 (Tencent Video)
+
+嵌入来自腾讯视频的视频。
+
+{{< tencent "u00306ng962" >}}
+
+### 用法
+
+```markdown
+{{* tencent "u00306ng962" */>}}
+```
+
+## GitLab Snippet
+
+嵌入来自 GitLab 的代码片段。
+
+{{< gitlab 2349278 >}}
+
+### 用法
+
+```markdown
+{{* gitlab 2349278 */>}}
+```
+
+## 图表 (Diagrams)
+
+Stack 出箱即用地支持 [Mermaid](https://mermaid.js.org/) 图表。
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
+
+### 用法
+
+将你的 Mermaid 代码包裹在语言设置为 `mermaid` 的代码块中。
+
+```mermaid
+graph TD;
+ A-->B;
+ A-->C;
+ B-->D;
+ C-->D;
+```
diff --git a/themes/stack/demo/go.mod b/themes/stack/demo/go.mod
new file mode 100644
index 0000000..f918063
--- /dev/null
+++ b/themes/stack/demo/go.mod
@@ -0,0 +1,7 @@
+module github.com/CaiJimmy/hugo-theme-stack/demo
+
+go 1.25.6
+
+replace github.com/CaiJimmy/hugo-theme-stack/v3 => ../
+
+require github.com/CaiJimmy/hugo-theme-stack/v3 v3.34.0 // indirect
diff --git a/themes/stack/demo/run.sh b/themes/stack/demo/run.sh
new file mode 100755
index 0000000..98f6d99
--- /dev/null
+++ b/themes/stack/demo/run.sh
@@ -0,0 +1 @@
+hugo server --gc --themesDir=../..
\ No newline at end of file
diff --git a/themes/stack/go.mod b/themes/stack/go.mod
new file mode 100644
index 0000000..e75e573
--- /dev/null
+++ b/themes/stack/go.mod
@@ -0,0 +1,3 @@
+module github.com/CaiJimmy/hugo-theme-stack/v4
+
+go 1.17
diff --git a/themes/stack/i18n/ar.toml b/themes/stack/i18n/ar.toml
new file mode 100644
index 0000000..155eac0
--- /dev/null
+++ b/themes/stack/i18n/ar.toml
@@ -0,0 +1,82 @@
+toggleMenu = "اخفي القائمة"
+darkMode = "الوضع الداكن"
+
+[list]
+ section = "قسم"
+
+ [list.page]
+ one = "{{ .Count }} صفحه"
+ other = "{{ .Count }} صفحات"
+
+ [list.subsection]
+ one = "قسم فرعي"
+ other = "اقسام فرعية"
+
+[article]
+ back = "خلف"
+ tableOfContents = "جدول المحتويات"
+ relatedContent = "محتوى مشابهه"
+ lastUpdatedOn = "التعديل الاخير"
+
+ [article.readingTime]
+ one = "تُقرأ خلال دقيقة"
+ other = "تُقرأ خلال {{ .Count }} دقائق"
+
+ [article.alert]
+ note = "ملاحظة"
+ tip = "نصيحة"
+ important = "مهم"
+ warning = "تحذير"
+ caution = "تنبيه"
+
+ [article.codeblock]
+ copy = "نسخ"
+ copied = "تم النسخ!"
+
+[notFound]
+ title = "غير موجود"
+ subtitle = "تعذر العثور على الصفحة المطلوبة."
+
+[widget]
+ [widget.archives]
+ title = "الارشيفات"
+ more = "اكثر"
+
+ [widget.tagCloud]
+ title = "وسوم"
+
+ [widget.categoriesCloud]
+ title = "التصنيفات"
+
+[search]
+ title = "بحث"
+ placeholder = "اكتب..."
+ resultTitle = "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
+
+[footer]
+ builtWith = "مبني باستخدام {{ .Generator }}"
+ designedBy = "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
+
+[cookies]
+ title = "موافقة ملفات تعريف الارتباط"
+ text = "نستخدم ملفات تعريف الارتباط لتحسين تجربة التصفح وتحليل حركة المرور على الموقع."
+ acceptAll = "قبول الكل"
+ deny = "رفض"
+ managePreferences = "إدارة التفضيلات"
+ settingsTitle = "تفضيلات ملفات تعريف الارتباط"
+ savePreferences = "حفظ التفضيلات"
+ cancel = "إلغاء"
+ footerLink = "إعدادات ملفات تعريف الارتباط"
+ commentsDisabled = "التعليقات معطلة حتى تقبل ملفات تعريف الارتباط الوظيفية."
+
+ [cookies.necessary]
+ title = "ضروري"
+ text = "ملفات تعريف الارتباط هذه مطلوبة لعمل الموقع ولا يمكن تعطيلها."
+
+ [cookies.analytics]
+ title = "التحليلات"
+ text = "تساعدنا ملفات تعريف الارتباط هذه على فهم كيفية تفاعل الزوار مع موقعنا."
+
+ [cookies.functional]
+ title = "وظيفي"
+ text = "تتيح ملفات تعريف الارتباط هذه ميزات مثل التعليقات والمحتوى المضمن."
diff --git a/themes/stack/i18n/be.toml b/themes/stack/i18n/be.toml
new file mode 100644
index 0000000..e4f4552
--- /dev/null
+++ b/themes/stack/i18n/be.toml
@@ -0,0 +1,80 @@
+toggleMenu = "Паказаць/схаваць меню"
+darkMode = "Цёмны рэжым"
+
+[list]
+ section = "Раздзел"
+
+ [list.page]
+ one = "{{ .Count }} старонка"
+ few = "{{ .Count }} старонкі"
+ many = "{{ .Count }} старонак"
+ other = "{{ .Count }} старонкі"
+
+ [list.subsection]
+ one = "Падраздзел"
+ few = "Падраздзелы"
+ many = "Падраздзелы"
+ other = "Падраздзелы"
+
+[article]
+ back = "Назад"
+ relatedContent = "Таксама рэкамендуем"
+ lastUpdatedOn = "Абноўлена"
+ tableOfContents = "Змест"
+ readingTime = "Час чытання: {{ .Count }} хв."
+
+ [article.alert]
+ note = "Заўвага"
+ tip = "Парада"
+ important = "Важна"
+ warning = "Папярэджанне"
+ caution = "Асцярога"
+
+ [article.codeblock]
+ copy = "Капіяваць"
+ copied = "Скапіявана!"
+
+[notFound]
+ title = "Не знойдзена"
+ subtitle = "Запытваемая старонка не існуе"
+
+[widget]
+ [widget.archives]
+ title = "Архівы"
+ more = "Яшчэ"
+
+ [widget.tagCloud]
+ title = "Тэгі"
+
+[search]
+ title = "Пошук"
+ placeholder = "Увядзіце нешта..."
+ resultTitle = "Знайдзена #PAGES_COUNT старонак (за #TIME_SECONDS с.)"
+
+[footer]
+ builtWith = "Створана пры дапамозе {{ .Generator }}"
+ designedBy = "Тэма {{ .Theme }}, дызайн {{ .DesignedBy }}"
+
+[cookies]
+ title = "Згода на файлы cookie"
+ text = "Мы выкарыстоўваем файлы cookie для паляпшэння вашага досведу і аналізу трафіку сайта."
+ acceptAll = "Прыняць усё"
+ deny = "Адхіліць"
+ managePreferences = "Кіраваць налады"
+ settingsTitle = "Налады файлаў cookie"
+ savePreferences = "Захаваць налады"
+ cancel = "Скасаваць"
+ footerLink = "Налады файлаў cookie"
+ commentsDisabled = "Каментары адключаны, пакуль вы не прымеце функцыянальныя файлы cookie."
+
+ [cookies.necessary]
+ title = "Неабходныя"
+ text = "Гэтыя файлы cookie неабходныя для працы сайта і не могуць быць адключаны."
+
+ [cookies.analytics]
+ title = "Аналітыка"
+ text = "Гэтыя файлы cookie дапамагаюць нам зразумець, як наведвальнікі ўзаемадзейнічаюць з нашым сайтам."
+
+ [cookies.functional]
+ title = "Функцыянальныя"
+ text = "Гэтыя файлы cookie ўключаюць такія функцыі, як каментары і ўбудаваны кантэнт."
diff --git a/themes/stack/i18n/bg.toml b/themes/stack/i18n/bg.toml
new file mode 100644
index 0000000..0a4cebf
--- /dev/null
+++ b/themes/stack/i18n/bg.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Покажи Меню"
+darkMode = "Тъмен Режим"
+
+[list]
+ section = "Секция"
+
+ [list.page]
+ one = "{{ .Count }} страница"
+ other = "{{ .Count }} страници"
+
+ [list.subsection]
+ one = "Подсекция"
+ other = "Подсекции"
+
+[article]
+ back = "Назад"
+ tableOfContents = "Съдържание"
+ relatedContent = "Свързано Съдържание"
+ lastUpdatedOn = "Последна промяна на"
+
+ [article.readingTime]
+ one = "{{ .Count }} minute read"
+ other = "{{ .Count }} minute read"
+
+ [article.alert]
+ note = "Бележка"
+ tip = "Съвет"
+ important = "Важно"
+ warning = "Предупреждение"
+ caution = "Внимание"
+
+ [article.codeblock]
+ copy = "Копирай"
+ copied = "Копирано!"
+
+[notFound]
+ title = "Не е намерено"
+ subtitle = "Страницата която търсите не е открита"
+
+[widget]
+ [widget.archives]
+ title = "Архиви"
+ more = "Повече"
+
+ [widget.tagCloud]
+ title = "Тагове"
+
+ [widget.categoriesCloud]
+ title = "Категории"
+
+[search]
+ title = "Търсене"
+ placeholder = "Напишете нещо..."
+ resultTitle = "#PAGES_COUNT страници (#TIME_SECONDS секунди)"
+
+[footer]
+ builtWith = "Създадено с {{ .Generator }}"
+ designedBy = "Тема {{ .Theme }} създадена от {{ .DesignedBy }}"
+
+[cookies]
+ title = "Съгласие за бисквитки"
+ text = "Използваме бисквитки, за да подобрим вашето изживяване и да анализираме трафика на сайта."
+ acceptAll = "Приемане на всички"
+ deny = "Откажи"
+ managePreferences = "Управление на предпочитанията"
+ settingsTitle = "Предпочитания за бисквитки"
+ savePreferences = "Запазване на предпочитанията"
+ cancel = "Отказ"
+ footerLink = "Настройки на бисквитките"
+ commentsDisabled = "Коментарите са деактивирани, докато не приемете функционални бисквитки."
+
+ [cookies.necessary]
+ title = "Необходими"
+ text = "Тези бисквитки са необходими за функционирането на уебсайта и не могат да бъдат деактивирани."
+
+ [cookies.analytics]
+ title = "Анализи"
+ text = "Тези бисквитки ни помагат да разберем как посетителите взаимодействат с нашия уебсайт."
+
+ [cookies.functional]
+ title = "Функционални"
+ text = "Тези бисквитки активират функции като коментари и вградено съдържание."
diff --git a/themes/stack/i18n/bn.toml b/themes/stack/i18n/bn.toml
new file mode 100644
index 0000000..d161a06
--- /dev/null
+++ b/themes/stack/i18n/bn.toml
@@ -0,0 +1,82 @@
+toggleMenu = "টগল মেনু"
+darkMode = "ডার্ক মোড"
+
+[list]
+ section = "অনুচ্ছেদ"
+
+ [list.page]
+ one = "{{ .Count }} পাতা"
+ other = "{{ .Count }} পাতা"
+
+ [list.subsection]
+ one = "উপ-অনুচ্ছেদ"
+ other = "উপ-অনুচ্ছেদ"
+
+[article]
+ back = "পেছনে"
+ tableOfContents = "সূচিপত্র"
+ relatedContent = "সম্পর্কিত বিষয়বস্তু"
+ lastUpdatedOn = "সর্বশেষ আপডেট করা হয়েছে"
+
+ [article.readingTime]
+ one = "{{ .Count }} মিনিটে পড়া যাবে"
+ other = "{{ .Count }} মিনিটে পড়া যাবে"
+
+ [article.alert]
+ note = "টীকা"
+ tip = "পরামর্শ"
+ important = "গুরুত্বপূর্ণ"
+ warning = "সতর্কতা"
+ caution = "সাবধানতা"
+
+ [article.codeblock]
+ copy = "কপি"
+ copied = "কপি হয়েছে!"
+
+[notFound]
+ title = "পাওয়া যায়নি"
+ subtitle = "এই পাতাটি বিদ্যমান নেই"
+
+[widget]
+ [widget.archives]
+ title = "আর্কাইভ"
+ more = "আরও"
+
+ [widget.tagCloud]
+ title = "ট্যাগ"
+
+ [widget.categoriesCloud]
+ title = "বিভাগ"
+
+[search]
+ title = "অনুসন্ধান"
+ placeholder = "কিছু টাইপ করুন..."
+ resultTitle = "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
+
+[footer]
+ builtWith = "{{ .Generator }} দিয়ে নির্মিত"
+ designedBy = "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
+
+[cookies]
+ title = "কুকি সম্মতি"
+ text = "আমরা আপনার ব্রাউজিং অভিজ্ঞতা উন্নত করতে এবং সাইট ট্রাফিক বিশ্লেষণ করতে কুকি ব্যবহার করি।"
+ acceptAll = "সবগুলো গ্রহণ করুন"
+ deny = "প্রত্যাখ্যান"
+ managePreferences = "পছন্দসমূহ পরিচালনা করুন"
+ settingsTitle = "কুকি পছন্দসমূহ"
+ savePreferences = "পছন্দসমূহ সংরক্ষণ করুন"
+ cancel = "বাতিল"
+ footerLink = "কুকি সেটিংস"
+ commentsDisabled = "আপনি কার্যকরী কুকি গ্রহণ না করা পর্যন্ত মন্তব্য অক্ষম করা আছে।"
+
+ [cookies.necessary]
+ title = "প্রয়োজনীয়"
+ text = "এই কুকিগুলি ওয়েবসাইট কাজ করার জন্য প্রয়োজনীয় এবং নিষ্ক্রিয় করা যায় না।"
+
+ [cookies.analytics]
+ title = "বিশ্লেষণ"
+ text = "এই কুকিগুলি আমাদের বুঝতে সাহায্য করে যে দর্শকরা কীভাবে আমাদের ওয়েবসাইটের সাথে ইন্টারঅ্যাক্ট করে।"
+
+ [cookies.functional]
+ title = "কার্যকরী"
+ text = "এই কুকিগুলি মন্তব্য এবং এম্বেড করা বিষয়বস্তুর মতো বৈশিষ্ট্যগুলি সক্ষম করে."
diff --git a/themes/stack/i18n/ca.toml b/themes/stack/i18n/ca.toml
new file mode 100644
index 0000000..82f4d6d
--- /dev/null
+++ b/themes/stack/i18n/ca.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Toggle Menu"
+darkMode = "Mode fosc"
+
+[list]
+ section = "Secció"
+
+ [list.page]
+ one = "{{ .Count }} pàgina"
+ other = "{{ .Count }} pàgines"
+
+ [list.subsection]
+ one = "Subsecció"
+ other = "Subseccions"
+
+[article]
+ back = "Tornar"
+ tableOfContents = "Taula de contingut"
+ relatedContent = "Continguts relacionats"
+ lastUpdatedOn = "Última vegada actualitzat"
+
+ [article.readingTime]
+ one = "{{ .Count }} minut a llegir"
+ other = "{{ .Count }} minuts a llegir"
+
+ [article.alert]
+ note = "Nota"
+ tip = "Consell"
+ important = "Important"
+ warning = "Avís"
+ caution = "Precaució"
+
+ [article.codeblock]
+ copy = "Copia"
+ copied = "Copiat!"
+
+[notFound]
+ title = "No Trobat"
+ subtitle = "Aquesta pàgina no existeix"
+
+[widget]
+ [widget.archives]
+ title = "Arxiu"
+ more = "Més"
+
+ [widget.tagCloud]
+ title = "Etiquetes"
+
+ [widget.categoriesCloud]
+ title = "Categories"
+
+[search]
+ title = "Cerca"
+ placeholder = "Tecleja alguna cosa..."
+ resultTitle = "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
+
+[footer]
+ builtWith = "Creat amb {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentiment de galetes"
+ text = "Utilitzem galetes per millorar la vostra experiència de navegació i analitzar el trànsit del lloc."
+ acceptAll = "Acceptar-ho tot"
+ deny = "Denegar"
+ managePreferences = "Gestionar preferències"
+ settingsTitle = "Preferències de galetes"
+ savePreferences = "Desar preferències"
+ cancel = "Cancel·lar"
+ footerLink = "Configuració de galetes"
+ commentsDisabled = "Els comentaris estan desactivats fins que accepteu les galetes funcionals."
+
+ [cookies.necessary]
+ title = "Necessàries"
+ text = "Aquestes galetes són necessàries perquè el lloc web funcioni i no es poden desactivar."
+
+ [cookies.analytics]
+ title = "Analítiques"
+ text = "Aquestes galetes ens ajuden a entendre com els visitants interactuen amb el nostre lloc web."
+
+ [cookies.functional]
+ title = "Funcionals"
+ text = "Aquestes galetes habiliten funcionalitats com comentaris i contingut incrustat."
diff --git a/themes/stack/i18n/cs.toml b/themes/stack/i18n/cs.toml
new file mode 100644
index 0000000..4b710d6
--- /dev/null
+++ b/themes/stack/i18n/cs.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Skrýt menu"
+darkMode = "Tmavý režim"
+
+[list]
+ section = "Kategorie"
+
+ [list.page]
+ one = "{{ .Count }} stránka"
+ other = "{{ .Count }} stránek"
+
+ [list.subsection]
+ one = "Podkategorie"
+ other = "Podkategorie"
+
+[article]
+ back = "Zpět"
+ tableOfContents = "Obsah"
+ relatedContent = "Související"
+ lastUpdatedOn = "Naposledy aktualizováno"
+
+ [article.readingTime]
+ one = "{{ .Count }} minuta"
+ other = "{{ .Count }} minut"
+
+ [article.alert]
+ note = "Poznámka"
+ tip = "Tip"
+ important = "Důležité"
+ warning = "Varování"
+ caution = "Upozornění"
+
+ [article.codeblock]
+ copy = "Kopírovat"
+ copied = "Zkopírováno!"
+
+[notFound]
+ title = "Nenalezeno"
+ subtitle = "Tato stránka neexistuje"
+
+[widget]
+ [widget.archives]
+ title = "Archivy"
+ more = "Více"
+
+ [widget.tagCloud]
+ title = "Štítky"
+
+ [widget.categoriesCloud]
+ title = "Kategorie"
+
+[search]
+ title = "Hledat"
+ placeholder = "Zadejte něco..."
+ resultTitle = "#PAGES_COUNT stránek (#TIME_SECONDS sekund)"
+
+[footer]
+ builtWith = "Vytvořeno pomocí {{ .Generator }}"
+ designedBy = "Šablona {{ .Theme }} od {{ .DesignedBy }}"
+
+[cookies]
+ title = "Souhlas s cookies"
+ text = "Používáme cookies ke zlepšení vašeho prohlížení a analýze návštěvnosti webu."
+ acceptAll = "Přijmout vše"
+ deny = "Odmítnout"
+ managePreferences = "Spravovat předvolby"
+ settingsTitle = "Předvolby cookies"
+ savePreferences = "Uložit předvolby"
+ cancel = "Zrušit"
+ footerLink = "Nastavení cookies"
+ commentsDisabled = "Komentáře jsou zakázány, dokud nepřijmete funkční cookies."
+
+ [cookies.necessary]
+ title = "Nutné"
+ text = "Tyto cookies jsou nutné pro fungování webu a nelze je zakázat."
+
+ [cookies.analytics]
+ title = "Analytické"
+ text = "Tyto cookies nám pomáhají pochopit, jak návštěvníci interagují s naším webem."
+
+ [cookies.functional]
+ title = "Funkční"
+ text = "Tyto cookies umožňují funkce jako komentáře a vložený obsah."
diff --git a/themes/stack/i18n/de.toml b/themes/stack/i18n/de.toml
new file mode 100644
index 0000000..b0ee75f
--- /dev/null
+++ b/themes/stack/i18n/de.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Menü umschalten"
+darkMode = "Dunkler Modus"
+
+[list]
+ section = "Abschnitt"
+
+ [list.page]
+ one = "{{ .Count }} Seite"
+ other = "{{ .Count }} Seiten"
+
+ [list.subsection]
+ one = "Unterabschnitt"
+ other = "Unterabschnitte"
+
+[article]
+ back = "Zurück"
+ tableOfContents = "Inhaltsverzeichnis"
+ relatedContent = "Verwandte Inhalte"
+ lastUpdatedOn = "Zuletzt aktualisiert am"
+
+ [article.readingTime]
+ one = "{{ .Count }} Minute Lesezeit"
+ other = "{{ .Count }} Minuten Lesezeit"
+
+ [article.alert]
+ note = "Hinweis"
+ tip = "Tipp"
+ important = "Wichtig"
+ warning = "Warnung"
+ caution = "Vorsicht"
+
+ [article.codeblock]
+ copy = "Kopieren"
+ copied = "Kopiert!"
+
+[notFound]
+ title = "Seite nicht gefunden"
+ subtitle = "Diese Seite existiert nicht"
+
+[widget]
+ [widget.archives]
+ title = "Archiv"
+ more = "Weitere"
+
+ [widget.tagCloud]
+ title = "Schlagwörter"
+
+ [widget.categoriesCloud]
+ title = "Kategorien"
+
+[search]
+ title = "Suche"
+ placeholder = "Etwas tippen..."
+ resultTitle = "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
+
+[footer]
+ builtWith = "Erstellt mit {{ .Generator }}"
+ designedBy = "Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}"
+
+[cookies]
+ title = "Cookie-Einwilligung"
+ text = "Wir verwenden Cookies, um Ihr Surferlebnis zu verbessern und den Website-Traffic zu analysieren."
+ acceptAll = "Alle akzeptieren"
+ deny = "Ablehnen"
+ managePreferences = "Einstellungen verwalten"
+ settingsTitle = "Cookie-Einstellungen"
+ savePreferences = "Einstellungen speichern"
+ cancel = "Abbrechen"
+ footerLink = "Cookie-Einstellungen"
+ commentsDisabled = "Kommentare sind deaktiviert, bis Sie funktionale Cookies akzeptieren."
+
+ [cookies.necessary]
+ title = "Notwendig"
+ text = "Diese Cookies sind für die Funktion der Website erforderlich und können nicht deaktiviert werden."
+
+ [cookies.analytics]
+ title = "Analyse"
+ text = "Diese Cookies helfen uns zu verstehen, wie Besucher mit unserer Website interagieren."
+
+ [cookies.functional]
+ title = "Funktional"
+ text = "Diese Cookies ermöglichen Funktionen wie Kommentare und eingebettete Inhalte."
diff --git a/themes/stack/i18n/el.toml b/themes/stack/i18n/el.toml
new file mode 100644
index 0000000..afcfc8a
--- /dev/null
+++ b/themes/stack/i18n/el.toml
@@ -0,0 +1,79 @@
+toggleMenu = "Εναλλαγή Μενού"
+darkMode = "Σκοτεινό θέμα"
+
+[list]
+ section = "Ενότητα"
+
+ [list.page]
+ one = "{{ .Count }} σελιδα"
+ other = "{{ .Count }} σελιδες"
+
+ [list.subsection]
+ one = "Υποενότητα"
+ other = "Υποενότητες"
+
+[article]
+ back = "Πισω"
+ tableOfContents = "Πινακας περιεχομενων"
+ relatedContent = "Σχετικο περιεχομενο"
+ lastUpdatedOn = "Τελευταια τροποποιηση στις"
+
+ [article.readingTime]
+ one = "{{ .Count }} λεπτό ανάγνωσης"
+ other = "{{ .Count }} λεπτά ανάγνωσης"
+
+ [article.alert]
+ note = "Σημείωση"
+ tip = "Συμβουλή"
+ important = "Σημαντικό"
+ warning = "Προειδοποίηση"
+ caution = "Προσοχή"
+
+ [article.codeblock]
+ copy = "Αντιγραφή"
+ copied = "Αντιγράφηκε!"
+
+[notFound]
+ title = "Δε βρέθηκε"
+ subtitle = "Η σελίδα δε βρέθηκε."
+
+[widget]
+ [widget.archives]
+ title = "Αρχειο"
+ more = "Περισσότερα"
+
+ [widget.tagCloud]
+ title = "Tags"
+
+[search]
+ title = "Αναζήτηση"
+ placeholder = "Πληκτρολογήστε κάτι..."
+ resultTitle = "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
+
+[footer]
+ builtWith = "Δημιουργήθηκε με τη χρήση {{ .Generator }}"
+ designedBy = "Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}"
+
+[cookies]
+ title = "Συγκατάθεση για cookies"
+ text = "Χρησιμοποιούμε cookies για να βελτιώσουμε την εμπειρία περιήγησής σας και να αναλύσουμε την επισκεψιμότητα του ιστότοπου."
+ acceptAll = "Αποδοχή όλων"
+ deny = "Άρνηση"
+ managePreferences = "Διαχείριση προτιμήσεων"
+ settingsTitle = "Προτιμήσεις cookies"
+ savePreferences = "Αποθήκευση προτιμήσεων"
+ cancel = "Ακύρωση"
+ footerLink = "Ρυθμίσεις cookies"
+ commentsDisabled = "Τα σχόλια είναι απενεργοποιημένα μέχρι να αποδεχτείτε τα λειτουργικά cookies."
+
+ [cookies.necessary]
+ title = "Απαραίτητα"
+ text = "Αυτά τα cookies είναι απαραίτητα για τη λειτουργία του ιστότοπου και δεν μπορούν να απενεργοποιηθούν."
+
+ [cookies.analytics]
+ title = "Αναλυτικά"
+ text = "Αυτά τα cookies μας βοηθούν να κατανοήσουμε πώς οι επισκέπτες αλληλεπιδρούν με τον ιστότοπό μας."
+
+ [cookies.functional]
+ title = "Λειτουργικά"
+ text = "Αυτά τα cookies ενεργοποιούν λειτουργίες όπως σχόλια και ενσωματωμένο περιεχόμενο."
diff --git a/themes/stack/i18n/en.toml b/themes/stack/i18n/en.toml
new file mode 100644
index 0000000..409288e
--- /dev/null
+++ b/themes/stack/i18n/en.toml
@@ -0,0 +1,87 @@
+toggleMenu = "Toggle Menu"
+darkMode = "Dark Mode"
+
+[list]
+ section = "Section"
+
+ [list.page]
+ one = "{{ .Count }} page"
+ other = "{{ .Count }} pages"
+
+ [list.subsection]
+ one = "Subsection"
+ other = "Subsections"
+
+[article]
+ back = "Back"
+ tableOfContents = "Table of contents"
+ relatedContent = "Related content"
+ lastUpdatedOn = "Last updated on"
+
+ [article.readingTime]
+ one = "{{ .Count }} minute read"
+ other = "{{ .Count }} minutes read"
+
+ [article.alert]
+ note = "Note"
+ tip = "Tip"
+ important = "Important"
+ warning = "Warning"
+ caution = "Caution"
+
+ [article.codeblock]
+ copy = "Copy"
+ copied = "Copied!"
+
+[notFound]
+ title = "Not Found"
+ subtitle = "This page does not exist"
+
+[widget]
+ [widget.archives]
+ title = "Archives"
+ more = "More"
+
+ [widget.tagCloud]
+ title = "Tags"
+
+ [widget.categoriesCloud]
+ title = "Categories"
+
+[search]
+ title = "Search"
+ placeholder = "Type something..."
+ resultTitle = "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+
+[footer]
+ builtWith = "Built with {{ .Generator }}"
+ designedBy = "Theme {{ .Theme }} designed by {{ .DesignedBy }}"
+
+[cookies]
+ title = "Cookie Consent"
+ text = "We use cookies to enhance your browsing experience and analyze site traffic."
+ acceptAll = "Accept All"
+ deny = "Deny"
+ managePreferences = "Manage preferences"
+ settingsTitle = "Cookie Preferences"
+ savePreferences = "Save preferences"
+ cancel = "Cancel"
+ footerLink = "Cookie settings"
+ commentsDisabled = "Comments are disabled until you accept functional cookies."
+
+ [cookies.necessary]
+ title = "Necessary"
+ text = "These cookies are required for the website to function and cannot be disabled."
+
+ [cookies.analytics]
+ title = "Analytics"
+ text = "These cookies help us understand how visitors interact with our website."
+
+ [cookies.functional]
+ title = "Functional"
+ text = "These cookies enable features like comments and embedded content."
+
+[pagination]
+ jumpToPage = "Jump to page"
+ jump = "Go"
+ pressEnter = "Press Enter to jump"
diff --git a/themes/stack/i18n/es.toml b/themes/stack/i18n/es.toml
new file mode 100644
index 0000000..f418abe
--- /dev/null
+++ b/themes/stack/i18n/es.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Ocultar menú"
+darkMode = "Modo oscuro"
+
+[list]
+ section = "Sección"
+
+ [list.page]
+ one = "{{ .Count }} página"
+ other = "{{ .Count }} páginas"
+
+ [list.subsection]
+ one = "Subsección"
+ other = "Subsecciones"
+
+[article]
+ back = "Volver"
+ tableOfContents = "Tabla de contenido"
+ relatedContent = "Contenidos relacionados"
+ lastUpdatedOn = "Última actualización"
+
+ [article.readingTime]
+ one = "Tiempo de lectura {{ .Count }} minuto"
+ other = "Tiempo de lectura {{ .Count }} minutos"
+
+ [article.alert]
+ note = "Nota"
+ tip = "Consejo"
+ important = "Importante"
+ warning = "Advertencia"
+ caution = "Precaución"
+
+ [article.codeblock]
+ copy = "Copiar"
+ copied = "¡Copiado!"
+
+[notFound]
+ title = "No Encontrado"
+ subtitle = "Esta página no existe"
+
+[widget]
+ [widget.archives]
+ title = "Archivo"
+ more = "Más"
+
+ [widget.tagCloud]
+ title = "Etiquetas"
+
+ [widget.categoriesCloud]
+ title = "Categorías"
+
+[search]
+ title = "Búsqueda"
+ placeholder = "Escribe algo..."
+ resultTitle = "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
+
+[footer]
+ builtWith = "Creado con {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} diseñado por {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentimiento de cookies"
+ text = "Utilizamos cookies para mejorar su experiencia de navegación y analizar el tráfico del sitio."
+ acceptAll = "Aceptar todo"
+ deny = "Rechazar"
+ managePreferences = "Gestionar preferencias"
+ settingsTitle = "Preferencias de cookies"
+ savePreferences = "Guardar preferencias"
+ cancel = "Cancelar"
+ footerLink = "Configuración de cookies"
+ commentsDisabled = "Los comentarios están desactivados hasta que acepte las cookies funcionales."
+
+ [cookies.necessary]
+ title = "Necesarias"
+ text = "Estas cookies son necesarias para el funcionamiento del sitio web y no se pueden desactivar."
+
+ [cookies.analytics]
+ title = "Analíticas"
+ text = "Estas cookies nos ayudan a entender cómo los visitantes interactúan con nuestro sitio web."
+
+ [cookies.functional]
+ title = "Funcionales"
+ text = "Estas cookies permiten funciones como comentarios y contenido incrustado."
diff --git a/themes/stack/i18n/fa.toml b/themes/stack/i18n/fa.toml
new file mode 100644
index 0000000..40b3097
--- /dev/null
+++ b/themes/stack/i18n/fa.toml
@@ -0,0 +1,82 @@
+toggleMenu = "منو"
+darkMode = "حالت شب"
+
+[list]
+ section = "بخش"
+
+ [list.page]
+ one = "{{ .Count }} صفحه"
+ other = "{{ .Count }} صفحه"
+
+ [list.subsection]
+ one = "زیربخش"
+ other = "زیربخش"
+
+[article]
+ back = "قبلی"
+ tableOfContents = "فهرست"
+ relatedContent = "مطالب مرتبط"
+ lastUpdatedOn = "آخرین بروزرسانی در"
+
+ [article.readingTime]
+ one = "مطالعه در {{ .Count }} دقیقه"
+ other = "مطالعه در {{ .Count }} دقیقه"
+
+ [article.alert]
+ note = "یادداشت"
+ tip = "نکته"
+ important = "مهم"
+ warning = "هشدار"
+ caution = "احتیاط"
+
+ [article.codeblock]
+ copy = "کپی"
+ copied = "کپی شد!"
+
+[notFound]
+ title = "یافت نشد"
+ subtitle = "این صحه وجود ندارد"
+
+[widget]
+ [widget.archives]
+ title = "آرشیو"
+ more = "بیشتر"
+
+ [widget.tagCloud]
+ title = "تگ ها"
+
+ [widget.categoriesCloud]
+ title = "دسته بندی"
+
+[search]
+ title = "جستجو"
+ placeholder = "تایپ کنید ..."
+ resultTitle = "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
+
+[footer]
+ builtWith = "قدرت گرفته از {{ .Generator }}"
+ designedBy = "قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}"
+
+[cookies]
+ title = "رضایت کوکی"
+ text = "ما از کوکیها برای بهبود تجربه مرورگری شما و تجزیه و تحلیل ترافیک سایت استفاده میکنیم."
+ acceptAll = "پذیرش همه"
+ deny = "رد کردن"
+ managePreferences = "مدیریت تنظیمات"
+ settingsTitle = "تنظیمات کوکی"
+ savePreferences = "ذخیره تنظیمات"
+ cancel = "لغو"
+ footerLink = "تنظیمات کوکی"
+ commentsDisabled = "نظرات تا زمانی که کوکیهای کاربردی را بپذیرید غیرفعال هستند."
+
+ [cookies.necessary]
+ title = "ضروری"
+ text = "این کوکیها برای عملکرد وبسایت الزامی هستند و نمیتوان آنها را غیرفعال کرد."
+
+ [cookies.analytics]
+ title = "تجزیه و تحلیل"
+ text = "این کوکیها به ما کمک میکنند تا بفهمیم بازدیدکنندگان چگونه با وبسایت ما تعامل دارند."
+
+ [cookies.functional]
+ title = "کاربردی"
+ text = "این کوکیها ویژگیهایی مانند نظرات و محتوای جاسازیشده را فعال میکنند."
diff --git a/themes/stack/i18n/fr.toml b/themes/stack/i18n/fr.toml
new file mode 100644
index 0000000..ff99471
--- /dev/null
+++ b/themes/stack/i18n/fr.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Afficher le menu"
+darkMode = "Mode sombre"
+
+[list]
+ section = "Section"
+
+ [list.page]
+ one = "{{ .Count }} page"
+ other = "{{ .Count }} pages"
+
+ [list.subsection]
+ one = "Sous-section"
+ other = "Sous-sections"
+
+[article]
+ back = "Retour"
+ tableOfContents = "Table des matières"
+ relatedContent = "Contenus liés"
+ lastUpdatedOn = "Dernière mise à jour le"
+
+ [article.readingTime]
+ one = "{{ .Count }} minute de lecture"
+ other = "{{ .Count }} minutes de lecture"
+
+ [article.alert]
+ note = "Note"
+ tip = "Astuce"
+ important = "Important"
+ warning = "Avertissement"
+ caution = "Attention"
+
+ [article.codeblock]
+ copy = "Copier"
+ copied = "Copié !"
+
+[notFound]
+ title = "Page non trouvée"
+ subtitle = "Cette page n'existe pas."
+
+[widget]
+ [widget.archives]
+ title = "Archives"
+ more = "Autres"
+
+ [widget.tagCloud]
+ title = "Mots clés"
+
+ [widget.categoriesCloud]
+ title = "Catégories"
+
+[search]
+ title = "Rechercher"
+ placeholder = "Cherchez un article, une publication, etc."
+ resultTitle = "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
+
+[footer]
+ builtWith = "Généré avec {{ .Generator }}"
+ designedBy = "Thème {{ .Theme }} conçu par {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentement aux cookies"
+ text = "Nous utilisons des cookies pour améliorer votre expérience de navigation et analyser le trafic du site."
+ acceptAll = "Tout accepter"
+ deny = "Refuser"
+ managePreferences = "Gérer les préférences"
+ settingsTitle = "Préférences de cookies"
+ savePreferences = "Enregistrer les préférences"
+ cancel = "Annuler"
+ footerLink = "Paramètres des cookies"
+ commentsDisabled = "Les commentaires sont désactivés jusqu'à ce que vous acceptiez les cookies fonctionnels."
+
+ [cookies.necessary]
+ title = "Nécessaires"
+ text = "Ces cookies sont nécessaires au fonctionnement du site et ne peuvent pas être désactivés."
+
+ [cookies.analytics]
+ title = "Analytiques"
+ text = "Ces cookies nous aident à comprendre comment les visiteurs interagissent avec notre site."
+
+ [cookies.functional]
+ title = "Fonctionnels"
+ text = "Ces cookies permettent des fonctionnalités comme les commentaires et le contenu intégré."
diff --git a/themes/stack/i18n/hi.toml b/themes/stack/i18n/hi.toml
new file mode 100644
index 0000000..02ddc74
--- /dev/null
+++ b/themes/stack/i18n/hi.toml
@@ -0,0 +1,82 @@
+toggleMenu = "मेनू टॉगल करें"
+darkMode = "डार्क मोड"
+
+[list]
+ section = "अनुभाग"
+
+ [list.page]
+ one = "{{ .Count }} पेज"
+ other = "{{ .Count }} पेज"
+
+ [list.subsection]
+ one = "उपधारा"
+ other = "उपखंड"
+
+[article]
+ back = "पीछे"
+ tableOfContents = "विषयसूची"
+ relatedContent = "संबंधित सामग्री"
+ lastUpdatedOn = "अंतिम बार अपडेट किया गया"
+
+ [article.readingTime]
+ one = "{{ .Count }} मिनट पढ़ें"
+ other = "{{ .Count }} मिनट पढ़ें"
+
+ [article.alert]
+ note = "नोट"
+ tip = "सलाह"
+ important = "महत्वपूर्ण"
+ warning = "चेतावनी"
+ caution = "सावधानी"
+
+ [article.codeblock]
+ copy = "कॉपी"
+ copied = "कॉपी हो गया!"
+
+[notFound]
+ title = "404 नहीं मिला।"
+ subtitle = "यह पृष्ठ मौजूद नहीं है।"
+
+[widget]
+ [widget.archives]
+ title = "अभिलेखागार"
+ more = "अधिक"
+
+ [widget.tagCloud]
+ title = "टैग"
+
+ [widget.categoriesCloud]
+ title = "श्रेणियाँ"
+
+[search]
+ title = "खोज"
+ placeholder = "कुछ लिखें..."
+ resultTitle = "#PAGES_COUNT पेज (#TIME_SECONDS सेकंड)"
+
+[footer]
+ builtWith = "निर्मित {{ .Generator }} के साथ"
+ designedBy = "थीम {{ .Theme }} द्वारा डिज़ाइन किया गया {{ .DesignedBy }}"
+
+[cookies]
+ title = "कुकी सहमति"
+ text = "हम आपके ब्राउज़िंग अनुभव को बेहतर बनाने और साइट ट्रैफ़िक का विश्लेषण करने के लिए कुकीज़ का उपयोग करते हैं।"
+ acceptAll = "सभी स्वीकार करें"
+ deny = "अस्वीकार करें"
+ managePreferences = "वरीयताएँ प्रबंधित करें"
+ settingsTitle = "कुकी वरीयताएँ"
+ savePreferences = "वरीयताएँ सहेजें"
+ cancel = "रद्द करें"
+ footerLink = "कुकी सेटिंग्स"
+ commentsDisabled = "जब तक आप कार्यात्मक कुकीज़ स्वीकार नहीं करते हैं, टिप्पणियाँ अक्षम हैं।"
+
+ [cookies.necessary]
+ title = "आवश्यक"
+ text = "ये कुकीज़ वेबसाइट के कार्य के लिए आवश्यक हैं और इन्हें अक्षम नहीं किया जा सकता।"
+
+ [cookies.analytics]
+ title = "विश्लेषण"
+ text = "ये कुकीज़ हमें यह समझने में मदद करती हैं कि विज़िटर हमारी वेबसाइट के साथ कैसे इंटरैक्ट करते हैं।"
+
+ [cookies.functional]
+ title = "कार्यात्मक"
+ text = "ये कुकीज़ टिप्पणियों और एम्बेडेड सामग्री जैसी सुविधाओं को सक्षम करती हैं."
diff --git a/themes/stack/i18n/hu.toml b/themes/stack/i18n/hu.toml
new file mode 100644
index 0000000..2ed7273
--- /dev/null
+++ b/themes/stack/i18n/hu.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Menü Kapcsolása"
+darkMode = "Sötét Mód"
+
+[list]
+ section = "Szekció"
+
+ [list.page]
+ one = "{{ .Count }} oldal"
+ other = "{{ .Count }} oldalak"
+
+ [list.subsection]
+ one = "Alszekció"
+ other = "Alszekciók"
+
+[article]
+ back = "Vissza"
+ tableOfContents = "Tartalomjegyzék"
+ relatedContent = "Kapcsolódó tartalom"
+ lastUpdatedOn = "Utolsó frissítés időpontja"
+
+ [article.readingTime]
+ one = "{{ .Count }} percnyi olvasmány"
+ other = "{{ .Count }} percnyi olvasmány"
+
+ [article.alert]
+ note = "Megjegyzés"
+ tip = "Tipp"
+ important = "Fontos"
+ warning = "Figyelmeztetés"
+ caution = "Óvatosság"
+
+ [article.codeblock]
+ copy = "Másolás"
+ copied = "Másolva!"
+
+[notFound]
+ title = "Nem található"
+ subtitle = "Ez az oldal nem létezik"
+
+[widget]
+ [widget.archives]
+ title = "Archívum"
+ more = "Több"
+
+ [widget.tagCloud]
+ title = "Cimkék"
+
+ [widget.categoriesCloud]
+ title = "Kategóriák"
+
+[search]
+ title = "Keresés"
+ placeholder = "Írj valamit..."
+ resultTitle = "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
+
+[footer]
+ builtWith = "{{ .Generator }} használatával készült"
+ designedBy = "A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte"
+
+[cookies]
+ title = "Süti hozzájárulás"
+ text = "Sütiket használunk a böngészési élmény javítása és a webhely forgalmának elemzése érdekében."
+ acceptAll = "Összes elfogadása"
+ deny = "Elutasítás"
+ managePreferences = "Beállítások kezelése"
+ settingsTitle = "Süti beállítások"
+ savePreferences = "Beállítások mentése"
+ cancel = "Mégse"
+ footerLink = "Süti beállítások"
+ commentsDisabled = "A hozzászólások le vannak tiltva, amíg nem fogadja el a funkcionális sütiket."
+
+ [cookies.necessary]
+ title = "Szükséges"
+ text = "Ezek a sütik szükségesek a webhely működéséhez és nem lehet őket letiltani."
+
+ [cookies.analytics]
+ title = "Analitikai"
+ text = "Ezek a sütik segítenek megérteni, hogyan lépnek kapcsolatba a látogatók a weboldalunkkal."
+
+ [cookies.functional]
+ title = "Funkcionális"
+ text = "Ezek a sütik olyan funkciókat tesznek lehetővé, mint a hozzászólások és a beágyazott tartalom."
diff --git a/themes/stack/i18n/id.toml b/themes/stack/i18n/id.toml
new file mode 100644
index 0000000..9681622
--- /dev/null
+++ b/themes/stack/i18n/id.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Tampilkan Menu"
+darkMode = "Mode Gelap"
+
+[list]
+ section = "Bagian"
+
+ [list.page]
+ one = "{{ .Count }} halaman"
+ other = "{{ .Count }} halaman"
+
+ [list.subsection]
+ one = "Subbagian"
+ other = "Subbagian"
+
+[article]
+ back = "Kembali"
+ tableOfContents = "Daftar Isi"
+ relatedContent = "Konten terkait"
+ lastUpdatedOn = "Terakhir diperbarui pada"
+
+ [article.readingTime]
+ one = "Waktu Membaca: {{ .Count }} menit"
+ other = "Waktu Membaca: {{ .Count }} menit"
+
+ [article.alert]
+ note = "Catatan"
+ tip = "Tips"
+ important = "Penting"
+ warning = "Peringatan"
+ caution = "Perhatian"
+
+ [article.codeblock]
+ copy = "Salin"
+ copied = "Disalin!"
+
+[notFound]
+ title = "Tidak ditemukan"
+ subtitle = "Halaman yang Anda akses tidak ditemukan."
+
+[widget]
+ [widget.archives]
+ title = "Arsip"
+ more = "Lebih"
+
+ [widget.tagCloud]
+ title = "Tag"
+
+ [widget.categoriesCloud]
+ title = "Kategori"
+
+[search]
+ title = "Cari"
+ placeholder = "Ketik sesuatu..."
+ resultTitle = "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
+
+[footer]
+ builtWith = "Dibangun dengan {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}"
+
+[cookies]
+ title = "Persetujuan Cookie"
+ text = "Kami menggunakan cookie untuk meningkatkan pengalaman browsing Anda dan menganalisis lalu lintas situs."
+ acceptAll = "Terima Semua"
+ deny = "Tolak"
+ managePreferences = "Kelola preferensi"
+ settingsTitle = "Preferensi Cookie"
+ savePreferences = "Simpan preferensi"
+ cancel = "Batal"
+ footerLink = "Pengaturan cookie"
+ commentsDisabled = "Komentar dinonaktifkan sampai Anda menerima cookie fungsional."
+
+ [cookies.necessary]
+ title = "Diperlukan"
+ text = "Cookie ini diperlukan agar situs web berfungsi dan tidak dapat dinonaktifkan."
+
+ [cookies.analytics]
+ title = "Analitik"
+ text = "Cookie ini membantu kami memahami bagaimana pengunjung berinteraksi dengan situs web kami."
+
+ [cookies.functional]
+ title = "Fungsional"
+ text = "Cookie ini mengaktifkan fitur seperti komentar dan konten yang disematkan."
diff --git a/themes/stack/i18n/it.toml b/themes/stack/i18n/it.toml
new file mode 100644
index 0000000..e9a705a
--- /dev/null
+++ b/themes/stack/i18n/it.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Toggle Menu"
+darkMode = "Modalità scura"
+
+[list]
+ section = "Sezione"
+
+ [list.page]
+ one = "{{ .Count }} pagina"
+ other = "{{ .Count }} pagine"
+
+ [list.subsection]
+ one = "Sottosezione"
+ other = "Sottosezioni"
+
+[article]
+ back = "Indietro"
+ tableOfContents = "Indice"
+ relatedContent = "Contenuti correlati"
+ lastUpdatedOn = "Aggiornato il"
+
+ [article.readingTime]
+ one = "{{ .Count }} min per leggere"
+ other = "{{ .Count }} min per leggere"
+
+ [article.alert]
+ note = "Nota"
+ tip = "Suggerimento"
+ important = "Importante"
+ warning = "Avvertenza"
+ caution = "Attenzione"
+
+ [article.codeblock]
+ copy = "Copia"
+ copied = "Copiato!"
+
+[notFound]
+ title = "Non trovato"
+ subtitle = "Questa pagina non esiste."
+
+[widget]
+ [widget.archives]
+ title = "Archivi"
+ more = "Di più"
+
+ [widget.tagCloud]
+ title = "Tag"
+
+ [widget.categoriesCloud]
+ title = "Categorie"
+
+[search]
+ title = "Cerca"
+ placeholder = "Scrivi qualcosa..."
+ resultTitle = "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
+
+[footer]
+ builtWith = "Realizzato con {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} realizzato da {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consenso ai cookie"
+ text = "Utilizziamo i cookie per migliorare la tua esperienza di navigazione e analizzare il traffico del sito."
+ acceptAll = "Accetta tutti"
+ deny = "Rifiuta"
+ managePreferences = "Gestisci preferenze"
+ settingsTitle = "Preferenze cookie"
+ savePreferences = "Salva preferenze"
+ cancel = "Annulla"
+ footerLink = "Impostazioni cookie"
+ commentsDisabled = "I commenti sono disabilitati finché non accetti i cookie funzionali."
+
+ [cookies.necessary]
+ title = "Necessari"
+ text = "Questi cookie sono necessari per il funzionamento del sito web e non possono essere disattivati."
+
+ [cookies.analytics]
+ title = "Analitici"
+ text = "Questi cookie ci aiutano a capire come i visitatori interagiscono con il nostro sito web."
+
+ [cookies.functional]
+ title = "Funzionali"
+ text = "Questi cookie abilitano funzionalità come commenti e contenuti incorporati."
diff --git a/themes/stack/i18n/ja.toml b/themes/stack/i18n/ja.toml
new file mode 100644
index 0000000..5ef680d
--- /dev/null
+++ b/themes/stack/i18n/ja.toml
@@ -0,0 +1,78 @@
+toggleMenu = "メニューを開く・閉じる"
+darkMode = "ダークモード"
+
+[list]
+ page = "{{ .Count }} ページ目"
+ section = "セクション"
+ subsection = "サブセクション"
+
+[article]
+ back = "前のページ"
+ tableOfContents = "目次"
+ relatedContent = "関連するコンテンツ"
+ lastUpdatedOn = "最終更新"
+ readingTime = "読了時間: {{ .Count }}分"
+
+ [article.alert]
+ note = "注記"
+ tip = "ヒント"
+ important = "重要"
+ warning = "警告"
+ caution = "注意"
+
+ [article.codeblock]
+ copy = "コピー"
+ copied = "コピーしました!"
+
+[notFound]
+ title = "404 Not Found"
+ subtitle = "指定されたページは存在しません。"
+
+[widget]
+ [widget.archives]
+ title = "アーカイブ"
+ more = "さらに見る"
+
+ [widget.tagCloud]
+ title = "タグ"
+
+ [widget.categoriesCloud]
+ title = "カテゴリ"
+
+[search]
+ title = "検索"
+ placeholder = "入力..."
+ resultTitle = "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
+
+[footer]
+ builtWith = "{{ .Generator }} で構築されています。"
+ designedBy = "テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。"
+
+[cookies]
+ title = "Cookieの同意"
+ text = "ブラウジング体験を向上させ、サイトトラフィックを分析するためにCookieを使用しています。"
+ acceptAll = "すべて受け入れる"
+ deny = "拒否"
+ managePreferences = "設定を管理"
+ settingsTitle = "Cookie設定"
+ savePreferences = "設定を保存"
+ cancel = "キャンセル"
+ footerLink = "Cookie設定"
+ commentsDisabled = "機能的なCookieを受け入れるまで、コメントは無効になっています。"
+
+ [cookies.necessary]
+ title = "必須"
+ text = "これらのCookieはウェブサイトの機能に必要であり、無効にすることはできません。"
+
+ [cookies.analytics]
+ title = "分析"
+ text = "これらのCookieは、訪問者が当サイトとどのように対話するかを理解するのに役立ちます。"
+
+ [cookies.functional]
+ title = "機能的"
+ text = "これらのCookieは、コメントや埋め込みコンテンツなどの機能を有効にします."
+
+[pagination]
+ jumpToPage = "ページにジャンプ"
+ jump = "ジャンプ"
+ pressEnter = "Enter キーでジャンプ"
diff --git a/themes/stack/i18n/ko.toml b/themes/stack/i18n/ko.toml
new file mode 100644
index 0000000..9ad984d
--- /dev/null
+++ b/themes/stack/i18n/ko.toml
@@ -0,0 +1,82 @@
+toggleMenu = "메뉴 여닫기"
+darkMode = "다크 모드"
+
+[list]
+ section = "섹션"
+
+ [list.page]
+ one = "{{ .Count }} 페이지"
+ other = "{{ .Count }} 페이지"
+
+ [list.subsection]
+ one = "서브섹션"
+ other = "서브섹션"
+
+[article]
+ back = "뒤로가기"
+ tableOfContents = "목차"
+ relatedContent = "관련 글"
+ lastUpdatedOn = "마지막 수정: "
+
+ [article.readingTime]
+ one = "{{ .Count }} 분 정도"
+ other = "{{ .Count }} 분 정도"
+
+ [article.alert]
+ note = "참고"
+ tip = "팁"
+ important = "중요"
+ warning = "경고"
+ caution = "주의"
+
+ [article.codeblock]
+ copy = "복사"
+ copied = "복사됨!"
+
+[notFound]
+ title = "찾을 수 없음"
+ subtitle = "페이지를 찾을 수 없습니다."
+
+[widget]
+ [widget.archives]
+ title = "보관함"
+ more = "더보기"
+
+ [widget.categoriesCloud]
+ title = "카테고리"
+
+ [widget.tagCloud]
+ title = "태그"
+
+[search]
+ title = "검색"
+ placeholder = "검색어를 입력하세요..."
+ resultTitle = "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
+
+[footer]
+ builtWith = "{{ .Generator }}로 만듦"
+ designedBy = "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
+
+[cookies]
+ title = "쿠키 동의"
+ text = "브라우징 경험을 향상시키고 사이트 트래픽을 분석하기 위해 쿠키를 사용합니다."
+ acceptAll = "모두 허용"
+ deny = "거부"
+ managePreferences = "설정 관리"
+ settingsTitle = "쿠키 설정"
+ savePreferences = "설정 저장"
+ cancel = "취소"
+ footerLink = "쿠키 설정"
+ commentsDisabled = "기능적 쿠키를 수락할 때까지 댓글이 비활성화됩니다."
+
+ [cookies.necessary]
+ title = "필수"
+ text = "이 쿠키는 웹사이트 기능에 필요하며 비활성화할 수 없습니다."
+
+ [cookies.analytics]
+ title = "분석"
+ text = "이 쿠키는 방문자가 웹사이트와 상호작용하는 방식을 이해하는 데 도움이 됩니다."
+
+ [cookies.functional]
+ title = "기능적"
+ text = "이 쿠키는 댓글 및 임베디드 콘텐츠와 같은 기능을 활성화합니다."
diff --git a/themes/stack/i18n/nl.toml b/themes/stack/i18n/nl.toml
new file mode 100644
index 0000000..a803d41
--- /dev/null
+++ b/themes/stack/i18n/nl.toml
@@ -0,0 +1,77 @@
+toggleMenu = "Open Menu"
+darkMode = "Donkere modus"
+
+[list]
+ section = "Sectie"
+
+ [list.page]
+ one = "{{ .Count }} pagina"
+ other = "{{ .Count }} pagina's"
+
+ [list.subsection]
+ one = "Subsectie"
+ other = "Subsecties"
+
+[article]
+ relatedContent = "Gerelateerde inhoud"
+ lastUpdatedOn = "Laatst bijgewerkt op"
+ readingTime = "{{ .Count }} leestijd"
+
+ [article.alert]
+ note = "Opmerking"
+ tip = "Tip"
+ important = "Belangrijk"
+ warning = "Waarschuwing"
+ caution = "Let op"
+
+ [article.codeblock]
+ copy = "Kopiëren"
+ copied = "Gekopieerd!"
+
+[notFound]
+ title = "Niet gevonden"
+ subtitle = "Deze pagina bestaat niet."
+
+[widget]
+ [widget.archives]
+ title = "Archief"
+ more = "Meer"
+
+ [widget.tagCloud]
+ title = "Tags"
+
+ [widget.categoriesCloud]
+ title = "Categorie"
+
+[search]
+ title = "Zoeken"
+ placeholder = "Typ iets"
+ resultTitle = "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
+
+[footer]
+ builtWith = "Gemaakt met {{ .Generator }}"
+ designedBy = "Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}"
+
+[cookies]
+ title = "Cookie-toestemming"
+ text = "We gebruiken cookies om uw browse-ervaring te verbeteren en siteverkeer te analyseren."
+ acceptAll = "Accepteer alles"
+ deny = "Weigeren"
+ managePreferences = "Voorkeuren beheren"
+ settingsTitle = "Cookie-voorkeuren"
+ savePreferences = "Voorkeuren opslaan"
+ cancel = "Annuleren"
+ footerLink = "Cookie-instellingen"
+ commentsDisabled = "Reacties zijn uitgeschakeld totdat u functionele cookies accepteert."
+
+ [cookies.necessary]
+ title = "Noodzakelijk"
+ text = "Deze cookies zijn vereist voor de werking van de website en kunnen niet worden uitgeschakeld."
+
+ [cookies.analytics]
+ title = "Analyse"
+ text = "Deze cookies helpen ons begrijpen hoe bezoekers omgaan met onze website."
+
+ [cookies.functional]
+ title = "Functioneel"
+ text = "Deze cookies maken functies mogelijk zoals reacties en ingesloten inhoud."
diff --git a/themes/stack/i18n/oc.toml b/themes/stack/i18n/oc.toml
new file mode 100644
index 0000000..c9ed85f
--- /dev/null
+++ b/themes/stack/i18n/oc.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Alternar menú"
+darkMode = "Mòde fosc"
+
+[list]
+ section = "Seccion"
+
+ [list.page]
+ one = "{{ .Count }} pagina"
+ other = "{{ .Count }} paginas"
+
+ [list.subsection]
+ one = "Josseccion"
+ other = "Josseccions"
+
+[article]
+ back = "Tornar"
+ tableOfContents = "Taula de contengut"
+ relatedContent = "Contenguts relacionats"
+ lastUpdatedOn = "Darrièra actualizacion"
+
+ [article.readingTime]
+ one = "{{ .Count }} minuta de lectura"
+ other = "{{ .Count }} minutas de lectura"
+
+ [article.alert]
+ note = "Nòta"
+ tip = "Conselh"
+ important = "Important"
+ warning = "Avertiment"
+ caution = "Atencion"
+
+ [article.codeblock]
+ copy = "Copiar"
+ copied = "Copiat!"
+
+[notFound]
+ title = "Non trobat"
+ subtitle = "Aquesta pagina existís pas"
+
+[widget]
+ [widget.archives]
+ title = "Archiu"
+ more = "Mai"
+
+ [widget.tagCloud]
+ title = "Etiquetas"
+
+ [widget.categoriesCloud]
+ title = "Categorias"
+
+[search]
+ title = "Cercar"
+ placeholder = "Picatz quicòm..."
+ resultTitle = "#PAGES_COUNT paginas dins (#TIME_SECONDS segons)"
+
+[footer]
+ builtWith = "Creat amb {{ .Generator }}"
+ designedBy = "Tàma {{ .Theme }} concebut per {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentiment de cookies"
+ text = "Utilizem cookies per melhorar vòstra experiéncia de navegacion e analisar lo trafic del site."
+ acceptAll = "Acceptar tot"
+ deny = "Refusar"
+ managePreferences = "Gerir las preferéncias"
+ settingsTitle = "Preferéncias de cookies"
+ savePreferences = "Enregistrar las preferéncias"
+ cancel = "Anullar"
+ footerLink = "Paramètres de cookies"
+ commentsDisabled = "Los comentaris son desactivats fins qu'acceptatz las cookies foncionalas."
+
+ [cookies.necessary]
+ title = "Necessaris"
+ text = "Aquestes cookies son necessàrias pel foncionament del site web e se pòdon pas desactivar."
+
+ [cookies.analytics]
+ title = "Analiticas"
+ text = "Aquestes cookies nos ajudan a comprendre cossí los visitaires interagisson amb nòstre site web."
+
+ [cookies.functional]
+ title = "Foncionalas"
+ text = "Aquestes cookies activan de foncionalitats coma los comentaris e lo contengut incorporat."
diff --git a/themes/stack/i18n/pl.toml b/themes/stack/i18n/pl.toml
new file mode 100644
index 0000000..c046a6b
--- /dev/null
+++ b/themes/stack/i18n/pl.toml
@@ -0,0 +1,93 @@
+toggleMenu = "Przełącz Menu"
+darkMode = "Tryb ciemny"
+
+[list]
+ section = "Sekcja"
+
+ [list.page]
+ one = "{{ .Count }} strona"
+ few = "{{ .Count }} strony"
+ many = "{{ .Count }} stron"
+ other = "{{ .Count }} stron"
+
+ [list.subsection]
+ one = "Podsekcja"
+ few = "Podsekcje"
+ many = "Podsekcji"
+ other = "Podsekcji"
+
+[article]
+ back = "Wróć"
+ tableOfContents = "Spis treści"
+ relatedContent = "Powiązane artykuły"
+ lastUpdatedOn = "Ostatnio zaktualizowany"
+
+ [article.readingTime]
+ one = "Przeczytasz w {{ .Count }} minutę"
+ few = "Przeczytasz w {{ .Count }} minuty"
+ many = "Przeczytasz w {{ .Count }} minut"
+ other = "Przeczytasz w {{ .Count }} minut"
+
+ [article.alert]
+ note = "Notatka"
+ tip = "Wskazówka"
+ important = "Ważne"
+ warning = "Ostrzeżenie"
+ caution = "Uwaga"
+
+ [article.codeblock]
+ copy = "Kopiuj"
+ copied = "Skopiowano!"
+
+[notFound]
+ title = "Nie znaleziono"
+ subtitle = "Ta strona nie istnieje"
+
+[widget]
+ [widget.archives]
+ title = "Archiwum"
+ more = "Więcej"
+
+ [widget.tagCloud]
+ title = "Tagi"
+
+ [widget.categoriesCloud]
+ title = "Kategorie"
+
+[search]
+ title = "Szukaj"
+ placeholder = "Wpisz coś..."
+
+ [search.resultTitle]
+ one = "#PAGES_COUNT strona (#TIME_SECONDS sekund)"
+ few = "#PAGES_COUNT strony (#TIME_SECONDS sekund)"
+ many = "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+ other = "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+
+[footer]
+ builtWith = "Zbudowano z {{ .Generator }}"
+ designedBy = "Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}"
+
+[cookies]
+ title = "Zgoda na pliki cookie"
+ text = "Używamy plików cookie, aby poprawić Twoje wrażenia z przeglądania i analizować ruch w witrynie."
+ acceptAll = "Akceptuj wszystkie"
+ deny = "Odrzuć"
+ managePreferences = "Zarządzaj preferencjami"
+ settingsTitle = "Preferencje plików cookie"
+ savePreferences = "Zapisz preferencje"
+ cancel = "Anuluj"
+ footerLink = "Ustawienia plików cookie"
+ commentsDisabled = "Komentarze są wyłączone, dopóki nie zaakceptujesz funkcjonalnych plików cookie."
+
+ [cookies.necessary]
+ title = "Niezbędne"
+ text = "Te pliki cookie są wymagane do działania witryny i nie można ich wyłączyć."
+
+ [cookies.analytics]
+ title = "Analityczne"
+ text = "Te pliki cookie pomagają nam zrozumieć, jak odwiedzający wchodzą w interakcję z naszą witryną."
+
+ [cookies.functional]
+ title = "Funkcjonalne"
+ text = "Te pliki cookie włączają funkcje takie jak komentarze i osadzone treści."
diff --git a/themes/stack/i18n/pt-br.toml b/themes/stack/i18n/pt-br.toml
new file mode 100644
index 0000000..86650f9
--- /dev/null
+++ b/themes/stack/i18n/pt-br.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Alternar Menu"
+darkMode = "Modo Escuro"
+
+[list]
+ section = "Seção"
+
+ [list.page]
+ one = "{{ .Count }} página"
+ other = "{{ .Count }} páginas"
+
+ [list.subsection]
+ one = "Subseção"
+ other = "Subseções"
+
+[article]
+ back = "Voltar"
+ tableOfContents = "Índice"
+ relatedContent = "Conteúdo relacionado"
+ lastUpdatedOn = "Última atualização em"
+
+ [article.readingTime]
+ one = "{{ .Count }} minuto de leitura"
+ other = "{{ .Count }} minutos de leitura"
+
+ [article.alert]
+ note = "Nota"
+ tip = "Dica"
+ important = "Importante"
+ warning = "Aviso"
+ caution = "Cuidado"
+
+ [article.codeblock]
+ copy = "Copiar"
+ copied = "Copiado!"
+
+[notFound]
+ title = "Não Encontrado"
+ subtitle = "Esta página não existe."
+
+[widget]
+ [widget.archives]
+ title = "Arquivos"
+ more = "Mais"
+
+ [widget.tagCloud]
+ title = "Tags"
+
+ [widget.categoriesCloud]
+ title = "Categorias"
+
+[search]
+ title = "Busca"
+ placeholder = "Digite algo..."
+ resultTitle = "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+
+[footer]
+ builtWith = "Criado com {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentimento de cookies"
+ text = "Usamos cookies para melhorar sua experiência de navegação e analisar o tráfego do site."
+ acceptAll = "Aceitar todos"
+ deny = "Recusar"
+ managePreferences = "Gerenciar preferências"
+ settingsTitle = "Preferências de cookies"
+ savePreferences = "Salvar preferências"
+ cancel = "Cancelar"
+ footerLink = "Configurações de cookies"
+ commentsDisabled = "Os comentários estão desativados até que você aceite os cookies funcionais."
+
+ [cookies.necessary]
+ title = "Necessários"
+ text = "Estes cookies são necessários para o funcionamento do site e não podem ser desativados."
+
+ [cookies.analytics]
+ title = "Analíticos"
+ text = "Estes cookies nos ajudam a entender como os visitantes interagem com nosso site."
+
+ [cookies.functional]
+ title = "Funcionais"
+ text = "Estes cookies habilitam recursos como comentários e conteúdo incorporado."
diff --git a/themes/stack/i18n/pt-pt.toml b/themes/stack/i18n/pt-pt.toml
new file mode 100644
index 0000000..377ef0b
--- /dev/null
+++ b/themes/stack/i18n/pt-pt.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Alternar Menu"
+darkMode = "Modo Escuro"
+
+[list]
+ section = "Secção"
+
+ [list.page]
+ one = "{{ .Count }} página"
+ other = "{{ .Count }} páginas"
+
+ [list.subsection]
+ one = "Subsecção"
+ other = "Subsecções"
+
+[article]
+ back = "Voltar"
+ tableOfContents = "Índice"
+ relatedContent = "Conteúdo relacionado"
+ lastUpdatedOn = "Última atualização a"
+
+ [article.readingTime]
+ one = "{{ .Count }} minuto de leitura"
+ other = "{{ .Count }} minutos de leitura"
+
+ [article.alert]
+ note = "Nota"
+ tip = "Dica"
+ important = "Importante"
+ warning = "Aviso"
+ caution = "Cuidado"
+
+ [article.codeblock]
+ copy = "Copiar"
+ copied = "Copiado!"
+
+[notFound]
+ title = "Não Encontrado"
+ subtitle = "Esta página não existe."
+
+[widget]
+ [widget.archives]
+ title = "Arquivos"
+ more = "Mais"
+
+ [widget.tagCloud]
+ title = "Tags"
+
+ [widget.categoriesCloud]
+ title = "Categorias"
+
+[search]
+ title = "Pesquisa"
+ placeholder = "Escreva algo..."
+ resultTitle = "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+
+[footer]
+ builtWith = "Criado com {{ .Generator }}"
+ designedBy = "Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}"
+
+[cookies]
+ title = "Consentimento de cookies"
+ text = "Utilizamos cookies para melhorar a sua experiência de navegação e analisar o tráfego do site."
+ acceptAll = "Aceitar todos"
+ deny = "Recusar"
+ managePreferences = "Gerir preferências"
+ settingsTitle = "Preferências de cookies"
+ savePreferences = "Guardar preferências"
+ cancel = "Cancelar"
+ footerLink = "Definições de cookies"
+ commentsDisabled = "Os comentários estão desativados até que aceite os cookies funcionais."
+
+ [cookies.necessary]
+ title = "Necessários"
+ text = "Estes cookies são necessários para o funcionamento do website e não podem ser desativados."
+
+ [cookies.analytics]
+ title = "Analíticos"
+ text = "Estes cookies ajudam-nos a compreender como os visitantes interagem com o nosso website."
+
+ [cookies.functional]
+ title = "Funcionais"
+ text = "Estes cookies permitem funcionalidades como comentários e conteúdo incorporado."
diff --git a/themes/stack/i18n/ru.toml b/themes/stack/i18n/ru.toml
new file mode 100644
index 0000000..618eb3b
--- /dev/null
+++ b/themes/stack/i18n/ru.toml
@@ -0,0 +1,83 @@
+toggleMenu = "Показать/скрыть меню"
+darkMode = "Тёмный режим"
+
+[list]
+ section = "Раздел"
+
+ [list.page]
+ one = "{{ .Count }} страница"
+ few = "{{ .Count }} страницы"
+ many = "{{ .Count }} страниц"
+ other = "{{ .Count }} страниц"
+
+ [list.subsection]
+ one = "Подраздел"
+ few = "Подразделы"
+ many = "Подразделы"
+ other = "Подразделы"
+
+[article]
+ back = "Назад"
+ relatedContent = "Также рекомендуем"
+ lastUpdatedOn = "Обновлено"
+ tableOfContents = "Содержание"
+ readingTime = "Время чтения: {{ .Count }} мин."
+
+ [article.alert]
+ note = "Примечание"
+ tip = "Совет"
+ important = "Важно"
+ warning = "Предупреждение"
+ caution = "Осторожно"
+
+ [article.codeblock]
+ copy = "Копировать"
+ copied = "Скопировано!"
+
+[notFound]
+ title = "Не найдено"
+ subtitle = "Запрашиваемая страница не существует"
+
+[widget]
+ [widget.archives]
+ title = "Архивы"
+ more = "Ещё"
+
+ [widget.tagCloud]
+ title = "Теги"
+
+ [widget.categoriesCloud]
+ title = "Категории"
+
+[search]
+ title = "Поиск"
+ placeholder = "Введите что-нибудь..."
+ resultTitle = "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
+
+[footer]
+ builtWith = "Создано при помощи {{ .Generator }}"
+ designedBy = "Тема {{ .Theme }}, дизайн {{ .DesignedBy }}"
+
+[cookies]
+ title = "Согласие на использование файлов cookie"
+ text = "Мы используем файлы cookie для улучшения вашего опыта просмотра и анализа трафика сайта."
+ acceptAll = "Принять все"
+ deny = "Отклонить"
+ managePreferences = "Управление настройками"
+ settingsTitle = "Настройки файлов cookie"
+ savePreferences = "Сохранить настройки"
+ cancel = "Отмена"
+ footerLink = "Настройки файлов cookie"
+ commentsDisabled = "Комментарии отключены, пока вы не примете функциональные файлы cookie."
+
+ [cookies.necessary]
+ title = "Необходимые"
+ text = "Эти файлы cookie необходимы для работы сайта и не могут быть отключены."
+
+ [cookies.analytics]
+ title = "Аналитика"
+ text = "Эти файлы cookie помогают нам понять, как посетители взаимодействуют с нашим сайтом."
+
+ [cookies.functional]
+ title = "Функциональные"
+ text = "Эти файлы cookie включают такие функции, как комментарии и встроенный контент."
diff --git a/themes/stack/i18n/sk.toml b/themes/stack/i18n/sk.toml
new file mode 100644
index 0000000..0a65fac
--- /dev/null
+++ b/themes/stack/i18n/sk.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Skryť menu"
+darkMode = "Tmavý režim"
+
+[list]
+ section = "Kategórie"
+
+ [list.page]
+ one = "{{ .Count }} stránka"
+ other = "{{ .Count }} stránok"
+
+ [list.subsection]
+ one = "Podkategória"
+ other = "Podkategórie"
+
+[article]
+ back = "Späť"
+ tableOfContents = "Obsah"
+ relatedContent = "Súvisiace"
+ lastUpdatedOn = "Naposledy aktualizované"
+
+ [article.readingTime]
+ one = "{{ .Count }} minúta"
+ other = "{{ .Count }} minút"
+
+ [article.alert]
+ note = "Poznámka"
+ tip = "Tip"
+ important = "Dôležité"
+ warning = "Varovanie"
+ caution = "Upozornenie"
+
+ [article.codeblock]
+ copy = "Kopírovať"
+ copied = "Skopírované!"
+
+[notFound]
+ title = "Nenájdené"
+ subtitle = "Tato stránka neexistuje"
+
+[widget]
+ [widget.archives]
+ title = "Archívy"
+ more = "Viac"
+
+ [widget.tagCloud]
+ title = "Štítky"
+
+ [widget.categoriesCloud]
+ title = "Kategórie"
+
+[search]
+ title = "Hladať"
+ placeholder = "Zadajte niečo..."
+ resultTitle = "#PAGES_COUNT stránok (#TIME_SECONDS sekúnd)"
+
+[footer]
+ builtWith = "Vytvorené pomocou {{ .Generator }}"
+ designedBy = "Šablóna {{ .Theme }} od {{ .DesignedBy }}"
+
+[cookies]
+ title = "Súhlas s cookies"
+ text = "Používame cookies na zlepšenie vášho prehliadania a analýzu návštevnosti webu."
+ acceptAll = "Prijať všetko"
+ deny = "Odmietnuť"
+ managePreferences = "Spravovať predvoľby"
+ settingsTitle = "Predvoľby cookies"
+ savePreferences = "Uložiť predvoľby"
+ cancel = "Zrušiť"
+ footerLink = "Nastavenia cookies"
+ commentsDisabled = "Komentáre sú zakázané, kým neprijmete funkčné cookies."
+
+ [cookies.necessary]
+ title = "Nutné"
+ text = "Tieto cookies sú nutné pre fungovanie webu a nemožno ich zakázať."
+
+ [cookies.analytics]
+ title = "Analytické"
+ text = "Tieto cookies nám pomáhajú pochopiť, ako návštevníci interagujú s naším webom."
+
+ [cookies.functional]
+ title = "Funkčné"
+ text = "Tieto cookies umožňujú funkcie ako komentáre a vložený obsah."
diff --git a/themes/stack/i18n/th.toml b/themes/stack/i18n/th.toml
new file mode 100644
index 0000000..2c96e43
--- /dev/null
+++ b/themes/stack/i18n/th.toml
@@ -0,0 +1,79 @@
+toggleMenu = "สลับเมนู"
+darkMode = "ธีมมืด"
+
+[list]
+ section = "หมวดหมู่"
+
+ [list.page]
+ one = "{{ .Count }} หน้า"
+ other = "{{ .Count }} หน้า"
+
+ [list.subsection]
+ one = "หมวดหมู่ย่อย"
+ other = "หมวดหมู่ย่อยอื่นๆ"
+
+[article]
+ back = "กลับไป"
+ tableOfContents = "สารบัญ"
+ relatedContent = "เนื้อหาคล้ายคลึงกัน"
+ lastUpdatedOn = "อัปเดตล่าสุดเมื่อ"
+
+ [article.readingTime]
+ one = "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
+ other = "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
+
+ [article.alert]
+ note = "หมายเหตุ"
+ tip = "เคล็ดลับ"
+ important = "สำคัญ"
+ warning = "คำเตือน"
+ caution = "ระวัง"
+
+ [article.codeblock]
+ copy = "คัดลอก"
+ copied = "คัดลอกแล้ว!"
+
+[notFound]
+ title = "ไม่พบหัวข้อ"
+ subtitle = "ไม่พบหน้านี้ในระบบ"
+
+[widget]
+ [widget.archives]
+ title = "เนื้อหาที่เก็บถาวรแล้ว"
+ more = "อื่นๆ นอกจากนี้"
+
+ [widget.tagCloud]
+ title = "แท็ก"
+
+[search]
+ title = "ค้นหา"
+ placeholder = "พิมพ์เพื่อค้นหา ..."
+ resultTitle = "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+
+[footer]
+ builtWith = "ถูกสร้างด้วย {{ .Generator }}"
+ designedBy = "ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}"
+
+[cookies]
+ title = "ความยินยอมคุกกี้"
+ text = "เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์การเรียกดูของคุณและวิเคราะห์การเข้าชมเว็บไซต์"
+ acceptAll = "ยอมรับทั้งหมด"
+ deny = "ปฏิเสธ"
+ managePreferences = "จัดการการตั้งค่า"
+ settingsTitle = "การตั้งค่าคุกกี้"
+ savePreferences = "บันทึกการตั้งค่า"
+ cancel = "ยกเลิก"
+ footerLink = "การตั้งค่าคุกกี้"
+ commentsDisabled = "ความคิดเห็นถูกปิดการใช้งานจนกว่าคุณจะยอมรับคุกกี้เชิงหน้าที่"
+
+ [cookies.necessary]
+ title = "จำเป็น"
+ text = "คุกกี้เหล่านี้จำเป็นสำหรับการทำงานของเว็บไซต์และไม่สามารถปิดการใช้งานได้"
+
+ [cookies.analytics]
+ title = "การวิเคราะห์"
+ text = "คุกกี้เหล่านี้ช่วยให้เราเข้าใจว่าผู้เยี่ยมชมโต้ตอบกับเว็บไซต์ของเราอย่างไร"
+
+ [cookies.functional]
+ title = "เชิงหน้าที่"
+ text = "คุกกี้เหล่านี้เปิดใช้งานคุณสมบัติต่างๆ เช่น ความคิดเห็นและเนื้อหาที่ฝังไว้"
diff --git a/themes/stack/i18n/tr.toml b/themes/stack/i18n/tr.toml
new file mode 100644
index 0000000..76cea58
--- /dev/null
+++ b/themes/stack/i18n/tr.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Menüyü Gizle"
+darkMode = "Koyu Mod"
+
+[list]
+ section = "Bölüm"
+
+ [list.page]
+ one = "{{ .Count }} makale"
+ other = "{{ .Count }} makale"
+
+ [list.subsection]
+ one = "Alt bölüm"
+ other = "Alt bölümler"
+
+[article]
+ back = "Geri"
+ tableOfContents = "İçindekiler"
+ relatedContent = "Benzer içerikler"
+ lastUpdatedOn = "Son güncelleme"
+
+ [article.readingTime]
+ one = "{{ .Count }} dakika okuma süresi"
+ other = "{{ .Count }} dakika okuma süresi"
+
+ [article.alert]
+ note = "Not"
+ tip = "İpucu"
+ important = "Önemli"
+ warning = "Uyarı"
+ caution = "Dikkat"
+
+ [article.codeblock]
+ copy = "Kopyala"
+ copied = "Kopyalandı!"
+
+[notFound]
+ title = "Bulunamadı"
+ subtitle = "Aradığınız sayfa mevcut değil."
+
+[widget]
+ [widget.archives]
+ title = "Arşiv"
+ more = "Daha fazla"
+
+ [widget.tagCloud]
+ title = "Etiketler"
+
+ [widget.categoriesCloud]
+ title = "Kategoriler"
+
+[search]
+ title = "Arama"
+ placeholder = "Birşeyler yazın..."
+ resultTitle = "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
+
+[footer]
+ builtWith = "{{ .Generator }} ile oluşturuldu."
+ designedBy = "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
+
+[cookies]
+ title = "Çerez Onayı"
+ text = "Tarayıcı deneyiminizi iyileştirmek ve site trafiğini analiz etmek için çerezler kullanıyoruz."
+ acceptAll = "Tümünü Kabul Et"
+ deny = "Reddet"
+ managePreferences = "Tercihleri yönet"
+ settingsTitle = "Çerez Tercihleri"
+ savePreferences = "Tercihleri kaydet"
+ cancel = "İptal"
+ footerLink = "Çerez ayarları"
+ commentsDisabled = "İşlevsel çerezleri kabul edene kadar yorumlar devre dışıdır."
+
+ [cookies.necessary]
+ title = "Gerekli"
+ text = "Bu çerezler web sitesinin çalışması için gereklidir ve devre dışı bırakılamaz."
+
+ [cookies.analytics]
+ title = "Analitik"
+ text = "Bu çerezler, ziyaretçilerin web sitemizle nasıl etkileşimde bulunduğunu anlamamıza yardımcı olur."
+
+ [cookies.functional]
+ title = "İşlevsel"
+ text = "Bu çerezler, yorumlar ve gömülü içerik gibi özellikleri etkinleştirir."
diff --git a/themes/stack/i18n/uk.toml b/themes/stack/i18n/uk.toml
new file mode 100644
index 0000000..6053cb0
--- /dev/null
+++ b/themes/stack/i18n/uk.toml
@@ -0,0 +1,83 @@
+toggleMenu = "Показати меню"
+darkMode = "Темна тема"
+
+[list]
+ section = "Секція"
+
+ [list.page]
+ one = "{{ .Count }} сторінка"
+ few = "{{ .Count }} сторінки"
+ other = "{{ .Count }} сторінок"
+
+ [list.subsection]
+ one = "Підсекція"
+ other = "Підсекції"
+
+[article]
+ back = "Назад"
+ tableOfContents = "Зміст"
+ relatedContent = "Схожі матеріали"
+ lastUpdatedOn = "Востаннє оновлено"
+
+ [article.readingTime]
+ one = "Час читання: {{ .Count }} хв"
+ other = "Час читання: {{ .Count }} хв"
+
+ [article.alert]
+ note = "Примітка"
+ tip = "Порада"
+ important = "Важливо"
+ warning = "Попередження"
+ caution = "Обережно"
+
+ [article.codeblock]
+ copy = "Копіювати"
+ copied = "Скопійовано!"
+
+[notFound]
+ title = "Не знайдено"
+ subtitle = "Ця сторінка не існує"
+
+[widget]
+ [widget.archives]
+ title = "Архіви"
+ more = "Більше"
+
+ [widget.tagCloud]
+ title = "Теґи"
+
+ [widget.categoriesCloud]
+ title = "Категорії"
+
+[search]
+ title = "Пошук"
+ placeholder = "Напишіть що-небудь..."
+ resultTitle = "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
+
+[footer]
+ builtWith = "Створено з {{ .Generator }}"
+ designedBy = "Тема {{ .Theme }}, дизайн {{ .DesignedBy }}"
+
+[cookies]
+ title = "Згода на використання файлів cookie"
+ text = "Ми використовуємо файли cookie для покращення вашого досвіду перегляду та аналізу трафіку сайту."
+ acceptAll = "Прийняти все"
+ deny = "Відхилити"
+ managePreferences = "Керувати налаштуваннями"
+ settingsTitle = "Налаштування файлів cookie"
+ savePreferences = "Зберегти налаштування"
+ cancel = "Скасувати"
+ footerLink = "Налаштування файлів cookie"
+ commentsDisabled = "Коментарі вимкнено, доки ви не приймете функціональні файли cookie."
+
+ [cookies.necessary]
+ title = "Необхідні"
+ text = "Ці файли cookie необхідні для роботи сайту і не можуть бути вимкнені."
+
+ [cookies.analytics]
+ title = "Аналітика"
+ text = "Ці файли cookie допомагають нам зрозуміти, як відвідувачі взаємодіють з нашим сайтом."
+
+ [cookies.functional]
+ title = "Функціональні"
+ text = "Ці файли cookie вмикають такі функції, як коментарі та вбудований контент."
diff --git a/themes/stack/i18n/vi.toml b/themes/stack/i18n/vi.toml
new file mode 100644
index 0000000..516c987
--- /dev/null
+++ b/themes/stack/i18n/vi.toml
@@ -0,0 +1,82 @@
+toggleMenu = "Hiển thị Menu"
+darkMode = "Chế độ nền tối"
+
+[list]
+ section = "Section"
+
+ [list.page]
+ one = "{{ .Count }} trang"
+ other = "{{ .Count }} trang"
+
+ [list.subsection]
+ one = "Subsection"
+ other = "Subsections"
+
+[article]
+ back = "Trở lại"
+ tableOfContents = "Mục lục"
+ relatedContent = "Bài viết liên quan"
+ lastUpdatedOn = "Cập nhật lần cuối"
+
+ [article.readingTime]
+ one = "{{ .Count }} phút đọc"
+ other = "{{ .Count }} phút đọc"
+
+ [article.alert]
+ note = "Ghi chú"
+ tip = "Mẹo"
+ important = "Quan trọng"
+ warning = "Cảnh báo"
+ caution = "Thận trọng"
+
+ [article.codeblock]
+ copy = "Sao chép"
+ copied = "Đã sao chép!"
+
+[notFound]
+ title = "Không tìm thấy"
+ subtitle = "Trang này không tồn tại"
+
+[widget]
+ [widget.archives]
+ title = "Lưu trữ"
+ more = "Còn nữa"
+
+ [widget.tagCloud]
+ title = "Nhãn dán"
+
+ [widget.categoriesCloud]
+ title = "Chuỗi bài"
+
+[search]
+ title = "Tìm kiếm"
+ placeholder = "Nhập từ khoá ..."
+ resultTitle = "#PAGES_COUNT trang (#TIME_SECONDS giây)"
+
+[footer]
+ builtWith = "Built with {{ .Generator }}"
+ designedBy = "Theme {{ .Theme }} thiết kế bởi {{ .DesignedBy }}"
+
+[cookies]
+ title = "Đồng ý cookie"
+ text = "Chúng tôi sử dụng cookie để nâng cao trải nghiệm duyệt web của bạn và phân tích lưu lượng truy cập trang web."
+ acceptAll = "Chấp nhận tất cả"
+ deny = "Từ chối"
+ managePreferences = "Quản lý tùy chọn"
+ settingsTitle = "Tùy chọn cookie"
+ savePreferences = "Lưu tùy chọn"
+ cancel = "Hủy"
+ footerLink = "Cài đặt cookie"
+ commentsDisabled = "Bình luận bị vô hiệu hóa cho đến khi bạn chấp nhận cookie chức năng."
+
+ [cookies.necessary]
+ title = "Cần thiết"
+ text = "Những cookie này là cần thiết để trang web hoạt động và không thể vô hiệu hóa."
+
+ [cookies.analytics]
+ title = "Phân tích"
+ text = "Những cookie này giúp chúng tôi hiểu cách khách truy cập tương tác với trang web của chúng tôi."
+
+ [cookies.functional]
+ title = "Chức năng"
+ text = "Những cookie này cho phép các tính năng như bình luận và nội dung nhúng."
diff --git a/themes/stack/i18n/zh-hant-hk.toml b/themes/stack/i18n/zh-hant-hk.toml
new file mode 100644
index 0000000..59e3052
--- /dev/null
+++ b/themes/stack/i18n/zh-hant-hk.toml
@@ -0,0 +1,78 @@
+toggleMenu = "切換選單"
+darkMode = "深色模式"
+
+[list]
+ page = "{{ .Count }} 篇文章"
+ section = "章節"
+ subsection = "子章節"
+
+[article]
+ back = "返回"
+ tableOfContents = "目錄"
+ relatedContent = "相關內容"
+ lastUpdatedOn = "上次改過於"
+ readingTime = "閱讀時間 {{ .Count }} 分鐘"
+
+ [article.alert]
+ note = "備註"
+ tip = "提示"
+ important = "重要"
+ warning = "警告"
+ caution = "注意"
+
+ [article.codeblock]
+ copy = "複製"
+ copied = "已複製!"
+
+[notFound]
+ title = "找不到頁面"
+ subtitle = "本頁面並不存在"
+
+[widget]
+ [widget.archives]
+ title = "歸檔"
+ more = "更多"
+
+ [widget.tagCloud]
+ title = "標籤"
+
+ [widget.categoriesCloud]
+ title = "分類"
+
+[search]
+ title = "搜尋"
+ placeholder = "輸入關鍵字..."
+ resultTitle = "找到 #PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+
+[footer]
+ builtWith = "使用 {{ .Generator }} 建立"
+ designedBy = "主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計"
+
+[cookies]
+ title = "Cookie 同意"
+ text = "我們使用 Cookie 來增強您的瀏覽體驗並分析網站流量。"
+ acceptAll = "接受全部"
+ deny = "拒絕"
+ managePreferences = "管理偏好設定"
+ settingsTitle = "Cookie 偏好設定"
+ savePreferences = "儲存偏好設定"
+ cancel = "取消"
+ footerLink = "Cookie 設定"
+ commentsDisabled = "評論已停用,直到您接受功能性 Cookie。"
+
+ [cookies.necessary]
+ title = "必要"
+ text = "這些 Cookie 是網站運作所必需的,無法停用。"
+
+ [cookies.analytics]
+ title = "分析"
+ text = "這些 Cookie 幫助我們了解訪客如何與我們的網站互動。"
+
+ [cookies.functional]
+ title = "功能性"
+ text = "這些 Cookie 啟用評論和嵌入內容等功能."
+
+[pagination]
+ jumpToPage = "跳轉到頁碼"
+ jump = "跳轉"
+ pressEnter = "按 Enter 鍵跳轉"
diff --git a/themes/stack/i18n/zh-hant-tw.toml b/themes/stack/i18n/zh-hant-tw.toml
new file mode 100644
index 0000000..83bf589
--- /dev/null
+++ b/themes/stack/i18n/zh-hant-tw.toml
@@ -0,0 +1,78 @@
+toggleMenu = "切換選單"
+darkMode = "夜晚模式"
+
+[list]
+ section = "段落"
+ page = "第 {{ .Count }} 頁"
+ subsection = "小節"
+
+[article]
+ back = "返回"
+ tableOfContents = "目錄"
+ relatedContent = "相關文章"
+ lastUpdatedOn = "最後更新"
+ readingTime = "閱讀時間: {{ .Count }} 分鐘"
+
+ [article.alert]
+ note = "備註"
+ tip = "提示"
+ important = "重要"
+ warning = "警告"
+ caution = "注意"
+
+ [article.codeblock]
+ copy = "複製"
+ copied = "已複製!"
+
+[notFound]
+ title = "404 錯誤"
+ subtitle = "頁面不存在"
+
+[widget]
+ [widget.archives]
+ title = "紀錄"
+ more = "更多"
+
+ [widget.tagCloud]
+ title = "標籤雲"
+
+ [widget.categoriesCloud]
+ title = "分類"
+
+[search]
+ title = "搜尋"
+ placeholder = "輸入關鍵字..."
+ resultTitle = "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+
+[footer]
+ builtWith = "使用 {{ .Generator }} 建立"
+ designedBy = "主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計"
+
+[cookies]
+ title = "Cookie 同意"
+ text = "我們使用 Cookie 來增強您的瀏覽體驗並分析網站流量。"
+ acceptAll = "接受全部"
+ deny = "拒絕"
+ managePreferences = "管理偏好設定"
+ settingsTitle = "Cookie 偏好設定"
+ savePreferences = "儲存偏好設定"
+ cancel = "取消"
+ footerLink = "Cookie 設定"
+ commentsDisabled = "評論已停用,直到您接受功能性 Cookie。"
+
+ [cookies.necessary]
+ title = "必要"
+ text = "這些 Cookie 是網站運作所必需的,無法停用。"
+
+ [cookies.analytics]
+ title = "分析"
+ text = "這些 Cookie 幫助我們了解訪客如何與我們的網站互動。"
+
+ [cookies.functional]
+ title = "功能性"
+ text = "這些 Cookie 啟用評論和嵌入內容等功能."
+
+[pagination]
+ jumpToPage = "跳轉到頁碼"
+ jump = "跳轉"
+ pressEnter = "按 Enter 鍵跳轉"
diff --git a/themes/stack/i18n/zh.toml b/themes/stack/i18n/zh.toml
new file mode 100644
index 0000000..79d3678
--- /dev/null
+++ b/themes/stack/i18n/zh.toml
@@ -0,0 +1,78 @@
+toggleMenu = "切换菜单"
+darkMode = "暗色模式"
+
+[list]
+ page = "{{ .Count }} 个页面"
+ section = "章节"
+ subsection = "子章节"
+
+[article]
+ back = "返回"
+ tableOfContents = "目录"
+ relatedContent = "相关文章"
+ lastUpdatedOn = "最后更新于"
+ readingTime = "阅读时长: {{ .Count }} 分钟"
+
+ [article.alert]
+ note = "备注"
+ tip = "提示"
+ important = "重要"
+ warning = "警告"
+ caution = "注意"
+
+ [article.codeblock]
+ copy = "复制"
+ copied = "已复制!"
+
+[notFound]
+ title = "404 错误"
+ subtitle = "页面不存在"
+
+[widget]
+ [widget.archives]
+ title = "归档"
+ more = "更多"
+
+ [widget.tagCloud]
+ title = "标签云"
+
+ [widget.categoriesCloud]
+ title = "分类"
+
+[search]
+ title = "搜索"
+ placeholder = "输入关键词..."
+ resultTitle = "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
+
+[footer]
+ builtWith = "使用 {{ .Generator }} 构建"
+ designedBy = "主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计"
+
+[cookies]
+ title = "Cookie 同意"
+ text = "我们使用 Cookie 来增强您的浏览体验并分析网站流量。"
+ acceptAll = "接受所有"
+ deny = "拒绝"
+ managePreferences = "管理偏好设置"
+ settingsTitle = "Cookie 偏好设置"
+ savePreferences = "保存偏好设置"
+ cancel = "取消"
+ footerLink = "Cookie 设置"
+ commentsDisabled = "评论已禁用,直到您接受功能性 Cookie。"
+
+ [cookies.necessary]
+ title = "必要"
+ text = "这些 Cookie 是网站运行所必需的,无法禁用。"
+
+ [cookies.analytics]
+ title = "分析"
+ text = "这些 Cookie 帮助我们了解访问者如何与我们的网站互动。"
+
+ [cookies.functional]
+ title = "功能性"
+ text = "这些 Cookie 启用评论和嵌入内容等功能."
+
+[pagination]
+ jumpToPage = "跳转到页码"
+ jump = "跳转"
+ pressEnter = "按 Enter 键跳转"
diff --git a/themes/stack/images/screenshot.png b/themes/stack/images/screenshot.png
new file mode 100644
index 0000000..efcfd8a
Binary files /dev/null and b/themes/stack/images/screenshot.png differ
diff --git a/themes/stack/images/tn.png b/themes/stack/images/tn.png
new file mode 100644
index 0000000..f85fd75
Binary files /dev/null and b/themes/stack/images/tn.png differ
diff --git a/themes/stack/layouts/404.html b/themes/stack/layouts/404.html
new file mode 100644
index 0000000..8ebfba7
--- /dev/null
+++ b/themes/stack/layouts/404.html
@@ -0,0 +1,45 @@
+{{ define "main" }}
+ ++{{ else }} ++ + + {{- with .AlertTitle -}} + {{ . }} + {{- else -}} + {{ or (i18n (printf "article.alert.%s" $type)) (title $type) }} + {{- end -}} + +++ {{ .Text }} ++
+ {{ .Text }} ++{{ end }} \ No newline at end of file diff --git a/themes/stack/layouts/_markup/render-codeblock-mermaid.html b/themes/stack/layouts/_markup/render-codeblock-mermaid.html new file mode 100644 index 0000000..bb0f689 --- /dev/null +++ b/themes/stack/layouts/_markup/render-codeblock-mermaid.html @@ -0,0 +1,4 @@ + +{{- .Page.Store.Set "hasMermaid" true -}} diff --git a/themes/stack/layouts/_markup/render-heading.html b/themes/stack/layouts/_markup/render-heading.html new file mode 100644 index 0000000..f79308a --- /dev/null +++ b/themes/stack/layouts/_markup/render-heading.html @@ -0,0 +1,6 @@ +
Bilibili 视频av号或BV号错误!请检查视频av号或BV号是否正确
+当前视频av或BV号:{{ $vid }},视频分P:{{ $videopage }}
+{{ end }} + ++\ No newline at end of file diff --git a/themes/stack/layouts/_shortcodes/tencent.html b/themes/stack/layouts/_shortcodes/tencent.html new file mode 100644 index 0000000..463dec5 --- /dev/null +++ b/themes/stack/layouts/_shortcodes/tencent.html @@ -0,0 +1,10 @@ +{{ $vid := .Get 0 }} +{{ .Inner | markdownify }}
+ {{- if or (.Get "author") (.Get "source") -}} + ― + {{- if .Get "author" -}} + + {{- .Get "author" -}}{{- if .Get "source" -}}, {{ end -}} + + {{- end -}} + {{- with .Get "url" -}}{{- end -}} + {{ .Get "source" }} + {{- if .Get "url" -}}{{- end -}} + + {{- end -}} +
{{ T "cookies.commentsDisabled" }}
+ +