diff --git a/packages/presentation/src/components/Card.svelte b/packages/presentation/src/components/Card.svelte
index 14a16f810d..6bbd3a0aef 100644
--- a/packages/presentation/src/components/Card.svelte
+++ b/packages/presentation/src/components/Card.svelte
@@ -63,7 +63,7 @@
         {/if}
       </span>
     </div>
-    <div class="buttons-group small-gap content-dark-color">
+    <div class="ml-4 buttons-group small-gap content-dark-color">
       <Button
         id="card-close"
         focusIndex={10002}
diff --git a/packages/theme/styles/_layouts.scss b/packages/theme/styles/_layouts.scss
index cc387b24db..b394a669ce 100644
--- a/packages/theme/styles/_layouts.scss
+++ b/packages/theme/styles/_layouts.scss
@@ -433,6 +433,7 @@ input.search {
 .gapV-4 > *:not(:last-child) { margin-bottom: 1rem; }
 .gapV-6 > *:not(:last-child) { margin-bottom: 1.5rem; }
 .gapV-8 > *:not(:last-child) { margin-bottom: 2rem; }
+.gapV-12 > *:not(:last-child) { margin-bottom: 3rem; }
 .gap-around-2 > * { margin: .25rem; }
 .gap-around-4 > * { margin: .5rem; }
 
@@ -570,6 +571,7 @@ input.search {
 .step-lr75 + .step-lr75 { margin-left: .75rem; }
 .step-tb75 + .step-tb75 { margin-top: .75rem; }
 .step-tb-6 + .step-tb-6 { margin-top: 1.5rem; }
+.step-tb-12 + .step-tb-12 { margin-top: 3rem; }
 
 .step-tb-2-accent + .step-tb-2-accent {
   position: relative;
@@ -923,13 +925,14 @@ a.no-line {
 .border-radius-left-1 { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; }
 .border-radius-right-1 { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; }
 .border-radius-top-1 { border-top-right-radius: 0.25rem; border-top-left-radius: 0.25rem; }
-.border-divider-color {border: 1px solid var(--divider-color);}
+.border-divider-color {border: 1px solid var(--theme-divider-color);}
 .border-primary-button { border-color: var(--accented-button-border); }
 
-.top-divider { border-top: 1px solid var(--divider-color); }
-.bottom-divider { border-bottom: 1px solid var(--divider-color); }
+.top-divider { border-top: 1px solid var(--theme-divider-color); }
+.bottom-divider { border-bottom: 1px solid var(--theme-divider-color); }
+.left-divider { border-left: 1px solid var(--theme-divider-color); }
+.right-divider { border-right: 1px solid var(--theme-divider-color); }
 .bottom-highlight-select { border-bottom: 1px solid var(--highlight-select); }
-.left-divider { border-left: 1px solid var(--divider-color); }
 
 
 
diff --git a/packages/theme/styles/button.scss b/packages/theme/styles/button.scss
index f7dbe1e261..a74a1823e8 100644
--- a/packages/theme/styles/button.scss
+++ b/packages/theme/styles/button.scss
@@ -196,6 +196,10 @@
   }
   &.regular, &.ghost {
     &:hover, &:active, &:focus { color: var(--theme-caption-color); }
+    &.selected {
+      color: var(--theme-button-contrast-color);
+      background-color: var(--theme-accent-color);
+    }
   }
   &.accented,
   &.brand,
diff --git a/packages/theme/styles/common.scss b/packages/theme/styles/common.scss
index 867e07e4b7..bef1bd5f41 100644
--- a/packages/theme/styles/common.scss
+++ b/packages/theme/styles/common.scss
@@ -397,6 +397,19 @@
   &.x4 { width: 1rem; }
 }
 
+.antiVSpacer {
+  flex-shrink: 0;
+  height: .25rem;
+
+  &:not(.withMargins) { margin: 0 !important; }
+
+  &.x1-5 { height: .375rem; }
+  &.x2 { height: .5rem; }
+  &.x3 { height: .75rem; }
+  &.x4 { height: 1rem; }
+  &.x7 { height: 1.75rem; }
+}
+
 .antiSection {
   display: flex;
   flex-direction: column;
diff --git a/plugins/calendar-resources/src/components/DayCalendar.svelte b/plugins/calendar-resources/src/components/DayCalendar.svelte
index 14afbcd990..92add6af54 100644
--- a/plugins/calendar-resources/src/components/DayCalendar.svelte
+++ b/plugins/calendar-resources/src/components/DayCalendar.svelte
@@ -335,15 +335,15 @@
       result.visibility = 0
     }
     result.top =
-      (showHeader ? rem(3.5) + styleAD : 0) +
+      (showHeader ? rem(3.5) : 0) +
+      styleAD +
       cellHeight * startTime.hours +
       (startTime.mins / 60) * cellHeight +
       getGridOffset(startTime.mins)
     result.bottom =
       cellHeight * (displayedHours - startHour - endTime.hours - 1) +
       ((60 - endTime.mins) / 60) * cellHeight +
-      getGridOffset(endTime.mins, true) +
-      (showHeader ? 0 : rem(3.5))
+      getGridOffset(endTime.mins, true)
     let cols = 1
     let index: number = 0
     grid[event.day].columns.forEach((col, i) =>
@@ -450,25 +450,31 @@
       : rem((heightAD + 0.125) * (adMaxRow <= maxAD ? adMaxRow : maxAD) + 0.25)
 </script>
 
-<Scroller bind:divScroll={scroller} fade={{ multipler: { top: 3.5 + styleAD / fontSize, bottom: 0 } }}>
+<Scroller
+  bind:divScroll={scroller}
+  fade={{ multipler: { top: (showHeader ? 3.5 : 0) + styleAD / fontSize, bottom: 0 } }}
+>
   <div
     bind:this={container}
     class="calendar-container"
-    style:grid={`${showHeader ? '[header] 3.5rem [all-day] ' + styleAD + 'px' : ''} repeat(${
+    style:--calendar-ad-height={styleAD + 'px'}
+    style:grid={`${showHeader ? '[header] 3.5rem ' : ''}[all-day] ${styleAD}px repeat(${
       (displayedHours - startHour) * 2
     }, [row-start] 2rem) / [time-col] 3.5rem repeat(${displayedDaysCount}, [col-start] 1fr)`}
     use:resizeObserver={(element) => checkSizes(element)}
   >
-    <div class="sticky-header head center"><span class="zone">{getTimeZone()}</span></div>
-    {#each [...Array(displayedDaysCount).keys()] as dayOfWeek}
-      {@const day = getDay(weekMonday, dayOfWeek)}
-      <div class="sticky-header head title" class:center={displayedDaysCount > 1}>
-        <span class="day" class:today={areDatesEqual(todayDate, day)}>{day.getDate()}</span>
-        <span class="weekday">{getWeekDayName(day, weekFormat)}</span>
-      </div>
-    {/each}
+    {#if showHeader}
+      <div class="sticky-header head center"><span class="zone">{getTimeZone()}</span></div>
+      {#each [...Array(displayedDaysCount).keys()] as dayOfWeek}
+        {@const day = getDay(weekMonday, dayOfWeek)}
+        <div class="sticky-header head title" class:center={displayedDaysCount > 1}>
+          <span class="day" class:today={areDatesEqual(todayDate, day)}>{day.getDate()}</span>
+          <span class="weekday">{getWeekDayName(day, weekFormat)}</span>
+        </div>
+      {/each}
+    {/if}
 
-    <div class="sticky-header allday-header text-sm content-dark-color">
+    <div class="sticky-header allday-header text-sm content-dark-color" class:top={!showHeader}>
       <Label label={calendar.string.AllDay} />
       {#if (!minimizedAD && adMaxRow > maxAD) || (minimizedAD && adMaxRow > minAD)}
         <ActionIcon
@@ -480,38 +486,38 @@
         />
       {/if}
     </div>
-    <div class="sticky-header allday-container" style:grid-column={`col-start 1 / span ${displayedDaysCount}`}>
+    <div
+      class="sticky-header allday-container"
+      class:top={!showHeader}
+      style:grid-column={`col-start 1 / span ${displayedDaysCount}`}
+    >
       {#if shownHeightAD > maxHeightAD && shownAD}
         <Scroller noFade={false}>
-          {#key styleAD}{#key calendarWidth}{#key displayedDaysCount}
-                <div style:min-height={`${shownHeightAD - cellBorder * 2}px`} />
-                {#each alldays as event, i}
-                  {@const rect = getADRect(event._id)}
-                  {@const ev = events.find((p) => p._id === event._id)}
-                  {#if ev}
-                    <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
-                    <div
-                      class="calendar-element"
-                      style:top={`${rect.top}px`}
-                      style:height={`${rect.height}px`}
-                      style:left={`${rect.left}px`}
-                      style:width={`${rect.width}px`}
-                      style:opacity={rect.visibility === 0 ? 0.4 : 1}
-                      style:--mask-image={getMask(rect.visibility)}
-                      tabindex={500 + i}
-                    >
-                      <EventElement
-                        hourHeight={cellHeight}
-                        event={ev}
-                        size={{ width: rect.width, height: rect.height }}
-                      />
-                    </div>
-                  {/if}
-                {/each}
-              {/key}{/key}{/key}
+          {#key [styleAD, calendarWidth, displayedDaysCount, showHeader]}
+            <div style:min-height={`${shownHeightAD - cellBorder * 2}px`} />
+            {#each alldays as event, i}
+              {@const rect = getADRect(event._id)}
+              {@const ev = events.find((p) => p._id === event._id)}
+              {#if ev}
+                <!-- svelte-ignore a11y-no-noninteractive-tabindex -->
+                <div
+                  class="calendar-element"
+                  style:top={`${rect.top}px`}
+                  style:height={`${rect.height}px`}
+                  style:left={`${rect.left}px`}
+                  style:width={`${rect.width}px`}
+                  style:opacity={rect.visibility === 0 ? 0.4 : 1}
+                  style:--mask-image={getMask(rect.visibility)}
+                  tabindex={500 + i}
+                >
+                  <EventElement hourHeight={cellHeight} event={ev} size={{ width: rect.width, height: rect.height }} />
+                </div>
+              {/if}
+            {/each}
+          {/key}
         </Scroller>
       {:else if shownAD}
-        {#key [styleAD, calendarWidth, displayedDaysCount]}
+        {#key [styleAD, calendarWidth, displayedDaysCount, showHeader]}
           {#each alldays as event, i}
             {@const rect = getADRect(event._id)}
             {@const ev = events.find((p) => p._id === event._id)}
@@ -533,7 +539,7 @@
           {/each}
         {/key}
       {:else}
-        {#key [styleAD, calendarWidth, displayedDaysCount]}
+        {#key [styleAD, calendarWidth, displayedDaysCount, showHeader]}
           {#each shortAlldays as event, i}
             {@const rect = getADRect(event.id, event.day, event.fixRow)}
             {@const ev = events.find((p) => p._id === event.id)}
@@ -580,7 +586,11 @@
 
     {#each [...Array(displayedHours - startHour).keys()] as hourOfDay}
       {#if hourOfDay === 0}
-        <div class="clear-cell" />
+        {#if showHeader}
+          <div class="clear-cell" />
+        {:else}
+          <div class="sticky-header head center zm"><span class="zone mini">{getTimeZone()}</span></div>
+        {/if}
       {:else if hourOfDay < displayedHours - startHour}
         <div
           class="time-cell"
@@ -621,7 +631,7 @@
       {#if hourOfDay === displayedHours - startHour - 1}<div class="clear-cell" />{/if}
     {/each}
 
-    {#key [styleAD, calendarWidth, displayedDaysCount]}
+    {#key [styleAD, calendarWidth, displayedDaysCount, showHeader]}
       {#each newEvents.filter((ev) => !ev.allDay) as event, i}
         {@const rect = getRect(event)}
         {@const ev = events.find((p) => p._id === event._id)}
@@ -684,14 +694,18 @@
     background-color: var(--theme-comp-header-color);
     z-index: 10;
 
-    &.head {
-      top: 0;
-    }
     &:not(.head) {
       top: 3.5rem;
       border-top: 1px solid var(--theme-divider-color);
       border-bottom: 1px solid var(--theme-divider-color);
     }
+    &.head,
+    &.top {
+      top: 0;
+    }
+    &.zm {
+      top: var(--calendar-ad-height, 2.25rem);
+    }
     &.center {
       justify-content: center;
     }
@@ -748,6 +762,10 @@
       color: var(--theme-dark-color);
       background-color: rgba(64, 109, 223, 0.1);
       border-radius: 0.25rem;
+
+      &.mini {
+        padding: 0.125rem;
+      }
     }
   }
   .calendar-container {