/*=============================================
=   Ajustes propios sobre el tema Webflow     =
=   Se carga DESPUES de main.webflow.css      =
=============================================*/


/*=============================================
=        Letras corrompiendose (site.js)      =
=============================================*/

/*----------  La letra como caja  ----------
  Cada letra vive en su propio span para poder entrar y salir de ella con
  el raton. Se le fija el ancho de la letra original (lo mide el JS) para
  que cambiar una "O" por un "0" no mueva el resto del menu. Los simbolos
  de dos caracteres ("/V", "(_)") se salen de ese ancho a proposito: antes
  desplazar el menu que perderlos. */
.ab_ch {
    display: inline-block;
    text-align: center;
    white-space: pre;
}

/*----------  La palabra como caja  ----------
  Cada letra es un inline-block, y sin esto el navegador podria cortar la
  linea entre dos letras cualesquiera y partir las palabras por la mitad en
  cualquier parrafo. La palabra entera va en una caja que no se rompe. */
.ab_pal {
    white-space: nowrap;
}

/*----------  Fuera la copia del tema  ----------
  El tema ya traia su propio efecto: al pasar el raton pintaba ENCIMA una
  segunda copia del rotulo, en negrita, con el ::after y el data-text. Con
  las letras corrompiendose debajo se veian los dos a la vez y quedaba
  sucio.

  No basta con ocultarla: esa copia esta en posicion absoluta y centrada
  sobre el rotulo, asi que aunque sea invisible SIGUE TAPANDO las letras y
  se queda el puntero. Con ella puesta, el raton nunca llega a entrar en
  ninguna letra y el efecto no se dispara. Por eso se elimina la caja
  entera (content:none) y no solo su opacidad.

  Va tambien al conmutador de tema. Antes se dejaba con el suyo, y era un
  fallo doble: esa copia se pinta con --font-families--regular-alternative
  en peso 600 (o sea Archivo negrita) sobre un rotulo que el resto del
  tiempo va en DM Mono 400, asi que al pasar el raton por F/1.4 la pieza
  CAMBIABA DE TIPOGRAFIA a mitad de gesto; y al tapar las letras impedia
  ademas que el efecto se disparase ahi. Los dos motivos piden lo mismo.

  El cierre de la galeria (.gclose.gbtn) se queda como esta: su ::after no
  duplica un rotulo, lo crea (content:'Back'), asi que quitarlo dejaria el
  boton mudo. Ese se arregla traduciendolo, no borrandolo.

  Lleva !important porque esa regla del tema no esta en main.webflow.css:
  va en un <style> en linea del propio HTML, que se lee DESPUES de este
  archivo. Sin !important gana la suya por orden. */
@media (hover: hover) {
    .link_component::after,
    [data-theme-switch-text]::after {
        content: none !important;
    }
}

/* El boton de cierre de la galeria decia "Back" tambien en castellano. Es el
   unico rotulo del sitio que no lo pone build.py: lo escribe el <style> en
   linea del tema (content:'Back') y glightbox crea el boton en caliente al
   abrir el visor, asi que no hay nodo en el HTML que traducir ni cadena que
   meter en traducciones.json.

   Se resuelve contra el <html lang>, que es el mismo recurso que ya usa el
   conmutador ESP/ENG mas abajo: una sola regla cubre las 56 paginas y el
   ingles se queda con el 'Back' del tema sin tocar nada.

   De paso la familia: ese ::after es de los pocos sitios donde quedaba
   Archivo 600 en un rotulo de interfaz. */
@media (hover: hover) {
    html[lang="es"] .gclose.gbtn:after {
        content: 'Volver' !important;
    }
    .gclose.gbtn:after {
        font-family: 'DM Mono', ui-monospace, SFMono-Regular, monospace !important;
        font-weight: 400 !important;
        letter-spacing: .04em;
    }
}

/*=====   End of Letras corrompiendose    ======*/


/*=============================================
=              Inicio — titulares             =
=============================================*/

