/* Fragment 8/9 of the former static/style.css.
*
* This is a mechanical, order-preserving slice: rules were moved verbatim
* and this file's position in the order of static/index.html is what
* keeps the cascade identical. Reordering the links, or moving a rule between
* fragments, can change which of two competing declarations wins.
*
* static/index.html and the PRECACHE list in static/sw.js must list every
* fragment in the same order. tests/test_static_stylesheet_manifest.py and
* tests/test_css_computed_style_snapshot.py both fail if that drifts.
*/
.doc-editor-textarea,
#doc-editor-code.email-mode .doc-editor-textarea {
color: var(--fg) !important;
caret-color: var(--fg) !important;
z-index: 1;
}
/* Emoji picker (monochrome icon picker) */
.emoji-picker-btn {
background: none; border: none; color: var(--fg); opacity: 0.35;
padding: 4px 7px; cursor: pointer; min-height: 28px;
display: inline-flex; align-items: center; justify-content: center;
transition: opacity 0.1s;
}
.emoji-picker-btn:hover { opacity: 1; }
.emoji-picker {
width: min(300px, 92vw); max-height: min(300px, 55vh);
background: var(--panel); border: 1px solid var(--border); border-radius: 8px;
box-shadow: 0 8px 24px rgba(0,0,0,0.3);
display: flex; flex-direction: column; overflow: hidden;
}
.emoji-picker-search {
padding: 8px 12px; background: var(--panel); border: none;
border-bottom: 1px solid var(--border); color: var(--fg);
font-size: 12px; font-family: inherit; outline: none;
}
.emoji-picker-groups { overflow-y: auto; padding: 4px 0; flex: 1; }
.emoji-picker-group { padding: 0 6px 4px 6px; }
.emoji-picker-group-name {
font-size: 10px; font-weight: 600; opacity: 0.5;
text-transform: uppercase; letter-spacing: 0.5px;
padding: 4px 4px 2px 4px;
}
.emoji-picker-grid { display: grid; grid-template-columns: repeat(8, 1fr); gap: 1px; }
.emoji-picker-item {
background: none; border: none; cursor: pointer;
padding: 4px; border-radius: 4px;
display: flex; align-items: center; justify-content: center;
color: var(--fg); transition: background 0.1s;
}
.emoji-picker-item:hover { background: color-mix(in srgb, var(--accent) 15%, transparent); }
.emoji-picker-item svg { width: 16px; height: 16px; }
.email-avatar {
width: 28px; height: 28px; border-radius: 50%; background: var(--accent, #4a9eff);
color: #fff; display: flex; align-items: center; justify-content: center;
font-size: 12px; font-weight: 600; flex-shrink: 0; margin-top: 1px;
}
.email-item-content { flex: 1; min-width: 0; overflow: hidden; }
.email-item-top { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.email-sender { font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.email-filter-chip {
display: flex;
align-items: center;
justify-content: space-between;
gap: 6px;
margin: 4px 8px 6px;
padding: 4px 8px;
border-radius: 12px;
font-size: 11px;
background: color-mix(in srgb, var(--accent, var(--red)) 14%, transparent);
border: 1px solid color-mix(in srgb, var(--accent, var(--red)) 40%, transparent);
color: var(--fg);
}
.email-filter-chip-clear {
background: none;
border: none;
color: inherit;
cursor: pointer;
font-size: 14px;
line-height: 1;
padding: 0 2px;
opacity: 0.6;
}
.email-date { font-size: 10px; opacity: 0.5; white-space: nowrap; flex-shrink: 0; }
.email-subject { font-size: 11px; opacity: 0.6; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 1px; }
.email-sent-chip,
.email-folder-chip {
display: inline-flex;
align-items: center;
height: 14px;
padding: 0 5px;
margin-right: 5px;
border-radius: 999px;
font-size: 8px;
line-height: 1;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0;
color: var(--accent, var(--red));
background: color-mix(in srgb, var(--accent, var(--red)) 14%, transparent);
border: 1px solid color-mix(in srgb, var(--accent, var(--red)) 28%, transparent);
vertical-align: 1px;
}
.email-folder-chip {
position: relative;
top: 4px;
color: color-mix(in srgb, var(--fg) 75%, transparent);
background: rgba(127, 127, 127, 0.13);
border-color: rgba(127, 127, 127, 0.24);
}
.email-meta-date-group {
display: inline-flex;
align-items: center;
gap: 5px;
white-space: nowrap;
}
.email-meta-date-group .email-folder-chip {
margin-right: 0;
}
.email-card-expanded .email-sent-chip,
.email-card-reader .email-sent-chip {
position: relative;
top: 4px;
}
.email-tags { display: inline-flex; align-items: center; flex-wrap: nowrap; gap: 3px; margin-left: 6px; vertical-align: middle; position: relative; top: -2px; }
.email-card-tags {
flex: 0 0 auto;
min-width: 0;
max-width: 48%;
position: relative;
top: -4px;
}
.email-card-expanded .email-tags,
.email-card-reader .email-tags { top: -4px; }
.doclib-card-expanded .email-card-tags { top: -4px; }
.email-card-expanded .email-card-titlerow .email-tag,
.email-card-expanded .email-card-titlerow .email-tags-more {
transform: translateY(-2px);
}
@media (max-width: 768px) {
.email-card-expanded .email-card-titlerow .email-tag,
.email-card-expanded .email-card-titlerow .email-tags-more {
transform: translateY(2px);
}
}
.email-card-tags.email-tags-expanded {
position: absolute;
z-index: 4;
right: calc(var(--email-status-width, 44px) + 6px);
top: -5px;
max-width: min(58%, 260px);
padding: 4px 5px;
border: 1px solid var(--border);
border-radius: 6px;
background: var(--panel, var(--bg));
box-shadow: 0 5px 14px color-mix(in srgb, #000 20%, transparent);
}
.email-tags-more {
appearance: none;
border: 0;
box-sizing: border-box;
border-radius: 999px;
background: rgba(127, 127, 127, 0.16);
color: var(--fg);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 1px;
height: 13px !important;
min-height: 0 !important;
min-width: 23px;
padding: 1px 4px;
font-family: inherit;
font-size: 9px;
line-height: 1;
margin: 0;
opacity: 0.68;
position: relative;
top: 0;
vertical-align: middle;
}
.email-tags-more svg { display: block; flex: 0 0 auto; }
.email-tags-expanded .email-tags-more svg { transform: rotate(180deg); }
.email-tags-toggle-inline {
position: absolute;
right: 94px;
top: 50%;
transform: translateY(calc(-50% - 5px));
height: 20px !important;
min-width: 34px;
padding: 2px 6px !important;
font-size: 10px !important;
line-height: 1 !important;
opacity: 0.62;
border-radius: 999px !important;
}
.email-tags-toggle-inline.active {
opacity: 1;
color: var(--accent, var(--red));
background: color-mix(in srgb, var(--accent, var(--red)) 12%, transparent);
border-color: color-mix(in srgb, var(--accent, var(--red)) 36%, transparent);
}
.email-tags-toggle-inline.email-tags-empty {
color: var(--warning, #d6b35a);
background: color-mix(in srgb, var(--warning, #d6b35a) 12%, transparent);
border-color: color-mix(in srgb, var(--warning, #d6b35a) 34%, transparent);
}
.email-tag {
display: inline-block;
font-size: 9px;
line-height: 1;
padding: 2px 5px;
border-radius: 8px;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.3px;
background: rgba(127, 127, 127, 0.18);
color: var(--fg);
}
.email-tag-clickable {
appearance: none;
border: 0;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
font-family: inherit;
font-size: 9px;
font-weight: 500;
height: 13px !important;
min-height: 0 !important;
line-height: 1;
margin: 0;
padding: 2px 5px !important;
text-transform: uppercase;
vertical-align: middle;
flex: 0 0 auto;
}
.email-tag-work { background: rgba(96, 165, 250, 0.22); color: #60a5fa; }
.email-tag-personal { background: rgba(74, 222, 128, 0.22); color: #4ade80; }
.email-tag-finance { background: rgba(250, 204, 21, 0.22); color: #facc15; }
.email-tag-bills { background: rgba(251, 146, 60, 0.22); color: #fb923c; }
.email-tag-receipt { background: rgba(251, 146, 60, 0.22); color: #fb923c; }
.email-tag-travel { background: rgba(167, 139, 250, 0.22); color: #a78bfa; }
.email-tag-newsletter { background: rgba(148, 163, 184, 0.22); color: #94a3b8; }
.email-tag-promo,
.email-tag-marketing { background: rgba(244, 114, 182, 0.22); color: #f472b6; }
.email-tag-notification { background: rgba(148, 163, 184, 0.22); color: #94a3b8; }
.email-tag-security { background: rgba(248, 113, 113, 0.22); color: #f87171; }
.email-tag-urgent { background: color-mix(in srgb, var(--color-error, #e06c75) 25%, transparent); color: var(--color-error, #e06c75); font-weight: 600; }
.email-tag-reply-soon { background: rgba(240, 173, 78, 0.22); color: #f0ad4e; }
.email-tag-social { background: rgba(56, 189, 248, 0.22); color: #38bdf8; }
.email-tag-shopping { background: rgba(236, 72, 153, 0.22); color: #ec4899; }
.email-tag-calendar { background: rgba(167, 139, 250, 0.22); color: #a78bfa; }
.email-menu-wrap { position: relative; flex-shrink: 0; }
.email-menu-btn {
background: none; border: none; color: var(--fg); opacity: 0; cursor: pointer;
padding: 4px; transition: opacity 0.15s;
position: relative; top: 0px;
}
.email-dropdown {
position: absolute; right: 0; top: 100%; z-index: 9999;
min-width: 120px; background: var(--bg); border: 1px solid var(--border);
border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.3); padding: 4px 0;
}
.email-loading { padding: 16px; text-align: center; font-size: 12px; opacity: 0.5; }
.email-load-more { padding: 8px; text-align: center; }
.email-load-more-btn {
background: transparent; border: 1px solid var(--border); border-radius: 4px;
color: var(--fg); padding: 4px 12px; font-size: 11px; cursor: pointer;
}
.email-load-more-btn:hover { background: var(--hover-bg, rgba(255,255,255,0.05)); }
.email-spinner {
display: inline-block; width: 12px; height: 12px; border: 2px solid rgba(255,255,255,0.3);
border-top-color: #fff; border-radius: 50%; animation: email-spin 0.6s linear infinite;
vertical-align: middle; margin-right: 4px;
}
/* Email section doesn't collapse — hide the auto-injected chevron */
#email-section .section-collapse-btn { display: none !important; }
#email-section:hover #email-compose-btn {
opacity: 0.7 !important;
}
#email-compose-btn:hover {
opacity: 1 !important;
background: none !important;
}
#email-compose-btn svg {
width: 11px;
height: 11px;
transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
}
#email-compose-btn .list-item-plus-label {
top: calc(50% - 0.5px);
color: var(--fg);
font-size: 10px;
}
#email-compose-btn:hover svg {
transform: rotate(180deg) scale(1.15);
}
/* Library row "+" — identical to the email compose "+": hidden until the row
is hovered, no accent box, and the same rotate-in animation. */
#library-new-doc-btn,
#notes-new-note-btn {
opacity: 0.4 !important;
transition: opacity 0.15s ease;
}
#tool-library-btn:hover #library-new-doc-btn,
#tool-notes-btn:hover #notes-new-note-btn {
opacity: 0.7 !important;
}
#library-new-doc-btn:hover,
#notes-new-note-btn:hover {
opacity: 1 !important;
background: none !important;
}
#library-new-doc-btn svg,
#notes-new-note-btn svg {
transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1);
}
#library-new-doc-btn .list-item-plus-label,
#notes-new-note-btn .list-item-plus-label {
top: calc(50% + 1px);
}
#library-new-doc-btn:hover svg,
#notes-new-note-btn:hover svg {
transform: rotate(180deg) scale(1.15);
}
/* MD toolbar attach button — matches other toolbar buttons */
.md-toolbar-attach-btn {
background: none; border: none; color: var(--fg); opacity: 0.35;
padding: 4px 7px; cursor: pointer; min-height: 28px;
display: inline-flex; align-items: center; justify-content: center;
transition: opacity 0.1s;
}
.md-toolbar-attach-btn:hover { opacity: 1; }
/* Email reader icon buttons — vertical icon + label stack. */
.memory-toolbar-btn.reader-icon-btn {
width: auto;
height: 44px;
/* padding: 4px 2px; */
position: relative;
top: 1px;
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 3px;
flex: 0 0 auto;
}
.memory-toolbar-btn.reader-icon-btn svg { width: 18px; height: 18px; }
.memory-toolbar-btn.reader-icon-btn[data-act="reply"] svg {
color: inherit;
stroke: currentColor;
}
.memory-toolbar-btn.reader-icon-btn.active {
background: color-mix(in srgb, var(--accent, var(--red)) 16%, transparent);
border-color: color-mix(in srgb, var(--accent, var(--red)) 40%, transparent);
color: var(--accent, var(--red));
}
.memory-toolbar-btn.reader-icon-btn[data-act="more"] {
color: inherit;
}
.memory-toolbar-btn.reader-icon-btn[data-act="more"] svg { fill: currentColor; }
.memory-toolbar-btn.reader-icon-btn.reader-more-active {
background: color-mix(in srgb, var(--fg) 12%, transparent);
border-color: color-mix(in srgb, var(--fg) 24%, transparent);
color: inherit;
}
/* Cookbook Serve dropdown triggers (the cached-model kebab + the saved-config
arrow) — accent-colored to signal they open a menu, with a filled tint when
their dropdown is open. Matches the email reader More button pattern. */
.hwfit-cached-menu-btn,
.cookbook-saved-arrow {
color: var(--accent, var(--red));
/* Base .memory-item-btn is flex with align-items but no justify-content,
so the kebab SVG sat left-aligned inside the button instead of being
horizontally centered. Pin it center. */
justify-content: center;
}
.hwfit-cached-menu-btn.cookbook-menu-active,
.cookbook-saved-arrow.cookbook-menu-active {
background: color-mix(in srgb, var(--accent, var(--red)) 18%, transparent);
border-color: color-mix(in srgb, var(--accent, var(--red)) 45%, transparent);
color: var(--accent, var(--red));
}
/* Card action menus share one hit target and baseline. Keep this late in the
cascade because modal buttons and Cookbook Serve add their own offsets. */
.memory-item-actions > .memory-item-btn,
.memory-item-actions .hwfit-cached-menu-btn {
box-sizing: border-box;
width: 28px;
min-width: 28px;
height: 22px;
min-height: 22px;
margin: 0 !important;
padding: 0;
border: 1px solid transparent;
border-radius: 6px;
color: var(--color-muted);
font-size: 11px;
display: inline-flex;
align-items: center;
align-self: center;
justify-content: center;
position: relative;
top: 0 !important;
transform: none !important;
line-height: 1;
transition: background 0.15s, border-color 0.15s, color 0.15s, opacity 0.15s;
}
.memory-item-actions .hwfit-cached-menu-btn:hover {
opacity: 1 !important;
background: color-mix(in srgb, var(--fg) 8%, transparent);
border-color: color-mix(in srgb, var(--fg) 24%, transparent);
color: var(--fg);
}
.memory-item-actions .hwfit-cached-menu-btn {
transform: translateY(2px) !important;
}
@media (min-width: 769px) {
.task-card .memory-item-actions {
top: 6px;
}
.task-card .memory-item-actions > .memory-item-btn {
transform: none !important;
}
}
/* All kebab menus use the same muted tone as the expand/collapse chevron. */
:is(
.memory-menu-btn,
.memory-item-actions .memory-item-btn:not(.save):not(.pin):not(.delete):not(.doclib-card-action-btn),
.hwfit-cached-menu-btn,
.cookbook-task-menu-btn,
.skill-kebab-btn,
.archive-menu-btn,
.doc-tab-menu-btn,
.email-menu-btn
) {
color: var(--color-muted, var(--fg)) !important;
}
:is(
.memory-menu-btn,
.memory-item-actions .memory-item-btn:not(.save):not(.pin):not(.delete):not(.doclib-card-action-btn),
.hwfit-cached-menu-btn,
.cookbook-task-menu-btn,
.skill-kebab-btn,
.archive-menu-btn,
.doc-tab-menu-btn,
.email-menu-btn
) svg {
color: inherit;
fill: currentColor;
}
/* Card kebabs are lightweight menu affordances, not bordered buttons. The
old base hover rule gave only some library cards a boxed outline while
chats, tasks, and cookbook stayed borderless. */
:is(
.memory-menu-btn,
.memory-item-actions .memory-item-btn:not(.save):not(.pin):not(.delete):not(.doclib-card-action-btn),
.hwfit-cached-menu-btn,
.cookbook-task-menu-btn,
.skill-kebab-btn,
.archive-menu-btn,
.doc-tab-menu-btn,
.email-menu-btn
):hover {
background: none !important;
border-color: transparent !important;
color: var(--fg) !important;
opacity: 1;
}
/* Skills used a separate, larger kebab with a different hover treatment.
Match every other card action trigger. */
.skill-kebab-btn {
box-sizing: border-box;
width: 28px;
min-width: 28px;
height: 22px;
min-height: 22px;
padding: 0;
border: 1px solid transparent;
border-radius: 6px;
color: var(--color-muted) !important;
opacity: 0.55;
top: -2px;
}
@media (max-width: 768px) {
.memory-item-actions > .memory-item-btn,
.memory-item-actions .hwfit-cached-menu-btn {
width: 40px;
min-width: 40px;
height: 40px;
min-height: 40px;
}
/* Card menus all need the same comfortable tap target. These components
previously escaped the shared action-button sizing through more-specific
desktop selectors. */
.memory-menu-btn,
.skill-kebab-btn,
.task-card .memory-item-actions .memory-item-btn {
width: 40px !important;
min-width: 40px !important;
height: 40px !important;
min-height: 40px !important;
}
.memory-menu-btn { opacity: 0.7; }
/* Document cards seat their actions on a slightly higher title baseline
than chats/research cards. Bring only that kebab down 4px. */
#doclib-modal .doclib-card[data-doc-id] > .doclib-document-header .memory-item-actions .memory-item-btn {
transform: translateY(-2px) !important;
}
}
/* Mobile: center the kebab/menu dropdowns in the viewport so they don't
slide left/right as the window width changes (they were positioned via
inline `right: ...px` relative to the kebab button). Stable position is
easier to land on by touch. The inline `top:` set by the menu code is
preserved; we only override the horizontal axis. */
@media (max-width: 768px) {
.email-card-dropdown,
.cookbook-saved-menu,
.cookbook-dep-menu {
left: 50% !important;
right: auto !important;
transform: translateX(-50%);
}
}
/* Mobile-only Cancel item appended to dropdowns (kebab/More menus). On
desktop outside-click closes them cleanly; on touch that's fiddly, so
give an explicit Cancel row. Visually separated from the action items
above by a top divider + slight muted color. */
.dropdown-cancel-mobile { display: none; }
@media (max-width: 768px) {
.dropdown-cancel-mobile {
display: flex;
border-top: 1px solid var(--border);
margin-top: 4px;
padding-top: 8px;
opacity: 0.85;
}
}
/* Launch-command Copy button morphs into Cancel once Launch has been clicked. */
.hwfit-serve-copy.hwfit-serve-cancel {
border-color: var(--color-danger, #e06c75) !important;
color: var(--color-danger, #e06c75) !important;
}
.hwfit-serve-copy.hwfit-serve-cancel:hover {
background: color-mix(in srgb, var(--color-danger, #e06c75) 14%, transparent);
}
/* One visual contract for card kebab menus. These menus are built by several
modules, and native button defaults previously made identical rows render
with different fonts, heights, and hover movement. */
:is(
.session-dropdown-menu,
.email-card-dropdown,
.memory-item-dropdown,
.task-dropdown,
.skill-kebab-menu,
.doclib-card-dropdown,
.gallery-detail-menu
) {
box-sizing: border-box;
padding: 4px !important;
color: var(--fg);
background: var(--panel, var(--bg)) !important;
border: 1px solid var(--border) !important;
border-radius: 8px !important;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3) !important;
font-family: inherit !important;
font-size: 11px !important;
line-height: 1.2;
}
:is(
.session-dropdown-menu,
.email-card-dropdown,
.memory-item-dropdown,
.task-dropdown,
.skill-kebab-menu,
.doclib-card-dropdown,
.gallery-detail-menu
) > .dropdown-item-compact {
box-sizing: border-box;
width: 100%;
min-height: 28px;
padding: 6px 8px;
gap: 10px;
border: 0;
border-radius: 6px;
color: var(--fg);
background: transparent;
font: inherit !important;
line-height: 1.2;
text-align: left;
white-space: nowrap;
}
:is(
.session-dropdown-menu,
.email-card-dropdown,
.memory-item-dropdown,
.task-dropdown,
.skill-kebab-menu,
.doclib-card-dropdown,
.gallery-detail-menu
) > .dropdown-item-compact:hover:not(:disabled) {
color: var(--fg);
background: color-mix(in srgb, var(--accent, var(--red)) 10%, transparent);
transform: none;
}
@media (max-width: 768px) {
:is(
.session-dropdown-menu,
.email-card-dropdown,
.memory-item-dropdown,
.task-dropdown,
.skill-kebab-menu,
.doclib-card-dropdown,
.gallery-detail-menu
) > .dropdown-item-compact {
min-height: 44px;
padding: 12px !important;
gap: 10px !important;
font-size: 14px !important;
}
}
/* Email modal title unread badge — small accent pill next to "Email". */
.email-lib-unread-badge {
display: inline-block;
font-size: 0.55em;
font-weight: 700;
background: var(--accent-primary, var(--red));
color: var(--bg, #1a1a1a);
border-radius: 9px;
padding: 1px 7px;
margin-left: 8px;
vertical-align: 2px;
line-height: 1.3;
letter-spacing: 0.02em;
cursor: pointer;
}
.email-lib-unread-badge.email-lib-away-badge {
background: color-mix(in srgb, var(--accent, var(--red)) 18%, transparent);
color: var(--accent, var(--red));
border: 1px solid color-mix(in srgb, var(--accent, var(--red)) 42%, transparent);
padding: 0 7px;
}
.email-lib-auto-reply-badge {
display: inline-block;
margin-left: 7px;
padding: 1px 7px;
border: 1px solid color-mix(in srgb, var(--accent, var(--red)) 48%, var(--border));
border-radius: 9px;
background: color-mix(in srgb, var(--accent, var(--red)) 15%, transparent);
color: var(--accent, var(--red));
font-size: 0.55em;
font-weight: 700;
line-height: 1.3;
letter-spacing: 0.01em;
vertical-align: 2px;
cursor: pointer;
}
.email-lib-auto-reply-status-dot {
width: 6px;
height: 6px;
margin-left: 6px;
border-radius: 50%;
background: var(--accent, var(--red));
box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent, var(--red)) 18%, transparent),
0 0 8px color-mix(in srgb, var(--accent, var(--red)) 72%, transparent);
vertical-align: 2px;
}
.modal-header h4 > .email-lib-auto-reply-badge {
font-size: 0.65em;
white-space: nowrap;
vertical-align: 1px;
}
#email-lib-modal.email-lib-unread-active .doclib-modal-content {
box-shadow:
0 0 0 1px color-mix(in srgb, var(--accent, var(--red)) 22%, transparent),
0 0 18px color-mix(in srgb, var(--accent, var(--red)) 18%, transparent),
var(--shadow-lg, 0 18px 50px rgba(0, 0, 0, 0.35));
}
#email-lib-modal .email-lib-header-actions .minimize-btn {
position: relative;
left: 6px;
}
/* Per-card prev/next nav — only visible on the currently expanded card,
sits at the right of the title row next to the done check. */
.email-card-nav-arrows {
display: none;
margin-left: auto;
gap: 2px;
flex-shrink: 0;
align-items: center;
position: relative;
top: -3px;
left: 19px;
}
.doclib-card.email-card-expanded .email-card-nav-arrows {
display: inline-flex;
}
.email-card-header-menu {
display: none;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: 28px;
height: 28px;
padding: 0;
border: none;
border-radius: 6px;
background: none;
color: var(--fg);
opacity: 0.65;
cursor: pointer;
position: relative;
top: -3px;
transition: opacity 0.12s, background 0.12s;
}
.doclib-card.email-card-expanded .email-card-header-menu {
display: inline-flex;
}
.email-card-header-menu:hover {
opacity: 1;
background: color-mix(in srgb, var(--fg) 8%, transparent);
}
.email-card-nav-btn {
background: none;
border: none;
color: var(--fg);
opacity: 0.65;
cursor: pointer;
padding: 6px 8px;
border-radius: 6px;
display: inline-flex;
align-items: center;
justify-content: center;
transition: opacity 0.12s, background 0.12s;
}
.email-card-nav-btn:hover {
opacity: 1;
background: color-mix(in srgb, var(--fg) 8%, transparent);
}
/* ── Email document editor ── */
.doc-email-header {
display: flex; flex-direction: column; gap: 6px; padding: 10px 12px;
border-bottom: 1px solid var(--border); background: var(--bg); flex-shrink: 0;
}
.doc-email-fields {
display: flex;
flex-direction: column;
gap: 6px;
min-height: 0;
}
.doc-email-collapse-btn {
width: 100%;
min-height: 24px;
display: none;
align-items: center;
gap: 7px;
padding: 2px 4px 3px;
border: none;
background: transparent;
color: var(--fg);
font: inherit;
font-size: 11px;
cursor: pointer;
opacity: 0.72;
text-align: left;
}
.doc-email-collapse-btn:hover { opacity: 1; color: var(--accent, var(--red)); }
.doc-email-collapse-btn svg {
flex-shrink: 0;
opacity: 0.65;
transition: transform 0.14s ease;
}
.doc-email-collapse-summary {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
opacity: 0.74;
}
.doc-email-header.doc-email-header-collapsed .doc-email-collapse-btn svg {
transform: rotate(180deg);
}
.email-field { display: flex; align-items: center; gap: 8px; position: relative; }
.email-field label { font-size: 11px; font-weight: 600; color: var(--fg); opacity: 0.5; min-width: 50px; text-align: right; flex-shrink: 0; }
.email-field input {
flex: 1; width: 100%; background: transparent; border: 1px solid var(--border); border-radius: 4px;
padding: 5px 8px; font-size: 13px; font-family: inherit; color: var(--fg); outline: none;
min-width: 0;
}
.email-field input:focus { border-color: var(--accent, #4a9eff); }
@container docpane (max-width: 460px) {
.doc-email-header .email-field {
display: grid;
grid-template-columns: 1fr;
gap: 3px;
align-items: stretch;
}
.doc-email-header .email-field label {
min-width: 0;
text-align: left;
}
.doc-email-header .email-field input {
width: 100%;
}
}
/* Cc toggle and attach button are absolute so they don't steal width
from the To input. Anchored to the input's vertical center + 4px
nudge so the label sits where the user expects it. */
.email-field .email-cc-toggle {
position: absolute; right: 6px; top: calc(50% + 1px); transform: translateY(-50%);
z-index: 2;
}
/* Accent-tinted prefix label (To / Cc / Bcc / Subject) sitting at
the left edge of each input. Replaces both the old