/* @ds-bundle: {"format":4,"namespace":"VidrioHBitatDesignSystem_aa4b60","components":[{"name":"Logo","sourcePath":"components/brand/Logo.jsx"},{"name":"Badge","sourcePath":"components/core/Badge.jsx"},{"name":"Button","sourcePath":"components/core/Button.jsx"},{"name":"Card","sourcePath":"components/core/Card.jsx"},{"name":"ICON_CDN","sourcePath":"components/core/Icon.jsx"},{"name":"Icon","sourcePath":"components/core/Icon.jsx"},{"name":"IconButton","sourcePath":"components/core/IconButton.jsx"},{"name":"Tag","sourcePath":"components/core/Tag.jsx"},{"name":"Dialog","sourcePath":"components/feedback/Dialog.jsx"},{"name":"Toast","sourcePath":"components/feedback/Toast.jsx"},{"name":"Tooltip","sourcePath":"components/feedback/Tooltip.jsx"},{"name":"Checkbox","sourcePath":"components/forms/Checkbox.jsx"},{"name":"Input","sourcePath":"components/forms/Input.jsx"},{"name":"Radio","sourcePath":"components/forms/Radio.jsx"},{"name":"Select","sourcePath":"components/forms/Select.jsx"},{"name":"Switch","sourcePath":"components/forms/Switch.jsx"},{"name":"Tabs","sourcePath":"components/navigation/Tabs.jsx"}],"sourceHashes":{"components/brand/Logo.jsx":"954362d73094","components/core/Badge.jsx":"11a89aa90c60","components/core/Button.jsx":"7ec5109c9ca2","components/core/Card.jsx":"28fc715401b0","components/core/Icon.jsx":"3f4abf50b46a","components/core/IconButton.jsx":"21010c337e75","components/core/Tag.jsx":"d0607cb4de85","components/feedback/Dialog.jsx":"b92991c1cd03","components/feedback/Toast.jsx":"073e4cfb2e92","components/feedback/Tooltip.jsx":"ee4c20482903","components/forms/Checkbox.jsx":"9555bff4065d","components/forms/Input.jsx":"0893baa159b9","components/forms/Radio.jsx":"72d814cd78f2","components/forms/Select.jsx":"5fd31584ea59","components/forms/Switch.jsx":"9dc4ca3b8675","components/navigation/Tabs.jsx":"6dbd75ee8204","ui_kits/website/Contacto.jsx":"c95ec6080cbd","ui_kits/website/Departamentos.jsx":"ca9f1dc6c773","ui_kits/website/Home.jsx":"bbd9e1f4e21e","ui_kits/website/SiteChrome.jsx":"317b850a804b","ui_kits/website/shared.jsx":"313732c21503"},"inlinedExternals":[],"unexposedExports":[{"name":"fieldShell","sourcePath":"components/forms/Input.jsx"}]} */ (() => { const __ds_ns = (window.VidrioHBitatDesignSystem_aa4b60 = window.VidrioHBitatDesignSystem_aa4b60 || {}); const __ds_scope = {}; (__ds_ns.__errors = __ds_ns.__errors || []); // components/brand/Logo.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const FILES = { imagotipo: { color: "logo-imagotipo-color.png", black: "logo-imagotipo-black.png", white: "logo-imagotipo-white.png", ratio: 142 / 395 }, logotipo: { color: "logo-logotipo-color.png", black: "logo-imagotipo-black.png", white: "logo-imagotipo-white.png", ratio: 142 / 72 }, isotipo: { color: "logo-isotipo-color.png", black: "logo-imagotipo-black.png", white: "logo-imagotipo-white.png", ratio: 131 / 328 } }; function Logo({ version = "imagotipo", finish = "color", height = 120, assetBase = "assets/", clearSpace = false, opacity = 1, style, ...rest }) { const spec = FILES[version]; return /*#__PURE__*/React.createElement("span", _extends({ style: { display: "inline-flex", padding: clearSpace ? "var(--mark-clearspace)" : 0, opacity, ...style } }, rest), /*#__PURE__*/React.createElement("img", { src: assetBase + spec[finish], alt: "Vidrio H\xE1bitat", style: { height, width: "auto", display: "block" } })); } Object.assign(__ds_scope, { Logo }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/brand/Logo.jsx", error: String((e && e.message) || e) }); } // components/core/Badge.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const tones = { accent: { background: "var(--vh-verde)", color: "var(--text-on-accent)" }, soft: { background: "var(--vh-verde-100)", color: "var(--vh-verde-700)" }, warm: { background: "var(--vh-beige)", color: "var(--text-on-warm)" }, neutral: { background: "var(--surface-muted)", color: "var(--text-body)" }, inverse: { background: "var(--surface-inverse)", color: "var(--text-on-inverse)" } }; function Badge({ children, tone = "soft", style, ...rest }) { return /*#__PURE__*/React.createElement("span", _extends({ style: { display: "inline-flex", alignItems: "center", gap: "var(--space-1)", padding: "5px 12px", borderRadius: "var(--radius-pill)", font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", ...tones[tone], ...style } }, rest), children); } Object.assign(__ds_scope, { Badge }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Badge.jsx", error: String((e && e.message) || e) }); } // components/core/Button.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const base = { display: "inline-flex", alignItems: "center", justifyContent: "center", gap: "var(--space-2)", font: "var(--type-button)", letterSpacing: "0.08em", textTransform: "uppercase", borderRadius: "var(--radius-control)", border: "1px solid transparent", cursor: "pointer", transition: "var(--transition-control)", textDecoration: "none", whiteSpace: "nowrap" }; const sizes = { sm: { padding: "9px 18px", fontSize: "12px" }, md: { padding: "13px 26px", fontSize: "14px" }, lg: { padding: "17px 34px", fontSize: "15px" } }; const variants = { primary: { background: "var(--vh-verde)", color: "var(--text-on-accent)" }, secondary: { background: "transparent", color: "var(--vh-verde-profundo)", borderColor: "var(--border-strong)" }, ghost: { background: "transparent", color: "var(--vh-verde)", borderColor: "transparent" }, inverse: { background: "var(--vh-marfil)", color: "var(--vh-verde-profundo)" }, warm: { background: "var(--vh-beige)", color: "var(--text-on-warm)" } }; const hovers = { primary: { background: "var(--vh-verde-600)" }, secondary: { background: "var(--vh-verde-100)", borderColor: "var(--vh-verde)", color: "var(--vh-verde-700)" }, ghost: { background: "var(--vh-verde-100)" }, inverse: { background: "var(--vh-piedra)" }, warm: { background: "var(--vh-beige-claro)" } }; function Button({ children, variant = "primary", size = "md", href, disabled = false, fullWidth = false, iconLeft, iconRight, type = "button", onClick, style, ...rest }) { const [hover, setHover] = React.useState(false); const [press, setPress] = React.useState(false); const Tag = href && !disabled ? "a" : "button"; const s = { ...base, ...sizes[size], ...variants[variant], ...(hover && !disabled ? hovers[variant] : null), transform: press && !disabled ? "scale(var(--press-scale))" : "none", width: fullWidth ? "100%" : undefined, opacity: disabled ? 0.42 : 1, pointerEvents: disabled ? "none" : undefined, ...style }; return /*#__PURE__*/React.createElement(Tag, _extends({ href: href, type: Tag === "button" ? type : undefined, disabled: Tag === "button" ? disabled : undefined, onClick: onClick, style: s, onMouseEnter: () => setHover(true), onMouseLeave: () => { setHover(false); setPress(false); }, onMouseDown: () => setPress(true), onMouseUp: () => setPress(false) }, rest), iconLeft, children, iconRight); } Object.assign(__ds_scope, { Button }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Button.jsx", error: String((e && e.message) || e) }); } // components/core/Card.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const tones = { default: { background: "var(--surface-card)", color: "var(--text-body)", border: "1px solid var(--border-hairline)" }, muted: { background: "var(--surface-muted)", color: "var(--text-body)", border: "1px solid transparent" }, warm: { background: "var(--vh-beige)", color: "var(--text-on-warm)", border: "1px solid transparent" }, inverse: { background: "var(--surface-inverse)", color: "var(--text-on-inverse)", border: "1px solid var(--border-on-inverse)" } }; function Card({ children, tone = "default", media, mediaAlt = "", padding = "var(--space-6)", interactive = false, elevation = "sm", onClick, style, ...rest }) { const [hover, setHover] = React.useState(false); const shadow = { none: "var(--shadow-none)", xs: "var(--shadow-xs)", sm: "var(--shadow-sm)", md: "var(--shadow-md)" }[elevation]; return /*#__PURE__*/React.createElement("div", _extends({ onClick: onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), style: { borderRadius: "var(--radius-card)", overflow: "hidden", ...tones[tone], boxShadow: interactive && hover ? "var(--shadow-md)" : shadow, transform: interactive && hover ? "translateY(var(--lift-hover))" : "none", transition: "var(--transition-control)", cursor: interactive ? "pointer" : undefined, display: "flex", flexDirection: "column", ...style } }, rest), media ? /*#__PURE__*/React.createElement("div", { style: { overflow: "hidden", aspectRatio: "4 / 3" } }, /*#__PURE__*/React.createElement("img", { src: media, alt: mediaAlt, style: { width: "100%", height: "100%", objectFit: "cover", transition: "var(--transition-media)", transform: interactive && hover ? "scale(1.03)" : "none" } })) : null, /*#__PURE__*/React.createElement("div", { style: { padding, display: "flex", flexDirection: "column", gap: "var(--space-3)", flex: 1 } }, children)); } Object.assign(__ds_scope, { Card }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Card.jsx", error: String((e && e.message) || e) }); } // components/core/Icon.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /** Lucide (CDN, pinned) rendered as a CSS mask so it inherits currentColor. * SUBSTITUTION: the brand manual defines no icon set — Lucide's 1.75px stroke was chosen to match * the thin, elongated strokes of the isotipo. */ const ICON_CDN = "https://unpkg.com/lucide-static@0.446.0/icons/"; function Icon({ name, size = 20, strokeColor = "currentColor", style, ...rest }) { const url = `url("${ICON_CDN}${name}.svg")`; return /*#__PURE__*/React.createElement("span", _extends({ role: "img", "aria-label": name, style: { display: "inline-block", width: size, height: size, flex: "0 0 auto", background: strokeColor, WebkitMaskImage: url, maskImage: url, WebkitMaskRepeat: "no-repeat", maskRepeat: "no-repeat", WebkitMaskPosition: "center", maskPosition: "center", WebkitMaskSize: "contain", maskSize: "contain", ...style } }, rest)); } Object.assign(__ds_scope, { ICON_CDN, Icon }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Icon.jsx", error: String((e && e.message) || e) }); } // components/core/IconButton.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const sizes = { sm: 32, md: 40, lg: 48 }; function IconButton({ name, label, variant = "secondary", size = "md", disabled = false, onClick, style, ...rest }) { const [hover, setHover] = React.useState(false); const box = sizes[size]; const looks = { primary: { background: "var(--vh-verde)", color: "var(--text-on-accent)", borderColor: "transparent" }, secondary: { background: "var(--surface-card)", color: "var(--vh-verde-profundo)", borderColor: "var(--border-hairline)" }, ghost: { background: "transparent", color: "var(--text-body)", borderColor: "transparent" }, inverse: { background: "var(--surface-glass)", color: "var(--vh-verde-profundo)", borderColor: "transparent", backdropFilter: "var(--blur-glass)" } }[variant]; const hovers = { primary: { background: "var(--vh-verde-600)" }, secondary: { background: "var(--vh-verde-100)", borderColor: "var(--vh-verde)" }, ghost: { background: "var(--surface-muted)" }, inverse: { background: "var(--vh-marfil)" } }[variant]; return /*#__PURE__*/React.createElement("button", _extends({ type: "button", "aria-label": label, disabled: disabled, onClick: onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), style: { width: box, height: box, display: "inline-flex", alignItems: "center", justifyContent: "center", borderRadius: "var(--radius-pill)", border: "1px solid transparent", cursor: "pointer", transition: "var(--transition-control)", ...looks, ...(hover && !disabled ? hovers : null), opacity: disabled ? 0.42 : 1, pointerEvents: disabled ? "none" : undefined, ...style } }, rest), /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: name, size: size === "sm" ? 16 : size === "lg" ? 22 : 18 })); } Object.assign(__ds_scope, { IconButton }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/IconButton.jsx", error: String((e && e.message) || e) }); } // components/core/Tag.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Tag({ children, icon, selected = false, onClick, onRemove, style, ...rest }) { const [hover, setHover] = React.useState(false); const clickable = Boolean(onClick); return /*#__PURE__*/React.createElement("span", _extends({ onClick: onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), style: { display: "inline-flex", alignItems: "center", gap: "var(--space-2)", padding: "8px 14px", borderRadius: "var(--radius-pill)", font: "var(--type-body-sm)", letterSpacing: "var(--ls-body)", background: selected ? "var(--vh-verde)" : hover && clickable ? "var(--vh-verde-100)" : "transparent", color: selected ? "var(--text-on-accent)" : "var(--text-body)", border: `1px solid ${selected ? "var(--vh-verde)" : "var(--border-hairline)"}`, cursor: clickable ? "pointer" : "default", transition: "var(--transition-control)", ...style } }, rest), icon ? /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: icon, size: 15 }) : null, children, onRemove ? /*#__PURE__*/React.createElement("span", { onClick: e => { e.stopPropagation(); onRemove(e); }, style: { display: "inline-flex", cursor: "pointer", opacity: 0.7 } }, /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: "x", size: 13 })) : null); } Object.assign(__ds_scope, { Tag }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/core/Tag.jsx", error: String((e && e.message) || e) }); } // components/feedback/Dialog.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Dialog({ open = false, title, eyebrow, children, footer, onClose, width = 520, style, ...rest }) { if (!open) return null; return /*#__PURE__*/React.createElement("div", { style: { position: "fixed", inset: 0, zIndex: 60, display: "flex", alignItems: "center", justifyContent: "center", padding: "var(--space-6)", background: "var(--surface-overlay)", backdropFilter: "blur(6px)", animation: "none" }, onClick: onClose }, /*#__PURE__*/React.createElement("div", _extends({ onClick: e => e.stopPropagation(), style: { width: "100%", maxWidth: width, background: "var(--surface-card)", borderRadius: "var(--radius-card)", boxShadow: "var(--shadow-lg)", padding: "var(--space-8)", display: "flex", flexDirection: "column", gap: "var(--space-5)", position: "relative", ...style } }, rest), onClose ? /*#__PURE__*/React.createElement("span", { style: { position: "absolute", top: "var(--space-4)", right: "var(--space-4)" } }, /*#__PURE__*/React.createElement(__ds_scope.IconButton, { name: "x", label: "Cerrar", variant: "ghost", size: "sm", onClick: onClose })) : null, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-2)" } }, eyebrow ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", color: "var(--text-accent)" } }, eyebrow) : null, title ? /*#__PURE__*/React.createElement("h3", { style: { font: "var(--type-display-sm, var(--type-title))", fontFamily: "var(--font-display)", fontSize: "26px", fontWeight: "var(--fw-display-regular)", color: "var(--text-heading)", margin: 0 } }, title) : null), /*#__PURE__*/React.createElement("div", { style: { font: "var(--type-body)", color: "var(--text-body)", display: "flex", flexDirection: "column", gap: "var(--space-4)" } }, children), footer ? /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-3)", justifyContent: "flex-end", flexWrap: "wrap" } }, footer) : null)); } Object.assign(__ds_scope, { Dialog }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/feedback/Dialog.jsx", error: String((e && e.message) || e) }); } // components/feedback/Toast.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const tones = { success: { icon: "check-circle", color: "var(--feedback-success)" }, info: { icon: "info", color: "var(--feedback-info)" }, warning: { icon: "triangle-alert", color: "var(--feedback-warning)" }, danger: { icon: "circle-alert", color: "var(--feedback-danger)" } }; function Toast({ tone = "success", title, children, onClose, style, ...rest }) { const t = tones[tone]; return /*#__PURE__*/React.createElement("div", _extends({ role: "status", style: { display: "flex", alignItems: "flex-start", gap: "var(--space-3)", padding: "var(--space-4) var(--space-5)", minWidth: 300, maxWidth: 420, background: "var(--surface-card)", borderRadius: "var(--radius-card)", boxShadow: "var(--shadow-md)", border: "1px solid var(--border-hairline)", ...style } }, rest), /*#__PURE__*/React.createElement("span", { style: { color: t.color, marginTop: 2 } }, /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: t.icon, size: 18 })), /*#__PURE__*/React.createElement("span", { style: { display: "flex", flexDirection: "column", gap: 2, flex: 1 } }, title ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body)", fontWeight: "var(--fw-body-medium)", color: "var(--text-heading)" } }, title) : null, children ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, children) : null), onClose ? /*#__PURE__*/React.createElement("span", { onClick: onClose, style: { cursor: "pointer", color: "var(--text-muted)", marginTop: 2 } }, /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: "x", size: 15 })) : null); } Object.assign(__ds_scope, { Toast }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/feedback/Toast.jsx", error: String((e && e.message) || e) }); } // components/feedback/Tooltip.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Tooltip({ label, children, placement = "top", style, ...rest }) { const [show, setShow] = React.useState(false); const pos = { top: { bottom: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" }, bottom: { top: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" }, left: { right: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" }, right: { left: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" } }[placement]; return /*#__PURE__*/React.createElement("span", _extends({ style: { position: "relative", display: "inline-flex", ...style }, onMouseEnter: () => setShow(true), onMouseLeave: () => setShow(false), onFocus: () => setShow(true), onBlur: () => setShow(false) }, rest), children, /*#__PURE__*/React.createElement("span", { style: { position: "absolute", ...pos, zIndex: 40, whiteSpace: "nowrap", pointerEvents: "none", padding: "6px 10px", borderRadius: "var(--radius-sm)", background: "var(--surface-inverse)", color: "var(--text-on-inverse)", font: "var(--type-body-sm)", fontSize: "12.5px", boxShadow: "var(--shadow-sm)", opacity: show ? 1 : 0, transition: "opacity var(--dur-fast) var(--ease-standard)" } }, label)); } Object.assign(__ds_scope, { Tooltip }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/feedback/Tooltip.jsx", error: String((e && e.message) || e) }); } // components/forms/Checkbox.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Checkbox({ label, checked, defaultChecked, onChange, disabled = false, style, ...rest }) { const [inner, setInner] = React.useState(Boolean(defaultChecked)); const on = checked === undefined ? inner : checked; return /*#__PURE__*/React.createElement("label", { style: { display: "inline-flex", alignItems: "flex-start", gap: "var(--space-3)", cursor: disabled ? "default" : "pointer", opacity: disabled ? 0.42 : 1, ...style } }, /*#__PURE__*/React.createElement("input", _extends({ type: "checkbox", checked: on, disabled: disabled, onChange: e => { if (checked === undefined) setInner(e.target.checked); onChange && onChange(e); }, style: { position: "absolute", opacity: 0, width: 0, height: 0 } }, rest)), /*#__PURE__*/React.createElement("span", { style: { width: 20, height: 20, flex: "0 0 auto", marginTop: 1, display: "inline-flex", alignItems: "center", justifyContent: "center", borderRadius: "var(--radius-xs)", transition: "var(--transition-control)", background: on ? "var(--vh-verde)" : "var(--surface-card)", border: `1px solid ${on ? "var(--vh-verde)" : "var(--border-strong)"}`, color: "var(--text-on-accent)" } }, on ? /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: "check", size: 14 }) : null), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-body)" } }, label)); } Object.assign(__ds_scope, { Checkbox }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/forms/Checkbox.jsx", error: String((e && e.message) || e) }); } // components/forms/Input.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const wrap = { display: "flex", flexDirection: "column", gap: "var(--space-2)", width: "100%" }; const labelStyle = { font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", color: "var(--text-muted)" }; const fieldShell = (focus, invalid) => ({ width: "100%", padding: "14px 16px", font: "var(--type-body)", color: "var(--text-body)", background: "var(--surface-card)", borderRadius: "var(--radius-sm)", border: `1px solid ${invalid ? "var(--feedback-danger)" : focus ? "var(--vh-verde)" : "var(--border-hairline)"}`, boxShadow: focus ? "var(--shadow-focus)" : "none", outline: "none", transition: "var(--transition-control)" }); function Input({ label, hint, error, type = "text", multiline = false, rows = 4, style, ...rest }) { const [focus, setFocus] = React.useState(false); const Field = multiline ? "textarea" : "input"; return /*#__PURE__*/React.createElement("label", { style: wrap }, label ? /*#__PURE__*/React.createElement("span", { style: labelStyle }, label) : null, /*#__PURE__*/React.createElement(Field, _extends({ rows: multiline ? rows : undefined, type: multiline ? undefined : type, onFocus: () => setFocus(true), onBlur: () => setFocus(false), style: { ...fieldShell(focus, Boolean(error)), resize: multiline ? "vertical" : undefined, fontFamily: "var(--font-body)", ...style } }, rest)), error ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--feedback-danger)" } }, error) : hint ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, hint) : null); } Object.assign(__ds_scope, { fieldShell, Input }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/forms/Input.jsx", error: String((e && e.message) || e) }); } // components/forms/Radio.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Radio({ label, name, value, checked, defaultChecked, onChange, disabled = false, style, ...rest }) { const [inner, setInner] = React.useState(Boolean(defaultChecked)); const on = checked === undefined ? inner : checked; return /*#__PURE__*/React.createElement("label", { style: { display: "inline-flex", alignItems: "center", gap: "var(--space-3)", cursor: disabled ? "default" : "pointer", opacity: disabled ? 0.42 : 1, ...style } }, /*#__PURE__*/React.createElement("input", _extends({ type: "radio", name: name, value: value, checked: on, disabled: disabled, onChange: e => { if (checked === undefined) setInner(true); onChange && onChange(e); }, style: { position: "absolute", opacity: 0, width: 0, height: 0 } }, rest)), /*#__PURE__*/React.createElement("span", { style: { width: 20, height: 20, flex: "0 0 auto", borderRadius: "var(--radius-pill)", border: `1px solid ${on ? "var(--vh-verde)" : "var(--border-strong)"}`, background: "var(--surface-card)", transition: "var(--transition-control)", display: "inline-flex", alignItems: "center", justifyContent: "center" } }, /*#__PURE__*/React.createElement("span", { style: { width: 10, height: 10, borderRadius: "var(--radius-pill)", background: on ? "var(--vh-verde)" : "transparent", transition: "var(--transition-control)" } })), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-body)" } }, label)); } Object.assign(__ds_scope, { Radio }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/forms/Radio.jsx", error: String((e && e.message) || e) }); } // components/forms/Select.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Select({ label, hint, error, options = [], placeholder, style, ...rest }) { const [focus, setFocus] = React.useState(false); return /*#__PURE__*/React.createElement("label", { style: { display: "flex", flexDirection: "column", gap: "var(--space-2)", width: "100%" } }, label ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", color: "var(--text-muted)" } }, label) : null, /*#__PURE__*/React.createElement("span", { style: { position: "relative", display: "block" } }, /*#__PURE__*/React.createElement("select", _extends({ onFocus: () => setFocus(true), onBlur: () => setFocus(false), style: { ...__ds_scope.fieldShell(focus, Boolean(error)), appearance: "none", paddingRight: 44, fontFamily: "var(--font-body)", ...style } }, rest), placeholder ? /*#__PURE__*/React.createElement("option", { value: "" }, placeholder) : null, options.map(o => { const value = typeof o === "string" ? o : o.value; const text = typeof o === "string" ? o : o.label; return /*#__PURE__*/React.createElement("option", { key: value, value: value }, text); })), /*#__PURE__*/React.createElement("span", { style: { position: "absolute", right: 14, top: "50%", transform: "translateY(-50%)", pointerEvents: "none", color: "var(--vh-verde)" } }, /*#__PURE__*/React.createElement(__ds_scope.Icon, { name: "chevron-down", size: 18 }))), error ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--feedback-danger)" } }, error) : hint ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, hint) : null); } Object.assign(__ds_scope, { Select }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/forms/Select.jsx", error: String((e && e.message) || e) }); } // components/forms/Switch.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Switch({ label, checked, defaultChecked, onChange, disabled = false, style, ...rest }) { const [inner, setInner] = React.useState(Boolean(defaultChecked)); const on = checked === undefined ? inner : checked; const toggle = () => { if (disabled) return; if (checked === undefined) setInner(!on); onChange && onChange(!on); }; return /*#__PURE__*/React.createElement("span", _extends({ role: "switch", "aria-checked": on, tabIndex: 0, onClick: toggle, onKeyDown: e => { if (e.key === " " || e.key === "Enter") { e.preventDefault(); toggle(); } }, style: { display: "inline-flex", alignItems: "center", gap: "var(--space-3)", cursor: disabled ? "default" : "pointer", opacity: disabled ? 0.42 : 1, ...style } }, rest), /*#__PURE__*/React.createElement("span", { style: { width: 44, height: 24, borderRadius: "var(--radius-pill)", padding: 3, display: "inline-flex", background: on ? "var(--vh-verde)" : "var(--vh-gris-200)", transition: "var(--transition-control)" } }, /*#__PURE__*/React.createElement("span", { style: { width: 18, height: 18, borderRadius: "var(--radius-pill)", background: "var(--vh-blanco)", boxShadow: "var(--shadow-xs)", transform: on ? "translateX(20px)" : "translateX(0)", transition: "transform var(--dur-base) var(--ease-standard)" } })), label ? /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-body)" } }, label) : null); } Object.assign(__ds_scope, { Switch }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/forms/Switch.jsx", error: String((e && e.message) || e) }); } // components/navigation/Tabs.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Tabs({ items = [], value, defaultValue, onChange, tone = "light", style, ...rest }) { const first = items.length ? typeof items[0] === "string" ? items[0] : items[0].value : ""; const [inner, setInner] = React.useState(defaultValue !== undefined ? defaultValue : first); const active = value === undefined ? inner : value; const pick = v => { if (value === undefined) setInner(v); onChange && onChange(v); }; const inverse = tone === "inverse"; return /*#__PURE__*/React.createElement("div", _extends({ role: "tablist", style: { display: "flex", gap: "var(--space-7)", alignItems: "stretch", borderBottom: `1px solid ${inverse ? "var(--border-on-inverse)" : "var(--border-hairline)"}`, overflowX: "auto", ...style } }, rest), items.map(it => { const v = typeof it === "string" ? it : it.value; const label = typeof it === "string" ? it : it.label; const on = v === active; return /*#__PURE__*/React.createElement("button", { key: v, role: "tab", "aria-selected": on, onClick: () => pick(v), style: { background: "none", border: "none", cursor: "pointer", padding: "0 0 12px", font: "var(--type-body-sm)", letterSpacing: "0.1em", textTransform: "uppercase", color: on ? inverse ? "var(--text-on-inverse)" : "var(--vh-verde)" : inverse ? "rgba(255,250,239,.62)" : "var(--text-muted)", borderBottom: `2px solid ${on ? "var(--vh-verde)" : "transparent"}`, marginBottom: -1, transition: "var(--transition-control)", whiteSpace: "nowrap" } }, label); })); } Object.assign(__ds_scope, { Tabs }); })(); } catch (e) { __ds_ns.__errors.push({ path: "components/navigation/Tabs.jsx", error: String((e && e.message) || e) }); } // ui_kits/website/Contacto.jsx try { (() => { function Contacto({ onSent }) { const [sent, setSent] = React.useState(false); const submit = e => { e.preventDefault(); setSent(true); onSent && onSent(); }; return /*#__PURE__*/React.createElement("section", { style: { paddingTop: "var(--space-11)", paddingBottom: "var(--section-y)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-10)", alignItems: "start" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-6)" } }, /*#__PURE__*/React.createElement(SectionHead, { eyebrow: "Agenda tu visita", title: "Tu nuevo h\xE1bitat te espera", lead: "D\xE9janos tus datos y un asesor te contacta el mismo d\xEDa para coordinar un recorrido por el desarrollo." }), /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-4)" } }, [["map-pin", "Colonia Americana, Guadalajara, Jalisco"], ["phone", "+52 33 0000 0000"], ["mail", "hola@vidriohabitat.mx"], ["clock", "Showroom: lunes a sábado, 10:00 – 19:00"]].map(([icon, label]) => /*#__PURE__*/React.createElement("div", { key: label, style: { display: "flex", gap: "var(--space-3)", alignItems: "center" } }, /*#__PURE__*/React.createElement("span", { style: { color: "var(--vh-verde)" } }, /*#__PURE__*/React.createElement(NS.Icon, { name: icon, size: 18 })), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-body)" } }, label)))), /*#__PURE__*/React.createElement("img", { src: A + "img-fachada.png", alt: "Fachada", style: { borderRadius: "var(--radius-media)", height: 260, objectFit: "cover", objectPosition: "center 20%", width: "100%" } })), /*#__PURE__*/React.createElement("form", { onSubmit: submit, style: { background: "var(--surface-card)", border: "1px solid var(--border-hairline)", boxShadow: "var(--shadow-sm)", borderRadius: "var(--radius-card)", padding: "var(--space-8)", display: "flex", flexDirection: "column", gap: "var(--space-5)" } }, /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-4)" } }, /*#__PURE__*/React.createElement(NS.Input, { label: "Nombre", placeholder: "Tu nombre completo", required: true }), /*#__PURE__*/React.createElement(NS.Input, { label: "Tel\xE9fono", placeholder: "33 0000 0000" })), /*#__PURE__*/React.createElement(NS.Input, { label: "Correo", type: "email", placeholder: "tu@correo.com", hint: "Te escribimos en menos de 24 h", required: true }), /*#__PURE__*/React.createElement(NS.Select, { label: "Modelo de inter\xE9s", placeholder: "Selecciona", options: UNITS.map(u => `${u.name} · ${u.m2} m²`) }), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-6)" } }, /*#__PURE__*/React.createElement(NS.Radio, { name: "via", label: "WhatsApp", defaultChecked: true }), /*#__PURE__*/React.createElement(NS.Radio, { name: "via", label: "Llamada" }), /*#__PURE__*/React.createElement(NS.Radio, { name: "via", label: "Correo" })), /*#__PURE__*/React.createElement(NS.Input, { label: "Mensaje", multiline: true, rows: 3, placeholder: "\xBFQu\xE9 te gustar\xEDa saber del desarrollo?" }), /*#__PURE__*/React.createElement(NS.Checkbox, { label: "Acepto recibir informaci\xF3n de Vidrio H\xE1bitat", defaultChecked: true }), /*#__PURE__*/React.createElement(NS.Button, { type: "submit", size: "lg", fullWidth: true }, "Enviar y agendar"), sent ? /*#__PURE__*/React.createElement(NS.Toast, { title: "Recibimos tus datos" }, "Un asesor te contacta hoy mismo.") : null))); } Object.assign(window, { Contacto }); })(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/website/Contacto.jsx", error: String((e && e.message) || e) }); } // ui_kits/website/Departamentos.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function Departamentos({ onCta }) { const [rec, setRec] = React.useState("Todos"); const [onlyAvailable, setOnlyAvailable] = React.useState(false); const [selected, setSelected] = React.useState(UNITS[1].id); const list = UNITS.filter(u => (rec === "Todos" || String(u.rec) === rec) && (!onlyAvailable || u.status !== "Preventa")); const unit = UNITS.find(u => u.id === selected) || list[0]; return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("section", { style: { paddingTop: "var(--space-11)", paddingBottom: "var(--space-8)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "flex", flexDirection: "column", gap: "var(--space-6)" } }, /*#__PURE__*/React.createElement(SectionHead, { eyebrow: "Departamentos", title: "Elige el modelo que se adapta a tu vida", lead: "Cuatro distribuciones, todas con acabados de primera y terraza." }), /*#__PURE__*/React.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: "var(--space-6)", flexWrap: "wrap" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-2)", flexWrap: "wrap" } }, ["Todos", "1", "2", "3"].map(r => /*#__PURE__*/React.createElement(NS.Tag, { key: r, selected: rec === r, onClick: () => setRec(r) }, r === "Todos" ? "Todos los modelos" : r === "3" ? "3 recámaras" : `${r} recámara${r === "1" ? "" : "s"}`))), /*#__PURE__*/React.createElement(NS.Switch, { label: "Solo unidades disponibles", checked: onlyAvailable, onChange: setOnlyAvailable })))), /*#__PURE__*/React.createElement("section", { style: { paddingBottom: "var(--section-y)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "1fr 1.15fr", gap: "var(--space-9)", alignItems: "start" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-3)" } }, list.map(u => { const on = u.id === selected; return /*#__PURE__*/React.createElement("div", { key: u.id, onClick: () => setSelected(u.id), style: { display: "flex", gap: "var(--space-4)", padding: "var(--space-4)", cursor: "pointer", background: "var(--surface-card)", borderRadius: "var(--radius-card)", border: `1px solid ${on ? "var(--vh-verde)" : "var(--border-hairline)"}`, boxShadow: on ? "var(--shadow-md)" : "var(--shadow-xs)", transition: "var(--transition-control)" } }, /*#__PURE__*/React.createElement("img", { src: u.img, alt: u.name, style: { width: 108, height: 84, objectFit: "cover", borderRadius: "var(--radius-sm)" } }), /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 4, flex: 1 } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" } }, /*#__PURE__*/React.createElement("strong", { style: { fontFamily: "var(--font-display)", fontSize: 19, fontWeight: "var(--fw-display-regular)", color: "var(--text-heading)" } }, u.name), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--vh-verde)" } }, u.price)), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, u.m2, " m\xB2 \xB7 ", u.rec, " rec \xB7 ", u.tags.join(" · ")), /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(NS.Badge, { tone: u.status === "Preventa" ? "soft" : "warm" }, u.status)))); }), !list.length ? /*#__PURE__*/React.createElement("p", { style: { font: "var(--type-body)", color: "var(--text-muted)" } }, "No hay unidades con estos filtros. Escr\xEDbenos y te avisamos en cuanto se libere una.") : null), unit ? /*#__PURE__*/React.createElement(UnitDetail, { unit: unit, onCta: onCta }) : null))); } function UnitDetail({ unit, onCta }) { const [tab, setTab] = React.useState("Galería"); const gallery = [unit.img, A + "img-sala.png", A + "img-cocina-terraza.png"]; const [shot, setShot] = React.useState(0); React.useEffect(() => setShot(0), [unit.id]); return /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-5)", position: "sticky", top: 104 } }, /*#__PURE__*/React.createElement("div", { style: { position: "relative", borderRadius: "var(--radius-media)", overflow: "hidden" } }, /*#__PURE__*/React.createElement("img", { src: gallery[shot], alt: unit.name, style: { width: "100%", height: 380, objectFit: "cover" } }), /*#__PURE__*/React.createElement("span", { style: { position: "absolute", left: "var(--space-4)", top: "var(--space-4)" } }, /*#__PURE__*/React.createElement(NS.Badge, { tone: "inverse" }, unit.name, " \xB7 ", unit.m2, " m\xB2")), /*#__PURE__*/React.createElement("div", { style: { position: "absolute", right: "var(--space-4)", bottom: "var(--space-4)", display: "flex", gap: "var(--space-2)" } }, /*#__PURE__*/React.createElement(NS.IconButton, { name: "arrow-left", label: "Anterior", variant: "inverse", onClick: () => setShot(s => (s + gallery.length - 1) % gallery.length) }), /*#__PURE__*/React.createElement(NS.IconButton, { name: "arrow-right", label: "Siguiente", variant: "inverse", onClick: () => setShot(s => (s + 1) % gallery.length) }))), /*#__PURE__*/React.createElement(NS.Tabs, { items: ["Galería", "Distribución", "Acabados"], value: tab, onChange: setTab }), tab === "Galería" ? /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-2)" } }, gallery.map((g, i) => /*#__PURE__*/React.createElement("img", { key: g, src: g, alt: "", onClick: () => setShot(i), style: { width: 96, height: 68, objectFit: "cover", borderRadius: "var(--radius-sm)", cursor: "pointer", outline: i === shot ? "2px solid var(--vh-verde)" : "none", outlineOffset: 2 } }))) : tab === "Distribución" ? /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(2,1fr)", gap: "var(--space-3)" } }, [["Sala–comedor", "22 m²"], ["Cocina integral", "9 m²"], [`${unit.rec === 1 ? "Recámara" : "Recámara principal"}`, "14 m²"], ["Terraza", "8 m²"]].map(([k, v]) => /*#__PURE__*/React.createElement("div", { key: k, style: { display: "flex", justifyContent: "space-between", padding: "var(--space-3) var(--space-4)", background: "var(--surface-muted)", borderRadius: "var(--radius-sm)", font: "var(--type-body-sm)" } }, /*#__PURE__*/React.createElement("span", null, k), /*#__PURE__*/React.createElement("span", { style: { color: "var(--text-muted)" } }, v))), /*#__PURE__*/React.createElement("p", { style: { gridColumn: "1 / -1", font: "var(--type-body-sm)", color: "var(--text-muted)" } }, "El plano arquitect\xF3nico no ven\xEDa en el manual de identidad \u2014 se agrega cuando el equipo lo comparta.")) : /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column" } }, [["Pisos", "Porcelánico gran formato"], ["Cocina", "Cubierta de cuarzo y madera clara"], ["Ventanería", "Piso a techo con cancelería negra"]].map(([k, v]) => /*#__PURE__*/React.createElement("div", { key: k, style: { display: "flex", justifyContent: "space-between", padding: "var(--space-4) 0", borderBottom: "1px solid var(--border-hairline)", font: "var(--type-body-sm)" } }, /*#__PURE__*/React.createElement("span", { style: { color: "var(--text-heading)" } }, k), /*#__PURE__*/React.createElement("span", { style: { color: "var(--text-muted)" } }, v)))), /*#__PURE__*/React.createElement("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: "var(--space-4)", padding: "var(--space-5)", background: "var(--surface-warm)", borderRadius: "var(--radius-card)" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column" } }, /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", color: "var(--text-on-warm)" } }, "Desde"), /*#__PURE__*/React.createElement("span", { style: { fontFamily: "var(--font-display)", fontSize: 30, fontWeight: "var(--fw-display-light)", color: "var(--text-on-warm)" } }, unit.price)), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-2)" } }, /*#__PURE__*/React.createElement(NS.Tooltip, { label: "Descargar brochure" }, /*#__PURE__*/React.createElement(NS.IconButton, { name: "download", label: "Descargar brochure" })), /*#__PURE__*/React.createElement(NS.Button, { onClick: onCta }, "Agendar visita")))); } function Amenidades({ onCta }) { return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("section", { style: { position: "relative", minHeight: 380, display: "flex", alignItems: "flex-end", marginTop: -84 } }, /*#__PURE__*/React.createElement("img", { src: A + "img-cocina-terraza.png", alt: "Amenidades", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } }), /*#__PURE__*/React.createElement("span", { style: { position: "absolute", inset: 0, background: "var(--scrim-bottom)" } }), /*#__PURE__*/React.createElement("div", { style: { ...shell, position: "relative", paddingBottom: "var(--space-9)", paddingTop: 140 } }, /*#__PURE__*/React.createElement(SectionHead, { tone: "inverse", eyebrow: "Vanguardia y bienestar", title: "Amenidades", lead: "Espacios comunes dise\xF1ados para la vida moderna: trabajo, descanso, comunidad y movilidad." }))), /*#__PURE__*/React.createElement("section", { style: { padding: "var(--section-y) 0" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "1fr 1fr", gap: "0 var(--space-10)" } }, AMENITIES.map(a => /*#__PURE__*/React.createElement(AmenityRow, _extends({ key: a.title }, a))))), /*#__PURE__*/React.createElement("section", { style: { paddingBottom: "var(--section-y)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "2fr 1fr", gap: "var(--space-4)" } }, /*#__PURE__*/React.createElement("img", { src: A + "img-sala-comedor.png", alt: "Sala comedor", style: { borderRadius: "var(--radius-media)", height: 340, objectFit: "cover", width: "100%" } }), /*#__PURE__*/React.createElement(NS.Card, { tone: "inverse", padding: "var(--space-7)", style: { justifyContent: "space-between" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-3)" } }, /*#__PURE__*/React.createElement(Eyebrow, { tone: "inverse" }, "Pet friendly"), /*#__PURE__*/React.createElement("strong", { style: { fontFamily: "var(--font-display)", fontSize: 26, fontWeight: "var(--fw-display-light)", color: "var(--text-on-inverse)" } }, "Pet Park y 5% de \xE1reas verdes"), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "rgba(255,250,239,.72)" } }, "Porque tu h\xE1bitat tambi\xE9n es el de ellos.")), /*#__PURE__*/React.createElement(NS.Button, { variant: "inverse", onClick: onCta, style: { alignSelf: "flex-start" } }, "Agendar visita"))))); } Object.assign(window, { Departamentos, UnitDetail, Amenidades }); })(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/website/Departamentos.jsx", error: String((e && e.message) || e) }); } // ui_kits/website/Home.jsx try { (() => { function Hero({ onCta, onNavigate }) { return /*#__PURE__*/React.createElement("section", { style: { position: "relative", minHeight: 720, display: "flex", alignItems: "flex-end", marginTop: -84 } }, /*#__PURE__*/React.createElement("img", { src: A + "img-fachada.png", alt: "Fachada Vidrio H\xE1bitat", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", objectPosition: "center 30%" } }), /*#__PURE__*/React.createElement("span", { style: { position: "absolute", inset: 0, background: "var(--scrim-bottom)" } }), /*#__PURE__*/React.createElement("div", { style: { ...shell, position: "relative", paddingBottom: "var(--space-11)", paddingTop: 160, display: "flex", flexDirection: "column", gap: "var(--space-6)", width: "100%" } }, /*#__PURE__*/React.createElement(Eyebrow, { tone: "inverse" }, "Preventa \xB7 Colonia Americana"), /*#__PURE__*/React.createElement("h1", { style: { font: "var(--type-display-xl)", fontWeight: "var(--fw-display-light)", color: "var(--vh-marfil)", margin: 0, maxWidth: 15 + "em" } }, "Ven a vivir en la zona m\xE1s vibrante de Guadalajara"), /*#__PURE__*/React.createElement("p", { style: { font: "var(--type-body-lg)", color: "rgba(255,250,239,.86)", maxWidth: 52 + "ch" } }, "El desarrollo m\xE1s exclusivo en la colonia Americana. Pensado para quienes disfrutan lo mejor de la ciudad."), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-3)", flexWrap: "wrap", marginTop: "var(--space-2)" } }, /*#__PURE__*/React.createElement(NS.Button, { size: "lg", variant: "inverse", onClick: onCta }, "Agendar una visita"), /*#__PURE__*/React.createElement(NS.Button, { size: "lg", variant: "ghost", style: { color: "var(--vh-marfil)" }, onClick: () => onNavigate("departamentos") }, "Ver departamentos")))); } function Filosofia() { return /*#__PURE__*/React.createElement("section", { style: { padding: "var(--section-y) 0" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-10)", alignItems: "center" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-6)" } }, /*#__PURE__*/React.createElement(SectionHead, { eyebrow: "Nuestra filosof\xEDa", title: "Un proyecto moderno y vibrante", lead: "Vidrio H\xE1bitat te brindar\xE1 una experiencia de vida urbana \xFAnica: confort, seguridad, estilo y un entorno din\xE1mico que te inspirar\xE1 a llevar una vida de calidad." }), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-8)" } }, [["7", "niveles"], ["48", "departamentos"], ["5%", "áreas verdes"]].map(([n, l]) => /*#__PURE__*/React.createElement("div", { key: l, style: { display: "flex", flexDirection: "column", gap: 2 } }, /*#__PURE__*/React.createElement("span", { style: { fontFamily: "var(--font-display)", fontSize: 40, fontWeight: "var(--fw-display-light)", color: "var(--vh-verde)", lineHeight: 1 } }, n), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)", letterSpacing: "0.06em", textTransform: "uppercase", fontSize: 12 } }, l)))), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-2)", flexWrap: "wrap" } }, /*#__PURE__*/React.createElement(NS.Tag, { icon: "leaf" }, "Sustentable"), /*#__PURE__*/React.createElement(NS.Tag, { icon: "paw-print" }, "Pet friendly"), /*#__PURE__*/React.createElement(NS.Tag, { icon: "coffee" }, "A pie de comercios"))), /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-3)" } }, /*#__PURE__*/React.createElement("img", { src: A + "img-sala.png", alt: "Sala", style: { borderRadius: "var(--radius-media)", height: 250, objectFit: "cover", gridColumn: "1 / -1" } }), /*#__PURE__*/React.createElement("img", { src: A + "img-cocina-terraza.png", alt: "Cocina y terraza", style: { borderRadius: "var(--radius-media)", height: 190, objectFit: "cover" } }), /*#__PURE__*/React.createElement("img", { src: A + "img-recamara.png", alt: "Rec\xE1mara", style: { borderRadius: "var(--radius-media)", height: 190, objectFit: "cover" } })))); } function AmenidadesPreview({ onNavigate }) { return /*#__PURE__*/React.createElement("section", { style: { background: "var(--surface-warm)", padding: "var(--section-y) 0" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "flex", flexDirection: "column", gap: "var(--space-8)" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "flex-end", gap: "var(--space-6)", flexWrap: "wrap" } }, /*#__PURE__*/React.createElement(SectionHead, { eyebrow: "Comunidad y bienestar", title: "Amenidades pensadas para vivir mejor", max: 520 }), /*#__PURE__*/React.createElement(NS.Button, { variant: "secondary", onClick: () => onNavigate("amenidades") }, "Ver todas")), /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(4,1fr)", gap: "var(--space-4)" } }, AMENITIES.slice(0, 4).map(a => /*#__PURE__*/React.createElement(NS.Card, { key: a.title, padding: "var(--space-6)" }, /*#__PURE__*/React.createElement("span", { style: { color: "var(--vh-verde)" } }, /*#__PURE__*/React.createElement(NS.Icon, { name: a.icon, size: 26 })), /*#__PURE__*/React.createElement("strong", { style: { fontFamily: "var(--font-display)", fontSize: 19, fontWeight: "var(--fw-display-regular)", color: "var(--text-heading)" } }, a.title), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, a.body)))))); } function UnitsPreview({ onNavigate }) { return /*#__PURE__*/React.createElement("section", { style: { padding: "var(--section-y) 0" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "flex", flexDirection: "column", gap: "var(--space-8)" } }, /*#__PURE__*/React.createElement(SectionHead, { eyebrow: "Departamentos", title: "Cuatro modelos, un mismo h\xE1bitat", lead: "Desde 54 m\xB2 hasta un penthouse de 132 m\xB2 con roof privado." }), /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "repeat(4,1fr)", gap: "var(--space-4)" } }, UNITS.map(u => /*#__PURE__*/React.createElement(NS.Card, { key: u.id, media: u.img, mediaAlt: u.name, interactive: true, onClick: () => onNavigate("departamentos") }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", gap: "var(--space-2)" } }, /*#__PURE__*/React.createElement("strong", { style: { fontFamily: "var(--font-display)", fontSize: 20, fontWeight: "var(--fw-display-regular)", color: "var(--text-heading)" } }, u.name), /*#__PURE__*/React.createElement(NS.Badge, { tone: u.status === "Preventa" ? "soft" : "warm" }, u.status)), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, u.m2, " m\xB2 \xB7 ", u.rec, " ", u.rec === 1 ? "recámara" : "recámaras"), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body)", color: "var(--vh-verde)" } }, "Desde ", u.price)))))); } function Ubicacion() { return /*#__PURE__*/React.createElement("section", { style: { background: "var(--surface-inverse)", padding: "var(--section-y) 0", position: "relative", overflow: "hidden" } }, /*#__PURE__*/React.createElement(NS.Logo, { version: "isotipo", height: 520, opacity: 0.18, assetBase: A, style: { position: "absolute", right: "6%", top: "-8%" } }), /*#__PURE__*/React.createElement("div", { style: { ...shell, position: "relative", display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-10)", alignItems: "center" } }, /*#__PURE__*/React.createElement(SectionHead, { tone: "inverse", eyebrow: "Ubicaci\xF3n", title: "En el coraz\xF3n de la colonia Americana", lead: "Una zona con una rica oferta de comercios, restaurantes, ciclov\xEDas, librer\xEDas y cafeter\xEDas: tendr\xE1s m\xE1s que lo esencial para el disfrute de tu nuevo h\xE1bitat." }), /*#__PURE__*/React.createElement("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "var(--space-4)" } }, [["coffee", "Cafeterías a 2 min"], ["utensils", "Restaurantes de autor"], ["bike", "Ciclovía en la puerta"], ["book-open", "Librerías y cultura"]].map(([icon, label]) => /*#__PURE__*/React.createElement("div", { key: label, style: { display: "flex", gap: "var(--space-3)", alignItems: "center", padding: "var(--space-4)", border: "1px solid var(--border-on-inverse)", borderRadius: "var(--radius-card)" } }, /*#__PURE__*/React.createElement("span", { style: { color: "var(--vh-verde-suave)" } }, /*#__PURE__*/React.createElement(NS.Icon, { name: icon, size: 20 })), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-on-inverse)" } }, label)))))); } function ClosingCta({ onCta }) { return /*#__PURE__*/React.createElement("section", { style: { position: "relative", minHeight: 420, display: "flex", alignItems: "center" } }, /*#__PURE__*/React.createElement("img", { src: A + "img-sala-comedor.png", alt: "Interior", style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } }), /*#__PURE__*/React.createElement("span", { style: { position: "absolute", inset: 0, background: "var(--scrim-flat)" } }), /*#__PURE__*/React.createElement("div", { style: { ...shell, position: "relative", display: "flex", flexDirection: "column", gap: "var(--space-5)", alignItems: "center", textAlign: "center" } }, /*#__PURE__*/React.createElement("h2", { style: { font: "var(--type-display-lg)", fontWeight: "var(--fw-display-light)", color: "var(--vh-marfil)", margin: 0 } }, "Tu nuevo h\xE1bitat te espera"), /*#__PURE__*/React.createElement(NS.Button, { size: "lg", variant: "inverse", onClick: onCta }, "Agendar una visita"))); } function Home({ onNavigate, onCta }) { return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Hero, { onCta: onCta, onNavigate: onNavigate }), /*#__PURE__*/React.createElement(Filosofia, null), /*#__PURE__*/React.createElement(UnitsPreview, { onNavigate: onNavigate }), /*#__PURE__*/React.createElement(AmenidadesPreview, { onNavigate: onNavigate }), /*#__PURE__*/React.createElement(Ubicacion, null), /*#__PURE__*/React.createElement(ClosingCta, { onCta: onCta })); } Object.assign(window, { Home, Hero, Filosofia, AmenidadesPreview, UnitsPreview, Ubicacion, ClosingCta }); })(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/website/Home.jsx", error: String((e && e.message) || e) }); } // ui_kits/website/SiteChrome.jsx try { (() => { function SiteHeader({ route, onNavigate, onCta }) { const [solid, setSolid] = React.useState(false); React.useEffect(() => { const el = document.getElementById("scroller"); const fn = () => setSolid((el ? el.scrollTop : window.scrollY) > 40); (el || window).addEventListener("scroll", fn); return () => (el || window).removeEventListener("scroll", fn); }, []); const links = [["home", "Inicio"], ["departamentos", "Departamentos"], ["amenidades", "Amenidades"], ["contacto", "Contacto"]]; const onDark = route === "home" && !solid; return /*#__PURE__*/React.createElement("header", { style: { position: "sticky", top: 0, zIndex: 50, background: solid || route !== "home" ? "var(--surface-glass)" : "transparent", backdropFilter: solid || route !== "home" ? "var(--blur-glass)" : "none", borderBottom: `1px solid ${solid || route !== "home" ? "var(--border-hairline)" : "transparent"}`, transition: "var(--transition-control)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, height: 84, display: "flex", alignItems: "center", justifyContent: "space-between", gap: "var(--space-6)" } }, /*#__PURE__*/React.createElement("a", { href: "#", onClick: e => { e.preventDefault(); onNavigate("home"); }, style: { borderBottom: "none", display: "flex" } }, /*#__PURE__*/React.createElement(NS.Logo, { version: "logotipo", finish: onDark ? "white" : "color", height: 38, assetBase: A })), /*#__PURE__*/React.createElement("nav", { style: { display: "flex", gap: "var(--space-7)", alignItems: "center" } }, links.map(([k, label]) => /*#__PURE__*/React.createElement("a", { key: k, href: "#", onClick: e => { e.preventDefault(); onNavigate(k); }, style: { font: "var(--type-body-sm)", letterSpacing: "0.1em", textTransform: "uppercase", borderBottom: "none", color: route === k ? "var(--vh-verde)" : onDark ? "rgba(255,250,239,.86)" : "var(--text-body)" } }, label)), /*#__PURE__*/React.createElement(NS.Button, { size: "sm", variant: onDark ? "inverse" : "primary", onClick: onCta }, "Agendar visita")))); } function SiteFooter({ onNavigate }) { return /*#__PURE__*/React.createElement("footer", { style: { background: "var(--surface-inverse)", color: "var(--text-on-inverse)", paddingTop: "var(--space-11)", paddingBottom: "var(--space-8)" } }, /*#__PURE__*/React.createElement("div", { style: { ...shell, display: "grid", gridTemplateColumns: "1.4fr 1fr 1fr", gap: "var(--space-9)", alignItems: "start" } }, /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-5)" } }, /*#__PURE__*/React.createElement(NS.Logo, { version: "imagotipo", finish: "white", height: 130, assetBase: A }), /*#__PURE__*/React.createElement("p", { style: { font: "var(--type-body-sm)", color: "rgba(255,250,239,.72)", maxWidth: 320 } }, "Ven a vivir en la zona m\xE1s vibrante de Guadalajara. Tu nuevo h\xE1bitat te espera.")), /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-3)" } }, /*#__PURE__*/React.createElement(Eyebrow, { tone: "inverse" }, "Desarrollo"), [["departamentos", "Departamentos"], ["amenidades", "Amenidades"], ["contacto", "Agendar visita"]].map(([k, l]) => /*#__PURE__*/React.createElement("a", { key: k, href: "#", onClick: e => { e.preventDefault(); onNavigate(k); }, style: { font: "var(--type-body-sm)", color: "var(--text-on-inverse)", borderBottom: "none" } }, l))), /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-3)" } }, /*#__PURE__*/React.createElement(Eyebrow, { tone: "inverse" }, "Contacto"), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "rgba(255,250,239,.78)" } }, "Colonia Americana", /*#__PURE__*/React.createElement("br", null), "Guadalajara, Jalisco"), /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-2)", marginTop: "var(--space-2)" } }, /*#__PURE__*/React.createElement(NS.IconButton, { name: "instagram", label: "Instagram", variant: "inverse", size: "sm" }), /*#__PURE__*/React.createElement(NS.IconButton, { name: "facebook", label: "Facebook", variant: "inverse", size: "sm" }), /*#__PURE__*/React.createElement(NS.IconButton, { name: "phone", label: "Llamar", variant: "inverse", size: "sm" })))), /*#__PURE__*/React.createElement("div", { style: { ...shell, marginTop: "var(--space-9)", paddingTop: "var(--space-5)", borderTop: "1px solid var(--border-on-inverse)", display: "flex", justifyContent: "space-between", font: "var(--type-body-sm)", color: "rgba(255,250,239,.56)" } }, /*#__PURE__*/React.createElement("span", null, "\xA9 2026 Vidrio H\xE1bitat"), /*#__PURE__*/React.createElement("span", null, "Im\xE1genes de car\xE1cter ilustrativo"))); } Object.assign(window, { SiteHeader, SiteFooter }); })(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/website/SiteChrome.jsx", error: String((e && e.message) || e) }); } // ui_kits/website/shared.jsx try { (() => { const NS = window.VidrioHBitatDesignSystem_aa4b60; const A = "../../assets/"; const shell = { maxWidth: "var(--max-width-page)", margin: "0 auto", padding: "0 var(--gutter-inline)" }; function Eyebrow({ children, tone }) { return /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-eyebrow)", letterSpacing: "var(--ls-eyebrow)", textTransform: "uppercase", color: tone === "inverse" ? "rgba(255,250,239,.72)" : "var(--text-accent)" } }, children); } function SectionHead({ eyebrow, title, lead, tone, align = "left", max = 620 }) { return /*#__PURE__*/React.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "var(--space-4)", maxWidth: max, alignItems: align === "center" ? "center" : "flex-start", textAlign: align, margin: align === "center" ? "0 auto" : undefined } }, eyebrow ? /*#__PURE__*/React.createElement(Eyebrow, { tone: tone }, eyebrow) : null, /*#__PURE__*/React.createElement("h2", { style: { font: "var(--type-display-md)", fontWeight: "var(--fw-display-light)", color: tone === "inverse" ? "var(--text-on-inverse)" : "var(--text-heading)", margin: 0 } }, title), lead ? /*#__PURE__*/React.createElement("p", { style: { font: "var(--type-body-lg)", color: tone === "inverse" ? "rgba(255,250,239,.78)" : "var(--text-body)" } }, lead) : null); } function AmenityRow({ icon, title, body }) { return /*#__PURE__*/React.createElement("div", { style: { display: "flex", gap: "var(--space-4)", alignItems: "flex-start", padding: "var(--space-5) 0", borderBottom: "1px solid var(--border-hairline)" } }, /*#__PURE__*/React.createElement("span", { style: { color: "var(--vh-verde)", marginTop: 2 } }, /*#__PURE__*/React.createElement(NS.Icon, { name: icon, size: 22 })), /*#__PURE__*/React.createElement("span", { style: { display: "flex", flexDirection: "column", gap: 4 } }, /*#__PURE__*/React.createElement("strong", { style: { fontFamily: "var(--font-display)", fontSize: 19, fontWeight: "var(--fw-display-regular)", color: "var(--text-heading)" } }, title), /*#__PURE__*/React.createElement("span", { style: { font: "var(--type-body-sm)", color: "var(--text-muted)" } }, body))); } const UNITS = [{ id: "A", name: "Modelo A", rec: 1, m2: 54, price: "$3.9 MDP", img: A + "img-recamara.png", tags: ["Terraza", "Nivel 3"], status: "Preventa" }, { id: "B", name: "Modelo B", rec: 2, m2: 78, price: "$5.4 MDP", img: A + "img-sala-comedor.png", tags: ["Terraza", "Nivel 4"], status: "Preventa" }, { id: "C", name: "Modelo C", rec: 2, m2: 86, price: "$6.1 MDP", img: A + "img-cocina-terraza.png", tags: ["Doble altura", "Nivel 5"], status: "Últimas 2" }, { id: "PH", name: "Penthouse", rec: 3, m2: 132, price: "$9.8 MDP", img: A + "img-sala.png", tags: ["Roof privado", "Nivel 7"], status: "1 disponible" }]; const AMENITIES = [{ icon: "sun", title: "Roof garden con asadores", body: "Terraza social con vista a la Colonia Americana." }, { icon: "dumbbell", title: "Acondicionamiento físico", body: "Gimnasio equipado y área funcional." }, { icon: "laptop", title: "Co-working", body: "Salas de trabajo y videollamada para residentes." }, { icon: "paw-print", title: "Pet Park", body: "Zona pet friendly dentro del desarrollo." }, { icon: "plug-zap", title: "Carga para autos eléctricos", body: "Estacionamiento preparado para movilidad eléctrica." }, { icon: "shield-check", title: "Seguridad inteligente", body: "Acceso controlado y monitoreo 24/7." }, { icon: "leaf", title: "5% de áreas verdes", body: "Vegetación integrada a la vida urbana." }, { icon: "bike", title: "Ciclovías a la puerta", body: "Conexión directa con la ciudad a pie o en bici." }]; Object.assign(window, { NS, A, shell, Eyebrow, SectionHead, AmenityRow, UNITS, AMENITIES }); })(); } catch (e) { __ds_ns.__errors.push({ path: "ui_kits/website/shared.jsx", error: String((e && e.message) || e) }); } __ds_ns.Logo = __ds_scope.Logo; __ds_ns.Badge = __ds_scope.Badge; __ds_ns.Button = __ds_scope.Button; __ds_ns.Card = __ds_scope.Card; __ds_ns.ICON_CDN = __ds_scope.ICON_CDN; __ds_ns.Icon = __ds_scope.Icon; __ds_ns.IconButton = __ds_scope.IconButton; __ds_ns.Tag = __ds_scope.Tag; __ds_ns.Dialog = __ds_scope.Dialog; __ds_ns.Toast = __ds_scope.Toast; __ds_ns.Tooltip = __ds_scope.Tooltip; __ds_ns.Checkbox = __ds_scope.Checkbox; __ds_ns.Input = __ds_scope.Input; __ds_ns.Radio = __ds_scope.Radio; __ds_ns.Select = __ds_scope.Select; __ds_ns.Switch = __ds_scope.Switch; __ds_ns.Tabs = __ds_scope.Tabs; })();