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
+17 -13
View File
@@ -304,13 +304,15 @@ h4 {
}
}
/* Content-Links: Himmel (Design System Links) */
main a:not(.no-underline):not([class*="btn"]) {
/* Content-Links: Himmel (Design System Links).
* `:where(:not(.not-prose *))` schließt jeden Subtree mit `.not-prose`
* aus — Card-Links etc. behalten ihre eigene Farbe + kein Underline. */
main a:not(.no-underline):not([class*="btn"]):where(:not(.not-prose *)) {
color: var(--color-link);
text-decoration: underline;
}
main a:not(.no-underline):not([class*="btn"]):hover {
main a:not(.no-underline):not([class*="btn"]):where(:not(.not-prose *)):hover {
color: var(--color-himmel-600);
}
@@ -327,21 +329,21 @@ main strong {
font-weight: 600;
}
main ul:not(.not-prose) {
main ul:not(.not-prose):where(:not(.not-prose *)) {
margin-left: 1em;
margin-bottom: 1em;
}
main ul:not(.not-prose) li {
main ul:not(.not-prose):where(:not(.not-prose *)) li {
list-style: disc;
}
main ol:not(.not-prose) {
main ol:not(.not-prose):where(:not(.not-prose *)) {
margin-left: 1.1em;
margin-bottom: 1em;
}
main ol:not(.not-prose) li {
main ol:not(.not-prose):where(:not(.not-prose *)) li {
list-style-type: decimal;
}
@@ -473,15 +475,17 @@ article [data-block-type="markdown"] .markdown > p:first-child {
max-width: 50%;
}
/* Content-Blöcke */
.content p {
/* Content-Blöcke. `:where(:not(.not-prose *))` lässt jeden Subtree mit
* .not-prose komplett ausserhalb dieser Margin-Defaults — Components, die
* eigene Abstände setzen, müssen nur `not-prose` auf den Root packen. */
.content p:where(:not(.not-prose *)) {
@apply mb-4;
}
.content h1,
.content h2,
.content h3,
.content h4 {
.content h1:where(:not(.not-prose *)),
.content h2:where(:not(.not-prose *)),
.content h3:where(:not(.not-prose *)),
.content h4:where(:not(.not-prose *)) {
@apply mb-2;
}