init: scaffold OPENBUREAU site with shibui-derived theme
- Hugo site for openbureau.ch (Deutsch, i18n-ready for EN/IT) - Theme themes/openbureau/ = local copy of shibui, customized via site-level layouts and assets to keep the theme reference clean - Editorial typography stack: Newsreader serif body, Space Grotesk display, Inter for listings, IBM Plex Mono for technical meta - Content structure: library/ (Theorie, Büroführung, Software) with manifest and colophon at root; software is a library category, not a separate top-level - Three views over one source: Journal (chronological home), Library (atlas grouped by section + tag cloud), single articles Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
{{- $alt := .Text -}} {{- $src := .Destination -}} {{- $title := .Title -}}
|
||||
|
||||
<figure>
|
||||
<img
|
||||
src="{{ $src }}"
|
||||
alt="{{ $alt }}"
|
||||
loading="lazy"
|
||||
{{
|
||||
with
|
||||
$title
|
||||
}}
|
||||
title="{{ . }}"
|
||||
{{
|
||||
end
|
||||
}}
|
||||
/>
|
||||
{{- with $alt }}
|
||||
<figcaption>{{ . }}</figcaption>
|
||||
{{ end -}}
|
||||
</figure>
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
{{ define "main" }}
|
||||
<h1>archive</h1>
|
||||
<div class="archive">
|
||||
{{- $.Scratch.Add "year" "" -}}
|
||||
{{- $.Scratch.Add "month" "" -}}
|
||||
|
||||
{{- range where site.Pages "Section" "posts" -}}
|
||||
{{- if and (not .Draft) .Date -}}
|
||||
{{- $year := .Date.Format "2006" -}}
|
||||
{{- $month := .Date.Format "January" -}}
|
||||
|
||||
{{- if ne $year ($.Scratch.Get "year") -}}
|
||||
{{- $.Scratch.Set "year" $year -}}
|
||||
{{- $.Scratch.Set "month" "" -}}
|
||||
<h2 class="archive-year">{{ $year }}</h2>
|
||||
{{- end -}}
|
||||
|
||||
{{- if ne $month ($.Scratch.Get "month") -}}
|
||||
{{- $.Scratch.Set "month" $month -}}
|
||||
<h3 class="archive-month">{{ $month }}</h3>
|
||||
{{- end -}}
|
||||
|
||||
<article class="archive-item">
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "02" }}</time>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
</article>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
</div>
|
||||
{{ end }}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html
|
||||
lang="{{ site.Language.LanguageCode }}"
|
||||
dir="{{ or site.Language.LanguageDirection `ltr` }}"
|
||||
>
|
||||
<head>
|
||||
<style>@media (pointer: fine) { * { cursor: none !important; } }</style>
|
||||
{{ partial "head.html" . }}
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main-content" class="skip-link">Skip to content</a>
|
||||
<header role="banner">{{ partial "header.html" . }}</header>
|
||||
<main id="main-content" role="main">{{ block "main" . }}{{ end }}</main>
|
||||
<footer role="contentinfo">{{ partial "footer.html" . }}</footer>
|
||||
{{ with resources.Get "js/cursor.js" }}<script>{{ .Content | safeJS }}</script>{{ end }}
|
||||
</body>
|
||||
</html>
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
<div class="time-list">
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
<li class="list-item">
|
||||
{{ if .Params.image }}
|
||||
<div class="list-image">
|
||||
<img src="{{ .Params.image }}" alt="{{ .LinkTitle }}">
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="list-title-row">
|
||||
<div class="list-title">
|
||||
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
|
||||
</div>
|
||||
<div class="list-meta">
|
||||
{{ partial "date.html" .Date }}
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{ end }}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
{{ define "main" }}
|
||||
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
|
||||
{{/* Table of Contents */}}
|
||||
{{ $hasToC := .Params.toc | default true }}
|
||||
{{ $headers := findRE "<h[2-6]" .Content }}
|
||||
{{ if and $hasToC (ge (len $headers) 1) }}
|
||||
<nav class="toc">
|
||||
<strong>TABLE OF CONTENTS</strong>
|
||||
<div class="toc-content">
|
||||
{{ .TableOfContents }}
|
||||
</div>
|
||||
</nav>
|
||||
{{ end }}
|
||||
|
||||
<!-- Content -->
|
||||
{{ partial "list-to-carousel.html" .Content }}
|
||||
|
||||
<!-- Carousel CSS & JS -->
|
||||
<link rel="stylesheet" href="/css/auto-carousel.css">
|
||||
<script type="text/javascript" src="/js/auto-carousel.js"></script>
|
||||
|
||||
<div class="time">
|
||||
{{ partial "date.html" .Date }}
|
||||
{{ $showReadingTime := .Params.showreadingtime | default site.Params.showreadingtime | default true }}
|
||||
{{ if and $showReadingTime .ReadingTime }}
|
||||
<span class="reading-time"> · {{ .ReadingTime }} min read</span>
|
||||
{{ end }}
|
||||
{{ $showLastMod := .Params.showlastmod | default site.Params.showlastmod | default false }}
|
||||
{{ if and $showLastMod .Lastmod }}
|
||||
{{ if ne .LastMod.Format "2006-01-02" .Date.Format "2006-01-02" }}
|
||||
<span class="lastmod"> · Last updated: {{ .LastMod.Format "2006-01-02" }}</span>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
|
||||
<!-- Comments block -->
|
||||
{{ if and .Content (default true (default .Site.Params.comments
|
||||
.Params.comments))
|
||||
}}
|
||||
<div class="comments">{{- partial "comments" . -}}</div>
|
||||
{{ end }}
|
||||
|
||||
{{ if not .IsHome }}
|
||||
<div class="terminal-nav">
|
||||
<div class="back-nav">
|
||||
{{ with .Parent }}
|
||||
<a href="{{ .RelPermalink }}" class="back-link">../</a>
|
||||
{{ else }}
|
||||
<a href="{{ "/" | relURL }}" class="back-link">../</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
Reference in New Issue
Block a user