diff --git a/.air.toml b/.air.toml
index e4a831e..9e22e55 100644
--- a/.air.toml
+++ b/.air.toml
@@ -2,6 +2,7 @@ root = "."
[build]
cmd = "go run main.go"
+ bin = ""
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "bak", "node_modules", "public"]
include_ext = ["go", "md", "html"]
diff --git a/.gitignore b/.gitignore
index 6d36308..1994553 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
node_modules/
bak/
+tmp/
+*.log
diff --git a/content/about.md b/content/about.md
index bd08e85..a38e235 100644
--- a/content/about.md
+++ b/content/about.md
@@ -1,5 +1,6 @@
---
title: Go SSG - About
+navTitle: About
description: More About My Go SSG Site.
date: 2025-04-19
---
diff --git a/content/blog/my-first-blog-post.md b/content/blog/my-first-blog-post.md
index cc09250..592d8ad 100644
--- a/content/blog/my-first-blog-post.md
+++ b/content/blog/my-first-blog-post.md
@@ -9,7 +9,7 @@ categories:
## *Tap Tap Tap* Is this thing on?
-This is my first Go SSG blog post.
+
This is my first Go SSG blog post.
This project is a simple static site generator written in Go. It is designed to be easy to use and extend, allowing you to create a static website quickly and efficiently.
diff --git a/content/contact.md b/content/contact.md
new file mode 100644
index 0000000..2b622c6
--- /dev/null
+++ b/content/contact.md
@@ -0,0 +1,4 @@
+---
+title: Contact
+navTitle: Contact
+---
diff --git a/content/index.md b/content/index.md
index 69f5c63..d702de8 100644
--- a/content/index.md
+++ b/content/index.md
@@ -1,5 +1,6 @@
---
title: Go SSG - Home
+navTitle: Home
description: My Go SSG Site.
date: 2025-04-19
---
diff --git a/css/base.css b/css/base.css
index 7f67717..7383451 100644
--- a/css/base.css
+++ b/css/base.css
@@ -17,14 +17,16 @@ header#site_head {
@apply py-4 px-60;
nav ul {
- @apply flex space-x-4 justify-end-safe;
+ @apply flex space-x-4 justify-end-safe prose-a:text-white;
}
}
main {
- @apply prose container mx-auto px-4 py-8 max-w-5xl;
+ article, div.main {
+ @apply prose container mx-auto px-4 py-8 max-w-5xl;
+ }
}
footer#site_foot {
- @apply bg-secondary text-white text-center;
+ @apply bg-secondary text-white text-center m-0 p-0;
}
diff --git a/main.go b/main.go
index 7399962..060db5b 100644
--- a/main.go
+++ b/main.go
@@ -11,6 +11,8 @@ import (
"regexp"
"strings"
"time"
+ "sort"
+ "io/fs"
"github.com/russross/blackfriday/v2"
"gopkg.in/yaml.v3"
@@ -23,6 +25,7 @@ type NavItem struct {
type PageMeta struct {
Title string `yaml:"title"`
+ NavTitle string `yaml:"navTitle"`
Description string `yaml:"description"`
Date string `yaml:"date"`
Categories []string `yaml:"categories"`
@@ -35,8 +38,7 @@ func main() {
contentDir := "./content"
outputDir := "./public"
- // Load all templates in the templates folder
- tpl, err := template.New("").Funcs(templateFuncs()).ParseGlob("templates/*.html")
+ tpl, err := loadTemplates()
if err != nil {
fmt.Printf("Template parsing error: %v\n", err)
return
@@ -48,69 +50,159 @@ func main() {
return
}
+ entries, _ := os.ReadDir(contentDir)
+ nav := buildNav(entries, contentDir)
+ renderStaticPages(files, contentDir, outputDir, tpl, nav)
+ blogPosts, categoryMap := processBlogPosts(contentDir, outputDir, tpl, nav)
+ buildBlogIndex(blogPosts, tpl, outputDir, nav)
+ buildCategoryPages(categoryMap, tpl, outputDir, nav)
+
+ fmt.Println("✅ Site generation complete.")
+}
+
+func loadTemplates() (*template.Template, error) {
+ return template.New("").Funcs(templateFuncs()).ParseGlob("templates/*.html")
+}
+
+func buildNav(entries []fs.DirEntry, contentDir string) []NavItem {
var nav []NavItem
- for _, file := range files {
- if filepath.Ext(file.Name()) == ".md" {
- name := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
- url := "/"
- if name != "index" {
- url = "/" + name + "/"
- }
- nav = append(nav, NavItem{Title: strings.Title(name), URL: url})
+
+ for _, entry := range entries {
+ if entry.Type().IsDir() || !strings.HasSuffix(entry.Name(), ".md") {
+ continue
}
+
+ name := strings.TrimSuffix(entry.Name(), filepath.Ext(entry.Name()))
+ path := filepath.Join(contentDir, entry.Name())
+
+ rawContent, err := os.ReadFile(path)
+ if err != nil {
+ fmt.Printf("Failed to read %s: %v\n", entry.Name(), err)
+ continue
+ }
+
+ meta, _ := parseFrontMatter(rawContent)
+
+ title := meta.NavTitle
+ if title == "" {
+ title = meta.Title
+ }
+ if title == "" && name == "index" {
+ title = "Home"
+ } else if title == "" {
+ title = strings.Title(name)
+ }
+
+ url := "/"
+ if name != "index" {
+ url = "/" + name + "/"
+ }
+
+ nav = append(nav, NavItem{Title: title, URL: url})
}
- // Add blog to main nav
+ // Add Blog manually
nav = append(nav, NavItem{Title: "Blog", URL: "/blog/"})
- // Static page rendering
- for _, file := range files {
- if filepath.Ext(file.Name()) == ".md" {
- name := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
- title := strings.Title(name)
- mdPath := filepath.Join(contentDir, file.Name())
- rawContent, err := ioutil.ReadFile(mdPath)
- if err != nil {
- fmt.Printf("Failed to read %s: %v\n", file.Name(), err)
- continue
- }
-
- meta, content := parseFrontMatter(rawContent)
- htmlContent := blackfriday.Run(content)
- if meta.Title == "" {
- meta.Title = title
- }
-
- var outPath string
- if name == "index" {
- outPath = filepath.Join(outputDir, "index.html")
- } else {
- subDir := filepath.Join(outputDir, name)
- os.MkdirAll(subDir, os.ModePerm)
- outPath = filepath.Join(subDir, "index.html")
- }
-
- outFile, err := os.Create(outPath)
- if err != nil {
- fmt.Printf("Failed to create %s: %v\n", outPath, err)
- continue
- }
-
- tpl.ExecuteTemplate(outFile, "static_page", map[string]interface{}{
- "Title": meta.Title,
- "Description": meta.Description,
- "Date": meta.Date,
- "Categories": meta.Categories,
- "Content": template.HTML(htmlContent),
- "Nav": nav,
- "Year": time.Now().Year(),
- "PageTemplate": "static",
- })
-
- fmt.Printf("Generated: %s\n", outPath)
- }
+ // Optional: order the nav explicitly
+ preferredOrder := map[string]int{
+ "Home": 0,
+ "Blog": 1,
+ "About": 2,
+ "Contact": 3,
}
+ sort.SliceStable(nav, func(i, j int) bool {
+ return preferredOrder[nav[i].Title] < preferredOrder[nav[j].Title]
+ })
+
+ return nav
+}
+
+func renderStaticPages(files []os.FileInfo, contentDir, outputDir string, tpl *template.Template, nav []NavItem) {
+ for _, file := range files {
+ if filepath.Ext(file.Name()) == ".md" {
+ renderStaticPage(file, contentDir, outputDir, tpl, nav)
+ }
+ }
+}
+
+func renderStaticPage(file os.FileInfo, contentDir, outputDir string, tpl *template.Template, nav []NavItem) {
+ name := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
+ title := strings.Title(name)
+ mdPath := filepath.Join(contentDir, file.Name())
+ rawContent, err := ioutil.ReadFile(mdPath)
+ if err != nil {
+ fmt.Printf("Failed to read %s: %v\n", file.Name(), err)
+ return
+ }
+
+ meta, content := parseFrontMatter(rawContent)
+ htmlContent := blackfriday.Run(content)
+ if meta.Title == "" {
+ meta.Title = title
+ }
+
+ var outPath string
+ if name == "index" {
+ outPath = filepath.Join(outputDir, "index.html")
+ } else {
+ subDir := filepath.Join(outputDir, name)
+ os.MkdirAll(subDir, os.ModePerm)
+ outPath = filepath.Join(subDir, "index.html")
+ }
+
+ outFile, err := os.Create(outPath)
+ if err != nil {
+ fmt.Printf("Failed to create %s: %v\n", outPath, err)
+ return
+ }
+
+ tpl.ExecuteTemplate(outFile, "static_page", map[string]interface{}{
+ "Title": meta.Title,
+ "Description": meta.Description,
+ "Date": meta.Date,
+ "Categories": meta.Categories,
+ "Content": template.HTML(htmlContent),
+ "Nav": nav,
+ "Year": time.Now().Year(),
+ "PageTemplate": "static",
+ })
+
+ fmt.Printf("Generated: %s\n", outPath)
+}
+
+func renderContactPage(contentDir, outputDir string, tpl *template.Template, nav []NavItem) {
+ contactPath := filepath.Join(contentDir, "contact.md")
+ rawContent, err := os.ReadFile(contactPath)
+ if err != nil {
+ fmt.Printf("Contact page not found: %v\n", err)
+ return
+ }
+
+ meta, _ := parseFrontMatter(rawContent)
+
+ outPath := filepath.Join(outputDir, "contact", "index.html")
+ os.MkdirAll(filepath.Dir(outPath), os.ModePerm)
+
+ outFile, err := os.Create(outPath)
+ if err != nil {
+ fmt.Printf("Failed to create contact page: %v\n", err)
+ return
+ }
+
+ tpl.ExecuteTemplate(outFile, "contact_page", map[string]interface{}{
+ "Title": meta.Title,
+ "Description": meta.Description,
+ "Nav": nav,
+ "Year": time.Now().Year(),
+ "PageTemplate": "contact_page",
+ })
+
+ fmt.Println("Generated: /contact/")
+}
+
+func processBlogPosts(contentDir, outputDir string, tpl *template.Template, nav []NavItem) ([]PageMeta, map[string][]PageMeta) {
var blogPosts []PageMeta
categoryMap := make(map[string][]PageMeta)
@@ -122,51 +214,57 @@ func main() {
continue
}
- slug := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
- blogPath := filepath.Join(blogDir, file.Name())
- rawContent, err := ioutil.ReadFile(blogPath)
- if err != nil {
- fmt.Printf("Failed to read blog post %s: %v\n", file.Name(), err)
- continue
- }
-
- meta, content := parseFrontMatter(rawContent)
- html := blackfriday.Run(content)
- meta.Slug = slug
- if meta.Title == "" {
- meta.Title = strings.Title(slug)
- }
-
- for _, cat := range meta.Categories {
- slug := slugify(cat)
- categoryMap[slug] = append(categoryMap[slug], meta)
- }
-
- outPath := filepath.Join(outputDir, "blog", slug, "index.html")
- os.MkdirAll(filepath.Dir(outPath), os.ModePerm)
-
- outFile, err := os.Create(outPath)
- if err != nil {
- fmt.Printf("Failed to create blog file %s: %v\n", outPath, err)
- continue
- }
-
- tpl.ExecuteTemplate(outFile, "blog_post_page", map[string]interface{}{
- "Title": meta.Title,
- "Description": meta.Description,
- "Date": meta.Date,
- "Categories": meta.Categories,
- "Content": template.HTML(html),
- "Nav": nav,
- "Year": time.Now().Year(),
- "PageTemplate": "blog_post",
- })
-
- blogPosts = append(blogPosts, meta)
+ processBlogPost(file, blogDir, outputDir, tpl, nav, &blogPosts, categoryMap)
}
- buildBlogIndex(blogPosts, tpl, outputDir, nav)
+ return blogPosts, categoryMap
+}
+func processBlogPost(file os.FileInfo, blogDir, outputDir string, tpl *template.Template, nav []NavItem, blogPosts *[]PageMeta, categoryMap map[string][]PageMeta) {
+ slug := strings.TrimSuffix(file.Name(), filepath.Ext(file.Name()))
+ blogPath := filepath.Join(blogDir, file.Name())
+ rawContent, err := ioutil.ReadFile(blogPath)
+ if err != nil {
+ fmt.Printf("Failed to read blog post %s: %v\n", file.Name(), err)
+ return
+ }
+
+ meta, content := parseFrontMatter(rawContent)
+ html := blackfriday.Run(content)
+ meta.Slug = slug
+ if meta.Title == "" {
+ meta.Title = strings.Title(slug)
+ }
+
+ for _, cat := range meta.Categories {
+ slug := slugify(cat)
+ categoryMap[slug] = append(categoryMap[slug], meta)
+ }
+
+ outPath := filepath.Join(outputDir, "blog", slug, "index.html")
+ os.MkdirAll(filepath.Dir(outPath), os.ModePerm)
+
+ outFile, err := os.Create(outPath)
+ if err != nil {
+ fmt.Printf("Failed to create blog file %s: %v\n", outPath, err)
+ return
+ }
+
+ tpl.ExecuteTemplate(outFile, "blog_post_page", map[string]interface{}{
+ "Title": meta.Title,
+ "Description": meta.Description,
+ "Date": meta.Date,
+ "Categories": meta.Categories,
+ "Content": template.HTML(html),
+ "Nav": nav,
+ "Year": time.Now().Year(),
+ "PageTemplate": "blog_post",
+ })
+
+ *blogPosts = append(*blogPosts, meta)
+}
+
+func buildCategoryPages(categoryMap map[string][]PageMeta, tpl *template.Template, outputDir string, nav []NavItem) {
for catSlug, posts := range categoryMap {
outDir := filepath.Join(outputDir, "blog", "category", catSlug)
os.MkdirAll(outDir, os.ModePerm)
@@ -188,8 +286,6 @@ func main() {
fmt.Printf("Generated category: /blog/category/%s/\n", catSlug)
}
-
- fmt.Println("✅ Site generation complete.")
}
func parseFrontMatter(raw []byte) (PageMeta, []byte) {
diff --git a/public/about/index.html b/public/about/index.html
index 2e4fa06..bb050d3 100644
--- a/public/about/index.html
+++ b/public/about/index.html
@@ -17,12 +17,14 @@
diff --git a/public/assets/style.css b/public/assets/style.css
index e2ae27a..84fd5b2 100644
--- a/public/assets/style.css
+++ b/public/assets/style.css
@@ -6,13 +6,22 @@
--font-sans: "Raleway", sans-serif;
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace;
+ --color-blue-600: oklch(54.6% 0.245 262.881);
+ --color-blue-700: oklch(48.8% 0.243 264.376);
--color-black: oklch(0% 0 0);
--color-white: oklch(100% 0 0);
--spacing: 0.25rem;
+ --container-xl: 36rem;
--container-5xl: 64rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
+ --text-sm: 0.875rem;
+ --text-sm--line-height: calc(1.25 / 0.875);
--text-base: 1rem;
+ --text-2xl: 1.5rem;
+ --text-2xl--line-height: calc(2 / 1.5);
+ --font-weight-medium: 500;
+ --font-weight-bold: 700;
--radius-sm: 0.25rem;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -663,9 +672,24 @@
margin-bottom: 0;
}
}
+ .mb-4 {
+ margin-bottom: calc(var(--spacing) * 4);
+ }
+ .block {
+ display: block;
+ }
+ .hidden {
+ display: none;
+ }
.table {
display: table;
}
+ .w-full {
+ width: 100%;
+ }
+ .max-w-xl {
+ max-width: var(--container-xl);
+ }
.border-collapse {
border-collapse: collapse;
}
@@ -675,16 +699,46 @@
.list-none {
list-style-type: none;
}
+ .space-y-4 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
+ .rounded {
+ border-radius: 0.25rem;
+ }
.border {
border-style: var(--tw-border-style);
border-width: 1px;
}
+ .bg-blue-600 {
+ background-color: var(--color-blue-600);
+ }
.p-0 {
padding: calc(var(--spacing) * 0);
}
+ .p-2 {
+ padding: calc(var(--spacing) * 2);
+ }
+ .px-4 {
+ padding-inline: calc(var(--spacing) * 4);
+ }
+ .py-2 {
+ padding-block: calc(var(--spacing) * 2);
+ }
.py-4 {
padding-block: calc(var(--spacing) * 4);
}
+ .text-2xl {
+ font-size: var(--text-2xl);
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
+ }
+ .text-sm {
+ font-size: var(--text-sm);
+ line-height: var(--tw-leading, var(--text-sm--line-height));
+ }
.text-40px {
font-size: var(--text-40px);
}
@@ -692,6 +746,17 @@
--tw-leading: 1;
line-height: 1;
}
+ .font-bold {
+ --tw-font-weight: var(--font-weight-bold);
+ font-weight: var(--font-weight-bold);
+ }
+ .font-medium {
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
+ .text-primary {
+ color: var(--color-primary);
+ }
.text-white {
color: var(--color-white);
}
@@ -707,6 +772,13 @@
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
+ .hover\:bg-blue-700 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-blue-700);
+ }
+ }
+ }
.hover\:text-primary-200 {
&:hover {
@media (hover: hover) {
@@ -904,454 +976,466 @@ header#site_head {
margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
}
+ & :is(:where(a):not(:where([class~="not-prose"],[class~="not-prose"] *))) {
+ color: var(--color-white);
+ }
}
}
main {
- width: 100%;
- @media (width >= 22.5rem) {
- max-width: 22.5rem;
- }
- @media (width >= 29.6875rem) {
- max-width: 29.6875rem;
- }
- @media (width >= 40rem) {
- max-width: 40rem;
- }
- @media (width >= 48rem) {
- max-width: 48rem;
- }
- @media (width >= 64rem) {
- max-width: 64rem;
- }
- @media (width >= 80rem) {
- max-width: 80rem;
- }
- @media (width >= 96rem) {
- max-width: 96rem;
- }
- margin-inline: auto;
- color: var(--tw-prose-body);
- max-width: 65ch;
- :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 1.25em;
- margin-bottom: 1.25em;
- }
- :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-lead);
- font-size: 1.25em;
- line-height: 1.6;
- margin-top: 1.2em;
- margin-bottom: 1.2em;
- }
- :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-links);
- text-decoration: underline;
- font-weight: 500;
- }
- :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-bold);
- font-weight: 600;
- }
- :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: decimal;
- margin-top: 1.25em;
- margin-bottom: 1.25em;
- padding-inline-start: 1.625em;
- }
- :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: upper-alpha;
- }
- :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: lower-alpha;
- }
- :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: upper-alpha;
- }
- :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: lower-alpha;
- }
- :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: upper-roman;
- }
- :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: lower-roman;
- }
- :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: upper-roman;
- }
- :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: lower-roman;
- }
- :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: decimal;
- }
- :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- list-style-type: disc;
- margin-top: 1.25em;
- margin-bottom: 1.25em;
- padding-inline-start: 1.625em;
- }
- :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
- font-weight: 400;
- color: var(--tw-prose-counters);
- }
- :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
- color: var(--tw-prose-bullets);
- }
- :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 600;
- margin-top: 1.25em;
- }
- :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- border-color: var(--tw-prose-hr);
- border-top-width: 1;
- margin-top: 3em;
- margin-bottom: 3em;
- }
- :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 500;
- font-style: italic;
- color: var(--tw-prose-quotes);
- border-inline-start-width: 0.25rem;
- border-inline-start-color: var(--tw-prose-quote-borders);
- quotes: "\201C""\201D""\2018""\2019";
- margin-top: 1.6em;
- margin-bottom: 1.6em;
- padding-inline-start: 1em;
- }
- :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
- content: open-quote;
- }
- :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
- content: close-quote;
- }
- :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 800;
- font-size: 2.25em;
- margin-top: 0;
- margin-bottom: 0.8888889em;
- line-height: 1.1111111;
- }
- :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 900;
- color: inherit;
- }
- :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 700;
- font-size: 1.5em;
- margin-top: 2em;
- margin-bottom: 1em;
- line-height: 1.3333333;
- }
- :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 800;
- color: inherit;
- }
- :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 600;
- font-size: 1.25em;
- margin-top: 1.6em;
- margin-bottom: 0.6em;
- line-height: 1.6;
- }
- :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 700;
- color: inherit;
- }
- :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 600;
- margin-top: 1.5em;
- margin-bottom: 0.5em;
- line-height: 1.5;
- }
- :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 700;
- color: inherit;
- }
- :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 2em;
- margin-bottom: 2em;
- }
- :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- display: block;
- margin-top: 2em;
- margin-bottom: 2em;
- }
- :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 2em;
- margin-bottom: 2em;
- }
- :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- font-weight: 500;
- font-family: inherit;
- color: var(--tw-prose-kbd);
- box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);
- font-size: 0.875em;
- border-radius: 0.3125rem;
- padding-top: 0.1875em;
- padding-inline-end: 0.375em;
- padding-bottom: 0.1875em;
- padding-inline-start: 0.375em;
- }
- :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-code);
- font-weight: 600;
- font-size: 0.875em;
- }
- :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
- content: "`";
- }
- :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
- content: "`";
- }
- :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- font-size: 0.875em;
- }
- :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- font-size: 0.9em;
- }
- :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: inherit;
- }
- :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-pre-code);
- background-color: var(--tw-prose-pre-bg);
- overflow-x: auto;
- font-weight: 400;
- font-size: 0.875em;
- line-height: 1.7142857;
- margin-top: 1.7142857em;
- margin-bottom: 1.7142857em;
- border-radius: 0.375rem;
- padding-top: 0.8571429em;
- padding-inline-end: 1.1428571em;
- padding-bottom: 0.8571429em;
- padding-inline-start: 1.1428571em;
- }
- :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- background-color: transparent;
- border-width: 0;
- border-radius: 0;
- padding: 0;
- font-weight: inherit;
- color: inherit;
- font-size: inherit;
- font-family: inherit;
- line-height: inherit;
- }
- :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
- content: none;
- }
- :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
- content: none;
- }
- :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ article, div.main {
width: 100%;
- table-layout: auto;
- margin-top: 2em;
- margin-bottom: 2em;
- font-size: 0.875em;
- line-height: 1.7142857;
+ @media (width >= 22.5rem) {
+ max-width: 22.5rem;
+ }
+ @media (width >= 29.6875rem) {
+ max-width: 29.6875rem;
+ }
+ @media (width >= 40rem) {
+ max-width: 40rem;
+ }
+ @media (width >= 48rem) {
+ max-width: 48rem;
+ }
+ @media (width >= 64rem) {
+ max-width: 64rem;
+ }
+ @media (width >= 80rem) {
+ max-width: 80rem;
+ }
+ @media (width >= 96rem) {
+ max-width: 96rem;
+ }
+ margin-inline: auto;
+ color: var(--tw-prose-body);
+ max-width: 65ch;
+ :where(p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ }
+ :where([class~="lead"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-lead);
+ font-size: 1.25em;
+ line-height: 1.6;
+ margin-top: 1.2em;
+ margin-bottom: 1.2em;
+ }
+ :where(a):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-links);
+ text-decoration: underline;
+ font-weight: 500;
+ }
+ :where(strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-bold);
+ font-weight: 600;
+ }
+ :where(a strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(blockquote strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(thead th strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: decimal;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
+ }
+ :where(ol[type="A"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+ }
+ :where(ol[type="a"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+ }
+ :where(ol[type="A" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-alpha;
+ }
+ :where(ol[type="a" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-alpha;
+ }
+ :where(ol[type="I"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+ }
+ :where(ol[type="i"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+ }
+ :where(ol[type="I" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: upper-roman;
+ }
+ :where(ol[type="i" s]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: lower-roman;
+ }
+ :where(ol[type="1"]):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: decimal;
+ }
+ :where(ul):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ list-style-type: disc;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ padding-inline-start: 1.625em;
+ }
+ :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
+ font-weight: 400;
+ color: var(--tw-prose-counters);
+ }
+ :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *))::marker {
+ color: var(--tw-prose-bullets);
+ }
+ :where(dt):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.25em;
+ }
+ :where(hr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-color: var(--tw-prose-hr);
+ border-top-width: 1;
+ margin-top: 3em;
+ margin-bottom: 3em;
+ }
+ :where(blockquote):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 500;
+ font-style: italic;
+ color: var(--tw-prose-quotes);
+ border-inline-start-width: 0.25rem;
+ border-inline-start-color: var(--tw-prose-quote-borders);
+ quotes: "\201C""\201D""\2018""\2019";
+ margin-top: 1.6em;
+ margin-bottom: 1.6em;
+ padding-inline-start: 1em;
+ }
+ :where(blockquote p:first-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: open-quote;
+ }
+ :where(blockquote p:last-of-type):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: close-quote;
+ }
+ :where(h1):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 800;
+ font-size: 2.25em;
+ margin-top: 0;
+ margin-bottom: 0.8888889em;
+ line-height: 1.1111111;
+ }
+ :where(h1 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 900;
+ color: inherit;
+ }
+ :where(h2):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 700;
+ font-size: 1.5em;
+ margin-top: 2em;
+ margin-bottom: 1em;
+ line-height: 1.3333333;
+ }
+ :where(h2 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 800;
+ color: inherit;
+ }
+ :where(h3):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ font-size: 1.25em;
+ margin-top: 1.6em;
+ margin-bottom: 0.6em;
+ line-height: 1.6;
+ }
+ :where(h3 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+ }
+ :where(h4):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ margin-top: 1.5em;
+ margin-bottom: 0.5em;
+ line-height: 1.5;
+ }
+ :where(h4 strong):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 700;
+ color: inherit;
+ }
+ :where(img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(picture):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ display: block;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(video):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(kbd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ font-weight: 500;
+ font-family: inherit;
+ color: var(--tw-prose-kbd);
+ box-shadow: 0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%), 0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);
+ font-size: 0.875em;
+ border-radius: 0.3125rem;
+ padding-top: 0.1875em;
+ padding-inline-end: 0.375em;
+ padding-bottom: 0.1875em;
+ padding-inline-start: 0.375em;
+ }
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-code);
+ font-weight: 600;
+ font-size: 0.875em;
+ }
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: "`";
+ }
+ :where(code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: "`";
+ }
+ :where(a code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(h1 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(h2 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.875em;
+ }
+ :where(h3 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ font-size: 0.9em;
+ }
+ :where(h4 code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(blockquote code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(thead th code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: inherit;
+ }
+ :where(pre):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-pre-code);
+ background-color: var(--tw-prose-pre-bg);
+ overflow-x: auto;
+ font-weight: 400;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+ margin-top: 1.7142857em;
+ margin-bottom: 1.7142857em;
+ border-radius: 0.375rem;
+ padding-top: 0.8571429em;
+ padding-inline-end: 1.1428571em;
+ padding-bottom: 0.8571429em;
+ padding-inline-start: 1.1428571em;
+ }
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ background-color: transparent;
+ border-width: 0;
+ border-radius: 0;
+ padding: 0;
+ font-weight: inherit;
+ color: inherit;
+ font-size: inherit;
+ font-family: inherit;
+ line-height: inherit;
+ }
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::before {
+ content: none;
+ }
+ :where(pre code):not(:where([class~="not-prose"],[class~="not-prose"] *))::after {
+ content: none;
+ }
+ :where(table):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ width: 100%;
+ table-layout: auto;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ font-size: 0.875em;
+ line-height: 1.7142857;
+ }
+ :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-th-borders);
+ }
+ :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-headings);
+ font-weight: 600;
+ vertical-align: bottom;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+ }
+ :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 1px;
+ border-bottom-color: var(--tw-prose-td-borders);
+ }
+ :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-bottom-width: 0;
+ }
+ :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ vertical-align: baseline;
+ }
+ :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ border-top-width: 1px;
+ border-top-color: var(--tw-prose-th-borders);
+ }
+ :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ vertical-align: top;
+ }
+ :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ text-align: start;
+ }
+ :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ color: var(--tw-prose-captions);
+ font-size: 0.875em;
+ line-height: 1.4285714;
+ margin-top: 0.8571429em;
+ }
+ --tw-prose-body: oklch(37.3% 0.034 259.733);
+ --tw-prose-headings: oklch(21% 0.034 264.665);
+ --tw-prose-lead: oklch(44.6% 0.03 256.802);
+ --tw-prose-links: oklch(21% 0.034 264.665);
+ --tw-prose-bold: oklch(21% 0.034 264.665);
+ --tw-prose-counters: oklch(55.1% 0.027 264.364);
+ --tw-prose-bullets: oklch(87.2% 0.01 258.338);
+ --tw-prose-hr: oklch(92.8% 0.006 264.531);
+ --tw-prose-quotes: oklch(21% 0.034 264.665);
+ --tw-prose-quote-borders: oklch(92.8% 0.006 264.531);
+ --tw-prose-captions: oklch(55.1% 0.027 264.364);
+ --tw-prose-kbd: oklch(21% 0.034 264.665);
+ --tw-prose-kbd-shadows: NaN NaN NaN;
+ --tw-prose-code: oklch(21% 0.034 264.665);
+ --tw-prose-pre-code: oklch(92.8% 0.006 264.531);
+ --tw-prose-pre-bg: oklch(27.8% 0.033 256.848);
+ --tw-prose-th-borders: oklch(87.2% 0.01 258.338);
+ --tw-prose-td-borders: oklch(92.8% 0.006 264.531);
+ --tw-prose-invert-body: oklch(87.2% 0.01 258.338);
+ --tw-prose-invert-headings: #fff;
+ --tw-prose-invert-lead: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-links: #fff;
+ --tw-prose-invert-bold: #fff;
+ --tw-prose-invert-counters: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802);
+ --tw-prose-invert-hr: oklch(37.3% 0.034 259.733);
+ --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542);
+ --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733);
+ --tw-prose-invert-captions: oklch(70.7% 0.022 261.325);
+ --tw-prose-invert-kbd: #fff;
+ --tw-prose-invert-kbd-shadows: 255 255 255;
+ --tw-prose-invert-code: #fff;
+ --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338);
+ --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
+ --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802);
+ --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733);
+ font-size: 1rem;
+ line-height: 1.75;
+ :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+ :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+ }
+ :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0.375em;
+ }
+ :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+ :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ }
+ :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+ }
+ :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ }
+ :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 1.25em;
+ }
+ :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ }
+ :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+ }
+ :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0.5em;
+ padding-inline-start: 1.625em;
+ }
+ :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0;
+ }
+ :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-end: 0;
+ }
+ :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-top: 0.5714286em;
+ padding-inline-end: 0.5714286em;
+ padding-bottom: 0.5714286em;
+ padding-inline-start: 0.5714286em;
+ }
+ :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-start: 0;
+ }
+ :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ padding-inline-end: 0;
+ }
+ :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 2em;
+ margin-bottom: 2em;
+ }
+ :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-top: 0;
+ }
+ :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
+ margin-bottom: 0;
+ }
+ max-width: var(--container-5xl);
+ padding-inline: calc(var(--spacing) * 4);
+ padding-block: calc(var(--spacing) * 8);
}
- :where(thead):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- border-bottom-width: 1px;
- border-bottom-color: var(--tw-prose-th-borders);
- }
- :where(thead th):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-headings);
- font-weight: 600;
- vertical-align: bottom;
- padding-inline-end: 0.5714286em;
- padding-bottom: 0.5714286em;
- padding-inline-start: 0.5714286em;
- }
- :where(tbody tr):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- border-bottom-width: 1px;
- border-bottom-color: var(--tw-prose-td-borders);
- }
- :where(tbody tr:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- border-bottom-width: 0;
- }
- :where(tbody td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- vertical-align: baseline;
- }
- :where(tfoot):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- border-top-width: 1px;
- border-top-color: var(--tw-prose-th-borders);
- }
- :where(tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- vertical-align: top;
- }
- :where(th, td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- text-align: start;
- }
- :where(figure > *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- margin-bottom: 0;
- }
- :where(figcaption):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- color: var(--tw-prose-captions);
- font-size: 0.875em;
- line-height: 1.4285714;
- margin-top: 0.8571429em;
- }
- --tw-prose-body: oklch(37.3% 0.034 259.733);
- --tw-prose-headings: oklch(21% 0.034 264.665);
- --tw-prose-lead: oklch(44.6% 0.03 256.802);
- --tw-prose-links: oklch(21% 0.034 264.665);
- --tw-prose-bold: oklch(21% 0.034 264.665);
- --tw-prose-counters: oklch(55.1% 0.027 264.364);
- --tw-prose-bullets: oklch(87.2% 0.01 258.338);
- --tw-prose-hr: oklch(92.8% 0.006 264.531);
- --tw-prose-quotes: oklch(21% 0.034 264.665);
- --tw-prose-quote-borders: oklch(92.8% 0.006 264.531);
- --tw-prose-captions: oklch(55.1% 0.027 264.364);
- --tw-prose-kbd: oklch(21% 0.034 264.665);
- --tw-prose-kbd-shadows: NaN NaN NaN;
- --tw-prose-code: oklch(21% 0.034 264.665);
- --tw-prose-pre-code: oklch(92.8% 0.006 264.531);
- --tw-prose-pre-bg: oklch(27.8% 0.033 256.848);
- --tw-prose-th-borders: oklch(87.2% 0.01 258.338);
- --tw-prose-td-borders: oklch(92.8% 0.006 264.531);
- --tw-prose-invert-body: oklch(87.2% 0.01 258.338);
- --tw-prose-invert-headings: #fff;
- --tw-prose-invert-lead: oklch(70.7% 0.022 261.325);
- --tw-prose-invert-links: #fff;
- --tw-prose-invert-bold: #fff;
- --tw-prose-invert-counters: oklch(70.7% 0.022 261.325);
- --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802);
- --tw-prose-invert-hr: oklch(37.3% 0.034 259.733);
- --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542);
- --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733);
- --tw-prose-invert-captions: oklch(70.7% 0.022 261.325);
- --tw-prose-invert-kbd: #fff;
- --tw-prose-invert-kbd-shadows: 255 255 255;
- --tw-prose-invert-code: #fff;
- --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338);
- --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);
- --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802);
- --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733);
- font-size: 1rem;
- line-height: 1.75;
- :where(picture > img):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- margin-bottom: 0;
- }
- :where(li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- }
- :where(ol > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-start: 0.375em;
- }
- :where(ul > li):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-start: 0.375em;
- }
- :where(.prose > ul > li p):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0.75em;
- margin-bottom: 0.75em;
- }
- :where(.prose > ul > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 1.25em;
- }
- :where(.prose > ul > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-bottom: 1.25em;
- }
- :where(.prose > ol > li > p:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 1.25em;
- }
- :where(.prose > ol > li > p:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-bottom: 1.25em;
- }
- :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0.75em;
- margin-bottom: 0.75em;
- }
- :where(dl):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 1.25em;
- margin-bottom: 1.25em;
- }
- :where(dd):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0.5em;
- padding-inline-start: 1.625em;
- }
- :where(hr + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- }
- :where(h2 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- }
- :where(h3 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- }
- :where(h4 + *):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- }
- :where(thead th:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-start: 0;
- }
- :where(thead th:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-end: 0;
- }
- :where(tbody td, tfoot td):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-top: 0.5714286em;
- padding-inline-end: 0.5714286em;
- padding-bottom: 0.5714286em;
- padding-inline-start: 0.5714286em;
- }
- :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-start: 0;
- }
- :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- padding-inline-end: 0;
- }
- :where(figure):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 2em;
- margin-bottom: 2em;
- }
- :where(.prose > :first-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-top: 0;
- }
- :where(.prose > :last-child):not(:where([class~="not-prose"],[class~="not-prose"] *)) {
- margin-bottom: 0;
- }
- max-width: var(--container-5xl);
- padding-inline: calc(var(--spacing) * 4);
- padding-block: calc(var(--spacing) * 8);
}
footer#site_foot {
+ margin: calc(var(--spacing) * 0);
background-color: var(--color-secondary);
+ padding: calc(var(--spacing) * 0);
text-align: center;
color: var(--color-white);
}
+@property --tw-space-y-reverse {
+ syntax: "*";
+ inherits: false;
+ initial-value: 0;
+}
@property --tw-border-style {
syntax: "*";
inherits: false;
@@ -1361,6 +1445,10 @@ footer#site_foot {
syntax: "*";
inherits: false;
}
+@property --tw-font-weight {
+ syntax: "*";
+ inherits: false;
+}
@property --tw-outline-style {
syntax: "*";
inherits: false;
@@ -1374,8 +1462,10 @@ footer#site_foot {
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
+ --tw-space-y-reverse: 0;
--tw-border-style: solid;
--tw-leading: initial;
+ --tw-font-weight: initial;
--tw-outline-style: solid;
--tw-space-x-reverse: 0;
}
diff --git a/public/blog/another-blog-post/index.html b/public/blog/another-blog-post/index.html
index e9eeaf5..548cbc8 100644
--- a/public/blog/another-blog-post/index.html
+++ b/public/blog/another-blog-post/index.html
@@ -17,12 +17,14 @@
diff --git a/public/blog/category/anger/index.html b/public/blog/category/anger/index.html
index bd7a199..c2cc34c 100644
--- a/public/blog/category/anger/index.html
+++ b/public/blog/category/anger/index.html
@@ -17,12 +17,14 @@
diff --git a/public/blog/category/go/index.html b/public/blog/category/go/index.html
index b1c1438..59dcbaf 100644
--- a/public/blog/category/go/index.html
+++ b/public/blog/category/go/index.html
@@ -17,12 +17,14 @@
diff --git a/public/blog/category/progrmming/index.html b/public/blog/category/progrmming/index.html
index 0fefcdc..4fa0dec 100644
--- a/public/blog/category/progrmming/index.html
+++ b/public/blog/category/progrmming/index.html
@@ -17,12 +17,14 @@
diff --git a/public/blog/index.html b/public/blog/index.html
index 48796ba..286afbf 100644
--- a/public/blog/index.html
+++ b/public/blog/index.html
@@ -17,26 +17,31 @@
-Blog Index
-
+
+
Go SSG - Blog Index
+
+
+
diff --git a/public/blog/my-first-blog-post/index.html b/public/blog/my-first-blog-post/index.html
index 770541a..ba2d906 100644
--- a/public/blog/my-first-blog-post/index.html
+++ b/public/blog/my-first-blog-post/index.html
@@ -17,12 +17,14 @@
@@ -48,7 +50,7 @@
Tap Tap Tap Is this thing on?
-This is my first Go SSG blog post.
+This is my first Go SSG blog post.
This project is a simple static site generator written in Go. It is designed to be easy to use and extend, allowing you to create a static website quickly and efficiently.
diff --git a/public/contact/index.html b/public/contact/index.html
new file mode 100644
index 0000000..449ec09
--- /dev/null
+++ b/public/contact/index.html
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+ Contact
+
+
+
+
+
+
+
+
+
+
+ Contact
+
+
+
+
+
+
+
+
+
+
diff --git a/public/index.html b/public/index.html
index d67ae0f..4d04984 100644
--- a/public/index.html
+++ b/public/index.html
@@ -17,12 +17,14 @@
diff --git a/templates/base.html b/templates/base.html
index 9141a68..4654a4b 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -20,6 +20,8 @@
{{ template "blog_post_content" . }}
{{- else if eq .PageTemplate "category_page" -}}
{{ template "category_content" . }}
+ {{- else if eq .PageTemplate "contact_page" -}}
+ {{ template "contact_content" . }}
{{- else -}}
Unknown PageTemplate: {{ .PageTemplate }}
{{- end -}}
diff --git a/templates/blog_index_page.html b/templates/blog_index_page.html
index a6eb264..7543307 100644
--- a/templates/blog_index_page.html
+++ b/templates/blog_index_page.html
@@ -3,12 +3,15 @@
{{ end }}
{{ define "blog_index_content" }}
-Blog Index
-
- {{ range .Posts }}
- {{ .Title }} {{ .Description }}
- {{ else }}
- No posts found.
- {{ end }}
-
+
+
Go SSG - Blog Index
+
+
+ {{ range .Posts }}
+ {{ .Title }} {{ .Description }}
+ {{ else }}
+ No posts found.
+ {{ end }}
+
+
{{ end }}
diff --git a/templates/contact_page.html b/templates/contact_page.html
new file mode 100644
index 0000000..c8dfc7f
--- /dev/null
+++ b/templates/contact_page.html
@@ -0,0 +1,37 @@
+{{ define "contact_page" }}
+{{ template "base" . }}
+{{ end }}
+
+{{ define "contact_content" }}
+Contact Me
+
+
+{{ end }}