summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/themes/common
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/themes/common')
-rw-r--r--comm/calendar/base/themes/common/calendar-alarms.css83
-rw-r--r--comm/calendar/base/themes/common/calendar-attendees.css216
-rw-r--r--comm/calendar/base/themes/common/calendar-creation.css99
-rw-r--r--comm/calendar/base/themes/common/calendar-daypicker.css28
-rw-r--r--comm/calendar/base/themes/common/calendar-invitation-display.css13
-rw-r--r--comm/calendar/base/themes/common/calendar-item-summary.css77
-rw-r--r--comm/calendar/base/themes/common/calendar-itip-icons.svg122
-rw-r--r--comm/calendar/base/themes/common/calendar-occurrence-prompt.css67
-rw-r--r--comm/calendar/base/themes/common/calendar-occurrence.svg20
-rw-r--r--comm/calendar/base/themes/common/calendar-preferences.css76
-rw-r--r--comm/calendar/base/themes/common/calendar-print.css66
-rw-r--r--comm/calendar/base/themes/common/calendar-providerUninstall-dialog.css13
-rw-r--r--comm/calendar/base/themes/common/calendar-task-tree.css132
-rw-r--r--comm/calendar/base/themes/common/calendar-task-view.css236
-rw-r--r--comm/calendar/base/themes/common/calendar-toolbar.css21
-rw-r--r--comm/calendar/base/themes/common/calendar-unifinder.css40
-rw-r--r--comm/calendar/base/themes/common/calendar-views.css1232
-rw-r--r--comm/calendar/base/themes/common/calendar.css255
-rw-r--r--comm/calendar/base/themes/common/datetimepickers.css260
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-alarm-dialog.css112
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-event-dialog-attendees.css264
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-event-dialog.css677
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-ics-file-dialog.css107
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-invitations-dialog.css80
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-itip-identity-dialog.css11
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-properties-dialog.css89
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-summary-dialog.css47
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-timezone-highlighter.css142
-rw-r--r--comm/calendar/base/themes/common/dialogs/calendar-uri-redirect-dialog.css13
-rw-r--r--comm/calendar/base/themes/common/dialogs/chooseCalendarDialog.css19
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/calendar-event-dialog-attendees.pngbin0 -> 8696 bytes
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/calendar-invitations-dialog-list-images.pngbin0 -> 2150 bytes
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/chain-lock.svg6
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/chain-unlock.svg6
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/link-image-bottom.svg6
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/link-image-top.svg7
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/statusbar-priority-high.svg8
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/statusbar-priority-low.svg6
-rw-r--r--comm/calendar/base/themes/common/dialogs/images/statusbar-priority-normal.svg7
-rw-r--r--comm/calendar/base/themes/common/icons/alarm-no.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/alarm.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/complete.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/confidential.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/decline.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/edit.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/email.svg7
-rw-r--r--comm/calendar/base/themes/common/icons/event.svg10
-rw-r--r--comm/calendar/base/themes/common/icons/find.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/freebusy.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/icon32.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/imip-bar.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/locked.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/low-priority.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/newevent.svg10
-rw-r--r--comm/calendar/base/themes/common/icons/newtask.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/pane.svg8
-rw-r--r--comm/calendar/base/themes/common/icons/priority.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/private.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/recurrence-exception.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/recurrence.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/save-close.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/sort.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/status.svg10
-rw-r--r--comm/calendar/base/themes/common/icons/synchronize.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/task-tab.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/task.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/tentative.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/timezones.svg6
-rw-r--r--comm/calendar/base/themes/common/icons/today.svg9
-rw-r--r--comm/calendar/base/themes/common/icons/warn.svg6
-rw-r--r--comm/calendar/base/themes/common/images/attendee-icons.pngbin0 -> 5592 bytes
-rw-r--r--comm/calendar/base/themes/common/images/event-continue.svg6
-rw-r--r--comm/calendar/base/themes/common/images/event-end.svg6
-rw-r--r--comm/calendar/base/themes/common/images/event-grippy.pngbin0 -> 98 bytes
-rw-r--r--comm/calendar/base/themes/common/images/event-start.svg6
-rw-r--r--comm/calendar/base/themes/common/images/timezone_map.pngbin0 -> 14423 bytes
-rw-r--r--comm/calendar/base/themes/common/images/timezones.pngbin0 -> 101805 bytes
-rw-r--r--comm/calendar/base/themes/common/images/todayButton-arrow.svg6
-rw-r--r--comm/calendar/base/themes/common/images/todo-complete.svg6
-rw-r--r--comm/calendar/base/themes/common/images/todo.svg6
-rw-r--r--comm/calendar/base/themes/common/imip.css76
-rw-r--r--comm/calendar/base/themes/common/jar.inc.mn99
-rw-r--r--comm/calendar/base/themes/common/publishDialog.css53
-rw-r--r--comm/calendar/base/themes/common/today-pane.css433
-rw-r--r--comm/calendar/base/themes/common/view-cycler.svg6
-rw-r--r--comm/calendar/base/themes/common/widgets/calendar-invitation-panel.css135
-rw-r--r--comm/calendar/base/themes/common/widgets/calendar-minidate.css36
-rw-r--r--comm/calendar/base/themes/common/widgets/calendar-widgets.css388
-rw-r--r--comm/calendar/base/themes/common/widgets/images/drag-center.svg9
-rw-r--r--comm/calendar/base/themes/common/widgets/images/nav-arrow.svg6
-rw-r--r--comm/calendar/base/themes/common/widgets/images/nav-today.svg7
-rw-r--r--comm/calendar/base/themes/common/widgets/images/view-navigation.svg6
-rw-r--r--comm/calendar/base/themes/common/widgets/minimonth.css385
93 files changed, 6542 insertions, 0 deletions
diff --git a/comm/calendar/base/themes/common/calendar-alarms.css b/comm/calendar/base/themes/common/calendar-alarms.css
new file mode 100644
index 0000000000..c45660c496
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-alarms.css
@@ -0,0 +1,83 @@
+/* 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/. */
+
+.reminder-details > .alarm-icons-box {
+ width: 15px;
+}
+
+/**
+ * Reminder icons (used from the event dialog, reminder dialog, views, ...)
+ */
+.reminder-icon,
+.reminder-list-icon .menu-iconic-left,
+.reminder-list-icon::part(icon) {
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+}
+
+.reminder-list-icon[value="DISPLAY"] {
+ list-style-image: var(--icon-bell)
+}
+
+.reminder-list-icon[value="EMAIL"] {
+ list-style-image: var(--icon-mail-sm);
+}
+
+.reminder-list-icon[value="AUDIO"] {
+ list-style-image: var(--icon-bell-ring);
+}
+
+.alarm-icons-box[flashing="true"] > .reminder-icon[value="DISPLAY"] {
+ background: red;
+ fill: white;
+}
+
+.reminder-details > .alarm-icons-box > .reminder-icon {
+ width: 12px;
+ height: 12px;
+ margin-inline-start: 3px;
+}
+
+/**
+ * Reminder dialog (i.e "custom" alarm in the event dialog)
+ * Please make sure rules added here are very specific and won't hurt other
+ * dialogs.
+ */
+#reminder-listbox {
+ min-height: 100px;
+}
+
+#reminder-relative-radio > .radio-label-center-box > .radio-label-box,
+#reminder-absolute-radio > .radio-label-center-box > .radio-label-box {
+ display: none;
+}
+
+#reminder-actions-menulist > menupopup > menuitem > .menu-iconic-left {
+ display: flex;
+}
+
+#reminder-notifications > notification[type="warning"] > hbox > .messageImage {
+ width: 32px;
+ height: 32px;
+ fill: #ffbf00;
+}
+
+#reminder-notifications {
+ padding: 0 4px 4px;
+}
+
+#reminder-actions-caption,
+#reminder-details-caption {
+ padding-top: 20px;
+}
+
+#reminder-actions-menulist {
+ margin-bottom: 20px;
+}
+
+.reminder-icon > .menu-iconic-left > .menu-iconic-icon {
+ width: auto;
+ height: auto;
+}
diff --git a/comm/calendar/base/themes/common/calendar-attendees.css b/comm/calendar/base/themes/common/calendar-attendees.css
new file mode 100644
index 0000000000..15ad0d9691
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-attendees.css
@@ -0,0 +1,216 @@
+/* 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");
+
+/* this is for attendee and organizer decoration in summary and event dialog */
+html|input.textbox-addressingWidget {
+ width: 100%;
+ background-color: transparent !important;
+ flex: 1;
+}
+html|input.textbox-addressingWidget:disabled {
+ color: inherit;
+ opacity: 0.5;
+}
+
+#outer {
+ max-height: calc(100vh - 210px);
+}
+
+.attendee-list-container {
+ width: 350px;
+}
+
+.item-attendees-list-container {
+ flex: 1 1 100px;
+ appearance: auto;
+ -moz-default-appearance: listbox;
+ margin: 2px 4px 0;
+ overflow-y: auto;
+}
+
+:root[lwt-tree] .item-attendees-list-container {
+ appearance: none;
+ background-color: var(--field-background-color);
+ color: var(--field-text-color);
+ border: 1px solid var(--field-border-color);
+}
+
+.attendee-list {
+ display: block;
+ padding: 0;
+ margin: 0;
+}
+
+.attendee-list-item {
+ display: contents;
+}
+
+.attendee-label {
+ padding: 2px;
+ display: flex;
+ align-items: baseline;
+ user-select: text;
+}
+
+.attendee-list .attendee-label:focus {
+ background-color: var(--selected-item-color);
+ color: var(--selected-item-text-color);
+}
+
+.itip-icon {
+ flex: 0 0 auto;
+}
+
+.attendee-name {
+ margin: 0 3px;
+ flex: 0 1 auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+/* this is for the itip icon setup in calendar */
+
+.itip-icon {
+ --itip-icon-partstat: -16px -16px; /* default: NEEDS-ACTION */
+ --itip-icon-role: 0px; /* default: REQ-PARTICIPANT */
+ --itip-icon-usertype: -32px; /* default: INDIVIDUAL */
+ width: 16px;
+ height: 16px;
+ background-image: url(chrome://calendar/skin/shared/calendar-itip-icons.svg),
+ url(chrome://calendar/skin/shared/calendar-itip-icons.svg);
+ background-position: var(--itip-icon-partstat), var(--itip-icon-usertype) var(--itip-icon-role);
+}
+.itip-icon[partstat="ACCEPTED"] {
+ --itip-icon-partstat: 0px 0px;
+}
+.itip-icon[partstat="DECLINED"] {
+ --itip-icon-partstat: 0px -16px;
+}
+.itip-icon[partstat="DELEGATED"] {
+ --itip-icon-partstat: 0px -32px;
+}
+.itip-icon[partstat="TENTATIVE"] {
+ --itip-icon-partstat: -16px 0px;
+}
+.itip-icon[usertype="INDIVIDUAL"] {
+ --itip-icon-usertype: -32px;
+}
+.itip-icon[usertype="GROUP"] {
+ --itip-icon-usertype: -48px;
+}
+.itip-icon[usertype="RESOURCE"] {
+ --itip-icon-usertype: -64px;
+}
+.itip-icon[usertype="ROOM"] {
+ --itip-icon-usertype: -80px;
+}
+.itip-icon[usertype="UNKNOWN"] {
+ --itip-icon-usertype: -96px;
+}
+.itip-icon[attendeerole="REQ-PARTICIPANT"] {
+ --itip-icon-role: 0px;
+}
+.itip-icon[attendeerole="OPT-PARTICIPANT"] {
+ --itip-icon-role: -16px;
+}
+.itip-icon[attendeerole="NON-PARTICIPANT"] {
+ --itip-icon-role: -32px;
+}
+.itip-icon[attendeerole="CHAIR"] {
+ --itip-icon-role: -32px;
+ --itip-icon-usertype: -16px;
+}
+
+/* Autocomplete popup label formatting */
+
+html|span.ac-emphasize-text {
+ font-weight: bold;
+}
+
+/* the following will get obsolete once porting to new itip icons is complete */
+
+.role-icon > .menu-iconic-left,
+.usertype-icon > .menu-iconic-left {
+ visibility: inherit;
+}
+
+.role-icon {
+ margin: 0 3px;
+ width: 21px;
+ height: 16px;
+ object-fit: none;
+ object-position: top 0 left -138px;
+}
+
+.role-icon[disabled="true"] {
+ object-position: top 0 left -138px;
+}
+
+.role-icon[attendeerole="REQ-PARTICIPANT"] {
+ object-position: top 0 left -138px;
+}
+.role-icon[attendeerole="REQ-PARTICIPANT"][disabled="true"] {
+ object-position: top 0 left -138px;
+}
+
+.role-icon[attendeerole="OPT-PARTICIPANT"] {
+ object-position: top 0 left -159px;
+}
+.role-icon[attendeerole="OPT-PARTICIPANT"][disabled="true"] {
+ object-position: top 0 left -159px;
+}
+
+.role-icon[attendeerole="CHAIR"] {
+ object-position: top 0 left -180px;
+}
+.role-icon[attendeerole="CHAIR"][disabled="true"] {
+ object-position: top 0 left -180px;
+}
+
+.role-icon[attendeerole="NON-PARTICIPANT"] {
+ object-position: top 0 left -201px;
+}
+.role-icon[attendeerole="NON-PARTICIPANT"][disabled="true"] {
+ object-position: top 0 left -201px;
+}
+
+.usertype-icon {
+ margin: 0 3px;
+ width: 16px;
+ height: 16px;
+ object-fit: none;
+ object-position: top 0 left 0;
+}
+
+.usertype-icon[usertype="INDIVIDUAL"] {
+ object-position: top 0 left 0;
+}
+.usertype-icon[disabled="true"],
+.usertype-icon[usertype="INDIVIDUAL"][disabled="true"] {
+ object-position: top -16px left 0;
+}
+
+.usertype-icon[usertype="GROUP"] {
+ object-position: top 0 left -16px;
+}
+.usertype-icon[usertype="GROUP"][disabled="true"] {
+ object-position: top -16px left -16px;
+}
+
+.usertype-icon[usertype="RESOURCE"] {
+ object-position: top 0 left -32px;
+}
+.usertype-icon[usertype="RESOURCE"][disabled="true"] {
+ object-position: top -16px left -32px;
+}
+
+.usertype-icon[usertype="ROOM"] {
+ object-position: top 0 left -48px;
+}
+.usertype-icon[usertype="ROOM"][disabled="true"] {
+ object-position: top -16px left -48px;
+}
diff --git a/comm/calendar/base/themes/common/calendar-creation.css b/comm/calendar/base/themes/common/calendar-creation.css
new file mode 100644
index 0000000000..e09678a4ec
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-creation.css
@@ -0,0 +1,99 @@
+/* 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");
+
+td {
+ width: 100%;
+}
+
+th {
+ font-weight: normal;
+ text-align: end;
+}
+
+/* Match row spacing of calendar properties dialog. */
+th,
+td {
+ min-height: 26px;
+}
+
+.calendar-creation-text-input {
+ width: -moz-available;
+}
+
+/* Network status messages and images. */
+
+.network-status-image {
+ width: 16px;
+ height: 16px;
+}
+
+.network-status-row {
+ margin-top: 1ex;
+}
+
+.network-status-row .status-label {
+ display: none;
+}
+.network-status-row[status="loading"] .network-loading-label {
+ display: flex;
+}
+.network-status-row[status="notfound"] .network-notfound-label {
+ display: flex;
+}
+.network-status-row[status="authfail"] .network-authfail-label {
+ display: flex;
+}
+
+.network-status-row:not([status="loading"]) .network-status-image {
+ display: none;
+}
+
+/* Network Calendar List */
+
+#network-calendar-list {
+ flex: 1 1 0;
+ appearance: none;
+ margin: 0;
+ border-style: none;
+ background-color: transparent;
+ color: inherit;
+ padding: 0 10px;
+}
+
+#network-calendar-list > richlistitem {
+ align-items: center;
+ background-color: transparent;
+ border: 1px transparent solid;
+}
+
+#network-calendar-list > richlistitem > checkbox > .checkbox-label-box {
+ display: none;
+}
+
+#network-calendar-list > richlistitem .calendar-color {
+ width: 10px;
+ height: 10px;
+ border-radius: 5px;
+}
+
+#network-calendar-list > richlistitem .calendar-name {
+ flex: 1;
+}
+
+#network-calendar-list > richlistitem .calendar-edit-button {
+ min-width: 0px;
+ font-size: 0.82em;
+}
+
+#network-calendar-list > richlistitem[calendar-disabled] > .calendar-color {
+ filter: grayscale(1);
+}
+
+#network-calendar-list
+ > richlistitem[calendar-disabled]:not([selected="true"])
+ > .calendar-name {
+ color: #808080;
+}
diff --git a/comm/calendar/base/themes/common/calendar-daypicker.css b/comm/calendar/base/themes/common/calendar-daypicker.css
new file mode 100644
index 0000000000..f2e7962144
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-daypicker.css
@@ -0,0 +1,28 @@
+/* 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/. */
+
+button.calendar-daypicker {
+ cursor: pointer;
+ margin: 0;
+}
+
+button.calendar-daypicker[mode="monthly-days"] {
+ min-width: 35px;
+ height: 15px;
+}
+
+button.calendar-daypicker[mode="daypicker-weekday"] {
+ min-width: 36px;
+ height: 32px;
+}
+
+hbox:last-child > button.calendar-daypicker:last-child[mode="monthly-days"] {
+ width: 140px;
+ height: 15px;
+}
+
+button.calendar-daypicker[checked="true"] {
+ background-color: var(--selected-item-color) !important;
+ color: var(--selected-item-text-color) !important;
+}
diff --git a/comm/calendar/base/themes/common/calendar-invitation-display.css b/comm/calendar/base/themes/common/calendar-invitation-display.css
new file mode 100644
index 0000000000..0bcae6acc2
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-invitation-display.css
@@ -0,0 +1,13 @@
+/* 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/. */
+
+#calendarInvitationDisplayContainer {
+ overflow-y: auto;
+}
+
+#calendarInvitationDisplay:not([hidden]) {
+ padding: 25px 0px;
+ display: flex;
+ justify-content: center;
+}
diff --git a/comm/calendar/base/themes/common/calendar-item-summary.css b/comm/calendar/base/themes/common/calendar-item-summary.css
new file mode 100644
index 0000000000..deabbdf2d9
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-item-summary.css
@@ -0,0 +1,77 @@
+/* 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/. */
+
+#calendar-item-summary {
+ max-width: 100vw;
+}
+
+.calendar-summary-table {
+ width: 100%;
+}
+
+.calendar-summary-table th {
+ user-select: text;
+ font-weight: normal;
+ padding-inline-end: 5px;
+ text-align: right;
+ vertical-align: baseline;
+ white-space: nowrap;
+}
+
+.calendar-summary-table td {
+ user-select: text;
+ padding-top: 0;
+ vertical-align: baseline;
+ width: 100%;
+ max-width: 0;
+}
+
+.calendar-summary-table td.item-location {
+ vertical-align: top;
+}
+
+.calendar-summary-table .item-location-link > label {
+ margin-inline: 0;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ width: 100%;
+}
+
+.calendar-summary-table .item-organizer-cell {
+ margin-inline: 0px;
+}
+
+.calendar-summary-table .attachments-label {
+ vertical-align: top;
+}
+
+.item-summary-splitter {
+ appearance: none;
+ border-style: none;
+ border-bottom: 1px solid var(--field-border-color);
+ min-height: 0;
+ height: 10px;
+ background-color: transparent;
+ margin: 10px;
+ position: relative;
+ z-index: 10;
+ transition: border-width .3s ease-in;
+}
+
+.item-summary-splitter[state="collapsed"] {
+ transition: border-color .3s;
+}
+
+.item-summary-splitter[state="collapsed"]:hover {
+ border-bottom: 4px solid var(--selected-item-color);
+}
+
+.item-description-box {
+ flex: 1 1 10em;
+}
+
+.item-description {
+ flex: 1 1 0;
+}
diff --git a/comm/calendar/base/themes/common/calendar-itip-icons.svg b/comm/calendar/base/themes/common/calendar-itip-icons.svg
new file mode 100644
index 0000000000..ba482e47b3
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-itip-icons.svg
@@ -0,0 +1,122 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 112 48" width="112" height="48">
+
+ <!-- definitions -->
+ <style>
+ .req {
+ fill: #ffcc00;
+ stroke: #000000;
+ stroke-width: 0.5;
+ }
+ .opt {
+ fill: #cccccc;
+ stroke: #000000;
+ stroke-width: 0.5;
+ }
+ .non {
+ fill: #ffffff;
+ stroke: #000000;
+ stroke-width: 0.5;
+ }
+ .status {
+ fill:#ffffff;
+ stroke:#ffffff;
+ stroke-width:0.5;
+ }
+ </style>
+ <clipPath id="cut-off-bottom">
+ <rect x="0" y="0" width="16" height="16" />
+ </clipPath>
+ <symbol id="chairsymbol" clip-path="url(#cut-off-bottom)">
+ <ellipse cx="6" cy="16" rx="5.5" ry="8" fill="#000000" />
+ <circle cx="6" cy="6.25" r="4" fill="#ffffff"/>
+ <ellipse cx="10" cy="16" rx="5.5" ry="8" fill="#000000" />
+ <circle cx="10" cy="6.25" r="4" fill="#ffffff"/>
+ <ellipse cx="8" cy="16" rx="6.5" ry="9" fill="#ffcc00" />
+ <circle cx="8" cy="4.5" r="4" fill="#ffcc00"/>
+ <line x1="0.5" y1="15.75" x2="15.5" y2="15.75" />
+ </symbol>
+ <symbol id="individual" clip-path="url(#cut-off-bottom)">
+ <ellipse cx="8" cy="16" rx="7.5" ry="8.5" />
+ <circle cx="8" cy="5" r="4.5"/>
+ <line x1="0.5" y1="15.75" x2="15.5" y2="15.75" />
+ </symbol>
+ <symbol id="group" clip-path="url(#cut-off-bottom)">
+ <ellipse cx="5.75" cy="16" rx="5.5" ry="8" />
+ <circle cx="5.75" cy="6.5" r="4"/>
+ <ellipse cx="7.5" cy="16" rx="6.0" ry="8.5" />
+ <circle cx="7.5" cy="5.5" r="4"/>
+ <ellipse cx="9.25" cy="16" rx="6.25" ry="9" />
+ <circle cx="9.25" cy="4.5" r="4"/>
+ <line x1="0.25" y1="15.75" x2="15.55" y2="15.75" />
+ </symbol>
+ <symbol id="resource">
+ <rect x="5.25" y="0.5" rx="1" ry="1" width="10.25" height="12" />
+ <rect x="0.25" y="7" rx="1" ry="1" width="13" height="8" />
+ <circle cx="4.25" cy="11" r="2.5" style="fill:#ffffff" />
+ <line x1="8.25" y1="9" x2="12" y2="9" />
+ <line x1="8.25" y1="11" x2="12" y2="11" />
+ <line x1="8.25" y1="13" x2="12" y2="13" />
+ <rect x="1.25" y="15" width="4" height="1" style="fill:#000000; stroke-width:0" />
+ <rect x="8" y="15" width="4" height="1" style="fill:#000000; stroke-width:0" />
+ </symbol>
+ <symbol id="room">
+ <rect x="4" y="0.5" rx="0.25" ry="0.25" width="3" height="2" />
+ <rect x="8.5" y="0.5" rx="0.25" ry="0.25" width="3" height="2" />
+ <rect x="0.25" y="4.5" rx="0.25" ry="0.25" width="2" height="3" />
+ <rect x="0.25" y="8.5" rx="0.25" ry="0.25" width="2" height="3" />
+ <rect x="3.5" y="4" rx="1" ry="1" width="8.75" height="8" />
+ <rect x="13.5" y="4.5" rx="0.25" ry="0.25" width="2" height="3" />
+ <rect x="13.5" y="8.5" rx="0.25" ry="0.25" width="2" height="3" />
+ <rect x="4" y="13.5" rx="0.25" ry="0.25" width="3" height="2" />
+ <rect x="8.5" y="13.5" rx="0.25" ry="0.25" width="3" height="2" />
+ </symbol>
+ <symbol id="unknown">
+ <path d="m 7.8339844,11.558594 -2.4902344,0 q -0.00977,-0.53711 -0.00977,-0.654297 0,-1.2109376 0.4003906,-1.9921876 Q 6.1347656,8.1308594 7.3359375,7.1542969 8.5371094,6.1777344 8.7714844,5.875 9.1328125,5.3964844 9.1328125,4.8203125 q 0,-0.8007813 -0.6445312,-1.3671875 -0.6347657,-0.5761719 -1.7187501,-0.5761719 -1.0449218,0 -1.7480468,0.5957032 -0.703125,0.5957031 -0.9667969,1.8164062 l -2.5195313,-0.3125 Q 1.6425781,3.2285156 3.0195313,2.0078125 4.40625,0.78710937 6.6523437,0.78710937 q 2.3632813,0 3.7597653,1.24023443 1.396485,1.2304687 1.396485,2.8710937 0,0.9082031 -0.517578,1.71875 Q 10.783203,7.4277344 9.1035156,8.8242188 8.234375,9.546875 8.0195313,9.9863281 7.8144531,10.425781 7.8339844,11.558594 Z M 5.34375,15.25 l 0,-2.744141 2.7441406,0 0,2.744141 -2.7441406,0 z" />
+ </symbol>
+ <symbol id="status" style="stroke-width:0.25;">
+ <circle cx="11.5" cy="11.5" r="4.5" style="fill:#000000; stroke:#ffffff" />
+ <circle cx="11.5" cy="11.5" r="4.25" style="stroke:#000000" />
+ </symbol>
+
+ <!-- status icons -->
+ <g id="accepted" class="status">
+ <use style="fill:#00a000;" xlink:href="#status" x="0" y="0" />
+ <rect x="9" y="11" width="5" height="1" />
+ <rect x="11" y="9" width="1" height="5" />
+ </g>
+ <g id="tentative" class="status">
+ <use style="fill:#0000ff;" xlink:href="#status" x="16" y="0" />
+ <path d="m 27.933594,13 -0.996094,0 q -0.0039,-0.214844 -0.0039,-0.261719 0,-0.484375 0.160156,-0.796875 0.160156,-0.3125 0.640625,-0.703125 0.480469,-0.390625 0.574219,-0.511719 0.144531,-0.191406 0.144531,-0.421875 0,-0.3203125 -0.257813,-0.546875 -0.253906,-0.2304687 -0.6875,-0.2304687 -0.417968,0 -0.699218,0.2382812 -0.28125,0.2382813 -0.386719,0.7265625 l -1.007813,-0.125 q 0.04297,-0.6992187 0.59375,-1.1875 0.554688,-0.4882812 1.453125,-0.4882812 0.945313,0 1.503907,0.4960937 0.558593,0.4921875 0.558593,1.1484375 0,0.363281 -0.207031,0.6875 -0.203125,0.324219 -0.875,0.882813 -0.347656,0.289062 -0.433594,0.464843 -0.08203,0.175782 -0.07422,0.628907 z M 26.9375,14.25 l 0,-1.097656 1.097656,0 0,1.097656 -1.097656,0 z" />
+ </g>
+ <g id="declined" class="status">
+ <use style="fill:#ee0000;" xlink:href="#status" x="0" y="16" />
+ <rect x="9.5" y="26.75" width="4.25" height="1.5" />
+ </g>
+ <use id="needs-action" style="stroke-width:0.5; fill:#f4f444;" xlink:href="#status" x="16" y="16" />
+ <g id="delegated" class="status">
+ <use style="fill:#444444;" xlink:href="#status" x="0" y="32" />
+ <rect x="9" y="43" width="2.5" height="1" />
+ <polygon points="11.5,41, 11.5,46, 14.5,43.5" />
+ </g>
+
+ <!-- role/partstat icons -->
+ <use id="chair" class="req" xlink:href="#chairsymbol" x="16" y="32" />
+ <use id="individual-reqparticipant" class="req" xlink:href="#individual" x="32" y="0" />
+ <use id="group-reqparticipant" class="req" xlink:href="#group" x="48" y="0" />
+ <use id="resource-reqparticipant" class="req" xlink:href="#resource" x="64" y="0" />
+ <use id="room-reqparticipant" class="req" xlink:href="#room" x="80" y="0" />
+ <use id="unknown-reqparticipant" class="req" xlink:href="#unknown" x="96" y="0" />
+ <use id="individual-optparticipant" class="opt" xlink:href="#individual" x="32" y="16" />
+ <use id="group-optparticipant" class="opt" xlink:href="#group" x="48" y="16" />
+ <use id="resource-optparticipant" class="opt" xlink:href="#resource" x="64" y="16" />
+ <use id="room-optparticipant" class="opt" xlink:href="#room" x="80" y="16" />
+ <use id="unknown-optparticipant" class="opt" xlink:href="#unknown" x="96" y="16" />
+ <use id="individual-nonparticipant" class="non" xlink:href="#individual" x="32" y="32" />
+ <use id="group-nonparticipant" class="non" xlink:href="#group" x="48" y="32" />
+ <use id="resource-nonparticipant" class="non" xlink:href="#resource" x="64" y="32" />
+ <use id="room-nonparticipant" class="non" xlink:href="#room" x="80" y="32" />
+ <use id="unknown-nonparticipant" class="non" xlink:href="#unknown" x="96" y="32" />
+</svg>
diff --git a/comm/calendar/base/themes/common/calendar-occurrence-prompt.css b/comm/calendar/base/themes/common/calendar-occurrence-prompt.css
new file mode 100644
index 0000000000..90e96b55ae
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-occurrence-prompt.css
@@ -0,0 +1,67 @@
+/* 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/. */
+
+#calendar-occurrence-prompt {
+ padding: 0;
+ width: 25em;
+ height: 34ex;
+ min-width: 25em;
+ min-height: 34ex;
+ -moz-user-focus: ignore;
+}
+
+#occurrence-prompt-header {
+ height: 50px;
+ padding: 0 15px;
+ border: 1px solid var(--field-border-color);
+ background-color: var(--field-background-color);
+ color: var(--field-text-color);
+}
+
+#title-label {
+ font-weight: bold;
+}
+
+#accept-buttons-box {
+ padding: 0 18px;
+}
+
+.occurrence-accept-buttons {
+ margin: 10px 0;
+}
+
+.occurrence-accept-buttons > .button-box > .button-icon {
+ width: 18px;
+ height: 18px;
+}
+
+.occurrence-accept-buttons > .button-box > .button-text {
+ margin: 0 3px !important;
+}
+
+#accept-buttons-box {
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+#accept-buttons-box[type="mixed"] > #accept-occurrence-button,
+#accept-buttons-box[type="event"] > #accept-occurrence-button {
+ list-style-image: url(chrome://calendar/skin/shared/calendar-occurrence.svg#event-single);
+}
+
+#accept-buttons-box[type="mixed"] > #accept-parent-button,
+#accept-buttons-box[type="mixed"] > #accept-allfollowing-button,
+#accept-buttons-box[type="event"] > #accept-parent-button,
+#accept-buttons-box[type="event"] > #accept-allfollowing-button {
+ list-style-image: url(chrome://calendar/skin/shared/calendar-occurrence.svg#event-all);
+}
+
+#accept-buttons-box[type="task"] > .occurrence-accept-buttons {
+ list-style-image: url(chrome://calendar/skin/shared/calendar-occurrence.svg#task-single);
+}
+
+#accept-buttons-box[type="task"] > #accept-parent-button,
+#accept-buttons-box[type="task"] > #accept-allfollowing-button {
+ list-style-image: url(chrome://calendar/skin/shared/calendar-occurrence.svg#task-all);
+}
diff --git a/comm/calendar/base/themes/common/calendar-occurrence.svg b/comm/calendar/base/themes/common/calendar-occurrence.svg
new file mode 100644
index 0000000000..6a1de2d527
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-occurrence.svg
@@ -0,0 +1,20 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 18 18">
+ <style>
+ path {
+ display: none;
+ fill: context-fill;
+ stroke: context-fill;
+ }
+ path:target {
+ display: block;
+ stroke-width: 1;
+ }
+ </style>
+ <path id="event-single" d="m 10.5,7.5 h 3 v 7 h -2 v -5 h -1 z m -9,-5 v 14 h 15 v -14 h -2 v 2 h -2 V 1 4.5 h -2 v -2 h -3 v 2 h -2 V 1 4.5 h -2 v -2 z m 0,3 h 15 v 11 h -15 z m 3,2 h 3 v 7 h -2 v -5 h -1 z"/>
+ <path id="event-all" style="fill-opacity:0;" d="m 8.5,10.5 h 2 v 4 h -1 v -3 h -1 z m -7,-3 v 9 h 11 v -9 h -1 v 1 h -2 V 7 8.5 h -2 v -1 h -1 v 1 h -2 V 7 8.5 h -2 v -1 z m 2,3 h 2 v 4 h -1 v -3 h -1 z m 9,3 h 2 v -9 h -1 v 1 h -2 V 4 5.5 h -2 v -1 h -1 v 1 h -2 V 4 5.5 h -2 v -1 h -1 V 7 m 11,3.5 h 2 V 1.5 h -1 v 1 h -2 v -1.5 1.5 h -2 v -1 h -1 v 1 h -2 v -1.5 1.5 h -2 v -1 h -1 V 4"/>
+ <path id="task-single" d="m 4.5,2.5 h -2 v 14 h 13 v -14 h -2 v 2 h 2 l 0,12 h -13 l 0,-12 h 2 z m 2,-1 h 5 v 3 h -5 z M 5.1,10.8 6.7,9.2 8.5,10.7 12,7 l 1.5,1.5 -5,5 z"/>
+ <path id="task-all" style="fill-opacity:0;" d="M 9,2.5 7,2.5 m 6.5,8 h 3 V 2.5 H 15 m -4.5,-1 h 3 v 1 h -3 z m -4.5,4 H 4 M 10.5,13.5 h 3 V 5.5 H 12 m -4.5,-1 h 3 v 1 h -3 z M 3,8.5 H 1.5 v 8 h 9 v -8 H 9 m -4.5,-1 h 3 v 1 h -3 z m -1,6 0.7,-0.6 1.1,0.9 2.6,-2.6 0.7,0.6 L 5.5,15 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/calendar-preferences.css b/comm/calendar/base/themes/common/calendar-preferences.css
new file mode 100644
index 0000000000..f60303e3ae
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-preferences.css
@@ -0,0 +1,76 @@
+/* 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");
+
+#defaults-task-table,
+#alarm-defaults-table,
+#dayAndWeekViewsTable {
+ border-spacing: 0;
+}
+
+#defaults-task-table html|td,
+#alarm-defaults-table html|td,
+#dayAndWeekViewsTable html|td {
+ padding: 0;
+}
+
+#default_task_start,
+#default_task_due {
+ width: calc(100% - 16px); /* 16px is the sum of the element margins. */
+}
+
+#defaultsnoozelength {
+ margin-right: 10px;
+ margin-left: 10px;
+}
+
+#alarm-sound-table {
+ display: inline-table;
+}
+
+#eventdefalarm,
+#tododefalarm {
+ margin-inline-start: 12px;
+}
+
+#eventdefalarm,
+#tododefalarm,
+#alarmSoundFileField {
+ width: calc(100% - 8px); /* 8px is the sum of the element margins. */
+}
+
+#alarm-sound-buttons-box,
+#calendar\.prefs\.alarm\.sound\.useDefault {
+ width: 100%;
+}
+
+.defaultTimeBox {
+ width: 100%;
+ margin-inline-start: 8px;
+}
+
+#eventdefalarmunit,
+#tododefalarmunit {
+ margin-inline-end: 4px;
+}
+
+.dayOffCheckbox {
+ flex-direction: row-reverse;
+ margin-top: -5px;
+ margin-inline-end: -5px;
+ padding-inline-start: 6px;
+}
+
+.dayOffCheckbox > .checkbox-check {
+ margin-inline-start: 10px;
+}
+
+#daystarthour {
+ margin-inline-end: 18px;
+}
+
+#categorieslist {
+ height: 210px;
+}
diff --git a/comm/calendar/base/themes/common/calendar-print.css b/comm/calendar/base/themes/common/calendar-print.css
new file mode 100644
index 0000000000..1c7ec8b801
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-print.css
@@ -0,0 +1,66 @@
+/* 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/. */
+
+@import url("chrome://calendar/skin/shared/widgets/minimonth.css");
+
+#calendar-print {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ font: menu;
+ overflow: auto;
+}
+
+#calendar-print fieldset.section-block {
+ border: none;
+ padding: 0;
+ display: flex;
+}
+
+#calendar-print select#from-month,
+#calendar-print select#to-month {
+ flex: 1;
+}
+
+#calendar-print input#from-year,
+#calendar-print input#to-year {
+ flex: 1;
+ margin-block: 0;
+ margin-inline: 3px 0;
+}
+
+#calendar-print select {
+ width: 100%;
+}
+
+#calendar-print label.indent {
+ padding-inline-start: 1.5em;
+ box-sizing: border-box;
+}
+
+calendar-minimonth {
+ padding: 0;
+ width: 100%;
+}
+
+#next-button-container,
+#back-button-container {
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+}
+
+#next-button-container > button,
+#back-button-container > button {
+ flex: 1 1 auto;
+ margin: 0;
+}
+
+#back-button-container {
+ margin-bottom: 8px;
+}
+
+#button-container {
+ margin-top: 8px;
+}
diff --git a/comm/calendar/base/themes/common/calendar-providerUninstall-dialog.css b/comm/calendar/base/themes/common/calendar-providerUninstall-dialog.css
new file mode 100644
index 0000000000..a5d00adbc9
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-providerUninstall-dialog.css
@@ -0,0 +1,13 @@
+/* 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/. */
+
+#provider-name-label {
+ font-weight: bold;
+ margin-inline-start: 3em;
+}
+
+#calendar-list richlistitem[selected] {
+ color: unset;
+ background-color: unset;
+}
diff --git a/comm/calendar/base/themes/common/calendar-task-tree.css b/comm/calendar/base/themes/common/calendar-task-tree.css
new file mode 100644
index 0000000000..1f44446dcf
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-task-tree.css
@@ -0,0 +1,132 @@
+/* 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/. */
+
+.calendar-task-tree {
+ appearance: none;
+ margin: 0;
+}
+
+/* align the treechildren text */
+.calendar-task-tree > treechildren::-moz-tree-cell-text {
+ margin-top: 1px;
+ margin-bottom: 1px;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-cell-text(inprogress) {
+ color: green !important;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree > treechildren::-moz-tree-cell-text(inprogress) {
+ color: var(--color-green-50) !important;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-row(inprogress, selected, focus) {
+ background-color: green !important;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree > treechildren::-moz-tree-row(inprogress, selected, focus) {
+ background-color: var(--color-green-50) !important;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-cell-text(overdue) {
+ color: var(--color-red-50) !important;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree > treechildren::-moz-tree-cell-text(overdue) {
+ color: var(--color-red-40) !important;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-row(overdue, selected, focus) {
+ background-color: var(--color-red-50) !important;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree > treechildren::-moz-tree-row(overdue, selected, focus) {
+ background-color: var(--color-red-40) !important;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(inprogress, selected, focus),
+.calendar-task-tree > treechildren::-moz-tree-image(overdue, selected, focus),
+.calendar-task-tree > treechildren::-moz-tree-cell-text(inprogress, selected, focus),
+:root[lwt-tree-brighttext] .calendar-task-tree >
+ treechildren::-moz-tree-cell-text(inprogress, selected, focus),
+.calendar-task-tree > treechildren::-moz-tree-cell-text(overdue, selected, focus),
+:root[lwt-tree-brighttext] .calendar-task-tree >
+ treechildren::-moz-tree-cell-text(overdue, selected, focus) {
+ color: var(--selected-item-text-color) !important;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-cell-text(completed) {
+ text-decoration: line-through;
+ font-style: italic;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-cell-text(duetoday) {
+ font-weight: bold;
+}
+
+.calendar-task-tree-col-priority {
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-priority) {
+ margin-inline-start: -2px;
+ -moz-context-properties: stroke;
+ stroke: transparent;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-priority, highpriority) {
+ list-style-image: var(--icon-priority);
+ stroke: red;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree >
+ treechildren::-moz-tree-image(calendar-task-tree-col-priority, highpriority) {
+ stroke: var(--color-red-40);
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-priority, lowpriority) {
+ list-style-image: var(--icon-priority-low);
+ stroke: blue;
+}
+
+:root[lwt-tree-brighttext] .calendar-task-tree >
+ treechildren::-moz-tree-image(calendar-task-tree-col-priority, lowpriority) {
+ stroke: var(--color-white);
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-priority, selected) {
+ stroke: currentColor !important;
+}
+
+treecol.calendar-task-tree-col-percentcomplete {
+ text-align: end;
+}
+
+.calendar-task-tree-col-completed >.treecol-icon,
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-completed) {
+ width: 14px;
+ height: 14px;
+ -moz-context-properties: fill, fill-opacity, stroke, stroke-opacity;
+ fill: currentColor;
+ stroke: currentColor;
+ stroke-opacity: 0;
+}
+
+.calendar-task-tree-col-completed >.treecol-icon {
+ fill-opacity: 1;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-completed) {
+ list-style-image: var(--icon-checkbox);
+ fill-opacity: 0;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-completed, completed) {
+ fill-opacity: 1;
+}
+
+.calendar-task-tree > treechildren::-moz-tree-image(calendar-task-tree-col-completed, repeating) {
+ fill-opacity: 0.6;
+}
diff --git a/comm/calendar/base/themes/common/calendar-task-view.css b/comm/calendar/base/themes/common/calendar-task-view.css
new file mode 100644
index 0000000000..02e21bd3de
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-task-view.css
@@ -0,0 +1,236 @@
+/* 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[lwt-tree-brighttext] #calendar-task-details-container {
+ --toolbarbutton-hover-background: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .25));
+ --toolbarbutton-hover-bordercolor: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .5));
+ --toolbarbutton-header-bordercolor: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .25));
+ --toolbarbutton-active-background: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4));
+ --toolbarbutton-active-bordercolor: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .7));
+ --toolbarbutton-active-boxshadow: 0 0 0 1px var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4)) inset;
+ --toolbarbutton-checked-background: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .3));
+}
+
+#calendar-task-details-container {
+ overflow: hidden;
+}
+
+#calendar-task-details {
+ background-color: var(--layout-background-2);
+ display: flex;
+ flex-direction: column;
+ min-height: 6ex;
+}
+
+#calendar-task-details-attachment-row > hbox {
+ padding-inline-start: 0.1em;
+}
+
+#calendar-task-details-grid {
+ padding: 1px 2px 0.2em;
+ width: 100%;
+}
+
+#calendar-task-details-title {
+ font-weight: bold;
+}
+
+#calendar-task-details-grid > tr > th {
+ display: flex;
+ justify-content: end;
+ font-weight: normal;
+ white-space: nowrap;
+}
+
+#calendar-task-details-grid > tr > td {
+ padding-inline-start: 6px;
+ text-align: left;
+ width: 100%;
+}
+
+#calendar-task-details-grid > tr > td > label {
+ margin-inline-start: 0;
+}
+
+#other-actions-box {
+ display: flex;
+ justify-content: end;
+ padding-block: 2px 0.3em;
+}
+
+#task-addition-box {
+ border-bottom: 1px solid ThreeDShadow;
+}
+
+:root[lwt-tree] #task-addition-box {
+ background-color: var(--toolbar-bgcolor);
+ background-image: none;
+ color: var(--toolbar-color);
+}
+
+#task-addition-box:-moz-lwtheme {
+ border-color: var(--splitter-color);
+}
+
+:root[lwt-tree] #calendar-task-details-container {
+ background-color: var(--toolbar-bgcolor);
+ background-image: none;
+ color: var(--toolbar-color);
+ border-color: var(--sidebar-border-color, hsla(0,0%,60%,.4));
+}
+
+:root[lwt-tree-brighttext] #task-addition-box,
+:root[lwt-tree-brighttext] #calendar-task-details-container {
+ border-color: var(--sidebar-border-color, rgba(249,249,250,.2));
+}
+
+#calendar-task-details-box {
+ display: block;
+}
+
+#calendar-task-details-description-wrapper {
+ display: flex;
+}
+
+#calendar-task-details-description {
+ width: 100%;
+ box-sizing: border-box;
+ background-color: var(--layout-background-1);
+ border-width: 0;
+ border-top: 1px solid var(--splitter-color);
+ margin-block: 0;
+ padding-inline: 4px;
+ outline: none;
+ resize: none;
+}
+
+.task-details-name {
+ text-align: right;
+ color: windowtext;
+ opacity: 0.5; /* lower contrast */
+}
+
+#calendar-task-details-grid > .item-date-row > .headline {
+ font-weight: normal;
+ color: windowtext;
+ opacity: 0.5; /* lower contrast */
+}
+
+#calendar-task-details-attachment-row {
+ border-top: 1px solid var(--splitter-color);
+ padding-block: 2px;
+}
+
+#calendar-task-details-attachment-rows {
+ max-height: 60px;
+}
+
+.task-details-value {
+ text-align: left;
+ color: WindowText;
+}
+
+:root[lwt-tree] .task-details-name,
+:root[lwt-tree] .task-details-value,
+:root[lwt-tree] #calendar-task-details-grid > .item-date-row > .headline {
+ color: inherit;
+}
+
+#calendar-task-tree {
+ background-color: var(--layout-background-0);
+ color: var(--layout-color-1);
+ min-height: 98px;
+}
+
+#calendar-task-tree-detail {
+ border-top: 1px solid ThreeDShadow;
+ margin: 3px 0;
+}
+
+#calendar-task-tree-detail:-moz-lwtheme {
+ border-top-color: var(--splitter-color);
+}
+
+#view-task-edit-field {
+ margin: 5px;
+ padding-block: 0;
+}
+
+.task-edit-field[readonly="true"] {
+ color: GrayText;
+}
+
+#unifinder-task-edit-field {
+ margin: 3px;
+}
+
+#unifinder-todo-tree > .calendar-task-tree {
+ margin-bottom: 3px;
+}
+
+/* ::::: task actions toolbar ::::: */
+
+#calendar-add-task-button {
+ appearance: none;
+ -moz-user-focus: normal;
+ border: 1px solid transparent;
+ border-radius: var(--button-border-radius);
+ margin-inline-start: 5px;
+ list-style-image: var(--icon-new-task);
+ -moz-context-properties: fill, fill-opacity, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ fill-opacity: var(--toolbarbutton-icon-fill-opacity);
+}
+
+#calendar-add-task-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;
+}
+
+#calendar-add-task-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;
+}
+
+#calendar-add-task-button:focus-visible:not(:hover) {
+ outline: 2px solid var(--focus-outline-color);
+ outline-offset: var(--focus-outline-offset);
+}
+
+#calendar-add-task-button > .toolbarbutton-text {
+ padding-inline-start: 5px;
+}
+
+#task-actions-category {
+ list-style-image: var(--icon-tag);
+}
+
+#task-actions-markcompleted {
+ list-style-image: var(--icon-check);
+}
+
+#task-actions-priority {
+ list-style-image: var(--icon-priority);
+}
+
+#calendar-delete-task-button {
+ list-style-image: var(--icon-trash);
+}
+
+.input-container {
+ display: flex;
+ align-items: stretch;
+}
+
+.input-container html|input {
+ flex-grow: 1;
+}
diff --git a/comm/calendar/base/themes/common/calendar-toolbar.css b/comm/calendar/base/themes/common/calendar-toolbar.css
new file mode 100644
index 0000000000..1ff326015c
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-toolbar.css
@@ -0,0 +1,21 @@
+/* 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/. */
+
+/* Calendar tool bar button */
+#lightning-button-calendar {
+ list-style-image: var(--icon-calendar);
+}
+
+/* Tasks tool bar button */
+#lightning-button-tasks {
+ list-style-image: var(--icon-tasks);
+}
+
+#extractEventButton {
+ list-style-image: var(--icon-new-event);
+}
+
+#extractTaskButton {
+ list-style-image:var(--icon-new-task);
+}
diff --git a/comm/calendar/base/themes/common/calendar-unifinder.css b/comm/calendar/base/themes/common/calendar-unifinder.css
new file mode 100644
index 0000000000..50d1d0152c
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar-unifinder.css
@@ -0,0 +1,40 @@
+/* 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/. */
+
+:root[lwt-tree-brighttext] #unifinder-searchBox {
+ --toolbarbutton-hover-background: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .25));
+ --toolbarbutton-hover-bordercolor: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .5));
+ --toolbarbutton-header-bordercolor: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .25));
+ --toolbarbutton-active-background: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4));
+ --toolbarbutton-active-bordercolor: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .7));
+ --toolbarbutton-active-boxshadow: 0 0 0 1px var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4)) inset;
+ --toolbarbutton-checked-background: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .3));
+}
+
+/* only format Unifinder lists */
+#unifinder-search-results-tree > treechildren::-moz-tree-cell-text(highpriority) {
+ font-weight: bold;
+}
+
+#unifinder-search-results-tree > treechildren::-moz-tree-cell-text(lowpriority) {
+ font-style: italic;
+ opacity: 0.6;
+}
+
+/* workaround to avoid Window Flick */
+#unifinder-search-results-tree {
+ appearance: none;
+ min-height: 92px;
+ margin: 0;
+}
+
+:root[lwt-tree] #unifinder-searchBox {
+ background-color: var(--toolbar-bgcolor);
+ background-image: none;
+ color: var(--toolbar-color);
+}
+
+#unifinder-searchBox:-moz-lwtheme {
+ border-bottom-color: var(--splitter-color);
+}
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;
+}
diff --git a/comm/calendar/base/themes/common/calendar.css b/comm/calendar/base/themes/common/calendar.css
new file mode 100644
index 0000000000..4914623d85
--- /dev/null
+++ b/comm/calendar/base/themes/common/calendar.css
@@ -0,0 +1,255 @@
+/* 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/. */
+
+/* For deactivating calendar, see calCalendarDeactivator.jsm. */
+:root[calendar-deactivated] .hide-when-calendar-deactivated {
+ display: none;
+}
+
+/* ::: new tab buttons ::: */
+#calendar-tab-button,
+#newMsgButton-calendar-menuitem {
+ list-style-image: var(--icon-calander);
+}
+
+#task-tab-button,
+#newMsgButton-task-menuitem {
+ list-style-image: var(--icon-tasks);
+}
+
+:root[lwt-tree] #calSidebar {
+ background-color: var(--sidebar-background-color);
+ color: var(--sidebar-text-color);
+}
+
+#calSidebar {
+ background-color: var(--layout-background-2);
+ overflow: hidden;
+ flex-shrink: 0;
+ min-width: 175px;
+}
+
+#calendarContent {
+ background-color: var(--layout-background-0);
+}
+
+/* Avoids contributing to the min width when Calendar is not selected. */
+#calendarTabPanel:not([selected]) {
+ visibility: collapse;
+}
+
+#calendarDisplayBox {
+ overflow: auto;
+}
+
+/* Invitations link in status bar */
+#calendar-invitations-label {
+ margin-block: 3px;
+}
+
+/* Today pane button in status bar */
+#calendar-status-todaypane-button,
+#calendar-status-todaypane-button[checked="true"] {
+ min-width: 0;
+ min-height: 0;
+ margin: 1px 0 0;
+ appearance: none;
+ border-radius: var(--button-border-radius);
+ border: 1px solid transparent;
+}
+
+#calendar-status-todaypane-button:hover {
+ background: var(--toolbarbutton-hover-background);
+ border-color: var(--toolbarbutton-hover-bordercolor);
+ box-shadow: var(--toolbarbutton-hover-boxshadow);
+}
+
+#calendar-status-todaypane-button:hover:active {
+ background: var(--toolbarbutton-active-background);
+ border-color: var(--toolbarbutton-active-bordercolor);
+ box-shadow: var(--toolbarbutton-active-boxshadow);
+ transition-duration: 10ms;
+}
+
+#calendar-status-todaypane-button > stack > .toolbarbutton-icon-begin {
+ width: 16px;
+ height: 16px;
+ -moz-context-properties: fill, stroke, fill-opacity;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ fill-opacity: var(--toolbarbutton-icon-fill-opacity);
+}
+
+#calendar-status-todaypane-button > stack > .toolbarbutton-day-text {
+ text-align: center;
+ margin-inline-start: 0;
+ margin-bottom: 0;
+ font-size: 7pt;
+ font-family: Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ text-shadow: none;
+ background-color: transparent;
+}
+
+#calendar-status-todaypane-button[hideLabel] > .toolbarbutton-text,
+#calendar-status-todaypane-button[hideLabel] > .toolbarbutton-icon-end {
+ display: none;
+}
+
+#calendar-status-todaypane-button > .toolbarbutton-icon-end {
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+#calendar-status-todaypane-button[checked="true"] > .toolbarbutton-icon-end {
+ transform: scaleY(-1);
+}
+
+/* iMIP notification bar */
+.calendar-notification-bar {
+ background-color: var(--color-blue-10);
+ padding: 3px;
+}
+
+@media (prefers-color-scheme: dark) {
+ .calendar-notification-bar {
+ background-color: var(--color-purple-40);
+ }
+}
+
+@media (prefers-contrast) {
+ .calendar-notification-bar:not(:-moz-lwtheme) {
+ background-color: var(--selected-item-color);
+ }
+
+ .calendar-notification-bar:not(:-moz-lwtheme) > *:not(#imip-view-toolbox) {
+ color: var(--selected-item-text-color);
+ }
+}
+
+.calendar-notification-bar {
+ margin: 0 4px 4px;
+ border-radius: 4px;
+ box-shadow: 0 1px 2px rgba(58, 57, 68, 0.3);
+}
+
+#imip-view-toolbar {
+ --imip-button-background: var(--layout-background-1);
+}
+
+#imip-bar > img {
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ width: 20px;
+}
+
+#imip-view-toolbar > .toolbarbutton-1[is="toolbarbutton-menu-button"] {
+ border-radius: var(--button-border-radius);
+}
+
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button {
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ margin-inline-start: 6px;
+}
+
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button > .toolbarbutton-menubutton-button,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button > .toolbarbutton-menubutton-dropmarker {
+ border-color: var(--toolbarbutton-header-bordercolor);
+ background-image: linear-gradient(var(--imip-button-background), var(--imip-button-background));
+}
+
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button:not(:active):hover,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button:is(:hover,[open="true"]) >
+ .toolbarbutton-menubutton-button,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button:hover >
+ .toolbarbutton-menubutton-dropmarker {
+ background-image: linear-gradient(var(--toolbarbutton-hover-background),
+ var(--toolbarbutton-hover-background)),
+ linear-gradient(var(--imip-button-background), var(--imip-button-background));
+}
+
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button:not([is="toolbarbutton-menu-button"]):hover:active,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button[is="toolbarbutton-menu-button"] >
+ .toolbarbutton-menubutton-button:hover:active,
+#imip-view-toolbar > .toolbarbutton-1.message-header-view-button[open="true"] >
+ .toolbarbutton-menubutton-dropmarker {
+ background-image: linear-gradient(var(--toolbarbutton-active-background),
+ var(--toolbarbutton-active-background)),
+ linear-gradient(var(--imip-button-background), var(--imip-button-background));
+}
+
+.imipMoreButton > .toolbarbutton-icon {
+ display: none;
+}
+
+.imipAcceptRecurrencesButton,
+.imipAcceptButton {
+ list-style-image: var(--icon-check);
+}
+
+.imipDeclineCounterButton,
+.imipDeclineRecurrencesButton,
+.imipDeclineButton {
+ list-style-image: var(--icon-close);
+}
+
+.imipTentativeRecurrencesButton,
+.imipTentativeButton {
+ list-style-image: var(--icon-tentative);
+}
+
+.imipDetailsButton {
+ list-style-image: var(--icon-search);
+}
+
+.imipAddButton {
+ list-style-image: var(--icon-new-event);
+}
+
+.imipRescheduleButton,
+.imipUpdateButton {
+ list-style-image: var(--icon-sync);
+}
+
+.imipDeleteButton {
+ list-style-image: var(--icon-trash);
+}
+
+.imipReconfirmButton {
+ list-style-image: var(--icon-priority);
+}
+
+.imipGoToCalendarButton {
+ list-style-image: var(--icon-calendar-imip);
+}
+
+.imipAcceptLabel {
+ font-weight: bold;
+ font-style: italic;
+}
+
+#calsidebar_splitter,
+#today-splitter {
+ /* splitter grip area */
+ width: 5px;
+ border-width: 0;
+ min-width: 0;
+ margin-top: 0;
+ /* because of the negative margin needed to make the splitter visible */
+ position: relative;
+ z-index: 10;
+ transition: border-width .3s ease-in;
+}
+
+#calsidebar_splitter[state="collapsed"] {
+ border-inline-start: 1px solid transparent;
+}
+
+#calsidebar_splitter[state="collapsed"]:hover {
+ border-inline-start: 4px solid var(--selected-item-color);
+}
diff --git a/comm/calendar/base/themes/common/datetimepickers.css b/comm/calendar/base/themes/common/datetimepickers.css
new file mode 100644
index 0000000000..94c184b8eb
--- /dev/null
+++ b/comm/calendar/base/themes/common/datetimepickers.css
@@ -0,0 +1,260 @@
+/* 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/. */
+
+/*--------------------------------------------------------------------
+ * Datepicker (text field with minimonth popup)
+ *-------------------------------------------------------------------*/
+
+@import url("chrome://messenger/skin/menulist.css");
+
+timepicker-grids {
+ --tpMainColor: -moz-DialogText;
+ --tpMainBackground: -moz-Dialog;
+ --tpBorderColor: ThreeDShadow;
+ --tpSubColor: -moz-DialogText;
+ --tpSubBackground: -moz-Dialog;
+ --tpFiveminColor: WindowText;
+ --tpFiveminBackground: Window;
+ --tpItemHoverColor: InactiveCaptionText;
+ --tpItemHoverBackground: InactiveCaption;
+ --tbHighlightColor: var(--selected-item-text-color);
+ --tbHighlightBackground: var(--selected-item-color);
+}
+
+:root[lwt-tree] timepicker-grids {
+ --tpMainColor: var(--sidebar-text-color);
+ --tpMainBackground: var(--sidebar-background-color);
+ --tpBorderColor: rgba(0, 0, 0, 0.5);
+ --tpSubColor: var(--tpMainColor);
+ --tpSubBackground: rgba(0, 0, 0, 0.1);
+ --tpFiveminColor: var(--tpMainColor);
+ --tpFiveminBackground: transparent;
+ --tpItemHoverColor: var(--tpMainColor);
+ --tpItemHoverBackground: rgba(0, 0, 0, 0.3);
+}
+
+:root[lwt-tree-brighttext] timepicker-grids {
+ --tpBorderColor: rgba(255, 255, 255, 0.5);
+ --tpSubBackground: rgba(255, 255, 255, 0.15);
+ --tpItemHoverBackground: rgba(255, 255, 255, 0.3);
+ --tbHighlightColor: #fff;
+ --tbHighlightBackground: #0a84ff;
+}
+
+/* menulist */
+datepicker > menulist::part(text-input) {
+ width: 9em;
+}
+
+/*-------------------------------------------------------------------
+ * Timepicker (text menulist with popup)
+ *-------------------------------------------------------------------*/
+
+timepicker > menulist::part(text-input) {
+ width: 6em;
+}
+
+/*-------------------------------------------------------------------
+ * popup (from timepicker/timepicker.css)
+ *-------------------------------------------------------------------*/
+
+.timepicker-menulist > menupopup::part(content) {
+ --panel-padding: 3px;
+}
+
+/* Box that occupies whole window */
+
+.time-picker-grids {
+ background-color: var(--tpMainBackground);
+ font-size: 8pt;
+ margin: 1px 1px 2px;
+}
+
+/* Grid for hours */
+
+.time-picker-hour-grid {
+ border-block: 1px solid var(--tpBorderColor);
+ border-inline-end: 1px solid var(--tpBorderColor);
+ margin: 1px;
+}
+
+/* Boxes with AM/PM labels */
+
+.timepicker-amLabelBox-class,
+.timepicker-pmLabelBox-class {
+ border-inline-start: 3px double var(--tpBorderColor);
+ background-color: var(--tpFiveminBackground);
+ color: var(--tpFiveminColor);
+}
+
+/* Box in each cell of the grid for hours */
+
+.time-picker-hour-box-class {
+ background-color: var(--tpSubBackground);
+ color: var(--tpMainColor);
+}
+
+.time-picker-hour-grid[format12hours="false"] .time-picker-hour-box-class {
+ min-width: 28px;
+ align-items: center;
+ border-inline-start: 1px solid var(--tpBorderColor);
+}
+
+.time-picker-hour-grid[format12hours="true"] .time-picker-hour-box-class {
+ min-width: 24px;
+ align-items: center;
+ border-inline-start: 1px solid var(--tpBorderColor);
+}
+
+.timepicker-topRow-hour-class {
+ border-bottom: 1px solid var(--tpBorderColor);
+}
+
+.time-picker-hour-grid[format12hours="true"] .timepicker-topRow-hour-class {
+ border-bottom: 3px double var(--tpBorderColor);
+}
+
+.time-picker-hour-box-class:hover {
+ background-color: var(--tpItemHoverBackground);
+ color: var(--tpItemHoverColor);
+ cursor: pointer;
+}
+
+/* selected hour box */
+
+.time-picker-hour-box-class[selected="true"],
+.time-picker-hour-box-class[selected="true"]:hover {
+ background-color: var(--tbHighlightBackground);
+ color: var(--tbHighlightColor);
+}
+
+/* label inside each minute/hour */
+
+.time-picker-minute-label,
+.time-picker-hour-label {
+ text-align: center;
+}
+
+.time-picker-minute-label:hover,
+.time-picker-hour-label:hover {
+ cursor: pointer !important;
+}
+
+
+.time-picker-minute-box-class {
+ align-items: center;
+ border-inline-end: 1px solid var(--tpBorderColor);
+ border-bottom: 1px solid var(--tpBorderColor);
+}
+
+.time-picker-minute-box-class:hover {
+ cursor: pointer;
+ background-color: var(--tpSubBackground);
+ color: var(--tpSubColor);
+}
+
+/* box around five minute grid */
+
+.time-picker-five-minute-grid-box {
+ min-width: 195px;
+ margin-inline-start: 1px;
+}
+
+/* five minute grid */
+
+.time-picker-five-minute-grid {
+ margin-top: 2px;
+ margin-inline-end: 1px;
+ border-top: 1px solid var(--tpBorderColor);
+ border-inline: 1px solid var(--tpBorderColor);
+ background-color: var(--tpFiveminBackground);
+ color: var(--tpFiveminColor);
+}
+
+
+/* box in five-minute grid elements */
+
+.time-picker-five-minute-class:hover {
+ background-color: var(--tpItemHoverBackground);
+ color: var(--tpItemHoverColor);
+ cursor: pointer;
+}
+
+.time-picker-minute-label[selected="true"]:hover {
+ background-color: var(--tbHighlightBackground);
+ color: var(--tbHighlightColor);
+ cursor: pointer;
+}
+
+
+/* selected five-minute grid element box */
+
+.time-picker-five-minute-class[selected="true"] {
+ background-color: var(--tbHighlightBackground);
+ color: var(--tbHighlightColor);
+}
+
+/* box around one minute grid */
+.time-picker-one-minute-grid-box {
+ min-width: 195px;
+ margin-inline-start: 1px;
+}
+
+/* one minute grid */
+
+.time-picker-one-minute-grid {
+ margin-top: 2px;
+ margin-inline-end: 1px;
+ border-top: 1px solid var(--tpBorderColor);
+ border-inline: 1px solid var(--tpBorderColor);
+ background-color: var(--tpFiveminBackground);
+ color: var(--tpFiveminColor);
+}
+
+/* box in one-minute grid elements */
+
+.time-picker-one-minute-class {
+ align-items: center;
+}
+
+.time-picker-one-minute-class:hover {
+ background-color: var(--tpItemHoverBackground);
+ color: var(--tpItemHoverColor);
+ cursor: pointer;
+}
+
+.time-picker-one-minute-class[selected="true"]>label:hover {
+ background-color: var(--tbHighlightBackground) !important;
+ color: var(--tbHighlightColor) !important;
+ cursor: pointer;
+}
+
+/* selected one-minute grid element box */
+
+.time-picker-one-minute-class[selected="true"]{
+ background-color: var(--tbHighlightBackground);
+ color: var(--tbHighlightColor);
+}
+
+.time-picker-more-control-label {
+ background-color: var(--tbHighlightBackground);
+ color: var(--tbHighlightColor);
+ margin: 0;
+ border: 1px solid var(--tpSubBackground);
+ padding-inline: 8px;
+ font-size: 1rem;
+}
+
+.time-picker-more-control-label:hover {
+ border-color: var(--tpBorderColor);
+}
+
+/* line across the bottom of the minute boxes, made to line up with more & less tabs */
+
+.time-picker-minutes-bottom {
+ background-color: var(--tpSubBackground);
+ color: var(--tpSubColor);
+ border: 1px solid var(--tpBorderColor);
+ margin-inline-end: 1px;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-alarm-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-alarm-dialog.css
new file mode 100644
index 0000000000..cfcf1615fc
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-alarm-dialog.css
@@ -0,0 +1,112 @@
+/* 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/. */
+
+#calendar-alarm-dialog[lwt-tree] {
+ background-color: var(--lwt-accent-color);
+ color: var(--lwt-text-color);
+}
+
+/* Alarm dialog styles */
+#alarm-richlist {
+ margin: 10px;
+ text-shadow: none;
+}
+
+#alarm-actionbar {
+ min-width: 1px;
+ margin: 0 5px 10px;
+}
+
+/* Alarm widget specific styles */
+richlistitem[is="calendar-alarm-widget-richlistitem"] {
+ border-bottom: 1px dotted ThreeDShadow;
+ padding: 6px 7px;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] {
+ padding: 0 5px;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] .alarm-title-label {
+ font-weight: bold;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] .alarm-action-buttons {
+ display: flex;
+ color: var(--field-text-color);
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] > hbox {
+ margin: 5px;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] .alarm-relative-date-label,
+.additional-information-box,
+.alarm-action-buttons {
+ display: none;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] .additional-information-box,
+richlistitem[is="calendar-alarm-widget-richlistitem"][selected="true"] .action-buttons-box {
+ display: flex;
+}
+
+.alarm-calendar-event {
+ overflow: hidden;
+}
+
+.alarm-location-description {
+ display: flex;
+}
+
+.alarm-details-label {
+ color: inherit !important;
+ text-decoration: underline;
+}
+
+.alarm-calendar-image {
+ -moz-context-properties: fill;
+ fill: currentColor;
+ margin-top: 2px;
+}
+
+richlistitem[is="calendar-alarm-widget-richlistitem"]:not([selected="true"]) .alarm-calendar-image {
+ display: none;
+}
+
+.snooze-popup-button {
+ min-width: 0;
+ appearance: none;
+ margin-inline-end: 2px;
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+.snooze-popup-button:hover {
+ background-color: var(--button-hover-background-color);
+}
+
+.snooze-popup-ok-button {
+ list-style-image: url(chrome://calendar/skin/shared/icons/complete.svg);
+}
+
+.snooze-popup-cancel-button {
+ list-style-image: url(chrome://calendar/skin/shared/icons/decline.svg);
+}
+
+.snooze-popup-button > .button-box > .button-icon {
+ margin: 0;
+}
+
+.snooze-popup-button > .button-box {
+ border: 0;
+ padding: 0;
+ justify-content: center;
+ align-items: center;
+}
+
+.snooze-popup-button:focus > .button-box {
+ border: 1px dotted ThreeDDarkShadow;
+ padding: 0;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-event-dialog-attendees.css b/comm/calendar/base/themes/common/dialogs/calendar-event-dialog-attendees.css
new file mode 100644
index 0000000000..ede57761dd
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-event-dialog-attendees.css
@@ -0,0 +1,264 @@
+/* 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/. */
+
+#spacer {
+ border: 1px solid transparent;
+}
+
+#attendee-list {
+ margin: 0;
+ border: 1px solid var(--field-border-color);
+ overflow-x: scroll;
+ background-attachment: local;
+ background-color: var(--field-background-color);
+ background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2250%22%20height%3D%2221%22%3E%3Cpath%20d%3D%22M49.5%2020.5H0%22%20fill%3D%22none%22%20stroke%3D%22threedshadow%22%20stroke-width%3D%221%22%2F%3E%3C%2Fsvg%3E%0A);
+ color: var(--field-text-color);
+}
+
+.attendees-grid-container {
+ width: 540px;
+ overflow-y: auto;
+}
+
+event-attendee {
+ height: 21px;
+ padding: 0 4px 1px;
+ display: flex;
+ align-items: center;
+}
+
+event-attendee > .role-icon {
+ margin: 0;
+}
+
+event-attendee > input {
+ flex: 1 1 auto;
+ outline: none !important;
+}
+
+/* Autocomplete labels
+ * These styles match those in chrome://messenger/skin/shared/messenger.css. */
+
+span.ac-emphasize-text {
+ font-weight: bold;
+}
+
+.autocomplete-richlistitem[type$="-abook"]:not([ac-comment=""]) > .ac-url,
+.autocomplete-richlistitem[type$="-abook"]:not([ac-comment=""]) > .ac-separator {
+ display: flex;
+}
+
+.autocomplete-richlistitem[type$="-abook"]:not([ac-comment=""]) > .ac-url {
+ order: 1;
+}
+
+.autocomplete-richlistitem[type$="-abook"]:not([ac-comment=""]) > .ac-separator {
+ order: 2;
+}
+
+.autocomplete-richlistitem[type$="-abook"]:not([ac-comment=""]) > .ac-title {
+ order: 3;
+}
+
+.ac-url-text {
+ max-width: unset !important;
+}
+
+#outer > splitter {
+ background-color: transparent;
+ border: none;
+}
+
+#day-header-outer {
+ border: 1px solid var(--field-border-color);
+ border-bottom: none;
+ overflow: hidden;
+ background-color: var(--field-background-color);
+ color: var(--field-text-color);
+ text-align: center;
+}
+
+#day-header-inner {
+ padding-bottom: 6px;
+ background-position: left bottom;
+ background-repeat: repeat-x;
+}
+
+#day-header-inner.twoMinorColumns {
+ background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2260%22%20height%3D%226%22%20fill%3D%22none%22%20stroke%3D%22threedshadow%22%20stroke-width%3D%221%22%3E%3Cpath%20d%3D%22M59.5%200V6%22%2F%3E%3C%2Fsvg%3E);
+}
+
+#day-header-inner.threeMinorColumns {
+ background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2290%22%20height%3D%226%22%20fill%3D%22none%22%20stroke%3D%22threedshadow%22%20stroke-width%3D%221%22%3E%3Cpath%20d%3D%22M89.5%200V6%22%2F%3E%3C%2Fsvg%3E);
+}
+
+calendar-day {
+ border-inline-end: 1px solid var(--field-border-color);
+ flex-direction: column;
+ justify-content: flex-end;
+}
+
+.day-label {
+ margin: 2px 0;
+ text-align: center;
+ font-weight: 600;
+}
+
+.hour-label {
+ margin: 0 0 2px;
+}
+
+#freebusy-grid {
+ margin: 0;
+ border: 1px solid var(--field-border-color);
+ overflow: scroll auto;
+ background-color: var(--field-background-color);
+ color: var(--field-text-color);
+}
+
+.day-column {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+}
+
+.day-off {
+ background-color: var(--viewWeekendBackground);
+}
+
+.time-off {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ background-color: var(--viewOffTimeBackground);
+}
+
+.day-off > .time-off {
+ background-color: var(--viewMonthDayOffLabelBackground);
+}
+
+#freebusy-grid-inner {
+ overflow: hidden;
+}
+
+#freebusy-grid-inner.twoMinorColumns {
+ background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2260%22%20height%3D%2221%22%20fill%3D%22none%22%20stroke%3D%22threedshadow%22%20stroke-width%3D%221%22%3E%3Cpath%20d%3D%22M59.5%200V20.5H0%22%2F%3E%3Cpath%20d%3D%22M29.5%200V20.5%22%20stroke-opacity%3D%220.33%22%20stroke-dasharray%3D%2215%25%22%2F%3E%3C%2Fsvg%3E);
+}
+
+#freebusy-grid-inner.threeMinorColumns {
+ background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2290%22%20height%3D%2221%22%20fill%3D%22none%22%20stroke%3D%22threedshadow%22%20stroke-width%3D%221%22%3E%3Cpath%20d%3D%22M89.5%200V20.5H0%22%2F%3E%3Cpath%20d%3D%22M29.5%200V20.5%22%20stroke-opacity%3D%220.44%22%2F%3E%3Cpath%20d%3D%22M59.5%200V20.5%22%20stroke-opacity%3D%220.44%22%2F%3E%3C%2Fsvg%3E);
+}
+
+.freebusy-row {
+ position: relative;
+ height: 21px;
+ box-sizing: border-box;
+ padding: 2px 0 3px;
+}
+
+.freebusy-row > .pending {
+ position: absolute;
+ top: 0;
+ bottom: 1px;
+ background-color: #999;
+}
+
+.freebusy-row > .busy,
+.freebusy-row > .tentative,
+.freebusy-row > .unavailable,
+.freebusy-row > .unknown {
+ position: absolute;
+ top: 2px;
+ bottom: 3px;
+}
+.freebusy-row > .busy {
+ background-color: #153e7e;
+}
+.freebusy-row > .tentative {
+ background-color: #1589ff;
+}
+.freebusy-row > .unavailable {
+ background-color: #4e387e;
+}
+.freebusy-row > .unknown {
+ background-color: #e09ebd;
+}
+
+#event-bar-top {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ box-sizing: border-box;
+ border: 1px #f045a5 solid;
+ border-bottom: none;
+ cursor: move;
+ background-color: rgba(240, 69, 165, 0.44);
+}
+
+#event-bar-bottom {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ box-sizing: border-box;
+ border: 1px #f045a5 solid;
+ border-top: none;
+ background-color: rgba(240, 69, 165, 0.44);
+}
+
+.zoom-in-icon,
+.zoom-out-icon {
+ margin: 3px;
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+}
+
+.zoom-in-icon[disabled="true"],
+.zoom-out-icon[disabled="true"] {
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 10%, transparent);
+ stroke: color-mix(in srgb, currentColor 40%, transparent);
+}
+
+.zoom-in-icon {
+ list-style-image: var(--font-size-increase);
+}
+
+.zoom-out-icon {
+ list-style-image: var(--font-size-decrease);
+}
+
+.legend {
+ display: flex;
+ width: 3em;
+ height: 1em;
+ border-top: 1px solid #a1a1a1;
+ border-bottom: 1px solid #dddddd;
+ border-inline: 1px solid #c3c3c3;
+}
+
+.legend[status="FREE"] {
+ background-color: #ebebe4;
+ color: #ebebe4;
+}
+
+.legend[status="BUSY"] {
+ background-color: #153e7e;
+ color: #153e7e;
+}
+
+.legend[status="BUSY_TENTATIVE"] {
+ background-color: #1589ff;
+ color: #1589ff;
+}
+
+.legend[status="BUSY_UNAVAILABLE"] {
+ background-color: #4e387e;
+ color: #4e387e;
+}
+
+.legend[status="UNKNOWN"] {
+ background-color: #e09ebd;
+ color: #e09ebd;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-event-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-event-dialog.css
new file mode 100644
index 0000000000..e2fa244a2c
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-event-dialog.css
@@ -0,0 +1,677 @@
+/* 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");
+
+#calendar-event-window,
+#calendar-task-window {
+ min-width: 43em;
+ min-height: 51em;
+}
+
+#calendar-event-dialog:-moz-lwtheme,
+#calendar-task-dialog:-moz-lwtheme {
+ background-color: transparent;
+}
+
+:root:not([lwt-tree]):-moz-lwtheme #calendar-item-panel-iframe {
+ background-color: -moz-Dialog;
+}
+#calendar-event-dialog-inner:-moz-lwtheme,
+#calendar-task-dialog-inner:-moz-lwtheme {
+ background-image: none !important;
+}
+
+#calendar-event-dialog,
+#calendar-task-dialog,
+#calendar-event-dialog-inner,
+#calendar-event-summary-dialog,
+#calendar-task-dialog-inner {
+ padding: 0;
+}
+
+#calendar-event-dialog .todo-only,
+#calendar-task-dialog .event-only,
+#calendar-event-dialog-inner .todo-only,
+#calendar-task-dialog-inner .event-only {
+ display: none;
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog toolbar buttons
+ *-------------------------------------------------------------------*/
+
+.cal-event-toolbarbutton {
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+}
+
+#button-save {
+ list-style-image: var(--icon-download);
+}
+
+#button-save[mode="send"] {
+ list-style-image: var(--icon-sent);
+}
+
+#saveandcloseButton,
+#button-saveandclose {
+ list-style-image: var(--icon-download);
+}
+
+#button-saveandclose[mode="send"] {
+ list-style-image: var(--icon-sent);
+}
+
+#button-attendees {
+ list-style-image: var(--icon-address-book);
+}
+
+#button-privacy {
+ list-style-image: var(--icon-lock);
+}
+
+#button-url {
+ list-style-image: var(--icon-attachment);
+}
+
+#deleteButton,
+#button-delete.cal-event-toolbarbutton {
+ /* !important to override the SM #button-delete states */
+ list-style-image: var(--icon-trash) !important;
+}
+
+#button-priority {
+ list-style-image: var(--icon-priority);
+}
+
+#button-status {
+ list-style-image: var(--icon-event-status);
+}
+
+#button-freebusy {
+ list-style-image: var(--icon-clock);
+}
+
+#button-timezones {
+ list-style-image: var(--icon-globe);
+}
+
+#acceptButton {
+ list-style-image: var(--icon-check);
+}
+
+#tentativeButton {
+ list-style-image: var(--icon-tentative);
+}
+
+#declineButton {
+ list-style-image: var(--icon-close);
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog counter box section
+ *-------------------------------------------------------------------*/
+
+#counter-proposal-box {
+ background-color: rgb(186, 238, 255);
+ border-bottom: 1px solid #444444;
+}
+
+#counter-proposal-box > vbox:not(#counter-buttons) {
+ color: #000;
+}
+
+#counter-proposal-property-values > description {
+ margin-bottom: 2px;
+}
+
+#counter-proposal-summary {
+ font-weight: bold;
+}
+
+.counter-buttons {
+ max-height: 25px;
+}
+
+#yearly-period-of-label,
+label.label {
+ text-align: right;
+}
+
+#item-calendar,
+.item-calendar,
+#item-categories,
+#item-repeat,
+.item-alarm,
+.datepicker-text-class {
+ min-width: 12em;
+}
+
+.cal-event-toolbarbutton .toolbarbutton-icon {
+ width: 18px;
+ height: 18px;
+}
+
+#event-grid {
+ padding-top: 8px;
+ padding-inline-start: 8px;
+ padding-inline-end: 10px;
+ border-spacing: 0;
+}
+
+#event-grid > tr > th {
+ text-align: left;
+ font-weight: normal;
+}
+
+#event-grid > tr > td {
+ width: 100%;
+}
+
+#event-grid-tab-box-row,
+#event-grid-tabbox,
+.event-grid-tabpanels {
+ flex: 1;
+}
+
+.event-input-td > input {
+ flex: 1;
+}
+
+#item-calendar,
+.item-calendar,
+#item-categories {
+ flex: 1;
+ width: 100%;
+}
+
+#item-calendar::part(icon) {
+ margin-inline: 7px 3px;
+}
+
+#item-calendar::part(icon),
+#item-calendar > menupopup > menuitem .menu-iconic-icon,
+#item-categories::part(color) {
+ width: 10px;
+ height: 10px;
+ border-radius: 5px;
+ background-color: var(--item-color);
+}
+
+#item-categories > menupopup > menuitem .menu-iconic-left {
+ margin-inline-end: 3px;
+}
+
+#item-categories > menupopup > menuitem .menu-iconic-text {
+ padding-inline-start: 15px;
+ background-image: var(--icon-circle-small);
+ background-position: left center;
+ background-repeat: no-repeat;
+ -moz-context-properties: fill;
+ fill: var(--item-color);
+}
+
+#item-categories > menupopup > menuitem .menu-iconic-text:dir(rtl) {
+ background-position-x: right;
+}
+
+#item-categories::part(color) {
+ margin-inline-end: 1px;
+}
+
+#item-categories::part(color first) {
+ margin-inline-start: 7px;
+}
+
+#item-categories::part(color last) {
+ margin-inline-end: 3px !important;
+}
+
+#item-categories-textbox {
+ margin: 1px 8px;
+}
+
+#event-grid-item-calendar-td,
+#event-grid-category-color-td,
+.event-input-td {
+ display: flex;
+}
+
+#event-grid > tr > td > menulist,
+#event-grid checkbox,
+#event-grid td,
+#event-grid th {
+ margin: 0;
+ padding: 0;
+ margin-inline-end: 0;
+ margin-inline-start: 0;
+}
+
+.item-location-link,
+#item-location,
+.item-location,
+#item-title,
+.item-title {
+ margin: 0;
+ margin-inline-end: 0;
+ margin-inline-start: 0;
+ padding-inline-start: 4px;
+}
+
+.item-location-link {
+ padding-inline-start: 0;
+}
+
+.item-location-link > label {
+ cursor: pointer;
+}
+
+#todo-status,
+#item-repeat,
+.item-alarm {
+ margin: 0;
+}
+
+#event-grid td,
+#event-grid th {
+ padding: 4px 0;
+}
+
+#event-grid-startdate-row td,
+#event-grid-startdate-row th,
+#event-grid-enddate-row td,
+#event-grid-enddate-row th {
+ padding: 0;
+}
+
+.datepicker-menulist {
+ margin-left: 0 !important;
+}
+
+#event-grid-tab-vbox {
+ display: flex;
+ flex-direction: column;
+ padding-bottom: 10px;
+ padding-inline: 8px 10px;
+}
+
+.separator td {
+ border-bottom: 1px solid var(--field-border-color);
+ padding: 0 !important;
+}
+
+#completed-date-picker {
+ margin-inline-start: 4px;
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog tabbox section
+ *-------------------------------------------------------------------*/
+
+#event-grid-tabbox {
+ margin: 5px 0;
+}
+
+#event-grid-tabbox #notify-options {
+ padding: 0px 9px;
+}
+
+#FormatToolbox {
+ appearance: none;
+ padding-inline: 4px;
+}
+
+#FormatToolbar {
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+#boldButton {
+ list-style-image: url("chrome://messenger/skin/icons/bold.svg");
+}
+
+#italicButton {
+ list-style-image: url("chrome://messenger/skin/icons/italics.svg");
+}
+
+#underlineButton {
+ list-style-image: url("chrome://messenger/skin/icons/underline.svg");
+}
+
+#linkButton {
+ list-style-image: url("chrome://global/skin/icons/link.svg");
+}
+
+#ulButton {
+ list-style-image: url("chrome://messenger/skin/icons/bullet-list.svg");
+}
+
+#olButton {
+ list-style-image: url("chrome://messenger/skin/icons/number-list.svg");
+}
+
+#outdentButton {
+ list-style-image: url("chrome://messenger/skin/icons/outdent.svg");
+}
+
+#indentButton {
+ list-style-image: url("chrome://messenger/skin/icons/indent.svg");
+}
+
+#AlignPopupButton {
+ list-style-image: url("chrome://messenger/skin/icons/left-align.svg");
+}
+
+#AlignPopup > menuitem {
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+#AlignLeftItem, #AlignPopupButton[state="left"] {
+ list-style-image: url("chrome://messenger/skin/icons/left-align.svg");
+}
+
+#AlignCenterItem, #AlignPopupButton[state="center"] {
+ list-style-image: url("chrome://messenger/skin/icons/center-align.svg");
+}
+
+#AlignRightItem, #AlignPopupButton[state="right"] {
+ list-style-image: url("chrome://messenger/skin/icons/right-align.svg");
+}
+
+#AlignJustifyItem, #AlignPopupButton[state="justify"] {
+ list-style-image: url("chrome://messenger/skin/icons/justify.svg");
+}
+
+#paragraphButton {
+ list-style-image: url("chrome://messenger/skin/icons/paragraph.svg");
+}
+
+#smileButtonMenu {
+ list-style-image: url("chrome://messenger/skin/icons/smiley.svg");
+}
+
+.formatting-button {
+ appearance: none;
+ border: 1px solid transparent;
+ border-radius: var(--button-border-radius);
+ color: inherit;
+ -moz-context-properties: fill;
+ fill: currentColor;
+ transition-property: background-color, border-color, box-shadow;
+ transition-duration: 150ms;
+}
+
+.formatting-button:not([disabled="true"]):hover {
+ background: var(--toolbarbutton-hover-background);
+ border-color: var(--toolbarbutton-hover-bordercolor);
+ box-shadow: var(--toolbarbutton-hover-boxshadow);
+}
+
+.formatting-button:not([disabled="true"]):is([open="true"],[checked="true"],:hover:active) {
+ background: var(--toolbarbutton-checked-background);
+ border-color: var(--toolbarbutton-active-bordercolor);
+ box-shadow: var(--toolbarbutton-active-boxshadow);
+}
+
+.formatting-button:not([disabled="true"]):is([open="true"],:hover:active) {
+ background: var(--toolbarbutton-active-background) !important;
+}
+
+.formatting-button > .toolbarbutton-menu-dropmarker {
+ list-style-image: url("chrome://messenger/skin/messengercompose/format-dropmarker.svg");
+ -moz-context-properties: fill;
+ fill: currentColor;
+ display: inline-block;
+}
+
+.formatting-button[disabled="true"] > .toolbarbutton-icon,
+.formatting-button[disabled="true"] > .toolbarbutton-menu-dropmarker {
+ opacity: 0.4;
+}
+
+#item-description {
+ border: 1px solid var(--field-border-color);
+ border-radius: 2px;
+ margin: 2px 4px;
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog keep duration button
+ *-------------------------------------------------------------------*/
+
+#keepduration-button {
+ appearance: none;
+ list-style-image: url(chrome://calendar/skin/shared/chain-unlock.svg);
+ margin-bottom: -15px;
+ border-radius: var(--button-border-radius);
+ position: relative;
+ -moz-user-focus: normal;
+ -moz-context-properties: fill;
+ fill: CurrentColor;
+}
+
+#keepduration-button:hover {
+ background-color: var(--button-hover-background-color);
+}
+
+#keepduration-button:hover:active {
+ background-color: var(--button-active-background-color);
+}
+
+#keepduration-button[keep="true"] {
+ list-style-image: url(chrome://calendar/skin/shared/chain-lock.svg);
+ fill: var(--selected-item-color);
+}
+
+#keepduration-button[disabled="true"] {
+ fill: GrayText;
+}
+
+#keepduration-button > label {
+ display: none;
+}
+
+.keepduration-link-image {
+ margin-inline-start: -1px;
+ -moz-context-properties: fill, stroke-opacity;
+ fill: CurrentColor;
+ stroke-opacity: 0;
+}
+
+#link-image-top {
+ margin-top: 0.6em;
+ margin-bottom: -0.6em;
+}
+
+#link-image-top[keep="true"] {
+ stroke-opacity: 1;
+}
+
+#link-image-bottom {
+ margin-top: -0.6em;
+ margin-bottom: 0.6em;
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog statusbar images
+ *-------------------------------------------------------------------*/
+
+.cal-statusbar-1 {
+ flex-direction: column;
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+/*--------------------------------------------------------------------
+ * Event dialog statusbarpanels
+ *-------------------------------------------------------------------*/
+
+#status-privacy,
+#status-priority,
+#status-status,
+#status-freebusy {
+ overflow: hidden;
+}
+
+/*--------------------------------------------------------------------
+ * Recurrence dialog
+ *-------------------------------------------------------------------*/
+
+#calendar-event-dialog-recurrence dialog {
+ overflow: scroll;
+}
+
+.recurrence-pattern-hbox-label {
+ margin-top: 6px;
+}
+
+#recurrencePreviewCalendars {
+ display: block;
+ margin: 2px;
+}
+
+#recurrencePreview {
+ display: flex;
+}
+
+#recurrencePreview calendar-minimonth {
+ display: inline-block;
+ margin: 2px;
+}
+
+#recurrencePreview calendar-minimonth[hidden="true"] {
+ display: none;
+}
+
+#recurrencePreviewNavigation {
+ display: block;
+}
+
+#daypicker-weekday {
+ margin-top: 2px;
+ -moz-user-focus: normal;
+}
+
+.daypicker-monthday {
+ margin-top: 2px;
+ -moz-user-focus: normal;
+}
+
+.headline {
+ font-weight: bold;
+}
+
+.headline[align="end"],
+.headline[align="right"] {
+ text-align: right;
+}
+
+.default-spacer {
+ width: 1em;
+ height: 1em;
+}
+
+.default-indent {
+ margin-inline-start: 1.5em;
+}
+
+#dialog-box {
+ padding-block: 8px 10px;
+ padding-inline: 8px 10px;
+}
+
+.checkbox-no-label > .checkbox-label-box {
+ display: none;
+}
+
+/* Thunderbird Light Theme (not system theme) */
+@media (prefers-color-scheme: light) {
+ :root[lwt-tree]:not([lwt-tree-brighttext]) #recurrencePreview calendar-minimonth {
+ background-color: var(--color-gray-05);
+ border-color: var(--color-gray-30);
+ }
+}
+
+/*--------------------------------------------------------------------
+ * Event summary dialog
+ *-------------------------------------------------------------------*/
+#summary-toolbox {
+ margin-bottom: 5px;
+}
+
+#status-notifications > .notificationbox-stack {
+ background-color: transparent;
+ margin-inline: 6px;
+}
+
+#calendar-item-summary {
+ margin-block: 3px 10px;
+ margin-inline: 8px 10px;
+}
+
+#calendar-summary-dialog,
+#calendar-ics-file-dialog {
+ min-width: 35em;
+}
+
+#calendar-summary-dialog .item-location,
+#calendar-summary-dialog .item-title,
+#calendar-event-summary-dialog .item-location,
+#calendar-event-summary-dialog .item-title,
+#calendar-task-summary-dialog .item-location,
+#calendar-task-summary-dialog .item-title,
+#calendar-ics-file-dialog .item-location,
+#calendar-ics-file-dialog .item-title {
+ padding-inline-start: 1px;
+}
+
+#calendar-summary-dialog .item-attachment-cell,
+#calendar-event-summary-dialog .item-attachment-cell,
+#calendar-task-summary-dialog .item-attachment-cell,
+#calendar-ics-file-dialog .item-attachment-cell {
+ margin-left: 0px;
+}
+
+#calendar-summary-dialog .item-attachment-cell-label,
+#calendar-event-summary-dialog .item-attachment-cell-label,
+#calendar-task-summary-dialog .item-attachment-cell-label,
+#calendar-ics-file-dialog .item-attachment-cell-label {
+ margin-left: 0;
+}
+
+#calendar-summary-dialog .item-description,
+#calendar-event-summary-dialog .item-description,
+#calendar-task-summary-dialog .item-description,
+#calendar-ics-file-dialog .item-description {
+ border: 1px solid var(--field-border-color);
+ margin: 2px 4px 0;
+}
+
+#calendar-summary-dialog .item-description a,
+#calendar-event-summary-dialog .item-description a,
+#calendar-task-summary-dialog .item-description a,
+#calendar-ics-file-dialog .item-description a {
+ color: -moz-nativehyperlinktext;
+}
+
+:root[lwt-tree-brighttext] #calendar-summary-dialog .item-description a,
+:root[lwt-tree-brighttext] #calendar-event-summary-dialog .item-description a,
+:root[lwt-tree-brighttext] #calendar-task-summary-dialog .item-description a,
+:root[lwt-tree-brighttext] #calendar-ics-file-dialog .item-description a {
+ color: #0aa5ff;
+}
+
+#calendar-summary-dialog #item-start-row .headline,
+#calendar-event-summary-dialog #item-start-row .headline,
+#calendar-task-summary-dialog #item-start-row .headline,
+#calendar-ics-file-dialog #item-start-row .headline,
+#calendar-summary-dialog #item-end-row .headline,
+#calendar-event-summary-dialog #item-end-row .headline,
+#calendar-task-summary-dialog #item-end-row .headline,
+#calendar-ics-file-dialog #item-end-row .headline {
+ font-weight: normal;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-ics-file-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-ics-file-dialog.css
new file mode 100644
index 0000000000..4675e09351
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-ics-file-dialog.css
@@ -0,0 +1,107 @@
+/* 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/. */
+
+/* We want the calendar items container to span the full width of the dialog
+ window, so there's no space between its scrollbar and the right side of the
+ window. Set the dialog element's padding to 0 and then set the equivalent
+ padding on its children. The dialog buttons area is in the shadow dom, so we
+ add padding to it via JS in the window load handler function. */
+#calendar-ics-file-dialog {
+ padding-inline: 0;
+}
+
+#calendar-ics-file-dialog-header,
+#calendar-ics-file-dialog-items-container,
+#calendar-ics-file-dialog-progress-pane,
+#calendar-ics-file-dialog-result-pane {
+ /* This padding needs to change elsewhere if it changes here.
+ See the note above the styles for #calendar-ics-file-dialog */
+ padding-inline: 10px;
+}
+
+#calendar-ics-file-dialog-items-container,
+#calendar-ics-file-dialog-progress-pane,
+#calendar-ics-file-dialog-result-pane {
+ flex: 1 1 0;
+}
+
+#calendar-ics-file-dialog-calendar-menu-label {
+ margin-top: 1em;
+}
+
+#calendar-ics-file-dialog-calendar-menu > menupopup > menuitem .menu-iconic-left {
+ display: flex;
+}
+
+#calendar-ics-file-dialog-calendar-menu::part(icon) {
+ margin-inline-start: 4px;
+ margin-inline-end: 3px;
+}
+
+#calendar-ics-file-dialog-calendar-menu::part(icon),
+#calendar-ics-file-dialog-calendar-menu > menupopup > menuitem .menu-iconic-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 5px;
+ background-color: var(--item-color);
+}
+
+#calendar-ics-file-dialog-sort-button {
+ list-style-image: var(--icon-sort);
+ min-width: 0;
+ margin-block: 2px;
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+#calendar-ics-file-dialog-sort-button > .button-box > dropmarker {
+ display: none;
+}
+
+#calendar-ics-file-dialog-items-container {
+ border-block: 1px solid var(--field-border-color);
+ margin-block: 0.7em;
+ margin-inline: -8px -10px;
+ padding-block: 0 1.5em;
+ padding-inline: 18px 20px;
+ min-height: 200px;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+
+#calendar-ics-file-dialog-items-loading-message {
+ text-align: center;
+ margin-top: 3em;
+}
+
+.calendar-ics-file-dialog-item-frame {
+ background-color: var(--field-background-color);
+ border: 1px solid var(--field-border-color);
+ margin-block: 1.5em 0;
+ margin-inline: 6px 5px;
+ padding: 0.7em;
+}
+
+.calendar-ics-file-dialog-item-import-button {
+ margin-block: 0.7em 0;
+}
+
+.calendar-caption {
+ display: none;
+}
+
+.item-description {
+ padding: 2px;
+}
+
+#calendar-ics-file-dialog-progress-pane,
+#calendar-ics-file-dialog-result-pane {
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+}
+
+#calendar-ics-file-dialog-progress {
+ width: 400px;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-invitations-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-invitations-dialog.css
new file mode 100644
index 0000000000..e43e08cb4e
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-invitations-dialog.css
@@ -0,0 +1,80 @@
+/* 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/. */
+
+#dialog-box {
+ overflow: auto;
+ height: 290px;
+}
+
+.calendar-invitations-updating-icon {
+ opacity: 0.5;
+}
+
+#updating-box {
+ background-color: var(--field-background-color);
+ color: var(--field-text-color);
+ border: 1px solid var(--field-border-color);
+}
+
+#invitationContainer {
+ display: flex;
+ flex-direction: column;
+ min-height: 0;
+}
+
+richlistitem[is="calendar-invitations-richlistitem"] {
+ padding: 6px 7px;
+ min-height: 25px;
+ border-bottom: 1px dotted #808080;
+}
+
+.calendar-invitations-richlistitem-title {
+ font-weight: bold;
+ white-space: break-spaces;
+}
+
+.calendar-invitations-richlistitem-icon {
+ /* Crops the src of the image. */
+ object-fit: none;
+ width: 32px;
+ height: 32px;
+}
+
+.calendar-invitations-richlistitem-icon[status="NEEDS-ACTION"] {
+ object-position: top 0 left 0;
+}
+
+.calendar-invitations-richlistitem-icon[status="ACCEPTED"] {
+ object-position: top 0 left -32px;
+}
+
+.calendar-invitations-richlistitem-icon[status="DECLINED"] {
+ object-position: top 0 left -64px;
+}
+
+.calendar-invitations-richlistitem-button {
+ margin-bottom: 10px;
+ visibility: hidden;
+}
+
+richlistitem[is="calendar-invitations-richlistitem"][selected="true"] .calendar-invitations-richlistitem-button {
+ visibility: visible;
+}
+
+.calendar-invitations-richlistitem-button .button-icon {
+ margin-block: 0;
+ margin-inline: 0 5px;
+ border-radius: 3px;
+ -moz-context-properties: fill, fill-opacity;
+ fill: currentColor;
+ fill-opacity: var(--toolbarbutton-icon-fill-opacity);
+}
+
+.calendar-invitations-richlistitem-accept-button {
+ list-style-image: url(chrome://calendar/skin/shared/icons/complete.svg);
+}
+
+.calendar-invitations-richlistitem-decline-button {
+ list-style-image: url(chrome://calendar/skin/shared/icons/decline.svg);
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-itip-identity-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-itip-identity-dialog.css
new file mode 100644
index 0000000000..3721503818
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-itip-identity-dialog.css
@@ -0,0 +1,11 @@
+/* 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/. */
+
+#calendar-itip-identity-warning {
+ margin-bottom: 1em;
+}
+
+#identity-menu-label {
+ height: 1.3em;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-properties-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-properties-dialog.css
new file mode 100644
index 0000000000..2da1a5c49a
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-properties-dialog.css
@@ -0,0 +1,89 @@
+/* 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:-moz-lwtheme {
+ background-color: var(--lwt-accent-color);
+ color: var(--lwt-text-color);
+}
+
+:root[canDisable] #calendar-properties-table {
+ margin-inline-start: 20px;
+}
+
+body {
+ overflow: auto;
+}
+
+#calendar-properties-table th,
+#calendar-properties-table td {
+ min-height: 26px;
+}
+
+#calendar-properties-table th {
+ text-align: start;
+ font-weight: normal;
+}
+
+#calendar-properties-table td {
+ width: 100%;
+}
+
+#calendar-properties-table html|input[type="number"].size3 {
+ width: calc(3ch + 55px);
+}
+
+#calendar-email-identity-row > td,
+#calendar-refreshInterval-row > td {
+ display: flex;
+}
+
+#calendar-refreshInterval-menulist,
+#email-identity-menulist {
+ flex: 1;
+}
+
+#calendar-notifications {
+ margin-inline-start: 24px;
+}
+
+#calendar-notifications-title {
+ font-size: 1.1em;
+ font-weight: 600;
+}
+
+calendar-notifications-setting {
+ display: block;
+}
+
+calendar-notifications-setting .add-button {
+ list-style-image: var(--icon-add);
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+calendar-notifications-setting .add-button .button-icon {
+ margin-inline-end: 6px;
+}
+
+calendar-notifications-setting .remove-button {
+ width: 26px;
+ min-width: 0;
+ padding: 0 4px;
+ list-style-image: var(--icon-trash);
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%,transparent);
+ stroke: currentColor;
+ background: none;
+ border: none;
+}
+
+calendar-notifications-setting .calendar-notifications-row:last-child {
+ margin-bottom: 20px;
+}
+
+#global-notifications-row {
+ width: 100%;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-summary-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-summary-dialog.css
new file mode 100644
index 0000000000..6ba129a24a
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-summary-dialog.css
@@ -0,0 +1,47 @@
+/* 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/. */
+
+notification {
+ border-inline-width: 1px;
+}
+
+:root:not([lwt-tree]):-moz-lwtheme #summary-toolbox {
+ background-image: var(--lwt-header-image) !important;
+ background-repeat: no-repeat;
+ background-position: right top !important;
+}
+
+:root:not([lwt-tree]):-moz-lwtheme #summary-toolbar {
+ background-color: var(--toolbar-bgcolor);
+}
+
+.item-attendees-description {
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+}
+
+.item-attendees,
+.item-attendees-list-container {
+ height: 90px;
+ min-height: 50px;
+}
+
+.item-description-box {
+ height: 100%;
+}
+
+#calendar-summary-dialog {
+ min-height: 20em;
+}
+
+#calendar-event-summary-dialog {
+ height: 100vh;
+ overflow-y: scroll;
+}
+
+#calendar-summary-dialog-custom-button-footer {
+ margin-block: 10px;
+ margin-inline: 8px 10px;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-timezone-highlighter.css b/comm/calendar/base/themes/common/dialogs/calendar-timezone-highlighter.css
new file mode 100644
index 0000000000..5a0932d2fb
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-timezone-highlighter.css
@@ -0,0 +1,142 @@
+/* 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/. */
+
+#timezone-stack {
+ margin: 4px 4px 0;
+}
+
+.timezone-highlight {
+ object-fit: none;
+ width: 460px;
+ height: 287px;
+}
+.timezone-highlight[tzid="none"] {
+ display: none;
+}
+.timezone-highlight[tzid="+0000"] {
+ object-position: top 0 left -6900px;
+}
+.timezone-highlight[tzid="+0100"] {
+ object-position: top 0 left -7360px;
+}
+.timezone-highlight[tzid="+0200"] {
+ object-position: top 0 left -7820px;
+}
+.timezone-highlight[tzid="+0300"] {
+ object-position: top 0 left -8280px;
+}
+.timezone-highlight[tzid="+0330"] {
+ object-position: top 0 left -8740px;
+}
+.timezone-highlight[tzid="+0400"] {
+ object-position: top 0 left -9200px;
+}
+.timezone-highlight[tzid="+0430"] {
+ object-position: top 0 left -9660px;
+}
+.timezone-highlight[tzid="+0500"] {
+ object-position: top 0 left -10120px;
+}
+.timezone-highlight[tzid="+0530"] {
+ object-position: top 0 left -10580px;
+}
+.timezone-highlight[tzid="+0545"] {
+ object-position: top 0 left -11040px;
+}
+.timezone-highlight[tzid="+0600"] {
+ object-position: top 0 left -11500px;
+}
+.timezone-highlight[tzid="+0630"] {
+ object-position: top 0 left -11960px;
+}
+.timezone-highlight[tzid="+0700"] {
+ object-position: top 0 left -12420px;
+}
+.timezone-highlight[tzid="+0800"] {
+ object-position: top 0 left -12880px;
+}
+.timezone-highlight[tzid="+0845"] {
+ display: none;
+}
+.timezone-highlight[tzid="+0900"] {
+ object-position: top 0 left -13340px;
+}
+.timezone-highlight[tzid="+0930"] {
+ object-position: top 0 left -13800px;
+}
+.timezone-highlight[tzid="+1000"] {
+ object-position: top 0 left -14260px;
+}
+.timezone-highlight[tzid="+1030"] {
+ object-position: top 0 left -14720px;
+}
+.timezone-highlight[tzid="+1100"] {
+ object-position: top 0 left -15180px;
+}
+.timezone-highlight[tzid="+1130"] {
+ object-position: top 0 left -15180px;
+}
+.timezone-highlight[tzid="+1200"] {
+ object-position: top 0 left -16100px;
+}
+.timezone-highlight[tzid="+1245"] {
+ object-position: top 0 left -16560px;
+}
+.timezone-highlight[tzid="+1300"] {
+ object-position: top 0 left -17020px;
+}
+.timezone-highlight[tzid="+1400"] {
+ object-position: top 0 left -17480px;
+}
+.timezone-highlight[tzid="-0100"] {
+ object-position: top 0 left -6440px;
+}
+.timezone-highlight[tzid="-0200"] {
+ object-position: top 0 left -5980px;
+}
+.timezone-highlight[tzid="-0300"] {
+ object-position: top 0 left -5520px;
+}
+.timezone-highlight[tzid="-0330"] {
+ object-position: top 0 left -5060px;
+}
+.timezone-highlight[tzid="-0400"] {
+ object-position: top 0 left -4600px;
+}
+.timezone-highlight[tzid="-0430"] {
+ display: none;
+}
+.timezone-highlight[tzid="-0500"] {
+ object-position: top 0 left -4140px;
+}
+.timezone-highlight[tzid="-0600"] {
+ object-position: top 0 left -3680px;
+}
+.timezone-highlight[tzid="-0700"] {
+ object-position: top 0 left -3220px;
+}
+.timezone-highlight[tzid="-0800"] {
+ object-position: top 0 left -17940px;
+}
+.timezone-highlight[tzid="-0830"] {
+ object-position: top 0 left -2760px;
+}
+.timezone-highlight[tzid="-0900"] {
+ object-position: top 0 left -2300px;
+}
+.timezone-highlight[tzid="-0930"] {
+ object-position: top 0 left -1840px;
+}
+.timezone-highlight[tzid="-1000"] {
+ object-position: top 0 left -1380px;
+}
+.timezone-highlight[tzid="-1100"] {
+ object-position: top 0 left -920px;
+}
+.timezone-highlight[tzid="-1245"] {
+ object-position: top 0 left -460px;
+}
+.timezone-highlight[tzid="-1200"] {
+ object-position: top 0 left 0;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/calendar-uri-redirect-dialog.css b/comm/calendar/base/themes/common/dialogs/calendar-uri-redirect-dialog.css
new file mode 100644
index 0000000000..8d1f0a6708
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/calendar-uri-redirect-dialog.css
@@ -0,0 +1,13 @@
+/* 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/. */
+
+#calendar-uri-redirect-dialog {
+ min-width: 600px;
+ min-height: 220px;
+ height: 100vh;
+}
+
+p {
+ padding-block: 5px;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/chooseCalendarDialog.css b/comm/calendar/base/themes/common/dialogs/chooseCalendarDialog.css
new file mode 100644
index 0000000000..a675464983
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/chooseCalendarDialog.css
@@ -0,0 +1,19 @@
+/* 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/. */
+
+:root {
+ min-width: 300px;
+ min-height: 200px;
+}
+
+richlistitem {
+ padding: 4px 8px;
+ align-items: center;
+}
+
+richlistitem > box:first-child {
+ width: 10px;
+ height: 10px;
+ border-radius: 5px;
+}
diff --git a/comm/calendar/base/themes/common/dialogs/images/calendar-event-dialog-attendees.png b/comm/calendar/base/themes/common/dialogs/images/calendar-event-dialog-attendees.png
new file mode 100644
index 0000000000..ea52cbc19d
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/calendar-event-dialog-attendees.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/dialogs/images/calendar-invitations-dialog-list-images.png b/comm/calendar/base/themes/common/dialogs/images/calendar-invitations-dialog-list-images.png
new file mode 100644
index 0000000000..db33ad817c
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/calendar-invitations-dialog-list-images.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/dialogs/images/chain-lock.svg b/comm/calendar/base/themes/common/dialogs/images/chain-lock.svg
new file mode 100644
index 0000000000..ed42599db3
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/chain-lock.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="8" height="24" xmlns="http://www.w3.org/2000/svg" fill="context-fill" viewBox="0 0 8 24">
+ <path d="M 3,2 C 1.35,2 0,3.34 0,5 v 3 c 0,1.907 0.76,3 2,3 V 5 C 2,4.45 2.45,4 3,4 h 2 c 0.55,0 1.05,0.45 1,1 v 6 C 7.24,11 8,9.986 8,8 V 5 C 8,3.35 6.66,2 5,2 Z M 4,8 C 3.04,8 3,9 3,9 v 6 c 0,0 0,1 1,1 1,0 1,-1 1,-1 V 9 C 5,9 4.956,8 4,8 Z m -2,5 c -1.2397,0 -2,0.93 -2,3 v 3 c 0,1.66 1.35,3 3,3 h 2 c 1.66,0 3,-1.35 3,-3 V 16 C 8,13.99 7.24,13 6,13 v 6 c 0.05,0.55 -0.45,1 -1,1 H 3 C 2.45,20 2,19.55 2,19 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/chain-unlock.svg b/comm/calendar/base/themes/common/dialogs/images/chain-unlock.svg
new file mode 100644
index 0000000000..7a7c0fa9c1
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/chain-unlock.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="8" height="24" xmlns="http://www.w3.org/2000/svg" fill="context-fill" viewBox="0 0 8 24">
+ <path d="M 3,0 C 1.35,0 0,1.34 0,3 V 6 C 0,7.91 0.76,9 2,9 V 3 C 2,2.45 2.45,2 3,2 H 5 C 5.55,2 6.05,2.45 6,3 V 9 C 7.24,9 8,7.99 8,6 V 3 C 8,1.35 6.66,0 5,0 Z m 0,14 v 3 c 0,0 0,1 1,1 1,0 1,-1 1,-1 V 14 Z M 5,10 V 7 C 5,7 4.96,6 4,6 3.04,6 3,7 3,7 v 3 z m -3,5 c -1.2397,0 -2,0.93 -2,3 v 3 c 0,1.66 1.35,3 3,3 h 2 c 1.66,0 3,-1.35 3,-3 V 18 C 8,15.99 7.24,15 6,15 v 6 c 0.05,0.55 -0.45,1 -1,1 H 3 C 2.45,22 2,21.55 2,21 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/link-image-bottom.svg b/comm/calendar/base/themes/common/dialogs/images/link-image-bottom.svg
new file mode 100644
index 0000000000..99925c77f0
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/link-image-bottom.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="9" height="7">
+ <path fill="context-fill" d="M 2,7 0,5 V 4 L 2,2 H 3 V 4 H 8 V 0 H 9 V 5 H 3 v 2 z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/link-image-top.svg b/comm/calendar/base/themes/common/dialogs/images/link-image-top.svg
new file mode 100644
index 0000000000..60b4574146
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/link-image-top.svg
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="9" height="7">
+ <path fill="context-fill" d="M 9,7 V 2 H 0 v 1 h 8 v 4 z"/>
+ <path fill="context-fill" fill-opacity="context-stroke-opacity" d="M 0,2 2,0 H 3 V 5 H 2 L 0,3 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-high.svg b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-high.svg
new file mode 100644
index 0000000000..36dab0b7bc
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-high.svg
@@ -0,0 +1,8 @@
+<!-- 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/. -->
+<svg width="48" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" viewBox="0 0 48 16">
+ <rect width="15" height="15" x="32" y="0"/>
+ <rect width="11" height="11" x="18" y="4"/>
+ <rect width="8" height="8" x="7" y="7"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-low.svg b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-low.svg
new file mode 100644
index 0000000000..d676ea5dad
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-low.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" viewBox="0 0 16 16">
+ <rect width="8" height="8" x="7" y="7"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-normal.svg b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-normal.svg
new file mode 100644
index 0000000000..9ddc40cbcd
--- /dev/null
+++ b/comm/calendar/base/themes/common/dialogs/images/statusbar-priority-normal.svg
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg width="32" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" viewBox="0 0 32 16">
+ <rect width="11" height="11" x="18" y="4"/>
+ <rect width="8" height="8" x="7" y="7"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/alarm-no.svg b/comm/calendar/base/themes/common/icons/alarm-no.svg
new file mode 100644
index 0000000000..82245b1a58
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/alarm-no.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M8 0C5.135 0 3.072 2.45 3 5.359c-.019 2.422-.129 4.453-1.752 6.101-.526.81-.184 1.52.756 1.54L1 14l1 1L15 2l-1-1-1.61 1.607C11.94 1.15 10.12 0 8 0zm0 2c1.503.02 2.49.853 2.85 2.154L4 11c1.011-1.025.955-3.748 1-5.596C5.05 3.436 6.064 2.046 8 2zm5 4l-2 2c0 .8.44 2.42 1 3H8l-2 2h7.97c.97 0 1.31-.71.77-1.52C13.49 10.23 13 7.719 13 6zm-7 8c0 .98 1.048 2 2.014 2C8.984 16 10 14.98 10 14z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/alarm.svg b/comm/calendar/base/themes/common/icons/alarm.svg
new file mode 100644
index 0000000000..12eed1320c
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/alarm.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M6 14c0 .98 1.047 2 2.013 2C8.983 16 10 14.98 10 14zm8.74-2.52C13.07 9.673 13 7.644 13 5.291 13 2.094 10.89 0 8 0 5.135 0 3.072 2.451 3 5.36c-.019 2.422-.128 4.451-1.751 6.1-.533.82-.178 1.54.791 1.54h11.93c.97 0 1.31-.71.77-1.52zM4 11c1.011-1.025.955-3.748 1-5.596C5.05 3.436 6.064 2.046 8 2c1.907.02 3 1.351 3 3.291-.1 2.715.2 4.889 1 5.709z"/>
+</svg> \ No newline at end of file
diff --git a/comm/calendar/base/themes/common/icons/complete.svg b/comm/calendar/base/themes/common/icons/complete.svg
new file mode 100644
index 0000000000..8f01223a8b
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/complete.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M6 14a1 1 0 0 1-.707-.293l-3-3a1 1 0 0 1 1.414-1.414l2.157 2.157 6.316-9.023a1 1 0 0 1 1.639 1.146l-7 10a1 1 0 0 1-.732.427A.863.863 0 0 1 6 14z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/confidential.svg b/comm/calendar/base/themes/common/icons/confidential.svg
new file mode 100644
index 0000000000..22317ad501
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/confidential.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M8 1a7 7 0 1 0 7 7 7 7 0 0 0-7-7zm0 13a6 6 0 1 1 6-6 6 6 0 0 1-6 6zm0-7a1 1 0 0 0-1 1v3a1 1 0 1 0 2 0V8a1 1 0 0 0-1-1zm0-3.2A1.2 1.2 0 1 0 9.2 5 1.2 1.2 0 0 0 8 3.812z"></path>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/decline.svg b/comm/calendar/base/themes/common/icons/decline.svg
new file mode 100644
index 0000000000..027afeb111
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/decline.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M9.41 8l4.3-4.3c.9-.94-.47-2.32-1.42-1.4L8 6.58l-4.3-4.3c-.93-.9-2.32.47-1.4 1.42L6.58 8l-4.3 4.3c-.97.94.47 2.38 1.42 1.4L8 9.42l4.3 4.3c.94.9 2.32-.47 1.4-1.42z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/edit.svg b/comm/calendar/base/themes/common/icons/edit.svg
new file mode 100644
index 0000000000..5be5ab638e
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/edit.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M14.35 2.35l-.7-.7a2 2 0 00-2.83 0l-.38.38a.5.5 0 000 .7l2.83 2.83a.5.5 0 00.7 0l.38-.38a2 2 0 000-2.83zM9.73 3.44a.5.5 0 00-.7 0L3.24 9.22a1.99 1.99 0 00-.46.71l-1.75 4.39a.5.5 0 00.46.68.5.5 0 00.19-.04l4.38-1.75a1.97 1.97 0 00.72-.45l5.77-5.78a.5.5 0 000-.7zM5.16 12.5l-2.55 1.02a.1.1 0 01-.13-.13l1.02-2.56a.1.1 0 01.16-.03l1.54 1.53a.1.1 0 01-.04.17z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/email.svg b/comm/calendar/base/themes/common/icons/email.svg
new file mode 100644
index 0000000000..5c56028d6c
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/email.svg
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M13 2H3a3.013 3.013 0 0 0-3 3v6a3.013 3.013 0 0 0 3 3h10a3.013 3.013 0 0 0 3-3V5a3.013 3.013 0 0 0-3-3zm1 9a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1z"/>
+ <path d="M8 9a.5.5 0 0 1-.294-.1l-5.5-4a.5.5 0 1 1 .588-.8L8 7.88 13.2 4.1a.5.5 0 0 1 .588.81-5.5 4A.5.5 0 0 1 8 9z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/event.svg b/comm/calendar/base/themes/common/icons/event.svg
new file mode 100644
index 0000000000..0eba7b20be
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/event.svg
@@ -0,0 +1,10 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M6 2h4v2H6zM3 15c-.199.05-2-.59-2-3V5c0-1.305.835-2.417 2-2.83m12 8.33V12c0 1.81-1.32 3-3 3h-1.5z"/>
+ <path d="M3 5v1h7.5l1-1zm1 2v3h2V7zm6.99.89l2.08 2.16-5.51 5.51c-.12.12-.307.27-.56.44H5v-2c.172-.25.319-.44.44-.56zm1.51-1.51l.94-.94c1.41-1.366 3.49.71 2.12 2.12l-.94.94z"/>
+ <path d="M10.99 7.89l2.08 2.16-5.51 5.51c-.12.12-.307.27-.56.44H5v-2c.172-.25.319-.44.44-.56zm1.51-1.51l.94-.94c1.41-1.366 3.49.71 2.12 2.12l-.94.94z"/>
+ <rect x="4" width="1" height="4" rx=".5"/>
+ <rect x="11" width="1" height="4" rx=".5"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/find.svg b/comm/calendar/base/themes/common/icons/find.svg
new file mode 100644
index 0000000000..5c239013cc
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/find.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M15.707 14.293l-4.822-4.822a6.019 6.019 0 1 0-1.414 1.414l4.822 4.822a1 1 0 0 0 1.414-1.414zM6 10a4 4 0 1 1 4-4 4 4 0 0 1-4 4z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/freebusy.svg b/comm/calendar/base/themes/common/icons/freebusy.svg
new file mode 100644
index 0000000000..928f9d9167
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/freebusy.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8zm0 14a6 6 0 1 1 6-6 6 6 0 0 1-6 6zm3.5-6H8V4.5a.5.5 0 0 0-1 0v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 0-1z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/icon32.svg b/comm/calendar/base/themes/common/icons/icon32.svg
new file mode 100644
index 0000000000..9f29f18fc5
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/icon32.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="32" height="32" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 32 32">
+ <path d="M3 1c-1.668.06-3 1.35-3 3v24c0 1.66 1.343 3 3 3h25c1.66 0 3-1.34 3-3V4c0-1.65-1.33-3.056-3-3zm1 3h23c.55 0 1 .45 1 1v1H3V5c0-.55.451-1 1-1zM3 9h25v18c0 .55-.45 1-1 1H4c-.552 0-1.029-.45-1-1zm7 1v5h5v-5zm6 0v5h5v-5zm6 0v5h5v-5zM4 16v5h5v-5zm6 0v5h5v-5zm6 0v5h5v-5zm6 0v5h5v-5zM4 22v5h5v-5zm6 0v5h5v-5zm6 0v5h5v-5z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/imip-bar.svg b/comm/calendar/base/themes/common/icons/imip-bar.svg
new file mode 100644
index 0000000000..c5c37def72
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/imip-bar.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 24 24">
+ <path d="M4 1c-1.668.056-3 1.354-3 3v16c0 1.66 1.343 3 3 3h17c1.66 0 3-1.34 3-3V4c0-1.646-1.33-3.056-3-3H4zm0 2h17c.55 0 1 .448 1 1H3c0-.546.451-1 1-1zM3 6h19v14c0 .55-.45 1-1 1H4c-.552 0-1-.45-1-1V6zm6 2v3h3V8H9zm4 0v3h3V8h-3zm4 0v3h3V8h-3zM5 12v3h3v-3H5zm4 0v3h3v-3H9zm4 0v3h3v-3h-3zm4 0v3h3v-3h-3zM5 16v3h3v-3H5zm4 0v3h3v-3H9zm4 0v3h3v-3h-3z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/locked.svg b/comm/calendar/base/themes/common/icons/locked.svg
new file mode 100644
index 0000000000..c237394a8c
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/locked.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M8 1a4 4 0 00-4 4v2H3a1 1 0 00-1 1v6a1 1 0 001 1h10a1 1 0 001-1V8a1 1 0 00-1-1h-1V5a4 4 0 00-4-4zm0 2a2 2 0 012 2v2H6V5c0-1.1.9-2 2-2z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/low-priority.svg b/comm/calendar/base/themes/common/icons/low-priority.svg
new file mode 100644
index 0000000000..849282a79a
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/low-priority.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M8 2a1 1 0 00-1 1v8.1L5.86 9.97c-.94-.8-2.21.47-1.41 1.41l2.82 2.82h.01c.4.39 1.1.38 1.48 0l2.78-2.79a.98.98 0 000-1.41 1 1 0 00-1.41 0L9 11.07V3a1 1 0 00-1-1z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/newevent.svg b/comm/calendar/base/themes/common/icons/newevent.svg
new file mode 100644
index 0000000000..87a1e56434
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/newevent.svg
@@ -0,0 +1,10 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M15 8.758a4.474 4.474 0 0 0-2-.73V2.17c1.165.412 2 1.523 2 2.829v3.758zM8.758 15H4a3 3 0 0 1-3-3V5c0-1.306.835-2.417 2-2.83V12a1 1 0 0 0 1 1h4.027c.082.734.34 1.416.73 2zM6 2h4v2H6V2z"/>
+ <rect x="4" width="1" height="4" rx=".5"/>
+ <rect x="11" width="1" height="4" rx=".5"/>
+ <path d="M4 7h3v3H4zM3 5h10v1H3z"/>
+ <path d="M12.5 16a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm.5-4v-1.5a.5.5 0 1 0-1 0V12h-1.5a.5.5 0 1 0 0 1H12v1.5a.5.5 0 1 0 1 0V13h1.5a.5.5 0 1 0 0-1H13z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/newtask.svg b/comm/calendar/base/themes/common/icons/newtask.svg
new file mode 100644
index 0000000000..7baa6aa6ff
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/newtask.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M15 8.758a4.474 4.474 0 0 0-2-.73V2H2v11h6.027c.082.734.34 1.416.73 2H2c-1.105 0-2-.84-2-1.875V1.875C0 .839.895 0 2 0h11c1.105 0 2 .84 2 1.875v6.883zM8.758 10c-.196.293-.36.61-.483.947A.5.5 0 0 1 8.5 10h.258zM8.5 4h3a.5.5 0 1 1 0 1h-3a.5.5 0 0 1 0-1zm0 3h3a.5.5 0 1 1 0 1h-3a.5.5 0 0 1 0-1zM6.146 3.146a.5.5 0 1 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-1-1a.5.5 0 1 1 .708-.708l.646.647 1.646-1.647zm0 3a.5.5 0 1 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-1-1a.5.5 0 1 1 .708-.708l.646.647 1.646-1.647zM12.5 16a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm.5-4v-1.5a.5.5 0 1 0-1 0V12h-1.5a.5.5 0 1 0 0 1H12v1.5a.5.5 0 1 0 1 0V13h1.5a.5.5 0 1 0 0-1H13z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/pane.svg b/comm/calendar/base/themes/common/icons/pane.svg
new file mode 100644
index 0000000000..1e281bf57e
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/pane.svg
@@ -0,0 +1,8 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M6 2h4v2H6zm7 0c1.65 0 3 1.5 3 3v8c0 1.65-1.34 3-3 3H3c-1.65 0-3-1.34-3-3V5c0-1.65 1.35-3 3-3v2c-.55 0-1 .55-1 1v8c0 .55.45 1 1 1h10c.55 0 1.05-.45 1-1V5c0-.55-.45-1-1-1z"/>
+ <rect x="4" width="1" height="4" rx=".5"/>
+ <rect x="11" width="1" height="4" rx=".5"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/priority.svg b/comm/calendar/base/themes/common/icons/priority.svg
new file mode 100644
index 0000000000..22d6809bc6
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/priority.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M8 2a1 1 0 0 1 1 1v5a1 1 0 1 1-2 0V3a1 1 0 0 1 1-1zm0 11.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/private.svg b/comm/calendar/base/themes/common/icons/private.svg
new file mode 100644
index 0000000000..6647f48120
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/private.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M1.433 3.2l2.434 2.436a1.243 1.243 0 1 0 1.757-1.757L3.188 1.445A3.956 3.956 0 0 1 4.988 1a3.976 3.976 0 0 1 3.434 6l6.268 6.27a1 1 0 1 1-1.41 1.42L7 8.434A3.96 3.96 0 0 1 4.99 9a4 4 0 0 1-4-4 3.95 3.95 0 0 1 .445-1.8z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/recurrence-exception.svg b/comm/calendar/base/themes/common/icons/recurrence-exception.svg
new file mode 100644
index 0000000000..e374baaf9e
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/recurrence-exception.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg fill="context-fill" fill-opacity="context-fill-opacity" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+ <path d="m13 0-1 1H2.5A2.5 2.5 0 0 0 0 3.5v7c0 .7.28 1.32.73 1.77L0 13l1 1L14 1l-1-1zm2.7 2.3L14 4v6.5a.5.5 0 0 1-.5.5h-3.3l.8-1c.91-.93-.47-2.32-1.41-1.4l-2.3 2.7a1 1 0 0 0 0 1.41l2.3 2.71c.94.91 2.32-.47 1.41-1.41l-.8-1h3.3a2.5 2.5 0 0 0 2.5-2.5v-7c0-.43-.1-.85-.3-1.21zM2.5 3H10l-7.86 7.86A.5.5 0 0 1 2 10.5v-7c0-.28.23-.5.5-.5z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/recurrence.svg b/comm/calendar/base/themes/common/icons/recurrence.svg
new file mode 100644
index 0000000000..dffdfec186
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/recurrence.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg fill="context-fill" fill-opacity="context-fill-opacity" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+ <path d="M2.5 1A2.5 2.5 0 0 0 0 3.5v7A2.5 2.5 0 0 0 2.5 13H4c1.33 0 1.33-2 0-2H2.5a.5.5 0 0 1-.5-.5v-7c0-.28.23-.5.5-.5h11c.28 0 .5.22.5.5v7a.5.5 0 0 1-.5.5h-3.3l.8-1c.91-.94-.47-2.32-1.41-1.41l-2.3 2.7a1 1 0 0 0 0 1.42l2.3 2.7c.94.91 2.32-.47 1.41-1.41l-.8-1h3.3a2.5 2.5 0 0 0 2.5-2.5v-7C16 2.12 14.87.87 13.5 1h-11z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/save-close.svg b/comm/calendar/base/themes/common/icons/save-close.svg
new file mode 100644
index 0000000000..1b51faf67a
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/save-close.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M15 8.758a4.474 4.474 0 0 0-2-.73v-2.2L10.172 3H3v3h5a1 1 0 0 0 1-1V3H3v10h5.027c.082.734.34 1.416.73 2H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h7.172a2 2 0 0 1 1.414.586l2.828 2.828A2 2 0 0 1 15 5.828v2.93zm-5.287.209A4.494 4.494 0 0 0 8.027 12H8a2 2 0 1 1 1.713-3.033zM9 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0zm5.116-1.32l-2.212 2.655-1.127-.751a.5.5 0 1 0-.554.832l1.5 1a.5.5 0 0 0 .661-.096l2.5-3a.5.5 0 1 0-.768-.64z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/sort.svg b/comm/calendar/base/themes/common/icons/sort.svg
new file mode 100644
index 0000000000..a3d32a20bf
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/sort.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M11 7H5a1 1 0 0 0 0 2h6a1 1 0 0 0 0-2zm-3 4H5a1 1 0 0 0 0 2h3a1 1 0 0 0 0-2zm6-8H5a1 1 0 0 0 0 2h9a1 1 0 0 0 0-2zM2 3a1 1 0 1 0 1 1 1 1 0 0 0-1-1zm0 4a1 1 0 1 0 1 1 1 1 0 0 0-1-1zm0 4a1 1 0 1 0 1 1 1 1 0 0 0-1-1z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/status.svg b/comm/calendar/base/themes/common/icons/status.svg
new file mode 100644
index 0000000000..14d3289f3e
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/status.svg
@@ -0,0 +1,10 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M6 2h4v2H6V2zm7 .17c1.165.413 2 1.524 2 2.83v7a3 3 0 0 1-3 3H4a3 3 0 0 1-3-3V5c0-1.306.835-2.417 2-2.83V12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2.17z"/>
+ <rect x="4" width="1" height="4" rx=".5"/>
+ <rect x="11" width="1" height="4" rx=".5"/>
+ <path d="M3 5h10v1H3z"/>
+ <path d="M10.1 7.2a.5.5 0 0 1 .8.6l-3 4a.5.5 0 0 1-.754.054l-2-2a.5.5 0 1 1 .708-.708l1.592 1.593L10.1 7.2z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/synchronize.svg b/comm/calendar/base/themes/common/icons/synchronize.svg
new file mode 100644
index 0000000000..5c6e0eb688
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/synchronize.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M14 1a1 1 0 0 0-1 1v1.146A6.948 6.948 0 0 0 1.227 6.307a1 1 0 1 0 1.94.484A4.983 4.983 0 0 1 8 3a4.919 4.919 0 0 1 3.967 2H10a1 1 0 0 0 0 2h4a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1zm.046 7.481a1 1 0 0 0-1.213.728A4.983 4.983 0 0 1 8 13a4.919 4.919 0 0 1-3.967-2H6a1 1 0 0 0 0-2H2a1 1 0 0 0-1 1v4a1 1 0 0 0 2 0v-1.146a6.948 6.948 0 0 0 11.773-3.161 1 1 0 0 0-.727-1.212z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/task-tab.svg b/comm/calendar/base/themes/common/icons/task-tab.svg
new file mode 100644
index 0000000000..8874ff05c3
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/task-tab.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M2 0h11a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zm0 2v12h11V2H2zm6.5 3h3a.5.5 0 1 1 0 1h-3a.5.5 0 0 1 0-1zm0 3h3a.5.5 0 1 1 0 1h-3a.5.5 0 0 1 0-1zm0 3h3a.5.5 0 1 1 0 1h-3a.5.5 0 1 1 0-1zM6.146 4.146a.5.5 0 1 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-1-1a.5.5 0 1 1 .708-.708l.646.647 1.646-1.647zm0 3a.5.5 0 1 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-1-1a.5.5 0 1 1 .708-.708l.646.647 1.646-1.647z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/task.svg b/comm/calendar/base/themes/common/icons/task.svg
new file mode 100644
index 0000000000..05472c3563
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/task.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M3 1c-1.105 0-2 .839-2 1.875V13.13C1 14.16 1.895 15 3 15V3h12c0-1.035-.89-2-2-2H3zm4.521 2.99a.485.485 0 0 0-.375.156L5.5 5.793l-.646-.647c-.472-.472-1.18.236-.708.708l1 1a.5.5 0 0 0 .708 0l2-2c.354-.354.044-.842-.333-.864zm7.039 1.002c-.37-.024-.77.103-1.12.444l-.94.939 2.12 2.121.94-.939c1.03-1.06.11-2.491-1-2.565zM9.5 5c-.667 0-.667 1 0 1h1c.67 0 .67-1 0-1h-1zM7.521 6.99a.485.485 0 0 0-.375.156L5.5 8.793l-.646-.647c-.472-.472-1.18.236-.708.708l1 1a.5.5 0 0 0 .708 0l2-2c.354-.354.044-.842-.333-.864zm3.469.899L5.439 13.44c-.121.12-.267.31-.439.56v2h1.996c.26-.17.441-.32.561-.44l5.513-5.51-2.08-2.161zM15 10.5L10.5 15H13c.94 0 2-1.06 2-2v-2.5z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/tentative.svg b/comm/calendar/base/themes/common/icons/tentative.svg
new file mode 100644
index 0000000000..d7f55f7ffe
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/tentative.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+ <path fill="context-fill" fill-opacity="context-fill-opacity" d="M 7,6 H 5 C 5,4.6 5,2 8,2 c 2,0 4,0 4,3.5 0,3 -3,3 -3,5.5 H 7 C 7,7.5 10.1,7.5 10,5.5 10,4 9,4 8,4 7,4 7,5 7,6 Z m 0,6 h 2 v 2 H 7 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/timezones.svg b/comm/calendar/base/themes/common/icons/timezones.svg
new file mode 100644
index 0000000000..bd02529163
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/timezones.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M8 0a8 8 0 1 0 8 8 8 8 0 0 0-8-8zm5.163 4.958h-1.552a7.7 7.7 0 0 0-1.051-2.376 6.03 6.03 0 0 1 2.603 2.376zM14 8a5.963 5.963 0 0 1-.335 1.958h-1.821A12.327 12.327 0 0 0 12 8a12.327 12.327 0 0 0-.156-1.958h1.821A5.963 5.963 0 0 1 14 8zm-6 6c-1.075 0-2.037-1.2-2.567-2.958h5.135C10.037 12.8 9.075 14 8 14zM5.174 9.958a11.084 11.084 0 0 1 0-3.916h5.651A11.114 11.114 0 0 1 11 8a11.114 11.114 0 0 1-.174 1.958zM2 8a5.963 5.963 0 0 1 .335-1.958h1.821a12.361 12.361 0 0 0 0 3.916H2.335A5.963 5.963 0 0 1 2 8zm6-6c1.075 0 2.037 1.2 2.567 2.958H5.433C5.963 3.2 6.925 2 8 2zm-2.56.582a7.7 7.7 0 0 0-1.051 2.376H2.837A6.03 6.03 0 0 1 5.44 2.582zm-2.6 8.46h1.549a7.7 7.7 0 0 0 1.051 2.376 6.03 6.03 0 0 1-2.603-2.376zm7.723 2.376a7.7 7.7 0 0 0 1.051-2.376h1.552a6.03 6.03 0 0 1-2.606 2.376z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/today.svg b/comm/calendar/base/themes/common/icons/today.svg
new file mode 100644
index 0000000000..ed891c7473
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/today.svg
@@ -0,0 +1,9 @@
+<!-- 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/. -->
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16">
+ <path d="M6 2h4v2H6V2zm7 .17c1.165.413 2 1.524 2 2.83v7a3 3 0 0 1-3 3H4a3 3 0 0 1-3-3V5c0-1.305.835-2.417 2-2.83V12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2.17z"/>
+ <rect x="4" width="1" height="4" rx=".5"/>
+ <rect x="11" width="1" height="4" rx=".5"/>
+ <path d="M4 7h3v3H4zM3 5h10v1H3z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/icons/warn.svg b/comm/calendar/base/themes/common/icons/warn.svg
new file mode 100644
index 0000000000..a96f74a4aa
--- /dev/null
+++ b/comm/calendar/base/themes/common/icons/warn.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M14.74 12.11L9.79 2.2a2 2 0 0 0-3.58 0l-4.95 9.91A2 2 0 0 0 3.05 15h9.9a2 2 0 0 0 1.79-2.89zM7 5a1 1 0 0 1 2 0v4a1 1 0 0 1-2 0zm1 8.25A1.25 1.25 0 1 1 9.25 12 1.25 1.25 0 0 1 8 13.25z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/attendee-icons.png b/comm/calendar/base/themes/common/images/attendee-icons.png
new file mode 100644
index 0000000000..c425552e76
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/attendee-icons.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/images/event-continue.svg b/comm/calendar/base/themes/common/images/event-continue.svg
new file mode 100644
index 0000000000..5347ef480a
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/event-continue.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 11 11">
+ <path d="M 6,4 H 9 L 5.5,1 2,4 H 5 V 7 H 2 L 5.5,10 9,7 H 6 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/event-end.svg b/comm/calendar/base/themes/common/images/event-end.svg
new file mode 100644
index 0000000000..ebe1568724
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/event-end.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 11 11">
+ <path d="M 2,10 H 9 V 9 H 5.5 L 9,6 H 6 V 1 H 5 V 6 H 2 L 5.5,9 H 2 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/event-grippy.png b/comm/calendar/base/themes/common/images/event-grippy.png
new file mode 100644
index 0000000000..3bb8eba113
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/event-grippy.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/images/event-start.svg b/comm/calendar/base/themes/common/images/event-start.svg
new file mode 100644
index 0000000000..89fde1f69e
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/event-start.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 11 11">
+ <path d="M 2,1 H 9 V 2 H 6 V 7 H 9 L 5.5,10 2,7 H 5 V 2 H 2 Z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/timezone_map.png b/comm/calendar/base/themes/common/images/timezone_map.png
new file mode 100644
index 0000000000..1d3f84445f
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/timezone_map.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/images/timezones.png b/comm/calendar/base/themes/common/images/timezones.png
new file mode 100644
index 0000000000..9170d9d79c
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/timezones.png
Binary files differ
diff --git a/comm/calendar/base/themes/common/images/todayButton-arrow.svg b/comm/calendar/base/themes/common/images/todayButton-arrow.svg
new file mode 100644
index 0000000000..54ec731c10
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/todayButton-arrow.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 7" width="9" height="7">
+ <path fill="context-fill" d="M4.5.74a.9.9 0 0 0-.7.2L.2 4.64a.92.92 0 0 0 1.3 1.3l3-3 3 3a.9.9 0 0 0 1.2-1.3L5.1.94a.9.9 0 0 0-.6-.2z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/todo-complete.svg b/comm/calendar/base/themes/common/images/todo-complete.svg
new file mode 100644
index 0000000000..ef60bcd5a4
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/todo-complete.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 11 11">
+ <path d="M1 0C.5 0 0 .5 0 1v9c0 .5.5 1 1 1h9c.5 0 1-.5 1-1V1c0-.5-.5-1-1-1zm0 1h9v9H1zm6.82 2.99a.52.52 0 0 0-.37.16L4.8 6.79 3.65 5.65c-.46-.48-1.17.23-.7.7l1.5 1.5c.2.2.5.2.7 0l3-3c.36-.35.05-.84-.33-.86z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/images/todo.svg b/comm/calendar/base/themes/common/images/todo.svg
new file mode 100644
index 0000000000..194d5fce37
--- /dev/null
+++ b/comm/calendar/base/themes/common/images/todo.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 11 11">
+ <path d="M1 0C.5 0 0 .5 0 1v9c0 .5.5 1 1 1h9c.5 0 1-.5 1-1V1c0-.5-.5-1-1-1zm0 1h9v9H1zm1.49 2c-.65 0-.66 1 0 1h.11c.65 0 .65-1 0-1zM5.3 3c-.65 0-.66 1 0 1h3c.65 0 .65-1 0-1zM2.5 5c-.65 0-.65 1 0 1h.11c.65 0 .65-1 0-1zM5.3 5c-.65 0-.65 1 0 1h3c.65 0 .65-1 0-1zM2.5 7c-.65 0-.66 1 0 1h.11c.65 0 .65-1 0-1zM5.3 7c-.65 0-.66 1 0 1h3c.65 0 .65-1 0-1z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/imip.css b/comm/calendar/base/themes/common/imip.css
new file mode 100644
index 0000000000..893e633706
--- /dev/null
+++ b/comm/calendar/base/themes/common/imip.css
@@ -0,0 +1,76 @@
+/* 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/. */
+
+.invitation-details {
+ text-align: center;
+ margin: 1em 0;
+ padding: 1em;
+}
+
+.invitation-details[open] > summary {
+ margin-bottom: 0.5em;
+}
+
+.invitation-border {
+ border: 3px solid -moz-default-color;
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ width: -moz-fit-content;
+ height: -moz-fit-content;
+}
+
+.invitation-table {
+ border-collapse: collapse;
+ width: 40em;
+}
+
+.invitation-table :is(td, th) {
+ padding: 3px;
+ vertical-align: baseline;
+}
+
+.invitation-table td {
+ overflow-wrap: anywhere;
+}
+
+.invitation-table .description {
+ width: 9em;
+ text-align: end;
+ font-weight: normal;
+ border-inline-end: 1px solid hsla(0, 0%, 50%, .2);
+ background-color: hsla(0, 0%, 50%, .2);
+}
+
+.invitation-table .content {
+ width: 29em;
+}
+
+.invitation-table .added {
+ color: rgb(255, 0, 0);
+ text-decoration-line: none;
+}
+
+.invitation-table .modified {
+ color: rgb(255, 0, 0);
+ font-style: italic;
+}
+
+.invitation-table .removed {
+ color: rgb(125, 125, 125);
+}
+
+@media (prefers-contrast) {
+ .invitation-table .added {
+ color: currentColor;
+ font-weight: bold;
+ }
+
+ .invitation-table .modified {
+ color: currentColor;
+ }
+
+ .invitation-table .removed {
+ color: currentColor;
+ }
+}
diff --git a/comm/calendar/base/themes/common/jar.inc.mn b/comm/calendar/base/themes/common/jar.inc.mn
new file mode 100644
index 0000000000..201f8d9a91
--- /dev/null
+++ b/comm/calendar/base/themes/common/jar.inc.mn
@@ -0,0 +1,99 @@
+# 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/.
+
+# This is not a complete / proper jar manifest. It is included by the
+# actual theme-specific manifests, so that shared resources need only
+# be specified once. As a result, the source file paths are relative
+# to the location of the actual manifest.
+ skin/classic/calendar/dialogs/calendar-uri-redirect-dialog.css (../common/dialogs/calendar-uri-redirect-dialog.css)
+ skin/classic/calendar/shared/calendar.css (../common/calendar.css)
+ skin/classic/calendar/shared/calendar-alarms.css (../common/calendar-alarms.css)
+ skin/classic/calendar/shared/calendar-attendees.css (../common/calendar-attendees.css)
+ skin/classic/calendar/shared/calendar-creation.css (../common/calendar-creation.css)
+ skin/classic/calendar/shared/calendar-daypicker.css (../common/calendar-daypicker.css)
+ skin/classic/calendar/shared/calendar-item-summary.css (../common/calendar-item-summary.css)
+ skin/classic/calendar/shared/calendar-itip-icons.svg (../common/calendar-itip-icons.svg)
+ skin/classic/calendar/shared/calendar-invitation-display.css (../common/calendar-invitation-display.css)
+ skin/classic/calendar/shared/calendar-occurrence-prompt.css (../common/calendar-occurrence-prompt.css)
+ skin/classic/calendar/shared/calendar-occurrence.svg (../common/calendar-occurrence.svg)
+ skin/classic/calendar/shared/calendar-print.css (../common/calendar-print.css)
+ skin/classic/calendar/shared/calendar-preferences.css (../common/calendar-preferences.css)
+ skin/classic/calendar/shared/calendar-providerUninstall-dialog.css (../common/calendar-providerUninstall-dialog.css)
+ skin/classic/calendar/shared/calendar-task-tree.css (../common/calendar-task-tree.css)
+ skin/classic/calendar/shared/calendar-task-view.css (../common/calendar-task-view.css)
+ skin/classic/calendar/shared/calendar-toolbar.css (../common/calendar-toolbar.css)
+ skin/classic/calendar/shared/calendar-unifinder.css (../common/calendar-unifinder.css)
+ skin/classic/calendar/shared/calendar-views.css (../common/calendar-views.css)
+ skin/classic/calendar/shared/datetimepickers.css (../common/datetimepickers.css)
+ skin/classic/calendar/shared/dialogs/calendar-alarm-dialog.css (../common/dialogs/calendar-alarm-dialog.css)
+ skin/classic/calendar/shared/dialogs/calendar-event-dialog.css (../common/dialogs/calendar-event-dialog.css)
+ skin/classic/calendar/shared/dialogs/calendar-event-dialog-attendees.css (../common/dialogs/calendar-event-dialog-attendees.css)
+ skin/classic/calendar/shared/dialogs/calendar-ics-file-dialog.css (../common/dialogs/calendar-ics-file-dialog.css)
+ skin/classic/calendar/shared/dialogs/calendar-invitations-dialog.css (../common/dialogs/calendar-invitations-dialog.css)
+ skin/classic/calendar/shared/dialogs/calendar-itip-identity-dialog.css (../common/dialogs/calendar-itip-identity-dialog.css)
+ skin/classic/calendar/shared/dialogs/chooseCalendarDialog.css (../common/dialogs/chooseCalendarDialog.css)
+ skin/classic/calendar/shared/calendar-properties-dialog.css (../common/dialogs/calendar-properties-dialog.css)
+ skin/classic/calendar/shared/dialogs/calendar-summary-dialog.css (../common/dialogs/calendar-summary-dialog.css)
+ skin/classic/calendar/shared/calendar-timezone-highlighter.css (../common/dialogs/calendar-timezone-highlighter.css)
+ skin/classic/calendar/shared/calendar-event-dialog-attendees.png (../common/dialogs/images/calendar-event-dialog-attendees.png)
+ skin/classic/calendar/shared/calendar-invitations-dialog-list-images.png (../common/dialogs/images/calendar-invitations-dialog-list-images.png)
+ skin/classic/calendar/shared/chain-lock.svg (../common/dialogs/images/chain-lock.svg)
+ skin/classic/calendar/shared/chain-unlock.svg (../common/dialogs/images/chain-unlock.svg)
+ skin/classic/calendar/shared/link-image-bottom.svg (../common/dialogs/images/link-image-bottom.svg)
+ skin/classic/calendar/shared/link-image-top.svg (../common/dialogs/images/link-image-top.svg)
+ skin/classic/calendar/shared/statusbar-priority-low.svg (../common/dialogs/images/statusbar-priority-low.svg)
+ skin/classic/calendar/shared/statusbar-priority-normal.svg (../common/dialogs/images/statusbar-priority-normal.svg)
+ skin/classic/calendar/shared/statusbar-priority-high.svg (../common/dialogs/images/statusbar-priority-high.svg)
+ skin/classic/calendar/shared/icons/alarm-no.svg (../common/icons/alarm-no.svg)
+ skin/classic/calendar/shared/icons/alarm.svg (../common/icons/alarm.svg)
+ skin/classic/calendar/shared/icons/complete.svg (../common/icons/complete.svg)
+ skin/classic/calendar/shared/icons/confidential.svg (../common/icons/confidential.svg)
+ skin/classic/calendar/shared/icons/decline.svg (../common/icons/decline.svg)
+ skin/classic/calendar/shared/icons/edit.svg (../common/icons/edit.svg)
+ skin/classic/calendar/shared/icons/email.svg (../common/icons/email.svg)
+ skin/classic/calendar/shared/icons/event.svg (../common/icons/event.svg)
+ skin/classic/calendar/shared/icons/find.svg (../common/icons/find.svg)
+ skin/classic/calendar/shared/icons/freebusy.svg (../common/icons/freebusy.svg)
+ skin/classic/calendar/shared/icons/icon32.svg (../common/icons/icon32.svg)
+ skin/classic/calendar/shared/icons/imip-bar.svg (../common/icons/imip-bar.svg)
+ skin/classic/calendar/shared/icons/locked.svg (../common/icons/locked.svg)
+ skin/classic/calendar/shared/icons/low-priority.svg (../common/icons/low-priority.svg)
+ skin/classic/calendar/shared/icons/newevent.svg (../common/icons/newevent.svg)
+ skin/classic/calendar/shared/icons/newtask.svg (../common/icons/newtask.svg)
+ skin/classic/calendar/shared/icons/pane.svg (../common/icons/pane.svg)
+ skin/classic/calendar/shared/icons/priority.svg (../common/icons/priority.svg)
+ skin/classic/calendar/shared/icons/private.svg (../common/icons/private.svg)
+ skin/classic/calendar/shared/icons/recurrence-exception.svg (../common/icons/recurrence-exception.svg)
+ skin/classic/calendar/shared/icons/recurrence.svg (../common/icons/recurrence.svg)
+ skin/classic/calendar/shared/icons/save-close.svg (../common/icons/save-close.svg)
+ skin/classic/calendar/shared/icons/sort.svg (../common/icons/sort.svg)
+ skin/classic/calendar/shared/icons/status.svg (../common/icons/status.svg)
+ skin/classic/calendar/shared/icons/synchronize.svg (../common/icons/synchronize.svg)
+ skin/classic/calendar/shared/icons/task-tab.svg (../common/icons/task-tab.svg)
+ skin/classic/calendar/shared/icons/task.svg (../common/icons/task.svg)
+ skin/classic/calendar/shared/icons/tentative.svg (../common/icons/tentative.svg)
+ skin/classic/calendar/shared/icons/timezones.svg (../common/icons/timezones.svg)
+ skin/classic/calendar/shared/icons/today.svg (../common/icons/today.svg)
+ skin/classic/calendar/shared/icons/warn.svg (../common/icons/warn.svg)
+ skin/classic/calendar/shared/imip.css (../common/imip.css)
+ skin/classic/calendar/shared/attendee-icons.png (../common/images/attendee-icons.png)
+ skin/classic/calendar/shared/event-continue.svg (../common/images/event-continue.svg)
+ skin/classic/calendar/shared/event-end.svg (../common/images/event-end.svg)
+ skin/classic/calendar/shared/event-grippy.png (../common/images/event-grippy.png)
+ skin/classic/calendar/shared/event-start.svg (../common/images/event-start.svg)
+ skin/classic/calendar/shared/publishDialog.css (../common/publishDialog.css)
+ skin/classic/calendar/shared/timezone_map.png (../common/images/timezone_map.png)
+ skin/classic/calendar/shared/timezones.png (../common/images/timezones.png)
+ skin/classic/calendar/shared/todayButton-arrow.svg (../common/images/todayButton-arrow.svg)
+ skin/classic/calendar/shared/todo-complete.svg (../common/images/todo-complete.svg)
+ skin/classic/calendar/shared/todo.svg (../common/images/todo.svg)
+ skin/classic/calendar/shared/today-pane.css (../common/today-pane.css)
+ skin/classic/calendar/shared/view-cycler.svg (../common/view-cycler.svg)
+ skin/classic/calendar/shared/widgets/calendar-widgets.css (../common/widgets/calendar-widgets.css)
+ skin/classic/calendar/shared/widgets/calendar-invitation-panel.css (../common/widgets/calendar-invitation-panel.css)
+ skin/classic/calendar/shared/widgets/calendar-minidate.css (../common/widgets/calendar-minidate.css)
+ skin/classic/calendar/shared/widgets/drag-center.svg (../common/widgets/images/drag-center.svg)
+ skin/classic/calendar/shared/widgets/nav-arrow.svg (../common/widgets/images/nav-arrow.svg)
+ skin/classic/calendar/shared/widgets/nav-today.svg (../common/widgets/images/nav-today.svg)
+ skin/classic/calendar/shared/widgets/minimonth.css (../common/widgets/minimonth.css)
diff --git a/comm/calendar/base/themes/common/publishDialog.css b/comm/calendar/base/themes/common/publishDialog.css
new file mode 100644
index 0000000000..cf59fe22e3
--- /dev/null
+++ b/comm/calendar/base/themes/common/publishDialog.css
@@ -0,0 +1,53 @@
+/* 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");
+
+html|label {
+ white-space: nowrap;
+ margin-right: 0.5em;
+}
+
+#publish-progressmeter {
+ width: -moz-available;
+ appearance: none;
+ height: 4px;
+ margin: 10px 4px;
+ background-color: hsla(0, 0%, 60%, 0.2);
+ border-style: none;
+ border-radius: 2px;
+}
+
+#publish-progressmeter::-moz-progress-bar {
+ appearance: none;
+ background-color: var(--primary);
+ border-radius: 2px;
+}
+
+#publish-progressmeter:indeterminate::-moz-progress-bar {
+ /* Make a white reflecting animation.
+ Create a gradient with 2 identical pattern, and enlarge the size to 200%.
+ This allows us to animate background-position with percentage. */
+ background-image: linear-gradient(90deg, transparent 0%,
+ rgba(255, 255, 255, 0.5) 25%,
+ transparent 50%,
+ rgba(255, 255, 255, 0.5) 75%,
+ transparent 100%);
+ background-size: 200% 100%;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ #publish-progressmeter:indeterminate::-moz-progress-bar {
+ animation: progressSlideX 1.5s linear infinite;
+ }
+
+ @keyframes progressSlideX {
+ 0% {
+ background-position: 0 0;
+ }
+ 100% {
+ background-position: -100% 0;
+ }
+ }
+}
diff --git a/comm/calendar/base/themes/common/today-pane.css b/comm/calendar/base/themes/common/today-pane.css
new file mode 100644
index 0000000000..16509e6d5a
--- /dev/null
+++ b/comm/calendar/base/themes/common/today-pane.css
@@ -0,0 +1,433 @@
+/* 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/. */
+
+:root[lwt-tree-brighttext] #today-pane-panel {
+ --toolbarbutton-hover-background: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .25));
+ --toolbarbutton-hover-bordercolor: var(--lwt-toolbarbutton-hover-background, rgba(255, 255, 255, .5));
+ --toolbarbutton-active-background: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4));
+ --toolbarbutton-active-bordercolor: var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .7));
+ --toolbarbutton-active-boxshadow: 0 0 0 1px var(--lwt-toolbarbutton-active-background, rgba(255, 255, 255, .4)) inset;
+}
+
+.today-subpane {
+ border-bottom-color: var(--splitter-color);
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ padding: 0;
+}
+
+#buttonspacer {
+ width: 5px;
+}
+
+#today-pane-panel {
+ background-color: var(--layout-background-0);
+}
+
+#today-pane-panel:-moz-lwtheme {
+ background-color: var(--toolbar-bgcolor);
+ color: var(--toolbar-color);
+}
+
+#today-pane-panel > * {
+ color: var(--layout-color-0);
+}
+
+#today-pane-panel > .sidebar-header {
+ appearance: none;
+ background-color: var(--layout-background-0);
+ border-bottom: 1px solid var(--splitter-color);
+}
+
+:root[lwt-tree] #today-pane-panel > .sidebar-header {
+ background-color: transparent;
+}
+
+#mini-day-image {
+ background-color: hsla(0, 0%, 50%, 0.1);
+}
+
+:root[lwt-tree] #mini-day-image {
+ background-color: transparent;
+}
+
+.today-pane-cycler {
+ appearance: none;
+ border-radius: var(--button-border-radius);
+ padding-left: 5px;
+ padding-right: 5px;
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+ list-style-image: var(--icon-nav-right);
+}
+
+.today-pane-cycler:hover {
+ background-color: hsla(0, 0%, 0%, 0.1);
+ color: inherit;
+}
+
+.today-pane-cycler:hover:active {
+ background-color: hsla(0, 0%, 0%, 0.2);
+ color: inherit;
+}
+
+@media (prefers-color-scheme: dark) {
+ .today-pane-cycler:hover {
+ background-color: hsla(0, 0%, 100%, 0.1);
+ }
+
+ .today-pane-cycler:hover:active {
+ background-color: hsla(0, 0%, 100%, 0.2);
+ }
+}
+
+.today-pane-cycler[dir="prev"]:-moz-locale-dir(ltr) > .toolbarbutton-icon,
+.today-pane-cycler[dir="next"]:-moz-locale-dir(rtl) > .toolbarbutton-icon {
+ transform: scaleX(-1);
+}
+
+#today-closer {
+ margin-inline-end: 3px;
+}
+
+#today-pane-panel:-moz-lwtheme > vbox {
+ text-shadow: none;
+ background-color: var(--layout-background-0);
+}
+
+:root[lwt-tree] #today-pane-panel > vbox {
+ background-color: var(--lwt-accent-color);
+ color: inherit;
+}
+
+:root[lwt-tree-brighttext] #today-pane-panel > vbox {
+ background-image: linear-gradient(rgba(255, 255, 255, 0.05),
+ rgba(255, 255, 255, 0.05));
+}
+
+:root[lwt-tree] #agenda-panel > modebox {
+ background-color: var(--sidebar-background-color);
+}
+
+#today-minimonth-box {
+ background-color: var(--layout-background-1);
+}
+
+:root[lwt-tree] #today-minimonth-box {
+ background-color: var(--sidebar-background-color);
+}
+
+#weekdayNameLabel {
+ font-family: Trebuchet MS, Lucida Grande, Arial, Helvetica, sans-serif;
+ padding-top: 4px;
+ font-weight: bold;
+ font-size: 18px;
+}
+
+.monthlabel {
+ margin-inline-end: 0;
+}
+
+.dateValue {
+ font-family: Arial, Helvetica, Trebuchet MS, Lucida Grande, sans-serif;
+ margin-top: initial;
+ margin-bottom: initial;
+ font-size: 36px;
+ font-weight: bold;
+ width: 1em;
+ text-align: center;
+}
+
+#dragCenter-image-container {
+ pointer-events: none;
+}
+
+.miniday-nav-buttons {
+ margin-top: 2px;
+ min-width: 19px;
+ -moz-user-focus: normal;
+ -moz-context-properties: stroke, fill-opacity;
+ list-style-image: var(--icon-nav-right-sm);
+ stroke: currentColor;
+ fill-opacity: var(--toolbarbutton-icon-fill-opacity);
+}
+
+.miniday-nav-buttons,
+#miniday-dropdown-button {
+ appearance: none;
+ -moz-user-focus: normal;
+ border: 1px solid transparent;
+ border-radius: var(--button-border-radius);
+}
+
+.miniday-nav-buttons:not([disabled="true"]):hover,
+#miniday-dropdown-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;
+}
+
+.miniday-nav-buttons:not([disabled="true"]):hover:active,
+#miniday-dropdown-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;
+}
+
+#previous-day-button:-moz-locale-dir(ltr),
+#next-day-button:-moz-locale-dir(rtl) {
+ list-style-image: var(--icon-nav-left-sm);
+}
+
+.miniday-nav-buttons:focus-visible:not(:hover),
+#miniday-dropdown-button:focus-visible:not(:hover) {
+ outline: 2px solid var(--focus-outline-color);
+ outline-offset: -2px;
+}
+
+#today-button {
+ list-style-image: var(--icon-nav-today);
+}
+
+.miniday-nav-buttons[disabled] {
+ opacity: .3;
+}
+
+.miniday-nav-buttons > .toolbarbutton-icon {
+ margin: 1px;
+}
+
+#miniday-dropdown-button {
+ max-width: 18px;
+ margin: 2px;
+ -moz-user-focus: normal;
+}
+
+#miniday-dropdown-button > .toolbarbutton-icon,
+#miniday-dropdown-button > .toolbarbutton-text,
+.miniday-nav-buttons > .toolbarbutton-text {
+ display: none;
+}
+
+#miniday-dropdown-button > .toolbarbutton-menu-dropmarker {
+ padding-inline-start: 0;
+ list-style-image: var(--icon-nav-down-sm);
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+#miniday-dropdown-button > .toolbarbutton-menu-dropmarker::part(icon) {
+ width: 12px;
+ height: 12px;
+}
+
+#agenda-toolbar {
+ border: none;
+ padding: 4px 1px;
+}
+
+#todaypane-new-event-button {
+ appearance: none;
+ -moz-user-focus: normal;
+ border: 1px solid transparent;
+ border-radius: var(--button-border-radius);
+ margin: 2px 3px 1px;
+ list-style-image: var(--icon-new-event);
+ -moz-context-properties: fill, stroke, fill-opacity;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ fill-opacity: var(--toolbarbutton-icon-fill-opacity);
+}
+
+#todaypane-new-event-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;
+}
+
+#todaypane-new-event-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;
+}
+
+#todaypane-new-event-button:focus-visible:not(:hover) {
+ outline: 2px solid var(--focus-outline-color);
+ outline-offset: var(--focus-outline-offset);
+}
+
+#todaypane-new-event-button > .toolbarbutton-text {
+ padding-inline-start: 5px;
+}
+
+#today-pane-splitter {
+ border-bottom: 1px solid var(--splitter-color);
+ /* splitter grip area */
+ height: 5px;
+ /* make only the splitter border visible */
+ margin-top: -5px;
+ /* because of the negative margin needed to make the splitter visible */
+ position: relative;
+ z-index: 10;
+}
+
+#todo-tab-panel {
+ height: 40%;
+ min-height: 160px;
+}
+
+#today-pane-splitter[hidden="true"] + #todo-tab-panel {
+ height: 100%;
+}
+
+#show-completed-checkbox-box {
+ padding-top: 3px;
+ padding-inline-start: 5px;
+}
+
+#agenda-container {
+ flex: 1 auto;
+ display: flex;
+ flex-direction: column;
+ min-height: 7em; /* Show at least the #agenda-toolbar and a part of the events. */
+ height: 0; /* Allow shrinking with flexbox emulation. */
+}
+
+#agenda {
+ flex: 1;
+ overflow: auto;
+ height: 0;
+ margin: 0;
+ padding: 3px 6px;
+ list-style: none;
+ background-color: var(--layout-background-1);
+ border-top: 1px solid var(--splitter-color);
+ --selected-background: var(--selected-item-color);
+ --selected-foreground: var(--selected-item-text-color);
+}
+
+:root[lwt-tree] #agenda {
+ --selected-background: var(--sidebar-highlight-background-color, hsla(0, 0%, 80%, .3));
+ --selected-foreground: var(--sidebar-highlight-text-color, var(--sidebar-text-color));
+}
+
+:root[lwt-tree-brighttext] #agenda {
+ --selected-background: var(--sidebar-highlight-background-color, rgba(249, 249, 250, .1));
+}
+
+.agenda-date-header,
+.agenda-listitem-details {
+ padding: 6px;
+}
+
+:root[uidensity="compact"] :is(.agenda-date-header, .agenda-listitem-details) {
+ padding: 3px;
+}
+
+:root[uidensity="touch"] :is(.agenda-date-header, .agenda-listitem-details) {
+ padding: 12px;
+}
+
+.agenda-date-header {
+ margin-block-start: 9px;
+ margin-inline: -6px;
+ padding-inline: 6px !important;
+ background-color: var(--button-background-color);
+ font-weight: bold;
+}
+
+.agenda-listitem:first-child .agenda-date-header {
+ margin-block-start: -3px;
+}
+
+.agenda-listitem-details {
+ display: flex;
+ align-items: baseline;
+ border-radius: 3px;
+}
+
+.agenda-listitem-all-day .agenda-listitem-details {
+ margin-block: 1px;
+ padding-inline: 8px;
+ background-color: var(--item-backcolor);
+ color: var(--item-forecolor);
+}
+
+.agenda-listitem-past .agenda-listitem-details {
+ opacity: 0.5;
+}
+
+#agenda:focus .agenda-listitem.selected .agenda-listitem-details {
+ background-color: var(--selected-background);
+ color: var(--selected-foreground);
+ opacity: unset; /* Overrides .agenda-listitem-past */
+}
+
+.agenda-listitem-all-day :is(.agenda-listitem-calendar, .agenda-listitem-time) {
+ display: none;
+}
+
+.agenda-listitem-calendar {
+ width: 10px;
+ height: 10px;
+ margin-inline-end: 6px;
+ display: inline-block;
+ border-radius: 5px;
+ background-color: var(--item-backcolor);
+}
+
+.agenda-listitem-details-inner {
+ flex: 1;
+}
+
+.agenda-listitem-time {
+ margin-inline-end: 3px;
+ font-weight: 600;
+}
+
+.agenda-listitem-time:empty {
+ display: none;
+}
+
+.agenda-listitem-relative {
+ font-size: 0.85em;
+ white-space: nowrap;
+}
+
+.agenda-listitem:not(.selected, .agenda-listitem-now) .agenda-listitem-relative {
+ opacity: 0.75;
+}
+
+.agenda-listitem-relative:empty {
+ display: none;
+}
+
+.agenda-listitem-now .agenda-listitem-relative {
+ padding: 1px 4px;
+ border-radius: 12px;
+ background-color: var(--viewTodayLabelBackground);
+ color: var(--viewTodayLabelColor);
+ font-weight: bold;
+}
+
+#agenda:focus .agenda-listitem-now.selected .agenda-listitem-relative {
+ background-color: var(--selected-foreground);
+ color: var(--selected-background);
+}
+
+.agenda-listitem-overlap {
+ margin-inline-start: 6px;
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+.agenda-listitem-overlap:not([src]) {
+ display: none;
+}
diff --git a/comm/calendar/base/themes/common/view-cycler.svg b/comm/calendar/base/themes/common/view-cycler.svg
new file mode 100644
index 0000000000..847378327c
--- /dev/null
+++ b/comm/calendar/base/themes/common/view-cycler.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M6 14a1 1 0 0 1-.707-1.707L9.586 8 5.293 3.707a1 1 0 0 1 1.414-1.414l5 5a1 1 0 0 1 0 1.414l-5 5A1 1 0 0 1 6 14z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/widgets/calendar-invitation-panel.css b/comm/calendar/base/themes/common/widgets/calendar-invitation-panel.css
new file mode 100644
index 0000000000..dde91c2061
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/calendar-invitation-panel.css
@@ -0,0 +1,135 @@
+/* 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/. */
+@import url("chrome://global/skin/in-content/common.css");
+
+:host(calendar-invitation-panel) {
+ background-color: Field;
+ width: auto;
+ border: 1px solid var(--splitter-color);
+}
+
+:host(calendar-invitation-panel) .notificationbox-stack {
+ width: 100%;
+ padding: 10px 20px;
+}
+
+:host(calendar-invitation-panel) .notificationbox-stack > notification-message {
+ margin: 0;
+}
+
+.calendar-invitation-panel-wrapper {
+ display: flex;
+ padding: 10px 20px;
+}
+
+.calendar-invitation-panel-details {
+ padding: 10px 20px;
+ display: flex;
+ flex-direction: column;
+}
+
+.calendar-invitation-panel-title {
+ margin-bottom: 5px;
+ display: flex;
+ justify-content: center;
+}
+
+.calendar-invitation-panel-title > h1 {
+ font-size: 1.4rem;
+ font-weight: 800;
+ margin: 0;
+}
+
+.calendar-invitation-panel-response-buttons {
+ margin-inline-start: auto;
+}
+
+.calendar-invitation-panel-response-buttons button {
+ min-height: 2.5em;
+ font-size: .8em;
+}
+
+.calendar-invitation-panel-details-footer:not([hidden]) {
+ flex-grow: 2;
+ display: flex;
+ align-items: baseline;
+ padding: 10px 20px;
+}
+
+.calendar-invitation-panel-props {
+ margin: 1.5em 0px;
+}
+
+.calendar-invitation-panel-props > dt,
+.calendar-invitation-panel-props > dd {
+ display: inline-block;
+}
+
+.calendar-invitation-panel-props th, .calendar-invitation-panel-props td {
+ vertical-align: top;
+ padding: 3px 0;
+}
+
+.calendar-invitation-panel-props th {
+ text-align: end;
+ padding-inline-end: 1em;
+}
+
+.calendar-invitation-panel-props td.content {
+ overflow-y: auto;
+ max-width: 28em;
+ word-break: break-word;
+}
+
+calendar-invitation-interval {
+ display: inline-block;
+}
+
+.calendar-invitation-panel-partstat-breakdown:before {
+ content: "("
+}
+
+.calendar-invitation-panel-partstat-breakdown:after {
+ content: ")"
+}
+
+.calendar-invitation-panel-partstat-summary +
+.calendar-invitation-panel-partstat-summary {
+ margin-inline-start: 0.5em;
+}
+
+.calendar-invitation-panel-partstat-summary-total {
+ margin-inline-end: 0.5em;
+}
+
+.calendar-invitation-panel-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.calendar-invitation-panel-list li {
+ display: flex;
+ align-items: center;
+ gap: 3px;
+}
+
+.calendar-invitation-panel-list li img {
+ width: 16px;
+ height: 16px;
+}
+
+.calendar-invitation-panel-list li span.removed {
+ text-decoration: line-through;
+}
+
+calendar-invitation-change-indicator:not([hidden]) {
+ border-radius: var(--button-border-radius);
+ margin-inline-end: 3px;
+ margin-block: 2px;
+ padding-inline: 7px;
+ background-color: rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 0 0 1px transparent;
+ display: inline-block;
+}
diff --git a/comm/calendar/base/themes/common/widgets/calendar-minidate.css b/comm/calendar/base/themes/common/widgets/calendar-minidate.css
new file mode 100644
index 0000000000..50a9eac4cd
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/calendar-minidate.css
@@ -0,0 +1,36 @@
+/* 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/. */
+@import url("chrome://global/skin/in-content/common.css");
+
+:host(calendar-minidate) {
+ display: block;
+ border: 1px solid var(--splitter-color);
+ align-self: center;
+}
+
+.calendar-minidate-header {
+ padding: 1px 30px;
+ text-align: center;
+ font-weight: 500;
+ font-size: 1.5rem;
+ background-color: var(--viewTodayLabelBackground);
+ color: var(--viewTodayLabelColor);
+}
+
+.calendar-minidate-body {
+ padding: 1px 30px;
+ text-align: center;
+ background-color: Field;
+}
+
+.calendar-minidate-day {
+ font-weight: 700;
+ font-size: 2rem;
+ display: block;
+ color: var(--viewMonthDayBoxLabelColor);
+}
+
+.calendar-minidate-year {
+ font-size: 1.2rem;
+}
diff --git a/comm/calendar/base/themes/common/widgets/calendar-widgets.css b/comm/calendar/base/themes/common/widgets/calendar-widgets.css
new file mode 100644
index 0000000000..4f9c85bdc0
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/calendar-widgets.css
@@ -0,0 +1,388 @@
+/* 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 {
+ --calendar-list-header-padding: 9px 12px;
+ --calendar-list-item-padding: 3px;
+ --calendar-list-item-margin: 3px;
+ --calendar-list-item-dot-size: 9px;
+ --calendar-list-item-dot-gap: 6px;
+ --calendar-panel-spacer: 3px;
+ --calendar-side-panel-minimonth-margin: 0 calc(2 * var(--calendar-panel-spacer));
+}
+
+:root[uidensity="compact"] {
+ --calendar-list-header-padding: 6px 9px;
+ --calendar-list-item-padding: 1px;
+ --calendar-list-item-margin: 1px;
+ --calendar-list-item-dot-size: 6px;
+ --calendar-list-item-dot-gap: 3px;
+ --calendar-side-panel-minimonth-margin: var(--calendar-panel-spacer);
+}
+
+:root[uidensity="touch"] {
+ --calendar-list-header-padding: 9px 15px;
+ --calendar-list-item-padding: 6px;
+ --calendar-list-item-margin: 6px;
+ --calendar-list-item-dot-size: 9px;
+ --calendar-list-item-dot-gap: 9px;
+ --calendar-side-panel-minimonth-margin: 0 calc(3 * var(--calendar-panel-spacer));
+}
+
+/* Calendar Items */
+
+.calendar-list-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+ min-height: auto;
+ min-width: auto;
+ margin: 0;
+ background-color: transparent;
+ border-color: transparent;
+ border-radius: 0;
+ padding: var(--calendar-list-header-padding);
+ font-size: 1.1rem;
+ font-weight: 600;
+}
+
+.calendar-list-header > * {
+ pointer-events: none;
+}
+
+.calendar-list-header:hover {
+ border-color: transparent !important;
+}
+
+#calendarListHeader:hover {
+ background-color: var(--layout-background-3);
+}
+
+#calendarListHeader[checked="false"] > img {
+ transform: rotate(-90deg);
+}
+
+.calendar-list-create {
+ list-style-image: var(--icon-add);
+ margin-block: 0;
+ margin-inline: 3px;
+ padding: 3px !important;
+ border: none !important;
+ min-width: auto;
+}
+
+.calendar-list-create .toolbarbutton-text:not([value]) {
+ display: none;
+}
+
+checkbox.treenode-checkbox {
+ margin-inline: 6px;
+ margin-block: 0;
+ font-weight: bold;
+}
+
+checkbox.treenode-checkbox.agenda-checkbox {
+ padding-block: 6px;
+}
+
+checkbox.treenode-checkbox > .checkbox-check {
+ appearance: none;
+ align-items: center;
+ border: none;
+ width: 10px;
+ height: 10px;
+ color: inherit;
+ background-image: var(--icon-nav-down-sm);
+ background-size: contain;
+ background-color: transparent !important;
+ -moz-context-properties: stroke;
+ stroke: currentColor;
+}
+
+checkbox.treenode-checkbox:not([checked="true"]) > .checkbox-check {
+ transform: rotate(-90deg);
+}
+
+checkbox.treenode-checkbox:not([checked="true"]):-moz-locale-dir(rtl) > .checkbox-check {
+ transform: rotate(90deg);
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ checkbox.treenode-checkbox > .checkbox-check {
+ transition: transform 200ms ease;
+ }
+ #calendarListHeader > img {
+ transition: transform 150ms ease;
+ }
+ #calendar-list > li,
+ #calendar-list > li > :is(.calendar-displayed,.calendar-more-button) {
+ transition: opacity 250ms ease;
+ }
+ #calendar-list > li {
+ transition: background-color 250ms ease, color 250ms ease;
+ }
+}
+
+.checkbox-label-box {
+ margin-inline-start: 4px;
+}
+
+.checkbox-icon {
+ margin-inline-end: 2px;
+}
+
+.checkbox-label {
+ margin: 0 !important;
+}
+
+checkbox.treenode-checkbox > .checkbox-label-center-box > .checkbox-label-box > .checkbox-label {
+ font-weight: bold;
+ border-bottom: 1px solid -moz-Dialog;
+}
+
+.selected-text {
+ font-weight: bold;
+}
+
+.selected-text:not([selected="true"]),
+.unselected-text[selected="true"] {
+ visibility: hidden;
+}
+
+.categories-textbox .textbox-search-icon {
+ list-style-image: none;
+ cursor:default;
+}
+
+.categories-textbox {
+ appearance: auto;
+ -moz-default-appearance: textfield;
+}
+
+/*
+ * Note that #calendar-list is used for 2 separate lists that look similar,
+ * but are otherwise independent:
+ *
+ * - calendar-providerUninstall-dialog.xhtml
+ * - calendar-tab-panels.inc.xhtml
+ *
+ * Please be careful when changing the following CSS.
+ */
+
+#calendar-list-pane {
+ display: flex;
+ flex-direction: column;
+ flex: 1 1 0;
+ justify-content: space-between;
+}
+
+#calendar-list-inner-pane {
+ display: flex;
+ flex-direction: column;
+ flex: 1 1 0;
+ overflow-x: hidden;
+}
+
+#calendar-list-inner-pane > #calendar-list {
+ overflow: auto;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ flex: 1 1 0;
+ min-width: 150px;
+}
+
+#calendar-list > li {
+ display: flex;
+ padding-block: var(--calendar-list-item-padding);
+ padding-inline: 14px var(--calendar-list-item-dot-gap);
+ align-items: center;
+ margin-block: var(--calendar-list-item-margin);
+ margin-inline: 9px;
+ border-radius: 3px;
+ gap: var(--calendar-list-item-dot-gap);
+}
+
+#calendar-list > li.selected {
+ background-color: -moz-cellhighlight;
+ color: -moz-cellhighlighttext;
+}
+
+#calendar-list:focus-within > li.selected {
+ background-color: var(--selected-item-color);
+ color: var(--selected-item-text-color);
+}
+
+#calendar-list > li:not(.selected):hover {
+ background-color: color-mix(in srgb, var(--selected-item-color) 10%, transparent);
+}
+
+#calendar-list > li.dragging {
+ opacity: 0.75;
+}
+
+:root[lwt-tree] #calendar-list > li.selected {
+ border-color: var(--sidebar-highlight-background-color, hsla(0,0%,80%,.3));
+ background: var(--sidebar-highlight-background-color, hsla(0,0%,80%,.3));
+ color: var(--sidebar-highlight-text-color, var(--sidebar-text-color));
+}
+
+:root[lwt-tree] #calendar-list:focus > li.selected {
+ border-color: var(--sidebar-highlight-background-color, hsla(0,0%,80%,.6));
+ color: var(--sidebar-highlight-text-color, var(--sidebar-text-color));
+}
+
+:root[lwt-tree-brighttext] #calendar-list > li.selected {
+ border-color: var(--sidebar-highlight-background-color, rgba(249,249,250,.1));
+ background: var(--sidebar-highlight-background-color, rgba(249,249,250,.1));
+}
+
+:root[lwt-tree-brighttext] #calendar-list:focus > li.selected {
+ border-color: var(--sidebar-highlight-background-color, rgba(249,249,250,.3));
+ color: var(--sidebar-highlight-text-color, var(--sidebar-text-color));
+}
+
+#calendar-list > li > button.calendar-enable-button {
+ color: #fff !important;
+ background: #6b80a4;
+ padding: 1px 4px;
+ font-size: 0.75em;
+ text-transform: uppercase;
+ font-weight: 700;
+ border-radius: 12px;
+ margin: 0;
+ min-width: auto;
+ min-height: auto;
+}
+
+#calendar-list > li > button.calendar-enable-button:hover,
+#calendar-list > li > button.calendar-enable-button:focus,
+#calendar-list > li > button.calendar-enable-button:active {
+ background: #2c4c82;
+}
+
+#calendar-list > li > :is(.calendar-displayed,.calendar-more-button) {
+ appearance: none;
+ color: inherit;
+ background-color: transparent !important;
+ border-style: none;
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+ margin: 0px;
+ min-width: 16px;
+ min-height: 16px;
+ width: 16px;
+ height: 16px;
+}
+
+#calendar-list > li > .calendar-displayed {
+ background-image: var(--icon-hidden);
+ opacity: 0.7;
+}
+
+#calendar-list > li > .calendar-displayed:checked {
+ background-image: var(--icon-eye);
+ opacity: 0;
+}
+
+#calendar-list > li > .calendar-more-button {
+ --button-padding: 0;
+ opacity: 0;
+ margin-block: 0;
+ background-image: var(--icon-more);
+}
+
+#calendar-list > li > .calendar-displayed:is(:hover, :focus),
+#calendar-list > li > .calendar-more-button:is(:hover, :focus) {
+ opacity: 0.9 !important;
+}
+
+#calendar-list > li:hover > .calendar-displayed:checked,
+#calendar-list > li:hover > .calendar-more-button {
+ opacity: 0.7;
+}
+
+#calendar-list > :is(li, richlistitem) > .calendar-color {
+ width: var(--calendar-list-item-dot-size);
+ height: var(--calendar-list-item-dot-size);
+ border-radius: 5px;
+ box-sizing: border-box;
+ flex-shrink: 0;
+}
+
+#calendar-list > li > .calendar-name {
+ flex: 1;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+#calendar-list > li[calendar-disabled]:not(.selected) > .calendar-name {
+ color: #808080;
+}
+
+#calendar-list > li > .calendar-list-icon {
+ width: 16px;
+ height: 16px;
+ -moz-context-properties: fill, stroke;
+ fill: color-mix(in srgb, currentColor 20%, transparent);
+ stroke: currentColor;
+}
+
+#calendar-list > li > .calendar-list-icon:not([src]) {
+ visibility: hidden;
+}
+
+#calendar-list > li:not([calendar-muted]) > .calendar-mute-status {
+ display: none;
+}
+
+#calendar-list > richlistitem {
+ align-items: center;
+}
+
+#sideButtonsBottom {
+ display: inline-flex;
+ justify-content: space-between;
+}
+
+#newCalendarSidebarButton {
+ background-image: var(--icon-calendar);
+}
+
+#refreshCalendar {
+ background-image: var(--icon-sync);
+}
+
+#sidePanelNewEvent,
+#sidePanelNewTask {
+ background-image: var(--icon-add);
+}
+
+:root[uidensity="touch"] #sidePanelNewEvent,
+:root[uidensity="touch"] #sidePanelNewTask {
+ --icon-size: 20px;
+ background-image: var(--icon-add-md);
+}
+
+/* Calendar Side Panel */
+
+#primaryButtonSidePanel {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+:root[uidensity="compact"] #primaryButtonSidePanel {
+ margin-top: var(--calendar-panel-spacer);
+}
+
+#calMinimonthBox {
+ margin: var(--calendar-side-panel-minimonth-margin);
+}
diff --git a/comm/calendar/base/themes/common/widgets/images/drag-center.svg b/comm/calendar/base/themes/common/widgets/images/drag-center.svg
new file mode 100644
index 0000000000..acb6deb807
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/images/drag-center.svg
@@ -0,0 +1,9 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="15" stroke="#fff" fill="none">
+ <path stroke-width="3" stroke-opacity=".8" d="M31.5 3v9M27 7.5h9M0 7.5h8"/>
+ <path stroke="#aaa" d="M1 7.5h6M28 7.5h7M31.5 4v7"/>
+ <circle r="6.5" cy="7.5" cx="18" stroke-width="2" stroke-opacity=".8"/>
+ <circle r="5.5" cy="7.5" cx="18" stroke="#4c4c4c" stroke-width="1.5" stroke-opacity=".5"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/widgets/images/nav-arrow.svg b/comm/calendar/base/themes/common/widgets/images/nav-arrow.svg
new file mode 100644
index 0000000000..db02016c56
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/images/nav-arrow.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
+ <path fill="context-fill" d="M9 6a1 1 0 0 0-.293-.707l-3-3a1 1 0 0 0-1.414 1.414L6.586 6 4.293 8.293a1 1 0 0 0 1.414 1.414l3-3A1 1 0 0 0 9 6z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/widgets/images/nav-today.svg b/comm/calendar/base/themes/common/widgets/images/nav-today.svg
new file mode 100644
index 0000000000..d9b2fb6083
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/images/nav-today.svg
@@ -0,0 +1,7 @@
+<!-- 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/. -->
+
+<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12">
+ <circle cx="6" cy="6" r="4" style="fill:none;stroke:context-fill;stroke-width:2.25;" />
+</svg>
diff --git a/comm/calendar/base/themes/common/widgets/images/view-navigation.svg b/comm/calendar/base/themes/common/widgets/images/view-navigation.svg
new file mode 100644
index 0000000000..847378327c
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/images/view-navigation.svg
@@ -0,0 +1,6 @@
+<!-- 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/. -->
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
+ <path fill="context-fill" d="M6 14a1 1 0 0 1-.707-1.707L9.586 8 5.293 3.707a1 1 0 0 1 1.414-1.414l5 5a1 1 0 0 1 0 1.414l-5 5A1 1 0 0 1 6 14z"/>
+</svg>
diff --git a/comm/calendar/base/themes/common/widgets/minimonth.css b/comm/calendar/base/themes/common/widgets/minimonth.css
new file mode 100644
index 0000000000..28c26e4b6f
--- /dev/null
+++ b/comm/calendar/base/themes/common/widgets/minimonth.css
@@ -0,0 +1,385 @@
+/* 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/. */
+
+calendar-minimonth {
+ --mmMainColor: -moz-DialogText;
+ --mmMainBackground: var(--color-gray-05);
+ --mmMainBorderColor: var(--color-gray-20);
+ --mmMainBorderRadius: 6px;
+ --mmHighlightColor: var(--selected-item-text-color);
+ --mmHighlightBackground: var(--selected-item-color);
+ --mmHighlightBorderColor: var(--selected-item-color);
+ --mmBoxBackground: var(--color-gray-20);
+ --mmBoxBorderColor: var(--color-gray-20);
+ --mmBoxPadding: 0;
+ --mmBoxItemColor: var(--color-gray-30);
+ --mmBoxItemBorderColor: transparent;
+ --mmBoxItemPadding: 2px;
+ --mmDayColor: var(--color-gray-70);
+ --mmDayBackground: transparent;
+ --mmDayBorderColor: transparent;
+ --mmDayOtherColor: var(--color-gray-40);
+ --mmDayWeekColor: var(--color-ink-40);
+ --mmDayOtherBackground: transparent;
+ --mmDayOtherBorderColor: transparent;
+ --mmDayTodayColor: var(--color-gray-90);
+ --mmDayTodayBackground: color-mix(in srgb, var(--color-ink-40) 20%, transparent);
+ --mmDayTodayBorderColor: transparent;
+ --mmDaySelectedColor: var(--color-blue-60);
+ --mmDaySelectedBackground: var(--color-blue-10);
+ --mmDaySelectedBorderColor: var(--color-blue-50);
+ --mmDaySelectedTodayBackground: var(--color-blue-10);
+ --mmDaySelectedTodayBorderColor: var(--color-blue-50);
+ --mmDayBorderRadius: 3px;
+ --mmDayPadding: 4px;
+ --mmDayBusyColor: var(--color-blue-50);
+ --mmDayBusyIndicatorSize: 4px;
+}
+
+/* This includes the light theme not inherited by the system */
+:root[lwt-tree]:not([lwt-tree-brighttext]) calendar-minimonth {
+ --mmMainColor: var(--sidebar-text-color, FieldText);
+ --mmMainBackground: transparent;
+ --mmHighlightColor: var(--sidebar-highlight-text-color, var(--selected-item-text-color));
+ --mmHighlightBackground: var(--sidebar-highlight-background-color, var(--selected-item-color));
+ --mmHighlightBorderColor: var(--sidebar-highlight-background-color, var(--selected-item-color));
+ --mmBoxBackground: var(--color-gray-20);
+ --mmBoxBorderColor: var(--color-gray-30);
+ --mmBoxItemColor: var(--color-gray-30);
+ --mmBoxItemBorderColor: transparent;
+ --mmDayTodayColor: var(--color-gray-90);
+ --mmDayTodayBorderColor: transparent;
+ --mmDayColor: var(--color-gray-70);
+ --mmDayBorderColor: transparent;
+ --mmDayOtherColor: var(--color-gray-40);
+ --mmDayOtherBackground: transparent;
+ --mmDayOtherBorderColor: transparent;
+}
+
+@media (prefers-color-scheme: dark) {
+ calendar-minimonth {
+ --mmMainColor: var(--sidebar-text-color, FieldText);
+ --mmMainBackground: var(--color-gray-70);
+ --mmMainBorderColor: var(--color-gray-50);
+ --mmHighlightColor: var(--sidebar-highlight-text-color, var(--selected-item-text-color));
+ --mmHighlightBackground: var(--sidebar-highlight-background-color, var(--selected-item-color));
+ --mmHighlightBorderColor: var(--sidebar-highlight-background-color, var(--selected-item-color));
+ --mmBoxBackground: var(--color-gray-50);
+ --mmBoxBorderColor: var(--color-gray-40);
+ --mmBoxItemColor: var(--color-gray-40);
+ --mmBoxItemBorderColor: transparent;
+ --mmDayTodayColor: var(--color-ink-10);
+ --mmDayTodayBorderColor: transparent;
+ --mmDayColor: var(--color-gray-10);
+ --mmDayBackground: transparent;
+ --mmDayBorderColor: transparent;
+ --mmDayOtherColor: var(--color-gray-50);
+ --mmDayOtherBackground: transparent;
+ --mmDayOtherBorderColor: transparent;
+ --mmDaySelectedColor: var(--color-ink-10);
+ --mmDaySelectedBackground: color-mix(in srgb, var(--color-blue-40) 20%, transparent);
+ --mmDaySelectedBorderColor: var(--color-blue-50);
+ --mmDaySelectedTodayBackground: color-mix(in srgb, var(--color-blue-40) 30%, transparent);
+ --mmDaySelectedTodayBorderColor: var(--color-blue-50);
+ --mmDayWeekColor: var(--color-ink-40);
+ }
+}
+
+@media (prefers-contrast) {
+ calendar-minimonth:not(:-moz-lwtheme) {
+ --mmMainBackground: transparent;
+ --mmBoxBackground: ButtonFace;
+ --mmBoxBorderColor: var(--color-gray-30);
+ --mmBoxItemColor: var(--color-gray-40);
+ --mmBoxItemBorderColor: var(--mmBoxBorderColor);
+ --mmDayColor: WindowText;
+ --mmDayOtherColor: GrayText;
+ --mmDayWeekColor: var(--selected-item-color);
+ --mmDayOtherBackground: transparent;
+ --mmDayTodayColor: -moz-DialogText;
+ --mmDayTodayBackground: Field;
+ --mmDayTodayBorderColor: var(--selected-item-color);
+ --mmDaySelectedColor: var(--selected-item-text-color);
+ --mmDaySelectedBackground: var(--selected-item-color);
+ --mmDaySelectedBorderColor: ButtonFace;
+ --mmDaySelectedTodayBackground: var(--selected-item-color);
+ --mmDaySelectedTodayBorderColor: ButtonFace;
+ }
+}
+
+:root[uidensity="compact"] calendar-minimonth {
+ --mmDayPadding: 2px;
+}
+
+:root[uidensity="touch"] calendar-minimonth {
+ --mmDayPadding: 8px;
+ --mmBoxPadding: 1px;
+ --mmBoxItemPadding: 4px;
+}
+
+.datepicker-menulist > menupopup::part(content) {
+ --panel-padding: 3px;
+}
+
+calendar-minimonth {
+ background-color: var(--mmMainBackground);
+ border-width: 0;
+ color: var(--mmMainColor);
+ padding: 1px;
+ min-width: 175px;
+}
+
+calendar-minimonth:not([readonly="true"]) .minimonth-readonly-header,
+calendar-minimonth[readonly="true"] .minimonth-header {
+ display: none;
+}
+
+calendar-minimonth[readonly="true"] .minimonth-readonly-header {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 2px;
+ border-bottom: 1px solid var(--mmBoxBackground);
+ font-size: 1.1rem;
+}
+
+.minimonth-month-box {
+ font-weight: bold;
+ margin-bottom: var(--mmBoxPadding);
+ padding: 0;
+ text-align: center;
+ white-space: nowrap;
+}
+
+.minimonth-month-name {
+ display: inline-block;
+ font-weight: bold;
+ padding: var(--mmBoxPadding);
+ width: 7ch;
+ min-width: unset;
+ text-align: center;
+}
+
+.minimonth-year-name {
+ display: inline-block;
+ font-weight: bold;
+ width: 6ch;
+ min-width: unset;
+ padding: var(--mmBoxPadding);
+ text-align: center;
+}
+
+.minimonth-year-name[type="number"] {
+ text-align: center;
+}
+
+.minimonth-nav-section {
+ display: inline-flex;
+ align-items: center;
+ color: inherit;
+ background-color: var(--mmBoxBackground);
+ border: 1px solid var(--mmBoxItemBorderColor);
+ border-radius: var(--button-border-radius);
+ margin: var(--mmBoxItemPadding);
+}
+
+.minimonth-header button,
+.minimonth-header-btn {
+ background: inherit;
+ border-color: transparent;
+ border-radius: 2px;
+ stroke: var(--mmMainColor);
+ width: auto;
+ min-width: unset;
+ height: 100%;
+ min-height: 0;
+ margin: var(--mmBoxPadding);
+ padding: var(--mmBoxPadding);
+ vertical-align: middle;
+}
+
+.button.minimonth-nav-btn.today-button {
+ background-image: var(--icon-calendar-today);
+}
+
+.button.minimonth-nav-btn[dir="1"] {
+ background-image: var(--icon-nav-right);
+}
+
+.button.minimonth-nav-btn[dir="-1"] {
+ background-image: var(--icon-nav-left);
+}
+
+@media (prefers-color-scheme: dark) {
+ .button.minimonth-nav-btn:active,
+ .button.minimonth-nav-btn:hover,
+ .button.minimonth-nav-btn:focus,
+ .button.minimonth-nav-btn:enabled:is(:hover, :focus-visible, :active) {
+ background-color: var(--color-gray-60);
+ }
+}
+
+@media (prefers-contrast) {
+ .button.minimonth-nav-btn:not(:-moz-lwtheme):active,
+ .button.minimonth-nav-btn:not(:-moz-lwtheme):hover,
+ .button.minimonth-nav-btn:not(:-moz-lwtheme):focus,
+ .button.minimonth-nav-btn:not(:-moz-lwtheme):enabled:is(:hover, :focus-visible, :active) {
+ background-color: var(--mmDaySelectedBackground);
+ color: var(--mmDaySelectedColor);
+ stroke: var(--mmDaySelectedColor);
+ border-color: transparent;
+ }
+}
+
+.minimonth-nav-btn:dir(rtl)[dir="-1"] ,
+.minimonth-nav-btn:dir(rtl)[dir="1"] {
+ transform: scaleX(-1);
+}
+
+.minimonth-nav-item {
+ display: inline-block;
+ border-inline: 1px solid var(--mmBoxItemColor);
+ margin: 0;
+}
+
+.minimonth-nav-item input {
+ color: inherit;
+ background: inherit;
+ border: none;
+ margin: 0;
+}
+
+.minimonth-cal-box {
+ border-spacing: 0;
+ padding: 4px;
+}
+
+.minimonth-cal-box th, .minimonth-cal-box td {
+ width: 12.5%; /* 100% / 8 columns */
+}
+
+.minimonth-row-header {
+ text-align: center;
+}
+
+.minimonth-day {
+ color: var(--mmDayColor);
+ text-align: center;
+ border: 1px solid var(--mmDayBorderColor);
+ border-radius: var(--mmDayBorderRadius);
+ background-color: var(--mmDayBackground);
+ min-height: 16px;
+ padding: var(--mmDayPadding);
+}
+
+.minimonth-row-header-week {
+ color: var(--mmDayOtherColor);
+ text-align: center;
+}
+
+.minimonth-week {
+ color: var(--mmDayWeekColor);
+ text-align: center;
+ border: 1px solid var(--mmDayBorderColor);
+ background-color: var(--mmMainBackground);
+ min-height: 16px;
+}
+
+.minimonth-day[othermonth="true"] {
+ color: var(--mmDayOtherColor);
+ background-color: var(--mmDayOtherBackground);
+ border: 1px solid var(--mmDayOtherBorderColor);
+}
+
+.minimonth-day[today="true"] {
+ background-color: var(--mmDayTodayBackground);
+ border: 1px solid var(--mmDayTodayBorderColor);
+ color: var(--mmDayTodayColor);
+ font-weight: 800;
+}
+
+.minimonth-day[selected="true"] {
+ background-color: var(--mmDaySelectedBackground);
+ color: var(--mmDaySelectedColor);
+ border: 1px solid var(--mmDaySelectedBorderColor);
+}
+
+#repeat-until-datepicker .minimonth-day[extra="true"],
+#repeat-until-date .minimonth-day[extra="true"] {
+ border: 1px solid var(--mmDayOtherColor);
+}
+
+#repeat-until-datepicker .minimonth-day:hover[extra="true"],
+#repeat-until-date .minimonth-day:hover[extra="true"] {
+ border: 1px solid var(--mmHighlightBorderColor);
+}
+
+.minimonth-day[selected="true"][today="true"] {
+ background-color: var(--mmDaySelectedTodayBackground);
+ border: 1px solid var(--mmDaySelectedTodayBorderColor);
+}
+
+.minimonth-day,
+.minimonth-week {
+ vertical-align: top;
+ padding: var(--mmDayPadding);
+}
+
+.minimonth-day::after {
+ content: "";
+ display: block;
+ height: var(--mmDayBusyIndicatorSize);
+ width: var(--mmDayBusyIndicatorSize);
+ margin-block-start: 2px;
+ margin-inline: auto;
+ border-radius: 50%;
+ background-color: transparent;
+}
+
+.minimonth-day[busy]::after {
+ background-color: var(--mmDayBusyColor);
+}
+
+.minimonth-day:hover[interactive] {
+ cursor: pointer;
+ border: 1px solid var(--mmDaySelectedTodayBorderColor);
+ outline: none;
+}
+
+.minimonth-day:hover[interactive][selected="true"] {
+ border-color: var(--mmHighlightBorderColor);
+}
+
+.minimonth-day:active[interactive] {
+ background-color: var(--mmHighlightBackground);
+ color: var(--mmHighlightColor);
+}
+
+.minimonth-list {
+ padding-inline-start: 1em;
+ padding-inline-end: 1em;
+}
+
+.minimonth-list[current="true"] {
+ font-weight: bold;
+}
+
+.minimonth-list:hover {
+ background-color: var(--mmHighlightBackground);
+ color: var(--mmHighlightColor);
+ cursor: pointer;
+}
+
+calendar-minimonth :focus-visible:not(:hover) {
+ outline: 2px solid var(--focus-outline-color);
+ outline-offset: -2px;
+}
+
+/* Minimonth border */
+
+#minimonth-pane calendar-minimonth,
+#recurrencePreview calendar-minimonth {
+ border: 1px solid var(--mmMainBorderColor);
+ border-radius: var(--mmMainBorderRadius);
+}