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

- +
+

Go SSG - Blog Index

+ + +
{{ 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 }}