right side

This commit is contained in:
debu-2 2026-10-04 00:52:13 +05:30
parent f289d4a4d6
commit 192b810eb4
4 changed files with 375 additions and 216 deletions

View file

@ -0,0 +1,150 @@
# AG Agent Panel — Reference vs Current
**Target:** second supplied image (dense, ~650–700px populated panel).
**Current (before this pass):** first supplied image (~930px+, vertically stretched).
---
## Summary
The current implementation had the right sections but the wrong visual system: cards too tall, gaps too large, purple header identity, bordered agenda rows, skeleton placeholders after load, and an outlined send button.
---
## 1. Panel shell
| Property | Target | Current (image 1) |
|----------|--------|-------------------|
| Width | 300–320px | ~292–308px (close) |
| Padding | 16px horizontal | Mixed 12–20px |
| Background | `#FFFFFF` pure white | Off-white / grey tint |
| Border | `1px solid rgba(26,24,38,0.055)` | Stronger generic border |
| Radius | 14px | 16px |
| Shadow | Subtle two-layer | Heavier shadow |
| Page canvas | `#F5F4F2` | `#ebe8e4` (too warm/grey) |
| Total height | ~650–700px populated | ~930px+ |
---
## 2. Header
| Property | Target | Current |
|----------|--------|---------|
| Icon container | 32×32, radius 10px, `#FFF1EC` | 36px circle, coral gradient |
| Icon color | `#FF735C` sparkle | White on gradient |
| Title | 15px/700 `#151322` | 15px Manrope (close) |
| Subtitle | 10.5–11px `#77758A` | Similar |
| Chevron | 14px `#30304A`, 28×28 hit area | Present but wrong color |
---
## 3. Greeting
| Property | Target | Current |
|----------|--------|---------|
| Title | 14–15px/700, 10px top margin | 15px, 16px bottom margin |
| Subtitle gap | 2px below title | ~4px (too loose) |
| Subtitle | 11px `#77758A` | 12px grey |
---
## 4. Metric grid
| Property | Target | Current |
|----------|--------|---------|
| Gap | 8px | 8px (OK) |
| Card height | 76–80px (`min-height: 78px`) | 92px+ |
| Card padding | 10px 10px 8px | 12px+ |
| Card radius | 10px | 12px |
| Layout | Icon + count on same row | Icon above count |
| Colors | Semantic per card (see spec) | Washed gradients |
| Zero state | De-emphasized when mixed; caught-up when all zero | Always show 4 cards at full或低 opacity |
| Icon container | 24×24 white rounded square | 28×28 |
---
## 5. Quick actions
| Property | Target | Current |
|----------|--------|---------|
| Button height | 31–34px | 44px |
| Gap | 6px × 8px | 8px |
| Border | `#DFDDE5` | Generic rgba |
| Icons | Lightweight 13–14px, colored | 24px icon boxes |
| Text | 10.5px, single line | 11px, occasional wrap |
| Hover | `#F9F7FF` border `#D9D0FF`, no transform | Lift + shadow |
---
## 6. Today's agenda
| Property | Target | Current |
|----------|--------|---------|
| Heading | 11.5px/700 sentence case | 10px uppercase |
| Rows | Compact list, no card borders | Bordered cards ~40px+ tall |
| Status | 3×12px vertical bar | 4px full-height bar |
| Grid | bar · time · event · chevron | Different grid |
| Empty | One small line | 3 dashed skeleton rows |
| Skeletons | Only while loading | Shown after data resolved |
---
## 7. Needs attention
| Property | Target | Current |
|----------|--------|---------|
| Heading | 11.5px/700 sentence case | Uppercase micro |
| Rows | 36px min, no borders | 10px padding + dividers |
| Avatar | 25px | 30px |
| Name | 10px/600 | 12px |
| Empty | Compact line | Skeleton rows |
| Skeletons | Only while loading | After load |
---
## 8. Ask input
| Property | Target | Current |
|----------|--------|---------|
| Height | 34–36px | 42px |
| Radius | 9px | 10–12px |
| Send button | 28×28 filled `#BEC5D4` / `#7357F6` | 32px outlined purple |
| Placeholder | 10px `#9995A6` | 12px |
---
## 9. Notes footer
| Property | Target | Current |
|----------|--------|---------|
| Height | 36–40px | 38–40px (close) |
| Radius | 10px standalone card | Attached to agent panel |
| Pin color | `#F16F68` | `#bd5947` |
| Background | White card | Transparent when empty |
---
## 10. Empty / loading behavior
| Rule | Target | Current |
|------|--------|---------|
| All metrics zero | Compact caught-up card | Four zero cards OR caught-up removed |
| Some metrics non-zero | Show 4 cards, de-emphasize zeros | OK conceptually |
| Agenda empty | One line | Multiple skeleton rows |
| Attention empty | One line | Skeleton rows |
| Loading | Brief skeleton pulse | N/A / persistent skeletons |
---
## Implementation checklist
- [x] AG design tokens (`--ag-*`)
- [x] Compact metric cards with exact semantic colors
- [x] Caught-up when all metrics zero
- [x] Compact quick actions (31–34px)
- [x] Flat agenda rows + single empty line
- [x] Flat attention rows + single empty line
- [x] Loading-only skeletons
- [x] Filled send button
- [x] Separate notes card
- [x] Panel density target ~650–700px

View file

