Files
apps-registry/workloads/ecommerce/app/layout.tsx
T
devopsandClaude Sonnet 5 814df2af53 feat(ecommerce): ADR 0008 "Navy & Coral" - Sub-fase 1 (tokens + logo)
Reemplaza ADR 0007 (Atelier calido, ciruela/carbon/cobre) tras dos
ciclos de implementar-y-descartar en produccion. Esta vez la direccion
se valido con mockups fuera de este entorno antes de tocar codigo.

- globals.css: paleta marino/coral/coral-claro + alias temporales de
  los tokens de ADR 0007 (se resuelven ya contra la paleta nueva para
  no dejar catalog-client/product-card/button.tsx sin estilo hasta que
  cada sub-fase migre el nombre de clase; se eliminan en la sub-fase 5).
- layout.tsx: Poppins peso 700 reemplaza a Domine en --font-display.
- Nuevo isotipo (mariposa de 4 elipses) como logo-ari.svg (lockup) y
  app/icon.svg (favicon reducido, convencion Next.js App Router);
  favicon.png anterior eliminado por no estar referenciado.
- docs: ADR 0008 con la cronologia completa y el hallazgo de los
  gradientes arcoiris nunca actualizados en navbar.tsx; ADR 0007
  marcado como superseded sin borrar su contenido.

Validado con npm ci + typecheck + lint + build de produccion via
Docker (no hay node/npm en este shell) y verificando el CSS
compilado: los alias resuelven a la paleta nueva y las utilities
bg-ari-ciruela/text-ari-carbon/bg-ari-hueso se siguen generando.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01F8c83sjFBP7c4m4UVN5d3d
2026-08-27 08:42:47 -05:00

36 lines
2.2 KiB
TypeScript

import type { Metadata, Viewport } from "next";
import { Inter, Poppins } from "next/font/google";
import "./globals.css";
import { CartDrawer } from "@/components/cart/cart-drawer";
import { Footer } from "@/components/layout/footer";
import { Navbar } from "@/components/layout/navbar";
import { WishlistDrawer } from "@/components/wishlist/wishlist-drawer";
import { getCategories, getProducts } from "@/lib/headless/client";
// El Navbar (categorias/colecciones/predictive search) vive en este layout
// compartido -- si alguna pagina futura queda estatica, este fetch se
// congelaria con datos de build time (mock) igual que le paso al home
// (ver app/page.tsx). Forzarlo aca protege el nav en cualquier ruta, no
// solo en las que hoy ya son dinamicas por otro motivo (searchParams, etc.).
export const dynamic = "force-dynamic";
export const metadata: Metadata = {
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? "https://shop.cruzcloud.net"),
title: { default: "ARI Shopping | Juguetes, regalos y variedades", template: "%s | ARI Shopping" },
description: "Tienda online de juguetes, personajes, mochilas y regalos con atención personalizada.",
openGraph: { title: "ARI Shopping", description: "Tesoros para cada aventura.", type: "website", locale: "es_CO" },
};
export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#122844" };
// ADR 0008 ("Navy & Coral"): Poppins peso 700 para los "momentos de marca"
// (wordmark, h1/h2, precio, CTA) + Inter para body/UI -- solo se carga el
// peso 700, es el unico que usa --font-display.
const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
const poppins = Poppins({ subsets: ["latin"], weight: ["700"], variable: "--font-poppins", display: "swap" });
export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
const [products, categories] = await Promise.all([getProducts(), getCategories()]);
return <html lang="es" className={`${inter.variable} ${poppins.variable}`}><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>;
}