/* =============================================================
   FUENTE PT SERIF + MENU (desplegable y movil) — REFUERZO — 21-sep-2026
   Por que existe: tras la actualizacion de Astra a 4.13.12 (19-sep)
   ninguna pagina carga ya la hoja de fuentes locales de Astra, asi
   que la web se veia en la fuente de sistema (Times). Ademas, el
   tree-shaking de UCSS/CCSS de LiteSpeed se come las reglas de
   estado del menu (hover sobre SERVICIOS, cajon del menu movil con
   la clase active, flecha de submenu), porque esas clases no existen
   al generar la hoja: el desplegable no se abria y el menu movil
   tampoco. El CSS adicional va en linea en la cabecera y NO pasa
   por el tree-shaking, asi que estas reglas sobreviven siempre.
   Las reglas de menu son copia literal de Astra (main.min.css y su
   CSS dinamico); las fuentes, de astra-local-fonts.css (latin y
   latin-ext). Si algun dia Astra vuelve a cargar su hoja de fuentes,
   la duplicidad no rompe nada.
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios.
   Reversible: borrar este bloque entero.
   ============================================================= */

@font-face{ 
    font-family: 'PT Serif';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(/wp-content/astra-local-fonts/pt-serif/EJRVQgYoZZY2vCFuvAFYzr-tdg.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
 }
@font-face{ 
    font-family: 'PT Serif';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url(/wp-content/astra-local-fonts/pt-serif/EJRVQgYoZZY2vCFuvAFWzr8.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
 }
@font-face{ 
    font-family: 'PT Serif';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url(/wp-content/astra-local-fonts/pt-serif/EJRSQgYoZZY2vCFuvAnt66qcVyvHpA.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
 }
@font-face{ 
    font-family: 'PT Serif';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url(/wp-content/astra-local-fonts/pt-serif/EJRSQgYoZZY2vCFuvAnt66qSVys.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
 }

/* --- Desplegable de escritorio (SERVICIOS) --- */
.main-header-menu .menu-item.focus > .sub-menu, .main-header-menu .menu-item:hover > .sub-menu, .main-header-menu .menu-item > .sub-menu.toggled-on { right: auto; left: 0px; visibility: visible; }
.main-header-menu .menu-item.focus > .sub-menu .sub-menu.toggled-on, .main-header-menu .menu-item:hover > .sub-menu .sub-menu.toggled-on, .main-header-menu .menu-item > .sub-menu.toggled-on .sub-menu.toggled-on { left: 100%; right: auto; visibility: visible; }
.main-header-menu .ast-left-align-sub-menu.focus > .sub-menu, .main-header-menu .ast-left-align-sub-menu:hover > .sub-menu { right: 0px; left: auto; }
.ast-header-break-point .main-header-menu .sub-menu .ast-left-align-sub-menu.focus > .sub-menu, .ast-header-break-point .main-header-menu .sub-menu .ast-left-align-sub-menu:hover > .sub-menu { left: 0px; }
.ast-header-break-point .main-header-menu .ast-sub-menu-goes-outside.focus > .sub-menu, .ast-header-break-point .main-header-menu .ast-sub-menu-goes-outside:hover > .sub-menu { left: 0px; }
@media (min-width: 769px) {
    .main-header-menu .ast-sub-menu-goes-outside.focus > .sub-menu, .main-header-menu .ast-sub-menu-goes-outside:hover > .sub-menu { left: -100%; }
    .main-header-menu .ast-left-align-sub-menu .sub-menu .menu-item.focus > .sub-menu, .main-header-menu .ast-left-align-sub-menu .sub-menu .menu-item:hover > .sub-menu { left: -100%; }
    .main-header-menu .sub-menu .menu-item.focus > .sub-menu, .main-header-menu .sub-menu .menu-item:hover > .sub-menu { left: 100%; right: auto; }
}
@media (min-width: 922px) {
    .main-header-menu .sub-menu .menu-item.ast-left-align-sub-menu:hover > .sub-menu, .main-header-menu .sub-menu .menu-item.ast-left-align-sub-menu.focus > .sub-menu { margin-left: 0px; }
}

/* --- Colores de estado del menu principal --- */
.ast-builder-menu-1 .menu-link:hover, .ast-builder-menu-1 .main-header-menu > .menu-item:hover > .menu-link, .ast-builder-menu-1 .inline-on-mobile .ast-menu-toggle:hover, .ast-builder-menu-1 .inline-on-mobile .main-header-menu > .menu-item:hover > .ast-menu-toggle { color: var(--ast-global-color-1); background: rgba(0, 0, 0, 0); }
.ast-builder-menu-1 .ast-menu-toggle:hover, .ast-builder-menu-1 .main-header-menu > .menu-item:hover > .ast-menu-toggle { color: var(--ast-global-color-1); }
.ast-builder-menu-1 .menu-item.current-menu-item > .menu-link, .ast-builder-menu-1 .inline-on-mobile .menu-item.current-menu-item > .ast-menu-toggle, .ast-builder-menu-1 .current-menu-ancestor > .menu-link { color: var(--ast-global-color-1); background: rgba(255, 205, 87, 0); }
.ast-builder-menu-1 .menu-item.current-menu-item > .ast-menu-toggle { color: var(--ast-global-color-1); }

/* --- Menu movil (cajon off-canvas y submenus) --- */
.ast-button-wrap .menu-toggle.toggled .icon-menu-bars svg:first-child { display: none; }
.ast-button-wrap .menu-toggle.toggled .icon-menu-bars svg:nth-child(2) { display: block; }
.ast-hfb-header .menu-toggle.toggled .ast-mobile-svg { display: none; }
.ast-hfb-header .menu-toggle.toggled .ast-close-svg { display: block; }
.ast-main-header-nav-open .main-header-bar { padding-bottom: 0px; }
.ast-header-break-point .main-header-bar .main-header-bar-navigation .ast-submenu-expanded > .ast-menu-toggle::before { transform: rotateX(180deg); }
.ast-header-break-point .ast-mobile-header-wrap .ast-above-header-wrap .main-header-bar-navigation .ast-submenu-expanded > .ast-menu-toggle::before, .ast-header-break-point .ast-mobile-header-wrap .ast-main-header-wrap .main-header-bar-navigation .ast-submenu-expanded > .ast-menu-toggle::before { transform: rotateX(180deg); }
.ast-mobile-popup-content .ast-submenu-expanded > .ast-menu-toggle { transform: rotateX(180deg); overflow-y: auto; }
.ast-off-canvas-active body.ast-main-header-nav-open { overflow: hidden; }
.ast-mobile-popup-drawer.active { left: 0px; opacity: 1; right: 0px; z-index: 100000; transition: opacity 0.25s ease-out; }
.ast-mobile-popup-drawer.active .ast-mobile-popup-overlay { opacity: 1; cursor: pointer; visibility: visible; }
.ast-mobile-popup-drawer.active .ast-mobile-popup-inner { opacity: 1; visibility: visible; transform: translateX(0%); }
.ast-mobile-popup-drawer.active .ast-mobile-popup-inner { background-color: var(--ast-global-color-1); }
.ast-mobile-popup-drawer.active .menu-toggle-close { color: rgb(58, 58, 58); }
.ast-desktop .ast-mobile-popup-drawer.active .ast-mobile-popup-inner { max-width: 35%; }
@media (max-width: 921px) {
    .ast-mobile-popup-drawer.active .ast-mobile-popup-inner { max-width: 90%; }
}


/* =============================================================
   BLOQUES CORE DE WORDPRESS + REJILLA DE SERVICIOS DE LA PORTADA
   — REFUERZO — 21-sep-2026
   Por que existe: las hojas UCSS regeneradas el 19-20 sep (tras
   la actualizacion de Astra) han salido sin las reglas basicas de
   varios bloques core: columnas (el pie se apelotonaba a la
   izquierda), navegacion (los avisos legales del pie salian como
   lista con vinetas), iconos sociales, botones, detalles, imagen,
   separador... y sin el CSS propio de la rejilla de tarjetas de
   servicios de la portada (qe-services-grid, que vive dentro del
   contenido de la pagina 94 y LiteSpeed lo absorbe y lo pierde).
   Las reglas core son copia de wp-includes/css/dist/block-library
   y de los estilos globales de WordPress, envueltas en :where()
   para que tengan especificidad CERO: solo rellenan lo que falta y
   nunca pisan al tema, a los estilos en linea de cada bloque ni a
   las reglas wp-container de cada pagina. La rejilla
   qe-services-grid es copia literal del bloque de estilo de la
   pagina 94 (si se cambia alli, cambiarla tambien aqui).
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios.
   Reversible: borrar este bloque entero.
   ============================================================= */

/* --- Maquetacion global de bloques (estilos globales de WP) --- */
:where(:root .is-layout-flow) > :first-child { margin-block-start: 0px; }
:where(:root .is-layout-flow) > :last-child { margin-block-end: 0px; }
:where(:root .is-layout-flow > *) { margin-block: 24px 0px; }
:where(:root .is-layout-constrained) > :first-child { margin-block-start: 0px; }
:where(:root .is-layout-constrained) > :last-child { margin-block-end: 0px; }
:where(:root .is-layout-constrained > *) { margin-block: 24px 0px; }
:where(:root .is-layout-flex) { gap: 24px; }
:where(:root .is-layout-grid) { gap: 24px; }
:where(.is-layout-flow > .alignleft), :where(.is-layout-constrained > .alignleft) { float: left; margin-inline: 0px 2em; }
:where(.is-layout-flow > .alignright), :where(.is-layout-constrained > .alignright) { float: right; margin-inline: 2em 0px; }
:where(.is-layout-flow > .aligncenter), :where(.is-layout-constrained > .aligncenter) { margin-left: auto !important; margin-right: auto !important; }
:where(.is-layout-constrained > :not(.alignleft):not(.alignright):not(.alignfull)) { max-width: var(--wp--style--global--content-size); margin-left: auto !important; margin-right: auto !important; }
:where(.is-layout-constrained > .alignwide) { max-width: var(--wp--style--global--wide-size); }
:where(body .is-layout-flex) { display: flex; }
:where(.is-layout-flex) { flex-wrap: wrap; align-items: center; }
:where(.is-layout-flex > *) { margin: 0px; }
:where(body .is-layout-grid) { display: grid; }
:where(.is-layout-grid > *) { margin: 0px; }

/* --- Contenedores del pie (post 219): columnas, iconos, avisos legales --- */
.wp-container-core-columns-is-layout-7387b849 { flex-wrap: nowrap; }
.wp-container-core-social-links-is-layout-8336e76f { justify-content: center; }
.wp-container-core-group-is-layout-aa2cc4cc > :where(:not(.alignleft):not(.alignright):not(.alignfull)) { max-width: 700px; margin-left: auto !important; margin-right: auto !important; }
.wp-container-core-group-is-layout-aa2cc4cc > .alignwide { max-width: 700px; }
.wp-container-core-group-is-layout-aa2cc4cc .alignfull { max-width: none; }
.wp-container-core-navigation-is-layout-cbcdc57d { justify-content: center; }

/* --- Columnas --- */
:where(.wp-block-columns) { box-sizing: border-box; display: flex; flex-wrap: wrap !important; align-items: normal !important; margin-bottom: 1.75em; }
@media (min-width: 782px) { :where(.wp-block-columns) { flex-wrap: nowrap !important; } }
@media (max-width: 781px) { :where(.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column) { flex-basis: 100% !important; } }
@media (min-width: 782px) { :where(.wp-block-columns:not(.is-not-stacked-on-mobile) > .wp-block-column) { flex-basis: 0px; flex-grow: 1; } }
:where(.wp-block-columns.has-background) { padding: 1.25em 2.375em; }
:where(.wp-block-column) { flex-grow: 1; min-width: 0px; overflow-wrap: break-word; word-break: break-word; }
:where(.wp-block-column.is-vertically-aligned-center) { align-self: center; }
:where(.wp-block-column.is-vertically-aligned-stretch) { align-self: stretch; }
:where(.wp-block-column.is-vertically-aligned-bottom), :where(.wp-block-column.is-vertically-aligned-center), :where(.wp-block-column.is-vertically-aligned-top) { width: 100%; }

/* --- Botones --- */
:where(.wp-block-button__link) { border-radius: 9999px; box-shadow: none; padding: calc(0.667em + 2px) calc(1.333em + 2px); text-decoration: none; }
:where(.wp-block-buttons > .wp-block-button.has-custom-font-size .wp-block-button__link) { font-size: inherit; }
:where(.wp-block-button .wp-block-button__link.is-style-outline), :where(.wp-block-button.is-style-outline > .wp-block-button__link) { border: 2px solid; padding: 0.667em 1.333em; }
:where(.wp-block-buttons > .wp-block-button) { display: inline-block; margin: 0px; }
:where(.wp-block-buttons.is-content-justification-center) { justify-content: center; }

/* --- Grupo, detalles, imagen, separador, espaciador --- */
:where(.wp-block-group) { box-sizing: border-box; }
:where(.wp-block-group.wp-block-group-is-layout-constrained) { position: relative; }
:where(.wp-block-details) { box-sizing: border-box; }
:where(.wp-block-details summary) { cursor: pointer; }
:where(.wp-block-image img) { box-sizing: border-box; height: auto; max-width: 100%; vertical-align: bottom; }
:where(.wp-block-image.aligncenter) { text-align: center; }
:where(.wp-block-image .aligncenter), :where(.wp-block-image .alignleft), :where(.wp-block-image .alignright), :where(.wp-block-image.aligncenter), :where(.wp-block-image.alignleft), :where(.wp-block-image.alignright) { display: table; }
:where(.wp-block-image figcaption) { margin-bottom: 1em; margin-top: 0.5em; }
:where(.wp-block-list.has-background) { padding: 1.25em 2.375em; }
:where(.wp-block-spacer) { clear: both; }

/* --- Navegacion (avisos legales del pie) --- */
:where(.wp-block-navigation ul) { margin-bottom: 0px; margin-left: 0px; margin-top: 0px; padding-left: 0px; }
:where(.wp-block-navigation ul), :where(.wp-block-navigation ul li) { list-style: none; }
:where(.wp-block-navigation ul li) { padding: 0px; }
:where(.wp-block-navigation .wp-block-navigation-item) { align-items: center; display: flex; position: relative; background-color: inherit; }
:where(.wp-block-navigation .wp-block-navigation-item__content) { display: block; z-index: 1; }
:where(.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content) { color: inherit; }
:where(.wp-block-navigation a), :where(.wp-block-navigation a:active), :where(.wp-block-navigation a:focus) { text-decoration: none; }
:where(.wp-block-navigation .wp-block-navigation-item__label) { overflow-wrap: break-word; }
:where(.wp-block-navigation.items-justified-center) { --navigation-layout-justification-setting: center; --navigation-layout-justify: center; }
:where(.wp-block-navigation .wp-block-page-list), :where(.wp-block-navigation__container), :where(.wp-block-navigation__responsive-close), :where(.wp-block-navigation__responsive-container), :where(.wp-block-navigation__responsive-container-content), :where(.wp-block-navigation__responsive-dialog) { gap: inherit; }
:where(.wp-block-navigation__container) { align-items: var(--navigation-layout-align, initial); display: flex; flex-direction: var(--navigation-layout-direction, initial); flex-wrap: var(--navigation-layout-wrap, wrap); justify-content: var(--navigation-layout-justify, initial); list-style: none; margin: 0px; padding-left: 0px; }
:where(.wp-block-navigation__container:only-child), :where(.wp-block-page-list:only-child) { flex-grow: 1; }
:where(.wp-block-navigation__responsive-container .wp-block-navigation-item a) { color: inherit; }
:where(.wp-block-navigation__responsive-container .wp-block-navigation__responsive-container-content) { align-items: var(--navigation-layout-align, initial); display: flex; flex-direction: var(--navigation-layout-direction, initial); flex-wrap: var(--navigation-layout-wrap, wrap); justify-content: var(--navigation-layout-justify, initial); }
:where(.wp-block-navigation__responsive-container:not(.is-menu-open.is-menu-open)) { background-color: inherit !important; color: inherit !important; }
:where(.wp-block-navigation__responsive-close) { width: 100%; }
:where(.wp-block-navigation__responsive-close:focus) { outline: none; }
:where(.wp-block-navigation__responsive-dialog) { position: relative; }

/* --- Iconos sociales del pie --- */
:where(.wp-block-social-links) { background: none; box-sizing: border-box; margin-left: 0px; padding-left: 0px; padding-right: 0px; text-indent: 0px; font-size: 24px; }
:where(.wp-block-social-links .wp-social-link a), :where(.wp-block-social-links .wp-social-link a:hover) { border-bottom: 0px; box-shadow: none; text-decoration: none; }
:where(.wp-block-social-links .wp-social-link svg) { height: 1em; width: 1em; }
:where(.wp-block-social-links .wp-social-link span:not(.screen-reader-text)) { font-size: 0.65em; margin-left: 0.5em; margin-right: 0.5em; }
:where(.wp-block-social-link) { border-radius: 9999px; display: block; height: auto; }
@media not (prefers-reduced-motion) { :where(.wp-block-social-link) { transition: transform 0.1s; } }
:where(.wp-block-social-link a) { align-items: center; display: flex; line-height: 0; }
:where(.wp-block-social-link:hover) { transform: scale(1.1); }
:where(.wp-block-social-links .wp-block-social-link.wp-social-link) { display: inline-block; margin: 0px; padding: 0px; }
:where(.wp-block-social-links.is-style-logos-only .wp-social-link) { background: none; }
:where(.wp-block-social-links.is-style-logos-only .wp-social-link svg) { height: 1.25em; width: 1.25em; }
:where(.wp-block-social-links.is-style-logos-only .wp-social-link a) { padding: 0px; }
/* El icono toma el color elegido en el bloque (crema), no el azul
   de los enlaces, que lo hacia invisible sobre el fondo azul. */
.wp-block-social-links .wp-social-link .wp-block-social-link-anchor { color: inherit; }
.wp-block-social-links .wp-social-link .wp-block-social-link-anchor svg { fill: currentColor; }

/* --- Colores de fondo de la paleta de WordPress (velo de portadas) --- */
.has-black-background-color { background-color: var(--wp--preset--color--black, #000); }

/* --- Rejilla de tarjetas de servicios de la portada (pagina 94) --- */
.qe-services-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; max-width: 1100px; margin: 0 auto 80px auto; }
.qe-service-square { position: relative; display: flex; flex-direction: column; aspect-ratio: 1; border-radius: 18px; overflow: hidden; text-decoration: none; box-shadow: 0 4px 18px rgba(18,19,5,0.12); transition: transform 200ms ease, box-shadow 200ms ease; }
.qe-service-square:hover { transform: translateY(-4px); box-shadow: 0 10px 28px rgba(18,19,5,0.18); }
.qe-service-square .qe-card-img { flex: 1 1 55%; background-size: cover; background-position: center; }
.qe-service-square .qe-card-text { flex: 1 1 45%; background-color: #1a7fa0; display: flex; flex-direction: column; justify-content: center; padding: 20px 22px; }
.qe-service-square h3 { color: #ffffff !important; font-size: 20px; margin: 0 0 12px 0; font-weight: 600; line-height: 1.3; }
.qe-service-square p { color: #ffffff; font-size: 14px; margin: 0 0 20px 0; line-height: 1.5; opacity: 0.95; }
.qe-service-square .qe-card-btn { display: inline-block; background: #ffffff; color: #1a7fa0; padding: 8px 18px; border-radius: 30px; font-size: 13px; font-weight: 600; width: fit-content; text-decoration: none; }
.qe-services-grid .qe-service-square a.qe-card-btn { display: inline-block !important; color: #1a7fa0 !important; text-decoration: none !important; }
.qe-service-square .qe-card-btn::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.qe-service-square .qe-card-btn:focus-visible { outline: 2px solid #ffffff; outline-offset: 3px; }
.qe-service-square:focus-within { box-shadow: 0 10px 28px rgba(18,19,5,0.18); }
@media (max-width: 1023px) {
    .qe-services-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
    .qe-services-grid { grid-template-columns: 1fr; gap: 18px; }
    .qe-service-square { aspect-ratio: auto; min-height: 340px; }
}


/* =============================================================
   CORE DEL BLOQUE PORTADA (wp-block-cover) — REFUERZO — 14-sep-2026
   Por qué existe: el tree-shaking de UCSS (QUIC.cloud) se come de
   vez en cuando las reglas estructurales de core/cover en la hoja
   de una URL suelta. Ocurrió en /masajes-en-granada/ el 07-sep, el
   11-sep y el 14-sep. Sin ellas la imagen de fondo se pinta a
   tamaño natural, el overlay desaparece, el título se queda blanco
   sobre crema y los textos centrados se alinean a la izquierda.
   El CSS adicional se sirve en linea en la cabecera y NO pasa por
   el tree-shaking, asi que estas reglas sobreviven siempre.
   Son las reglas por defecto de WordPress core, sin cambios.
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios — LiteSpeed las interpreta al optimizar.
   Reversible: borrar este bloque entero.
   ============================================================= */

.wp-block-cover {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    overflow: hidden;
    background-position: 50%;
    min-height: 430px;
    padding: 1em;
}

.wp-block-cover .wp-block-cover__background,
.wp-block-cover .wp-block-cover__gradient-background {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1;
}

.wp-block-cover img.wp-block-cover__image-background,
.wp-block-cover video.wp-block-cover__video-background {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    margin: 0;
    padding: 0;
    border: none;
    box-shadow: none;
    outline: none;
    object-fit: cover;
}

.wp-block-cover .wp-block-cover__inner-container {
    position: relative;
    z-index: 1;
    width: 100%;
    color: inherit;
}

.wp-block-cover.is-light {
    color: #000;
}

.wp-block-cover .has-background-dim:not([class*="-background-color"]) {
    background-color: #000;
}

.wp-block-cover .has-background-dim {
    opacity: 0.5;
}

.wp-block-cover .has-background-dim.has-background-dim-0 { opacity: 0; }
.wp-block-cover .has-background-dim.has-background-dim-10 { opacity: 0.1; }
.wp-block-cover .has-background-dim.has-background-dim-20 { opacity: 0.2; }
.wp-block-cover .has-background-dim.has-background-dim-30 { opacity: 0.3; }
.wp-block-cover .has-background-dim.has-background-dim-40 { opacity: 0.4; }
.wp-block-cover .has-background-dim.has-background-dim-50 { opacity: 0.5; }
.wp-block-cover .has-background-dim.has-background-dim-60 { opacity: 0.6; }
.wp-block-cover .has-background-dim.has-background-dim-70 { opacity: 0.7; }
.wp-block-cover .has-background-dim.has-background-dim-80 { opacity: 0.8; }
.wp-block-cover .has-background-dim.has-background-dim-90 { opacity: 0.9; }
.wp-block-cover .has-background-dim.has-background-dim-100 { opacity: 1; }

.has-text-align-center { text-align: center; }
.has-text-align-left { text-align: left; }
.has-text-align-right { text-align: right; }


/* ============================================
   CSS CUSTOM — QUIROESENCIA
   Limpieza estructural · sin cambios visuales
   ============================================ */


/* === TESTIMONIOS === */
.strong-view.wpmtst-bold .wpmtst-testimonial-content {
    background: inherit;
    font-size: 1em !important;
    line-height: 1.5 !important;
    padding: 0;
}


/* === BOTÓN ACCESO EN EL MENÚ === */
.ast-header-button-2[data-section*="section-hb-button-"] .ast-builder-button-wrap .ast-custom-button::before {
    content: "";
    display: inline-block;
    width: 15px;
    height: 15px;
    margin-right: 10px;
    background-image: url('/wp-content/uploads/2024/12/bloqueo-de-usuario.svg');
    background-size: contain;
    background-repeat: no-repeat;
    vertical-align: middle;
    filter: invert(0.1);
}

.ast-header-button-2[data-section*="section-hb-button-"] .ast-builder-button-wrap .ast-custom-button:hover::before {
    filter: invert(0.95);
}


/* === BOTÓN RESERVAR CITA EN EL MENÚ === */
.ast-header-button-1[data-section*="section-hb-button-"] .ast-builder-button-wrap .ast-custom-button {
    min-height: 45px;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 30px;
    box-sizing: border-box;
}


/* === ESTRELLAS OPINIONES === */
.wp-block-create-block-rating {
    display: flex;
    justify-content: center;
}


/* === BOTÓN RESERVAR FIJO EN MÓVIL === */
.astra-advanced-hook-274.ast-hide-display-device-desktop.ast-hide-display-device-tablet {
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    z-index: 9999;
}


/* === ICONO SUBMENÚ MÓVIL === */
.ast-header-break-point .main-navigation ul .sub-menu .menu-item:not(.menu-item-has-children) .menu-link .icon-arrow:first-of-type {
    display: none;
}


/* === BOTÓN WHATSAPP === */
.joinchat__button {
    bottom: 60px !important;
}


/* === PIE DE PÁGINA: barra de avisos legales y derechos === */
/* 17-ago-2026: el bloque de navegación (Aviso Legal, Condiciones de
   Uso, etc.) y el texto "Todos los derechos reservados" tenían el
   texto exactamente del mismo color que su propio fondo oscuro
   (var(--ast-global-color-2) = #121305 para ambos) — invisibles.
   Se pasa el fondo a azul de marca y el texto a blanco. */
.wp-block-group[style*="var(--ast-global-color-2)"] {
    background-color: #1a7fa0 !important;
}

.wp-block-group[style*="var(--ast-global-color-2)"],
.wp-block-group[style*="var(--ast-global-color-2)"] a,
nav.wp-block-navigation .wp-block-navigation-item__label,
nav.wp-block-navigation a {
    color: #ffffff !important;
}


/* === FILTRO BLOG === */
/* 23-may-2026: selectores sin prefijo li (el HTML real emite el
   elemento a), y se cubren las 3 clases de estado activo que usa
   Astra segun version. */
.ast-post-filter-single.active,
.ast-post-filter-single.current,
.ast-post-filter-single.ast-post-filter-active {
    color: #F0ECDB;
    background: black;
}

.ast-post-filter-single {
    border: solid;
    border-width: 1px;
}

.ast-post-filter-single:hover {
    background-color: #249FCB;
    color: #F0ECDB;
}


/* === PÁGINA DE BLOG === */

/* Background post */
.ast-post-format-.blog-layout-4.ast-article-inner.ast-no-date-box {
    background-color: white;
}

/* Alineación post */
/* 13-ago-2026: height -> min-height. Los titulos de 3 lineas y los
   extractos largos desbordaban la caja y el boton "Sigue Leyendo"
   se superponia al texto. Revertir = volver a height. */
h2.entry-title.ast-blog-single-element {
    min-height: 70px;
    text-align: center;
}

.ast-excerpt-container.ast-blog-single-element {
    text-align: center;
    min-height: 100px;
}

p.ast-blog-single-element.ast-read-more-container.read-more {
    display: flex;
    justify-content: center;
    margin-bottom: 30px;
}

.entry-meta {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}


/* === NAVEGACIÓN ENTRADAS === */
.single .post-navigation a .ast-post-nav {
    color: #259FCC;
}

.nav-previous {
    border: solid;
    padding: 10px;
    background: #80808024;
    margin-right: 20px;
}

.nav-next {
    border: solid;
    padding: 10px;
    background: #80808024;
    margin-left: 20px;
}


/* === RECUADRO FLECHA DESPLEGABLE MENÚ MÓVIL === */
.ast-builder-menu-mobile .main-navigation .menu-item.menu-item-has-children > .ast-menu-toggle {
    top: 0;
    height: -webkit-fill-available;
    color: white;
    border: solid;
    border-color: #249FCB;
    padding-left: 5px;
    background: black;
}

svg.ast-arrow-svg {
    color: white;
    background: black;
}

span.ast-icon.icon-arrow {
    color: white !important;
}


/* ============================================
   FIX MÓVIL — UX + LCP + CLS — 20-may-2026
   Reversible: borrar este bloque entero (hasta EOF)
   Objetivos:
   - Hero más corto en móvil (650px -> 450px)
   - H1 hero escalado (60px -> 32px)
   - WhatsApp con safe-area iOS
   - Body con padding inferior para no tapar contenido
   Nota 17-ago-2026: las reglas del mosaico de servicios en columnas
   (wp:columns con fondo #249FCB) se quitaron de aquí — la home (94)
   ahora usa un grid de tarjetas cuadradas (.qe-services-grid) que
   ya trae su propio CSS responsive incluido en el contenido.
   ============================================ */

@media (max-width: 921px) {

    /* Hero cover: reducir altura forzada del block editor */
    .home .wp-block-cover.alignfull,
    .page-id-94 .wp-block-cover.alignfull {
        min-height: 450px !important;
    }

    /* H1 del hero: tamaño legible en móvil */
    .home .wp-block-cover h1.wp-block-heading,
    .page-id-94 .wp-block-cover h1.wp-block-heading {
        font-size: 32px !important;
        line-height: 1.2 !important;
    }

    /* Subtítulo del hero */
    .home .wp-block-cover .wp-block-cover__inner-container > p,
    .page-id-94 .wp-block-cover .wp-block-cover__inner-container > p {
        font-size: 16px !important;
    }

    /* WhatsApp por encima del sticky CTA + safe-area iOS */
    .joinchat__button {
        bottom: calc(70px + env(safe-area-inset-bottom, 0px)) !important;
    }

    /* Sticky CTA: respeta safe-area iOS */
    .astra-advanced-hook-274.ast-hide-display-device-desktop.ast-hide-display-device-tablet {
        padding-bottom: env(safe-area-inset-bottom, 0px);
    }

    /* Body: padding inferior para no tapar el último contenido con sticky */
    body.ast-header-break-point {
        padding-bottom: 60px;
    }
}


/* === MÓVIL PEQUEÑO (≤480px): ajustes adicionales === */
@media (max-width: 480px) {

    /* Hero aún más compacto en móvil pequeño */
    .home .wp-block-cover.alignfull,
    .page-id-94 .wp-block-cover.alignfull {
        min-height: 400px !important;
    }

    /* H1 hero móvil pequeño */
    .home .wp-block-cover h1.wp-block-heading,
    .page-id-94 .wp-block-cover h1.wp-block-heading {
        font-size: 28px !important;
    }
}


/* ============================================
   A11Y FAQ wp:details — 20-may-2026
   Reversible: borrar este bloque entero
   Objetivo: target táctil 44px, focus visible,
   cursor, aria implícito, mejor UX en móvil.
   Aplica a páginas con bloques wp:details (Yoga 455, Tarjetas 7600, etc).
   ============================================ */

/* Summary: target táctil mínimo + cursor + outline removido del nativo feo */
.wp-block-details > summary {
    cursor: pointer;
    min-height: 44px;
    display: flex;
    align-items: center;
    padding: 8px 30px 8px 0;
    position: relative;
    user-select: none;
    -webkit-tap-highlight-color: rgba(36, 159, 203, 0.1);
}

/* Focus visible para keyboard navigation (WCAG 2.4.7) */
.wp-block-details > summary:focus-visible {
    outline: 2px solid #249FCB;
    outline-offset: 2px;
    border-radius: 4px;
}

/* Hover sutil */
.wp-block-details > summary:hover {
    color: #249FCB;
    transition: color 150ms ease;
}

/* Ocultar marker nativo y poner uno custom (mejor a11y, look consistente) */
.wp-block-details > summary::-webkit-details-marker {
    display: none;
}

.wp-block-details > summary::marker {
    content: "";
}

/* Indicador visual + a la derecha, gira a × cuando está abierto */
.wp-block-details > summary::after {
    content: "+";
    position: absolute;
    right: 4px;
    top: 50%;
    transform: translateY(-50%);
    font-size: 24px;
    font-weight: 400;
    color: #249FCB;
    line-height: 1;
    transition: transform 200ms ease;
}

.wp-block-details[open] > summary::after {
    content: "×";
    transform: translateY(-50%) rotate(0deg);
}

/* Contraste mejorado del borde en hover/open */
.wp-block-details[open] {
    border-color: #249FCB !important;
}

/* Móvil: spacing más amplio para dedo */
@media (max-width: 921px) {
    .wp-block-details > summary {
        min-height: 48px;
        padding: 10px 36px 10px 0;
        font-size: 16px;
    }

    .wp-block-details > summary::after {
        right: 8px;
        font-size: 28px;
    }
}


/* =============================================================
   ░░ RESPONSIVE FIXES — PÁGINAS PILAR (7208, 455, 424, 523) ░░
   Añadido: 23-may-2026 · Reversible: borrar hasta EOF
   La home (94) NO se toca aquí: ya tiene su fix móvil arriba.
   Verificar hashes en DevTools si una rejilla no responde.
   ============================================================= */

/* --- A1. Breakpoint intermedio de tablet (768–1023 px) ---------
   Fuerza 2 columnas en rejillas de 3+ comprimidas. */
@media (min-width: 768px) and (max-width: 1023px) {
    .wp-container-core-columns-is-layout-66d729bb,
    .wp-container-core-columns-is-layout-ef44bf70,
    .wp-container-core-columns-is-layout-47182154,
    .wp-container-core-columns-is-layout-d090353b {
        flex-wrap: wrap !important;
    }
    .wp-container-core-columns-is-layout-66d729bb > .wp-block-column,
    .wp-container-core-columns-is-layout-ef44bf70 > .wp-block-column,
    .wp-container-core-columns-is-layout-47182154 > .wp-block-column,
    .wp-container-core-columns-is-layout-d090353b > .wp-block-column {
        flex-basis: calc(50% - 10px) !important;
        flex-grow: 0 !important;
    }
}

/* --- A2. Igualar altura de las tarjetas pilar ------------------ */
@media (min-width: 768px) {
    .wp-container-core-columns-is-layout-66d729bb > .wp-block-column,
    .wp-container-core-columns-is-layout-ef44bf70 > .wp-block-column {
        display: flex !important;
        flex-direction: column !important;
    }
}

/* --- A3. Catálogo de masajes: gap en tablet ------------------- */
@media (min-width: 768px) and (max-width: 1023px) {
    .wp-container-core-columns-is-layout-d090353b {
        gap: 16px !important;
    }
}

/* --- B1. Bloques imagen+texto centrados en móvil -------------- */
@media (max-width: 767px) {
    .wp-container-core-columns-is-layout-a8b87939,
    .wp-container-core-columns-is-layout-308427dd {
        text-align: center !important;
    }
    .wp-container-core-columns-is-layout-a8b87939 .wp-block-image img,
    .wp-container-core-columns-is-layout-308427dd .wp-block-image img {
        max-height: 480px !important;
        width: auto !important;
        margin: 0 auto !important;
    }
}

/* --- C1. Padding de tarjetas de tarifa en tablet/móvil -------- */
@media (max-width: 1023px) {
    .wp-container-core-columns-is-layout-47182154 > .wp-block-column {
        padding: 20px !important;
    }
}

/* --- D1. Altura del hero en móvil (acotado por page-id) ------- */
@media (max-width: 599px) {
    .page-id-7208 .entry-content > .wp-block-cover:first-of-type,
    .page-id-455 .entry-content > .wp-block-cover:first-of-type,
    .page-id-424 .entry-content > .wp-block-cover:first-of-type,
    .page-id-523 .entry-content > .wp-block-cover:first-of-type,
    .page-id-7208 .entry-content > .wp-block-group:first-of-type,
    .page-id-455 .entry-content > .wp-block-group:first-of-type,
    .page-id-424 .entry-content > .wp-block-group:first-of-type,
    .page-id-523 .entry-content > .wp-block-group:first-of-type {
        min-height: 60vh !important;
    }
    .page-id-7208 .wp-block-cover__inner-container,
    .page-id-455 .wp-block-cover__inner-container,
    .page-id-424 .wp-block-cover__inner-container,
    .page-id-523 .wp-block-cover__inner-container {
        padding: 20px !important;
    }
}

/* --- D2. Equipo About (523) — 4 col → 2x2 en móvil ----------- */
@media (max-width: 767px) {
    .wp-container-core-columns-is-layout-3c535c27 {
        flex-wrap: wrap !important;
    }
    .wp-container-core-columns-is-layout-3c535c27 > .wp-block-column {
        flex-basis: calc(50% - 5px) !important;
        flex-grow: 0 !important;
    }
}


/* =============================================================
   A11Y MENÚ MÓVIL — áreas táctiles ≥48×48 — 20-jun-2026
   PSI: "Áreas táctiles insuficientes" en los toggles del menú.
   Reversible: borrar este bloque entero.
   ============================================================= */
@media (max-width: 921px) {

    /* Enlaces del menú móvil: alto táctil mínimo */
    .ast-header-break-point .main-navigation .menu-link,
    .ast-mobile-popup-drawer .main-navigation .menu-link {
        min-height: 48px;
        display: flex;
        align-items: center;
    }

    /* Botón flecha de submenú: área de toque 48×48 */
    .ast-builder-menu-mobile .main-navigation .menu-item.menu-item-has-children > .ast-menu-toggle,
    .ast-header-navigation-arrow,
    .dropdown-menu-toggle {
        min-width: 48px;
        min-height: 48px;
        display: flex;
        align-items: center;
        justify-content: center;
    }
}


/* =============================================================
   A11Y CONTRASTE — azul de marca AA — 20-jun-2026
   PSI: azul #249FCB vs blanco ≈ 3:1 (< 4.5:1 WCAG AA).
   (a) Fondos azules inline (tarjetas, "Por qué elegirnos", CTA hero):
       fondo #249FCB → #1a7fa0 (≈ 4.58:1 con texto blanco).
   (b) Botones de texto azul sobre fondo blanco ("Ver detalles…"):
       se oscurece el TEXTO a #1a7fa0; el fondo sigue blanco.
   No afecta a #259FCC.
   Reversible: borrar este bloque entero.
   ============================================================= */

/* (a) Fondos azules inline */
[style*="background-color:#249FCB"],
[style*="background-color: #249FCB"],
[style*="background-color:#249fcb"] {
    background-color: #1a7fa0 !important;
}

/* (b) Texto azul sobre botón blanco. Se exige fondo blanco para no
   capturar los botones de fondo azul (cuyo "background-color:#249FCB"
   contiene el substring "color:#249FCB"). */
.wp-block-button__link[style*="background-color:#ffffff"][style*="color:#249FCB"],
.wp-block-button__link[style*="background-color:#ffffff"][style*="color: #249FCB"],
.wp-block-button__link[style*="background-color:#fff;"][style*="color:#249FCB"] {
    color: #1a7fa0 !important;
}


/* =============================================================
   A11Y CONTRASTE 2 — encabezados y enlaces de texto — 01-jul-2026
   PSI escritorio (Lighthouse 13.4): h2 y enlaces de contenido
   heredan el azul global #249FCB sobre el fondo crema #F0ECDB
   del body = 2.57:1. Los h2 (48px bold) necesitan ≥3:1 y los
   enlaces de texto (15-18px) necesitan ≥4.5:1 → fallan TODOS
   los que no llevan color propio, no solo los 2 que muestra PSI.
   Fix: #17718F (mismo tono, más profundo) = 4.67:1 sobre crema
   y 5.53:1 sobre blanco → AA en ambos umbrales.
   Solo afecta a elementos SIN color explícito (.has-text-color
   e inline quedan fuera). Botones intactos.
   Reversible: borrar este bloque entero.
   ============================================================= */

/* Encabezados de contenido que heredan el azul global */
.entry-content h1:not(.has-text-color),
.entry-content h2:not(.has-text-color),
.entry-content h3:not(.has-text-color),
.entry-content h4:not(.has-text-color),
.entry-content h5:not(.has-text-color),
.entry-content h6:not(.has-text-color) {
    color: #17718F;
}

/* Enlaces de texto en contenido (no botones) */
.entry-content a:not(.wp-block-button__link):not(.wp-element-button):not(.has-text-color) {
    color: #17718F;
}

.entry-content a:not(.wp-block-button__link):not(.wp-element-button):not(.has-text-color):hover,
.entry-content a:not(.wp-block-button__link):not(.wp-element-button):not(.has-text-color):focus-visible {
    color: #121305;
}


/* =============================================================
   FIN — CSS COMPLETO QUIROESENCIA
   ============================================================= */


/* =============================================================
   TARIFAS 2999 — RESPONSIVE MÓVIL (tarjetas qe-tarifa-card)
   Añadido: 28-jul-2026 · Reversible: borrar este bloque
   Objetivo: en móvil (≤767px) las rejillas de tarifas que usan
   2 columnas fijas se apilan en 1 columna centrada (evita el
   desbordamiento lateral de las tarjetas en el móvil).
   ============================================ */
@media (max-width: 767px) {
    div:has(> .qe-tarifa-card) {
        grid-template-columns: 1fr !important;
        max-width: 360px !important;
        padding-left: 16px !important;
        padding-right: 16px !important;
    }
}


/* =============================================================
   BLOQUES STACKABLE HUÉRFANOS — logotipo del gato — 25-ago-2026
   El plugin Stackable ya NO está instalado, pero varias páginas
   siguen guardando sus bloques (clases stk-*). Sin el CSS del
   plugin, .stk-img-wrapper es un elemento span en linea, así que
   el "width:20%" que el propio bloque trae en su hoja incrustada
   no llegaba a aplicarse y el gato de /contacto/ se pintaba a
   tamaño natural (469x718 px), invadiendo media página.
   Aquí se reponen solo las 3 reglas estructurales que faltaban.
   Afecta únicamente a bloques stackable/image (hoy: Contacto).
   Solución de raíz alternativa: reinstalar Stackable.
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios — LiteSpeed las interpreta al optimizar
   el CSS y rompe el HTML de la web (incidencia 05-sep-2026).
   Reversible: borrar este bloque entero.
   ============================================================= */

.stk-block-image figure {
    margin: 0;
    text-align: center;
}

.stk-block-image .stk-img-wrapper {
    display: inline-block;
    max-width: 100%;
    vertical-align: top;
}

.stk-block-image .stk-img-wrapper img.stk-img {
    display: block;
    width: 100%;
    height: auto;
}

/* Móvil: el 20% guardado en el bloque deja el logo en ~60px.
   Se sube a 40% con un mínimo de 110px. La especificidad de 3
   clases gana al ".stk-b6738d1 .stk-img-wrapper" (2 clases) que
   viene en la hoja incrustada en el contenido de la página. */
@media (max-width: 767px) {
    .entry-content .stk-block-image .stk-img-wrapper {
        width: 40% !important;
        min-width: 110px;
    }
}


/* =============================================================
   SELECTOR DE IDIOMA (TranslatePress) — lista desplegable — 16-sep-2026
   La bandera flotante no abria la lista de idiomas: el JS del
   plugin pone la clase is-open, pero la regla que despliega la
   lista (max-height) desaparece en el UCSS/CCSS de LiteSpeed
   porque esa clase no existe al cargar la pagina. Resultado: no
   se podia pasar a la version en ingles desde la bandera, ni en
   escritorio ni en movil (el snippet 65 usa la misma clase).
   Es la misma regla del plugin, repuesta aqui porque el CSS
   adicional no pasa por el tree-shaking.
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios.
   Reversible: borrar este bloque entero.
   ============================================================= */

.trp-ls-dropdown.is-open .trp-switcher-dropdown-list,
.trp-ls-dropdown[aria-expanded="true"] .trp-switcher-dropdown-list {
    overflow-y: auto;
    max-height: min(350px, 70vh);
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
    scrollbar-color: var(--text) transparent;
}

.trp-ls-dropdown.is-transitioning .trp-switcher-dropdown-list {
    overflow-y: hidden !important;
}


/* =============================================================
   MARGEN LATERAL EN MÓVIL — páginas de ancho completo — 17-sep-2026
   Las páginas con el diseño de Astra "ancho completo / estirado"
   (clase ast-page-builder-template: portada ES y EN, masaje
   relajante, clases de yoga...) no ponen relleno lateral al
   contenedor. Los grupos traen el suyo, pero los títulos,
   párrafos y la rejilla de servicios sueltos llegaban pegados al
   borde de la pantalla en móvil.
   Solo móvil y solo hijos directos del contenido: no toca grupos,
   portadas ni columnas.
   IMPORTANTE: no escribir nunca etiquetas HTML literales dentro
   de estos comentarios.
   Reversible: borrar este bloque entero.
   ============================================================= */

@media (max-width: 921px) {
    .ast-page-builder-template .entry-content > :where(h1, h2, h3, h4, p, ul, ol, .wp-block-buttons, .wp-block-details, .qe-services-grid) {
        padding-left: 20px;
        padding-right: 20px;
        box-sizing: border-box;
    }
}