Swap accent color from cyan (#22d3ee) to ember orange (#f97316) site-wide. Cyan caused contrast issues and felt generic — orange brings warmth and urgency fitting for a troubleshooting tool. Changes: - CSS variables: accent, accent-hover, accent-dim, accent-text, primary, ring - Warning color shifted from amber (#fbbf24) to yellow (#eab308) for semantic separation from orange accent - Brand SVGs: logo gradient updated to orange - 50+ component files: all hardcoded cyan hex values, Tailwind cyan-* classes, and rgba(34,211,238,...) glow values replaced - landing.css: all 45+ cyan references + 5 old border color fixes - DESIGN-SYSTEM.md bumped to v5 with decisions log - CLAUDE.md: all color references synced to charcoal palette + orange accent - PWA theme-color meta tag updated to match sidebar (#10121a) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
62 lines
2.5 KiB
TypeScript
62 lines
2.5 KiB
TypeScript
import { useState, useEffect } from 'react'
|
|
import { useNavigate } from 'react-router-dom'
|
|
import { Users, AlertTriangle, Activity, ArrowRight } from 'lucide-react'
|
|
import { usePermissions } from '@/hooks/usePermissions'
|
|
import { aiSessionsApi } from '@/api/aiSessions'
|
|
|
|
export function TeamSummary() {
|
|
const { isAccountOwner } = usePermissions()
|
|
const navigate = useNavigate()
|
|
const [escalationCount, setEscalationCount] = useState(0)
|
|
|
|
useEffect(() => {
|
|
if (!isAccountOwner) return
|
|
aiSessionsApi.getEscalationQueue()
|
|
.then((esc) => setEscalationCount(esc.length))
|
|
.catch(() => {})
|
|
}, [isAccountOwner])
|
|
|
|
if (!isAccountOwner) return null
|
|
|
|
const items = [
|
|
{ label: 'Escalations', value: escalationCount, icon: AlertTriangle, color: '#eab308', href: '/escalations' },
|
|
{ label: 'Team Activity', value: '\u2014', icon: Activity, color: '#f97316', href: '/analytics' },
|
|
{ label: 'Members', value: '\u2014', icon: Users, color: '#a78bfa', href: '/account' },
|
|
]
|
|
|
|
return (
|
|
<div className="card-flat">
|
|
<div
|
|
className="flex items-center justify-between px-5 py-3"
|
|
style={{ borderBottom: '1px solid var(--glass-border)' }}
|
|
>
|
|
<h3 className="font-heading text-sm font-bold text-foreground">Team Summary</h3>
|
|
<button
|
|
onClick={() => navigate('/analytics')}
|
|
className="flex items-center gap-1 text-[0.6875rem] text-muted-foreground hover:text-foreground transition-colors"
|
|
>
|
|
Manage <ArrowRight size={10} />
|
|
</button>
|
|
</div>
|
|
<div className="grid grid-cols-3 divide-x" style={{ borderColor: 'var(--glass-border)' }}>
|
|
{items.map((item) => (
|
|
<button
|
|
key={item.label}
|
|
onClick={() => navigate(item.href)}
|
|
className="flex flex-col items-center gap-2 py-5 rounded-lg hover:bg-card-hover transition-all duration-350"
|
|
style={{ transition: 'transform 350ms cubic-bezier(0.34, 1.56, 0.64, 1), background 200ms ease' }}
|
|
onMouseEnter={e => { e.currentTarget.style.transform = 'translateY(-4px)' }}
|
|
onMouseLeave={e => { e.currentTarget.style.transform = 'translateY(0)' }}
|
|
>
|
|
<item.icon size={20} style={{ color: item.color }} />
|
|
<p className="font-heading text-xl font-extrabold text-foreground">{item.value}</p>
|
|
<p className="font-sans text-xs text-[0.5625rem] uppercase tracking-[0.1em] text-muted-foreground">
|
|
{item.label}
|
|
</p>
|
|
</button>
|
|
))}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|