@charset "UTF-8";

/* *************************************************************************
 * Costaweb21 - Capa de adaptacion del diseno nuevo a JSF / RichFaces
 *
 * Se carga SIEMPRE despues de bootstrap.min.css, iconos.css y myCss.css,
 * y ANTES del application_style.css del tema del portal.
 *
 * El application_style.css de cada tema solo necesita redefinir las
 * variables de marca del bloque :root de aqui abajo.
 * ************************************************************************* */

:root {
    --cw-principal: #008ed5;
    --cw-principal-hover: #0079b5;
    --cw-texto-strong: #091e3d;
    --cw-texto-default: #6a7789;
    --cw-fondo: #f9f9f9;
    --cw-borde: #e7e7e7;
    --cw-destacado: #e94e1b;
    --cw-error: #cc0000;
    --cw-ancho-skin: 1000px;
}

/* Enganche de las variables sobre las clases del diseno --------------------
 *
 * myCss.css lleva los colores de marca a fuego en 16 sitios. Aqui se
 * reescriben todos con variables, para que el application_style.css de un
 * portal pueda cambiar la marca entera tocando solo el bloque :root. Si se
 * deja alguno fuera, ese elemento se queda en el azul de Salou pase lo que
 * pase, que es justo lo que hacia que el mecanismo pareciera funcionar sin
 * hacerlo.
 * ------------------------------------------------------------------------- */

/* Color principal */
.btnPrincipal                    { background-color: var(--cw-principal); }
.bgPrincipal                     { background-color: var(--cw-principal); }
.IconNumber                      { background-color: var(--cw-principal); }
.formIcon                        { background-color: var(--cw-principal); }
.marpoin:before                  { background-color: var(--cw-principal); }

/* Texto */
body                             { color: var(--cw-texto-strong); }
.textoColorStrong                { color: var(--cw-texto-strong); }
.textoColorDefault               { color: var(--cw-texto-default); }

/* myCss escribe "color: color: #091e3d", que es invalido y no llega a
   aplicarse; aqui queda el placeholder con su color de verdad. */
::placeholder                    { color: var(--cw-texto-default); opacity: .75; }
::-webkit-input-placeholder      { color: var(--cw-texto-default); opacity: .75; }

/* Fondos */
.bgGrisBrand                     { background-color: var(--cw-fondo); }
.check                           { background-color: var(--cw-fondo); }
.step                            { background-color: var(--cw-fondo); box-shadow: 0 0 0 8px var(--cw-fondo); }
#accordion a.collapsed > label   { background-color: var(--cw-fondo); }

/* Bordes */
.btnSecundario                   { border-color: var(--cw-borde); }
.IconPag-nav                     { border-color: var(--cw-borde); }

/* Contenedor */
.flotSkin                        { width: var(--cw-ancho-skin); }

a:link, a:visited                { color: var(--cw-principal); }
a:hover                          { color: var(--cw-principal-hover); }

/* Los items del desplegable de idioma van en .textoColorDefault en el diseno,
   pero a:link (0,1,1) le gana a la clase (0,1,0) y salian en azul. Con el
   selector de tipo delante recuperan el gris del diseno. */
a.dropdown-item:link,
a.dropdown-item:visited          { color: var(--cw-texto-default); }
a.dropdown-item:hover,
a.dropdown-item:focus            { color: var(--cw-texto-strong); }


/* *************************************************************************
 * SLOTS DE PUBLICIDAD
 *
 * Mapeo de las 14 posiciones de PosicionBanner al diseno nuevo. El ancho
 * util es 1000px (franjas) y 700px (columna de contenido) / 300px (lateral).
 *
 * Regla general: el banner conserva su tamano nominal mientras quepa y se
 * reduce proporcionalmente cuando no cabe. Como los banners de tipo IMAGEN
 * se pintan con <img width= height=>, basta con max-width/height:auto.
 * ************************************************************************* */

/* El diseno maqueta en flotantes: .flot es float:left + clear:both, y casi
   todo lo lleva. Un bloque nuestro sin clear metido entre esos flotantes no
   se coloca debajo: sus lineas esquivan los floats y caen al final, y la caja
   estira hasta ahi. Al rotulo de "Publicidad" del banner interno le pasaba
   justo eso: 9552px de alto por encima de las 51 tarjetas, comiendose todos
   los clics. De ahi que no funcionara ningun enlace de las noticias. */

.cw-lema,
.cw-fichas,
.cw-seccion,
.cw-ads-franja,
.cw-ads-cabecera,
.cw-ads-interno,
.cw-ads-lateral,
.cw-adsense,
.cw-video,
.cw-banner-rotulo {
    clear: both;
}

.cw-banner {
    text-align: center;
    line-height: 0;
}

.cw-banner img,
.cw-banner object,
.cw-banner embed,
.cw-banner iframe {
    max-width: 100%;
    height: auto;
    border: 0;
}

/* -------------------------------------------------------------------------
 * Que un anuncio no pueda ensanchar la pagina
 *
 * Los anuncios llegan despues, cuando el visitante acepta el consentimiento, y
 * algunos vienen con un ancho fijo mayor que la pantalla: un 728x90 en un movil
 * de 375. Sin estas reglas pasaban dos cosas a la vez:
 *
 *   1. El hueco es un item flex, y los items flex tienen min-width:auto, o sea
 *      que no encogen por debajo del ancho de su contenido. El hueco crecia a
 *      728 y el documento entero pasaba de 375 a 552 de ancho.
 *   2. Los contenedores estan centrados, asi que ese sobrante se repartia por
 *      los dos lados. El de la izquierda se sale de la pantalla y no hay forma
 *      de llegar a el: por eso el contenido aparecia cortado por la izquierda.
 *
 * min-width:0 devuelve la capacidad de encoger, overflow:hidden recorta lo que
 * aun asi no quepa, y "safe center" hace que, si algo se desborda, lo haga
 * hacia la derecha, que si es alcanzable.
 *
 * Los banners propios no se recortan: .cw-banner img ya los escala con
 * max-width:100%. Esto solo afecta a lo que llega con un ancho fijo impuesto.
 * ------------------------------------------------------------------------- */

