/**
* SeekQuarry/Yioop --
* Open Source Pure PHP Search Engine, Crawler, and Indexer
*
* Copyright (C) 2009 - 2026 Chris Pollett chris@pollett.org
*
* LICENSE:
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* END LICENSE
*
* Styles for the user-mail feature: inbox listing, message view,
* compose form, account-edit form, and the mobile-specific layout
* tweaks. Loaded via the INCLUDE_STYLES mechanism in
* SocialComponent::userMailBaseData. Kept separate from search.css
* because the rules are exclusively for the mail feature and would
* otherwise inflate the global stylesheet.
*
* @author Chris Pollett chris@pollett.org
* @license https://www.gnu.org/licenses/ GPL3
* @link https://www.seekquarry.com/
* @copyright 2009 - 2026
* @filesource
*/
.mail-inbox-heading
{
align-items: center;
display: flex;
flex-wrap: wrap;
gap: 0.5em;
margin-bottom: 0;
padding-right: 6px;
}
.mail-inbox-heading-title
{
flex: 0 1 auto;
align-items: center;
display: inline-flex;
gap: 0.3em;
min-width: 0;
}
.mail-inbox-heading-count
{
color: #888;
font-weight: normal;
}
.mail-inbox-empty-text
{
margin: 0.5em 0;
}
.mail-filter-wrap
{
display: inline-block;
position: relative;
vertical-align: middle;
margin-left: auto;
}
.mail-filter-icon
{
color: #888;
left: 8px;
pointer-events: none;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.mail-filter-input
{
border: 1px solid #ccc;
border-radius: 1em;
padding: 4px 28px 4px 28px;
width: 200px;
font-size: inherit;
font-family: inherit;
}
.mail-filter-clear
{
color: #888;
cursor: pointer;
font-size: 1.2em;
line-height: 1;
position: absolute;
right: 8px;
top: 50%;
transform: translateY(-50%);
}
.mail-filter-clear:hover
{
color: #333;
}
/* #small-margin-help is position: absolute with no top set, so it
normally sits at its static-flow position. On the mail page that
flow position falls below the tall mail-container (the inbox
layout) or below the tall full-width edit/clone screen, dropping
the help panel to the bottom of the page; anchoring its top just
below the nav bar keeps it beside the content it explains. The
sibling combinators scope this to the mail page, where
#small-margin-help follows either .mail-container (inbox) or
.mail-current-activity (the Add/Edit Account and Clone screens),
leaving every other activity's help panel untouched. */
.mail-container ~ #small-margin-help,
.mail-current-activity ~ #small-margin-help
{
top: 90px;
}
.mail-inbox-pane
{
display: flex;
flex-direction: column;
height: 100%;
}
.mail-inbox-form
{
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
min-width: 0;
box-sizing: border-box;
}
.mail-inbox-scroll
{
flex: 1;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
border: 1px solid #eee;
margin-top: 0.1in;
}
.mail-inbox-table
{
width: 100%;
border-collapse: collapse;
margin-top: 0.1in;
table-layout: fixed;
}
.mail-inbox-scroll .mail-inbox-table
{
margin-top: 0;
}
.mail-inbox-table th,
.mail-inbox-table td
{
text-align: left;
padding: 6px 8px;
border-bottom: 1px solid #eee;
vertical-align: top;
overflow-wrap: break-word;
word-wrap: break-word;
user-select: none;
}
#mail-col-from
{
width: 20%;
}
#mail-col-star
{
width: 44px;
}
#mail-col-date
{
width: 6em;
}
.mail-col-star-cell
{
text-align: center;
padding: 0;
}
.mail-col-star-header
{
display: inline-block;
padding: 4px 6px;
color: #888;
text-decoration: none;
font-size: 20px;
line-height: 1;
}
.mail-col-star-header:hover
{
color: #555;
}
.mail-col-star-header-active
{
color: #e8b40b;
}
.mail-col-star-header-active:hover
{
color: #c89708;
}
.mail-inbox-star
{
color: #bbb;
text-decoration: none;
font-size: 20px;
line-height: 1;
display: inline-block;
padding: 4px 6px;
}
.mail-inbox-star:hover
{
color: #888;
}
.mail-inbox-star-filled
{
color: #e8b40b;
}
.mail-inbox-star-filled:hover
{
color: #c89708;
}
.mail-inbox-bulk-bar
{
display: flex;
align-items: center;
gap: 8px;
padding: 6px 10px;
margin-top: 6px;
background-color: #e6f0fb;
border: 1px solid #b8d4ee;
border-radius: 4px;
font-size: 13px;
flex-wrap: wrap;
}
.mail-inbox-bulk-selection-required,
.mail-inbox-bulk-mode-required
{
display: none;
}
.mail-inbox-bulk-bar.has-selection
.mail-inbox-bulk-selection-required,
.mail-inbox-bulk-bar.selection-mode
.mail-inbox-bulk-mode-required
{
display: inline-block;
}
.mail-inbox-bulk-count
{
color: #555;
}
.mail-inbox-bulk-action,
.mail-inbox-bulk-destination,
.mail-inbox-bulk-destination-account
{
padding: 3px 6px;
border: 1px solid #ccc;
border-radius: 3px;
font-size: 13px;
}
/* On mobile the bulk bar wraps; give the two move destination
selects the full row width so the account picker and the folder
picker each sit on their own line instead of crowding the
action select and the count text. */
.mobile .mail-inbox-bulk-destination,
.mobile .mail-inbox-bulk-destination-account
{
flex-basis: 100%;
max-width: 100%;
}
.mail-inbox-bulk-mode-toggle,
.mail-inbox-bulk-select-toggle
{
padding: 3px 12px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
font-size: 13px;
color: #555;
}
.mail-inbox-bulk-select-toggle
{
margin-left: auto;
}
.mail-inbox-bulk-mode-toggle:hover,
.mail-inbox-bulk-select-toggle:hover
{
background-color: #f0f0f0;
}
.mail-inbox-bulk-mode-toggle[aria-pressed="true"],
.mail-inbox-bulk-select-toggle[aria-pressed="true"]
{
background-color: #555;
border-color: #555;
color: #fff;
}
.mail-inbox-bulk-mode-toggle[aria-pressed="true"]:hover,
.mail-inbox-bulk-select-toggle[aria-pressed="true"]:hover
{
background-color: #444;
border-color: #444;
}
.mail-inbox-table th
{
background-color: #f0f0f0;
font-weight: bold;
font-size: 10pt;
position: sticky;
top: 0;
z-index: 2;
}
.mail-col-resizer
{
position: absolute;
top: 0;
right: 0;
width: 7px;
height: 100%;
cursor: col-resize;
user-select: none;
border-right: 1px solid #ccc;
}
.mail-container-resizer
{
width: 100%;
height: 6px;
cursor: row-resize;
user-select: none;
background-color: #f0f0f0;
border-bottom: 1px solid #ccc;
}
.mail-container
{
position: relative;
/* reserve a gutter on the right the exact width of
.mail-container-h-resizer so the resizer sits in its own
lane instead of overlapping the content pane (and the close
button that floats to the content pane's right edge); keep
this padding and the resizer width in sync. border-box
keeps the reserved gutter from widening the container past
its 100% width. */
box-sizing: border-box;
padding-right: 6px;
}
.mail-container-h-resizer
{
position: absolute;
top: 0;
right: 0;
width: 6px;
height: 100%;
cursor: col-resize;
user-select: none;
background-color: #f0f0f0;
border-left: 1px solid #ccc;
}
.mail-inbox-table tr
{
cursor: pointer;
}
.mail-inbox-table tr:hover td
{
background-color: #f8f8ff;
}
.mail-inbox-table tr.mail-inbox-row-selected td
{
background-color: #e0d8f5;
}
.mail-inbox-table tr.mail-inbox-row-selected:hover td
{
background-color: #d6cce8;
}
.mail-inbox-table tr.mail-inbox-row-unread td
{
font-weight: bold;
}
.mail-inbox-table tr.mail-inbox-row-placeholder td
{
color: #888;
font-style: italic;
}
.mail-inbox-table tr.mail-inbox-row-placeholder
{
cursor: default;
}
.mail-inbox-table a
{
text-decoration: none;
}
.mail-inbox-table a:hover
{
text-decoration: underline;
}
.mail-inbox-table td:last-child
{
position: relative;
}
.mail-inbox-row-swipe-delete
{
position: absolute;
top: 0;
right: 0;
height: 100%;
padding: 0 18px;
background-color: #b00020;
color: #fff;
border: none;
border-radius: 0;
font-size: 13px;
font-weight: bold;
cursor: pointer;
transform: translateX(100%);
transition: transform 0.18s ease-out;
z-index: 1;
}
.mail-inbox-table tr.mail-inbox-row-swipe-revealed
.mail-inbox-row-swipe-delete
{
transform: translateX(0);
}
.mail-col-sort-link
{
color: inherit;
cursor: pointer;
}
.mail-message-pane
{
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
padding: 0 4px;
box-sizing: border-box;
}
.mail-message-back
{
align-items: center;
display: flex;
flex-shrink: 0;
gap: 8px;
justify-content: space-between;
padding: 2px 4px;
}
.mail-message-actions
{
align-items: center;
display: inline-flex;
gap: 4px;
}
.mail-message-delete-form
{
display: inline-flex;
margin: 0;
padding: 0;
}
.mail-message-move-form
{
display: inline-flex;
align-items: center;
gap: 4px;
margin: 0;
padding: 0;
}
.mail-message-move-destination
{
font-size: 16pt;
padding: 6px 10px;
max-width: 200px;
}
.mobile .mail-message-move-destination
{
font-size: 12pt;
padding: 3px 6px;
max-width: 140px;
}
.mail-message-actions-reply-group
{
display: inline-flex;
align-items: center;
gap: 4px;
}
.mail-message-actions-trash-group
{
display: inline-flex;
align-items: center;
padding-inline-start: 8px;
margin-inline-start: 4px;
border-inline-start: 1px solid #ccc;
}
.mail-message-delete-button
{
background: transparent;
border: none;
padding: 0;
font: inherit;
color: inherit;
cursor: pointer;
line-height: 1;
}
.mail-message-headers
{
flex-shrink: 0;
margin: 4px 2px 6px 2px;
padding: 8px 12px;
background-color: #fafafa;
border: 1px solid #e0e0e0;
border-radius: 4px;
position: relative;
min-height: 28px;
}
[data-mail-pretty-only].none
{
display: none;
}
.mail-message-toggle-raw
{
position: absolute;
top: 6px;
right: 8px;
padding: 3px 10px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
font-size: 12px;
color: #555;
}
.mail-message-toggle-raw:hover
{
background-color: #f0f0f0;
}
.mail-message-toggle-raw[aria-pressed="true"]
{
background-color: #e6e6e6;
color: #222;
}
.mail-message-load-images
{
flex-shrink: 0;
margin: 0 2px 6px 2px;
padding: 6px 10px;
background-color: #fff8e1;
border: 1px solid #ffe082;
border-radius: 4px;
font-size: 12px;
color: #555;
}
.mail-message-load-images-button
{
padding: 3px 10px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
font-size: 12px;
color: #555;
}
.mail-message-load-images-button:hover
{
background-color: #f0f0f0;
}
.mail-message-notice
{
margin: 6px 2px;
padding: 6px 10px;
background-color: #fafafa;
border: 1px solid #e0e0e0;
border-radius: 4px;
font-size: 12px;
color: #555;
}
.mail-alias-list
{
margin: 6px 0 6px 1em;
max-height: 2.2in;
overflow-y: auto;
border: 1px solid #e0e0e0;
border-radius: 4px;
padding: 4px 8px;
background-color: #fafafa;
}
.mail-alias-table
{
border-collapse: collapse;
width: 100%;
}
.mail-alias-name
{
padding-right: 1em;
}
.mail-alias-form
{
display: flex;
align-items: center;
gap: 0.4em;
}
.mail-alias-form .mail-alias-input,
.mail-alias-form .mail-alias-domain
{
height: 0.39in;
box-sizing: border-box;
margin: 0;
padding: 0 6px;
border: 1px solid #999;
border-radius: 5px;
font-size: 13pt;
position: relative;
top: 0;
vertical-align: middle;
}
.mail-alias-at
{
font-size: 13pt;
}
.mail-alias-form .mail-alias-add
{
height: 0.39in;
box-sizing: border-box;
margin: 0;
padding: 0 0.18in;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 18pt;
line-height: 1;
top: 0;
}
.mail-dkim-badge-wrap
{
position: absolute;
top: 4px;
right: 64px;
}
.mobile .mail-message-toggle-raw,
.mobile .mail-dkim-badge-wrap
{
position: static;
display: inline-block;
vertical-align: middle;
margin-bottom: 6px;
}
.mobile .mail-dkim-badge-wrap
{
margin-left: 6px;
}
.mail-dkim-icon
{
padding: 2px;
background-color: transparent;
border: none;
cursor: pointer;
line-height: 0;
color: #757575;
}
.mail-dkim-icon.mail-dkim-pass
{
color: #2e7d32;
}
.mail-dkim-icon.mail-dkim-fail
{
color: #c62828;
}
.mail-dkim-icon.mail-dkim-no_key
{
color: #757575;
}
.mail-dkim-detail
{
position: absolute;
top: 26px;
right: 0;
z-index: 5;
width: 30em;
max-width: 80vw;
padding: 10px 12px;
border: 1px solid #ccc;
border-radius: 4px;
background-color: #fff;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
font-size: 13px;
font-weight: normal;
text-align: left;
}
.mail-dkim-detail-title
{
font-weight: bold;
margin-bottom: 6px;
}
/* On a phone the detail's right-edge anchor (it hangs off the
badge, which itself sits 64px in from the header's right edge)
pushes a 30em panel off the left of the screen, cutting off the
labels. Lift it out of that anchor and pin it to the viewport as
a full-width sheet at the bottom, scrolling within itself when
it is taller than the screen. mail.css loads after search.css,
so this more specific rule wins. */
.mobile .mail-dkim-detail
{
position: fixed;
left: 8px;
right: 8px;
top: auto;
bottom: 8px;
width: auto;
max-width: none;
max-height: 70vh;
overflow-y: auto;
}
.mail-dkim-detail-table
{
width: 100%;
border-collapse: collapse;
}
.mail-dkim-detail-table th
{
text-align: left;
vertical-align: top;
padding: 2px 8px 2px 0;
color: #555;
font-weight: normal;
white-space: nowrap;
}
.mail-dkim-detail-table td
{
vertical-align: top;
padding: 2px 0;
font-family: ui-monospace, "SFMono-Regular", Menlo, monospace;
word-break: break-all;
}
.mail-dkim-detail-summary
{
margin-top: 8px;
color: #333;
}
.mail-message-body-raw
{
font-family: ui-monospace, "SFMono-Regular", Menlo, monospace;
font-size: 10pt;
white-space: pre-wrap;
margin: 0;
}
.mail-message-header-row
{
display: flex;
gap: 0.5em;
align-items: baseline;
padding: 2px 0;
word-break: break-word;
}
.mail-message-header-label
{
font-weight: bold;
flex-shrink: 0;
min-width: 4em;
}
.mail-message-header-value
{
color: #333;
}
.mail-attachment-list
{
flex-shrink: 0;
margin: 6px 2px 4px 2px;
padding: 8px 12px;
background-color: #fafafa;
border: 1px solid #e0e0e0;
border-radius: 4px;
}
.mail-attachment-heading
{
margin: 0 0 8px 0;
font-size: 1em;
}
.mail-attachment-list-header
{
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 0.5em;
margin-bottom: 8px;
}
.mail-attachment-list-header .mail-attachment-heading
{
margin: 0;
}
.mail-attachment-download-all
{
font-size: 13px;
color: #4a90e2;
text-decoration: none;
}
.mail-attachment-download-all:hover
{
text-decoration: underline;
}
.mail-attachment-grid
{
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.mail-attachment-card
{
display: flex;
align-items: center;
gap: 10px;
padding: 8px;
background-color: #fff;
border: 1px solid #d0d0d0;
border-radius: 4px;
text-decoration: none;
color: inherit;
min-width: 200px;
max-width: 280px;
box-sizing: border-box;
}
.mail-attachment-card:hover
{
background-color: #f5f5f5;
border-color: #999;
}
.mail-attachment-thumb
{
flex-shrink: 0;
width: 64px;
height: 64px;
display: flex;
align-items: center;
justify-content: center;
background-color: #f0f0f0;
border-radius: 3px;
overflow: hidden;
}
.mail-attachment-thumb img
{
width: 100%;
height: 100%;
object-fit: cover;
}
.mail-attachment-ext-label
{
font-size: 12px;
font-weight: bold;
color: #777;
letter-spacing: 0.5px;
}
.mail-attachment-info
{
flex: 1 1 auto;
min-width: 0;
display: flex;
flex-direction: column;
gap: 2px;
}
.mail-attachment-filename
{
font-weight: bold;
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mail-attachment-meta
{
font-size: 12px;
color: #777;
}
.mail-message-body
{
flex: 1 1 auto;
min-height: 0;
margin: 0 2px;
padding: 12px;
background-color: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 4px;
overflow: auto;
word-break: break-word;
}
.mail-message-body-text
{
font-family: ui-monospace, "SFMono-Regular", Menlo, monospace;
font-size: 10pt;
white-space: pre-wrap;
margin: 0;
}
.mail-message-body-html
{
font-size: 11pt;
line-height: 1.4;
}
.mail-message-body-html img
{
max-width: 100% !important;
height: auto !important;
}
.mail-message-inline-image
{
display: block;
height: auto;
margin: 0.4rem 0;
max-width: 100%;
}
.mail-message-body-html table
{
max-width: 100%;
}
/* The app's own .mobile p rule sets a 300px minimum width for
paragraphs, which is right for the chrome but leaks into a
rendered message: in a two-column newsletter it forces each
column past 300px, so the table cannot fit a phone and the
whole body overflows. Reset the minimum for message content so
its paragraphs and table cells shrink and wrap. mail.css loads
after search.css, so this equal-specificity rule wins. */
.mail-message-body-html p,
.mail-message-body-html td,
.mail-message-body-html th,
.mail-message-body-html table
{
min-width: 0;
}
.mail-blocked-image
{
display: none !important;
}
.mail-message-body-html a
{
word-break: break-all;
}
.mail-compose-pane
{
display: flex;
flex-direction: column;
height: 100%;
box-sizing: border-box;
padding: 4px 6px 4px 0;
overflow: hidden;
}
.mail-compose-heading
{
flex-shrink: 0;
margin: 0 0 8px 0;
display: flex;
align-items: center;
gap: 0.5em;
}
.mail-compose-form
{
display: flex;
flex-direction: column;
flex: 1 1 auto;
min-height: 0;
margin-top: 0.1in;
}
.mail-compose-row
{
flex-shrink: 0;
margin-bottom: 0.15in;
}
.mail-compose-field
{
align-items: center;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
box-sizing: border-box;
display: flex;
gap: 4px;
padding: 4px 6px;
width: 100%;
max-width: 100%;
}
.mail-compose-field-label
{
color: #555;
flex-shrink: 0;
padding: 0 4px;
}
.mail-compose-field-collapse
{
background: none;
border: 0;
border-radius: 12px;
cursor: pointer;
font-family: inherit;
font-size: inherit;
transition: background-color 0.12s, box-shadow 0.12s;
}
.mail-compose-field-collapse:hover,
.mail-compose-field-collapse:focus
{
background-color: #f0f0f0;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
color: #000;
outline: none;
}
.mail-compose-field .mail-compose-input
{
background-color: transparent;
border: 0;
flex: 1 1 auto;
min-width: 0;
padding: 0;
}
.mail-compose-field .mail-compose-input:focus
{
outline: none;
}
.mail-compose-recipient-toggles
{
align-items: center;
display: inline-flex;
flex-shrink: 0;
gap: 4px;
}
.mail-compose-recipient-toggle
{
background: none;
border: 0;
border-radius: 12px;
color: #555;
cursor: pointer;
font-family: inherit;
font-size: inherit;
padding: 2px 8px;
transition: background-color 0.12s, box-shadow 0.12s;
}
.mail-compose-recipient-toggle:hover,
.mail-compose-recipient-toggle:focus
{
background-color: #f0f0f0;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
color: #000;
outline: none;
}
.mail-compose-body-row
{
flex: 1 1 auto;
min-height: 80px;
display: flex;
flex-direction: column;
}
.mail-compose-body-row .mail-compose-body
{
flex: 1 1 auto;
min-height: 0;
resize: none;
}
.mail-compose-attach-button
{
display: inline-flex;
align-items: center;
justify-content: center;
padding: 2px 6px;
background-color: #f0f0f0;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
font-size: 16px;
line-height: 1;
color: #555;
}
.mail-compose-attach-button:hover
{
background-color: #e0e0e0;
}
.mail-compose-form.dragover
{
outline: 2px dashed #4a90e2;
outline-offset: -2px;
background-color: #f5faff;
}
.mail-compose-file-input
{
/* visually hidden but kept in the accessibility tree
so screen readers and keyboard users can still
activate it via the paperclip label. */
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
.mail-compose-attachments
{
flex-shrink: 0;
max-height: 25vh;
overflow-y: auto;
display: flex;
flex-wrap: wrap;
gap: 8px;
padding: 4px 0;
}
.mail-compose-attachments:empty
{
display: none;
}
.mail-compose-attachment-card
{
display: flex;
align-items: center;
gap: 8px;
padding: 6px 8px;
background-color: #fff;
border: 1px solid #d0d0d0;
border-radius: 4px;
min-width: 180px;
max-width: 260px;
box-sizing: border-box;
font-size: 13px;
}
.mail-compose-attachment-thumb
{
flex-shrink: 0;
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background-color: #f0f0f0;
border-radius: 3px;
overflow: hidden;
}
.mail-compose-attachment-thumb img
{
width: 100%;
height: 100%;
object-fit: cover;
}
.mail-compose-attachment-ext-label
{
font-size: 11px;
font-weight: bold;
color: #777;
letter-spacing: 0.5px;
}
.mail-compose-attachment-info
{
flex: 1 1 auto;
min-width: 0;
display: flex;
flex-direction: column;
gap: 2px;
}
.mail-compose-attachment-name
{
font-weight: bold;
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mail-compose-attachment-size
{
font-size: 11px;
color: #777;
}
.mail-compose-attachment-remove
{
flex-shrink: 0;
padding: 2px 8px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
cursor: pointer;
font-size: 14px;
color: #555;
line-height: 1;
}
.mail-compose-attachment-remove:hover
{
background-color: #f0f0f0;
}
.mail-compose-from-row
{
display: flex;
align-items: baseline;
gap: 0.4em;
margin-bottom: 0.15in;
}
.mail-compose-from-row .mail-compose-label
{
display: inline;
margin-bottom: 0;
}
.mail-compose-label
{
display: block;
font-weight: bold;
margin-bottom: 0.05in;
}
.mail-compose-from
{
color: #555;
}
.mail-compose-body
{
border: 1px solid #ccc;
border-radius: 3px;
box-sizing: border-box;
font-family: inherit;
font-size: inherit;
padding: 6px 8px;
resize: vertical;
width: 100%;
max-width: 100%;
}
.mail-compose-buttons
{
display: flex;
gap: 0.5em;
justify-content: center;
margin-top: 0.2in;
}
.mail-compose-button
{
background-color: #f0f0f0;
border: 1px solid #ccc;
border-radius: 3px;
color: inherit;
cursor: pointer;
display: inline-block;
font-size: inherit;
padding: 6px 14px;
text-decoration: none;
}
.mail-compose-button:hover
{
background-color: #e0e0e0;
}
.mail-compose-send-split
{
display: inline-flex;
position: relative;
}
.mail-compose-send-split .mail-compose-button
{
margin: 0;
}
.mail-compose-send-button
{
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-right: none;
}
.mail-compose-schedule-toggle
{
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-left: 1px solid #ccc;
padding: 6px 10px;
}
.mail-compose-schedule-popover
{
position: absolute;
bottom: calc(100% + 4px);
inset-inline-end: 0;
min-width: 240px;
background-color: #fff;
border: 1px solid #ccc;
border-radius: 6px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
padding: 6px 0;
z-index: 10;
text-align: start;
}
.mail-compose-schedule-heading
{
color: #888;
font-size: 0.75em;
font-weight: bold;
letter-spacing: 0.04em;
padding: 6px 14px 4px;
text-transform: uppercase;
}
.mail-compose-schedule-preset
{
background: transparent;
border: none;
cursor: pointer;
display: block;
font: inherit;
padding: 8px 14px;
text-align: left;
width: 100%;
}
.mail-compose-schedule-preset:hover
{
background-color: #f0f0f0;
}
.mail-compose-schedule-choose
{
border-top: 1px solid #eee;
}
.mail-compose-schedule-custom
{
padding: 6px 14px 10px;
}
.mail-compose-schedule-input
{
font: inherit;
padding: 4px 6px;
width: 100%;
box-sizing: border-box;
}
.mail-compose-schedule-status
{
align-self: center;
color: #555;
font-size: 0.9em;
}
.mail-compose-schedule-clear
{
background: transparent;
border: none;
color: #888;
cursor: pointer;
font-size: 1em;
padding: 0 4px;
}
.mail-compose-schedule-clear:hover
{
color: #333;
}
.mail-account-form .narrow-field
{
width: 100%;
max-width: 320px;
box-sizing: border-box;
}
.mail-account-form .table-label
{
max-width: 220px;
white-space: normal;
}
.mail-form-label-scope
{
display: block;
font-weight: normal;
}
.mail-back-mobile
{
display: none;
}
.mobile .mail-back-mobile
{
display: inline-block;
}
.mail-account-form .mail-form-actions
{
display: flex;
gap: 0.5em;
flex-wrap: wrap;
justify-content: center;
}
/* the "Incoming Mail (IMAP)" / "Outgoing Mail (SMTP)" section
headers span both columns and should read left-to-right, not
inherit the right-aligned .table-label used by field labels */
.html-ltr .mail-section-label
{
text-align: left;
padding-top: 8px;
}
.html-rtl .mail-section-label
{
text-align: right;
padding-top: 8px;
}
/* Save is a <button> (which carries UA padding) and Cancel is an
<a>; without an explicit horizontal padding the anchor's text
hugs its border and the two buttons look mismatched. Pin both
to the same box. */
.mail-account-form .button-box
{
padding-left: 12px;
padding-right: 12px;
box-sizing: border-box;
display: inline-flex;
align-items: center;
justify-content: center;
}
.mobile .mail-inbox-table th,
.mobile .mail-inbox-table td
{
padding: 4px 6px;
font-size: 10pt;
}
.mobile .mail-filter-wrap
{
display: inline-flex;
flex: 1 1 6em;
min-width: 0;
margin-inline-start: 0.3em;
}
.mobile .mail-inbox-heading
{
flex-wrap: nowrap;
}
.mobile .mail-inbox-heading-title
{
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
}
.mobile .mail-filter-input
{
width: 100%;
min-width: 0;
box-sizing: border-box;
}
.mobile .mail-current-activity .media-buttons-container,
.mobile .mail-current-activity .float-opposite
{
margin-inline-end: 6px;
margin-top: 10px;
position: relative;
z-index: 11;
}
.mobile .mail-compose-schedule-popover
{
inset-inline-start: auto;
inset-inline-end: 4px;
min-width: 0;
width: max-content;
max-width: 78vw;
}
/* iOS Safari auto-zooms when a focused field's font-size is under
16px, and that zoom is what forced the compose pane to scroll
horizontally on focus. Pinning the compose fields to 16px keeps
the page from zooming. */
.mobile .mail-compose-input,
.mobile .mail-compose-body,
.mobile .mail-filter-input
{
font-size: 16px;
}
/* On a narrow screen the alias list carried a left-only indent,
which pushed it off-centre, and the add-row's text field kept
its intrinsic width, which shoved the + button past the pane
border. Drop the asymmetric indent and let the alias field be
the flexible part of the row so the domain menu and + button
stay inside the pane. Logical properties keep this correct under
an RTL locale. */
.mobile .mail-alias-list
{
margin-inline-start: 0;
}
.mobile .mail-alias-form .mail-alias-input
{
flex: 1 1 auto;
min-width: 0;
}
.mobile .mail-alias-form .mail-alias-domain
{
flex: 0 1 auto;
min-width: 0;
max-width: 8em;
}
.mobile .mail-alias-form .mail-alias-add
{
flex: 0 0 auto;
}
.mobile #mail-col-from
{
width: 30%;
}
.mobile #mail-col-date
{
width: 5em;
}
/* On a narrow screen the two-column account/clone form table
stretches full width, which pushes a right-aligned label to one
edge and its control to the other (most visible on the clone
form's long "max most recent" row). Stacking each label above
its control keeps the pair together. Using display:block on the
cells (rather than a fixed text-align) keeps this correct in
both portrait and landscape and under an RTL locale, where the
label simply reads from the start edge. */
.mobile .mail-account-form table,
.mobile .mail-account-form tbody,
.mobile .mail-account-form tr
{
display: block;
width: 100%;
}
.mobile .mail-account-form th.table-label,
.mobile .mail-account-form td
{
display: block;
width: 100%;
box-sizing: border-box;
text-align: start;
max-width: none;
}
.user-accounts-folder-row
{
display: flex;
align-items: center;
gap: 4px;
user-select: none;
flex-wrap: wrap;
}
.user-accounts-folder-row a
{
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-flex;
align-items: center;
}
.user-accounts-folder-label
{
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-flex;
align-items: center;
padding: 4px 6px;
}
.user-accounts-folder-row.user-accounts-folder-noselect
{
padding: 0;
}
.user-accounts-folder-disclosure
{
flex: 0 0 12px;
width: 12px;
box-sizing: border-box;
padding: 0;
margin: 0;
text-align: center;
cursor: pointer;
color: #888;
visibility: hidden;
transition: transform 0.15s ease-out;
transform-origin: 50% 50%;
display: inline-block;
overflow: visible;
}
.user-accounts-folder-has-children
> .user-accounts-folder-disclosure
{
visibility: visible;
}
.user-accounts-folder-row.expanded
> .user-accounts-folder-disclosure
{
transform: rotate(90deg);
}
.user-accounts-folder-children
{
flex-basis: 100%;
list-style: none;
padding-left: 18px;
margin: 0;
}
.user-accounts-folder-row:not(.expanded)
> .user-accounts-folder-children
{
display: none;
}
.user-accounts-folder-icon
{
margin-right: 4px;
flex-shrink: 0;
}
.user-accounts-folder-name
{
flex: 1 1 auto;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.user-accounts-folder-unread
{
color: #888;
flex-shrink: 0;
font-feature-settings: "tnum";
font-size: 0.9em;
margin-left: 8px;
}
.user-accounts-folder-active .user-accounts-folder-unread
{
color: inherit;
}
.user-accounts-name
{
cursor: pointer;
user-select: none;
}
/* Grip handle shown on the left of a reorderable account row;
the only part that initiates a drag, so dragging does not fight
the click-to-expand behavior of the account name. */
/* Grip handle for a reorderable account row. It floats to the
inline-end (right in ltr, left in rtl via .float-opposite) and
sits on the same visual row as the account name rather than
above it, so reordering does not cost a row of vertical space
per account. Only the handle starts a drag, so the account-name
click-to-expand still works. The glyphs are rotated a quarter
turn so the two vertical-ellipsis characters read as a compact
horizontal grip. */
.user-accounts-drag-handle
{
cursor: grab;
user-select: none;
color: #999;
margin-top: 2px;
padding: 0 2px;
font-size: 12px;
line-height: 1;
letter-spacing: -3px;
transform: rotate(90deg);
}
.user-accounts-reorderable.user-accounts-dragging
{
opacity: 0.4;
}
.user-accounts-reorderable.user-accounts-drag-over
{
border-top: 2px solid #69c;
}
.user-accounts-reorderable.user-accounts-grabbed
{
outline: 2px dashed #69c;
}
.user-accounts-name.user-accounts-name-editing
{
display: flex;
align-items: center;
gap: 4px;
flex-wrap: wrap;
}
.user-accounts-name.user-accounts-name-editing
> .user-accounts-toggle
{
flex: 1 1 auto;
min-width: 0;
}
.user-accounts-name.user-accounts-name-editing
> .user-accounts-edit-toolbar
{
flex-basis: 100%;
margin-top: 2px;
margin-left: 0;
justify-content: center;
}
.user-accounts-folder-row > .user-accounts-edit-toolbar
{
flex-shrink: 0;
margin-left: auto;
}
.user-accounts-folder-row-editing
{
flex-wrap: nowrap;
}
.user-accounts-folder-row-editing
> a > .user-accounts-folder-unread
{
display: none;
}
.user-accounts-folder-row-editing
> .user-accounts-folder-children
{
display: none;
}
.user-accounts-new-folder-box
{
display: flex;
align-items: center;
gap: 4px;
padding: 4px 6px;
}
.user-accounts-new-folder-input
{
flex: 1 1 auto;
min-width: 0;
padding: 2px 6px;
border: 1px solid #ccc;
border-radius: 3px;
font-size: 10pt;
}
.mail-empty-pane
{
align-items: center;
display: flex;
flex-direction: column;
justify-content: center;
min-height: 60vh;
padding: 12px;
text-align: center;
}
.mail-empty-pane .user-mail-warning
{
margin: 0 0 16px 0;
padding: 20px 32px;
font-size: 14pt;
border-radius: 12px;
}
.mail-empty-pane .button-box
{
height: auto;
padding: 2px 12px;
}
.mail-empty-or
{
margin: 0 0 16px 0;
color: #888;
font-style: italic;
}
.mail-inbox-answered
{
color: #888;
font-size: 0.9em;
}
.mail-scheduled-pane
{
padding: 0.2in;
}
.mail-scheduled-heading
{
margin-top: 0;
}
.mail-scheduled-empty
{
color: #555;
font-style: italic;
}
.mail-scheduled-table
{
border-collapse: collapse;
width: 100%;
}
.mail-scheduled-table th,
.mail-scheduled-table td
{
border-bottom: 1px solid #eee;
padding: 6px 10px;
text-align: left;
vertical-align: top;
}
.mail-scheduled-table th
{
color: #666;
font-size: 0.85em;
font-weight: bold;
text-transform: uppercase;
}
.mail-scheduled-status-pending
{
color: #666;
}
.mail-scheduled-status-failed
{
color: #c0392b;
font-weight: bold;
}
.mail-scheduled-status-sending
{
color: #2c80b4;
font-style: italic;
}
.mail-scheduled-cancel-form
{
margin: 0;
}
.mail-scheduled-cancel-button
{
background: transparent;
border: 1px solid #ccc;
border-radius: 3px;
color: inherit;
cursor: pointer;
font: inherit;
padding: 4px 10px;
}
.mail-scheduled-cancel-button:hover
{
background-color: #eee;
}
.mail-loading
{
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
padding: 32px 16px;
color: #888;
}
.mail-loading-spinner
{
width: 18px;
height: 18px;
border: 2px solid #ccc;
border-top-color: #888;
border-radius: 50%;
animation: mail-spin 0.7s linear infinite;
}
@keyframes mail-spin
{
to
{
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce)
{
.mail-loading-spinner
{
animation: none;
}
}