/*----------  Titulares laterales del hero  ----------
  Los titulares en castellano son mas largos que los del tema y se
  metian por debajo de las fotos giradas del carrusel. Limitando el
  ancho del bloque, el texto reparte solo en mas lineas: no se toca ni
  el cuerpo de letra ni la posicion.
  El conjunto de medios mide 821px fijos y va centrado, asi que el
  hueco libre a cada lado es (100vw - 821px) / 2; se le restan el
  margen lateral de pagina y un respiro. */
@media (min-width: 1200px) {
    .home_title_item {
        max-width: max(14rem, calc((100vw - 52rem) / 2 - 3.5rem));
    }

    .home_title_item.is-right-align {
        text-align: right;
    }
}

/*----------  Titulares laterales — el hover no llegaba  ----------
  Las letras se corrompen al pasar el raton (site.js), pero sobre estos dos
  titulares nunca se disparaba. El titular (h1.home_title) NO vive dentro de
  .section_home -esta en el <main>, a su lado- pero la rejilla del hero los
  superpone visualmente, y .section_home pinta encima por ir despues en el
  DOM. Quitar el puntero solo de .case-media_wrapper/.case-media_component
  (el carrusel de fotos giradas, con hueco vacio a los lados: sus fotos solo
  ocupan el centro, 821px, ver arriba) no bastaba: el hueco lo seguia
  tapando la SECCION entera por detras.
  Se corta el paso en la seccion completa y se devuelve pointer-events solo a
  lo que de verdad hace falta que se pueda tocar dentro de ella: cada foto
  del carrusel (su cursor propio, case-media-cursor, main.js:2519, y su
  enlace), y el slider de abajo (SUNLIT ELEGANCE... ) con sus flechas
  data-case-slider="button-prev/next". */
.section_home {
    pointer-events: none;
}

.case-media_component [data-case-media="item"],
.case-slider_component,
.case-slider_nav {
    pointer-events: auto;
}

/*=====        End of Inicio — titulares    ======*/


/*=============================================
=              Ficha — titular                =
=============================================*/

/*----------  Que quepan las dos lineas  ----------
  El titular de la ficha va partido en dos lineas superpuestas. En pantallas
  bajas el tema lo sube a 8rem, un cuerpo pensado para su tipografia (Fixture,
  de pago, sustituida aqui por Metrophobic, que al mismo cuerpo ocupa mas
  alto): la segunda linea cae por debajo de donde arranca el bloque de
  PROYECTO / CREDITOS y lo pisa. A 6rem las dos caben con holgura.

  Va por el id y no por .case_title porque ese 8rem viene de un <style> en
  linea del propio HTML, que se lee DESPUES de este archivo: con la misma
  especificidad ganaria el suyo por orden. Un id gana a una clase pase lo que
  pase, asi que no hace falta !important.

  Misma consulta de medios que la regla del tema: fuera de ella el titular ya
  es de 5.625rem y las dos lineas caben. */
@media screen and (min-width: 992px) and (max-height: 786px) {
    #case-title {
        font-size: 6rem;
    }
}

/*=====          End of Ficha — titular     ======*/


/*=============================================
=          Seleccion — el muro en blanco      =
=============================================*/

/*----------  La capa que borraba el muro  ----------
  /inspired salia practicamente vacio: fondo crema, dos o tres piezas sueltas
  y el rotulo ARRASTRA. No era falta de contenido — las 231 piezas estaban
  colocadas, las fotos cargadas (naturalWidth correcto) y el 51% del encuadre
  cubierto. Sencillamente no se pintaban.

  La culpable es .gallery_overlay, la capa que el tema pone POR ENCIMA del
  muro con mix-blend-mode:difference y fondo crema. Aunque va a opacidad 0
  (invisible), la mezcla obliga a Chrome a componer el grupo entero contra
  ella, y el lienzo del muro son 9810 x 8277px = 81 megapixeles. Ahi el
  compositor se rinde y deja sin pintar casi todo. Por eso sobrevivian sueltas
  justo las piezas que caian en las baldosas que si llegaba a rasterizar.

  Aparecio al alargar la seleccion: la plantilla traia 41 piezas en 180rem y
  ahora son 231 en 350rem, casi cuatro veces el area.

  Se le quita solo la mezcla, no la capa: sigue ahi, a opacidad 0, y el
  conmutador de tema (F/1.4) no la usa para nada en esta pagina, asi que no se
  pierde ningun efecto. */
