From 4d1ddd22ed70dbd51a2c9c2732844043c34c64e0 Mon Sep 17 00:00:00 2001 From: "Frank \"PHiAX\" Weggelaar" Date: Sat, 24 Jan 2026 20:28:16 +0100 Subject: [PATCH] First try at a HUGO theme for phiax.nl --- archetypes/default.md | 5 + assets/css/main.css | 206 ++++++++++++++++++++++++++++++ assets/images/logo_purple.png | Bin 0 -> 7360 bytes layouts/_partials/footer.html | 1 + layouts/_partials/head.html | 5 + layouts/_partials/head/css.html | 9 ++ layouts/_partials/header.html | 3 + layouts/_partials/menu.html | 51 ++++++++ layouts/_partials/navigation.html | 1 + layouts/_partials/terms.html | 18 +++ layouts/baseof.html | 19 +++ layouts/home.html | 12 ++ layouts/page.html | 12 ++ 13 files changed, 342 insertions(+) create mode 100644 archetypes/default.md create mode 100644 assets/css/main.css create mode 100644 assets/images/logo_purple.png create mode 100644 layouts/_partials/footer.html create mode 100644 layouts/_partials/head.html create mode 100644 layouts/_partials/head/css.html create mode 100644 layouts/_partials/header.html create mode 100644 layouts/_partials/menu.html create mode 100644 layouts/_partials/navigation.html create mode 100644 layouts/_partials/terms.html create mode 100644 layouts/baseof.html create mode 100644 layouts/home.html create mode 100644 layouts/page.html diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..25b6752 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +date = '{{ .Date }}' +draft = true +title = '{{ replace .File.ContentBaseName "-" " " | title }}' ++++ diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..4013e11 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,206 @@ +@import url('https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@400;700&display=swap'); + +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + display: grid; + align-content: center; + gap: 2rem; + padding: 2rem; + color: rgba(30, 30, 30); + background-image: radial-gradient(#181818 2px, transparent 2px), radial-gradient(#181818 2px, transparent 2px); + background-size: 32px 32px; + background-position: 0 0, 16px 16px; + background-color: #121212; + position: relative; + --accent-color: #a256ff; + font-family: 'Josefin Sans', sans-serif; +} + +header { + width: min(60rem, 100%); + margin-inline: auto; + display: flex; + row-gap: 2rem; + flex-wrap: nowrap; + justify-content: left; +} + +nav { + width: min(60rem, 100%); + margin-inline: auto; + display: flex; + row-gap: 2rem; + height: 2rem; + flex-wrap: wrap; + justify-content: left; + font-size: 1.2rem; + color: white; + background-color: var(--accent-color); + z-index: 1; /* Make sure nav content is above pseudo-elements */ +} + +nav::before, +nav::after { + content: ''; + position: absolute; + height: 2rem; + width: calc(50vw - 30rem); /* Adjust width to ensure it extends to the edges */ + background-color: var(--accent-color); /* Same background color */ + z-index: -1; /* Place behind the nav */ +} + +nav::before { + left: 0; /* Extend to the left */ +} + +nav::after { + right: 0; /* Extend to the right */ +} + +article.article-box { + width: min(60rem, 90%); + margin-inline: auto; + display: flex; + row-gap: 2rem; + flex-wrap: wrap; + justify-content: center; +} + +article.article-box article.article-content { + background: rgba(224, 224, 224, 1.0); + --overlap-size: 1.5rem; + width: min(60rem, 100%); + padding-block-start: 0.5rem; + padding-block-end: 2rem; + display: grid; + grid-template-rows: max-content max-content 1fr max-content; + gap: 0.5rem; + box-shadow: 0.25rem 0.25rem 0.5rem rgba(0, 0, 0, 0.5); +} + +article.article-box article.article-content p { + padding: 0 1rem 0 1rem ; +} + +article.article-box article.article-content .article-meta { + font-size: 1.2rem; + color: var(--accent-color); + text-align: left; + padding-left: 0.75rem; +} + +article.article-box article.article-content .article-title { + justify-self: start; + margin-left: calc(var(--overlap-size) * -1); + padding-block: 0.5rem; + padding-inline: 2.5rem; + + border: none; + font-family: inherit; + color: white; + font-size: 1.1rem; + + background-color: var(--accent-color); + + position: relative; +} + +article.article-box article.article-content .article-title::after { + content: ""; + position: absolute; + height: var(--overlap-size); + width: var(--overlap-size); + left: 0; + bottom: 100%; + background-color: inherit; + background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)); + clip-path: polygon(100% 0, 100% 100%, 0 100%); +} + +article.article-box article.article-content .article-end-ribbon { + justify-self: end; + margin-right: calc(var(--overlap-size) * -1); + padding-block: 0.25rem; + padding-inline: 2.5rem; + background-color: var(--accent-color); + color: white; + font-size: 1.1rem; + + background-image: linear-gradient(transparent 50%, rgba(0, 0, 0, 0.25) 0); + background-size: 100% 200%; + + transition: background-position 100ms ease; + cursor: pointer; + + position: relative; +} + +article.article-box article.article-content .article-end-ribbon:focus-visible { + outline-offset: 5px; + outline: 2px solid var(--accent-color); + background-position: 0 100%; +} + +article.article-box article.article-content .article-end-ribbon:hover { + background-position: 0 100%; +} + +article.article-box article.article-content .article-end-ribbon::after { + content: ""; + position: absolute; + height: var(--overlap-size); + width: var(--overlap-size); + right: 0; + top: 100%; + background-color: inherit; + background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)); + clip-path: polygon(0 0, 100% 0, 0 100%); +} + +footer { + position: fixed; + left: 0; + right: 0; + bottom: 0; + width: 100%; + max-width: none; + margin: 0; + display: flex; + height: 3rem; + padding-inline: min(2rem, 4vw); + background-color: var(--accent-color); + z-index: 1; +} + +footer .container { + width: min(60rem, 100%); + margin-inline: auto; + display: flex; + align-items: center; + height: 100%; + padding-inline: 1rem; /* optional inner padding */ + gap: 1rem; + font-size: 1.2rem; + color: white; +} + +/* Ensure the background strips (pseudo-elements) still span outwards */ +footer::before, +footer::after { + content: ''; + position: absolute; + height: 3rem; + width: 50vw; + background-color: var(--accent-color); + z-index: -1; +} + +footer::before { left: 0; } +footer::after { right: 0; } diff --git a/assets/images/logo_purple.png b/assets/images/logo_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..c8346f10905c82b847f9d2baad7cb199e1a10994 GIT binary patch literal 7360 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 literal 0 HcmV?d00001 diff --git a/layouts/_partials/footer.html b/layouts/_partials/footer.html new file mode 100644 index 0000000..a38701a --- /dev/null +++ b/layouts/_partials/footer.html @@ -0,0 +1 @@ +

CC3.0-SA-NC {{ now.Year }}. PHiAX.

diff --git a/layouts/_partials/head.html b/layouts/_partials/head.html new file mode 100644 index 0000000..5e6f48b --- /dev/null +++ b/layouts/_partials/head.html @@ -0,0 +1,5 @@ + + + +{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }} +{{ partialCached "head/css.html" . }} diff --git a/layouts/_partials/head/css.html b/layouts/_partials/head/css.html new file mode 100644 index 0000000..d76d23a --- /dev/null +++ b/layouts/_partials/head/css.html @@ -0,0 +1,9 @@ +{{- with resources.Get "css/main.css" }} + {{- if hugo.IsDevelopment }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} +{{- end }} diff --git a/layouts/_partials/header.html b/layouts/_partials/header.html new file mode 100644 index 0000000..a908cf8 --- /dev/null +++ b/layouts/_partials/header.html @@ -0,0 +1,3 @@ +{{- with resources.Get "images/logo_purple.png" }} + +{{- end }} diff --git a/layouts/_partials/menu.html b/layouts/_partials/menu.html new file mode 100644 index 0000000..14245b5 --- /dev/null +++ b/layouts/_partials/menu.html @@ -0,0 +1,51 @@ +{{- /* +Renders a menu for the given menu ID. + +@context {page} page The current page. +@context {string} menuID The menu ID. + +@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $menuID := .menuID }} + +{{- with index site.Menus $menuID }} + +{{- end }} + +{{- define "_partials/inline/menu/walk.html" }} + {{- $page := .page }} + {{- range .menuEntries }} + {{- $attrs := dict "href" .URL }} + {{- if $page.IsMenuCurrent .Menu . }} + {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }} + {{- else if $page.HasMenuCurrent .Menu .}} + {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }} + {{- end }} + {{- $name := .Name }} + {{- with .Identifier }} + {{- with T . }} + {{- $name = . }} + {{- end }} + {{- end }} +
  • + {{ $name }} + {{- with .Children }} +
      + {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }} +
    + {{- end }} +
  • + {{- end }} +{{- end }} diff --git a/layouts/_partials/navigation.html b/layouts/_partials/navigation.html new file mode 100644 index 0000000..8995308 --- /dev/null +++ b/layouts/_partials/navigation.html @@ -0,0 +1 @@ +{{ partial "menu.html" (dict "menuID" "main" "page" .) }} diff --git a/layouts/_partials/terms.html b/layouts/_partials/terms.html new file mode 100644 index 0000000..53603bc --- /dev/null +++ b/layouts/_partials/terms.html @@ -0,0 +1,18 @@ +{{- /* +For a given taxonomy, renders a list of terms assigned to the page. + +@context {page} page The current page. +@context {string} taxonomy The taxonomy. + +@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $taxonomy := .taxonomy }} + +{{- with $page.GetTerms $taxonomy }} + {{- $label := (index . 0).Parent.LinkTitle }} + {{- range . }} +
    Tags: {{ .LinkTitle }}
    + {{- end }} +{{- end }} diff --git a/layouts/baseof.html b/layouts/baseof.html new file mode 100644 index 0000000..4b965b1 --- /dev/null +++ b/layouts/baseof.html @@ -0,0 +1,19 @@ + + + + {{ partial "head.html" . }} + + +
    + {{ partial "header.html" . }} +
    + + {{ block "main" . }}{{ end }} +
    +
    + {{ partial "footer.html" . }} +
    +
    + + diff --git a/layouts/home.html b/layouts/home.html new file mode 100644 index 0000000..b7df497 --- /dev/null +++ b/layouts/home.html @@ -0,0 +1,12 @@ +{{ define "main" }} + {{ range site.RegularPages.Reverse }} +
    +
    + +
    {{ .LinkTitle }}
    + {{ .Summary }} + Read more +
    +
    + {{ end }} +{{ end }} diff --git a/layouts/page.html b/layouts/page.html new file mode 100644 index 0000000..ef20466 --- /dev/null +++ b/layouts/page.html @@ -0,0 +1,12 @@ +{{ define "main" }} +
    +
    + {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }} + {{ $dateHuman := .Date | time.Format ":date_long" }} + +
    {{ .LinkTitle }}
    + {{ .Content }} + {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} +
    +
    +{{ end }}