
/* ══ Netebu · carrito, configuracion y pago ════════════════════ */
#order-standard_cart{
  --nb-blue:#4A90D9; --nb-violet:#7B5CF6; --nb-pink:#E84098;
  --nb-grad:linear-gradient(135deg,#4A90D9 0%,#7B5CF6 50%,#E84098 100%);
  --nb-grad-suave:linear-gradient(135deg,rgba(74,144,217,0.16) 0%,rgba(123,92,246,0.16) 50%,rgba(232,64,152,0.16) 100%);
  --nb-ink:#14111F; --nb-ink-2:#4C4560; --nb-ink-3:#726C85;
  --nb-line:#E9E4F3; --nb-line-2:#D8D0EC;
  --nb-paper:#FFFFFF; --nb-paper-2:#FAF8FE;
  --nb-violet-aa:#6B48F2; --nb-ok:#116B47; --nb-no:#C4453F;
  --nb-ff-d:"Outfit",system-ui,-apple-system,sans-serif;
  --nb-ff-b:"Figtree",system-ui,-apple-system,sans-serif;
  font-family:var(--nb-ff-b);
}
/* Croster declara h1..h4{color:#211b65} sobre el elemento */
#order-standard_cart h1,#order-standard_cart h2,
#order-standard_cart h3,#order-standard_cart h4{
  font-family:var(--nb-ff-d) !important; color:var(--nb-ink) !important;
  letter-spacing:-0.022em;
}

/* ── cabecera y migas ─────────────────────────────────────── */
#order-standard_cart .header-lined{
  border-bottom:1px solid var(--nb-line) !important;
  padding-bottom:18px; margin-bottom:30px !important;
}
#order-standard_cart .header-lined h1,
#order-standard_cart .header-lined h2{font-weight:700 !important}
#order-standard_cart .header-lined span,
#order-standard_cart .header-lined p{color:var(--nb-ink-3) !important}
#order-standard_cart .header-lined .breadcrumb li a{color:var(--nb-ink-3) !important}
#order-standard_cart .header-lined .breadcrumb li a:hover{color:var(--nb-violet-aa) !important}
#order-standard_cart .header-lined .breadcrumb li.active{
  color:var(--nb-ink-2) !important; font-weight:500;
}

/* ── carrito vacio ────────────────────────────────────────── */
/* El icono del tema es `fad` = FontAwesome Duotone, que se dibuja
   con DOS capas de pseudoelementos (:before opacity 0.4, :after
   opacity 1). Un `background-clip:text` sobre el <i> las funde en
   una mancha solida, porque el fondo no se hereda al pseudoelemento.
   Se apaga la fuente y se dibuja el carrito con una mascara SVG.   */
#order-standard_cart .alert-lg.no-data{
  background:var(--nb-paper) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:20px !important;
  padding:52px 32px 44px !important;
  max-width:640px; margin:8px auto 48px !important; text-align:center;
  box-shadow:0 1px 2px rgba(20,17,31,0.05), 0 22px 50px -28px rgba(20,17,31,0.22);
}
#order-standard_cart .alert-lg.no-data .icon{
  width:92px; height:92px; margin:0 auto 26px;
  border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:var(--nb-grad-suave);
  box-shadow:inset 0 0 0 1px rgba(123,92,246,0.18);
}
#order-standard_cart .alert-lg.no-data .icon i{
  display:block; width:42px; height:42px;
  font-size:0 !important; color:transparent !important;
  background:var(--nb-grad);
  -webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27M3.4%203.4h2.3l2.6%2011.4h9.9l2.4-7.7H7.2%27%2F%3E%3Ccircle%20cx%3D%2710.4%27%20cy%3D%2719.4%27%20r%3D%271.5%27%2F%3E%3Ccircle%20cx%3D%2718%27%20cy%3D%2719.4%27%20r%3D%271.5%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
  mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27M3.4%203.4h2.3l2.6%2011.4h9.9l2.4-7.7H7.2%27%2F%3E%3Ccircle%20cx%3D%2710.4%27%20cy%3D%2719.4%27%20r%3D%271.5%27%2F%3E%3Ccircle%20cx%3D%2718%27%20cy%3D%2719.4%27%20r%3D%271.5%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
}
#order-standard_cart .alert-lg.no-data .icon i:before,
#order-standard_cart .alert-lg.no-data .icon i:after{content:none !important}
#order-standard_cart .alert-lg.no-data h4{
  font-weight:700 !important; font-size:1.5rem !important;
  margin:0 0 8px !important; letter-spacing:-0.025em;
}
#order-standard_cart .alert-lg.no-data .nb-sub{
  color:var(--nb-ink-3); font-size:0.98rem; margin:0 0 26px;
  font-family:var(--nb-ff-b);
}
/* aqui el boton de seguir comprando SI es la accion principal */
#order-standard_cart .alert-lg.no-data #continueShopping{
  background:var(--nb-grad) !important; border:0 !important; color:#fff !important;
  padding:13px 30px !important; font-size:1rem !important;
  box-shadow:0 12px 28px -12px rgba(123,92,246,0.55);
}
#order-standard_cart .alert-lg.no-data #continueShopping:hover{
  transform:translateY(-2px); color:#fff !important;
  box-shadow:0 18px 34px -14px rgba(123,92,246,0.66);
}