.gallery_overlay {
    mix-blend-mode: normal;
}

/*=====      End of Seleccion — el muro     ======*/


/*----------  Ficha — etiqueta y valor  ----------
  Cada fila del bloque de informacion es una rejilla de dos columnas SIN
  separacion: la etiqueta a la izquierda y el valor a la derecha, pegados.
  Con "Proyecto", "Creditos" o "servicios" no se nota porque sobra sitio en
  la columna de la etiqueta, pero "Localizacion:" la llena entera y se leia
  "LOCALIZACION:EN TODO EL MUNDO", de corrido.

  El hueco va como column-gap y no como margen de la etiqueta porque esa
  columna se mide por el contenido: un margen se lo comeria la propia
  etiqueta y volveria a quedar pegada al valor. */
.case_info_item {
    column-gap: .75rem;
}

/*----------  Ficha — la descripcion no es un credito  ----------
  El tema pone .case_info_rich-text{display:flex;flex-wrap:wrap} y
  .case_info_rich-text p{width:50%} (main.webflow.css:4426) pensado para
  "Creditos": ahi van 6 <p> sueltos (Rol / valor / Tipo / valor / Ano / valor)
  que se reparten de dos en dos por fila gracias a ese 50%. "Proyecto" y
  "Localizacion" solo traen UN <p> -la descripcion entera- y heredan el mismo
  50% sin tener con quien compartir la fila: en escritorio se nota poco porque
  sobra columna, pero en movil esos ~224px de columna se quedan en ~112px y un
  parrafo de treinta palabras cabe en 2-3 palabras por linea, una escalera
  angosta en vez de un texto legible.
  Si es el UNICO <p> del bloque no hay pareja de fila: se le da el 100%. */
.case_info_rich-text p:only-child {
    width: 100%;
}

/*----------  Ficha — creditos, arrobas que no caben  ----------
  Las columnas de valor de "Creditos" (Fotografia, Modelo, Video, Para...) son
  el otro <p> de la pareja de arriba: se quedan en ~112px en movil, y una
  arroba de Instagram larga ("@gianbenavidesgo", "@makers_agencia") es UNA
  sola palabra sin espacios donde partir. white-space ya esta en "normal"
  -deja partir la linea- pero sin un punto de corte dentro de la palabra el
  navegador prefiere desbordar antes que partirla, y la arroba se salia del
  telefono por la derecha en vez de bajar de linea. */
.case_info_rich-text p {
    overflow-wrap: break-word;
}

/*----------  Proyectos — nombre y rol  ----------
  La fila de cada proyecto reparte nombre y rol con space-between dentro de
  un bloque que ocupa 3 de las 12 columnas de la rejilla. Ahi no caben: el
  peor caso ("TEATRO Y ESPECTACULO" + "DIRECCION // CAMARA // MONTAJE") pide
  437px y el bloque mide 346. Seis de los 22 se quedaban a cero de separacion
  y se leian de corrido: "LOST IN THE LIGHTSFOTOGRAFIA // DIRECCION".

  Se le dan dos columnas mas (de 3 a 5, 589px) en vez de dejar que el texto
  parta en dos lineas: la lista es una tabla y una fila por proyecto se lee
  mucho mejor que quince nombres partidos. Sitio hay de sobra — entre el rol
  y la columna TIPO quedaban 750px vacios.

  Con una sola columna mas (467px) tambien caben los 22 a 1512px, pero justo:
  a 1440 ya parten dos filas y a 1280 seis. Con dos, ninguna parte hasta por
  debajo de 1280. Ademas reparte mejor los tres rotulos a lo ancho de la
  pagina (35 / 625 / 1131) en vez de amontonar PROYECTO y ROL a la izquierda.

  Mismo tramo para la cabecera, para que el rotulo ROL siga cuadrando con la
  columna que titula (las dos van alineadas a la derecha del bloque).

  El column-gap es el seguro: en escritorios estrechos las columnas de la
  rejilla encogen y sin el volverian a tocarse. Con el, antes de tocarse
  parten en dos lineas. */