.cw-ads-franja > *,
.cw-ads-cabecera > *,
.cw-ads-interno > *,
.cw-ads-lateral > *,
.cw-ads-menu > * {
    min-width: 0;
}

.cw-banner {
    max-width: 100%;
    overflow: hidden;
}

.cw-banner > *,
.cw-banner ins {
    max-width: 100%;
}

/* Si el navegador no entiende "safe", ignora la declaracion y se queda con el
   center de arriba, que es el comportamiento de antes. */
.cw-ads-franja,
.cw-ads-cabecera {
    justify-content: safe center;
}

/* Rotulo "Publicidad" sobre los bloques de anuncios */
.cw-banner-rotulo {
    font-size: 65%;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: var(--cw-texto-default);
    opacity: .65;
    line-height: 1;
    margin-bottom: 4px;
}

/* --- Franja superior: SUPERIOR_IZQ 728x90 + SUPERIOR_DCHA 220x90 --------- */
/* --- Franja inferior: INFERIOR_IZQ 728x90 + INFERIOR_DCHA 220x90 --------- */

.cw-ads-franja {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 15px;
    width: 100%;
}

.cw-ads-franja .cw-banner-728x90 { flex: 0 1 728px; }
.cw-ads-franja .cw-banner-220x90 { flex: 0 1 220px; }

/* El 220x90 solo acompana al leaderboard cuando los dos caben de verdad */
@media (max-width: 991px) {
    .cw-ads-franja .cw-banner-220x90 { display: none; }
}

/* --- Franja de cabecera: CABECERA_IZQ 468x60 + CABECERA_DCHA 192x60 ------ */
/* Fuera de la cabecera fija, para no crecer su altura en movil.            */

.cw-ads-cabecera {
    display: none;
}

@media (min-width: 992px) {
    .cw-ads-cabecera {
        display: flex;
        justify-content: center;
        align-items: center;
        gap: 15px;
        width: 100%;
    }
    .cw-ads-cabecera .cw-banner-468x60 { flex: 0 0 468px; }
    .cw-ads-cabecera .cw-banner-192x60 { flex: 0 0 192px; }
}

/* --- BANNER_TIEMPO 40x40: dentro de la cabecera, junto al idioma --------- */

.cw-ads-tiempo {
    width: 40px;
    height: 40px;
    flex: 0 0 40px;
    overflow: hidden;
}

.cw-ads-tiempo img { width: 40px; height: 40px; }

@media (max-width: 596px) {
    .cw-ads-tiempo { display: none; }
}

/* --- BANNER_MENU 728x90: pie del modal de categorias --------------------- */

.cw-ads-menu {
    width: 100%;
    padding: 15px 0 0 0;
    border-top: 1px solid var(--cw-borde);
    margin-top: 15px;
}

/* --- BANNER_INTERNO_HOME 660x90: columna de contenido (700px) ------------ */

.cw-ads-interno {
    width: 100%;
    margin: 15px 0;
}

/* --- LATERAL 1..5: columna derecha de 300px ------------------------------ */

.cw-ads-lateral {
    width: 100%;
    margin-bottom: 15px;
}

.cw-ads-lateral .cw-banner-300x250 { min-height: 0; }

/* En movil la columna lateral pasa debajo; centramos y limitamos a 300 */
@media (max-width: 767px) {
    .cw-ads-lateral { max-width: 300px; margin-left: auto; margin-right: auto; }
}

/* --- INTERSTITIAL 800x600 ------------------------------------------------ */

#interstitial {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(0, 0, 0, .6);
    z-index: 2000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 15px;
}

#interstitial_banner {
    background: #fff;
    border-radius: 6px;
    padding: 10px;
    max-width: 820px;
    width: 100%;
    max-height: 100%;
    overflow: auto;
}

#interstitial_banner img { max-width: 100%; height: auto; }

.cw-interstitial-cerrar {
    display: block;
    text-align: right;
    font-size: 130%;
    line-height: 1;
    margin-bottom: 6px;
    cursor: pointer;
}


/* *************************************************************************
 * FICHAS DE CONTENIDO
 *
 * Rejilla de 6 columnas. tipoFicha decide cuantas ocupa cada ficha, con lo
 * que se conserva el control editorial que ya existe en el backoffice:
 *   PEQUENA -> 2 de 6 (3 por fila)
 *   MEDIANA -> 3 de 6 (2 por fila)
 *   GRANDE  -> 6 de 6 (1 por fila)
 * ************************************************************************* */

.cw-fichas {
    display: grid;
    grid-template-columns: 1fr;
    gap: 15px;
    width: 100%;
    margin: 15px 0;
}

@media (min-width: 576px) {
    .cw-fichas { grid-template-columns: repeat(6, 1fr); }
    .cw-ficha-pequena { grid-column: span 3; }
    .cw-ficha-mediana { grid-column: span 3; }
    .cw-ficha-grande  { grid-column: span 6; }
}

/* Tres por fila para PEQUENA y MEDIANA. En produccion las 51 fichas de la
   portada son MEDIANA, asi que el tipo no se estaba usando para diferenciar;
   GRANDE se reserva como destacado a todo el ancho, que es para lo que sirve. */
