From 192b810eb43b880b6199bcf2f13ffc60d76cd582 Mon Sep 17 00:00:00 2001 From: debu-2 Date: Sun, 4 Oct 2026 00:52:13 +0530 Subject: [PATCH] right side --- docs/ag-agent-panel-reference-match.md | 150 +++++++++++++++ frontend/src/components/AgAgentPanel.jsx | 231 ++++++++++++----------- frontend/src/components/MailboxView.jsx | 1 + frontend/src/styles.css | 209 ++++++++++---------- 4 files changed, 375 insertions(+), 216 deletions(-) create mode 100644 docs/ag-agent-panel-reference-match.md diff --git a/docs/ag-agent-panel-reference-match.md b/docs/ag-agent-panel-reference-match.md new file mode 100644 index 0000000..6755ea1 --- /dev/null +++ b/docs/ag-agent-panel-reference-match.md @@ -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 diff --git a/frontend/src/components/AgAgentPanel.jsx b/frontend/src/components/AgAgentPanel.jsx index 2833582..3fd92a0 100644 --- a/frontend/src/components/AgAgentPanel.jsx +++ b/frontend/src/components/AgAgentPanel.jsx @@ -1,100 +1,76 @@ import { useState } from "react"; import { - Calendar, + CalendarDays, + Check, ChevronDown, ChevronRight, + ClipboardList, FileSearch, + FileText, ListChecks, Mail, Paperclip, PenLine, - Receipt, Send, + Sparkles, } from "lucide-react"; import AgentInsight from "./AgentInsight"; -import AgentSpark from "./AgentSpark"; import SenderAvatar from "./SenderAvatar"; import { inboxContext } from "../utils/inboxSignals"; const ICON = { size: 14, strokeWidth: 1.75 }; -const AGENDA_SLOTS = 3; -const ATTENTION_SLOTS = 2; +const ICON_SM = { size: 13, strokeWidth: 1.75 }; 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: "meetings", label: "Meetings mentioned", hint: "In your emails", emptyCaption: "No meetings found", icon: Calendar, tone: "green" }, - { key: "invoices", label: "Invoices & bills", hint: "This week", emptyCaption: "No invoices detected", icon: Receipt, tone: "amber" }, + { + key: "important", + label: "Important emails", + 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) { const hour = new Date().getHours(); const period = hour < 12 ? "Good morning" : hour < 17 ? "Good afternoon" : "Good evening"; - return `${period}, ${name}`; + return `${period}, ${name}!`; } function statCaption(card, stats) { 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) { return `${stats[card.captionKey]} ${card.captionSuffix}`; } return card.hint; } -function padSlots(items, slots) { - const result = items.slice(0, slots).map((item) => ({ ...item, placeholder: false })); - while (result.length < slots) { - result.push({ placeholder: true, id: `slot-${result.length}` }); - } - return result; -} - -function AgendaPlaceholder({ index }) { - return ( -
  • 0}> -
  • - ); -} - -function AttentionPlaceholder({ index, showEmptyMessage }) { - return ( -
  • 0 && !showEmptyMessage}> - {showEmptyMessage && index === 0 ? ( - <> -
  • - ); +function metricTotal(stats) { + return cards.reduce((sum, card) => sum + (stats[card.key] || 0), 0); } export default function AgAgentPanel({ @@ -102,6 +78,7 @@ export default function AgAgentPanel({ emails, focus, insight, + loading = false, onQuickAction, onOpenEmail, onAgentAsk, @@ -110,8 +87,8 @@ export default function AgAgentPanel({ const [agentQuery, setAgentQuery] = useState(""); const [panelOpen, setPanelOpen] = useState(true); const firstName = account?.first_name || "there"; - const agendaSlots = padSlots(today, AGENDA_SLOTS); - const attentionSlots = padSlots(needsReply, ATTENTION_SLOTS); + const allMetricsZero = metricTotal(stats) === 0; + const hasQuery = agentQuery.trim().length > 0; function submitAgentQuery(event) { event.preventDefault(); @@ -124,7 +101,9 @@ export default function AgAgentPanel({ return (
    - +

    AG Agent

    Your email co-pilot

    @@ -136,7 +115,7 @@ export default function AgAgentPanel({ aria-label={panelOpen ? "Collapse agent panel" : "Expand agent panel"} onClick={() => setPanelOpen((open) => !open)} > - +
    @@ -151,7 +130,23 @@ export default function AgAgentPanel({ )} - {!insight && ( + {!insight && loading && ( + + )} + + {!insight && !loading && allMetricsZero && ( +
    +

    + You're all caught up. +

    +

    No urgent messages or outstanding actions.

    +
    + )} + + {!insight && !loading && !allMetricsZero && (
    {cards.map((card) => { const Icon = card.icon; @@ -166,9 +161,11 @@ export default function AgAgentPanel({ disabled={isEmpty} aria-label={`${card.label}: ${count}`} > - - {count} - {card.label} +
    + + {count} +
    + {card.label} {statCaption(card, stats)} ); @@ -176,29 +173,29 @@ export default function AgAgentPanel({
    )} - {!insight && focus &&

    {focus}

    } + {!insight && focus && !allMetricsZero &&

    {focus}

    } -
    +

    Quick actions

    -
    - - - -
    -
    +
    {!insight && (
    @@ -206,38 +203,41 @@ export default function AgAgentPanel({

    Today's agenda

    - + ) : ( +

    No meetings in your emails today.

    + )}
    )} {!insight && (

    Needs attention

    - + ) : ( +

    Nothing needs your attention right now.

    + )}
    )} @@ -278,10 +280,15 @@ export default function AgAgentPanel({ placeholder="Ask about your emails..." /> - diff --git a/frontend/src/components/MailboxView.jsx b/frontend/src/components/MailboxView.jsx index efa94f1..77be076 100644 --- a/frontend/src/components/MailboxView.jsx +++ b/frontend/src/components/MailboxView.jsx @@ -701,6 +701,7 @@ export default function MailboxView({ emails={listedEmails} focus={agentFocus} insight={insight} + loading={status.loading} onQuickAction={runQuickAction} onOpenEmail={(emailId) => { const email = listedEmails.find((item) => item.id === emailId); diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 392acf5..e524cce 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -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"); -: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; } html { scroll-behavior:smooth; } 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 small { color:#7a7580; font-size:10px; max-width:160px; } .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-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; } @@ -589,105 +589,106 @@ h1 em { color:var(--coral); font-style:normal; font-weight:500; } .mail-label-amber { background:#fff4d8; color:#9a7420; } .mail-label-green { background:#e7f6ee; color:#2f7a52; } .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; } -.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-head { margin-bottom:var(--space-3); display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:var(--space-3); } -.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); } +.mailbox-rail { min-width:0; display:flex; flex-direction:column; gap:8px; position:sticky; top:var(--space-3); align-self:start; } +.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 { padding:14px 16px 8px; display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:10px; } +.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-head h2 { margin:0; font:700 15px "Manrope"; letter-spacing:-.25px; color:#1f1b28; } -.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-toggle:hover { background:#f5f3f0; color:#5a5562; } +.agent-panel-head h2 { margin:0; font:700 15px/18px "DM Sans"; color:#151322; letter-spacing:-.2px; } +.agent-panel-head p { margin:1px 0 0; font:400 10.5px/14px "DM Sans"; color:#77758A; } +.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-body { display:grid; gap:0; 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 strong { font:650 15px "Manrope"; letter-spacing:-.2px; color:#1f1b28; } -.agent-panel-hello span { color:#6f6a64; font-size:var(--text-meta); line-height:var(--line-content); } -.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 var(--space-3); color:#7a746e; font-size:var(--text-meta); line-height:var(--line-content); } -.agent-stat-grid { margin-bottom:var(--space-4); display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2); } -.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-stat:hover { transform:translateY(-1px); box-shadow:0 4px 12px rgba(20,20,30,0.06); } -.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-rose .agent-stat-icon { color:#e15b45; } -.agent-stat-blue .agent-stat-icon { color:#4d74c4; } -.agent-stat-green .agent-stat-icon { color:#3d8a5d; } -.agent-stat-amber .agent-stat-icon { color:#8b6fd4; } -.agent-stat strong { font:700 24px "Manrope"; letter-spacing:-.7px; color:#241f2b; line-height:1; } -.agent-stat span { color:#3d3944; font-size:11px; font-weight:600; line-height:1.25; } -.agent-stat small { color:#7d7872; font-size:10px; line-height:1.25; } -.agent-stat-rose { background:linear-gradient(180deg,#fff3ef 0%,#ffece8 100%); border-color:#f3d4cb; color:#e15b45; } -.agent-stat-blue { background:linear-gradient(180deg,#f3f7ff 0%,#eaf1ff 100%); border-color:#d5e2f8; color:#4d74c4; } -.agent-stat-green { background:linear-gradient(180deg,#f1faf4 0%,#e8f5ed 100%); border-color:#cfe8d8; color:#3d8a5d; } -.agent-stat-amber { background:linear-gradient(180deg,#f7f2ff 0%,#efe8ff 100%); border-color:#ddd0f5; color:#8b6fd4; } -.agent-stat-empty { opacity:.72; cursor:default; } -.agent-stat-empty:hover { transform:none; box-shadow:none; } -.agent-stat-empty strong { color:#b5b0ba; } -.agent-stat-empty small { color:#a39ea8; } -.agent-quick { margin-top:var(--space-1); padding-top:var(--space-3); border-top:1px solid var(--border-subtle); } -.agent-quick h3 { margin:0 0 10px; color:#7a7580; font-size:10px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; } -.agent-quick div { display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2); } -.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-quick-btn span:last-child { min-width:0; } -.agent-quick-icon { width:24px; height:24px; flex-shrink:0; display:grid; place-items:center; border-radius:7px; background:#f0eeec; color:inherit; } -.agent-quick-btn-agent .agent-quick-icon { background:#f0ebff; color:var(--agent); } -.agent-quick-btn-info .agent-quick-icon { background:#eaf1ff; color:var(--info); } -.agent-quick-btn-success .agent-quick-icon { background:#e8f5ed; color:var(--success); } -.agent-quick-btn:hover { background:#f9f7ff; border-color:var(--agent-border); box-shadow:0 1px 4px rgba(118,86,232,0.08); } -.agent-quick-btn-agent { color:var(--agent); } -.agent-quick-btn-info:hover { background:#f5f8ff; border-color:#c8d8f5; } -.agent-quick-btn-success:hover { background:#f3faf5; border-color:#c5e5d0; } -.agent-attention-avatar { width:30px!important; height:30px!important; font-size:10px!important; } -.agent-attention-copy { min-width:0; display:grid; gap:2px; text-align:left; } -.agent-attention-list li { border-bottom:1px solid var(--border-subtle); } -.agent-attention-list li:last-child { border-bottom:0; } -.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-attention-list button:hover { background:#faf9fc; border-radius:var(--radius-sm); } -.agent-attention-list em { color:#a39ea8; font-size:10px; font-style:normal; font-weight:600; } -.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-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-caught-up p { margin:0; font-size:var(--text-meta); font-weight:500; line-height:var(--line-content); } -.agent-caught-up small { display:block; margin-top:8px; color:#6d9a7f; font-size:var(--text-micro); font-weight:500; } -.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:var(--space-2); margin-bottom:var(--space-2); } -.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; color:var(--agent); font-size:10px; font-weight:600; } -.agent-context-block ul { margin:0; padding:0; list-style:none; display:grid; gap:var(--space-2); } -.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-row:hover { background:#f5f4f8; } -.agent-agenda-bar { width:4px; height:100%; min-height:40px; border-radius:var(--radius-pill); background:#3d8a5d; } -.agent-agenda-row.tone-blue .agent-agenda-bar { background:#4d74c4; } -.agent-agenda-row.tone-rose .agent-agenda-bar { background:var(--coral); } -.agent-agenda-row.tone-amber .agent-agenda-bar { background:#b7892d; } -.agent-agenda-row time { display:block; color:#8d8792; font-size:10px; font-weight:600; } -.agent-agenda-row strong { display:block; color:#2a2530; font-size:var(--text-meta); font-weight:600; line-height:1.3; } -.agent-agenda-row small { display:block; color:#8d8792; font-size:10px; } -.agent-placeholder-row { border-style:dashed; background:#fafafa; pointer-events:none; } -.agent-placeholder-row .agent-agenda-bar.placeholder { background:#e4e0dc; min-height:36px; } -.agent-placeholder-row time,.agent-placeholder-row strong,.agent-placeholder-row small { color:#b8b3bc; } -.agent-placeholder-row strong { font-weight:500; } -.agent-placeholder-copy { min-width:0; display:grid; gap:5px; align-content:center; } -.agent-placeholder-line { display:block; height:8px; border-radius:var(--radius-pill); background:linear-gradient(90deg,#ece8e4 0%,#f4f1ee 100%); } -.agent-placeholder-line.wide { width:78%; } -.agent-placeholder-line.narrow { width:42%; } -.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-placeholder:last-child { border-bottom:0; } -.agent-placeholder-avatar { width:30px; height:30px; border-radius:50%; background:linear-gradient(180deg,#ece8e4 0%,#e2deda 100%); } -.agent-placeholder-avatar.muted { background:linear-gradient(180deg,#f0ece8 0%,#e8e4e0 100%); } -.agent-placeholder-label { color:#b8b3bc; font-size:var(--text-meta); font-weight:600; } -.agent-placeholder-copy small { color:#c5c0ba; font-size:10px; } -.agent-placeholder-age { width:20px; height:8px; border-radius:var(--radius-pill); background:#ece8e4; } -.agent-attention-block .agent-attention-list:has(.agent-attention-placeholder) .agent-attention-placeholder:first-child .agent-placeholder-line.wide { width:65%; } -.agent-attention-name { color:#2a2530; font-size:var(--text-meta); font-weight:600; } -.agent-attention-meta { color:#8d8792; font-size:10px; } -.agent-attention-list button:hover .agent-attention-name { color:var(--coral); } -.agent-deadlines li { display:flex; align-items:center; justify-content:space-between; font-size:var(--text-meta); } -.agent-deadlines em { color:#8d8792; font-size:10px; font-style:normal; font-weight:600; } -.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-input:focus-within { border-color:var(--agent-border); box-shadow:0 0 0 3px rgba(118,86,232,0.1); } -.agent-ask-input input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:#2a2530; font-size:var(--text-meta); } -.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-ask-send { background:var(--agent-soft); color:var(--agent); } -.agent-ask-send:disabled { opacity:.45; } +.agent-panel-body { padding:0 16px 10px; animation:agentReveal var(--motion-slow) var(--ease-standard); } +.agent-panel-hello { margin:10px 0 0; display:grid; gap:2px; } +.agent-panel-hello strong { font:700 14px/18px "DM Sans"; color:#171424; } +.agent-panel-hello span { font:400 11px/15px "DM Sans"; color:#77758A; } +.agent-panel-note { margin:0 0 8px; font-size:11px; line-height:15px; color:#77758A; } +.agent-caught-up { margin:10px 0 0; padding:10px 12px; border-radius:10px; background:#EDF9F4; border:1px solid #D7F0E5; } +.agent-caught-up-lead { margin:0 0 4px; display:flex; align-items:center; gap:6px; font:600 11px/15px "DM Sans"; color:#087852; } +.agent-caught-up p { margin:0; font:400 10px/14px "DM Sans"; color:#77758A; } +.agent-stat-grid { margin-top:10px; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; } +.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:hover:not(:disabled) { filter:brightness(.985); } +.agent-stat-top { display:flex; align-items:center; gap:6px; margin-bottom:2px; } +.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-label { font:600 10.5px/13px "DM Sans"; } +.agent-stat small { font:400 9.5px/12px "DM Sans"; } +.agent-stat-rose { background:#FFF1ED; border-color:#FFE1D8; } +.agent-stat-rose .agent-stat-icon { color:#FF4F38; } +.agent-stat-rose strong { font:700 22px/22px "DM Sans"; color:#B72416; } +.agent-stat-rose .agent-stat-label { color:#5B211B; } +.agent-stat-rose small { color:#B4675E; } +.agent-stat-blue { background:#EEF3FF; border-color:#DDE7FF; } +.agent-stat-blue .agent-stat-icon { color:#2764F1; } +.agent-stat-blue strong { font:700 22px/22px "DM Sans"; color:#153EAB; } +.agent-stat-blue .agent-stat-label { color:#1E388D; } +.agent-stat-blue small { color:#5270C3; } +.agent-stat-green { background:#EDF9F4; border-color:#D7F0E5; } +.agent-stat-green .agent-stat-icon { color:#11966A; } +.agent-stat-green strong { font:700 22px/22px "DM Sans"; color:#087852; } +.agent-stat-green .agent-stat-label { color:#176C52; } +.agent-stat-green small { color:#4D927C; } +.agent-stat-purple { background:#F3F0FF; border-color:#E5DFFF; } +.agent-stat-purple .agent-stat-icon { color:#6747E8; } +.agent-stat-purple strong { font:700 22px/22px "DM Sans"; color:#5633CE; } +.agent-stat-purple .agent-stat-label { color:#4930A6; } +.agent-stat-purple small { color:#7767BD; } +.agent-stat-empty { opacity:.88; cursor:default; } +.agent-stat-empty strong { color:#B8B6BE!important; } +.agent-stat-empty .agent-stat-label { color:#77757D!important; } +.agent-stat-empty small { color:#B5B2BA!important; } +.agent-quick { margin-top:12px; padding-top:10px; border-top:1px solid var(--ag-divider); } +.agent-quick h3 { margin:0 0 7px; font:600 9.5px/12px "DM Sans"; letter-spacing:.06em; text-transform:uppercase; color:#6F6C7B; } +.agent-quick-grid { display:grid; grid-template-columns:1fr 1fr; gap:6px 8px; } +.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-quick-btn:hover { background:#F9F7FF; border-color:#D9D0FF; } +.agent-quick-icon { flex-shrink:0; } +.agent-quick-icon-purple { color:#7357F6; } +.agent-quick-icon-muted { color:#667085; } +.agent-quick-icon-slate { color:#50627A; } +.agent-context-block { margin-top:12px; padding-top:10px; border-top:1px solid var(--ag-divider); } +.agent-context-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; } +.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-link { border:0; background:transparent; font:500 9.5px/12px "DM Sans"; color:#5D4CF5; cursor:pointer; } +.agent-context-link:hover { text-decoration:underline; } +.agent-empty-line { margin:0; padding:2px 0; font:400 10px/14px "DM Sans"; color:#A6A2AE; } +.agent-agenda-list { margin:0; padding:0; list-style:none; display:grid; gap:2px; } +.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:3px; height:12px; border-radius:999px; align-self:center; } +.agent-agenda-bar.tone-green { background:#11966A; } +.agent-agenda-bar.tone-blue { background:#2764F1; } +.agent-agenda-bar.tone-rose { background:#FF6654; } +.agent-agenda-bar.tone-amber { background:#b7892d; } +.agent-agenda-row time { font:500 9.5px/12px "DM Sans"; color:#6D6A80; white-space:nowrap; } +.agent-agenda-copy { min-width:0; display:grid; gap:1px; } +.agent-agenda-copy strong { font:600 10px/12px "DM Sans"; color:#353148; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } +.agent-agenda-copy small { font:400 9px/11px "DM Sans"; color:#77748A; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } +.agent-agenda-chevron { color:#77758A; flex-shrink:0; } +.agent-attention-list { margin:0; padding:0; list-style:none; display:grid; gap:0; } +.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-attention-avatar { width:25px!important; height:25px!important; font-size:9px!important; font-weight:600!important; } +.agent-attention-copy { min-width:0; display:grid; gap:1px; } +.agent-attention-name { font:600 10px/12px "DM Sans"; color:#302C40; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } +.agent-attention-meta { font:400 9px/11px "DM Sans"; color:#77758A; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } +.agent-attention-list em { font:400 9px/11px "DM Sans"; font-style:normal; color:#77758A; } +.agent-attention-list button:hover .agent-attention-name { color:#FF6654; } +.agent-deadlines ul { margin:0; padding:0; list-style:none; } +.agent-deadlines li { display:flex; align-items:center; justify-content:space-between; padding:4px 0; font-size:10px; } +.agent-deadlines em { color:#77758A; font-size:9px; font-style:normal; } +.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-ask-input:focus-within { border-color:#D9D0FF; box-shadow:0 0 0 2px rgba(115,87,246,0.12); } +.agent-ask-input input { flex:1; min-width:0; border:0; outline:0; background:transparent; font:400 10px/12px "DM Sans"; color:#171424; } +.agent-ask-input input::placeholder { color:#9995A6; } +.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-ask-attach:hover { background:#F5F4F2; } +.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-send.active { background:#7357F6; } +.agent-ask-send:disabled { cursor:default; } +.agent-loading-block,.agent-loading-rows { display:grid; gap:6px; padding:4px 0; } +.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-loading-pulse.short { width:62%; } +@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 { 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; } @@ -712,13 +713,13 @@ h1 em { color:var(--coral); font-style:normal; font-weight:500; } .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-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.empty { background:#fdfcfb; } -.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 { 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:#FFFFFF; } +.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 .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 svg:first-child { transform:rotate(-24deg); color:#bd5947; } +.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:#F16F68; } .sticky-notes-toggle span { flex:1; text-align:left; } .sticky-notes-toggle span small { color:#8d8792; font-weight:500; } .sticky-notes-toggle .open { transform:rotate(180deg); }