/* accesos rapidos, anadidos por el script del final */
#order-standard_cart .nb-atajos{margin-top:34px}
#order-standard_cart .nb-atajos .nb-atajos-tit{
  display:block; position:relative; margin-bottom:20px;
  font-family:var(--nb-ff-d); font-weight:600; font-size:0.78rem;
  letter-spacing:0.14em; text-transform:uppercase; color:var(--nb-ink-3);
}
#order-standard_cart .nb-atajos .nb-atajos-tit:before,
#order-standard_cart .nb-atajos .nb-atajos-tit:after{
  content:""; position:absolute; top:50%; width:calc(50% - 92px); height:1px;
  background:var(--nb-line-2);
}
#order-standard_cart .nb-atajos .nb-atajos-tit:before{left:0}
#order-standard_cart .nb-atajos .nb-atajos-tit:after{right:0}
#order-standard_cart .nb-atajos-grid{
  display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:12px;
}
#order-standard_cart .nb-atajos-grid a{
  display:flex; flex-direction:column; align-items:center; gap:9px;
  padding:18px 8px; border-radius:14px; text-decoration:none;
  border:1px solid var(--nb-line); background:var(--nb-paper-2);
  font-family:var(--nb-ff-d); font-weight:600; font-size:0.86rem;
  color:var(--nb-ink); line-height:1.25;
  transition:border-color 0.22s ease, transform 0.22s ease, box-shadow 0.22s ease;
}
#order-standard_cart .nb-atajos-grid a:hover{
  border-color:var(--nb-violet); transform:translateY(-3px);
  box-shadow:0 14px 28px -18px rgba(123,92,246,0.55);
  color:var(--nb-ink);
}
#order-standard_cart .nb-atajos-grid a i{
  width:26px; height:26px; display:block; background:var(--nb-grad);
}
#order-standard_cart .nb-atajos-grid a[data-nb="dominio"] i{
  -webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Ccircle%20cx%3D%2712%27%20cy%3D%2712%27%20r%3D%279%27%2F%3E%3Cpath%20d%3D%27M3%2012h18%27%2F%3E%3Cpath%20d%3D%27M12%203a15%2015%200%200%201%200%2018a15%2015%200%200%201%200-18z%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
  mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Ccircle%20cx%3D%2712%27%20cy%3D%2712%27%20r%3D%279%27%2F%3E%3Cpath%20d%3D%27M3%2012h18%27%2F%3E%3Cpath%20d%3D%27M12%203a15%2015%200%200%201%200%2018a15%2015%200%200%201%200-18z%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
}
#order-standard_cart .nb-atajos-grid a[data-nb="hosting"] i{
  -webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27M7%2017.6C4.7%2017.6%203%2015.8%203%2013.6C3%2011.7%204.4%2010%206.2%209.7C6.7%207%209.1%205%2012%205C15.1%205%2017.7%207.4%2017.9%2010.5C19.7%2010.9%2021%2012.5%2021%2014.4C21%2016.2%2019.6%2017.6%2017.8%2017.6Z%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
  mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Cpath%20d%3D%27M7%2017.6C4.7%2017.6%203%2015.8%203%2013.6C3%2011.7%204.4%2010%206.2%209.7C6.7%207%209.1%205%2012%205C15.1%205%2017.7%207.4%2017.9%2010.5C19.7%2010.9%2021%2012.5%2021%2014.4C21%2016.2%2019.6%2017.6%2017.8%2017.6Z%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
}
#order-standard_cart .nb-atajos-grid a[data-nb="vps"] i{
  -webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%273%27%20y%3D%274%27%20width%3D%2718%27%20height%3D%276.4%27%20rx%3D%271.6%27%2F%3E%3Crect%20x%3D%273%27%20y%3D%2713.6%27%20width%3D%2718%27%20height%3D%276.4%27%20rx%3D%271.6%27%2F%3E%3Cpath%20d%3D%27M6.6%207.2h.01M6.6%2016.8h.01%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
  mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%273%27%20y%3D%274%27%20width%3D%2718%27%20height%3D%276.4%27%20rx%3D%271.6%27%2F%3E%3Crect%20x%3D%273%27%20y%3D%2713.6%27%20width%3D%2718%27%20height%3D%276.4%27%20rx%3D%271.6%27%2F%3E%3Cpath%20d%3D%27M6.6%207.2h.01M6.6%2016.8h.01%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
}
#order-standard_cart .nb-atajos-grid a[data-nb="ssl"] i{
  -webkit-mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%274.2%27%20y%3D%2710.4%27%20width%3D%2715.6%27%20height%3D%2710%27%20rx%3D%272.2%27%2F%3E%3Cpath%20d%3D%27M8.2%2010.4V7.6a3.8%203.8%200%200%201%207.6%200v2.8%27%2F%3E%3Cpath%20d%3D%27M12%2014.4v2.2%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
  mask:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2024%2024%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.7%27%20stroke-linecap%3D%27round%27%20stroke-linejoin%3D%27round%27%3E%3Crect%20x%3D%274.2%27%20y%3D%2710.4%27%20width%3D%2715.6%27%20height%3D%2710%27%20rx%3D%272.2%27%2F%3E%3Cpath%20d%3D%27M8.2%2010.4V7.6a3.8%203.8%200%200%201%207.6%200v2.8%27%2F%3E%3Cpath%20d%3D%27M12%2014.4v2.2%27%2F%3E%3C%2Fsvg%3E") no-repeat center/contain;
}
@media (max-width:560px){
  #order-standard_cart .alert-lg.no-data{padding:40px 20px 34px !important}
  #order-standard_cart .nb-atajos-grid{grid-template-columns:repeat(2, minmax(0,1fr))}
  #order-standard_cart .nb-atajos .nb-atajos-tit:before,
  #order-standard_cart .nb-atajos .nb-atajos-tit:after{width:calc(50% - 92px)}
}

/* ── la tarjeta de cada linea del carrito ─────────────────── */
/* Es .panel-body, no .item-group. El tema le pone borde #d5dce5,
   radio 4px y una sombra azulada; se sustituye entera.          */
#order-standard_cart .cart-item .panel-body{
  border:1px solid var(--nb-line) !important;
  border-radius:14px !important;
  margin-bottom:14px !important;
  background:var(--nb-paper);
  box-shadow:0 1px 2px rgba(20,17,31,0.04), 0 10px 26px -20px rgba(20,17,31,0.18) !important;
  transition:border-color 0.24s ease, box-shadow 0.24s ease;
}
#order-standard_cart .cart-item .panel-body:hover{
  border-color:var(--nb-line-2) !important;
  box-shadow:0 2px 4px rgba(20,17,31,0.05), 0 16px 34px -20px rgba(90,60,200,0.26) !important;
}
#order-standard_cart .cart-item .panel-footer{
  border:1px solid var(--nb-line) !important;
  border-radius:14px !important;
  background:var(--nb-paper-2) !important;
}
/* los separadores internos son pseudoelementos, no bordes */
#order-standard_cart .cart-item .item-price:after,
#order-standard_cart .cart-item .item-qty:after{
  background-color:var(--nb-line) !important;
}
#order-standard_cart .cart-item .item-title{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  color:var(--nb-ink) !important; font-size:1.06rem !important;
  line-height:1.35;
}
#order-standard_cart .cart-item .item-title a{color:var(--nb-ink) !important}
/* el tema lo pinta con su morado #8f1faf !important */
#order-standard_cart .cart-item .item-domain{
  color:var(--nb-violet-aa) !important;
  font-family:var(--nb-ff-b) !important; font-weight:500 !important;
  font-size:0.9rem !important;
}
#order-standard_cart .cart-item .item-price strong,
#order-standard_cart .cart-item .item-price .strong,
#order-standard_cart .cart-item .addon-item-price strong{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  color:var(--nb-ink) !important; font-size:1.1rem;
  font-variant-numeric:tabular-nums;
}
#order-standard_cart .cart-item .cycle,
#order-standard_cart .cart-item .renewal,
#order-standard_cart .cart-item .renewal-price,
#order-standard_cart .cart-item .item-setup{
  font-family:var(--nb-ff-b) !important; font-weight:400 !important;
  color:var(--nb-ink-3) !important;
}
/* la etiqueta gris de cada addon: el tema la deja en #999 */
#order-standard_cart .cart-item .item-group,
#order-standard_cart .cart-item .addon-item-group{
  color:var(--nb-ink-3) !important; font-family:var(--nb-ff-b);
}
#order-standard_cart .cart-item .item-name,
#order-standard_cart .cart-item .addon-item-title{color:var(--nb-ink-2) !important}
#order-standard_cart .cart-item .item-addons .prod-addons-container{
  border-left:2px solid var(--nb-line-2) !important;
}
#order-standard_cart .cart-item .item-qty .form-control,
#order-standard_cart .cart-item .addon-item-qty .form-control{
  border:1px solid var(--nb-line-2) !important; border-radius:8px !important;
  font-family:var(--nb-ff-d); font-weight:600; text-align:center;
  color:var(--nb-ink) !important;
}

/* ══ EL SUMARIO SE PEGA SOLO, SIN PLUGIN ═══════════════════════
   El tema monta el resumen del pedido con `jquery.sticky-sidebar`,
   un plugin que va alternando `position` entre `relative` y `fixed`
   desde JavaScript. Medido bajando la pantalla de cien en cien:

     scroll    0 → relative, top  460
     scroll  200 → FIXED,    top   90
     scroll  400 → relative, top  325     ← el salto
     scroll 1000 → relative, top  -68     ← medio fuera por arriba

   Y no es que el plugin este roto: es que le han pedido algo
   imposible. Arranca con `topSpacing:90` y `bottomSpacing:90` dentro
   de `.ajaxcart_cont`, y ese contenedor mide 594 px mientras el
   sumario mide 475. Con los dos margenes hacen falta 655. Como no
   cabe, el plugin entra y sale del estado pegado en cada scroll.

   `position:sticky` es exactamente esta funcion, pero resuelta por el
   navegador: se pega al llegar a su tope, se suelta cuando su
   contenedor termina, y no hay estado intermedio en el que dudar. Sin
   saltos, sin JavaScript, y si algun dia la columna de la izquierda
   crece —otro complemento mas— el recorrido crece solo.

   Va con `!important` porque el plugin sigue escribiendo `position`,
   `top`, `width` y `left` en el atributo `style`, y eso solo se gana
   asi. `top:96px` deja sitio a la barra de navegacion, que es fija:
   con menos, el titulo del sumario quedaba debajo de ella.
   Solo de 992 para arriba, que es donde el plugin se activaba y donde
   hay dos columnas; por debajo el sumario va en su sitio, apilado. */