#w-node-_930ba0d0-3461-f8fd-7cc2-b0b509cf56e5-2160ff2e,
#w-node-a44a0f32-3d54-15e7-3d3d-b1b1a2b67fde-2160ff2e {
    grid-area: 1 / 1 / 2 / 6;
}

.work_cms-item .div-block,
.work_title_left.is-top {
    column-gap: 1.5rem;
}

/*----------  Pie — las cuatro redes  ----------
  La columna de redes eran cuatro enlaces sueltos, uno detras de otro, sin nada
  entre medias: con los rotulos de dos letras del tema se leia "IgTkYtIn", una
  sola palabra sin sentido. Ahora llevan el nombre entero (Instagram, TikTok,
  YouTube, LinkedIn) y la columna pasa a flex con separacion, que es lo que
  hace falta para que se vean como cuatro cosas distintas.

  Con flex-wrap y row-gap por si la columna encoge: antes de que los nombres se
  toquen, la fila parte en dos y sigue leyendose. */
.footer_first-part_col-2 {
    display: flex;
    flex-wrap: wrap;
    column-gap: 1.5rem;
    row-gap: .25rem;
}

/*----------  Pie — sitio para los nombres  ----------
  Los cuatro nombres piden 285px y el bloque donde viven medía 102: el pie ocupa
  3 de las 12 columnas de la rejilla (346px) y las reparte en tres subcolumnas
  iguales, de las que las redes son una. Con "Ig" sobraba; con "Instagram" los
  cuatro se apilaban en cuatro lineas.

  Se le dan tres columnas mas (de 3 a 6, 692px) y el bloque pasa de rejilla de
  tres huecos fijos a flex: asi el año y las redes ocupan lo que miden y no un
  tercio cada uno. Sitio hay de sobra — desde ahi hasta el credito de la derecha
  quedaban 970px vacios.

  El justify-content es obligado: el tema lo trae en space-between para separar
  sus dos bloques dentro de los 346px, y con 692 los mandaria a los extremos.

  Va atado al id de Webflow del bloque, que es como el tema lo coloca en la
  rejilla (mismo caso que las filas de /work). Si algun dia se vuelve a clonar
  la plantilla y ese id cambia, esta regla deja de aplicar sin avisar y los
  nombres vuelven a apilarse.

  El !important hace falta: ese id se repite en el pie (aparece dos veces en
  el DOM, una por variante de Webflow) y aun siendo esta regla la ultima en
  cascada, el span:3 de main.webflow.css seguia ganando -- probablemente por
  como el navegador resuelve especificidad empatada con el id duplicado.
  Comprobado a mano forzando grid-area por JS: sin el !important no hay forma
  de que la regla de aqui se imponga.

  Acotado a escritorio: por debajo de 992px el pie ya es otro (flex en columna,
  a ancho completo) y la rejilla de 12 no existe. */
@media (min-width: 992px) {
    #w-node-de2574c2-6c13-ddbf-33b8-130b94b886d1-94b886d0 {
        grid-area: 1 / 1 / 2 / 7 !important;
    }

    .footer_first-part {
        display: flex;
        justify-content: flex-start;
        column-gap: 2.5rem;
    }
}

/*----------  Pie — un solo credito  ----------
  `footer_second-part` es un flex con space-between pensado para DOS enlaces:
  el credito a la izquierda y "En todo el mundo" a la derecha. Quitado el
  segundo (build.py, pie_ambito), el que queda se iria solo al extremo
  izquierdo, que es justo donde no lo queremos: ocupa el sitio del que se va. */
.footer_second-part {
    justify-content: flex-end;
}

