Skip to content

Commit b76d33c

Browse files
Cespialclaude
andcommitted
style: Inter font + aesthetic refinement per reference dashboard
- Add Inter via next/font/google with font-feature-settings cv02-cv11 - Background app color → #f9fafb (subtle gray, not pure white) - Sidebar dark bg → #1a1a2e, width 260px, 0.08em tracking on labels - Dashboard header → breadcrumb style (Dashboard > Entidad) - Stat cards → uppercase label, 28px semibold number, mini sparkline bars - Average score now computed from project_scores - Card padding → generous, divide-y for list items (no internal padding) - All font sizes → explicit [13px] for body, [11px] for labels - Badge → gray-50 default, cleaner pill borders - Login → centered on bg-app, 2.5 vertical padding on inputs - Landing → bg-app, backdrop-blur-md, tighter hero heading - Progress → gray-100 track, h-2 default - Skeleton → gray-100 instead of slate-100 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 67c5572 commit b76d33c

14 files changed

Lines changed: 294 additions & 241 deletions

File tree

src/app/dashboard/dashboard-shell.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,22 @@ export function DashboardShell({ children, userName, userEmail, orgType }: Dashb
1414
return (
1515
<div className="min-h-screen bg-bg-app">
1616
<Sidebar userName={userName} userEmail={userEmail} orgType={orgType} />
17-
<main className="ml-64">
18-
{/* Header bar */}
19-
<header className="sticky top-0 z-30 flex items-center justify-between border-b border-border bg-white/80 backdrop-blur-sm px-6 py-3">
20-
<div className="text-xs font-medium uppercase tracking-wide text-text-muted">
21-
{orgType === "entity" ? "Entidad" : orgType === "municipality" ? "Municipio" : ""}
17+
<main className="ml-[260px]">
18+
{/* Header — breadcrumb style, like reference */}
19+
<header className="sticky top-0 z-30 flex items-center justify-between border-b border-border bg-white/80 backdrop-blur-md px-8 py-3.5">
20+
<div className="flex items-center gap-2 text-[13px]">
21+
<span className="text-text-muted">Dashboard</span>
22+
<span className="text-text-muted">&gt;</span>
23+
<span className="font-medium text-accent">
24+
{orgType === "entity" ? "Entidad" : orgType === "municipality" ? "Municipio" : "Overview"}
25+
</span>
2226
</div>
23-
<div className="flex items-center gap-2">
27+
<div className="flex items-center gap-2.5">
2428
<div className="h-2 w-2 rounded-full bg-success" />
25-
<span className="text-xs text-text-muted">Conectado</span>
29+
<span className="text-[12px] text-text-muted">Conectado</span>
2630
</div>
2731
</header>
28-
<div className="p-6">{children}</div>
32+
<div className="px-8 py-8">{children}</div>
2933
</main>
3034
</div>
3135
);

src/app/dashboard/loading.tsx

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,45 @@
11
export default function DashboardLoading() {
22
return (
3-
<div className="space-y-6 animate-fade-in">
3+
<div className="space-y-8 animate-fade-in">
44
{/* Title skeleton */}
55
<div className="space-y-2">
6-
<div className="h-8 w-48 rounded-lg bg-slate-100 animate-shimmer" />
7-
<div className="h-4 w-72 rounded bg-slate-100 animate-shimmer" />
6+
<div className="h-7 w-56 rounded-lg bg-gray-100 animate-shimmer" />
7+
<div className="h-4 w-72 rounded bg-gray-100 animate-shimmer" />
88
</div>
99

1010
{/* Stats grid skeleton */}
11-
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
11+
<div className="grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-4">
1212
{Array.from({ length: 4 }).map((_, i) => (
13-
<div key={i} className="card-premium p-5">
14-
<div className="flex items-start justify-between">
15-
<div className="space-y-2">
16-
<div className="h-3 w-20 rounded bg-slate-100 animate-shimmer" />
17-
<div className="h-7 w-12 rounded bg-slate-100 animate-shimmer" />
13+
<div key={i} className="card-premium px-5 py-5">
14+
<div className="h-3 w-24 rounded bg-gray-100 animate-shimmer" />
15+
<div className="mt-3 flex items-end justify-between">
16+
<div className="h-8 w-16 rounded bg-gray-100 animate-shimmer" />
17+
<div className="flex items-end gap-[3px] h-7">
18+
{Array.from({ length: 7 }).map((_, j) => (
19+
<div key={j} className="w-[4px] rounded-[1px] bg-gray-100 animate-shimmer" style={{ height: `${30 + Math.random() * 70}%` }} />
20+
))}
1821
</div>
19-
<div className="h-10 w-10 rounded-[var(--radius-input)] bg-slate-100 animate-shimmer" />
2022
</div>
23+
<div className="mt-3 h-3 w-20 rounded bg-gray-100 animate-shimmer" />
2124
</div>
2225
))}
2326
</div>
2427

2528
{/* Content skeleton */}
2629
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
2730
{Array.from({ length: 2 }).map((_, i) => (
28-
<div key={i} className="card-premium p-5">
29-
<div className="h-5 w-40 rounded bg-slate-100 animate-shimmer mb-4" />
30-
<div className="space-y-3">
31+
<div key={i} className="card-premium">
32+
<div className="px-6 pt-5 pb-4">
33+
<div className="h-3 w-40 rounded bg-gray-100 animate-shimmer" />
34+
</div>
35+
<div className="divide-y divide-border">
3136
{Array.from({ length: 3 }).map((_, j) => (
32-
<div key={j} className="flex items-center justify-between p-3">
37+
<div key={j} className="flex items-center justify-between px-6 py-3.5">
3338
<div className="space-y-1.5">
34-
<div className="h-4 w-48 rounded bg-slate-100 animate-shimmer" />
35-
<div className="h-3 w-24 rounded bg-slate-100 animate-shimmer" />
39+
<div className="h-4 w-48 rounded bg-gray-100 animate-shimmer" />
40+
<div className="h-3 w-24 rounded bg-gray-100 animate-shimmer" />
3641
</div>
37-
<div className="h-5 w-16 rounded-full bg-slate-100 animate-shimmer" />
42+
<div className="h-5 w-16 rounded-full bg-gray-100 animate-shimmer" />
3843
</div>
3944
))}
4045
</div>

0 commit comments

Comments
 (0)