summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/themes/common/calendar-views.css
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/themes/common/calendar-views.css')
-rw-r--r--comm/calendar/base/themes/common/calendar-views.css1232
1 files changed, 1232 insertions, 0 deletions
diff --git a/comm/calendar/base/themes/common/calendar-views.css b/comm/calendar/base/themes/common/calendar-views.css
new file mode 100644
index 0000000000..572207bffb
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-views.css
@@ -0,0 +1,1232 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+@namespace html url("http://www.w3.org/1999/xhtml");
+
+:root {
+ --viewColor: var(--layout-color-1);
+ --viewBackground: var(--layout-background-0);
+ --viewBorderColor: var(--layout-border-0);
+ --viewCalendarHeaderBackground: rgba(0, 0, 0, 0.03);
+ --viewHighlightBorderColor: var(--color-blue-50);
+ --viewTodayColor: inherit;
+ --viewTodayBackground: var(--layout-background-1);
+ --viewTodayLabelColor: var(--color-white);
+ --viewTodayLabelBackground: var(--color-blue-50);
+ --viewTodayOffBackground: color-mix(in srgb, var(--viewTodayBackground) 95%, black);
+ --viewTodayDayLabelBackground: var(--color-blue-10);
+ --viewTodayWeekendBackground: color-mix(in srgb, var(--color-blue-10) 20%, var(--viewWeekendBackground));
+ --viewWeekendBackground: var(--color-ink-10);
+ --viewHeaderSelectedBackground: color-mix(in srgb, var(--color-blue-10) 20%, var(--viewBackground));
+ --viewDayBoxSelectedBackground: color-mix(in srgb, var(--color-blue-10) 20%, var(--viewBackground));
+ --viewDayBoxOffSelectedBackground: color-mix(in srgb, var(--color-blue-20) 20%, var(--viewTodayOffBackground));
+ --viewDayBoxOtherSelectedBackground: color-mix(in srgb, var(--color-blue-10) 20%, var(--viewMonthOtherBackground));
+ --viewMonthOtherBackground: var(--layout-background-2);
+ --viewMonthDayBoxSelectedColor: var(--layout-color-1);
+ --viewMonthDayBoxLabelColor: var(--layout-color-1);
+ --viewMonthWeekLabelBackground: var(--color-ink-20);
+ --viewMonthDayOtherBackground: color-mix(in srgb, var(--layout-background-2) 50%, var(--viewWeekendBackground));
+ --viewMonthDayOffLabelBackground: color-mix(in srgb, var(--viewWeekendBackground) 95%, black);
+ --viewOffTimeBackground: color-mix(in srgb, var(--viewBackground) 95%, black);
+ --viewTimeBoxColor: var(--layout-color-2);
+ --viewDayLabelSelectedColor: currentColor;
+ --viewDayLabelSelectedBackground: var(--color-blue-50);
+ --viewDragboxColor: currentColor;
+ --viewDragboxBackground: var(--color-blue-50);
+ --viewDropshadowBackground: var(--color-blue-50);
+ --calendar-nav-control-bg-color: var(--color-white);
+ --calendar-nav-control-bg-color-hover: rgba(0, 0, 0, 0.1);
+ --calendar-view-nav-btn-padding: 4px;
+ --calendar-nav-control-padding: 6px;
+ --calendar-view-toggle-label-padding: 3px 15px;
+ --calendar-view-toolbar-gap: 9px;
+ --button-border-radius: 3px;
+ --calendar-view-toggle-background: var(--layout-background-3);
+ --calendar-view-toggle-hover-background: var(--layout-background-2);
+ --calendar-view-toggle-active-background: var(--layout-background-4);
+ --calendar-view-toggle-selected-background: var(--layout-background-1);
+ --calendar-view-toggle-selected-hover-background: var(--layout-background-0);
+ --calendar-view-toggle-border-color: transparent;
+ --calendar-view-toggle-shadow-color: color-mix(in srgb, var(--color-black) 30%, transparent);
+ --calendar-month-day-box-padding: 2px;
+ --today-week-pill-padding-block: 3px;
+ --today-week-pill-padding-inline: 6px;
+ --calendar-nav-gap: 3px;
+}
+
+:root[uidensity="compact"] {
+ --calendar-view-toggle-margin: 3px;
+ --calendar-view-toggle-label-padding: 2px 12px;
+ --calendar-view-toolbar-gap: 6px;
+ --calendar-month-day-box-padding: 1px;
+ --today-week-pill-padding-block: 1px;
+ --today-week-pill-padding-inline: 3px;
+ --calendar-nav-gap: 3px;
+}
+
+:root[uidensity="touch"] {
+ --calendar-view-toggle-margin: 6px 3px;
+ --calendar-view-toggle-label-padding: 6px 15px;
+ --calendar-view-toolbar-gap: 12px;
+ --calendar-month-day-box-padding: 3px;
+ --today-week-pill-padding-block: 3px;
+ --today-week-pill-padding-inline: 9px;
+ --calendar-nav-gap: 6px;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --viewTodayDayLabelBackground: color-mix(in srgb, var(--color-blue-90) 30%, var(--viewBackground));
+ --viewHeaderSelectedBackground: color-mix(in srgb, var(--color-blue-90) 20%, var(--viewBackground));
+ --viewDayBoxSelectedBackground: color-mix(in srgb, var(--color-blue-90) 20%, var(--viewBackground));
+ --viewDayBoxOffSelectedBackground: color-mix(in srgb, var(--color-blue-80) 20%, var(--viewTodayOffBackground));
+ --viewDayBoxOtherSelectedBackground: color-mix(in srgb, var(--color-blue-90) 20%, var(--viewMonthOtherBackground));
+ --viewMonthDayOffLabelBackground: color-mix(in srgb, var(--viewWeekendBackground) 95%, var(--color-ink-30));
+ --viewOffTimeBackground: color-mix(in srgb, var(--viewBackground) 95%, var(--color-ink-30));
+ --viewWeekendBackground: color-mix(in srgb, var(--viewBackground) 80%, var(--color-ink-40));
+ --viewMonthOtherBackground: var(--layout-background-1);
+ --viewMonthWeekLabelBackground: var(--color-ink-60);
+ --viewMonthDayOtherBackground: color-mix(in srgb, var(--layout-background-1) 50%, var(--viewWeekendBackground));
+ --calendar-nav-control-bg-color: var(--color-black);
+ --calendar-nav-control-bg-color-hover: rgba(0, 0, 0, 0.3);
+ --calendar-view-toggle-hover-background: var(--layout-background-4);
+ --calendar-view-toggle-active-background: var(--layout-background-2);
+ --calendar-view-toggle-shadow-color: color-mix(in srgb, var(--color-black) 50%, transparent);
+ }
+}
+
+@media (prefers-contrast) {
+ :root:not(:-moz-lwtheme) {
+ --calendar-view-toggle-background: transparent;
+ --calendar-view-toggle-hover-background: SelectedItem;
+ --calendar-view-toggle-active-background: SelectedItem;
+ --calendar-view-toggle-selected-background: SelectedItem;
+ --calendar-view-toggle-selected-hover-background: SelectedItem;
+ --calendar-view-toggle-border-color: WindowText;
+ --calendar-view-toggle-shadow-color: transparent;
+ --viewColor: WindowText;
+ --viewBackground: Field;
+ --viewBorderColor: ThreeDShadow;
+ --viewHighlightBorderColor: var(--selected-item-color);
+ --viewTodayColor: inherit;
+ --viewTodayBackground: Field;
+ --viewTodayLabelColor: var(--selected-item-text-color);
+ --viewTodayLabelBackground: var(--selected-item-color);
+ --viewTodayOffBackground: ButtonFace;
+ --viewTodayDayLabelBackground: ButtonFace;
+ --viewTodayWeekendBackground: ButtonFace;
+ --viewWeekendBackground: hsla(0, 0%, 60%, 0.1);
+ --viewHeaderSelectedBackground: ButtonFace;
+ --viewDayBoxSelectedBackground: Field;
+ --viewDayBoxOffSelectedBackground: hsla(0, 0%, 60%, 0.05);
+ --viewDayBoxOtherSelectedBackground: hsla(0, 0%, 60%, 0.05);
+ --viewMonthOtherBackground: ButtonFace;
+ --viewMonthWeekLabelBackground: ButtonFace;
+ --viewMonthDayBoxSelectedColor: var(--selected-item-color);
+ --viewMonthDayBoxLabelColor: WindowText;
+ --viewMonthDayOtherBackground: hsla(0, 0%, 60%, 0.1);
+ --viewMonthDayOffLabelBackground: hsla(0, 0%, 60%, 0.1);
+ --viewOffTimeBackground: hsla(0, 0%, 60%, 0.1);
+ --viewTimeBoxColor: GrayText;
+ --viewDayLabelSelectedColor: var(--selected-item-text-color);
+ --viewDayLabelSelectedBackground: var(--selected-item-color);
+ --viewDragboxColor: GrayText;
+ --viewDragboxBackground: var(--selected-item-color);
+ --viewDropshadowBackground: var(--selected-item-color) !important;
+ }
+
+ button.calview-toggle-item:not(:-moz-lwtheme):hover,
+ button.calview-toggle-item[role="tab"][aria-selected="true"]:not(:-moz-lwtheme) {
+ --button-border-color: SelectedItem;
+ --calendar-view-toggle-border-color: SelectedItem;
+ color: SelectedItemText;
+ }
+}
+
+/* Calendar Items */
+
+.calendar-item-container {
+ display: flow-root;
+ overflow: hidden;
+ min-height: 100%;
+ width: 100%;
+}
+
+.calendar-item-container > .location-desc {
+ /* Margin matches the padding of .calendar-item-flex. */
+ margin: 2px;
+}
+
+.calendar-item-flex {
+ display: flex;
+ align-items: baseline;
+ gap: 4px;
+ padding: 4px 5px;
+ overflow-x: hidden;
+}
+
+.calendar-item-flex > .alarm-icons-box {
+ display: contents;
+}
+
+.item-time-label {
+ flex: 0 0 auto;
+ font-weight: 600;
+}
+
+.calendar-item-flex img {
+ flex: 0 0 auto;
+ width: 12px;
+ height: 12px;
+}
+
+.item-type-icon {
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+.item-type-icon:not([src]) {
+ display: none;
+}
+
+.item-type-icon.rotated-to-read-direction:-moz-locale-dir(ltr) {
+ transform: rotate(-90deg);
+}
+
+.item-type-icon.rotated-to-read-direction:-moz-locale-dir(rtl) {
+ transform: rotate(90deg);
+}
+
+.event-name-input,
+.event-name-label,
+.location-desc {
+ font-weight: normal;
+ overflow-x: hidden;
+}
+
+.event-name-label,
+.location-desc {
+ text-overflow: ellipsis;
+}
+
+.event-name-label {
+ white-space: nowrap;
+}
+
+:is(calendar-day-view, calendar-week-view) .event-name-label {
+ white-space: normal;
+}
+
+.event-name-input,
+.event-name-label {
+ flex: 1 1 auto;
+}
+
+.event-name-input {
+ padding: 0;
+ margin: 0;
+ background: transparent;
+ color: inherit;
+}
+
+.location-desc {
+ opacity: 0.5;
+ white-space: pre;
+}
+
+.item-classification-icon,
+.item-recurrence-icon {
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+ pointer-events: none;
+}
+
+.item-classification-icon:not([src]),
+.item-recurrence-icon:not([src]) {
+ display: none;
+}
+
+.calendar-category-box {
+ display: block;
+ width: 4px;
+ position: absolute;
+ inset-block: 2px;
+ inset-inline-end: 2px;
+ border-radius: 2px;
+ z-index: -1;
+}
+
+/* Multiday view */
+
+:is(calendar-day-view, calendar-week-view):not([hidden]) {
+ flex: 1 auto;
+ display: grid;
+ height: 0;
+}
+
+.multiday-grid {
+ overflow: auto;
+ display: grid;
+ grid-auto-flow: column;
+ /* Columns: timebar, days, multiday-end-border.
+ * --multiday-num-days is set in javascript on the grid. */
+ grid-template-columns: min-content repeat(var(--multiday-num-days), 1fr) min-content;
+ /* Rows: heading, all-day header, event column.
+ * NOTE: We use "min-content" instead of "auto" because otherwise the grid
+ * will grow "auto" rows if it has extra vertical space, and this can effect
+ * calculating the pixelsPerMinute for the view. */
+ grid-template-rows: min-content min-content min-content;
+}
+
+.multiday-grid.multiday-grid-rotated {
+ grid-auto-flow: row;
+ grid-template-columns: min-content min-content min-content;
+ grid-template-rows: min-content repeat(var(--multiday-num-days), 1fr) min-content;
+}
+
+.multiday-header-corner {
+ position: sticky;
+ z-index: 3;
+ inset-block-start: 0;
+ inset-inline-start: 0;
+ grid-row: 1 / 3;
+ grid-column: 1 / 2;
+}
+
+.multiday-grid-rotated .multiday-header-corner {
+ grid-row: 1 / 2;
+ grid-column: 1 / 3;
+}
+
+.multiday-timebar {
+ /* NOTE: This also helps position multiday-timebar-now-indicator. */
+ position: sticky;
+ z-index: 2;
+}
+
+.multiday-grid:not(.multiday-grid-rotated) .multiday-timebar {
+ min-width: 10ex;
+ inset-inline-start: 0;
+}
+
+.multiday-grid.multiday-grid-rotated .multiday-timebar {
+ min-height: 40px;
+ inset-block-start: 0;
+}
+
+.multiday-timebar-time {
+ color: var(--viewTimeBoxColor);
+ padding: 1px 5px;
+ white-space: nowrap;
+}
+
+.multiday-grid:not(.multiday-grid-rotated) .multiday-timebar-time {
+ text-align: end;
+}
+
+.day-column-container {
+ /* Container children become grid items. */
+ display: contents;
+}
+
+.day-column-heading {
+ color: var(--viewColor);
+ font-size: inherit;
+ box-sizing: border-box;
+ white-space: nowrap;
+ padding-inline: 5px;
+ padding-block: 1px 2px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+}
+
+.day-column-heading > * {
+ flex: 0 0 auto;
+}
+
+.day-column-heading {
+ position: sticky;
+ z-index: 2;
+ inset-block-start: 0;
+ inset-inline-start: auto;
+}
+
+.multiday-grid-rotated .day-column-heading {
+ inset-block-start: auto;
+ inset-inline-start: 0;
+}
+
+calendar-header-container {
+ position: sticky;
+ z-index: 2;
+ /* NOTE: calendar-header-container must have its inset-*-start set in
+ * javascript, when we know the height/width of the .day-column-heading. */
+ /* Give child all available space. */
+ display: grid;
+}
+
+.allday-events-list {
+ display: block;
+ min-height: 30px;
+ max-height: 120px;
+ min-width: 100px;
+ overflow-y: auto;
+ overflow-x: hidden;
+ margin: 0;
+ padding-block: 0;
+ padding-inline: 1px 6px;
+ /* Prevent overscrolling from moving into the parent view.
+ * NOTE: This only works if the list is overflowing. For cases where it does
+ * not overflow, we must prevent scrolling the parent in javascript. */
+ overscroll-behavior: none;
+}
+
+.multiday-grid-rotated .allday-events-list:not(:empty) {
+ min-width: 150px;
+}
+
+.allday-event-listitem {
+ display: block;
+ margin: 2px;
+}
+
+.multiday-events-list {
+ padding: 0;
+ position: relative;
+}
+
+.multiday-event-listitem {
+ /* This acts as sized wrapper to an calendar-event-box, so we use the grid
+ * display to give it the same dimensions. */
+ display: grid;
+ position: absolute;
+ padding: 1px;
+ box-sizing: border-box;
+}
+
+/* Margin that allows event creation by click and drag when the time slot is
+ full of events. On the right side in normal view ... */
+calendar-event-column .multiday-events-list {
+ margin-inline: 0 5px;
+ margin-block: 0;
+}
+/* ... and on bottom in rotate view. */
+.multiday-grid-rotated calendar-event-column .multiday-events-list {
+ margin-block: 0 5px;
+ margin-inline: 0;
+}
+
+.multiday-end-border {
+ grid-row: 1 / 4;
+ grid-column: auto;
+}
+
+.multiday-grid-rotated .multiday-end-border {
+ grid-row: auto;
+ grid-column: 1 / 4;
+}
+
+.multiday-hour-box-container {
+ display: flex;
+ flex-direction: column;
+}
+
+.multiday-grid-rotated .multiday-hour-box-container {
+ flex-direction: row;
+}
+
+.multiday-hour-box {
+ flex: 1 1 0;
+}
+
+/* Borders. */
+
+.multiday-header-corner {
+ border-inline-start: none;
+ border-inline-end: 2px solid var(--viewBorderColor);
+ border-block-start: none;
+ border-block-end: 2px solid var(--viewBorderColor);
+}
+
+.multiday-timebar {
+ border-inline-start: none;
+ border-inline-end: 2px solid var(--viewBorderColor);
+ border-block: none;
+}
+
+.multiday-grid-rotated .multiday-timebar {
+ border-block-start: 1px solid var(--viewBorderColor);
+ border-block-end: 2px solid var(--viewBorderColor);
+ border-inline: none;
+}
+
+.day-column-heading {
+ border-block: 1px solid var(--viewBorderColor);
+ border-inline-start: 1px solid var(--viewBorderColor);
+ border-inline-end: none;
+}
+
+.multiday-grid-rotated .day-column-heading {
+ border-inline: 1px solid var(--viewBorderColor);
+ border-block-start: 1px solid var(--viewBorderColor);
+ border-block-end: none;
+}
+
+calendar-header-container {
+ /* Block start border is given by .day-column-heading. */
+ border-block-start: none;
+ border-block-end: 2px solid var(--viewBorderColor);
+ border-inline-start: 1px solid var(--viewBorderColor);
+ /* Inline end border is given by the next header. */
+ border-inline-end: none;
+}
+
+.multiday-grid-rotated calendar-header-container {
+ border-inline-start: none;
+ border-inline-end: 2px solid var(--viewBorderColor);
+ border-block-start: 1px solid var(--viewBorderColor);
+ border-block-end: none;
+}
+
+calendar-event-column,
+.multiday-end-border {
+ /* NOTE: For calendar-event-column, the calendar-header-container and last
+ * .multiday-hour-box elements provide the starting end ending block borders,
+ * respectively. */
+ border-inline-start: 1px solid var(--viewBorderColor);
+ border-inline-end: none;
+ border-block: none;
+}
+
+.multiday-grid-rotated :is(
+ calendar-event-column,
+ .multiday-end-border
+) {
+ border-block-start: 1px solid var(--viewBorderColor);
+ border-block-end: none;
+ border-inline: none;
+}
+
+.multiday-hour-box {
+ border-block-start: none;
+ border-block-end: 1px solid var(--viewBorderColor);
+ border-inline: none;
+}
+
+.multiday-grid:not(.multiday-grid-rotated) .multiday-timebar .multiday-hour-box {
+ /* Timebar has same border as in the calendar-event-column, so that they
+ * align, but we make it transparent to hide it. */
+ border-color: transparent;
+}
+
+.multiday-grid-rotated .multiday-hour-box {
+ border-inline-start: none;
+ border-inline-end: 1px solid var(--viewBorderColor);
+ border-block: none;
+}
+
+/* Background.
+ * Styling priority, from lowest to highest:
+ * + .day-column-weekend
+ * + .day-column-today
+ * + .day-column-selected
+ */
+
+.multiday-header-corner,
+.day-column-heading,
+calendar-header-container,
+calendar-event-column,
+.multiday-hour-box {
+ background-color: var(--viewBackground);
+}
+
+.day-column-weekend :is(
+ calendar-header-container,
+ .multiday-hour-box
+) {
+ background-color: var(--viewWeekendBackground);
+}
+
+.day-column-today :is(
+ calendar-header-container,
+ .multiday-hour-box
+) {
+ background-color: var(--viewTodayBackground);
+}
+
+.day-column-today .day-column-heading {
+ color: var(--viewTodayLabelBackground);
+}
+
+.day-column-today.day-column-weekend:not(.day-column-selected) :is(
+ calendar-header-container,
+ .multiday-hour-box
+) {
+ background-color: var(--viewTodayWeekendBackground);
+}
+
+.day-column-selected :is(
+ calendar-header-container,
+ .multiday-hour-box,
+ .day-column-heading
+) {
+ background-color: var(--viewHeaderSelectedBackground);
+ border-inline: 1px solid var(--viewHighlightBorderColor);
+}
+
+.multiday-hour-box.multiday-hour-box-off-time {
+ background-color: var(--viewOffTimeBackground);
+}
+
+.day-column-weekend .multiday-hour-box.multiday-hour-box-off-time {
+ background-color: var(--viewMonthDayOffLabelBackground);
+}
+
+.day-column-today .multiday-hour-box.multiday-hour-box-off-time {
+ background-color: var(--viewTodayOffBackground);
+}
+
+.day-column-selected .multiday-hour-box.multiday-hour-box-off-time {
+ background-color: var(--viewDayBoxOffSelectedBackground);
+}
+
+.fgdragbox {
+ -moz-box-orient: inherit;
+ display: none;
+}
+
+.fgdragbox[dragging="true"] {
+ display: flex;
+ background: var(--viewDragboxBackground);
+ border: 5px var(--viewBackground);
+ opacity: 0.5;
+ min-height: 2px;
+ min-width: 2px;
+}
+
+.fgdragcontainer {
+ -moz-box-orient: inherit;
+ display: none;
+}
+
+.fgdragcontainer[dragging="true"] {
+ display: flex;
+ /* This is a workaround for a stack bug and display: hidden in underlying
+ * elements -- the display: hidden bits get misrendered as being on top.
+ * Setting an opacity here forces a view to be created for this element, too.
+ */
+ opacity: 0.9999;
+}
+
+.fgdragbox-label {
+ font-weight: bold;
+ text-align: center;
+ overflow: hidden;
+ color: var(--viewDragboxColor);
+}
+
+.timeIndicator {
+ opacity: 0.7;
+}
+
+.multiday-grid:not(.multiday-grid-rotated) .timeIndicator {
+ min-width: 1px;
+ margin-inline: -1px;
+ border-block-start: 2px solid var(--color-red-50);
+}
+
+.multiday-grid.multiday-grid-rotated .timeIndicator {
+ min-height: 1px;
+ margin-block: -1px;
+ border-inline-start: 2px solid var(--color-red-50);
+}
+
+.multiday-timebar-now-indicator {
+ background-color: var(--viewBackground);
+ position: absolute;
+ display: block;
+ border: 2px solid var(--color-red-50);
+ border-radius: 50%;
+}
+
+.multiday-grid:not(.multiday-grid-rotated) .multiday-timebar-now-indicator {
+ margin-block-start: -4px;
+ margin-inline-end: -6px;
+ height: 6px;
+ width: 6px;
+ inset-inline-end: 0;
+}
+
+.multiday-grid.multiday-grid-rotated .multiday-timebar-now-indicator {
+ margin-inline-start: -1px;
+ height: 8px;
+ width: 4px;
+ inset-block-end: 0px;
+}
+
+/* Take care to ensure the dummy event box in a calendar-event-column remains hidden. */
+calendar-event-box:not([hidden]) {
+ /* Be the containing block for the gripbar-start/gripbar-end elements. */
+ display: block;
+ position: relative;
+}
+
+calendar-month-day-box-item[selected="true"].calendar-color-box,
+calendar-event-box[selected="true"].calendar-color-box,
+calendar-editable-item[selected="true"].calendar-color-box {
+ color: var(--color-white) !important;
+ background-color: var(--color-blue-50) !important;
+ box-shadow: 0 3px 8px -3px rgba(0, 0, 0, 0.3);
+}
+
+calendar-day-label {
+ color: var(--viewColor);
+ background-color: var(--viewBackground);
+}
+
+calendar-day-label[relation="today"] {
+ background-color: var(--viewTodayDayLabelBackground);
+ color: var(--viewTodayColor);
+}
+
+.calendar-day-label-name {
+ text-align: center;
+}
+
+/* Multiweek/Month View */
+calendar-month-view,
+calendar-multiweek-view {
+ padding: 0px 2px 2px;
+ /* Only have a single child. Grid display will automatically stretch to fill
+ * the given space. */
+ display: grid;
+}
+
+calendar-month-view[hidden],
+calendar-multiweek-view[hidden] {
+ display: none;
+}
+
+.monthtable {
+ display: grid;
+ /* Equal-width columns. To ensure they remain equal width when spacing
+ * becomes small, we must make sure each variable width element has
+ * overflow-x set to ensure they can shrink.
+ * NOTE: we don't set the number of columns to a fixed 7 days of the week
+ * since some days of the week can be hidden. This requires the grid-row
+ * to be set for each child to ensure they end up on the correct row. */
+ grid-auto-columns: 1fr;
+ /* The first row is headers, and should not be stretched. */
+ grid-template-rows: auto;
+ /* All other rows share equal height. Again, variable height elements should
+ * have overflow-y set so they can shrink. */
+ grid-auto-rows: 1fr;
+ border-spacing: 0;
+ margin: 0;
+ padding: 0;
+ /* Complete the end borders. */
+ border-inline-end: 1px solid var(--viewBorderColor);
+ border-block-end: 1px solid var(--viewBorderColor);
+}
+
+.monthtable :is(tbody, thead, tr, td, th) {
+ /* Allow the calendar-month-day-box and calendar-day-label elements be the
+ * children of the grid. */
+ display: contents;
+}
+
+.monthtable :is(tr, th, td)[hidden] {
+ /* NOTE: Need this CSS rule because the hidden attribute behaviour is
+ * overridden by the "display: contents" rule above. */
+ display: none;
+}
+
+.monthtable :is(td, th) > * {
+ /* Hidden overflow ensures each cell has the same width/height, even when the
+ * space becomes limited, because this allows the cells to shrink. */
+ overflow: hidden;
+}
+
+.monthtable :is(td, th) > * {
+ /* Every cell in the body gets a starting border, which acts as the end border
+ * for the previous cell. */
+ border: 1px solid transparent;
+ border-inline-start: 1px solid var(--viewBorderColor);
+ border-block-start: 1px solid var(--viewBorderColor);
+}
+
+.monthtable calendar-day-label {
+ display: block;
+}
+
+calendar-month-day-box {
+ display: flex;
+ flex-direction: column;
+}
+
+.calendar-month-day-box-dates {
+ flex: 0 0 auto;
+ overflow-x: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 1rem;
+ padding: var(--calendar-month-day-box-padding);
+ margin: 0;
+}
+
+.calendar-month-day-box-date-label[data-label="day"] {
+ margin-inline-start: auto;
+}
+
+.calendar-month-day-box-list {
+ display: block;
+ margin: 0;
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 0;
+ flex: 1 1 0;
+}
+
+.calendar-month-day-box-list-item {
+ display: block;
+ margin: 2px;
+}
+
+.calendar-month-day-box-current-month {
+ background-color: var(--viewBackground);
+}
+
+.calendar-month-day-box-day-off {
+ background-color: var(--viewWeekendBackground);
+}
+
+.calendar-month-day-box-other-month {
+ background-color: var(--viewMonthDayOtherBackground);
+}
+
+.calendar-month-day-box-other-month.calendar-month-day-box-day-off {
+ background-color: var(--viewMonthDayOtherBackground);
+}
+
+.calendar-month-day-box-current-month[relation="today"],
+.calendar-month-day-box-day-off[relation="today"],
+.calendar-month-day-box-other-month[relation="today"] {
+ background-color: var(--viewTodayBackground);
+}
+
+.calendar-month-day-box-date-label[relation="today"] {
+ color: var(--color-white);
+ position: relative;
+ font-weight: bold;
+ background-color: var(--viewTodayLabelBackground);
+ border-radius: 1000px;
+ text-align: center;
+ padding-block: var(--today-week-pill-padding-block);
+ padding-inline: var(--today-week-pill-padding-inline);
+}
+
+.calendar-month-day-box-current-month[selected="true"],
+.calendar-month-day-box-day-off[selected="true"],
+.calendar-month-day-box-other-month[selected="true"] {
+ border: 1px solid var(--viewHighlightBorderColor);
+}
+
+.calendar-month-day-box-current-month[selected="true"] {
+ background-color: var(--viewDayBoxSelectedBackground);
+}
+
+.calendar-month-day-box-day-off[selected="true"] {
+ background-color: var(--viewDayBoxSelectedBackground);
+}
+
+.calendar-month-day-box-other-month[selected="true"] {
+ background-color: var(--viewDayBoxOtherSelectedBackground);
+}
+
+.calendar-month-day-box-date-label[selected="true"] {
+ color: var(--viewMonthDayBoxSelectedColor);
+}
+
+.calendar-month-day-box-date-label[relation="today"][selected="true"] {
+ color: var(--viewTodayLabelColor);
+}
+
+.calendar-month-day-box-date-label {
+ color: var(--viewMonthDayBoxLabelColor);
+ font-size: 0.9rem;
+ font-weight: normal;
+ text-align: right;
+ margin: 0;
+ padding: 2px;
+}
+
+.calendar-month-day-box-week-label {
+ color: color-mix(in srgb, var(--viewMonthDayBoxLabelColor) 70%, transparent);
+ font-size: 0.75rem;
+ font-weight: bold;
+ margin: 0;
+ background-color: var(--viewMonthWeekLabelBackground);
+ border-radius: 1000px;
+ text-align: center;
+ padding-block: var(--today-week-pill-padding-block);
+ padding-inline: var(--today-week-pill-padding-inline);
+}
+
+.calendar-color-box {
+ /* FIXME: Is min-height needed? */
+ min-height: 13px;
+ border-radius: 2px;
+ background-color: var(--item-backcolor);
+ color: var(--item-forecolor);
+ position: relative;
+ overflow: hidden;
+}
+
+calendar-month-day-box calendar-month-day-box-item[allday="true"].calendar-color-box {
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, black 35%, var(--item-backcolor)),
+ inset 0 0 0 2px color-mix(in srgb, white 50%, var(--item-backcolor));
+}
+
+.dropshadow {
+ height: 1.2em;
+ background-color: color-mix(in srgb, var(--viewDropshadowBackground) 30%, transparent);
+ border: 2px dashed var(--viewDropshadowBackground);
+ border-radius: 3px;
+}
+
+:is(.gripbar-start, .gripbar-end) {
+ /* Invisible by default. */
+ visibility: hidden;
+ pointer-events: auto;
+ position: absolute;
+ /* Center the image. */
+ display: grid;
+ align-content: center;
+ justify-content: center;
+ overflow: clip;
+}
+
+.event-readonly :is(.gripbar-start, .gripbar-end),
+:is(.gripbar-start, .gripbar-end)[hidden] {
+ display: none;
+}
+
+calendar-event-box:hover :is(.gripbar-start, .gripbar-end) {
+ visibility: visible;
+}
+
+.gripbar-start {
+ cursor: n-resize;
+ inset-block: 0 auto;
+ inset-inline: 0;
+ padding-block: 1px 0;
+ padding-inline: 0;
+}
+
+.gripbar-end {
+ cursor: s-resize;
+ inset-block: auto 0;
+ inset-inline: 0;
+ padding-block: 0 1px;
+ padding-inline: 0;
+}
+
+/* Rotate the event-grippy.png image in rotated view. */
+.multiday-grid-rotated :is(.gripbar-start, .gripbar-end) img:-moz-locale-dir(ltr) {
+ transform: rotate(-90deg);
+}
+
+.multiday-grid-rotated :is(.gripbar-start, .gripbar-end) img:-moz-locale-dir(rtl) {
+ transform: rotate(90deg);
+}
+
+.multiday-grid-rotated :is(.gripbar-start, .gripbar-end) {
+ /* Explicitly set the content width to 3px (the height of the event-grippy.png
+ * img src) since we rotated the image. Otherwise the auto-width uses the
+ * width of the src. */
+ width: 3px;
+}
+
+.multiday-grid-rotated .gripbar-start {
+ inset-inline: 0 auto;
+ inset-block: 0;
+ padding-inline: 1px 0;
+ padding-block: 0;
+}
+
+.multiday-grid-rotated .gripbar-end {
+ inset-inline: auto 0;
+ inset-block: 0;
+ padding-inline: 0 1px;
+ padding-block: 0;
+}
+
+.multiday-grid-rotated :is(
+ .gripbar-start:-moz-locale-dir(ltr),
+ .gripbar-end:-moz-locale-dir(rtl),
+) {
+ cursor: w-resize;
+}
+
+.multiday-grid-rotated :is(
+ .gripbar-end:-moz-locale-dir(ltr),
+ .gripbar-start:-moz-locale-dir(rtl),
+) {
+ cursor: e-resize;
+}
+
+/* tooltips */
+.tooltipBox {
+ max-width: 40em;
+}
+
+.tooltipValueColumn {
+ max-width: 35em; /* tooltipBox max-width minus space for label */
+}
+
+.tooltipHeaderTable {
+ border-spacing: 0;
+}
+
+.tooltipHeaderLabel {
+ text-align: end;
+ padding-inline-end: 0.5em;
+}
+
+.tooltipBodySeparator {
+ height: 1ex; /* 1ex space above body text, below last header. */
+}
+
+.tooltipBody {
+ font-weight: normal;
+ white-space: normal;
+ overflow-wrap: anywhere;
+ margin: 0pt;
+}
+
+#conflicts-vbox .tooltipBody {
+ overflow: auto;
+ min-height: 250px;
+}
+
+#calendar-view-context-menu[type="event"] .todo-only,
+#calendar-view-context-menu[type="todo"] .event-only,
+#calendar-view-context-menu[type="mixed"] .event-only,
+#calendar-view-context-menu[type="mixed"] .todo-only,
+#calendar-item-context-menu[type="event"] .todo-only,
+#calendar-item-context-menu[type="todo"] .event-only,
+#calendar-item-context-menu[type="mixed"] .event-only,
+#calendar-item-context-menu[type="mixed"] .todo-only {
+ display: none;
+}
+
+.attendance-menu[itemType="single"] > menupopup > *[scope="all-occurrences"] {
+ display: none;
+}
+
+.calendar-context-heading-label {
+ font-weight: bold;
+ color: menutext;
+}
+
+calendar-event-box,
+calendar-editable-item,
+calendar-month-day-box-item {
+ opacity: 0.99;
+ /* Do not change next line, since it would break item selection */
+ -moz-user-focus: normal;
+ overflow: hidden;
+}
+
+calendar-event-box[invitation-status="NEEDS-ACTION"],
+calendar-editable-item[invitation-status="NEEDS-ACTION"],
+calendar-month-day-box-item[invitation-status="NEEDS-ACTION"],
+.agenda-listitem[status="NEEDS-ACTION"] .agenda-listitem-details {
+ outline: 2px dotted black;
+ outline-offset: -2px;
+ opacity: 0.6;
+}
+
+calendar-event-box[invitation-status="TENTATIVE"],
+calendar-editable-item[invitation-status="TENTATIVE"],
+calendar-month-day-box-item[invitation-status="TENTATIVE"],
+calendar-event-box[status="TENTATIVE"],
+calendar-editable-item[status="TENTATIVE"],
+calendar-month-day-box-item[status="TENTATIVE"],
+.agenda-listitem[status="TENTATIVE"] .agenda-listitem-details {
+ opacity: 0.6;
+}
+
+calendar-event-box[invitation-status="DECLINED"],
+calendar-editable-item[invitation-status="DECLINED"],
+calendar-month-day-box-item[invitation-status="DECLINED"],
+.agenda-listitem[status="DECLINED"] .agenda-listitem-details,
+calendar-event-box[status="CANCELLED"],
+calendar-editable-item[status="CANCELLED"],
+calendar-month-day-box-item[status="CANCELLED"],
+.agenda-listitem[status="CANCELLED"] .agenda-listitem-details {
+ opacity: 0.5;
+}
+
+calendar-month-day-box-item[status="CANCELLED"],
+calendar-event-box[status="CANCELLED"],
+calendar-editable-item[status="CANCELLED"],
+.agenda-listitem[status="CANCELLED"] .agenda-event-start .agenda-listitem-details {
+ text-decoration: line-through;
+}
+
+/* Calendar body */
+#view-box {
+ background-color: var(--layout-background-1);
+}
+
+:root[lwt-tree] #view-box {
+ background-color: var(--sidebar-background-color);
+}
+
+/* Calendar control bar: Cal navigation, Date interval, Week# and View toggle*/
+
+#calendarViewHeader {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: var(--calendar-nav-control-padding);
+ gap: 6px;
+}
+
+ #calendarViewHeader > div > span {
+ -webkit-line-clamp: 2;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ flex: 1;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ min-width: 0;
+}
+
+.navigation-inner-box {
+ display: flex;
+ align-items: center;
+ gap: var(--calendar-view-toolbar-gap);
+}
+
+#calendarControls {
+ --button-margin: 0;
+ display: flex;
+ align-items: center;
+ gap: var(--calendar-nav-gap);
+}
+
+.view-header {
+ font-weight: bold;
+ font-size: 1rem;
+ color: inherit;
+}
+
+#previousViewButton {
+ background-image: var(--icon-nav-left);
+}
+
+#nextViewButton {
+ background-image: var(--icon-nav-right);
+}
+
+#todayViewButton {
+ background-image: var(--icon-calendar-today);
+}
+
+.calview-toggle {
+ border-radius: 1000px;
+ background-color: var(--calendar-view-toggle-background);
+ border: 1px solid var(--calendar-view-toggle-border-color);
+ box-shadow: inset 0 0 6px -3px var(--calendar-view-toggle-shadow-color);
+ display: flex;
+ font-weight: 500;
+}
+
+button.calview-toggle-item {
+ appearance: none;
+ min-width: unset;
+ min-height: unset;
+ border: 1px solid transparent;
+ border-radius: 1000px;
+ background-color: var(--calendar-view-toggle-background);
+ color: inherit;
+ padding: var(--calendar-view-toggle-label-padding);
+ margin: 3px;
+}
+
+button.calview-toggle-item:focus-visible {
+ outline: var(--focus-outline);
+ outline-offset: 1px;
+}
+
+button.calview-toggle-item[role="tab"][aria-selected="true"] {
+ background-color: var(--calendar-view-toggle-selected-background);
+ border: 1px solid var(--calendar-view-toggle-border-color);
+ box-shadow: 0 0 3px var(--calendar-view-toggle-shadow-color);
+}
+
+button.calview-toggle-item[role="tab"][aria-selected="true"]:hover {
+ background-color: var(--calendar-view-toggle-selected-hover-background);
+}
+
+button.calview-toggle-item:hover,
+button.calview-toggle-item[role="tab"][aria-selected="false"]:hover {
+ background-color: var(--calendar-view-toggle-hover-background);
+}
+
+button.calview-toggle-item:hover:active,
+button.calview-toggle-item[role="tab"][aria-selected="false"]:hover:active {
+ background-color: var(--calendar-view-toggle-active-background);
+}
+
+.today-navigation-button:not([disabled="true"]):hover {
+ background: var(--toolbarbutton-hover-background);
+ border-color: var(--toolbarbutton-hover-bordercolor);
+ box-shadow: var(--toolbarbutton-hover-boxshadow);
+ color: inherit;
+ outline: none;
+}
+
+:root[lwt-tree-brighttext] .today-navigation-button:not([disabled="true"]):hover {
+ background: rgba(255, 255, 255, .25);
+ border-color: rgba(255, 255, 255, .5);
+}
+
+.today-navigation-button:not([disabled="true"]):hover:active {
+ background: var(--toolbarbutton-active-background);
+ border-color: var(--toolbarbutton-active-bordercolor);
+ box-shadow: var(--toolbarbutton-active-boxshadow);
+ transition-duration: 10ms;
+}
+
+ :root[lwt-tree-brighttext] .today-navigation-button:not([disabled="true"]):hover:active {
+ background: rgba(255, 255, 255, .4);
+ border-color: rgba(255, 255, 255, .7);
+ box-shadow: inset 0 0 rgba(255, 255, 255, .4);
+}
+
+#calendarControlBarMenu {
+ background-image: var(--icon-display-options);
+}
+
+.fgdragspacer {
+ display: inherit;
+ overflow: hidden;
+}
+
+.fgdragcontainer {
+ min-width: 1px;
+ min-height: 1px;
+ overflow:hidden;
+}
+
+.multiday-events-list,
+.timeIndicator {
+ pointer-events: none;
+}