ui: Software-Rubrik als kuratierte Landing (Werkzeuge vs. Texte)

/library/software trennt jetzt 'Werkzeuge' (Beiträge mit externem Link wie
DOSSIER/RAPPORT, als Karten mit ↗ und Farbakzent) von 'Texte & Anleitungen'
(chronologisch). Andere Rubriken bleiben unverändert. dist/ ignoriert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 12:11:07 +02:00
parent 9c9b7e03bd
commit 0f574bf8a7
3 changed files with 63 additions and 0 deletions
+2
View File
@@ -11,6 +11,8 @@ hugo_stats.json
# Node (CMS) # Node (CMS)
node_modules/ node_modules/
# Admin-SPA Build-Output (wird im Container gebaut)
cms/admin/dist/
# Editors # Editors
.vscode/ .vscode/
+14
View File
@@ -751,6 +751,20 @@ a.byline-author:hover, a.journal-author:hover { color: var(--accent); }
.wiki-foot a { color: var(--color-text-muted); text-decoration: none; } .wiki-foot a { color: var(--color-text-muted); text-decoration: none; }
.wiki-foot a:hover { color: var(--accent); } .wiki-foot a:hover { color: var(--accent); }
/* ── Software-Landing: Werkzeuge getrennt von Texten ── */
.software-h { font-family: var(--font-family-serif); margin: var(--spacing-md) 0 var(--spacing-sm); }
.software-tools { margin-bottom: var(--spacing-lg); }
.tool-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 0.8em; }
.tool-item { display: flex; align-items: flex-start; gap: 0.5em; background: var(--color-bg-secondary);
border: 1px solid var(--color-border); border-left: 4px solid var(--section-color, var(--accent)); border-radius: 12px; padding: 0.9em 1em; }
.tool-item:hover { border-color: var(--section-color, var(--accent)); }
.tool-main { flex: 1; text-decoration: none; color: inherit; display: flex; flex-direction: column; gap: 0.2em; min-width: 0; }
.tool-name { font-family: var(--font-family-serif); font-weight: 600; font-size: 1.05rem; }
.tool-item:hover .tool-name { color: var(--accent); }
.tool-sum { font-size: var(--font-size-small); }
.tool-ext { flex: none; color: var(--color-text-muted); text-decoration: none; font-size: 1.15em; line-height: 1; }
.tool-ext:hover { color: var(--accent); }
/* ------------------------------------------------------------------------ /* ------------------------------------------------------------------------
Journal entries — three Republik-style layouts (set in front matter Journal entries — three Republik-style layouts (set in front matter
via `layout: image|icon|text`). Every entry is a full-bleed coloured via `layout: image|icon|text`). Every entry is a full-bleed coloured
+47
View File
@@ -36,6 +36,53 @@
</article> </article>
{{ end }} {{ end }}
</section> </section>
{{ else if eq .Path "/library/software" }}
{{/* Software: kuratierte Landing — Werkzeuge (mit externem Link) getrennt
von Texten & Anleitungen. */}}
<header class="section-header" data-section="software">
<p class="section-rubric">Library</p>
<h1 class="section-title">{{ .Title }}</h1>
{{ with .Params.description }}<p class="section-description">{{ . }}</p>{{ end }}
</header>
{{ $tools := where .RegularPages "Params.external" "!=" nil }}
{{ $texts := where .RegularPages "Params.external" nil }}
{{ with $tools }}
<section class="software-tools">
<h2 class="software-h">Werkzeuge</h2>
<ul class="tool-list">
{{ range .ByWeight }}
<li class="tool-item"{{ with .Params.color }} data-color="{{ . }}"{{ end }}>
<a class="tool-main" href="{{ .RelPermalink }}">
<span class="tool-name">{{ .LinkTitle }}</span>
{{ with .Params.summary }}<span class="tool-sum text-muted">{{ . }}</span>{{ end }}
</a>
{{ with .Params.external }}<a class="tool-ext" href="{{ . }}" rel="noopener" aria-label="extern öffnen"></a>{{ end }}
</li>
{{ end }}
</ul>
</section>
{{ end }}
<section class="software-texts">
<h2 class="software-h">Texte &amp; Anleitungen</h2>
<div class="time-list" data-section="software">
<ul>
{{ range $texts.ByDate.Reverse }}
<li class="list-item">
<div class="list-title-row">
<div class="list-title">
<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
{{ with .Params.summary }}<div class="list-summary text-muted">{{ . }}</div>{{ end }}
</div>
<div class="list-meta">{{ partial "date.html" .Date }}</div>
</div>
</li>
{{ end }}
</ul>
</div>
</section>
{{ else }} {{ else }}
{{/* Library subsection: chronologisch */}} {{/* Library subsection: chronologisch */}}
{{ $section := path.Base .RelPermalink }} {{ $section := path.Base .RelPermalink }}