feat: brand color system + Kanban view (admin + client)

- Fix button contrast: add all missing shadcn tokens (primary-foreground,
  ring, input, muted, destructive) aligned to iamcavalli brand
- NavBar: #1A463C green bar with white text
- Login page: clean brand layout with iamcavalli wordmark
- Admin pages: brand colors on headings, borders, links
- Admin ClientRow: semantic payment badges (green/yellow/red)
- Admin phases tab: Lista ↔ Kanban toggle with @dnd-kit drag & drop
  between Da fare / In corso / Fatto columns (optimistic updates)
- Client dashboard: Timeline ↔ Kanban toggle, expandable task cards
  with approve button + comment form inline

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Simone Cavalli
2026-05-15 23:14:29 +02:00
parent 80d93993a9
commit 7af917fe80
13 changed files with 684 additions and 50 deletions
+10 -10
View File
@@ -11,42 +11,42 @@ export default async function AdminDashboard() {
return (
<div>
<div className="flex items-center justify-between mb-6">
<h1 className="text-2xl font-bold text-gray-900">Clienti</h1>
<h1 className="text-2xl font-bold text-[#1a1a1a]">Clienti</h1>
<Button asChild>
<Link href="/admin/clients/new">+ Nuovo cliente</Link>
</Button>
</div>
{clients.length === 0 ? (
<div className="text-center py-20 text-gray-400">
<div className="text-center py-20 text-[#71717a]">
<p>Nessun cliente ancora.</p>
<p className="mt-2">
<Link
href="/admin/clients/new"
className="text-blue-600 hover:underline"
className="text-[#1A463C] hover:underline font-medium"
>
Crea il primo cliente
</Link>
</p>
</div>
) : (
<div className="bg-white rounded-lg border border-gray-200 overflow-hidden">
<div className="bg-white rounded-lg border border-[#e5e7eb] overflow-hidden">
<table className="w-full text-sm">
<thead className="bg-gray-50 border-b border-gray-200">
<thead className="bg-[#f9f9f9] border-b border-[#e5e7eb]">
<tr>
<th className="text-left py-3 px-4 font-medium text-gray-600">
<th className="text-left py-3 px-4 font-medium text-[#71717a]">
Cliente
</th>
<th className="text-left py-3 px-4 font-medium text-gray-600">
<th className="text-left py-3 px-4 font-medium text-[#71717a]">
Totale
</th>
<th className="text-left py-3 px-4 font-medium text-gray-600">
<th className="text-left py-3 px-4 font-medium text-[#71717a]">
Acconto
</th>
<th className="text-left py-3 px-4 font-medium text-gray-600">
<th className="text-left py-3 px-4 font-medium text-[#71717a]">
Saldo
</th>
<th className="text-left py-3 px-4 font-medium text-gray-600">
<th className="text-left py-3 px-4 font-medium text-[#71717a]">
Link
</th>
</tr>