@charset "UTF-8";
/* =====================================================================================
   idealoweb.css — ajustes de Idealoweb sobre la plantilla comprada
   -------------------------------------------------------------------------------------
   · Se carga el ÚLTIMO de todos los CSS (después de style.css, responsive.css y
     priceslider.css) como  <link href="assets/css/idealoweb.css?v=1">.  Si se toca,
     se sube el ?v=NN en todos los HTML (ver CONTRATO-WEB.md §11).
   · No se modifica ningún CSS de la plantilla: todo lo nuestro va aquí y gana por
     orden de carga (misma especificidad, declarado después) o por especificidad.
   · Los fondos de imagen que la copia de la plantilla no trajo se sustituyen por
     degradados de marca (bloque 1). Cómo volver a las imágenes: assets/css/LEEME-css.md.

   Índice
     0. Variables de marca
     1. Fondos que faltan (imágenes ausentes → degradados / CSS puro / SVG en línea)
     2. Ganchos del contrato con el panel (topbar, ticker, selector Mensual/Anual,
        pastillas de TLD, precio tachado, menú con grupos e insignias)
     3. Tarjetas de dedicados (plan-box horizontal con data-plan-*)
     4. Ajustes para textos en español (botones, menú, migas del sub-banner)
     5. Restos de la demo que se ocultan (carrito, buscador, «Home 1/2/3»)
     6. Movimiento reducido (prefers-reduced-motion)
   ===================================================================================== */


/* =====================================================================================
   0. VARIABLES DE MARCA
   Los colores de la plantilla (#2475ff, #457bff, #9548f8, #2e2f46, #f1f4f9) se reutilizan;
   añadimos los tonos «noche» para los fondos oscuros que sustituyen a las fotos.
   ===================================================================================== */
