feat: Client Portal redesign to Quiet Luxury + milestone stepper

- New MilestoneStepper primitive (horizontal per-phase progress)
- Token-migrate portal shell, phase cards, sidebar cards, kanban to dual-theme
- Soft-tint status pills (emerald/amber/muted) replacing solid badges
- embedded prop on ClientDashboard fixes double-header in multi-project tabs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 22:54:58 +02:00
parent 6d5e04bf9c
commit 11870e15d3
13 changed files with 333 additions and 306 deletions
+6 -7
View File
@@ -1,5 +1,4 @@
import type { ClientView } from '@/lib/client-view';
import { Card } from '@/components/ui/card';
interface NotesSectionProps {
notes: ClientView['notes'];
@@ -8,7 +7,7 @@ interface NotesSectionProps {
export function NotesSection({ notes }: NotesSectionProps) {
if (notes.length === 0) {
return (
<p className="text-sm text-[#999999] italic">
<p className="text-sm text-muted-foreground italic">
Nessuna nota ancora registrata. Le decisioni appariranno qui man mano che il progetto avanza.
</p>
);
@@ -28,20 +27,20 @@ export function NotesSection({ notes }: NotesSectionProps) {
});
return (
<Card
<div
key={note.id}
className="rounded-lg border border-[#e5e5e5] bg-white shadow-none p-5"
className="rounded-xl border border-border-light bg-card shadow-card p-5"
>
{/* Testo nota — sola lettura (D-12: admin scrive, cliente legge) */}
<p className="text-sm text-[#1a1a1a] leading-relaxed whitespace-pre-wrap">
<p className="text-xs text-foreground leading-relaxed whitespace-pre-wrap">
{note.body}
</p>
{/* Timestamp */}
<p className="text-xs text-[#999999] mt-3">
<p className="text-[11px] text-muted-foreground mt-3">
{dateFormatted} alle {timeFormatted}
</p>
</Card>
</div>
);
})}
</div>