@media (min-width: 768px) {
    .cw-ficha-pequena { grid-column: span 2; }
    .cw-ficha-mediana { grid-column: span 2; }
    .cw-ficha-grande  { grid-column: span 6; }
}

/* -------------------------------------------------------------------------
 * LISTADOS: dos columnas y fichas identicas
 *
 * En las paginas de listado (categoria, noticias, agenda y buscador) todos los
 * contenidos vienen marcados como GRANDE desde el backoffice, y GRANDE ocupa
 * las 6 columnas: salian de una en una, de 940px de ancho y 949 de alto cada
 * una. Aqui se ignora el tipo y se fuerzan dos por fila.
 *
 * El tipo se sigue respetando en la portada, que es donde tiene sentido que el
 * editor decida el tamano de cada pieza.
 *
 * La especificidad manda sobre el orden: (0,2,0) le gana a .cw-ficha-grande,
 * que es (0,1,0), asi que da igual donde este escrito el bloque.
 * ------------------------------------------------------------------------- */

@media (min-width: 576px) {
    .cw-fichas-listado > .cw-ficha-item { grid-column: span 3; }
}

/* GRANDE pinta el titular a 110% y con recorte a 2 lineas, que es lo que le
   toca cuando es una pieza destacada a todo el ancho. En un listado de fichas
   iguales desentona, asi que recupera el tratamiento normal. */
.cw-fichas-listado .cw-ficha-grande .cw-ficha-titulo {
    font-size: 90%;
    font-weight: 500;
    -webkit-line-clamp: 3;
    height: 4.5em;
}

/* El hueco de los botones se reserva siempre, haya botones o no: 27px del
   boton mas los 12 de separacion, que es lo que miden hoy en produccion.
   Sin esto, una ficha sin botones subiria su texto y romperia la alineacion
   con la de al lado. */
.cw-fichas-listado .cw-ficha-botones {
    min-height: 39px;
}

.cw-ficha {
    display: flex;
    flex-direction: column;
    background: #fff;
    border-radius: 6px;
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .08), 0 4px 12px rgba(0, 0, 0, .05);
    height: 100%;
}

.cw-ficha-media {
    position: relative;
    overflow: hidden;
    background: var(--cw-fondo);
}

/* Todas las imagenes con la misma proporcion, para que las fichas de una fila
   queden alineadas entre si y no cada una a su aire.

   El 4:3 no es un numero elegido a ojo: de las 51 fichas de la portada de
   Salou, 22 vienen ya en 4:3 (la proporcion mas repetida con diferencia) y la
   mediana de alto renderizado son 227px sobre 303 de ancho, que es 4:3 clavado.
   Asi que casi la mitad de las fotos no se recortan nada y el resto lo justo.

   Las que no encajan se recortan con object-fit en vez de deformarse, y
   object-position las centra, que es lo que se pidio: las mas altas pierden
   arriba y abajo por igual, y las mas panoramicas por los lados.

   El min-height se queda como red de seguridad para navegadores sin
   aspect-ratio: sin el, la imagen al 100% de alto se quedaria en cero. */
.cw-ficha-media {
    aspect-ratio: 4 / 3;
}

.cw-ficha-pequena .cw-ficha-media { min-height: 100px; }
.cw-ficha-mediana .cw-ficha-media,
.cw-ficha-grande  .cw-ficha-media { min-height: 190px; }

/* El <a> es inline y envuelve un <img> en block, con lo que se quedaba con
   caja de 0x0 y la imagen no era clicable.

   El min-height heredado del contenedor es lo que hace que el hueco se pueda
   pulsar aunque la imagen no haya cargado todavia: con loading="lazy" el <a>
   tendria alto 0 hasta que llega la imagen, y ese rato no seria clicable. */
.cw-ficha-media a {
    display: block;
    width: 100%;
    min-height: inherit;
}

.cw-ficha-media a { height: 100%; }

.cw-ficha-media img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    border: 0;
}

.cw-ficha-cuerpo {
    padding: 15px;
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}

/* El diseno no le pone tamano a los titulares: myCss hace que h1..h6 hereden
   font-size, y la rejilla de tarjetas va dentro de un .redu90, con lo que
   quedan en 14.4px. El peso, 500, es el del reboot de Bootstrap. Aqui se
   escribe explicito porque nuestra rejilla no lleva .redu90. */
/* El recorte por lineas ya estaba, pero solo ponia un maximo: un titular de
   una linea encogia la ficha y el de tres la estiraba. Con un alto fijo el
   hueco se reserva siempre, y asi la entradilla y los botones de todas las
   fichas de una fila empiezan a la misma altura.

   Tres lineas salen de los datos: el titular mas largo de la portada tiene 107
   caracteres y a 303px de ancho caben unos 33 por linea, asi que con tres no se
   corta practicamente ninguno. Con dos se recortaria casi la mitad. */
.cw-ficha-titulo {
    font-size: 90%;
    font-weight: 500;
    margin: 0 0 8px 0;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    line-height: 1.5;
    height: 4.5em;
}

/* La ficha GRANDE es la tarjeta de hotel del diseno: 110% y 600 */
.cw-ficha-grande .cw-ficha-titulo { font-size: 110%; font-weight: 600; -webkit-line-clamp: 2; height: 3em; }

.cw-ficha-titulo a { color: var(--cw-texto-strong); text-decoration: none; }
.cw-ficha-titulo a:hover { color: var(--cw-principal); }

.cw-ficha-localizacion {
    font-size: 90%;
    font-weight: 400;
    opacity: .9;
    margin-bottom: 6px;
}

/* Mismo criterio que el menu: negro en reposo y azul al pasar por encima.
   El diseno pinta este texto en gris (#6a7789); aqui va en el negro del
   titular por decision propia. */
