/* eslint-disable react/prop-types */ /** * Digo · Bloque 3 de la página Servicios · ALGORITMO PROPIETARIO. * Brief 1 §3.3 Bloque 3. * * Anchor: #digo · Fondo crema · Borde superior cobre 4px (es el activo * propietario y se destaca visualmente sobre los otros bloques). * * - Eyebrow + título DIGO® + subtítulo * - 2 párrafos de descripción * - 4 dimensiones D · I · G · O con letra gigante + concepto + body * - 3 outputs operables como lista * - CTA principal a Dataria (www.dataria.mx — plataforma que opera DIGO®) */ const { useState: uS_Dg } = React; const DIMENSIONS = [ { letter: 'D', name: 'Demografía', question: '¿Quiénes viven, trabajan y pasan?', body: 'Densidad real (no censo agregado). Pirámide etaria. Composición familiar. Momento de vida del polígono.', }, { letter: 'I', name: 'Ingreso', question: '¿Cuánto ganan y cuánto destinan a consumo discrecional?', body: 'Modelo socioeconómico calibrado por NSE. Curvas de gasto por categoría.', }, { letter: 'G', name: 'Gasto', question: '¿En qué gastan y dónde?', body: 'Distribución del gasto por categoría comercial. Fuga hacia plazas competidoras. Propensión por giro.', }, { letter: 'O', name: 'Oferta', question: '¿Qué hay y qué falta?', body: 'Inventario competitivo en 1.5 km, 5 km y 15 minutos. Ocupación, mezcla, vocación dominante.', }, ]; const OUTPUTS = [ { title: 'Tabla de demanda insatisfecha', body: 'm² faltantes por categoría comercial en el área de influencia.', icon: 'data', }, { title: 'Mapa de vocaciones por componente', body: 'Qué tipo de comercio puede vivir dónde y por qué.', icon: 'compass', }, { title: 'Curva de capacidad de pago', body: 'Cuánto puede pagar de renta cada vocación-objetivo.', icon: 'target', }, ]; function Digo() { const [active, setActive] = uS_Dg(0); return (
{/* Hero band — vista cenital del filo entre la mancha urbana y el suelo libre. Es exactamente lo que el algoritmo "lee" antes de operar: un polígono con su frontera, su drenaje, su tejido. */}
Filo urbano-montaña en la periferia de Monterrey: cuadrícula residencial densa que se encuentra con las laderas del Cerro de las Mitras
); } const dgStyles = { section: { position: 'relative', background: 'var(--color-cream)', paddingTop: 0, paddingBottom: 'var(--space-3xl)', }, // ─── HERO BAND ────────────────────────────────────────────────────────── band: { position: 'relative', width: '100%', aspectRatio: '16 / 9', maxHeight: 'clamp(420px, 70vh, 720px)', overflow: 'hidden', }, bandImg: { position: 'absolute', inset: 0, width: '100%', height: '100%', objectFit: 'cover', objectPosition: 'center', }, bandOverlay: { position: 'absolute', inset: 0, background: 'linear-gradient(180deg, rgba(15,27,35,0.72) 0%, rgba(15,27,35,0.42) 55%, rgba(15,27,35,0.28) 100%)', }, bandContent: { position: 'relative', zIndex: 2, height: '100%', display: 'flex', flexDirection: 'column', justifyContent: 'flex-start', paddingTop: 'clamp(96px, 12vw, 144px)', paddingBottom: 'clamp(48px, 6vw, 72px)', }, bandEyebrow: { color: 'var(--color-copper-fallback)', display: 'block', }, bandTitle: { margin: '14px 0 0', fontWeight: 800, fontSize: 'clamp(60px, 11vw, 132px)', lineHeight: 0.92, color: '#fff', letterSpacing: '0.02em', display: 'inline-flex', alignItems: 'flex-start', textShadow: '0 2px 24px rgba(0,0,0,0.30)', }, bandTitleR: { fontSize: '0.32em', fontWeight: 700, paddingTop: '0.5em', paddingLeft: '0.05em', color: 'var(--color-copper-fallback)', textShadow: 'none', }, bandSubtitle: { margin: '12px 0 0', fontSize: 'clamp(18px, 1.8vw, 22px)', fontWeight: 400, fontStyle: 'italic', color: 'rgba(255,255,255,0.92)', maxWidth: 540, }, topBorder: { height: 4, backgroundImage: 'url("assets/textures/cobre-patinado.svg")', backgroundSize: 'cover', }, // ─── HEAD CONTENT (debajo de la band) ────────────────────────────────── headContent: { display: 'flex', flexDirection: 'column', gap: 20, maxWidth: 820, marginTop: 'clamp(64px, 8vw, 96px)', marginBottom: 'clamp(64px, 8vw, 96px)', }, lead: { margin: 0, fontSize: 'clamp(20px, 1.7vw, 24px)', lineHeight: 1.5, color: 'var(--color-navy-deep)', fontWeight: 700, textWrap: 'pretty', }, body: { margin: 0, fontSize: 'clamp(15px, 1.3vw, 17px)', lineHeight: 1.7, color: 'var(--color-navy-deep)', }, calibStats: { marginTop: 24, display: 'grid', gridTemplateColumns: '1fr', gap: 24, padding: '24px 28px', background: '#fff', borderRadius: 4, }, statBlock: { display: 'flex', flexDirection: 'column', gap: 6 }, statNum: { fontWeight: 800, fontSize: 'clamp(28px, 3vw, 40px)', color: 'var(--color-navy-deep)', lineHeight: 1.0, letterSpacing: '0.02em', }, statLabel: { fontSize: 11, fontWeight: 700, letterSpacing: '0.16em', color: 'var(--color-copper-fallback)', }, statDivider: { height: 1, background: 'rgba(33,52,64,0.10)', }, dimHeader: { display: 'flex', alignItems: 'center', gap: 16, marginBottom: 32, }, outputsHeader: { display: 'flex', alignItems: 'center', gap: 16, marginTop: 80, marginBottom: 32, }, dimLabel: { fontWeight: 700, fontSize: 12, letterSpacing: '0.22em', textTransform: 'uppercase', color: 'var(--color-copper-fallback)', }, dimDivider: { flex: 1, height: 1, background: 'rgba(33,52,64,0.12)' }, dimNote: { fontSize: 13, color: 'var(--color-navy-medium)', fontStyle: 'italic', }, dimGrid: { display: 'grid', gridTemplateColumns: '1fr', gap: 16, }, dimCard: { position: 'relative', padding: 'clamp(24px, 3vw, 36px)', borderRadius: 4, display: 'flex', flexDirection: 'column', gap: 12, minHeight: 280, overflow: 'hidden', transition: 'background 360ms ease, color 360ms ease, transform 360ms cubic-bezier(0.16,1,0.3,1)', }, dimLetterWrap: { position: 'absolute', top: 16, right: 24, display: 'flex', alignItems: 'flex-start', gap: 4, pointerEvents: 'none', }, dimLetter: { fontWeight: 800, fontSize: 'clamp(30px, 8vw, 120px)', lineHeight: 0.85, letterSpacing: '0', }, dimDot: { width: 8, height: 8, borderRadius: 999, marginTop: 14, transition: 'background 360ms ease', }, dimName: { margin: 0, fontSize: 13, fontWeight: 700, letterSpacing: '0.16em', textTransform: 'uppercase', color: 'var(--color-copper-fallback)', }, dimQuestion: { margin: '8px 0 0', fontSize: 'clamp(18px, 1.8vw, 22px)', fontWeight: 700, lineHeight: 1.3, color: 'var(--color-navy-deep)', maxWidth: '70%', textWrap: 'balance', }, dimBody: { margin: 'auto 0 0', fontSize: 14, lineHeight: 1.6, color: 'var(--color-navy-deep)', }, outputsGrid: { display: 'grid', gridTemplateColumns: '1fr', gap: 16, marginBottom: 80, }, output: { display: 'grid', gridTemplateColumns: 'auto 1fr', gap: 20, padding: 24, background: '#fff', borderRadius: 4, alignItems: 'start', transition: 'transform 360ms cubic-bezier(0.16,1,0.3,1), box-shadow 360ms ease', }, outputIcon: { width: 52, height: 52, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', background: 'var(--color-cream-soft)', color: 'var(--color-copper-fallback)', borderRadius: 4, flexShrink: 0, }, outputText: { display: 'flex', flexDirection: 'column', gap: 6 }, outputTitle: { margin: 0, fontSize: 18, fontWeight: 700, color: 'var(--color-navy-deep)', }, outputBody: { margin: 0, fontSize: 14, color: 'var(--color-navy-medium)', lineHeight: 1.6, }, banner: { position: 'relative', overflow: 'hidden', borderRadius: 4, minHeight: 240, color: '#fff', marginBottom: 48, }, bannerTexture: { position: 'absolute', inset: 0, backgroundImage: 'url("assets/textures/cobre-patinado.svg")', backgroundSize: 'cover', backgroundPosition: 'center', }, bannerInner: { position: 'relative', display: 'grid', gridTemplateColumns: '1fr', gap: 32, padding: 'clamp(32px, 4vw, 56px)', background: 'linear-gradient(135deg, rgba(15,27,35,0.55) 0%, rgba(15,27,35,0.15) 100%)', }, bannerLeft: { display: 'flex', flexDirection: 'column', gap: 12, maxWidth: 540 }, bannerTitle: { margin: '8px 0 0', fontSize: 'clamp(24px, 2.8vw, 36px)', fontWeight: 800, lineHeight: 1.15, color: '#fff', textWrap: 'balance', }, bannerDesc: { margin: 0, fontSize: 16, lineHeight: 1.6, color: 'rgba(255,255,255,0.92)', maxWidth: 480, }, bannerRight: { display: 'flex', flexDirection: 'column', gap: 12, alignItems: 'flex-start', alignSelf: 'flex-end', }, bannerCta: { background: '#fff', color: 'var(--color-navy-deep)', padding: '16px 28px', }, bannerUrl: { fontFamily: 'ui-monospace, Menlo, Consolas, monospace', fontSize: 13, color: 'rgba(255,255,255,0.8)', letterSpacing: '0.05em', }, ctaWrap: { display: 'flex', justifyContent: 'flex-start', }, }; const dgMQ = document.createElement('style'); dgMQ.textContent = ` @media (min-width: 900px) { section[data-screen-label="04 Digo"] [data-calib-stats] { grid-template-columns: repeat(3, 1fr) !important; } section[data-screen-label="04 Digo"] [data-calib-stats] > div[aria-hidden] { width: 1px !important; height: 32px !important; } section[data-screen-label="04 Digo"] .container > div:nth-of-type(3) { grid-template-columns: repeat(2, 1fr) !important; } section[data-screen-label="04 Digo"] .container > div:nth-of-type(5) { grid-template-columns: repeat(3, 1fr) !important; } section[data-screen-label="04 Digo"] .container > div:nth-of-type(6) > div:last-child { grid-template-columns: 1.6fr 1fr !important; gap: 48px !important; align-items: center !important; } } @media (min-width: 1024px) { section[data-screen-label="04 Digo"] .container > div:nth-of-type(3) { grid-template-columns: repeat(4, 1fr) !important; } } section[data-screen-label="04 Digo"] article[data-cursor="link"]:hover { transform: translateY(-4px); } section[data-screen-label="04 Digo"] .container > div:nth-of-type(5) article:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(33, 52, 64, 0.06); } section[data-screen-label="04 Digo"] a[href*="dataria.mx"]:hover { transform: translateY(-2px); box-shadow: 0 12px 28px rgba(0,0,0,0.18); } `; document.head.appendChild(dgMQ); window.Digo = Digo;