diff --git a/docs/inbox-ui-gap-analysis.md b/docs/inbox-ui-gap-analysis.md index 6bdb84d..c1bfc3e 100644 --- a/docs/inbox-ui-gap-analysis.md +++ b/docs/inbox-ui-gap-analysis.md @@ -114,3 +114,37 @@ Current: implementation screenshot (sparse real data, 3 emails). ## Visual rule Every component: **absent → present → interactive**. Zero data reduces complexity; real data increases density. **No state change may alter row dimensions.** + +--- + +## 11. Post-thickening review (current vs reference) + +After increasing AG Agent panel weight (wider rail, thicker borders/shadows, 44px quick actions, unified notes footer), these gaps remain: + +| Area | Expected | Current | Still needed | +|------|----------|---------|--------------| +| **Populated agent state** | Full dashboard with metrics, agenda, needs attention | Empty state only (no real signals in 3-email inbox) | Correct behavior — verify with meeting/invoice/action-item emails | +| **Metric card copy** | "12 Important emails" inline with icon | Number on own line above label | Optional: inline number + label like reference | +| **Panel header** | Collapse chevron on right | Static header | Add optional collapse affordance | +| **Quick action colors** | Each button has distinct icon tint (sparkle, pencil, search, list) | Only first two are purple-tinted | Tint all four icon containers subtly | +| **Agenda rows** | Clickable with chevron, colored left bar | Styled but no navigation | Wire `View calendar` + row click handlers | +| **Needs attention** | Company avatars with brand colors | Initials via SenderAvatar | OK when diverse senders exist | +| **Ask input** | Send button outside input on right | Send inside input row | Minor — reference shows external send pill | +| **Notes footer** | Attached to panel, flower icon | Pin icon, now visually attached ✓ | Swap icon to match reference if desired | +| **Inbox rows** | Brand logos, label column alignment | Self-sent SD avatars dominate | Needs diverse real senders | +| **Category badges** | Non-zero unread per tab | Hidden when zero ✓ | Will appear with unread mail | +| **Sidebar badges** | Inbox, Drafts, labels, Action Items | Only Clients 1 | Wire remaining counts from API/stats | +| **Sidebar More** | Expands hidden labels | Toggle present, no expansion | Implement label overflow list | +| **Pagination** | `1–10 of 243` | `1–3` without total | Needs total count from API | +| **Row overflow menu** | Three-dot at row end | Missing | Add optional overflow column | +| **Micro-interactions** | Compose press, category hover, selected row coral | Partial | Polish pass on remaining hovers | + +### Thickening changes applied + +- Rail width: 292–308px (was 270–288px) +- Agent panel: heavier shadow, stronger border, 20px top padding +- Quick actions: 44px height, 11px semibold labels, no ellipsis truncation +- Caught-up card: stronger green tint + inset highlight +- Stat cards: gradient fills, 1px tinted borders, 24px numbers +- Notes: attached footer card (shared border with agent panel) +- Ask input: 42px, white fill, focus ring diff --git a/frontend/src/components/AgAgentPanel.jsx b/frontend/src/components/AgAgentPanel.jsx index 25f0f6a..04a29f0 100644 --- a/frontend/src/components/AgAgentPanel.jsx +++ b/frontend/src/components/AgAgentPanel.jsx @@ -118,11 +118,11 @@ export default function AgAgentPanel({ Draft replies - - diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 90b0560..b0a7c5f 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -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(270px,288px); gap:var(--space-4); align-items:start; } +.mailbox-stage { display:grid; grid-template-columns:minmax(0,1fr) minmax(292px,308px); 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,65 +589,70 @@ 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:var(--space-3); position:sticky; top:var(--space-3); align-self:start; } -.agent-panel { padding:var(--space-4); border:1px solid var(--border-subtle); border-radius:var(--radius-xl); background:var(--surface); box-shadow:0 4px 18px rgba(20,20,30,0.035); } -.agent-panel-head { display:flex; align-items:center; gap:var(--space-3); } -.agent-panel-mark { width:32px; height:32px; display:grid; place-items:center; border-radius:var(--radius-md); background:#f8f2ff; color:var(--agent); font-size:14px; } -.agent-panel-head h2 { margin:0; font:650 15px "Manrope"; letter-spacing:-.2px; } -.agent-panel-hello { margin:0 0 var(--space-3); display:grid; gap:var(--space-1); } -.agent-panel-hello strong { font-size:var(--text-content); font-weight:600; } -.agent-panel-hello span { color:#7a746e; font-size:var(--text-meta); line-height:var(--line-content); } +.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:flex; align-items:center; gap:var(--space-3); } +.agent-panel-mark { width:36px; height:36px; flex-shrink:0; display:grid; place-items:center; border-radius:var(--radius-md); background:linear-gradient(180deg,#faf4ff 0%,#f3ebff 100%); color:var(--agent); font-size:15px; box-shadow:inset 0 0 0 1px #ebe2ff; } +.agent-panel-head h2 { margin:0; font:700 15px "Manrope"; letter-spacing:-.25px; color:#1f1b28; } +.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-3); display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2); } -.agent-stat { min-height:86px; padding:var(--space-3); display:grid; align-content:start; gap:2px; border:0; border-radius:var(--radius-lg); text-align:left; cursor:pointer; transition:transform var(--motion-fast) var(--ease-standard); } -.agent-stat:hover { transform:translateY(-1px); } -.agent-stat strong { font:700 22px "Manrope"; letter-spacing:-.6px; color:#241f2b; line-height:1; } -.agent-stat span { color:#3d3944; font-size:var(--text-meta); font-weight:600; line-height:1.3; } -.agent-stat small { color:#7d7872; font-size:10px; line-height:1.3; } -.agent-stat-rose { background:#fff1ee; color:#e15b45; } -.agent-stat-blue { background:#eef4ff; color:#4d74c4; } -.agent-stat-green { background:#eef8f2; color:#3d8a5d; } -.agent-stat-amber { background:#f8f2ff; color:#8b6fd4; } -.agent-quick { margin-top:var(--space-3); } -.agent-quick h3 { margin:0 0 var(--space-2); color:#8d8792; font-size:10px; letter-spacing:.08em; text-transform:uppercase; } +.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:26px; height:26px; margin-bottom:2px; display:grid; place-items:center; border-radius:8px; background:#ffffff88; } +.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-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:38px; padding:0 10px; display:flex; align-items:center; justify-content:flex-start; gap:8px; border:1px solid var(--border-normal); border-radius:var(--radius-sm); background:var(--surface); color:#4d4852; font-size:var(--text-meta); font-weight:500; white-space:nowrap; transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast) var(--ease-standard); } -.agent-quick-btn span:last-child { overflow:hidden; text-overflow:ellipsis; } -.agent-quick-icon { width:22px; height:22px; flex-shrink:0; display:grid; place-items:center; border-radius:6px; background:#f6f4f2; color:inherit; } -.agent-quick-btn-agent .agent-quick-icon { background:#f3efff; color:var(--agent); } -.agent-quick-btn:hover { background:#f9f7ff; border-color:var(--agent-border); } +.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-stat-icon { opacity:.9; } -.agent-attention-list button { display:grid; grid-template-columns:auto 1fr auto; align-items:center; gap:var(--space-2); } -.agent-attention-avatar { width:28px!important; height:28px!important; font-size:10px!important; } +.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 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; } .agent-attention-list em { color:#a39ea8; font-size:10px; font-style:normal; font-weight:600; } -.agent-caught-up { margin:0 0 var(--space-3); padding:var(--space-3); border-radius:var(--radius-md); background:linear-gradient(180deg,#f3faf5 0%,#f8f7f5 100%); border:1px solid #dceee3; color:#6f6a64; } -.agent-caught-up-lead { margin:0 0 var(--space-1); display:flex; align-items:center; gap:var(--space-2); color:#2f7a52; font-size:var(--text-meta); font-weight:600; } -.agent-caught-up p { margin:0; font-size:var(--text-meta); line-height:var(--line-content); } -.agent-caught-up small { display:block; margin-top:var(--space-2); color:#8d8792; font-size:var(--text-micro); } -.agent-context-block { margin-top:var(--space-4); padding-top:var(--space-3); border-top:1px solid var(--border-subtle); } +.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:#8d8792; font-size:10px; letter-spacing:.08em; text-transform:uppercase; } +.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:var(--space-2); display:grid; grid-template-columns:3px 1fr auto; align-items:center; gap:var(--space-2); border-radius:var(--radius-sm); background:#fafafa; } -.agent-agenda-bar { width:3px; height:100%; min-height:36px; border-radius:var(--radius-pill); background:#3d8a5d; } +.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-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:#3d3944; font-size:var(--text-meta); font-weight:600; line-height:1.3; } +.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-attention-list button { width:100%; padding:var(--space-2) 0; display:grid; gap:2px; border:0; background:transparent; text-align:left; cursor:pointer; } -.agent-attention-name { color:#3d3944; font-size:var(--text-meta); font-weight:600; } +.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:38px; padding:0 var(--space-1) 0 var(--space-3); display:flex; align-items:center; gap:var(--space-1); border:1px solid var(--border-normal); border-radius:var(--radius-md); background:#fafafa; } -.agent-ask-input input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:#3d3944; font-size:var(--text-meta); } -.agent-ask-attach,.agent-ask-send { width:30px; height:30px; display:grid; place-items:center; border:0; border-radius:var(--radius-sm); background:transparent; color:#8d8792; } +.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; } .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); } @@ -674,9 +679,9 @@ 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:var(--radius-xl); border:1px solid var(--border-subtle); background:var(--surface); box-shadow:0 2px 8px rgba(20,20,30,0.025); overflow:hidden; } -.mailbox-notes-pane.compact.empty { border-color:transparent; background:transparent; box-shadow:none; } -.mailbox-notes-pane.compact.empty .sticky-notes-toggle { min-height:34px; color:#9a949e; font-size:var(--text-micro); font-weight:500; } +.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.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; }