.cw-ficha-breve {
    font-size: 90%;
    font-weight: 300;
    color: var(--cw-texto-strong);
    margin: 0;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    line-height: 1.5;
    height: 6em;
}

.cw-ficha-breve p { margin: 0; }

.cw-ficha-breve a,
.cw-ficha-breve a:link,
.cw-ficha-breve a:visited { color: var(--cw-texto-strong); }

/* !important porque el contenido pegado desde el editor trae colores en linea
   y si no, el hover no se notaria en esos parrafos. */
.cw-ficha-breve a:hover,
.cw-ficha-breve a:hover *,
.cw-ficha-breve a:focus,
.cw-ficha-breve a:focus * { color: var(--cw-principal) !important; }

.cw-ficha-botones {
    margin-top: auto;
    padding-top: 12px;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    justify-content: flex-end;
}

/* Botones de contenido: el color lo pone el backoffice por style inline */
.boton_contenido {
    display: inline-block;
    padding: 6px 14px;
    border-radius: 20px;
    font-size: 80%;
    line-height: 1.2;
    text-align: center;
}

.boton_contenido a { text-decoration: none; color: inherit; }


/* *************************************************************************
 * CABECERAS DE SECCION
 * ************************************************************************* */

.cw-seccion { width: 100%; margin: 15px 0; }

.cw-seccion-cabecera {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 7px;
}

.cw-seccion-titulo {
    font-family: 'Quando', sans-serif;
    font-size: 110%;
    font-weight: 600;
    margin: 0;
}

.cw-seccion-cabecera .formIcon {
    cursor: pointer;
    flex: 0 0 auto;
}

.cw-separador {
    width: 100%;
    border-bottom: 1px solid #e0e0e0;
    margin: 7px 0;
}


/* *************************************************************************
 * PREVIEW / FICHA DE DETALLE
 * ************************************************************************* */

#rec_visualiz { width: 100%; }

.txt_titular_grande h1 {
    font-family: 'Quando', sans-serif;
    font-size: 150%;
    font-weight: 600;
    margin: 0 0 10px 0;
}

.txt_antetitulo { font-size: 90%; text-transform: uppercase; color: var(--cw-texto-default); }
.txt_subtitulo  { font-size: 110%; font-weight: 300; color: var(--cw-texto-default); }
.txt_precio_rojo { color: var(--cw-destacado); font-weight: 600; font-size: 120%; }
.txt_color_bold { font-weight: 600; color: var(--cw-texto-strong); }

#tit_seccion h1, #tit_seccion h2 {
    font-size: 100%;
    font-weight: 400;
    color: var(--cw-texto-default);
    margin: 0 0 10px 0;
}

/* Galeria de imagenes / video */

#rec_galeria { width: 100%; margin: 15px 0; }

#galeria_fotovideo_grande { width: 100%; text-align: center; }
#galeria_fotovideo_grande img,
#galeria_fotovideo_grande iframe { max-width: 100%; height: auto; border: 0; }

#pie_galeria { font-size: 85%; color: var(--cw-texto-default); padding: 6px 0; }

/* Mapa de Google.
   El contenedor va en un .cajaOverflow, que es overflow:hidden y por tanto
   crea un contexto de formato propio: en vez de solaparse con los flotantes
   se encoge para esquivarlos. Con clear se coloca debajo y conserva su ancho,
   que es lo que el mapa congela al construirse. */

#map {
    max-width: 100%;
    clear: both;
}

#map + *, .cajaOverflow { clear: both; }

/* Paginador servidor */

#paginador { width: 100%; text-align: center; margin: 20px 0; }

.boton-pagina, .boton-pagina-seleccionada {
    display: inline-block;
    min-width: 34px;
    padding: 6px 10px;
    margin: 2px;
    border-radius: 20px;
    border: 1px solid var(--cw-borde);
    text-decoration: none;
    font-size: 90%;
}

/* El selector lleva el tipo y la pseudoclase a proposito.

   Con solo la clase, especificidad (0,1,0), perdia contra el a:link general
   de mas arriba, que es (0,1,1): el numero de la pagina activa salia en azul
   sobre fondo azul y no se leia. El hover va incluido por lo mismo.

   El fondo usa el azul oscuro de la marca en vez del principal: sobre el
   principal, el blanco se queda en 3,6 de contraste y la norma pide 4,5 para
   texto normal. Con este llega a 4,77 y el aspecto apenas cambia. */
.boton-pagina-seleccionada,
a.boton-pagina-seleccionada:link,
a.boton-pagina-seleccionada:visited,
a.boton-pagina-seleccionada:hover,
a.boton-pagina-seleccionada:focus {
    background-color: var(--cw-principal-hover);
    border-color: var(--cw-principal-hover);
    color: #fff;
}

.boton-pagina:hover { border-color: var(--cw-principal); }

#sinresultados { padding: 30px 0; text-align: center; }
.txt_sin_resultados { color: var(--cw-texto-default); }


/* *************************************************************************
 * FORMULARIOS JSF (h:inputText, h:inputTextarea, h:selectBooleanCheckbox)
 * ************************************************************************* */

/* myCss deja los inputs sin borde y con transform:scale(.9) desde la esquina
   superior izquierda (el truco para que iOS no haga zoom al enfocar), ademas
   de border-radius:0 !important. Por eso el campo NO se estiliza directamente:
   quien pone la caja blanca redondeada es el .wrap que lo envuelve, igual que
   en el diseno. Aqui solo compensamos el 10% que se come el scale, que en el
   diseno original dejaba un hueco muerto a la derecha de cada campo. */

