feat(calendar-compact): polish + global not-prose opt-out support
Deploy / verify (push) Successful in 1m4s
Deploy / deploy (push) Successful in 1m9s

CalendarCompact:
- denser layout (smaller padding/font/badge), header icon size-8
- icon stein-900 (black), subtle wald gradient background
- rounded-sm to match design tokens (was rounded-lg)
- list items link to linkTo + "#event-<slug>" anchor; <svelte:element>
  falls back to div when no linkTo is set
- not-prose on root so global content margins/list/link rules don't
  apply to the card subtree

blog-utils.resolveCalendarBlocks:
- when items array is empty, fall back to the full calendar_item pool
  (both default and compact variant get this) — saves editors from
  re-listing items on every page.

app.css: add `:where(:not(.not-prose *))` to .content p/h1-h4,
main a (link colour + underline), main ul/ol so subtrees marked
not-prose stop inheriting the global prose-like defaults.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-05-22 09:16:21 +02:00
parent b7bcdd76ee
commit d781b3140e
4 changed files with 60 additions and 38 deletions
+7
View File
@@ -593,6 +593,13 @@ export async function resolveCalendarBlocks(
resolve: "items",
});
const raw = calendar?.items ?? rawItems;
// Leere items-Liste → alle calendar_items aus der Collection (Pool).
// Greift sowohl für default-Variante als auch compact-Anteaser.
if (raw.length === 0) {
const pool = (await getCalendarItems({ locale: "de" })) as unknown as CalendarItemData[];
(item as { items?: CalendarItemData[] }).items = pool;
continue;
}
const settled = await Promise.all(
raw.map(async (x): Promise<CalendarItemData | null> => {
if (