/* Y ESTO ES LO QUE HACIA QUE EL `sticky` NO SE ENGANCHARA.
   El tema declara `body{overflow-x:hidden}` para que nada se salga por
   los lados. Pero el CSS no deja que un eje sea `hidden` y el otro
   `visible`: al poner uno, el navegador convierte el otro en `auto`, y
   con eso EL BODY PASA A SER UN CONTENEDOR DE SCROLL. Un elemento
   `sticky` se pega respecto a su contenedor de scroll mas cercano, asi
   que se quedaba pegado a un contenedor que no es el que se mueve, y
   el resultado era que bajaba con la pagina como si no tuviera nada.
   Medido: top 460 → 260 → 60 → -240, en linea recta.

   `clip` recorta exactamente igual que `hidden` —nada se sale por los
   lados— pero NO crea contenedor de scroll, asi que el otro eje puede
   seguir siendo `visible` y el `sticky` vuelve a mirar al documento.

   Acotado al carrito con `:has()`: el resto del sitio se queda con su
   `hidden` de siempre, que ahi no estorba a nadie. */
@media (min-width:992px){
  body:has(#order-standard_cart){
    overflow-x:clip !important;
    overflow-y:visible !important;
  }
  /* Y EL PADRE DEL `sticky` TIENE QUE SER MAS ALTO QUE EL, o no hay
     nada que hacer. `#sidebar` medía 475 px, exactamente lo mismo que
     el sumario que lleva dentro: un elemento pegajoso solo se desliza
     DENTRO de su padre, y con un padre de su mismo tamaño no le queda
     un pixel por donde moverse. Se quedaba quieto y bajaba con la
     pagina como si no tuviera la propiedad puesta.
     Quien sí es alta es la columna, `.col-lg-4`, que se estira a lo que
     mida la fila —594 px aquí, y mas cuando el producto trae mas
     complementos—. Estirando `#sidebar` a esa altura, el sumario
     recupera su recorrido. */
  #order-standard_cart #sidebar{
    height:100% !important;
    align-self:stretch !important;
  }
  #order-standard_cart .col-lg-4 > #sidebar,
  #order-standard_cart [class*="col-"] > #sidebar{
    display:block !important;
  }
  #order-standard_cart .sidebar__inner{
    position:sticky !important;
    top:96px !important;
    left:auto !important; right:auto !important; bottom:auto !important;
    width:auto !important; max-width:none !important;
    transform:none !important;
  }
}

/* ── resumen lateral ──────────────────────────────────────── */
#order-standard_cart .cartsummary,
#order-standard_cart .order-summary{border:0 !important; background:transparent !important}
/* el tema la deja gris azulada #edf0f5 con borde #d5dce5 */
#order-standard_cart .summary-container-outer{
  background:var(--nb-paper) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:16px !important; padding:20px !important;
  box-shadow:0 1px 2px rgba(20,17,31,0.05), 0 14px 36px -20px rgba(20,17,31,0.16);
}
#order-standard_cart .order-summary h2{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  font-size:1.14rem !important; padding:0 0 13px !important;
  border-bottom:1px solid var(--nb-line); margin:0 0 12px !important;
}
#order-standard_cart .order-summary .product-name{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  color:var(--nb-ink) !important; font-size:1.3em !important;
  letter-spacing:-0.02em;
}
#order-standard_cart .order-summary .product-group{
  color:var(--nb-ink-3) !important; font-size:0.86em;
}
#order-standard_cart .cart-summry-list .list-item{
  font-family:var(--nb-ff-b); padding:4px 0 !important;
  color:var(--nb-ink-2) !important;
}
#order-standard_cart .cart-summry-list .list-item.list-item-title{
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  color:var(--nb-ink) !important;
}
#order-standard_cart .cart-summry-list .list-item .item-value{
  font-family:var(--nb-ff-d); font-weight:600;
  color:var(--nb-ink) !important; font-variant-numeric:tabular-nums;
}
/* el tema ya trae border-bottom en estas: aqui solo se tine */
#order-standard_cart .order-summary .subtotal,
#order-standard_cart .order-summary .bordered-totals{
  border-bottom-color:var(--nb-line) !important;
}
#order-standard_cart .order-summary .subtotal{
  font-family:var(--nb-ff-d); font-weight:600; color:var(--nb-ink) !important;
}
#order-standard_cart .order-summary .summary-totals{
  border-top-color:var(--nb-line) !important;
  border-bottom-color:var(--nb-line) !important;
}
#order-standard_cart .order-summary .recurring-charges{color:var(--nb-ink-3) !important}
/* el total, que es lo que la gente mira. El tema le da 3em: se
   conserva la escala y se le pone el degradado de marca.        */
#order-standard_cart .order-summary .total-due-today,
#order-standard_cart .order-summary .total-due-today-padded{
  border-top:2px solid var(--nb-line-2) !important;
  margin-top:12px !important; padding-top:14px !important;
}
#order-standard_cart .order-summary .total-due-today .amt,
#order-standard_cart .order-summary .total-due-today-padded .amt{
  display:inline-block !important;
  font-family:var(--nb-ff-d) !important; font-weight:800 !important;
  font-size:2.6em !important; line-height:1.1 !important;
  letter-spacing:-0.032em; font-variant-numeric:tabular-nums;
  background:var(--nb-grad); -webkit-background-clip:text;
  background-clip:text; -webkit-text-fill-color:transparent; color:transparent;
}
/* las etiquetas del total mantienen su 14px: solo cambian de voz */
#order-standard_cart .order-summary .total-due-today span:not(.amt),
#order-standard_cart .order-summary .total-due-today-padded span:not(.amt){
  font-family:var(--nb-ff-d); font-weight:600; color:var(--nb-ink-2) !important;
  letter-spacing:0.01em;
}

/* ══ configuracion del pedido ═══════════════════════════════ */
/* El resumen de arriba: el tema lo pinta con el azul #058 de WHMCS */
#order-standard_cart .view-cart-items-header{
  background:var(--nb-grad) !important; color:#fff !important;
  background-clip:padding-box; -webkit-background-clip:padding-box;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  padding:11px 18px !important; border-radius:14px 14px 0 0 !important;
  font-size:0.86rem !important; letter-spacing:0.04em;
}
#order-standard_cart .view-cart-items{
  border:1px solid var(--nb-line) !important; border-top:0 !important;
  border-radius:0 0 14px 14px !important; overflow:hidden;
  margin:0 0 26px 0 !important;
}
#order-standard_cart .view-cart-items .item{
  background-color:var(--nb-paper) !important;
  border-bottom:1px solid var(--nb-line) !important;
  padding:14px 18px !important;
}
#order-standard_cart .view-cart-items .item:nth-child(even){
  background-color:var(--nb-paper-2) !important;
}
#order-standard_cart .view-cart-items .item:last-child{border-bottom:0 !important}
#order-standard_cart .view-cart-items .item-title{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  color:var(--nb-ink) !important; font-size:1.35em !important;
  letter-spacing:-0.02em;
}
#order-standard_cart .view-cart-items .item-domain{color:var(--nb-violet-aa) !important}
#order-standard_cart .view-cart-items .item-group{
  color:var(--nb-ink-3) !important; font-size:1em !important;
}
#order-standard_cart .view-cart-items .item-price span{
  font-family:var(--nb-ff-d); font-weight:700; color:var(--nb-ink) !important;
  font-variant-numeric:tabular-nums;
}
#order-standard_cart .view-cart-items .item-price .cycle{
  font-family:var(--nb-ff-b); font-weight:400; color:var(--nb-ink-3) !important;
}
#order-standard_cart .view-cart-items .item-qty input{
  border:1px solid var(--nb-line-2) !important; border-radius:8px !important;
  font-family:var(--nb-ff-d); font-weight:600;
}