/*----------  Conmutador de idioma  ----------
  El rotulo es "ENG/ESP" en las 56 paginas y no dice por si solo en cual estas.
  A plena tinta va el idioma EN EL QUE ESTAS —el que coincide con el <html lang>
  de la pagina— y atenuado el otro.

  Estuvo al reves un rato, resaltando el destino con el argumento de que era lo
  unico pulsable. Se leia justo al contrario: en la web en castellano brillaba
  ENG y parecia decir "estas en ingles". El rotulo encendido se lee como estado,
  no como boton, y eso gana a cualquier razonamiento sobre lo que se puede
  pulsar.

  Se resuelve por el lang del documento y no generando dos rotulos distintos:
  asi build.py escribe una sola marca y bilingue.py no tiene nada que hacer
  aqui.

  La opacidad no baja mas de .45 a proposito: por debajo, sobre el crema del
  tema, deja de leerse. */
.ab_lang {
    transition: opacity .25s;
}

html[lang="es"] .ab_lang[data-lang="en"],
html[lang="en"] .ab_lang[data-lang="es"] {
    opacity: .45;
}

/* Al pasar el raton se igualan: el enlace entero es una sola cosa y ver medio
   rotulo apagado bajo el cursor parece que solo la mitad responde. */
.link_component:hover .ab_lang,
.header_link:hover .ab_lang {
    opacity: 1;
}

/*----------  Menciones del equipo  ----------
  Cada @cuenta de los creditos lleva a su Instagram. Se subraya con
  text-underline-offset porque el bloque va en versalita apretada y un
  subrayado pegado a la linea base se come los descendentes de la "y" y la "j".
  El hover baja la opacidad en vez de cambiar el color: la ficha es
  monocroma y cualquier color propio rompe el conjunto. */
.ab_ig {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: .18em;
    text-decoration-thickness: 1px;
    transition: opacity .2s;
}

.ab_ig:hover {
    opacity: .55;
}

/*----------  Cabecera legible sobre el muro  ----------
  La cabecera del tema va en mix-blend-mode:difference: no tiene color propio,
  invierte lo que tenga detras. Funcionaba en /inspired porque el muro cubria el
  52% del encuadre y los rotulos caian casi siempre sobre el fondo de la pagina.
  Al empaquetar el muro (94% de cobertura) pasaron a caer sobre foto, y la
  diferencia contra una imagen llena de detalle no es un color: es ruido.

  El velo va en la PAGINA, no en la cabecera: dentro de un elemento que mezcla en
  difference, un fondo propio se invierte con el resto y no separa nada. Aqui
  queda por debajo (z-index 199 contra los 200 de la cabecera), asi que la
  diferencia se calcula contra el color de la pagina, que es justo el contraste
  para el que se diseno el efecto.
  Hereda --body--background para que siga al conmutador de tema claro/oscuro, y
  la altura sale de la variable de la cabecera del tema: el tema la redefine en
  cada corte, y con un valor a mano el velo se quedaba corto o se comia media
  foto en cuanto cambiaba el ancho. El 40% de mas es la cola del degradado, para
  que el velo no termine en un canto recto a mitad de imagen. */
.page-wrapper.is-inspired-page::before {
    content: "";
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: calc(var(--ab-velo-alto) * 1.4);
    z-index: 199;
    pointer-events: none;
    background: linear-gradient(var(--body--background) 55%,
                                color-mix(in srgb, var(--body--background) 55%, transparent) 78%,
                                transparent);
}

.page-wrapper.is-inspired-page {
    --ab-velo-alto: var(--header--height-desktop);
}

@media screen and (max-width: 991px) {
    .page-wrapper.is-inspired-page {
        --ab-velo-alto: var(--header--height-tablet);
    }
}

@media screen and (max-width: 767px) {
    .page-wrapper.is-inspired-page {
        --ab-velo-alto: var(--header--height-mobile);
    }
}

/*----------  Muro en bucle infinito  ----------
  La clase la pone site.js SOLO si consigue medir la maqueta y tomar el mando.
  Asi, sin JS (o si algo falla al medir), el muro se queda como estaba: un
  lienzo enorme con scroll de verdad. Es un muro finito, pero es un muro.

  Con el bucle activo el contenedor deja de tener scroll y pasa a medir lo que
  la ventana: las piezas ya no viven en un lienzo de 29 megapixeles sino en uno
  del tamano de la pantalla, y se recolocan por transform segun el periodo del
  muro. De paso el compositor respira, que en esta pagina no es poca cosa.

  El scale(1.25) del tema sigue sobre #gallery-inner y no se toca: es el que da
  el gesto de alejarse al arrastrar. Aqui solo se le quita el tamano. */