.wrap input,
.wrap textarea {
    width: 111.2%;
}

.campo_area_masinfo {
    resize: vertical;
    min-height: 120px;
    padding: 10px 15px;
    background: transparent;
    border: 0;
    outline: none;
    font-family: inherit;
}

.cw-captcha-campo { width: 90px; flex: 0 0 90px; }
.campotextocaptcha { text-align: center; }

.cw-campo { width: 100%; margin-bottom: 15px; }

.cw-campo-etiqueta {
    display: block;
    font-size: 85%;
    color: var(--cw-texto-default);
    margin-bottom: 4px;
}

/* El aviso de error se pinta dentro de un .flot, que es float:left. Sin clear,
   estas rejillas se colocan al lado del flotante en vez de debajo y se quedan
   sin ancho: las dos columnas de 310px pasaban a 75 y 53px y los campos a
   55px. Es lo que descuadraba el formulario en cuanto salia el aviso. */

.cw-form-fila,
.cw-campo {
    clear: both;
}

.cw-form-fila {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0 20px;
}

@media (min-width: 768px) {
    .cw-form-fila { grid-template-columns: 1fr 1fr; }
}

.cw-condiciones {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    font-size: 90%;
}

/* myCss trae input[type="checkbox"] { display: none } porque el diseno oculta
   el checkbox real y pinta un label.check en su sitio. Nuestros formularios
   usan el checkbox de JSF, asi que hay que devolverlo a la vista o el usuario
   no ve donde aceptar. */
.cw-condiciones input[type="checkbox"] {
    display: inline-block;
    width: 18px;
    height: 18px;
    margin-top: 2px;
    accent-color: var(--cw-principal);
    cursor: pointer;
}

.cw-captcha {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.cw-captcha img { max-width: 100%; height: auto; border: 0; }

.bot_naranja, .bot_azul {
    display: inline-block;
    min-height: 40px;
    padding: 9px 28px;
    border: 0;
    border-radius: 20px;
    background-color: var(--cw-principal);
    color: #fff;
    font-family: inherit;
    font-size: 90%;
    cursor: pointer;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .20), 0 4px 12px rgba(0, 0, 0, .15);
}

.bot_naranja:hover, .bot_azul:hover { background-color: var(--cw-principal-hover); color: #fff; }

.info {
    display: block;
    padding: 10px 15px;
    margin-bottom: 10px;
    border-radius: 6px;
    background: rgba(0, 142, 213, .1);
    color: var(--cw-texto-strong);
    font-size: 90%;
}

.error_captcha, .titulocaptcha { color: var(--cw-error); font-size: 85%; }


/* *************************************************************************
 * PIE
 * ************************************************************************* */

.cw-pie { width: 100%; }

.cw-pie a, .txt_pie { color: var(--cw-texto-default); text-decoration: none; }
.cw-pie a:hover     { color: var(--cw-principal); }

.txt_pie_destacado, .select { font-weight: 600; color: var(--cw-texto-strong); }
.link { color: var(--cw-principal); }


/* *************************************************************************
 * CONSENTIMIENTO DE COOKIES
 *
 * Aviso inferior y panel de preferencias. Los botones de rechazar y de
 * aceptar comparten tamano, tipografia y jerarquia visual: si rechazar
 * costara mas que aceptar, el consentimiento no valdria.
 * ************************************************************************* */

#cw-cookies-aviso {
    position: fixed;
    left: 0; right: 0; bottom: 0;
    z-index: 1900;
    background: #fff;
    border-top: 1px solid var(--cw-borde);
    box-shadow: 0 -2px 16px rgba(9, 30, 61, .12);
    padding: 16px 20px;
}

.cw-cookies-caja {
    max-width: var(--cw-ancho-skin);
    margin: 0 auto;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
}

.cw-cookies-texto { flex: 1 1 380px; }

.cw-cookies-texto h2 {
    font-family: 'Quando', sans-serif;
    font-size: 105%;
    font-weight: 600;
    margin: 0 0 4px 0;
}

.cw-cookies-texto p {
    font-size: 85%;
    line-height: 1.5;
    color: var(--cw-texto-default);
    margin: 0;
}

.cw-cookies-botones {
    flex: 0 0 auto;
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

/* Botones del gestor. No reutilizan .cajaBtn del diseno porque cookies.js va
   sin jQuery y necesita elementos <button> planos y predecibles. */

.cw-btn {
    display: inline-block;
    min-height: 40px;
    padding: 9px 20px;
    border-radius: 20px;
    border: 1px solid var(--cw-borde);
    background: #fff;
    color: var(--cw-texto-strong);
    font-family: inherit;
    font-size: 85%;
    font-weight: 600;
    line-height: 1.2;
    width: auto;
    cursor: pointer;
    white-space: nowrap;
}

.cw-btn-principal {
    background: var(--cw-principal);
    border-color: var(--cw-principal);
    color: #fff;
}

.cw-btn-principal:hover { background: var(--cw-principal-hover); border-color: var(--cw-principal-hover); }
.cw-btn-secundario:hover { border-color: var(--cw-principal); color: var(--cw-principal); }

.cw-btn:focus-visible,
.cw-cookies-cerrar:focus-visible {
    outline: 2px solid var(--cw-principal);
    outline-offset: 2px;
}

/* --- Panel de preferencias ---------------------------------------------- */

#cw-cookies-panel {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    z-index: 1950;
    background: rgba(9, 30, 61, .5);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 15px;
}

.cw-cookies-panel-caja {
    background: #fff;
    border-radius: 8px;
    width: 100%;
    max-width: 620px;
    max-height: 100%;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 8px 40px rgba(9, 30, 61, .25);
}