/* el separador con etiqueta ("Ciclo de facturacion", "Extras"...) */
/* la linea de fondo del separador: el tema la degrada a negro */
#order-standard_cart .sub-heading:before{
  background:linear-gradient(to right,rgba(233,228,243,0),var(--nb-line-2),rgba(233,228,243,0)) !important;
}
#order-standard_cart .sub-heading span{
  background:var(--nb-paper) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:999px !important; padding:4px 16px !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  color:var(--nb-ink) !important; font-size:0.86rem;
  letter-spacing:0.02em;
}

/* las opciones seleccionables: ciclo de facturacion y extras.
   El tema las deja grises (#edf0f5) y marca la elegida con su
   morado propio #8f1faf.                                        */
#order-standard_cart .cros-checkbox + span.pcb,
#order-standard_cart .nocheck + span.pcb,
#order-standard_cart .no-radio + span.pcb{
  border:1.5px solid var(--nb-line) !important;
  background-color:var(--nb-paper) !important;
  border-radius:12px !important;
  transition:border-color 0.22s ease, box-shadow 0.22s ease, transform 0.22s ease;
}
#order-standard_cart .cros-checkbox + span.pcb:hover,
#order-standard_cart .nocheck + span.pcb:hover,
#order-standard_cart .no-radio + span.pcb:hover{
  border-color:var(--nb-line-2) !important;
  box-shadow:0 8px 22px -16px rgba(20,17,31,0.28);
}
#order-standard_cart .cros-checkbox:checked + span.pcb,
#order-standard_cart .nocheck:checked + span.pcb,
#order-standard_cart .no-radio:checked + span.pcb{
  border:1.5px solid var(--nb-violet) !important;
  background-color:rgba(123,92,246,0.06) !important;
  box-shadow:0 10px 26px -18px rgba(123,92,246,0.5) !important;
}
#order-standard_cart .pcb .c-name{
  color:var(--nb-ink) !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
}
#order-standard_cart .pcb .addons{color:var(--nb-ink) !important; font-family:var(--nb-ff-d)}
/* el icono de radio/check que el tema pinta de morado */
#order-standard_cart .pcb .c-name:before,
#order-standard_cart .pcb .addons .addon-name:before{
  color:var(--nb-violet) !important;
}
#order-standard_cart .pcb .c-price{
  font-family:var(--nb-ff-d) !important; font-weight:700 !important;
  color:var(--nb-ink) !important; font-variant-numeric:tabular-nums;
}
#order-standard_cart .pcb .c-price .extra{
  color:var(--nb-ink-3) !important; font-family:var(--nb-ff-b);
}
/* la etiqueta de ahorro: el tema la deja amarillo chillon */
#order-standard_cart .pcb .c-save{
  background-color:var(--nb-ok) !important; color:#fff !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  border-radius:999px !important; padding:3px 9px !important;
  letter-spacing:0.01em;
}

/* las tarjetas de extras */
#order-standard_cart .panel-addon{
  border:1.5px solid var(--nb-line) !important;
  border-radius:14px !important; background:var(--nb-paper) !important;
  box-shadow:none !important;
  transition:border-color 0.22s ease, box-shadow 0.22s ease;
}
#order-standard_cart .panel-addon:hover{
  border-color:var(--nb-line-2) !important;
  box-shadow:0 10px 26px -18px rgba(20,17,31,0.24) !important;
}
#order-standard_cart .panel-addon.panel-addon-selected{
  border-color:var(--nb-violet) !important;
  background-color:rgba(123,92,246,0.06) !important;
}
#order-standard_cart .panel-addon .panel-body .panel-addon-name{
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  color:var(--nb-ink) !important;
}
#order-standard_cart .panel-addon .panel-body .panel-addon-price{
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  color:var(--nb-violet-aa) !important;
}
#order-standard_cart .panel-addon .panel-body p{color:var(--nb-ink-2) !important}

/* el acordeon de opciones configurables */
#order-standard_cart .accordion .card{
  border:1px solid var(--nb-line) !important; border-radius:14px !important;
  margin-bottom:10px; overflow:hidden;
}
#order-standard_cart .accordion .card .card-header{
  background:var(--nb-paper-2) !important;
  border-bottom:1px solid var(--nb-line) !important;
}
#order-standard_cart .accordion .card .card-header .promo-title .name{
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  color:var(--nb-ink) !important;
}
#order-standard_cart .accordion .card .card-header .promo-icon i{color:var(--nb-violet) !important}
#order-standard_cart .form-actions{border-top:1px solid var(--nb-line) !important}
#order-standard_cart .field-icon i{color:var(--nb-ink-3) !important}

/* ── tarjetas de producto del store (/store/<grupo>) ──────── */
/* Red de seguridad: una imagen de descripcion de producto no debe
   poder desbordar su tarjeta pase lo que pase. Las de Prestashop
   llevaban width="100%", que NO es valido en el atributo HTML de
   <img> (solo admite pixeles), asi que WHMCS lo descartaba al
   sanear y la imagen salia a su tamano natural: 1000 px dentro de
   una tarjeta de 280. El dato se corrige aparte; esto evita que
   vuelva a ocurrir con cualquier otro producto.                  */
/* SOLO `max-width` y `height`. NADA de `display:block` ni margenes
   automaticos: en estas tarjetas tambien hay <img> pequenas en linea
   —los checks verdes de cada caracteristica— y sacarlas del flujo las
   manda a su propia linea centrada. Una regla defensiva no debe
   cambiar la maquetacion de nada.                                  */
#order-standard_cart .cros-pricing-table img:not([src*="check"]){
  max-width:100% !important; height:auto !important;
}
/* Y AL CHECK HAY QUE DARLE SU MEDIDA, no basta con excluirlo.
   `check-green.svg` mide 12x10 px de verdad y en el HTML va SIN
   `width` ni `height`. Un SVG sin dimensiones intrinsecas no se queda
   en su tamano: se estira a lo que le den, y al excluirlo la regla de
   arriba se quedaba ademas sin `max-width`. Medido en
   /store/asesoria-legal: 236x197 px, veinte veces su tamano, un
   tic gigante en mitad de cada tarjeta.
   Se le pone medida y se devuelve a la linea del texto, que es donde
   estaba pensado: la exclusion de arriba existe para que no se le
   apliquen `display:block` ni margenes automaticos, no para dejarlo
   sin medidas. */
#order-standard_cart .cros-pricing-table img[src*="check"]{
  width:14px !important; height:auto !important;
  display:inline !important; vertical-align:-1px;
  margin-right:7px;
}
#order-standard_cart .cros-pricing-table{overflow:hidden}

/* ── cupon de descuento ───────────────────────────────────── */
#order-standard_cart .view-cart-promotion-code .card,
#order-standard_cart .view-cart-promotion-code .panel{
  background:var(--nb-paper-2) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:14px !important; box-shadow:none !important;
}
#order-standard_cart .view-cart-promotion-code .form-control{
  border:1px solid var(--nb-line-2) !important; border-right:0 !important;
  border-radius:10px 0 0 10px !important; height:46px;
  font-family:var(--nb-ff-b);
}
#order-standard_cart .view-cart-promotion-code .form-control:focus{
  border-color:var(--nb-violet) !important; box-shadow:none !important;
}
#order-standard_cart .view-cart-promotion-code .btn{
  border-radius:0 10px 10px 0 !important; height:46px;
}