/* clip y NO hidden, y la diferencia es justo lo que rompia esto:
   `overflow:hidden` SIGUE SIENDO un contenedor con scroll. Las piezas se salen
   del lienzo (estan en posicion absoluta mas alla de su caja), asi que el
   contenedor conservaba scroll propio, y el tema lo habia centrado al cargar:
   el lienzo entero quedaba desplazado 1771px arriba a la izquierda y el muro se
   veia vacio aunque las piezas estuvieran bien colocadas.
   `overflow:clip` recorta igual pero no crea contenedor de scroll, asi que no
   hay desplazamiento que valga y el `gallery.scrollLeft` del tema se queda en
   nada por si solo. */
html.ab-toro #gallery {
    overflow: clip;
}

html.ab-toro #gallery-inner {
    width: 100%;
    height: 100%;
}

/* Sin esto, la pieza que asoma medio fuera por un borde se puede seleccionar y
   arrastrar como si fuera una imagen suelta, y el gesto de paneo se pierde. */
html.ab-toro .ab-muro-link {
    user-select: none;
    -webkit-user-drag: none;
}

/* El menu movil (<=991px, ver mas abajo por que llega hasta ahi) pintaba
   "Proyectos"/"Explora" a 96px porque .header_link.is-mobile-main no traia
   font-size propio en ese breakpoint (a diferencia de .header_link.is-mobile,
   que si baja a 1.25rem) y heredaba el tamano de escritorio. En un viewport de
   375px eso se sale de la pantalla y el texto queda cortado. clamp() en vez de
   un valor fijo, para que tambien funcione en los moviles mas estrechos (320px)
   y no solo en 375/414 -y en tablet siga cupiendo sin desbordar. */
@media screen and (max-width: 991px) {
  .header_link.is-mobile-main {
    font-size: clamp(2rem, 10vw, 3.25rem);
    line-height: 1.05;
  }
}

/* En tablet (768-991px) la plantilla seguia mostrando el menu de escritorio
   completo (Proyectos, Explora, Sobre mi, Contacto) metido en un hueco de
   12.875rem que solo le alcanza para dos enlaces: los otros dos quedaban
   colocados fuera del viewport (comprobado: "Sobre mi" a la izquierda 787px
   en una pantalla de 768px), no ocultos por color ni z-index, simplemente sin
   sitio. La plantilla trae el menu hamburguesa ya resuelto para <=767px asi
   que aqui no se inventa nada: se reutiliza el mismo bloque de main.webflow.css
   (linea ~7301) ampliando su alcance con !important, porque a esta anchura la
   propia plantilla ya declara `.header_mobile-menu{display:none}` (linea 6264)
   y una regla normal no le ganaria por especificidad.
   Para que el boton "MENU" responda al clic hace falta ademas mover el
   breakpoint del listener en main.js (ver patch_menu_breakpoint_js en
   build.py): sin eso el boton se ve pero no abre nada. */
