lf-pagebuilder-vue 0.0.115 → 0.0.117
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -27,9 +27,9 @@ var LfPagebuilder=(function(za){"use strict";var dfe=Object.defineProperty;var u
|
|
|
27
27
|
* @vue/runtime-dom v3.5.28
|
|
28
28
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
29
29
|
* @license MIT
|
|
30
|
-
**/let q6;const zk=typeof window<"u"&&window.trustedTypes;if(zk)try{q6=zk.createPolicy("vue",{createHTML:t=>t})}catch{}const Vk=q6?t=>q6.createHTML(t):t=>t,LH="http://www.w3.org/2000/svg",AH="http://www.w3.org/1998/Math/MathML",xs=typeof document<"u"?document:null,Zk=xs&&xs.createElement("template"),Bk={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,o)=>{const r=e==="svg"?xs.createElementNS(LH,t):e==="mathml"?xs.createElementNS(AH,t):n?xs.createElement(t,{is:n}):xs.createElement(t);return t==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:t=>xs.createTextNode(t),createComment:t=>xs.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>xs.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,o,r,a){const i=n?n.previousSibling:e.lastChild;if(r&&(r===a||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Zk.innerHTML=Vk(o==="svg"?`<svg>${t}</svg>`:o==="mathml"?`<math>${t}</math>`:t);const l=Zk.content;if(o==="svg"||o==="mathml"){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},k0="transition",em="animation",Pd=Symbol("_vtc"),Fk={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hk=w0({},h6,Fk),Uk=(t=>(t.displayName="Transition",t.props=Hk,t))((t,{slots:e})=>j3(PS,qk(t),e)),i1=(t,e=[])=>{q2(t)?t.forEach(n=>n(...e)):t&&t(...e)},Xk=t=>t?q2(t)?t.some(e=>e.length>1):t.length>1:!1;function qk(t){const e={};for(const K in t)K in Fk||(e[K]=t[K]);if(t.css===!1)return e;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:u=i,appearToClass:p=l,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,x=PH(r),k=x&&x[0],M=x&&x[1],{onBeforeEnter:A,onEnter:N,onEnterCancelled:w,onLeave:L,onLeaveCancelled:P,onBeforeAppear:Z=A,onAppear:V=N,onAppearCancelled:q=w}=e,F=(K,ce,ve,Te)=>{K._enterCancelled=Te,T0(K,ce?p:l),T0(K,ce?u:i),ve&&ve()},W=(K,ce)=>{K._isLeaving=!1,T0(K,m),T0(K,v),T0(K,b),ce&&ce()},ee=K=>(ce,ve)=>{const Te=K?V:N,Y=()=>F(ce,K,ve);i1(Te,[ce,Y]),Wk(()=>{T0(ce,K?s:a),$l(ce,K?p:l),Xk(Te)||Gk(ce,o,k,Y)})};return w0(e,{onBeforeEnter(K){i1(A,[K]),$l(K,a),$l(K,i)},onBeforeAppear(K){i1(Z,[K]),$l(K,s),$l(K,u)},onEnter:ee(!1),onAppear:ee(!0),onLeave(K,ce){K._isLeaving=!0;const ve=()=>W(K,ce);$l(K,m),K._enterCancelled?($l(K,b),G6(K)):(G6(K),$l(K,b)),Wk(()=>{K._isLeaving&&(T0(K,m),$l(K,v),Xk(L)||Gk(K,o,M,ve))}),i1(L,[K,ve])},onEnterCancelled(K){F(K,!1,void 0,!0),i1(w,[K])},onAppearCancelled(K){F(K,!0,void 0,!0),i1(q,[K])},onLeaveCancelled(K){W(K),i1(P,[K])}})}function PH(t){if(t==null)return null;if(B6(t))return[W6(t.enter),W6(t.leave)];{const e=W6(t);return[e,e]}}function W6(t){return X6(t)}function $l(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[Pd]||(t[Pd]=new Set)).add(e)}function T0(t,e){e.split(/\s+/).forEach(o=>o&&t.classList.remove(o));const n=t[Pd];n&&(n.delete(e),n.size||(t[Pd]=void 0))}function Wk(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let NH=0;function Gk(t,e,n,o){const r=t._endId=++NH,a=()=>{r===t._endId&&o()};if(n!=null)return setTimeout(a,n);const{type:i,timeout:l,propCount:s}=Yk(t,e);if(!i)return o();const u=i+"end";let p=0;const m=()=>{t.removeEventListener(u,b),a()},b=v=>{v.target===t&&++p>=s&&m()};setTimeout(()=>{p<s&&m()},l+1),t.addEventListener(u,b)}function Yk(t,e){const n=window.getComputedStyle(t),o=x=>(n[x]||"").split(", "),r=o(`${k0}Delay`),a=o(`${k0}Duration`),i=Kk(r,a),l=o(`${em}Delay`),s=o(`${em}Duration`),u=Kk(l,s);let p=null,m=0,b=0;e===k0?i>0&&(p=k0,m=i,b=a.length):e===em?u>0&&(p=em,m=u,b=s.length):(m=Math.max(i,u),p=m>0?i>u?k0:em:null,b=p?p===k0?a.length:s.length:0);const v=p===k0&&/\b(?:transform|all)(?:,|$)/.test(o(`${k0}Property`).toString());return{type:p,timeout:m,propCount:b,hasTransform:v}}function Kk(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max(...e.map((n,o)=>Jk(n)+Jk(t[o])))}function Jk(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function G6(t){return(t?t.ownerDocument:document).body.offsetHeight}function jH(t,e,n){const o=t[Pd];o&&(e=(e?[e,...o]:[...o]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const R3=Symbol("_vod"),eT=Symbol("_vsh"),tm={name:"show",beforeMount(t,{value:e},{transition:n}){t[R3]=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):nm(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:o}){!e!=!n&&(o?e?(o.beforeEnter(t),nm(t,!0),o.enter(t)):o.leave(t,()=>{nm(t,!1)}):nm(t,e))},beforeUnmount(t,{value:e}){nm(t,e)}};function nm(t,e){t.style.display=e?t[R3]:"none",t[eT]=!e}function _H(){tm.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const tT=Symbol("");function IH(t){const e=E2();if(!e)return;const n=e.ut=(r=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>Q3(a,r))},o=()=>{const r=t(e.proxy);e.ce?Q3(e.ce,r):Y6(e.subTree,r),n(r)};v6(()=>{Ip(o)}),Ci(()=>{X2(o,gH,{flush:"post"});const r=new MutationObserver(o);r.observe(e.subTree.el.parentNode,{childList:!0}),Md(()=>r.disconnect())})}function Y6(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Y6(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)Q3(t.el,e);else if(t.type===pn)t.children.forEach(n=>Y6(n,e));else if(t.type===o1){let{el:n,anchor:o}=t;for(;n&&(Q3(n,e),n!==o);)n=n.nextSibling}}function Q3(t,e){if(t.nodeType===1){const n=t.style;let o="";for(const r in e){const a=$H(e[r]);n.setProperty(`--${r}`,a),o+=`--${r}: ${a};`}n[tT]=o}}const RH=/(?:^|;)\s*display\s*:/;function QH(t,e,n){const o=t.style,r=Ad(n);let a=!1;if(n&&!r){if(e)if(Ad(e))for(const i of e.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&D3(o,l,"")}else for(const i in e)n[i]==null&&D3(o,i,"");for(const i in n)i==="display"&&(a=!0),D3(o,i,n[i])}else if(r){if(e!==n){const i=o[tT];i&&(n+=";"+i),o.cssText=n,a=RH.test(n)}}else e&&t.removeAttribute("style");R3 in t&&(t[R3]=a?o.display:"",t[eT]&&(o.display="none"))}const nT=/\s*!important$/;function D3(t,e,n){if(q2(n))n.forEach(o=>D3(t,e,o));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const o=DH(t,e);nT.test(n)?t.setProperty(O0(o),n.replace(nT,""),"important"):t[o]=n}}const oT=["Webkit","Moz","ms"],K6={};function DH(t,e){const n=K6[e];if(n)return n;let o=H2(e);if(o!=="filter"&&o in t)return K6[e]=o;o=kH(o);for(let r=0;r<oT.length;r++){const a=oT[r]+o;if(a in t)return K6[e]=a}return e}const rT="http://www.w3.org/1999/xlink";function aT(t,e,n,o,r,a=EH(e)){o&&e.startsWith("xlink:")?n==null?t.removeAttributeNS(rT,e.slice(6,e.length)):t.setAttributeNS(rT,e,n):n==null||a&&!Dk(n)?t.removeAttribute(e):t.setAttribute(e,a?"":Z6(n)?String(n):n)}function iT(t,e,n,o,r){if(e==="innerHTML"||e==="textContent"){n!=null&&(t[e]=e==="innerHTML"?Vk(n):n);return}const a=t.tagName;if(e==="value"&&a!=="PROGRESS"&&!a.includes("-")){const l=a==="OPTION"?t.getAttribute("value")||"":t.value,s=n==null?t.type==="checkbox"?"on":"":String(n);(l!==s||!("_value"in t))&&(t.value=s),n==null&&t.removeAttribute(e),t._value=n;return}let i=!1;if(n===""||n==null){const l=typeof t[e];l==="boolean"?n=Dk(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{t[e]=n}catch{}i&&t.removeAttribute(r||e)}function ws(t,e,n,o){t.addEventListener(e,n,o)}function zH(t,e,n,o){t.removeEventListener(e,n,o)}const lT=Symbol("_vei");function VH(t,e,n,o,r=null){const a=t[lT]||(t[lT]={}),i=a[e];if(o&&i)i.value=o;else{const[l,s]=ZH(e);if(o){const u=a[e]=HH(o,r);ws(t,l,u,s)}else i&&(zH(t,l,i,s),a[e]=void 0)}}const sT=/(?:Once|Passive|Capture)$/;function ZH(t){let e;if(sT.test(t)){e={};let o;for(;o=t.match(sT);)t=t.slice(0,t.length-o[0].length),e[o[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):O0(t.slice(2)),e]}let J6=0;const BH=Promise.resolve(),FH=()=>J6||(BH.then(()=>J6=0),J6=Date.now());function HH(t,e){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;gi(UH(o,n.value),e,5,[o])};return n.value=t,n.attached=FH(),n}function UH(t,e){if(q2(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(o=>r=>!r._stopped&&o&&o(r))}else return e}const cT=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,dT=(t,e,n,o,r,a)=>{const i=r==="svg";e==="class"?jH(t,o,i):e==="style"?QH(t,n,o):vH(e)?CH(e)||VH(t,e,n,o,a):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):XH(t,e,o,i))?(iT(t,e,o),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&aT(t,e,o,i,a,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!Ad(o))?iT(t,_3(e),o,a,e):(e==="true-value"?t._trueValue=o:e==="false-value"&&(t._falseValue=o),aT(t,e,o,i))};function XH(t,e,n,o){if(o)return!!(e==="innerHTML"||e==="textContent"||e in t&&cT(e)&&Rk(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const r=t.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return cT(e)&&Ad(n)?!1:e in t}const uT={};function pT(t,e,n){let o=S2(t,e);Qk(o)&&(o=w0({},o,e));class r extends z3{constructor(i){super(o,i,n)}}return r.def=o,r}const qH=((t,e)=>pT(t,e,LT)),WH=typeof HTMLElement<"u"?HTMLElement:class{};class z3 extends WH{constructor(e,n={},o=im){super(),this._def=e,this._props=n,this._createApp=o,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&o!==im?this._root=this.shadowRoot:e.shadowRoot!==!1?(this.attachShadow(w0({},e.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let e=this;for(;e=e&&(e.parentNode||e.host);)if(e instanceof z3){this._parent=e;break}this._instance||(this._resolved?this._mount(this._def):e&&e._pendingResolve?this._pendingResolve=e._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(e=this._parent){e&&(this._instance.parent=e._instance,this._inheritParentContext(e))}_inheritParentContext(e=this._parent){e&&this._app&&Object.setPrototypeOf(this._app._context.provides,e._instance.provides)}disconnectedCallback(){this._connected=!1,xd(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(e){for(const n of e)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let o=0;o<this.attributes.length;o++)this._setAttr(this.attributes[o].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});const e=(o,r=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:a,styles:i}=o;let l;if(a&&!q2(a))for(const s in a){const u=a[s];(u===Number||u&&u.type===Number)&&(s in this._props&&(this._props[s]=X6(this._props[s])),(l||(l=Object.create(null)))[_3(s)]=!0)}this._numberProps=l,this._resolveProps(o),this.shadowRoot&&this._applyStyles(i),this._mount(o)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(o=>{o.configureApp=this._def.configureApp,e(this._def=o,!0)}):e(this._def)}_mount(e){this._app=this._createApp(e),this._inheritParentContext(),e.configureApp&&e.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const o in n)xH(this,o)||Object.defineProperty(this,o,{get:()=>Ir(n[o])})}_resolveProps(e){const{props:n}=e,o=q2(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&o.includes(r)&&this._setProp(r,this[r]);for(const r of o.map(_3))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(a){this._setProp(r,a,!0,!this._patching)}})}_setAttr(e){if(e.startsWith("data-v-"))return;const n=this.hasAttribute(e);let o=n?this.getAttribute(e):uT;const r=_3(e);n&&this._numberProps&&this._numberProps[r]&&(o=X6(o)),this._setProp(r,o,!1,!0)}_getProp(e){return this._props[e]}_setProp(e,n,o=!0,r=!1){if(n!==this._props[e]&&(this._dirty=!0,n===uT?delete this._props[e]:(this._props[e]=n,e==="key"&&this._app&&(this._app._ceVNode.key=n)),r&&this._instance&&this._update(),o)){const a=this._ob;a&&(this._processMutations(a.takeRecords()),a.disconnect()),n===!0?this.setAttribute(O0(e),""):typeof n=="string"||typeof n=="number"?this.setAttribute(O0(e),n+""):n||this.removeAttribute(O0(e)),a&&a.observe(this,{attributes:!0})}}_update(){const e=this._createVNode();this._app&&(e.appContext=this._app._context),$T(e,this._root)}_createVNode(){const e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUpdated=this._renderSlots.bind(this));const n=Hn(this._def,w0(e,this._props));return this._instance||(n.ce=o=>{this._instance=o,o.ce=this,o.isCE=!0;const r=(a,i)=>{this.dispatchEvent(new CustomEvent(a,Qk(i[0])?w0({detail:i},i[0]):{detail:i}))};o.emit=(a,...i)=>{r(a,i),O0(a)!==a&&r(O0(a),i)},this._setParent()}),n}_applyStyles(e,n){if(!e)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce;for(let r=e.length-1;r>=0;r--){const a=document.createElement("style");o&&a.setAttribute("nonce",o),a.textContent=e[r],this.shadowRoot.prepend(a)}}_parseSlots(){const e=this._slots={};let n;for(;n=this.firstChild;){const o=n.nodeType===1&&n.getAttribute("slot")||"default";(e[o]||(e[o]=[])).push(n),this.removeChild(n)}}_renderSlots(){const e=this._getSlots(),n=this._instance.type.__scopeId;for(let o=0;o<e.length;o++){const r=e[o],a=r.getAttribute("name")||"default",i=this._slots[a],l=r.parentNode;if(i)for(const s of i){if(n&&s.nodeType===1){const u=n+"-s",p=document.createTreeWalker(s,1);s.setAttribute(u,"");let m;for(;m=p.nextNode();)m.setAttribute(u,"")}l.insertBefore(s,r)}else for(;r.firstChild;)l.insertBefore(r.firstChild,r);l.removeChild(r)}}_getSlots(){const e=[this];this._teleportTargets&&e.push(...this._teleportTargets);const n=new Set;for(const o of e){const r=o.querySelectorAll("slot");for(let a=0;a<r.length;a++)n.add(r[a])}return Array.from(n)}_injectChildStyle(e){this._applyStyles(e.styles,e)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_hasShadowRoot(){return this._def.shadowRoot!==!1}_removeChildStyle(e){}}function mT(t){const e=E2(),n=e&&e.ce;return n||null}function GH(){const t=mT();return t&&t.shadowRoot}function YH(t="$style"){{const e=E2();if(!e)return V6;const n=e.type.__cssModules;if(!n)return V6;const o=n[t];return o||V6}}const hT=new WeakMap,fT=new WeakMap,V3=Symbol("_moveCb"),bT=Symbol("_enterCb"),KH=(t=>(delete t.props.mode,t))({name:"TransitionGroup",props:w0({},Hk,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=E2(),o=m6();let r,a;return O3(()=>{if(!r.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!nU(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(JH),r.forEach(eU);const l=r.filter(tU);G6(n.vnode.el),l.forEach(s=>{const u=s.el,p=u.style;$l(u,i),p.transform=p.webkitTransform=p.transitionDuration="";const m=u[V3]=b=>{b&&b.target!==u||(!b||b.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",m),u[V3]=null,T0(u,i))};u.addEventListener("transitionend",m)}),r=[]}),()=>{const i=mo(t),l=qk(i);let s=i.tag||pn;if(r=[],a)for(let u=0;u<a.length;u++){const p=a[u];p.el&&p.el instanceof Element&&(r.push(p),bs(p,Sd(p,l,o,n)),hT.set(p,gT(p.el)))}a=e.default?b3(e.default()):[];for(let u=0;u<a.length;u++){const p=a[u];p.key!=null&&bs(p,Sd(p,l,o,n))}return Hn(s,null,a)}}});function JH(t){const e=t.el;e[V3]&&e[V3](),e[bT]&&e[bT]()}function eU(t){fT.set(t,gT(t.el))}function tU(t){const e=hT.get(t),n=fT.get(t),o=e.left-n.left,r=e.top-n.top;if(o||r){const a=t.el,i=a.style,l=a.getBoundingClientRect();let s=1,u=1;return a.offsetWidth&&(s=l.width/a.offsetWidth),a.offsetHeight&&(u=l.height/a.offsetHeight),(!Number.isFinite(s)||s===0)&&(s=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(s-1)<.01&&(s=1),Math.abs(u-1)<.01&&(u=1),i.transform=i.webkitTransform=`translate(${o/s}px,${r/u}px)`,i.transitionDuration="0s",t}}function gT(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top}}function nU(t,e,n){const o=t.cloneNode(),r=t[Pd];r&&r.forEach(l=>{l.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(o);const{hasTransform:i}=Yk(o);return a.removeChild(o),i}const E0=t=>{const e=t.props["onUpdate:modelValue"]||!1;return q2(e)?n=>TH(e,n):e};function oU(t){t.target.composing=!0}function vT(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const yi=Symbol("_assign");function CT(t,e,n){return e&&(t=t.trim()),n&&(t=U6(t)),t}const Ta={created(t,{modifiers:{lazy:e,trim:n,number:o}},r){t[yi]=E0(r);const a=o||r.props&&r.props.type==="number";ws(t,e?"change":"input",i=>{i.target.composing||t[yi](CT(t.value,n,a))}),(n||a)&&ws(t,"change",()=>{t.value=CT(t.value,n,a)}),e||(ws(t,"compositionstart",oU),ws(t,"compositionend",vT),ws(t,"change",vT))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:o,trim:r,number:a}},i){if(t[yi]=E0(i),t.composing)return;const l=(a||t.type==="number")&&!/^0\d/.test(t.value)?U6(t.value):t.value,s=e??"";l!==s&&(document.activeElement===t&&t.type!=="range"&&(o&&e===n||r&&t.value.trim()===s)||(t.value=s))}},l1={deep:!0,created(t,e,n){t[yi]=E0(n),ws(t,"change",()=>{const o=t._modelValue,r=Nd(t),a=t.checked,i=t[yi];if(q2(o)){const l=I3(o,r),s=l!==-1;if(a&&!s)i(o.concat(r));else if(!a&&s){const u=[...o];u.splice(l,1),i(u)}}else if(Jp(o)){const l=new Set(o);a?l.add(r):l.delete(r),i(l)}else i(wT(t,a))})},mounted:yT,beforeUpdate(t,e,n){t[yi]=E0(n),yT(t,e,n)}};function yT(t,{value:e,oldValue:n},o){t._modelValue=e;let r;if(q2(e))r=I3(e,o.props.value)>-1;else if(Jp(e))r=e.has(o.props.value);else{if(e===n)return;r=S0(e,wT(t,!0))}t.checked!==r&&(t.checked=r)}const om={created(t,{value:e},n){t.checked=S0(e,n.props.value),t[yi]=E0(n),ws(t,"change",()=>{t[yi](Nd(t))})},beforeUpdate(t,{value:e,oldValue:n},o){t[yi]=E0(o),e!==n&&(t.checked=S0(e,o.props.value))}},W2={deep:!0,created(t,{value:e,modifiers:{number:n}},o){const r=Jp(e);ws(t,"change",()=>{const a=Array.prototype.filter.call(t.options,i=>i.selected).map(i=>n?U6(Nd(i)):Nd(i));t[yi](t.multiple?r?new Set(a):a:a[0]),t._assigning=!0,xd(()=>{t._assigning=!1})}),t[yi]=E0(o)},mounted(t,{value:e}){xT(t,e)},beforeUpdate(t,e,n){t[yi]=E0(n)},updated(t,{value:e}){t._assigning||xT(t,e)}};function xT(t,e){const n=t.multiple,o=q2(e);if(!(n&&!o&&!Jp(e))){for(let r=0,a=t.options.length;r<a;r++){const i=t.options[r],l=Nd(i);if(n)if(o){const s=typeof l;s==="string"||s==="number"?i.selected=e.some(u=>String(u)===String(l)):i.selected=I3(e,l)>-1}else i.selected=e.has(l);else if(S0(Nd(i),e)){t.selectedIndex!==r&&(t.selectedIndex=r);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function Nd(t){return"_value"in t?t._value:t.value}function wT(t,e){const n=e?"_trueValue":"_falseValue";return n in t?t[n]:e}const OT={created(t,e,n){Z3(t,e,n,null,"created")},mounted(t,e,n){Z3(t,e,n,null,"mounted")},beforeUpdate(t,e,n,o){Z3(t,e,n,o,"beforeUpdate")},updated(t,e,n,o){Z3(t,e,n,o,"updated")}};function ST(t,e){switch(t){case"SELECT":return W2;case"TEXTAREA":return Ta;default:switch(e){case"checkbox":return l1;case"radio":return om;default:return Ta}}}function Z3(t,e,n,o,r){const i=ST(t.tagName,n.props&&n.props.type)[r];i&&i(t,e,n,o)}function rU(){Ta.getSSRProps=({value:t})=>({value:t}),om.getSSRProps=({value:t},e)=>{if(e.props&&S0(e.props.value,t))return{checked:!0}},l1.getSSRProps=({value:t},e)=>{if(q2(t)){if(e.props&&I3(t,e.props.value)>-1)return{checked:!0}}else if(Jp(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},OT.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const n=ST(e.type.toUpperCase(),e.props&&e.props.type);if(n.getSSRProps)return n.getSSRProps(t,e)}}const aU=["ctrl","shift","alt","meta"],iU={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>aU.some(n=>t[`${n}Key`]&&!e.includes(n))},rm=(t,e)=>{if(!t)return t;const n=t._withMods||(t._withMods={}),o=e.join(".");return n[o]||(n[o]=((r,...a)=>{for(let i=0;i<e.length;i++){const l=iU[e[i]];if(l&&l(r,e))return}return t(r,...a)}))},lU={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},sU=(t,e)=>{const n=t._withKeys||(t._withKeys={}),o=e.join(".");return n[o]||(n[o]=(r=>{if(!("key"in r))return;const a=O0(r.key);if(e.some(i=>i===a||lU[i]===a))return t(r)}))},kT=w0({patchProp:dT},Bk);let am,TT=!1;function ET(){return am||(am=hk(kT))}function MT(){return am=TT?am:fk(kT),TT=!0,am}const $T=((...t)=>{ET().render(...t)}),cU=((...t)=>{MT().hydrate(...t)}),im=((...t)=>{const e=ET().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=PT(o);if(!r)return;const a=e._component;!Rk(a)&&!a.render&&!a.template&&(a.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,AT(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},e}),LT=((...t)=>{const e=MT().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=PT(o);if(r)return n(r,!0,AT(r))},e});function AT(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function PT(t){return Ad(t)?document.querySelector(t):t}let NT=!1;const dU=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:PS,BaseTransitionPropsValidators:h6,Comment:Dr,DeprecationTypes:fH,EffectScope:q8,ErrorCodes:TB,ErrorTypeStrings:cH,Fragment:pn,KeepAlive:eF,ReactiveEffect:kp,Static:o1,Suspense:BF,Teleport:$S,Text:x0,TrackOpTypes:KZ,Transition:Uk,TransitionGroup:KH,TriggerOpTypes:JZ,VueElement:z3,assertNumber:kB,callWithAsyncErrorHandling:gi,callWithErrorHandling:Jc,camelize:H2,capitalize:s3,cloneVNode:Ml,compatUtils:hH,computed:qr,createApp:im,createBlock:El,createCommentVNode:tn,createElementBlock:Ce,createElementVNode:B,createHydrationRenderer:fk,createPropsRestProxy:yF,createRenderer:hk,createSSRApp:LT,createSlots:aF,createStaticVNode:Ek,createTextVNode:Oo,createVNode:Hn,customRef:eS,defineAsyncComponent:JB,defineComponent:S2,defineCustomElement:pT,defineEmits:dF,defineExpose:uF,defineModel:hF,defineOptions:pF,defineProps:cF,defineSSRCustomElement:qH,defineSlots:mF,devtools:dH,effect:yZ,effectScope:gZ,getCurrentInstance:E2,getCurrentScope:NO,getCurrentWatcher:eB,getTransitionRawChildren:b3,guardReactiveProps:Tk,h:j3,handleError:e1,hasInjectionContext:NB,hydrate:cU,hydrateOnIdle:XB,hydrateOnInteraction:YB,hydrateOnMediaQuery:GB,hydrateOnVisible:WB,initCustomFormatter:iH,initDirectivesForSSR:()=>{NT||(NT=!0,rU(),_H())},inject:Dp,isMemoSame:jk,isProxy:Ap,isReactive:hs,isReadonly:wl,isRef:_r,isRuntimeOnly:tH,isShallow:O2,isVNode:Cs,markRaw:KO,mergeDefaults:vF,mergeModels:CF,mergeProps:I6,nextTick:xd,nodeOps:Bk,normalizeClass:Zo,normalizeProps:gB,normalizeStyle:U2,onActivated:DS,onBeforeMount:ZS,onBeforeUnmount:Hp,onBeforeUpdate:v6,onDeactivated:zS,onErrorCaptured:US,onMounted:Ci,onRenderTracked:HS,onRenderTriggered:FS,onScopeDispose:vZ,onServerPrefetch:BS,onUnmounted:Md,onUpdated:O3,onWatcherCleanup:nS,openBlock:fe,patchProp:dT,popScopeId:AB,provide:vS,proxyRefs:a6,pushScopeId:LB,queuePostFlushCb:Ip,reactive:Wc,readonly:n3,ref:rn,registerRuntimeCompiler:eH,render:$T,renderList:Bo,renderSlot:iF,resolveComponent:y6,resolveDirective:rF,resolveDynamicComponent:oF,resolveFilter:mH,resolveTransitionHooks:Sd,setBlockTracking:Yp,setDevtoolsHook:uH,setTransitionHooks:bs,shallowReactive:YO,shallowReadonly:zZ,shallowRef:r6,ssrContextKey:CS,ssrUtils:pH,stop:xZ,toDisplayString:Yt,toHandlerKey:jp,toHandlers:lF,toRaw:mo,toRef:WZ,toRefs:UZ,toValue:BZ,transformVNodeArgs:WF,triggerRef:ZZ,unref:Ir,useAttrs:gF,useCssModule:YH,useCssVars:IH,useHost:mT,useId:DB,useModel:$F,useSSRContext:yS,useShadowRoot:GH,useSlots:bF,useTemplateRef:zB,useTransitionState:m6,vModelCheckbox:l1,vModelDynamic:OT,vModelRadio:om,vModelSelect:W2,vModelText:Ta,vShow:tm,version:_k,warn:sH,watch:X2,watchEffect:jB,watchPostEffect:_B,watchSyncEffect:xS,withAsyncContext:xF,withCtx:Od,withDefaults:fF,withDirectives:wo,withKeys:sU,withMemo:lH,withModifiers:rm,withScopeId:PB},Symbol.toStringTag,{value:"Module"})),uU=[{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Button",category:"CTA",name:"Botón en Astro",description:"Botón de prueba en Astro",framework:"Astro",priority:1,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en Astro"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}],repeat_data:null}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Author_2025_Algarve",category:"Contenido de Imagen",name:"Ficha de autor con imagen y tiempo de lectura 2025",description:'Ficha compacta de autor para cabeceras de artículo: imagen a la izquierda (con border-radius configurable), nombre subrayado y profesión a la derecha, y bloque opcional de "tiempo de lectura" al final. Incluye structured data schema.org. Para la corporativa de Lefebvre',framework:"Astro",priority:1,tags:["autor","imagen","blog","cabecera","tiempo"],fields:[{name:"nameAuthor",type:"text",help:'Nombre del autor. Se renderiza como párrafo subrayado (Inter 16px color #262626) y admite HTML (set:html). También se usa en el structured data (schema.org) como "name" y "headline". Conviene que ocupe una sola línea',label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:'Profesión o descripción del autor. Se renderiza como párrafo (Inter 14px color #363942) debajo del nombre y admite HTML (set:html). También se usa en el structured data como "description". Conviene que ocupe una sola línea',label:"Descripción del autor",mandatory:!1,example_value:"Abogada especialista en Derecho Fiscal con 15 años de experiencia"},{name:"imageAuthor",type:"image",help:"URL de la imagen del autor (se renderiza a la izquierda con aspect-ratio cuadrado y object-cover). Se muestra siempre; si se deja vacía, aparecerá una imagen rota",label:"Src de la imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la imagen para accesibilidad (atributo alt). Recomendado rellenar aunque la imagen sea decorativa",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"minutes",type:"text",help:"Minutos de lectura del artículo. Se pasa al componente Tiempo_2025_Londres que se renderiza al final de la ficha. TERNARIO: si se deja vacío, el bloque de tiempo de lectura NO se muestra en absoluto",label:"Minutos de lectura",mandatory:!1,example_value:"20"},{name:"borderRadius",type:"text",help:'Redondeo aplicado a la imagen del autor. SOLO se aceptan estos valores exactos: "sm" (rounded-sm), "md" (rounded-md), "lg" (rounded-lg), "full" (círculo completo — foto tipo avatar) o "48px" (rounded-[48px]). Si se deja vacío o se escribe cualquier otro valor, NO se aplica redondeo (imagen cuadrada)',label:"Border radius de la imagen",mandatory:!1,example_value:"full"},{name:"full",type:"boolean",help:'Controla el layout responsive del contenedor. Si es "true" (valor por defecto): no se aplica padding horizontal en móvil y la imagen NO tiene ancho mínimo. Si es "false": se añade padding horizontal px-8 en móvil y la imagen recibe un ancho mínimo de 48px (evita que se colapse en pantallas muy estrechas)',label:"Modo ancho completo",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"imageSize",type:"number",help:"Tamaño máximo de la imagen en píxeles (ancho Y alto, aspect cuadrado). SOLO se aceptan estos valores exactos: 24, 48, 60, 120, 160, 180, 200, 240. Si se pasa cualquier otro valor, se usa 240 por defecto. También se aplica a los atributos width/height del <img> para ayudar al navegador a reservar el espacio",label:"Tamaño de la imagen (px)",mandatory:!1,options:[24,48,60,120,160,180,200,240],options_labels:["24px","48px","60px","120px","160px","180px","200px","240px"],example_value:240}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CTA_2025_Formentera",category:"CTA",name:"Botón CTA con colores de texto y fondo intercambiables en hover 2025",description:"Botón Call To Action cuyo color de texto y color de fondo se intercambian automáticamente al hacer hover (p. ej. blanco sobre azul → azul sobre blanco). Acepta nombres CSS o códigos hex para los tres colores (texto, fondo, borde). El borde NO cambia en hover. El botón se ajusta al ancho de su contenido (w-fit)",framework:"Astro",priority:1,tags:["boton","cta","hover","personalizable"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"frontColor",type:"text",help:'Color del texto en reposo (y del fondo al hacer hover). Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). En hover, este valor y "Color de fondo" se intercambian',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:'Color de fondo en reposo (y del texto al hacer hover). Acepta nombre CSS o código hex. En hover, este valor y "Color del texto" se intercambian',label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex. NO cambia en hover",label:"Color del borde",mandatory:!1,example_value:"#2134F1"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Barcelona",category:"Header",name:"Breadcrumb 2025",description:"Breadcrumb de 2 niveles con icono de home y enlace apuntando al subdirectorio raíz, seguido del título de la página actual. Incluye structured data schema.org (BreadcrumbList) con URLs absolutas para SEO.",framework:"Astro",priority:1,tags:["breadcrumb","navegacion","seo"],fields:[{name:"text",type:"text",help:"Texto del último nivel del breadcrumb (el actual). Admite HTML. Si se deja vacío, el nivel aparecerá sin texto",label:"Texto del breadcrumb",mandatory:!1,example_value:"Guía de fiscalidad para autónomos"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se usa para construir el enlace al inicio y la URL absoluta del breadcrumb en el structured data SEO. Déjalo vacío si el breadcrumb parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"link",type:"text",help:'URL de destino del último nivel del breadcrumb. Por defecto "#" (sin destino)',label:"Enlace del breadcrumb",mandatory:!1,example_value:"/genia-l/guia-fiscalidad-autonomos"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Madrid",category:"Header",name:"Cabecera sticky con menú horizontal, CTA y submenús 2025",description:"Cabecera fija (sticky top-0) con logo de Lefebvre a la izquierda, botón CTA configurable a la derecha y barra de navegación horizontal debajo con 5 categorías (una de ellas con dropdown de subcategorías al hacer hover). En móvil, el menú se oculta y se activa con un botón hamburguesa. Incluye structured data schema.org (WebSite + SiteNavigationElement)",framework:"Astro",priority:1,tags:["header","cabecera","navegacion","sticky","menu","cta"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena a todos los enlaces del menú (inicio, categorías, subcategorías) y a la URL del structured data SEO. Déjalo vacío si el menú parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Bilbao",category:"Header",name:"Cabecera con logo Lefebvre 2026",description:"Cabecera minimalista solo con el logo de Lefebvre, alineado a la izquierda o al centro",framework:"Astro",priority:1,tags:["cabecera","logo","lefebvre"],fields:[{name:"logoAlign",type:"select",help:"Posición del logo",label:"Alineación del logo",options:["left","center"],options_labels:["Izquierda","Centro"],example_value:""},{name:"subdirectory",type:"text",help:"Prefijo de la URL del sitio",label:"Subdirectorio",mandatory:!1,example_value:""},{name:"loading",type:"select",help:"Carga de la imagen del logo",label:"Carga de la imagen",options:["eager","lazy"],options_labels:["Inmediata","Diferida"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Madrid",category:"Header",name:"Cabecera sticky con menú configurable y subcategorías 2026",description:'Cabecera fija (sticky top-0) con logo de Lefebvre, botón CTA y menú horizontal completamente configurable vía prop "categories". Cada ítem admite target (_self o _blank) y una lista opcional de subcategorías en dropdown al hacer hover. Si no se pasa menú custom, cae en un menú por defecto. Incluye hamburguesa en móvil y structured data schema.org (WebSite + SiteNavigationElement)',framework:"Astro",priority:1,tags:["header","cabecera","navegacion","sticky","menu","cta","configurable"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena al enlace del logo y a las rutas del menú por defecto, y se usa en la URL del structured data SEO. Si se pasa un menú custom en "categories", este valor NO se aplica a esos enlaces — debes incluir la ruta completa en cada ítem',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"},{name:"categories",type:"list",help:'Ítems del menú principal de navegación. Si se deja vacío o no se pasa, se muestra el menú por defecto (Cómo funciona, Seguridad, Casos reales, Contacto, Blog). Si defines este listado, debes incluir la ruta completa en cada "link" — el campo "subdirectory" NO se concatena',label:"Ítems del menú (opcional)",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto visible del ítem del menú principal",label:"Texto del ítem",example_value:"Cómo funciona"},{name:"link",type:"text",help:'URL de destino del ítem. Debe ser la ruta completa (no se le concatena "subdirectory")',label:"URL del ítem",example_value:"/genia-l/conoce-genia-l/"},{name:"target",type:"select",help:'Cómo se abre el enlace: "_self" en la misma pestaña, "_blank" en una pestaña nueva',label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Card_2025_Malta",category:"Contenido con listas",name:"Grid responsive de cards minimalistas solo-título 2025",description:"Grid responsive (1 columna en móvil, 2 en tablet, 4 en desktop) de cards minimalistas que contienen únicamente un título h3 centrado, sin imagen ni descripción. Toda la card es clicable (navega al URL indicado) y muestra un borde degradado corporativo (indigo → azul → rosa) al hacer hover",framework:"Astro",priority:1,tags:["contenido","card","grid","clicable","minimalista"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (sm) y 4 en escritorio (lg)",label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Texto visible de la card. Es el único contenido que se muestra (no hay imagen ni descripción en este componente)",label:"Texto del título",example_value:"Guía de contratos digitales"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. Si se deja vacío, la card apunta a "#" (no navega a ningún sitio pero conserva el estilo clicable)',label:"URL de enlace",example_value:"/genia-l/guia-contratos-digitales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Alcorcon",category:"Contenido de Imagen",name:"Hero promocional con media de fondo y overlay de 4 niveles 2025",description:"Sección hero con esquinas redondeadas (rounded-2xl) que muestra una imagen o un vídeo MP4 como fondo y superpone un overlay centrado con cuatro niveles de texto: título h2 de tamaño grande responsive (hasta 64px en desktop), subtítulo, descripción HTML y botón CTA opcional. El vídeo se reproduce con autoplay, loop y muted. Media mutuamente excluyente: si se rellena el vídeo, la imagen se ignora",framework:"Astro",priority:1,tags:["contenido","video","imagen","hero","cta","boton"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece superpuesto sobre la imagen o vídeo de fondo. Si se deja vacío, no se muestra",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis durante 30 días"},{name:"subtitle",type:"text",help:"Subtítulo que aparece debajo del título. Si se deja vacío, no se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"La plataforma de IA jurídica para profesionales del Derecho"},{name:"description",type:"text",help:"Descripción que aparece debajo del subtítulo. Admite HTML. Si se deja vacía, no se muestra",label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia relevante en segundos"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:"Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica cuando se usa imagen (no vídeo)",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Imagen de fondo de la sección promocional de GenIA-L"},{name:"src",type:"image",help:'URL de la imagen de fondo. Mutuamente exclusivo con el vídeo: si se rellena "URL del video", este campo se ignora',label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"iframeSrc",type:"video",help:"URL del vídeo embebido de fondo (se reproduce con autoplay, muted y loop). Tiene prioridad sobre la imagen: si se rellena, la imagen de fondo se ignora",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"loading",type:"select",help:'Tipo de carga de la imagen de fondo (solo aplica a imagen, no a vídeo). "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Cordoba",category:"Contenido de Texto",name:"Ítem con icono grande de certificación y título configurable 2025",description:"Ítem para destacar una certificación, acreditación o hito con un icono grande (5 variantes predefinidas: IA, ISO1, ISO2, GDPR, ISO3), título con etiqueta HTML seleccionable entre h1-h6/span (cada opción con tamaño y alineación distintos) y descripción centrada. Layout flex configurable: horizontal (icono al lado) o vertical (icono encima), con control de alineación vertical entre icono y texto",framework:"Astro",priority:1,tags:["contenido","icono","certificacion","item"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Se muestra siempre centrada y como texto plano (no admite HTML)",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. Cada opción aplica estilos distintos: "h1" 56px alineado a la izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"showBigIco",type:"boolean",help:'Si está activado, muestra el icono grande seleccionado en el campo "Icono". Si está desactivado, NO se muestra nada en el hueco del icono (se renderiza un espacio vacío)',label:"Mostrar icono grande",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al contenido (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible. "Vertical" apila el icono encima del texto y el item ocupa un ancho reducido (50% en móvil, 20% en desktop)',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Granada",category:"Contenido de Texto",name:"Ítem con icono pequeño en recuadro gris y ancho configurable 2025",description:"Ítem compacto para listados categorizados con un icono pequeño sobre fondo gris claro (23 variantes predefinidas: más, tienda, correcto, formación, caso, medalla, IA, balanza, compliance, librería, etc.), título con etiqueta HTML seleccionable (h1-h6/span) y descripción con soporte HTML. Layout flex configurable con control extra de ancho del bloque en orientación vertical (1/4 o 1/3 de columna)",framework:"Astro",priority:1,tags:["contenido","icono","item","listado"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Alineada a la izquierda",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"showIco",type:"boolean",help:'Si está activado, muestra el icono seleccionado en el campo "Icono" con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al contenido (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"more"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible (en este modo el campo "Tamaño del bloque" no se aplica). "Vertical" apila el icono encima del texto y el item ocupa el ancho definido en "Tamaño del bloque"',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"widthBlock",type:"select",help:'Ancho del bloque cuando se usa orientación vertical (solo aplica si "Flex del item" está en Vertical; en Horizontal se ignora). "1/4" → 50% en tablet y 25% en desktop. "1/3" → 33% en desktop',label:"Tamaño del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Malaga",category:"Contenido de Imagen",name:"Sección hiper-configurable con texto, imagen lateral, botón y modal LF2 2025",description:"Sección de contenido altamente configurable con más de 20 campos: título pequeño tipo badge, subtítulo h2 con tamaño conmutable (56px/46px/40px), descripción HTML, imagen lateral opcional (posicionable a izquierda o derecha), botón primario y botón secundario que abre un modal con formulario LF2 inyectado dinámicamente. Ofrece controles finos de alineación vertical, tamaño de fuente del texto, padding horizontal, ancho del contenedor (full/3-5/7xl) y variantes de orientación icono-texto",framework:"Astro",priority:1,tags:["contenido","imagen","icono","texto","modal","formulario","lf2","cta","boton"],fields:[{name:"showIco",type:"boolean",help:'Si está activado, muestra un icono SVG circular (un "+" dentro de un círculo) junto al texto. Si está desactivado, el bloque se renderiza sin icono (con un layout de padding distinto)',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título superior (pequeña etiqueta con fondo gris). Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"subtitle",type:"text",help:'Subtítulo principal del bloque (h2). Admite HTML. Su tamaño lo controla el campo "Tamaño del h2"',label:"Texto del subtítulo",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"description",type:"text",help:'Descripción que aparece debajo del subtítulo. Admite HTML. Su tamaño de fuente lo controla el campo "Tamaño de fuente del texto"',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza la gestión de riesgos, documenta controles y audita el cumplimiento normativo desde una única plataforma"},{name:"paddingLeft",type:"text",help:'Padding horizontal (en píxeles) entre el icono y el texto. Se aplica a la izquierda si "Alineación del contenido" es "Izquierda", o a la derecha si es "Derecha". Si se deja vacío, no se aplica padding',label:"Padding del texto (en px)",mandatory:!1,example_value:"24"},{name:"fontSize",type:"select",help:"Tamaño de fuente del bloque de descripción (no afecta al título ni al subtítulo)",label:"Tamaño de fuente del texto",options:["sm","base","lg","xl"],options_labels:["Pequeño","Base","Grande","Extra grande"],example_value:"base"},{name:"alignItems",type:"select",help:'Alineación vertical del contenedor principal. "Centro" alinea texto e imagen al centro vertical; "Inicio" los alinea arriba; "Fin" los alinea abajo',label:"Alineación vertical de los elementos",options:["center","start","end"],options_labels:["Centro","Inicio","Fin"],example_value:"center"},{name:"h2Size",type:"select",help:'Tamaño del subtítulo h2 en desktop. "Por defecto" = 56px (o 46px si "Mostrar icono" + "Mostrar imagen" están ambos activados). "40px" = 40px fijo. En móvil siempre 36px',label:"Tamaño del h2",options:["default","40px"],options_labels:["Por defecto","40px"],example_value:"default"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima del texto. Solo aplica si "Mostrar icono" está activado',label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y aplica padding-left al texto; "Derecha" coloca la imagen a la derecha (flex invertido) y aplica padding-right al texto',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"width",type:"select",help:'Ancho del bloque de contenido. "Ancho completo" ocupa el 100% del contenedor padre; "3/5" ocupa el 60%; "7xl" aplica max-width de 7xl de Tailwind (1280px)',label:"Ancho del contenido",options:["full","3/5","7xl"],options_labels:["Ancho completo","Ancho 3/5","Ancho 7xl"],example_value:"full"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen (texto + imagen). Si está desactivado, se renderiza un layout alternativo solo con texto (con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen principal. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtnModal",type:"boolean",help:"Si está activado, muestra un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón de modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón de modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'URL de la imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón de modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo se usa si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L mostrando el panel de cumplimiento normativo"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Cumplimiento normativo ISO 27001"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Descubre cómo GenIA-L te ayuda a automatizar auditorías, documentar controles y mantener el cumplimiento de la norma ISO 27001"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-iso27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Montevideo",category:"Contenido de Imagen",name:"Card clicable con imagen, tag, título, descripción y autor 2025",description:"Card individual totalmente clicable (la card entera es un enlace, no solo un botón) con imagen superior, etiqueta tipo badge opcional, título h3, descripción y línea de autor opcional. Muestra un borde degradado corporativo (indigo → azul → rosa) al hacer hover. Diseñada para usarse como unidad base dentro de grids como Contenido_2026_Estocolmo o Contenido_2026_Seattle",framework:"Astro",priority:1,tags:["contenido","card","imagen","clicable","autor","badge"],fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con GenIA-L"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"description",type:"text",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/blog/automatizacion-contratos"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"tag",type:"text",help:"Etiqueta que aparece sobre el título (tipo badge). Si se deja vacía, NO se muestra",label:"Etiqueta del contenido",mandatory:!1,example_value:"Legaltech"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",mandatory:!1,example_value:"María García López"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Cabra",category:"Contenido con listas",name:"Sección de tabs interactivas con contenido y miniatura lateral 2026",description:'Sección con pestañas horizontales en la parte superior que, al hacerse click, muestran un panel con título grande, listado de ítems (icono + texto) a la izquierda e imagen a la derecha. Incluye script inline que gestiona la conmutación entre pestañas y resalta la activa. La pestaña marcada como "default" es la que se muestra al cargar la página. Incluye structured data schema.org (ItemList + InteractionCounter)',framework:"Astro",priority:1,tags:["contenido"],fields:[{name:"items",type:"list",help:'Listado de pestañas del tab. Cada pestaña tiene su nombre, contenido (items internos con icono y texto) e imagen. La pestaña marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Introduce el nombre de la pestaña",label:"Nombre de la pestaña",example_value:"Pestaña 1"},{name:"title",type:"text",help:"Título del elemento (h4)",label:"Título",example_value:"Redacción de contratos"},{name:"description",type:"textArea",help:"Descripción del elemento",label:"Descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"icon",type:"text",help:"Nombre del icono a mostrar junto al elemento. Consulta los valores aceptados en el componente Contenido_2026_Menorca",label:"Icono",example_value:"edit"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón (Solo es necesario completar este campo en uno de los elementos de la misma pestaña)",label:"URL del botón",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen de la pestaña (Solo es necesario completar este campo en uno de los elementos de la misma pestaña)",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Dubai",category:"Contenido con listas",name:"Bloque intro con título, descripción, CTA y carrusel mixto vídeo/imagen 2026",description:"Bloque compuesto de cabecera (título h2, descripción HTML, botón CTA opcional) seguida de un carrusel horizontal que mezcla ítems de vídeo (iframe con thumbnail antes de reproducir) e ítems de imagen en el mismo listado. Los ítems de vídeo incluyen testimonio + autor + cargo y structured data SEO (VideoObject). Los ítems de imagen exponen alt y descripción para el structured data",framework:"Astro",priority:1,tags:["contenido","carrusel","video","imagen","cta","boton","seo"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece sobre el carrusel. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Experiencias reales con GenIA-L"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo profesionales del Derecho están transformando su día a día con inteligencia artificial"},{name:"buttonText",type:"text",help:'Texto del botón que aparece debajo del carrusel. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón debajo del carrusel. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Listado de ítems del carrusel. Cada ítem puede ser un VÍDEO (si se rellena "Url iframe") o una IMAGEN (si se deja el iframe vacío y se rellena "Imagen"). Los dos tipos pueden coexistir en el mismo carrusel. Algunos subcampos aplican solo a un tipo u otro',label:"Listado de items del carrusel",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:'URL del iframe del vídeo (p. ej. Vimeo/YouTube). Si tiene valor, el ítem se renderiza como VÍDEO (con thumbnail "Url imagen" hasta que se reproduzca). Si se deja vacío, el ítem se renderiza como IMAGEN',label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:'Thumbnail/preview del vídeo que se muestra antes de reproducirlo. Solo aplica a ítems tipo VÍDEO (cuando "Url iframe" tiene valor)',label:"Url imagen (thumbnail del vídeo)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura usada en el structured data SEO del vídeo. Solo aplica a ítems tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"image",type:"image",help:'Imagen del ítem. Solo aplica cuando el ítem es tipo IMAGEN (es decir, cuando "Url iframe" está vacío)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a ítems tipo IMAGEN",label:"Alt Imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"descriptionImage",type:"textArea",help:"Descripción de la imagen para el structured data SEO. Solo aplica a ítems tipo IMAGEN",label:"Descripción de imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"description",type:"textArea",help:"Descripción del ítem (testimonio o comentario). Se muestra junto al autor en los ítems tipo VÍDEO",label:"Descripción",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a ítems tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra junto a la descripción en los ítems tipo VÍDEO",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a ítems tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal en Despacho García"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Estocolmo",category:"Contenido con listas",name:"Wrapper grid responsive que renderiza cards Contenido_2025_Montevideo 2026",description:"Contenedor grid responsive (1 columna en móvil, 2 en tablet hasta 400px cada una, 3 en desktop hasta 400px cada una) que itera un listado de ítems y renderiza cada uno como Contenido_2025_Montevideo. No añade cabecera ni botones propios — es un wrapper puro que agrupa cards clicables con imagen, tag, título, descripción y autor",framework:"Astro",priority:1,tags:["contenido","card","grid","wrapper","imagen","autor"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (máx 400px cada una) y 3 en escritorio (máx 400px cada una). Cada card es clicable y se renderiza con el componente Contenido_2025_Montevideo",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card (h3). Se muestra siempre; si se deja vacío, aparece el h3 vacío",label:"Título",example_value:"Automatización de contratos con GenIA-L"},{name:"description",type:"textArea",help:"Descripción de la card. Se muestra siempre como párrafo; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino al hacer click en la card (toda la card es clicable). Si se deja vacío, apunta a "#" (no navega)',label:"Url del enlace",example_value:"/genia-l/blog/automatizacion-contratos"},{name:"tag",type:"text",help:"Etiqueta (badge) que aparece sobre el título. Si se deja vacía, NO se muestra",label:"Etiqueta",example_value:"Legaltech"},{name:"image",type:"image",help:"Imagen de la card (aparece en la parte superior). Se renderiza siempre; si se deja vacía aparece una imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",example_value:"María García López"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Jaen",category:"Contenido de Imagen",name:"Cabecera enriquecida de post con autor, colegiado, imagen lateral y RRSS 2026",description:"Cabecera de artículo de blog con título configurable mediante 8 variantes de estilo preestablecidas (H1 categoría blog, H1 autor blog, H1 post blog, H1 post enriquecido, H2 blog, H2, H3, H4), subtítulo, número de colegiado del autor, descripción con tipografía conmutable (Poppins grande o Inter compacto), imagen lateral opcional con posición configurable (izquierda o derecha) y bloque de redes sociales al final con iconos que solo aparecen si su URL está rellena",framework:"Astro",priority:1,tags:["contenido","blog","cabecera","rrss","autor","imagen","titulo"],fields:[{name:"title",type:"text",help:'Título principal. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial en el despacho: casos reales"},{name:"subtitle",type:"text",help:"Subtítulo opcional que aparece junto al número de colegiado. Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"number",type:"text",help:'Número de colegiado del autor. Se muestra como "Nº colegiado: [valor]". Si se deja vacío, NO se muestra',label:"Número de colegiado",mandatory:!1,example_value:"12345"},{name:"description",type:"text",help:'Descripción que aparece debajo del título y subtítulo. Admite HTML. Su tipografía y tamaño los controla el campo "Estilo de la descripción"',label:"Texto de la descripción",mandatory:!1,example_value:"Tres experiencias reales de profesionales del Derecho que han incorporado GenIA-L en su día a día"},{name:"image",type:"image",help:"Imagen lateral. Si tiene valor, el layout se convierte en dos columnas (texto + imagen). Si se deja vacía, NO se muestra imagen y el texto ocupa todo el ancho",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:'Texto alternativo de la imagen para accesibilidad. Solo aplica si "Imagen" tiene valor',label:"Alt de la imagen",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"tipo",type:"select",help:'Etiqueta HTML y estilo del título. Cada opción aplica estilos distintos: "h1 categoría blog" 40px centrado normal, "h1 autor blog" 40px izquierda semibold, "h1 post blog" 40px centrado semibold, "h1 post enriquecido" 40px izquierda semibold, "h2 blog" 28px/32px izquierda normal, "h2" 36px/40px centrado normal, "h3" 20px/24px izquierda semibold, "h4" xl izquierda semibold. Si se elige un valor fuera de la lista, el título se renderiza como párrafo simple',label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h1-blog-autor"},{name:"flexJustify",type:"select",help:'Justificación horizontal del bloque de texto. "Centrado" centra el contenido en su columna; "Inicio" lo alinea a la izquierda',label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Alineación del texto dentro del párrafo de descripción",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:'Tipografía y tamaño del párrafo de descripción. "Poppins" aplica Poppins xl con leading 7 y margen inferior grande (para descripciones destacadas); "Inter" aplica Inter base sin margen (para descripciones compactas)',label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins (grande)","Inter (compacto)"],example_value:"poppins"},{name:"imagePosition",type:"select",help:'Posición de la imagen respecto al texto (solo aplica si "Imagen" tiene valor). "Derecha" coloca la imagen a la derecha del texto; "Izquierda" la coloca a la izquierda',label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Listado de bloques de redes sociales y opciones de compartir. Cada bloque se renderiza con el componente RRSS_2025_Pisa. Habitualmente se configura UN solo bloque con todos los enlaces rellenos; si hay varios se mostrarán en fila. Si se deja vacío, el bloque de RRSS NO se muestra",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"URL del perfil de Facebook. Si se deja vacía, el icono de Facebook NO aparece",label:"URL de Facebook",example_value:"https://facebook.com/lefebvre.es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacía, el icono de X NO aparece",label:"URL de Twitter/X",example_value:"https://x.com/lefebvre_es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacía, el icono de LinkedIn NO aparece",label:"URL de LinkedIn",example_value:"https://linkedin.com/company/lefebvre-es"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (p. ej. https://wa.me/...). Si se deja vacía, el icono de WhatsApp NO aparece",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacía, el icono de Instagram NO aparece",label:"URL de Instagram",example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacía, el icono de YouTube NO aparece",label:"URL de YouTube",example_value:"https://youtube.com/@lefebvre"},{name:"email",type:"text",help:"Dirección de email de contacto. Si se deja vacía, el icono de email NO aparece",label:"Email",example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Activa el botón de imprimir que ejecuta window.print() en la página actual",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Activa el botón de copiar enlace que copia la URL actual al portapapeles",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Leon",category:"Contenido de Texto",name:"Contenido de prueba Paco 2026",description:'Componente de prueba que renderiza un saludo simple "Hola, soy [nombre]". Uso interno / testing',framework:"Astro",priority:1,tags:["contenido","prueba","genial"],fields:[{name:"nombre",type:"text",help:'Nombre que se mostrará en el saludo. Se inserta en el texto como "Hola, soy [nombre]". Si se deja vacío, aparece el valor por defecto "#"',label:"Nombre",mandatory:!1,example_value:"Paco"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mallorca",category:"Contenido con listas",name:"Wrapper de ítems con icono grande de certificación y botón CTA 2026",description:"Contenedor que itera un listado de bloques tipo certificación/hito: cada ítem combina un icono grande (5 variantes: IA, ISO1, ISO2, GDPR, ISO3) con título de etiqueta HTML configurable y descripción. Ofrece controles de alineación vertical, orientación icono-texto intra-ítem y entre ítems (fila/columna), más un botón CTA opcional al final. Cada ítem se renderiza con Contenido_2025_Cordoba",framework:"Astro",priority:1,tags:["contenido","icono","boton","cta"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono grande respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:"Listado de items de contenido con icono grande, título y descripción. Cada item se renderiza con el componente Contenido_2025_Cordoba",label:"Items de contenido",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Certificación ISO 27001"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título centrada y como texto plano (no admite HTML)",label:"Descripción",example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"showBigIco",type:"boolean",help:"Si está activado, muestra el icono grande seleccionado junto al contenido del item. Si está desactivado, NO se muestra icono (el hueco queda vacío)",label:"Mostrar icono grande",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al item (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono grande",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Marruecos",category:"Contenido con listas",name:"Caja con borde degradado, ítems con icono SVG y CTA siempre visible 2026",description:"Caja rectangular con borde degradado corporativo que contiene título h2, listado de ítems apilados verticalmente (cada uno con icono SVG de 3 variantes fijas — chat, libro o check — subtítulo h3 y descripción) y un botón CTA en la esquina inferior. IMPORTANTE: el botón se renderiza SIEMPRE (no hay toggle para ocultarlo); si el texto está vacío aparece un botón sin label",framework:"Astro",priority:1,tags:["contenido","icono","card","cta","boton","gradiente"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2) que aparece en la parte superior de la caja. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Título",mandatory:!1,example_value:"Ventajas de GenIA-L para tu despacho"},{name:"buttonText",type:"text",help:'Texto del botón CTA en la esquina inferior. ATENCIÓN: este componente NO tiene prop "Mostrar botón" — el botón aparece SIEMPRE. Si se deja vacío, aparecerá un botón sin texto',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"buttonHref",type:"text",help:'URL de destino del botón CTA. Por defecto "#". Recuerda que el botón se renderiza siempre; si dejas esta URL vacía, apuntará a "#" (no navegará)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"items",type:"list",help:"Listado de items de la caja. Cada item tiene un icono (de 3 opciones fijas), un subtítulo y una descripción. Los items se apilan verticalmente con un gap",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:'Icono del item (SVG con gradiente de color). Solo se reconocen 3 valores: "chat" (burbuja de chat), "book" (libro) y "check" (marca de verificación). Si se elige cualquier otro valor, no aparece ningún icono y el hueco queda vacío',label:"Icono",options:["chat","book","check"],options_labels:["Chat","Libro","Check"],example_value:"chat"},{name:"subtitle",type:"text",help:"Subtítulo del item (h3). Se renderiza siempre; si se deja vacío, aparece el h3 vacío. No admite HTML",label:"Subtítulo",example_value:"Asistente conversacional"},{name:"description",type:"textArea",help:"Descripción del item. Se renderiza siempre como párrafo; si se deja vacía, aparece el párrafo vacío. No admite HTML",label:"Descripción",example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, sin necesidad de construir queries complejas"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Menorca",category:"Contenido con listas",name:"Wrapper de ítems con icono pequeño en recuadro gris y botón CTA 2026",description:"Contenedor que itera bloques de contenido con icono pequeño sobre fondo gris claro (23 variantes predefinidas: más, tienda, correcto, formación, caso, medalla, IA, balanza, compliance, librería, etc.), título con etiqueta HTML configurable y descripción HTML. Permite controlar orientación intra-ítem y entre ítems, ancho por ítem (1/4 o 1/3 en vertical) y añadir un botón CTA opcional al final. Cada ítem se renderiza con Contenido_2025_Granada",framework:"Astro",priority:1,tags:["contenido","icono","wrapper","cta","boton","item"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las funcionalidades"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/funcionalidades"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"widthArticle",type:"select",help:'Ancho del contenedor principal. Actualmente solo está soportado "w-full" (100%)',label:"Ancho del Article",options:["w-full"],options_labels:["Ancho completo"],example_value:"w-full"},{name:"items",type:"list",help:"Listado de items de contenido con icono pequeño, título y descripción. Cada item se renderiza con el componente Contenido_2025_Granada",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Búsqueda semántica"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título y admite HTML",label:"Descripción",example_value:"Encuentra jurisprudencia y doctrina relevante con consultas en lenguaje natural"},{name:"showIco",type:"boolean",help:"Si está activado, muestra el icono seleccionado con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono",label:"¿Mostrar icono?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al item (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"search-text"},{name:"widthBlock",type:"select",help:'Ancho del item cuando se usa orientación vertical en "Flex del item" (Vertical). "1/4" = 50% tablet / 25% desktop. "1/3" = 33% desktop. En orientación horizontal este campo se ignora',label:"Ancho del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Michigan",category:"Contenido con listas",name:"Listado de artículos con texto, imagen y modal LF2 con botones globales 2026",description:"Listado vertical de artículos renderizados con Formulario_2025_Teruel, donde imagen lateral y orientación son globales (se aplican a todos los ítems por igual). El botón primario y su URL también son globales (todos los artículos comparten texto y enlace), pero el contenido del modal LF2 (imagen, título, subtítulo, descripción, nombre del formulario) es específico por ítem. Todos los artículos llevan borde inferior separador salvo el último",framework:"Astro",priority:1,tags:["contenido","texto","imagen","modal","formulario","lf2","cta","listado"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto en CADA artículo. "Izquierda" coloca la imagen a la izquierda en todos los artículos; "Derecha" a la derecha. Esta orientación es GLOBAL — se aplica a todos los ítems por igual',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario en TODOS los artículos. Los botones primarios son globales: todos los artículos comparten el mismo texto y enlace. Recuerda: también requiere "Enlace del botón" relleno',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario (global para todos los artículos). Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (global para todos los artículos). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/saber-mas"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el botón que abre el modal en TODOS los artículos. El modal se rellena con los datos específicos de cada ítem (imagen/título/descripción del modal)",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal (global para todos los artículos). Se muestra solo si "Mostrar botón Modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Listado de artículos. Cada artículo se renderiza con el componente Formulario_2025_Teruel. Todos los artículos llevan borde inferior separador EXCEPTO el último. Los datos del modal son específicos por ítem",label:"Listado de artículos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del artículo. Se renderiza siempre; si se deja vacío, aparece el título vacío",label:"Título",example_value:"Automatización de contratos con IA"},{name:"description",type:"textArea",help:"Descripción del artículo. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas y sugerencias basadas en jurisprudencia"},{name:"image",type:"image",help:"Imagen principal del artículo. Se muestra al lado del texto según la orientación global",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón Modal" está activado',label:"Imagen del modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:'Título que aparece dentro del modal. Solo se usa si "Mostrar botón Modal" está activado',label:"Título del modal",example_value:"Guía completa de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo que aparece dentro del modal, debajo del título. Solo se usa si "Mostrar botón Modal" está activado',label:"Subtítulo del modal",example_value:"Descarga el whitepaper de 40 páginas"},{name:"descriptionModal",type:"textArea",help:'Descripción que aparece dentro del modal. Admite HTML. Solo se usa si "Mostrar botón Modal" está activado',label:"Descripción del modal",example_value:"Descubre cómo reducir el tiempo de redacción de contratos en un 70% con técnicas de IA aplicadas al ámbito jurídico"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",example_value:"Portada de la guía de automatización jurídica con IA"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",example_value:"formulario-descarga-guia-automatizacion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mostoles",category:"Contenido de Imagen",name:"Banner CTA con doble variante: imagen de fondo o borde degradado con logo 2026",description:'Banner CTA con dos variantes alternativas según el toggle "Mostrar imagen" y si hay imagen. Variante 1 (imagen activada y URL rellena): imagen de fondo cover con overlay. Variante 2 (imagen desactivada o URL vacía): layout alternativo con borde degradado corporativo y logo grande como marca de agua. Incluye botón primario configurable y botón secundario que abre modal con formulario LF2 inyectado dinámicamente',framework:"Astro",priority:1,tags:["contenido","imagen","banner","cta","boton","modal","formulario","lf2","gradiente"],fields:[{name:"title",type:"text",help:"Título principal del banner (h3). Si se deja vacío, NO se muestra. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Si se deja vacía, NO se muestra. Si tanto título como descripción están vacíos, el contenido se centra verticalmente con el botón",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo la IA jurídica transforma tu día a día"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showImage",type:"boolean",help:'Activa/desactiva la imagen de fondo. Si ESTÁ ACTIVADO y "Imagen" tiene valor → layout con imagen de fondo cover (SIN borde degradado). Si ESTÁ DESACTIVADO o "Imagen" vacía → layout alternativo con borde degradado de color y logo grande de GenIA-L como marca de agua',label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:'URL de la imagen de fondo. Solo se usa cuando "Mostrar imagen" está activado. Si se deja vacía, se activa el layout alternativo con borde degradado y logo de GenIA-L',label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L con el panel de automatización"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Más sobre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descubre todas las funcionalidades de la plataforma de IA jurídica para despachos"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-genial"},{name:"idebook",type:"text",help:"ID del ebook, whitepaper o documento registrado en BI con formato EXXXXXXX para pasar como parámetro oculto al formulario de LF2. No es obligatorio, solo debe usarse para formularios que acabaran con una descarga",label:"ID de documento en BI (opcional)",mandatory:!1,example_value:""}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Orcasitas",category:"Contenido con listas",name:"Carrusel Glider.js con slides mixtos vídeo-popup o imagen-descripción 2026",description:"Carrusel horizontal responsive basado en Glider.js (breakpoints adaptativos 5→4→3→2→1 slides según anchura) con dos tipos de slide coexistentes: vídeos (abren en popup al hacer click, con thumbnail + testimonio + autor + cargo + structured data VideoObject) e imágenes (con descripción debajo y ancho auto-adaptativo 600/400/250px según cantidad). Dependencias Glider cargables desde CDN o reutilizables globales",framework:"Astro",priority:1,tags:["contenido","carrusel","video","imagen","popup","glider","seo","responsive"],fields:[{name:"slidesToShow",type:"text",help:"Número de slides visibles a la vez en desktop. Se ajusta automáticamente en tamaños menores (breakpoints responsive: 5→4→3→2→1 según anchura). Default 5",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",help:"Número de slides que se desplazan al pulsar las flechas o arrastrar. Default 1 (scroll suave uno a uno)",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",help:"Si está activado, el componente carga CSS y JS de Glider.js desde el CDN. Actívalo si el carrusel es el único componente de la página que necesita Glider; desactívalo si Glider ya está cargado globalmente en la página para evitar duplicados",label:"Cargar dependencias",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Slides del carrusel. Cada slide puede ser un VÍDEO (si se rellena "Url iframe" — abre en popup al hacer click) o una IMAGEN (si se deja el iframe vacío y se rellena "URL Imagen" — aparece con descripción debajo). Los dos tipos pueden coexistir en el mismo carrusel. IMPORTANTE: dentro de cada slide rellena SOLO los campos de vídeo O SOLO los de imagen, nunca los dos a la vez. Campos de VÍDEO: "Url iframe", "Thumbnail del vídeo", "Url miniatura (SEO)", "Descripción (testimonio)", "Nombre del autor", "Cargo del autor", "Fecha de publicación". Campos de IMAGEN: "Imagen", "Alt Imagen", "Descripción de la imagen"',label:"Listado de slides",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.). Si tiene valor, el slide se renderiza como VÍDEO: muestra un thumbnail clicable que abre el vídeo en un popup. Si se deja vacío, el slide se renderiza como IMAGEN",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail del vídeo que se muestra en el slide antes de abrir el popup. Solo aplica a slides tipo VÍDEO",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura para el structured data SEO del vídeo. Solo aplica a slides tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'En slides tipo VÍDEO: testimonio/cita del autor (se muestra con su nombre y cargo). En slides tipo IMAGEN: no se muestra, se usa "Descripción de imagen"',label:"Descripción (testimonio)",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra en slides tipo VÍDEO junto a la descripción",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a slides tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a slides tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"image",type:"image",help:'Imagen del slide. Solo aplica a slides tipo IMAGEN (cuando "Url iframe" está vacío). El ancho se adapta automáticamente según cuántas imágenes haya (1→600px, 2→400px, 3 o más→250px)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a slides tipo IMAGEN",label:"Alt Imagen",example_value:"Logo de corporación colaboradora de GenIA-L"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen del slide. Solo aplica a slides tipo IMAGEN",label:"Descripción de la imagen",example_value:"Colaborador destacado del ecosistema legaltech español"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Oslo",category:"Contenido con listas",name:"Grid de 3 columnas con thumbnails de vídeo que abren en popup iframe 2026",description:"Grid responsive (3 columnas en desktop, 1 en móvil) de thumbnails de vídeo. Al hacer click en un thumbnail, el vídeo embebido (iframe Vimeo/YouTube) se abre en un popup modal. La descripción del ítem aparece debajo del thumbnail, y también se usa como alt de la imagen y en el structured data SEO del vídeo",framework:"Astro",priority:1,tags:["contenido","popup","video","grid","modal","seo"],fields:[{name:"items",type:"list",help:"Listado de vídeos que se muestran como grid (3 columnas en desktop, 1 en móvil). Cada thumbnail abre el vídeo en un popup al hacer click. Campo obligatorio: si no se pasa, el componente falla al renderizar",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.) que se abrirá en el popup al hacer click en el thumbnail. Si se deja vacío, el popup abre sin contenido",label:"Url del vídeo (iframe)",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail que se muestra en el grid antes de abrir el popup. Si se deja vacío, aparece una imagen rota",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'Descripción que aparece debajo del thumbnail (centrada, pequeña, semibold). Admite HTML. También se usa como alt de la imagen y en el structured data SEO. Si se deja vacía, el alt será "Video thumbnail" por defecto',label:"Descripción",example_value:"Automatización de contratos con IA"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Quito",category:"Contenido con listas",name:"Bloque de datos de contacto con iconos teléfono/email/ubicación 2026",description:"Bloque vertical de datos de contacto con título h2 y listado de ítems; cada ítem combina un icono SVG (3 variantes fijas: teléfono, email o localización) y un texto HTML. El ÚLTIMO ítem del listado se resalta en azul. Genera structured data schema.org ContactPoint extrayendo automáticamente el primer ítem de cada tipo (phone/email/locator)",framework:"Astro",priority:1,tags:["contenido","contacto","icono","seo","listado"],fields:[{name:"title",type:"text",help:"Título del bloque de contacto (h2). Se usa también como nombre del ContactPoint en el structured data SEO. Se renderiza siempre; si se deja vacío, aparece el h2 vacío",label:"Título del bloque",mandatory:!1,example_value:"Contacto comercial"},{name:"items",type:"list",help:'Listado de datos de contacto. Cada item tiene un icono (teléfono, email o localización) y un texto. El structured data SEO extrae el PRIMER item con icono "phone" como teléfono, el PRIMER con "email" como email, y el PRIMER con "locator" como localidad. Además, el ÚLTIMO item del listado se resalta en azul',label:"Listado de items de contacto",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:"Icono del item. Los 3 valores válidos renderizan un SVG específico. Además, el icono determina qué tipo de dato (teléfono/email/localidad) se usa en el structured data SEO",label:"Icono",options:["phone","email","locator"],options_labels:["Teléfono","Email","Localización"],example_value:"phone"},{name:"text",type:"text",help:"Texto del item (número de teléfono, dirección de email, dirección postal, etc.). Admite HTML (útil para enlaces mailto: o tel:)",label:"Texto",example_value:"+34 91 210 80 00"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Seattle",category:"Contenido con listas",name:"Listado con cards 2026",description:"Listado con tarjetas",framework:"Astro",priority:1,tags:["contenido","cards","genial"],fields:[{name:"items",type:"list",help:'Listado de cards. Cada card tiene su nombre, contenido (items internos con icono y texto) e imagen. La card marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Título",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"description",type:"textArea",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Sevilla",category:"Contenido de Imagen",name:"Sección con título h1, imagen lateral conmutable, icono y modal LF2 2026",description:"Sección de contenido con título h1 grande (56px desktop), descripción HTML, imagen lateral conmutable (izquierda o derecha, con toggle de visibilidad), icono SVG opcional (orientación fila o columna respecto al texto) y dos botones: primario (requiere URL relleno) y secundario que abre modal con formulario LF2 inyectado dinámicamente",framework:"Astro",priority:1,tags:["contenido","popup","texto","imagen","modal","formulario","lf2","cta","boton","icono"],fields:[{name:"showIco",type:"boolean",help:"Si está activado, muestra un icono SVG junto al texto. Si está desactivado, el bloque se renderiza sin icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Título principal del bloque (h1, 56px en desktop). Admite HTML. Se renderiza siempre; si se deja vacío, aparece el h1 vacío",label:"Texto del título",mandatory:!1,example_value:"Transforma tu despacho con IA"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L automatiza la redacción de contratos y la búsqueda jurisprudencial"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha; "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima. Solo aplica si "Mostrar icono" está activado',label:"Orientación del icono y texto",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen al lado del texto. Si está desactivado, se renderiza un layout alternativo solo con texto (sin imagen y con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de GenIA-L mostrando el panel de asistente jurídico"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"GenIA-L Asistente"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, con citas contextuales y exportación a Word"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-demo-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Tokyo",category:"Contenido con listas",name:"Bloque con imagen de escudo de fondo y grid lateral de logos clicables 2026",description:"Bloque de contenido con una imagen de escudo como background, título h2, descripción HTML, botón tipo enlace con flecha a la derecha y un grid lateral de logos/imágenes clicables (renderizados con Imagen_2025_Fukushima). El ancho del bloque de texto se adapta automáticamente al número de logos: 1→texto a 2/3, 2→texto a 1/2, 3 o más→texto a 1/3",framework:"Astro",priority:1,tags:["contenido","imagen","grid","logos","cta","enlace"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2). Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Plataforma certificada y segura"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"GenIA-L cumple con las principales certificaciones de seguridad y protección de datos del sector"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón tipo enlace (texto + flecha). ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonText",type:"text",help:'Texto del botón tipo enlace. Aparece seguido de una flecha SVG. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Rellena siempre esta URL si activas "Mostrar botón" (el componente no valida esta dependencia)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l") que se concatena a la URL de la imagen de fondo del bloque (el escudo). Si se deja vacío, la imagen de fondo se carga desde la raíz del sitio: "/images/genial/ico-shield.webp"',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"items",type:"list",help:"Listado de logos/imágenes que se muestran en el grid lateral del bloque. Cada ítem se renderiza con el componente Imagen_2025_Fukushima. El ancho del bloque de texto se adapta automáticamente al número de ítems: 1 ítem → texto a 2/3, 2 ítems → texto a 1/2, 3 o más → texto a 1/3",label:"Items del grid",mandatory:!1,items:{type:"object",fields:[{name:"link",type:"text",help:"URL de destino al hacer click en el logo/imagen. Si se deja vacío, la imagen no es clicable",label:"Enlace",example_value:"/genia-l/certificaciones/iso-27001"},{name:"image",type:"image",help:"URL de la imagen/logo del ítem. Si se deja vacía aparece imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen. Admite HTML",label:"Descripción de la imagen",example_value:"Certificación ISO 27001 de seguridad de la información"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Ubeda",category:"Contenido con listas",name:"Bloque destacado de hasta 3 columnas con cifras grandes y separadores 2026",description:"Bloque con fondo azul translúcido que muestra hasta 3 ítems en fila en desktop (1/3 de ancho cada uno) y apilados en móvil, con separadores visuales entre ellos (laterales en desktop, horizontales en móvil). Cada ítem combina una cifra o título destacado (40px móvil / 56px desktop semibold) con una descripción centrada debajo (tamaño xl, admite HTML). Diseñado para exactamente 3 ítems",framework:"Astro",priority:1,tags:["contenido","texto","destacado","grid","cifras"],fields:[{name:"items",type:"list",help:"Listado de bloques con cifras/títulos destacados y descripción. Layout responsive: 1 columna en móvil, 3 columnas en desktop (ancho 1/3 cada una). Diseñado para EXACTAMENTE 3 items (o menos). El ítem del medio tiene bordes separadores laterales en desktop y horizontales en móvil; si hay más de 3 ítems los extras no llevarán separadores visuales",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Cifra o texto destacado del bloque (aparece en tamaño grande, 40px móvil / 56px desktop, semibold). No admite HTML",label:"Título destacado",example_value:"70%"},{name:"description",type:"textArea",help:"Descripción que aparece debajo del título destacado (tamaño xl, centrada). Admite HTML",label:"Descripción",example_value:"Reducción del tiempo de redacción de contratos"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Yakarta",category:"Contenido con listas",name:"Acordeón exclusivo de vídeos MP4 con pestañas y rotación automática 2026",description:"Acordeón con botones tipo pestaña en la parte superior: al hacer click en cada pestaña se muestra su vídeo MP4 con título h3 y descripción HTML. Solo se muestra UN vídeo a la vez (comportamiento exclusivo) y hay rotación automática entre pestañas cada pocos segundos. Incluye structured data SEO VideoObject con duración en formato ISO 8601",framework:"Astro",priority:1,tags:["contenido","acordeon","tabs","video","interactivo","seo"],fields:[{name:"items",type:"list",help:"Listado de vídeos del acordeón. Cada vídeo tiene su botón de pestaña superior, título, descripción y archivo .mp4. Solo se muestra UNO a la vez; al hacer click en otra pestaña, el contenido cambia. También hay rotación automática entre pestañas cada pocos segundos",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto del botón tipo pestaña (aparece en la barra superior). Se muestra también en móvil como icono con texto oculto salvo al hacer hover/active",label:"Nombre o tag de la pestaña",example_value:"Redacción"},{name:"title",type:"text",help:"Título del vídeo (h3) que aparece sobre la descripción dentro del panel",label:"Título del vídeo",example_value:"Redacción automática de contratos"},{name:"description",type:"textArea",help:"Descripción del vídeo que aparece debajo del título. Admite HTML",label:"Descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como src de una etiqueta <video><source src="..." type="video/mp4">. Ejemplos válidos: .mp4, .webm alojados en CDN',label:"URL del archivo de vídeo (MP4)",example_value:"https://assets.lefebvre.es/media/videos/genial/redaccion-demo.mp4"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura del vídeo usada en el structured data SEO (VideoObject)",label:"URL de la miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageSrc",type:"text",help:'URL alternativa de miniatura (fallback de "URL de la miniatura" en el structured data SEO). Si "URL de la miniatura" tiene valor, este campo se ignora',label:"URL alternativa de miniatura (fallback SEO)",example_value:""},{name:"duration",type:"text",help:'Duración del vídeo en formato ISO 8601 (p. ej. "PT2M30S" para 2 min 30 s). Se usa en el structured data SEO. Default "PT2M" si se deja vacío',label:"Duración del vídeo (ISO 8601)",example_value:"PT2M"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado como "active". Solo debería haber UN ítem con default=true; si hay varios se mostrarán todos a la vez al inicio',label:"¿Es el vídeo por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpFooter",category:"Footer",name:"Footer Corporativo Lefebvre.es",description:"Footer marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["footer","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpHero",category:"CTA",name:"Hero Corporativo Lefebvre.es",description:"Hero marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["hero","video","lefebvre.es"],fields:[{name:"text",type:"textArea",label:"Contenido HTML",mandatory:!1,example_value:"<p><b>Es más que una imagen renovada. Es una nueva forma de avanzar.</b><br />En Lefebvre evolucionamos contigo. Nos adaptamos a ti.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Enlace_2025_Venecia",category:"Contenido de Texto",name:"Enlace azul con icono de flecha o play y target configurable 2025",description:'Enlace estilizado en color azul corporativo con dos variantes de icono: "Flecha" a la derecha del texto (estilo "saber más") o "Play" a la izquierda con subrayado permanente en el texto (estilo "ver vídeo"). Soporta target configurable (_self o _blank, con rel="noopener noreferrer" automático al abrir en nueva pestaña) y aria-label heredado del texto para accesibilidad',framework:"Astro",priority:1,tags:["enlace","link","texto","icono"],fields:[{name:"text",type:"text",help:"Texto visible del enlace. También se usa como aria-label para accesibilidad. Si se deja vacío, el enlace queda sin texto ni etiqueta accesible",label:"Texto del enlace",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"url",type:"text",help:'URL de destino del enlace. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"URL de destino",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"target",type:"select",help:'Cómo se abre el enlace. "Misma pestaña" abre en la misma ventana; "Nueva pestaña" abre en otra pestaña y además añade automáticamente rel="noopener noreferrer" por seguridad',label:"Destino del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],mandatory:!1,example_value:"_blank"},{name:"icon",type:"select",help:'Icono que acompaña al texto del enlace. "Flecha" coloca un icono de flecha a la DERECHA del texto (estilo "saber más"). "Play" coloca un icono de play a la IZQUIERDA del texto y además aplica subrayado permanente al texto (estilo "ver vídeo")',label:"Icono del enlace",options:["arrow","play"],options_labels:["Flecha (derecha)","Play (izquierda)"],mandatory:!1,example_value:"arrow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FAQ_2025_Hiroshima",category:"Contenido con listas",name:"Listado de preguntas frecuentes en acordeón exclusivo 2025",description:'Listado de preguntas y respuestas en acordeón exclusivo: al abrir una pregunta se cierran automáticamente las demás (solo una respuesta visible a la vez). Un segundo click sobre la pregunta abierta la cierra. Incluye título h2 con valor por defecto "Preguntas frecuentes". Las respuestas se renderizan como texto plano dentro de un <p> — no admiten HTML',framework:"Astro",priority:1,tags:["texto","faq","acordeon","preguntas","interactivo"],fields:[{name:"title",type:"text",help:'Título de la sección de FAQ (h2). Si se deja vacío, por defecto muestra "Preguntas frecuentes"',label:"Texto del título",mandatory:!1,example_value:"Preguntas frecuentes sobre GenIA-L"},{name:"items",type:"list",help:"Listado de preguntas y respuestas. Cada pregunta se muestra como un botón expandible. Al hacer click en una pregunta se abre su respuesta y se cierran las demás automáticamente (comportamiento exclusivo, solo una visible a la vez). Un segundo click en la pregunta abierta la cierra",label:"Listado de FAQs",mandatory:!1,items:{type:"object",fields:[{name:"question",type:"text",help:"Texto de la pregunta (aparece como botón). No admite HTML",label:"Texto de la pregunta",example_value:"¿Qué es GenIA-L y para qué sirve?"},{name:"answer",type:"text",help:"Texto de la respuesta que aparece al abrir la pregunta. NO admite HTML (se renderiza como texto plano dentro de un <p>)",label:"Texto de la respuesta",example_value:"GenIA-L es la plataforma de inteligencia artificial jurídica de Lefebvre que automatiza la redacción de contratos, la búsqueda de jurisprudencia y el análisis de documentos legales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FooterCorporativo",category:"Footer",name:"Footer Corporativo",description:"Footer de prueba en Astro",framework:"Astro",priority:1,tags:["footer"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Footer_2025_Napoles",category:"Footer",name:"Footer corporativo con 4 columnas, textos legales y RRSS 2025",description:'Footer corporativo con 4 columnas de enlaces (Lefebvre, Explora, Portales, Tienda Online), logo, textos legales, 5 iconos de redes sociales y separador final. IMPORTANTE: solo los enlaces de la columna "Explora" se concatenan con el subdirectorio configurable; el resto (Lefebvre, Portales, Tienda, RRSS, legales) son dominios absolutos hardcoded en el componente',framework:"Astro",priority:1,tags:["footer","corporativo","rrss","legales","navegacion"],fields:[{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena ÚNICAMENTE a los enlaces de la columna "Explora GenIA-L" (Casos reales, Conoce GenIA-L, Contacto). El resto de enlaces (Lefebvre, Portales Lefebvre, Tienda Online, RRSS y legales) están hardcodeados a dominios absolutos y no dependen de este campo. Déjalo vacío si los enlaces GenIA-L deben partir de la raíz del sitio',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Nara",category:"Formulario",name:"Formulario minimalista de suscripción con campo de email y botón 2025",description:'Formulario minimalista de suscripción de una sola línea: título h2, descripción breve, input de email y botón de envío. Todos los campos tienen textos por defecto autotraducidos ("Suscríbete ahora", "Recibe novedades...", "Email", "Suscríbete") que se muestran si el campo correspondiente se deja vacío. Ninguno admite HTML',framework:"Astro",priority:1,tags:["formulario","suscripcion","email","newsletter","minimalista"],fields:[{name:"title",type:"text",help:'Título del formulario (h2). Si se deja vacío, por defecto muestra "Suscríbete ahora". No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Suscríbete al blog de GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Si se deja vacía, por defecto muestra "Recibe novedades de artículos que se publican en el blog". No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Recibe mensualmente los últimos artículos sobre legaltech, IA jurídica y transformación digital en el sector legal"},{name:"placeholder",type:"text",help:'Texto placeholder del campo de email (desaparece al escribir). Por defecto "Email"',label:"Placeholder del campo",mandatory:!1,example_value:"Tu correo electrónico"},{name:"buttonText",type:"text",help:'Texto del botón de envío. Por defecto "Suscríbete". También se usa como aria-label del botón',label:"Texto del botón",mandatory:!1,example_value:"Suscríbete"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Seul",category:"Formulario",name:"Formulario LF2 con layout conmutable imagen lateral o título+descripción 2025",description:"Formulario de leads integrado con la plataforma LF2 de Lefebvre (se inyecta dinámicamente vía apiManager.pintarFormularioAutogestionado). Alterna entre dos layouts mutuamente excluyentes: CON imagen lateral grande (sin título ni descripción visibles) o SIN imagen pero con título h2 + descripción en columna lateral. Soporta businessAction para tracking y orientación del formulario (izquierda o derecha)",framework:"Astro",priority:1,tags:["formulario","lf2","leads","imagen","contacto"],fields:[{name:"title",type:"text",help:'Título (h2) del bloque. IMPORTANTE: solo se muestra si "Mostrar imagen" está desactivado. Con imagen activada, el título NO aparece. No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Solicita información sobre GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. IMPORTANTE: igual que el título, solo se muestra si "Mostrar imagen" está desactivado. No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Uno de nuestros comerciales se pondrá en contacto contigo en menos de 24 horas"},{name:"imageSrc",type:"image",help:'URL de la imagen lateral. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (incluye normalmente un código numérico + nombre). Este valor se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicita info GenIA-L"},{name:"businessAction",type:"text",help:"Identificador de acción comercial de LF2 que se asociará al lead. Si se deja vacío, no se envía acción comercial (el formulario funciona pero sin tracking de acción específica)",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:'Posición del formulario respecto a la imagen/texto. "Izquierda" coloca el formulario a la izquierda (flex-row); "Derecha" lo coloca a la derecha (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:'Tipo de carga de la imagen lateral (solo aplica si "Mostrar imagen" está activado). "eager" si el formulario está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Alterna entre dos layouts. ACTIVADO: muestra una imagen lateral grande junto al formulario (sin título ni descripción visibles). DESACTIVADO: muestra título y descripción (columna 1/3) + formulario (columna 1/2), sin imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Teruel",category:"Formulario",name:"Tarjeta horizontal con imagen, dos botones y popup con formulario LF2 2025",description:"Tarjeta horizontal con imagen + texto + dos botones (uno que navega a un enlace externo, otro que abre un popup). El popup contiene título h2, imagen lateral, descripción HTML y formulario LF2 inyectado dinámicamente. Incluye toggle de borde inferior separador (útil cuando se usan varias tarjetas seguidas — p. ej. dentro de Contenido_2026_Michigan)",framework:"Astro",priority:1,tags:["contenido","card","imagen","popup","formulario","lf2","modal","cta"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha (flex-row). "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],mandatory:!1,example_value:"left"},{name:"bottomBorder",type:"boolean",help:"Activa/desactiva el borde inferior separador. Útil cuando se usan varias tarjetas seguidas (p. ej. dentro de Contenido_2026_Michigan) para poner borde en todas excepto la última",label:"Mostrar borde inferior",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título de la tarjeta (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML. También se usa como alt de la imagen principal",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con IA"},{name:"description",type:"text",help:"Descripción de la tarjeta. Admite HTML (útil para listas, negritas, etc.). Se renderiza siempre",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"imageSrc",type:"image",help:"URL de la imagen principal de la tarjeta (lateral al texto)",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón primario (enlace externo). Recuerda: también requiere "Url del enlace" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario (enlace). Solo se muestra si "Mostrar botón" está activado Y "Url del enlace" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (se abre en la misma pestaña). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/automatizacion-contratos"},{name:"showBtnModal",type:"boolean",help:"Activa/desactiva el botón que abre el popup con el formulario LF2. Si está activado, al hacer click se abre un modal con título, imagen, descripción y formulario LF2 inyectado dinámicamente",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el popup. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en PDF"},{name:"titleModal",type:"text",help:"Título (h2) que aparece dentro del popup, junto al formulario LF2",label:"Texto del título modal",mandatory:!1,example_value:"Descarga la guía de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo del modal. AVISO: este campo está DECLARADO en el carbin pero en el .astro está comentado (L76), por lo que NO se renderiza actualmente. Déjalo vacío o usa "Descripción del modal"',label:"Texto del subtítulo modal (no se usa)",mandatory:!1,example_value:""},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del popup, antes del formulario LF2. Admite HTML",label:"Texto de la descripción modal",mandatory:!1,example_value:"Déjanos tus datos y te enviaremos el whitepaper de 40 páginas con los casos de uso más relevantes"},{name:"imageModal",type:"image",help:"Imagen que aparece en la columna izquierda del popup (la portada de la guía, por ejemplo)",label:"Src de la imagen modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del popup para accesibilidad",label:"Alt de la imagen modal",mandatory:!1,example_value:"Portada de la guía de automatización jurídica"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2. Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto dentro del popup. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Descarga Guía Automatización"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2026_Wichita",category:"Formulario",name:"Formulario para landing 2026",description:"Formulario para landing en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video"],fields:[{name:"title",type:"text",help:"Introduce el título del formulario",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del formulario",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"mainContent",type:"textArea",help:"Introduce el texto principal del formulario",label:"Texto principal en HTML",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"imageSrc",type:"image",help:"Introduce la URL de la imagen del formulario",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Introduce el título del formulario en LF2",label:"Título del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Vamos Más Allá"},{name:"businessAction",type:"text",help:"Introduce el identificador businessAction del formulario en LF2",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al formulario",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"GeometricShapeCard",category:"Imagen",name:"Tarjeta con figura geométrica",description:"Tarjeta con figura geométrica y botón de leer más.",framework:"Astro",tags:["card","interactivo"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Título de la tarjeta"},{name:"mainContent",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:"<p>Este es el <b>contenido</b> principal.</p>"},{name:"secondaryContent",type:"textArea",label:"Contenido secundario (HTML) que aparece al leer más",mandatory:!1,example_value:"<p>Este es el contenido secundario.</p>"},{name:"imageSrc",type:"image",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"figure",type:"select",label:"Tipo de figura",options:["Trapeze","Trapeze2","Leaf","Sphere"],options_labels:["Trapecio","Trapecio II","Hoja de parra","Esfera"],example_value:"Trapeze"},{name:"orientation",type:"select",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"gradiantIndex",type:"select",label:"Degradado",options:[0,1,2,3,4],options_labels:["Lefebvre España","Lefebvre Sarrut","Lefebvre Italia","Lefebvre Toovalu","Bandera de España"],example_value:0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"HeaderCorporativo",category:"Header",name:"Header Corporativo",description:"Header de prueba en Astro",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"logo",type:"text",label:"URL del logo",mandatory:!1,example_value:"https://espacioasesoria.com/wp-content/themes/lf-espacioasesoria-theme/src/images/logo-espacio-asesoria.png"},{name:"alt",type:"text",label:"Texto alternativo",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showLefebvreLogo",type:"boolean",label:"Mostrar logo de Lefebvre",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2025_Benidorm",category:"Contenido de Imagen",name:"Hero de post con fecha, autor, tags e imagen (usa Contenido_2026_Jaen) 2025",description:'Cabecera de artículo de blog con fecha en mayúsculas, título h1 (renderizado con Contenido_2026_Jaen), descripción HTML, imagen de fondo cover, ficha de autor con foto (Author_2025_Algarve), tiempo de lectura (Tiempo_2025_Londres) y lista de tags (Tag_2025_Bolonia). Dos variantes alternables: "Enriquecido" (horizontal: texto izquierda + imagen mitad derecha) o "Estándar" (vertical: texto centrado arriba + imagen 530px debajo)',framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","autor","tags","cabecera"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor (imagen cuadrada, se mostrará con el borde que defina Author_2025_Algarve)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2026_Benidorm",category:"Contenido de Imagen",name:"Hero de post con fecha, autor, tags e imagen (usa Contenido_2026_Jaen) 2026",description:'Cabecera de artículo de blog con fecha en mayúsculas, título h1 (renderizado con Contenido_2026_Jaen), descripción HTML, imagen de fondo cover, ficha de autor con foto, tiempo de lectura y lista de tags. Dos variantes alternables: "Enriquecido" (horizontal: texto izquierda + imagen mitad derecha, foto del autor fijada a 48px) o "Estándar" (vertical: texto centrado arriba + imagen 530px con esquinas redondeadas debajo)',framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","autor","tags","cabecera"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor. En layout enriquecido se muestra a 48px (fijo); en layout estándar usa el tamaño por defecto del componente Author_2025_Algarve (240px)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo con imagen de 48px y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto con esquinas redondeadas)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ImageTextSimple",category:"Imagen",name:"Contenido con imagen/video simple",description:"Contenido con imagen/video simple, título y texto",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Soluciones felinas para un mundo mejor"},{name:"description",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>En Lefebvre buscamos ofrecer a nuestros gatos una <b>vida mejor</b>.
|
|
30
|
+
**/let q6;const zk=typeof window<"u"&&window.trustedTypes;if(zk)try{q6=zk.createPolicy("vue",{createHTML:t=>t})}catch{}const Vk=q6?t=>q6.createHTML(t):t=>t,LH="http://www.w3.org/2000/svg",AH="http://www.w3.org/1998/Math/MathML",xs=typeof document<"u"?document:null,Zk=xs&&xs.createElement("template"),Bk={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,o)=>{const r=e==="svg"?xs.createElementNS(LH,t):e==="mathml"?xs.createElementNS(AH,t):n?xs.createElement(t,{is:n}):xs.createElement(t);return t==="select"&&o&&o.multiple!=null&&r.setAttribute("multiple",o.multiple),r},createText:t=>xs.createTextNode(t),createComment:t=>xs.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>xs.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,o,r,a){const i=n?n.previousSibling:e.lastChild;if(r&&(r===a||r.nextSibling))for(;e.insertBefore(r.cloneNode(!0),n),!(r===a||!(r=r.nextSibling)););else{Zk.innerHTML=Vk(o==="svg"?`<svg>${t}</svg>`:o==="mathml"?`<math>${t}</math>`:t);const l=Zk.content;if(o==="svg"||o==="mathml"){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}},k0="transition",em="animation",Pd=Symbol("_vtc"),Fk={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Hk=w0({},h6,Fk),Uk=(t=>(t.displayName="Transition",t.props=Hk,t))((t,{slots:e})=>j3(PS,qk(t),e)),i1=(t,e=[])=>{q2(t)?t.forEach(n=>n(...e)):t&&t(...e)},Xk=t=>t?q2(t)?t.some(e=>e.length>1):t.length>1:!1;function qk(t){const e={};for(const K in t)K in Fk||(e[K]=t[K]);if(t.css===!1)return e;const{name:n="v",type:o,duration:r,enterFromClass:a=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=a,appearActiveClass:u=i,appearToClass:p=l,leaveFromClass:m=`${n}-leave-from`,leaveActiveClass:b=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,x=PH(r),k=x&&x[0],M=x&&x[1],{onBeforeEnter:A,onEnter:N,onEnterCancelled:w,onLeave:L,onLeaveCancelled:P,onBeforeAppear:Z=A,onAppear:V=N,onAppearCancelled:q=w}=e,F=(K,ce,ve,Te)=>{K._enterCancelled=Te,T0(K,ce?p:l),T0(K,ce?u:i),ve&&ve()},W=(K,ce)=>{K._isLeaving=!1,T0(K,m),T0(K,v),T0(K,b),ce&&ce()},ee=K=>(ce,ve)=>{const Te=K?V:N,Y=()=>F(ce,K,ve);i1(Te,[ce,Y]),Wk(()=>{T0(ce,K?s:a),$l(ce,K?p:l),Xk(Te)||Gk(ce,o,k,Y)})};return w0(e,{onBeforeEnter(K){i1(A,[K]),$l(K,a),$l(K,i)},onBeforeAppear(K){i1(Z,[K]),$l(K,s),$l(K,u)},onEnter:ee(!1),onAppear:ee(!0),onLeave(K,ce){K._isLeaving=!0;const ve=()=>W(K,ce);$l(K,m),K._enterCancelled?($l(K,b),G6(K)):(G6(K),$l(K,b)),Wk(()=>{K._isLeaving&&(T0(K,m),$l(K,v),Xk(L)||Gk(K,o,M,ve))}),i1(L,[K,ve])},onEnterCancelled(K){F(K,!1,void 0,!0),i1(w,[K])},onAppearCancelled(K){F(K,!0,void 0,!0),i1(q,[K])},onLeaveCancelled(K){W(K),i1(P,[K])}})}function PH(t){if(t==null)return null;if(B6(t))return[W6(t.enter),W6(t.leave)];{const e=W6(t);return[e,e]}}function W6(t){return X6(t)}function $l(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t[Pd]||(t[Pd]=new Set)).add(e)}function T0(t,e){e.split(/\s+/).forEach(o=>o&&t.classList.remove(o));const n=t[Pd];n&&(n.delete(e),n.size||(t[Pd]=void 0))}function Wk(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let NH=0;function Gk(t,e,n,o){const r=t._endId=++NH,a=()=>{r===t._endId&&o()};if(n!=null)return setTimeout(a,n);const{type:i,timeout:l,propCount:s}=Yk(t,e);if(!i)return o();const u=i+"end";let p=0;const m=()=>{t.removeEventListener(u,b),a()},b=v=>{v.target===t&&++p>=s&&m()};setTimeout(()=>{p<s&&m()},l+1),t.addEventListener(u,b)}function Yk(t,e){const n=window.getComputedStyle(t),o=x=>(n[x]||"").split(", "),r=o(`${k0}Delay`),a=o(`${k0}Duration`),i=Kk(r,a),l=o(`${em}Delay`),s=o(`${em}Duration`),u=Kk(l,s);let p=null,m=0,b=0;e===k0?i>0&&(p=k0,m=i,b=a.length):e===em?u>0&&(p=em,m=u,b=s.length):(m=Math.max(i,u),p=m>0?i>u?k0:em:null,b=p?p===k0?a.length:s.length:0);const v=p===k0&&/\b(?:transform|all)(?:,|$)/.test(o(`${k0}Property`).toString());return{type:p,timeout:m,propCount:b,hasTransform:v}}function Kk(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max(...e.map((n,o)=>Jk(n)+Jk(t[o])))}function Jk(t){return t==="auto"?0:Number(t.slice(0,-1).replace(",","."))*1e3}function G6(t){return(t?t.ownerDocument:document).body.offsetHeight}function jH(t,e,n){const o=t[Pd];o&&(e=(e?[e,...o]:[...o]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}const R3=Symbol("_vod"),eT=Symbol("_vsh"),tm={name:"show",beforeMount(t,{value:e},{transition:n}){t[R3]=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):nm(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:o}){!e!=!n&&(o?e?(o.beforeEnter(t),nm(t,!0),o.enter(t)):o.leave(t,()=>{nm(t,!1)}):nm(t,e))},beforeUnmount(t,{value:e}){nm(t,e)}};function nm(t,e){t.style.display=e?t[R3]:"none",t[eT]=!e}function _H(){tm.getSSRProps=({value:t})=>{if(!t)return{style:{display:"none"}}}}const tT=Symbol("");function IH(t){const e=E2();if(!e)return;const n=e.ut=(r=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(a=>Q3(a,r))},o=()=>{const r=t(e.proxy);e.ce?Q3(e.ce,r):Y6(e.subTree,r),n(r)};v6(()=>{Ip(o)}),Ci(()=>{X2(o,gH,{flush:"post"});const r=new MutationObserver(o);r.observe(e.subTree.el.parentNode,{childList:!0}),Md(()=>r.disconnect())})}function Y6(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Y6(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)Q3(t.el,e);else if(t.type===pn)t.children.forEach(n=>Y6(n,e));else if(t.type===o1){let{el:n,anchor:o}=t;for(;n&&(Q3(n,e),n!==o);)n=n.nextSibling}}function Q3(t,e){if(t.nodeType===1){const n=t.style;let o="";for(const r in e){const a=$H(e[r]);n.setProperty(`--${r}`,a),o+=`--${r}: ${a};`}n[tT]=o}}const RH=/(?:^|;)\s*display\s*:/;function QH(t,e,n){const o=t.style,r=Ad(n);let a=!1;if(n&&!r){if(e)if(Ad(e))for(const i of e.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&D3(o,l,"")}else for(const i in e)n[i]==null&&D3(o,i,"");for(const i in n)i==="display"&&(a=!0),D3(o,i,n[i])}else if(r){if(e!==n){const i=o[tT];i&&(n+=";"+i),o.cssText=n,a=RH.test(n)}}else e&&t.removeAttribute("style");R3 in t&&(t[R3]=a?o.display:"",t[eT]&&(o.display="none"))}const nT=/\s*!important$/;function D3(t,e,n){if(q2(n))n.forEach(o=>D3(t,e,o));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const o=DH(t,e);nT.test(n)?t.setProperty(O0(o),n.replace(nT,""),"important"):t[o]=n}}const oT=["Webkit","Moz","ms"],K6={};function DH(t,e){const n=K6[e];if(n)return n;let o=H2(e);if(o!=="filter"&&o in t)return K6[e]=o;o=kH(o);for(let r=0;r<oT.length;r++){const a=oT[r]+o;if(a in t)return K6[e]=a}return e}const rT="http://www.w3.org/1999/xlink";function aT(t,e,n,o,r,a=EH(e)){o&&e.startsWith("xlink:")?n==null?t.removeAttributeNS(rT,e.slice(6,e.length)):t.setAttributeNS(rT,e,n):n==null||a&&!Dk(n)?t.removeAttribute(e):t.setAttribute(e,a?"":Z6(n)?String(n):n)}function iT(t,e,n,o,r){if(e==="innerHTML"||e==="textContent"){n!=null&&(t[e]=e==="innerHTML"?Vk(n):n);return}const a=t.tagName;if(e==="value"&&a!=="PROGRESS"&&!a.includes("-")){const l=a==="OPTION"?t.getAttribute("value")||"":t.value,s=n==null?t.type==="checkbox"?"on":"":String(n);(l!==s||!("_value"in t))&&(t.value=s),n==null&&t.removeAttribute(e),t._value=n;return}let i=!1;if(n===""||n==null){const l=typeof t[e];l==="boolean"?n=Dk(n):n==null&&l==="string"?(n="",i=!0):l==="number"&&(n=0,i=!0)}try{t[e]=n}catch{}i&&t.removeAttribute(r||e)}function ws(t,e,n,o){t.addEventListener(e,n,o)}function zH(t,e,n,o){t.removeEventListener(e,n,o)}const lT=Symbol("_vei");function VH(t,e,n,o,r=null){const a=t[lT]||(t[lT]={}),i=a[e];if(o&&i)i.value=o;else{const[l,s]=ZH(e);if(o){const u=a[e]=HH(o,r);ws(t,l,u,s)}else i&&(zH(t,l,i,s),a[e]=void 0)}}const sT=/(?:Once|Passive|Capture)$/;function ZH(t){let e;if(sT.test(t)){e={};let o;for(;o=t.match(sT);)t=t.slice(0,t.length-o[0].length),e[o[0].toLowerCase()]=!0}return[t[2]===":"?t.slice(3):O0(t.slice(2)),e]}let J6=0;const BH=Promise.resolve(),FH=()=>J6||(BH.then(()=>J6=0),J6=Date.now());function HH(t,e){const n=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=n.attached)return;gi(UH(o,n.value),e,5,[o])};return n.value=t,n.attached=FH(),n}function UH(t,e){if(q2(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(o=>r=>!r._stopped&&o&&o(r))}else return e}const cT=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.charCodeAt(2)>96&&t.charCodeAt(2)<123,dT=(t,e,n,o,r,a)=>{const i=r==="svg";e==="class"?jH(t,o,i):e==="style"?QH(t,n,o):vH(e)?CH(e)||VH(t,e,n,o,a):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):XH(t,e,o,i))?(iT(t,e,o),!t.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&aT(t,e,o,i,a,e!=="value")):t._isVueCE&&(/[A-Z]/.test(e)||!Ad(o))?iT(t,_3(e),o,a,e):(e==="true-value"?t._trueValue=o:e==="false-value"&&(t._falseValue=o),aT(t,e,o,i))};function XH(t,e,n,o){if(o)return!!(e==="innerHTML"||e==="textContent"||e in t&&cT(e)&&Rk(n));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&t.tagName==="IFRAME"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const r=t.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return cT(e)&&Ad(n)?!1:e in t}const uT={};function pT(t,e,n){let o=S2(t,e);Qk(o)&&(o=w0({},o,e));class r extends z3{constructor(i){super(o,i,n)}}return r.def=o,r}const qH=((t,e)=>pT(t,e,LT)),WH=typeof HTMLElement<"u"?HTMLElement:class{};class z3 extends WH{constructor(e,n={},o=im){super(),this._def=e,this._props=n,this._createApp=o,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&o!==im?this._root=this.shadowRoot:e.shadowRoot!==!1?(this.attachShadow(w0({},e.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let e=this;for(;e=e&&(e.parentNode||e.host);)if(e instanceof z3){this._parent=e;break}this._instance||(this._resolved?this._mount(this._def):e&&e._pendingResolve?this._pendingResolve=e._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(e=this._parent){e&&(this._instance.parent=e._instance,this._inheritParentContext(e))}_inheritParentContext(e=this._parent){e&&this._app&&Object.setPrototypeOf(this._app._context.provides,e._instance.provides)}disconnectedCallback(){this._connected=!1,xd(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(e){for(const n of e)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let o=0;o<this.attributes.length;o++)this._setAttr(this.attributes[o].name);this._ob=new MutationObserver(this._processMutations.bind(this)),this._ob.observe(this,{attributes:!0});const e=(o,r=!1)=>{this._resolved=!0,this._pendingResolve=void 0;const{props:a,styles:i}=o;let l;if(a&&!q2(a))for(const s in a){const u=a[s];(u===Number||u&&u.type===Number)&&(s in this._props&&(this._props[s]=X6(this._props[s])),(l||(l=Object.create(null)))[_3(s)]=!0)}this._numberProps=l,this._resolveProps(o),this.shadowRoot&&this._applyStyles(i),this._mount(o)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(o=>{o.configureApp=this._def.configureApp,e(this._def=o,!0)}):e(this._def)}_mount(e){this._app=this._createApp(e),this._inheritParentContext(),e.configureApp&&e.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const o in n)xH(this,o)||Object.defineProperty(this,o,{get:()=>Ir(n[o])})}_resolveProps(e){const{props:n}=e,o=q2(n)?n:Object.keys(n||{});for(const r of Object.keys(this))r[0]!=="_"&&o.includes(r)&&this._setProp(r,this[r]);for(const r of o.map(_3))Object.defineProperty(this,r,{get(){return this._getProp(r)},set(a){this._setProp(r,a,!0,!this._patching)}})}_setAttr(e){if(e.startsWith("data-v-"))return;const n=this.hasAttribute(e);let o=n?this.getAttribute(e):uT;const r=_3(e);n&&this._numberProps&&this._numberProps[r]&&(o=X6(o)),this._setProp(r,o,!1,!0)}_getProp(e){return this._props[e]}_setProp(e,n,o=!0,r=!1){if(n!==this._props[e]&&(this._dirty=!0,n===uT?delete this._props[e]:(this._props[e]=n,e==="key"&&this._app&&(this._app._ceVNode.key=n)),r&&this._instance&&this._update(),o)){const a=this._ob;a&&(this._processMutations(a.takeRecords()),a.disconnect()),n===!0?this.setAttribute(O0(e),""):typeof n=="string"||typeof n=="number"?this.setAttribute(O0(e),n+""):n||this.removeAttribute(O0(e)),a&&a.observe(this,{attributes:!0})}}_update(){const e=this._createVNode();this._app&&(e.appContext=this._app._context),$T(e,this._root)}_createVNode(){const e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUpdated=this._renderSlots.bind(this));const n=Hn(this._def,w0(e,this._props));return this._instance||(n.ce=o=>{this._instance=o,o.ce=this,o.isCE=!0;const r=(a,i)=>{this.dispatchEvent(new CustomEvent(a,Qk(i[0])?w0({detail:i},i[0]):{detail:i}))};o.emit=(a,...i)=>{r(a,i),O0(a)!==a&&r(O0(a),i)},this._setParent()}),n}_applyStyles(e,n){if(!e)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const o=this._nonce;for(let r=e.length-1;r>=0;r--){const a=document.createElement("style");o&&a.setAttribute("nonce",o),a.textContent=e[r],this.shadowRoot.prepend(a)}}_parseSlots(){const e=this._slots={};let n;for(;n=this.firstChild;){const o=n.nodeType===1&&n.getAttribute("slot")||"default";(e[o]||(e[o]=[])).push(n),this.removeChild(n)}}_renderSlots(){const e=this._getSlots(),n=this._instance.type.__scopeId;for(let o=0;o<e.length;o++){const r=e[o],a=r.getAttribute("name")||"default",i=this._slots[a],l=r.parentNode;if(i)for(const s of i){if(n&&s.nodeType===1){const u=n+"-s",p=document.createTreeWalker(s,1);s.setAttribute(u,"");let m;for(;m=p.nextNode();)m.setAttribute(u,"")}l.insertBefore(s,r)}else for(;r.firstChild;)l.insertBefore(r.firstChild,r);l.removeChild(r)}}_getSlots(){const e=[this];this._teleportTargets&&e.push(...this._teleportTargets);const n=new Set;for(const o of e){const r=o.querySelectorAll("slot");for(let a=0;a<r.length;a++)n.add(r[a])}return Array.from(n)}_injectChildStyle(e){this._applyStyles(e.styles,e)}_beginPatch(){this._patching=!0,this._dirty=!1}_endPatch(){this._patching=!1,this._dirty&&this._instance&&this._update()}_hasShadowRoot(){return this._def.shadowRoot!==!1}_removeChildStyle(e){}}function mT(t){const e=E2(),n=e&&e.ce;return n||null}function GH(){const t=mT();return t&&t.shadowRoot}function YH(t="$style"){{const e=E2();if(!e)return V6;const n=e.type.__cssModules;if(!n)return V6;const o=n[t];return o||V6}}const hT=new WeakMap,fT=new WeakMap,V3=Symbol("_moveCb"),bT=Symbol("_enterCb"),KH=(t=>(delete t.props.mode,t))({name:"TransitionGroup",props:w0({},Hk,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=E2(),o=m6();let r,a;return O3(()=>{if(!r.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!nU(r[0].el,n.vnode.el,i)){r=[];return}r.forEach(JH),r.forEach(eU);const l=r.filter(tU);G6(n.vnode.el),l.forEach(s=>{const u=s.el,p=u.style;$l(u,i),p.transform=p.webkitTransform=p.transitionDuration="";const m=u[V3]=b=>{b&&b.target!==u||(!b||b.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",m),u[V3]=null,T0(u,i))};u.addEventListener("transitionend",m)}),r=[]}),()=>{const i=mo(t),l=qk(i);let s=i.tag||pn;if(r=[],a)for(let u=0;u<a.length;u++){const p=a[u];p.el&&p.el instanceof Element&&(r.push(p),bs(p,Sd(p,l,o,n)),hT.set(p,gT(p.el)))}a=e.default?b3(e.default()):[];for(let u=0;u<a.length;u++){const p=a[u];p.key!=null&&bs(p,Sd(p,l,o,n))}return Hn(s,null,a)}}});function JH(t){const e=t.el;e[V3]&&e[V3](),e[bT]&&e[bT]()}function eU(t){fT.set(t,gT(t.el))}function tU(t){const e=hT.get(t),n=fT.get(t),o=e.left-n.left,r=e.top-n.top;if(o||r){const a=t.el,i=a.style,l=a.getBoundingClientRect();let s=1,u=1;return a.offsetWidth&&(s=l.width/a.offsetWidth),a.offsetHeight&&(u=l.height/a.offsetHeight),(!Number.isFinite(s)||s===0)&&(s=1),(!Number.isFinite(u)||u===0)&&(u=1),Math.abs(s-1)<.01&&(s=1),Math.abs(u-1)<.01&&(u=1),i.transform=i.webkitTransform=`translate(${o/s}px,${r/u}px)`,i.transitionDuration="0s",t}}function gT(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top}}function nU(t,e,n){const o=t.cloneNode(),r=t[Pd];r&&r.forEach(l=>{l.split(/\s+/).forEach(s=>s&&o.classList.remove(s))}),n.split(/\s+/).forEach(l=>l&&o.classList.add(l)),o.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(o);const{hasTransform:i}=Yk(o);return a.removeChild(o),i}const E0=t=>{const e=t.props["onUpdate:modelValue"]||!1;return q2(e)?n=>TH(e,n):e};function oU(t){t.target.composing=!0}function vT(t){const e=t.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const yi=Symbol("_assign");function CT(t,e,n){return e&&(t=t.trim()),n&&(t=U6(t)),t}const Ta={created(t,{modifiers:{lazy:e,trim:n,number:o}},r){t[yi]=E0(r);const a=o||r.props&&r.props.type==="number";ws(t,e?"change":"input",i=>{i.target.composing||t[yi](CT(t.value,n,a))}),(n||a)&&ws(t,"change",()=>{t.value=CT(t.value,n,a)}),e||(ws(t,"compositionstart",oU),ws(t,"compositionend",vT),ws(t,"change",vT))},mounted(t,{value:e}){t.value=e??""},beforeUpdate(t,{value:e,oldValue:n,modifiers:{lazy:o,trim:r,number:a}},i){if(t[yi]=E0(i),t.composing)return;const l=(a||t.type==="number")&&!/^0\d/.test(t.value)?U6(t.value):t.value,s=e??"";l!==s&&(document.activeElement===t&&t.type!=="range"&&(o&&e===n||r&&t.value.trim()===s)||(t.value=s))}},l1={deep:!0,created(t,e,n){t[yi]=E0(n),ws(t,"change",()=>{const o=t._modelValue,r=Nd(t),a=t.checked,i=t[yi];if(q2(o)){const l=I3(o,r),s=l!==-1;if(a&&!s)i(o.concat(r));else if(!a&&s){const u=[...o];u.splice(l,1),i(u)}}else if(Jp(o)){const l=new Set(o);a?l.add(r):l.delete(r),i(l)}else i(wT(t,a))})},mounted:yT,beforeUpdate(t,e,n){t[yi]=E0(n),yT(t,e,n)}};function yT(t,{value:e,oldValue:n},o){t._modelValue=e;let r;if(q2(e))r=I3(e,o.props.value)>-1;else if(Jp(e))r=e.has(o.props.value);else{if(e===n)return;r=S0(e,wT(t,!0))}t.checked!==r&&(t.checked=r)}const om={created(t,{value:e},n){t.checked=S0(e,n.props.value),t[yi]=E0(n),ws(t,"change",()=>{t[yi](Nd(t))})},beforeUpdate(t,{value:e,oldValue:n},o){t[yi]=E0(o),e!==n&&(t.checked=S0(e,o.props.value))}},W2={deep:!0,created(t,{value:e,modifiers:{number:n}},o){const r=Jp(e);ws(t,"change",()=>{const a=Array.prototype.filter.call(t.options,i=>i.selected).map(i=>n?U6(Nd(i)):Nd(i));t[yi](t.multiple?r?new Set(a):a:a[0]),t._assigning=!0,xd(()=>{t._assigning=!1})}),t[yi]=E0(o)},mounted(t,{value:e}){xT(t,e)},beforeUpdate(t,e,n){t[yi]=E0(n)},updated(t,{value:e}){t._assigning||xT(t,e)}};function xT(t,e){const n=t.multiple,o=q2(e);if(!(n&&!o&&!Jp(e))){for(let r=0,a=t.options.length;r<a;r++){const i=t.options[r],l=Nd(i);if(n)if(o){const s=typeof l;s==="string"||s==="number"?i.selected=e.some(u=>String(u)===String(l)):i.selected=I3(e,l)>-1}else i.selected=e.has(l);else if(S0(Nd(i),e)){t.selectedIndex!==r&&(t.selectedIndex=r);return}}!n&&t.selectedIndex!==-1&&(t.selectedIndex=-1)}}function Nd(t){return"_value"in t?t._value:t.value}function wT(t,e){const n=e?"_trueValue":"_falseValue";return n in t?t[n]:e}const OT={created(t,e,n){Z3(t,e,n,null,"created")},mounted(t,e,n){Z3(t,e,n,null,"mounted")},beforeUpdate(t,e,n,o){Z3(t,e,n,o,"beforeUpdate")},updated(t,e,n,o){Z3(t,e,n,o,"updated")}};function ST(t,e){switch(t){case"SELECT":return W2;case"TEXTAREA":return Ta;default:switch(e){case"checkbox":return l1;case"radio":return om;default:return Ta}}}function Z3(t,e,n,o,r){const i=ST(t.tagName,n.props&&n.props.type)[r];i&&i(t,e,n,o)}function rU(){Ta.getSSRProps=({value:t})=>({value:t}),om.getSSRProps=({value:t},e)=>{if(e.props&&S0(e.props.value,t))return{checked:!0}},l1.getSSRProps=({value:t},e)=>{if(q2(t)){if(e.props&&I3(t,e.props.value)>-1)return{checked:!0}}else if(Jp(t)){if(e.props&&t.has(e.props.value))return{checked:!0}}else if(t)return{checked:!0}},OT.getSSRProps=(t,e)=>{if(typeof e.type!="string")return;const n=ST(e.type.toUpperCase(),e.props&&e.props.type);if(n.getSSRProps)return n.getSSRProps(t,e)}}const aU=["ctrl","shift","alt","meta"],iU={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>aU.some(n=>t[`${n}Key`]&&!e.includes(n))},rm=(t,e)=>{if(!t)return t;const n=t._withMods||(t._withMods={}),o=e.join(".");return n[o]||(n[o]=((r,...a)=>{for(let i=0;i<e.length;i++){const l=iU[e[i]];if(l&&l(r,e))return}return t(r,...a)}))},lU={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},sU=(t,e)=>{const n=t._withKeys||(t._withKeys={}),o=e.join(".");return n[o]||(n[o]=(r=>{if(!("key"in r))return;const a=O0(r.key);if(e.some(i=>i===a||lU[i]===a))return t(r)}))},kT=w0({patchProp:dT},Bk);let am,TT=!1;function ET(){return am||(am=hk(kT))}function MT(){return am=TT?am:fk(kT),TT=!0,am}const $T=((...t)=>{ET().render(...t)}),cU=((...t)=>{MT().hydrate(...t)}),im=((...t)=>{const e=ET().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=PT(o);if(!r)return;const a=e._component;!Rk(a)&&!a.render&&!a.template&&(a.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const i=n(r,!1,AT(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),i},e}),LT=((...t)=>{const e=MT().createApp(...t),{mount:n}=e;return e.mount=o=>{const r=PT(o);if(r)return n(r,!0,AT(r))},e});function AT(t){if(t instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&t instanceof MathMLElement)return"mathml"}function PT(t){return Ad(t)?document.querySelector(t):t}let NT=!1;const dU=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:PS,BaseTransitionPropsValidators:h6,Comment:Dr,DeprecationTypes:fH,EffectScope:q8,ErrorCodes:TB,ErrorTypeStrings:cH,Fragment:pn,KeepAlive:eF,ReactiveEffect:kp,Static:o1,Suspense:BF,Teleport:$S,Text:x0,TrackOpTypes:KZ,Transition:Uk,TransitionGroup:KH,TriggerOpTypes:JZ,VueElement:z3,assertNumber:kB,callWithAsyncErrorHandling:gi,callWithErrorHandling:Jc,camelize:H2,capitalize:s3,cloneVNode:Ml,compatUtils:hH,computed:qr,createApp:im,createBlock:El,createCommentVNode:tn,createElementBlock:Ce,createElementVNode:B,createHydrationRenderer:fk,createPropsRestProxy:yF,createRenderer:hk,createSSRApp:LT,createSlots:aF,createStaticVNode:Ek,createTextVNode:Oo,createVNode:Hn,customRef:eS,defineAsyncComponent:JB,defineComponent:S2,defineCustomElement:pT,defineEmits:dF,defineExpose:uF,defineModel:hF,defineOptions:pF,defineProps:cF,defineSSRCustomElement:qH,defineSlots:mF,devtools:dH,effect:yZ,effectScope:gZ,getCurrentInstance:E2,getCurrentScope:NO,getCurrentWatcher:eB,getTransitionRawChildren:b3,guardReactiveProps:Tk,h:j3,handleError:e1,hasInjectionContext:NB,hydrate:cU,hydrateOnIdle:XB,hydrateOnInteraction:YB,hydrateOnMediaQuery:GB,hydrateOnVisible:WB,initCustomFormatter:iH,initDirectivesForSSR:()=>{NT||(NT=!0,rU(),_H())},inject:Dp,isMemoSame:jk,isProxy:Ap,isReactive:hs,isReadonly:wl,isRef:_r,isRuntimeOnly:tH,isShallow:O2,isVNode:Cs,markRaw:KO,mergeDefaults:vF,mergeModels:CF,mergeProps:I6,nextTick:xd,nodeOps:Bk,normalizeClass:Zo,normalizeProps:gB,normalizeStyle:U2,onActivated:DS,onBeforeMount:ZS,onBeforeUnmount:Hp,onBeforeUpdate:v6,onDeactivated:zS,onErrorCaptured:US,onMounted:Ci,onRenderTracked:HS,onRenderTriggered:FS,onScopeDispose:vZ,onServerPrefetch:BS,onUnmounted:Md,onUpdated:O3,onWatcherCleanup:nS,openBlock:fe,patchProp:dT,popScopeId:AB,provide:vS,proxyRefs:a6,pushScopeId:LB,queuePostFlushCb:Ip,reactive:Wc,readonly:n3,ref:rn,registerRuntimeCompiler:eH,render:$T,renderList:Bo,renderSlot:iF,resolveComponent:y6,resolveDirective:rF,resolveDynamicComponent:oF,resolveFilter:mH,resolveTransitionHooks:Sd,setBlockTracking:Yp,setDevtoolsHook:uH,setTransitionHooks:bs,shallowReactive:YO,shallowReadonly:zZ,shallowRef:r6,ssrContextKey:CS,ssrUtils:pH,stop:xZ,toDisplayString:Yt,toHandlerKey:jp,toHandlers:lF,toRaw:mo,toRef:WZ,toRefs:UZ,toValue:BZ,transformVNodeArgs:WF,triggerRef:ZZ,unref:Ir,useAttrs:gF,useCssModule:YH,useCssVars:IH,useHost:mT,useId:DB,useModel:$F,useSSRContext:yS,useShadowRoot:GH,useSlots:bF,useTemplateRef:zB,useTransitionState:m6,vModelCheckbox:l1,vModelDynamic:OT,vModelRadio:om,vModelSelect:W2,vModelText:Ta,vShow:tm,version:_k,warn:sH,watch:X2,watchEffect:jB,watchPostEffect:_B,watchSyncEffect:xS,withAsyncContext:xF,withCtx:Od,withDefaults:fF,withDirectives:wo,withKeys:sU,withMemo:lH,withModifiers:rm,withScopeId:PB},Symbol.toStringTag,{value:"Module"})),uU=[{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Button",category:"CTA",name:"Botón en Astro",description:"Botón de prueba en Astro",framework:"Astro",priority:1,tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en Astro"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}],repeat_data:null}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Author_2025_Algarve",category:"Contenido de Imagen",name:"Ficha de autor con imagen y tiempo de lectura 2025",description:'Ficha compacta de autor para cabeceras de artículo: imagen a la izquierda (con border-radius configurable), nombre subrayado y profesión a la derecha, y bloque opcional de "tiempo de lectura" al final. Incluye structured data schema.org. Para la corporativa de Lefebvre',framework:"Astro",priority:1,tags:["autor","imagen","blog","cabecera","tiempo"],fields:[{name:"nameAuthor",type:"text",help:'Nombre del autor. Se renderiza como párrafo subrayado (Inter 16px color #262626) y admite HTML (set:html). También se usa en el structured data (schema.org) como "name" y "headline". Conviene que ocupe una sola línea',label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:'Profesión o descripción del autor. Se renderiza como párrafo (Inter 14px color #363942) debajo del nombre y admite HTML (set:html). También se usa en el structured data como "description". Conviene que ocupe una sola línea',label:"Descripción del autor",mandatory:!1,example_value:"Abogada especialista en Derecho Fiscal con 15 años de experiencia"},{name:"imageAuthor",type:"image",help:"URL de la imagen del autor (se renderiza a la izquierda con aspect-ratio cuadrado y object-cover). Se muestra siempre; si se deja vacía, aparecerá una imagen rota",label:"Src de la imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la imagen para accesibilidad (atributo alt). Recomendado rellenar aunque la imagen sea decorativa",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"minutes",type:"text",help:"Minutos de lectura del artículo. Se pasa al componente Tiempo_2025_Londres que se renderiza al final de la ficha. TERNARIO: si se deja vacío, el bloque de tiempo de lectura NO se muestra en absoluto",label:"Minutos de lectura",mandatory:!1,example_value:"20"},{name:"borderRadius",type:"text",help:'Redondeo aplicado a la imagen del autor. SOLO se aceptan estos valores exactos: "sm" (rounded-sm), "md" (rounded-md), "lg" (rounded-lg), "full" (círculo completo — foto tipo avatar) o "48px" (rounded-[48px]). Si se deja vacío o se escribe cualquier otro valor, NO se aplica redondeo (imagen cuadrada)',label:"Border radius de la imagen",mandatory:!1,example_value:"full"},{name:"full",type:"boolean",help:'Controla el layout responsive del contenedor. Si es "true" (valor por defecto): no se aplica padding horizontal en móvil y la imagen NO tiene ancho mínimo. Si es "false": se añade padding horizontal px-8 en móvil y la imagen recibe un ancho mínimo de 48px (evita que se colapse en pantallas muy estrechas)',label:"Modo ancho completo",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"imageSize",type:"number",help:"Tamaño máximo de la imagen en píxeles (ancho Y alto, aspect cuadrado). SOLO se aceptan estos valores exactos: 24, 48, 60, 120, 160, 180, 200, 240. Si se pasa cualquier otro valor, se usa 240 por defecto. También se aplica a los atributos width/height del <img> para ayudar al navegador a reservar el espacio",label:"Tamaño de la imagen (px)",mandatory:!1,options:[24,48,60,120,160,180,200,240],options_labels:["24px","48px","60px","120px","160px","180px","200px","240px"],example_value:240}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CTA_2025_Formentera",category:"CTA",name:"Botón CTA con colores de texto y fondo intercambiables en hover 2025",description:"Botón Call To Action cuyo color de texto y color de fondo se intercambian automáticamente al hacer hover (p. ej. blanco sobre azul → azul sobre blanco). Acepta nombres CSS o códigos hex para los tres colores (texto, fondo, borde). El borde NO cambia en hover. El botón se ajusta al ancho de su contenido (w-fit)",framework:"Astro",priority:1,tags:["boton","cta","hover","personalizable"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"frontColor",type:"text",help:'Color del texto en reposo (y del fondo al hacer hover). Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). En hover, este valor y "Color de fondo" se intercambian',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:'Color de fondo en reposo (y del texto al hacer hover). Acepta nombre CSS o código hex. En hover, este valor y "Color del texto" se intercambian',label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex. NO cambia en hover",label:"Color del borde",mandatory:!1,example_value:"#2134F1"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Barcelona",category:"Header",name:"Breadcrumb 2025",description:"Breadcrumb reutilizable con icono de home configurable, niveles intermedios con sus propias URLs y último nivel sin enlace. Incluye structured data schema.org (BreadcrumbList) con URLs absolutas para SEO.",framework:"Astro",priority:1,tags:["breadcrumb","navegacion","seo"],fields:[{name:"homeLabel",type:"text",help:"Texto del primer nivel del breadcrumb (home). Admite HTML.",label:"Etiqueta del home",mandatory:!0,example_value:"GenIA-L"},{name:"items",type:"list",help:"Niveles intermedios del breadcrumb. Cada item tiene su propio enlace. El último nivel NO se incluye aquí.",label:"Niveles intermedios",mandatory:!1,items:{type:"object",fields:[{name:"text",type:"text",help:"Texto del nivel intermedio. Admite HTML.",label:"Texto",example_value:"Categoría"},{name:"url",type:"text",help:"URL de destino de este nivel intermedio.",label:"URL",example_value:"/genia-l/categoria"}]}},{name:"text",type:"text",help:"Texto del último nivel del breadcrumb (la página actual). Admite HTML. No tiene enlace.",label:"Texto del último nivel",mandatory:!1,example_value:"Guía de fiscalidad para autónomos"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se usa para construir el enlace al inicio y la URL absoluta del breadcrumb en el structured data SEO. Déjalo vacío si el breadcrumb parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2025_Madrid",category:"Header",name:"Cabecera sticky con menú horizontal, CTA y submenús 2025",description:"Cabecera fija (sticky top-0) con logo de Lefebvre a la izquierda, botón CTA configurable a la derecha y barra de navegación horizontal debajo con 5 categorías (una de ellas con dropdown de subcategorías al hacer hover). En móvil, el menú se oculta y se activa con un botón hamburguesa. Incluye structured data schema.org (WebSite + SiteNavigationElement)",framework:"Astro",priority:1,tags:["header","cabecera","navegacion","sticky","menu","cta"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena a todos los enlaces del menú (inicio, categorías, subcategorías) y a la URL del structured data SEO. Déjalo vacío si el menú parte de la raíz',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Bilbao",category:"Header",name:"Cabecera con logo Lefebvre 2026",description:"Cabecera minimalista solo con el logo de Lefebvre, alineado a la izquierda o al centro",framework:"Astro",priority:1,tags:["cabecera","logo","lefebvre"],fields:[{name:"logoAlign",type:"select",help:"Posición del logo",label:"Alineación del logo",options:["left","center"],options_labels:["Izquierda","Centro"],example_value:""},{name:"subdirectory",type:"text",help:"Prefijo de la URL del sitio",label:"Subdirectorio",mandatory:!1,example_value:""},{name:"loading",type:"select",help:"Carga de la imagen del logo",label:"Carga de la imagen",options:["eager","lazy"],options_labels:["Inmediata","Diferida"],example_value:"eager"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Cabecera_2026_Madrid",category:"Header",name:"Cabecera sticky con menú configurable y subcategorías 2026",description:'Cabecera fija (sticky top-0) con logo de Lefebvre, botón CTA y menú horizontal completamente configurable vía prop "categories". Cada ítem admite target (_self o _blank) y una lista opcional de subcategorías en dropdown al hacer hover. Si no se pasa menú custom, cae en un menú por defecto. Incluye hamburguesa en móvil y structured data schema.org (WebSite + SiteNavigationElement)',framework:"Astro",priority:1,tags:["header","cabecera","navegacion","sticky","menu","cta","configurable"],fields:[{name:"label",type:"text",help:"Texto del botón CTA principal que aparece en la esquina superior derecha de la cabecera",label:"Texto del botón CTA",mandatory:!1,example_value:"Pruébalo ya"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena al enlace del logo y a las rutas del menú por defecto, y se usa en la URL del structured data SEO. Si se pasa un menú custom en "categories", este valor NO se aplica a esos enlaces — debes incluir la ruta completa en cada ítem',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"url",type:"text",help:'URL de destino del botón CTA. Por defecto "#"',label:"Enlace del botón CTA",mandatory:!1,example_value:"/genia-l/pruebalo"},{name:"loading",type:"select",help:'Tipo de carga del logo de la cabecera. Usa "eager" si el logo está above the fold (recomendado en páginas con cabecera visible al cargar); "lazy" si el componente se renderiza fuera del viewport inicial',label:"Carga del logo",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"eager"},{name:"categories",type:"list",help:'Ítems del menú principal de navegación. Si se deja vacío o no se pasa, se muestra el menú por defecto (Cómo funciona, Seguridad, Casos reales, Contacto, Blog). Si defines este listado, debes incluir la ruta completa en cada "link" — el campo "subdirectory" NO se concatena',label:"Ítems del menú (opcional)",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto visible del ítem del menú principal",label:"Texto del ítem",example_value:"Cómo funciona"},{name:"link",type:"text",help:'URL de destino del ítem. Debe ser la ruta completa (no se le concatena "subdirectory")',label:"URL del ítem",example_value:"/genia-l/conoce-genia-l/"},{name:"target",type:"select",help:'Cómo se abre el enlace: "_self" en la misma pestaña, "_blank" en una pestaña nueva',label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Card_2025_Malta",category:"Contenido con listas",name:"Grid responsive de cards minimalistas solo-título 2025",description:"Grid responsive (1 columna en móvil, 2 en tablet, 4 en desktop) de cards minimalistas que contienen únicamente un título h3 centrado, sin imagen ni descripción. Toda la card es clicable (navega al URL indicado) y muestra un borde degradado corporativo (indigo → azul → rosa) al hacer hover",framework:"Astro",priority:1,tags:["contenido","card","grid","clicable","minimalista"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (sm) y 4 en escritorio (lg)",label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Texto visible de la card. Es el único contenido que se muestra (no hay imagen ni descripción en este componente)",label:"Texto del título",example_value:"Guía de contratos digitales"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. Si se deja vacío, la card apunta a "#" (no navega a ningún sitio pero conserva el estilo clicable)',label:"URL de enlace",example_value:"/genia-l/guia-contratos-digitales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Alcorcon",category:"Contenido de Imagen",name:"Hero promocional con media de fondo y overlay de 4 niveles 2025",description:"Sección hero con esquinas redondeadas (rounded-2xl) que muestra una imagen o un vídeo MP4 como fondo y superpone un overlay centrado con cuatro niveles de texto: título h2 de tamaño grande responsive (hasta 64px en desktop), subtítulo, descripción HTML y botón CTA opcional. El vídeo se reproduce con autoplay, loop y muted. Media mutuamente excluyente: si se rellena el vídeo, la imagen se ignora",framework:"Astro",priority:1,tags:["contenido","video","imagen","hero","cta","boton"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece superpuesto sobre la imagen o vídeo de fondo. Si se deja vacío, no se muestra",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis durante 30 días"},{name:"subtitle",type:"text",help:"Subtítulo que aparece debajo del título. Si se deja vacío, no se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"La plataforma de IA jurídica para profesionales del Derecho"},{name:"description",type:"text",help:"Descripción que aparece debajo del subtítulo. Admite HTML. Si se deja vacía, no se muestra",label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tareas, redacta documentos y encuentra jurisprudencia relevante en segundos"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:"Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica cuando se usa imagen (no vídeo)",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Imagen de fondo de la sección promocional de GenIA-L"},{name:"src",type:"image",help:'URL de la imagen de fondo. Mutuamente exclusivo con el vídeo: si se rellena "URL del video", este campo se ignora',label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"iframeSrc",type:"video",help:"URL del vídeo embebido de fondo (se reproduce con autoplay, muted y loop). Tiene prioridad sobre la imagen: si se rellena, la imagen de fondo se ignora",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://player.vimeo.com/video/1087114916?controls=0&autoplay=1&muted=1&loop=1&badge=0&autopause=0&player_id=0&app_id=58479"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"loading",type:"select",help:'Tipo de carga de la imagen de fondo (solo aplica a imagen, no a vídeo). "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Cordoba",category:"Contenido de Texto",name:"Ítem con icono grande de certificación y título configurable 2025",description:"Ítem para destacar una certificación, acreditación o hito con un icono grande (5 variantes predefinidas: IA, ISO1, ISO2, GDPR, ISO3), título con etiqueta HTML seleccionable entre h1-h6/span (cada opción con tamaño y alineación distintos) y descripción centrada. Layout flex configurable: horizontal (icono al lado) o vertical (icono encima), con control de alineación vertical entre icono y texto",framework:"Astro",priority:1,tags:["contenido","icono","certificacion","item"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Se muestra siempre centrada y como texto plano (no admite HTML)",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. Cada opción aplica estilos distintos: "h1" 56px alineado a la izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"showBigIco",type:"boolean",help:'Si está activado, muestra el icono grande seleccionado en el campo "Icono". Si está desactivado, NO se muestra nada en el hueco del icono (se renderiza un espacio vacío)',label:"Mostrar icono grande",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al contenido (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible. "Vertical" apila el icono encima del texto y el item ocupa un ancho reducido (50% en móvil, 20% en desktop)',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Granada",category:"Contenido de Texto",name:"Ítem con icono pequeño en recuadro gris y ancho configurable 2025",description:"Ítem compacto para listados categorizados con un icono pequeño sobre fondo gris claro (23 variantes predefinidas: más, tienda, correcto, formación, caso, medalla, IA, balanza, compliance, librería, etc.), título con etiqueta HTML seleccionable (h1-h6/span) y descripción con soporte HTML. Layout flex configurable con control extra de ancho del bloque en orientación vertical (1/4 o 1/3 de columna)",framework:"Astro",priority:1,tags:["contenido","icono","item","listado"],fields:[{name:"title",type:"text",help:'Título del contenido. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título" (h1-h6 o span). No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Alineada a la izquierda",label:"Texto de la descripción",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"tipo",type:"select",help:'Etiqueta HTML y tamaño del título. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"showIco",type:"boolean",help:'Si está activado, muestra el icono seleccionado en el campo "Icono" con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al contenido (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"more"},{name:"positionFlex",type:"select",help:'Alineación vertical del icono respecto al bloque de texto. "Principio" alinea ambos arriba, "Centrado" los centra verticalmente',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto. "Horizontal" coloca el icono al lado del texto y el item ocupa todo el ancho disponible (en este modo el campo "Tamaño del bloque" no se aplica). "Vertical" apila el icono encima del texto y el item ocupa el ancho definido en "Tamaño del bloque"',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"widthBlock",type:"select",help:'Ancho del bloque cuando se usa orientación vertical (solo aplica si "Flex del item" está en Vertical; en Horizontal se ignora). "1/4" → 50% en tablet y 25% en desktop. "1/3" → 33% en desktop',label:"Tamaño del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Malaga",category:"Contenido de Imagen",name:"Sección hiper-configurable con texto, imagen lateral, botón y modal LF2 2025",description:"Sección de contenido altamente configurable con más de 20 campos: título pequeño tipo badge, subtítulo h2 con tamaño conmutable (56px/46px/40px), descripción HTML, imagen lateral opcional (posicionable a izquierda o derecha), botón primario y botón secundario que abre un modal con formulario LF2 inyectado dinámicamente. Ofrece controles finos de alineación vertical, tamaño de fuente del texto, padding horizontal, ancho del contenedor (full/3-5/7xl) y variantes de orientación icono-texto",framework:"Astro",priority:1,tags:["contenido","imagen","icono","texto","modal","formulario","lf2","cta","boton"],fields:[{name:"showIco",type:"boolean",help:'Si está activado, muestra un icono SVG circular (un "+" dentro de un círculo) junto al texto. Si está desactivado, el bloque se renderiza sin icono (con un layout de padding distinto)',label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título superior (pequeña etiqueta con fondo gris). Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del título",mandatory:!1,example_value:"Certificación ISO 27001"},{name:"subtitle",type:"text",help:'Subtítulo principal del bloque (h2). Admite HTML. Su tamaño lo controla el campo "Tamaño del h2"',label:"Texto del subtítulo",mandatory:!1,example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"description",type:"text",help:'Descripción que aparece debajo del subtítulo. Admite HTML. Su tamaño de fuente lo controla el campo "Tamaño de fuente del texto"',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza la gestión de riesgos, documenta controles y audita el cumplimiento normativo desde una única plataforma"},{name:"paddingLeft",type:"text",help:'Padding horizontal (en píxeles) entre el icono y el texto. Se aplica a la izquierda si "Alineación del contenido" es "Izquierda", o a la derecha si es "Derecha". Si se deja vacío, no se aplica padding',label:"Padding del texto (en px)",mandatory:!1,example_value:"24"},{name:"fontSize",type:"select",help:"Tamaño de fuente del bloque de descripción (no afecta al título ni al subtítulo)",label:"Tamaño de fuente del texto",options:["sm","base","lg","xl"],options_labels:["Pequeño","Base","Grande","Extra grande"],example_value:"base"},{name:"alignItems",type:"select",help:'Alineación vertical del contenedor principal. "Centro" alinea texto e imagen al centro vertical; "Inicio" los alinea arriba; "Fin" los alinea abajo',label:"Alineación vertical de los elementos",options:["center","start","end"],options_labels:["Centro","Inicio","Fin"],example_value:"center"},{name:"h2Size",type:"select",help:'Tamaño del subtítulo h2 en desktop. "Por defecto" = 56px (o 46px si "Mostrar icono" + "Mostrar imagen" están ambos activados). "40px" = 40px fijo. En móvil siempre 36px',label:"Tamaño del h2",options:["default","40px"],options_labels:["Por defecto","40px"],example_value:"default"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima del texto. Solo aplica si "Mostrar icono" está activado',label:"Orientación del contenido",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y aplica padding-left al texto; "Derecha" coloca la imagen a la derecha (flex invertido) y aplica padding-right al texto',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"width",type:"select",help:'Ancho del bloque de contenido. "Ancho completo" ocupa el 100% del contenedor padre; "3/5" ocupa el 60%; "7xl" aplica max-width de 7xl de Tailwind (1280px)',label:"Ancho del contenido",options:["full","3/5","7xl"],options_labels:["Ancho completo","Ancho 3/5","Ancho 7xl"],example_value:"full"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen (texto + imagen). Si está desactivado, se renderiza un layout alternativo solo con texto (con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen principal. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtnModal",type:"boolean",help:"Si está activado, muestra un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón de modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón de modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'URL de la imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón de modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo se usa si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L mostrando el panel de cumplimiento normativo"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Cumplimiento normativo ISO 27001"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Descubre cómo GenIA-L te ayuda a automatizar auditorías, documentar controles y mantener el cumplimiento de la norma ISO 27001"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-iso27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2025_Montevideo",category:"Contenido de Imagen",name:"Card clicable con imagen, tag, título, descripción y autor 2025",description:"Card individual totalmente clicable (la card entera es un enlace, no solo un botón) con imagen superior, etiqueta tipo badge opcional, título h3, descripción y línea de autor opcional. Muestra un borde degradado corporativo (indigo → azul → rosa) al hacer hover. Diseñada para usarse como unidad base dentro de grids como Contenido_2026_Estocolmo o Contenido_2026_Seattle",framework:"Astro",priority:1,tags:["contenido","card","imagen","clicable","autor","badge"],fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con GenIA-L"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"description",type:"text",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/blog/automatizacion-contratos"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"tag",type:"text",help:"Etiqueta que aparece sobre el título (tipo badge). Si se deja vacía, NO se muestra",label:"Etiqueta del contenido",mandatory:!1,example_value:"Legaltech"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",mandatory:!1,example_value:"María García López"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Cabra",category:"Contenido con listas",name:"Sección de tabs interactivas con contenido y miniatura lateral 2026",description:'Sección con pestañas horizontales en la parte superior que, al hacerse click, muestran un panel con título grande, listado de ítems (icono + texto) a la izquierda e imagen a la derecha. Incluye script inline que gestiona la conmutación entre pestañas y resalta la activa. La pestaña marcada como "default" es la que se muestra al cargar la página. Incluye structured data schema.org (ItemList + InteractionCounter)',framework:"Astro",priority:1,tags:["contenido"],fields:[{name:"items",type:"list",help:'Listado de pestañas del tab. Cada pestaña tiene su nombre, contenido (items internos con icono y texto) e imagen. La pestaña marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de pestañas",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Introduce el nombre de la pestaña",label:"Nombre de la pestaña",example_value:"Pestaña 1"},{name:"title",type:"text",help:"Título del elemento (h4)",label:"Título",example_value:"Redacción de contratos"},{name:"description",type:"textArea",help:"Descripción del elemento",label:"Descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"icon",type:"text",help:"Nombre del icono a mostrar junto al elemento. Consulta los valores aceptados en el componente Contenido_2026_Menorca",label:"Icono",example_value:"edit"},{name:"buttonUrl",type:"text",help:"Introduce la URL de destino del botón (Solo es necesario completar este campo en uno de los elementos de la misma pestaña)",label:"URL del botón",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"Introduce la URL de la imagen de la pestaña (Solo es necesario completar este campo en uno de los elementos de la misma pestaña)",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Dubai",category:"Contenido con listas",name:"Bloque intro con título, descripción, CTA y carrusel mixto vídeo/imagen 2026",description:"Bloque compuesto de cabecera (título h2, descripción HTML, botón CTA opcional) seguida de un carrusel horizontal que mezcla ítems de vídeo (iframe con thumbnail antes de reproducir) e ítems de imagen en el mismo listado. Los ítems de vídeo incluyen testimonio + autor + cargo y structured data SEO (VideoObject). Los ítems de imagen exponen alt y descripción para el structured data",framework:"Astro",priority:1,tags:["contenido","carrusel","video","imagen","cta","boton","seo"],fields:[{name:"title",type:"text",help:"Título principal (h2) que aparece sobre el carrusel. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Experiencias reales con GenIA-L"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo profesionales del Derecho están transformando su día a día con inteligencia artificial"},{name:"buttonText",type:"text",help:'Texto del botón que aparece debajo del carrusel. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón debajo del carrusel. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Listado de ítems del carrusel. Cada ítem puede ser un VÍDEO (si se rellena "Url iframe") o una IMAGEN (si se deja el iframe vacío y se rellena "Imagen"). Los dos tipos pueden coexistir en el mismo carrusel. Algunos subcampos aplican solo a un tipo u otro',label:"Listado de items del carrusel",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:'URL del iframe del vídeo (p. ej. Vimeo/YouTube). Si tiene valor, el ítem se renderiza como VÍDEO (con thumbnail "Url imagen" hasta que se reproduzca). Si se deja vacío, el ítem se renderiza como IMAGEN',label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"text",help:'Thumbnail/preview del vídeo que se muestra antes de reproducirlo. Solo aplica a ítems tipo VÍDEO (cuando "Url iframe" tiene valor)',label:"Url imagen (thumbnail del vídeo)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura usada en el structured data SEO del vídeo. Solo aplica a ítems tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"image",type:"image",help:'Imagen del ítem. Solo aplica cuando el ítem es tipo IMAGEN (es decir, cuando "Url iframe" está vacío)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a ítems tipo IMAGEN",label:"Alt Imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"descriptionImage",type:"textArea",help:"Descripción de la imagen para el structured data SEO. Solo aplica a ítems tipo IMAGEN",label:"Descripción de imagen",example_value:"Captura del dashboard de GenIA-L mostrando el editor de contratos"},{name:"description",type:"textArea",help:"Descripción del ítem (testimonio o comentario). Se muestra junto al autor en los ítems tipo VÍDEO",label:"Descripción",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a ítems tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra junto a la descripción en los ítems tipo VÍDEO",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a ítems tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal en Despacho García"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Estocolmo",category:"Contenido con listas",name:"Wrapper grid responsive que renderiza cards Contenido_2025_Montevideo 2026",description:"Contenedor grid responsive (1 columna en móvil, 2 en tablet hasta 400px cada una, 3 en desktop hasta 400px cada una) que itera un listado de ítems y renderiza cada uno como Contenido_2025_Montevideo. No añade cabecera ni botones propios — es un wrapper puro que agrupa cards clicables con imagen, tag, título, descripción y autor",framework:"Astro",priority:1,tags:["contenido","card","grid","wrapper","imagen","autor"],fields:[{name:"items",type:"list",help:"Listado de cards que se muestran en un grid responsive: 1 columna en móvil, 2 en tablet (máx 400px cada una) y 3 en escritorio (máx 400px cada una). Cada card es clicable y se renderiza con el componente Contenido_2025_Montevideo",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card (h3). Se muestra siempre; si se deja vacío, aparece el h3 vacío",label:"Título",example_value:"Automatización de contratos con GenIA-L"},{name:"description",type:"textArea",help:"Descripción de la card. Se muestra siempre como párrafo; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"link",type:"text",help:'URL de destino al hacer click en la card (toda la card es clicable). Si se deja vacío, apunta a "#" (no navega)',label:"Url del enlace",example_value:"/genia-l/blog/automatizacion-contratos"},{name:"tag",type:"text",help:"Etiqueta (badge) que aparece sobre el título. Si se deja vacía, NO se muestra",label:"Etiqueta",example_value:"Legaltech"},{name:"image",type:"image",help:"Imagen de la card (aparece en la parte superior). Se renderiza siempre; si se deja vacía aparece una imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"},{name:"author",type:"text",help:'Nombre del autor del contenido. Se muestra como "Por [nombre]" debajo de la descripción. Si se deja vacío, la línea de autor NO se muestra',label:"Nombre del autor",example_value:"María García López"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Jaen",category:"Contenido de Imagen",name:"Cabecera enriquecida de post con autor, colegiado, imagen lateral y RRSS 2026",description:"Cabecera de artículo de blog con título configurable mediante 8 variantes de estilo preestablecidas (H1 categoría blog, H1 autor blog, H1 post blog, H1 post enriquecido, H2 blog, H2, H3, H4), subtítulo, número de colegiado del autor, descripción con tipografía conmutable (Poppins grande o Inter compacto), imagen lateral opcional con posición configurable (izquierda o derecha) y bloque de redes sociales al final con iconos que solo aparecen si su URL está rellena",framework:"Astro",priority:1,tags:["contenido","blog","cabecera","rrss","autor","imagen","titulo"],fields:[{name:"title",type:"text",help:'Título principal. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". Admite HTML',label:"Texto del título",mandatory:!1,example_value:"Inteligencia artificial en el despacho: casos reales"},{name:"subtitle",type:"text",help:"Subtítulo opcional que aparece junto al número de colegiado. Admite HTML. Si se deja vacío, NO se muestra",label:"Texto del subtítulo",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"number",type:"text",help:'Número de colegiado del autor. Se muestra como "Nº colegiado: [valor]". Si se deja vacío, NO se muestra',label:"Número de colegiado",mandatory:!1,example_value:"12345"},{name:"description",type:"text",help:'Descripción que aparece debajo del título y subtítulo. Admite HTML. Su tipografía y tamaño los controla el campo "Estilo de la descripción"',label:"Texto de la descripción",mandatory:!1,example_value:"Tres experiencias reales de profesionales del Derecho que han incorporado GenIA-L en su día a día"},{name:"image",type:"image",help:"Imagen lateral. Si tiene valor, el layout se convierte en dos columnas (texto + imagen). Si se deja vacía, NO se muestra imagen y el texto ocupa todo el ancho",label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"imageAlt",type:"text",help:'Texto alternativo de la imagen para accesibilidad. Solo aplica si "Imagen" tiene valor',label:"Alt de la imagen",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"tipo",type:"select",help:'Etiqueta HTML y estilo del título. Cada opción aplica estilos distintos: "h1 categoría blog" 40px centrado normal, "h1 autor blog" 40px izquierda semibold, "h1 post blog" 40px centrado semibold, "h1 post enriquecido" 40px izquierda semibold, "h2 blog" 28px/32px izquierda normal, "h2" 36px/40px centrado normal, "h3" 20px/24px izquierda semibold, "h4" xl izquierda semibold. Si se elige un valor fuera de la lista, el título se renderiza como párrafo simple',label:"Etiqueta del título",options:["h1-blog-categoria","h1-blog-autor","h1-blog-post","h1-blog-postenriquecido","h2-blog","h2","h3","h4"],options_labels:["H1 categoría blog","H1 autor blog","H1 post blog","H1 post enriquecido blog","H2 blog","H2","H3","H4"],example_value:"h1-blog-autor"},{name:"flexJustify",type:"select",help:'Justificación horizontal del bloque de texto. "Centrado" centra el contenido en su columna; "Inicio" lo alinea a la izquierda',label:"Justificación del contenido",options:["justify-center","justify-start"],options_labels:["Centrado","Inicio"],example_value:"justify-center"},{name:"textAlign",type:"select",help:"Alineación del texto dentro del párrafo de descripción",label:"Alineación del texto",options:["center","left","right"],options_labels:["Centro","Izquierda","Derecha"],example_value:"center"},{name:"descriptionStyle",type:"select",help:'Tipografía y tamaño del párrafo de descripción. "Poppins" aplica Poppins xl con leading 7 y margen inferior grande (para descripciones destacadas); "Inter" aplica Inter base sin margen (para descripciones compactas)',label:"Estilo de la descripción",options:["poppins","inter"],options_labels:["Poppins (grande)","Inter (compacto)"],example_value:"poppins"},{name:"imagePosition",type:"select",help:'Posición de la imagen respecto al texto (solo aplica si "Imagen" tiene valor). "Derecha" coloca la imagen a la derecha del texto; "Izquierda" la coloca a la izquierda',label:"Posición de la imagen",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"items",type:"list",help:"Listado de bloques de redes sociales y opciones de compartir. Cada bloque se renderiza con el componente RRSS_2025_Pisa. Habitualmente se configura UN solo bloque con todos los enlaces rellenos; si hay varios se mostrarán en fila. Si se deja vacío, el bloque de RRSS NO se muestra",label:"Items de redes sociales",mandatory:!1,items:{type:"object",fields:[{name:"facebook",type:"text",help:"URL del perfil de Facebook. Si se deja vacía, el icono de Facebook NO aparece",label:"URL de Facebook",example_value:"https://facebook.com/lefebvre.es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacía, el icono de X NO aparece",label:"URL de Twitter/X",example_value:"https://x.com/lefebvre_es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacía, el icono de LinkedIn NO aparece",label:"URL de LinkedIn",example_value:"https://linkedin.com/company/lefebvre-es"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (p. ej. https://wa.me/...). Si se deja vacía, el icono de WhatsApp NO aparece",label:"URL de WhatsApp",example_value:"https://wa.me/34600000000"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacía, el icono de Instagram NO aparece",label:"URL de Instagram",example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacía, el icono de YouTube NO aparece",label:"URL de YouTube",example_value:"https://youtube.com/@lefebvre"},{name:"email",type:"text",help:"Dirección de email de contacto. Si se deja vacía, el icono de email NO aparece",label:"Email",example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Activa el botón de imprimir que ejecuta window.print() en la página actual",label:"Mostrar botón imprimir",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"copyLink",type:"boolean",help:"Activa el botón de copiar enlace que copia la URL actual al portapapeles",label:"Mostrar botón copiar enlace",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Leon",category:"Contenido de Texto",name:"Contenido de prueba Paco 2026",description:'Componente de prueba que renderiza un saludo simple "Hola, soy [nombre]". Uso interno / testing',framework:"Astro",priority:1,tags:["contenido","prueba","genial"],fields:[{name:"nombre",type:"text",help:'Nombre que se mostrará en el saludo. Se inserta en el texto como "Hola, soy [nombre]". Si se deja vacío, aparece el valor por defecto "#"',label:"Nombre",mandatory:!1,example_value:"Paco"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mallorca",category:"Contenido con listas",name:"Wrapper de ítems con icono grande de certificación y botón CTA 2026",description:"Contenedor que itera un listado de bloques tipo certificación/hito: cada ítem combina un icono grande (5 variantes: IA, ISO1, ISO2, GDPR, ISO3) con título de etiqueta HTML configurable y descripción. Ofrece controles de alineación vertical, orientación icono-texto intra-ítem y entre ítems (fila/columna), más un botón CTA opcional al final. Cada ítem se renderiza con Contenido_2025_Cordoba",framework:"Astro",priority:1,tags:["contenido","icono","boton","cta"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono grande respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3" 2xl semibold izquierda, "h3-center" 2xl semibold centrado, "h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h3-center","h4","h5","h6","span"],options_labels:["H1","H2","H3","H3 centrado","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:"Listado de items de contenido con icono grande, título y descripción. Cada item se renderiza con el componente Contenido_2025_Cordoba",label:"Items de contenido",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Certificación ISO 27001"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título centrada y como texto plano (no admite HTML)",label:"Descripción",example_value:"Gestión de la seguridad de la información conforme a estándares internacionales"},{name:"showBigIco",type:"boolean",help:"Si está activado, muestra el icono grande seleccionado junto al contenido del item. Si está desactivado, NO se muestra icono (el hueco queda vacío)",label:"Mostrar icono grande",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"bigIcon",type:"select",help:'Icono grande que se muestra junto al item (solo si "Mostrar icono grande" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono grande",options:["bigIA","bigIso1","bigIso2","bigGDPR","bigIso3"],options_labels:["IA","Iso1","Iso2","GDPR","Iso3"],example_value:"bigIso2"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Marruecos",category:"Contenido con listas",name:"Caja con borde degradado, ítems con icono SVG y CTA siempre visible 2026",description:"Caja rectangular con borde degradado corporativo que contiene título h2, listado de ítems apilados verticalmente (cada uno con icono SVG de 3 variantes fijas — chat, libro o check — subtítulo h3 y descripción) y un botón CTA en la esquina inferior. IMPORTANTE: el botón se renderiza SIEMPRE (no hay toggle para ocultarlo); si el texto está vacío aparece un botón sin label",framework:"Astro",priority:1,tags:["contenido","icono","card","cta","boton","gradiente"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2) que aparece en la parte superior de la caja. Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Título",mandatory:!1,example_value:"Ventajas de GenIA-L para tu despacho"},{name:"buttonText",type:"text",help:'Texto del botón CTA en la esquina inferior. ATENCIÓN: este componente NO tiene prop "Mostrar botón" — el botón aparece SIEMPRE. Si se deja vacío, aparecerá un botón sin texto',label:"Texto del botón",mandatory:!1,example_value:"Solicitar demo"},{name:"buttonHref",type:"text",help:'URL de destino del botón CTA. Por defecto "#". Recuerda que el botón se renderiza siempre; si dejas esta URL vacía, apuntará a "#" (no navegará)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"items",type:"list",help:"Listado de items de la caja. Cada item tiene un icono (de 3 opciones fijas), un subtítulo y una descripción. Los items se apilan verticalmente con un gap",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:'Icono del item (SVG con gradiente de color). Solo se reconocen 3 valores: "chat" (burbuja de chat), "book" (libro) y "check" (marca de verificación). Si se elige cualquier otro valor, no aparece ningún icono y el hueco queda vacío',label:"Icono",options:["chat","book","check"],options_labels:["Chat","Libro","Check"],example_value:"chat"},{name:"subtitle",type:"text",help:"Subtítulo del item (h3). Se renderiza siempre; si se deja vacío, aparece el h3 vacío. No admite HTML",label:"Subtítulo",example_value:"Asistente conversacional"},{name:"description",type:"textArea",help:"Descripción del item. Se renderiza siempre como párrafo; si se deja vacía, aparece el párrafo vacío. No admite HTML",label:"Descripción",example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, sin necesidad de construir queries complejas"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Menorca",category:"Contenido con listas",name:"Wrapper de ítems con icono pequeño en recuadro gris y botón CTA 2026",description:"Contenedor que itera bloques de contenido con icono pequeño sobre fondo gris claro (23 variantes predefinidas: más, tienda, correcto, formación, caso, medalla, IA, balanza, compliance, librería, etc.), título con etiqueta HTML configurable y descripción HTML. Permite controlar orientación intra-ítem y entre ítems, ancho por ítem (1/4 o 1/3 en vertical) y añadir un botón CTA opcional al final. Cada ítem se renderiza con Contenido_2025_Granada",framework:"Astro",priority:1,tags:["contenido","icono","wrapper","cta","boton","item"],fields:[{name:"positionFlex",type:"select",help:'Alineación vertical del contenedor principal. "Centrado" centra verticalmente los items; "Principio" los alinea arriba',label:"Posición del item",options:["items-start","items-center"],options_labels:["Principio","Centrado"],example_value:"items-start"},{name:"positionBtnFlex",type:"select",help:'Alineación horizontal del botón CTA inferior. "Centrado" sitúa el botón en el centro; "Principio" lo alinea a la izquierda. Solo aplica si "Mostrar botón" está activado',label:"Posición del botón",options:["justify-center","justify-start"],options_labels:["Centrado","Principio"],example_value:"justify-center"},{name:"flexOrientationIcoText",type:"select",help:'Orientación del icono respecto al texto DENTRO de cada item. "Horizontal" coloca el icono al lado del texto; "Vertical" apila el icono encima',label:"Flex del icono del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"flexOrientationBlockIcoText",type:"select",help:'Orientación del conjunto de items entre sí. "Horizontal" coloca los items en fila (con flex-wrap); "Vertical" los apila en columna',label:"Flex del item",options:["flex-row","flex-col"],options_labels:["Horizontal","Vertical"],example_value:"flex-row"},{name:"headingType",type:"select",help:'Etiqueta HTML y estilo del título de cada item. "h1" 56px izquierda, "h2" 40px izquierda, "h3"/"h4" 2xl semibold izquierda, "h5"/"h6" sin estilos, "span" texto gris sin formato',label:"Etiqueta del título",options:["h1","h2","h3","h4","h5","h6","span"],options_labels:["H1","H2","H3","H4","H5","H6","Span"],example_value:"h2"},{name:"btnLabel",type:"text",help:'Texto del botón CTA inferior. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las funcionalidades"},{name:"buttonUrl",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido. Rellena siempre esta URL si activas el botón',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/funcionalidades"},{name:"showBtn",type:"boolean",help:'Activa o desactiva la visualización del botón CTA inferior. ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"widthArticle",type:"select",help:'Ancho del contenedor principal. Actualmente solo está soportado "w-full" (100%)',label:"Ancho del Article",options:["w-full"],options_labels:["Ancho completo"],example_value:"w-full"},{name:"items",type:"list",help:"Listado de items de contenido con icono pequeño, título y descripción. Cada item se renderiza con el componente Contenido_2025_Granada",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:'Título del item. Se renderiza con la etiqueta HTML seleccionada en "Etiqueta del título". No admite HTML',label:"Título",example_value:"Búsqueda semántica"},{name:"description",type:"textArea",help:"Descripción del item. Se muestra debajo del título y admite HTML",label:"Descripción",example_value:"Encuentra jurisprudencia y doctrina relevante con consultas en lenguaje natural"},{name:"showIco",type:"boolean",help:"Si está activado, muestra el icono seleccionado con fondo gris claro. Si está desactivado, no se renderiza el bloque del icono",label:"¿Mostrar icono?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"icon",type:"select",help:'Icono que se muestra junto al item (solo si "Mostrar icono" está activado). Si se elige un valor fuera de la lista, no aparece ningún icono',label:"Icono",options:["more","shop","correct","formation","case","medal","medal2","search-text","checklist","certificate","ico-ok","shield","edit","ia","users","graphic","balance","calendar-check","documents","compliance","library","support","defendant"],options_labels:["Más","Tienda","Correcto","Formación","Caso","Medalla","Medalla 2","Buscar texto","Checklist","Certificado","OK","Escudo","Editar","IA","Usuarios","Gráfico","Balanza","Calendario check","Documentos","Compliance","Librería","Soporte","Demandado"],example_value:"search-text"},{name:"widthBlock",type:"select",help:'Ancho del item cuando se usa orientación vertical en "Flex del item" (Vertical). "1/4" = 50% tablet / 25% desktop. "1/3" = 33% desktop. En orientación horizontal este campo se ignora',label:"Ancho del bloque (solo en orientación Vertical)",options:["lg:w-1/4 md:w-2/4","lg:w-1/3"],options_labels:["1/4","1/3"],example_value:"lg:w-1/4 md:w-2/4"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Michigan",category:"Contenido con listas",name:"Listado de artículos con texto, imagen y modal LF2 con botones globales 2026",description:"Listado vertical de artículos renderizados con Formulario_2025_Teruel, donde imagen lateral y orientación son globales (se aplican a todos los ítems por igual). El botón primario y su URL también son globales (todos los artículos comparten texto y enlace), pero el contenido del modal LF2 (imagen, título, subtítulo, descripción, nombre del formulario) es específico por ítem. Todos los artículos llevan borde inferior separador salvo el último",framework:"Astro",priority:1,tags:["contenido","texto","imagen","modal","formulario","lf2","cta","listado"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto en CADA artículo. "Izquierda" coloca la imagen a la izquierda en todos los artículos; "Derecha" a la derecha. Esta orientación es GLOBAL — se aplica a todos los ítems por igual',label:"Alineación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario en TODOS los artículos. Los botones primarios son globales: todos los artículos comparten el mismo texto y enlace. Recuerda: también requiere "Enlace del botón" relleno',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario (global para todos los artículos). Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (global para todos los artículos). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/saber-mas"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el botón que abre el modal en TODOS los artículos. El modal se rellena con los datos específicos de cada ítem (imagen/título/descripción del modal)",label:"Mostrar botón Modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal (global para todos los artículos). Se muestra solo si "Mostrar botón Modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en pdf"},{name:"items",type:"list",help:"Listado de artículos. Cada artículo se renderiza con el componente Formulario_2025_Teruel. Todos los artículos llevan borde inferior separador EXCEPTO el último. Los datos del modal son específicos por ítem",label:"Listado de artículos",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título del artículo. Se renderiza siempre; si se deja vacío, aparece el título vacío",label:"Título",example_value:"Automatización de contratos con IA"},{name:"description",type:"textArea",help:"Descripción del artículo. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Descripción",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas y sugerencias basadas en jurisprudencia"},{name:"image",type:"image",help:"Imagen principal del artículo. Se muestra al lado del texto según la orientación global",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón Modal" está activado',label:"Imagen del modal",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"titleModal",type:"text",help:'Título que aparece dentro del modal. Solo se usa si "Mostrar botón Modal" está activado',label:"Título del modal",example_value:"Guía completa de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo que aparece dentro del modal, debajo del título. Solo se usa si "Mostrar botón Modal" está activado',label:"Subtítulo del modal",example_value:"Descarga el whitepaper de 40 páginas"},{name:"descriptionModal",type:"textArea",help:'Descripción que aparece dentro del modal. Admite HTML. Solo se usa si "Mostrar botón Modal" está activado',label:"Descripción del modal",example_value:"Descubre cómo reducir el tiempo de redacción de contratos en un 70% con técnicas de IA aplicadas al ámbito jurídico"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",example_value:"Portada de la guía de automatización jurídica con IA"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",example_value:"formulario-descarga-guia-automatizacion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Mostoles",category:"Contenido de Imagen",name:"Banner CTA con doble variante: imagen de fondo o borde degradado con logo 2026",description:'Banner CTA con dos variantes alternativas según el toggle "Mostrar imagen" y si hay imagen. Variante 1 (imagen activada y URL rellena): imagen de fondo cover con overlay. Variante 2 (imagen desactivada o URL vacía): layout alternativo con borde degradado corporativo y logo grande como marca de agua. Incluye botón primario configurable y botón secundario que abre modal con formulario LF2 inyectado dinámicamente',framework:"Astro",priority:1,tags:["contenido","imagen","banner","cta","boton","modal","formulario","lf2","gradiente"],fields:[{name:"title",type:"text",help:"Título principal del banner (h3). Si se deja vacío, NO se muestra. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Prueba GenIA-L gratis"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Si se deja vacía, NO se muestra. Si tanto título como descripción están vacíos, el contenido se centra verticalmente con el botón",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo la IA jurídica transforma tu día a día"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showImage",type:"boolean",help:'Activa/desactiva la imagen de fondo. Si ESTÁ ACTIVADO y "Imagen" tiene valor → layout con imagen de fondo cover (SIN borde degradado). Si ESTÁ DESACTIVADO o "Imagen" vacía → layout alternativo con borde degradado de color y logo grande de GenIA-L como marca de agua',label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"src",type:"image",help:'URL de la imagen de fondo. Solo se usa cuando "Mostrar imagen" está activado. Si se deja vacía, se activa el layout alternativo con borde degradado y logo de GenIA-L',label:"Imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva el segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de la interfaz de GenIA-L con el panel de automatización"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"Más sobre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal",label:"Descripción del modal",mandatory:!1,example_value:"Descubre todas las funcionalidades de la plataforma de IA jurídica para despachos"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-contacto-genial"},{name:"idebook",type:"text",help:"ID del ebook, whitepaper o documento registrado en BI con formato EXXXXXXX para pasar como parámetro oculto al formulario de LF2. No es obligatorio, solo debe usarse para formularios que acabaran con una descarga",label:"ID de documento en BI (opcional)",mandatory:!1,example_value:""}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Orcasitas",category:"Contenido con listas",name:"Carrusel Glider.js con slides mixtos vídeo-popup o imagen-descripción 2026",description:"Carrusel horizontal responsive basado en Glider.js (breakpoints adaptativos 5→4→3→2→1 slides según anchura) con dos tipos de slide coexistentes: vídeos (abren en popup al hacer click, con thumbnail + testimonio + autor + cargo + structured data VideoObject) e imágenes (con descripción debajo y ancho auto-adaptativo 600/400/250px según cantidad). Dependencias Glider cargables desde CDN o reutilizables globales",framework:"Astro",priority:1,tags:["contenido","carrusel","video","imagen","popup","glider","seo","responsive"],fields:[{name:"slidesToShow",type:"text",help:"Número de slides visibles a la vez en desktop. Se ajusta automáticamente en tamaños menores (breakpoints responsive: 5→4→3→2→1 según anchura). Default 5",label:"Número de slides a mostrar",mandatory:!1,example_value:"3"},{name:"slidesToScroll",type:"text",help:"Número de slides que se desplazan al pulsar las flechas o arrastrar. Default 1 (scroll suave uno a uno)",label:"Número de slides a desplazar",mandatory:!1,example_value:"1"},{name:"loadScript",type:"boolean",help:"Si está activado, el componente carga CSS y JS de Glider.js desde el CDN. Actívalo si el carrusel es el único componente de la página que necesita Glider; desactívalo si Glider ya está cargado globalmente en la página para evitar duplicados",label:"Cargar dependencias",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"items",type:"list",help:'Slides del carrusel. Cada slide puede ser un VÍDEO (si se rellena "Url iframe" — abre en popup al hacer click) o una IMAGEN (si se deja el iframe vacío y se rellena "URL Imagen" — aparece con descripción debajo). Los dos tipos pueden coexistir en el mismo carrusel. IMPORTANTE: dentro de cada slide rellena SOLO los campos de vídeo O SOLO los de imagen, nunca los dos a la vez. Campos de VÍDEO: "Url iframe", "Thumbnail del vídeo", "Url miniatura (SEO)", "Descripción (testimonio)", "Nombre del autor", "Cargo del autor", "Fecha de publicación". Campos de IMAGEN: "Imagen", "Alt Imagen", "Descripción de la imagen"',label:"Listado de slides",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.). Si tiene valor, el slide se renderiza como VÍDEO: muestra un thumbnail clicable que abre el vídeo en un popup. Si se deja vacío, el slide se renderiza como IMAGEN",label:"Url iframe",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail del vídeo que se muestra en el slide antes de abrir el popup. Solo aplica a slides tipo VÍDEO",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura para el structured data SEO del vídeo. Solo aplica a slides tipo VÍDEO",label:"Url miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'En slides tipo VÍDEO: testimonio/cita del autor (se muestra con su nombre y cargo). En slides tipo IMAGEN: no se muestra, se usa "Descripción de imagen"',label:"Descripción (testimonio)",example_value:"GenIA-L nos ha reducido el tiempo de redacción de contratos en un 70%"},{name:"author",type:"text",help:"Nombre del autor del testimonio. Se muestra en slides tipo VÍDEO junto a la descripción",label:"Nombre del autor",example_value:"María García López"},{name:"positionCompany",type:"text",help:"Cargo del autor en su empresa. Aparece debajo del nombre. Solo aplica a slides tipo VÍDEO",label:"Cargo del autor",example_value:"Socia directora de Derecho Fiscal"},{name:"uploadDate",type:"text",help:"Fecha de publicación del vídeo (formato ISO YYYY-MM-DD). Se usa en el structured data SEO. Solo aplica a slides tipo VÍDEO",label:"Fecha de publicación",example_value:"2026-01-15"},{name:"image",type:"image",help:'Imagen del slide. Solo aplica a slides tipo IMAGEN (cuando "Url iframe" está vacío). El ancho se adapta automáticamente según cuántas imágenes haya (1→600px, 2→400px, 3 o más→250px)',label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad. Solo aplica a slides tipo IMAGEN",label:"Alt Imagen",example_value:"Logo de corporación colaboradora de GenIA-L"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen del slide. Solo aplica a slides tipo IMAGEN",label:"Descripción de la imagen",example_value:"Colaborador destacado del ecosistema legaltech español"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Oslo",category:"Contenido con listas",name:"Grid de 3 columnas con thumbnails de vídeo que abren en popup iframe 2026",description:"Grid responsive (3 columnas en desktop, 1 en móvil) de thumbnails de vídeo. Al hacer click en un thumbnail, el vídeo embebido (iframe Vimeo/YouTube) se abre en un popup modal. La descripción del ítem aparece debajo del thumbnail, y también se usa como alt de la imagen y en el structured data SEO del vídeo",framework:"Astro",priority:1,tags:["contenido","popup","video","grid","modal","seo"],fields:[{name:"items",type:"list",help:"Listado de vídeos que se muestran como grid (3 columnas en desktop, 1 en móvil). Cada thumbnail abre el vídeo en un popup al hacer click. Campo obligatorio: si no se pasa, el componente falla al renderizar",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"iframeSrc",type:"text",help:"URL del vídeo embebido (Vimeo, YouTube, etc.) que se abrirá en el popup al hacer click en el thumbnail. Si se deja vacío, el popup abre sin contenido",label:"Url del vídeo (iframe)",example_value:"https://player.vimeo.com/video/123456"},{name:"imageSrc",type:"image",help:"Thumbnail que se muestra en el grid antes de abrir el popup. Si se deja vacío, aparece una imagen rota",label:"Thumbnail del vídeo",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"description",type:"textArea",help:'Descripción que aparece debajo del thumbnail (centrada, pequeña, semibold). Admite HTML. También se usa como alt de la imagen y en el structured data SEO. Si se deja vacía, el alt será "Video thumbnail" por defecto',label:"Descripción",example_value:"Automatización de contratos con IA"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Quito",category:"Contenido con listas",name:"Bloque de datos de contacto con iconos teléfono/email/ubicación 2026",description:"Bloque vertical de datos de contacto con título h2 y listado de ítems; cada ítem combina un icono SVG (3 variantes fijas: teléfono, email o localización) y un texto HTML. El ÚLTIMO ítem del listado se resalta en azul. Genera structured data schema.org ContactPoint extrayendo automáticamente el primer ítem de cada tipo (phone/email/locator)",framework:"Astro",priority:1,tags:["contenido","contacto","icono","seo","listado"],fields:[{name:"title",type:"text",help:"Título del bloque de contacto (h2). Se usa también como nombre del ContactPoint en el structured data SEO. Se renderiza siempre; si se deja vacío, aparece el h2 vacío",label:"Título del bloque",mandatory:!1,example_value:"Contacto comercial"},{name:"items",type:"list",help:'Listado de datos de contacto. Cada item tiene un icono (teléfono, email o localización) y un texto. El structured data SEO extrae el PRIMER item con icono "phone" como teléfono, el PRIMER con "email" como email, y el PRIMER con "locator" como localidad. Además, el ÚLTIMO item del listado se resalta en azul',label:"Listado de items de contacto",mandatory:!1,items:{type:"object",fields:[{name:"icon",type:"select",help:"Icono del item. Los 3 valores válidos renderizan un SVG específico. Además, el icono determina qué tipo de dato (teléfono/email/localidad) se usa en el structured data SEO",label:"Icono",options:["phone","email","locator"],options_labels:["Teléfono","Email","Localización"],example_value:"phone"},{name:"text",type:"text",help:"Texto del item (número de teléfono, dirección de email, dirección postal, etc.). Admite HTML (útil para enlaces mailto: o tel:)",label:"Texto",example_value:"+34 91 210 80 00"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Seattle",category:"Contenido con listas",name:"Listado con cards 2026",description:"Listado con tarjetas",framework:"Astro",priority:1,tags:["contenido","cards","genial"],fields:[{name:"items",type:"list",help:'Listado de cards. Cada card tiene su nombre, contenido (items internos con icono y texto) e imagen. La card marcada como "default" es la que se muestra al cargar; las demás arrancan ocultas y se activan al hacer click en su botón',label:"Listado de cards",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Título de la card, se renderiza como h3. Si se deja vacío, aparece el h3 vacío (no se oculta automáticamente)",label:"Título",example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables"},{name:"description",type:"textArea",help:"Descripción de la card, se renderiza como párrafo debajo del título. Si se deja vacía, aparece el párrafo vacío (no se oculta automáticamente)",label:"Texto de la descripción",example_value:"Genera borradores de contratos a partir de plantillas personalizables en segundos"},{name:"link",type:"text",help:'URL de destino cuando se hace click en la card. TODA la card es clicable (no solo un botón). Si se deja vacío, apunta a "#" (no navega pero conserva el estilo clicable)',label:"Url del enlace",example_value:"https://lefebvre.es"},{name:"image",type:"image",help:"URL de la imagen de la card (aparece en la parte superior). Se renderiza siempre, por lo que conviene no dejarla vacía o se mostrará una imagen rota",label:"Src de la imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen de la card para accesibilidad",label:"Texto alternativo de la imagen",example_value:"Captura de la interfaz de GenIA-L generando un contrato automáticamente"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Sevilla",category:"Contenido de Imagen",name:"Sección con título h1, imagen lateral conmutable, icono y modal LF2 2026",description:"Sección de contenido con título h1 grande (56px desktop), descripción HTML, imagen lateral conmutable (izquierda o derecha, con toggle de visibilidad), icono SVG opcional (orientación fila o columna respecto al texto) y dos botones: primario (requiere URL relleno) y secundario que abre modal con formulario LF2 inyectado dinámicamente",framework:"Astro",priority:1,tags:["contenido","popup","texto","imagen","modal","formulario","lf2","cta","boton","icono"],fields:[{name:"showIco",type:"boolean",help:"Si está activado, muestra un icono SVG junto al texto. Si está desactivado, el bloque se renderiza sin icono",label:"Mostrar icono",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"title",type:"text",help:"Título principal del bloque (h1, 56px en desktop). Admite HTML. Se renderiza siempre; si se deja vacío, aparece el h1 vacío",label:"Texto del título",mandatory:!1,example_value:"Transforma tu despacho con IA"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"Descubre cómo GenIA-L automatiza la redacción de contratos y la búsqueda jurisprudencial"},{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha; "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"flexOrientation",type:"select",help:'Orientación del icono respecto al texto dentro del bloque. "Fila" coloca el icono al lado del texto; "Columna" apila el icono encima. Solo aplica si "Mostrar icono" está activado',label:"Orientación del icono y texto",options:["row","col"],options_labels:["Fila","Columna"],example_value:"row"},{name:"showImage",type:"boolean",help:"Si está activado, se renderiza el layout con imagen al lado del texto. Si está desactivado, se renderiza un layout alternativo solo con texto (sin imagen y con más padding)",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"image",type:"image",help:'URL de la imagen principal. Solo se renderiza si "Mostrar imagen" está activado',label:"Imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-3-4.png"},{name:"loading",type:"select",help:'Tipo de carga de la imagen. "eager" si el componente está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón primario. Recuerda: también requiere "Enlace del botón" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario. Solo se muestra si "Mostrar botón" está activado Y "Enlace del botón" tiene valor',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario. Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"showBtnModal",type:"boolean",help:"Activa o desactiva un segundo botón que abre un modal con información adicional. Se puede combinar con el botón primario o usarse en su lugar",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el modal. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón de modal",mandatory:!1,example_value:"Más información"},{name:"imageModal",type:"image",help:'Imagen que se muestra dentro del modal al abrirlo. Solo se usa si "Mostrar botón modal" está activado',label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura de GenIA-L mostrando el panel de asistente jurídico"},{name:"titleModal",type:"text",help:"Título que aparece dentro del modal",label:"Título del modal",mandatory:!1,example_value:"GenIA-L Asistente"},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del modal. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Consulta jurisprudencia y doctrina en lenguaje natural, con citas contextuales y exportación a Word"},{name:"lf2FormTitle",type:"text",help:"Nombre del formulario de LF2 asociado al modal (para integraciones internas). Dejar vacío si no hay formulario",label:"Nombre del formulario LF2",mandatory:!1,example_value:"formulario-demo-genial"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Tokyo",category:"Contenido con listas",name:"Bloque con imagen de escudo de fondo y grid lateral de logos clicables 2026",description:"Bloque de contenido con una imagen de escudo como background, título h2, descripción HTML, botón tipo enlace con flecha a la derecha y un grid lateral de logos/imágenes clicables (renderizados con Imagen_2025_Fukushima). El ancho del bloque de texto se adapta automáticamente al número de logos: 1→texto a 2/3, 2→texto a 1/2, 3 o más→texto a 1/3",framework:"Astro",priority:1,tags:["contenido","imagen","grid","logos","cta","enlace"],fields:[{name:"title",type:"text",help:"Título principal del bloque (h2). Se renderiza siempre; si se deja vacío, aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Plataforma certificada y segura"},{name:"description",type:"text",help:"Descripción que aparece debajo del título. Admite HTML. Se renderiza siempre; si se deja vacía, aparece el párrafo vacío",label:"Texto de la descripción",mandatory:!1,example_value:"GenIA-L cumple con las principales certificaciones de seguridad y protección de datos del sector"},{name:"showBtn",type:"boolean",help:'Activa o desactiva el botón tipo enlace (texto + flecha). ATENCIÓN: no valida que "Enlace del botón" tenga valor — si activas el botón con URL vacía, el enlace será inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"buttonText",type:"text",help:'Texto del botón tipo enlace. Aparece seguido de una flecha SVG. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Ver todas las certificaciones"},{name:"buttonUrl",type:"text",help:'URL de destino del botón. Rellena siempre esta URL si activas "Mostrar botón" (el componente no valida esta dependencia)',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/certificaciones"},{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l") que se concatena a la URL de la imagen de fondo del bloque (el escudo). Si se deja vacío, la imagen de fondo se carga desde la raíz del sitio: "/images/genial/ico-shield.webp"',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"},{name:"items",type:"list",help:"Listado de logos/imágenes que se muestran en el grid lateral del bloque. Cada ítem se renderiza con el componente Imagen_2025_Fukushima. El ancho del bloque de texto se adapta automáticamente al número de ítems: 1 ítem → texto a 2/3, 2 ítems → texto a 1/2, 3 o más → texto a 1/3",label:"Items del grid",mandatory:!1,items:{type:"object",fields:[{name:"link",type:"text",help:"URL de destino al hacer click en el logo/imagen. Si se deja vacío, la imagen no es clicable",label:"Enlace",example_value:"/genia-l/certificaciones/iso-27001"},{name:"image",type:"image",help:"URL de la imagen/logo del ítem. Si se deja vacía aparece imagen rota",label:"Imagen",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altImage",type:"text",help:"Texto alternativo de la imagen para accesibilidad",label:"Alt Imagen",example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"textArea",help:"Descripción que aparece debajo de la imagen. Admite HTML",label:"Descripción de la imagen",example_value:"Certificación ISO 27001 de seguridad de la información"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Ubeda",category:"Contenido con listas",name:"Bloque destacado de hasta 3 columnas con cifras grandes y separadores 2026",description:"Bloque con fondo azul translúcido que muestra hasta 3 ítems en fila en desktop (1/3 de ancho cada uno) y apilados en móvil, con separadores visuales entre ellos (laterales en desktop, horizontales en móvil). Cada ítem combina una cifra o título destacado (40px móvil / 56px desktop semibold) con una descripción centrada debajo (tamaño xl, admite HTML). Diseñado para exactamente 3 ítems",framework:"Astro",priority:1,tags:["contenido","texto","destacado","grid","cifras"],fields:[{name:"items",type:"list",help:"Listado de bloques con cifras/títulos destacados y descripción. Layout responsive: 1 columna en móvil, 3 columnas en desktop (ancho 1/3 cada una). Diseñado para EXACTAMENTE 3 items (o menos). El ítem del medio tiene bordes separadores laterales en desktop y horizontales en móvil; si hay más de 3 ítems los extras no llevarán separadores visuales",label:"Listado de items",mandatory:!1,items:{type:"object",fields:[{name:"title",type:"text",help:"Cifra o texto destacado del bloque (aparece en tamaño grande, 40px móvil / 56px desktop, semibold). No admite HTML",label:"Título destacado",example_value:"70%"},{name:"description",type:"textArea",help:"Descripción que aparece debajo del título destacado (tamaño xl, centrada). Admite HTML",label:"Descripción",example_value:"Reducción del tiempo de redacción de contratos"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Contenido_2026_Yakarta",category:"Contenido con listas",name:"Acordeón exclusivo de vídeos MP4 con pestañas y rotación automática 2026",description:"Acordeón con botones tipo pestaña en la parte superior: al hacer click en cada pestaña se muestra su vídeo MP4 con título h3 y descripción HTML. Solo se muestra UN vídeo a la vez (comportamiento exclusivo) y hay rotación automática entre pestañas cada pocos segundos. Incluye structured data SEO VideoObject con duración en formato ISO 8601",framework:"Astro",priority:1,tags:["contenido","acordeon","tabs","video","interactivo","seo"],fields:[{name:"items",type:"list",help:"Listado de vídeos del acordeón. Cada vídeo tiene su botón de pestaña superior, título, descripción y archivo .mp4. Solo se muestra UNO a la vez; al hacer click en otra pestaña, el contenido cambia. También hay rotación automática entre pestañas cada pocos segundos",label:"Items",mandatory:!1,items:{type:"object",fields:[{name:"name",type:"text",help:"Texto del botón tipo pestaña (aparece en la barra superior). Se muestra también en móvil como icono con texto oculto salvo al hacer hover/active",label:"Nombre o tag de la pestaña",example_value:"Redacción"},{name:"title",type:"text",help:"Título del vídeo (h3) que aparece sobre la descripción dentro del panel",label:"Título del vídeo",example_value:"Redacción automática de contratos"},{name:"description",type:"textArea",help:"Descripción del vídeo que aparece debajo del título. Admite HTML",label:"Descripción",example_value:"Genera borradores de contratos en segundos a partir de plantillas personalizables"},{name:"iframeSrc",type:"text",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como src de una etiqueta <video><source src="..." type="video/mp4">. Ejemplos válidos: .mp4, .webm alojados en CDN',label:"URL del archivo de vídeo (MP4)",example_value:"https://assets.lefebvre.es/media/videos/genial/redaccion-demo.mp4"},{name:"thumbnailUrl",type:"text",help:"URL de la miniatura del vídeo usada en el structured data SEO (VideoObject)",label:"URL de la miniatura (SEO)",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageSrc",type:"text",help:'URL alternativa de miniatura (fallback de "URL de la miniatura" en el structured data SEO). Si "URL de la miniatura" tiene valor, este campo se ignora',label:"URL alternativa de miniatura (fallback SEO)",example_value:""},{name:"duration",type:"text",help:'Duración del vídeo en formato ISO 8601 (p. ej. "PT2M30S" para 2 min 30 s). Se usa en el structured data SEO. Default "PT2M" si se deja vacío',label:"Duración del vídeo (ISO 8601)",example_value:"PT2M"},{name:"default",type:"boolean",help:'Si está activado, esta pestaña se muestra al cargar la página y su botón aparece resaltado como "active". Solo debería haber UN ítem con default=true; si hay varios se mostrarán todos a la vez al inicio',label:"¿Es el vídeo por defecto?",options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpFooter",category:"Footer",name:"Footer Corporativo Lefebvre.es",description:"Footer marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["footer","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"CorpHero",category:"CTA",name:"Hero Corporativo Lefebvre.es",description:"Hero marca 2025 Lefebvre.es",framework:"Astro",priority:1,tags:["hero","video","lefebvre.es"],fields:[{name:"text",type:"textArea",label:"Contenido HTML",mandatory:!1,example_value:"<p><b>Es más que una imagen renovada. Es una nueva forma de avanzar.</b><br />En Lefebvre evolucionamos contigo. Nos adaptamos a ti.</p>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Enlace_2025_Venecia",category:"Contenido de Texto",name:"Enlace azul con icono de flecha o play y target configurable 2025",description:'Enlace estilizado en color azul corporativo con dos variantes de icono: "Flecha" a la derecha del texto (estilo "saber más") o "Play" a la izquierda con subrayado permanente en el texto (estilo "ver vídeo"). Soporta target configurable (_self o _blank, con rel="noopener noreferrer" automático al abrir en nueva pestaña) y aria-label heredado del texto para accesibilidad',framework:"Astro",priority:1,tags:["enlace","link","texto","icono"],fields:[{name:"text",type:"text",help:"Texto visible del enlace. También se usa como aria-label para accesibilidad. Si se deja vacío, el enlace queda sin texto ni etiqueta accesible",label:"Texto del enlace",mandatory:!1,example_value:"Ver todos los casos de uso"},{name:"url",type:"text",help:'URL de destino del enlace. Si se deja vacío, por defecto apunta a "#" (no navega)',label:"URL de destino",mandatory:!1,example_value:"/genia-l/casos-reales"},{name:"target",type:"select",help:'Cómo se abre el enlace. "Misma pestaña" abre en la misma ventana; "Nueva pestaña" abre en otra pestaña y además añade automáticamente rel="noopener noreferrer" por seguridad',label:"Destino del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],mandatory:!1,example_value:"_blank"},{name:"icon",type:"select",help:'Icono que acompaña al texto del enlace. "Flecha" coloca un icono de flecha a la DERECHA del texto (estilo "saber más"). "Play" coloca un icono de play a la IZQUIERDA del texto y además aplica subrayado permanente al texto (estilo "ver vídeo")',label:"Icono del enlace",options:["arrow","play"],options_labels:["Flecha (derecha)","Play (izquierda)"],mandatory:!1,example_value:"arrow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FAQ_2025_Hiroshima",category:"Contenido con listas",name:"Listado de preguntas frecuentes en acordeón exclusivo 2025",description:"Listado de preguntas y respuestas en acordeón exclusivo: al abrir una pregunta se cierran automáticamente las demás (solo una respuesta visible a la vez). Un segundo click sobre la pregunta abierta la cierra. Incluye título h2 opcional. Permite configurar el estado inicial: todos plegados (por defecto), todos desplegados, o solo el primero desplegado. Las respuestas admiten HTML básico: strong, b, em, i, ul, ol, li. Incluye datos estructurados FAQPage.",framework:"Astro",priority:1,tags:["texto","faq","acordeon","preguntas","interactivo"],fields:[{name:"title",type:"text",help:"Título de la sección de FAQ (h2). Si se deja vacío, no se muestra el título",label:"Texto del título",mandatory:!1,example_value:"Preguntas frecuentes sobre GenIA-L"},{name:"initialState",type:"select",help:'Estado inicial de los elementos del acordeón. "all-closed": todos plegados (por defecto). "all-open": todos desplegados. "first-open": solo el primero desplegado',label:"Estado inicial del acordeón",mandatory:!1,options:["all-closed","all-open","first-open"],options_labels:["Todos plegados (por defecto)","Todos desplegados","Solo el primero desplegado"],example_value:"all-closed"},{name:"items",type:"list",help:"Listado de preguntas y respuestas. Cada pregunta se muestra como un botón expandible. Al hacer click en una pregunta se abre su respuesta y se cierran las demás automáticamente (comportamiento exclusivo, solo una visible a la vez). Un segundo click en la pregunta abierta la cierra",label:"Listado de FAQs",mandatory:!1,items:{type:"object",fields:[{name:"question",type:"text",help:"Texto de la pregunta (aparece como botón). No admite HTML",label:"Texto de la pregunta",example_value:"¿Qué es GenIA-L y para qué sirve?"},{name:"answer",type:"text",help:"Texto de la respuesta que aparece al abrir la pregunta. Admite HTML básico: <strong>, <b>, <em>, <i>, <ul>, <ol>, <li>. Evitar etiquetas de bloque complejas o scripts",label:"Texto de la respuesta",example_value:"GenIA-L es la plataforma de inteligencia artificial jurídica de Lefebvre que automatiza la redacción de contratos, la búsqueda de jurisprudencia y el análisis de documentos legales"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"FooterCorporativo",category:"Footer",name:"Footer Corporativo",description:"Footer de prueba en Astro",framework:"Astro",priority:1,tags:["footer"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Footer_2025_Napoles",category:"Footer",name:"Footer corporativo con 4 columnas, textos legales y RRSS 2025",description:'Footer corporativo con 4 columnas de enlaces (Lefebvre, Explora, Portales, Tienda Online), logo, textos legales, 5 iconos de redes sociales y separador final. IMPORTANTE: solo los enlaces de la columna "Explora" se concatenan con el subdirectorio configurable; el resto (Lefebvre, Portales, Tienda, RRSS, legales) son dominios absolutos hardcoded en el componente',framework:"Astro",priority:1,tags:["footer","corporativo","rrss","legales","navegacion"],fields:[{name:"subdirectory",type:"text",help:'Ruta base del sitio (p. ej. "/genia-l"). Se concatena ÚNICAMENTE a los enlaces de la columna "Explora GenIA-L" (Casos reales, Conoce GenIA-L, Contacto). El resto de enlaces (Lefebvre, Portales Lefebvre, Tienda Online, RRSS y legales) están hardcodeados a dominios absolutos y no dependen de este campo. Déjalo vacío si los enlaces GenIA-L deben partir de la raíz del sitio',label:"Subdirectorio",mandatory:!1,example_value:"/genia-l"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Nara",category:"Formulario",name:"Formulario minimalista de suscripción con campo de email y botón 2025",description:'Formulario minimalista de suscripción de una sola línea: título h2, descripción breve, input de email y botón de envío. Todos los campos tienen textos por defecto autotraducidos ("Suscríbete ahora", "Recibe novedades...", "Email", "Suscríbete") que se muestran si el campo correspondiente se deja vacío. Ninguno admite HTML',framework:"Astro",priority:1,tags:["formulario","suscripcion","email","newsletter","minimalista"],fields:[{name:"title",type:"text",help:'Título del formulario (h2). Si se deja vacío, por defecto muestra "Suscríbete ahora". No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Suscríbete al blog de GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Si se deja vacía, por defecto muestra "Recibe novedades de artículos que se publican en el blog". No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Recibe mensualmente los últimos artículos sobre legaltech, IA jurídica y transformación digital en el sector legal"},{name:"placeholder",type:"text",help:'Texto placeholder del campo de email (desaparece al escribir). Por defecto "Email"',label:"Placeholder del campo",mandatory:!1,example_value:"Tu correo electrónico"},{name:"buttonText",type:"text",help:'Texto del botón de envío. Por defecto "Suscríbete". También se usa como aria-label del botón',label:"Texto del botón",mandatory:!1,example_value:"Suscríbete"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Seul",category:"Formulario",name:"Formulario LF2 con layout conmutable imagen lateral o título+descripción 2025",description:"Formulario de leads integrado con la plataforma LF2 de Lefebvre (se inyecta dinámicamente vía apiManager.pintarFormularioAutogestionado). Alterna entre dos layouts mutuamente excluyentes: CON imagen lateral grande (sin título ni descripción visibles) o SIN imagen pero con título h2 + descripción en columna lateral. Soporta businessAction para tracking y orientación del formulario (izquierda o derecha)",framework:"Astro",priority:1,tags:["formulario","lf2","leads","imagen","contacto"],fields:[{name:"title",type:"text",help:'Título (h2) del bloque. IMPORTANTE: solo se muestra si "Mostrar imagen" está desactivado. Con imagen activada, el título NO aparece. No admite HTML',label:"Texto del título",mandatory:!1,example_value:"Solicita información sobre GenIA-L"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. IMPORTANTE: igual que el título, solo se muestra si "Mostrar imagen" está desactivado. No admite HTML',label:"Texto de la descripción",mandatory:!1,example_value:"Uno de nuestros comerciales se pondrá en contacto contigo en menos de 24 horas"},{name:"imageSrc",type:"image",help:'URL de la imagen lateral. Solo se renderiza si "Mostrar imagen" está activado',label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (incluye normalmente un código numérico + nombre). Este valor se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicita info GenIA-L"},{name:"businessAction",type:"text",help:"Identificador de acción comercial de LF2 que se asociará al lead. Si se deja vacío, no se envía acción comercial (el formulario funciona pero sin tracking de acción específica)",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:'Posición del formulario respecto a la imagen/texto. "Izquierda" coloca el formulario a la izquierda (flex-row); "Derecha" lo coloca a la derecha (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:'Tipo de carga de la imagen lateral (solo aplica si "Mostrar imagen" está activado). "eager" si el formulario está above-the-fold; "lazy" si se renderiza fuera del viewport inicial',label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Alterna entre dos layouts. ACTIVADO: muestra una imagen lateral grande junto al formulario (sin título ni descripción visibles). DESACTIVADO: muestra título y descripción (columna 1/3) + formulario (columna 1/2), sin imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2025_Teruel",category:"Formulario",name:"Tarjeta horizontal con imagen, dos botones y popup con formulario LF2 2025",description:"Tarjeta horizontal con imagen + texto + dos botones (uno que navega a un enlace externo, otro que abre un popup). El popup contiene título h2, imagen lateral, descripción HTML y formulario LF2 inyectado dinámicamente. Incluye toggle de borde inferior separador (útil cuando se usan varias tarjetas seguidas — p. ej. dentro de Contenido_2026_Michigan)",framework:"Astro",priority:1,tags:["contenido","card","imagen","popup","formulario","lf2","modal","cta"],fields:[{name:"orientation",type:"select",help:'Posición de la imagen respecto al texto. "Izquierda" coloca la imagen a la izquierda y el texto a la derecha (flex-row). "Derecha" invierte el orden (flex-row-reverse)',label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],mandatory:!1,example_value:"left"},{name:"bottomBorder",type:"boolean",help:"Activa/desactiva el borde inferior separador. Útil cuando se usan varias tarjetas seguidas (p. ej. dentro de Contenido_2026_Michigan) para poner borde en todas excepto la última",label:"Mostrar borde inferior",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"title",type:"text",help:"Título de la tarjeta (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML. También se usa como alt de la imagen principal",label:"Texto del título",mandatory:!1,example_value:"Automatización de contratos con IA"},{name:"description",type:"text",help:"Descripción de la tarjeta. Admite HTML (útil para listas, negritas, etc.). Se renderiza siempre",label:"Texto de la descripción",mandatory:!1,example_value:"Redacta borradores de contratos en segundos a partir de plantillas personalizables, con revisión automática de cláusulas"},{name:"imageSrc",type:"image",help:"URL de la imagen principal de la tarjeta (lateral al texto)",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón primario (enlace externo). Recuerda: también requiere "Url del enlace" relleno; si está vacío el botón no aparece',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"txtBtn",type:"text",help:'Texto del botón primario (enlace). Solo se muestra si "Mostrar botón" está activado Y "Url del enlace" tiene valor',label:"Texto del botón",mandatory:!1,example_value:"Saber más"},{name:"linkBtn",type:"text",help:'URL de destino del botón primario (se abre en la misma pestaña). Si se deja vacío, el botón NO aparece aunque "Mostrar botón" esté activado',label:"Url del enlace",mandatory:!1,example_value:"/genia-l/automatizacion-contratos"},{name:"showBtnModal",type:"boolean",help:"Activa/desactiva el botón que abre el popup con el formulario LF2. Si está activado, al hacer click se abre un modal con título, imagen, descripción y formulario LF2 inyectado dinámicamente",label:"Mostrar botón modal",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"txtBtnModal",type:"text",help:'Texto del botón que abre el popup. Solo se muestra si "Mostrar botón modal" está activado',label:"Texto del botón modal",mandatory:!1,example_value:"Descargar guía en PDF"},{name:"titleModal",type:"text",help:"Título (h2) que aparece dentro del popup, junto al formulario LF2",label:"Texto del título modal",mandatory:!1,example_value:"Descarga la guía de automatización jurídica"},{name:"subtitleModal",type:"text",help:'Subtítulo del modal. AVISO: este campo está DECLARADO en el carbin pero en el .astro está comentado (L76), por lo que NO se renderiza actualmente. Déjalo vacío o usa "Descripción del modal"',label:"Texto del subtítulo modal (no se usa)",mandatory:!1,example_value:""},{name:"descriptionModal",type:"text",help:"Descripción que aparece dentro del popup, antes del formulario LF2. Admite HTML",label:"Texto de la descripción modal",mandatory:!1,example_value:"Déjanos tus datos y te enviaremos el whitepaper de 40 páginas con los casos de uso más relevantes"},{name:"imageModal",type:"image",help:"Imagen que aparece en la columna izquierda del popup (la portada de la guía, por ejemplo)",label:"Src de la imagen modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del popup para accesibilidad",label:"Alt de la imagen modal",mandatory:!1,example_value:"Portada de la guía de automatización jurídica"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2. Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto dentro del popup. Si es erróneo, el formulario no se renderizará",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Descarga Guía Automatización"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Formulario_2026_Wichita",category:"Formulario",name:"Formulario para landing 2026",description:"Formulario para landing en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["contenido","video"],fields:[{name:"title",type:"text",help:"Introduce el título del formulario",label:"Texto del título",mandatory:!1,example_value:"Pruébalo ya"},{name:"description",type:"text",help:"Introduce la descripción del formulario",label:"Texto de la descripción",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"mainContent",type:"textArea",help:"Introduce el texto principal del formulario",label:"Texto principal en HTML",mandatory:!1,example_value:"Texto descriptivo del título"},{name:"imageSrc",type:"image",help:"Introduce la URL de la imagen del formulario",label:"Src de la imagen",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-3-4.png"},{name:"lf2FormTitle",type:"text",help:"Introduce el título del formulario en LF2",label:"Título del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Vamos Más Allá"},{name:"businessAction",type:"text",help:"Introduce el identificador businessAction del formulario en LF2",label:"businessAction del formulario en LF2",mandatory:!1,example_value:"27925"},{name:"orientation",type:"select",help:"Selecciona la posición de la imagen respecto al formulario",label:"Orientación del contenido",options:["left","right"],options_labels:["Izquierda","Derecha"],example_value:"left"},{name:"loading",type:"select",help:"Selecciona el tipo de carga de la imagen: diferida o inmediata",label:"Carga de la imagen",options:["lazy","eager"],options_labels:["Diferida","Inmediata"],example_value:"lazy"},{name:"showImage",type:"boolean",help:"Indica si se debe mostrar la imagen",label:"Mostrar imagen",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"GeometricShapeCard",category:"Imagen",name:"Tarjeta con figura geométrica",description:"Tarjeta con figura geométrica y botón de leer más.",framework:"Astro",tags:["card","interactivo"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Título de la tarjeta"},{name:"mainContent",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:"<p>Este es el <b>contenido</b> principal.</p>"},{name:"secondaryContent",type:"textArea",label:"Contenido secundario (HTML) que aparece al leer más",mandatory:!1,example_value:"<p>Este es el contenido secundario.</p>"},{name:"imageSrc",type:"image",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"figure",type:"select",label:"Tipo de figura",options:["Trapeze","Trapeze2","Leaf","Sphere"],options_labels:["Trapecio","Trapecio II","Hoja de parra","Esfera"],example_value:"Trapeze"},{name:"orientation",type:"select",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"},{name:"gradiantIndex",type:"select",label:"Degradado",options:[0,1,2,3,4],options_labels:["Lefebvre España","Lefebvre Sarrut","Lefebvre Italia","Lefebvre Toovalu","Bandera de España"],example_value:0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"HeaderCorporativo",category:"Header",name:"Header Corporativo",description:"Header de prueba en Astro",framework:"Astro",priority:1,tags:["header","navegación"],fields:[{name:"logo",type:"text",label:"URL del logo",mandatory:!1,example_value:"https://espacioasesoria.com/wp-content/themes/lf-espacioasesoria-theme/src/images/logo-espacio-asesoria.png"},{name:"alt",type:"text",label:"Texto alternativo",mandatory:!1,example_value:"https://lefebvre.es"},{name:"showLefebvreLogo",type:"boolean",label:"Mostrar logo de Lefebvre",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2025_Benidorm",category:"Contenido de Imagen",name:"Hero de post con fecha, autor, tags e imagen (usa Contenido_2026_Jaen) 2025",description:'Cabecera de artículo de blog con fecha en mayúsculas, título h1 (renderizado con Contenido_2026_Jaen), descripción HTML, imagen de fondo cover, ficha de autor con foto (Author_2025_Algarve), tiempo de lectura (Tiempo_2025_Londres) y lista de tags (Tag_2025_Bolonia). Dos variantes alternables: "Enriquecido" (horizontal: texto izquierda + imagen mitad derecha) o "Estándar" (vertical: texto centrado arriba + imagen 530px debajo)',framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","autor","tags","cabecera"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor (imagen cuadrada, se mostrará con el borde que defina Author_2025_Algarve)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Hero_2026_Benidorm",category:"Contenido de Imagen",name:"Hero de post con fecha, autor, tags e imagen (usa Contenido_2026_Jaen) 2026",description:'Cabecera de artículo de blog con fecha en mayúsculas, título h1 (renderizado con Contenido_2026_Jaen), descripción HTML, imagen de fondo cover, ficha de autor con foto, tiempo de lectura y lista de tags. Dos variantes alternables: "Enriquecido" (horizontal: texto izquierda + imagen mitad derecha, foto del autor fijada a 48px) o "Estándar" (vertical: texto centrado arriba + imagen 530px con esquinas redondeadas debajo)',framework:"Astro",priority:1,tags:["banner","imagen","contenido","blog","hero","autor","tags","cabecera"],fields:[{name:"title",type:"text",help:"Título principal del artículo (h1). Admite HTML (se pasa al componente Contenido_2026_Jaen)",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal: de la teoría a la práctica"},{name:"description",type:"text",help:"Descripción o entradilla del artículo. Admite HTML. Aparece debajo del título",label:"Texto de la descripción",mandatory:!1,example_value:"Analizamos los casos reales en los que la IA generativa está transformando la labor diaria de los despachos de abogados"},{name:"image",type:"image",help:"Imagen principal del hero. Se usa como background-image con background-size: cover",label:"Imagen de fondo",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"date",type:"text",help:'Fecha de publicación del artículo. Se muestra en mayúsculas con espaciado entre letras (tracking wide). Acepta cualquier formato de texto (p. ej. "15 enero 2026" o "2026-01-15")',label:"Fecha de publicación",mandatory:!1,example_value:"15 enero 2026"},{name:"nameAuthor",type:"text",help:"Nombre del autor del artículo. Se pasa al componente Author_2025_Algarve",label:"Nombre del autor",mandatory:!1,example_value:"María García López"},{name:"descriptionAuthor",type:"text",help:"Cargo o profesión del autor que aparece debajo del nombre",label:"Cargo del autor",mandatory:!1,example_value:"Socia directora de Derecho Fiscal"},{name:"imageAuthor",type:"image",help:"Foto de perfil del autor. En layout enriquecido se muestra a 48px (fijo); en layout estándar usa el tamaño por defecto del componente Author_2025_Algarve (240px)",label:"Imagen del autor",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"imageAuthorAlt",type:"text",help:"Texto alternativo de la foto del autor para accesibilidad",label:"Alt de la imagen del autor",mandatory:!1,example_value:"Foto de perfil de María García López"},{name:"enriquecido",type:"boolean",help:"Alterna entre dos layouts del hero. ACTIVADO (enriquecido): layout horizontal con texto a la izquierda (fecha, título h1-blog-postenriquecido alineado a la izquierda, autor a ancho completo con imagen de 48px y tags) e imagen de fondo a la derecha (mitad del ancho). DESACTIVADO (estándar): layout vertical con texto centrado arriba (fecha, título h1-blog-post centrado, autor compacto y tags) e imagen de fondo grande debajo (530px de alto con esquinas redondeadas)",label:"Layout enriquecido",mandatory:!1,options:["false","true"],options_labels:["Estándar (vertical)","Enriquecido (horizontal)"],example_value:!0},{name:"minutes",type:"text",help:"Minutos estimados de lectura del artículo (sin unidades, solo el número). Se pasa al componente Tiempo_2025_Londres a través de Author_2025_Algarve. Si se deja vacío, el indicador de tiempo de lectura NO se muestra",label:"Minutos de lectura",mandatory:!1,example_value:"8"},{name:"itemsTagPost",type:"list",help:"Listado de tags/etiquetas del artículo. Cada tag se renderiza como una pastilla con el componente Tag_2025_Bolonia. Si se deja vacío, no aparecen tags",label:"Tags del artículo",mandatory:!1,items:{type:"object",fields:[{name:"tag",type:"text",help:"Nombre del tag (texto corto, típicamente una categoría jurídica o temática)",label:"Nombre del tag",example_value:"IA Jurídica"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ImageTextSimple",category:"Imagen",name:"Contenido con imagen/video simple",description:"Contenido con imagen/video simple, título y texto",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",label:"Título",mandatory:!0,example_value:"Soluciones felinas para un mundo mejor"},{name:"description",type:"textArea",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>En Lefebvre buscamos ofrecer a nuestros gatos una <b>vida mejor</b>.
|
|
31
31
|
Para ello, las adaptamos a las características y necesidades de cada empresa y sector, haciendo hincapié en los puntos críticos de cada uno de ellos para contribuir positivamente a su desarrollo. </p>
|
|
32
|
-
`},{name:"image",type:"image",label:"URL de la imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-1-1.png"},{name:"video",type:"video",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://www.youtube.com/embed/3gJIiEdYKR0"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Bogota",category:"Imagen",name:"Banner con imagen/vídeo de fondo, overlay h3 y color de texto custom 2025",description:'Banner de ancho completo con imagen o vídeo MP4 como fondo (mutuamente excluyentes; si se rellenan ambos, la imagen gana). Overlay centrado con título h3 siempre visible, descripción conmutable mediante toggle "Mostrar descripción", botón CTA opcional y color de texto personalizable mediante código hex (requiere estar en la safelist del tailwind.config por limitaciones JIT). Admite HTML en título y descripción',framework:"Astro",priority:1,tags:["banner","imagen","video","hero","overlay","cta","boton"],fields:[{name:"title",type:"text",help:'Título principal del banner (h3). Admite HTML. Se renderiza SIEMPRE (incluso cuando "Mostrar descripción" está desactivado)',label:"Texto del título",mandatory:!1,example_value:"GenIA-L, inteligencia artificial para tu despacho"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Admite HTML. Solo se muestra si "Mostrar descripción" está activado',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tu trabajo diario con la primera plataforma de IA jurídica adaptada al Derecho español"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:'Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica si se usa imagen (no vídeo). Si se deja vacío, se usa el "Texto del título" como alt',label:"Alt de la imagen de fondo",mandatory:!1,example_value:"Imagen de fondo del banner de GenIA-L"},{name:"src",type:"image",help:"URL de la imagen de fondo. Mutuamente exclusivo con el vídeo en el editor, pero si se rellenan ambos en runtime, la IMAGEN tiene prioridad sobre el vídeo",label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source type="video/mp4"> con autoplay, loop y muted. Solo se renderiza si "Imagen de fondo" está vacía',label:"URL del vídeo de fondo (MP4)",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/videos/genial/demo.mp4"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón CTA superpuesto sobre la imagen. ATENCIÓN: no valida que "Enlace del botón" ni "Label del botón" tengan valor — si activas el botón sin texto/URL, aparece un botón vacío o con enlace inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"showDescription",type:"boolean",help:"Activa/desactiva la descripción bajo el título. ACTIVADO: muestra título + descripción. DESACTIVADO: muestra solo el título (con menos margen inferior)",label:"Mostrar descripción",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"color",type:"text",help:'Color del texto del título y descripción en formato hexadecimal (p. ej. "#ffffff", "#262626"). ATENCIÓN: Tailwind JIT no genera clases desde valores dinámicos, por lo que este valor requiere estar en la safelist del tailwind.config para que se aplique correctamente. Por defecto "#ffffff" (blanco)',label:"Color del texto (hex)",mandatory:!1,example_value:"#ffffff"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Fukushima",category:"Imagen",name:"Logo pequeño 80x80 con descripción y enlace opcional 2025",description:'Bloque compacto con logotipo de 80x80 px (max-w-20) y descripción debajo (14px color gris, admite HTML). Si se rellena el campo "URL de destino", todo el bloque (imagen + texto) se envuelve en un enlace <a> clicable; si se deja vacío, se renderiza como divs separados sin navegación. Diseñado para usarse como unidad dentro de grids de logotipos (p. ej. dentro de Contenido_2026_Tokyo)',framework:"Astro",priority:1,tags:["imagen","certificado","logo","enlace","compacto"],fields:[{name:"image",type:"image",help:"URL de la imagen del logotipo. Se renderiza a 80x80px con max-w-20 (el ancho real se ajusta al contenido). Si se deja vacía aparece imagen rota",label:"Imagen del logo",mandatory:!1,example_value:"https://lefebvre.es/genia-l/images/genial/img-iso4.webp"},{name:"altImage",type:"text",help:"Texto alternativo del logo para accesibilidad. Si se deja vacío, el atributo alt quedará sin valor",label:"Alt del logo",mandatory:!1,example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"text",help:"Texto descriptivo que aparece debajo del logo (tamaño 14px, color gris). Admite HTML. Si se deja vacío, no aparece texto",label:"Texto bajo el logo",mandatory:!1,example_value:"ISO 27001 - Seguridad de la información"},{name:"link",type:"text",help:"URL de destino al hacer click. ACTIVADO (con URL): todo el bloque (imagen + texto) se envuelve en un <a> y es clicable. DESACTIVADO (vacío): el bloque se renderiza como divs separados sin navegación",label:"URL de destino (opcional)",mandatory:!1,example_value:"/genia-l/certificaciones/iso-27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Indice_2025_Taiwan",category:"Contenido de Texto",name:"Índice de contenidos numerado con enlaces ancla auto-generados 2025",description:'Tabla de contenidos (TOC) con título h2 y listado de apartados numerados automáticamente (1., 2., 3...). Los enlaces navegan a elementos con id coincidente en la misma página. Si no se rellena el campo "ID del ancla", se auto-genera a partir del título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es X" → "que-es-x")',framework:"Astro",priority:1,tags:["texto","indice","toc","navegacion","ancla"],fields:[{name:"titulo",type:"text",help:"Título del índice (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Índice de contenidos"},{name:"items",type:"list",help:'Listado de apartados del índice. Cada ítem se numera automáticamente (1., 2., 3...). El índice navega a los elementos de la misma página que tengan un id coincidente con el enlace (sin el "#")',label:"Listado de items del índice",mandatory:!1,items:{type:"object",fields:[{name:"titulo",type:"text",help:'Texto visible del ítem (se renderiza con su número ordinal: "1. Introducción", "2. ..."). No admite HTML',label:"Texto del ítem",example_value:"Introducción"},{name:"enlace",type:"text",help:'ID del elemento destino de la misma página, SIN el "#" (el componente lo añade automáticamente). Si se deja vacío, se GENERA automáticamente desde el título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es GenIA-L" → "que-es-genial"). El elemento con ese id debe existir en la página',label:"ID del ancla (sin #)",example_value:"introduccion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Modal_2025_Sagunto",category:"Formulario",name:"Botón CTA que abre modal con backdrop blur y formulario LF2 inyectado 2025",description:"Botón CTA con colores configurables (texto, fondo, borde) que NO se invierten en hover, a diferencia de CTA_2025_Formentera. Al pulsarse abre un modal con backdrop blur que contiene imagen lateral opcional, título h2, descripción HTML y formulario LF2 inyectado dinámicamente vía apiManager.pintarFormularioAutogestionado. Requiere LeadformApiManagerClass y apiManager disponibles globalmente en la página",framework:"Astro",priority:1,tags:["boton","cta","modal","formulario","lf2","popup","personalizable"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón CTA que abre el modal. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"frontColor",type:"text",help:'Color del texto del botón. Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). NO se invierte en hover (a diferencia de CTA_2025_Formentera)',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:"Color de fondo del botón. Acepta nombre CSS o código hex",label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex",label:"Color del borde",mandatory:!1,example_value:"#2134F1"},{name:"imageModal",type:"image",help:"Imagen que se muestra en la columna izquierda del modal. Si se deja vacía, el modal no incluye columna de imagen y el texto ocupa el ancho completo",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura del dashboard de GenIA-L con el asistente IA"},{name:"titleModal",type:"text",help:"Título del modal (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Título del modal",mandatory:!1,example_value:"Descubre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción del modal que aparece debajo del título, antes del formulario. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Déjanos tus datos y uno de nuestros comerciales se pondrá en contacto contigo para programar una demo personalizada"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (plataforma de leadforms de Lefebvre). Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará. Requiere que LeadformApiManagerClass y apiManager estén disponibles globalmente en la página",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicitar Demo GenIA-L"},{name:"idebook",type:"text",help:"ID del ebook, whitepaper o documento registrado en BI con formato EXXXXXXX para pasar como parámetro oculto al formulario de LF2. No es obligatorio, solo debe usarse para formularios que acabaran con una descarga",label:"ID de documento en BI (opcional)",mandatory:!1,example_value:""}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Paginacion_2025_Paris",category:"Contenido de Texto",name:"Paginación con modo URL path o query y trailing slash configurable 2025",description:'Componente de paginación con dos modos de URL alternables: "path" (/page/2/) o "query" (/?page=2). Incluye control de trailing slash, página actual, total de páginas, total de elementos y elementos por página. Se puede definir una URL base (p. ej. /blog) como raíz del paginado. En modo "query" el trailing slash determina si queda /?page=2 o ?page=2',framework:"Astro",priority:1,tags:["paginacion","navegacion","paginado","listado"],fields:[{name:"urlMode",type:"select",help:'Formato de las URLs de paginación: "path" para /page/2/ o "query" para /?page=2',label:"Modo de URL",mandatory:!1,options:["path","query"],options_labels:["Path (/page/2)","Query string (?page=2)"],example_value:"path"},{name:"currentPage",type:"text",help:"Introduce el número de la página actual",label:"Página actual",mandatory:!1,example_value:"1"},{name:"totalPages",type:"text",help:"Introduce el número total de páginas",label:"Total de páginas",mandatory:!1,example_value:"10"},{name:"totalItems",type:"text",help:"Introduce el número total de elementos",label:"Total de elementos",mandatory:!1,example_value:"100"},{name:"itemsPerPage",type:"text",help:"Introduce el número de elementos por página",label:"Elementos por página",mandatory:!1,example_value:"10"},{name:"baseUrl",type:"text",help:"Introduce la URL base para la paginación",label:"URL base",mandatory:!1,example_value:"/blog"},{name:"trailingSlash",type:"boolean",help:'Indica si las URLs de paginación deben incluir / al final del path. En modo "query" determina si queda url.es/?page=2 o url.es?page=2',label:"Trailing slash",mandatory:!1,example_value:"false"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"RRSS_2025_Pisa",category:"Imagen",name:"Iconos circulares de RRSS, email, imprimir y copiar enlace condicionales 2025",description:'Bloque horizontal de iconos circulares que incluye perfiles de redes sociales (Facebook, LinkedIn, X/Twitter, Instagram, YouTube, WhatsApp), email (mailto auto-generado) y dos acciones: imprimir (window.print) y copiar URL al portapapeles (con tooltip "Enlace copiado"). Los iconos de RRSS/email aparecen SOLO si su URL/dirección está rellena; imprimir y copiar se activan con toggles boolean. Los enlaces externos abren en nueva pestaña con rel="noopener noreferrer"',framework:"Astro",priority:1,tags:["rrss","redes sociales","compartir","iconos","email"],fields:[{name:"facebook",type:"text",help:'URL del perfil de Facebook. Si se deja vacío, el icono de Facebook NO aparece. Se abre en nueva pestaña con rel="noopener noreferrer"',label:"URL del perfil de Facebook",mandatory:!1,example_value:"https://facebook.com/lefebvre.es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacío, el icono de LinkedIn NO aparece. Se abre en nueva pestaña",label:"URL del perfil de LinkedIn",mandatory:!1,example_value:"https://linkedin.com/company/lefebvre-es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacío, el icono de X NO aparece. Se abre en nueva pestaña",label:"URL del perfil de X",mandatory:!1,example_value:"https://x.com/lefebvre_es"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacío, el icono de Instagram NO aparece. Se abre en nueva pestaña",label:"URL del perfil de Instagram",mandatory:!1,example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacío, el icono de YouTube NO aparece. Se abre en nueva pestaña",label:"URL del canal de YouTube",mandatory:!1,example_value:"https://youtube.com/@lefebvre"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (formato wa.me/código+número o URL completa). Si se deja vacío, el icono de WhatsApp NO aparece. Se abre en nueva pestaña",label:"URL de WhatsApp",mandatory:!1,example_value:"https://wa.me/34600000000"},{name:"email",type:"text",help:'Dirección de email SIN "mailto:" (el componente añade el prefijo automáticamente). Si se deja vacío, el icono de email NO aparece. Al hacer clic abre el cliente de correo predeterminado',label:"Dirección de email",mandatory:!1,example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón de imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL a copiar" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón de copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyUrl",type:"text",help:'URL que se copiará al portapapeles al pulsar el botón de copiar. Solo tiene efecto si "Mostrar botón de copiar enlace" está activado. Si se deja vacío, el botón copiará una cadena vacía',label:"URL a copiar al portapapeles",mandatory:!1,example_value:"https://lefebvre.es/genia-l/"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ReactButton",category:"CTA",name:"Botón en React",description:"Botón de prueba en React",framework:"React",tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en React"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SEO_Head_Section",category:"SEO",name:"SEO Head Section",description:"Sección de encabezado SEO para mejorar la visibilidad en buscadores",framework:"Astro",priority:1,tags:["seo","genial"],fields:[{name:"title",type:"text",help:"Título para buscadores",label:"Título de la página",mandatory:!1,example_value:"Lefebvre"},{name:"description",type:"text",help:"Descripción para buscadores",label:"Descripción de la página",mandatory:!1,example_value:""},{name:"canonical",type:"text",help:"URL canónica de la página",label:"URL canónica",mandatory:!1,example_value:""},{name:"shareImgSrc",type:"text",help:"Imagen al compartir en RRSS",label:"Src de la imagen para compartir",mandatory:!1,example_value:"https://www.ejemplo.com/imagen.jpg"},{name:"robots",type:"select",help:"Directiva de indexación",label:"Indexación por parte de los motores de búsqueda",options:["index, follow","noindex, nofollow","index, nofollow","noindex, follow"],options_labels:["Indexar y seguir enlaces","No indexar ni seguir enlaces","Indexar pero no seguir enlaces","No indexar pero seguir enlaces"],example_value:"index, follow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Reinosa",category:"Separador",name:"Separador de 4px con gradiente corporativo indigo-azul-rosa 2025",description:"Barra horizontal fina (4px de alto) con gradiente de colores corporativos (indigo → azul → rosa) aplicado a todo el ancho del contenedor. Componente sin parámetros configurables: se usa como divisor visual destacado entre secciones. Para separadores neutros más discretos usa Separador_2025_Toledo",framework:"Astro",priority:1,tags:["separador","gradiente","spectrum","divisor"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Toledo",category:"Separador",name:"Separador horizontal neutro de 1px gris sin parámetros 2025",description:"Línea horizontal gris de 1px (border-top con color #B6B7BB) utilizada como divisor neutro y discreto entre secciones de contenido. Componente sin parámetros configurables. Para separadores más destacados con gradiente corporativo usa Separador_2025_Reinosa",framework:"Astro",priority:1,tags:["separador","hr","linea","divisor"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Share_2025_Florencia",category:"Imagen",name:"Botones para compartir contenido GenIA-L 2025",description:"Botones de compartir que generan automáticamente las URLs de intent de cada red social (Facebook sharer, LinkedIn share, X/Twitter tweet, WhatsApp send, mailto). Incluye además imprimir y copiar al portapapeles. Cada botón se activa/desactiva con un boolean. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["share","compartir","rrss","genial"],fields:[{name:"url",type:"text",help:"URL del contenido a compartir. Se codifica (encodeURIComponent) y se inyecta en los parámetros de compartir de cada red social",label:"URL del contenido",mandatory:!1,example_value:"https://lefebvre.es/genia-l/blog/articulo-ejemplo"},{name:"title",type:"text",help:"Título del contenido a compartir. Se usa en Twitter/X (texto del tweet), WhatsApp (texto del mensaje) y Email (asunto). Facebook y LinkedIn no lo usan porque extraen el título de la meta og:title",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal"},{name:"facebook",type:"boolean",help:"Si está activado, muestra el botón de compartir en Facebook (abre el sharer oficial con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Facebook",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkedin",type:"boolean",help:"Si está activado, muestra el botón de compartir en LinkedIn (abre el share-offsite con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón LinkedIn",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"twitter",type:"boolean",help:"Si está activado, muestra el botón de compartir en X (abre el intent/tweet con URL y título precargados). Si está desactivado, NO aparece el botón",label:"Mostrar botón X (Twitter)",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"whatsapp",type:"boolean",help:"Si está activado, muestra el botón de compartir por WhatsApp (abre api.whatsapp.com/send con título + URL en el mensaje). Si está desactivado, NO aparece el botón",label:"Mostrar botón WhatsApp",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"email",type:"boolean",help:"Si está activado, muestra el botón de compartir por Email (abre el cliente de correo con asunto=título y cuerpo=URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Email",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL del contenido" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SpectrumSeparator",category:"Separador",name:"Separador spectrum con degradado corporativo",description:"Spectrum separador",framework:"Astro",priority:1,tags:["separador","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Sumario_2025_Beijing",category:"Contenido de Texto",name:"Sumario de post con iconos de check circular y dos modos texto/HTML 2025",description:'Sumario o "en este artículo" con título h2 y viñetas marcadas con icono de check circular. Admite dos modos alternativos para el contenido: "Items" (array de strings planos sin HTML) o "contentSumario" (HTML libre, típicamente <ul><li>). Si ambos están rellenos, "contentSumario" tiene PRIORIDAD y "Items" se ignora. Los <li> reciben el icono de check automático vía CSS global',framework:"Astro",priority:1,tags:["texto","sumario","lista","check","post"],fields:[{name:"title",type:"text",help:"Título del sumario (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"En este artículo"},{name:"contentSumario",type:"textArea",help:'Sumario en HTML libre (normalmente <ul><li>...</li></ul>). Si tiene valor, este campo TIENE PRIORIDAD sobre "Items del sumario" — el campo items se ignora. Los <li> reciben el icono de check automático por CSS global',label:"Sumario en HTML",mandatory:!1,example_value:"<ul><li>Contexto normativo</li><li>Casos reales de uso</li><li>Buenas prácticas</li></ul>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tabla_2025_Fuenlabrada",category:"Contenido de Texto",name:"Tabla comparativa de dos columnas con flecha separadora 2025",description:"Tabla comparativa con título h2, descripción HTML y dos columnas (izquierda vs derecha) con sus títulos e ítems respectivos (strings planos sin HTML). Layout responsive: apilado en móvil, grid con flecha separadora (→) en desktop. TERNARIO: si AMBAS columnas tienen ítems → grid de 2 columnas con flecha entre ellas; si solo UNA los tiene → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo de ambas",framework:"Astro",priority:1,tags:["texto","tabla","comparativa","columnas","responsive"],fields:[{name:"title",type:"text",help:"Título superior de la tabla (h2). Solo se muestra si tiene valor; si se deja vacío, NO aparece",label:"Texto del título",mandatory:!1,example_value:"Compara nuestros planes"},{name:"description",type:"text",help:"Descripción debajo del título. Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Elige el plan que mejor se adapte a las necesidades de tu despacho"},{name:"leftTitle",type:"text",help:"Título de la columna izquierda",label:"Título columna izquierda",mandatory:!1,example_value:"Plan Profesional"},{name:"leftItems",type:"list",help:"Ítems de la columna izquierda (strings simples, sin HTML). Se renderizan en filas con separadores",label:"Ítems columna izquierda",mandatory:!1,items:{type:"text",example_value:["Consultas ilimitadas","Soporte prioritario","Acceso a webinars"]}},{name:"rightTitle",type:"text",help:"Título de la columna derecha",label:"Título columna derecha",mandatory:!1,example_value:"Plan Básico"},{name:"rightItems",type:"list",help:"Ítems de la columna derecha (strings simples, sin HTML). TERNARIO INTERNO: si hay contenido en AMBAS columnas → grid de 2 columnas con flecha separadora en desktop; si solo una tiene contenido → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo entre ambas columnas",label:"Ítems columna derecha",mandatory:!1,items:{type:"text",example_value:["Consultas limitadas a 50/mes","Soporte por email","Sin acceso a webinars"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tag_2025_Bolonia",category:"Contenido de Texto",name:"Listado horizontal de pastillas de tag con fondo azul muy claro 2025",description:"Grupo de etiquetas/tags en fila, cada una renderizada como una pastilla redondeada con borde gris claro y fondo azul muy claro. Recibe directamente un array de strings planos (sin campos anidados por ítem). Se usa habitualmente dentro de Hero_2025/2026_Benidorm para etiquetar artículos de blog",framework:"Astro",priority:1,tags:["texto","tag","etiqueta","pastilla","badge"],fields:[{name:"tags",type:"list",help:"Listado de etiquetas/tags. Cada una se renderiza como una pastilla redondeada con borde gris claro y fondo azul muy claro. Si se deja vacío, no aparece ningún tag",label:"Listado de tags",mandatory:!1,items:{type:"text",example_value:["IA Jurídica"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TestPadre",category:"Contenido de Texto",name:"TestPadre",description:"TestPadre",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"texto",type:"text",help:"Texto libre",label:"Texto",mandatory:!1,example_value:"Prueba de texto"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Test_2026_Gaza",category:"TEST",name:"Ejemplo TESTEO Escuelas - Gaza",description:"Este es un componente para tener todas las opciones de los Carbins",framework:"Astro",priority:1,tags:["prueba","carbin","gaza","test"],fields:[{name:"nombreEscuela",type:"text",help:"Nombre de la escuela",label:"Nombre de la escuela",mandatory:!1,example_value:"Elementary School No. 1"},{name:"descripcionEscuela",type:"textArea",help:"Descripción de la escuela",label:"Descripción de la escuela",mandatory:!1,example_value:"Típico instituto de educación americano con alumnos vampiros y hombres lobo a lo Crepúsculo."},{name:"estaEnEEUU",type:"boolean",help:"Si la escuela está en EE. UU.",label:"¿Está en EE. UU.?",mandatory:!1,example_value:!0},{name:"tipoEscuela",type:"select",help:"Tipo de escuela",label:"Tipo de escuela",options:["Pública","Privada","Concertada"],options_labels:["Escuela pública","Escuela privada","Escuela concertada"],example_value:"Pública"},{name:"nombresAlumnosProblematicos",type:"list",help:"Lista de alumnos conflictivos",label:"Nombres de alumnos problemáticos",mandatory:!1,items:{type:"text",example_value:["Edward Cullen","Bella Swan","Jacob Black"]}},{name:"fichasProfesores",type:"list",help:"Datos de cada profesor",label:"Fichas de los profesores",mandatory:!1,items:{type:"object",fields:[{name:"nombre",type:"text",help:"Nombre del profesor",label:"Nombre del profesor",example_value:"Profesor Smith"},{name:"descripcion",type:"textArea",help:"Descripción del profesor",label:"Descripción",example_value:"Profesor de matemáticas, estricto pero justo. Siempre lleva gafas y tiene un bigote peculiar."},{name:"asignatura",type:"select",help:"Materia que imparte",label:"Asignatura",options:["Matemáticas","Historia","Física"],options_labels:["Matemáticas aplicadas a las CC. SS.","Historia de la humanidad","Física y química"],example_value:"Matemáticas"},{name:"esViolento",type:"boolean",help:"Si el profesor es violento",label:"¿Es un profesor violento?",example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextBox",category:"Contenido de Texto",name:"Caja de texto",description:"Caja de texto en Astro",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"htmlCode",type:"textArea",help:"Código HTML de la caja",label:"Código HTML",mandatory:!1,example_value:"<p>Lo que quieras...</p>"},{name:"addShadow",type:"boolean",help:"Activar sombra en la caja",label:"Añadir sombra",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBackground",category:"Contenido de Imagen",name:"Contenido con imagen de fondo",description:"Tarjeta con imagen de background y texto para destacar contenido",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos<br>Haciendo cosas de gatos<br>Se un gato Lefebvre"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>Gatos que a lo largo de la historia han demostrado ser compañeros leales y fascinantes.</p>
|
|
32
|
+
`},{name:"image",type:"image",label:"URL de la imagen",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-1-1.png"},{name:"video",type:"video",label:"URL del video",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://www.youtube.com/embed/3gJIiEdYKR0"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Bogota",category:"Imagen",name:"Banner con imagen/vídeo de fondo, overlay h3 y color de texto custom 2025",description:'Banner de ancho completo con imagen o vídeo MP4 como fondo (mutuamente excluyentes; si se rellenan ambos, la imagen gana). Overlay centrado con título h3 siempre visible, descripción conmutable mediante toggle "Mostrar descripción", botón CTA opcional y color de texto personalizable mediante código hex (requiere estar en la safelist del tailwind.config por limitaciones JIT). Admite HTML en título y descripción',framework:"Astro",priority:1,tags:["banner","imagen","video","hero","overlay","cta","boton"],fields:[{name:"title",type:"text",help:'Título principal del banner (h3). Admite HTML. Se renderiza SIEMPRE (incluso cuando "Mostrar descripción" está desactivado)',label:"Texto del título",mandatory:!1,example_value:"GenIA-L, inteligencia artificial para tu despacho"},{name:"description",type:"text",help:'Descripción que aparece debajo del título. Admite HTML. Solo se muestra si "Mostrar descripción" está activado',label:"Texto de la descripción",mandatory:!1,example_value:"Automatiza tu trabajo diario con la primera plataforma de IA jurídica adaptada al Derecho español"},{name:"txtBtn",type:"text",help:'Texto del botón CTA. Solo se muestra si "Mostrar botón" está activado',label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"linkBtn",type:"text",help:'URL de destino del botón CTA. ATENCIÓN: si "Mostrar botón" está activado pero esta URL está vacía, el botón se muestra igualmente con un href inválido',label:"Enlace del botón",mandatory:!1,example_value:"/genia-l/demo"},{name:"alt",type:"text",help:'Texto alternativo de la imagen de fondo para accesibilidad. Solo aplica si se usa imagen (no vídeo). Si se deja vacío, se usa el "Texto del título" como alt',label:"Alt de la imagen de fondo",mandatory:!1,example_value:"Imagen de fondo del banner de GenIA-L"},{name:"src",type:"image",help:"URL de la imagen de fondo. Mutuamente exclusivo con el vídeo en el editor, pero si se rellenan ambos en runtime, la IMAGEN tiene prioridad sobre el vídeo",label:"Imagen de fondo",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-16-9.png"},{name:"iframeSrc",type:"video",help:'URL del archivo de vídeo MP4 directo (NO es un iframe de Vimeo/YouTube, a pesar del nombre del campo). Se usa como <source type="video/mp4"> con autoplay, loop y muted. Solo se renderiza si "Imagen de fondo" está vacía',label:"URL del vídeo de fondo (MP4)",mandatory:!1,exclusive_group:"media",exclusive_group_label:"Contenido multimedia",example_value:"https://assets.lefebvre.es/media/videos/genial/demo.mp4"},{name:"showBtn",type:"boolean",help:'Activa/desactiva el botón CTA superpuesto sobre la imagen. ATENCIÓN: no valida que "Enlace del botón" ni "Label del botón" tengan valor — si activas el botón sin texto/URL, aparece un botón vacío o con enlace inválido',label:"Mostrar botón",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"showDescription",type:"boolean",help:"Activa/desactiva la descripción bajo el título. ACTIVADO: muestra título + descripción. DESACTIVADO: muestra solo el título (con menos margen inferior)",label:"Mostrar descripción",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"color",type:"text",help:'Color del texto del título y descripción en formato hexadecimal (p. ej. "#ffffff", "#262626"). ATENCIÓN: Tailwind JIT no genera clases desde valores dinámicos, por lo que este valor requiere estar en la safelist del tailwind.config para que se aplique correctamente. Por defecto "#ffffff" (blanco)',label:"Color del texto (hex)",mandatory:!1,example_value:"#ffffff"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Imagen_2025_Fukushima",category:"Imagen",name:"Logo pequeño 80x80 con descripción y enlace opcional 2025",description:'Bloque compacto con logotipo de 80x80 px (max-w-20) y descripción debajo (14px color gris, admite HTML). Si se rellena el campo "URL de destino", todo el bloque (imagen + texto) se envuelve en un enlace <a> clicable; si se deja vacío, se renderiza como divs separados sin navegación. Diseñado para usarse como unidad dentro de grids de logotipos (p. ej. dentro de Contenido_2026_Tokyo)',framework:"Astro",priority:1,tags:["imagen","certificado","logo","enlace","compacto"],fields:[{name:"image",type:"image",help:"URL de la imagen del logotipo. Se renderiza a 80x80px con max-w-20 (el ancho real se ajusta al contenido). Si se deja vacía aparece imagen rota",label:"Imagen del logo",mandatory:!1,example_value:"https://lefebvre.es/genia-l/images/genial/img-iso4.webp"},{name:"altImage",type:"text",help:"Texto alternativo del logo para accesibilidad. Si se deja vacío, el atributo alt quedará sin valor",label:"Alt del logo",mandatory:!1,example_value:"Logo de certificación ISO 27001"},{name:"descriptionImage",type:"text",help:"Texto descriptivo que aparece debajo del logo (tamaño 14px, color gris). Admite HTML. Si se deja vacío, no aparece texto",label:"Texto bajo el logo",mandatory:!1,example_value:"ISO 27001 - Seguridad de la información"},{name:"link",type:"text",help:"URL de destino al hacer click. ACTIVADO (con URL): todo el bloque (imagen + texto) se envuelve en un <a> y es clicable. DESACTIVADO (vacío): el bloque se renderiza como divs separados sin navegación",label:"URL de destino (opcional)",mandatory:!1,example_value:"/genia-l/certificaciones/iso-27001"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Indice_2025_Taiwan",category:"Contenido de Texto",name:"Índice de contenidos numerado con enlaces ancla auto-generados 2025",description:'Tabla de contenidos (TOC) con título h2 y listado de apartados numerados automáticamente (1., 2., 3...). Los enlaces navegan a elementos con id coincidente en la misma página. Si no se rellena el campo "ID del ancla", se auto-genera a partir del título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es X" → "que-es-x")',framework:"Astro",priority:1,tags:["texto","indice","toc","navegacion","ancla"],fields:[{name:"titulo",type:"text",help:"Título del índice (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"Índice de contenidos"},{name:"items",type:"list",help:'Listado de apartados del índice. Cada ítem se numera automáticamente (1., 2., 3...). El índice navega a los elementos de la misma página que tengan un id coincidente con el enlace (sin el "#")',label:"Listado de items del índice",mandatory:!1,items:{type:"object",fields:[{name:"titulo",type:"text",help:'Texto visible del ítem (se renderiza con su número ordinal: "1. Introducción", "2. ..."). No admite HTML',label:"Texto del ítem",example_value:"Introducción"},{name:"enlace",type:"text",help:'ID del elemento destino de la misma página, SIN el "#" (el componente lo añade automáticamente). Si se deja vacío, se GENERA automáticamente desde el título: minúsculas, sin acentos, espacios a guiones y sin caracteres especiales (p. ej. "Qué es GenIA-L" → "que-es-genial"). El elemento con ese id debe existir en la página',label:"ID del ancla (sin #)",example_value:"introduccion"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Modal_2025_Sagunto",category:"Formulario",name:"Botón CTA que abre modal con backdrop blur y formulario LF2 inyectado 2025",description:"Botón CTA con colores configurables (texto, fondo, borde) que NO se invierten en hover, a diferencia de CTA_2025_Formentera. Al pulsarse abre un modal con backdrop blur que contiene imagen lateral opcional, título h2, descripción HTML y formulario LF2 inyectado dinámicamente vía apiManager.pintarFormularioAutogestionado. Requiere LeadformApiManagerClass y apiManager disponibles globalmente en la página",framework:"Astro",priority:1,tags:["boton","cta","modal","formulario","lf2","popup","personalizable"],fields:[{name:"buttonText",type:"text",help:"Texto visible del botón CTA que abre el modal. Se ajusta al ancho del contenido (w-fit). No admite HTML",label:"Label del botón",mandatory:!1,example_value:"Solicita una demo"},{name:"frontColor",type:"text",help:'Color del texto del botón. Acepta nombre CSS (ej. "white", "black") o código hex (ej. "#2134F1"). NO se invierte en hover (a diferencia de CTA_2025_Formentera)',label:"Color del texto (frontal)",mandatory:!1,example_value:"#ffffff"},{name:"backColor",type:"text",help:"Color de fondo del botón. Acepta nombre CSS o código hex",label:"Color de fondo",mandatory:!1,example_value:"#2134F1"},{name:"borderColor",type:"text",help:"Color del borde del botón (1px sólido). Acepta nombre CSS o código hex",label:"Color del borde",mandatory:!1,example_value:"#2134F1"},{name:"imageModal",type:"image",help:"Imagen que se muestra en la columna izquierda del modal. Si se deja vacía, el modal no incluye columna de imagen y el texto ocupa el ancho completo",label:"Imagen del modal",mandatory:!1,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-4-3.png"},{name:"altModal",type:"text",help:"Texto alternativo de la imagen del modal para accesibilidad. Solo aplica si el modal tiene imagen",label:"Alt de la imagen del modal",mandatory:!1,example_value:"Captura del dashboard de GenIA-L con el asistente IA"},{name:"titleModal",type:"text",help:"Título del modal (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Título del modal",mandatory:!1,example_value:"Descubre GenIA-L"},{name:"descriptionModal",type:"text",help:"Descripción del modal que aparece debajo del título, antes del formulario. Admite HTML",label:"Descripción del modal",mandatory:!1,example_value:"Déjanos tus datos y uno de nuestros comerciales se pondrá en contacto contigo para programar una demo personalizada"},{name:"lf2FormTitle",type:"text",help:"Nombre EXACTO del formulario tal como está dado de alta en LF2 (plataforma de leadforms de Lefebvre). Se pasa a apiManager.pintarFormularioAutogestionado() para cargar el formulario correcto. Si es erróneo, el formulario no se renderizará. Requiere que LeadformApiManagerClass y apiManager estén disponibles globalmente en la página",label:"Nombre del formulario en LF2",mandatory:!1,example_value:"27925 Formulario Solicitar Demo GenIA-L"},{name:"idebook",type:"text",help:"ID del ebook, whitepaper o documento registrado en BI con formato EXXXXXXX para pasar como parámetro oculto al formulario de LF2. No es obligatorio, solo debe usarse para formularios que acabaran con una descarga",label:"ID de documento en BI (opcional)",mandatory:!1,example_value:""}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Paginacion_2025_Paris",category:"Contenido de Texto",name:"Paginación con modo URL path o query y trailing slash configurable 2025",description:'Componente de paginación con dos modos de URL alternables: "path" (/page/2/) o "query" (/?page=2). Incluye control de trailing slash, página actual, total de páginas, total de elementos y elementos por página. Se puede definir una URL base (p. ej. /blog) como raíz del paginado. En modo "query" el trailing slash determina si queda /?page=2 o ?page=2',framework:"Astro",priority:1,tags:["paginacion","navegacion","paginado","listado"],fields:[{name:"urlMode",type:"select",help:'Formato de las URLs de paginación: "path" para /page/2/ o "query" para /?page=2',label:"Modo de URL",mandatory:!1,options:["path","query"],options_labels:["Path (/page/2)","Query string (?page=2)"],example_value:"path"},{name:"currentPage",type:"text",help:"Introduce el número de la página actual",label:"Página actual",mandatory:!1,example_value:"1"},{name:"totalPages",type:"text",help:"Introduce el número total de páginas",label:"Total de páginas",mandatory:!1,example_value:"10"},{name:"totalItems",type:"text",help:"Introduce el número total de elementos",label:"Total de elementos",mandatory:!1,example_value:"100"},{name:"itemsPerPage",type:"text",help:"Introduce el número de elementos por página",label:"Elementos por página",mandatory:!1,example_value:"10"},{name:"baseUrl",type:"text",help:"Introduce la URL base para la paginación",label:"URL base",mandatory:!1,example_value:"/blog"},{name:"trailingSlash",type:"boolean",help:'Indica si las URLs de paginación deben incluir / al final del path. En modo "query" determina si queda url.es/?page=2 o url.es?page=2',label:"Trailing slash",mandatory:!1,example_value:"false"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"RRSS_2025_Pisa",category:"Imagen",name:"Iconos circulares de RRSS, email, imprimir y copiar enlace condicionales 2025",description:'Bloque horizontal de iconos circulares que incluye perfiles de redes sociales (Facebook, LinkedIn, X/Twitter, Instagram, YouTube, WhatsApp), email (mailto auto-generado) y dos acciones: imprimir (window.print) y copiar URL al portapapeles (con tooltip "Enlace copiado"). Los iconos de RRSS/email aparecen SOLO si su URL/dirección está rellena; imprimir y copiar se activan con toggles boolean. Los enlaces externos abren en nueva pestaña con rel="noopener noreferrer"',framework:"Astro",priority:1,tags:["rrss","redes sociales","compartir","iconos","email"],fields:[{name:"selectorApiShare",type:"text",help:"Selector CSS para inyectar la botonera de compartir de Atenea/Share (no añadir punto delante). Si se deja vacío, la botonera de Atenea NO se inyecta. La integración de Atenea/Share debe estar configurada para inyectar en ese selector. Si añades un selector, no es necesario completar el resto de campos.",label:"Selector para inyectar botonera de Atenea/Share (opcional)",mandatory:!1,example_value:""},{name:"facebook",type:"text",help:'URL del perfil de Facebook. Si se deja vacío, el icono de Facebook NO aparece. Se abre en nueva pestaña con rel="noopener noreferrer"',label:"URL del perfil de Facebook",mandatory:!1,example_value:"https://facebook.com/lefebvre.es"},{name:"linkedin",type:"text",help:"URL del perfil de LinkedIn. Si se deja vacío, el icono de LinkedIn NO aparece. Se abre en nueva pestaña",label:"URL del perfil de LinkedIn",mandatory:!1,example_value:"https://linkedin.com/company/lefebvre-es"},{name:"twitter",type:"text",help:"URL del perfil de Twitter/X. Si se deja vacío, el icono de X NO aparece. Se abre en nueva pestaña",label:"URL del perfil de X",mandatory:!1,example_value:"https://x.com/lefebvre_es"},{name:"instagram",type:"text",help:"URL del perfil de Instagram. Si se deja vacío, el icono de Instagram NO aparece. Se abre en nueva pestaña",label:"URL del perfil de Instagram",mandatory:!1,example_value:"https://instagram.com/lefebvre_es"},{name:"youtube",type:"text",help:"URL del canal de YouTube. Si se deja vacío, el icono de YouTube NO aparece. Se abre en nueva pestaña",label:"URL del canal de YouTube",mandatory:!1,example_value:"https://youtube.com/@lefebvre"},{name:"whatsapp",type:"text",help:"URL/enlace de WhatsApp (formato wa.me/código+número o URL completa). Si se deja vacío, el icono de WhatsApp NO aparece. Se abre en nueva pestaña",label:"URL de WhatsApp",mandatory:!1,example_value:"https://wa.me/34600000000"},{name:"email",type:"text",help:'Dirección de email SIN "mailto:" (el componente añade el prefijo automáticamente). Si se deja vacío, el icono de email NO aparece. Al hacer clic abre el cliente de correo predeterminado',label:"Dirección de email",mandatory:!1,example_value:"contacto@lefebvre.es"},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón de imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL a copiar" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón de copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyUrl",type:"text",help:'URL que se copiará al portapapeles al pulsar el botón de copiar. Solo tiene efecto si "Mostrar botón de copiar enlace" está activado. Si se deja vacío, el botón copiará una cadena vacía',label:"URL a copiar al portapapeles",mandatory:!1,example_value:"https://lefebvre.es/genia-l/"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"ReactButton",category:"CTA",name:"Botón en React",description:"Botón de prueba en React",framework:"React",tags:["boton","interactivo","ejemplo"],fields:[{name:"label",type:"text",label:"Texto del botón",mandatory:!0,example_value:"Botón en React"},{name:"href",type:"text",label:"Url de destino",mandatory:!0,example_value:"https://lefebvre.es"},{name:"target",type:"text",label:"Indicar si se abre en la misma ventana o en una nueva (_blank)",mandatory:!1,example_value:"_blank"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SEO_Head_Section",category:"SEO",name:"SEO Head Section",description:"Sección de encabezado SEO para mejorar la visibilidad en buscadores",framework:"Astro",priority:1,tags:["seo","genial"],fields:[{name:"title",type:"text",help:"Título para buscadores",label:"Título de la página",mandatory:!1,example_value:"Lefebvre"},{name:"description",type:"text",help:"Descripción para buscadores",label:"Descripción de la página",mandatory:!1,example_value:""},{name:"canonical",type:"text",help:"URL canónica de la página",label:"URL canónica",mandatory:!1,example_value:""},{name:"shareImgSrc",type:"text",help:"Imagen al compartir en RRSS",label:"Src de la imagen para compartir",mandatory:!1,example_value:"https://www.ejemplo.com/imagen.jpg"},{name:"robots",type:"select",help:"Directiva de indexación",label:"Indexación por parte de los motores de búsqueda",options:["index, follow","noindex, nofollow","index, nofollow","noindex, follow"],options_labels:["Indexar y seguir enlaces","No indexar ni seguir enlaces","Indexar pero no seguir enlaces","No indexar pero seguir enlaces"],example_value:"index, follow"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Reinosa",category:"Separador",name:"Separador de 4px con gradiente corporativo indigo-azul-rosa 2025",description:"Barra horizontal fina (4px de alto) con gradiente de colores corporativos (indigo → azul → rosa) aplicado a todo el ancho del contenedor. Componente sin parámetros configurables: se usa como divisor visual destacado entre secciones. Para separadores neutros más discretos usa Separador_2025_Toledo",framework:"Astro",priority:1,tags:["separador","gradiente","spectrum","divisor"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Separador_2025_Toledo",category:"Separador",name:"Separador horizontal neutro de 1px gris sin parámetros 2025",description:"Línea horizontal gris de 1px (border-top con color #B6B7BB) utilizada como divisor neutro y discreto entre secciones de contenido. Componente sin parámetros configurables. Para separadores más destacados con gradiente corporativo usa Separador_2025_Reinosa",framework:"Astro",priority:1,tags:["separador","hr","linea","divisor"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Share_2025_Florencia",category:"Imagen",name:"Botones para compartir contenido GenIA-L 2025",description:"Botones de compartir que generan automáticamente las URLs de intent de cada red social (Facebook sharer, LinkedIn share, X/Twitter tweet, WhatsApp send, mailto). Incluye además imprimir y copiar al portapapeles. Cada botón se activa/desactiva con un boolean. Para el directorio de GenIA-L en la corporativa de Lefebvre",framework:"Astro",priority:1,tags:["share","compartir","rrss","genial"],fields:[{name:"url",type:"text",help:"URL del contenido a compartir. Se codifica (encodeURIComponent) y se inyecta en los parámetros de compartir de cada red social",label:"URL del contenido",mandatory:!1,example_value:"https://lefebvre.es/genia-l/blog/articulo-ejemplo"},{name:"title",type:"text",help:"Título del contenido a compartir. Se usa en Twitter/X (texto del tweet), WhatsApp (texto del mensaje) y Email (asunto). Facebook y LinkedIn no lo usan porque extraen el título de la meta og:title",label:"Texto del título",mandatory:!1,example_value:"La inteligencia artificial en el sector legal"},{name:"facebook",type:"boolean",help:"Si está activado, muestra el botón de compartir en Facebook (abre el sharer oficial con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Facebook",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"linkedin",type:"boolean",help:"Si está activado, muestra el botón de compartir en LinkedIn (abre el share-offsite con la URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón LinkedIn",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"twitter",type:"boolean",help:"Si está activado, muestra el botón de compartir en X (abre el intent/tweet con URL y título precargados). Si está desactivado, NO aparece el botón",label:"Mostrar botón X (Twitter)",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"whatsapp",type:"boolean",help:"Si está activado, muestra el botón de compartir por WhatsApp (abre api.whatsapp.com/send con título + URL en el mensaje). Si está desactivado, NO aparece el botón",label:"Mostrar botón WhatsApp",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"email",type:"boolean",help:"Si está activado, muestra el botón de compartir por Email (abre el cliente de correo con asunto=título y cuerpo=URL). Si está desactivado, NO aparece el botón",label:"Mostrar botón Email",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!0},{name:"print",type:"boolean",help:"Si está activado, muestra un botón con icono de imprimir que ejecuta window.print() en la página actual. Si está desactivado, el botón NO aparece",label:"Mostrar botón imprimir",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1},{name:"copyLink",type:"boolean",help:'Si está activado, muestra un botón con icono de copiar enlace que copia la URL definida en "URL del contenido" al portapapeles (con tooltip de confirmación "Enlace copiado"). Si está desactivado, el botón NO aparece',label:"Mostrar botón copiar enlace",mandatory:!1,options:["false","true"],options_labels:["Falso","Verdadero"],example_value:!1}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"SpectrumSeparator",category:"Separador",name:"Separador spectrum con degradado corporativo",description:"Spectrum separador",framework:"Astro",priority:1,tags:["separador","lefebvre.es"],fields:[]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Sumario_2025_Beijing",category:"Contenido de Texto",name:"Sumario de post con iconos de check circular y dos modos texto/HTML 2025",description:'Sumario o "en este artículo" con título h2 y viñetas marcadas con icono de check circular. Admite dos modos alternativos para el contenido: "Items" (array de strings planos sin HTML) o "contentSumario" (HTML libre, típicamente <ul><li>). Si ambos están rellenos, "contentSumario" tiene PRIORIDAD y "Items" se ignora. Los <li> reciben el icono de check automático vía CSS global',framework:"Astro",priority:1,tags:["texto","sumario","lista","check","post"],fields:[{name:"title",type:"text",help:"Título del sumario (h2). Se renderiza siempre; si se deja vacío aparece el h2 vacío. No admite HTML",label:"Texto del título",mandatory:!1,example_value:"En este artículo"},{name:"contentSumario",type:"textArea",help:'Sumario en HTML libre (normalmente <ul><li>...</li></ul>). Si tiene valor, este campo TIENE PRIORIDAD sobre "Items del sumario" — el campo items se ignora. Los <li> reciben el icono de check automático por CSS global',label:"Sumario en HTML",mandatory:!1,example_value:"<ul><li>Contexto normativo</li><li>Casos reales de uso</li><li>Buenas prácticas</li></ul>"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tabla_2025_Fuenlabrada",category:"Contenido de Texto",name:"Tabla comparativa de dos columnas con flecha separadora 2025",description:"Tabla comparativa con título h2, descripción HTML y dos columnas (izquierda vs derecha) con sus títulos e ítems respectivos (strings planos sin HTML). Layout responsive: apilado en móvil, grid con flecha separadora (→) en desktop. TERNARIO: si AMBAS columnas tienen ítems → grid de 2 columnas con flecha entre ellas; si solo UNA los tiene → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo de ambas",framework:"Astro",priority:1,tags:["texto","tabla","comparativa","columnas","responsive"],fields:[{name:"title",type:"text",help:"Título superior de la tabla (h2). Solo se muestra si tiene valor; si se deja vacío, NO aparece",label:"Texto del título",mandatory:!1,example_value:"Compara nuestros planes"},{name:"description",type:"text",help:"Descripción debajo del título. Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Elige el plan que mejor se adapte a las necesidades de tu despacho"},{name:"leftTitle",type:"text",help:"Título de la columna izquierda",label:"Título columna izquierda",mandatory:!1,example_value:"Plan Profesional"},{name:"leftItems",type:"list",help:"Ítems de la columna izquierda (strings simples, sin HTML). Se renderizan en filas con separadores",label:"Ítems columna izquierda",mandatory:!1,items:{type:"text",example_value:["Consultas ilimitadas","Soporte prioritario","Acceso a webinars"]}},{name:"rightTitle",type:"text",help:"Título de la columna derecha",label:"Título columna derecha",mandatory:!1,example_value:"Plan Básico"},{name:"rightItems",type:"list",help:"Ítems de la columna derecha (strings simples, sin HTML). TERNARIO INTERNO: si hay contenido en AMBAS columnas → grid de 2 columnas con flecha separadora en desktop; si solo una tiene contenido → se renderiza una única tabla con esa columna. El número de filas en desktop se ajusta al máximo entre ambas columnas",label:"Ítems columna derecha",mandatory:!1,items:{type:"text",example_value:["Consultas limitadas a 50/mes","Soporte por email","Sin acceso a webinars"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tabla_2026_Cadiz",category:"Contenido con listas",name:"Tabla de dos columnas independientes con título centrado 2026",description:"Tabla con título h2 centrado, descripción HTML y dos columnas independientes (izquierda y derecha) con sus títulos e ítems respectivos (strings planos sin HTML). Las columnas no están relacionadas entre sí: cada una muestra sus propios ítems sin sincronizar filas ni flecha separadora. Sin fondo en el contenedor. Layout responsive: apilado en móvil, grid de 2 columnas en desktop. TERNARIO: si AMBAS columnas tienen contenido → grid de 2 columnas; si solo UNA tiene contenido → se renderiza una única tabla con esa columna. Incluye structured data schema.org (WebPageElement con dos ItemList independientes) para SEO.",framework:"Astro",priority:1,tags:["texto","tabla","columnas","lista"],fields:[{name:"title",type:"text",help:"Título superior de la tabla (h2), centrado. Solo se muestra si tiene valor; si se deja vacío, NO aparece",label:"Texto del título",mandatory:!1,example_value:"Nuestros servicios"},{name:"description",type:"text",help:"Descripción debajo del título. Admite HTML. Solo se muestra si tiene valor",label:"Texto de la descripción",mandatory:!1,example_value:"Todo lo que necesitas para tu despacho"},{name:"leftTitle",type:"text",help:"Título de la columna izquierda",label:"Título columna izquierda",mandatory:!1,example_value:"Servicios incluidos"},{name:"leftItems",type:"list",help:'Ítems de la columna izquierda. Cada ítem tiene un texto obligatorio y un enlace opcional. Si se rellena "link", el texto se renderiza como <a>; si se deja vacío, como texto plano',label:"Ítems columna izquierda",mandatory:!1,items:{type:"object",fields:[{name:"text",type:"text",help:"Texto visible del ítem",label:"Texto del ítem",example_value:"Asesoría fiscal"},{name:"link",type:"text",help:"URL de destino (opcional). Si se rellena, el ítem se convierte en enlace",label:"Enlace (opcional)",example_value:""},{name:"target",type:"select",help:"Cómo se abre el enlace: misma pestaña o nueva pestaña",label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}},{name:"rightTitle",type:"text",help:"Título de la columna derecha",label:"Título columna derecha",mandatory:!1,example_value:"Servicios adicionales"},{name:"rightItems",type:"list",help:'Ítems de la columna derecha. Cada ítem tiene un texto obligatorio y un enlace opcional. Si se rellena "link", el texto se renderiza como <a>; si se deja vacío, como texto plano',label:"Ítems columna derecha",mandatory:!1,items:{type:"object",fields:[{name:"text",type:"text",help:"Texto visible del ítem",label:"Texto del ítem",example_value:"Formación online"},{name:"link",type:"text",help:"URL de destino (opcional). Si se rellena, el ítem se convierte en enlace",label:"Enlace (opcional)",example_value:""},{name:"target",type:"select",help:"Cómo se abre el enlace: misma pestaña o nueva pestaña",label:"Apertura del enlace",options:["_self","_blank"],options_labels:["Misma pestaña","Nueva pestaña"],example_value:"_self"}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Tag_2025_Bolonia",category:"Contenido de Texto",name:"Listado horizontal de pastillas de tag con fondo azul muy claro 2025",description:"Grupo de etiquetas/tags en fila, cada una renderizada como una pastilla redondeada con borde gris claro y fondo azul muy claro. Recibe directamente un array de strings planos (sin campos anidados por ítem). Se usa habitualmente dentro de Hero_2025/2026_Benidorm para etiquetar artículos de blog",framework:"Astro",priority:1,tags:["texto","tag","etiqueta","pastilla","badge"],fields:[{name:"tags",type:"list",help:"Listado de etiquetas/tags. Cada una se renderiza como una pastilla redondeada con borde gris claro y fondo azul muy claro. Si se deja vacío, no aparece ningún tag",label:"Listado de tags",mandatory:!1,items:{type:"text",example_value:["IA Jurídica"]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TestPadre",category:"Contenido de Texto",name:"TestPadre",description:"TestPadre",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"texto",type:"text",help:"Texto libre",label:"Texto",mandatory:!1,example_value:"Prueba de texto"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"Test_2026_Gaza",category:"TEST",name:"Ejemplo TESTEO Escuelas - Gaza",description:"Este es un componente para tener todas las opciones de los Carbins",framework:"Astro",priority:1,tags:["prueba","carbin","gaza","test"],fields:[{name:"nombreEscuela",type:"text",help:"Nombre de la escuela",label:"Nombre de la escuela",mandatory:!1,example_value:"Elementary School No. 1"},{name:"descripcionEscuela",type:"textArea",help:"Descripción de la escuela",label:"Descripción de la escuela",mandatory:!1,example_value:"Típico instituto de educación americano con alumnos vampiros y hombres lobo a lo Crepúsculo."},{name:"estaEnEEUU",type:"boolean",help:"Si la escuela está en EE. UU.",label:"¿Está en EE. UU.?",mandatory:!1,example_value:!0},{name:"tipoEscuela",type:"select",help:"Tipo de escuela",label:"Tipo de escuela",options:["Pública","Privada","Concertada"],options_labels:["Escuela pública","Escuela privada","Escuela concertada"],example_value:"Pública"},{name:"nombresAlumnosProblematicos",type:"list",help:"Lista de alumnos conflictivos",label:"Nombres de alumnos problemáticos",mandatory:!1,items:{type:"text",example_value:["Edward Cullen","Bella Swan","Jacob Black"]}},{name:"fichasProfesores",type:"list",help:"Datos de cada profesor",label:"Fichas de los profesores",mandatory:!1,items:{type:"object",fields:[{name:"nombre",type:"text",help:"Nombre del profesor",label:"Nombre del profesor",example_value:"Profesor Smith"},{name:"descripcion",type:"textArea",help:"Descripción del profesor",label:"Descripción",example_value:"Profesor de matemáticas, estricto pero justo. Siempre lleva gafas y tiene un bigote peculiar."},{name:"asignatura",type:"select",help:"Materia que imparte",label:"Asignatura",options:["Matemáticas","Historia","Física"],options_labels:["Matemáticas aplicadas a las CC. SS.","Historia de la humanidad","Física y química"],example_value:"Matemáticas"},{name:"esViolento",type:"boolean",help:"Si el profesor es violento",label:"¿Es un profesor violento?",example_value:!1}]}}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextBox",category:"Contenido de Texto",name:"Caja de texto",description:"Caja de texto en Astro",framework:"Astro",priority:1,tags:["texto"],fields:[{name:"htmlCode",type:"textArea",help:"Código HTML de la caja",label:"Código HTML",mandatory:!1,example_value:"<p>Lo que quieras...</p>"},{name:"addShadow",type:"boolean",help:"Activar sombra en la caja",label:"Añadir sombra",mandatory:!1,example_value:!0}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBackground",category:"Contenido de Imagen",name:"Contenido con imagen de fondo",description:"Tarjeta con imagen de background y texto para destacar contenido",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos<br>Haciendo cosas de gatos<br>Se un gato Lefebvre"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p>Gatos que a lo largo de la historia han demostrado ser compañeros leales y fascinantes.</p>
|
|
33
33
|
<p>Desde siempre han participado en todo tipo de actividades humanas, mostrando su adaptabilidad y encanto.</p>
|
|
34
34
|
<p>Este es el autocompletado del copilot sobre los gatos y sus manías.</p>
|
|
35
35
|
`},{name:"image",type:"image",help:"Dirección de la imagen",label:"URL de la imagen",mandatory:!0,example_value:"https://assets.lefebvre.es/media/img/preview-comp/comp-w-16-9.png"},{name:"orientation",type:"select",help:"Posición de la imagen",label:"Orientación de la figura",options:["right","left"],options_labels:["Derecha","Izquierda"],example_value:"right"}]}},Symbol.toStringTag,{value:"Module"}))},{component:Object.freeze(Object.defineProperty({__proto__:null,metadata:{component_name:"TextImageBlock",category:"Contenido de Imagen",name:"Contenido de texto con imagen",description:"Tarjeta con texto e imagen",framework:"Astro",tags:["card","interactivo","lefebvre.es"],fields:[{name:"title",type:"text",help:"Texto del título",label:"Título",mandatory:!0,example_value:"Gatos abogados: la nueva tendencia felina en el mundo legal"},{name:"description",type:"textArea",help:"Descripción detallada en HTML",label:"Contenido principal (HTML)",mandatory:!0,example_value:`<p><b>No trabajes más, trabaja mejor.</b> GenIA-L no sólo domina la jurisprudencia, sino que piensa como tú: además de hablar el mismo idioma, es la primera IA que razona de forma lógica sobre cómo abordar los desafíos legales más complejos.</p>
|