/* global React, Icon, Button, Badge, ProductCard, CanVisual, ProductMedia, SwatchGrid, PresentationSelector, StockLabel, useState */ /* ============================ HOME ============================ */ // Paleta acotada para el hero interactivo: cruza familias reales de NOGO.palette // (azul de marca + frío + cálido + verde + neutro) — variedad sin choques de color. const HERO_COLORS = [ { name: "Azul Nogopaint", hex: "#0077b6" }, { name: "Azul Noche", hex: "#283a63" }, { name: "Terracota", hex: "#bd6a48" }, { name: "Verde Salvia", hex: "#9aa881" }, { name: "Gris Plomo", hex: "#73767a" }, ]; function DtHome({ go, openProduct, startAdvisor }) { const NOGO = window.NOGO; const featured = NOGO.products.filter((p) => p.featured).concat(NOGO.products.filter((p) => !p.featured)).slice(0, 4); const [heroColor, setHeroColor] = useState(HERO_COLORS[0]); const [heroTick, setHeroTick] = useState(0); const pickHeroColor = (c) => { setHeroColor(c); setHeroTick((t) => t + 1); }; const heroKey = `${heroColor.hex}-${heroTick}`; const cats = [ { id: "interior", label: "Interior", desc: "Látex y esmaltes lavables", icon: "home", hex: "#a8c8e0" }, { id: "exterior", label: "Exterior", desc: "Resistentes a la intemperie", icon: "shield", hex: "#9aa881" }, { id: "esmaltes", label: "Esmaltes", desc: "Madera y metal", icon: "brush", hex: "#e8a48b" }, { id: "impermeab", label: "Impermeabilizantes", desc: "Techos y terrazas", icon: "drop", hex: "#cdbfa3" }, ]; return (
{/* Hero */}
Asesoramiento experto, sin cargo

Pintá con la cantidad justa.

Nilo calcula cuántos litros necesitás según tus m². Elegí color, presentación y comprá sin desperdicio.

¿Qué color pintamos?
{HERO_COLORS.map((c) => ( ))}
{/* Categorías */}

Categorías

{cats.map((c) => ( ))}
{/* Destacados */}

Más vendidos

{featured.map((p) => )}
{/* Banner servicios */}

¿Cuánta pintura necesito?

Al agregar un producto, nuestro asesor Nilo calcula los litros exactos y te recomienda los baldes y complementos.

{[["spark", "Asesoramiento a domicilio o virtual, sin cargo"], ["brush", "Mano de obra con pintores matriculados"], ["truck", "Envío gratis en Chivilcoy"]].map(([ic, txt]) => (
{txt}
))}
); } /* ============================ CATÁLOGO ============================ */ function DtCatalog({ openProduct, filters, setFilters }) { const NOGO = window.NOGO; const fams = Object.keys(NOGO.palette); let list = NOGO.products; if (filters.use) list = list.filter((p) => p.use === filters.use); if (filters.colorFam) list = list.filter((p) => p.colors.includes(filters.colorFam)); const Check = ({ on, onClick, children }) => ( ); return (
Catálogo

{filters.use ? (filters.use === "interior" ? "Interior" : "Exterior") : "Todos los productos"}

{list.length} productos
{list.map((p) => )}
{list.length === 0 &&
No hay productos con esos filtros.
}
); } /* ============================ FICHA ============================ */ function DtProduct({ product, go, onAdd }) { const NOGO = window.NOGO; const families = product.colors; const [fam, setFam] = useState(families[0]); const famColors = NOGO.palette[fam]; const [color, setColor] = useState(famColors[2] || famColors[0]); const [presId, setPresId] = useState(product.pres[Math.min(1, product.pres.length - 1)]); const pres = NOGO.presentations.filter((p) => product.pres.includes(p.id)); const price = NOGO.priceFor(product, presId); const stock = NOGO.stockFor(product, presId); const totalColors = families.reduce((n, f) => n + NOGO.palette[f].length, 0); const tech = [ { icon: "layers", label: "Rendimiento", value: `${product.rendimiento} m²/L por mano` }, { icon: "brush", label: "Manos sugeridas", value: `${product.manos}` }, { icon: "drop", label: "Dilución", value: product.dilucion }, { icon: "clock", label: "Secado", value: product.secado }, { icon: "brush", label: "Aplicación", value: product.aplicacion.join(" · ") }, { icon: "shield", label: "Uso", value: product.use === "exterior" ? "Exterior" : "Interior" }, ]; return (
{product.name}
{product.use === "exterior" ? "Exterior" : "Interior"} {product.featured && Más vendido}

{product.name}

{product.tagline}

{NOGO.fmt(price)}
Envío gratis en Chivilcoy
Presentación
Color · {color.name} {totalColors} colores disponibles
{families.map((f) => ( ))}
Al agregar, el asesor calcula cuántos litros necesitás.
Datos técnicos
{tech.map((t) => (
{t.label}
{t.value}
))}
); } Object.assign(window, { DtHome, DtCatalog, DtProduct });