{floor.av === 0
? 'Nivel completamente ocupado.'
: floor.av === 1
? <>Solo un espacio disponible de {floor.tot}.>
: <>{floor.av} de {floor.tot} disponibles.>}
{floor.av === 0 ? 'Este nivel ya completó su ecosistema de inquilinos.'
: floor.av === 1 ? 'Queda un espacio para completar el ecosistema de este nivel.'
: 'Elige el espacio que mejor se integre a tu operación.'}
);
}
function OfficeDirectory({ floor }) {
const eco = ZONES[floor.zone]?.eco || 'corporativo';
const types = TYPE_META[eco] || {};
const z = ZONES[floor.zone];
if (eco === 'retail') {
const o = floor.offices[0];
return (
);
}
function LevelPage({ floor }) {
const z = ZONES[floor.zone];
return (
{/* HERO */}
{floor.sh}
{floor.eyebrow}
{floor.name}
{floor.desc}
Desde
{floor.pMin === floor.pMax ? FMT(floor.pMin) : `${FMT(floor.pMin)} – ${FMT(floor.pMax)}`}
/ mes · obra gris
{/* AVAILABILITY */}
{/* INFO */}
01 / La propuesta del nivel
Por qué este nivel, y para quién.
01 · Argumentos
Por qué este nivel
{floor.bens.map((b, i) => (
/ {pad2(i + 1)}{b}
))}
02 · Buyer persona
Perfecto para
{floor.personas.map((p, i) => (
{pad2(i + 1)}
{p.name}
{p.desc}
))}
{/* OFFICE DIRECTORY */}
02 / Los espacios
Elige tu oficina.
Tres tamaños por nivel. Toca una oficina para ver su detalle, plano y disponibilidad.
{/* THE PLAN */}
{floor.planClass && (
03 / El plano
La distribución del nivel.
Plano arquitectónico del nivel {floor.sh}. La franja de color en la elevación lateral indica la posición del nivel en el edificio. En la planta se identifican las oficinas A (boutique), B (consolidación) y C (ancla).