@ -1,100 +1,76 @@
import { useState } from "react"; import { useState } from "react";
import { import {
Calendar, CalendarDays,
Check,
ChevronDown, ChevronDown,
ChevronRight, ChevronRight,
ClipboardList,
FileSearch, FileSearch,
FileText,
ListChecks, ListChecks,
Mail, Mail,
Paperclip, Paperclip,
PenLine, PenLine,
Receipt,
Send, Send,
Sparkles,
} from "lucide-react"; } from "lucide-react";
import AgentInsight from "./AgentInsight"; import AgentInsight from "./AgentInsight";
import AgentSpark from "./AgentSpark";
import SenderAvatar from "./SenderAvatar"; import SenderAvatar from "./SenderAvatar";
import { inboxContext } from "../utils/inboxSignals"; import { inboxContext } from "../utils/inboxSignals";
const ICON = { size: 14, strokeWidth: 1.75 }; const ICON = { size: 14, strokeWidth: 1.75 };
const AGENDA_SLOTS = 3; const ICON_SM = { size: 13, strokeWidth: 1.75 };
const ATTENTION_SLOTS = 2;
const cards = [ const cards = [
{ key: "important", label: "Important emails", captionKey: "importantFromClients", captionSuffix: "from clients", emptyCaption: "No priority mail yet", icon: Mail, tone: "rose" }, {
{ key: "actionItems", label: "Action items", hint: "Need your response", emptyCaption: "Nothing pending", icon: ListChecks, tone: "blue" }, key: "important",
{ key: "meetings", label: "Meetings mentioned", hint: "In your emails", emptyCaption: "No meetings found", icon: Calendar, tone: "green" }, label: "Important emails",
{ key: "invoices", label: "Invoices & bills", hint: "This week", emptyCaption: "No invoices detected", icon: Receipt, tone: "amber" }, captionKey: "importantFromClients",
captionSuffix: "from clients",
hint: "In your inbox",
icon: Mail,
tone: "rose",
},
{
key: "actionItems",
label: "Action items",
hint: "Need your response",
icon: ClipboardList,
tone: "blue",
},
{
key: "meetings",
label: "Meetings mentioned",
hint: "In your emails",
icon: CalendarDays,
tone: "green",
},
{
key: "invoices",
label: "Invoices & bills",
hint: "This week",
icon: FileText,
tone: "purple",
},
]; ];
function greeting(name) { function greeting(name) {
const hour = new Date().getHours(); const hour = new Date().getHours();
const period = hour < 12 ? "Good morning" : hour < 17 ? "Good afternoon" : "Good evening"; const period = hour < 12 ? "Good morning" : hour < 17 ? "Good afternoon" : "Good evening";
return `${period}, ${name}`; return `${period}, ${name}!`;
} }
function statCaption(card, stats) { function statCaption(card, stats) {
const count = stats[card.key] || 0; const count = stats[card.key] || 0;
if (count === 0) return card.emptyCaption || card.hint; if (count === 0) return card.hint;
if (card.captionKey && stats[card.captionKey] > 0) { if (card.captionKey && stats[card.captionKey] > 0) {
return `${stats[card.captionKey]} ${card.captionSuffix}`; return `${stats[card.captionKey]} ${card.captionSuffix}`;
} }
return card.hint; return card.hint;
} }
function padSlots(items, slots) { function metricTotal(stats) {
const result = items.slice(0, slots).map((item) => ({ ...item, placeholder: false })); return cards.reduce((sum, card) => sum + (stats[card.key] || 0), 0);
while (result.length < slots) {
result.push({ placeholder: true, id: `slot-${result.length}` });
}
return result;
}
function AgendaPlaceholder({ index }) {
return (
<li className="agent-agenda-row agent-placeholder-row" aria-hidden={index > 0}>
<span className="agent-agenda-bar placeholder" aria-hidden="true" />
<div className="agent-placeholder-copy">
{index === 0 ? (
<>
<time>—</time>
<strong>No meetings in your emails</strong>
<small>Calendar events will appear here</small>
</>
) : (
<>
<span className="agent-placeholder-line" />
<span className="agent-placeholder-line wide" />
</>
)}
</div>
</li>
);
}
function AttentionPlaceholder({ index, showEmptyMessage }) {
return (
<li className="agent-attention-placeholder" aria-hidden={index > 0 && !showEmptyMessage}>
{showEmptyMessage && index === 0 ? (
<>
<span className="agent-placeholder-avatar muted" aria-hidden="true" />
<span className="agent-placeholder-copy">
<strong className="agent-placeholder-label">Nothing needs attention</strong>
<small>Threads awaiting reply will appear here</small>
</span>
</>
) : (
<>
<span className="agent-placeholder-avatar" aria-hidden="true" />
<span className="agent-placeholder-copy">
<span className="agent-placeholder-line wide" />
<span className="agent-placeholder-line narrow" />
</span>
<span className="agent-placeholder-age" aria-hidden="true" />
</>
)}
</li>
);
} }
export default function AgAgentPanel({ export default function AgAgentPanel({
@ -102,6 +78,7 @@ export default function AgAgentPanel({
emails, emails,
focus, focus,
insight, insight,
loading = false,
onQuickAction, onQuickAction,
onOpenEmail, onOpenEmail,
onAgentAsk, onAgentAsk,
@ -110,8 +87,8 @@ export default function AgAgentPanel({
const [agentQuery, setAgentQuery] = useState(""); const [agentQuery, setAgentQuery] = useState("");
const [panelOpen, setPanelOpen] = useState(true); const [panelOpen, setPanelOpen] = useState(true);
const firstName = account?.first_name || "there"; const firstName = account?.first_name || "there";
const agendaSlots = padSlots(today, AGENDA_SLOTS); const allMetricsZero = metricTotal(stats) === 0;
const attentionSlots = padSlots(needsReply, ATTENTION_SLOTS); const hasQuery = agentQuery.trim().length > 0;
function submitAgentQuery(event) { function submitAgentQuery(event) {
event.preventDefault(); event.preventDefault();
@ -124,7 +101,9 @@ export default function AgAgentPanel({
return ( return (
<section className="agent-panel" aria-label="AG Agent"> <section className="agent-panel" aria-label="AG Agent">
<header className="agent-panel-head"> <header className="agent-panel-head">
<span className="agent-panel-mark" aria-hidden="true"><AgentSpark /></span> <span className="agent-panel-mark" aria-hidden="true">
<Sparkles {...ICON} />
</span>
<div className="agent-panel-title"> <div className="agent-panel-title">
<h2>AG Agent</h2> <h2>AG Agent</h2>
<p>Your email co-pilot</p> <p>Your email co-pilot</p>
@ -136,7 +115,7 @@ export default function AgAgentPanel({
aria-label={panelOpen ? "Collapse agent panel" : "Expand agent panel"} aria-label={panelOpen ? "Collapse agent panel" : "Expand agent panel"}
onClick={() => setPanelOpen((open) => !open)} onClick={() => setPanelOpen((open) => !open)}
> >
<ChevronDown size={16} strokeWidth={1.75} className={panelOpen ? "open" : ""} /> <ChevronDown size={14} strokeWidth={1.75} className={panelOpen ? "open" : ""} />
</button> </button>
</header> </header>
@ -151,7 +130,23 @@ export default function AgAgentPanel({
</div> </div>
)} )}
{!insight && ( {!insight && loading && (
<div className="agent-loading-block" aria-hidden="true">
<span className="agent-loading-pulse" />
<span className="agent-loading-pulse short" />
</div>
)}
{!insight && !loading && allMetricsZero && (
<div className="agent-caught-up">
<p className="agent-caught-up-lead">
<Check size={14} strokeWidth={2} /> You&apos;re all caught up.
</p>
<p>No urgent messages or outstanding actions.</p>
</div>
)}
{!insight && !loading && !allMetricsZero && (
<div className="agent-stat-grid"> <div className="agent-stat-grid">
{cards.map((card) => { {cards.map((card) => {
const Icon = card.icon; const Icon = card.icon;
@ -166,9 +161,11 @@ export default function AgAgentPanel({
disabled={isEmpty} disabled={isEmpty}
aria-label={`${card.label}: ${count}`} aria-label={`${card.label}: ${count}`}
> >
<span className="agent-stat-icon"><Icon {...ICON} /></span> <div className="agent-stat-top">
<strong>{count}</strong> <span className="agent-stat-icon"><Icon {...ICON} /></span>
<span>{card.label}</span> <strong>{count}</strong>
</div>
<span className="agent-stat-label">{card.label}</span>
<small>{statCaption(card, stats)}</small> <small>{statCaption(card, stats)}</small>
</button> </button>
); );
@ -176,29 +173,29 @@ export default function AgAgentPanel({
</div> </div>
)} )}
{!insight && focus && <p className="agent-panel-note">{focus}</p>} {!insight && focus && !allMetricsZero && <p className="agent-panel-note">{focus}</p>}
<div className="agent-quick"> <section className="agent-quick">
<h3>Quick actions</h3> <h3>Quick actions</h3>
<div> <div className="agent-quick-grid">
<button type="button" className="agent-quick-btn agent-quick-btn-agent" onClick={() => onQuickAction("summarize")}> <button type="button" className="agent-quick-btn" onClick={() => onQuickAction("summarize")}>
<span className="agent-quick-icon"><AgentSpark /></span> <Sparkles {...ICON_SM} className="agent-quick-icon agent-quick-icon-purple" />
<span>Summarize inbox</span> <span>Summarize inbox</span>
</button> </button>
<button type="button" className="agent-quick-btn agent-quick-btn-agent" onClick={() => onQuickAction("draft")}> <button type="button" className="agent-quick-btn" onClick={() => onQuickAction("draft")}>
<span className="agent-quick-icon"><PenLine {...ICON} /></span> <PenLine {...ICON_SM} className="agent-quick-icon agent-quick-icon-purple" />
<span>Draft replies</span> <span>Draft replies</span>
</button> </button>
<button type="button" className="agent-quick-btn agent-quick-btn-info" onClick={() => onQuickAction("attachments")}> <button type="button" className="agent-quick-btn" onClick={() => onQuickAction("attachments")}>
<span className="agent-quick-icon"><FileSearch {...ICON} /></span> <FileSearch {...ICON_SM} className="agent-quick-icon agent-quick-icon-muted" />
<span>Find attachments</span> <span>Find attachments</span>
</button> </button>
<button type="button" className="agent-quick-btn agent-quick-btn-success" onClick={() => onQuickAction("actions")}> <button type="button" className="agent-quick-btn" onClick={() => onQuickAction("actions")}>
<span className="agent-quick-icon"><ListChecks {...ICON} /></span> <ListChecks {...ICON_SM} className="agent-quick-icon agent-quick-icon-slate" />
<span>Show action items</span> <span>Show action items</span>
</button> </button>
</div> </div>
</div> </section>
{!insight && ( {!insight && (
<section className="agent-context-block agent-agenda"> <section className="agent-context-block agent-agenda">
@ -206,38 +203,41 @@ export default function AgAgentPanel({
<h3>Today&apos;s agenda</h3> <h3>Today&apos;s agenda</h3>
<button type="button" className="agent-context-link">View calendar</button> <button type="button" className="agent-context-link">View calendar</button>
</div> </div>
<ul> {loading ? (
{agendaSlots.map((item, index) => ( <div className="agent-loading-rows" aria-hidden="true">
item.placeholder ? ( <span className="agent-loading-pulse" />
<AgendaPlaceholder key={item.id} index={index} /> <span className="agent-loading-pulse short" />
) : ( </div>
<li key={`${item.time}-${item.label}`} className={`agent-agenda-row tone-${item.tone || "green"}`}> ) : today.length > 0 ? (
<span className="agent-agenda-bar" aria-hidden="true" /> <ul className="agent-agenda-list">
<div> {today.map((item) => (
<time>{item.time}</time> <li key={`${item.time}-${item.label}`} className="agent-agenda-row">
<span className={`agent-agenda-bar tone-${item.tone || "green"}`} aria-hidden="true" />
<time>{item.time}</time>
<div className="agent-agenda-copy">
<strong>{item.label}</strong> <strong>{item.label}</strong>
{item.venue && <small>{item.venue}</small>} {item.venue && <small>{item.venue}</small>}
</div> </div>
<ChevronRight size={14} strokeWidth={1.75} /> <ChevronRight size={12} strokeWidth={1.75} className="agent-agenda-chevron" />
</li> </li>
) ))}
))} </ul>
</ul> ) : (
<p className="agent-empty-line">No meetings in your emails today.</p>
)}
</section> </section>
)} )}
{!insight && ( {!insight && (
<section className="agent-context-block agent-attention-block"> <section className="agent-context-block agent-attention-block">
<h3>Needs attention</h3> <h3>Needs attention</h3>
<ul className="agent-attention-list"> {loading ? (
{attentionSlots.map((item, index) => ( <div className="agent-loading-rows" aria-hidden="true">
item.placeholder ? ( <span className="agent-loading-pulse" />
<AttentionPlaceholder </div>
key={item.id} ) : needsReply.length > 0 ? (
index={index} <ul className="agent-attention-list">
showEmptyMessage={needsReply.length === 0} {needsReply.slice(0, 3).map((item) => (
/>
) : (
<li key={item.id}> <li key={item.id}>
<button type="button" onClick={() => onOpenEmail?.(item.id)}> <button type="button" onClick={() => onOpenEmail?.(item.id)}>
<SenderAvatar <SenderAvatar
@ -251,9 +251,11 @@ export default function AgAgentPanel({
<em>{item.age}</em> <em>{item.age}</em>
</button> </button>
</li> </li>
) ))}
))} </ul>
</ul> ) : (
<p className="agent-empty-line">Nothing needs your attention right now.</p>
)}
</section> </section>
)} )}
@ -278,10 +280,15 @@ export default function AgAgentPanel({
placeholder="Ask about your emails..." placeholder="Ask about your emails..."
/> />
<button type="button" className="agent-ask-attach" aria-label="Attach context" title="Attach context"> <button type="button" className="agent-ask-attach" aria-label="Attach context" title="Attach context">
<Paperclip size={15} strokeWidth={1.75} /> <Paperclip size={13} strokeWidth={1.75} />
</button> </button>
<button type="submit" className="agent-ask-send" aria-label="Send to agent" disabled={!agentQuery.trim()}> <button
<Send size={15} strokeWidth={1.75} /> type="submit"
className={`agent-ask-send${hasQuery ? " active" : ""}`}
aria-label="Send to agent"
disabled={!hasQuery}
>
<Send size={13} strokeWidth={1.75} />
</button> </button>
</form> </form>
</div> </div>

View file

@ -701,6 +701,7 @@ export default function MailboxView({
emails={listedEmails} emails={listedEmails}
focus={agentFocus} focus={agentFocus}
insight={insight} insight={insight}
loading={status.loading}
onQuickAction={runQuickAction} onQuickAction={runQuickAction}
onOpenEmail={(emailId) => { onOpenEmail={(emailId) => {
const email = listedEmails.find((item) => item.id === emailId); const email = listedEmails.find((item) => item.id === emailId);

View file

@ -1,6 +1,6 @@
@import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700&display=swap"); @import url("https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700&display=swap");
:root { font-family:"DM Sans",sans-serif; color:#080821; background:#fffdfb; font-synthesis:none; --ink:#080821; --muted:#67677a; --coral:#ff6a52; --blush:#fff3ef; --line:#eee9e5; --canvas:#ebe8e4; --workspace:#f0eeeb; --surface:#ffffff; --agent:#7656e8; --agent-soft:#f6f2ff; --agent-border:#ddd4ff; --info:#4d74c4; --info-soft:#eef4ff; --success:#3d8a5d; --success-soft:#eef8f2; --attention:#b7892d; --attention-soft:#fff8ea; --navy:#171329; --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:20px; --space-6:24px; --space-7:32px; --text-content:14px; --text-meta:12px; --text-control:13px; --text-micro:11px; --line-content:1.45; --line-meta:1.4; --radius-xs:6px; --radius-sm:8px; --radius-md:10px; --radius-lg:12px; --radius-xl:16px; --radius-float:20px; --radius-pill:999px; --border-subtle:rgba(20,20,30,0.05); --border-normal:rgba(20,20,30,0.08); --border-strong:rgba(20,20,30,0.12); --shadow-surface:0 1px 2px rgba(20,20,30,0.04),0 12px 32px rgba(20,20,30,0.06); --shadow-float:0 8px 30px rgba(0,0,0,0.08); --shadow-accent:0 5px 14px rgba(255,95,80,0.16); --icon-stroke:1.75; --motion-fast:140ms; --motion-base:180ms; --motion-slow:200ms; --ease-standard:cubic-bezier(.2,.8,.2,1); } :root { font-family:"DM Sans",sans-serif; color:#080821; background:#fffdfb; font-synthesis:none; --ink:#080821; --muted:#67677a; --coral:#ff6a52; --blush:#fff3ef; --line:#eee9e5; --canvas:#F5F4F2; --workspace:#f0eeeb; --surface:#ffffff; --agent:#7656e8; --agent-soft:#f6f2ff; --agent-border:#ddd4ff; --info:#4d74c4; --info-soft:#eef4ff; --success:#3d8a5d; --success-soft:#eef8f2; --attention:#b7892d; --attention-soft:#fff8ea; --navy:#171329; --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:20px; --space-6:24px; --space-7:32px; --text-content:14px; --text-meta:12px; --text-control:13px; --text-micro:11px; --line-content:1.45; --line-meta:1.4; --radius-xs:6px; --radius-sm:8px; --radius-md:10px; --radius-lg:12px; --radius-xl:16px; --radius-float:20px; --radius-pill:999px; --border-subtle:rgba(20,20,30,0.05); --border-normal:rgba(20,20,30,0.08); --border-strong:rgba(20,20,30,0.12); --shadow-surface:0 1px 2px rgba(20,20,30,0.04),0 12px 32px rgba(20,20,30,0.06); --shadow-float:0 8px 30px rgba(0,0,0,0.08); --shadow-accent:0 5px 14px rgba(255,95,80,0.16); --icon-stroke:1.75; --motion-fast:140ms; --motion-base:180ms; --motion-slow:200ms; --ease-standard:cubic-bezier(.2,.8,.2,1); }
* { box-sizing:border-box; } * { box-sizing:border-box; }
html { scroll-behavior:smooth; } html { scroll-behavior:smooth; }
body { margin:0; min-width:320px; } body { margin:0; min-width:320px; }
@ -525,7 +525,7 @@ h1 em { color:var(--coral); font-style:normal; font-weight:500; }
.workspace-account strong { color:#241f2b; font-size:12px; font-weight:600; } .workspace-account strong { color:#241f2b; font-size:12px; font-weight:600; }
.workspace-account small { color:#7a7580; font-size:10px; max-width:160px; } .workspace-account small { color:#7a7580; font-size:10px; max-width:160px; }
.workspace-account>span { width:32px; height:32px; font-size:11px; } .workspace-account>span { width:32px; height:32px; font-size:11px; }
.mailbox-stage { display:grid; grid-template-columns:minmax(0,1fr) minmax(292px,308px); gap:var(--space-4); align-items:start; } .mailbox-stage { display:grid; grid-template-columns:minmax(0,1fr) minmax(300px,320px); gap:var(--space-4); align-items:start; }
.mailbox-shell { position:relative; align-self:start; overflow:hidden; border:1px solid var(--border-subtle); border-radius:var(--radius-xl); background:var(--surface); box-shadow:var(--shadow-surface); } .mailbox-shell { position:relative; align-self:start; overflow:hidden; border:1px solid var(--border-subtle); border-radius:var(--radius-xl); background:var(--surface); box-shadow:var(--shadow-surface); }
.mailbox-list-pane { display:flex; flex-direction:column; background:var(--surface); border-radius:var(--radius-xl); } .mailbox-list-pane { display:flex; flex-direction:column; background:var(--surface); border-radius:var(--radius-xl); }
.mailbox-categories { min-height:44px; padding:0 var(--space-2); display:flex; align-items:flex-end; gap:var(--space-1); border-bottom:1px solid var(--border-subtle); background:var(--surface); overflow:auto; } .mailbox-categories { min-height:44px; padding:0 var(--space-2); display:flex; align-items:flex-end; gap:var(--space-1); border-bottom:1px solid var(--border-subtle); background:var(--surface); overflow:auto; }
@ -589,105 +589,106 @@ h1 em { color:var(--coral); font-style:normal; font-weight:500; }
.mail-label-amber { background:#fff4d8; color:#9a7420; } .mail-label-amber { background:#fff4d8; color:#9a7420; }
.mail-label-green { background:#e7f6ee; color:#2f7a52; } .mail-label-green { background:#e7f6ee; color:#2f7a52; }
.mail-label-pink { background:#fceeff; color:#8b5ca8; } .mail-label-pink { background:#fceeff; color:#8b5ca8; }
.mailbox-rail { min-width:0; display:flex; flex-direction:column; gap:0; position:sticky; top:var(--space-3); align-self:start; } .mailbox-rail { min-width:0; display:flex; flex-direction:column; gap:8px; position:sticky; top:var(--space-3); align-self:start; }
.agent-panel { padding:var(--space-5) var(--space-4) var(--space-4); border:1px solid var(--border-normal); border-bottom:0; border-radius:var(--radius-xl) var(--radius-xl) 0 0; background:var(--surface); box-shadow:0 2px 6px rgba(20,20,30,0.04),0 14px 36px rgba(20,20,30,0.07); } .agent-panel { --ag-coral:#FF6654; --ag-coral-dark:#B72416; --ag-coral-soft:#FFF1ED; --ag-purple:#7357F6; --ag-purple-dark:#5633CE; --ag-purple-soft:#F3F0FF; --ag-blue:#2764F1; --ag-blue-dark:#153EAB; --ag-blue-soft:#EEF3FF; --ag-green:#11966A; --ag-green-dark:#087852; --ag-green-soft:#EDF9F4; --ag-text-primary:#171424; --ag-text-secondary:#77758A; --ag-text-tertiary:#A6A2AE; --ag-border:#E4E1E8; --ag-divider:rgba(25,22,40,.07); --ag-panel:#FFFFFF; width:100%; border:1px solid rgba(26,24,38,0.055); border-radius:14px; background:var(--ag-panel); box-shadow:0 1px 2px rgba(20,18,30,0.025),0 8px 24px rgba(20,18,30,0.035); overflow:hidden; }
.agent-panel-head { margin-bottom:var(--space-3); display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:var(--space-3); } .agent-panel-head { padding:14px 16px 8px; display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:10px; }
.agent-panel-mark { width:36px; height:36px; flex-shrink:0; display:grid; place-items:center; border-radius:50%; background:linear-gradient(180deg,#ffb199 0%,#ff7f6e 100%); color:#fff; font-size:15px; box-shadow:0 4px 12px rgba(255,106,82,0.28); } .agent-panel-mark { width:32px; height:32px; flex-shrink:0; display:grid; place-items:center; border-radius:10px; background:#FFF1EC; color:#FF735C; }
.agent-panel-title { min-width:0; } .agent-panel-title { min-width:0; }
.agent-panel-head h2 { margin:0; font:700 15px "Manrope"; letter-spacing:-.25px; color:#1f1b28; } .agent-panel-head h2 { margin:0; font:700 15px/18px "DM Sans"; color:#151322; letter-spacing:-.2px; }
.agent-panel-toggle { width:28px; height:28px; display:grid; place-items:center; border:0; border-radius:var(--radius-xs); background:transparent; color:#9a949e; cursor:pointer; transition:background var(--motion-fast) var(--ease-standard),color var(--motion-fast) var(--ease-standard); } .agent-panel-head p { margin:1px 0 0; font:400 10.5px/14px "DM Sans"; color:#77758A; }
.agent-panel-toggle:hover { background:#f5f3f0; color:#5a5562; } .agent-panel-toggle { width:28px; height:28px; display:grid; place-items:center; border:0; border-radius:6px; background:transparent; color:#30304A; cursor:pointer; transition:background 120ms ease; }
.agent-panel-toggle:hover { background:#F5F4F2; }
.agent-panel-toggle .open { transform:rotate(180deg); } .agent-panel-toggle .open { transform:rotate(180deg); }
.agent-panel-body { display:grid; gap:0; animation:agentReveal var(--motion-slow) var(--ease-standard); } .agent-panel-body { padding:0 16px 10px; animation:agentReveal var(--motion-slow) var(--ease-standard); }
.agent-panel-hello { margin:0 0 var(--space-4); display:grid; gap:var(--space-1); } .agent-panel-hello { margin:10px 0 0; display:grid; gap:2px; }
.agent-panel-hello strong { font:650 15px "Manrope"; letter-spacing:-.2px; color:#1f1b28; } .agent-panel-hello strong { font:700 14px/18px "DM Sans"; color:#171424; }
.agent-panel-hello span { color:#6f6a64; font-size:var(--text-meta); line-height:var(--line-content); } .agent-panel-hello span { font:400 11px/15px "DM Sans"; color:#77758A; }
.agent-panel-head p { margin:var(--space-1) 0 0; color:#8d8792; font-size:var(--text-micro); line-height:var(--line-meta); } .agent-panel-note { margin:0 0 8px; font-size:11px; line-height:15px; color:#77758A; }
.agent-panel-note { margin:0 0 var(--space-3); color:#7a746e; font-size:var(--text-meta); line-height:var(--line-content); } .agent-caught-up { margin:10px 0 0; padding:10px 12px; border-radius:10px; background:#EDF9F4; border:1px solid #D7F0E5; }
.agent-stat-grid { margin-bottom:var(--space-4); display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2); } .agent-caught-up-lead { margin:0 0 4px; display:flex; align-items:center; gap:6px; font:600 11px/15px "DM Sans"; color:#087852; }
.agent-stat { min-height:92px; padding:var(--space-3) 11px; display:grid; align-content:start; gap:3px; border:1px solid transparent; border-radius:var(--radius-lg); text-align:left; cursor:pointer; transition:transform var(--motion-fast) var(--ease-standard),box-shadow var(--motion-fast) var(--ease-standard); } .agent-caught-up p { margin:0; font:400 10px/14px "DM Sans"; color:#77758A; }
.agent-stat:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(20,20,30,0.06); } .agent-stat-grid { margin-top:10px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.agent-stat-icon { width:28px; height:28px; margin-bottom:4px; display:grid; place-items:center; border-radius:8px; background:#fff; box-shadow:0 1px 2px rgba(20,20,30,0.05); } .agent-stat { min-height:78px; padding:10px 10px 8px; display:grid; align-content:start; gap:1px; border:1px solid transparent; border-radius:10px; text-align:left; cursor:pointer; transition:background 120ms ease; }
.agent-stat-rose .agent-stat-icon { color:#e15b45; } .agent-stat:hover:not(:disabled) { filter:brightness(.985); }
.agent-stat-blue .agent-stat-icon { color:#4d74c4; } .agent-stat-top { display:flex; align-items:center; gap:6px; margin-bottom:2px; }
.agent-stat-green .agent-stat-icon { color:#3d8a5d; } .agent-stat-icon { width:24px; height:24px; flex-shrink:0; display:grid; place-items:center; border-radius:7px; background:rgba(255,255,255,0.78); }
.agent-stat-amber .agent-stat-icon { color:#8b6fd4; } .agent-stat-label { font:600 10.5px/13px "DM Sans"; }
.agent-stat strong { font:700 24px "Manrope"; letter-spacing:-.7px; color:#241f2b; line-height:1; } .agent-stat small { font:400 9.5px/12px "DM Sans"; }
.agent-stat span { color:#3d3944; font-size:11px; font-weight:600; line-height:1.25; } .agent-stat-rose { background:#FFF1ED; border-color:#FFE1D8; }
.agent-stat small { color:#7d7872; font-size:10px; line-height:1.25; } .agent-stat-rose .agent-stat-icon { color:#FF4F38; }
.agent-stat-rose { background:linear-gradient(180deg,#fff3ef 0%,#ffece8 100%); border-color:#f3d4cb; color:#e15b45; } .agent-stat-rose strong { font:700 22px/22px "DM Sans"; color:#B72416; }
.agent-stat-blue { background:linear-gradient(180deg,#f3f7ff 0%,#eaf1ff 100%); border-color:#d5e2f8; color:#4d74c4; } .agent-stat-rose .agent-stat-label { color:#5B211B; }
.agent-stat-green { background:linear-gradient(180deg,#f1faf4 0%,#e8f5ed 100%); border-color:#cfe8d8; color:#3d8a5d; } .agent-stat-rose small { color:#B4675E; }
.agent-stat-amber { background:linear-gradient(180deg,#f7f2ff 0%,#efe8ff 100%); border-color:#ddd0f5; color:#8b6fd4; } .agent-stat-blue { background:#EEF3FF; border-color:#DDE7FF; }
.agent-stat-empty { opacity:.72; cursor:default; } .agent-stat-blue .agent-stat-icon { color:#2764F1; }
.agent-stat-empty:hover { transform:none; box-shadow:none; } .agent-stat-blue strong { font:700 22px/22px "DM Sans"; color:#153EAB; }
.agent-stat-empty strong { color:#b5b0ba; } .agent-stat-blue .agent-stat-label { color:#1E388D; }
.agent-stat-empty small { color:#a39ea8; } .agent-stat-blue small { color:#5270C3; }
.agent-quick { margin-top:var(--space-1); padding-top:var(--space-3); border-top:1px solid var(--border-subtle); } .agent-stat-green { background:#EDF9F4; border-color:#D7F0E5; }
.agent-quick h3 { margin:0 0 10px; color:#7a7580; font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; } .agent-stat-green .agent-stat-icon { color:#11966A; }
.agent-quick div { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2); } .agent-stat-green strong { font:700 22px/22px "DM Sans"; color:#087852; }
.agent-quick-btn { min-height:44px; padding:0 9px; display:flex; align-items:center; justify-content:flex-start; gap:7px; border:1px solid rgba(20,20,30,0.1); border-radius:var(--radius-md); background:#fcfbfa; color:#4a4652; font-size:11px; font-weight:600; line-height:1.15; transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast) var(--ease-standard),box-shadow var(--motion-fast) var(--ease-standard); } .agent-stat-green .agent-stat-label { color:#176C52; }
.agent-quick-btn span:last-child { min-width:0; } .agent-stat-green small { color:#4D927C; }
.agent-quick-icon { width:24px; height:24px; flex-shrink:0; display:grid; place-items:center; border-radius:7px; background:#f0eeec; color:inherit; } .agent-stat-purple { background:#F3F0FF; border-color:#E5DFFF; }
.agent-quick-btn-agent .agent-quick-icon { background:#f0ebff; color:var(--agent); } .agent-stat-purple .agent-stat-icon { color:#6747E8; }
.agent-quick-btn-info .agent-quick-icon { background:#eaf1ff; color:var(--info); } .agent-stat-purple strong { font:700 22px/22px "DM Sans"; color:#5633CE; }
.agent-quick-btn-success .agent-quick-icon { background:#e8f5ed; color:var(--success); } .agent-stat-purple .agent-stat-label { color:#4930A6; }
.agent-quick-btn:hover { background:#f9f7ff; border-color:var(--agent-border); box-shadow:0 1px 4px rgba(118,86,232,0.08); } .agent-stat-purple small { color:#7767BD; }
.agent-quick-btn-agent { color:var(--agent); } .agent-stat-empty { opacity:.88; cursor:default; }
.agent-quick-btn-info:hover { background:#f5f8ff; border-color:#c8d8f5; } .agent-stat-empty strong { color:#B8B6BE!important; }
.agent-quick-btn-success:hover { background:#f3faf5; border-color:#c5e5d0; } .agent-stat-empty .agent-stat-label { color:#77757D!important; }
.agent-attention-avatar { width:30px!important; height:30px!important; font-size:10px!important; } .agent-stat-empty small { color:#B5B2BA!important; }
.agent-attention-copy { min-width:0; display:grid; gap:2px; text-align:left; } .agent-quick { margin-top:12px; padding-top:10px; border-top:1px solid var(--ag-divider); }
.agent-attention-list li { border-bottom:1px solid var(--border-subtle); } .agent-quick h3 { margin:0 0 7px; font:600 9.5px/12px "DM Sans"; letter-spacing:.06em; text-transform:uppercase; color:#6F6C7B; }
.agent-attention-list li:last-child { border-bottom:0; } .agent-quick-grid { display:grid; grid-template-columns:1fr 1fr; gap:6px 8px; }
.agent-attention-list button { width:100%; padding:10px 0; display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:var(--space-2); border:0; background:transparent; text-align:left; cursor:pointer; transition:background var(--motion-fast) var(--ease-standard); } .agent-quick-btn { height:33px; padding:0 9px; display:flex; align-items:center; justify-content:flex-start; gap:7px; border:1px solid #DFDDE5; border-radius:8px; background:#FFFFFF; color:#292536; font:600 10.5px/12px "DM Sans"; white-space:nowrap; cursor:pointer; transition:background 120ms ease,border-color 120ms ease; }
.agent-attention-list button:hover { background:#faf9fc; border-radius:var(--radius-sm); } .agent-quick-btn:hover { background:#F9F7FF; border-color:#D9D0FF; }
.agent-attention-list em { color:#a39ea8; font-size:10px; font-style:normal; font-weight:600; } .agent-quick-icon { flex-shrink:0; }
.agent-caught-up { margin:0 0 var(--space-4); padding:14px var(--space-3); border-radius:var(--radius-lg); background:linear-gradient(180deg,#edf8f1 0%,#f5faf7 100%); border:1px solid #c8e6d4; color:#5f5a54; box-shadow:inset 0 1px 0 #ffffffaa; } .agent-quick-icon-purple { color:#7357F6; }
.agent-caught-up-lead { margin:0 0 6px; display:flex; align-items:center; gap:var(--space-2); color:#2a7a4f; font-size:var(--text-meta); font-weight:700; } .agent-quick-icon-muted { color:#667085; }
.agent-caught-up p { margin:0; font-size:var(--text-meta); font-weight:500; line-height:var(--line-content); } .agent-quick-icon-slate { color:#50627A; }
.agent-caught-up small { display:block; margin-top:8px; color:#6d9a7f; font-size:var(--text-micro); font-weight:500; } .agent-context-block { margin-top:12px; padding-top:10px; border-top:1px solid var(--ag-divider); }
.agent-context-block { margin-top:var(--space-4); padding-top:var(--space-4); border-top:1px solid var(--border-normal); } .agent-context-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; }
.agent-context-head { display:flex; align-items:center; justify-content:space-between; gap:var(--space-2); margin-bottom:var(--space-2); } .agent-context-head h3,.agent-context-block>h3 { margin:0 0 5px; font:700 11.5px/14px "DM Sans"; color:#292536; letter-spacing:0; text-transform:none; }
.agent-context-head h3,.agent-context-block>h3 { margin:0 0 var(--space-2); color:#6d6872; font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; } .agent-context-link { border:0; background:transparent; font:500 9.5px/12px "DM Sans"; color:#5D4CF5; cursor:pointer; }
.agent-context-link { border:0; background:transparent; color:var(--agent); font-size:10px; font-weight:600; } .agent-context-link:hover { text-decoration:underline; }
.agent-context-block ul { margin:0; padding:0; list-style:none; display:grid; gap:var(--space-2); } .agent-empty-line { margin:0; padding:2px 0; font:400 10px/14px "DM Sans"; color:#A6A2AE; }
.agent-agenda-row { padding:10px var(--space-2); display:grid; grid-template-columns:4px 1fr auto; align-items:center; gap:var(--space-2); border-radius:var(--radius-md); border:1px solid var(--border-subtle); background:#fafafa; transition:background var(--motion-fast) var(--ease-standard); } .agent-agenda-list { margin:0; padding:0; list-style:none; display:grid; gap:2px; }
.agent-agenda-row:hover { background:#f5f4f8; } .agent-agenda-row { min-height:34px; padding:3px 0; display:grid; grid-template-columns:3px 56px minmax(0,1fr) 12px; align-items:center; column-gap:8px; }
.agent-agenda-bar { width:4px; height:100%; min-height:40px; border-radius:var(--radius-pill); background:#3d8a5d; } .agent-agenda-bar { width:3px; height:12px; border-radius:999px; align-self:center; }
.agent-agenda-row.tone-blue .agent-agenda-bar { background:#4d74c4; } .agent-agenda-bar.tone-green { background:#11966A; }
.agent-agenda-row.tone-rose .agent-agenda-bar { background:var(--coral); } .agent-agenda-bar.tone-blue { background:#2764F1; }
.agent-agenda-row.tone-amber .agent-agenda-bar { background:#b7892d; } .agent-agenda-bar.tone-rose { background:#FF6654; }
.agent-agenda-row time { display:block; color:#8d8792; font-size:10px; font-weight:600; } .agent-agenda-bar.tone-amber { background:#b7892d; }
.agent-agenda-row strong { display:block; color:#2a2530; font-size:var(--text-meta); font-weight:600; line-height:1.3; } .agent-agenda-row time { font:500 9.5px/12px "DM Sans"; color:#6D6A80; white-space:nowrap; }
.agent-agenda-row small { display:block; color:#8d8792; font-size:10px; } .agent-agenda-copy { min-width:0; display:grid; gap:1px; }
.agent-placeholder-row { border-style:dashed; background:#fafafa; pointer-events:none; } .agent-agenda-copy strong { font:600 10px/12px "DM Sans"; color:#353148; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.agent-placeholder-row .agent-agenda-bar.placeholder { background:#e4e0dc; min-height:36px; } .agent-agenda-copy small { font:400 9px/11px "DM Sans"; color:#77748A; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.agent-placeholder-row time,.agent-placeholder-row strong,.agent-placeholder-row small { color:#b8b3bc; } .agent-agenda-chevron { color:#77758A; flex-shrink:0; }
.agent-placeholder-row strong { font-weight:500; } .agent-attention-list { margin:0; padding:0; list-style:none; display:grid; gap:0; }
.agent-placeholder-copy { min-width:0; display:grid; gap:5px; align-content:center; } .agent-attention-list button { width:100%; min-height:36px; padding:4px 0; display:grid; grid-template-columns:25px 1fr auto; align-items:center; column-gap:8px; border:0; background:transparent; text-align:left; cursor:pointer; }
.agent-placeholder-line { display:block; height:8px; border-radius:var(--radius-pill); background:linear-gradient(90deg,#ece8e4 0%,#f4f1ee 100%); } .agent-attention-avatar { width:25px!important; height:25px!important; font-size:9px!important; font-weight:600!important; }
.agent-placeholder-line.wide { width:78%; } .agent-attention-copy { min-width:0; display:grid; gap:1px; }
.agent-placeholder-line.narrow { width:42%; } .agent-attention-name { font:600 10px/12px "DM Sans"; color:#302C40; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.agent-attention-placeholder { padding:10px 0; display:grid; grid-template-columns:30px 1fr 24px; align-items:center; gap:var(--space-2); border-bottom:1px solid var(--border-subtle); pointer-events:none; } .agent-attention-meta { font:400 9px/11px "DM Sans"; color:#77758A; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.agent-attention-placeholder:last-child { border-bottom:0; } .agent-attention-list em { font:400 9px/11px "DM Sans"; font-style:normal; color:#77758A; }
.agent-placeholder-avatar { width:30px; height:30px; border-radius:50%; background:linear-gradient(180deg,#ece8e4 0%,#e2deda 100%); } .agent-attention-list button:hover .agent-attention-name { color:#FF6654; }
.agent-placeholder-avatar.muted { background:linear-gradient(180deg,#f0ece8 0%,#e8e4e0 100%); } .agent-deadlines ul { margin:0; padding:0; list-style:none; }
.agent-placeholder-label { color:#b8b3bc; font-size:var(--text-meta); font-weight:600; } .agent-deadlines li { display:flex; align-items:center; justify-content:space-between; padding:4px 0; font-size:10px; }
.agent-placeholder-copy small { color:#c5c0ba; font-size:10px; } .agent-deadlines em { color:#77758A; font-size:9px; font-style:normal; }
.agent-placeholder-age { width:20px; height:8px; border-radius:var(--radius-pill); background:#ece8e4; } .agent-ask-input { margin-top:8px; height:35px; padding:0 4px 0 10px; display:flex; align-items:center; gap:2px; border:1px solid #E1DFE7; border-radius:9px; background:#FFFFFF; }
.agent-attention-block .agent-attention-list:has(.agent-attention-placeholder) .agent-attention-placeholder:first-child .agent-placeholder-line.wide { width:65%; } .agent-ask-input:focus-within { border-color:#D9D0FF; box-shadow:0 0 0 2px rgba(115,87,246,0.12); }
.agent-attention-name { color:#2a2530; font-size:var(--text-meta); font-weight:600; } .agent-ask-input input { flex:1; min-width:0; border:0; outline:0; background:transparent; font:400 10px/12px "DM Sans"; color:#171424; }
.agent-attention-meta { color:#8d8792; font-size:10px; } .agent-ask-input input::placeholder { color:#9995A6; }
.agent-attention-list button:hover .agent-attention-name { color:var(--coral); } .agent-ask-attach { width:26px; height:26px; flex-shrink:0; display:grid; place-items:center; border:0; border-radius:6px; background:transparent; color:#6F6B7C; cursor:pointer; }
.agent-deadlines li { display:flex; align-items:center; justify-content:space-between; font-size:var(--text-meta); } .agent-ask-attach:hover { background:#F5F4F2; }
.agent-deadlines em { color:#8d8792; font-size:10px; font-style:normal; font-weight:600; } .agent-ask-send { width:28px; height:28px; flex-shrink:0; display:grid; place-items:center; border:0; border-radius:8px; background:#BEC5D4; color:#fff; cursor:pointer; transition:background 120ms ease; }
.agent-ask-input { margin-top:var(--space-4); height:42px; padding:0 var(--space-1) 0 var(--space-3); display:flex; align-items:center; gap:var(--space-1); border:1px solid rgba(20,20,30,0.1); border-radius:var(--radius-lg); background:#fff; box-shadow:inset 0 1px 2px rgba(20,20,30,0.03); } .agent-ask-send.active { background:#7357F6; }
.agent-ask-input:focus-within { border-color:var(--agent-border); box-shadow:0 0 0 3px rgba(118,86,232,0.1); } .agent-ask-send:disabled { cursor:default; }
.agent-ask-input input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:#2a2530; font-size:var(--text-meta); } .agent-loading-block,.agent-loading-rows { display:grid; gap:6px; padding:4px 0; }
.agent-ask-attach,.agent-ask-send { width:32px; height:32px; flex-shrink:0; display:grid; place-items:center; border:0; border-radius:var(--radius-sm); background:transparent; color:#7a7580; } .agent-loading-pulse { display:block; height:10px; border-radius:999px; background:linear-gradient(90deg,#ece8e4 0%,#f4f1ee 50%,#ece8e4 100%); background-size:200% 100%; animation:agentShimmer 1.2s ease infinite; }
.agent-ask-send { background:var(--agent-soft); color:var(--agent); } .agent-loading-pulse.short { width:62%; }
.agent-ask-send:disabled { opacity:.45; } @keyframes agentShimmer { 0% { background-position:100% 0; } 100% { background-position:-100% 0; } }
.command-palette-overlay { position:fixed; inset:0; z-index:120; display:grid; place-items:start center; padding:12vh var(--space-4) var(--space-4); background:#120f1a66; backdrop-filter:blur(4px); animation:fadeIn var(--motion-base) var(--ease-standard); } .command-palette-overlay { position:fixed; inset:0; z-index:120; display:grid; place-items:start center; padding:12vh var(--space-4) var(--space-4); background:#120f1a66; backdrop-filter:blur(4px); animation:fadeIn var(--motion-base) var(--ease-standard); }
.command-palette { width:min(560px,100%); border:0; border-radius:var(--radius-float); background:#faf9f7; box-shadow:0 24px 60px #08082133; overflow:hidden; animation:scaleIn var(--motion-slow) var(--ease-standard); } .command-palette { width:min(560px,100%); border:0; border-radius:var(--radius-float); background:#faf9f7; box-shadow:0 24px 60px #08082133; overflow:hidden; animation:scaleIn var(--motion-slow) var(--ease-standard); }
.command-palette-input { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid #ece7e1; } .command-palette-input { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid #ece7e1; }
@ -712,13 +713,13 @@ h1 em { color:var(--coral); font-style:normal; font-weight:500; }
.mail-detail-content h2 { margin-top:0; } .mail-detail-content h2 { margin-top:0; }
.compose-agent-mark { width:34px; height:34px; display:grid; place-items:center; border-radius:var(--radius-md); background:var(--agent-soft); color:var(--agent); } .compose-agent-mark { width:34px; height:34px; display:grid; place-items:center; border-radius:var(--radius-md); background:var(--agent-soft); color:var(--agent); }
.compose-ai .agent-action { height:36px; padding:0 12px; font-size:12px; white-space:nowrap; } .compose-ai .agent-action { height:36px; padding:0 12px; font-size:12px; white-space:nowrap; }
.mailbox-notes-pane.compact { min-height:0; border-radius:0 0 var(--radius-xl) var(--radius-xl); border:1px solid var(--border-normal); border-top:1px solid rgba(20,20,30,0.05); background:var(--surface); box-shadow:0 8px 24px rgba(20,20,30,0.05); overflow:hidden; } .mailbox-notes-pane.compact { min-height:0; border-radius:10px; border:1px solid rgba(26,24,38,0.055); background:#FFFFFF; box-shadow:0 1px 2px rgba(20,18,30,0.025),0 4px 12px rgba(20,18,30,0.03); overflow:hidden; }
.mailbox-notes-pane.compact.empty { background:#fdfcfb; } .mailbox-notes-pane.compact.empty { background:#FFFFFF; }
.mailbox-notes-pane.compact.empty .sticky-notes-toggle { min-height:38px; color:#8d8792; font-size:var(--text-micro); font-weight:600; } .mailbox-notes-pane.compact.empty .sticky-notes-toggle { min-height:38px; color:#77758A; font-size:11px; font-weight:600; }
.mailbox-notes-pane.compact.expanded { max-height:min(42vh,320px); display:flex; flex-direction:column; } .mailbox-notes-pane.compact.expanded { max-height:min(42vh,320px); display:flex; flex-direction:column; }
.mailbox-notes-pane.compact.expanded .sticky-notes-body { animation:agentReveal var(--motion-slow) var(--ease-standard); } .mailbox-notes-pane.compact.expanded .sticky-notes-body { animation:agentReveal var(--motion-slow) var(--ease-standard); }
.sticky-notes-toggle { width:100%; min-height:40px; padding:0 12px; display:flex; align-items:center; gap:8px; border:0; background:transparent; color:#5c5763; font:600 12px "DM Sans"; cursor:pointer; } .sticky-notes-toggle { width:100%; min-height:38px; padding:0 12px; display:flex; align-items:center; gap:8px; border:0; background:transparent; color:#292536; font:600 11px "DM Sans"; cursor:pointer; }
.sticky-notes-toggle svg:first-child { transform:rotate(-24deg); color:#bd5947; } .sticky-notes-toggle svg:first-child { transform:rotate(-24deg); color:#F16F68; }
.sticky-notes-toggle span { flex:1; text-align:left; } .sticky-notes-toggle span { flex:1; text-align:left; }
.sticky-notes-toggle span small { color:#8d8792; font-weight:500; } .sticky-notes-toggle span small { color:#8d8792; font-weight:500; }
.sticky-notes-toggle .open { transform:rotate(180deg); } .sticky-notes-toggle .open { transform:rotate(180deg); }