Merge fix/adr0007-revert-subfase1-smoke-test into main
Build and Push Frontend / Escaneo de Secretos (Gitleaks) (push) Successful in 19s
Build and Push Frontend / Construir y Subir Imagen (push) Successful in 6m3s

This commit is contained in:
devops committed 2026-08-27 01:07:54 -05:00
commit 699598ab06
4 files changed
+11 -32

No files matched your search

+7 -14
View File
@@ -1,17 +1,10 @@
@import "tailwindcss"; @import "tailwindcss";
@theme { @theme {
/* ADR 0007 -- identidad visual propia (no derivada de ningun --color-ari-cyan: #06b6d4;
competidor). Cada token tiene un rol unico y deliberado, ver --color-ari-magenta: #ec4899;
docs-portal/docs/decisiones/0007-identidad-visual-propia.md */ --color-ari-yellow: #fde047;
--color-ari-terracota: #C1502E; /* CTA -- unico uso reservado a accion */ --color-ari-blue: #0f172a;
--color-ari-espresso: #2B1B13; /* ancla oscura: header/footer */
--color-ari-pino: #2F6F62; /* links / senales de confianza */
--color-ari-crema: #FBF3E7; /* fondo general */
--color-ari-carbon: #2E2620; /* texto principal */
--color-ari-oro: #E3A008; /* badge "destacado" */
--color-ari-ladrillo: #A83232; /* badge de descuento */
--font-display: var(--font-fraunces), ui-serif, Georgia, serif;
--animate-accordion-down: accordion-down .2s ease-out; --animate-accordion-down: accordion-down .2s ease-out;
--animate-accordion-up: accordion-up .2s ease-out; --animate-accordion-up: accordion-up .2s ease-out;
} }
@@ -22,10 +15,10 @@
:root { color-scheme: light; } :root { color-scheme: light; }
* { border-color: rgb(226 232 240); } * { border-color: rgb(226 232 240); }
html { scroll-behavior: smooth; } html { scroll-behavior: smooth; }
body { margin: 0; background: var(--color-ari-crema); 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: #fff; color: #0f172a; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; text-rendering: optimizeLegibility; }
button, a { -webkit-tap-highlight-color: transparent; } button, a { -webkit-tap-highlight-color: transparent; }
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible { outline: 3px solid rgb(47 111 98 / .45); outline-offset: 3px; } button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible { outline: 3px solid rgb(167 139 250 / .55); outline-offset: 3px; }
::selection { background: rgb(193 80 46 / .25); color: var(--color-ari-carbon); } ::selection { background: #fde047; color: #0f172a; }
.content-auto { .content-auto {
content-visibility: auto; content-visibility: auto;
+2 -9
View File
@@ -1,5 +1,4 @@
import type { Metadata, Viewport } from "next"; import type { Metadata, Viewport } from "next";
import { Fraunces, Inter } from "next/font/google";
import "./globals.css"; import "./globals.css";
import { CartDrawer } from "@/components/cart/cart-drawer"; import { CartDrawer } from "@/components/cart/cart-drawer";
import { Footer } from "@/components/layout/footer"; import { Footer } from "@/components/layout/footer";
@@ -21,15 +20,9 @@ export const metadata: Metadata = {
openGraph: { title: "ARI Shopping", description: "Tesoros para cada aventura.", type: "website", locale: "es_CO" }, openGraph: { title: "ARI Shopping", description: "Tesoros para cada aventura.", type: "website", locale: "es_CO" },
}; };
export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#2B1B13" }; export const viewport: Viewport = { width: "device-width", initialScale: 1, themeColor: "#0f172a" };
// ADR 0007: Fraunces (titulares/precio) + Inter (UI/cuerpo) cargadas via
// next/font -- antes "Inter" era solo un nombre de fallback en el CSS, sin
// garantia real de que el navegador tuviera esa fuente instalada.
const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
const fraunces = Fraunces({ subsets: ["latin"], variable: "--font-fraunces", display: "swap" });
export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) { export default async function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
const [products, categories] = await Promise.all([getProducts(), getCategories()]); const [products, categories] = await Promise.all([getProducts(), getCategories()]);
return <html lang="es" className={`${inter.variable} ${fraunces.variable}`}><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>; return <html lang="es"><body><Navbar products={products} categories={categories} /><main>{children}</main><Footer /><CartDrawer /><WishlistDrawer /></body></html>;
} }
@@ -70,11 +70,9 @@ export function ProductCard({ product, priority = false }: { product: Product; p
<div className="mt-auto flex items-center justify-between gap-3 pt-1"> <div className="mt-auto flex items-center justify-between gap-3 pt-1">
<div className="flex flex-col"> <div className="flex flex-col">
{product.compareAtPrice && <span className="text-xs font-bold text-slate-400 line-through">{formatMoney(product.compareAtPrice, product.currency)}</span>} {product.compareAtPrice && <span className="text-xs font-bold text-slate-400 line-through">{formatMoney(product.compareAtPrice, product.currency)}</span>}
{/* ADR 0007: smoke test de font-display (Fraunces) en el precio -- si se aprueba visualmente, se propaga al resto de precios en Sub-fase 3. */} <strong className="text-sm font-black">{formatMoney(product.price, product.currency)}</strong>
<strong className="font-display text-base font-bold text-ari-carbon">{formatMoney(product.price, product.currency)}</strong>
</div> </div>
{/* ADR 0007: smoke test de la variant "primary" (terracota) -- si se aprueba visualmente, reemplaza "magenta" en el resto del sitio en Sub-fases 2-5. */} <Button variant="magenta" size="sm" onClick={() => addItem(product, selectedVariantId)}><ShoppingBag className="size-4" />Agregar</Button>
<Button variant="primary" size="sm" onClick={() => addItem(product, selectedVariantId)}><ShoppingBag className="size-4" />Agregar</Button>
</div> </div>
</div> </div>
</article> </article>
@@ -9,11 +9,6 @@ const buttonVariants = cva(
variants: { variants: {
variant: { variant: {
default: "bg-slate-950 text-white shadow-lg hover:-translate-y-0.5 hover:bg-slate-800", default: "bg-slate-950 text-white shadow-lg hover:-translate-y-0.5 hover:bg-slate-800",
// ADR 0007: unico color reservado a accion (nunca decorativo) --
// reemplaza gradualmente a "magenta" component por component
// (sub-fases 2-5), empezando por el CTA de ProductCard como
// smoke test visual antes de propagar al resto del sistema.
primary: "bg-ari-terracota text-white shadow-lg shadow-ari-terracota/25 hover:brightness-95",
magenta: "bg-gradient-to-r from-fuchsia-500 to-pink-500 text-white shadow-lg shadow-pink-500/25 hover:-translate-y-0.5", magenta: "bg-gradient-to-r from-fuchsia-500 to-pink-500 text-white shadow-lg shadow-pink-500/25 hover:-translate-y-0.5",
yellow: "bg-yellow-300 text-slate-950 shadow-lg shadow-yellow-400/25 hover:-translate-y-0.5 hover:bg-yellow-200", yellow: "bg-yellow-300 text-slate-950 shadow-lg shadow-yellow-400/25 hover:-translate-y-0.5 hover:bg-yellow-200",
outline: "border border-slate-200 bg-white text-slate-950 hover:border-cyan-400 hover:bg-cyan-50", outline: "border border-slate-200 bg-white text-slate-950 hover:border-cyan-400 hover:bg-cyan-50",