/* Kaku Chrome · cabecera, menú móvil y pie de kaku-app.site. */
/* Los tokens y los estilos base son los de las landings (su <style> y su [data-frame]), acotados a estas piezas para que
   se vean igual en las páginas que no los traen (el blog, el 404). */
[data-kaku-chrome],[data-oc]{--bg:#EFEAFB;--bg-2:#E8E1F8;--card:#FFFFFF;--card-2:#F2EEFB;--line:#ECE9F5;--line-2:#F4F1FA;--ink:#171421;--ink-2:oklch(0.44 0 0);--ink-3:#77747F;--violet:#8B5CF6;--violet-2:#8B5CF6;--violet-deep:#5634D6;--violet-soft:#F2EEFB;--indigo:#4F46E5;--grad:linear-gradient(135deg,#8B5CF6,#4F46E5);--sh-sm:0 1px 2px rgba(23,20,33,.05);--sh:0 1px 2px rgba(23,20,33,.04),0 8px 22px -14px rgba(23,20,33,.18);--sh-lg:0 2px 4px rgba(23,20,33,.04),0 18px 40px -18px rgba(23,20,33,.28)}
[data-kaku-chrome]{font-family:Geist,system-ui,-apple-system,sans-serif;color:var(--ink);-webkit-font-smoothing:antialiased}
[data-kaku-chrome],[data-kaku-chrome] *{box-sizing:border-box}
/* Contenedores, como el [data-frame] de las landings: las reglas @container y las unidades cqw miden lo mismo que allí. */
header[data-kaku-chrome],[data-kaku-foot]{container-type:inline-size}
[data-kaku-chrome] h3{color:inherit;font-family:inherit;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;font-style:normal;text-decoration:none}
[data-kaku-chrome] a{color:var(--violet);font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:normal;word-spacing:normal;text-transform:none;text-decoration:none}
[data-kaku-chrome] a:hover{color:var(--violet-deep)}
[data-kaku-chrome] [style*="Geist Mono"]{font-family:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace!important}
[data-kaku-chrome] p{margin:0}
[data-kaku-chrome] summary{cursor:pointer;list-style:none}
[data-kaku-chrome] summary::-webkit-details-marker{display:none}
[data-kaku-chrome] [data-ul]{position:relative}
[data-kaku-chrome] [data-ul]::after{content:'';position:absolute;left:0;right:0;bottom:-4px;height:2px;border-radius:2px;background:var(--violet);transform:scaleX(0);transform-origin:left;transition:transform .28s}
[data-kaku-chrome] [data-ul]:hover::after{transform:scaleX(1)}
[data-kk="langmenu"]{position:relative}
[data-kk="langmenu"]>summary{list-style:none;cursor:pointer}
[data-kk="langmenu"]>summary::-webkit-details-marker{display:none}
[data-kk="langmenu"]>summary::marker{content:""}
[data-kk="langmenu"]>summary [data-kk="langchev"]{transition:transform .2s cubic-bezier(.2,.7,.2,1)}
[data-kk="langmenu"][open]>summary [data-kk="langchev"]{transform:rotate(180deg)}
[data-kk="langmenu"] [data-kk-langopt]:hover{background:var(--card-2)}
[data-kk="langmenu"][open]>summary{background:var(--card-2)}
@media (max-width:1024px){
[data-kaku-chrome] [data-md-hide]{display:none!important}
[data-kaku-chrome] [data-md-show]{display:flex!important}
[data-kaku-chrome] [data-md-2]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@media (max-width:640px){
[data-kaku-chrome] [data-sm-hide]{display:none!important}
[data-kaku-chrome] [data-ft]{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:28px 20px!important}
[data-kaku-chrome] [data-ft]>div:first-child{grid-column:1/-1!important}
}
@container (max-width:1024px){
[data-kaku-chrome] [data-md-hide]{display:none!important}
[data-kaku-chrome] [data-md-show]{display:flex!important}
[data-kaku-chrome] [data-md-2]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@container (max-width:640px){
[data-kaku-chrome] [data-sm-hide]{display:none!important}
[data-kaku-chrome] [data-ft]{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:28px 20px!important}
[data-kaku-chrome] [data-ft]>div:first-child{grid-column:1/-1!important}
}
/* Landings en móvil (≤767 px): Elementor pone sus contenedores en flex-wrap: wrap y, con el marco del diseño dentro
   (container-type: inline-size), Chrome calcula la altura del widget como si el texto ocupara una columna estrechísima:
   miles de píxeles en blanco entre el contenido y el pie. Cada uno de esos contenedores lleva un solo widget, así que
   nowrap no cambia nada más. */
.e-con:has(>.elementor-widget-html>[data-frame]){flex-wrap:nowrap!important}
/* Barra de lectura de las entradas del blog. */
[data-kk-prog]{position:absolute;left:0;right:0;bottom:-1px;height:3px;pointer-events:none}
[data-kk-prog]>i{display:block;height:3px;background:var(--grad);transform:scaleX(0);transform-origin:left;will-change:transform}
/* Kaku · navegación del header: mega menú de Features (desktop) + off-canvas (móvil y tablet) */
/* Estos dos menús se animan siempre, también con «reducir movimiento» activo en el sistema: es una decisión de diseño.
   Elementor pone a cero todas las transiciones del sitio en ese caso (html *{transition-duration:0s!important}), y de ahí
   que cada transition de aquí lleve !important. */
[data-mm-panel]{line-height:normal;letter-spacing:normal;text-align:left}
[data-mm-panel] *,[data-oc],[data-oc] *{box-sizing:border-box}
[data-ki]{display:block;flex:none;overflow:visible}
[data-mm-panel]{opacity:0;visibility:hidden;transition:opacity .16s .1s,visibility 0s .26s!important}
/* Con el script activo, el margen de cierre lo pone él (ver [data-mm-on]) y aquí no se repite. */
[data-mm-js] [data-mm-panel]{transition:opacity .16s,visibility 0s .16s!important}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-panel]{opacity:1;visibility:visible;transition:opacity .2s .05s,visibility 0s .05s!important}
/* Puente de hover (lo activa el script): con el menú abierto, el hueco libre del header cuenta como menú, para llegar al panel
   en diagonal sin soltarlo. Los enlaces del header quedan por encima del puente y siguen mandando. */
[data-mm][data-mm-on]::after{content:"";position:absolute;left:0;right:0;bottom:0;margin:0 auto;width:min(1060px,calc(100% - 48px));height:46px}
[data-mm]>a,header[data-kk-nav]>div>a,header[data-kk-nav]>div>div[data-md-hide]{position:relative;z-index:1}
[data-mm-it]{transition:background .2s!important}
[data-mm-it]:hover{background:var(--card-2)}
[data-mm-tile]{transition:transform .42s cubic-bezier(.6,-.5,.3,1.5),border-color .2s,box-shadow .2s!important}
[data-mm-it]:hover [data-mm-tile]{transform:rotate(-8deg);border-color:var(--violet-2);box-shadow:var(--sh)}
[data-mm-arr]{opacity:0;transform:translateX(-6px);transition:opacity .2s,transform .25s!important}
[data-mm-it]:hover [data-mm-arr]{opacity:1;transform:none}
[data-mm-chev]{transition:transform .25s!important}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-chev]{transform:rotate(180deg)}
/* Los iconos de la órbita conservan capa propia: al cerrar no hay que volver a pintarlos dentro de la tarjeta, que es lo que daba un tirón
   la primera vez. Solo ellos: en los items, la capa propia emborrona el texto. */
[data-mm-orb]{transform:rotate(var(--r));will-change:transform}
[data-mm-core]{transform:rotate(-8deg);will-change:transform}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-card]{animation:mmCard .32s cubic-bezier(.2,.7,.2,1) .05s both}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-it]{animation:mmIt .3s cubic-bezier(.2,.7,.2,1) var(--d) both}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-core]{animation:mmCore .5s cubic-bezier(.3,1.5,.5,1) .08s both}
[data-mm]:is(:hover,[data-mm-on],:has(:focus-visible)) [data-mm-orb]{animation:mmOrb .5s cubic-bezier(.3,1.4,.5,1) var(--d) both}
[data-oc]{overflow:hidden;position:fixed;top:0;bottom:0;left:0;right:0;margin:0 auto;width:100%;z-index:85;visibility:hidden;pointer-events:none;font-family:'Geist',system-ui,sans-serif;font-size:16px;font-weight:400;line-height:normal;letter-spacing:normal;text-align:left;color:var(--ink);-webkit-font-smoothing:antialiased;transition:visibility 0s .6s!important}
[data-oc] a{font-size:inherit;font-weight:inherit;line-height:inherit;letter-spacing:normal;word-spacing:normal;text-transform:none;font-style:normal;text-decoration:none}
[data-oc][data-open="true"]{visibility:visible;pointer-events:auto;transition:visibility 0s 0s!important}
[data-oc-bd]{opacity:0;transition:opacity .5s cubic-bezier(.4,0,.2,1)!important;will-change:opacity}
[data-oc][data-open="true"] [data-oc-bd]{opacity:1;transition:opacity .55s cubic-bezier(.4,0,.2,1)!important}
[data-oc-side]{transform:translate3d(104%,0,0);transition:transform .5s cubic-bezier(.7,0,.3,1)!important;will-change:transform;contain:layout paint;backface-visibility:hidden}
[data-oc][data-open="true"] [data-oc-side]{transform:translate3d(0,0,0);transition:transform .7s cubic-bezier(.19,1,.22,1)!important}
[data-oc-st="x"]{opacity:0;transform:translate3d(16px,0,0);transition:opacity .2s ease,transform .3s ease!important}
[data-oc][data-open="true"] [data-oc-st="x"]{opacity:1;transform:translate3d(0,0,0);transition:opacity .5s ease calc(var(--d) * .45 + 60ms),transform .75s cubic-bezier(.19,1,.22,1) calc(var(--d) * .45 + 60ms)!important}
[data-oc-it]:hover{background:var(--card)}
[data-oc-x]{opacity:0;transition:opacity .2s .35s!important}
[data-oc][data-open="true"] [data-oc-x]{opacity:1;transition:none!important}
/* En reposo las rayas calcan las del burger del header (13,5 x 1,5 px, separadas 3,75 px): el cambio no da salto. */
[data-oc-x] [data-bl]{transform:scale(.84375,.75);transition:transform .45s cubic-bezier(.65,0,.35,1),opacity .3s ease!important}
[data-oc-x] [data-bl="1"]{transform:translateY(1.25px) rotate(0deg) scale(.84375,.75)}
[data-oc-x] [data-bl="3"]{transform:translateY(-1.25px) rotate(0deg) scale(.84375,.75)}
[data-oc][data-open="true"] [data-oc-x] [data-bl="1"]{transform:translateY(5px) rotate(45deg) scale(1)}
[data-oc][data-open="true"] [data-oc-x] [data-bl="2"]{opacity:0;transform:scale(0,.75)}
[data-oc][data-open="true"] [data-oc-x] [data-bl="3"]{transform:translateY(-5px) rotate(-45deg) scale(1)}
@keyframes mmCard{from{transform:translateY(-8px)}to{transform:none}}
@keyframes mmIt{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes mmCore{from{transform:rotate(-8deg) scale(0)}to{transform:rotate(-8deg) scale(1)}}
@keyframes mmOrb{from{opacity:0;transform:translate(var(--tx),var(--ty)) rotate(0deg) scale(.3)}to{opacity:1;transform:translate(0,0) rotate(var(--r)) scale(1)}}