/* ── botones ──────────────────────────────────────────────── */
#order-standard_cart .btn-primary,
#order-standard_cart .view-cart-gateway-checkout .btn-primary{
  background:var(--nb-grad) !important;
  border:0 !important; color:#fff !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  border-radius:11px !important; padding:12px 26px !important;
  box-shadow:0 10px 26px -12px rgba(123,92,246,0.5);
  transition:transform 0.22s ease, box-shadow 0.22s ease;
}
#order-standard_cart .btn-primary:hover,
#order-standard_cart .btn-primary:focus{
  transform:translateY(-2px); color:#fff !important;
  box-shadow:0 16px 32px -14px rgba(123,92,246,0.62);
}
#order-standard_cart .btn-default{
  background:transparent !important;
  border:1.5px solid var(--nb-line-2) !important;
  color:var(--nb-ink) !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  border-radius:11px !important;
  transition:border-color 0.22s ease, color 0.22s ease;
}
#order-standard_cart .btn-default:hover,
#order-standard_cart .btn-default:focus{
  border-color:var(--nb-violet) !important; color:var(--nb-violet-aa) !important;
  background:transparent !important;
}
/* los iconos pequenos de editar y quitar */
#order-standard_cart .cart-item .btn-icon,
#order-standard_cart .cart-item .btn-xs{
  border-radius:8px !important; border:1px solid var(--nb-line-2) !important;
  background:transparent !important; color:var(--nb-ink-3) !important;
  transition:border-color 0.2s ease, color 0.2s ease;
}
#order-standard_cart .cart-item .btn-icon:hover,
#order-standard_cart .btn-remove-from-cart:hover{
  border-color:var(--nb-no) !important; color:var(--nb-no) !important;
}
#order-standard_cart .order-summary i.fa-trash{color:var(--nb-ink-3)}
#order-standard_cart .order-summary i.fa-trash:hover{color:var(--nb-no)}

/* ── avisos ───────────────────────────────────────────────── */
#order-standard_cart .alert:not(.alert-lg){
  border-radius:12px !important; font-family:var(--nb-ff-b);
  border:1px solid var(--nb-line) !important;
}
#order-standard_cart .alert-success{
  background:rgba(15,146,104,0.09) !important;
  border-color:rgba(15,146,104,0.3) !important; color:#0B6B4D !important;
}
#order-standard_cart .alert-warning{
  background:rgba(176,115,16,0.09) !important;
  border-color:rgba(176,115,16,0.3) !important; color:#7A5210 !important;
}
#order-standard_cart .alert-danger,
#order-standard_cart .errorbox{
  background-color:rgba(196,69,63,0.09) !important;
  border:1px solid rgba(196,69,63,0.3) !important; color:#8E2B27 !important;
  border-radius:12px !important; font-family:var(--nb-ff-b);
}
#order-standard_cart .alert-info{
  background:var(--nb-grad-suave) !important;
  border-color:rgba(123,92,246,0.3) !important; color:var(--nb-ink-2) !important;
}

/* ── formularios del pago ─────────────────────────────────── */
#order-standard_cart .form-control,
#order-standard_cart select.form-control{
  border:1px solid var(--nb-line-2) !important; border-radius:10px !important;
  font-family:var(--nb-ff-b); color:var(--nb-ink) !important;
}
#order-standard_cart .form-control:focus{
  border-color:var(--nb-violet) !important;
  box-shadow:0 0 0 3px rgba(123,92,246,0.14) !important;
}
#order-standard_cart .control-label,
#order-standard_cart label{
  font-family:var(--nb-ff-d); font-weight:600; color:var(--nb-ink-2);
}
#order-standard_cart .panel:not(.cart-item):not(.panel-addon) > .panel-heading{
  background:var(--nb-paper-2) !important;
  border-bottom:1px solid var(--nb-line) !important;
  font-family:var(--nb-ff-d); font-weight:600; color:var(--nb-ink) !important;
}

/* ══ LA TIENDA DE MARKETCONNECT ═════════════════════════════
   Comprar un certificado SSL NO pasa por el formulario de pedido:
   WHMCS sirve esas pantallas con sus propias plantillas de tienda
   —`templates/netebu/store/order.tpl`— y alli NO existe
   `#order-standard_cart`, que es de donde cuelga todo el CSS de
   este fichero. Por eso la pantalla de compra salia entera sin
   tocar, y era la que se veia «antigua» en mitad del proceso.

   Medido con el inspector antes de escribir una linea:

     tipografia   -apple-system  (ni Outfit ni Figtree)
     titulos      #211B65        el azul marino que Croster pone en h1..h4
     TM-card      #EDF0F5 sobre borde #D5DCE5
     pestanas     bordes #DEE2E6, esquinas rectas
     boton        #8F1FAF, el morado que no es de la marca
     promocion    boton NARANJA #FF6600

   La cabecera oscura se la monta `netebu_banner.php`, la misma que
   al carrito, y con ella vuelve la barra en isla: sin cabecera se
   quedaba blanca sobre blanco. Aqui va todo lo demas. */
.store-order-container,
.store-promoted-product{
  --nb-blue:#4A90D9; --nb-violet:#7B5CF6; --nb-pink:#E84098;
  --nb-grad:linear-gradient(135deg,#4A90D9 0%,#7B5CF6 50%,#E84098 100%);
  --nb-ink:#14111F; --nb-ink-2:#4C4560; --nb-ink-3:#726C85;
  --nb-line:#E9E4F3; --nb-line-2:#D8D0EC;
  --nb-paper:#FFFFFF; --nb-paper-2:#FAF8FE;
  --nb-violet-aa:#6B48F2;
  --nb-ff-d:"Outfit",system-ui,-apple-system,sans-serif;
  --nb-ff-b:"Figtree",system-ui,-apple-system,sans-serif;
  font-family:var(--nb-ff-b);
}
.store-order-container{
  max-width:880px; margin-inline:auto !important;
  background:var(--nb-paper); border:1px solid var(--nb-line);
  border-radius:18px; padding:32px 34px 28px;
  box-shadow:0 1px 2px rgba(20,17,31,0.05), 0 12px 32px -14px rgba(20,17,31,0.16);
}
@media (max-width:575px){
  .store-order-container{padding:22px 18px; border-radius:14px}
}
/* Croster declara h1..h4{color:#211b65} sobre el propio elemento */
.store-order-container h2,.store-order-container h3,
.store-order-container h4,.store-order-container h5,
.store-promoted-product h3{
  font-family:var(--nb-ff-d) !important; color:var(--nb-ink) !important;
  font-weight:700 !important; letter-spacing:-0.024em;
}
.store-order-container h4{font-size:1.05rem !important; margin:26px 0 10px !important}
.store-order-container .desc,
.store-order-container p{
  font-family:var(--nb-ff-b) !important; color:var(--nb-ink-2) !important;
  line-height:1.65; font-size:0.97rem;
}
/* la caja del plazo de pago */
.store-order-container .TM-card{
  background:var(--nb-paper-2) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:14px !important; padding:16px !important;
}
.store-order-container select.form-control,
.store-order-container input[type="text"],
.store-order-container input[type="email"],
.store-order-container .form-control{
  height:46px; border:1px solid var(--nb-line-2) !important;
  border-radius:10px !important; background-color:var(--nb-paper) !important;
  font-family:var(--nb-ff-b) !important; color:var(--nb-ink) !important;
  box-shadow:none !important;
}
.store-order-container select.form-control:focus,
.store-order-container .form-control:focus{
  border-color:var(--nb-violet) !important;
  box-shadow:0 0 0 3px rgba(123,92,246,0.18) !important;
}
/* las pestanas de eleccion de dominio */
.store-order-container .nav-tabs{
  border-bottom:0 !important; gap:8px; margin-bottom:12px !important; flex-wrap:wrap;
}
.store-order-container .nav-tabs .nav-link{
  border:1px solid var(--nb-line-2) !important; border-radius:10px !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  font-size:0.92rem !important;
  color:var(--nb-ink-2) !important; background-color:var(--nb-paper) !important;
  padding:9px 16px !important;
  transition:border-color 0.2s ease, color 0.2s ease;
}
.store-order-container .nav-tabs .nav-link:hover{
  border-color:var(--nb-violet) !important; color:var(--nb-violet-aa) !important;
}
.store-order-container .nav-tabs .nav-item.active > .nav-link,
.store-order-container .nav-tabs .nav-link.active{
  background-image:var(--nb-grad) !important; background-color:transparent !important;
  border-color:transparent !important; color:#fff !important;
}
.store-order-container .tab-content{
  border:1px solid var(--nb-line) !important; border-radius:14px !important;
  background:var(--nb-paper-2) !important; padding:18px !important;
}
/* botones */
.store-order-container .btn,
.store-promoted-product .btn{
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  border-radius:12px !important; padding:11px 20px !important;
  transition:transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.store-order-container .btn-primary,
.store-promoted-product .btn-primary{
  background-image:var(--nb-grad) !important; background-color:transparent !important;
  border:0 !important; color:#fff !important;
  box-shadow:0 10px 28px -10px rgba(123,92,246,0.55) !important;
}
.store-order-container .btn-primary:hover,
.store-promoted-product .btn-primary:hover{transform:translateY(-2px)}
.store-order-container .btn-default,
.store-order-container .btn-secondary{
  background:var(--nb-paper) !important; color:var(--nb-ink-2) !important;
  border:1px solid var(--nb-line-2) !important;
}
.store-order-container .btn-default:hover,
.store-order-container .btn-secondary:hover{
  border-color:var(--nb-violet) !important; color:var(--nb-violet-aa) !important;
}
/* la promocion de MarketConnect, que traia su propio naranja */
.store-promoted-product{
  margin-top:28px !important;
  background:var(--nb-paper-2) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:16px !important; overflow:hidden; box-shadow:none !important;
}
.store-promoted-product .card-body{
  background-color:transparent !important; background-image:none !important;
  padding:26px !important;
}
.store-promoted-product .card-footer{
  background:transparent !important;
  border-top:1px solid var(--nb-line) !important;
  padding:16px 26px 22px !important;
}
.store-promoted-product h4,
.store-promoted-product li,
.store-promoted-product p{
  font-family:var(--nb-ff-b) !important; font-weight:400 !important;
  color:var(--nb-ink-2) !important;
}
.store-promoted-product h3{font-size:1.26rem !important; margin-bottom:6px !important}
.store-promoted-product ul{padding-left:0; list-style:none}
.store-promoted-product i{color:var(--nb-violet) !important}
/* Red de seguridad para la ilustracion, sin tocar la maquetacion:
   solo limites, nada de `display` ni margenes automaticos. */
.store-promoted-product img{max-width:100% !important; height:auto !important}

/* ── el listado de productos (/store/<grupo>, cart.php?gid=N) ──
   Las tarjetas venian con el gris azulado del tema —#EDF0F5 de
   fondo y #D5DCE5 de borde— y el precio en el magenta de Croster
   #E42FD2, que se parece al rosa de la marca pero no lo es. */
#order-standard_cart .cros-pricing-table{
  background:var(--nb-paper) !important;
  border:1px solid var(--nb-line) !important;
  border-radius:16px !important;
  color:var(--nb-ink-2) !important;
  transition:border-color 0.24s ease, transform 0.24s ease, box-shadow 0.24s ease;
}
#order-standard_cart .cros-pricing-table:hover{
  border-color:var(--nb-line-2) !important; transform:translateY(-3px);
  box-shadow:0 2px 4px rgba(20,17,31,0.06), 0 26px 56px -24px rgba(90,60,200,0.28) !important;
}
#order-standard_cart .cros-pricing-table .plan-name,
#order-standard_cart .cros-pricing-table h3,
#order-standard_cart .cros-pricing-table h4{
  font-family:var(--nb-ff-d) !important; color:var(--nb-ink) !important;
  font-weight:700 !important; letter-spacing:-0.022em;
}
/* La cifra, con el degradado de la marca. `display:inline-block`
   porque el tema declara `span{display:block}` en este flujo y un
   `background-clip:text` sobre un bloque se estira a todo el ancho. */