.cw-cookies-panel-cabecera {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 18px 20px;
    border-bottom: 1px solid var(--cw-borde);
}

.cw-cookies-panel-cabecera h2 {
    font-family: 'Quando', sans-serif;
    font-size: 115%;
    font-weight: 600;
    margin: 0;
}

.cw-cookies-cerrar {
    width: auto;
    border: 0;
    background: transparent;
    font-size: 120%;
    line-height: 1;
    padding: 4px;
    cursor: pointer;
    color: var(--cw-texto-default);
}

.cw-cookies-panel-cuerpo {
    padding: 18px 20px;
    overflow-y: auto;
    flex: 1 1 auto;
}

.cw-cookies-panel-intro {
    font-size: 85%;
    color: var(--cw-texto-default);
    margin: 0 0 18px 0;
    line-height: 1.5;
}

.cw-cat { padding: 14px 0; border-bottom: 1px solid var(--cw-borde); }
.cw-cat:last-child { border-bottom: 0; padding-bottom: 0; }

.cw-cat-cabecera {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 4px;
}

.cw-cat-nombre { font-weight: 600; font-size: 95%; margin: 0; cursor: pointer; }

.cw-cat-fijo {
    font-size: 80%;
    color: var(--cw-texto-default);
    background: var(--cw-fondo);
    border: 1px solid var(--cw-borde);
    border-radius: 12px;
    padding: 2px 10px;
    white-space: nowrap;
}

/* El interruptor va sin premarcar: la casilla marcada por defecto no es
   consentimiento valido. cookies.js las rellena con lo ya decidido. */
input.cw-cat-check {
    display: inline-block;
    width: 20px;
    height: 20px;
    flex: 0 0 20px;
    margin: 0;
    accent-color: var(--cw-principal);
    cursor: pointer;
    transform: none;
    padding: 0;
}

.cw-cat-desc {
    font-size: 85%;
    color: var(--cw-texto-default);
    line-height: 1.5;
    margin: 0;
}

.cw-cookies-panel-pie {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 8px;
    padding: 16px 20px;
    border-top: 1px solid var(--cw-borde);
    background: var(--cw-fondo);
}

@media (max-width: 600px) {
    /* En columna y ocupando el ancho: si el contenedor se encoge al contenido,
       los botones quedan estrechos y descolgados en vez de a lo ancho. */
    .cw-cookies-botones,
    .cw-cookies-panel-pie {
        flex: 1 1 100%;
        width: 100%;
        flex-direction: column-reverse;
    }
    .cw-cookies-botones .cw-btn,
    .cw-cookies-panel-pie .cw-btn {
        width: 100%;
        min-height: 44px;   /* objetivo tactil minimo recomendado */
    }
}

/* --- Contenido incrustado bloqueado ------------------------------------- */

.cw-video.cw-bloqueado iframe { display: none; }

.cw-embed-bloqueado {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 20px;
    text-align: center;
    background: var(--cw-fondo);
    border: 1px solid var(--cw-borde);
}

.cw-embed-bloqueado p {
    font-size: 85%;
    color: var(--cw-texto-default);
    margin: 0;
    max-width: 46ch;
}


/* *************************************************************************
 * CARRUSEL DE PORTADA (jCarousel de RichFaces)
 * ************************************************************************* */

#carrusel { width: 100%; overflow: hidden; }

#slider_sup_contenedor { position: relative; }

#slider_sup_contenedor img { display: block; max-width: 100%; height: auto; border: 0; }

#slider_sup_fondo_texto {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 46px;
    background: rgba(0, 0, 0, .55);
}

#slider_sup_texto {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    padding: 8px 10px;
    color: #fff;
    font-size: 85%;
    line-height: 1.2;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}


/* *************************************************************************
 * AJUSTES SOBRE EL DISENO BASE
 * ************************************************************************* */

/* myCss pone el body en flex con justify-content:center para centrar el
   contenedor. Funciona, pero convierte en item flex TODO lo que cuelgue del
   body, y ahi es donde AdSense anade sus anuncios de barra lateral.

   Medido en produccion: al aceptar el consentimiento aparece un DIV de 306px
   como ultimo hijo del body; el marco, que era item flex al 100%, encoge de
   2481 a 2176 para hacerle sitio, y el contenido se recentra dentro de ese
   ancho menor. Resultado: toda la pagina saltando 152px a la izquierda, sin
   que haya desbordamiento ninguno.

   Con el body en bloque, el marco ocupa el ancho completo pase lo que pase y
   lo que anadan los anuncios deja de competir por el espacio. El centrado no
   se pierde: lo hace el propio .cw-marco con sus hijos. */
.flotBody { display: block; }

/* *************************************************************************
 * MARCO Y COLUMNA DE PUBLICIDAD
 *
 * La columna de anuncios sale del contenedor de 1000px y se coloca a su
 * derecha, con lo que el contenido recupera el ancho completo y las noticias
 * caben a tres columnas de 313px en vez de 213.
 *
 * Hace falta 1000 + 20 de hueco + 300 = 1320px de ventana. Por debajo de eso
 * el rail cae debajo del contenido, centrado, igual que en movil.
 * ************************************************************************* */

.cw-marco {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 100%;
}

/* myCss fija .flotSkin en 1000px a secas. Mientras colgaba de .flotBody
   (flex en fila) el flex-shrink lo encogia solo y en movil no se notaba, pero
   dentro de .cw-marco pasa a ser item de un flex en columna: ahi el ancho es
   el eje transversal, donde flex-shrink no interviene, y con align-items
   center tampoco se estira. Se quedaba en 1000px dentro de una ventana de 375
   y la pagina salia desbordada, es decir, sin responsive. */
