diff --git a/meta/plugins/__init__.py b/meta/plugins/__init__.py
index 917ab9c..d442fc4 100644
--- a/meta/plugins/__init__.py
+++ b/meta/plugins/__init__.py
@@ -52,7 +52,7 @@ class Site(DataClassJsonMixin):
navbar: str = dt.field(default="")
footer: str = dt.field(default="")
- path: str = dt.field(default="")
+ path: Path = dt.field(default=Path(""))
@staticmethod
def load() -> "Site":
@@ -69,7 +69,7 @@ def renderFavicon(self) -> str:
return f"data:image/svg+xml,{svgEscaped}"
def renderHeader(self) -> str:
- return f'{self.header or self.title}
'
+ return f'{self.header or self.title}
'
def renderAll(self, out: Path, args: BuildArgs) -> None:
style = ""
@@ -181,7 +181,7 @@ def _():
{
"favicon": "🐱",
"title": "Cat",
- "header": "ᓚ₍ ^. .^₎",
+ "header": "ᓚ₍ ^. .^₎",
"navbar": "[Home](/)",
"footer": "Built with [ᓚ₍ ^. .^₎](https://github.com/cute-engineering/cat)"
}
diff --git a/meta/plugins/doc.css b/meta/plugins/doc.css
new file mode 100644
index 0000000..ce43ec5
--- /dev/null
+++ b/meta/plugins/doc.css
@@ -0,0 +1,245 @@
+/* Font */
+@import url("https://api.fontshare.com/v2/css?f[]=satoshi@700,701,401,400&display=swap");
+
+/* Settings */
+:root {
+ --color-dark: #1a1a1a;
+ --color-light: #fafafa;
+ --color-primary: #1a8fe3;
+ --spacing: 1.5rem;
+ --font-stack: "Satoshi", system-ui, -apple-system, BlinkMacSystemFont,
+ "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif,
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --max-width: 1600px;
+}
+
+/* Dark mode settings */
+@media (prefers-color-scheme: dark) {
+ :root {
+ --color-dark: #fafafa;
+ --color-light: #1a1a1a;
+ }
+}
+
+/* Basic styles */
+body {
+ background: var(--color-light);
+ color: var(--color-dark);
+ padding: 5vw;
+ font-family: var(--font-stack);
+ font-size: 1.5rem;
+ line-height: 1.7;
+ display: flex;
+ flex-wrap: wrap;
+ gap: calc(var(--spacing) * 2);
+ min-height: 100vh;
+ max-width: var(--max-width);
+ margin: 0 auto;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+header,
+main,
+footer {
+ max-width: 60ch;
+ margin-inline: auto;
+ width: 100%;
+}
+
+/* Header styles */
+header {
+ padding-bottom: var(--spacing);
+ flex-basis: 12rem;
+ flex-grow: 1;
+}
+
+/* Main content styles */
+main {
+ flex-basis: 0;
+ flex-grow: 999;
+ padding-bottom: calc(var(--spacing) * 2);
+ flex-basis: 40rem;
+}
+
+/* Footer styles */
+footer {
+ min-width: 100%;
+ flex-basis: 0;
+ flex-grow: 1;
+ padding-top: var(--spacing);
+}
+
+/* Link styles */
+a {
+ color: currentColor;
+ text-decoration-color: var(--color-primary);
+ text-decoration-thickness: 0.2ex;
+ text-underline-offset: 0.3ex;
+}
+
+a:hover {
+ text-decoration-thickness: 0.3ex;
+}
+
+/* Image styles */
+img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+/* Heading styles */
+h1,
+h2,
+h3,
+h4,
+h5 {
+ font-weight: 700;
+ line-height: 1.3;
+ text-wrap: balance;
+}
+
+/* Adjustments for different heading levels */
+h1 {
+ font-size: 3.55rem;
+}
+
+h2 {
+ font-size: 2.66rem;
+}
+
+h3 {
+ font-size: 2rem;
+}
+
+h4 {
+ font-size: 1.5rem;
+}
+
+h5 {
+ font-size: 1.13rem;
+}
+
+/* List styles */
+ul,
+ol {
+ padding-inline-start: var(--spacing);
+}
+
+li {
+ margin-block-start: var(--spacing);
+}
+
+/* Blockquote styles */
+blockquote {
+ padding-inline-start: var(--spacing);
+ border-inline-start: 0.3em solid;
+ font-style: italic;
+ font-size: 1.5rem;
+}
+
+/* Flow and rhythm */
+:is(h1, h2, h3, h4, h5, blockquote) {
+ margin-block-end: calc(var(--spacing) / 2);
+}
+
+:is(h1, h2, h3, h4, h5)+* {
+ margin-block-start: calc(var(--spacing) / 3);
+}
+
+:is(h1, h2, h3, h4, h5)+ :where(h2, h3, h4, h5) {
+ margin-block-start: calc(var(--spacing) * 2);
+}
+
+/* Line lengths */
+blockquote {
+ max-width: 50ch;
+}
+
+h1 {
+ max-width: 24ch;
+}
+
+h2,
+h3 {
+ max-width: 32ch;
+}
+
+/* Bear Content */
+.title {
+ text-decoration: none;
+}
+
+.title h1 {
+ font-size: 2rem;
+ margin-top: calc(var(--spacing) / 2);
+}
+
+nav {
+ position: sticky;
+ top: var(--spacing);
+}
+
+nav p {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ gap: var(--spacing);
+ row-gap: 0;
+}
+
+@media screen and (min-width: 1000px) {
+ nav p {
+ flex-direction: column;
+ }
+}
+
+ul.blog-posts {
+ list-style-type: none;
+ padding: unset;
+}
+
+ul.blog-posts li {
+ display: flex;
+ flex-direction: column;
+}
+
+@media screen and (min-width: 600px) {
+ ul.blog-posts li {
+ flex-direction: row;
+ gap: calc(var(--spacing) / 2);
+ }
+}
+
+ul.blog-posts li span {
+ min-width: 11ch;
+}
+
+time {
+ opacity: 0.5;
+ font-style: normal;
+}
+
+.highlight,
+.code {
+ padding: 1px var(--spacing);
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 3px;
+ overflow-x: auto;
+ line-height: 1.2;
+}
+
+table {
+ width: 100%;
+}
+
+th {
+ text-align: left;
+}
+
+hr {
+ border-color: rgba(0, 0, 0, 0.1);
+}