#order-standard_cart .cros-pricing-table .cost{
  font-family:var(--nb-ff-d) !important; font-weight:800 !important;
  letter-spacing:-0.03em; font-variant-numeric:tabular-nums;
  display:inline-block;
  background:var(--nb-grad);
  -webkit-background-clip:text; background-clip:text;
  -webkit-text-fill-color:transparent; color:transparent !important;
}
#order-standard_cart .cros-pricing-table .cycle{
  color:var(--nb-ink-3) !important; font-family:var(--nb-ff-b) !important;
}
#order-standard_cart .cros-pricing-table .plan-features,
#order-standard_cart .cros-pricing-table li{
  color:var(--nb-ink-2) !important; font-family:var(--nb-ff-b) !important;
}

/* ── LA REJILLA DE PLANES, CUADRADA ────────────────────────────
   `.row-eq-height` promete lo que no cumple: es un flex con `wrap`,
   e iguala las tarjetas DENTRO de cada linea, nunca entre lineas.
   Con los once productos de /store/hosting a tres por fila, medido a
   1280 px: 1028·3, 1236·3, 1226·3 y 895·2. Hasta 341 px de escalon
   entre una fila y la siguiente.
   `grid-auto-rows:1fr` es lo unico que iguala tambien entre filas.
   Las columnas de Bootstrap se neutralizan (`width:auto`, `flex:none`,
   sin relleno) y el hueco lo pone `gap`, que no se come el relleno
   interior de la tarjeta. Esto ya esta en la skill netebu-design.

   Y el escalon de TABLET: las columnas son `col-xl-4 col-lg-6`, asi
   que solo pasan a dos a partir de 992 px. Entre 768 y 991 se veia
   UNA tarjeta de precios por fila ocupando 751 px de ancho. Se le
   pone su propio escalon a 600. */
/* EL ESCALON DE ESCRITORIO. Croster mete en `.main-content` un
   separador vacio `<div class="space-32 d-none d-lg-block">`: 1 px de
   alto con `margin:32px 0 31px`, o sea 64 px muertos que solo existen
   de `lg` para arriba. Con la barra lateral de categorias al lado el
   efecto es que la columna izquierda arranca en 555 px y la primera
   tarjeta en 654: 99 px de desnivel entre las dos columnas, que es
   justo lo que se ve como «descuadrado» en escritorio.
   Se anula solo aqui, donde hay rejilla de productos al lado. */
#order-standard_cart .main-content > .space-32{
  display:none !important;
}
#order-standard_cart .products > .row.row-eq-height{
  display:grid !important;
  grid-template-columns:repeat(1, minmax(0,1fr));
  /* en una sola columna NO se igualan: no hay nada al lado con lo que
     cuadrar y lo unico que se consigue es alargar el scroll */
  grid-auto-rows:auto;
  gap:22px; margin:0 !important;
}
@media (min-width:600px){
  #order-standard_cart .products > .row.row-eq-height{
    grid-template-columns:repeat(2, minmax(0,1fr));
  }
}
/* `grid-auto-rows` se queda en `auto` A PROPOSITO. Con `1fr` todas las
   filas de la pagina se igualan a la mas alta de TODAS, y aqui los once
   planes van de 895 a 1236 px: las tarjetas cortas quedaban con cientos
   de pixeles muertos debajo. Se probo en produccion y se veia peor que
   el descuadre que venia a arreglar.
   Con `auto` cada fila toma su altura y `stretch` —el valor por defecto
   de grid— iguala las tarjetas DENTRO de esa fila, que es lo que se ve
   de un vistazo. Lo que alinea el interior no es esto, sino el JS que
   iguala titulo, precio y descripcion fila por fila. */
@media (min-width:1200px){
  #order-standard_cart .products > .row.row-eq-height{
    grid-template-columns:repeat(3, minmax(0,1fr));
  }
}
#order-standard_cart .products > .row.row-eq-height > [class*="col-"]{
  width:auto !important; max-width:none !important; flex:none !important;
  padding:0 !important; display:flex;
}
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table{
  width:100%; height:100%; display:flex; flex-direction:column;
  /* Croster le da `margin-top:35px` para separar las tarjetas cuando
     iban en flex. Con `gap` ese margen sobra, y ademas hundia la
     primera fila: sumado al `margin:10px` de `.products` dejaba la
     tarjeta 45 px por debajo de la barra lateral de categorias. */
  margin-top:0 !important;
}
#order-standard_cart .products{ margin-top:0 !important }