.cw-marco > .flotSkin {
    width: 100%;
    max-width: var(--cw-ancho-skin);
}

.cw-rail {
    width: 100%;
    max-width: 300px;
    margin: 0 auto;
}

@media (min-width: 1320px) {

    .cw-marco {
        flex-direction: row;
        align-items: flex-start;
        justify-content: center;
        gap: 20px;
    }

    /* myCss le pone margin:15px auto al contenedor. Dentro de un flex, las
       margenes auto se comen todo el espacio libre y empujaban el rail fuera
       de la ventana, con 38px de scroll horizontal. */
    .cw-marco > .flotSkin {
        flex: 0 0 var(--cw-ancho-skin);
        margin-left: 0;
        margin-right: 0;
    }

    .cw-rail {
        flex: 0 0 300px;
        margin: 0;
    }
}

/* La cabecera es fixed-top: su altura real manda sobre el margen del
   contenido. Se recalcula en costaweb21.js (ajustaAlturaCabecera). */
.mContent { margin-top: 190px; }

@media (max-width: 767px) {
    .mContent { margin-top: 220px; }
}

/* RichFaces mete tablas de layout en algunos componentes: que no desborden */
#contenido table { max-width: 100%; }

/* Imagenes de contenido enviadas por el editor dentro del cuerpo HTML */
#rec_visualiz img { max-width: 100%; height: auto; }


/* *************************************************************************
 * CABECERA: BUSCADOR, SUBMENU Y MODALES DE CATEGORIAS
 * ************************************************************************* */

.divSearch form {
    position: relative;
    width: 100%;
    margin: 0;
}

.divSearch .campobuscar {
    width: 100%;
    border: 0;
    background: transparent;
    box-shadow: none;
    padding-right: 46px;
}

.divSearch .campobuscar:focus { border: 0; }

/* .formIcon es el circulo azul del buscador. En el diseno era un <span>
   decorativo; aqui es el boton que envia el formulario. */
button.formIcon {
    width: auto;
    border: 0;
    color: #fff;
    cursor: pointer;
    line-height: 1;
}

button.formIcon:before {
    font-family: "salou";
    font-style: normal;
    font-weight: normal;
    display: inline-block;
    text-align: center;
}

button.formIcon.icon-lupa:before { content: '\e802'; }

/* En el diseno cada boton del menu envuelve su texto en un <h1>, y de ahi
   heredaba la Quando. Esos once h1 se quitaron porque competian con el titular
   real de la pagina, asi que la tipografia hay que pedirla explicitamente:
   misma letra y mismo peso que el diseno, sin el h1. */

.btnNav label {
    font-family: 'Quando', sans-serif;
    font-weight: 600;
}

/* En el diseno el boton del menu es un <a> sin href (solo abre el modal por
   data-toggle), asi que nunca coge el color de enlace y se queda en el
   #091e3d del body. El nuestro si lleva href, con lo que a:link lo pintaba
   de azul. Se devuelve al negro del diseno y el azul pasa a ser el estado
   de hover, que antes no tenia. */

.btnNav a,
.btnNav a:link,
.btnNav a:visited,
.btnNav a label {
    color: var(--cw-texto-strong);
}

.btnNav a:hover,
.btnNav a:hover label,
.btnNav a:focus,
.btnNav a:focus label {
    color: var(--cw-principal);
}

/* Menu secundario (categorias sueltas sin desplegable) */

#submenu {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px;
    padding: 0 0 7px 0;
}

.cw-submenu-item {
    display: inline-block;
    padding: 4px 14px;
    border-radius: 20px;
    border: 1px solid var(--cw-borde);
    background: #fff;
    font-size: 80%;
    text-decoration: none;
    color: var(--cw-texto-strong);
}

.cw-submenu-item:hover {
    border-color: var(--cw-principal);
    color: var(--cw-principal);
}

/* Titulo de los modales de categoria (era un <h1> en el diseno; se baja a
   span para no competir con el h1 real de la pagina) */

.cw-modal-titulo {
    font-family: 'Quando', sans-serif;
    font-weight: 600;
    display: inline-flex;
    align-items: center;
}

.modal-content .close { text-decoration: none; }


/* *************************************************************************
 * PIEZAS SUELTAS DEL DISENO
 * ************************************************************************* */

/* Lema del portal: es el h1 de la portada. Antes vivia en la cabecera con
   la clase #slogan; la cabecera nueva es fija y no tiene sitio para el. */
.cw-lema {
    font-family: 'Quando', sans-serif;
    font-size: 230%;
    font-weight: 600;
    line-height: 1.15;
    color: var(--cw-texto-strong);
    margin: 0 0 15px 0;
    width: 100%;
    text-wrap: balance;
}

/* Cuerpo del contenido, tal cual lo escribe el editor en el backoffice.
   Antes iba envuelto en un <h3>, que ademas de heredar tamano de titular
   marcaba todo el articulo como encabezado. */
.cw-cuerpo {
    font-size: 95%;
    font-weight: 300;
    line-height: 1.55;
    text-align: justify;
}

/* *************************************************************************
 * CONTENIDO PEGADO DESDE EL EDITOR
 *
 * Las entradillas y los cuerpos vienen de la base de datos con los estilos en
 * linea que arrastra el editor del backoffice al pegar desde Word o Pages:
 *   <p class="p1" style="font-family:'Helvetica Neue'; font-size:13px; ...">
 * Eso pisa cualquier hoja, y en la home eran 46 elementos, la mayor parte del
 * texto de la pagina. Antes no cantaba porque el sitio viejo tambien iba en
 * una sans generica; con Open Sans al lado se ve a la legua.
 *
 * Se neutralizan solo familia, tamano y interlineado, y solo dentro de los
 * contenedores de contenido: el color y el resto de lo que ponga el redactor
 * se respetan. La regla va sobre los descendientes, no sobre el contenedor,
 * para que este conserve su propio tamano.
 *
 * Esto es un parche de presentacion. Lo sano es que el editor no guarde esos
 * estilos: mientras sigan en la base de datos, cualquier cambio de tipografia
 * futuro se topara con lo mismo.
 * ************************************************************************* */