@media screen and (max-width: 991px) {
  .header_first-part, .header_last-part {
    display: none !important;
  }

  .menu-switch_component {
    font-family: var(--font-families--regular-alternative);
    text-transform: uppercase;
    color: currentColor;
    background-color: #0000;
    justify-content: flex-end;
    align-items: center;
    min-width: 2.0625rem;
    padding: .1875rem 0 0;
    font-weight: 600;
    display: flex !important;
    position: relative;
  }

  /* Sin estas, el icono salia sin recortar (una cruz enorme) y "MENU"/"CERRAR"
     se pintaban uno encima del otro: son las mismas piezas que ya colocan bien
     el estado abierto/cerrado en movil, sólo que la plantilla las declaraba
     unicamente dentro de su bloque de <=767px. */
  .menu-switch_icon {
    width: .375rem;
    height: .375rem;
    transition: opacity .2s, transform .2s;
    display: block;
    position: absolute;
    top: 0;
    right: -.375rem;
    transform: translate(0);
  }

  .menu-switch_main-text {
    transition: transform .2s;
    display: block;
    position: relative;
    left: 0;
    transform: translate(0);
  }

  .menu-switch_secondary-text {
    transition: transform .2s;
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    transform: translate(0, 100%);
  }

  /* La plantilla sólo declara .menu-switch_text (main.webflow.css:7736) dentro
     de su propio bloque <=767px: en tablet (768-991px, el rango que este mismo
     bloque añade via patch_menu_breakpoint_js) esa caja se queda sin
     overflow:hidden ni position:relative, así que "Menú" y "Cerrar" se ven
     los dos a la vez en vez de deslizar uno sobre otro. Ademas la plantilla la
     ancha al texto EN FLUJO ("Menú", 4 letras): el texto absoluto ("Cerrar", 6
     letras) no cuenta para ese ancho y el propio overflow:hidden se lo come
     por el lado derecho. Se repite aquí la regla completa (valida en todo el
     rango <=991px) y se ensancha para que quepan las dos palabras en español. */
  .menu-switch_text {
    padding-left: .125rem;
    padding-right: .125rem;
    position: relative;
    overflow: hidden;
    transform: translate(.125rem);
    min-width: 4.5rem;
  }

  .header_theme-switch.is-mobile {
    transition: transform .2s;
    display: block !important;
    position: absolute;
    transform: translate(0, 100%);
  }

  .header_link_sup-text {
    font-family: var(--font-families--regular-default);
    color: var(--dark-theme--text);
    mix-blend-mode: difference;
    font-size: 1.25rem;
    font-weight: 400;
  }

  /* Igual que arriba con .menu-switch_text: la plantilla solo coloca estos dos
     bloques (el titular PROYECTOS/EXPLORA y la fila SOBRE MI/CONTACTO/ESP-ENG)
     dentro de su propio <=767px. Sin esto, en tablet ambos heredan el ancho y
     el font-size de escritorio en vez de apilarse como en movil: "Proyectos"
     y "Explora" quedaban en una fila apretada a ~15px (el tamano de parrafo,
     no el de titular) y "Sobre mi"/"Contacto"/"Esp-Eng" sin su espaciado
     vertical propio. Se usa font-size del <p>, no de aqui: .header_main-nav ya
     NO trae los 6rem del tema (ver mas arriba, es lo que desbordaba en movil
     estrecho) -el tamano real lo pone el clamp() de .header_link.is-mobile-main. */
  .header_main-nav.is-mobile {
    padding-right: var(--side-paddings--mobile);
    padding-left: var(--side-paddings--mobile);
    letter-spacing: -.01em;
    flex-flow: column;
    justify-content: flex-start;
    align-items: flex-start;
    width: auto;
    margin-bottom: auto;
    line-height: 1;
  }

  .header_nav.is-mobile {
    padding-right: var(--side-paddings--mobile);
    padding-left: var(--side-paddings--mobile);
    grid-column-gap: 1.375rem;
    grid-row-gap: 1.375rem;
    flex-flow: column;
    justify-content: flex-start;
    align-items: flex-start;
    margin-left: 0;
  }

  .header_component {
    height: var(--header--height-mobile);
  }

  .header_mobile-menu {
    z-index: var(--z-indices--header-mobile-menu);
    padding-top: var(--header--height-mobile);
    grid-column-gap: 3.75rem;
    grid-row-gap: 3.75rem;
    background-color: var(--body--background);
    opacity: 0;
    color: var(--body--text);
    max-height: calc(var(--system--1svh, 1vh) * 100);
    flex-flow: column;
    justify-content: center;
    width: 0%;
    height: 100vh;
    transition-property: transform;
    transition-duration: .35s;
    transition-timing-function: ease;
    display: flex !important;
    position: fixed;
    top: 0;
    left: 0;
    overflow: hidden;
    transform: translate(100%);
  }
}

