// sections.jsx — content sections for the Grupo Térreo brand manual. // Each section is a self-contained component. Exposed on window for app.jsx. const { useState, useEffect, useMemo } = React; // ──────────────────────────────────────────────────────────────────────────── // Shared atoms // ──────────────────────────────────────────────────────────────────────────── function SecHead({ num, title, lede, kicker }) { return (
{num} {kicker && {kicker}}

{title}

{lede &&

{lede}

}
); } function PCell({ num, sym, mass, name, group, size = 1, tone = "verde", style = {} }) { // Renders a periodic-table cell at consistent proportions. const w = 132 * size; const h = 152 * size; const symSize = 42 * size; const stroke = tone === "arena" ? "#C8B89A" : "var(--verde)"; const color = tone === "arena" ? "#C8B89A" : "var(--verde)"; return (
{num} {mass}
{sym}
{name}
{group && {group}}
); } // Compact inline mark used in headers / business cards / web nav. // Renders the active logo route + a small TÉRREO wordmark beneath. function MiniMark({ size = 60, color = "#2D4A3E", textColor = "#1A1F1C", route = "estrella", showWordmark = true }) { const wordSize = Math.max(6, Math.round(size * 0.13)); return (
{showWordmark && (
TÉRREO
)}
); } // ──────────────────────────────────────────────────────────────────────────── // HERO // ──────────────────────────────────────────────────────────────────────────── function Hero() { return (
Manual de identidad corporativa · v1.0 · 2026 Confidencial

Construimos
lo permanente.

Grupo Térreo es una promotora inmobiliaria de vivienda y hotelería de muy altas prestaciones. Construye con responsabilidad ambiental, innovación técnica y compromiso de permanencia. Cada proyecto certificado BREEAM o LEED.

Cliente
Grupo Térreo Promotora Inmobiliaria
Disciplina
Branding · Editorial · Digital
Sello
BREEAM® · LEED®
Fecha
Mayo 2026
); } // ──────────────────────────────────────────────────────────────────────────── // 01 — CONCEPTO // ──────────────────────────────────────────────────────────────────────────── function ConceptSection({ density, route = "estrella" }) { return (

Símbolo de marca
Innovación responsable

La construcción responsable no es un eslogan. Es método, rigor y tiempo invertido en cada detalle. BREEAM, LEED, auditoría externa, trazabilidad de materiales, reporting transparente al inversor.

Grupo Térreo promueve vivienda y hotelería donde la sostenibilidad y la innovación técnica no son concesiones al mercado, sino el fundamento mismo de cada proyecto.

{[ { k: "Sostenibilidad", t: "BREEAM Very Good / LEED Gold mínimo en cada proyecto." }, { k: "Exigencia", t: "Auditoría externa en cada fase. Ningún atajo de calidad." }, { k: "Transparencia", t: "Reporting trimestral al inversor. Acceso en tiempo real a proyectos." }, ].map((p) => (
{p.k}

{p.t}

))}
); } // ──────────────────────────────────────────────────────────────────────────── // 02 — LOGOTIPO // ──────────────────────────────────────────────────────────────────────────── function LogoSection({ route = "estrella", setRoute }) { const active = LOGO_ROUTES.find(r => r.id === route) || LOGO_ROUTES[0]; return (
{/* 3-route comparison */}
{LOGO_ROUTES.map((r) => { const isActive = r.id === active.id; return ( ); })}
{/* Active route — Versión principal */}
Ruta activa · {active.short} · {active.label}
Versión
principal
{/* Monocromo + negativo */}
Variantes
admitidas
Monocromo · sobre blanco
Negativo · solo aplicaciones puntuales
{/* Construcción / área de seguridad */}
Área de seguridad

El espacio libre alrededor del logotipo equivale a la altura de la marca (x). Ningún elemento gráfico, fotográfico o tipográfico debe invadir esta zona.

{["nw","ne","sw","se"].map((p) => (
x
))}
Tamaño mínimo

Para garantizar la legibilidad del símbolo y del bloque tipográfico, el logotipo principal no debe reproducirse por debajo de las siguientes medidas.

