style: align light palette to Quiet Luxury reference

- Page background now #F8F9FA (was white); tokens matched to reference:
  foreground slate-900, muted slate-50/slate-500, border slate-200,
  card pure white, tertiary slate-400, border-light slate-100
- Sidebar colors matched to mock: emerald-200/70 inactive, white/8 active
  with emerald-400 active icon, emerald-50 logo, red-300 logout, right border
- Content wrapped in max-w-[1400px] centered container (px-8 lg:px-10)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-10 16:33:00 +02:00
parent 9eb2d45c67
commit 26d752892a
3 changed files with 37 additions and 30 deletions
+21 -21
View File
@@ -16,9 +16,9 @@
them to Tailwind color utilities (bg-background, text-primary…). them to Tailwind color utilities (bg-background, text-primary…).
========================================================= */ ========================================================= */
:root { :root {
/* Base */ /* Base — sfondo generale app #F8F9FA (color-bg-light), testo slate-900 */
--background: #ffffff; --background: #F8F9FA;
--foreground: #1a1a1a; --foreground: #0F172A;
/* Brand primary — verde scuro iamcavalli */ /* Brand primary — verde scuro iamcavalli */
--primary: #1A463C; --primary: #1A463C;
@@ -28,29 +28,29 @@
--accent: #DEF168; --accent: #DEF168;
--accent-foreground: #1A463C; --accent-foreground: #1A463C;
/* Secondary — grigio neutro */ /* Secondary — grigio neutro (slate-100) */
--secondary: #f4f4f5; --secondary: #f1f5f9;
--secondary-foreground: #1a1a1a; --secondary-foreground: #0F172A;
/* Muted — per testi e sfondi secondari */ /* Muted — sfondi secondari (slate-50) / testo slate-500 */
--muted: #f9f9f9; --muted: #f8fafc;
--muted-foreground: #71717a; --muted-foreground: #64748B;
/* Destructive */ /* Destructive */
--destructive: #ef4444; --destructive: #ef4444;
--destructive-foreground: #ffffff; --destructive-foreground: #ffffff;
/* Card */ /* Card — bianco puro (color-bg-card) */
--card: #ffffff; --card: #FFFFFF;
--card-foreground: #1a1a1a; --card-foreground: #0F172A;
/* Popover */ /* Popover */
--popover: #ffffff; --popover: #FFFFFF;
--popover-foreground: #1a1a1a; --popover-foreground: #0F172A;
/* Border / Input / Ring */ /* Border (slate-200 = border-card) / Input / Ring */
--border: #e5e7eb; --border: #e2e8f0;
--input: #e5e7eb; --input: #e2e8f0;
--ring: #1A463C; --ring: #1A463C;
/* Semantic — stato task/pagamenti */ /* Semantic — stato task/pagamenti */
@@ -58,10 +58,10 @@
--warning: #ca8a04; --warning: #ca8a04;
--info: #2563eb; --info: #2563eb;
/* Legacy — usati inline nei componenti esistenti */ /* Legacy — text-light slate-400, border-soft slate-100 */
--tertiary: #999999; --tertiary: #94A3B8;
--bg-subtle: #f9f9f9; --bg-subtle: #f8fafc;
--border-light: #e5e5e5; --border-light: #f1f5f9;
--radius: 0.5rem; --radius: 0.5rem;
} }
+3 -1
View File
@@ -58,7 +58,9 @@ export function AdminShell({ children }: { children: React.ReactNode }) {
</div> </div>
</header> </header>
<main className="flex-1 px-8 py-8 overflow-y-auto">{children}</main> <main className="flex-1 overflow-y-auto">
<div className="max-w-[1400px] w-full mx-auto px-8 py-8 lg:px-10">{children}</div>
</main>
</div> </div>
</div> </div>
); );
+13 -8
View File
@@ -41,7 +41,7 @@ export function AdminSidebar({ collapsed = false }: { collapsed?: boolean }) {
return ( return (
<aside <aside
className={cn( className={cn(
"shrink-0 min-h-screen bg-[#1A463C] flex flex-col overflow-hidden", "shrink-0 min-h-screen bg-[#1A463C] border-r border-emerald-950/20 flex flex-col overflow-hidden",
"transition-[width] duration-350 ease-[cubic-bezier(0.4,0,0.2,1)]", "transition-[width] duration-350 ease-[cubic-bezier(0.4,0,0.2,1)]",
collapsed ? "w-16" : "w-[200px]" collapsed ? "w-16" : "w-[200px]"
)} )}
@@ -54,7 +54,7 @@ export function AdminSidebar({ collapsed = false }: { collapsed?: boolean }) {
)} )}
> >
{!collapsed && ( {!collapsed && (
<span className="font-bold text-white tracking-tight text-sm whitespace-nowrap"> <span className="font-bold text-emerald-50 tracking-tight text-sm whitespace-nowrap">
iamcavalli iamcavalli
</span> </span>
)} )}
@@ -70,14 +70,18 @@ export function AdminSidebar({ collapsed = false }: { collapsed?: boolean }) {
href={href} href={href}
title={collapsed ? label : undefined} title={collapsed ? label : undefined}
className={cn( className={cn(
"flex items-center py-2 rounded-md text-sm transition-colors", "flex items-center py-2.5 rounded-lg text-sm transition-all duration-200",
rowClass, rowClass,
active active
? "bg-white/15 text-white font-medium" ? "bg-white/[0.08] text-white font-medium shadow-sm"
: "text-white/65 hover:text-white hover:bg-white/10" : "text-emerald-200/70 hover:text-white hover:bg-white/5"
)} )}
> >
<Icon size={16} strokeWidth={1.8} className="shrink-0" /> <Icon
size={16}
strokeWidth={1.8}
className={cn("shrink-0", active && "text-emerald-400")}
/>
{!collapsed && <span className="whitespace-nowrap">{label}</span>} {!collapsed && <span className="whitespace-nowrap">{label}</span>}
</Link> </Link>
); );
@@ -92,14 +96,15 @@ export function AdminSidebar({ collapsed = false }: { collapsed?: boolean }) {
collapsed ? "justify-center px-0" : "justify-between px-3" collapsed ? "justify-center px-0" : "justify-between px-3"
)} )}
> >
{!collapsed && <span className="text-xs text-white/50">Tema</span>} {!collapsed && <span className="text-xs text-emerald-200/50">Tema</span>}
<ThemeToggle /> <ThemeToggle />
</div> </div>
<button <button
onClick={() => signOut({ callbackUrl: "/admin/login" })} onClick={() => signOut({ callbackUrl: "/admin/login" })}
title={collapsed ? "Esci" : undefined} title={collapsed ? "Esci" : undefined}
className={cn( className={cn(
"flex items-center py-2 w-full rounded-md text-sm text-white/65 hover:text-white hover:bg-white/10 transition-colors", "flex items-center py-2.5 w-full rounded-lg text-sm transition-all duration-200",
"text-red-300/80 hover:text-red-200 hover:bg-red-950/20",
rowClass rowClass
)} )}
> >