@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-*)
     3b. Hero de la portada (selector de productos, diapositivas apiladas)
     3c. Varias ramas (bloque de la portada copiado de la web de Idealored)
     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; }
}


/* =====================================================================================
   3b. HERO DE LA PORTADA (especificación 0008, 10-10-2026)
   section.banner-con.iwh[data-hero]: texto a la izquierda y foto a la derecha. Arriba, el selector
   de productos ([data-hero="tabs"], botones .iwh__pestana con una raya que avanza); debajo, las
   diapositivas apiladas en la misma celda ([data-hero="slides"] > .iwh__diapo, sólo se ve la
   .es-activa), así el bloque mide lo que la más alta y nada salta al cambiar. Ventajas en dos
   columnas sin partir palabras, precio con «Desde» y un solo botón.
   ===================================================================================== */
.banner-con.iwh {
    padding: 40px 0 52px;
    background:
        radial-gradient(circle at 88% 18%, rgba(149, 72, 248, .10), transparent 38%),
        radial-gradient(circle at 6% 92%, rgba(36, 117, 255, .08), transparent 40%),
        #f3f6fb;
    overflow: hidden;
}
.iwh__rejilla { display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr); gap: 56px; align-items: center; }
.iwh__texto { min-width: 0; }

/* Selector de productos */
.iwh__pestanas { display: inline-flex; gap: 4px; padding: 5px; margin-bottom: 22px; border-radius: 14px; background: #fff;
    box-shadow: 0 6px 20px rgba(22, 25, 58, .06); border: 1px solid #e7ebf3; max-width: 100%; }
.iwh__pestanas[hidden] { display: none; }
.iwh__pestana { position: relative; overflow: hidden; display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px;
    border-radius: 10px; border: 0; background: transparent; color: #5b6475; font-size: 14.5px; font-weight: 600; line-height: 1.2;
    cursor: pointer; white-space: nowrap; transition: color .2s ease, background-color .2s ease; }
.iwh__pestana i { font-size: 13px; color: #9aa3b5; transition: color .2s ease; }
.iwh__pestana:hover { color: #16193a; }
.iwh__pestana:focus-visible { outline: 2px solid #2475ff; outline-offset: 2px; }
.iwh__pestana.es-activa { background: #eef4ff; color: #2475ff; }
.iwh__pestana.es-activa i { color: #2475ff; }
.iwh__pestana::after { content: ''; position: absolute; left: 10px; bottom: 4px; height: 2px; width: 0; border-radius: 2px;
    background: linear-gradient(90deg, #2475ff, #9548f8); }
.iwh__pestana.es-activa::after { animation: iwh-avance var(--iwh-tiempo, 7s) linear forwards; }
.iwh.esta-parado .iwh__pestana.es-activa::after { animation-play-state: paused; }
.iwh.esta-quieto .iwh__pestana::after { display: none; }
@keyframes iwh-avance { to { width: calc(100% - 20px); } }

/* Diapositivas apiladas */
.iwh__diapos { display: grid; grid-template-columns: minmax(0, 1fr); }
/* Columna con el precio y el botón abajo del todo: el botón está siempre a la misma altura y, si una diapositiva
   es más corta (p. ej. sin precio), el aire queda encima de él y no debajo */
.iwh__diapo { grid-area: 1 / 1; display: flex; flex-direction: column; opacity: 0; visibility: hidden; transform: translateY(8px);
    transition: opacity .45s ease, transform .45s ease, visibility 0s linear .45s; }
.iwh__diapo.es-activa { opacity: 1; visibility: visible; transform: none; transition: opacity .45s ease, transform .45s ease; }
.banner-con .iwh__titulo { font-size: clamp(32px, 3.3vw, 48px); line-height: 1.1; letter-spacing: -.02em; font-weight: 800;
    color: #16193a; margin: 0 0 16px; overflow-wrap: normal; }
.iwh__sub { font-size: 18px; line-height: 1.6; color: #5b6475; margin: 0 0 22px; max-width: 34em; }
.iwh__ventajas { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 28px; margin: 0 0 28px; padding: 0; list-style: none; }
.iwh__ventajas li { display: flex; align-items: flex-start; gap: 10px; font-size: 15.5px; line-height: 1.4; font-weight: 600;
    color: #2e2f46; hyphens: none; word-break: normal; overflow-wrap: normal; }
.iwh__ventajas li i { flex: 0 0 22px; width: 22px; height: 22px; border-radius: 50%; background: #2475ff; color: #fff;
    font-size: 11px; display: flex; align-items: center; justify-content: center; margin-top: 1px; }

/* Precio y botón */
.iwh__compra { display: flex; align-items: center; gap: 28px; flex-wrap: wrap; margin-top: auto; }
.iwh__precio { display: flex; flex-direction: column; line-height: 1; }
.iwh__precio small { font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: #8a93a6; margin-bottom: 6px; }
.iwh__precio strong { font-size: 40px; font-weight: 800; color: #16193a; letter-spacing: -.02em; white-space: nowrap; }
.iwh__precio strong span { font-size: 16px; font-weight: 600; color: #8a93a6; letter-spacing: 0; margin-left: 2px; }
.iwh__separador { width: 1px; align-self: stretch; background: #dde3ee; }
.iwh__boton { display: inline-flex; align-items: center; gap: 10px; padding: 17px 30px; border-radius: 12px; color: #fff !important;
    font-size: 16px; font-weight: 700; line-height: 1.2; text-decoration: none !important; background: linear-gradient(90deg, #2475ff, #6b5cff);
    box-shadow: 0 12px 28px rgba(36, 117, 255, .28); transition: transform .2s ease, box-shadow .2s ease; }
.iwh__boton:hover { transform: translateY(-2px); box-shadow: 0 16px 34px rgba(36, 117, 255, .36); }
.iwh__boton i { font-size: 14px; transition: transform .2s ease; }
.iwh__boton:hover i { transform: translateX(3px); }
.iwh__confianza { display: flex; flex-wrap: wrap; gap: 6px 20px; margin-top: 20px; font-size: 14px; color: #5b6475; }
.iwh__confianza span { display: inline-flex; align-items: center; gap: 7px; }
.iwh__confianza i { color: #22a06b; }

/* Foto a la derecha, con la forma redondeada de la plantilla y el círculo morado */
.iwh__imagen { position: relative; justify-self: center; }
.iwh__imagen .iwh__foto { display: block; width: 100%; height: auto; max-width: 360px; border-radius: 220px; border: 6px solid #fff;
    box-shadow: 0 30px 60px rgba(22, 25, 58, .14); transition: opacity .3s ease; }
.iwh__circulo { position: absolute; top: 4px; left: -10px; width: 112px; height: 112px; border-radius: 50%; border: 5px solid #fff;
    background: #9548f8; display: flex; align-items: center; justify-content: center; box-shadow: 0 14px 30px rgba(149, 72, 248, .35); }
.iwh__circulo img { width: 56px; height: 56px; }

@media (max-width: 1199px) {
    .iwh__rejilla { gap: 36px; }
    .iwh__precio strong { font-size: 34px; }
}
@media (max-width: 991px) {
    .banner-con.iwh { padding: 36px 0 44px; }
    .iwh__rejilla { grid-template-columns: minmax(0, 1fr); text-align: center; }
    .iwh__sub { margin-left: auto; margin-right: auto; }
    .iwh__ventajas { max-width: 520px; margin-left: auto; margin-right: auto; text-align: left; }
    .iwh__compra, .iwh__confianza { justify-content: center; }
    .iwh__imagen .iwh__foto { max-width: 300px; }
    .iwh__circulo { width: 84px; height: 84px; left: -6px; }
    .iwh__circulo img { width: 42px; height: 42px; }
}
@media (max-width: 575px) {
    .iwh__pestanas { display: flex; overflow-x: auto; scrollbar-width: none; }
    .iwh__pestanas::-webkit-scrollbar { display: none; }
    .iwh__pestana { flex: 1 0 auto; justify-content: center; padding: 9px 10px; font-size: 13.5px; }
    .iwh__pestana i { display: none; }
    .iwh__ventajas { grid-template-columns: minmax(0, 1fr); gap: 10px; max-width: 320px; }
    .iwh__separador { display: none; }
    .iwh__compra { flex-direction: column; gap: 18px; }
    .iwh__boton { width: 100%; justify-content: center; }
    .iwh__imagen { display: none; }   /* en el móvil, mejor el producto y el botón a mano */
}


/* =====================================================================================
   3c. VARIAS RAMAS (especificación 0009, 16-10-2026)
   section.iw-ramas[data-module="ramas"], en la portada debajo de «Nuestros servicios». Copia del
   bloque «features-2» de la web de Idealored (web-empresa-principal, plantilla blue-theme): fondo
   blanco, la frase centrada en gris claro y seis cajas con el icono de línea gris (su misma fuente,
   Flaticon) a la izquierda y el título y el texto a la derecha. En tableta y móvil, como allí: el
   icono encima y todo centrado. Letras: Poppins para los títulos (la más parecida a su Montserrat)
   y la de la web para el texto, en fino como su Roboto 300.
   ===================================================================================== */
@font-face {
    font-family: "Flaticon Idealored";
    src: url("../webfonts/flaticon-idealored.woff2") format("woff2"), url("../webfonts/flaticon-idealored.woff") format("woff");
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}
.iw-ramas { padding: 100px 0 60px; background-color: #fff; }
.iw-ramas__frase { margin: 0 0 60px; padding: 0 10%; text-align: center; font-size: 20px; line-height: 1.6; font-weight: 300; color: #888; }
.iw-ramas__caja { display: flex; align-items: flex-start; margin-bottom: 40px; }
.iw-ramas__icono { flex: 0 0 auto; margin-top: 2px; color: #757575; font-size: 0; line-height: 1; transition: color .45s ease-in-out; }
.iw-ramas__icono::before { font-family: "Flaticon Idealored"; font-size: 65px; line-height: 1; font-style: normal; font-weight: normal; }
.iw-ramas__icono--server::before { content: "\f15e"; }
.iw-ramas__icono--servers::before { content: "\f194"; }
.iw-ramas__icono--radio::before { content: "\f158"; }
.iw-ramas__icono--diseno::before { content: "\f1c9"; }
.iw-ramas__icono--software::before { content: "\f1eb"; }
.iw-ramas__icono--soporte::before { content: "\f15b"; }
.iw-ramas__texto { padding-left: 20px; }
.iw-ramas__texto h5 { margin: 0 0 12px; font-family: "Poppins", sans-serif; font-size: 20px; line-height: 1.3; font-weight: 700;
    letter-spacing: -.25px; color: #222; }
.iw-ramas__texto p { margin: 0; font-size: 17px; line-height: 1.6; font-weight: 300; color: #757575; }

@media (min-width: 992px) and (max-width: 1199.95px) {
    .iw-ramas__icono::before { font-size: 58px; }
    .iw-ramas__texto h5 { font-size: 19px; }
    .iw-ramas__texto p { font-size: 16.4px; }
}
@media (max-width: 991.95px) {
    .iw-ramas { padding: 80px 0 40px; }
    .iw-ramas__frase { margin-bottom: 50px; padding: 0 6%; font-size: 18px; }
    .iw-ramas__caja { flex-direction: column; align-items: center; padding: 0 8%; text-align: center; }
    .iw-ramas__icono { margin: 0 0 25px; }
    .iw-ramas__texto { padding-left: 0; }
}
@media (max-width: 767px) {
    .iw-ramas { padding: 60px 0 30px; }
    .iw-ramas__frase { margin-bottom: 40px; padding: 0; }
    .iw-ramas__caja { padding: 0 5%; }
}


/* =====================================================================================
   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; }
    /* Hero: el cambio de diapositiva es directo y sin raya de progreso (tampoco cambia sola) */
    .iwh__diapo { transform: none !important; }
    .iwh__pestana::after { display: none; }
    /* Fundidos del loader y carruseles: sin transición */
    .iw-fundido { transition: none !important; }
    .owl-carousel .owl-stage,
    .owl-carousel .owl-item { transition: none !important; }
}
