fix(calendar): stack layout, cap block at 1000px, restore events scroll
Deploy / verify (push) Successful in 53s
Deploy / deploy (push) Successful in 53s

The 2-col grid forced the events list to share the calendar's square
height which cropped event details. Stack calendar over events instead,
cap the whole block at 1000px (centered), constrain the calendar grid to
480px so day cells don't grow oversized, and re-add a 600px max-height
with internal scroll on the events list so the page stays compact and
sticky day-group headers regain their scroll context.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Peter Meier
2026-05-08 08:16:57 +02:00
parent ce4c4570d6
commit bf6ca475db
+12 -9
View File
@@ -397,7 +397,7 @@
</script>
<div
class="{layoutClasses} w-full min-w-0 calendar-block border border-stein-200 overflow-hidden"
class="{layoutClasses} w-full max-w-[1000px] mx-auto min-w-0 calendar-block border border-stein-200 overflow-hidden"
data-block="Calendar" data-block-type="calendar"
data-block-slug={block._slug}
>
@@ -597,9 +597,10 @@
</div>
{/if}
<div class="calendar-grid-wrapper grid w-full grid-cols-1 md:grid-cols-2 gap-0">
<div class="calendar-grid-wrapper flex w-full flex-col">
<!-- Links: Kalender -->
<div class="calendar-column min-h-full p-4 flex flex-col bg-himmel-800 text-himmel-100 shadow-sm">
<div class="calendar-column p-4 flex flex-col bg-himmel-800 text-himmel-100 shadow-sm">
<div class="w-full max-w-[480px] mx-auto">
<div class="flex items-center justify-between gap-2 mb-4">
<button
type="button"
@@ -675,15 +676,16 @@
{/if}
{/each}
</div>
</div>
</div>
<!-- Rechts: alle zukünftigen Termine als Accordion. Datum + Headline
im summary, Beschreibung + Aktionen im body. Kalender-Klick
filtert auf einen Tag; ohne Filter zeigt Liste alles ab heute,
gruppiert nach Tag mit großzügigem header. -->
<div class="calendar-events-wrapper min-h-0 flex flex-col" bind:this={panelEl}>
<div class="calendar-events-wrapper flex flex-col" bind:this={panelEl}>
<div
class="calendar-events-panel border-t md:border-t-0 md:border-l border-stein-200 bg-stein-0 flex flex-col overflow-hidden flex-1 min-h-0"
class="calendar-events-panel border-t border-stein-200 bg-stein-0 flex flex-col"
>
{#if items.length === 0}
<p class="text-sm text-stein-500 p-4">{t(T.calendar_no_events)}</p>
@@ -705,7 +707,7 @@
{t(T.calendar_clear_filter)}
</button>
</div>
<ul class="m-0! p-0! list-none flex-1 min-h-0 overflow-auto">
<ul class="m-0! p-0! list-none max-h-[600px] overflow-auto">
{#each selectedDayEvents as item}
{@render eventAccordion(item, true, false)}
{/each}
@@ -719,7 +721,7 @@
{t(T.calendar_event_count, { n: futureEvents.length })}
</span>
</div>
<ul class="m-0! p-0! list-none flex-1 min-h-0 overflow-auto">
<ul class="m-0! p-0! list-none max-h-[600px] overflow-auto">
{#each futureEventsByDay as group, gIdx}
<li class="day-group">
<div class="px-3 py-1 bg-himmel-50/60 text-[11px] uppercase tracking-wide font-medium text-stein-600 sticky top-0 z-10 backdrop-blur-sm">
@@ -757,7 +759,7 @@
<span class="font-medium uppercase tracking-wide">{t(T.calendar_past_events)}</span>
<span class="text-stein-500 tabular-nums">· {pastEvents.length}</span>
</summary>
<ul class="m-0! p-0! list-none flex-1 min-h-0 overflow-auto opacity-80">
<ul class="m-0! p-0! list-none opacity-80">
{#each pastEvents as item}
{@render eventAccordion(item, false, false)}
{/each}
@@ -843,7 +845,8 @@
.calendar-block .day-group {
break-inside: avoid;
}
.calendar-block .calendar-events-panel {
.calendar-block .calendar-events-panel,
.calendar-block .calendar-events-panel ul {
overflow: visible !important;
max-height: none !important;
}