/* eslint-disable react/prop-types */ /** * ImagePlaceholder · placeholder fotográfico mientras el cliente * aporta foto real. Cumple la directiva "No próximamente" del Brief 1: * en producción se reemplaza la URL; aquí muestra una pista del * encuadre esperado y mantiene proporción. * * Props: * src opcional - URL real (Unsplash/Pexels/CDN) * alt descripción accesible * label pista monospace ("CALLE VIVA · MTY · 16:9") * ratio aspect-ratio CSS (default "16/9") * tone 'urban' | 'aerial' | 'residential' | 'industrial' | 'people' | 'construction' * overlay booleano - aplica overlay navy (para heroes) * overlayOpacity 0-1 */ const PLACEHOLDER_TONES = { urban: ['#2A3F4D', '#3A5061'], aerial: ['#1F3340', '#33495A'], residential: ['#2E4452', '#3D5366'], industrial: ['#1E2A33', '#2D3D49'], people: ['#33485A', '#465D71'], construction: ['#3A2E1F', '#5C4A33'], copper: ['#5e3a17', '#9a5e25'], }; function ImagePlaceholder({ src, alt = '', label = 'IMAGEN · 16:9', ratio = '16 / 9', tone = 'urban', overlay = false, overlayOpacity = 0.35, style = {}, className = '', }) { const [c1, c2] = PLACEHOLDER_TONES[tone] || PLACEHOLDER_TONES.urban; const fallbackSvg = `data:image/svg+xml;utf8,${encodeURIComponent(` `)}`; return (