diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css
index 4a5b2722..f702bc11 100644
--- a/assets/css/compiled/main.css
+++ b/assets/css/compiled/main.css
@@ -38,6 +38,7 @@
--font-weight-extrabold: 800;
--tracking-normal: 0em;
--leading-snug: 1.375;
+ --leading-relaxed: 1.625;
--radius-md: 0.375rem;
--radius-lg: 0.5rem;
--radius-xl: 0.75rem;
@@ -984,6 +985,9 @@
.ml-2 {
margin-left: calc(var(--spacing) * 2);
}
+ .ml-auto {
+ margin-left: auto;
+ }
.box-border {
box-sizing: border-box;
}
@@ -1088,6 +1092,9 @@
.h-3 {
height: calc(var(--spacing) * 3);
}
+ .h-4 {
+ height: calc(var(--spacing) * 4);
+ }
.h-5 {
height: calc(var(--spacing) * 5);
}
@@ -1166,6 +1173,9 @@
.w-3 {
width: calc(var(--spacing) * 3);
}
+ .w-4 {
+ width: calc(var(--spacing) * 4);
+ }
.w-5 {
width: calc(var(--spacing) * 5);
}
@@ -1317,6 +1327,9 @@
.scale-\[1\.02\] {
scale: 1.02;
}
+ .-rotate-90 {
+ rotate: calc(90deg * -1);
+ }
.transform {
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
}
@@ -1372,6 +1385,9 @@
.justify-center {
justify-content: center;
}
+ .gap-2 {
+ gap: calc(var(--spacing) * 2);
+ }
.gap-4 {
gap: calc(var(--spacing) * 4);
}
@@ -1548,6 +1564,10 @@
border-bottom-style: var(--tw-border-style);
border-bottom-width: 2px;
}
+ .border-l-4 {
+ border-left-style: var(--tw-border-style);
+ border-left-width: 4px;
+ }
.border-dotted {
--tw-border-style: dotted;
border-style: dotted;
@@ -1949,6 +1969,14 @@
--tw-leading: 1.6;
line-height: 1.6;
}
+ .leading-relaxed {
+ --tw-leading: var(--leading-relaxed);
+ line-height: var(--leading-relaxed);
+ }
+ .leading-snug {
+ --tw-leading: var(--leading-snug);
+ line-height: var(--leading-snug);
+ }
.font-bold {
--tw-font-weight: var(--font-weight-bold);
font-weight: var(--font-weight-bold);
@@ -1996,6 +2024,12 @@
.\!text-neutral {
color: rgba(var(--color-neutral), 1) !important;
}
+ .text-current {
+ color: currentcolor;
+ }
+ .text-inherit {
+ color: inherit;
+ }
.text-neutral-50 {
color: rgba(var(--color-neutral-50), 1);
}
@@ -2135,6 +2169,10 @@
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
+ .shadow-sm {
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
.shadow-xl {
--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -2268,6 +2306,11 @@
.scrollbar-track-neutral-200 {
--scrollbar-track: oklch(92.2% 0 0);
}
+ .group-open\:rotate-0 {
+ &:is(:where(.group):is([open], :popover-open, :open) *) {
+ rotate: 0deg;
+ }
+ }
.group-hover\:opacity-100 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
@@ -2358,6 +2401,20 @@
border-top-color: transparent;
}
}
+ .marker\:hidden {
+ & *::marker {
+ display: none;
+ }
+ &::marker {
+ display: none;
+ }
+ & *::-webkit-details-marker {
+ display: none;
+ }
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
.before\:absolute {
&::before {
content: var(--tw-content);
@@ -3278,11 +3335,26 @@
}
}
}
+ .print\:block {
+ @media print {
+ display: block;
+ }
+ }
.print\:hidden {
@media print {
display: none;
}
}
+ .print\:break-inside-avoid {
+ @media print {
+ break-inside: avoid;
+ }
+ }
+ .\[\&\:\:-webkit-details-marker\]\:hidden {
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
}
@layer utilities {
.prose .chroma {
@@ -3522,6 +3594,174 @@ body.zen-mode-enable {
.dark .ios-toggle::after {
background: #f5f5f5;
}
+@layer components {
+ :root {
+ --adm-note-border: oklch(62.3% 0.214 259.815);
+ --adm-note-bg: oklch(97% 0.014 254.604);
+ --adm-note-text: oklch(37.9% 0.146 265.522);
+ --adm-tip-border: oklch(70.4% 0.14 182.503);
+ --adm-tip-bg: oklch(98.4% 0.014 180.72);
+ --adm-tip-text: oklch(38.6% 0.063 188.416);
+ --adm-important-border: oklch(62.7% 0.265 303.9);
+ --adm-important-bg: oklch(97.7% 0.014 308.299);
+ --adm-important-text: oklch(38.1% 0.176 304.987);
+ --adm-warning-border: oklch(70.5% 0.213 47.604);
+ --adm-warning-bg: oklch(98% 0.016 73.684);
+ --adm-warning-text: oklch(40.8% 0.123 38.172);
+ --adm-caution-border: oklch(63.7% 0.237 25.331);
+ --adm-caution-bg: oklch(97.1% 0.013 17.38);
+ --adm-caution-text: oklch(39.6% 0.141 25.723);
+ --adm-abstract-border: oklch(71.5% 0.143 215.221);
+ --adm-abstract-bg: oklch(98.4% 0.019 200.873);
+ --adm-abstract-text: oklch(39.8% 0.07 227.392);
+ --adm-info-border: oklch(68.5% 0.169 237.323);
+ --adm-info-bg: oklch(97.7% 0.013 236.62);
+ --adm-info-text: oklch(39.1% 0.09 240.876);
+ --adm-todo-border: oklch(55.4% 0.046 257.417);
+ --adm-todo-bg: oklch(98.4% 0.003 247.858);
+ --adm-todo-text: oklch(27.9% 0.041 260.031);
+ --adm-success-border: oklch(72.3% 0.219 149.579);
+ --adm-success-bg: oklch(98.2% 0.018 155.826);
+ --adm-success-text: oklch(39.3% 0.095 152.535);
+ --adm-question-border: oklch(76.9% 0.188 70.08);
+ --adm-question-bg: oklch(98.7% 0.022 95.277);
+ --adm-question-text: oklch(41.4% 0.112 45.904);
+ --adm-failure-border: oklch(65.6% 0.241 354.308);
+ --adm-failure-bg: oklch(97.1% 0.014 343.198);
+ --adm-failure-text: oklch(40.8% 0.153 2.432);
+ --adm-danger-border: oklch(63.7% 0.237 25.331);
+ --adm-danger-bg: oklch(97.1% 0.013 17.38);
+ --adm-danger-text: oklch(39.6% 0.141 25.723);
+ --adm-bug-border: oklch(64.5% 0.246 16.439);
+ --adm-bug-bg: oklch(96.9% 0.015 12.422);
+ --adm-bug-text: oklch(41% 0.159 10.272);
+ --adm-example-border: oklch(55.8% 0.288 302.321);
+ --adm-example-bg: oklch(97.7% 0.014 308.299);
+ --adm-example-text: oklch(38.1% 0.176 304.987);
+ --adm-quote-border: oklch(55.1% 0.027 264.364);
+ --adm-quote-bg: oklch(98.5% 0.002 247.839);
+ --adm-quote-text: oklch(27.8% 0.033 256.848);
+ }
+ html.dark {
+ --adm-note-bg: color-mix(in oklab, oklch(37.9% 0.146 265.522) 60%, transparent);
+ --adm-note-text: oklch(93.2% 0.032 255.585);
+ --adm-tip-bg: color-mix(in oklab, oklch(38.6% 0.063 188.416) 60%, transparent);
+ --adm-tip-text: oklch(95.3% 0.051 180.801);
+ --adm-important-bg: color-mix(in oklab, oklch(38.1% 0.176 304.987) 60%, transparent);
+ --adm-important-text: oklch(94.6% 0.033 307.174);
+ --adm-warning-bg: color-mix(in oklab, oklch(40.8% 0.123 38.172) 60%, transparent);
+ --adm-warning-text: oklch(95.4% 0.038 75.164);
+ --adm-caution-bg: color-mix(in oklab, oklch(39.6% 0.141 25.723) 60%, transparent);
+ --adm-caution-text: oklch(93.6% 0.032 17.717);
+ --adm-abstract-bg: color-mix(in oklab, oklch(39.8% 0.07 227.392) 60%, transparent);
+ --adm-abstract-text: oklch(95.6% 0.045 203.388);
+ --adm-info-bg: color-mix(in oklab, oklch(39.1% 0.09 240.876) 60%, transparent);
+ --adm-info-text: oklch(95.1% 0.026 236.824);
+ --adm-todo-bg: oklch(27.9% 0.041 260.031);
+ --adm-todo-text: oklch(96.8% 0.007 247.896);
+ --adm-success-bg: color-mix(in oklab, oklch(39.3% 0.095 152.535) 60%, transparent);
+ --adm-success-text: oklch(96.2% 0.044 156.743);
+ --adm-question-bg: color-mix(in oklab, oklch(41.4% 0.112 45.904) 60%, transparent);
+ --adm-question-text: oklch(96.2% 0.059 95.617);
+ --adm-failure-bg: color-mix(in oklab, oklch(40.8% 0.153 2.432) 60%, transparent);
+ --adm-failure-text: oklch(94.8% 0.028 342.258);
+ --adm-danger-bg: color-mix(in oklab, oklch(39.6% 0.141 25.723) 60%, transparent);
+ --adm-danger-text: oklch(93.6% 0.032 17.717);
+ --adm-bug-bg: color-mix(in oklab, oklch(41% 0.159 10.272) 60%, transparent);
+ --adm-bug-text: oklch(94.1% 0.03 12.58);
+ --adm-example-bg: color-mix(in oklab, oklch(38.1% 0.176 304.987) 60%, transparent);
+ --adm-example-text: oklch(94.6% 0.033 307.174);
+ --adm-quote-bg: color-mix(in oklab, oklch(21% 0.034 264.665) 60%, transparent);
+ --adm-quote-text: oklch(96.7% 0.003 264.542);
+ }
+ .admonition .admonition-content > * {
+ margin-block: 0 !important;
+ }
+ .admonition .admonition-content > * + * {
+ margin-top: calc(var(--spacing) * 3);
+ }
+ .admonition {
+ margin-block: calc(var(--spacing) * 3);
+ }
+ .prose .admonition + * {
+ margin-top: calc(var(--spacing) * 0);
+ }
+ .admonition[data-type="note"] {
+ border-color: var(--adm-note-border);
+ background-color: var(--adm-note-bg);
+ color: var(--adm-note-text);
+ }
+ .admonition[data-type="tip"] {
+ border-color: var(--adm-tip-border);
+ background-color: var(--adm-tip-bg);
+ color: var(--adm-tip-text);
+ }
+ .admonition[data-type="important"] {
+ border-color: var(--adm-important-border);
+ background-color: var(--adm-important-bg);
+ color: var(--adm-important-text);
+ }
+ .admonition[data-type="warning"] {
+ border-color: var(--adm-warning-border);
+ background-color: var(--adm-warning-bg);
+ color: var(--adm-warning-text);
+ }
+ .admonition[data-type="caution"] {
+ border-color: var(--adm-caution-border);
+ background-color: var(--adm-caution-bg);
+ color: var(--adm-caution-text);
+ }
+ .admonition[data-type="abstract"] {
+ border-color: var(--adm-abstract-border);
+ background-color: var(--adm-abstract-bg);
+ color: var(--adm-abstract-text);
+ }
+ .admonition[data-type="info"] {
+ border-color: var(--adm-info-border);
+ background-color: var(--adm-info-bg);
+ color: var(--adm-info-text);
+ }
+ .admonition[data-type="todo"] {
+ border-color: var(--adm-todo-border);
+ background-color: var(--adm-todo-bg);
+ color: var(--adm-todo-text);
+ }
+ .admonition[data-type="success"] {
+ border-color: var(--adm-success-border);
+ background-color: var(--adm-success-bg);
+ color: var(--adm-success-text);
+ }
+ .admonition[data-type="question"] {
+ border-color: var(--adm-question-border);
+ background-color: var(--adm-question-bg);
+ color: var(--adm-question-text);
+ }
+ .admonition[data-type="failure"] {
+ border-color: var(--adm-failure-border);
+ background-color: var(--adm-failure-bg);
+ color: var(--adm-failure-text);
+ }
+ .admonition[data-type="danger"] {
+ border-color: var(--adm-danger-border);
+ background-color: var(--adm-danger-bg);
+ color: var(--adm-danger-text);
+ }
+ .admonition[data-type="bug"] {
+ border-color: var(--adm-bug-border);
+ background-color: var(--adm-bug-bg);
+ color: var(--adm-bug-text);
+ }
+ .admonition[data-type="example"] {
+ border-color: var(--adm-example-border);
+ background-color: var(--adm-example-bg);
+ color: var(--adm-example-text);
+ }
+ .admonition[data-type="quote"] {
+ border-color: var(--adm-quote-border);
+ background-color: var(--adm-quote-bg);
+ color: var(--adm-quote-text);
+ }
+}
body a, body button {
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
diff --git a/assets/css/components/admonition.css b/assets/css/components/admonition.css
new file mode 100644
index 00000000..d5f14d75
--- /dev/null
+++ b/assets/css/components/admonition.css
@@ -0,0 +1,225 @@
+/*
+ * Derived from KKKZOZ/hugo-admonitions (https://github.com/KKKZOZ/hugo-admonitions/)
+ * Copyright (c) 2024 KKKZOZ, Licensed under MIT License
+ */
+:root {
+ /* GitHub Core Types (5) */
+ --adm-note-border: theme('colors.blue.500');
+ --adm-note-bg: theme('colors.blue.50');
+ --adm-note-text: theme('colors.blue.900');
+
+ --adm-tip-border: theme('colors.teal.500');
+ --adm-tip-bg: theme('colors.teal.50');
+ --adm-tip-text: theme('colors.teal.900');
+
+ --adm-important-border: theme('colors.purple.500');
+ --adm-important-bg: theme('colors.purple.50');
+ --adm-important-text: theme('colors.purple.900');
+
+ --adm-warning-border: theme('colors.orange.500');
+ --adm-warning-bg: theme('colors.orange.50');
+ --adm-warning-text: theme('colors.orange.900');
+
+ --adm-caution-border: theme('colors.red.500');
+ --adm-caution-bg: theme('colors.red.50');
+ --adm-caution-text: theme('colors.red.900');
+
+ /* Extended Types (10) */
+ --adm-abstract-border: theme('colors.cyan.500');
+ --adm-abstract-bg: theme('colors.cyan.50');
+ --adm-abstract-text: theme('colors.cyan.900');
+
+ --adm-info-border: theme('colors.sky.500');
+ --adm-info-bg: theme('colors.sky.50');
+ --adm-info-text: theme('colors.sky.900');
+
+ --adm-todo-border: theme('colors.slate.500');
+ --adm-todo-bg: theme('colors.slate.50');
+ --adm-todo-text: theme('colors.slate.800');
+
+ --adm-success-border: theme('colors.green.500');
+ --adm-success-bg: theme('colors.green.50');
+ --adm-success-text: theme('colors.green.900');
+
+ --adm-question-border: theme('colors.amber.500');
+ --adm-question-bg: theme('colors.amber.50');
+ --adm-question-text: theme('colors.amber.900');
+
+ --adm-failure-border: theme('colors.pink.500');
+ --adm-failure-bg: theme('colors.pink.50');
+ --adm-failure-text: theme('colors.pink.900');
+
+ --adm-danger-border: theme('colors.red.500');
+ --adm-danger-bg: theme('colors.red.50');
+ --adm-danger-text: theme('colors.red.900');
+
+ --adm-bug-border: theme('colors.rose.500');
+ --adm-bug-bg: theme('colors.rose.50');
+ --adm-bug-text: theme('colors.rose.900');
+
+ --adm-example-border: theme('colors.purple.600');
+ --adm-example-bg: theme('colors.purple.50');
+ --adm-example-text: theme('colors.purple.900');
+
+ --adm-quote-border: theme('colors.gray.500');
+ --adm-quote-bg: theme('colors.gray.50');
+ --adm-quote-text: theme('colors.gray.800');
+}
+
+/* CSS Custom Properties - Dark Mode (30 variables: 15 types × 2 properties) */
+html.dark {
+ /* GitHub Core Types (5) */
+ --adm-note-bg: theme('colors.blue.900 / 0.6');
+ --adm-note-text: theme('colors.blue.100');
+
+ --adm-tip-bg: theme('colors.teal.900 / 0.6');
+ --adm-tip-text: theme('colors.teal.100');
+
+ --adm-important-bg: theme('colors.purple.900 / 0.6');
+ --adm-important-text: theme('colors.purple.100');
+
+ --adm-warning-bg: theme('colors.orange.900 / 0.6');
+ --adm-warning-text: theme('colors.orange.100');
+
+ --adm-caution-bg: theme('colors.red.900 / 0.6');
+ --adm-caution-text: theme('colors.red.100');
+
+ /* Extended Types (10) */
+ --adm-abstract-bg: theme('colors.cyan.900 / 0.6');
+ --adm-abstract-text: theme('colors.cyan.100');
+
+ --adm-info-bg: theme('colors.sky.900 / 0.6');
+ --adm-info-text: theme('colors.sky.100');
+
+ --adm-todo-bg: theme('colors.slate.800');
+ --adm-todo-text: theme('colors.slate.100');
+
+ --adm-success-bg: theme('colors.green.900 / 0.6');
+ --adm-success-text: theme('colors.green.100');
+
+ --adm-question-bg: theme('colors.amber.900 / 0.6');
+ --adm-question-text: theme('colors.amber.100');
+
+ --adm-failure-bg: theme('colors.pink.900 / 0.6');
+ --adm-failure-text: theme('colors.pink.100');
+
+ --adm-danger-bg: theme('colors.red.900 / 0.6');
+ --adm-danger-text: theme('colors.red.100');
+
+ --adm-bug-bg: theme('colors.rose.900 / 0.6');
+ --adm-bug-text: theme('colors.rose.100');
+
+ --adm-example-bg: theme('colors.purple.900 / 0.6');
+ --adm-example-text: theme('colors.purple.100');
+
+ --adm-quote-bg: theme('colors.gray.900 / 0.6');
+ --adm-quote-text: theme('colors.gray.100');
+}
+
+/* Base Styles */
+.admonition .admonition-content > * {
+ margin-block: 0 !important;
+}
+
+.admonition .admonition-content > * + * {
+ @apply mt-3;
+}
+
+.admonition {
+ @apply my-3;
+}
+
+.prose .admonition + * {
+ @apply mt-0;
+}
+
+/* Type-Specific Palettes Using CSS Variables */
+.admonition[data-type="note"] {
+ border-color: var(--adm-note-border);
+ background-color: var(--adm-note-bg);
+ color: var(--adm-note-text);
+}
+
+.admonition[data-type="tip"] {
+ border-color: var(--adm-tip-border);
+ background-color: var(--adm-tip-bg);
+ color: var(--adm-tip-text);
+}
+
+.admonition[data-type="important"] {
+ border-color: var(--adm-important-border);
+ background-color: var(--adm-important-bg);
+ color: var(--adm-important-text);
+}
+
+.admonition[data-type="warning"] {
+ border-color: var(--adm-warning-border);
+ background-color: var(--adm-warning-bg);
+ color: var(--adm-warning-text);
+}
+
+.admonition[data-type="caution"] {
+ border-color: var(--adm-caution-border);
+ background-color: var(--adm-caution-bg);
+ color: var(--adm-caution-text);
+}
+
+.admonition[data-type="abstract"] {
+ border-color: var(--adm-abstract-border);
+ background-color: var(--adm-abstract-bg);
+ color: var(--adm-abstract-text);
+}
+
+.admonition[data-type="info"] {
+ border-color: var(--adm-info-border);
+ background-color: var(--adm-info-bg);
+ color: var(--adm-info-text);
+}
+
+.admonition[data-type="todo"] {
+ border-color: var(--adm-todo-border);
+ background-color: var(--adm-todo-bg);
+ color: var(--adm-todo-text);
+}
+
+.admonition[data-type="success"] {
+ border-color: var(--adm-success-border);
+ background-color: var(--adm-success-bg);
+ color: var(--adm-success-text);
+}
+
+.admonition[data-type="question"] {
+ border-color: var(--adm-question-border);
+ background-color: var(--adm-question-bg);
+ color: var(--adm-question-text);
+}
+
+.admonition[data-type="failure"] {
+ border-color: var(--adm-failure-border);
+ background-color: var(--adm-failure-bg);
+ color: var(--adm-failure-text);
+}
+
+.admonition[data-type="danger"] {
+ border-color: var(--adm-danger-border);
+ background-color: var(--adm-danger-bg);
+ color: var(--adm-danger-text);
+}
+
+.admonition[data-type="bug"] {
+ border-color: var(--adm-bug-border);
+ background-color: var(--adm-bug-bg);
+ color: var(--adm-bug-text);
+}
+
+.admonition[data-type="example"] {
+ border-color: var(--adm-example-border);
+ background-color: var(--adm-example-bg);
+ color: var(--adm-example-text);
+}
+
+.admonition[data-type="quote"] {
+ border-color: var(--adm-quote-border);
+ background-color: var(--adm-quote-bg);
+ color: var(--adm-quote-text);
+}
diff --git a/assets/css/main.css b/assets/css/main.css
index c270f924..afe38a8d 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -6,6 +6,7 @@
@import "./components/chroma.css" layer(utilities);
@import "./components/zen-mode.css";
@import "./components/a11y.css";
+@import "./components/admonition.css" layer(components);
body a,
body button {
diff --git a/assets/icons/circle-question.svg b/assets/icons/circle-question.svg
new file mode 100644
index 00000000..01593be8
--- /dev/null
+++ b/assets/icons/circle-question.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/file-lines.svg b/assets/icons/file-lines.svg
new file mode 100644
index 00000000..a9fe261f
--- /dev/null
+++ b/assets/icons/file-lines.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/list-check.svg b/assets/icons/list-check.svg
new file mode 100644
index 00000000..d786e126
--- /dev/null
+++ b/assets/icons/list-check.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/list-ol.svg b/assets/icons/list-ol.svg
new file mode 100644
index 00000000..e66942ab
--- /dev/null
+++ b/assets/icons/list-ol.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/quote-left.svg b/assets/icons/quote-left.svg
new file mode 100644
index 00000000..fa7d0cab
--- /dev/null
+++ b/assets/icons/quote-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/js/print-support.js b/assets/js/print-support.js
new file mode 100644
index 00000000..d63d2665
--- /dev/null
+++ b/assets/js/print-support.js
@@ -0,0 +1,17 @@
+(function() {
+ 'use strict';
+ var closedDetails = [];
+ window.addEventListener('beforeprint', function() {
+ var allDetails = document.querySelectorAll('details:not([open])');
+ for (var i = 0; i < allDetails.length; i++) {
+ allDetails[i].open = true;
+ closedDetails.push(allDetails[i]);
+ }
+ });
+ window.addEventListener('afterprint', function() {
+ for (var i = 0; i < closedDetails.length; i++) {
+ closedDetails[i].open = false;
+ }
+ closedDetails = [];
+ });
+})();
diff --git a/i18n/en.yaml b/i18n/en.yaml
index bcb43484..7da2c433 100644
--- a/i18n/en.yaml
+++ b/i18n/en.yaml
@@ -85,3 +85,5 @@ shortcode:
recent:
show_more: "Show More"
+
+
diff --git a/i18n/it.yaml b/i18n/it.yaml
index 26867d35..74052b05 100644
--- a/i18n/it.yaml
+++ b/i18n/it.yaml
@@ -72,3 +72,20 @@ shortcode:
recent:
show_more: "Mostra di Più"
+
+admonition:
+ note: "Nota"
+ abstract: "Sommario"
+ info: "Info"
+ todo: "Da fare"
+ tip: "Suggerimento"
+ important: "Importante"
+ success: "Successo"
+ question: "Domanda"
+ warning: "Avviso"
+ caution: "Attenzione"
+ failure: "Fallimento"
+ danger: "Pericolo"
+ bug: "Bug"
+ example: "Esempio"
+ quote: "Citazione"
diff --git a/i18n/ja.yaml b/i18n/ja.yaml
index e704eca7..995cf6ae 100644
--- a/i18n/ja.yaml
+++ b/i18n/ja.yaml
@@ -84,3 +84,20 @@ shortcode:
recent:
show_more: "もっと見る"
+
+admonition:
+ note: "ノート"
+ abstract: "概要"
+ info: "情報"
+ todo: "TODO"
+ tip: "ヒント"
+ important: "重要"
+ success: "成功"
+ question: "質問"
+ warning: "警告"
+ caution: "注意"
+ failure: "失敗"
+ danger: "危険"
+ bug: "バグ"
+ example: "例"
+ quote: "引用"
diff --git a/i18n/zh-CN.yaml b/i18n/zh-CN.yaml
index 7a4ba890..15a90d45 100644
--- a/i18n/zh-CN.yaml
+++ b/i18n/zh-CN.yaml
@@ -84,3 +84,20 @@ shortcode:
recent:
show_more: "显示更多"
+
+admonition:
+ note: "笔记"
+ abstract: "摘要"
+ info: "信息"
+ todo: "待办"
+ tip: "提示"
+ important: "重要"
+ success: "成功"
+ question: "问题"
+ warning: "警告"
+ caution: "注意"
+ failure: "失败"
+ danger: "危险"
+ bug: "错误"
+ example: "示例"
+ quote: "引用"
diff --git a/layouts/_default/_markup/render-blockquote.html b/layouts/_default/_markup/render-blockquote.html
new file mode 100644
index 00000000..6a5a0bdb
--- /dev/null
+++ b/layouts/_default/_markup/render-blockquote.html
@@ -0,0 +1,107 @@
+{{/* Admonition Render Hook */}}
+{{- if eq .Type "alert" -}}
+ {{- $typeMap := dict
+ "summary" "abstract"
+ "tldr" "abstract"
+ "hint" "tip"
+ "check" "success"
+ "done" "success"
+ "help" "question"
+ "faq" "question"
+ "attention" "warning"
+ "fail" "failure"
+ "missing" "failure"
+ "error" "danger"
+ "cite" "quote"
+ -}}
+
+ {{- $iconMap := dict
+ "note" "circle-info"
+ "abstract" "file-lines"
+ "info" "circle-info"
+ "todo" "list-check"
+ "tip" "lightbulb"
+ "important" "star"
+ "success" "check"
+ "question" "circle-question"
+ "warning" "triangle-exclamation"
+ "caution" "triangle-exclamation"
+ "failure" "xmark"
+ "danger" "fire"
+ "bug" "bug"
+ "example" "list-ol"
+ "quote" "quote-left"
+ -}}
+
+ {{/* Resolve type aliases and validate */}}
+ {{- $rawType := .AlertType | lower -}}
+ {{- $normalizedType := index $typeMap $rawType | default $rawType -}}
+
+ {{- $iconName := index $iconMap $normalizedType | default "circle-info" -}}
+
+ {{/* Resolve title with i18n fallback */}}
+ {{- $title := .AlertTitle -}}
+ {{- if not $title -}}
+ {{- $i18nKey := printf "admonition.%s" $normalizedType -}}
+ {{- $i18nTitle := i18n $i18nKey -}}
+ {{- if and $i18nTitle (ne $i18nTitle $i18nKey) -}}
+ {{- $title = $i18nTitle -}}
+ {{- else -}}
+ {{- $title = $normalizedType | title -}}
+ {{- end -}}
+ {{- end -}}
+
+ {{/* Handle collapsible state */}}
+ {{- $sign := .AlertSign | default "" -}}
+ {{- $isCollapsible := or (eq $sign "+") (eq $sign "-") -}}
+ {{- $isDefaultCollapsed := eq $sign "-" -}}
+
+ {{- $containerClass := "admonition relative overflow-hidden rounded-lg border-l-4 px-4 py-3 shadow-sm print:break-inside-avoid" -}}
+ {{- $headerClass := "flex items-center gap-2 font-semibold text-inherit" -}}
+ {{- $contentClass := "admonition-content mt-3 text-base leading-relaxed text-inherit" -}}
+
+ {{- if $isCollapsible -}}
+
+
+
+ {{- .Text | safeHTML -}} ++{{- end -}} diff --git a/layouts/_default/index.json b/layouts/_default/index.json index a7260a52..91ad7d53 100644 --- a/layouts/_default/index.json +++ b/layouts/_default/index.json @@ -8,10 +8,10 @@ {{- $section := .Site.GetPage "section" .Section -}} {{- if .Date -}} {{- $index = $index | append (dict - "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long")) + "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long")) "title" (.Title | emojify | safeJS) "section" ($section.Title | emojify | safeJS) - "summary" (.Summary | safeJS) + "summary" (.Summary | plainify | htmlUnescape | safeJS) "content" (.Plain | safeJS) "permalink" .RelPermalink "externalUrl" .Params.externalUrl @@ -21,7 +21,7 @@ {{- $index = $index | append (dict "title" (.Title | emojify | safeJS) "section" ($section.Title | emojify | safeJS) - "summary" (.Summary | safeJS) + "summary" (.Summary | plainify | htmlUnescape | safeJS) "content" (.Plain | safeJS) "permalink" .RelPermalink "externalUrl" .Params.externalUrl diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml index 6f046a46..f5d42854 100644 --- a/layouts/_default/rss.xml +++ b/layouts/_default/rss.xml @@ -40,7 +40,7 @@