.cw-ficha-breve *,
.cw-cuerpo * {
    font-family: inherit !important;
    font-size: inherit !important;
    line-height: inherit !important;
}

/* El pegado tambien se lleva por delante la negrita del editor */
.cw-ficha-breve strong, .cw-ficha-breve b,
.cw-cuerpo strong, .cw-cuerpo b {
    font-weight: 600 !important;
}

.cw-cuerpo img    { max-width: 100%; height: auto; }
.cw-cuerpo iframe { max-width: 100%; }
.cw-cuerpo table  { max-width: 100%; }
.cw-cuerpo ul, .cw-cuerpo ol { padding-left: 20px; }

/* Listado "+ portal" de la columna derecha */

.cw-mas-noticia {
    padding: 8px 0;
    border-bottom: 1px solid #e0e0e0;
    font-size: 90%;
    line-height: 1.3;
}

.cw-mas-noticia:last-child { border-bottom: 0; }
.cw-mas-noticia a { color: var(--cw-texto-strong); text-decoration: none; }
.cw-mas-noticia a:hover { color: var(--cw-principal); }

/* Bloque de reservas: HTML de terceros (Booking y similares) */

#reservas { overflow-x: auto; }
#reservas img, #reservas iframe { max-width: 100%; }

/* Carruseles de Bootstrap (portada y galeria de la ficha) */

.cw-carrusel {
    border-radius: 6px;
    overflow: hidden;
    background: var(--cw-fondo);
}

.cw-carrusel .carousel-item img { width: 100%; height: auto; }

.cw-carrusel .carousel-control-prev,
.cw-carrusel .carousel-control-next { width: 10%; }

/* Titulo sobreimpreso del carrusel de portada */
.cw-carrusel #slider_sup_fondo_texto,
.cw-carrusel #slider_sup_texto { pointer-events: none; }

/* Fechas de un evento de agenda */

.cw-fechas-agenda {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.cw-fecha-agenda {
    display: inline-block;
    padding: 4px 12px;
    border-radius: 20px;
    background: var(--cw-fondo);
    border: 1px solid var(--cw-borde);
    font-size: 85%;
}

/* Documentos descargables de la ficha */

.cw-doc {
    display: inline-block;
    margin-right: 10px;
    font-size: 90%;
}

/* Unidad de AdSense de la ficha de detalle */

.cw-adsense { width: 100%; }

/* La ficha es el hijo directo de la rejilla; el borde y la sombra los pone
   .cw-ficha para que el hueco de la rejilla no quede pintado si no hay nada */
.cw-ficha-item { min-width: 0; }

/* Tamanos nominales de banner que no necesitan reglas de posicion propias,
   pero si evitar que rompan el ancho de su contenedor */
.cw-banner-40x40  { width: 40px; height: 40px; }
.cw-banner-220x30,
.cw-banner-300x125,
.cw-banner-660x90,
.cw-banner-800x600 { max-width: 100%; }





/* *************************************************************************
 * VIDEOS DE YOUTUBE
 *
 * ValoresDefecto.VIDEO_YOUTUBE genera el iframe de embed dentro de este
 * contenedor, que le da relacion 16:9 y ancho fluido.
 * ************************************************************************* */

.cw-video {
    position: relative;
    width: 100%;
    padding-top: 56.25%;
    background: #000;
    overflow: hidden;
}

.cw-video iframe {
    position: absolute;
    top: 0; left: 0;
    width: 100%;
    height: 100%;
    border: 0;
}


/* *************************************************************************
 * LOGOTIPOS
 *
 * Los logos de los cinco portales son JPG con blanco opaco: no hay canal
 * alfa que respetar, asi que apoyados en la cabecera o el pie (que van en
 * --cw-fondo) se les marcaba el recuadro blanco alrededor.
 *
 * En vez de pintar una caja del color del fondo detras de cada logo, que
 * obliga a mantener sincronizados el color de la caja y el de la imagen, se
 * usa mix-blend-mode: multiply. Multiplicar por blanco deja el fondo tal
 * cual, con lo que el blanco del JPG desaparece y toma el color que haya
 * debajo, sea el que sea. El logo se adapta solo a lo que cada portal ponga
 * en --cw-fondo, sin tocar ni una imagen ni anadir una variable mas.
 *
 * La marca apenas se desplaza: sobre #f9f9f9 el rojo de Salou pasa de
 * #b2000a a #ae000a. Y donde no haya soporte de blend, el logo se ve como se
 * veia hasta ahora, con su recuadro; no se rompe nada.
 * ************************************************************************* */

/* Vale puesta en el contenedor o directamente en la imagen. Solo se le pone a
   las imagenes opacas: bdf-tech-powered.png ya trae canal alfa (el 91% de sus
   pixeles), asi que se recorta sola y no hay que tocarla. */

.cw-logo {
    line-height: 0;
    background: none;
}

img.cw-logo,
.cw-logo img {
    mix-blend-mode: multiply;
}

/* El display:block solo cuando la clase va en el contenedor: quita el hueco
   que deja la linea base. En la propia imagen se respeta como venga, que hay
   logos que van en linea con otros. */
.cw-logo img { display: block; }

a.cw-logo,
span.cw-logo { display: inline-block; }