/*----------  Boton de musica de fondo  ----------
  Punto fijo abajo a la derecha, en todas las paginas (lo crea site.js una
  sola vez y sobrevive a los cambios de pagina de barba). El punto se queda
  atenuado y quieto en pausa; en marcha, a toda tinta y con un pulso suave.

  bottom:5rem y no 1.4rem: el pie ocupa toda la franja final del viewport
  (año, redes y "Creado por Makers" a todo lo ancho) y con un fijo pegado
  abajo el boton le caía encima al hacer scroll hasta el final -- probado,
  tapaba literalmente el credito. Con 5rem queda siempre por encima del pie
  en cualquier pagina y cualquier alto de pantalla. */
#ab-music-toggle {
  position: fixed;
  right: 1.4rem;
  bottom: 5rem;
  z-index: 200;
  display: flex;
  align-items: center;
  gap: .55rem;
  padding: .6rem 1rem;
  background: var(--ab-paper, #f7f5f1);
  color: var(--ab-grey, #423f38);
  border: 1px solid currentColor;
  font-family: var(--ab-micro, ui-monospace, monospace);
  font-size: .68rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  cursor: pointer;
  opacity: .75;
  transition: opacity .25s;
}
#ab-music-toggle:hover { opacity: 1; }
.ab-music-ico {
  width: .5rem;
  height: .5rem;
  border-radius: 50%;
  background: currentColor;
  opacity: .35;
  flex: none;
}
#ab-music-toggle.is-sonando .ab-music-ico {
  opacity: 1;
  animation: ab-music-pulso 1.3s ease-in-out infinite;
}
@keyframes ab-music-pulso {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.5); }
}
@media (prefers-reduced-motion: reduce) {
  #ab-music-toggle.is-sonando .ab-music-ico { animation: none; }
}
@media (max-width: 480px) {
  #ab-music-toggle .ab-music-txt { display: none; }
  #ab-music-toggle { padding: .65rem; right: 1rem; bottom: 4.5rem; }
}


/*=============================================
=   Loader — fotos flotando en movil          =
=============================================*/

/* main.webflow.css saca #loader-gallery de position:absolute en <=991px
   (queda position:relative, estatico), asi que las fotos dejan de flotar
   centradas sobre la lista de proyectos y se cuelan DENTRO de su flujo de
   texto: la lista y la rejilla de fotos se ven a la vez, amontonadas.
   Se restaura el mismo overlay centrado que ya usa desktop; el ancho/alto
   por breakpoint los sigue poniendo main.webflow.css, aqui solo se corrige
   la posicion. */
@media screen and (max-width: 991px) {
  .loader_gallery {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }
}

/* Todas las celdas del mismo tamano, sin importar la proporcion de cada foto.
   .loader_gallery_item no traia altura propia: la tomaba prestada de su
   imagen "is-1" (la unica en position:relative, las demas -is-2/3/4- son
   absolutas y se limitan a cubrirla). Una foto apaisada colaba una celda
   plana entre las demas, altas. Con aspect-ratio fijo todas miden lo mismo,
   y is-1 pasa a recortarse con object-fit:cover como ya hacen sus hermanas. */
.loader_gallery_item { aspect-ratio: 2 / 3; }
.loader_gallery_image.is-1 {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}


/*=============================================
=   /work — el fondo tapaba los enlaces       =
=============================================*/

/* .work_bg es solo la foto de fondo que cambia al pasar el raton por la
   lista (main.webflow.css:5472): position:fixed, pantalla completa, SIN
   z-index propio. En la pila de apilamiento real queda por ENCIMA del
   enlace de cada fila (.work_item_link, z-index:3 pero en un contexto de
   apilamiento distinto), asi que un clic que no caiga justo sobre el texto
   lo atrapa esta capa decorativa en vez de abrir la ficha: no pasa nada, y
   además deja #page-wrapper con la clase is-leaving puesta (la añade el
   listener de la fila) sin que barba llegue a arrancar ninguna transición
   -- de ahí que pareciera que la página se quedaba colgada. */
.work_bg { pointer-events: none; }