Digital · 32 px
Impreso · 10 mm
{/* Usos incorrectos */}
Usos incorrectos
{[ { label: "No deformar", style: { transform: "scaleX(0.7)" } }, { label: "No rotar", style: { transform: "rotate(-8deg)" } }, { label: "No recolorar fuera de paleta", color: "#B23A3A" }, { label: "No invertir el contraste", bg: "#1A1F1C", color: "var(--arena)" }, ].map((u) => (
{u.label}
))}
); } // ──────────────────────────────────────────────────────────────────────────── // 03 — PALETA // ──────────────────────────────────────────────────────────────────────────── function PaletteSection({ palette }) { // palette: { verde, arena, piedra, gris, carbon, name } const swatches = [ { id: "verde", label: "Verde Bosque", hex: palette.verde, role: "Color principal · marca, titulares, sellos", cmyk: "C76 M48 Y66 K39", pantone: "Pantone 5535 C" }, { id: "arena", label: "Arena Cálida", hex: palette.arena, role: "Color de acompañamiento · piedra, materia", cmyk: "C20 M25 Y45 K06", pantone: "Pantone 7501 C" }, { id: "piedra", label: "Piedra Clara", hex: palette.piedra, role: "Fondo principal · papelería, web, impreso", cmyk: "C08 M09 Y17 K00", pantone: "Pantone 7527 C" }, { id: "gris", label: "Gris Frío", hex: palette.gris, role: "Datos secundarios · texto técnico, divisores", cmyk: "C57 M40 Y29 K07", pantone: "Pantone 5415 C" }, { id: "carbon", label: "Carbón", hex: palette.carbon, role: "Tipografía sobre fondos claros (uso limitado)",cmyk: "C70 M58 Y66 K78", pantone: "Pantone Black 6 C" }, ]; return (
{swatches.map((s) => { const isLight = s.id === "piedra" || s.id === "arena"; const textColor = isLight ? "var(--carbon)" : "var(--piedra)"; return (
{s.id === "verde" ? "01" : s.id === "arena" ? "02" : s.id === "piedra" ? "03" : s.id === "gris" ? "04" : "05"}
{s.label}
{s.hex.toUpperCase()}
{s.cmyk}
{s.pantone}
{s.role}
); })}
{/* Proporciones */}
Proporciones de uso recomendadas
{["Piedra · fondo","Arena · acento","Verde · sello","Gris · datos","Carbón · tipo"].map((l, i) => (
{l}
))}
); } // ──────────────────────────────────────────────────────────────────────────── // 04 — TIPOGRAFÍA // ──────────────────────────────────────────────────────────────────────────── function TypeSection({ fontMain }) { return (
{/* Principal */}
Aa · 01 {fontMain.replace(/['"]/g,'').split(",")[0]}
Tipografía principal · sans humanista
Aa Gg Tt
{[ ["200","Extra Light"], ["300","Light"], ["400","Regular"], ["500","Medium"], ["600","Semi Bold"], ["700","Bold"], ].map(([w, n]) => (
Térreo
{w} · {n}
))}
{/* Monoespaciada */}
Aa · 02JetBrains Mono
Datos y referencias · etiquetas
BREEAM · LEED · INNOVACIÓN RESPONSABLE
{/* Serif editorial */}
Aa · 03Newsreader
Editorial · cursivas · pull quotes
Construimos lo permanente.
{/* Escala */}
Escala tipográfica recomendada · web y editorial
{[ ["Display","Portadas, claim","96–168 / 1.0","200","Principal"], ["H1","Títulos de sección","48–72 / 1.05","700","Principal"], ["H2","Subtítulos","28–36 / 1.2","600","Principal"], ["Lede","Entradilla editorial","18–24 / 1.4","300 italic","Serif"], ["Body","Texto corrido","14–16 / 1.55","400","Principal"], ["Caption","Pie de foto","11–12 / 1.5","400","Principal"], ["Mono","Datos técnicos, certificaciones","9–12 / 1.5","300","JetBrains Mono"], ].map((r) => ( {r.map((c, i) => )} ))}
NIVEL USO TAMAÑO PESO FAMILIA
{c}
); } // expose Object.assign(window, { Hero, ConceptSection, LogoSection, PaletteSection, TypeSection, SecHead, PCell, MiniMark });