/* ── EL MENU DE CATEGORIAS DE MOVIL Y TABLET ───────────────────
   Por debajo de `lg` la barra lateral se esconde y Croster la
   sustituye por `.TM-categories-options`: un `<select name="gid">` de
   trece opciones mejorado con select2. Venia SIN vestir —sin borde,
   sin fondo, sin esquinas y con el azul marino `#211b65` del tema—,
   asi que en tablet no se parecia a ningun otro campo del sitio.
   Se viste solo el campo cerrado, que es lo que se ve: el desplegable
   abierto lo saca select2 al final del `<body>`, fuera de este
   contenedor, y estilarlo obligaria a reglas globales que alcanzarian
   a los demas select2 del area de cliente. */
#order-standard_cart .TM-categories-options .select2-container{
  width:100% !important;
}
#order-standard_cart .TM-categories-options .select2-container--default .select2-selection--single{
  height:46px !important;
  background:var(--nb-paper) !important;
  border:1px solid var(--nb-line-2) !important;
  border-radius:11px !important;
  display:flex; align-items:center; padding:0 14px !important;
  transition:border-color 0.2s ease, box-shadow 0.2s ease;
}
#order-standard_cart .TM-categories-options .select2-container--open .select2-selection--single,
#order-standard_cart .TM-categories-options .select2-container--default .select2-selection--single:focus{
  border-color:var(--nb-violet) !important;
  box-shadow:0 0 0 3px rgba(123,92,246,0.14) !important;
}
#order-standard_cart .TM-categories-options .select2-selection__rendered{
  font-family:var(--nb-ff-b) !important; font-size:0.95rem !important;
  color:var(--nb-ink-2) !important; line-height:1.3 !important;
  padding:0 !important;
}
#order-standard_cart .TM-categories-options .select2-selection__arrow{
  height:44px !important; right:10px !important;
}
#order-standard_cart .TM-categories-options .select2-selection__arrow b{
  border-top-color:var(--nb-ink-3) !important;
}
/* EL MISMO ORDEN EN LAS NUEVE CATEGORIAS. El listado usa la misma
   tarjeta para todo, pero el orden de sus bloques lo decide cada
   producto y no coincide:
     hosting, asesoria …  h4 · precio · boton · caracteristicas
     NBX, dedicados …     h4 · DESCRIPCION · precio · boton · carac.
   En las unidades NBX esa `.desc` mide 288 px, asi que «Pedir Ahora»
   quedaba a 907 px de alto cuando en hosting estaba a 595: el mismo
   boton, en el mismo sitio de la pagina, a 300 px de diferencia
   segun la categoria que abrieras.
   Se reordena por CSS —el HTML no se toca, que sale de la base de
   datos— para que la descripcion caiga siempre DESPUES del boton, que
   es donde ya estaba en hosting. Medido: el boton pasa a 619 px en
   NBX y 638 en dedicados, en linea con las demas. */
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table > *{ order:2 }
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table > h4{ order:1 }
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table > .btn{ order:3 }
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table > .desc{
  order:4; margin-top:16px !important;
}
#order-standard_cart .products > .row.row-eq-height > [class*="col-"] > .cros-pricing-table > .plan-features{ order:5 }

/* Dentro de la tarjeta, que el hueco sobrante caiga en un solo sitio:
   la lista crece y la frase de cierre se queda pegada abajo en todas.
   Sin esto, igualar la altura reparte el aire donde le parece. */
#order-standard_cart .cros-pricing-table .plan-features{
  display:flex; flex-direction:column; flex:1;
}
#order-standard_cart .cros-pricing-table .nb-feats{ flex:1 }
#order-standard_cart .cros-pricing-table .nb-cierre{ margin-top:auto }
/* La ilustracion, la misma caja en todas: median 120 o 127 px segun
   la proporcion de cada imagen, y eso bastaba para que la lista de
   caracteristicas empezara a distinta altura en cada tarjeta.
   `align-self` en la imagen y no `align-items` en el padre, que
   estiraria tambien lo demas; `contain` para no deformar ninguna. */
#order-standard_cart .cros-pricing-table .nb-ilus{
  height:128px; display:flex; align-items:center; justify-content:center;
}
#order-standard_cart .cros-pricing-table .nb-ilus img{
  max-height:100%; max-width:100%; width:auto; height:auto;
  object-fit:contain; align-self:center;
}
/* La descripcion, dos lineas siempre. La caja `.nb-desc` la crea el
   JS de abajo envolviendo un texto que ya existia: en el HTML es un
   nodo suelto y sin envolver no hay selector al que darle altura.
   Solo a partir de 600 px, que es donde hay dos o mas columnas con
   las que cuadrar; en una sola columna reservar altura solo dejaria
   un hueco a cambio de nada. */
@media (min-width:600px){
  #order-standard_cart .cros-pricing-table .nb-desc{
    min-height:3.1em; /* dos lineas al `line-height` del bloque */
  }
}

/* ══ CONFIGURADOR DE PRODUCTO ═══════════════════════════════════
   `cart.php?a=confproduct`, la pantalla de configurar un VPS antes
   de pagar. Se quedo fuera del repaso anterior y era la unica del
   flujo que seguia con los colores de Croster.

   LAS CASILLAS, otra vez el mismo cuadrado morado macizo que ya
   aparecio en el area de cliente. Mismo origen, comprobado aqui con
   el inspector sobre el `::before` del <div> de iCheck:

     content:"\f14a"  font-family:"Font Awesome 5 Pro"
     font-weight:900  color:#8f1faf  font-size:21px

   Croster dibuja la casilla con un glifo de "Font Awesome 5 Pro",
   fuente de PAGO que este sitio no tiene, y en un morado que no es
   de la marca. Y hay algo peor que el color: MARCADA Y SIN MARCAR
   SE VEN CASI IGUAL. El tema solo cambia el glifo —`\f0c8` cuadrado
   por `\f14a` cuadrado con tic—, pero al caer los dos al peso Solid
   se pintan macizos y del mismo morado. Medido con dos capturas de
   la misma casilla, antes y despues de pulsarla, con `checked ===
   true`: indistinguibles. El cliente no podia saber si habia
   contratado las copias de seguridad mas que mirando el sumario.

   MISMA SOLUCION QUE EN `netebu_clientes.php`, a proposito: se
   apaga el glifo del tema en los dos estados, la caja se dibuja con
   CSS —que no depende de ninguna fuente— y el tic solo aparece al
   marcar, con `\f00c` en peso 900, que SI existe en la version Free
   que el sitio carga. Dos sitios con el mismo problema merecen el
   mismo remedio, o dentro de un ano hay dos casillas distintas.

   NO SE TOCA `ins.iCheck-helper`: es la capa invisible que recoge
   el clic y mide 26x44. Estos <input> NO tienen <label> asociado
   —comprobado—, asi que es la unica forma de marcarlos; cambiarle
   las medidas encoge la zona pulsable. */
#order-standard_cart .icheckbox_square-blue,
#order-standard_cart .iradio_square-blue{
  width:18px !important; height:18px !important;
  background:var(--nb-paper) !important;
  border:1.5px solid var(--nb-line-2) !important;
  border-radius:5px !important; position:relative;
  vertical-align:middle; cursor:pointer;
  transition:border-color 0.2s ease, box-shadow 0.2s ease;
}
#order-standard_cart .iradio_square-blue{ border-radius:50% !important }
/* fuera el cuadrado macizo del tema, en los dos estados */
#order-standard_cart .icheckbox_square-blue:before,
#order-standard_cart .iradio_square-blue:before{ content:none !important }
/* iCheck marca el hover con una CLASE, no con `:hover`: el raton
   esta sobre la capa `ins`, no sobre el <div> que pinta la caja. */
