diff --git a/README.md b/README.md
index 5fd44da..5c7e9d2 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
# huell
-A Hugo Shell theme
\ No newline at end of file
+A Hugo Shell theme
diff --git a/layouts/404.html b/layouts/404.html
new file mode 100644
index 0000000..f6e793c
--- /dev/null
+++ b/layouts/404.html
@@ -0,0 +1,4 @@
+{{ define "main" }}
+
Page not found
+ Return to the home page.
+{{ end }}
diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html
new file mode 100644
index 0000000..df3c3fa
--- /dev/null
+++ b/layouts/_default/_markup/render-heading.html
@@ -0,0 +1,3 @@
+
+
+{{ .Text | safeHTML }}
diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html
new file mode 100644
index 0000000..659dd83
--- /dev/null
+++ b/layouts/_default/_markup/render-image.html
@@ -0,0 +1,6 @@
+
diff --git a/layouts/_default/_markup/render-link.html b/layouts/_default/_markup/render-link.html
new file mode 100644
index 0000000..08b7825
--- /dev/null
+++ b/layouts/_default/_markup/render-link.html
@@ -0,0 +1,9 @@
+{{ .Text | safeHTML }}
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
new file mode 100644
index 0000000..c92054d
--- /dev/null
+++ b/layouts/_default/baseof.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+ {{ .Site.Title }}{{ $url := urls.Parse .Page.Permalink }}{{ $url.Path }}
+
+ {{ with .Site.Params.description }}
+
+ {{ end }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `
+
+ ` | safeHTML
+ }}
+
+ {{- partial "favicon.html" . -}}
+
+ {{ with .OutputFormats.Get "RSS" }}
+ {{ printf `
+ ` .Permalink .Rel .MediaType.Type $.Site.Title | safeHTML
+ }}
+ {{ end }}
+
+ {{- partial "opengraph.html" . -}}
+ {{- partial "twitter.html" . -}}
+
+
+
+ {{- partial "header.html" . -}}
+
+
+
+ {{ block "main" . }}
+ {{ end }}
+ {{ partial "footer.html" . }}
+
+
+
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
new file mode 100644
index 0000000..3c4d1a1
--- /dev/null
+++ b/layouts/_default/list.html
@@ -0,0 +1,10 @@
+{{ define "main" }}
+ {{ .Title }}
+
+ {{ .Content }}
+
+
+
+ {{ partial "posts.html" . }}
+
+{{ end }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
new file mode 100644
index 0000000..4cfd224
--- /dev/null
+++ b/layouts/_default/single.html
@@ -0,0 +1,4 @@
+{{ define "main" }}
+ {{ .Title }}
+ {{ .Content }}
+{{ end }}
diff --git a/layouts/gallery/list.html b/layouts/gallery/list.html
new file mode 100644
index 0000000..0ced4cd
--- /dev/null
+++ b/layouts/gallery/list.html
@@ -0,0 +1,7 @@
+{{ define "main" }}
+ {{ .Title }}
+ {{ .Content }}
+
+ {{ partial "gallery.html" . }}
+
+{{ end }}
diff --git a/layouts/gallery/single.html b/layouts/gallery/single.html
new file mode 100644
index 0000000..3084a8d
--- /dev/null
+++ b/layouts/gallery/single.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+ {{ .Title }}
+
+
+ {{ .Date | time.Format ":date_medium" }}
+
+
+ {{ if and (isset .Params "image") .Params.image }}
+ {{ $image := .Page.Resources.GetMatch .Params.image }}
+ {{ with $image }}
+ {{ $thumb := .Resize "1000x" }}
+ {{ printf `
` $thumb.RelPermalink .Title | safeHTML }}
+ {{ end }}
+ {{ end }}
+
+ {{ .Content }}
+ {{ partial "comments.html" . }}
+{{ end }}
diff --git a/layouts/index.html b/layouts/index.html
new file mode 100644
index 0000000..94ae906
--- /dev/null
+++ b/layouts/index.html
@@ -0,0 +1,7 @@
+{{ define "main" }}
+
+ {{ with .Site.GetPage "/posts" }}
+ {{ partial "posts.html" . }}
+ {{ end }}
+
+{{ end }}
diff --git a/layouts/partials/comments.html b/layouts/partials/comments.html
new file mode 100644
index 0000000..e69de29
diff --git a/layouts/partials/favicon.html b/layouts/partials/favicon.html
new file mode 100644
index 0000000..e69de29
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000..255f644
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1 @@
+
diff --git a/layouts/partials/gallery.html b/layouts/partials/gallery.html
new file mode 100644
index 0000000..8e05ba9
--- /dev/null
+++ b/layouts/partials/gallery.html
@@ -0,0 +1,17 @@
+{{ range sort .Pages "Date" "desc" }}
+ {{ if not .Params.private }}
+ {{ if and (isset .Params "image") .Params.image }}
+
+ {{ $image := .Page.Resources.GetMatch .Params.image }}
+ {{ with $image }}
+ {{ $thumb := .Resize "400x" }}
+
+ {{ end }}
+
+ {{ end }}
+ {{ end }}
+{{ end }}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
new file mode 100644
index 0000000..3470165
--- /dev/null
+++ b/layouts/partials/header.html
@@ -0,0 +1,35 @@
+
diff --git a/layouts/partials/opengraph.html b/layouts/partials/opengraph.html
new file mode 100644
index 0000000..4ed8db0
--- /dev/null
+++ b/layouts/partials/opengraph.html
@@ -0,0 +1,78 @@
+
+
+
+
+
+{{- with .Params.image }}
+ {{ $image := $.Resources.GetMatch . }}
+ {{ with $image }}
+ {{ $thumb := .Resize "400x" }}
+
+ {{ end }}
+{{ end }}
+
+{{- $iso8601 := "2000-01-01T00:00:00-01:00" -}}
+{{- if .IsPage }}
+ {{- if not .PublishDate.IsZero }}
+
+ {{ else if not .Date.IsZero }}
+
+ {{ end }}
+{{- end }}
+{{/* .IsPage */}}
+
+{{- with .Params.audio }}
+
+{{ end }}
+{{- with .Params.locale }}
+
+{{ end }}
+{{- with .Site.Params.title }}
+
+{{ end }}
+{{- with .Params.videos }}
+ {{- range . }}
+
+ {{ end }}
+{{ end }}
+
+{{- $permalink := .Permalink }}
+{{- $siteSeries := .Site.Taxonomies.series }}{{ with .Params.series }}
+ {{- range $name := . }}
+ {{- $series := index $siteSeries $name }}
+ {{- range $page := first 6 $series.Pages }}
+ {{- if ne $page.Permalink $permalink }}
+
+ {{ end }}
+ {{- end }}
+ {{ end }}
+{{ end }}
+
+{{- if .IsPage }}
+
+ {{- with .Params.tags }}
+ {{ range first 6 . }}
+
+ {{- end }}
+ {{ end }}
+{{- end }}
diff --git a/layouts/partials/posts.html b/layouts/partials/posts.html
new file mode 100644
index 0000000..c392dde
--- /dev/null
+++ b/layouts/partials/posts.html
@@ -0,0 +1,11 @@
+{{ range sort .Pages "Date" "desc" }}
+{{ if not .Params.private }}
+
+
+
{{ .Date | time.Format ":date_medium" }}
+
+ {{ .Summary }}
+
+
+{{ end }}
+{{ end }}
diff --git a/layouts/partials/twitter.html b/layouts/partials/twitter.html
new file mode 100644
index 0000000..4182c78
--- /dev/null
+++ b/layouts/partials/twitter.html
@@ -0,0 +1,23 @@
+{{- with .Params.image }}
+ {{ $image := $.Resources.GetMatch . }}
+ {{ with $image }}
+ {{ $thumb := .Resize "400x" }}
+
+
+ {{ end }}
+{{ end }}
+
+
+
+
diff --git a/layouts/posts/single.html b/layouts/posts/single.html
new file mode 100644
index 0000000..e3ece26
--- /dev/null
+++ b/layouts/posts/single.html
@@ -0,0 +1,12 @@
+{{ define "main" }}
+ {{ .Title }}
+
+
+ {{ .Date | time.Format ":date_medium" }}
+
+
+
+
+ {{ .Content }}
+ {{ partial "comments.html" . }}
+{{ end }}
diff --git a/layouts/sitemap.xml b/layouts/sitemap.xml
new file mode 100644
index 0000000..2c7e31a
--- /dev/null
+++ b/layouts/sitemap.xml
@@ -0,0 +1,16 @@
+{{ printf "" | safeHTML }}
+
+ {{ range .Pages }}
+ {{ if not .Params.private }}
+
+ {{ .Permalink }}{{ if not .Lastmod.IsZero }}
+ {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}{{ end }}{{ with .Sitemap.ChangeFreq }}
+ {{ . }}{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
+ {{ .Sitemap.Priority }}{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
+ {{ end }}
+ {{ end }}
+
+ {{ end }}
+ {{ end }}
+
\ No newline at end of file
diff --git a/static/css/huell.css b/static/css/huell.css
index 0a230f8..e0cb864 100644
--- a/static/css/huell.css
+++ b/static/css/huell.css
@@ -29,3 +29,230 @@
font-weight: 700;
text-rendering: optimizeLegibility;
}
+
+:root {
+ --global-font-size: 16px;
+ --global-font-color: #444;
+ --mono-font-stack: Roboto Mono, Menlo, Monaco, Lucida Console,
+ Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono,
+ Courier New, monospace, serif;
+ --font-stack: Roboto Mono, Menlo, Monaco, Lucida Console, Liberation Mono,
+ DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace,
+ serif;
+ --global-line-height: 1.6em;
+ --page-width: 45em;
+ --display-h1-decoration: 1;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --background-color: #222225;
+ --font-color: #e8e9ed;
+ --invert-font-color: #222225;
+ --primary-color: #62c4ff;
+ --secondary-color: #a3abba;
+ --tertiary-color: #a3abba;
+ --error-color: #ff3c74;
+ --progress-bar-background: #3f3f44;
+ --progress-bar-fill: #62c4ff;
+ --code-bg-color: #3f3f44;
+ }
+}
+
+@media (prefers-color-scheme: light) {
+ :root {
+ --background-color: #fff;
+ --font-color: #151515;
+ --invert-font-color: #fff;
+ --primary-color: #1a95e0;
+ --secondary-color: #727578;
+ --tertiary-color: #727578;
+ --error-color: #d20962;
+ --progress-bar-background: #727578;
+ --progress-bar-fill: #151515;
+ --code-bg-color: #e8eff2;
+ }
+}
+
+@media only screen and (max-width: 850px) {
+ :root {
+ --global-font-size: 14px;
+ --global-font-color: #444;
+ --global-line-height: 1.6em;
+ --page-width: 70em;
+ }
+}
+
+body {
+ font-family: var(--font-stack);
+ font-size: var(--global-font-size);
+ background-color: var(--background-color);
+ margin-bottom: 75px;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: var(--font-stack);
+ clear: both;
+}
+
+h1 {
+ margin-bottom: 10px;
+ display: inline-block;
+}
+
+.logo {
+ font-weight: normal;
+}
+
+.terminal-menu li {
+ margin-right: 30px;
+}
+
+figure {
+ margin-top: 15px;
+ margin-bottom: 15px;
+ margin-left: 60px;
+ margin-right: 60px;
+}
+
+.footer {
+ clear: both;
+ margin-top: 100px;
+ padding-top: 10px;
+ border-top: 1px solid var(--secondary-color);
+ color: var(--global-font-color);
+}
+
+.image-grid {
+ display: grid;
+ grid-template-rows: auto;
+ display: grid;
+ grid-gap: 1em;
+ grid-template-rows: auto;
+ grid-template-columns: repeat(auto-fit,
+ minmax(calc(var(--page-width) / 4), 1fr));
+}
+
+.prompt-symbol {
+ padding-left: 1ch;
+ padding-right: 1ch;
+}
+
+.terminal-prompt {
+ display: flex;
+ align-items: center;
+ flex-wrap: nowrap;
+ white-space: nowrap;
+}
+
+.terminal-prompt::after {
+ -webkit-animation: cursor 1s infinite;
+ animation: cursor 1s infinite;
+ width: 10px;
+}
+
+.terminal-prompt::before {
+ content: none;
+}
+
+.gallery-image {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.posts-list {
+ position: relative;
+ padding-left: 130px;
+ top: 0;
+}
+
+.post h1,
+.post h2 {
+ padding-top: 0;
+ margin: 0;
+ margin-bottom: 5px;
+}
+
+.posts-list .date {
+ display: inline-block;
+ position: absolute;
+ left: 0px;
+ width: 130px;
+ z-index: 400;
+ padding-top: 0;
+}
+
+@media only screen and (max-width: 45em) {
+ .site-name {
+ width: 2ch;
+ overflow: hidden;
+ display: inline-block;
+ }
+
+ .terminal-nav {
+ align-items: flex-start;
+ flex-direction: column;
+ display: flex;
+ }
+
+ .terminal-menu ul {
+ align-items: flex-start;
+ display: flex;
+ flex-direction: row;
+ justify-content: left;
+ margin-top: 0;
+ }
+
+ .terminal-menu li {
+ margin-right: 20px;
+ }
+
+ .logo {
+ padding: calc(var(--global-space) * 1) 0 calc(var(--global-space) * 1);
+ }
+
+ figure {
+ margin-top: 5px;
+ margin-bottom: 5px;
+ margin-left: 30px;
+ margin-right: 30px;
+ }
+
+ .posts-list {
+ position: relative;
+ padding-left: 0;
+ top: 0;
+ }
+
+ .post h1,
+ .post h2 {
+ padding-top: 0;
+ }
+
+ .posts-list .date {
+ display: inline-block;
+ position: absolute;
+ left: 0px;
+ width: 150px;
+ z-index: 400;
+ font-weight: bold;
+ padding-top: 0;
+ display: none;
+ }
+
+ .footer {
+ margin-top: 50px;
+ padding-top: 5px;
+ }
+}