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:
2026-05-23 20:25:29 +02:00
commit 00c3343b1d
87 changed files with 2929 additions and 0 deletions
@@ -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
View File
@@ -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
View File
@@ -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>
+24
View File
@@ -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
View File
@@ -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 }}