:root {
    --iw-azul:          #2475ff;   /* acento principal (= --e-global-color-accent) */
    --iw-azul-claro:    #457bff;   /* = --e-global-color-light-blue */
    --iw-violeta:       #9548f8;   /* = --e-global-color-bright-violet */
    --iw-oscuro:        #2e2f46;   /* texto/titulares (= --e-global-color-secondary) */
    --iw-gris:          #f1f4f9;   /* fondos claros (= --e-global-color-light-grayish-blue) */
    --iw-noche:         #0b1b3a;   /* azul noche: base de los fondos oscuros */
    --iw-noche-media:   #0f2a5c;   /* paso intermedio del degradado */
    --iw-noche-clara:   #16387a;   /* paso claro del degradado */
    --iw-texto-suave:   #8a90a8;   /* textos secundarios (tachados, subtítulos de menú) */

    /* Patrón de puntos muy sutil que se superpone a los degradados oscuros */
    --iw-patron-puntos: radial-gradient(circle at 1px 1px, rgba(255, 255, 255, 0.075) 1px, transparent 1.6px);

    /* Degradado base de los sub-banners: azul noche → azul de marca */
    --iw-degradado-banner: linear-gradient(112deg, var(--iw-noche) 0%, var(--iw-noche-media) 48%, var(--iw-azul) 100%);

    /* Degradado base de las secciones oscuras interiores (FAQ, garantía, soporte…) */
    --iw-degradado-seccion: linear-gradient(160deg, var(--iw-noche) 0%, #122a5a 55%, var(--iw-noche-clara) 100%);

    /* Cada sub-banner puede cambiar el color y la posición de su «foco» de luz */
    --iw-banner-acento: rgba(36, 117, 255, 0.55);
    --iw-banner-pos: 82% 25%;
}


/* =====================================================================================
   1. FONDOS: las imágenes de fondo de la plantilla están en assets/images/ (recuperadas el
   19-09-2026). Los degradados que las sustituían viven en idealoweb-sin-fondos.css, sin enlazar.
   Sólo se conserva el sustituto de close.png (no existe ni en la demo).

   1.1 Fondos en WebP (rendimiento, 19-09-2026). Las fotos de fondo de la plantilla pesan
   300-380 KB cada una en JPG; `node laweb/4-herramientas/optimizar-imagenes.js` genera al lado
   de cada JPG/PNG de más de 150 KB un .webp con calidad 80 (60-90 % más ligero) sin borrar el
   original. Aquí se repite la misma regla que style.css pero con image-set(): el navegador que
   entiende image-set() con type() (Chrome 113+, Safari 17+, Firefox 89+) coge el .webp; el que
   no, descarta esta declaración entera y se queda con el JPG/PNG de style.css. Mismos selectores
   y misma especificidad que style.css, declarados después: ganan por orden de carga.
   OJO: hay que ejecutar el optimizador antes de empaquetar la web (para-subir/web.zip); si un
   .webp de esta lista no está en el servidor, ese fondo saldría vacío en navegadores modernos.
   subbanner-domainbgimage.jpg (103 KB) no llega al umbral y sigue en JPG a propósito.
   ===================================================================================== */

/* Sub-banners de las páginas interiores (style.css .sub-banner y sus variantes por página) */
.sub-banner {
    background-image: image-set(url("../images/subbanner-contactbgimage.webp") type("image/webp"),
                                url("../images/subbanner-contactbgimage.jpg") type("image/jpeg"));
}
.reseller-sub-banner {
    background-image: image-set(url("../images/subbanner-resellerbgimage.webp") type("image/webp"),
                                url("../images/subbanner-resellerbgimage.jpg") type("image/jpeg"));
}
.shared-sub-banner {
    background-image: image-set(url("../images/subbanner-sharedbgimage.webp") type("image/webp"),
                                url("../images/subbanner-sharedbgimage.jpg") type("image/jpeg"));
}
.dedicated-sub-banner {
    background-image: image-set(url("../images/subbanner-dedicatedbgimage.webp") type("image/webp"),
                                url("../images/subbanner-dedicatedbgimage.jpg") type("image/jpeg"));
}
.vps-sub-banner {
    background-image: image-set(url("../images/subbanner-vpsbgimage.webp") type("image/webp"),
                                url("../images/subbanner-vpsbgimage.jpg") type("image/jpeg"));
}
.about-sub-banner {
    background-image: image-set(url("../images/subbanner-aboutbgimage.webp") type("image/webp"),
                                url("../images/subbanner-aboutbgimage.jpg") type("image/jpeg"));
}
.contact-sub-banner {
    background-image: image-set(url("../images/subbanner-contactbgimage.webp") type("image/webp"),
                                url("../images/subbanner-contactbgimage.jpg") type("image/jpeg"));
}

/* Secciones oscuras interiores que comparten la misma foto (FAQ, garantía, características VPS, servidores) */
.vpsfeature-con,
.faq-con,
.guarantee-con,
.server3-con {
    background-image: image-set(url("../images/domainfaq-backgroundimage.webp") type("image/webp"),
                                url("../images/domainfaq-backgroundimage.jpg") type("image/jpeg"));
}

/* Formulario de contacto (la foto va en el ::before, al 60 % de opacidad) */
.contactform-con::before {
    background-image: image-set(url("../images/contactform-backgroundimage.webp") type("image/webp"),
                                url("../images/contactform-backgroundimage.jpg") type("image/jpeg"));
}

/* Banners de las portadas alternativas de la plantilla (no se usan hoy, pero pueden llegar
   desde la biblioteca de bloques del panel); banner2 es el PNG de 550 KB → 119 KB en WebP */
.banner2-con {
    background-image: image-set(url("../images/banner2-backgroundimage.webp") type("image/webp"),
                                url("../images/banner2-backgroundimage.png") type("image/png"));
}
.banner3-con {
    background-image: image-set(url("../images/banner3-backgroundimage.webp") type("image/webp"),
                                url("../images/banner3-backgroundimage.jpg") type("image/jpeg"));
}

/* =====================================================================================
   2. GANCHOS DEL CONTRATO CON EL PANEL
   Estilos de los elementos que pinta site-loader.js y que la plantilla no trae.
   ===================================================================================== */

/* --- 2.1 Barra fina superior [data-topbar] --------------------------------------------
   <div data-topbar hidden> <a data-topbar="phone" href="tel:"></a> <a data-topbar="email"
   href="mailto:"></a> <a data-topbar="kb" href=""></a> </div>  — va antes del <header>.
   Bootstrap ya tiene [hidden]{display:none!important}, así que mientras el loader no la
   rellene y le quite «hidden» no ocupa nada. Los enlaces vacíos también se ocultan.
   El relleno lateral sigue los anchos del .container de Bootstrap 4 para alinear con el logo. */
[data-topbar] {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-items: center;
    gap: 4px 26px;
    padding: 7px 15px;
    position: relative;
    z-index: 6;
    font-family: "Inter", sans-serif;
    font-size: 14px;
    line-height: 18px;
    color: #d7e1f5;
    background-color: var(--iw-noche);
    border-bottom: 1px solid rgba(255, 255, 255, 0.06);
}
[data-topbar][hidden] { display: none !important; }
@media (min-width: 576px)  { [data-topbar] { padding-left: calc(50% - 255px); padding-right: calc(50% - 255px); } }
@media (min-width: 768px)  { [data-topbar] { padding-left: calc(50% - 345px); padding-right: calc(50% - 345px); } }
@media (min-width: 992px)  { [data-topbar] { padding-left: calc(50% - 465px); padding-right: calc(50% - 465px); } }
@media (min-width: 1200px) { [data-topbar] { padding-left: calc(50% - 555px); padding-right: calc(50% - 555px); } }
/* Si el HTML envuelve los enlaces en un .container, el flex lo hace el container */
[data-topbar]:has(> .container) { display: block; padding-left: 0; padding-right: 0; }
[data-topbar] > .container {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-items: center;
    gap: 4px 26px;
}
[data-topbar] a[data-topbar] {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: var(--e-global-color-white, #fff);
    font-weight: 500;
    text-decoration: none;
    transition: color 0.2s ease-in-out;
}
[data-topbar] a[data-topbar]:hover { color: #9cc0ff; text-decoration: none; }
[data-topbar] a[data-topbar]:empty { display: none; }
/* Iconos con Font Awesome 6 (local, assets/webfonts) */
[data-topbar] a[data-topbar]::before {
    font-family: "Font Awesome 6 Free";
    font-weight: 900;
    font-size: 12px;
    line-height: 1;
    color: var(--iw-azul-claro);
}
[data-topbar] a[data-topbar="phone"]::before { content: "\f095"; }
[data-topbar] a[data-topbar="email"]::before { content: "\f0e0"; }
[data-topbar] a[data-topbar="kb"]::before    { content: "\f059"; }
@media (max-width: 575px) {
    [data-topbar] { justify-content: center; gap: 4px 18px; font-size: 13px; }
}

/* --- 2.2 Ticker de anuncios .site-announcement-bar ------------------------------------
   El loader inserta antes del <header>:
   <div id="site-announcement-bar" class="site-announcement-bar"><div class="site-announcement-track">
   <span class="site-announcement-item">…</span>…(lista duplicada)</div></div>
   La lista va duplicada para que el desplazamiento continuo (-50 %) no deje huecos. */
.site-announcement-bar {
    overflow: hidden;
    white-space: nowrap;
    padding: 8px 0;
    color: var(--e-global-color-white, #fff);
    background-image: linear-gradient(90deg, var(--iw-azul) 0%, var(--iw-violeta) 100%);
    position: relative;
    z-index: 6;
}
.site-announcement-track {
    display: inline-block;
    padding-left: 100%;
    animation: iwTickerAnuncios 26s linear infinite;
    will-change: transform;
}
.site-announcement-bar:hover .site-announcement-track { animation-play-state: paused; }
.site-announcement-item {
    display: inline-block;
    padding: 0 48px;
    font-family: "Inter", sans-serif;
    font-size: 14px;
    line-height: 20px;
    font-weight: 600;
    letter-spacing: 0.2px;
}
.site-announcement-item::before {
    content: "";
    display: inline-block;
    width: 6px;
    height: 6px;
    margin-right: 12px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.75);
    vertical-align: 2px;
}
@keyframes iwTickerAnuncios {
    from { transform: translateX(0); }
    to   { transform: translateX(-50%); }
}

/* --- 2.3 Selector Mensual/Anual .plan-toggle --------------------------------------------
   <div class="plan-toggle"><button data-period="monthly" class="is-active">Mensual</button>
   <button data-period="annual">Anual <span class="pp-save">-N %</span></button></div>
   Va dentro de [data-plan-toggle] si existe o, si no, justo antes de [data-plan-cards].
   Pastillas azules: fondo gris claro, el periodo activo en azul de marca. */
[data-plan-toggle] { margin-bottom: 34px; }
[data-plan-toggle]:empty { display: none; margin: 0; }
[data-plan-toggle] .plan-toggle { margin-bottom: 0; }
.plan-toggle {
    display: flex;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto 34px;
    padding: 4px;
    gap: 4px;
    border-radius: 999px;
    background-color: #e6edfa;
    box-shadow: inset 0 0 0 1px rgba(36, 117, 255, 0.12);
}
.plan-toggle button {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 11px 24px;
    border: 0;
    border-radius: 999px;
    background: transparent;
    color: var(--iw-oscuro);
    font-family: "Inter", sans-serif;
    font-size: 15px;
    line-height: 1;
    font-weight: 600;
    cursor: pointer;
    transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.plan-toggle button:hover { color: var(--iw-azul); }
.plan-toggle button:focus-visible { outline: 2px solid var(--iw-violeta); outline-offset: 2px; }
.plan-toggle button.is-active,
.plan-toggle button.active {
    color: var(--e-global-color-white, #fff);
    background-color: var(--iw-azul);
    box-shadow: 0 6px 16px rgba(36, 117, 255, 0.30);
}
.plan-toggle .pp-save {
    display: inline-block;
    padding: 3px 8px;
    border-radius: 999px;
    background-color: #d9f5e3;
    color: #0d5225;
    font-size: 12px;
    line-height: 1.2;
    font-weight: 700;
    white-space: nowrap;
}
.plan-toggle button.is-active .pp-save,
.plan-toggle button.active .pp-save {
    background-color: var(--e-global-color-white, #fff);
    color: var(--iw-azul);
}
@media (max-width: 575px) {
    .plan-toggle button { padding: 10px 16px; font-size: 14px; }
}

/* --- 2.4 Pastillas de extensiones del buscador [data-tld-list] ------------------------
   <ul data-tld-list><li><label><input type="checkbox" name="tld" value="es"> .es</label></li></ul>
   Debajo del formulario de dominios (portada, oscura, y dominios.html, clara).
   Los selectores llevan «ul[data-tld-list]» para ganar a las reglas de la plantilla para
   «.domain_content ul li» (que dan altura fija y fondo a las cajas de precios). */
ul[data-tld-list] {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 8px;
    clear: both;               /* la caja del buscador va en float:left en la plantilla */
    margin: 0 0 28px;
    padding: 0;
    list-style: none;
}
ul[data-tld-list]:empty { display: none; }
/* dentro del <form>: separada del campo; fuera: el formulario cede parte de su margen inferior */
form ul[data-tld-list] { margin: 16px 0 0; }
.domain_content form:has(+ ul[data-tld-list]) { margin-bottom: 18px; }
.domain-con .domain_content ul[data-tld-list] li,
.domainpage-con .domain_content ul[data-tld-list] li,
ul[data-tld-list] li {
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    display: block;
    background: none;
    border: 0;
    border-radius: 0;
}
ul[data-tld-list] label {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    margin: 0;
    padding: 6px 14px;
    border-radius: 999px;
    border: 1px solid rgba(36, 117, 255, 0.35);
    background-color: var(--e-global-color-white, #fff);
    color: var(--iw-oscuro);
    font-family: "Inter", sans-serif;
    font-size: 14px;
    line-height: 18px;
    font-weight: 600;
    cursor: pointer;
    user-select: none;
    transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out, border-color 0.2s ease-in-out;
}
ul[data-tld-list] label:hover { border-color: var(--iw-azul); color: var(--iw-azul); }
ul[data-tld-list] input[type="checkbox"] {
    width: 14px;
    height: 14px;
    margin: 0;
    accent-color: var(--iw-azul);
    cursor: pointer;
}
ul[data-tld-list] label:has(input:checked) {
    background-color: var(--iw-azul);
    border-color: var(--iw-azul);
    color: var(--e-global-color-white, #fff);
}
/* Variante sobre fondo oscuro (buscador de la portada) */
.domain-con ul[data-tld-list] label {
    background-color: rgba(255, 255, 255, 0.08);
    border-color: rgba(255, 255, 255, 0.25);
    color: var(--e-global-color-white, #fff);
}
.domain-con ul[data-tld-list] label:hover { border-color: var(--iw-azul-claro); color: var(--e-global-color-white, #fff); }
.domain-con ul[data-tld-list] label:has(input:checked) { background-color: var(--iw-azul); border-color: var(--iw-azul); }

/* --- 2.5 Lista de precios de extensiones [data-domain-prices] ------------------------
   El loader pinta <li><span class="tld">.com</span><span class="price">9,90 €</span></li>;
   la plantilla llamaba «.name» al primer span (portada) o ponía un icono (dominios.html).
   Se estila «.tld» como lo que había y se deja que la lista salte de línea si hay muchas. */
.domain-con .domain_content ul[data-domain-prices],
.domainpage-con .domain_content ul[data-domain-prices] {
    flex-wrap: wrap;
    row-gap: 10px;
}
.domain-con .domain_content ul li .tld {
    font-size: 20px;
    line-height: 20px;
    font-weight: 800;
    margin-right: 10px;
    color: var(--e-global-color-white, #fff);
}
.domainpage-con .domain_content ul li .tld {
    display: block;
    margin-bottom: 12px;
    font-size: 22px;
    line-height: 24px;
    font-weight: 800;
    color: var(--iw-oscuro);
}
@media (max-width: 767px) {
    .domain-con .domain_content ul li .tld { font-size: 18px; line-height: 18px; margin-right: 8px; }
}

/* --- 2.6 Precio tachado .strike -----------------------------------------------------------
   <span data-plan-strike class="strike" hidden></span> dentro de .value, antes del precio.
   Se muestra como línea propia encima del precio (precio original antes del descuento). */
.strike {
    display: block;
    margin: 0 0 6px;
    font-size: 16px;
    line-height: 18px;
    font-weight: 500;
    color: var(--iw-texto-suave);
    text-decoration: line-through;
    text-decoration-color: rgba(255, 0, 0, 0.55);
    text-decoration-thickness: 2px;
}
.strike[hidden] { display: none !important; }
/* dentro de las tarjetas, gana a «.pricing-box span» (inline-block, peso 700, color oscuro, transición) */
.pricing-box .value .strike,
.pricing_content .value .strike,
.pricing_content .price-box .strike {
    display: block;
    width: 100%;
    font-weight: 500;
    color: var(--iw-texto-suave);
    transition: none;
}

/* --- 2.6b El símbolo del euro detrás del número («2,99 €/mes») -------------------------
   El contrato pone el símbolo en <sup class="dollar">€</sup> ANTES del número (orden de la
   plantilla americana). En español va detrás: se reordena sólo con flex, sin tocar el HTML
   ni el loader. Orden final: tachado (línea propia) → número → € → periodo. */
.pricing-box .value {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0 5px;
}
.pricing-box .value .number { order: 1; }
.pricing-box .value .dollar { order: 2; top: 0; line-height: 1; }
.pricing-box .value .month  { order: 3; }
.pricing-box .value .strike { order: 0; }
.pricing-box .value [hidden] { display: none !important; }

/* --- 2.7 Menú de cabecera: lo pinta y lo estila el loader (megamenú con iconos y descripción);
   ver inyectarEstilos() en site-loader.js. -------------------------------------------------- */

/* --- 2.8 Imágenes opcionales sin URL --------------------------------------------------
   Si el panel no da imagen, el src queda vacío: se evita el icono de imagen rota. */
img[data-plan-icon][src=""],
img[data-plan-icon]:not([src]),
img[data-banner="image"][src=""],
img[data-hero="image"][src=""] { display: none; }


/* =====================================================================================
   3. TARJETAS DE DEDICADOS (data-plan sobre el plan-box horizontal de la plantilla)
   Mismos ganchos que las tarjetas normales (CONTRATO-WEB.md §6) sobre .plan-con .pricing_content:
   <div class="pricing_content" data-plan>
     <span class="tag" data-plan-badge hidden>Recomendado</span>
     <h4 data-plan-title class="mb-0">Xeon E-2336</h4>
     <p data-plan-desc class="text-size-14 mb-0">…</p>
     <ul data-plan-features class="list-unstyled mb-0"><li><i class="fa fa-check"></i><p class="mb-0 text-size-14">…</p></li>…</ul>
     <div class="value"><span data-plan-strike class="strike" hidden></span><sup class="dollar">€</sup><span data-plan-price class="number">89</span><span data-plan-period class="month">/mes</span></div>
     <a data-plan-button class="text-decoration-none secondary_btn btns" href="…">Contratar</a>
   </div>
   Con [data-plan] la fila pasa a flex (la plantilla usa grid de 3 columnas en ≤991px). */
.plan-con .pricing_content[data-plan] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 20px 40px;
    position: relative;
}
.plan-con .pricing_content[data-plan] [data-plan-title] {
    flex: 0 0 200px;
    max-width: 200px;
    padding-right: 30px;
    border-right: 1px solid rgba(46, 147, 238, 0.2);
    overflow-wrap: break-word;
}
.plan-con .pricing_content[data-plan] [data-plan-desc] {
    flex: 1 1 100%;
    order: 10;                 /* la descripción, si la hay, va en una línea aparte al final */
    margin: -6px 0 0;
    font-size: 14px;
    line-height: 22px;
    color: var(--e-global-color-text, #555);
}
.plan-con .pricing_content[data-plan] [data-plan-features] {
    flex: 1 1 280px;
    min-width: 0;              /* puede encoger: si no, un texto largo tira el botón a otra línea */
    margin: 0;
    columns: 2;
    column-gap: 30px;
}
.plan-con .pricing_content[data-plan] [data-plan-features] li {
    break-inside: avoid;
    -webkit-column-break-inside: avoid;
}
.plan-con .pricing_content[data-plan] .value,
.plan-con .pricing_content[data-plan] .price-box {
    flex: 0 0 auto;
    min-width: 150px;
    position: relative;
    color: var(--iw-oscuro);
    transition: color 0.3s ease-in-out;
    /* tachado (línea propia) → número → € → periodo (línea propia), centrado */
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: baseline;
    gap: 0 5px;
    text-align: center;
}
.plan-con .pricing_content[data-plan] .value .strike { order: 0; }
.plan-con .pricing_content[data-plan] .value .number {
    order: 1;
    font-family: "Plus Jakarta Sans", sans-serif;
    font-size: 40px;
    line-height: 40px;
    font-weight: 700;
}
.plan-con .pricing_content[data-plan] .value .dollar {
    order: 2;
    position: relative;
    top: 0;
    font-size: 20px;
    line-height: 1;
    font-weight: 700;
}
.plan-con .pricing_content[data-plan] .value .month {
    order: 3;
    width: 100%;
    margin-top: 6px;
    font-size: 16px;
    line-height: 16px;
    font-weight: 400;
}
.plan-con .pricing_content[data-plan] [data-plan-desc]:empty { display: none; }
.plan-con .pricing_content[data-plan]:hover .value { color: var(--iw-azul); }
.plan-con .pricing_content[data-plan] [data-plan-button] {
    flex: 0 0 auto;
    max-width: 220px;          /* un texto largo parte dentro del botón, no salta de línea */
    padding: 16px 28px;
    text-align: center;
}
/* Insignia («Recomendado») en la esquina superior izquierda de la fila, sin rotar */
.plan-con .pricing_content[data-plan] .tag[data-plan-badge] {
    position: absolute;
    left: 0;
    top: 0;
    transform: none;
    padding: 4px 14px;
    border-radius: 10px 0 10px 0;
    background-color: var(--iw-azul);
    color: var(--e-global-color-white, #fff);
    font-size: 12px;
    line-height: 16px;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}
.plan-con .pricing_content[data-plan] .tag[data-plan-badge][hidden] { display: none !important; }
/* Fila destacada: mismo borde azul que .plan_content2 de la plantilla */
.plan-con .pricing_content[data-plan]:has(.tag[data-plan-badge]:not([hidden])) {
    border: 2px solid var(--iw-azul);
    border-radius: 10px;
    box-shadow: 0 20px 30px rgba(46, 147, 238, 0.10);
}
@media screen and (max-width: 1199px) {
    .plan-con .pricing_content[data-plan] { gap: 18px 28px; }
    .plan-con .pricing_content[data-plan] [data-plan-title] { flex-basis: 170px; max-width: 170px; padding-right: 20px; }
    .plan-con .pricing_content[data-plan] .value .number { font-size: 36px; line-height: 36px; }
}
@media screen and (max-width: 991px) {
    .plan-con .pricing_content[data-plan] { padding: 30px; }
    .plan-con .pricing_content[data-plan] [data-plan-title] { flex: 1 1 100%; max-width: none; padding-right: 0; border-right: 0; }
    .plan-con .pricing_content[data-plan] [data-plan-features] { flex: 1 1 100%; }
    .plan-con .pricing_content[data-plan] .value { justify-content: flex-start; text-align: left; min-width: 0; }
    .plan-con .pricing_content[data-plan] [data-plan-button] { margin-left: auto; }
}
@media screen and (max-width: 575px) {
    .plan-con .pricing_content[data-plan] { padding: 24px 20px; text-align: center; }
    .plan-con .pricing_content[data-plan] [data-plan-features] { columns: 1; text-align: left; }
    .plan-con .pricing_content[data-plan] .value { flex: 1 1 100%; justify-content: center; text-align: center; }
    .plan-con .pricing_content[data-plan] [data-plan-button] { flex: 1 1 100%; margin-left: 0; }
    .plan-con .pricing_content[data-plan] .value .number { font-size: 32px; line-height: 32px; }
}


/* =====================================================================================
   4. AJUSTES PARA TEXTOS EN ESPAÑOL
   Los textos en español son más largos que los de la demo: los botones pueden partir
   en dos líneas sin desbordar, el menú no se rompe y las migas del sub-banner
   («Inicio ~ Página») se adaptan.
   ===================================================================================== */

/* Botones: permitir salto de línea con un interlineado legible (la plantilla usaba 16px).
   Los de la cabecera (.header-cta, .register: alto fijo de 50px) se quedan como están. */
.primary_btn:not(.header-cta):not(.register),
.secondary_btn:not(.header-cta):not(.register),
a.btns:not(.header-cta):not(.register) {
    white-space: normal;
    line-height: 1.2;
    overflow-wrap: break-word;
}
/* Botones de cabecera («Área de cliente», «Contactar»): ancho según el texto, en una línea */
.other_list .other_list_item .register {
    min-width: 0;
    padding-left: 16px;
    padding-right: 16px;
    white-space: nowrap;
}
/* Menú principal: los enlaces de primer nivel no se parten; en portátiles pequeños un punto menos */
.navbar-nav > .nav-item > a { white-space: nowrap; }
@media screen and (min-width: 992px) and (max-width: 1199px) {
    .navbar-nav .nav-item a { font-size: 15px; }
    .navbar-nav li { margin: 0 3px; }
}
/* En el desplegable los textos largos pueden partir */
.navbar-nav .drop-down-pages .nav-item a { white-space: normal; }

/* Titulares y textos de tarjetas: nunca desbordan la caja */
h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; }
.pricing-box h4,
.pricing-box p,
.pricing-box ul li p { overflow-wrap: break-word; }

/* Sub-banner: migas «Inicio ~ Página» (data-banner="tagline") y titular más contenido */
.sub-banner .sub_banner_content .box {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0 8px;
    max-width: 100%;
    padding: 5px 16px 7px;
    border-radius: 6px;
    background: rgba(36, 117, 255, 0.92);
}
.sub-banner .sub_banner_content .box span { white-space: nowrap; }
.sub-banner .sub_banner_content .box .slash { opacity: 0.7; }
.sub-banner .sub_banner_content .box a span:hover { color: #cfe0ff; }   /* la demo lo ponía en gris oscuro sobre azul */
.sub-banner .sub_banner_content h1 {
    font-size: clamp(32px, 4.2vw, 56px);
    line-height: 1.15;
    margin-bottom: 20px;
}
@media screen and (max-width: 767px) {
    .sub-banner .sub_banner_content .box { justify-content: center; }
    .sub-banner .sub_banner_content .box span { white-space: normal; }
}

/* Buscador de dominios: «Buscar» y «Transferir» no caben en los anchos fijos de la demo */
.domain-con .domain_content button,
.domainpage-con .domain_content button {
    width: auto;
    min-width: 110px;
    padding-left: 20px;
    padding-right: 20px;
    white-space: nowrap;
}
@media screen and (max-width: 575px) {
    .domain-con .domain_content button,
    .domainpage-con .domain_content button { min-width: 0; padding-left: 14px; padding-right: 14px; }
}

/* Pie: el texto largo de la columna de contacto y los enlaces con acento no se cortan */
[data-module="footer"] a,
[data-module="footer"] p { overflow-wrap: break-word; }
/* CTA azul sobre el pie (h2 + botón en flex): el botón no se encoge; si falta sitio, parte el titular */
.footer-con .upper_portion .content .primary_btn {
    flex-shrink: 0;
    margin-left: 24px;
    white-space: nowrap;
}
@media screen and (max-width: 991px) {
    .footer-con .upper_portion .content .primary_btn { margin-left: 0; }
}

/* Etiquetas <h6> (violeta) sobre las secciones oscuras: un tono más claro para que se lean */
.sub-banner h6,
.faq-con:not(.faqpage-con) h6,
.vpsfeature-con h6,
.guarantee-con:not(.vpsguarantee-con):not(.guarantee2-con) h6,
.support-con h6,
.domain-con h6,
.popular-con h6,
.post-con h6,
.contactform-con h6 { color: #c3a1ff; }


/* =====================================================================================
   5. RESTOS DE LA DEMO QUE SE OCULTAN
   Iconos de carrito y de buscador de la cabecera (y su buscador a pantalla completa) y el
   desplegable «Home 1/2/3». El menú real lo pinta el loader en [data-menu="header"]; esto
   sólo tapa lo que el HTML de fábrica (plan B) pudiera conservar.
   ===================================================================================== */
.other_list .other_list_item .cart,
.other_list .other_list_item .search,
#search { display: none !important; }
/* también su envoltorio, para no dejar el hueco del margen */
.other_list .other_list_item:has(> .cart),
.other_list .other_list_item:has(> .search) { display: none !important; }
/* «Home 1/2/3»: el desplegable del primer elemento de la demo y su flecha */
#navbarDropdown1 + .dropdown-menu { display: none !important; }
#navbarDropdown1.dropdown-toggle::after { display: none; }
/* …y el mismo submenú en el menú lateral (drawer) de la demo */
#sidebar-drawer .treeview:first-child > .treeview-menu { display: none !important; }

/* Utilidad por si el loader necesita ocultar algo sin tocar el atributo hidden */
.iw-oculto { display: none !important; }

/* Fundido que el loader puede usar al rotar diapositivas del hero o imágenes del banner */
.iw-fundido { transition: opacity 0.45s ease-in-out; }
.iw-fundido.is-oculto { opacity: 0; }


/* =====================================================================================
   6. MOVIMIENTO REDUCIDO
   Si el usuario pide menos animación en el sistema: sin ticker en marcha, sin AOS,
   sin fundidos ni transiciones largas; todo se ve directamente en su estado final.
   ===================================================================================== */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
    html { scroll-behavior: auto; }
    /* AOS (data-aos): los bloques aparecen ya visibles, sin deslizarse */
    [data-aos] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
    /* Ticker: los mensajes se muestran quietos, uno detrás de otro, y pueden partir línea */
    .site-announcement-bar { white-space: normal; }
    .site-announcement-track {
        animation: none !important;
        transform: none !important;
        padding-left: 16px;
        white-space: normal;
    }
    .site-announcement-item { padding: 2px 16px 2px 0; }
    /* Fundidos del loader y carruseles: sin transición */
    .iw-fundido { transition: none !important; }
    .owl-carousel .owl-stage,
    .owl-carousel .owl-item { transition: none !important; }
}
