. Override so content fills the reader's available
width — otherwise resizing the email window doesn't reflow anything. */
.email-bubble-body,
.email-bubble-body * {
max-width: 100% !important;
}
.email-bubble-body div[style*="width"],
.email-bubble-body table[width],
.email-bubble-body table {
width: 100% !important;
box-sizing: border-box !important;
}
.email-bubble-body blockquote {
border-left: 2px solid var(--border) !important;
margin: 4px 0 !important;
padding: 4px 10px !important;
background: transparent !important;
border-radius: 0 !important;
color: inherit;
}
.email-bubble-avatar {
flex-shrink: 0;
width: 26px;
height: 26px;
border-radius: 50%;
/* Per-sender color set inline (`style="background:hsl(...)"`); this
fallback only kicks in when JS hasn't assigned one. */
background: color-mix(in srgb, var(--fg) 14%, transparent);
color: #fff;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.22);
display: flex;
align-items: center;
justify-content: center;
font-size: 9.5px;
font-weight: 600;
letter-spacing: 0.3px;
user-select: none;
}
/* Sig folds inside a bubble: tone down — no full-bleed band, since the
bubble already provides the chrome. */
.email-bubble-body .email-sig-fold {
margin: 8px 0 0;
border-top: 1px dashed var(--border);
}
.email-bubble-body .email-sig-fold[open] > *:not(summary),
.email-bubble-body .email-quote-fold[open] > *:not(summary) {
padding: 6px 0 0;
border-top: 0;
}
@media (max-width: 600px) {
.email-bubble { max-width: 96%; }
.email-bubble-avatar { display: none; }
}
/* ── Schedule Send modal ── */
.schedule-send-body {
display: flex;
flex-direction: column;
gap: 6px;
padding: 16px 18px 12px;
}
.schedule-send-label {
font-size: 11px;
font-weight: 500;
letter-spacing: 0.3px;
text-transform: uppercase;
color: var(--fg);
opacity: 0.55;
margin-top: 6px;
}
.schedule-send-label:first-child { margin-top: 0; }
.schedule-send-presets {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
margin-bottom: 4px;
}
.schedule-send-presets .memory-toolbar-btn {
padding: 5px 10px 11px;
font-size: 12px;
justify-content: center;
line-height: 1;
}
.schedule-send-confirm svg {
width: 12px;
height: 12px;
vertical-align: -1px;
margin-right: 6px;
}
.schedule-send-datetime {
font-size: 13px;
padding: 8px 10px;
background: var(--bg);
color: var(--fg);
border: 1px solid var(--border);
border-radius: 6px;
outline: none;
font-family: inherit;
width: 100%;
box-sizing: border-box;
}
.schedule-send-datetime:focus {
border-color: var(--hl-function);
}
.schedule-send-footer {
display: flex;
justify-content: flex-end;
align-items: center;
gap: 8px;
padding: 10px 18px 14px;
border-top: 1px solid var(--border);
margin-top: 4px;
}
.schedule-send-confirm {
background: var(--accent-primary, var(--red)) !important;
color: #fff !important;
border-color: var(--accent-primary, var(--red)) !important;
}
.schedule-send-confirm:hover {
background: color-mix(in srgb, var(--accent-primary, var(--red)) 85%, white) !important;
}
/* Senders embed inline colors in their HTML that clash with the app's
theme (black text in dark mode, white backgrounds, yellow highlights,
etc.). Force theme colors on every descendant of the rendered body so
emails inherit the user's chosen palette regardless of what the
sender's mail client emits. */
.email-reader-body *,
.email-bubble-body * {
color: var(--fg) !important;
-webkit-text-fill-color: currentColor !important;
background-color: transparent !important;
background-image: none !important;
}
.email-reader-body a,
.email-bubble-body a,
.email-thread-turn-body a {
color: var(--hl-function) !important;
}
.email-reader-body a[href^="tel:"],
.email-reader-body a[href^="sms:"],
.email-reader-body a[href^="x-apple-data-detectors:"],
.email-reader-body a[x-apple-data-detectors],
.email-bubble-body a[href^="tel:"],
.email-bubble-body a[href^="sms:"],
.email-bubble-body a[href^="x-apple-data-detectors:"],
.email-bubble-body a[x-apple-data-detectors],
.email-thread-turn-body a[href^="tel:"],
.email-thread-turn-body a[href^="sms:"],
.email-thread-turn-body a[href^="x-apple-data-detectors:"],
.email-thread-turn-body a[x-apple-data-detectors] {
color: inherit !important;
-webkit-text-fill-color: currentColor !important;
text-decoration: none !important;
background-color: transparent !important;
background-image: none !important;
-webkit-background-clip: border-box !important;
background-clip: border-box !important;
}
/* Prefer local/system emoji fonts; avoid remote font providers. */
.doc-editor-textarea, .doc-editor-highlight, #doc-editor-code,
.doc-md-preview, .doc-csv-preview {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', 'Noto Color Emoji', 'Apple Color Emoji', 'Segoe UI Emoji', monospace;
font-variant-emoji: text;
}
/* Preview panes claim the editor's space so the action footer stays pinned
at the bottom of the pane even when the rendered content is short
(shorter table, single-paragraph markdown, etc). */
.doc-csv-preview,
.doc-md-preview {
flex: 1 1 auto;
min-height: 0;
overflow: auto;
}
/* Email documents override: use colored system emoji in compose. */
.doc-editor-textarea.email-mode,
#doc-editor-code.email-mode,
#doc-editor-code.email-mode .doc-editor-highlight,
#doc-editor-code.email-mode .doc-editor-textarea {
font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif,
"Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla" !important;
font-variant-emoji: emoji;
}
/* Single-layer rendering for ALL documents (not just email): the highlight
overlay ( with hljs spans) and the transparent textarea use two
different rendering paths internally — the textarea uses the browser's
native form line-breaker, the overlay uses CSS line-breaking — and they
can never be guaranteed to wrap byte-identical no matter how many CSS
properties are pinned. Pick one source of truth: make the textarea its
own visible text, hide the overlay. Trade-off: no syntax highlighting in
the live editor (rendered markdown preview / chat output still has it).
The caret is now glued to the typed text by definition since both are
rendered by the same element. */
.doc-editor-highlight,
#doc-editor-code.email-mode .doc-editor-highlight {
display: none !important;
}
/* Find bar is open: float the highlight overlay ON TOP of the
textarea with transparent background + transparent text, so only
the solid spans are visible. pointer-events
off so clicks still go through to the textarea below. */
body.doc-find-active .doc-editor-highlight,
body.doc-find-active #doc-editor-code.email-mode .doc-editor-highlight {
display: block !important;
z-index: 5 !important;
background: transparent !important;
pointer-events: none;
}
body.doc-find-active .doc-editor-highlight,
body.doc-find-active .doc-editor-highlight * {
color: transparent !important;
background: transparent !important;
}