feat(ui): layout edge-to-edge + font Geist su tutta l'app

- Font: Geist (Vercel) sostituisce Fraunces/Inter Tight; GeistMono al posto di JetBrains Mono. `--font-display`, `--font-sans`, `--font-mono` mappati tutti su Geist via alias CSS — vocabolario tipografico unificato sans-serif moderno.
- Layout: rimosso `mx-auto max-w-7xl` da 7 pagine app (root, onboarding, profile, plan, tracking, fasting, shopping, recipe detail). Sostituito con `w-full px-6 sm:px-10 lg:px-16 xl:px-24` — edge-to-edge, ma respiro su 4K. Welcome/sign-in/sign-up restano stretti (testo lungo / form login).
- Tailwind: fontFamily fallback display da `Georgia, serif` a `system-ui` sans. Rimosse le OpenType features di Fraunces (`cv11`, `dlig`) — Geist usa `ss01`/`ss03`.
- Cleanup: rimosso `docs/~\$D_KetoPath.docx` (Word lockfile residuo).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
lucianoandClaude Opus 4.7 committed 2026-05-07 11:04:40 +02:00
1 parent d467e212cb
commit 41b3646325
14 files changed
+37 -37

No files matched your search

+1 -1
View File
@@ -43,7 +43,7 @@ function FastingPageContent({
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 07 — Digiuno" />
<main className="relative overflow-hidden pb-24 pt-10 sm:pt-12">
<CursorGlow color="hsl(var(--pomodoro))" size={520} />
+3 -23
View File
@@ -1,5 +1,6 @@
import { GeistMono } from 'geist/font/mono';
import { GeistSans } from 'geist/font/sans';
import type { Metadata, Viewport } from 'next';
import { Fraunces, Inter_Tight, JetBrains_Mono } from 'next/font/google';
import { notFound } from 'next/navigation';
import { NextIntlClientProvider } from 'next-intl';
import { getMessages, getTranslations, setRequestLocale } from 'next-intl/server';
@@ -10,27 +11,6 @@ import { locales, type Locale } from '@/i18n';
import '@/styles/globals.css';
const fraunces = Fraunces({
subsets: ['latin'],
variable: '--font-display',
display: 'swap',
style: ['normal', 'italic'],
});
const interTight = Inter_Tight({
subsets: ['latin'],
variable: '--font-sans',
display: 'swap',
weight: ['400', '500', '600'],
});
const mono = JetBrains_Mono({
subsets: ['latin'],
variable: '--font-mono',
display: 'swap',
weight: ['400', '500'],
});
export function generateStaticParams() {
return locales.map((locale) => ({ locale }));
}
@@ -88,7 +68,7 @@ export default async function LocaleLayout({
const messages = await getMessages();
return (
<html lang={locale} className={`${fraunces.variable} ${interTight.variable} ${mono.variable}`}>
<html lang={locale} className={`${GeistSans.variable} ${GeistMono.variable}`}>
<body className="bg-background text-foreground min-h-screen font-sans antialiased">
<NextIntlClientProvider locale={locale} messages={messages}>
{children}
@@ -49,7 +49,7 @@ function OnboardingPageContent({
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 03 — Inizio" />
<main className="relative overflow-hidden pb-24 pt-10 sm:pt-12">
<CursorGlow color="hsl(var(--oro))" size={520} />
+1 -1
View File
@@ -18,7 +18,7 @@ export default async function HomePage({ params: { locale } }: { params: { local
function HomeContent({ userName }: { userName: string | null }) {
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead />
{userName ? <SignedInDashboard userName={userName} /> : <MarketingLanding />}
</div>
+1 -1
View File
@@ -57,7 +57,7 @@ function PlanPageContent({
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 05 — Cucina" />
<main className="relative overflow-hidden py-10 sm:py-12">
<CursorGlow color="hsl(var(--pomodoro))" size={520} />
+1 -1
View File
@@ -58,7 +58,7 @@ function ProfilePageContent({
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 04 — Profilo" />
<main className="relative overflow-hidden pb-24 pt-10 sm:pt-12">
<CursorGlow color="hsl(var(--oliva))" size={520} />
@@ -110,7 +110,7 @@ function RecipeContent({ recipe }: { recipe: RecipeView }) {
const phasesAll = recipe.phases.length === 3;
return (
<div className="mx-auto min-h-screen max-w-5xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel={`N. 08 — ${t(`categoryLabel.${recipe.category}`)}`} />
<main className="py-10 sm:py-14">
<Link
+1 -1
View File
@@ -53,7 +53,7 @@ function ShoppingPageContent({ list }: { list: ShoppingList | null }) {
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 09 — La spesa" />
<main className="relative overflow-hidden pb-24 pt-10 sm:pt-12">
<CursorGlow color="hsl(var(--oliva))" size={520} />
+1 -1
View File
@@ -65,7 +65,7 @@ function TrackingPageContent({
return (
<div className="relative">
<div className="mx-auto min-h-screen max-w-7xl px-6 sm:px-10">
<div className="min-h-screen w-full px-6 sm:px-10 lg:px-16 xl:px-24">
<Masthead issueLabel="N. 06 — Tracking" />
<main className="relative overflow-hidden pb-24 pt-10 sm:pt-12">
<CursorGlow color="hsl(var(--oro))" size={520} />