#order-standard_cart .icheckbox_square-blue.hover,
#order-standard_cart .iradio_square-blue.hover{
  border-color:var(--nb-violet) !important;
  box-shadow:0 0 0 3px rgba(123,92,246,0.14) !important;
}
#order-standard_cart .icheckbox_square-blue.checked:before{
  content:"\f00c" !important;
  font-family:"Font Awesome 5 Free","Font Awesome 5 Pro","FontAwesome" !important;
  font-weight:900 !important; font-size:11px !important; line-height:1 !important;
  color:var(--nb-ink) !important;
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
}
#order-standard_cart .iradio_square-blue.checked:before{
  content:"" !important; position:absolute; top:50%; left:50%;
  width:8px; height:8px; border-radius:50%;
  background:var(--nb-ink) !important; transform:translate(-50%,-50%);
}
#order-standard_cart .icheckbox_square-blue.disabled,
#order-standard_cart .iradio_square-blue.disabled{
  opacity:0.45; cursor:default;
}
/* El texto que acompana a la casilla lo pinta Croster en su tinta. */
#order-standard_cart .cros-checkbox,
#order-standard_cart .cros-checkbox span{
  color:var(--nb-ink-2) !important; font-family:var(--nb-ff-b) !important;
}

/* ── lo ultimo que quedaba de Croster en esta pantalla ────────
   Tras el barrido quedaban cuatro cosas, todas de color:

     .sub-heading:before            #211b65  el separador con etiqueta
     .TM-card                       #d5dce5  el borde de las dos cajas
     i.fa-shopping-cart:before      #8f1faf  el carrito del sumario

   El icono del sumario es el mismo caso que las casillas: un glifo
   de Font Awesome que el tema tine de morado. Aqui basta con
   cambiarle el color, porque el glifo si se dibuja bien. */
#order-standard_cart .sub-heading:before,
#order-standard_cart .sub-heading:after{
  color:var(--nb-ink-3) !important; border-color:var(--nb-line) !important;
}
#order-standard_cart .TM-card,
#order-standard_cart .product-configurable-options,
#order-standard_cart .field-container{
  border-color:var(--nb-line) !important;
}
#order-standard_cart .cartsummary i,
#order-standard_cart .order-summary i,
#order-standard_cart .summary-container-outer i,
#order-standard_cart .cartsummary i:before,
#order-standard_cart .order-summary i:before{
  color:var(--nb-violet-aa) !important;
}
/* PERO NO LOS QUE VAN DENTRO DE UN BOTON, Y ESTE FALLO SE VEIA.
   La regla de arriba se escribio para UN icono —el carrito del
   sumario— y casa con TODOS los `<i>` que haya ahi dentro. El boton
   «Continuar» vive en ese mismo sumario y lleva una flecha
   `fa-arrow-circle-right`: se quedaba en morado #6B48F2 sobre un
   degradado que ya es morado, asi que el circulo desaparecia contra el
   fondo y solo se adivinaba una mancha al lado del texto.

   Es la misma trampa de siempre: un selector escrito para un caso que
   se lleva por delante a sus vecinos. Dentro de un boton el icono no
   tiene color propio, hereda el del boton —blanco— y entonces el
   circulo se ve blanco con la flecha recortada en el degradado, que
   es como debe leerse. */
#order-standard_cart .cartsummary .btn i,
#order-standard_cart .order-summary .btn i,
#order-standard_cart .summary-container-outer .btn i,
#order-standard_cart .cartsummary .btn i:before,
#order-standard_cart .order-summary .btn i:before,
#order-standard_cart .btn i,
#order-standard_cart .btn i:before{
  color:inherit !important;
}

/* ── el deslizador de IP adicionales ──────────────────────────
   Es ion.rangeSlider (clases `irs-*`), y venia entero con los dos
   colores de Croster: la barra y el asa en #8f1faf, los numeros de
   la regla y sus marcas en #211b65, y el globo del maximo en un
   negro #101010 que no esta en ninguna paleta.

   `.irs-bar` no se tine con `background-color`: el tema lo pinta
   con `linear-gradient(#8f1faf, #8f1faf)`, o sea una IMAGEN. Hay
   que pisar `background-image`, o el color se queda debajo y no se
   ve el cambio. */
#order-standard_cart .irs-line{
  background:var(--nb-line) !important; background-image:none !important;
  border:0 !important; border-radius:999px !important; height:6px !important;
}
#order-standard_cart .irs-bar{
  background:var(--nb-grad) !important;
  background-image:var(--nb-grad) !important;
  border:0 !important; border-radius:999px !important; height:6px !important;
}
#order-standard_cart .irs-handle{
  background:var(--nb-paper) !important; background-image:none !important;
  border:2px solid var(--nb-violet) !important;
  border-radius:50% !important;
  width:20px !important; height:20px !important;
  box-shadow:0 2px 6px rgba(123,92,246,0.28) !important;
  cursor:grab;
}
#order-standard_cart .irs-handle:active{cursor:grabbing}
#order-standard_cart .irs-handle.state_hover,
#order-standard_cart .irs-handle:hover{
  background:var(--nb-paper) !important;
  box-shadow:0 2px 10px rgba(123,92,246,0.45) !important;
}
/* el globo del valor elegido */
#order-standard_cart .irs-single,
#order-standard_cart .irs-from,
#order-standard_cart .irs-to{
  background:var(--nb-violet-aa) !important; background-image:none !important;
  color:#FFFFFF !important; border-radius:7px !important;
  font-family:var(--nb-ff-d) !important; font-weight:600 !important;
  font-size:0.78rem !important; padding:2px 7px !important;
}
/* Los extremos son solo referencia: en gris, no compitiendo con el
   valor elegido, que es el dato que de verdad importa. */
#order-standard_cart .irs-min,
#order-standard_cart .irs-max{
  background:var(--nb-paper-2) !important; background-image:none !important;
  color:var(--nb-ink-3) !important; border-radius:6px !important;
  font-family:var(--nb-ff-b) !important; font-size:0.74rem !important;
}
#order-standard_cart .irs-grid-text{
  color:var(--nb-ink-3) !important; font-family:var(--nb-ff-b) !important;
  font-size:0.72rem !important;
}
#order-standard_cart .irs-grid-pol{background:var(--nb-line-2) !important}

/* ── los ultimos textos con la tinta de Croster ───────────────
   `.promo-title` es el nombre del producto en la cabecera plegable
   —«Servidores VPS - VPS VS10XS»—, y no lo alcanza la regla de
   `h1..h4` porque es un `<span>` dentro del `<h4>`, y el color se
   declara sobre el propio span. */
#order-standard_cart .promo-title,
#order-standard_cart .card-header .promo-title{
  color:var(--nb-ink) !important; font-family:var(--nb-ff-d) !important;
}
/* El cuerpo de la descripcion del producto y las dos filas del
   sumario («Instalacion:», «Mensual:») heredaban #211b65. */
#order-standard_cart .panel-body,
#order-standard_cart .summary-totals .pull-left,
#order-standard_cart .summary-totals .pull-right,
#order-standard_cart .summary-totals .float-left,
#order-standard_cart .summary-totals .float-right{
  color:var(--nb-ink-2) !important;
}

/* ── el recorte del degradado va el ultimo, para que ninguna
      regla de arriba pueda pisarlo con el atajo `background` ── */
#order-standard_cart .btn-primary,
#order-standard_cart .view-cart-gateway-checkout .btn-primary,
#order-standard_cart .view-cart-items-header,
#order-standard_cart .irs-bar{
  background-clip:padding-box; -webkit-background-clip:padding-box;
}
/* y la tienda, con el mismo criterio. El degradado sobre TEXTO
   —`.cost`— no entra aqui: `background-clip:text` es justo lo que
   hay que conservar. */
.store-order-container .btn-primary,
.store-promoted-product .btn-primary,
.store-order-container .nav-tabs .nav-item.active > .nav-link,
.store-order-container .nav-tabs .nav-link.active{
  background-clip:padding-box; -webkit-background-clip:padding-box;
}

@media (max-width:991px){
  #order-standard_cart .summary-container-outer{margin-top:20px}
}
@media (prefers-reduced-motion:reduce){
  #order-standard_cart *{transition:none !important}
}
