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
This commit is contained in:
devopsandClaude Sonnet 5 committed 2026-08-27 08:42:47 -05:00
1 parent 6d065709c1
commit 814df2af53
8 files changed
+239 -21

No files matched your search

+23 -13
View File
@@ -1,16 +1,26 @@
@import "tailwindcss";
@theme {
/* ADR 0007 (Opcion 2, "Atelier calido") -- identidad premium propia,
no derivada de ningun competidor. Ver
docs-portal/docs/decisiones/0007-identidad-visual-propia.md */
--color-ari-ciruela: #5B3256; /* CTA -- unico uso reservado a accion */
--color-ari-carbon-oscuro: #221D1A; /* ancla oscura: header/footer, badge "Nuevo" */
--color-ari-cobre: #B5723A; /* acento: links, badge "Top", foco */
--color-ari-hueso: #F7F1E6; /* fondo general */
--color-ari-carbon: #2A2420; /* texto principal */
--color-ari-terracota-oscuro: #9C4A2E; /* badge de descuento */
--font-display: var(--font-domine), ui-serif, Georgia, serif;
/* ADR 0008 ("Navy & Coral") -- reemplaza ADR 0007 (Opcion 2, "Atelier
calido"). Ver docs-portal/docs/decisiones/0008-identidad-navy-coral.md */
--color-ari-marino: #122844; /* ancla: header, footer, badge "Nuevo", fondo de hero */
--color-ari-coral: #D85A30; /* acento unico de accion: CTA, precio destacado */
--color-ari-coral-claro: #F0997B; /* acento secundario: subtitulos sobre marino, ala inferior del isotipo */
/* Alias de compatibilidad -- ADR 0007 definio estos nombres y hoy los
siguen consumiendo catalog-client.tsx, product-card.tsx y button.tsx
(migracion pendiente en las sub-fases 3-5 del ADR 0008). Se resuelven
ya contra la paleta nueva para que ningun uso existente quede sin
estilo entre sub-fases; se eliminan por completo al cerrar la
sub-fase 5. No usar estos alias en código nuevo. */
--color-ari-ciruela: var(--color-ari-coral);
--color-ari-carbon-oscuro: var(--color-ari-marino);
--color-ari-cobre: var(--color-ari-coral-claro);
--color-ari-carbon: var(--color-ari-marino);
--color-ari-terracota-oscuro: var(--color-ari-coral);
--color-ari-hueso: #FFFFFF;
--font-display: var(--font-poppins), ui-sans-serif, system-ui, sans-serif;
--animate-accordion-down: accordion-down .2s ease-out;
--animate-accordion-up: accordion-up .2s ease-out;
}
@@ -21,10 +31,10 @@
:root { color-scheme: light; }
* { border-color: rgb(226 232 240); }
html { scroll-behavior: smooth; }
body { margin: 0; background: var(--color-ari-hueso); color: var(--color-ari-carbon); font-family: var(--font-inter), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-rendering: optimizeLegibility; }
body { margin: 0; background: #FFFFFF; color: var(--color-slate-900); font-family: var(--font-inter), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-rendering: optimizeLegibility; }
button, a { -webkit-tap-highlight-color: transparent; }
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible { outline: 3px solid rgb(181 114 58 / .5); outline-offset: 3px; }
::selection { background: rgb(91 50 86 / .2); color: var(--color-ari-carbon); }
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible { outline: 3px solid rgb(216 90 48 / .5); outline-offset: 3px; }
::selection { background: rgb(216 90 48 / .15); color: var(--color-slate-900); }
.content-auto {
content-visibility: auto;
+14
View File
@@ -0,0 +1,14 @@
<!-- ADR 0008 ("Navy & Coral"). Version reducida del isotipo para favicon/
app icon: solo circulo marino + mariposa, sin wordmark (no cabe
legible a este tamano). Convencion de Next.js App Router: este
archivo se sirve automaticamente como favicon/app icon. -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 34 34" role="img" aria-label="ARI shopping">
<circle cx="17" cy="17" r="17" fill="#122844"/>
<g transform="translate(0 5)">
<ellipse cx="10" cy="8" rx="9" ry="7" transform="rotate(-18 10 8)" fill="#D85A30"/>
<ellipse cx="24" cy="8" rx="9" ry="7" transform="rotate(18 24 8)" fill="#D85A30"/>
<ellipse cx="12" cy="16" rx="6" ry="5" transform="rotate(-10 12 16)" fill="#F0997B"/>
<ellipse cx="22" cy="16" rx="6" ry="5" transform="rotate(10 22 16)" fill="#F0997B"/>
<rect x="16" y="3" width="2" height="18" rx="1" fill="#122844"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 895 B

+7 -7
View File
@@ -1,5 +1,5 @@
import type { Metadata, Viewport } from "next";
import { Domine, Inter } from "next/font/google";
import { Inter, Poppins } from "next/font/google";
import "./globals.css";
import { CartDrawer } from "@/components/cart/cart-drawer";
import { Footer } from "@/components/layout/footer";
@@ -21,15 +21,15 @@ export const metadata: Metadata = {
openGraph: { title: "ARI Shopping", description: "Tesoros para cada aventura.", type: "website", locale: "es_CO" },
};
export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#221D1A" };
export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#122844" };
// ADR 0007 (Opcion 2, "Atelier calido"): Domine (titulares/precio) + Inter
// (UI/cuerpo) via next/font -- antes "Inter" era solo un nombre de fallback
// en el CSS, sin garantia real de que el navegador tuviera esa fuente.
// 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 domine = Domine({ subsets: ["latin"], variable: "--font-domine", 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} ${domine.variable}`}><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>;
return <html lang="es" className={`${inter.variable} ${poppins.variable}`}><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>;
}