site: aktueller Redesign-Stand (CSS, Layouts, Logo, Content-Feinschliff)

custom.css überarbeitet, hugo.yaml + Layouts angepasst, Logo (static/logo/)
und static/index.html ergänzt, Content-Korrekturen in library/.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 11:26:58 +02:00
parent 8662970fe5
commit e7d820b83c
15 changed files with 631 additions and 389 deletions
+218 -206
View File
@@ -17,9 +17,9 @@
--font-family-display: 'Space Grotesk', 'Inter', system-ui, sans-serif;
--font-family-mono-shibui: var(--font-family-mono);
--font-size-base: 1.0625rem;
--font-size-base: 1.1875rem; /* +2pt vs. 1.0625 — better body legibility */
--font-size-small: 0.875rem;
--font-size-code: 0.92rem;
--font-size-code: 0.95rem;
--spacing-base: 1.7em;
--spacing-xs: calc(var(--spacing-base) * 0.25);
@@ -46,7 +46,7 @@
--accent-soft: #d97a5a;
/* Republik-aligned tokens */
--color-dark-panel: #191919; /* masthead/footer/hero (Republik #191919) */
--color-dark-panel: #191919; /* masthead/footer/hero */
--color-dark-panel-text: #f0f0f0;
--color-dark-panel-muted: #a9a9a9;
@@ -150,19 +150,28 @@ a:hover {
/* override: stack wordmark above nav, both within content column */
}
/* Logo as background image (paths-only SVG, no font dependency) */
.wordmark-link {
border: none;
margin: 0;
padding: 0;
display: inline-block;
display: block;
justify-self: center;
/* Republik-style: serif wordmark, all caps, white on black */
font-family: var(--font-family-serif);
font-weight: 700;
font-size: clamp(1.5rem, 3vw, 2rem);
letter-spacing: 0.02em;
width: clamp(140px, 18vw, 200px);
height: clamp(22px, 2.8vw, 32px);
background-image: url("/logo/logo.svg");
background-repeat: no-repeat;
background-position: center;
background-size: contain;
color: transparent;
font-size: 0;
line-height: 1;
color: #fff;
}
.wordmark-sr {
position: absolute;
width: 1px; height: 1px;
overflow: hidden;
clip: rect(0 0 0 0);
}
.wordmark-link:hover,
.wordmark-link:focus { color: #fff; border: none; opacity: 0.85; }
@@ -285,7 +294,6 @@ a:hover {
color: inherit;
text-decoration: none;
}
.journal-entry-link:hover .journal-title { color: var(--section-color, var(--accent)); }
.journal-entry-body {
display: grid;
@@ -312,11 +320,12 @@ a:hover {
line-height: 1;
}
/* Byline: single smooth serif line, "Von Author, DD.MM.YYYY" — Republik-style */
/* Byline: single smooth sans line, "Von Author, DD.MM.YYYY" — Republik-style */
.journal-byline {
font-family: var(--font-family-serif);
font-size: 1rem;
font-style: italic;
font-family: var(--font-family-sans);
font-size: 0.95rem;
font-style: normal;
font-weight: 400;
line-height: 1.4;
color: var(--color-text-muted);
margin: 0;
@@ -324,13 +333,10 @@ a:hover {
}
.journal-byline .journal-author {
color: var(--color-text-primary);
font-style: normal;
font-weight: 500;
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
text-decoration: none;
}
.journal-byline .journal-date { font-variant-numeric: tabular-nums; font-style: normal; }
.journal-byline .journal-date { font-variant-numeric: tabular-nums; }
/* Legacy .journal-meta retained for backwards-compat if any markup references it */
.journal-meta {
@@ -360,7 +366,7 @@ a:hover {
font-size: 0.9rem;
letter-spacing: 0.12em;
}
.journal-author::before { content: "Von "; color: var(--color-text-muted); font-weight: 400; font-style: italic; }
.journal-author::before { content: "Von "; color: var(--color-text-muted); font-weight: 400; }
.journal-entry--hero .journal-author::before { color: var(--color-dark-panel-muted); }
.journal-title {
@@ -391,35 +397,96 @@ a:hover {
[data-color="amagumo"] { --section-color: var(--palette-amagumo); }
[data-color="yuki"] { --section-color: var(--palette-yuki); }
/* Hero treatment — first entry as a coloured Republik-style block.
Full-bleed dark panel, white serif title, light meta on top. */
/* Hero entry — Republik pattern.
Without cover_image: warm terracotta panel, centered text on it.
With cover_image: image fills the hero as background, text sits
at the bottom on a dark gradient that fades into the terracotta. */
.journal-entry--hero {
/* ------------------------------------------------------------------------
Journal entries — three Republik-style layouts (set in front matter
via `layout: image|icon|text`). Every entry is a full-bleed coloured
or image panel; per-section/per-post colour drives the bg.
- image: cover image fills panel; text on dark gradient overlay; white type
- icon: coloured bg; small centred image above text; dark type
- text: coloured bg; no image; dark type
------------------------------------------------------------------------ */
/* Base panel — break out of the boxed content column */
.journal-entry--layout-image,
.journal-entry--layout-icon,
.journal-entry--layout-text {
list-style: none;
border: none;
background: #3a1a0d;
color: var(--color-dark-panel-text);
margin: 0 calc(50% - 50vw);
padding: 0;
margin: 0 calc(50% - 50vw) var(--spacing-lg);
border-top: 10px solid var(--section-color, var(--accent));
position: relative;
overflow: hidden;
}
.journal-entry--hero:last-child { border-bottom: none; }
.journal-entry--hero .journal-entry-link {
.journal-entry--layout-image .journal-entry-link,
.journal-entry--layout-icon .journal-entry-link,
.journal-entry--layout-text .journal-entry-link {
display: block;
width: 100%;
color: inherit;
text-decoration: none;
border: none;
}
/* Centred body, generous padding */
.journal-entry--layout-image .journal-entry-body,
.journal-entry--layout-icon .journal-entry-body,
.journal-entry--layout-text .journal-entry-body {
max-width: 60ch;
margin: 0 auto;
padding: 3.5rem 1.75rem 3rem;
display: grid;
justify-items: center;
row-gap: 1.1rem;
text-align: center;
}
.journal-entry--layout-image .journal-entry-body > *,
.journal-entry--layout-icon .journal-entry-body > *,
.journal-entry--layout-text .journal-entry-body > * {
margin: 0;
max-width: 60ch;
}
/* Title sizes per layout — image (hero) is bigger, icon/text more modest */
.journal-entry--layout-image .journal-title {
font-size: clamp(2rem, 3.8vw, 2.8rem);
line-height: 1.08;
letter-spacing: -0.026em;
font-weight: 800;
}
.journal-entry--layout-icon .journal-title,
.journal-entry--layout-text .journal-title {
font-size: clamp(1.7rem, 3vw, 2.2rem);
line-height: 1.1;
letter-spacing: -0.022em;
font-weight: 800;
}
.journal-entry--layout-image .journal-summary,
.journal-entry--layout-icon .journal-summary,
.journal-entry--layout-text .journal-summary {
font-size: 1.15rem;
line-height: 1.4;
max-width: 42ch;
}
.journal-entry--layout-image .journal-byline,
.journal-entry--layout-icon .journal-byline,
.journal-entry--layout-text .journal-byline {
font-size: 0.95rem;
}
/* ---- Layout: IMAGE (full-bleed photo as background, no overlay) ---- */
.journal-entry--layout-image {
background: #1a1a1a;
color: #fff;
}
.journal-entry--layout-image .journal-entry-link {
display: flex;
flex-direction: column;
justify-content: flex-end;
position: relative;
overflow: hidden;
color: inherit;
min-height: auto;
min-height: 70vh;
}
/* When a hero image is present, give the link a viewport-anchored height */
.journal-entry--hero:has(.journal-hero-image) .journal-entry-link {
min-height: 72vh;
}
.journal-hero-image {
.journal-bg-image {
position: absolute;
inset: 0;
width: 100%;
@@ -429,155 +496,109 @@ a:hover {
margin: 0;
filter: none;
}
.journal-hero-image:hover { filter: none; }
.journal-entry--hero .journal-entry-body {
.journal-bg-image:hover { filter: none; }
.journal-entry--layout-image .journal-entry-body {
position: relative;
z-index: 2;
display: grid;
justify-items: center;
row-gap: 1.1rem;
padding: 2.6rem 1.75rem 3rem;
text-align: center;
background: #3a1a0d;
}
/* When a hero image is present, body sits at the bottom over a gradient
so text reads cleanly over the photo while the photo stays visible above. */
.journal-entry--hero:has(.journal-hero-image) .journal-entry-body {
padding-top: 7rem;
background: linear-gradient(180deg,
rgba(58,26,13,0) 0%,
rgba(58,26,13,0.55) 25%,
rgba(58,26,13,0.92) 65%,
#3a1a0d 100%);
}
.journal-entry--hero .journal-entry-body > * {
max-width: 60ch;
margin: 0;
padding-top: 3rem;
background: transparent;
color: #fff;
}
.journal-entry--hero .journal-summary { max-width: 38ch; }
/* Solid white text — no shadow halo. Legibility comes from the slight
darkening of the image at the bottom (where the body sits). */
.journal-entry--layout-image .journal-title,
.journal-entry--layout-image .journal-rubric,
.journal-entry--layout-image .journal-summary,
.journal-entry--layout-image .journal-byline {
color: #fff;
text-shadow: none;
}
.journal-entry--layout-image .journal-section {
background: rgba(0, 0, 0, 0.45);
color: #fff;
backdrop-filter: blur(2px);
-webkit-backdrop-filter: blur(2px);
}
.journal-entry--layout-image .journal-byline,
.journal-entry--layout-image .journal-byline .journal-author,
.journal-entry--layout-image .journal-byline .journal-date,
.journal-entry--layout-image .journal-byline .journal-author::before { color: #fff; }
.journal-entry--layout-image .journal-byline .journal-author { text-decoration: none; }
/* ------------------------------------------------------------------------
Non-hero card with cover image — two presentation modes:
1) default (wide): Republik-style — image as full-card wide banner above body.
2) icon mode: small square/portrait thumbnail next to the body text,
with the card background filled in --section-color (when set).
Trigger by adding `image_mode: icon` in the front matter
(which adds `data-image="icon"` to the <li>).
------------------------------------------------------------------------ */
/* Default wide banner image (no data-image) */
.journal-entry:not(.journal-entry--hero) .journal-card-image {
/* ---- Layout: ICON (coloured bg + small centred image, image is NOT tinted) ---- */
.journal-entry--layout-icon {
background: var(--section-color, var(--accent));
color: var(--color-text-primary);
}
.journal-icon-image {
display: block;
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
margin: 0 0 1rem;
filter: grayscale(40%);
transition: filter 0.4s ease;
}
.journal-entry-link:hover .journal-card-image { filter: grayscale(0%); }
/* Icon mode — colored card with thumbnail to the right */
.journal-entry[data-image="icon"]:not(.journal-entry--hero) {
border: none;
background: color-mix(in oklab, var(--section-color, var(--accent)) 12%, transparent);
padding: 1.2rem 1.4rem;
border-radius: 4px;
border-left: 4px solid var(--section-color, var(--accent));
}
.journal-entry[data-image="icon"]:not(.journal-entry--hero) + .journal-entry { border-top: none; }
.journal-entry[data-image="icon"]:not(.journal-entry--hero) .journal-entry-link {
display: grid;
grid-template-columns: 1fr auto;
column-gap: 1.4rem;
align-items: start;
}
.journal-entry[data-image="icon"]:not(.journal-entry--hero) .journal-entry-body {
grid-column: 1;
}
.journal-entry[data-image="icon"]:not(.journal-entry--hero) .journal-card-image {
grid-column: 2;
grid-row: 1;
width: 96px;
height: 96px;
aspect-ratio: 1 / 1;
object-fit: cover;
margin: 0;
border-radius: 4px;
max-width: 240px;
max-height: 240px;
width: auto;
height: auto;
margin: 0 auto 1rem;
filter: none;
}
@media (max-width: 540px) {
.journal-entry[data-image="icon"]:not(.journal-entry--hero) .journal-card-image {
width: 64px;
height: 64px;
}
}
.journal-entry--hero .journal-section {
/* on the dark hero bg: brighter tint, light text */
background: color-mix(in oklab, var(--section-color, var(--accent-soft)) 45%, transparent);
color: var(--color-dark-panel-text);
}
.journal-entry--hero .journal-byline { color: var(--color-dark-panel-muted); }
.journal-entry--hero .journal-byline .journal-author { color: var(--color-dark-panel-text); }
.journal-entry--hero .journal-byline .journal-author::before { color: var(--color-dark-panel-muted); }
.journal-entry--hero .journal-title {
font-size: clamp(2.1rem, 4.2vw, 3rem);
line-height: 1.02;
letter-spacing: -0.028em;
font-weight: 800;
color: var(--color-dark-panel-text);
}
.journal-entry--hero .journal-summary {
font-size: 1.35rem;
line-height: 1.35;
color: var(--color-dark-panel-text);
max-width: 38ch;
}
.journal-entry--hero .journal-byline {
font-size: 1.05rem;
color: var(--color-dark-panel-muted);
}
.journal-entry--hero .journal-byline .journal-author {
color: var(--color-dark-panel-text);
}
.journal-entry--hero .journal-tags { color: var(--color-dark-panel-muted); }
.journal-entry--hero .journal-entry-link:hover .journal-title { color: var(--accent-soft); }
.journal-icon-image:hover { filter: none; }
.journal-summary {
font-family: var(--font-family-serif);
font-size: var(--font-size-base);
line-height: 1.45;
/* ---- Layout: TEXT (coloured bg only) ---- */
.journal-entry--layout-text {
background: var(--section-color, var(--accent));
color: var(--color-text-primary);
max-width: 60ch;
}
.journal-tags { /* now extends .tag-pills — base styles come from there */ }
/* Section pill on coloured panels — darker overlay on the colour bg */
.journal-entry--layout-icon .journal-section,
.journal-entry--layout-text .journal-section {
background: color-mix(in oklab, var(--color-text-primary) 10%, transparent);
color: var(--color-text-primary);
}
/* Hero tags — sit inside the dark hero block, below the link, centered */
.journal-entry--hero > .tag-pills {
/* All text on coloured panels is solid text-primary — including byline */
.journal-entry--layout-icon .journal-title,
.journal-entry--layout-text .journal-title,
.journal-entry--layout-icon .journal-summary,
.journal-entry--layout-text .journal-summary,
.journal-entry--layout-icon .journal-byline,
.journal-entry--layout-text .journal-byline,
.journal-entry--layout-icon .journal-byline .journal-author,
.journal-entry--layout-text .journal-byline .journal-author,
.journal-entry--layout-icon .journal-byline .journal-date,
.journal-entry--layout-text .journal-byline .journal-date,
.journal-entry--layout-icon .journal-byline .journal-author::before,
.journal-entry--layout-text .journal-byline .journal-author::before {
color: var(--color-text-primary);
}
/* Tags sit centred inside the coloured panel, below the link */
.journal-entry--layout-image > .tag-pills,
.journal-entry--layout-icon > .tag-pills,
.journal-entry--layout-text > .tag-pills {
margin: 0 auto;
padding: 0 1.75rem 2.2rem;
padding: 0 1.75rem 2.6rem;
max-width: var(--container-width);
text-align: center;
}
.journal-entry--hero > .tag-pills a {
.journal-entry--layout-image > .tag-pills a {
background: color-mix(in oklab, var(--section-color, var(--accent-soft)) 30%, transparent);
color: var(--color-dark-panel-text);
}
.journal-entry--hero > .tag-pills a:hover {
.journal-entry--layout-image > .tag-pills a:hover {
background: color-mix(in oklab, var(--section-color, var(--accent-soft)) 50%, transparent);
}
.journal-entry--layout-icon > .tag-pills a,
.journal-entry--layout-text > .tag-pills a {
background: color-mix(in oklab, var(--color-text-primary) 12%, transparent);
color: var(--color-text-primary);
}
.journal-entry--layout-icon > .tag-pills a:hover,
.journal-entry--layout-text > .tag-pills a:hover {
background: color-mix(in oklab, var(--color-text-primary) 22%, transparent);
}
/* Non-hero tags — sit just below the body of the card */
.journal-entry:not(.journal-entry--hero) > .tag-pills {
margin-top: 0.6rem;
}
/* In icon-mode card: tags align with the body (left of the thumbnail) */
.journal-entry[data-image="icon"]:not(.journal-entry--hero) > .tag-pills {
margin-top: 0.6rem;
padding-left: 0;
}
.journal-tags { /* extends .tag-pills */ }
.more {
margin-top: var(--spacing-md);
@@ -787,57 +808,49 @@ a:hover {
.single-summary {
font-family: var(--font-family-serif);
font-style: normal;
font-size: 1.25rem;
font-size: 1.4rem;
line-height: 1.4;
color: var(--color-text-primary);
margin: 0 0 var(--spacing-sm);
margin: 0 0 var(--spacing-md); /* breathing room before byline */
max-width: 55ch;
}
.single-byline {
font-family: var(--font-family-serif);
font-style: italic;
font-size: 1rem;
font-family: var(--font-family-sans);
font-size: 0.95rem;
line-height: 1.4;
color: var(--color-text-muted);
margin: 0 0 0.6rem;
}
/* Reading time + last-modified — sits just below the byline */
.single-meta {
font-family: var(--font-family-sans);
font-size: 0.9rem;
line-height: 1.4;
color: var(--color-text-muted);
margin: 0;
display: flex;
flex-wrap: wrap;
gap: 0.4rem;
align-items: baseline;
}
.single-meta .reading-time,
.single-meta .lastmod { font-variant-numeric: tabular-nums; }
.single-byline .byline-author {
color: var(--color-text-primary);
font-style: normal;
font-weight: 500;
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
text-decoration: none;
}
.single-byline .byline-author::before {
content: "Von ";
color: var(--color-text-muted);
font-style: italic;
font-weight: 400;
text-decoration: none;
}
.single-byline .byline-date { font-style: normal; font-variant-numeric: tabular-nums; }
.single-byline {
font-family: var(--font-family-mono);
font-size: 0.85rem;
color: var(--color-text-muted);
margin: 0 0 var(--spacing-xs);
display: flex;
flex-wrap: wrap;
gap: 0.6rem;
align-items: baseline;
}
.single-byline .byline-date { font-variant-numeric: tabular-nums; }
.byline-author { color: var(--color-text-primary); font-weight: 500; }
.byline-date { font-variant-numeric: tabular-nums; }
.single-summary {
font-family: var(--font-family-serif);
font-style: italic;
font-size: 1.02rem;
line-height: 1.45;
margin: var(--spacing-xs) 0 0;
max-width: 55ch;
}
.single-content h2 {
font-family: var(--font-family-serif);
font-size: 1.45rem;
@@ -928,8 +941,8 @@ a:hover {
}
.time {
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
font-family: var(--font-family-sans);
font-size: 0.9rem;
color: var(--color-text-muted);
margin-top: var(--spacing-md);
padding-top: var(--spacing-sm);
@@ -938,8 +951,8 @@ a:hover {
.back-nav-wrap {
margin-top: var(--spacing-md);
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
font-family: var(--font-family-sans);
font-size: 0.9rem;
}
.back-link { border: none; color: var(--color-text-muted); }
.back-link:hover { color: var(--accent); }
@@ -951,11 +964,10 @@ a:hover {
margin-top: var(--spacing-lg);
padding-top: var(--spacing-sm);
border-top: 1px solid var(--color-border);
font-family: var(--font-family-mono);
font-size: var(--font-size-small);
font-family: var(--font-family-sans);
font-size: 0.85rem;
color: var(--color-text-muted);
text-transform: uppercase;
letter-spacing: 0.03em;
letter-spacing: 0.01em;
}
.page-foot-nav ol {
list-style: none;