/* ========================================
   ORDER FORM TOKENS
   Declared on the order form's own roots, never on :root, so not one of these
   names (--a, --input, --spacing-md ...) can reach the client area template.
   Colours come from the styling engine (Addons > One Step Order Form > Client
   Area Customization), which maps each WHMCS template's own colours onto the
   --oso-* targets; the value after the comma is the order form's own colour,
   used only where no mapping exists.
   ======================================== */
#one-step-cart,
#oso-mobile-total-banner,
#billingDetailsModal,
#modalGeneratePassword,
#whmp-oso-toast {
  /* ====================================================
       WHMP COLOR THEME VARIABLES
       Change these values to customize your checkout theme
       ==================================================== */

  /* ------ Primary Brand Colors ------ */
  /* Raw admin-selected colours (used to derive readable on-dark variants) */
  --whmp-primary-base: var(--oso-primary-color, #1a4d80) !important;
  --whmp-secondary-base: var(--oso-secondary-color, #153d66) !important;
  /* Main brand color - buttons, links, accents, active states */
  --whmp-primary: var(--oso-primary-color, #1a4d80) !important;
  /* --whmp-primary-fill / --whmp-primary-hover-fill (not declared here): the brand colour as a
     FILL - buttons, badges, selected states. Unset, every fill is var(--whmp-primary). On a dark
     surface common.tpl lightens --whmp-primary so it reads as text, and sets these two to the
     template's own brand colour, so a filled button keeps the template's look and its white text. */
  /* Hover/active shade of primary */
  /* A darker shade of the brand colour (not the template's secondary, which is grey on some). */
  /* The template's own hover colour first (Lagom --btn-primary-hover-bg, Nexum
     --nx-btn-primary-hover); a darker shade of the brand colour where it has none. */
  --whmp-primary-hover: var(--btn-primary-hover-bg, var(--nx-btn-primary-hover, color-mix(in srgb, var(--oso-primary-color, #1a4d80) 82%, #000))) !important;
  /* Light tint of primary - light borders and highlights */
  --whmp-primary-light: var(--oso-primary-soft, #e0ebff) !important;
  /* Very faded primary - subtle backgrounds, disabled states, hover tints */
  --whmp-primary-faded: var(--btn-primary-faded-bg, var(--oso-hover-bg, #f5f7f9)) !important;
  /* Secondary brand color - secondary accents, gradients, complementary elements */
  --whmp-secondary: var(--oso-secondary-color, #153d66) !important;

  /* Active theme mode written by the admin customization (light | dark) */
  --oso-theme-mode: light;

  /* ------ Background Colors ------ */
  /* Outer #one-step-cart wrapper background (transparent in light so the host theme shows through; solid in dark) */
  /* Transparent: the template's own page background shows around the order form's cards. */
  --whmp-page-bg: transparent !important;
  /* Base page/card/panel background */
  --whmp-bg-base: var(--oso-card-bg, #ffffff) !important;
  /* Alternate surface background (dark panels, borders) */
  --whmp-bg-alt: #424242 !important;
  /* Deep/darkest surface background */
  --whmp-bg-deep: #303030 !important;

  /* ------ Text Colors ------ */
  /* Primary text - headings, labels, strong content */
  --whmp-text-primary: var(--oso-text-color, #17191c) !important;
  /* Secondary text - body text, muted/subtle content */
  /* Body text: the template's own body colour (Lagom --text-body-color), else its text colour. */
  --whmp-text-secondary: var(--text-body-color, var(--oso-text-color, #5e636e)) !important;
  /* Muted text - timestamps, helper text, disabled labels.
     #e0e0e0 was a DARK-mode value sitting in the light palette: on the white
     card it measured about 1.3:1, which is why the account chooser's address
     lines were invisible. Every use of this token but one is muted text on a
     light surface (the exception, the tooltip, now names --whmp-text-inverse,
     which is what it actually wanted). #6b7280 is 4.83:1 on white. */
  --whmp-text-light: var(--oso-muted-color, #6b7280) !important;
  /* Inverse text - white text/icons on colored backgrounds */
  --whmp-text-inverse: var(--oso-btn-primary-text, #ffffff) !important;

  /* ------ Buttons ------ */
  /* Kept apart from the brand colour because templates keep them apart: Nexum
     lets an admin restyle the calls to action without moving links, badges and
     focus rings with them. Default to the brand colour, so a template with no
     button tokens of its own renders exactly as it did before these existed. */
  --whmp-btn-primary-bg: var(--oso-btn-primary-bg, #1a4d80) !important;
  --whmp-btn-primary-text: var(--oso-btn-primary-text, #ffffff) !important;
  --whmp-btn-secondary-bg: var(--oso-btn-secondary-bg, #ffffff) !important;

  /* ------ Border Colors ------ */
  /* Light border - separators, card borders, dividers */
  --whmp-border-light: var(--oso-border-color, #efeff1) !important;
  /* Medium border - input fields, soft borders */
  --whmp-border-mid: var(--oso-border-color, #dddddd) !important;

  /* ------ Status Colors ------ */
  /* Success green */
  --whmp-success: var(--oso-btn-success-bg, #008000) !important;
  /* Success dark background */
  --whmp-success-bg: var(--oso-alert-success-bg, #203224) !important;
  /* Danger red */
  --whmp-danger: var(--oso-btn-danger-bg, #b20000) !important;
  /* Danger dark background */
  --whmp-danger-bg: var(--oso-alert-danger-bg, #4b2528) !important;
  /* Danger bright/alert red */
  --whmp-danger-bright: var(--oso-btn-danger-bg, #d92632) !important;
  /* Warning orange */
  --whmp-warning: var(--oso-btn-warning-bg, #f59033) !important;

  /* ------ Domain Result Colors ------ */
  /* Domain available - light green background */
  --whmp-domain-available-bg: var(--oso-alert-success-bg, #dff6e5) !important;
  /* Domain taken - light red background */
  --whmp-domain-taken-bg: var(--oso-alert-danger-bg, #fceeef) !important;

  /* ------ Special / Component Colors ------ */
  /* Sale/discount price text: the template's own brand colour (a fixed pink matched no
     template), the same colour the summary gives a discounted price. */
  --whmp-price-sale: var(--whmp-primary) !important;
  /* Focus ring around inputs */
  --whmp-focus-ring: color-mix(in srgb, var(--oso-primary-color, #0d316d) 25%, transparent) !important;
  /* Strong focus ring */
  --whmp-focus-ring-strong: color-mix(in srgb, var(--oso-primary-color, #0d316d) 50%, transparent) !important;
  /* Danger focus ring */
  --whmp-focus-ring-danger: #b2000040 !important;

  /* ====== SPACING SYSTEM ====== */
  --spacing-xs: 5px !important;
  --spacing-sm: 10px !important;
  --spacing-md: 15px !important;
  --spacing-lg: 20px !important;
  --spacing-xl: 30px !important;
  --spacing-xxl: 40px !important;

  /* ====== TYPOGRAPHY ====== */
  /* Font Sizes */
  --font-xs: 11px !important;
  --font-sm: 13px !important;
  --font-md: 14px !important;
  --font-base: 15px !important;
  --font-lg: 16px !important;
  --font-xl: 18px !important;
  --font-xxl: 20px !important;
  --font-2xl: 21px !important;
  --font-3xl: 22px !important;
  --font-4xl: 23px !important;
  --font-5xl: 24px !important;
  --font-6xl: 26px !important;
  --font-28: 28px !important;
  --font-7xl: 33px !important;
  --font-8xl: 36px !important;
  --font-9xl: 40px !important;

  /* Special Font Sizes */
  --price-cycle-font-size: 12px !important;
  --price-savings-line-height: 18px !important;

  /* Font Weights */
  --font-weight-light: 300 !important;
  --font-weight-normal: 400 !important;
  --font-weight-medium: 500 !important;
  --font-weight-semibold: 600 !important;
  --font-weight-bold: 700 !important;
  --font-weight-black: 900 !important;

  /* Font Family Variables (NO !important intentionally) */
  --h1: "Poppins-Light";
  --h2: "Poppins-Regular";
  --h3: "Poppins-SemiBold";
  --h4: "Poppins-Regular";
  --h5: "Poppins-Regular";
  --h6: "Poppins-ExtraLight";
  --p: "Poppins-Light";
  --span: "Poppins-Regular";
  --a: "Poppins-Light";
  --strong: "Poppins-Regular";
  --small: "Poppins-Light";
  --li: "Poppins-Medium";
  --ul: "Poppins-Medium";
  --label: "Poppins-Medium";
  --input: "Poppins-Regular";
  --textarea: "Poppins-Regular";
  --select: "Poppins-Medium";
  --button: "Poppins-Bold";
  --form: "Poppins-Medium";

  /* ====== BORDERS & RADIUS ====== */
  --border-radius-sm: 3px !important;
  --border-radius-md: 4px !important;
  --border-radius-base: 5px !important;
  --border-radius-lg: 6px !important;
  --border-radius-xl: 8px !important;
  --border-radius-circle: 50% !important;
  --border-radius-24: 24px !important;

  /* ====== SHADOWS ====== */
  --shadow-sm: 0 0 15px #0000001a !important;
  --shadow-md:
    0px 0px 1px rgba(0, 0, 0, 0.16), 0px 2px 24px rgba(0, 0, 0, 0.24) !important;
  --shadow-lg: 0 4px 20px rgba(0, 0, 0, 0.3) !important;

  /* ====== TRANSITIONS ====== */
  --transition-fast: 0.3s ease !important;
  --transition-base: all 0.3s ease !important;

  /* ====== COMPONENT SIZES ====== */
  --product-card-width: 220px !important;
  --input-height: 67px !important;
  --input-height-sm: 48px !important;
  --input-height-md: 61px !important;
  --select-height: 50px !important;
  --button-height: 43px !important;
  --icon-size-sm: 45px !important;

  /* ====== Z-INDEX ====== */
  --z-dropdown: 999 !important;
  --z-overlay: 9999 !important;
  --z-modal: 10000 !important;

  /* ====== GRID LAYOUT VARIABLES ====== */
  --grid-product-cards-per-row: 3;
  --grid-billing-cycles-per-row: 3;
  --grid-recommended-per-row: 1;
  --grid-addons-per-row: 1;
  --grid-config-options-per-row: 1;
  --grid-custom-fields-per-row: 1;
  --grid-domain-nameservers-fields-per-row: 3;
  /* The narrowest a cell of those grids may get. The admin's "per row" is the most a row holds:
     when the cells would be narrower than this, the row holds fewer (see the grids below). */
  --oso-grid-cell-min: 220px;
}

/* ========================================
   TYPOGRAPHY ELEMENTS
   ======================================== */
#one-step-cart h1 {
  font-family: var(--h1);
}
#one-step-cart h2 {
  font-family: var(--h2);
}
#one-step-cart h3 {
  font-family: var(--h3);
}
#one-step-cart h4 {
  font-family: var(--h4);
}
#one-step-cart h5 {
  font-family: var(--h5);
}
#one-step-cart h6 {
  font-family: var(--h6);
}
#one-step-cart p {
  font-family: var(--p);
}
#one-step-cart span {
  font-family: var(--span);
}
#one-step-cart a {
  font-family: var(--a);
}
#one-step-cart strong {
  font-family: var(--strong);
}
#one-step-cart small {
  font-family: var(--small);
}
#one-step-cart li {
  font-family: var(--li);
}
#one-step-cart ul {
  font-family: var(--ul);
}
#one-step-cart label {
  font-family: var(--label);
}
#one-step-cart input {
  font-family: var(--input);
}
#one-step-cart textarea {
  font-family: var(--textarea);
}
#one-step-cart select {
  font-family: var(--select);
}
#one-step-cart button {
  font-family: var(--button);
}
#one-step-cart form {
  font-family: var(--form);
}

.field-error {
  border-color: var(--whmp-danger) !important;
}

/* ---------------------------------------------------------------------------
   The checkout error box, matched to the bundle row message
   ---------------------------------------------------------------------------
   #validationErrors already carried .whmp-alert.whmp-alert-danger, but every
   .whmp-alert-danger rule in this file is scoped to a specific domain-result
   container and most set `background: transparent` - so nothing ever gave THIS
   box a fill and it rendered as red text on plain white.

   The bundle path already had the right answer: .bundle-row-msg.is-error, a
   danger-tinted panel. Same tokens here, so the two paths report a problem the
   same way. Measured: rgb(255,255,255) before, the danger tint after.
   --------------------------------------------------------------------------- */
#one-step-cart #validationErrors.whmp-alert.whmp-alert-danger {
  background: var(--whmp-danger-bg, #fdeaea);
  color: var(--whmp-danger, #b20000);
  border: 1px solid var(--whmp-danger, #b20000);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-md);
}

#one-step-cart #validationErrors.whmp-alert.whmp-alert-danger h5,
#one-step-cart #validationErrors.whmp-alert.whmp-alert-danger li,
#one-step-cart #validationErrors.whmp-alert.whmp-alert-danger a {
  color: inherit;
}

/* .field-error only sets a border-colour, which does nothing to an element that
   has no border. The domain section is a panel, not an input, so it needs the
   border itself before the mark can show at all. */
#one-step-cart #domain-section.field-error {
  border: 1px solid var(--whmp-danger) !important;
  border-radius: var(--border-radius-md);
}

.whmp-status-label {
  font-size: 11px;
  font-weight: 600;
}

/* ========================================
   BASE LAYOUT
   ======================================== */
/* The page around the order form is the template's own: its #main-body background is left
   alone (the order form's tokens are scoped to its own containers, so painting #main-body
   with one of them wiped the template's background - Nexus showed its dark body colour). */

/* ========================================
   PRODUCTS LIST & CARDS
   ======================================== */
.products-list-container {
  display: flex;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
  flex-wrap: nowrap;
  position: relative;
  z-index: 1;
  align-items: flex-start; /* ADD THIS - Prevents cards from stretching */
}

.products-list-container.loading {
  pointer-events: none;
  opacity: 0.7;
}

.products-list-container.loading .product-card {
  cursor: not-allowed;
}

.product-card {
  position: relative;
  z-index: 1;
  cursor: pointer;
  transition:
    transform 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    z-index 0s; /* Added z-index transition */
  border-radius: var(--border-radius-base);
  padding: var(--spacing-md);
  min-height: auto;
  height: auto;
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  text-align: center;
  border: 1px solid var(--whmp-border-light);
  flex-shrink: 0;
  will-change: transform;
}

/* ADD THIS - Bring hovered card to front */
.product-card.hovered {
  z-index: 10;
}

.product-card.slick-slide {
  margin-right: var(--spacing-md);
}

.product-card h4 {
  font-size: var(--font-xs);
}

.product-card .product-card-header h4 {
  font-size: var(--font-2xl);
  font-weight: var(--font-weight-normal);
  text-transform: capitalize;
  margin-bottom: var(--spacing-sm);
}

.product-card.selected {
  border: 1px solid var(--whmp-primary-hover);
  background-color: var(--whmp-bg-base);
}

.product-card .product-card-features {
  margin: var(--spacing-sm) 0; /* ADD THIS */
}

.product-card .product-card-features ul {
  margin: 0;
  padding: 0; /* ADD THIS */
  list-style-position: inside; /* ADD THIS */
}

.product-card .product-card-features ul li {
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
}

/* ====== BUTTON STYLES - UPDATED ======
   The border here used --whmp-primary-light, which is a SURFACE TINT
   ('Primary (light tint)', role surface, tone tint) - not a border colour. A
   tint is only ever meant to be a pale wash behind something, so whether it
   reads as a border at all depends entirely on what each theme calls its
   "primary light":

     twenty-one  #f4f5f7  near-white - the border was all but invisible
     nexum       #d7004f  a saturated crimson - the border read as a DANGER
                          state on every unselected card

   Same rule, opposite failures, because a tint was asked to do a border's job.

   The form's own button treatment is the one in .whmp-button-primary:
   border-color matches the button's primary token. This is an outline variant
   of that button - faded fill, primary text - so its border takes the same
   token its text already uses, and the existing :hover still fills solid with
   --whmp-primary-hover. Theme-proof: every theme has a primary. */
.product-card button.whmp-btn.whmp-button-primary.choose-plan-btn,
.product-card .whmp-btn.whmp-button-primary.bundle-order-btn {
  background: var(--whmp-primary-faded);
  border-color: var(--whmp-btn-primary-bg, var(--whmp-primary));
  padding: var(--spacing-sm) 12px;
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); /* ADD THIS */
  margin-top: var(--spacing-sm); /* ADD THIS for spacing */
}

.product-card button.whmp-btn.whmp-button-primary.choose-plan-btn:hover,
.product-card .whmp-btn.whmp-button-primary.bundle-order-btn:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
  transform: translateY(-1px); /* ADD THIS - Subtle lift effect */
}

.product-card.selected
  button.whmp-btn.whmp-button-primary.choose-plan-btn.btn-loading {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
}

.choose-plan-btn,
.deselect-plan-btn,
.bundle-order-btn {
  width: 100%;
  margin: var(--spacing-sm) 0;
  padding: 8px 0;
  font-size: var(--font-md);
  cursor: pointer;
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.choose-plan-btn:hover,
.bundle-order-btn:hover {
  background-color: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

.products-list-container .product-card li.feature-toggle-container {
  list-style: none;
}

.products-list-container .product-card button.feature-toggle-btn {
  background: transparent;
  color: var(--whmp-text-primary);
  border: 0;
  transition: all 0.2s ease; /* ADD THIS */
}

.products-list-container .product-card button.feature-toggle-btn:focus {
  outline: 0;
}

.product-card li.feature-toggle-container button.feature-toggle-btn:focus {
  background: transparent !important;
}

/* ========================================
   PRODUCT BILLING CYCLE
   ======================================== */
.product-billing-cycle {
  margin: 0 0 var(--spacing-sm);
  min-height: var(--button-height);
}

.product-billing-cycle select,
.product-billing-cycle .monthly-price-display {
  text-align: center;
  background: transparent;
  border: 0;
  color: var(--whmp-text-primary);
  font-size: var(--font-sm);
  font-weight: var(--font-weight-bold);
  line-height: 35px;
}

.product-billing-cycle select:disabled {
  opacity: 0.8;
  cursor: not-allowed;
  background-color: var(--whmp-primary-faded);
}

.product-billing-cycle .price-amount {
  font-size: var(--font-6xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
  line-height: 1.2;
}

.product-billing-cycle .price-cycle {
  font-size: var(--price-cycle-font-size);
  color: var(--whmp-text-secondary);
  margin-top: var(--spacing-xs);
}

/* ========================================
   BUTTONS & INTERACTIONS
   ======================================== */
button.remove-addon-btn {
  display: flex;
  width: 100%;
  justify-content: end;
}

button.remove-addon-btn i.fas.fa-trash {
  color: var(--whmp-text-secondary);
}

i.fa.fa-trash {
  color: var(--whmp-text-secondary);
}

.remove-addon-btn {
  color: var(--whmp-text-secondary);
  background: none;
  border: none;
  padding: var(--spacing-xs);
  cursor: pointer;
}

.remove-addon-btn:hover {
  color: var(--whmp-danger-bright);
}

button.remove-recommended-btn {
  background: transparent;
  box-shadow: none !important;
  color: var(--whmp-text-secondary);
  display: flex;
  width: 100%;
  justify-content: end;
  border: 0;
}

span.input-group-btn.input-group-append button.whmp-btn.whmp-btn-default {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-bg-alt) !important;
  color: var(--whmp-text-secondary);
}

select.whmp-form-cntrl:hover {
  background-image: none !important;
}

/* ====== BUTTON COMPONENT CLASSES ====== */
.whmp-btn-pry-faded {
  background: var(--whmp-primary-faded);
  border-color: var(--whmp-primary-light);
  color: var(--whmp-primary);
}

.whmp-btn-pry-faded:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
}

.whmp-btn-sm {
  padding: 6px 12px;
  font-size: var(--font-sm);
}

.btn-lg {
  padding: 12px 24px;
  font-size: var(--font-xl);
}

/* ========================================
   PRODUCT TYPE TABS
   ======================================== */
.product-type-tabs {
  margin-bottom: var(--spacing-lg);
}

.product-type-tabs .whmp-navi-tabs {
  border-bottom: 2px solid var(--whmp-border-light);
  margin-bottom: 0;
  margin-top: 0;
  padding-left: 0;
  list-style: none;
  display: flex;
  flex-wrap: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  /* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. */
}

.product-type-tabs .nav-item {
  margin-bottom: -1px;
  flex-shrink: 0;
}

.product-type-tabs .whmp-navi-tabs .whmp-navi-link {
  border: 1px solid transparent;
  border-top-left-radius: var(--border-radius-md);
  border-top-right-radius: var(--border-radius-md);
  padding: 0.5rem 1rem;
  color: var(--whmp-text-secondary);
  transition: var(--transition-base);
  position: relative;
  text-decoration: none;
  background: transparent !important;
  background-color: transparent !important;
}

.product-type-tabs .whmp-navi-tabs .whmp-navi-link:hover,
.product-type-tabs .whmp-navi-tabs .whmp-navi-link:focus,
.product-type-tabs .whmp-navi-tabs .whmp-navi-link.active {
  background: transparent !important;
  background-color: transparent !important;
}

.product-type-tabs .whmp-navi-link::after {
  content: "";
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover)) !important;
  transition: width 0.3s ease;
}

.product-type-tabs .whmp-navi-link.active::after {
  width: 100%;
}

.product-type-tabs .whmp-navi-tabs .whmp-navi-link.active {
  color: var(--whmp-primary);
  border-bottom: 2px solid var(--whmp-primary-hover);
  padding-left: 0;
  padding-right: 0;
}

.product-type-tabs .whmp-tab-cont {
  padding: var(--spacing-md) 0;
  border: none;
  border-radius: 0 0 var(--border-radius-md) var(--border-radius-md);
  overflow: visible;
}

.product-type-tabs .tab-pane {
  overflow-x: hidden;
  overflow-y: visible;
  position: relative;
}

/* ========================================
   DOMAIN TABS & CONFIGURATION
   ======================================== */
.domain-tabs ul.nav.whmp-navi-tabs {
  border: 0;
  margin-bottom: var(--spacing-lg);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  list-style: none;
  padding-left: 0;
  margin-top: 0;
  gap: 0;
}

.domain-tabs ul.nav.whmp-navi-tabs .nav-item {
  list-style: none;
  margin: 0;
}

.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link,
.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link:hover,
.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link:focus,
.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link.active {
  background: transparent !important;
  background-color: transparent !important;
}

.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link {
  color: var(--whmp-text-secondary);
  text-decoration: none;
  padding-left: 0;
  padding-right: 0;
  margin-right: 25px;
  border: 0;
  font-size: var(--font-lg);
  padding-bottom: 12px;
}

.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link.active {
  border-bottom: 1px solid var(--whmp-text-secondary);
  padding-left: 0;
  padding-right: 0;
  width: auto;
}

.domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link.active::after {
  display: none !important;
}

div#step0-domain-config .domain-configuration-content a.whmp-navi-link:hover {
  color: var(--whmp-primary-hover);
  border-bottom: 1px solid var(--whmp-primary-hover);
  width: auto;
}

.whmp-navi-tabs .nav-item.show .whmp-navi-link,
.whmp-navi-tabs .whmp-navi-link.active {
  color: var(--whmp-primary) !important;
  border-bottom: 1px solid var(--whmp-primary);
  background: transparent;
  border-color: transparent;
  font-weight: 600;
}

.domain-configuration-content .whmp-tab-cont {
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
  border: none;
}

.domain-configuration-content .whmp-tab-cont label {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-normal);
  color: var(--whmp-text-primary);
}

.domain-configuration-content h4 {
  font-size: var(--font-6xl);
  margin-bottom: var(--spacing-xl);
  color: var(--whmp-text-secondary);
}

/* ========================================
   DOMAIN SEARCH
   ======================================== */
#reg-search-icon,
#trans-search-icon,
#own-search-icon,
#single-search-icon,
#reg-search-icon-v,
#trans-search-icon-v,
#own-search-icon-v {
  position: absolute;
  left: var(--font-3xl);
  color: var(--whmp-primary);
  top: var(--font-5xl);
  z-index: var(--z-modal);
}

.domain-configuration-content
  .whmp-tab-cont
  .domain-search-container
  .whmp-input-grp {
  position: relative;
  z-index: 0;
}

.domain-configuration-content
  .whmp-tab-cont
  .domain-search-container
  .whmp-input-grp
  .input-group-append {
  position: absolute;
  right: 0px;
  top: 0px;
  z-index: var(--z-overlay);
  justify-content: end;
}

.domain-configuration-content .whmp-tab-cont .whmp-input-grp input,
#single-domain-input {
  background: var(--whmp-bg-base) !important;
  padding: 5px 49px;
  height: var(--input-height-md) !important;
  border-radius: var(--border-radius-xl) !important;
  font-size: var(--font-md);
  margin: 0;
  max-width: 160%;
}

.domain-search-container .whmp-input-grp {
  position: relative;
}

.domain-search-container .input-group-append select {
  margin-right: 12px;
  color: var(--whmp-primary);
  max-width: 86px;
  cursor: pointer;
  background: var(--whmp-primary-faded);
  min-height: var(--button-height);
  margin-top: 10px;
}

.domain-search-container
  .input-group-append
  button.whmp-btn.whmp-button-primary.domain-search-btn,
.domain-configuration-content
  .whmp-tab-cont
  button.whmp-btn.whmp-button-primary.domain-use-btn,
#own-use-v {
  /* --whmp-primary, not --whmp-primary-hover: hover is a STATE. Using the hover
     shade at rest left nothing for hover to move to, and on a template whose
     hover token is a different hue (Nexum ships #330066, a deep purple) the
     button matched nothing else on the page. */
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  border-radius: 0px var(--border-radius-lg) var(--border-radius-lg) 0px;
  font-size: var(--font-base);
  padding: 19px 12px;
  color: var(--whmp-text-inverse);
}

.domain-search-container
  .input-group-append
  button.whmp-btn.whmp-button-primary.domain-search-btn:hover,
.domain-configuration-content
  .whmp-tab-cont
  button.whmp-btn.whmp-button-primary.domain-use-btn:hover,
#own-use-v:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
}

/* ========================================
   DOMAIN RESULTS
   ======================================== */
.domain-configuration-content .whmp-tab-cont .domain-result-content {
  display: flex;
  align-items: center;
  width: 100%;
}

.domain-configuration-content
  .whmp-tab-cont
  .domain-result-content
  .whmp-alert.whmp-alert-success {
  max-width: 72%;
  min-width: 72%;
  background: transparent;
  border: 0;
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
}

.domain-configuration-content
  .whmp-tab-cont
  .domain-result-content
  button.whmp-btn.btn-success.add-domain-btn.mt-2 {
  background: var(--whmp-bg-alt);
  border-color: var(--whmp-bg-alt);
  padding: var(--spacing-sm) 12px;
  font-size: 17px;
}

.domain-configuration-content .whmp-tab-cont .domain-result-content .mt-2 {
  font-size: 19px;
  color: var(--whmp-text-primary);
  margin-left: 12px;
}

/* Domain Result Success/Failure Icons */
.domain-result i.fa.fa-check {
  background: var(--whmp-domain-available-bg);
  font-style: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  color: var(--whmp-success);
  border-radius: var(--border-radius-circle);
  margin-right: 15px;
  height: var(--icon-size-sm);
  font-size: 26px;
  width: var(--icon-size-sm);
  padding: 13px 14px;
  font-weight: var(--font-weight-bold);
  display: flex;
  justify-content: center;
  align-items: center;
}

.domain-result .whmp-alert.whmp-alert-success {
  background: transparent !important;
  border: 0;
  padding: 0;
  display: flex;
  justify-content: center;
  font-weight: var(--font-weight-bold);
  color: var(--whmp-bg-deep);
  font-size: var(--font-3xl);
  margin-bottom: 0;
  font-family: var(--h4);
}

/* 1.1.4 - in dark mode the deep surface colour is near-black, so "is available." beside the
   domain name was dark on dark (Lagom dark mode); there it takes the body text colour. */
#one-step-cart.oso-dark-mode .domain-result .whmp-alert.whmp-alert-success {
  color: var(--whmp-text-secondary);
}

.domain-result-content .mt-2 {
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin: 0 !important;
  font-family: var(--h4);
}

div#register-domain-result .whmp-alert.whmp-alert-danger i {
  background: var(--whmp-danger);
  font-style: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  color: var(--whmp-text-inverse);
  border-radius: var(--border-radius-circle);
  margin-right: 15px;
  height: var(--icon-size-sm);
  font-size: 26px;
  width: var(--icon-size-sm);
  padding: 13px 14px;
  font-weight: var(--font-weight-bold);
  display: flex;
  justify-content: center;
  align-items: center;
}

.domain-result-content button.whmp-btn.btn-success.add-domain-btn.btn-loading {
  font-size: var(--font-lg);
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
  font-weight: var(--font-weight-medium);
  padding: var(--spacing-sm);
}

/* ========================================
   REGISTER DOMAIN RESULT
   ======================================== */
div#register-domain-result,
div#transfer-domain-result,
div#own-domain-result {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xl);
  position: relative;
  border-radius: var(--border-radius-md);
  margin: 0 !important;
  box-shadow: var(--shadow-sm);
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

.domain-configuration-content
  button.whmp-btn.btn-success.use-single-domain-btn.btn-loading {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  padding: var(--spacing-sm) 12px;
}

#domain-result-vertical .whmp-alert.whmp-alert-success {
  align-items: center;
}

div#register-domain-result .domain-result-content {
  display: flex;
  justify-content: space-between;
  width: 100%;
  color: var(--whmp-text-primary);
}

div#register-domain-result .domain-result-content .reg-result-1 {
  display: flex;
  align-items: center;
}

div#register-domain-result .domain-result-content .reg-result-1 i.fa.fa-check {
  background: var(--whmp-success-bg);
  font-size: var(--font-xxl);
  color: var(--whmp-success);
  border-radius: var(--border-radius-circle);
  height: var(--icon-size-sm);
  width: var(--icon-size-sm);
  padding: 13px 14px;
  margin-right: 11px;
  font-weight: var(--font-weight-semibold);
}

div#register-domain-result
  .domain-result-content
  .reg-result-1
  .whmp-alert.whmp-alert-success {
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  font-size: var(--font-4xl);
  overflow: hidden;
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-light);
}

div#register-domain-result .domain-result-content .reg-result-2 {
  display: flex;
  align-items: center;
}

div#register-domain-result .domain-result-content .reg-result-2 .mt-2 {
  margin: 9px 11px 0 0 !important;
  font-size: var(--font-2xl);
  color: var(--whmp-text-light);
  font-size: 17px;
}

div#register-domain-result
  .domain-result-content
  .reg-result-2
  button.whmp-btn.btn-success.add-domain-btn.mt-2 {
  background: var(--whmp-bg-deep);
  border-color: var(--whmp-bg-deep);
  font-weight: var(--font-weight-medium);
  border-radius: var(--border-radius-sm);
  min-width: 134px;
  font-size: var(--font-base);
  padding: var(--spacing-sm) 12px;
  margin: 0 !important;
}

div#register-domain-result .domain-result-content i.fa.fa-times,
div#transfer-domain-result .whmp-alert.whmp-alert-danger i.fa.fa-times {
  background: var(--whmp-danger);
  font-size: 25px;
  color: var(--whmp-text-inverse);
  border-radius: var(--border-radius-circle);
  height: var(--icon-size-sm);
  width: var(--icon-size-sm);
  padding: var(--spacing-sm) 13px;
  margin-right: 11px;
  font-weight: var(--font-weight-semibold);
}

div#register-domain-result
  .domain-result-content
  .reg-result-1
  .whmp-alert.whmp-alert-danger {
  color: var(--whmp-danger);
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  font-size: var(--font-4xl);
  font-weight: var(--font-weight-bold);
  overflow: hidden;
}

div#register-domain-result .whmp-alert.whmp-alert-danger,
div#transfer-domain-result .whmp-alert.whmp-alert-danger {
  background: transparent;
  border: none;
  color: var(--whmp-danger);
  font-size: var(--font-3xl);
  overflow: hidden;
  display: flex;
  align-items: center;
  font-weight: var(--font-weight-bold);
}

/* ========================================
   TRANSFER DOMAIN RESULT
   ======================================== */
div#transfer-domain-result .trans-result-1 .whmp-alert.whmp-alert-danger {
  color: var(--whmp-danger);
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  font-size: var(--font-4xl);
  font-weight: var(--font-weight-bold);
  overflow: hidden;
}

div#transfer-domain-result .domain-result-content {
  display: flex;
  justify-content: space-between;
}

div#transfer-domain-result .trans-result-1 {
  display: flex;
  align-items: center;
}

div#transfer-domain-result .trans-result-1 i.fa.fa-check {
  background: var(--whmp-success-bg);
  font-size: var(--font-xxl);
  color: var(--whmp-success);
  border-radius: var(--border-radius-circle);
  height: var(--icon-size-sm);
  width: var(--icon-size-sm);
  padding: 13px 14px;
  margin-right: 11px;
  font-weight: var(--font-weight-semibold);
}

div#transfer-domain-result .trans-result-1 .whmp-alert.whmp-alert-success {
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  font-size: var(--font-4xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-light);
  overflow: hidden;
}

div#transfer-domain-result .trans-result-2 {
  display: flex;
  align-items: center;
}

div#transfer-domain-result .trans-result-2 .mt-2 {
  margin: 9px 11px 0 0 !important;
  font-size: var(--font-2xl);
  color: var(--whmp-text-light);
}

div#transfer-domain-result
  .trans-result-2
  button.whmp-btn.btn-success.add-domain-btn.mt-2 {
  background: var(--whmp-bg-deep);
  border-color: var(--whmp-bg-deep);
  font-weight: var(--font-weight-medium);
  border-radius: var(--border-radius-sm);
  min-width: 134px;
  font-size: var(--font-base);
  padding: var(--spacing-sm) 12px;
  margin: 0 !important;
}

div#transfer-domain-result .trans-result-1 i.fa.fa-times {
  background: var(--whmp-danger-bg);
  font-size: 25px;
  color: var(--whmp-danger);
  border-radius: var(--border-radius-circle);
  height: var(--icon-size-sm);
  width: var(--icon-size-sm);
  padding: var(--spacing-sm) 13px;
  margin-right: 11px;
  font-weight: var(--font-weight-semibold);
}

/* ========================================
   OWN DOMAIN RESULT
   ======================================== */
div#own-domain-result .domain-result-content {
  display: flex;
  justify-content: space-between;
}

div#own-domain-result .domain-result-content .own-result-1 {
  display: flex;
  align-items: center;
}

div#own-domain-result .domain-result-content .own-result-1 i.fa.fa-times {
  background: var(--whmp-danger-bg);
  font-size: 25px;
  color: var(--whmp-danger);
  border-radius: var(--border-radius-circle);
  height: var(--icon-size-sm);
  width: var(--icon-size-sm);
  padding: var(--spacing-sm) 13px;
  margin-right: 11px;
  font-weight: var(--font-weight-semibold);
}

div#own-domain-result
  .domain-result-content
  .own-result-1
  .whmp-alert.whmp-alert-danger {
  color: var(--whmp-danger);
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0;
  font-size: var(--font-4xl);
  font-weight: var(--font-weight-bold);
  overflow: hidden;
}

/* ========================================
   EPP CODE CONTAINER
   ======================================== */
div#epp-code-container label {
  color: var(--whmp-text-primary);
}

div#epp-code-container input#epp-code {
  background: var(--whmp-bg-base) !important;
  padding: 8px var(--spacing-xl);
  height: var(--input-height-md) !important;
  border-radius: var(--border-radius-xl) !important;
  border-color: var(--whmp-bg-alt);
  color: var(--whmp-text-primary);
}

/* ========================================
   SELECTED DOMAIN CONTAINER
   ======================================== */
div#selected-domain-container {
  padding: var(--spacing-lg);
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
  margin-bottom: var(--spacing-xl);
  box-shadow: var(--shadow-sm);
}

div#selected-domain-container
  .d-flex.justify-content-between.align-items-center.mb-3 {
  margin: 0 !important;
}

div#selected-domain-container div#selected-domain-text {
  color: var(--whmp-text-light);
  font-weight: var(--font-weight-medium);
}

div#selected-domain-container button#change-domain-btn {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-inverse);
  padding: var(--spacing-md);
}

div#selected-domain-container button#change-domain-btn:hover {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-primary);
  color: var(--whmp-primary);
}

/* ========================================
   ORDER SUMMARY SIDEBAR
   ======================================== */
#summaryLoader {
  position: absolute !important;
  top: 50% !important;
  right: 20px !important;
  transform: translateY(-50%) !important;
  width: auto !important;
  min-width: 30px !important;
  height: 30px !important;
  padding: 0 !important;
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  margin: 0 !important;
}

#summaryLoader .btn-text {
  display: none !important;
}

#summaryLoader .btn-loader {
  position: static !important;
  transform: none !important;
  height: 20px !important;
  display: flex !important;
  align-items: center !important;
  gap: 3px !important;
}

#summaryLoader.is-loading .btn-loader {
  display: flex !important;
  color: var(--whmp-primary);
}

#summaryLoader .btn-loader span {
  width: 3px !important;
  height: 12px !important;
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
}

#totalDueDiv {
  padding: var(--spacing-lg);
  border-top: 1px solid var(--whmp-border-light);
  padding-bottom: 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

#totalDueToday {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
}

/* ---------------------------------------------------------------------------
   ORDER SUMMARY - SCROLLING

   `max-height: calc(100vh - 520px)` was the previous rule, and 520 is a guess
   at the combined height of everything else in the panel: heading, payment
   methods, Total Due Today, captcha, buttons, terms. The moment any of that
   changes - and turning on "billing details in the summary" changes it a lot -
   the guess is wrong in one direction or the other. Too small and the list is
   clipped with no way to reach the rest; too large and the panel runs off the
   bottom of the screen with no scrollbar at all.

   The panel is a flex column instead, capped to the viewport, and the list is
   the one part allowed to flex and scroll. Whatever else the panel contains,
   the sums are measured rather than assumed.

   `min-height: 0` is load-bearing: without it a flex child refuses to shrink
   below its content height and the overflow never engages.
   --------------------------------------------------------------------------- */
@media (min-width: 992px) {
  /* A flex column capped to the viewport. The heading, Total Due Today and the action
     footer keep their size; only .oso-summary-scroll (the items, and the payment methods
     when they are shown in the summary) scrolls between them. min-height: 0 lets that
     flex child shrink below its content so its own scrollbar can engage. */
  #one-step-cart .order-summary-sidebar {
    display: flex;
    flex-direction: column;
    max-height: calc(100vh - var(--oso-summary-offset, 40px));
    overflow: hidden;
    position: static;
  }

  #one-step-cart .order-summary-sidebar > #totalDueDiv,
  #one-step-cart .order-summary-sidebar > .whmp-panel-footer.summary-bottom {
    flex: 0 0 auto;
    position: static;
  }

  /* The heading stays position: relative - the summary loader (#summaryLoader) is placed
     against it, beside the Order Summary title. */
  #one-step-cart .order-summary-sidebar > .panel-heading {
    flex: 0 0 auto;
    position: relative;
  }

  #one-step-cart .order-summary-sidebar > #totalDueDiv {
    border-top: 1px solid var(--whmp-border-light);
  }

  #one-step-cart .oso-summary-scroll {
    flex: 1 1 auto;
    min-height: 96px;
    overflow-y: auto;
    overflow-x: hidden;
    overscroll-behavior: contain;
  }

  #summary-container {
    overflow-y: visible;
    max-height: none;
    min-height: 0;
  }
}

/* Below the sidebar breakpoint the summary is a normal block in the page flow:
   capping it to the viewport there would put a second scrollbar inside a page
   that already scrolls, which is the usual way these panels trap content on a
   phone. */
@media (max-width: 991.98px) {
  .order-summary-sidebar {
    display: block;
    max-height: none;
    position: static;
  }

  #summary-container {
    overflow-y: visible;
    max-height: none;
    min-height: 0;
  }
}

#summary-container .subtotal {
  margin: 0;
  padding: 0 0 5px 0;
  font-size: 1.2em;
  border-bottom: 1px solid var(--whmp-border-light);
}

#summary-container .bordered-totals {
  margin: 0 0 5px 0;
  padding: 5px 0;
  border-bottom: 1px solid var(--whmp-border-light);
}

#order-summary-container .recurring-totals {
  margin: 5px 0 0 0;
  padding: 0;
}

#order-summary-container .total-due-today span {
  display: block;
  text-align: right;
}

#summary-container .total-due-today .amt {
  font-size: 2.3em;
}

.domain-result-content.single-result-available .whmp-btn {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  padding: var(--spacing-sm) 12px;
  font-size: 12px;
  font-weight: var(--font-weight-semibold);
}

#one-step-cart #order-standard_cart.row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
}

/* Summary column stretches to the full row height so the sticky
   child inside it has room to travel as the page scrolls. */
#one-step-cart #order-standard_cart.row > .col-md-4 {
  align-self: stretch;
}

/* Single source of truth for the sticky behaviour. The sticky element
   is #oso-orderSummary (direct child of the summary column). No other
   ancestor may set overflow:hidden/auto or sticky will silently fail. */
#one-step-cart #order-standard_cart #oso-orderSummary {
  position: -webkit-sticky;
  position: sticky;
  top: var(--spacing-lg);
  z-index: 5;
}

.order-summary-sidebar {
  border-radius: var(--border-radius-base);
  padding: 0;
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
}

.order-summary-sidebar .summary-table-container table.table {
  color: var(--whmp-text-primary);
}

.order-summary-sidebar .sub-heading span.primary-bg-color {
  background: transparent;
  font-size: var(--font-6xl);
}

.order-summary-sidebar .text-right.mb-3 button {
  background: var(--whmp-bg-alt);
  border-color: var(--whmp-bg-alt);
  color: var(--whmp-text-primary);
  padding: 4px 7px 4px 0;
}

.order-summary-sidebar .text-right.mb-3 button:focus {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  color: var(--whmp-text-primary) !important;
}

.summary-details {
  margin-top: var(--spacing-lg);
}

.summary-table-container {
  margin-top: var(--spacing-md);
}

.summary-table-container .table {
  margin-bottom: 0;
}

.summary-table-container .table td {
  border-top: none;
  padding: 8px 0;
}

.summary-table-container tr.total-row {
  display: block;
}

.summary-table-container tr.total-row td {
  padding-bottom: 0;
}

.summary-table-container tr.total-row td strong {
  color: var(--whmp-text-secondary) !important;
  font-size: var(--font-base);
}

.summary-table-container tr.total-row td.text-right {
  width: 100%;
  display: flex;
  padding: 0 0 var(--spacing-md) 0 !important;
}

.summary-table-container div#dynamic-total strong {
  font-size: var(--font-9xl);
  color: var(--whmp-text-primary) !important;
  font-weight: var(--font-weight-black);
}

.total-divider hr {
  margin: var(--spacing-sm) 0;
  border: none;
}

.total-row td {
  padding-top: var(--spacing-md) !important;
  font-size: var(--font-lg);
}

.order-summary-sidebar .summary-table-container button {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  padding: var(--spacing-sm);
  width: 100%;
  font-size: var(--font-xxl);
  font-weight: var(--font-weight-normal);
}

.order-summary-sidebar .summary-table-container button:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  padding: var(--spacing-sm);
  width: 100%;
  border-color: var(--whmp-primary-hover);
  opacity: 0.9;
}

.order-summary-sidebar .summary-table-container button:active {
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
  border-color: var(--whmp-primary) !important;
}

.order-summary-sidebar
  .summary-table-container
  button
  i.fas.fa-arrow-circle-right {
  margin-left: var(--spacing-md);
}

.table tbody + tbody {
  border-top: 1px solid var(--whmp-bg-alt) !important;
}

/* ========================================
   ADDONS
   ======================================== */
.addons-container {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-addons-per-row) - 1) * var(--spacing-md)) / var(--grid-addons-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
  margin: var(--spacing-lg) 0;
}

@media (max-width: 991px) {
  .addon-item {
    flex: 1 1 100% !important;
    max-width: 100% !important;
  }
}

.addon-item .card {
  border: 0;
  border-radius: var(--border-radius-base);
  transition: var(--transition-base);
  display: flex;
  flex-direction: column;
  height: 100%;
  background: transparent;
}

.addon_img img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

.addon-item .card-body {
  padding: var(--spacing-lg) var(--spacing-md);
  display: flex;
  flex-grow: 1;
  color: var(--whmp-text-inverse);
  overflow: hidden;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-lg);
  transition: var(--transition-base);
  position: relative;
  box-shadow: var(--shadow-sm);
  height: 100%;
  margin-bottom: 20px;
}

.addon-item .card-body.selected {
  border: 1px solid var(--whmp-primary);
  color: var(--whmp-primary);
  background-color: var(--whmp-bg-base);
}

.addon-item .card-body.selected .check-sign {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 30px;
  height: 30px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
}

.addon-item .card-body.selected .check-sign i {
  color: var(--whmp-text-inverse);
  font-size: var(--font-md);
}

/* ============================================================================
   TEXT ON A FILLED SURFACE
   ============================================================================
   One rule, every surface that paints its own background and sets its own text
   colour for it.

   The problem it solves is a single blanket declaration further down:

       #one-step-cart h1..h6, #one-step-cart .section-title,
       #one-step-cart strong, #one-step-cart label { color: var(--whmp-text-primary); }

   That carries an ID, so it beats INHERITANCE every time. A card can set
   `color: var(--whmp-text-inverse)` on itself and its paragraphs will obey,
   while its heading silently goes back to dark ink - dark ink on a primary
   fill. It was fixed once for the addon card and came straight back on the
   recommended-products card, because the fix named one container instead of
   the rule that was doing the damage.

   `inherit` is the right answer rather than a fixed white: each surface already
   declares what its text should be, and it stays correct when the surface
   inverts - the addon card's selected state is primary text on white, and this
   follows it without a second rule.

   ADDING A SURFACE: if a new element paints a primary background behind text,
   add it to this list. Nothing else is needed. */
/* THE SURFACES THEMSELVES.
   ---------------------------------------------------------------------------
   The `inherit` rule below is only half a mechanism: it makes a heading follow
   its surface, but a surface that never declares its own ink has nothing to
   pass down, and `inherit` then carries whatever dark colour the page had.

   That is what brought this bug back a third time. The Generate Password
   header painted itself primary and stopped there:

       div#modalGeneratePassword .modal-header.bg-primary.text-white {
         background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover)) !important;   <- no color
       }

   so its ink came from the THEME, not from us:

       .text-white                  { color: #fff       !important }   (0,1,0)
       .modal-content .modal-header { color: var(--text)!important }   (0,2,0)

   Two !important declarations in the same origin are settled by specificity,
   so the theme's own (0,2,0) rule beat Bootstrap's `.text-white` and the title
   rendered #111827 on a #153d66 fill - 1.6:1, measured.

   Listing the surfaces here means the pairing cannot be forgotten again: a
   surface may not opt into a primary background without its ink coming with it.
   `!important` is not decoration - it is the only way past that theme rule.

   Only surfaces that are ALWAYS primary-filled belong here. Surfaces that
   invert with state - the addon and recommended-product cards, which are
   primary-on-white when selected - must stay out and keep declaring their own
   colour per state, which is exactly what `inherit` below is for.

   ADDING A SURFACE: paint it primary, name it here. Nothing else. */
#modalGeneratePassword .modal-header.bg-primary,
#billingDetailsModal .whmp_oso-modal-popup-header,
#one-step-cart .oso-mobile-total-bar,
#oso-mobile-total-banner .oso-mobile-total-bar,
#one-step-cart .free-domain-tooltip,
#one-step-cart .panel-billingcycle .price-discount,
#one-step-cart .swiper-switcher__label.active,
#one-step-cart .oso-cselect-option.selected,
/* The "Or" divider. Scoped to `.sub-heading-borderless` ON PURPOSE: the other
   five `.primary-bg-color` elements are transparent with dark ink, and a
   blanket `#one-step-cart .primary-bg-color` here would carry an ID (1,1,0),
   beat their (0,2,0) transparent rules on colour only, and paint white text on
   a transparent background. Measured before: ink #4b5563 on a #111827 fill,
   2.35:1. */
#one-step-cart .sub-heading-borderless .primary-bg-color {
  color: var(--whmp-text-inverse) !important;
}

/* Everything drawn inside one of those surfaces follows it. `.close` and its
   `span` are here because the modal's dismiss control is a bare
   `<button class="close"><span>&times;</span></button>` - it carries no
   heading tag, and it failed this sweep at 1.6:1 alongside the title. */
#one-step-cart .addon-item .card-body :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title, .addon-pricing),
#one-step-cart .recommended-product-item .card-body :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#one-step-cart .oso-mobile-total-bar :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#one-step-cart .free-domain-tooltip :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#one-step-cart .panel-billingcycle .price-discount :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#one-step-cart .swiper-switcher__label.active :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#one-step-cart #clientCurrency :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title),
#billingDetailsModal .whmp_oso-modal-popup-header :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title, .close, .close span),
#modalGeneratePassword .modal-header :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title, .close, .close span) {
  color: inherit;
}

/* The theme's `.modal-content .modal-header { color: var(--text) !important }`
   also outranks the plain `inherit` above on the title and the dismiss control,
   both of which match it through `.modal-content`. Same list, raised past it. */
#modalGeneratePassword .modal-header.bg-primary :is(h1, h2, h3, h4, h5, h6, p, strong, label, .section-title, .close),
#modalGeneratePassword .modal-header.bg-primary .close span {
  color: inherit !important;
}

.addon-item .card-title {
  font-size: var(--font-xl);
  margin-bottom: var(--spacing-sm);
  font-weight: var(--font-weight-bold);
}

.addon-item .card-text {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  margin-bottom: var(--spacing-md);
  flex-grow: 1;
}

.addon-item .addon-pricing {
  margin: 0 8px 6px;
}

.addon-item .addon-pricing p {
  margin: var(--spacing-xs) 0;
  font-size: var(--font-md);
}

.addon_price {
  display: flex;
  align-items: center;
}

.addon-item .add-addon-btn {
  align-self: flex-start;
  margin-top: auto;
  padding: 7px var(--spacing-lg);
  font-size: var(--font-md);
  background: var(--whmp-text-primary);
  border-color: var(--whmp-text-primary);
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold);
}

.addon-item .add-addon-btn:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-primary);
}

.addon-item
  .card-body
  .addon_price
  button.whmp-btn.whmp-btn-sm.whmp-button-primary.btn-loading.toggle-addon-btn {
  padding: var(--spacing-sm);
  font-size: var(--font-md);
  background: var(--whmp-bg-base);
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  width: 45%;
}

div#addon-item-1
  .addon_price
  button.whmp-btn.whmp-btn-sm.btn-loading.toggle-addon-btn.addon-added.whmp-button-danger {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  padding: var(--spacing-sm);
  font-size: var(--font-md);
  color: var(--whmp-text-inverse);
  /* 1.1.4 - at least 45% of the card, wider when "Remove" needs it (it was cut off on narrow cards). */
  width: auto;
  min-width: 45%;
  max-width: 100%;
}

button.whmp-btn.whmp-btn-sm.btn-loading.toggle-addon-btn.addon-added.whmp-button-danger {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  padding: var(--spacing-sm);
  font-size: var(--font-md);
  width: auto;
  min-width: 45%;
  max-width: 100%;
}

.list-item.list-item-main span.item-name {
  font-weight: var(--font-weight-semibold);
}

/* ========================================
   PROMO CODE
   ======================================== */
#one-step-cart .mt3 {
  margin-top: 1rem !important;
}

.promo-code-container.mt-3 .whmp-input-grp input#promo-code-input {
  height: var(--input-height-sm);
  color: var(--whmp-text-inverse);
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

.promo-code-container.mt-3 .whmp-input-grp input#promo-code-input::placeholder {
  color: var(--whmp-text-inverse);
}

.promo-code-container.mt-3 .whmp-input-grp button#promo-action-btn {
  font-size: var(--font-base);
  background: var(--whmp-bg-base);
  min-height: 47px;
  border-color: var(--whmp-primary);
  color: var(--whmp-primary);
}

.promo-code-container.mt-3 button#apply-promo-btn {
  padding: 6px 12px !important;
}

.promo-code-expanded button#remove-promo {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
}

button#remove-promo i.fa.fa-trash {
  color: var(--whmp-text-primary);
}

.promo-code-expanded .whmp-input-grp {
  display: flex;
  flex-wrap: nowrap;
}

div#promo-code-text {
  border: 1px dashed var(--whmp-success);
  padding: var(--spacing-sm);
}

div#promo-code-text span.text-success {
  color: var(--whmp-success) !important;
}

div#promo-code-message {
  display: block !important;
}

.promo-code-container.mt-3 div#promo-code-message .text-danger {
  color: var(--whmp-danger) !important;
  border: 1px dashed var(--whmp-danger);
  width: 100%;
  display: flex;
  padding: var(--spacing-sm);
}

.order-summary-sidebar .promo-code-collapsed a#show-promo-input {
  color: var(--whmp-primary);
  font-size: var(--font-base);
}

.promo-code-container.mt-3
  .whmp-input-grp
  button#promo-action-btn
  i.fa.fa-paper-plane {
  color: var(--whmp-primary);
}

/* ========================================
   CONFIGURATION OPTIONS
   ======================================== */
.config-options-container {
  padding: var(--spacing-lg);
  margin: 0;
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border-radius: var(--border-radius-lg);
}

.config-options-container .row-eq-height {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-config-options-per-row) - 1) * var(--spacing-lg)) / var(--grid-config-options-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-lg);
}

@media (max-width: 768px) {
  .config-options-container .row-eq-height {
    grid-template-columns: minmax(0, 1fr);
  }
}

.config-options-container
  .whmp-form-grp.config-option
  select.whmp-form-cntrl.config-option-select {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-secondary) !important;
}

.config-options-container
  .whmp-form-grp.config-option
  input.whmp-form-cntrl.config-option-quantity {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-secondary) !important;
}

select.whmp-form-cntrl.domain-regperiod-select {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-secondary) !important;
}

/* ========================================
   STEP 2 - CUSTOMER DETAILS
   ======================================== */
div#order-standard_cart .oso_customer_details {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
}

div#order-standard_cart
  .oso_customer_details
  .sub-heading
  span.primary-bg-color {
  background: transparent;
  color: var(--whmp-text-primary);
  line-height: 38px;
  font-size: var(--font-lg);
}

div#order-standard_cart .oso_customer_details select {
  height: var(--icon-size-sm);
}

/* An element the JS marks `hidden` MUST be hidden.
   The UA rule is `[hidden] { display: none }` and the theme adds
   `[hidden] { display: none !important }` - but both lose to
   `@media (max-width: 768px) { .whmp-input-grp { display: flex !important } }`
   further down this file: equal specificity (0,1,0), so the later rule wins.
   The visible symptom was the bundle's domain block - choose "Use Subdomain" on
   a phone and the register input, TLD dropdown and Search button stayed on
   screen underneath it, two rows where there should be one. Desktop was fine
   only because that media query never applied there.
   Scoped by id so it outranks any single-class rule whatever the source order. */
#one-step-cart [hidden],
#oso-mobile-total-banner [hidden],
#billingDetailsModal [hidden],
#modalGeneratePassword [hidden] {
  display: none !important;
}

/* `<i>` in the summary is ITALIC TEXT (" - Server Os: Debian 11"), so it takes
   the body font - but this also caught `<i class="fas fa-trash">`, and at
   specificity (0,1,1) it beat Font Awesome's own `.fas` (0,1,0). The delete
   control was drawing its glyph in Poppins, i.e. as a tofu box, which is what
   made it look boxy and out of place. Excluding icon classes lets a real icon
   keep its icon font. */
.whmp-oso-summary-list i:not([class*="fa-"]) {
  font-family: var(--span);
  font-style: normal;
}

div#order-standard_cart
  .oso_customer_details
  .already-registered.clearfix
  p.text-sm-left.overflow-hidden {
  margin-top: var(--spacing-md);
  font-size: var(--font-lg);
}

#btnAlreadyRegistered {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  padding: var(--spacing-sm) 12px;
  font-size: 12px;
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-inverse) !important;
}

#btnAlreadyRegistered:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

#btnNewUserSignup {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  padding: 8px 6px;
  color: var(--whmp-text-inverse) !important;
}

#btnExistingLogin {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  color: var(--whmp-text-primary);
}

div#containerNewUserSignup label.field-icon {
  display: none !important;
}

div#containerNewUserSecurity
  button.whmp-btn.whmp-btn-default.whmp-btn-sm.generate-password {
  background: transparent;
  padding: var(--spacing-sm);
  border: 1px solid var(--whmp-border-mid);
  color: var(--whmp-text-secondary);
  outline: 0;
  background-color: var(--whmp-bg-base);
  border-radius: 3px;
}

div#containerNewUserSignup .sub-heading span.primary-bg-color,
div#containerNewUserSecurity .sub-heading span.primary-bg-color {
  color: var(--whmp-text-primary);
  font-size: var(--font-xl);
  font-weight: var(--font-weight-medium);
}

div#containerExistingUserSignin .whmp-form-grp.prepend-icon i {
  display: none;
}

div#containerPassword i.fas.fa-lock {
  display: none;
}

.already-registered.clearfix {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.whmp-form-grp input {
  font-size: var(--font-lg);
}

.whmp-form-grp.prepend-icon label#inputStateIcon i.fas.fa-map-signs {
  display: none;
}

#order-standard_cart .already-registered.clearfix button {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
}

#order-standard_cart .sub-heading span.primary-bg-color {
  background: transparent;
  padding: 0;
}

div#containerNewUserSignup .sub-heading {
  border: 0;
  text-align: left;
  padding: 0;
}

div#containerNewUserSignup .whmp-form-grp input {
  height: var(--icon-size-sm);
}

/* ========================================
   PAYMENT & CREDIT CARD
   ======================================== */

div#creditCardInputFields ul {
  padding-left: 0;
  color: var(--whmp-text-primary);
  list-style: none;
  margin-bottom: 0;
}

div#creditCardInputFields .whmp-form-grp.prepend-icon i {
  display: none;
}

div#creditCardInputFields .whmp-form-grp.prepend-icon {
  margin: 0;
}

div#paymentGatewaysContainer {
  color: var(--whmp-text-primary);
  padding: var(--spacing-lg);
}

div#paymentGatewaysContainer .text-center {
  text-align: left !important;
}

.fieldgroup-creditcard #billingAddressChoice .radio {
  margin: 10px 0;
}
@media (min-width: 1320px) {
  .fieldgroup-creditcard .col-lg-8 {
    width: 66.66666%;
  }
  .fieldgroup-creditcard .fieldgroup-creditcard #stripeElements {
    max-width: calc(66.66667% + var(--spacing-2x));
  }
}
@media (min-width: 992px) {
  .page-invoice-payment .main-grid .main-content #frmPayment {
    display: flex;
    flex-wrap: wrap;
  }
}
@media (min-width: 1320px) {
  .fieldgroup-creditcard #stripeElements {
    max-width: calc(66.66667% + var(--spacing-2x));
  }
}
.page-account-paymentmethods-manage #paypal_acdc_input_container .row,
.page-invoice-payment #paypal_acdc_input_container .row {
  flex-direction: column;
}
@media (min-width: 480px) {
  .page-account-paymentmethods-manage
    #paypal_acdc_input_container
    .row
    .col-sm-7,
  .page-invoice-payment #paypal_acdc_input_container .row .col-sm-7 {
    flex: 0 0 66.66667%;
    max-width: 66.66667%;
  }
}
.page-account-paymentmethods-manage
  #paypal_acdc_input_container
  .row
  #paypal_acdc-CreditCard,
.page-account-paymentmethods-manage
  #paypal_acdc_input_container
  .row
  #paypal_acdc-Cvc,
.page-account-paymentmethods-manage
  #paypal_acdc_input_container
  .row
  #paypal_acdc-ExpiryDate,
.page-invoice-payment #paypal_acdc_input_container .row #paypal_acdc-CreditCard,
.page-invoice-payment #paypal_acdc_input_container .row #paypal_acdc-Cvc,
.page-invoice-payment
  #paypal_acdc_input_container
  .row
  #paypal_acdc-ExpiryDate {
  margin: -0.375rem;
}
.page-invoice-payment
  .paypal_ppcpv-payment-form
  #paymentGatewayInput
  + .fieldgroup-creditcard {
  display: none !important;
}
.page-invoice-payment
  .paypal_ppcpv-payment-form
  #paymentGatewayInput
  .payment-instructions {
  display: none;
}
@media (min-width: 480px) {
  .page-invoice-payment .paypal_ppcpv-payment-form .cc-item-name {
    width: 60%;
    max-width: 60%;
    word-break: break-all;
  }
  .page-invoice-payment .paypal_ppcpv-payment-form .cc-item-desc {
    display: none;
  }
  .page-invoice-payment .paypal_ppcpv-payment-form .cc-item-actions {
    min-width: unset;
  }
}

.cvv-field-container .input-group {
  flex-wrap: nowrap !important;
}

.StripeElement {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-secondary) !important;
  width: 320px;
}

.cc-input-container #newCardInfo,
.cc-input-container #stripeElements {
  height: auto !important;
}
.cc-input-container #stripeElements .stripe-cards-inputs {
  margin: 0;
  width: 100%;
  padding: 0;
}
.cc-input-container #stripeElements .stripe-cards-inputs div[class*="col-"] {
  float: left;
  margin-bottom: 0;
  max-width: unset;
}
.cc-input-container #stripeElements .stripe-cards-inputs.col-md-8 {
  max-width: unset;
}
.cc-input-container #stripeElements .stripe-cards-inputs.offset-md-2 {
  margin-left: unset;
}
@media (min-width: 768px) {
  .cc-input-container #stripeElements .stripe-cards-inputs .col-md-6 {
    width: 50%;
  }
  .cc-input-container #stripeElements .stripe-cards-inputs .col-md-3 {
    width: 25%;
  }
}
@media (max-width: 767.98px) {
  .cc-input-container #stripeElements .stripe-cards-inputs .col-md-6 {
    width: 100%;
    margin-bottom: 16px !important;
  }
  .cc-input-container #stripeElements .stripe-cards-inputs .col-md-3 {
    width: 50%;
  }
}
#stripeElements .control-label {
  width: 100%;
  padding: 0;
  float: none;
}
#stripeElements .StripeElement {
  padding-top: 12px;
}
#stripeElements div[class*="col-"] {
  float: none;
}
@media (min-width: 768px) {
  #stripeElements .col-sm-7 {
    width: 100%;
  }
}
#ibanElementContainer div[class*="col-"] {
  padding: 0;
  width: 100%;
}
.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields {
  background: unset;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  display: flex;
  flex-direction: column;
}
.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields
  .payment-instructions {
  order: 1;
  text-align: left;
}
.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields
  .payment-instructions
  + .section-heading {
  text-align: left;
  order: 0;
}
.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields
  .payment-instructions
  + .section-heading
  + .panel-form {
  order: 2;
}

.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields
  .existing-cc-grid {
  width: 100%;
  font-size: inherit;
}
@media (min-width: 480px) {
  .page-viewcart
    #frmCheckout.paypal_ppcpv-payment-form
    .section#creditCardInputFields
    .existing-cc-grid
    .cc-item-name {
    width: 60%;
    max-width: 60%;
    word-break: break-all;
  }
  .page-viewcart
    #frmCheckout.paypal_ppcpv-payment-form
    .section#creditCardInputFields
    .existing-cc-grid
    .cc-item-desc {
    display: none;
  }
  .page-viewcart
    #frmCheckout.paypal_ppcpv-payment-form
    .section#creditCardInputFields
    .existing-cc-grid
    .cc-item-actions {
    min-width: unset;
  }
}
.page-viewcart
  #frmCheckout.paypal_ppcpv-payment-form
  .section#creditCardInputFields
  .cc-input-container
  .paypal-buttons {
  margin-bottom: -24px;
}

div#inputDescriptionContainer i.fas.fa-pencil {
  display: none;
}

/* Gateway options as modern selectable cards */
div#paymentGatewaysContainer .text-center {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  line-height: normal;
  margin-top: var(--spacing-sm);
}

div#paymentGatewaysContainer label.radio-inline {
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: var(--transition-base);
  margin: 0;
  padding: var(--spacing-sm) var(--spacing-md);
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  outline: 0;
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  min-height: 46px;
}

div#paymentGatewaysContainer label.radio-inline:hover {
  border-color: var(--whmp-primary);
}

/* Selected state: JS adds .oso-gateway-selected; :has() enhances where supported */
div#paymentGatewaysContainer label.radio-inline.oso-gateway-selected,
div#paymentGatewaysContainer
  label.radio-inline:has(input[type="radio"]:checked) {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
  box-shadow: 0 0 0 2px var(--whmp-focus-ring);
  color: var(--whmp-primary);
}

div#paymentGatewaysContainer label.radio-inline input[type="radio"] {
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--whmp-primary);
  width: 16px;
  height: 16px;
  cursor: pointer;
}

div#paymentGatewaysContainer p.small.text-muted {
  color: var(--whmp-text-primary) !important;
  outline: 0;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-semibold);
  margin-bottom: var(--spacing-xs);
}

div#orderSummaryPaymentMethods {
  border-top: 2px solid var(--whmp-border-light);
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-sm);
}

/* Gateway logo: display cleanly, cap size, keep aspect ratio */
img.gateway-logo {
  max-height: 26px;
  max-width: 90px;
  width: auto;
  height: auto;
  object-fit: contain;
  flex-shrink: 0;
  margin-left: auto;
  vertical-align: middle;
}

/* ========================================
   VALIDATION & ERRORS
   ======================================== */
div#validationErrors,
div#modalValidationErrors {
  border-color: var(--whmp-bg-alt);
  color: var(--whmp-danger);
  background: var(--whmp-bg-base);
  box-shadow: var(--shadow-md);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-lg);
}

/* Password Generator Modal */
div#modalGeneratePassword .modal-content {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-secondary);
  border-color: var(--whmp-bg-alt) !important;
}

div#modalGeneratePassword .modal-header.bg-primary.text-white {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover)) !important;
  border-color: var(--whmp-primary-hover) !important;
}

div#modalGeneratePassword .modal-content .modal-body input {
  width: 100%;
}

div#modalGeneratePassword
  .modal-content
  .modal-body
  button.whmp-btn.whmp-btn-default.whmp-btn-sm {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  padding: var(--spacing-sm);
  color: var(--whmp-text-inverse);
  border-color: var(--whmp-primary-hover);
}

div#modalGeneratePassword .modal-content .modal-footer {
  border-color: var(--whmp-bg-alt) !important;
}

div#modalGeneratePassword
  .modal-content
  .modal-body
  button.whmp-btn.whmp-btn-default.whmp-btn-sm
  img {
  display: none;
}

div#modalGeneratePassword
  .modal-content
  .modal-footer
  button.whmp-btn.whmp-btn-default {
  background: var(--whmp-bg-base);
  padding: var(--spacing-sm);
  color: var(--whmp-primary);
  border-color: var(--whmp-primary-hover);
}

#myCopyInsertBtn {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border: 1px solid var(--whmp-primary-hover);
  padding: var(--spacing-sm) 12px;
  color: var(--whmp-text-inverse);
  border-radius: 5px;
}

/* ========================================
   NAVIGATION & STEPS
   ======================================== */
.checkbox-inline a {
  color: var(--whmp-primary);
}

div#oso-orderSummary label.checkbox-inline {
  width: 101%;
  text-align: left;
  font-size: x-small;
  margin-top: var(--spacing-sm);
  color: var(--whmp-text-primary);
  max-width: 101%;
}

div#oso-orderSummary .dynamic-total strong {
  font-size: var(--font-9xl);
  font-weight: var(--font-weight-black);
  color: var(--whmp-text-primary) !important;
}

div#oso-orderSummary
  .order-summary-sidebar
  .summary-details
  div#order-summary-total
  strong {
  color: var(--whmp-primary) !important;
}

/* ========================================
   PRODUCT DETAILS & ACTIONS
   ======================================== */
.product-details-container h4 {
  font-size: var(--font-6xl);
  font-weight: var(--font-weight-light);
  color: var(--whmp-text-primary);
}

.product-configuration-content {
  overflow: visible;
  position: relative;
}

.product-configuration-content span.primary-bg-color {
  color: var(--whmp-text-primary);
  background: var(--whmp-bg-base);
  font-size: var(--font-6xl);
  font-weight: var(--font-weight-light);
}

.product-actions {
  display: flex;
  gap: var(--spacing-sm);
}

.product-actions i.fa.fa-edit {
  color: var(--whmp-text-secondary);
}

.domain-actions {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  display: inline-flex !important;
}

/* ========================================
   DOMAIN SUGGESTIONS & FILTERS
   ======================================== */
div#domain_suggestions_reg {
  background: var(--whmp-bg-base);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-sm);
}

div#domain_suggestions_reg table.table.table-bordered.table-sm tr td {
  padding-left: var(--spacing-lg);
  padding-right: var(--spacing-lg);
}

.div_apply_filter {
  background: var(--whmp-bg-base);
  padding: var(--spacing-lg);
  padding-top: 7px;
  border-radius: var(--border-radius-sm);
  margin-top: var(--spacing-sm);
}

div#filters-content
  div#selected-tlds
  span.badge.badge-primary.mr-1.mb-1.selected-tld {
  padding: 7px;
  border-radius: var(--border-radius-base);
  font-size: var(--font-sm);
}

div#filters-content
  div#all-tlds
  span.tld-badge.badge.badge-secondary.mr-1.mb-1 {
  padding: 8px;
  border-radius: var(--border-radius-base);
  font-size: var(--font-sm);
}

div#filters-content input#filter-prefix {
  width: 99%;
}

.tld-badge.selected {
  background-color: var(--whmp-primary-fill, var(--whmp-primary)) !important;
  /* Was --whmp-text-primary: dark ink, on the primary fill this very rule
     paints. Text on a primary background is always the inverse colour. */
  color: var(--whmp-text-inverse) !important;
  border: 1px solid var(--whmp-primary-hover);
}

/* ========================================
   LOADING STATES
   ======================================== */
.loading-overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: transparent;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: var(--z-overlay);
}

.loading-overlay .spinner {
  width: 50px;
  height: 50px;
  border: 6px dotted var(--whmp-text-primary);
  border-radius: var(--border-radius-circle);
  animation: spin 1.2s linear infinite;
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

/* Button Loading Animation */
.btn-loading {
  position: relative;
  overflow: hidden;
}

.btn-loading .btn-text {
  transition: opacity var(--transition-fast);
}

.btn-loader {
  display: none;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  height: 20px;
  align-items: center;
  gap: 3px;
}

.btn-loading.is-loading .btn-loader {
  display: flex;
}

.btn-loading.is-loading .btn-text {
  opacity: 0;
}

.btn-loader span {
  width: 3px;
  height: 12px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  transform-origin: center;
  animation: wave 1s infinite ease-in-out;
}

.btn-loader span:nth-child(1) {
  animation-delay: 0s;
}
.btn-loader span:nth-child(2) {
  animation-delay: 0.1s;
}
.btn-loader span:nth-child(3) {
  animation-delay: 0.2s;
}
.btn-loader span:nth-child(4) {
  animation-delay: 0.3s;
}
.btn-loader span:nth-child(5) {
  animation-delay: 0.4s;
}

@keyframes wave {
  0%,
  40%,
  100% {
    transform: scaleY(0.4);
  }
  20% {
    transform: scaleY(1.2);
  }
}

/* Div Loader */
.div-loader {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 3px;
  height: 40px;
}

.div-loader span {
  width: 3px;
  height: 12px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  transform-origin: center;
  animation: wave 1s infinite ease-in-out;
}

.div-loader span:nth-child(1) {
  animation-delay: 0s;
}
.div-loader span:nth-child(2) {
  animation-delay: 0.1s;
}
.div-loader span:nth-child(3) {
  animation-delay: 0.2s;
}
.div-loader span:nth-child(4) {
  animation-delay: 0.3s;
}
.div-loader span:nth-child(5) {
  animation-delay: 0.4s;
}

/* ========================================
   MISC STYLES
   ======================================== */
/* The class is called primary-bg-color and was filled with --whmp-text-primary,
   an INK token. Under Nexus the two are both #111827 so it looked deliberate;
   under the module's own palette it made a near-black (#17191c) chip where the
   brand colour (#1a4d80) was meant to be.

   Six elements carry this class. FIVE are overridden to `background:
   transparent` in their own contexts (the `.sub-heading` headings) and keep
   dark ink - measured, all five transparent. Only the `.sub-heading-borderless`
   one is actually filled: the "Or" divider between the sign-in and sign-up
   panels. That one is the fill this token feeds, and the one whose ink is
   corrected in the TEXT ON A FILLED SURFACE block. */
/* SCOPED, and the scope is load-bearing.
   Twenty-One puts this exact class on its own <body> (`<body
   class="primary-bg-color">`), so an unscoped rule here paints the WHOLE PAGE.
   Outside our container `--whmp-primary` is not mapped, so it fell back to the
   :root default and the page went solid #1a4d80. Before this token was
   corrected it was `var(--whmp-text-primary)` — #17191c — i.e. a near-black
   page behind everything.

   This is the generic-classname collision the SOP scoping rule exists to
   prevent, in its most literal form: our class name is also the theme's. */
#one-step-cart .primary-bg-color,
#billingDetailsModal .primary-bg-color {
  background-color: var(--whmp-primary-fill, var(--whmp-primary));
}

.sub-heading span.primary-bg-color {
  color: var(--whmp-text-primary);
}

.whmp-marketing-email-optin h4.font-size-18 {
  color: var(--whmp-text-primary);
}

.whmp-marketing-email-optin {
  margin-top: 15px;
  padding: 17px;
}

div#one-step-cart {
  color: var(--whmp-text-secondary) !important;
  background: var(--whmp-page-bg, transparent);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-lg);
}

div#containerExistingUserSignin .text-center button#btnExistingLogin {
  font-size: var(--font-lg);
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
  font-weight: var(--font-weight-medium);
  padding: var(--spacing-sm);
}

.whmp-panel.whmp-panel-check.panel-billingcycle:has(.price-discount) {
  border: 2px solid var(--whmp-primary);
}
div#one-step-cart button:focus {
  box-shadow: none !important;
  outline: 0 !important;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  color: var(--whmp-text-inverse) !important;
}

div#one-step-cart .header-lined h1.font-size-36 {
  color: var(--whmp-text-primary) !important;
}

div#one-step-cart .cart-body .header-lined {
  color: var(--whmp-text-primary);
}

.order-summary-column .item-and-edit-cart {
  display: flex;
  justify-content: space-between;
}

body.lagom.lagom-not-portal.lagom-layout-top.lagom-modern.page-order.page-viewcart
  #one-step-cart .cart-item-price1 {
  color: var(--whmp-text-primary);
}

/* Inside the order form only (its tokens do not exist outside it): required marks and error
   text in the template's danger colour. */
:is(#one-step-cart, #billingDetailsModal) .text-danger {
  color: var(--whmp-danger-bright) !important;
}

/* ========================================
   RESPONSIVE - MOBILE (320px - 425px)
   ======================================== */
@media (min-width: 320px) and (max-width: 425px) {
  .addon-free-tag {
    text-align: start;
  }

  .recommend_img {
    display: flex;
    justify-content: center;
  }

  .addon_img {
    display: flex;
    justify-content: center;
  }

  .cart-item-price1 {
    text-align: start !important;
  }

  body.lagom.lagom-not-portal.lagom-layout-top.lagom-modern.page-order.page-viewcart
    td {
    border-top: none;
    padding: 8px 7px !important;
  }

  .summary-table-container div#dynamic-total strong {
    font-size: var(--font-7xl);
  }

  table.cart-items-table tr td .billing-cycle-cart {
    font-size: var(--font-sm);
  }

  .domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link {
    margin-right: var(--spacing-lg);
  }

  .promo-code-expanded button#remove-promo {
    min-width: 50px;
  }

  div#register-domain-result .domain-result-content .reg-result-2 {
    justify-content: center;
  }

  div#epp-code-container {
    position: relative;
    top: 50px;
  }

  div#containerNewUserSecurity
    button.whmp-btn.whmp-btn-default.whmp-btn-sm.generate-password {
    margin-bottom: var(--spacing-sm);
  }

  div#addon-item-7 .addon_price {
    min-width: 230px;
  }

  .whmp-form-grp.domain-billing-cycle {
    float: left;
  }

  .domain-configuration-content .whmp-tab-cont .whmp-input-grp input {
    padding: 8px 53px !important;
    height: auto !important;
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp
    .input-group-append {
    top: 70px;
    display: flex;
    left: 2px;
  }

  .domain-search-container .input-group-append select {
    min-width: 134px;
    font-size: var(--font-base);
    padding: var(--spacing-xs) 32px;
    height: var(--button-height);
  }

  .promo-code-expanded .whmp-input-grp {
    display: flex;
    flex-wrap: nowrap;
    min-width: 202px !important;
  }

  div#register-domain-result .domain-result-content .reg-result-1 {
    width: 100%;
    flex-direction: column;
    padding: var(--spacing-sm);
  }

  div#register-domain-result
    .domain-result-content
    .reg-result-1
    .whmp-alert.whmp-alert-danger {
    font-size: var(--font-base);
    text-align: center;
  }

  /* Fill the content area: a fixed 300px ran past it wherever the area is narrower (a 320px phone). */
  .domain-tabs {
    width: 100%;
    max-width: 100%;
    min-width: 0;
  }

  .domain-result-content {
    width: 100%;
    flex-direction: column;
  }

  .domain-result-content .whmp-alert.whmp-alert-success {
    text-align: center;
    font-size: 17px;
    padding-top: var(--spacing-sm);
  }

  div#transfer-domain-result {
    max-width: 301px;
    padding: 7px;
  }

  div#transfer-domain-result .trans-result-1 {
    width: 100%;
    flex-direction: column;
  }

  .domain-result-content .whmp-alert.whmp-alert-danger {
    font-size: var(--font-base) !important;
    padding-top: var(--spacing-sm) !important;
    text-align: center;
  }

  div#own-domain-result {
    max-width: 301px;
    padding: 13px;
  }

  div#own-domain-result .domain-result-content .own-result-1 {
    width: 100%;
    flex-direction: column;
  }

  .product-card {
    margin-right: var(--spacing-sm);
  }

  .addons-container {
    margin: var(--spacing-md) 0;
  }

  .order-summary-sidebar {
    margin: var(--spacing-md) 0;
  }

  .config-options-container {
    margin: var(--spacing-md) var(--spacing-sm);
  }

  .order-summary-sidebar .summary-table-container button {
    padding: var(--spacing-sm) 0;
    min-width: 30px !important;
  }

  .order-summary-sidebar .summary-table-container button:hover {
    padding: var(--spacing-sm) 0;
  }

  div#domain-addon-container {
    position: relative;
    top: 50px;
    min-width: 283px;
    display: block !important;
  }

  .addon-item .add-addon-btn {
    padding: 7px 13px;
    min-width: 107px;
    margin: var(--spacing-sm) 0;
  }

  .products-list-container {
    flex-wrap: wrap !important;
  }

  .addon-item .card-body {
    display: block;
  }

  div#one-step-cart .cart-body .header-lined {
    max-width: 100%;
    min-width: 0;
  }

  .domain-configuration-content {
    display: flex;
    justify-content: center;
  }

  .addon_img img {
    padding-top: var(--spacing-sm);
  }

  .already-registered.clearfix .pull-right.float-right {
    float: left !important;
  }

  .already-registered.clearfix {
    display: block;
  }

  .cart-item-price {
    text-align: left;
    margin-top: var(--spacing-sm);
    margin-bottom: var(--spacing-sm);
  }

  button.remove-addon-btn {
    justify-content: start;
  }

  button.remove-recommended-btn {
    justify-content: start !important;
  }
}

/* ========================================
   RESPONSIVE - SMALL MOBILE (320px - 360px)
   ======================================== */
@media (max-width: 360px) {
  .promo-code-container.mt-3 .whmp-input-grp button#promo-action-btn {
    width: 40px !important;
  }
}

/* ========================================
   RESPONSIVE - MEDIUM MOBILE (361px - 425px)
   ======================================== */
@media (min-width: 361px) and (max-width: 425px) {
  .promo-code-container.mt-3 .whmp-input-grp button#promo-action-btn {
    width: 62px !important;
  }
}

/* ========================================
   SECTION STYLES
   ======================================== */
.section {
  margin-bottom: var(--spacing-xxl);
}

.section--full-width {
  width: 100%;
}

.section-header {
  margin-bottom: var(--spacing-lg);
}

.section-title {
  font-size: var(--font-28);
  font-weight: var(--font-weight-normal);
  color: var(--whmp-text-primary);
  margin: 0;
}

.section-body {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
  overflow: visible;
  padding: var(--spacing-lg);
}

/* ========================================
   BILLING CYCLE SECTION
   ======================================== */
.billing-cycle-content {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-billing-cycles-per-row) - 1) * var(--spacing-md)) / var(--grid-billing-cycles-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
}

.panel-billingcycle {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
  transition: var(--transition-base);
  cursor: pointer;
  position: relative;
  box-shadow: var(--shadow-sm);
  height: 100%;
  display: flex;
  flex-direction: column;
}

.panel-billingcycle .whmp-panel-body.check {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.panel-billingcycle:hover {
  border: 1px solid var(--whmp-primary);
  background: var(--whmp-bg-base);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

.quantity-input-group input.whmp-form-cntrl.config-option-quantity {
  background: transparent;
  border-color: var(--whmp-primary);
}

.panel-billingcycle.checked {
  border: 1px solid var(--whmp-primary);
  background: var(--whmp-bg-base);
}

.panel-billingcycle .whmp-panel-body.check {
  padding: var(--spacing-lg);
  text-align: center;
  position: relative;
}

.panel-billingcycle .check-sign {
  position: absolute;
  top: var(--spacing-sm);
  right: var(--spacing-sm);
  width: 24px;
  height: 24px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: var(--transition-base);
}

.panel-billingcycle.checked .check-sign {
  opacity: 1;
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
}

.panel-billingcycle .check-sign i {
  color: var(--whmp-text-inverse);
  font-size: var(--font-sm);
}

.panel-billingcycle .check-cycle {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-sm);
}

.panel-billingcycle .price {
  display: block;
  margin: var(--spacing-sm) 0;
}

.panel-billingcycle .price-savings {
  display: block;
  margin-bottom: var(--spacing-xs);
}

.panel-billingcycle .price-savings span {
  text-decoration: line-through;
  color: var(--whmp-text-secondary);
  font-size: var(--font-md);
}

.panel-billingcycle .price-discount {
  position: absolute;
  top: -14px;
  left: 50%;
  transform: translateX(-50%);

  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
  padding: 4px 10px;
  border-radius: var(--border-radius-sm);
  font-size: var(--font-xs);
  white-space: nowrap;
}

.panel-billingcycle .price span {
  font-size: var(--price-cycle-font-size);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-price-sale);
}

.panel-billingcycle .whmp-panel-footer {
  margin-top: var(--spacing-md);
}

.panel-billingcycle .whmp-panel-footer button {
  width: 100%;
  padding: var(--spacing-sm);
  font-size: var(--font-md);
  background: transparent;
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
}

.panel-billingcycle:hover
  button.whmp-btn.whmp-btn-sm.whmp-btn-pry-faded.btn-loading.select-billing-cycle {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  color: var(--whmp-text-inverse);
}

.panel-billingcycle.checked
  .whmp-panel-footer
  button.whmp-btn.whmp-btn-sm.btn-loading.select-billing-cycle.whmp-button-primary {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
}

/* ========================================
   ORDER SUMMARY - LAGOM STYLE
   ======================================== */
#one-step-cart .whmp-panel-summary {
  background: var(--whmp-bg-base) !important;
  box-shadow:
    0 0 2px rgba(0, 0, 0, 0.1),
    0 16px 32px rgba(0, 0, 0, 0.1);
  border-radius: var(--border-radius-lg);
  color: var(--whmp-text-primary);
}

.whmp-panel-summary .panel-heading {
  padding: var(--spacing-lg);
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 2px solid var(--whmp-border-light);
}

.whmp-panel-summary .panel-title {
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin: 0;
  flex: 1;
}

.whmp-panel-summary .whmp-panel-body {
  padding: 0;
}

.whmp_oso-summary-content {
  padding: var(--spacing-sm);
}

div#one-step-cart .cart-body .header-lined h2 {
  font-size: var(--font-7xl);
}

/* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. The thumb here
   was --whmp-bg-alt, a near-invisible grey on a --whmp-bg-base track. */

.whmp-oso-summary-list {
  margin-bottom: var(--spacing-lg);
}

.summary-list-main > div,
.summary-list-discount > div,
.summary-list-totals > div {
  margin-bottom: var(--spacing-md);
}

.summary-list-main > div:last-child,
.summary-list-discount > div:last-child {
  margin-bottom: 0;
}

.list-item {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--spacing-md);
  padding: var(--spacing-xs) 0;
}

.list-item-main {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  padding-bottom: var(--spacing-sm);
}

.list-item-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
  border-top: 1px solid var(--whmp-border-light);
  padding-top: var(--spacing-md);
  margin-top: var(--spacing-sm);
}

.list-item.faded {
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
}

.whmp-oso-summary-list.summary-list-totals .list-item {
  margin-bottom: 0;
}

.item-name {
  flex: 1;
  text-align: left;
  min-width: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

.whmp-oso-summary-list.summary-list-totals {
  margin-bottom: 0;
}

.item-info {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.item-domain {
  font-size: var(--font-md);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-normal);
}

.item-value {
  color: var(--whmp-text-primary);
  text-align: right;
  white-space: nowrap;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-normal);
}

.summary-list-discount {
  border-top: 1px solid var(--whmp-bg-alt);
}

.discount-value {
  color: var(--whmp-primary);
}

.product-wrapper {
  margin-top: var(--spacing-xs);
}

.product-wrapper--secondary {
  margin-top: var(--spacing-sm);
}

.summary-empty {
  padding: var(--spacing-xxl);
  text-align: center;
  color: var(--whmp-text-secondary);
}

.summary-bottom {
  padding: var(--spacing-lg);
  border-bottom: 1px solid var(--whmp-border-light);
  padding-top: 0;
}

.summary-bottom .promo-code-container {
  margin-top: 0;
  margin-bottom: var(--spacing-md);
}

.summary-bottom .promo-code-link {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
  color: var(--whmp-primary);
  text-decoration: none;
  font-size: var(--font-md);
}

.summary-actions {
  margin-top: var(--spacing-md);
}

.summary-actions .btn-submit {
  width: 100%;
  padding: var(--spacing-md);
  font-size: var(--font-xl);
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-inverse);
}

.summary-actions .btn-submit:hover {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-primary);
  color: var(--whmp-primary);
}

.list-item.faded span.item-value {
  color: var(--whmp-text-primary);
}

/* ========================================
   CONFIGURATION OPTIONS (LAGOM STYLE)
   ======================================== */
.config-options-container {
  padding: 0;
  margin: 0;
  background: transparent;
  color: var(--whmp-text-primary);
  border-radius: 0;
}

.row-eq-height {
  display: flex;
  flex-wrap: wrap;
}

.panel-configoption {
  transition: var(--transition-base);
  position: relative;
  display: flex;
  flex-direction: column;
  height: 100%;
}

.panel-configoption:hover {
  border-color: var(--whmp-primary);
}

.panel-configoption.checked {
  border-color: var(--whmp-primary);
  background: var(--whmp-bg-base);
}

.panel-configoption .whmp-panel-body {
  padding: var(--spacing-lg);
  flex-grow: 1;
}

.panel-configoption .panel-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-sm);
}

.panel-configoption .panel-desc {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  margin-bottom: 0;
  line-height: 1.6;
}

.panel-configoption .panel-icon {
  position: absolute;
  top: var(--spacing-lg);
  right: var(--spacing-lg);
  width: 64px;
  height: 64px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.panel-configoption .panel-icon img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

.panel-configoption.panel--has-image .whmp-panel-body {
  padding-right: 90px;
}

.panel-configoption .panel-options {
  padding: 0 var(--spacing-lg) var(--spacing-lg);
}

.panel-configoption .panel-actions {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

/* Radio/Checkbox Custom Styles */
.panel-configoption .check {
  margin: 0;
}

.panel-configoption .check-custom .radio-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md);
  cursor: pointer;
  transition: var(--transition-base);
  margin: 0;
  height: var(--icon-size-sm);
  background: var(--whmp-bg-base);
  box-shadow: var(--shadow-sm);
  border-radius: var(--border-radius-lg);
}

.panel-configoption .radio-styled {
  width: 20px;
  height: 20px;
  border: 2px solid var(--whmp-primary);
  border-radius: var(--border-radius-circle);
  position: relative;
  flex-shrink: 0;
  transition: var(--transition-base);
}

.panel-configoption input[type="radio"]:checked + .radio-styled {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.panel-configoption input[type="radio"]:checked + .radio-styled::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 8px;
  height: 8px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-base);
}

.panel-configoption .check-content {
  flex-grow: 1;
  display: flex;
  flex-direction: row;
  gap: var(--spacing-xs);
}

.panel-configoption .check-title {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-primary);
}

.panel-configoption .check-subtitle {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
  color: var(--whmp-text-secondary);
  font-size: var(--font-xs);
}

.panel-configoption .check-subtitle .setup-fee {
  color: var(--whmp-text-secondary);
  font-size: var(--font-xs);
}

/* Dropdown Styles */
.config-dropdown-wrapper {
  width: 100%;
}

.config-dropdown-wrapper .whmp-form-cntrl {
  padding: var(--spacing-md);
  border-radius: var(--border-radius-md);
  font-size: var(--font-md);
  height: var(--select-height);
  transition: var(--transition-base);
}

.config-dropdown-wrapper .whmp-form-cntrl:hover {
  border-color: var(--whmp-primary);
}

.config-dropdown-wrapper .whmp-form-cntrl:focus {
  border-color: var(--whmp-primary);
  background: var(--whmp-bg-base);
  outline: none;
}

/* Quantity Input Styles */
.config-quantity-wrapper {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.quantity-input-group {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.quantity-btn {
  width: 40px;
  height: 40px;
  font-size: var(--font-xxl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-inverse);
  border: 1px solid var(--whmp-primary);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
  background: var(--whmp-primary-fill, var(--whmp-primary));
  display: flex;
  align-items: center;
  justify-content: center;
}

.quantity-btn:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

.quantity-btn:active {
  transform: scale(0.95);
}

.config-option-quantity {
  flex: 1;
  text-align: center;
  background: var(--whmp-bg-alt);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-primary);
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-md);
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
}

.quantity-pricing {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
  font-size: var(--font-sm);
  color: var(--whmp-primary);
  padding: var(--spacing-sm);
  border: 1px solid var(--whmp-primary);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  transition: var(--transition-base);
  margin: 0;
  background: var(--whmp-bg-base);
}

.quantity-pricing .price-per-unit {
  font-weight: var(--font-weight-medium);
}

.quantity-pricing .setup-fee {
  color: var(--whmp-text-secondary);
  font-size: var(--font-xs);
}

/* Check Sign */
.panel-configoption .check-sign {
  position: absolute;
  top: var(--spacing-sm);
  right: var(--spacing-sm);
  width: 24px;
  height: 24px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: var(--transition-base);
  z-index: 10;
}

.panel-configoption.checked .check-sign {
  opacity: 1;
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  display: none;
}

.panel-configoption .check-sign i {
  color: var(--whmp-primary);
  font-size: var(--font-sm);
  padding-top: 2px;
}

/* Hide default radio/checkbox inputs */
.panel-configoption input[type="radio"],
.panel-configoption input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

/* Responsive */
@media (max-width: 768px) {
  .panel-configoption.panel--has-image .whmp-panel-body {
    padding-right: var(--spacing-lg);
  }

  .panel-configoption .panel-icon {
    position: static;
    margin: 0 auto var(--spacing-md);
  }
}

/* ========================================
   SLIDER CONTROLS
   ======================================== */
.section-top-nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-md) 0;
  margin-bottom: var(--spacing-lg);
}

.swiper-switcher {
  display: flex;
  gap: var(--spacing-sm);
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-xl);
  padding: 4px;
  border: 1px solid var(--whmp-border-light);
}

.swiper-switcher__label {
  padding: 6px 16px;
  cursor: pointer;
  border-radius: var(--border-radius-sm);
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  transition: var(--transition-base);
}

.swiper-switcher__label.active {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
  border-radius: var(--border-radius-xl);
}

.swiper-switcher__label:hover:not(.active) {
  color: var(--whmp-primary-hover);
}

.swiper-nav {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

.swiper-button {
  width: 36px;
  height: 36px;
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: var(--transition-base);
  border: 1px solid var(--whmp-bg-alt);
}

.swiper-button:hover:not(.swiper-button-disabled) {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
}

.swiper-button i {
  color: var(--whmp-text-secondary);
  font-size: var(--font-sm);
}

.swiper-button:hover:not(.swiper-button-disabled) i {
  color: var(--whmp-text-primary);
}

.swiper-button-disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.swiper-navigation {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
}

.swiper-navigation-current {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold);
}

/* ========================================
   SLIDER MODE
   ======================================== */
.products-list-container.slider-mode {
  display: flex;
  flex-wrap: nowrap !important;
  overflow: visible;
  transition: transform 0.3s ease;
  cursor: grab;
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  -webkit-overflow-scrolling: touch;
  touch-action: pan-x;
}

.products-list-container.slider-mode.dragging {
  cursor: grabbing;
  transition: none;
}

.products-list-container.slider-mode.dragging .product-card {
  pointer-events: none;
}

.products-list-container:not(.slider-mode) {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-product-cards-per-row) - 1) * var(--spacing-md)) / var(--grid-product-cards-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
  margin-top: 20px !important;
}

.products-list-container.slider-mode .product-card {
  flex: 0 0 auto;
  margin-top: 10px;
  margin-right: 15px;
}

.products-list-container.dragging * {
  user-select: none;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
}

/* Ensure smooth dragging on mobile */
.products-list-container.slider-mode * {
  -webkit-tap-highlight-color: transparent;
}

/* ========================================
   SLIDER MODE - MOBILE TOUCH FIXES
   ======================================== */
@media (max-width: 768px) {
  .products-list-container.slider-mode {
    cursor: default; /* Remove grab cursor on mobile */
    -webkit-tap-highlight-color: transparent;
    overflow-x: hidden; /* Prevent scroll during drag */
  }

  .products-list-container.slider-mode .product-card {
    pointer-events: auto; /* Ensure cards can receive touch events */
    -webkit-user-select: none;
    user-select: none;
  }

  /* Disable hover effects on mobile during drag */
  .products-list-container.slider-mode.dragging .product-card {
    pointer-events: none;
    transform: none !important;
    box-shadow: var(--shadow-sm) !important;
  }
}

/* ========================================
   PRODUCT CARD UPDATES
   ======================================== */
.product-card:not(.selected):hover {
  transform: translateY(-5px);
  box-shadow: var(--shadow-sm);
  z-index: 999999999;
}

.product-card .check-sign {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 30px;
  height: 30px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
  display: none;
}

.product-card .check-sign i {
  color: var(--whmp-text-inverse);
  font-size: var(--font-md);
}

.product-card-features {
  margin: var(--spacing-lg) 0;
}

.product-card-features ul {
  list-style: none;
  padding: 0;
  margin: 0;
  text-align: center;
}

.product-card-features ul li {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  padding: var(--spacing-xs) 0;
  line-height: 1.6;
}

/* ========================================
   DOMAIN ADDONS CARDS
   ======================================== */
.domain-addons-container {
  display: flex;
  flex-wrap: wrap;
}

.domain-addon-card {
  border-radius: var(--border-radius-lg);
  transition: var(--transition-base);
  cursor: pointer;
  box-shadow: var(--shadow-sm);
}

.domain-addon-card:hover {
  border-color: var(--whmp-primary);
  transform: translateY(-5px);
}

.domain-addon-card.checked {
  border-color: var(--whmp-primary);
}

.domain-addon-card .whmp-panel-body.check {
  padding: var(--spacing-lg);
  text-align: center;
}

.domain-addon-card .check-sign {
  width: 24px;
  height: 24px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  margin: 0 auto var(--spacing-sm);
  opacity: 0;
  transition: var(--transition-base);
}

.domain-addon-card.checked .check-sign {
  opacity: 0;
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  color: var(--whmp-text-inverse);
  font-size: var(--font-lg);
}

.domain-addon-card .whmp-panel-body.check span.price.price-sm span {
  margin-bottom: var(--spacing-sm);
}

.domain-addon-card .whmp-panel-footer button:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
  padding: var(--spacing-sm) 12px;
  font-weight: var(--font-weight-medium);
}

div#domain-addons-section
  .whmp-panel-footer
  button.whmp-btn.whmp-btn-sm.btn-loading.toggle-domain-addon.whmp-button-primary {
  background: var(--whmp-primary-faded);
  border-color: var(--whmp-primary-light);
  padding: var(--spacing-sm) 12px;
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
}

.domain-addon-card .check-cycle {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-sm);
}

.domain-addon-card .whmp-panel-footer button {
  background: var(--whmp-primary-faded);
  border-color: var(--whmp-primary-light);
  color: var(--whmp-primary);
  width: 100%;
  padding: var(--spacing-sm);
  font-size: var(--font-md);
  margin-top: 20px;
}

/* ========================================
   PRODUCT FEATURES HOVER MODE - UPDATED
   ======================================== */
.product-card-features-hover {
  max-height: 120px;
  overflow: hidden;
  transition: max-height 1.5s cubic-bezier(0.4, 0, 0.2, 1);
  position: relative;
  will-change: max-height;
}

.product-card.hovered .product-card-features-hover {
  max-height: 800px;
  transition: max-height 1.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.product-card-features-hover .features-hidden {
  display: list-item;
  opacity: 0;
  max-height: 0;
  overflow: hidden;
  transition:
    opacity 0.75s cubic-bezier(0.4, 0, 0.2, 1),
    max-height 0.75s cubic-bezier(0.4, 0, 0.2, 1);
  white-space: normal;
}

.product-card.hovered .product-card-features-hover .features-hidden {
  opacity: 1;
  max-height: 1000px;
  transition:
    opacity 0.75s cubic-bezier(0.4, 0, 0.2, 1) 0.1s,
    max-height 0.75s cubic-bezier(0.4, 0, 0.2, 1);
}

.product-card-features ul li span.hidden-feature {
  display: block;
  line-height: 35px;
}

.product-card-features-hover li {
  display: list-item;
  line-height: 1em;
  white-space: normal;
  padding: 4px 0;
}

/* ========================================
   DOMAIN VERTICAL STRUCTURE
   ======================================== */
.domain-vertical-structure {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  padding: 30px 20px;
  box-shadow: 0 1px 3px 0.5px rgba(0, 0, 0, 0.16);
}

/* ---------------------------------------------------------------------------
   CANONICAL RADIO TREATMENT

   The form had three different radio designs. This block is the odd one out and
   is brought onto the same one the rest already uses:

     #paymentGatewaysContainer label.radio-inline   (payment methods)
     #applyCreditContainer label.radio              (credit)
     #one-step-cart .existing-card input[type=radio](saved cards)
     .bundle-selected-block .bundle-radio           (bundle domain choice)

   All four keep the NATIVE control and tint it with accent-color, inside a
   bordered label that carries the hover and checked states. This block instead
   hid the native input (opacity:0) and hand-drew a circle, at 20px padding and
   16px type against the canonical 10/15px and 14px - which is what made a
   four-item list read as four heavy panels.

   The container still holds each option's search field, so it stays a box; it
   is just no longer a heavier box than everything else.
   --------------------------------------------------------------------------- */
.domain-radio-container {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-md);
  transition: var(--transition-base);
  border: 1px solid var(--whmp-border-mid);
}

.domain-vertical-structure .domain-radio-container:hover {
  border-color: var(--whmp-primary);
}

/* Checked state copied from the payment list, so selection reads the same way
   everywhere: primary border, faded fill, and the same focus ring. */
.domain-vertical-structure .domain-radio-container.checked {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
  box-shadow: 0 0 0 2px var(--whmp-focus-ring);
}

.domain-radio-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  cursor: pointer;
  margin: 0;
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
}

.domain-vertical-structure .domain-radio-container.checked .domain-radio-label {
  color: var(--whmp-primary);
}

.domain-vertical-structure .domain-radio-container .whmp-input-grp input {
  background: var(--whmp-bg-base) !important;
  padding: 5px 49px;
  height: var(--input-height-md) !important;
  border-radius: var(--border-radius-xl) !important;
  font-size: var(--font-md);
  margin: 0;
  max-width: 160%;
}
#single-domain-result .domain-result-content.single-register {
  display: flex;
  justify-content: space-between;
  width: 100%;
  color: var(--whmp-text-primary);
}

#single-domain-result .domain-result-content {
  width: 100%;
  color: var(--whmp-text-primary);
}

#domain-result-vertical .domain-result-content {
  display: flex;
  justify-content: space-between;
  width: 100%;
  color: var(--whmp-text-primary);
}

.domain-vertical-structure .domain-radio-container .input-group-append button {
  padding: 16px !important;
  border-radius: var(--border-radius-sm) !important;
}

.domain-vertical-structure .domain-radio-container .input-group-append select {
  height: var(--input-height-sm);
  margin: 0;
  margin-right: var(--spacing-sm);
}

.domain-vertical-structure span.radio-custom {
  display: none;
}

/* The native input IS the control now, tinted the same way as every other radio
   in the form. The hand-drawn .radio-custom circle below is therefore redundant
   and is taken out of the flow rather than left as a second, differently-sized
   dot beside it. */
.domain-type-radio {
  position: static;
  opacity: 1;
  pointer-events: auto;
  margin: 0;
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  accent-color: var(--whmp-primary);
  cursor: pointer;
}

.domain-radio-label .radio-custom {
  display: none;
}

.domain-type-radio:checked ~ .domain-radio-label .radio-custom {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.domain-type-radio:checked ~ .domain-radio-label .radio-custom::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 8px;
  height: 8px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-base);
}

.domain-input-container {
  margin-top: var(--spacing-lg);
  padding-top: var(--spacing-lg);
  border-top: 1px solid var(--whmp-border-light);
}

#domain-result-vertical {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xxl);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-sm);
}

#domain-result-vertical .whmp-alert.whmp-alert-danger i.fa.fa-times {
  background: var(--whmp-domain-taken-bg);
  color: var(--whmp-danger);
  font-size: var(--font-7xl);
  width: 60px;
  height: 60px;
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  margin-right: 15px;
}

#domain-result-vertical .whmp-alert.whmp-alert-danger {
  display: flex;
  align-items: center;
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0 0 var(--spacing-sm) 0;
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-danger);
}

.domain-vertical-structure .domain-search-container .whmp-input-grp {
  display: flex;
  flex-wrap: unset;
}

.domain-vertical-structure .domain-search-container .whmp-input-grp input {
  border-bottom-right-radius: 0 !important;
  border-top-right-radius: 0 !important;
}

/* ========================================
   SINGLE DOMAIN STRUCTURE
   ======================================== */
.domain-single-structure {
  background: var(--whmp-bg-base);
  padding: var(--spacing-md) var(--font-5xl);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.domain-search-container-single .whmp-input-grp {
  position: relative;
}

.domain-search-container-single .input-group-append {
  position: absolute;
  right: 0px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 10;
}

.domain-search-container-single button.domain-search-btn-single {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  color: var(--whmp-text-inverse);
  font-weight: var(--font-weight-medium);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-md) var(--spacing-xl);
  font-size: var(--font-lg);
  height: 60px;
}

.domain-search-container-single button.domain-search-btn-single:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

/* Single Domain Results */
#single-domain-result {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xl);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.single-result-available .single-result-main,
.single-result-taken .single-result-main {
  display: flex;
  align-items: center;
  gap: var(--spacing-lg);
}

.single-result-available i.fa-check {
  background: var(--whmp-domain-available-bg);
  color: var(--whmp-success);
  font-size: var(--font-7xl);
  width: 60px;
  height: 60px;
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.single-result-taken i.fa-times {
  background: var(--whmp-domain-taken-bg);
  color: var(--whmp-danger-bright);
  font-size: var(--font-7xl);
  width: 60px;
  height: 60px;
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.single-result-main .result-text {
  flex: 1;
  display: flex;
  justify-content: space-between;
}

.single-result-main .whmp-alert {
  background: transparent;
  border: 0;
  padding: 0;
  margin: 0 0 var(--spacing-sm) 0;
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-danger-bright);
}

.single-result-main .result-price {
  font-size: var(--font-4xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

.single-result-available button.add-domain-btn {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
  padding: var(--spacing-md) var(--spacing-xl);
  font-size: var(--font-lg);
  font-weight: var(--font-weight-medium);
  white-space: nowrap;
}

.single-result-actions {
  display: grid;
  gap: var(--spacing-md);
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin-top: var(--spacing-lg);
}

.single-result-actions button {
  flex: 1;
  min-width: 200px;
  padding: var(--spacing-md) var(--spacing-lg);
  font-size: var(--font-base);
  font-weight: var(--font-weight-medium);
}

.use-taken-domain-btn {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-primary);
}

.use-taken-domain-btn:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
}

.transfer-taken-domain-btn:hover {
  background: transparent;
  color: var(--whmp-primary-hover);
  border-color: var(--whmp-primary-hover);
}

.transfer-taken-domain-btn {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
}

/* TLDs Suggestions List */
.tlds-suggestions-container {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.tlds-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-lg);
}

.tlds-grid {
  display: grid !important;
}

.tld-item {
  display: flex;
  flex-direction: column;
  padding: var(--spacing-md);
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
}

.tld-item-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  gap: var(--spacing-sm);
}

.tld-item:hover {
  background: var(--whmp-primary-faded);
}

.tld-info {
  flex: 1;
  display: flex;
  justify-content: space-between;
}

.tld-domain {
  font-size: var(--font-lg);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
}

.tld-domain strong {
  color: var(--whmp-primary);
}

.tld-price {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  font-weight: var(--font-weight-medium);
  margin-right: var(--spacing-lg);
}

.add-tld-domain-btn {
  background: var(--whmp-primary-faded);
  border-color: var(--whmp-primary-light);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  padding: var(--spacing-sm) var(--spacing-md);
  white-space: nowrap;
}

.tld-epp-inline {
  width: 100%;
  padding-top: var(--spacing-sm);
}

.tld-epp-inline-inner {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  width: 100%;
}

.tld-epp-inline-inner .tld-epp-input {
  flex: 1;
  min-width: 0;
}

.tld-epp-inline-inner .tld-epp-confirm-btn {
  white-space: nowrap;
  flex-shrink: 0;
}

/*.add-tld-domain-btn:hover {*/
/*    background: var(--whmp-bg-base);*/
/*    border-color: var(--whmp-primary);*/
/*    color: var(--whmp-primary);*/
/*}*/

/* TLD View More Button */
.tlds-view-more-wrapper {
  text-align: center;
  padding: var(--spacing-md) 0 var(--spacing-sm);
}

.view-more-tlds-btn {
  min-width: 160px;
  padding: var(--spacing-sm) var(--spacing-lg);
  font-weight: var(--font-weight-medium);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
}

.view-more-tlds-btn i {
  margin-right: var(--spacing-xs);
}

/* TLD Suggestions Loading */
.tlds-suggestions-loading {
  text-align: center;
  padding: var(--spacing-lg);
  color: var(--whmp-text-secondary);
  font-size: var(--font-md);
}

.tlds-suggestions-loading i {
  margin-right: var(--spacing-xs);
}

.whmp-button-danger {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover)) !important;
  border-color: var(--whmp-primary-hover) !important;
  color: var(--whmp-text-inverse) !important;
}

.whmp-button-danger:hover {
  background: var(--whmp-bg-base) !important;
  border-color: var(--whmp-primary) !important;
  color: var(--whmp-primary) !important;
}

/* ========================================
   DOMAINS IN CART (SINGLE STRUCTURE)
   ======================================== */
.domains-in-cart-container {
  margin-top: var(--spacing-xl);
  background: var(--whmp-bg-base);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.domain-in-cart-item {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-md);
  transition: var(--transition-base);
}

.domain-in-cart-item:last-child {
  margin-bottom: 0;
}

.domain-in-cart-item:hover {
  border-color: var(--whmp-primary-hover);
  box-shadow: var(--shadow-sm);
}

.domain-in-cart-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--spacing-md);
  padding-bottom: var(--spacing-md);
  border-bottom: 1px solid var(--whmp-border-light);
}

.domain-in-cart-info {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
}

.domain-in-cart-icon {
  font-size: var(--font-xl);
  color: var(--whmp-primary);
}

.domain-in-cart-details {
  display: flex;
  flex-direction: column;
}

.domain-in-cart-name {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

.domain-in-cart-type {
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
}

.domain-in-cart-period,
.domain-in-cart-addons {
  margin-bottom: var(--spacing-md);
}

.domain-in-cart-period:last-child,
.domain-in-cart-addons:last-child {
  margin-bottom: 0;
}

.domain-in-cart-period label,
.domain-in-cart-addons label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
  display: block;
  padding: var(--spacing-md);
}

.domain-period-select-cart {
  width: 100%;
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-sm);
  background: var(--whmp-bg-base);
  height: var(--select-height);
  color: var(--whmp-text-primary);
}

.domain-addons-checkboxes {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.domain-addon-checkbox-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  cursor: pointer;
  padding: var(--spacing-sm);
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-sm);
  transition: var(--transition-base);
}

.domain-addon-checkbox-label:hover {
  border-color: var(--whmp-primary-hover);
  background: var(--whmp-primary-faded);
}

.domain-addon-checkbox-cart {
  cursor: pointer;
}

.domain-addon-checkbox-label.whmp-checkbox-styled .whmp-checkbox-indicator {
  flex: 0 0 20px;
  margin-top: 0;
  margin-right: 0;
}

.domain-addon-checkbox-label span {
  font-size: var(--font-lg);
  color: var(--whmp-text-primary);
  margin-left: 0;
}

.epp-code-inline-container {
  background: var(--whmp-bg-base);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--whmp-border-light);
  margin-top: 15px;
}

.epp-code-inline-container label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
}

.epp-code-inline-container .whmp-form-cntrl {
  height: var(--input-height-sm);
}

.epp-code-inline-container .whmp-btn {
  height: var(--input-height-sm);
  white-space: nowrap;
}

.domain-in-cart-item
  button.whmp-btn.whmp-btn-sm.whmp-button-danger.btn-loading.remove-domain-from-cart {
  background: var(--whmp-danger) !important;
  border-color: var(--whmp-danger) !important;
}

.domain-in-cart-item
  button.whmp-btn.whmp-btn-sm.whmp-button-danger.btn-loading.remove-domain-from-cart
  i.fa.fa-trash {
  color: var(--whmp-text-inverse);
}

/* ========================================
   FREE DOMAIN INDICATOR WITH CUSTOM TOOLTIP
   ======================================== */
.free-domain-indicator {
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-md);
  border-top: 1px solid var(--whmp-border-light);
}

.free-domain-wrapper {
  position: relative;
  display: inline-block;
}

.free-domain-text {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  font-size: var(--font-sm);
  color: var(--whmp-success);
  font-weight: var(--font-weight-medium);
  cursor: help;
  transition: var(--transition-base);
}

.free-domain-text:hover {
  color: var(--whmp-success);
}

.free-domain-text .fa-gift {
  color: var(--whmp-primary);
  font-size: var(--font-base);
  animation: giftPulse 2s ease-in-out infinite;
}

@keyframes giftPulse {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.1);
  }
}

.free-domain-text .fa-info-circle {
  color: var(--whmp-text-secondary);
  font-size: var(--font-sm);
  transition: var(--transition-base);
}

.free-domain-text:hover .fa-info-circle {
  color: var(--whmp-primary-hover);
}

.free-domain-text .ml-1 {
  margin-left: var(--spacing-xs);
}

/* Custom Tooltip */
.free-domain-tooltip {
  position: absolute;
  bottom: calc(100% + 12px);
  left: 50%;
  transform: translateX(-50%);
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  color: var(--whmp-text-inverse);
  padding: var(--spacing-md);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-lg);
  min-width: 280px;
  max-width: 350px;
  opacity: 0;
  visibility: hidden;
  transition:
    opacity 0.3s ease,
    visibility 0.3s ease,
    transform 0.3s ease;
  z-index: var(--z-tooltip);
  pointer-events: none;
}

.free-domain-wrapper:hover .free-domain-tooltip {
  opacity: 1;
  visibility: visible;
  transform: translateX(-50%) translateY(5%);
}

/* Tooltip Arrow */
.tooltip-arrow {
  position: absolute;
  bottom: -6px;
  left: 50%;
  transform: translateX(-50%);
  width: 0;
  height: 0;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
  border-top: 8px solid var(--whmp-bg-deep);
}

.tooltip-content {
  text-align: left;
}

.tooltip-content strong {
  display: block;
  font-size: var(--font-base);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-inverse);
  margin-bottom: var(--spacing-xs);
}

.tooltip-content p {
  font-size: var(--font-sm);
  /* The tooltip is a dark fill - this is text ON it, not muted text beside it. */
  color: var(--whmp-text-inverse);
  margin: var(--spacing-xs) 0;
  line-height: 1.5;
}

.tooltip-content .tooltip-tlds {
  margin-top: var(--spacing-md);
  margin-bottom: var(--spacing-xs);
  color: var(--whmp-text-inverse);
}

.tlds-list {
  background: var(--whmp-bg-base);
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-sm);
  font-size: var(--font-sm);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  max-height: 100px;
  overflow-y: auto;
  line-height: 1.6;
}

/* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. The track here
   was a hardcoded rgba(255,255,255,0.05) - invisible on a light theme. */

/* ========================================
   QUANTITY SLIDER STYLES
   ======================================== */
.config-quantity-wrapper {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.quantity-slider-row {
  display: flex;
  gap: var(--spacing-md);
  align-items: center;
}

.quantity-slider-col {
  flex: 1;
  min-width: 0;
  position: relative;
}

.quantity-input-col {
  width: 80px;
  flex-shrink: 0;
}

.quantity-slider {
  height: 8px;
  background: var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  border: none;
  position: relative;
  width: 100%;
}

.quantity-slider .ui-slider-range {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-md);
  position: absolute;
  height: 100%;
}

.quantity-slider .ui-slider-handle {
  width: 20px;
  height: 20px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-circle);
  border: 2px solid var(--whmp-bg-base);
  cursor: pointer;
  top: 50%;
  transform: translateY(-50%);
  margin-left: -10px;
  outline: none;
  box-shadow: var(--shadow-sm);
}

.quantity-slider .ui-slider-handle:hover,
.quantity-slider .ui-slider-handle.ui-state-active {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3);
  transform: translateY(-50%) scale(1.1);
}

.quantity-slider .ui-slider-handle:active {
  transform: translateY(-50%) scale(0.95);
}

.config-option-quantity {
  width: 100%;
  text-align: center;
  background: var(--whmp-bg-base);
  border: none;
  color: var(--whmp-primary);
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-md);
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  height: 45px;
  box-shadow: var(--shadow-sm);
}

.config-option-quantity:focus {
  outline: none;
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

.quantity-pricing-label {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-md);
  background: var(--whmp-bg-base);
  box-shadow: var(--shadow-sm);
  border-radius: var(--border-radius-md);
  font-size: var(--font-md);
}

.pricing-left,
.pricing-right {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
}

.quantity-multiplier {
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

.quantity-value {
  color: var(--whmp-primary);
  font-weight: var(--font-weight-bold);
}

.price-per-unit {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
}

.pricing-separator {
  color: var(--whmp-text-secondary);
  margin: 0 var(--spacing-xs);
}

.setup-label {
  color: var(--whmp-text-secondary);
}

.setup-fee {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
}

.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

.ui-slider-handle.ui-corner-all.ui-state-default {
  top: 5px;
}

/* ========================================
   BILLING DETAILS MODAL
   ======================================== */
#billingDetailsModal.whmp_oso-modal-popup {
  color: var(--whmp-text-secondary);
}

#billingDetailsModal .whmp_oso-modal-popup-dialog {
  max-width: 900px;
  transform: translateY(0rem);
  bottom: 25px;
  width: auto;
}

#billingDetailsModal .whmp_oso-modal-popup-content {
  background: var(--whmp-bg-base) !important;
  border-radius: var(--border-radius-lg);
  border: none;
  box-shadow: var(--shadow-lg);
  color: var(--whmp-text-secondary);
}

#billingDetailsModal .whmp_oso-modal-popup-header {
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
  color: var(--whmp-text-inverse) !important;
  border-bottom: none;
  padding: var(--spacing-xl);
  border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-md);
}

#billingDetailsModal .whmp_oso-modal-popup-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  display: flex;
  align-items: baseline;
  gap: var(--spacing-sm);
  color: var(--whmp-text-inverse) !important;
  margin: 0;
}

#billingDetailsModal .whmp_oso-modal-popup-close {
  color: var(--whmp-text-inverse) !important;
  opacity: 1;
  font-size: var(--font-6xl);
  text-shadow: none;
  background: transparent;
  border: none;
  line-height: 1;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  margin: 0;
  flex-shrink: 0;
}

#billingDetailsModal .whmp_oso-modal-popup-close span {
  display: block;
  line-height: 1;
  margin-top: -4px;
}

#billingDetailsModal .whmp_oso-modal-popup-close:hover {
  color: var(--whmp-text-inverse) !important;
  opacity: 0.8;
}

#billingDetailsModal .whmp_oso-modal-popup-body {
  padding: var(--spacing-xl);
  max-height: 65vh;
  overflow-y: auto;
  background: var(--whmp-bg-base);
  color: var(--whmp-text-secondary);
}

/* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. */

#billingDetailsModal .whmp_oso-modal-popup-footer {
  padding: var(--spacing-lg) var(--spacing-xl);
  border-top: 1px solid var(--whmp-border-light);
  background: var(--whmp-bg-base) !important;
  border-radius: 0 0 var(--border-radius-lg) var(--border-radius-lg);
}

#billingDetailsModal .modal-customer-details .oso_customer_details {
  background: transparent;
  box-shadow: none;
  padding: 0;
  margin: 0;
}

/* ========================================
   SECTION HEADER ICONS
   ======================================== */
div#product-section .section-header,
div#billing-cycle-section .section-header,
div#domain-section .section-header,
div#addons-section .section-header,
div#order-standard_cart .section-header,
div#config-options-section .section-header,
div#server-config-section .section-header,
div#custom-fields-section .section-header,
div#product-domain-config-section .section-header,
.section.payment-section .section-header {
  display: flex;
  align-items: center;
}

div#product-section .section-header img,
div#billing-cycle-section .section-header img,
div#domain-section .section-header img,
div#addons-section .section-header img,
div#config-options-section .section-header img,
div#order-standard_cart .section-header img,
div#server-config-section .section-header img,
div#custom-fields-section .section-header img,
div#product-domain-config-section .section-header img,
.section.payment-section .section-header img {
  margin-right: 10px;
  width: 41px;
}

/* General fallback so EVERY section's admin-uploaded heading image is sized
   consistently, including sections not covered by the specific list above
   (order terms, billing details, cross-sells, domain addons, nameservers). */
#one-step-cart .section-header img {
  width: 41px;
  height: auto;
  max-height: 41px;
  object-fit: contain;
  margin-right: 10px;
  vertical-align: middle;
}

/* ========================================
   FORM STYLES
   ======================================== */
.config-option-select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  width: 100%;
  padding: 10px 40px 10px 12px;
  font-size: var(--font-md);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-lg);
  background-color: var(--whmp-bg-base);
  cursor: pointer;
  box-shadow: var(--shadow-sm);
  transition: var(--transition-base);
  position: relative;
}

.config-option-select:hover {
  box-shadow: 0 4px 18px rgba(0, 0, 0, 0.15);
}

.config-option-select:focus {
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
  outline: none;
}

.modal-dialog.modal-lg.modal-dialog-centered
  .modal-footer
  button#btnCompleteRegistration {
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.stripe-cards-inputs.col-md-8.col-md-offset-2.offset-md-2 {
  margin: 0;
  max-width: 300px;
}

.stripe-cards-inputs.col-md-8.col-md-offset-2.offset-md-2 .row label {
  width: 320px;
  padding-top: 6px;
}

.stripe-cards-inputs.col-md-8.col-md-offset-2.offset-md-2 div#stripeCreditCard {
  width: 320px !important;
}

/* ========================================
   RESPONSIVE UPDATES
   ======================================== */
@media (max-width: 768px) {
  .domain-radio-label {
    font-size: var(--font-lg);
  }

  .domain-radio-container {
    padding: var(--spacing-md);
  }

  .domain-single-structure {
    padding: var(--spacing-lg);
  }

  .domain-search-container-single input.domain-search-input-single {
    font-size: var(--font-md);
  }

  .single-result-main {
    flex-direction: column;
    text-align: center;
  }

  .single-result-actions {
    flex-direction: column;
  }

  .single-result-actions button {
    width: 100%;
  }

  .tlds-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  #single-domain-result {
    padding: var(--spacing-lg);
  }

  .domain-in-cart-header {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--spacing-sm);
  }

  .remove-domain-from-cart {
    align-self: flex-end;
  }

  .quantity-slider-row {
    flex-direction: column;
  }

  .quantity-input-col {
    width: 100%;
  }

  .quantity-slider {
    width: 100% !important; /* FORCE full width */
    min-width: 100%; /* ADD THIS */
  }

  .quantity-pricing-label {
    flex-direction: column;
    gap: var(--spacing-sm);
  }

  .pricing-left,
  .pricing-right {
    width: 100%;
    justify-content: space-between;
  }

  #billingDetailsModal .whmp_oso-modal-popup-dialog {
    max-width: 95%;
    margin: var(--spacing-md);
  }

  #billingDetailsModal .whmp_oso-modal-popup-body {
    max-height: 60vh;
    padding: var(--spacing-md);
  }
}

@media (min-width: 320px) and (max-width: 425px) {
  .domain-search-container-single {
    max-width: 100%;
  }

  .domain-search-container-single input.domain-search-input-single {
    padding: var(--spacing-sm) var(--spacing-md) var(--spacing-sm) 40px;
    height: 50px;
  }

  #single-search-icon {
    left: 12px;
    font-size: var(--font-lg);
  }

  .domain-search-container-single button.domain-search-btn-single {
    font-size: var(--font-md);
    padding: var(--spacing-sm) var(--spacing-md);
    height: 40px;
  }

  .single-result-main .result-text {
    display: block;
  }

  .tlds-suggestions-container {
    padding: 0;
  }

  .section-title {
    font-size: var(--font-3xl);
  }

  .addon-item
    .card-body
    .addon_price
    button.whmp-btn.whmp-btn-sm.whmp-button-primary.btn-loading.toggle-addon-btn {
    padding: var(--spacing-sm);
    font-size: var(--font-xs);
  }

  .domain-configuration-content {
    display: block;
  }

  .quantity-slider-col {
    width: 100%;
    padding: 0;
    margin-bottom: var(--spacing-sm); /* ADD THIS */
  }

  .quantity-pricing-label {
    font-size: var(--font-sm);
    padding: var(--spacing-sm);
  }

  .free-domain-tooltip {
    min-width: 220px;
    max-width: 280px;
    font-size: var(--font-xs);
  }

  .tooltip-content strong {
    font-size: var(--font-sm);
  }

  .tooltip-content p,
  .tlds-list {
    font-size: var(--font-xs);
  }
}

/* ========================================
   ORDER TERMS SECTION
   ======================================== */
.section.order-terms-section.section--full-width.mt-4 .section-body {
  padding: var(--spacing-xxl);
  box-shadow: var(--shadow-sm);
}

div#config-options-section .section-body {
  padding: var(--spacing-lg);
}

.section.order-terms-section.section--full-width.mt-4
  .section-body
  .sub-heading
  span.primary-bg-color {
  color: var(--whmp-primary) !important;
}

.section.order-terms-section.section--full-width.mt-4
  .section-body
  .sub-heading {
  text-align: left !important;
  border: 0 !important;
}

.section.section--billing-details.section--full-width .sub-heading {
  border: 0 !important;
  text-align: left !important;
}

.section.section--billing-details.section--full-width
  .sub-heading
  span.primary-bg-color {
  color: var(--whmp-primary) !important;
  font-weight: 600;
}

/* ========================================
   BILLING CYCLE RADIO MODE
   ======================================== */
.billing-cycle-radio-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  cursor: pointer;
  padding: var(--spacing-sm);
  margin: 0;
  justify-content: end;
  position: absolute;
  top: var(--spacing-sm);
  right: var(--spacing-sm);
  width: 25px;
  height: 25px;
  border-radius: var(--border-radius-circle);
}

.billing-cycle-radio {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.radio-custom {
  width: 20px;
  height: 20px;
  border: 2px solid var(--whmp-primary);
  border-radius: var(--border-radius-circle);
  position: relative;
  flex-shrink: 0;
  transition: var(--transition-base);
}

.billing-cycle-radio:checked + .radio-custom {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.billing-cycle-radio:checked + .radio-custom::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 8px;
  height: 8px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-base);
}

.radio-label-text {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-primary);
}

/* ========================================
   DOMAIN ADDON CHECKBOX MODE
   ======================================== */
.domain-addon-radio-label {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  cursor: pointer;
  padding: var(--spacing-sm);
  margin: 0;
  width: 100%;
  justify-content: center;
}

.domain-addon-checkbox {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.checkbox-custom {
  width: 20px;
  height: 20px;
  border: 2px solid var(--whmp-primary);
  border-radius: var(--border-radius-sm);
  position: relative;
  flex-shrink: 0;
  transition: var(--transition-base);
}

.domain-addon-checkbox:checked + .checkbox-custom {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.domain-addon-checkbox:checked + .checkbox-custom::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 8px;
  height: 8px;
  border-radius: var(--border-radius-circle);
  background: var(--whmp-bg-base);
}

/* ========================================
   DOMAIN INCART PANEL
   ======================================== */
.panel-domain-incart {
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-lg);
  margin-bottom: var(--spacing-lg);
  border: 1px solid var(--whmp-bg-alt);
}

.panel-domain-incart .whmp-panel-body {
  padding: var(--spacing-lg);
}

.domain-incart {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--spacing-md);
}

.domain-incart-body {
  display: flex;
  align-items: center;
}

div#selected-domain-container .whmp-panel-body {
  padding: 0 10px 20px 0;
}

.domain-incart-icon {
  font-size: var(--font-6xl);
  color: var(--whmp-primary);
}

.domain-incart-message {
  font-size: var(--font-lg);
  color: var(--whmp-text-primary);
  margin: 0;
}

.domain-incart-message b {
  color: var(--whmp-primary);
}

.domain-incart-actions {
  display: flex;
  gap: var(--spacing-sm);
}

.form-flex {
  display: flex;
  gap: var(--spacing-lg);
  flex-wrap: wrap;
}

.form-flex .whmp-form-grp {
  flex: 1;
  min-width: 200px;
}

.whmp-form-grp-sm label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
}

#product-domain-config-section .section-body {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xxl);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

/* ========================================
   RECOMMENDED PRODUCTS SECTION
   ======================================== */
.recommended-products-container {
  margin: var(--spacing-lg) 0;
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-recommended-per-row) - 1) * var(--spacing-md)) / var(--grid-recommended-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
}

@media (max-width: 991px) {
  .recommended-product-item {
    flex: 1 1 100% !important;
    max-width: 100% !important;
  }
}

.recommended-product-item .card {
  border: 0;
  border-radius: var(--border-radius-base);
  transition: var(--transition-base);
  display: flex;
  flex-direction: column;
  height: 100%;
  background: transparent;
}

.recommended_product_img img {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
}

.recommended-product-item .card-body {
  padding: var(--spacing-lg) var(--spacing-md);
  display: flex;
  flex-grow: 1;
  color: var(--whmp-text-inverse);
  overflow: hidden;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-lg);
  transition: var(--transition-base);
  position: relative;
  box-shadow: var(--shadow-sm);
  height: 100%;
  margin-bottom: 20px;
}

.recommended-product-item .card-body.selected {
  border: 1px solid var(--whmp-primary);
  color: var(--whmp-primary);
  background-color: var(--whmp-bg-base);
  overflow: visible;
}

.recommended-product-item .card-body.selected .check-sign {
  position: absolute;
  top: 10px;
  right: 10px;
  width: 30px;
  height: 30px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 10;
}

.recommended-product-item .card-body.selected .check-sign i {
  color: var(--whmp-text-inverse);
  font-size: var(--font-md);
}

.recommended-product-item .card-title {
  font-size: var(--font-xl);
  margin-bottom: var(--spacing-sm);
  font-weight: var(--font-weight-bold);
}

.recommended-product-item .card-text {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  margin-bottom: var(--spacing-md);
  flex-grow: 1;
}

.recommended-product-item .recommended-product-pricing {
  margin: 0 8px 6px;
  font-size: var(--font-md);
}

.recommended_product_price {
  display: flex;
  align-items: center;
}

/* The call to action on a primary-filled card: the card's surface colour with
   the brand colour on it, which is the same treatment the product card's Select
   button gets, just inverted to read against the fill.
   `width: 45%` was cutting the label off - "Add to Ca" - so the width now comes
   from the content, and the price beside it gets its own breathing room rather
   than butting against the button.
   --whmp-primary rather than --whmp-primary-hover: hover is a state, not a
   resting colour, and on Nexum it resolves to a deep purple that matched
   nothing else on the card. */
.recommended-product-item
  .card-body
  .recommended_product_price
  button.whmp-btn.whmp-btn-sm.whmp-button-primary.btn-loading.toggle-recommended-btn {
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  background: var(--whmp-bg-base);
  border-color: var(--whmp-bg-base);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  width: auto;
  min-width: 0;
  white-space: nowrap;
  margin-right: var(--spacing-md);
}

/* The "added" state, same sizing rules as above so its label is not cut off
   either. It reads as a remove action, so it takes the danger colour rather
   than a second brand shade. */
.recommended-product-item
  .card-body
  .recommended_product_price
  button.whmp-btn.whmp-btn-sm.btn-loading.toggle-recommended-btn.rec-prod-added.whmp-button-danger {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-bg-base);
  color: var(--whmp-danger);
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  width: auto;
  min-width: 0;
  white-space: nowrap;
  margin-right: var(--spacing-md);
}

.recommended-billing-cycle-selector {
  padding: var(--spacing-md);
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-md);
  margin-top: var(--spacing-md);
}

.recommended-billing-cycle-selector label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
}

.rec-billing-select {
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-primary);
  height: 45px;
}

@media (min-width: 320px) and (max-width: 425px) {
  .recommended_product_img {
    display: flex;
    justify-content: center;
  }

  .recommended_product_img img {
    padding-top: var(--spacing-sm);
  }

  .recommended-product-item .card-body {
    display: block;
  }

  .recommended-product-item
    .card-body
    .recommended_product_price
    button.whmp-btn.whmp-btn-sm.whmp-button-primary.btn-loading.toggle-recommended-btn {
    padding: 7px 13px;
    min-width: 107px;
    margin: var(--spacing-sm) 0;
  }
}

/* ========================================
   SERVER CONFIGURATION & CUSTOM FIELDS
   ======================================== */
#server-config-section .section-body,
#custom-fields-section .section-body,
.section.payment-section .section-body,
.section.section--billing-details .section-body,
#config-options-section .section-body,
#domain-nameservers-section .section-body {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xl);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.server-field,
.custom-field {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  color: var(--whmp-text-primary);
  height: var(--input-height-sm);
  padding: var(--spacing-sm) var(--spacing-md);
}

.server-field:focus,
.custom-field:focus {
  border-color: var(--whmp-primary);
  outline: none;
}

.custom-field[type="checkbox"] {
  height: auto;
  width: auto;
}

textarea.custom-field {
  height: auto;
  resize: vertical;
}

.whmp-tab-cont > .tab-pane {
  display: none !important;
}

.whmp-tab-cont > .active {
  display: block !important;
}

/*Changes Required Here */

.whmp-form-grp {
  margin-bottom: var(--spacing-lg);
}

.whmp-form-grp label {
  display: inline-block;
  margin-bottom: var(--spacing-xs);
  font-weight: var(--font-weight-medium);
}

.whmp-form-cntrl {
  display: block;
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  line-height: 1.5;
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
  background-clip: padding-box;
  border: 1px solid var(--whmp-bg-alt);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
}

.whmp-form-cntrl:not(.rec-billing-select) {
  width: 100%;
}

.whmp-form-cntrl:focus {
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
  border-color: var(--whmp-primary);
  outline: 0;
  box-shadow: 0 0 0 0.2rem var(--whmp-focus-ring);
}

.whmp-btn {
  display: inline-block;
  font-weight: var(--font-weight-normal);
  text-align: center;
  white-space: nowrap;
  vertical-align: middle;
  user-select: none;
  border: 1px solid transparent;
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  line-height: 1.5;
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
  cursor: pointer;
  background-color: transparent;
}

.whmp-button-primary {
  color: var(--whmp-btn-primary-text, var(--whmp-text-inverse));
  background-color: var(--whmp-btn-primary-bg, var(--whmp-primary));
  border-color: var(--whmp-btn-primary-bg, var(--whmp-primary));
}

.single-result-actions
  button.whmp-btn.whmp-button-primary.btn-loading.use-taken-domain-btn {
  color: var(--whmp-primary);
  background: transparent;
}

.single-result-actions
  button.whmp-btn.whmp-button-primary.btn-loading.use-taken-domain-btn:hover {
  color: var(--whmp-text-inverse);
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

.section.payment-section.section--full-width.mt-4 .section-body {
  padding: var(--spacing-sm);
}

.single-result-actions
  button.whmp-btn.whmp-button-primary.btn-loading.transfer-taken-domain-btn:hover {
  background: transparent;
  color: var(--whmp-primary-hover);
  border-color: var(--whmp-primary-hover);
}

.whmp-button-primary:hover {
  color: var(--whmp-text-inverse);
  background-color: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  text-decoration: none;
}

.whmp-btn:focus,
.whmp-btn:active {
  outline: 0;
}

.whmp-button-primary:focus {
  box-shadow: 0 0 0 0.2rem var(--whmp-focus-ring-strong);
}

.whmp-button-primary:active {
  background-color: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary);
}

.whmp-btn:disabled,
.whmp-btn.disabled {
  opacity: 0.65;
  cursor: not-allowed;
  box-shadow: none;
}

/*Changes Required Till Here */

.whmp-panel {
  margin-bottom: var(--spacing-lg);
  background-color: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-sm);
  -webkit-box-shadow: var(--shadow-sm);
}

/* ========================================
   STOCK CONTROL BADGES
   ======================================== */
.product-stock-info {
  margin: var(--spacing-sm) 0;
  text-align: center;
}

.stock-badge {
  display: inline-block;
  padding: 4px 12px;
  border-radius: var(--border-radius-xl);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.stock-in {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
}

.stock-out {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
}

.product-card button.choose-plan-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
  background: var(--whmp-border-light);
  border-color: var(--whmp-border-light);
  color: var(--whmp-text-secondary);
}

.product-card button.choose-plan-btn:disabled:hover {
  background: var(--whmp-border-light);
  border-color: var(--whmp-border-light);
  transform: none;
}

/* ========================================
   DOMAIN FIELDS SECTION
   ======================================== */
.domain-fields-section {
  margin-top: var(--spacing-lg);
  padding: var(--spacing-lg);
  background: var(--whmp-bg-base);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--whmp-border-light);
}

.domain-fields-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-lg);
  padding-bottom: var(--spacing-sm);
  border-bottom: 2px solid var(--whmp-border-light);
}

.domain-field-item {
  margin-bottom: var(--spacing-lg);
}

.domain-field-item:last-child {
  margin-bottom: 0;
}

.domain-field-item label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
  display: block;
}

.domain-field-description {
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
  margin-bottom: var(--spacing-sm);
  line-height: 1.5;
  padding: var(--spacing-xs) var(--spacing-sm);
  background: var(--whmp-bg-base);
  border-left: 3px solid var(--whmp-primary);
  border-radius: var(--border-radius-sm);
}

.domain-field-input,
.domain-field-input-cart {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  line-height: 1.5;
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
  height: var(--input-height-sm);
}

.domain-field-input:focus,
.domain-field-input-cart:focus {
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
  border-color: var(--whmp-primary);
  outline: 0;
}

.domain-field-input.field-error,
.domain-field-input-cart.field-error {
  border-color: var(--whmp-danger);
}

.domain-field-input.field-error:focus,
.domain-field-input-cart.field-error:focus {
  border-color: var(--whmp-danger);
  box-shadow: 0 0 0 0.2rem var(--whmp-focus-ring-danger);
}

.domain-field-select {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  background-repeat: no-repeat;
  background-position: right var(--spacing-md) center;
  background-size: 12px;
  padding-right: 40px;
}

.domain-field-checkbox-label {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-sm);
  cursor: pointer;
  padding: var(--spacing-sm);
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  border-radius: var(--border-radius-sm);
  transition: var(--transition-base);
  margin-top: var(--spacing-xs);
}

.domain-field-checkbox-label:hover {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
}

.domain-field-checkbox-label span {
  flex: 1;
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  line-height: 1.5;
  margin-top: 2px;
  padding-left: var(--spacing-xs);
}

/* Domain Fields in Cart Items */
.domain-in-cart-item .domain-fields-section {
  margin-top: var(--spacing-md);
  padding: var(--spacing-md);
  background: var(--whmp-bg-base);
}

.domain-in-cart-item .domain-fields-title {
  font-size: var(--font-lg);
  margin-bottom: var(--spacing-md);
}

.domain-in-cart-item .domain-field-item {
  margin-bottom: var(--spacing-md);
}

/* Domain Fields in Selected Domain Container (Single Mode) */
#selected-domain-container .domain-fields-section {
  border-top: 1px solid var(--whmp-border-light);
  padding-top: var(--spacing-lg);
}

#domain-fields-container {
  margin-top: var(--spacing-md);
}

/* Domain EPP Container */
.domain-in-cart-epp {
  margin-bottom: var(--spacing-md);
  padding: var(--spacing-md);
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
}

.domain-in-cart-epp label {
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
  display: block;
}

.domain-epp-input-cart {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  border-radius: var(--border-radius-md);
  height: var(--input-height-sm);
  transition: var(--transition-base);
}

.domain-epp-input-cart:focus {
  border-color: var(--whmp-primary);
  outline: 0;
  box-shadow: 0 0 0 0.2rem var(--whmp-focus-ring);
}

.domain-epp-input-cart.field-error {
  border-color: var(--whmp-danger);
}

.domain-epp-input-cart.field-error:focus {
  border-color: var(--whmp-danger);
  box-shadow: 0 0 0 0.2rem var(--whmp-focus-ring-danger);
}

/* Responsive */
@media (max-width: 768px) {
  .domain-fields-section {
    padding: var(--spacing-md);
  }

  .domain-fields-title {
    font-size: var(--font-lg);
  }

  .domain-field-item label {
    font-size: var(--font-sm);
  }

  .domain-field-input,
  .domain-field-input-cart {
    font-size: var(--font-sm);
  }
}

@media (min-width: 320px) and (max-width: 425px) {
  .domain-fields-section {
    padding: var(--spacing-sm);
    margin-top: var(--spacing-md);
  }

  .domain-fields-title {
    font-size: var(--font-base);
    margin-bottom: var(--spacing-md);
  }

  .domain-field-description {
    font-size: var(--font-xs);
  }
}

/* ========================================
   DOMAIN SEARCH & INPUT GROUPS - MOBILE FIX
   ======================================== */

/* Domain Search Mobile Fixes */
@media (max-width: 768px) {
  /* Domain Configuration Search Container */
  .domain-configuration-content .whmp-tab-cont .domain-search-container {
    width: 100%;
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp {
    position: relative;
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    align-items: stretch;
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp
    input,
  .domain-configuration-content .whmp-tab-cont .whmp-input-grp input {
    flex: 1;
    min-width: 0;
    padding-left: 45px !important;
    padding-right: 10px !important;
    height: 50px !important;
    border-top-right-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
    max-width: 100%;
    height: auto !important;
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp
    .input-group-append {
    position: static;
    display: flex;
    flex-direction: row;
    align-items: stretch;
    flex-shrink: 0;
    top: auto;
    right: auto;
    transform: none;
    z-index: 1;
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp
    .input-group-append
    select {
    display: none; /* Hide TLD selector on mobile to save space */
  }

  .domain-configuration-content
    .whmp-tab-cont
    .domain-search-container
    .whmp-input-grp
    .input-group-append
    button,
  .domain-search-container
    .input-group-append
    button.whmp-btn.whmp-button-primary.domain-search-btn,
  .domain-configuration-content
    .whmp-tab-cont
    button.whmp-btn.whmp-button-primary.domain-use-btn {
    height: 50px;
    border-top-left-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    border-top-right-radius: var(--border-radius-lg) !important;
    border-bottom-right-radius: var(--border-radius-lg) !important;
    padding: 0 var(--spacing-lg);
    white-space: nowrap;
    font-size: var(--font-md);
    margin: 0;
  }

  /* Search Icons positioning */
  #reg-search-icon,
  #trans-search-icon,
  #own-search-icon,
  #single-search-icon,
  #reg-search-icon-v,
  #trans-search-icon-v,
  #own-search-icon-v {
    left: 15px;
    top: 50%;
    transform: translateY(-50%);
    z-index: 2;
  }

  /* Domain Vertical Structure Mobile */
  .domain-vertical-structure {
    padding: var(--spacing-md);
  }

  .domain-vertical-structure .domain-radio-container .whmp-input-grp {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
  }

  .domain-vertical-structure .domain-radio-container .whmp-input-grp input {
    flex: 1;
    border-top-right-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
    height: auto !important;
  }

  .domain-vertical-structure .domain-radio-container .input-group-append {
    position: static;
    display: flex;
    flex-direction: row;
    top: auto;
    left: auto;
  }

  .domain-vertical-structure
    .domain-radio-container
    .input-group-append
    button {
    border-top-left-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    height: 50px;
    padding: 0 var(--spacing-lg);
  }

  .domain-vertical-structure
    .domain-radio-container
    .input-group-append
    select {
    display: none;
  }

  /* Single Domain Structure Mobile */
  .domain-single-structure {
    padding: var(--spacing-md);
  }

  .domain-search-container-single .whmp-input-grp {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
  }

  .domain-search-container-single .whmp-input-grp input {
    flex: 1;
    border-top-right-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
    padding-left: 45px !important;
    height: auto !important;
  }

  .domain-search-container-single .input-group-append {
    position: static;
    transform: none;
    display: flex;
  }

  .domain-search-container-single button.domain-search-btn-single {
    border-top-left-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    height: 50px;
    padding: 0 var(--spacing-lg);
  }
}

/* ========================================
   DOMAIN TABS - MOBILE FIX
   ======================================== */

@media (max-width: 768px) {
  /* Domain Tabs Container */
  .domain-tabs {
    width: 100%;
    max-width: 100%;
    overflow: hidden;
  }

  .domain-tabs ul.nav.whmp-navi-tabs {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scroll-behavior: smooth;
    border-bottom: 2px solid var(--whmp-border-light);
    margin-bottom: var(--spacing-md);
    padding-bottom: 0;
    /* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. */
  }

  .domain-tabs ul.nav.whmp-navi-tabs .nav-item {
    flex-shrink: 0;
    margin-bottom: 0;
  }

  .domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link {
    white-space: nowrap;
    font-size: var(--font-md);
    padding: var(--spacing-sm) var(--spacing-md);
    margin-right: var(--spacing-md);
    border: 0;
    border-bottom: 2px solid transparent;
    padding-bottom: var(--spacing-sm);
  }

  .domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link.active {
    border-bottom: 2px solid var(--whmp-primary);
    padding-left: 0;
    padding-right: 0;
  }

  .domain-tabs .whmp-tab-cont {
    width: 100%;
    padding: var(--spacing-md);
  }
}

/* Small Mobile - Domain Tabs */
@media (max-width: 576px) {
  .domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link {
    font-size: var(--font-sm);
    padding: var(--spacing-xs) var(--spacing-sm);
    margin-right: var(--spacing-sm);
  }

  .domain-tabs .whmp-tab-cont {
    padding: var(--spacing-sm);
  }
}

/* ========================================
   PROMO CODE - MOBILE FIX
   ======================================== */

@media (max-width: 576px) {
  .promo-code-expanded {
    width: 100% !important;
  }

  .promo-code-container.mt-3 .whmp-input-grp {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
  }

  .promo-code-container.mt-3 .whmp-input-grp input#promo-code-input {
    flex: 1;
    min-width: 0;
    height: 48px;
    border-top-right-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
    padding-left: var(--spacing-md);
    margin-bottom: 0;
    height: auto !important;
  }

  .promo-code-container.mt-3 .whmp-input-grp .input-group-append {
    display: flex;
    flex-shrink: 0;
    width: auto;
  }

  .promo-code-container.mt-3 .whmp-input-grp button#promo-action-btn {
    height: 48px;
    width: 50px;
    min-width: 50px;
    border-top-left-radius: 0 !important;
    border-bottom-left-radius: 0 !important;
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: center;
  }
}

/* ========================================
   PRODUCT TYPE TABS - MOBILE FIX
   ======================================== */

@media (max-width: 768px) {
  .product-type-tabs .whmp-navi-tabs {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    -webkit-overflow-scrolling: touch;
    scroll-behavior: smooth;
    padding-bottom: 5px;
    user-select: none;
    -webkit-user-select: none;
    touch-action: pan-x;
  }

  .product-type-tabs .nav-item {
    flex-shrink: 0;
  }

  .product-type-tabs .whmp-navi-tabs .whmp-navi-link {
    white-space: nowrap;
    font-size: var(--font-md);
    padding: var(--spacing-sm) var(--spacing-lg);
  }
}

@media (max-width: 576px) {
  .product-type-tabs .whmp-navi-tabs .whmp-navi-link {
    font-size: var(--font-sm);
    padding: var(--spacing-xs) var(--spacing-md);
  }
}

/* ========================================
   GENERAL INPUT GROUP FIXES - MOBILE
   ======================================== */

@media (max-width: 768px) {
  /* All input groups should be inline on mobile */
  .whmp-input-grp {
    display: flex !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
  }

  .whmp-input-grp input,
  .whmp-input-grp select {
    flex: 1;
    min-width: 0;
  }

  .whmp-input-grp .input-group-append {
    display: flex;
    flex-shrink: 0;
  }

  /* Ensure buttons in input groups don't wrap */
  .whmp-input-grp .input-group-append button {
    white-space: nowrap;
  }
}

@media (max-width: 768px) {
  /* Container padding adjustments.
     Written as `div#one-step-cart`, not `#one-step-cart`, because the desktop
     rule is `div#one-step-cart { padding: var(--spacing-lg) }` - (1,0,1) - and
     an id-only selector is (1,0,0), so this one LOST on specificity and had
     never applied at any width. The intent below is the original author's; it
     simply could not take effect.
     Measured at 375px: content width 285px of 375 (29% of the screen spent on
     nested padding) before, 309px after.
     The banner's own `#one-step-cart.oso-has-mobile-banner { padding-top:74px }`
     is (1,1,0) and still outranks this, so the space reserved for the fixed
     total bar is unaffected. */
  div#one-step-cart {
    padding: 0 var(--spacing-sm);
  }

  /* Section spacing */
  .section {
    margin-bottom: var(--spacing-lg);
  }

  .section-body {
    padding: var(--spacing-md) !important;
  }

  /* Header adjustments */
  .section-title {
    font-size: var(--font-xl);
  }

  div#one-step-cart .cart-body .header-lined h2 {
    font-size: var(--font-5xl);
  }

  /* Product cards grid view on mobile */
  .products-list-container:not(.slider-mode) {
    gap: var(--spacing-sm);
  }

  .product-card {
    width: 100%;
    margin-right: 0;
  }

  /* Billing cycle cards */
  .billing-cycle-content.row-eq-height {
    width: 100%;
    margin-bottom: var(--spacing-md);
  }

  /* Domain search inputs */
  .domain-configuration-content .whmp-tab-cont .whmp-input-grp input,
  #single-domain-input {
    max-width: 100%;
    height: auto !important;
    font-size: var(--font-sm);
  }

  .domain-search-container .input-group-append button {
    padding: 12px var(--spacing-md) !important;
    font-size: var(--font-sm);
  }

  /* TLDs grid */
  .tlds-grid {
    gap: var(--spacing-sm);
  }

  .tld-item {
    padding: var(--spacing-sm);
  }

  .tld-item-row {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--spacing-sm);
  }

  .tld-info {
    width: 100%;
    flex-direction: column;
    gap: var(--spacing-xs);
  }

  .tld-epp-inline-inner {
    flex-direction: column;
  }

  .add-tld-domain-btn {
    width: 100%;
    margin-top: var(--spacing-xs);
  }

  /* Config options */
  .config-option-wrapper {
    width: 100%;
  }

  /* Form controls */
  .whmp-form-grp {
    margin-bottom: var(--spacing-md);
  }

  /* Order summary */
  #totalDueDiv {
    flex-direction: column;
    gap: var(--spacing-sm);
    align-items: flex-start;
  }

  .price-total {
    font-size: var(--font-xl);
  }

  .price-amount #totalDueToday {
    font-size: var(--font-6xl);
  }

  /* Navigation */
  .section-top-nav {
    gap: var(--spacing-md);
    align-items: stretch;
  }

  .swiper-nav {
    justify-content: center;
  }
}

/* Small Mobile Specific (320px - 576px) */
@media (max-width: 576px) {
  /* Reduce font sizes */
  #one-step-cart,
  #oso-mobile-total-banner,
  #billingDetailsModal {
    --font-xl: 16px !important;
    --font-xxl: 18px !important;
  }

  /* Tighter spacing */
  .section-body {
    padding: var(--spacing-sm) !important;
  }

  /* Domain tabs */
  .domain-tabs ul.nav.whmp-navi-tabs a.whmp-navi-link {
    font-size: var(--font-md);
    padding: var(--spacing-xs) var(--spacing-sm);
    margin-right: var(--spacing-sm);
  }

  /* Domain result */
  div#register-domain-result,
  div#transfer-domain-result,
  div#own-domain-result,
  #single-domain-result,
  #domain-result-vertical {
    padding: var(--spacing-md);
  }

  .domain-result .whmp-alert {
    font-size: var(--font-base);
  }

  /* Icons smaller */
  .domain-result i.fa-check,
  .domain-result i.fa-times {
    width: 40px;
    height: 40px;
    font-size: var(--font-xl);
    padding: var(--spacing-sm);
  }

  /* Promo code */
  .promo-code-container.mt-3 .whmp-input-grp {
    flex-wrap: wrap;
  }

  .promo-code-container.mt-3 .whmp-input-grp button#promo-action-btn {
    width: 100% !important;
  }

  /* Addon cards */
  .addon-item .card-body {
    padding: var(--spacing-md);
  }

  .addon_price {
    flex-direction: column;
    gap: var(--spacing-sm);
  }

  .addon_price button {
    width: 100%;
  }

  /* Recommended products */
  .recommended_product_price {
    flex-direction: column;
    gap: var(--spacing-sm);
  }

  .recommended_product_price button {
    width: 100%;
  }

  /* Domain in cart items */
  .domain-in-cart-header {
    flex-direction: column;
    gap: var(--spacing-sm);
  }

  .domain-in-cart-actions {
    width: 100%;
  }

  .remove-domain-from-cart {
    width: 100%;
  }
}

/* Extra Small Mobile (320px - 375px) */
@media (max-width: 375px) {
  /* Even tighter spacing */
  .section {
    margin-bottom: var(--spacing-md);
  }

  /* Compact headers */
  .section-title {
    font-size: var(--font-lg);
  }

  /* Compact buttons */
  .whmp-btn {
    padding: var(--spacing-xs) var(--spacing-sm);
    font-size: var(--font-sm);
  }

  /* Product card adjustments */
  .product-card .product-card-header h4 {
    font-size: var(--font-xl);
  }

  .product-billing-cycle .price-amount {
    font-size: var(--font-5xl);
  }

  /* Summary totals */
  .summary-table-container div#dynamic-total strong {
    font-size: var(--font-6xl);
  }

  /* Modal adjustments */
  #billingDetailsModal .whmp_oso-modal-popup-dialog {
    margin: var(--spacing-xs);
  }
}

/* ========================================
   CURRENCY SELECTOR - BOTTOM LEFT
   ======================================== */
#currency-selector-container {
  position: fixed !important;
  bottom: 20px !important;
  z-index: 9999 !important;
  background: var(--whmp-bg-base) !important;
  padding: 10px 15px !important;
  border-radius: var(--border-radius-lg) !important;
  box-shadow: var(--shadow-md) !important;
  border: 1px solid var(--whmp-bg-alt) !important;
}

/* Admin-configurable bottom-corner position for the floating widgets. */
#currency-selector-container.oso-pos-left,
.oso-scroll-to-bottom.oso-pos-left {
  left: 20px !important;
  right: auto !important;
}

#currency-selector-container.oso-pos-right,
.oso-scroll-to-bottom.oso-pos-right {
  right: 20px !important;
  left: auto !important;
}

.currency-selector-dropdown {
  appearance: none !important;
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  background-color: var(--whmp-bg-base) !important;
  background-repeat: no-repeat !important;
  background-position: right 12px center !important;
  background-size: 12px !important;
  border: 1px solid var(--whmp-bg-alt) !important;
  border-radius: var(--border-radius-md) !important;
  padding: 8px 35px 8px 12px !important;
  font-size: var(--font-md) !important;
  color: var(--whmp-text-primary) !important;
  cursor: pointer !important;
  transition: var(--transition-base) !important;
  min-width: 120px !important;
}

.currency-selector-dropdown:hover {
  border-color: var(--whmp-primary) !important;
}

.currency-selector-dropdown:focus {
  outline: none !important;
  border-color: var(--whmp-primary) !important;
  box-shadow: 0 0 0 3px var(--whmp-focus-ring) !important;
}

@media (max-width: 768px) {
  #currency-selector-container {
    bottom: 15px !important;
    left: 15px !important;
    padding: 8px 12px !important;
  }

  .currency-selector-dropdown {
    min-width: 100px !important;
    font-size: var(--font-sm) !important;
    padding: 6px 30px 6px 10px !important;
  }
}

@media (max-width: 576px) {
  #currency-selector-container {
    bottom: 10px !important;
    left: 10px !important;
    padding: 6px 10px !important;
  }

  .currency-selector-dropdown {
    min-width: 90px !important;
    font-size: var(--font-xs) !important;
    padding: 5px 25px 5px 8px !important;
  }
}

@media (max-width: 768px) {
  .quantity-slider-col {
    width: 100%;
    min-width: 100%; /* CHANGE THIS */
  }
}

@media (max-width: 576px) {
  .quantity-slider {
    height: 10px; /* Slightly taller for easier touch */
  }

  .quantity-slider .ui-slider-handle {
    width: 24px; /* Larger touch target */
    height: 24px;
  }
}

@media (max-width: 1200px) {
  .products-list-container:not(.slider-mode) {
    grid-template-columns: repeat(
      max(1, calc(var(--grid-product-cards-per-row) - 1)),
      minmax(0, 1fr)
    );
  }
}

@media (max-width: 991px) {
  .products-list-container:not(.slider-mode) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 576px) {
  .products-list-container:not(.slider-mode) {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 991px) {
  .billing-cycle-content {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 576px) {
  .billing-cycle-content {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 991px) {
  .recommended-products-container {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 576px) {
  .recommended-products-container {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 991px) {
  .addons-container {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 576px) {
  .addons-container {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* ========================================
   CUSTOM FORM CONTROLS
   ======================================== */
/* iCHECK - THE WRAPPER IS THE CONTROL.
   ---------------------------------------------------------------------------
   WHMCS core runs the iCheck plugin over the radios IT renders - the payment
   methods, `applycredit` and `ccinfo`. iCheck hides the real input behind
   inline styles (`opacity:0; width:140%; height:140%; position:absolute`) and
   draws its own `<div class="iradio_square-blue">` with an `<ins>` overlay.

   So on those nine controls THE DIV IS WHAT THE CUSTOMER SEES, and the div is
   what has to carry the canonical appearance. Styling `input[type="radio"]`
   there styles something nobody looks at - which is exactly how "22 radios,
   0 failures" was reported while the screen showed ovals: the input inside
   measured a clean 18x18 while the div around it measured 20x22.

   Sized and coloured to match the canonical `input[type="radio"]` rule
   EXACTLY - 18px box, 2px primary ring, transparent unchecked, primary fill
   with a 7px centre dot when checked (the canonical rule draws the same dot as
   a 3.5px-radius radial-gradient stop). Change one, change the other. */
#one-step-cart .iradio_square-blue,
.iradio_square-blue {
  width: 18px !important;
  height: 18px !important;
  min-width: 18px !important;
  max-width: 18px !important;
  flex: 0 0 18px !important;
  border: 2px solid var(--whmp-primary) !important;
  border-radius: var(--border-radius-circle) !important;
  background: transparent !important;
  background-image: none !important;
  position: relative !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: var(--transition-base);
  margin: 0 !important;
  padding: 0 !important;
  cursor: pointer !important;
  box-sizing: border-box !important;
  vertical-align: middle;
}

#one-step-cart .iradio_square-blue.checked,
.iradio_square-blue.checked {
  border-color: var(--whmp-primary) !important;
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
  background-image: none !important;
}

#one-step-cart .iradio_square-blue.checked::after,
.iradio_square-blue.checked::after {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--whmp-bg-base);
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

#one-step-cart .iradio_square-blue.hover,
.iradio_square-blue.hover {
  border-color: var(--whmp-primary-hover) !important;
}

#one-step-cart .icheckbox_square-blue,
.icheckbox_square-blue {
  width: 18px !important;
  height: 18px !important;
  min-width: 18px !important;
  max-width: 18px !important;
  flex: 0 0 18px !important;
  border: 2px solid var(--whmp-primary) !important;
  border-radius: var(--border-radius-sm) !important;
  background: var(--whmp-bg-base) !important;
  background-image: none !important;
  position: relative !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  transition: all 0.3s ease !important;
  margin: 0 !important;
  cursor: pointer !important;
  box-sizing: border-box !important;
}

#one-step-cart .icheckbox_square-blue.checked,
.icheckbox_square-blue.checked {
  border-color: var(--whmp-primary) !important;
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
  background-image: none !important;
}

#one-step-cart .icheckbox_square-blue.checked::after,
.icheckbox_square-blue.checked::after {
  content: "";
  display: block;
  width: 5px;
  height: 10px;
  border: solid var(--whmp-text-inverse);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  position: absolute;
  top: 50%;
  left: 50%;
  margin-top: -6px;
  margin-left: -3px;
}

#one-step-cart .icheckbox_square-blue.hover,
.icheckbox_square-blue.hover {
  border-color: var(--whmp-primary-hover) !important;
}

.whmp-checkbox-styled {
  display: flex !important;
  align-items: flex-start;
  cursor: pointer;
  position: relative;
  user-select: none;
}

.whmp-checkbox-styled input[type="checkbox"] {
  position: absolute !important;
  opacity: 0 !important;
  width: 0 !important;
  height: 0 !important;
  pointer-events: none !important;
  margin: 0 !important;
}

.whmp-checkbox-indicator {
  width: 20px;
  min-width: 20px;
  height: 20px;
  border: 2px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-sm);
  position: relative;
  flex-shrink: 0;
  transition: all 0.3s ease;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-right: 8px;
  margin-top: 1px;
  box-sizing: border-box;
  cursor: pointer;
}

.whmp-checkbox-styled
  input[type="checkbox"]:checked
  + .whmp-checkbox-indicator {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.whmp-checkbox-styled
  input[type="checkbox"]:checked
  + .whmp-checkbox-indicator::after {
  content: "";
  display: block;
  width: 5px;
  height: 10px;
  border: solid var(--whmp-text-inverse);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  margin-top: -2px;
}

.whmp-checkbox-styled:hover .whmp-checkbox-indicator {
  border-color: var(--whmp-primary-hover);
}

.whmp-checkbox-field {
  margin-bottom: 0;
}

.whmp-checkbox-field .whmp-checkbox-styled {
  padding: var(--spacing-sm) var(--spacing-md);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-sm);
  transition: var(--transition-base);
  background: var(--whmp-bg-base);
}

.whmp-checkbox-field .whmp-checkbox-styled:hover {
  border-color: var(--whmp-primary-hover);
  background: var(--whmp-primary-faded);
}

.whmp-checkbox-text {
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  line-height: 1.5;
}

.domain-field-checkbox-label.whmp-checkbox-styled .whmp-checkbox-indicator {
  flex: 0 0 20px;
  padding-left: 0;
  margin-top: 2px;
}

label.checkbox-inline.whmp-checkbox-styled {
  gap: 0;
}

label.checkbox-inline.whmp-checkbox-styled a {
  margin-left: 4px;
}

div#oso-orderSummary label.checkbox-inline.whmp-checkbox-styled {
  display: flex !important;
  align-items: flex-start;
}

/* ========================================
   RENEWAL ITEMS SECTION
   ======================================== */
#renewal-items-section .section-body {
  background: var(--whmp-bg-base);
  padding: var(--spacing-xxl);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
}

.renewal-category {
  margin-bottom: var(--spacing-xxl);
}

.renewal-category:last-child {
  margin-bottom: 0;
}

.renewal-category-title {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-lg);
  padding-bottom: var(--spacing-md);
  border-bottom: 2px solid var(--whmp-border-light);
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.renewal-category-title i {
  color: var(--whmp-primary);
  font-size: var(--font-lg);
}

.renewal-items-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: var(--spacing-md);
}

.renewal-item {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  transition: var(--transition-base);
  box-shadow: var(--shadow-sm);
}

.renewal-item:hover {
  border-color: var(--whmp-primary);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

.renewal-item-header {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
  padding-bottom: var(--spacing-md);
  border-bottom: 1px solid var(--whmp-border-light);
}

.renewal-item-icon {
  width: 48px;
  height: 48px;
  background: var(--whmp-primary-faded);
  border-radius: var(--border-radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.renewal-item-icon i {
  font-size: var(--font-xl);
  color: var(--whmp-primary);
}

.renewal-item-info {
  flex: 1;
  min-width: 0;
}

.renewal-item-name {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
  margin: 0 0 var(--spacing-xs) 0;
  word-break: break-word;
}

.renewal-item-domain,
.renewal-item-period {
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
  display: block;
}

.renewal-item-details {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.renewal-detail-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--spacing-xs) 0;
}

.renewal-detail-label {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  font-weight: var(--font-weight-medium);
}

.renewal-detail-value {
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
  text-align: right;
}

.renewal-price-row {
  padding-top: var(--spacing-sm);
  border-top: 1px solid var(--whmp-border-light);
}

.renewal-price-row .renewal-price {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-primary);
}

.renewal-tax-row {
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
}

.renewal-fee-warning {
  background: var(--whmp-warning);
  color: var(--whmp-text-inverse);
  padding: var(--spacing-sm);
  border-radius: var(--border-radius-sm);
  font-size: var(--font-sm);
  gap: var(--spacing-xs);
  margin-top: var(--spacing-sm);
}

.renewal-fee-warning i {
  color: var(--whmp-text-inverse);
}

.renewal-addons {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-xs);
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-md);
  border-top: 1px solid var(--whmp-border-light);
}

.renewal-addon-badge {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  padding: 4px 10px;
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  border-radius: var(--border-radius-xl);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-medium);
}

.renewal-addon-badge i {
  font-size: var(--font-xs);
}

/* Responsive */
@media (max-width: 991px) {
  .renewal-items-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr));
    gap: var(--spacing-md);
  }
}

@media (max-width: 768px) {
  #renewal-items-section .section-body {
    padding: var(--spacing-lg);
  }

  .renewal-items-grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .renewal-category-title {
    font-size: var(--font-lg);
  }

  .renewal-item {
    padding: var(--spacing-md);
  }
}

@media (max-width: 576px) {
  #renewal-items-section .section-body {
    padding: var(--spacing-md);
  }

  .renewal-category {
    margin-bottom: var(--spacing-lg);
  }

  .renewal-item-header {
    flex-direction: column;
    align-items: center;
    text-align: center;
  }

  .renewal-item-info {
    text-align: center;
  }

  .renewal-detail-row {
    flex-direction: column;
    gap: var(--spacing-xs);
    text-align: center;
  }

  .renewal-detail-value {
    text-align: center;
  }
}

.addon-item,
.recommended-product-item {
  width: 100%;
}

.custom-field-container {
  background: var(--whmp-bg-base);
  padding: var(--spacing-md);
  border-radius: var(--border-radius-lg);
  box-shadow: var(--shadow-sm);
  margin-bottom: var(--spacing-lg);
}

.custom-fields-content .row {
  display: grid !important;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-custom-fields-per-row) - 1) * var(--spacing-md)) / var(--grid-custom-fields-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
}

#transfer-epp-inline {
  margin-bottom: var(--spacing-sm);
}
/* ========================================
   END OF STYLESHEET
   ======================================== */

/* Skeleton Loader Styles */
.oso-skeleton-wrapper {
  position: relative;
  width: 100%;
  padding: 20px 0;
}

.oso-skeleton-wrapper .row {
  display: flex;
  flex-wrap: wrap;
  margin-left: 0;
  margin-right: 0;
}

.oso-skeleton-item {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  padding: 30px 15px 15px 15px;
  overflow: hidden;
  margin-bottom: 30px;
  background-color: var(--whmp-bg-base);
  border: 1px solid var(--whmp-bg-alt);
  border-radius: 8px;
  border-left: 5px solid var(--whmp-primary);
}

.oso-skeleton-item *,
.oso-skeleton-item::after,
.oso-skeleton-item::before {
  box-sizing: border-box;
}

.oso-skeleton-item::before {
  content: " ";
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 50%;
  z-index: 1;
  width: 500%;
  margin-left: -250%;
  animation: osoSkeletonAnimation 0.8s linear infinite;
  background: linear-gradient(
      to right,
      rgba(255, 255, 255, 0) 46%,
      rgba(255, 255, 255, 0.35) 50%,
      rgba(255, 255, 255, 0) 54%
    )
    50% 50%;
}

.oso-skeleton-item > * {
  flex: 1 1 auto;
  display: flex;
  flex-flow: column;
  padding-right: 15px;
  padding-left: 15px;
}

.oso-skeleton-row {
  display: flex;
  flex-wrap: wrap;
  margin-bottom: 7.5px;
}

.oso-skeleton-row div {
  height: 10px;
  margin-bottom: 7.5px;
  background-color: var(--whmp-primary-light);
  border-radius: 2px;
}

.oso-skeleton-row .oso-skeleton-big,
.oso-skeleton-row.oso-skeleton-big div {
  height: 20px;
  margin-bottom: 15px;
}

.oso-skeleton-row .oso-skeleton-empty {
  background-color: var(--whmp-primary-light);
}

.oso-skeleton-col-1 {
  flex: 0 0 4.17%;
  max-width: 4.17%;
}

.oso-skeleton-col-2 {
  flex: 0 0 16.66667%;
  max-width: 16.66667%;
}

.oso-skeleton-col-4 {
  flex: 0 0 33.33333%;
  max-width: 33.33333%;
}

.oso-skeleton-col-6 {
  flex: 0 0 50%;
  max-width: 50%;
}

.oso-skeleton-col-7 {
  flex: 0 0 58.33333%;
  max-width: 58.33333%;
}

.oso-skeleton-col-8 {
  flex: 0 0 66.66667%;
  max-width: 66.66667%;
}

.oso-skeleton-col-10 {
  flex: 0 0 83.33333%;
  max-width: 83.33333%;
}

.oso-skeleton-col-12 {
  flex: 0 0 100%;
  max-width: 100%;
}

.oso-skeleton-picture {
  width: 100%;
  height: 150px;
  background-color: var(--whmp-primary-light);
  margin-bottom: 15px;
  border-radius: 4px;
}

@keyframes osoSkeletonAnimation {
  0% {
    transform: translate3d(-30%, 0, 0);
  }
  100% {
    transform: translate3d(30%, 0, 0);
  }
}

@media (max-width: 991px) {
  .oso-skeleton-item {
    padding: 20px 10px 10px 10px;
  }

  .oso-skeleton-item > * {
    padding-left: 10px;
    padding-right: 10px;
  }

  /* Make columns more flexible */
  .oso-skeleton-col-4,
  .oso-skeleton-col-6,
  .oso-skeleton-col-7,
  .oso-skeleton-col-8,
  .oso-skeleton-col-10 {
    flex: 0 0 100%;
    max-width: 100%;
  }

  .oso-skeleton-col-2 {
    flex: 0 0 50%;
    max-width: 50%;
  }

  .oso-skeleton-picture {
    height: 120px;
  }
}

@media (max-width: 767px) {
  .oso-skeleton-item {
    padding: 15px 8px;
    margin-bottom: 20px;
  }

  .oso-skeleton-item > * {
    padding-left: 8px;
    padding-right: 8px;
  }

  .oso-skeleton-col-1,
  .oso-skeleton-col-2,
  .oso-skeleton-col-4,
  .oso-skeleton-col-6,
  .oso-skeleton-col-7,
  .oso-skeleton-col-8,
  .oso-skeleton-col-10,
  .oso-skeleton-col-12 {
    flex: 0 0 100%;
    max-width: 100%;
  }

  .oso-skeleton-row {
    margin-bottom: 5px;
  }

  .oso-skeleton-row div {
    height: 8px;
    margin-bottom: 5px;
  }

  .oso-skeleton-row .oso-skeleton-big,
  .oso-skeleton-row.oso-skeleton-big div {
    height: 16px;
    margin-bottom: 10px;
  }

  .oso-skeleton-picture {
    height: 100px;
    margin-bottom: 10px;
  }
}

@media (max-width: 480px) {
  .oso-skeleton-item {
    padding: 12px 6px;
  }

  .oso-skeleton-picture {
    height: 80px;
  }

  .oso-skeleton-row div {
    height: 6px;
  }

  .oso-skeleton-row .oso-skeleton-big,
  .oso-skeleton-row.oso-skeleton-big div {
    height: 14px;
  }
}

div#fullpage-overlay {
  display: none !important;
}

/* ---------------------------------------------------------------------------
   The order form wants a wider page than Bootstrap's default .container, but
   ".container" is the theme's OWN layout class. Unscoped, this widened six
   elements on the cart page - both navbars, the network-issue alert, the
   breadcrumb and the footer - so the theme's header and nav rendered at a
   different width here than on every other page of the site.

   Only ONE .container is ours to widen: the wrapper that actually contains the
   form. :has() names exactly that one and leaves the theme's chrome alone.
   Measured live: 6 matches before, 1 after.

   Where :has() is unsupported the form simply falls back to the theme's own
   container width - narrower, but correct and fully usable. That is the right
   way round: never widen someone else's header to avoid a narrower cart.
   --------------------------------------------------------------------------- */
@media (min-width: 768px) {
  .container:has(#one-step-cart) {
    max-width: 1360px !important;
  }
}

.container:has(#one-step-cart) {
  max-width: 1360px !important;
}

#clientCurrency {
  background-color: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
}

/* ========================================
   TOAST NOTIFICATION
   ======================================== */
.whmp-oso-toast {
  position: fixed;
  bottom: 30px;
  right: 30px;
  z-index: var(--z-modal);
  padding: var(--spacing-md) var(--spacing-xl);
  border-radius: var(--border-radius-lg);
  font-size: var(--font-md);
  font-weight: var(--font-weight-medium);
  background: var(--whmp-bg-base);
  color: var(--whmp-danger);
  border-color: var(--whmp-bg-alt);
  box-shadow: var(--shadow-lg);
  opacity: 0;
  transform: translateY(12px);
  transition:
    opacity 0.3s ease,
    transform 0.3s ease;
  max-width: 360px;
  line-height: 1.5;
  pointer-events: none;
}

.whmp-oso-toast--visible {
  opacity: 1;
  transform: translateY(0);
}

@media (max-width: 576px) {
  .whmp-oso-toast {
    bottom: 15px;
    right: 15px;
    left: 15px;
    max-width: 100%;
    text-align: center;
  }
}

/* ========================================
   PRODUCT SECTION HIGHLIGHT
   ======================================== */
.whmp-oso-highlight {
  animation: whmpOsoHighlight 1.5s ease;
}

@keyframes whmpOsoHighlight {
  0% {
    box-shadow: none;
  }
  25% {
    box-shadow: 0 0 0 3px var(--whmp-primary);
  }
  75% {
    box-shadow: 0 0 0 3px var(--whmp-primary);
  }
  100% {
    box-shadow: none;
  }
}

.domain-ns-desc {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  margin-bottom: var(--spacing-lg);
}

#domain-nameservers-section .row {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(max(min(var(--oso-grid-cell-min), 100%), calc((100% - (var(--grid-domain-nameservers-fields-per-row) - 1) * var(--spacing-md)) / var(--grid-domain-nameservers-fields-per-row) - 0.1px)), 1fr));
  gap: var(--spacing-md);
}

@media (max-width: 991px) {
  #domain-nameservers-section .row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 576px) {
  #domain-nameservers-section .row {
    grid-template-columns: minmax(0, 1fr);
  }
}
.oso-visually-hidden {
  opacity: 0;
  width: 0;
  height: 0;
  overflow: hidden;
  visibility: hidden;
  pointer-events: none;
}

.oso-order-title {
  margin-bottom: 30px;
}

/* When the admin sets an explicit logo width/height, honour it exactly and
   lift the default caps so the intended size applies. */
img.gateway-logo.gateway-logo-custom-w {
  width: var(--oso-gateway-logo-w);
  max-width: none;
}

img.gateway-logo.gateway-logo-custom-h {
  height: var(--oso-gateway-logo-h);
  max-height: none;
}

#inputNoStoreContainer {
  line-height: 32px;
}

/* ====================================================
   DARK MODE OVERRIDES
   Applied when admin selects Dark mode, or when the
   client-area White/Dark toggle maps to .oso-dark-mode
   on the #one-step-cart wrapper. Overrides only the
   surface/text/border variables so primary/secondary
   brand colors continue to apply.
   ==================================================== */
#one-step-cart.oso-dark-mode,
.oso-mobile-total-banner.oso-dark-mode {
  --whmp-page-bg: var(--oso-bg-color, #12131f) !important;

  /* Neutral dark surfaces — kept independent of primary/secondary so the
       dark background never "mixes" with the brand colours. */
  --whmp-bg-base: var(--oso-card-bg, #1c1d2b) !important;
  --whmp-bg-alt: #262838 !important;
  --whmp-bg-deep: #12131f !important;

  /* The template's own dark-mode brand colour. Where it would be hard to read as text on the
     dark surface, common.tpl's readability check lightens it just enough. */
  --whmp-primary-base: var(--oso-primary-color, #3182ce) !important;
  --whmp-secondary-base: var(--oso-secondary-color, #2b6cb0) !important;
  --whmp-primary: var(--oso-primary-color, #3182ce) !important;
  --whmp-primary-hover: var(--btn-primary-hover-bg, var(--nx-btn-primary-hover, color-mix(in srgb, var(--oso-primary-color, #3182ce) 88%, #fff))) !important;
  --whmp-secondary: var(--oso-secondary-color, #2b6cb0) !important;
  --whmp-primary-light: var(--oso-primary-soft, #29344d) !important;
  --whmp-primary-faded: var(--oso-hover-bg, #222738) !important;

  --whmp-text-primary: var(--oso-text-color, #f1f2f8) !important;
  --whmp-text-secondary: var(--text-body-color, var(--oso-text-color, #c6cadd)) !important;
  --whmp-text-light: var(--oso-muted-color, #9aa0bd) !important;
  --whmp-text-inverse: var(--oso-btn-primary-text, #ffffff) !important;

  --whmp-btn-primary-bg: var(--oso-btn-primary-bg, #2d72b8) !important;
  --whmp-btn-primary-text: var(--oso-btn-primary-text, #ffffff) !important;
  --whmp-btn-secondary-bg: var(--oso-btn-secondary-bg, #1c1d2b) !important;

  --whmp-border-light: var(--oso-border-color, #2c2e46) !important;
  --whmp-border-mid: var(--oso-border-color, #3c3f63) !important;

  --whmp-focus-ring: rgba(49, 130, 206, 0.35) !important;
  --whmp-focus-ring-strong: rgba(49, 130, 206, 0.6) !important;

  --whmp-success-bg: var(--oso-alert-success-bg, #14321d) !important;
  --whmp-danger-bg: var(--oso-alert-danger-bg, #3a1f22) !important;

  --whmp-domain-available-bg: var(--oso-alert-success-bg, #14321d) !important;
  --whmp-domain-taken-bg: var(--oso-alert-danger-bg, #3a1f22) !important;
}

/* ====================================================
   NATIVE SELECT DROPDOWN — theme-matched (all selects
   inside the cart, incl. WHMCS-generated ones). Options
   inherit the themed background/text so the open list
   matches the current White/Dark theme instead of the
   browser default white.
   ==================================================== */
#one-step-cart select,
#one-step-cart select.whmp-form-cntrl {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background-color: var(--whmp-bg-base) !important;
  color: var(--whmp-text-primary) !important;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-sm) calc(var(--spacing-lg) + 12px) var(--spacing-sm)
    var(--spacing-md);
  background-repeat: no-repeat;
  background-position: right var(--spacing-md) center;
  background-size: 10px 7px;
}

#one-step-cart select option,
#one-step-cart select optgroup {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
}

#one-step-cart select:focus {
  border-color: var(--whmp-primary);
  outline: 0;
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

/* ====================================================
   PASSWORD GENERATOR MODAL — only the two buttons that
   our JS injects into the theme's native modal
   (#myCopyBtn, #myCopyInsertBtn). The rest of the modal
   is styled by the active client-area theme; we only
   theme these two so they match our checkout.
   ==================================================== */
#modalGeneratePassword #myCopyBtn,
#modalGeneratePassword #myCopyInsertBtn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-medium);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--whmp-primary);
  cursor: pointer;
  transition: var(--transition-base);
  line-height: 1.4;
}

#modalGeneratePassword #myCopyBtn {
  background: transparent;
  color: var(--whmp-primary);
}

#modalGeneratePassword #myCopyBtn:hover {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: #ffffff;
}

#modalGeneratePassword #myCopyBtn img {
  vertical-align: middle;
}

#modalGeneratePassword #myCopyInsertBtn {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: #ffffff;
  margin-left: 8px;
}

#modalGeneratePassword #myCopyInsertBtn:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

/* ====================================================
   CREDIT CARD / STRIPE PAYMENT FIELDS
   WHMCS owns these class/id names (needed by its JS and
   gateway integrations) so we keep them, but style them
   to match the current theme in both light and dark.
   ==================================================== */
#creditCardInputFields {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  margin-top: var(--spacing-md);
  color: var(--whmp-text-primary);
}

#creditCardInputFields .new-card-container .whmp-form-cntrl,
#existingCardInfo .whmp-form-cntrl,
#newCardInfo .whmp-form-cntrl {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border: 1px solid var(--whmp-border-mid);
}

#creditCardInputFields label,
#creditCardInputFields .radio-inline,
#creditCardInputFields li {
  color: var(--whmp-text-primary);
}

#creditCardInputFields .field-error-msg {
  color: var(--whmp-danger);
}

.StripeElement,
#paymentGatewayInput .StripeElement,
#creditCardInputFields .StripeElement {
  background: var(--whmp-bg-base) !important;
  border: 1px solid var(--whmp-border-mid) !important;
  border-radius: var(--border-radius-md) !important;
  color: var(--whmp-text-primary) !important;
  width: 100% !important;
  max-width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
}

.StripeElement--focus {
  border-color: var(--whmp-primary) !important;
  box-shadow: 0 0 0 3px var(--whmp-focus-ring) !important;
}

.StripeElement--invalid {
  border-color: var(--whmp-danger) !important;
}

#paymentGatewayInput {
  color: var(--whmp-text-primary);
}

/* ====================================================
   SELF-CONTAINED BASE CONTEXT
   Ensures the checkout renders consistently regardless
   of the host client-area theme. Establishes box-sizing,
   base text colour and heading/link colours from our own
   variables so no theme text colour can bleed in and
   cause invisible (e.g. white-on-white) content.
   ==================================================== */
#one-step-cart,
#one-step-cart * {
  box-sizing: border-box;
}

#one-step-cart {
  color: var(--whmp-text-secondary);
}

#one-step-cart h1,
#one-step-cart h2,
#one-step-cart h3,
#one-step-cart h4,
#one-step-cart h5,
#one-step-cart h6,
#one-step-cart .section-title,
#one-step-cart strong,
#one-step-cart label {
  color: var(--whmp-text-primary);
}

#one-step-cart .text-muted {
  color: var(--whmp-text-light) !important;
}

#one-step-cart .text-success {
  color: var(--whmp-success) !important;
}

#one-step-cart .text-danger {
  color: var(--whmp-danger) !important;
}

/* ====================================================
   ORDER SUMMARY — overflow hardening (self-contained)
   Prevents long product names / prices from breaking
   out of the summary panel on any host theme (Lagom
   included) where default flex min-width causes overflow.
   ==================================================== */
#one-step-cart .order-summary-sidebar,
#one-step-cart .whmp_oso-summary-content {
  overflow-x: hidden;
}

#one-step-cart .list-item {
  min-width: 0;
  flex-wrap: nowrap;
}

#one-step-cart .list-item .item-info,
#one-step-cart .list-item > span {
  min-width: 0;
  overflow-wrap: break-word;
  word-break: break-word;
}

#one-step-cart .list-item .item-price,
#one-step-cart .list-item > span:last-child {
  flex-shrink: 0;
  white-space: nowrap;
  text-align: left;
}

/* ====================================================
   GOOGLE reCAPTCHA — keep the widget visible and never
   clipped inside the (often narrow) order summary column.
   ==================================================== */
#one-step-cart .summary-bottom .text-center .g-recaptcha,
#one-step-cart .g-recaptcha {
  display: inline-block;
  max-width: 100%;
  overflow: hidden;
}

/* reCAPTCHA v3 floating badge should never be covered */
.grecaptcha-badge {
  z-index: 2147483647 !important;
}

/* ====================================================
   SCROLL-TO-BOTTOM BUTTON (admin-toggleable)
   Fixed circular button at the bottom-right (mirror of
   the bottom-left currency selector). A progress ring
   fills as the user scrolls; click smooth-scrolls to the
   very bottom of the checkout. Uses --whmp-* vars so it
   themes for both Lagom and non-Lagom, light and dark.
   ==================================================== */
.oso-scroll-to-bottom {
  position: fixed;
  bottom: 20px;
  z-index: 9999 !important;
  width: 48px;
  height: 48px;
  padding: 0;
  border: none;
  border-radius: 50%;
  background: var(--whmp-bg-base);
  box-shadow: var(--shadow-md);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 0;
  visibility: hidden;
  transform: translateY(10px);
  transition:
    opacity 0.25s ease,
    transform 0.25s ease,
    visibility 0.25s ease;
}

.oso-scroll-to-bottom.oso-scroll-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

.oso-scroll-to-bottom:hover {
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.oso-scroll-ring {
  position: absolute;
  top: 2px;
  left: 2px;
  transform: rotate(-90deg);
  pointer-events: none;
}

.oso-scroll-ring-track {
  fill: none;
  stroke: var(--whmp-border-mid);
  stroke-width: 3;
  opacity: 0.5;
}

.oso-scroll-ring-progress {
  fill: none;
  stroke: var(--whmp-primary);
  stroke-width: 3;
  stroke-linecap: round;
  transition: stroke-dashoffset 0.1s linear;
}

.oso-scroll-to-bottom:hover .oso-scroll-ring-progress {
  stroke: var(--whmp-text-inverse);
}

.oso-scroll-arrow {
  font-size: 16px;
  color: var(--whmp-primary);
  line-height: 1;
  transition: color 0.25s ease;
}

.oso-scroll-to-bottom:hover .oso-scroll-arrow {
  color: var(--whmp-text-inverse);
}

@media (max-width: 768px) {
  .oso-scroll-to-bottom.oso-pos-left {
    left: 14px !important;
    right: auto !important;
  }
  .oso-scroll-to-bottom.oso-pos-right {
    right: 14px !important;
    left: auto !important;
  }
}

/* ====================================================
   MOBILE TOTALS BANNER (small screens only)
   Sticky top bar showing the live order total so the
   user sees the amount update (with a loader) while
   selecting/deselecting products up the page. Collapsible
   via the chevron. Themed for Lagom + non-Lagom / dark.
   ==================================================== */
.oso-mobile-total-banner {
  display: none;
}

.oso-mobile-total-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-md);
  padding: 12px 16px;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
  box-shadow: var(--shadow-md);
}

.oso-mobile-total-info {
  display: flex;
  flex-direction: column;
  line-height: 1.2;
  min-width: 0;
}

.oso-mobile-total-label {
  font-size: var(--font-xs);
  font-weight: var(--font-weight-medium);
  opacity: 0.85;
  color: var(--whmp-text-inverse);
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

.oso-mobile-total-value {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-inverse);
}

.oso-mobile-total-spinner {
  display: none;
  font-size: var(--font-md);
  opacity: 0.9;
}

.oso-mobile-total-banner.oso-mobile-total-loading .oso-mobile-total-spinner {
  display: inline-flex;
}

.oso-mobile-total-banner.oso-mobile-total-loading #oso-mobile-total-amount {
  opacity: 0.45;
}

.oso-mobile-total-toggle {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.5);
  background: rgba(255, 255, 255, 0.12);
  color: var(--whmp-text-inverse);
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.2s ease;
}

.oso-mobile-total-toggle:hover {
  background: rgba(255, 255, 255, 0.25);
}

/* The pull-down handle (chevron) that stays visible when the banner is
   collapsed so the user can re-open it. */
.oso-mobile-total-handle {
  display: none;
  border: none;
  border-radius: 0 0 var(--border-radius-md) var(--border-radius-md);
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
  cursor: pointer;
  align-items: center;
  justify-content: center;
  box-shadow: var(--shadow-md);
  font-size: 12px;
  line-height: 1;
  padding: 0;
}

@media (max-width: 991.98px) {
  .oso-mobile-total-banner {
    display: block;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    /* Above the host theme's fixed header so the banner's top is never
           hidden underneath it. */
    z-index: 2147483000;
    margin: 0;
    overflow: visible;
  }

  .oso-mobile-total-bar {
    border-radius: 0 0 var(--border-radius-lg) var(--border-radius-lg);
    transition: transform 0.28s ease;
    will-change: transform;
  }

  /* Reserve space so the fixed banner never overlaps the checkout content. */
  #one-step-cart.oso-has-mobile-banner {
    padding-top: 74px;
  }

  /* Collapsed: slide the bar up out of view AND stop the banner from
       covering / intercepting clicks on the theme header behind it. Only the
       small handle remains interactive. */
  .oso-mobile-total-banner.oso-mobile-total-collapsed {
    pointer-events: none;
  }

  .oso-mobile-total-banner.oso-mobile-total-collapsed .oso-mobile-total-bar {
    transform: translateY(-100%);
    pointer-events: none;
  }

  .oso-mobile-total-banner.oso-mobile-total-collapsed .oso-mobile-total-handle {
    display: inline-flex;
    position: fixed;
    top: 0;
    right: 14px;
    width: 42px;
    height: 22px;
    z-index: 2147483000;
    pointer-events: auto;
  }
}

/* ====================================================
   APPLY ACCOUNT CREDIT (#applyCreditContainer)
   Was unstyled; give it a themed card with clear,
   modern radio rows. Works both templates / modes.
   ==================================================== */
#applyCreditContainer {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  margin: var(--spacing-md) 0;
  color: var(--whmp-text-primary);
}

#applyCreditContainer > p {
  margin: 0 0 var(--spacing-md) 0;
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

#applyCreditContainer label.radio {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-sm);
  padding: var(--spacing-md);
  margin: 0 0 var(--spacing-sm) 0;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  cursor: pointer;
  transition: var(--transition-base);
  color: var(--whmp-text-secondary);
  font-weight: var(--font-weight-normal);
}

#applyCreditContainer label.radio:last-child {
  margin-bottom: 0;
}

#applyCreditContainer label.radio:hover {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
}

#applyCreditContainer label.radio input[type="radio"] {
  margin: 3px 0 0 0;
  accent-color: var(--whmp-primary);
  flex-shrink: 0;
  cursor: pointer;
}

#applyCreditContainer label.radio input[type="radio"]:checked ~ span {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
}

/* ====================================================
   SECONDARY ORDER-FORM PAGES
   (Addons, Domain Renewals, Service Renewals)
   Scoped under #one-step-cart.oso-secondary-page so these
   rules never affect the main checkout. Uses the --whmp-*
   theme variables, so they inherit the admin's colours and
   the .oso-dark-mode overrides automatically, and adopt
   Lagom's native variables under lagom.css.
   ==================================================== */
#one-step-cart.oso-secondary-page {
  background: var(--whmp-page-bg, transparent);
  color: var(--whmp-text-secondary);
  padding: var(--spacing-lg);
  border-radius: var(--border-radius-lg);
}

#one-step-cart.oso-secondary-page #order-standard_cart > .row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  margin: 0;
}

#one-step-cart.oso-secondary-page .cart-body {
  width: 100%;
}

#one-step-cart.oso-secondary-page .header-lined {
  margin-bottom: var(--spacing-lg);
  padding-bottom: var(--spacing-md);
  border-bottom: 1px solid var(--whmp-border-light);
}

#one-step-cart.oso-secondary-page .header-lined h1 {
  color: var(--whmp-text-primary);
  font-size: var(--font-8xl);
  margin: 0;
}

#one-step-cart.oso-secondary-page .header-lined.row {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* Alerts */
#one-step-cart.oso-secondary-page .alert {
  padding: var(--spacing-md) var(--spacing-lg);
  border-radius: var(--border-radius-md);
  border: 1px solid var(--whmp-border-light);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-lg);
}

/* The template's own alert colours (styling engine), so a notice reads the same as anywhere
   else in the client area. */
#one-step-cart.oso-secondary-page .alert-warning {
  background: var(--oso-alert-warning-bg, #fff3cd);
  border-color: var(--oso-alert-warning-border, var(--whmp-warning));
  color: var(--oso-alert-warning-text, #664d03);
}

#one-step-cart.oso-secondary-page .alert-info {
  background: var(--oso-alert-info-bg, #cff4fc);
  border-color: var(--oso-alert-info-border, #9eeaf9);
  color: var(--oso-alert-info-text, #055160);
}

#one-step-cart.oso-secondary-page .alert-danger {
  background: var(--oso-alert-danger-bg, #f8d7da);
  border-color: var(--oso-alert-danger-border, #f1aeb5);
  color: var(--oso-alert-danger-text, #842029);
}

#one-step-cart.oso-secondary-page .alert-success {
  background: var(--oso-alert-success-bg, #d1e7dd);
  border-color: var(--oso-alert-success-border, #a3cfbb);
  color: var(--oso-alert-success-text, #0f5132);
}

/* Buttons (WHMCS classes kept for JS; themed via our vars) */
#one-step-cart.oso-secondary-page .btn {
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  padding: var(--spacing-sm) var(--spacing-lg);
  border-radius: var(--border-radius-md);
  border: 1px solid transparent;
  font-weight: var(--font-weight-medium);
  cursor: pointer;
  transition: var(--transition-base);
  text-decoration: none;
  line-height: 1.4;
}

#one-step-cart.oso-secondary-page .btn-primary,
#one-step-cart.oso-secondary-page .btn-success {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  color: var(--whmp-text-inverse);
}

#one-step-cart.oso-secondary-page .btn-primary:hover,
#one-step-cart.oso-secondary-page .btn-success:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
  color: var(--whmp-text-inverse);
}

#one-step-cart.oso-secondary-page .btn-default {
  background: var(--whmp-bg-base);
  border-color: var(--whmp-border-mid);
  color: var(--whmp-text-primary);
}

#one-step-cart.oso-secondary-page .btn-default:hover {
  border-color: var(--whmp-primary);
  color: var(--whmp-primary);
}

#one-step-cart.oso-secondary-page .btn-sm {
  padding: var(--spacing-xs) var(--spacing-md);
  font-size: var(--font-sm);
}

#one-step-cart.oso-secondary-page .btn-lg {
  padding: var(--spacing-md) var(--spacing-xl);
  font-size: var(--font-lg);
}

/* Form controls */
#one-step-cart.oso-secondary-page .form-control {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  font-size: var(--font-md);
}

#one-step-cart.oso-secondary-page .form-control:focus {
  outline: 0;
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

#one-step-cart.oso-secondary-page select.form-control {
  color: var(--whmp-text-primary);
  background-color: var(--whmp-bg-base);
}

#one-step-cart.oso-secondary-page select.form-control option {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
}

#one-step-cart.oso-secondary-page .form-group {
  margin-bottom: var(--spacing-md);
}

#one-step-cart.oso-secondary-page label {
  color: var(--whmp-text-primary);
}

/* Labels / badges */
#one-step-cart.oso-secondary-page .label {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 10px;
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
}

#one-step-cart.oso-secondary-page .label-success {
  background: var(--whmp-domain-available-bg);
  color: var(--whmp-success);
}

#one-step-cart.oso-secondary-page .label-warning {
  /* 1.1.4 - a warning tint with a darker warning text (it was the warning colour on the pink
     "taken" background, hard to read). */
  background: color-mix(in srgb, var(--whmp-warning) 16%, var(--whmp-bg-base));
  color: color-mix(in srgb, var(--whmp-warning) 65%, var(--whmp-text-primary));
}

#one-step-cart.oso-secondary-page .label-danger {
  background: var(--whmp-domain-taken-bg);
  color: var(--whmp-danger);
}

#one-step-cart.oso-secondary-page .label-info,
#one-step-cart.oso-secondary-page .label-grey,
#one-step-cart.oso-secondary-page .label-default {
  background: var(--whmp-bg-alt);
  color: var(--whmp-text-secondary);
}

/* Addons page: product cards */
#one-step-cart.oso-secondary-page .products .row {
  display: flex;
  flex-wrap: wrap;
  margin: 0 -10px;
}

#one-step-cart.oso-secondary-page .products .col-md-6 {
  padding: 0 10px;
  margin-bottom: var(--spacing-lg);
}

#one-step-cart.oso-secondary-page .product {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  box-shadow: var(--shadow-sm);
  height: 100%;
}

#one-step-cart.oso-secondary-page .product header span {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
  display: block;
  margin-bottom: var(--spacing-sm);
}

#one-step-cart.oso-secondary-page .product-desc p {
  color: var(--whmp-text-secondary);
  margin-bottom: var(--spacing-md);
}

#one-step-cart.oso-secondary-page .product-pricing {
  margin-bottom: var(--spacing-sm);
}

#one-step-cart.oso-secondary-page .product-pricing .price {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-primary);
}

/* Renewal item cards (domain + service) */
#one-step-cart.oso-secondary-page .domain-renewal,
#one-step-cart.oso-secondary-page .service-renewal {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  box-shadow: var(--shadow-sm);
  position: relative;
}

#one-step-cart.oso-secondary-page .domain-renewal h3,
#one-step-cart.oso-secondary-page .service-renewal h3,
#one-step-cart.oso-secondary-page .service-renewal h4 {
  color: var(--whmp-text-primary);
  margin: 0 0 var(--spacing-sm) 0;
}

#one-step-cart.oso-secondary-page .domain-renewal p,
#one-step-cart.oso-secondary-page .service-renewal p {
  color: var(--whmp-text-secondary);
}

#one-step-cart.oso-secondary-page .addon-renewals {
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-md);
  border-top: 1px dashed var(--whmp-border-light);
}

/* Renewal pages layout: content + sticky summary */
#one-step-cart.oso-secondary-page .secondary-cart-body {
  flex: 1 1 62%;
  min-width: 0;
  padding-right: var(--spacing-lg);
}

#one-step-cart.oso-secondary-page .secondary-cart-sidebar {
  flex: 1 1 32%;
  min-width: 260px;
}

#one-step-cart.oso-secondary-page #orderSummary {
  position: -webkit-sticky;
  position: sticky;
  top: var(--spacing-lg);
}

#one-step-cart.oso-secondary-page .order-summary {
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  padding: var(--spacing-lg);
  box-shadow: var(--shadow-md);
  margin-bottom: var(--spacing-md);
  position: relative;
}

#one-step-cart.oso-secondary-page .order-summary h2 {
  color: var(--whmp-text-primary);
  margin: 0 0 var(--spacing-md) 0;
}

#one-step-cart.oso-secondary-page .order-summary .loader {
  position: absolute;
  top: var(--spacing-md);
  right: var(--spacing-md);
  color: var(--whmp-primary);
}

/* Remove-item modal (Bootstrap classes kept for the modal plugin) */
.modal-remove-item .modal-content {
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border-radius: var(--border-radius-lg);
  border: none;
}

.modal-remove-item .modal-header,
.modal-remove-item .modal-footer {
  border-color: var(--whmp-border-light);
}

.modal-remove-item .modal-title,
.modal-remove-item .modal-body {
  color: var(--whmp-text-primary);
}

@media (max-width: 768px) {
  #one-step-cart.oso-secondary-page .secondary-cart-body,
  #one-step-cart.oso-secondary-page .secondary-cart-sidebar {
    flex: 1 1 100%;
    padding-right: 0;
  }
  #one-step-cart.oso-secondary-page .products .col-md-6 {
    flex: 1 1 100%;
  }
}

/* ====================================================
   SELF-CONTAINED RESPONSIVE GRID
   The order form used to rely on the host theme's bundled
   Bootstrap (all.min.css) for .row / .col-* widths. That
   file is no longer loaded, so on non-Lagom themes (which
   do not ship a compatible grid) sections had no proper
   widths and looked awkward on mobile. This grid is scoped
   under #one-step-cart so the checkout lays out correctly
   on ANY client-area theme, in every screen size.
   ==================================================== */
#one-step-cart .row {
  display: flex;
  flex-wrap: wrap;
  margin-right: -10px;
  margin-left: -10px;
}

#one-step-cart .row.row-eq-height {
  align-items: stretch;
}

/* Grid columns only (NOT arbitrary classes containing "col-" such as the
   skeleton .oso-skeleton-col-* or other components). Precise selectors so we
   never accidentally restyle unrelated elements. */
#one-step-cart [class^="col-"],
#one-step-cart [class*=" col-"] {
  position: relative;
  width: 100%;
  padding-right: 10px;
  padding-left: 10px;
  box-sizing: border-box;
}

/* Breakpoint columns are full width until their breakpoint widens them.
   This is what keeps mobile clean (col-md/col-sm/col-lg stack on phones). */
#one-step-cart [class^="col-sm-"],
#one-step-cart [class*=" col-sm-"],
#one-step-cart [class^="col-md-"],
#one-step-cart [class*=" col-md-"],
#one-step-cart [class^="col-lg-"],
#one-step-cart [class*=" col-lg-"] {
  flex: 0 0 100%;
  max-width: 100%;
}

/* Plain .col-N (no breakpoint) apply at all widths, matching Bootstrap. */
#one-step-cart .col-1 {
  flex: 0 0 8.3333%;
  max-width: 8.3333%;
}
#one-step-cart .col-4 {
  flex: 0 0 33.3333%;
  max-width: 33.3333%;
}
#one-step-cart .col-6 {
  flex: 0 0 50%;
  max-width: 50%;
}
#one-step-cart .col-7 {
  flex: 0 0 58.3333%;
  max-width: 58.3333%;
}
#one-step-cart .col-12 {
  flex: 0 0 100%;
  max-width: 100%;
}

/* Small devices and up (>=576px) */
@media (min-width: 576px) {
  #one-step-cart .col-sm-3 {
    flex: 0 0 25%;
    max-width: 25%;
  }
  #one-step-cart .col-sm-4 {
    flex: 0 0 33.3333%;
    max-width: 33.3333%;
  }
  #one-step-cart .col-sm-5 {
    flex: 0 0 41.6667%;
    max-width: 41.6667%;
  }
  #one-step-cart .col-sm-6 {
    flex: 0 0 50%;
    max-width: 50%;
  }
  #one-step-cart .col-sm-12 {
    flex: 0 0 100%;
    max-width: 100%;
  }
  #one-step-cart .col-sm-offset-6,
  #one-step-cart .offset-sm-6 {
    margin-left: 50%;
  }
}

/* Medium devices and up (>=768px) */
@media (min-width: 768px) {
  #one-step-cart .col-md-3 {
    flex: 0 0 25%;
    max-width: 25%;
  }
  #one-step-cart .col-md-4 {
    flex: 0 0 33.3333%;
    max-width: 33.3333%;
  }
  #one-step-cart .col-md-6 {
    flex: 0 0 50%;
    max-width: 50%;
  }
  #one-step-cart .col-md-8 {
    flex: 0 0 66.6667%;
    max-width: 66.6667%;
  }
  #one-step-cart .col-md-9 {
    flex: 0 0 75%;
    max-width: 75%;
  }
  #one-step-cart .col-md-12 {
    flex: 0 0 100%;
    max-width: 100%;
  }
  #one-step-cart .col-md-offset-2,
  #one-step-cart .offset-md-2 {
    margin-left: 16.6667%;
  }
}

/* The checkout's two columns stack below 992px, as WHMCS's Standard Cart does (col-lg): there the
   order summary becomes a block in the page flow and the mobile total banner carries the total
   (the summary's breakpoint, above). Side by side between 768px and 991px the summary was a
   third-width column of about 215px - its heading broken in two, the billing cycle select cut to
   "M...", and the Complete Order label overflowing its button. */
@media (max-width: 991.98px) {
  #one-step-cart #order-standard_cart.row > .col-md-8,
  #one-step-cart #order-standard_cart.row > .col-md-4 {
    flex: 0 0 100%;
    max-width: 100%;
  }
}

/* The order button's label wraps in a narrow summary column instead of running out of the button,
   and the button grows to hold it (its fixed height clipped the second line). */
#one-step-cart #myCompleteOrder,
#one-step-cart #myCompleteOrder .btn-text {
  white-space: normal;
}
#one-step-cart #myCompleteOrder {
  height: auto;
  min-height: 56px;
}

/* Large devices and up (>=992px) */
@media (min-width: 992px) {
  #one-step-cart .col-lg-3 {
    flex: 0 0 25%;
    max-width: 25%;
  }
  #one-step-cart .col-lg-4 {
    flex: 0 0 33.3333%;
    max-width: 33.3333%;
  }
}

/* Mobile safety: make sure nothing overflows the viewport. */
@media (max-width: 767.98px) {
  #one-step-cart {
    max-width: 100%;
    overflow-x: hidden;
    box-sizing: border-box;
  }
  #one-step-cart .cart-body,
  #one-step-cart .section,
  #one-step-cart .section-body,
  #one-step-cart .checkout-section {
    max-width: 100%;
    box-sizing: border-box;
  }
  #one-step-cart .billing-cycle-content {
    grid-template-columns: minmax(0, 1fr);
  }
  /* On phones, every grid column spans the full width so sections stack
       cleanly regardless of the host theme. */
  #one-step-cart [class^="col-"],
  #one-step-cart [class*=" col-"] {
    flex: 0 0 100%;
    max-width: 100%;
  }
}

/* ====================================================
   CUSTOM SELECT DROPDOWN (ul/li overlay)
   The real <select> stays in the DOM but hidden; this
   styled widget mirrors it so it matches the theme in
   light/dark and under Lagom (all via --whmp-* vars).
   ==================================================== */
#one-step-cart .oso-cselect {
  position: relative;
  width: 100%;
}

#one-step-cart select.oso-cselect-native {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

#one-step-cart .oso-cselect-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  width: 100%;
  min-height: var(--input-height-sm, 44px);
  padding: var(--spacing-sm) var(--spacing-md);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  cursor: pointer;
  font-size: var(--font-md);
  transition: var(--transition-base);
  box-sizing: border-box;
}

#one-step-cart .oso-cselect-trigger:hover,
#one-step-cart .oso-cselect.open .oso-cselect-trigger {
  border-color: var(--whmp-primary);
}

#one-step-cart .oso-cselect.open .oso-cselect-trigger {
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

#one-step-cart .oso-cselect-label {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  text-align: left;
}

/* A configurable option's choice often carries its specification and its price ("Nanode 1GB (25GB
   Disk, 1GB RAM, 1 vCPU) - $5.00/mo"): cut to one line, the price - the part that matters - is
   what disappears. In those cells the chosen text wraps instead, and so do the list's choices. */
#one-step-cart .config-options-container .oso-cselect-label,
#one-step-cart .config-options-container .oso-cselect-option,
#one-step-cart .oso-rec-config-body .oso-cselect-label,
#one-step-cart .oso-rec-config-body .oso-cselect-option,
#one-step-cart .bundle-row .oso-cselect-label,
#one-step-cart .bundle-row .oso-cselect-option {
  white-space: normal;
  overflow-wrap: anywhere;
  text-overflow: clip;
}

#one-step-cart .config-options-container .oso-cselect-trigger,
#one-step-cart .oso-rec-config-body .oso-cselect-trigger,
#one-step-cart .bundle-row .oso-cselect-trigger {
  height: auto;
  line-height: 1.35;
}

#one-step-cart .oso-cselect-caret {
  flex-shrink: 0;
  font-size: 12px;
  color: var(--whmp-text-secondary);
  transition: transform 0.2s ease;
}

#one-step-cart .oso-cselect.open .oso-cselect-caret {
  transform: rotate(180deg);
}

#one-step-cart #currency-selector-container .oso-cselect-list {
  bottom: calc(100% + 4px);
  top: auto;
}

#one-step-cart .oso-cselect-list {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  right: 0;
  z-index: 60;
  margin: 0;
  padding: 6px;
  list-style: none;
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  box-shadow: var(--shadow-md);
  max-height: 260px;
  overflow-y: auto;
  display: none;
}

#one-step-cart .oso-cselect.open .oso-cselect-list {
  display: block;
}

#one-step-cart .oso-cselect-option {
  padding: var(--spacing-sm) var(--spacing-md);
  border-radius: var(--border-radius-sm);
  color: var(--whmp-text-primary);
  cursor: pointer;
  font-size: var(--font-md);
  transition:
    background 0.15s ease,
    color 0.15s ease;
}

#one-step-cart .oso-cselect-option:hover {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
}

#one-step-cart .oso-cselect-option.selected {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
}

#one-step-cart .oso-cselect-option.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* Scrollbar: see CANONICAL SCROLLBAR near the end of this file. */

/* ====================================================
   NATIVE <select> styling (Billing/Payment sections and
   anywhere left native). We must NOT replace these, but
   we style the control + its options to match the theme.
   ==================================================== */
#one-step-cart .section--billing-details select,
#one-step-cart .payment-section select,
#billingDetailsModal select,
#one-step-cart .oso-no-enhance select {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  padding: var(--spacing-sm) var(--spacing-md);
}

#one-step-cart .section--billing-details select:focus,
#one-step-cart .payment-section select:focus,
#billingDetailsModal select:focus {
  outline: 0;
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

#one-step-cart .section--billing-details select option,
#one-step-cart .payment-section select option,
#billingDetailsModal select option {
  background-color: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
}

/* ====================================================
   PAYMENT DETAILS INSIDE THE ORDER SUMMARY
   When show_payment_details is enabled, payment_details.tpl
   is rendered inside the narrow order-summary column
   (#orderSummaryPaymentMethods). Force all payment fields to
   stack full-width and fit so the credit-card, Stripe and
   gateway (PayPal/etc.) containers never overflow.
   ==================================================== */
#orderSummaryPaymentMethods #paymentGatewaysContainer {
  padding: var(--spacing-md) 0 0 0;
}

#orderSummaryPaymentMethods #creditCardInputFields {
  padding: var(--spacing-md);
  margin-top: var(--spacing-md);
}

/* Every column inside the summary payment area becomes full width */
#orderSummaryPaymentMethods .row {
  margin-left: 0;
  margin-right: 0;
}

#orderSummaryPaymentMethods [class*="col-"] {
  flex: 0 0 100% !important;
  max-width: 100% !important;
  width: 100% !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  float: none !important;
  margin-bottom: var(--spacing-sm);
}

/* Stripe element must never keep its fixed 320px width here */
#orderSummaryPaymentMethods .StripeElement,
#orderSummaryPaymentMethods #stripeElements .StripeElement {
  width: 100% !important;
  max-width: 100% !important;
  box-sizing: border-box;
}

#orderSummaryPaymentMethods #stripeElements .stripe-cards-inputs .col-md-6,
#orderSummaryPaymentMethods #stripeElements .stripe-cards-inputs .col-md-3 {
  width: 100% !important;
}

/* Gateway input (PayPal and other hosted/remote gateways) */
#orderSummaryPaymentMethods #paymentGatewayInput {
  width: 100%;
  overflow-x: auto;
}

#orderSummaryPaymentMethods #paymentGatewayInput iframe,
#orderSummaryPaymentMethods #paymentGatewayInput img,
#orderSummaryPaymentMethods #paymentGatewayInput form {
  max-width: 100% !important;
}

/* Existing stored cards grid → single column in the narrow space */
#orderSummaryPaymentMethods .existing-cc-grid {
  display: block;
}

#orderSummaryPaymentMethods .existing-cc-grid > * {
  width: 100%;
  margin-bottom: var(--spacing-sm);
}

/* Inputs and their groups fill the width cleanly */
#orderSummaryPaymentMethods .whmp-form-cntrl,
#orderSummaryPaymentMethods .input-group {
  width: 100%;
  box-sizing: border-box;
}

/* Gateway logo sits a touch smaller in the narrow column */
#orderSummaryPaymentMethods img.gateway-logo {
  max-height: 22px;
  max-width: 70px;
}

/* ====================================================
   SELF-CONTAINED UTILITY CLASSES
   The order-form markup uses Bootstrap-style utility class
   names (text-center, mt-3, pull-right, clearfix, d-block,
   input-group, form-control, font-size-*, ...). Different
   client-area themes ship these differently (or not at all),
   which made the checkout look inconsistent across themes.
   These rules define every utility we rely on, scoped under
   #one-step-cart, so the checkout / addons / renewals pages
   render identically on ANY theme without depending on the
   host theme's Bootstrap. Class names are kept (not renamed)
   so all backend / JS functionality keeps working.
   More specific module rules (and !important overrides) still
   win over these generic fallbacks.
   ==================================================== */

/* Text alignment */
#one-step-cart .text-center {
  text-align: center;
}
#one-step-cart .text-right {
  text-align: right;
}
#one-step-cart .text-left,
#one-step-cart .text-sm-left {
  text-align: left;
}

/* Text colours */
#one-step-cart .text-muted {
  color: var(--whmp-text-light);
}
#one-step-cart .text-success {
  color: var(--whmp-success);
}
#one-step-cart .text-danger {
  color: var(--whmp-danger);
}

/* Float / legacy pull helpers */
#one-step-cart .pull-right,
#one-step-cart .float-right {
  float: right;
}
#one-step-cart .pull-left,
#one-step-cart .float-left {
  float: left;
}

#one-step-cart .clearfix::after {
  content: "";
  display: table;
  clear: both;
}

/* Display */
#one-step-cart .d-block {
  display: block;
}
#one-step-cart .d-none {
  display: none;
}
#one-step-cart .d-inline-block {
  display: inline-block;
}
#one-step-cart .d-flex {
  display: flex;
}
#one-step-cart .justify-content-between {
  justify-content: space-between;
}
#one-step-cart .align-items-center {
  align-items: center;
}
#one-step-cart .w-100 {
  width: 100%;
}

/* Font size helpers (px values kept identical to the markup names) */
#one-step-cart .font-size-18 {
  font-size: 18px;
}
#one-step-cart .font-size-22 {
  font-size: 22px;
}
#one-step-cart .font-size-24 {
  font-size: 24px;
}
#one-step-cart .font-size-30 {
  font-size: 30px;
}
#one-step-cart .font-size-36 {
  font-size: 36px;
}
#one-step-cart .small {
  font-size: 85%;
}

/* Spacing scale (Bootstrap-like: 1=4px .. 5=48px), using our vars where they line up */
#one-step-cart .m-0 {
  margin: 0;
}
#one-step-cart .mt-0 {
  margin-top: 0;
}
#one-step-cart .mb-0 {
  margin-bottom: 0;
}
#one-step-cart .mt-1 {
  margin-top: var(--spacing-xs);
}
#one-step-cart .mt-2 {
  margin-top: var(--spacing-sm);
}
#one-step-cart .mt-3 {
  margin-top: var(--spacing-md);
}
#one-step-cart .mt-4 {
  margin-top: var(--spacing-lg);
}
#one-step-cart .mt-5 {
  margin-top: var(--spacing-xl);
}
#one-step-cart .mb-1 {
  margin-bottom: var(--spacing-xs);
}
#one-step-cart .mb-2 {
  margin-bottom: var(--spacing-sm);
}
#one-step-cart .mb-3 {
  margin-bottom: var(--spacing-md);
}
#one-step-cart .mb-4 {
  margin-bottom: var(--spacing-lg);
}
#one-step-cart .mb-5 {
  margin-bottom: var(--spacing-xl);
}
#one-step-cart .ml-1 {
  margin-left: var(--spacing-xs);
}
#one-step-cart .ml-2 {
  margin-left: var(--spacing-sm);
}
#one-step-cart .mr-1 {
  margin-right: var(--spacing-xs);
}
#one-step-cart .mr-2 {
  margin-right: var(--spacing-sm);
}
#one-step-cart .p-2 {
  padding: var(--spacing-sm);
}
#one-step-cart .p-3 {
  padding: var(--spacing-md);
}
#one-step-cart .no-padding {
  padding: 0;
}

/* Input groups (used by billing/payment CVV, etc.) — kept for WHMCS JS */
#one-step-cart .input-group {
  position: relative;
  display: flex;
  align-items: stretch;
  width: 100%;
}
#one-step-cart .input-group > .whmp-form-cntrl,
#one-step-cart .input-group > input {
  position: relative;
  flex: 1 1 auto;
  width: 1%;
  min-width: 0;
}
#one-step-cart .input-group-append,
#one-step-cart .input-group-btn {
  display: flex;
}
#one-step-cart .input-group-append .whmp-btn,
#one-step-cart .input-group-btn .whmp-btn {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}

/* Inline form helper */
#one-step-cart .form-inline {
  display: flex;
  flex-flow: row wrap;
  align-items: center;
}
#one-step-cart .input-inline-100 {
  width: 100%;
}

/* ====================================================
   EXISTING-ACCOUNT SELECTOR (#containerExistingAccountSelect)
   Shown to logged-in users to pick which account to order
   under (or create a new one). Was unstyled; render each
   account as a themed selectable card. Uses --whmp-* vars so
   it themes for light/dark and Lagom automatically.
   ==================================================== */
#one-step-cart #containerExistingAccountSelect.account-select-container {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  margin: 0 0 var(--spacing-lg) 0;
}

#one-step-cart #containerExistingAccountSelect > [class*="col-"] {
  padding-left: 0;
  padding-right: 0;
  margin-bottom: 0;
}

#one-step-cart #containerExistingAccountSelect .account {
  height: 100%;
  background: var(--whmp-bg-base);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  transition: var(--transition-base);
}

#one-step-cart #containerExistingAccountSelect .account:hover {
  border-color: var(--whmp-primary);
}

#one-step-cart #containerExistingAccountSelect .account.active {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
  box-shadow: 0 0 0 2px var(--whmp-focus-ring);
}

#one-step-cart #containerExistingAccountSelect .account.border-bottom {
  border: 1px solid var(--whmp-border-mid);
}

#one-step-cart #containerExistingAccountSelect .account.border-bottom.active {
  border-color: var(--whmp-primary);
}

#one-step-cart #containerExistingAccountSelect label.radio-inline {
  display: flex;
  align-items: flex-start;
  gap: var(--spacing-sm);
  margin: 0;
  padding: var(--spacing-md);
  cursor: pointer;
  width: 100%;
  box-sizing: border-box;
  color: var(--whmp-text-secondary);
  font-weight: var(--font-weight-normal);
}

#one-step-cart
  #containerExistingAccountSelect
  label.radio-inline
  input[type="radio"] {
  margin: 3px 0 0 0;
  flex-shrink: 0;
  accent-color: var(--whmp-primary);
  width: 16px;
  height: 16px;
  cursor: pointer;
}

#one-step-cart #containerExistingAccountSelect .account-select.disabled,
#one-step-cart #containerExistingAccountSelect input:disabled {
  cursor: not-allowed;
}

#one-step-cart #containerExistingAccountSelect .account .address {
  display: block;
  line-height: 1.5;
}

#one-step-cart #containerExistingAccountSelect .account .address strong {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold);
}

#one-step-cart #containerExistingAccountSelect .account .address .small {
  color: var(--whmp-text-light);
  font-size: var(--font-sm);
}

#one-step-cart #containerExistingAccountSelect .account .label {
  display: inline-block;
  padding: 2px 8px;
  border-radius: 10px;
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  margin-left: var(--spacing-xs);
}

#one-step-cart #containerExistingAccountSelect .account .label-info {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
}

#one-step-cart #containerExistingAccountSelect .account .label-default {
  background: var(--whmp-bg-alt);
  color: var(--whmp-text-secondary);
}

#one-step-cart #containerExistingAccountSelect #createNewAccountLabel {
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
}

@media (max-width: 767.98px) {
  #one-step-cart #containerExistingAccountSelect > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
  }
}

/* ====================================================
   PASSWORD STRENGTH METER (new-user signup)
   Uses Bootstrap .progress/.progress-bar markup driven by
   WHMCS PasswordStrength.js (it sets the bar width inline and
   toggles progress-bar-danger/-warning/-success). Themes may
   not style these, so define them ourselves via --whmp-* vars.
   ==================================================== */
#one-step-cart .password-strength-meter {
  margin-top: var(--spacing-xs);
}

#one-step-cart .password-strength-meter .progress {
  height: 8px;
  background: var(--whmp-bg-alt);
  border-radius: var(--border-radius-base);
  overflow: hidden;
  margin-bottom: var(--spacing-xs);
}

#one-step-cart .password-strength-meter .progress-bar {
  height: 100%;
  width: 0;
  background: var(--whmp-primary-fill, var(--whmp-primary));
  transition:
    width 0.3s ease,
    background 0.3s ease;
}

#one-step-cart .password-strength-meter .progress-bar-danger {
  background: var(--whmp-danger);
}

#one-step-cart .password-strength-meter .progress-bar-warning {
  background: var(--whmp-warning);
}

#one-step-cart .password-strength-meter .progress-bar-success {
  background: var(--whmp-success);
}

#one-step-cart #passwordStrengthTextLabel {
  margin: 0;
  color: var(--whmp-text-light);
}

/* ====================================================
   MISC PREVIOUSLY-UNSTYLED CHECKOUT PIECES
   ==================================================== */

/* Custom-field wrapper + its help/description text */
#one-step-cart .whmp-field-container {
  margin-top: var(--spacing-sm);
}

#one-step-cart .field-help-text {
  display: block;
  margin-top: var(--spacing-xs);
  font-size: var(--font-sm);
  color: var(--whmp-text-light);
  line-height: 1.4;
}

/* Stored payment methods (existing cards) in the payment section */
#one-step-cart .existing-card {
  flex: 1 1 220px;
  min-width: 0;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  transition: var(--transition-base);
}

#one-step-cart .existing-card:hover {
  border-color: var(--whmp-primary);
}

#one-step-cart .existing-card label.radio-inline {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  margin: 0;
  padding: var(--spacing-md);
  cursor: pointer;
  color: var(--whmp-text-primary);
}

#one-step-cart .existing-card input[type="radio"] {
  margin: 0;
  flex-shrink: 0;
  accent-color: var(--whmp-primary);
}

#one-step-cart .existing-card .paymethod-info {
  display: flex;
  flex-direction: column;
  line-height: 1.4;
  min-width: 0;
}

#one-step-cart .existing-card .paymethod-info .type {
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

/* Social sign-in / linked-account buttons (OAuth) — safe layout only,
   leave the buttons' own look to their provider markup. */
#one-step-cart .social-signin-btns {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  margin: var(--spacing-sm) 0;
}

#one-step-cart .provider-name {
  color: var(--whmp-text-primary);
}

/* ---------------------------------------------------------------------------
   Subdomain option ("use a subdomain of ours")
   Shown only for a product that has subdomain options configured. The row is
   label input + suffix select + Use button, so the text field is narrowed to
   leave the select room; oso-custom-select.js enhances that select in place.
   --------------------------------------------------------------------------- */
.domain-search-container .subdomain-input-grp {
  display: flex;
  align-items: stretch;
  flex-wrap: wrap;
}

.domain-search-container .subdomain-input-grp .subdomain-sld-input {
  flex: 1 1 45%;
  min-width: 0;
}

/* `align-self: center` made this select the one control in the row that did not
   fill the row's height - 48px inside a 61px row - so it floated between the
   input and the Use button instead of sitting on the same top and bottom edge
   as them. The search row's select stretches; this one now does too. */
.domain-search-container .subdomain-input-grp .subdomain-suffix-select,
.domain-search-container .subdomain-input-grp .oso-cselect {
  flex: 0 1 40%;
  min-width: 0;
  align-self: stretch;
}

.domain-search-container .subdomain-input-grp .input-group-append {
  flex: 0 0 auto;
}

/* Padding was 19px 12px against the search button's 16px. In a stretch row the
   outer box still lines up, so this is not what moved the button - but it does
   mean the two buttons sit their labels at different heights, which is the part
   that reads as "lower". Matched to the search button, and the background taken
   from --whmp-primary rather than the hover shade so the resting state of the
   two buttons is the same colour too. */
#subdomain-use-v {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  border-color: var(--whmp-primary);
  font-weight: var(--font-weight-medium);
  border-radius: 0px var(--border-radius-lg) var(--border-radius-lg) 0px;
  font-size: var(--font-base);
  padding: 16px;
  color: var(--whmp-text-inverse);
}

#subdomain-use-v:hover,
#subdomain-use-v:focus {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
  border-color: var(--whmp-primary-hover);
}

@media (max-width: 576px) {
  .domain-search-container .subdomain-input-grp .subdomain-sld-input,
  .domain-search-container .subdomain-input-grp .subdomain-suffix-select,
  .domain-search-container .subdomain-input-grp .oso-cselect,
  .domain-search-container .subdomain-input-grp .input-group-append {
    flex: 1 1 100%;
  }

  #subdomain-use-v {
    width: 100%;
    border-radius: var(--border-radius-lg);
  }
}

/* ---------------------------------------------------------------------------
   Product bundles
   A bundle sits in the same grid as the product cards but is ordered through
   core (cart.php?a=add&bid=X), so its call to action is a link rather than the
   select/deselect button. The deal label replaces the billing cycle line, since
   a bundle has no cycle of its own - each item inside it carries its own.
   --------------------------------------------------------------------------- */
/* Was a hardcoded green, which is the SUCCESS colour and belongs to
   "this worked", not to a promotional label - and it ignored the theme
   entirely. It is the brand accent, so it comes off the mapping like every
   other accent on the card. */
.bundle-deal-label {
  display: inline-block;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-semibold, 600);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
  border-radius: var(--border-radius-sm);
  padding: 2px var(--spacing-sm);
  margin-bottom: var(--spacing-sm);
}

.product-card.bundle-card .bundle-order-btn {
  display: block;
  width: 100%;
  text-align: center;
  text-decoration: none;
}

.product-card.bundle-card .bundle-order-btn:hover,
.product-card.bundle-card .bundle-order-btn:focus {
  text-decoration: none;
}

/* ---------------------------------------------------------------------------
   Bundle requirement warnings
   The standard cart renders these as a Bootstrap alert-warning above the cart
   (viewcart.tpl). This form ships no theme classes, so the alert is drawn
   here. Warnings only - checkout is never blocked; the customer simply does
   not qualify for the bundle price.
   --------------------------------------------------------------------------- */
.oso-bundle-warnings {
  display: block;
  border: 1px solid var(--whmp-warning);
  border-left-width: 4px;
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  padding: var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.oso-bundle-warnings strong {
  color: var(--whmp-warning);
  font-weight: var(--font-weight-semibold, 600);
}

.oso-bundle-warnings ul {
  margin: var(--spacing-sm) 0 0;
  padding-left: 20px;
}

.oso-bundle-warnings ul li {
  font-size: var(--font-md);
  margin-bottom: 4px;
}

/* ---------------------------------------------------------------------------
   Bundle contents on the product card
   One line per item from tblbundles.itemdata: the product with the cycle the
   bundle requires and, where it overrides the price, that price. A domain item
   prints the extensions that qualify instead. Sits between the features list
   and the call to action, so it reads as part of the card rather than a block
   bolted underneath.
   --------------------------------------------------------------------------- */
/* The item list is a small table of name -> price, not prose. Rows are
   separated by a hairline instead of bullets, so the prices form a column the
   eye can run down and compare.

   It also COLLAPSES ON HOVER, using the same mechanism as a product card's
   feature list (.product-card-features-hover: a max-height cap that the
   `.hovered` class on the card lifts, with the same duration and easing curve).
   Without this the bundle card was the one card in the row that sat fully
   expanded all the time, so it never settled to the others' height and the row
   looked broken. The list is the bundle card's equivalent of the features the
   product cards collapse - it is the part that varies in length. */
.product-card.bundle-card .bundle-item-list {
  list-style: none;
  margin: 0 0 var(--spacing-md);
  padding: 0;
  text-align: left;
  border-top: 1px solid var(--whmp-border-light);
  max-height: 132px;
  overflow: hidden;
  transition: max-height 1.5s cubic-bezier(0.4, 0, 0.2, 1);
  will-change: max-height;
}

.product-card.bundle-card.hovered .bundle-item-list {
  max-height: 800px;
  transition: max-height 1.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.product-card.bundle-card .bundle-item-list .bundle-item {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--spacing-sm);
  padding: var(--spacing-sm) 0;
  margin: 0;
  border-bottom: 1px solid var(--whmp-border-light);
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
  line-height: 1.4;
}

.product-card.bundle-card .bundle-item-list .bundle-item-main {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.product-card.bundle-card .bundle-item-list .bundle-item-name {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
  overflow-wrap: break-word;
}

.product-card.bundle-card .bundle-item-list .bundle-item-meta {
  font-size: var(--font-sm);
  color: var(--whmp-text-light);
}

/* No bullet: the row structure carries the list now, and a bullet in front of
   a flex row just pushed the name out of alignment with the heading above it. */

.product-card.bundle-card .bundle-item-list .bundle-item-price {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold, 600);
  font-size: var(--font-md);
  white-space: nowrap;
  flex-shrink: 0;
}

/* The card itself: it sat flatter than the product cards it stands beside, so
   it read as secondary when it is meant to be the stronger offer. */
.product-card.bundle-card {
  border-color: var(--whmp-primary-light);
}

.product-card.bundle-card:hover {
  border-color: var(--whmp-primary);
}

.product-card.bundle-card .product-card-header h4 {
  color: var(--whmp-text-primary);
}

/* The headline price is deliberately NOT re-coloured. A bundle card sits in the
   same row as the product cards and its price has to read as the same kind of
   number as theirs, so it inherits `.product-billing-cycle .price-amount`
   untouched - same size, weight and colour. Only the BUNDLE DEAL label is the
   accent. */

/* ---------------------------------------------------------------------------
   Selected bundle block
   A chosen bundle is lifted out of the product list into its own block above
   it, the same move a selected product makes: what was picked reads before
   what could be picked. Header carries the name and Edit; the body carries the
   description and the item lines.
   --------------------------------------------------------------------------- */
/* `overflow: hidden` here is what clipped the bundle rows' dropdowns: the
   custom select renders its panel as position:absolute (see .oso-cselect-list),
   which the rest of the form relies on too, and an absolutely positioned child
   is still cut off by an ancestor that hides its overflow. The panel therefore
   opened INSIDE the card and lost everything past the border.

   The form's other dropdowns escape simply by not being inside a clipping
   ancestor, so this matches them rather than inventing a position:fixed path.
   The overflow was only ever serving the rounded corners; the head carries its
   own top radius now, which does that job without clipping. */
.bundle-selected-block {
  border: 1px solid var(--whmp-primary-light);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  margin-bottom: var(--spacing-md);
}

.bundle-selected-block .bundle-selected-head {
  border-top-left-radius: var(--border-radius-md);
  border-top-right-radius: var(--border-radius-md);
}

/* The open row is the one whose panel must sit above its neighbours; without a
   stacking context the next row's background paints over it. */
.bundle-selected-block .bundle-row.open {
  position: relative;
  z-index: 5;
}

.bundle-selected-block .bundle-selected-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  padding: var(--spacing-md);
  border-bottom: 1px solid var(--whmp-border-light);
}

.bundle-selected-block .bundle-selected-name {
  margin: 0;
  font-size: var(--font-lg, 16px);
  font-weight: var(--font-weight-semibold, 600);
  color: var(--whmp-text-primary);
}

.bundle-selected-block .bundle-selected-body {
  padding: var(--spacing-md);
}

.bundle-selected-block .bundle-selected-desc {
  color: var(--whmp-primary);
  font-size: var(--font-md);
  margin-bottom: var(--spacing-sm);
}

/* the item lines are shared with the card, so the same look follows them here */
.bundle-selected-block .bundle-item-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.bundle-selected-block .bundle-item-list .bundle-item {
  position: relative;
  padding-left: 14px;
  margin-bottom: 6px;
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
}

.bundle-selected-block .bundle-item-list .bundle-item::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--whmp-primary-fill, var(--whmp-primary));
}

.bundle-selected-block .bundle-item-list .bundle-item-price {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold, 600);
}

/* ---------------------------------------------------------------------------
   Bundle item rows
   One row per item that still needs something from the customer - today that
   means a domain, since the cycle and config options a bundle states are
   already applied when it is added. The row header names the item and shows
   what it is waiting for; the body opens beneath it.
   --------------------------------------------------------------------------- */
.bundle-selected-block .bundle-rows {
  border-top: 1px solid var(--whmp-border-light);
}

.bundle-selected-block .bundle-row + .bundle-row {
  border-top: 1px solid var(--whmp-border-light);
}

.bundle-selected-block .bundle-row-head {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: var(--spacing-md);
  cursor: pointer;
  user-select: none;
}

.bundle-selected-block .bundle-row-chevron {
  color: var(--whmp-text-secondary);
  font-size: 12px;
  transition: transform 0.2s ease;
}

.bundle-selected-block .bundle-row.open .bundle-row-chevron {
  transform: rotate(90deg);
}

.bundle-selected-block .bundle-row-name {
  font-weight: var(--font-weight-semibold, 600);
  color: var(--whmp-text-primary);
  flex: 1 1 auto;
}

.bundle-selected-block .bundle-row-status {
  color: var(--whmp-danger-bright);
  font-size: var(--font-md);
  white-space: nowrap;
}

/* The same span also carries the billing cycle of a row that needs nothing
   from the customer. That is information, not a warning, so it must not wear
   the danger colour - see the note in the renderer. .is-resolved stays greener
   and more specific, so a domain row that gets resolved still wins. */
.bundle-selected-block .bundle-row-status--info {
  color: var(--whmp-text-secondary);
}

.bundle-selected-block .bundle-row-body {
  padding: 0 var(--spacing-md) var(--spacing-md);
}

/* ---------------------------------------------------------------------------
   Bundle row body
   Each row is one bundle item configured on its own terms: its product's
   cycles and options, and its own TLD restriction. What the bundle fixes is
   rendered as fixed rather than as a control the customer cannot really use.
   --------------------------------------------------------------------------- */
.bundle-selected-block .bundle-field {
  margin-bottom: var(--spacing-md);
}

.bundle-selected-block .bundle-field-label {
  color: var(--whmp-primary);
  font-size: var(--font-md);
  margin-bottom: 6px;
}

.bundle-selected-block .bundle-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

.bundle-selected-block .bundle-chip {
  display: inline-block;
  padding: 4px 12px;
  border: 1px solid var(--whmp-border-mid);
  border-radius: 999px;
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
}

.bundle-selected-block .bundle-chip.is-fixed {
  border-color: var(--whmp-border-mid);
  color: var(--whmp-text-primary);
}

.bundle-selected-block .bundle-chip.is-price {
  border-color: var(--whmp-primary-light);
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  font-weight: var(--font-weight-semibold, 600);
}

.bundle-selected-block .bundle-opt {
  margin-bottom: var(--spacing-sm);
}

.bundle-selected-block .bundle-opt-name {
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  margin-bottom: 4px;
}

.bundle-selected-block .bundle-opt-fixed {
  font-size: var(--font-md);
  color: var(--whmp-text-secondary);
}

.bundle-selected-block .bundle-opt-price {
  font-size: var(--font-sm, 12px);
  color: var(--whmp-danger-bright);
  margin-top: 2px;
}

/* The bundle's domain-type radios follow the form's own radio pattern - the
   same one #applyCreditContainer and .existing-card use: a bordered label as
   the hit area, the NATIVE control tinted with accent-color rather than a
   replacement circle, and the label itself carrying the hover and checked
   states. They previously rendered as a bare browser default radio inside a
   plain box, which read as a different control from every other radio on the
   page.

   :has() on the label, not `input:checked ~ span`, because these labels hold a
   bare text node rather than a span. :has() is already relied on elsewhere in
   this file (label.radio-inline:has(input:checked)). */
.bundle-selected-block .bundle-radio {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: 8px 12px;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  margin-bottom: 6px;
  cursor: pointer;
  transition: var(--transition-base);
  color: var(--whmp-text-secondary);
  font-size: var(--font-md);
  font-weight: var(--font-weight-normal);
}

.bundle-selected-block .bundle-radio:hover {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
}

.bundle-selected-block .bundle-radio input[type="radio"] {
  margin: 0;
  accent-color: var(--whmp-primary);
  flex-shrink: 0;
  cursor: pointer;
}

.bundle-selected-block .bundle-radio:has(input[type="radio"]:checked) {
  border-color: var(--whmp-primary);
  background: var(--whmp-primary-faded);
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
}

.bundle-selected-block .bundle-domain-grp {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.bundle-selected-block .bundle-domain-grp .bundle-domain-sld {
  flex: 1 1 45%;
  min-width: 0;
}
/* oso-custom-select.js wraps every <select> in a `.oso-cselect` div, so inside
   a flex row the FLEX CHILD is that wrapper - the <select> itself is no longer
   a child of the group at all. Sizing only the <select> therefore left the
   wrapper at its default `flex: 0 1 auto`, and the row broke onto three lines
   even on a wide screen: input, dropdown and button each on their own.
   Both are named so the rule holds whether or not the enhancer has run. */
.bundle-selected-block .bundle-domain-grp .bundle-domain-tld,
.bundle-selected-block .bundle-domain-grp > .oso-cselect {
  flex: 0 1 30%;
  min-width: 0;
}

.bundle-selected-block .bundle-domain-grp > .bundle-domain-check,
.bundle-selected-block .bundle-subdomain-grp > .bundle-subdomain-use {
  flex: 0 0 auto;
}

.bundle-selected-block .bundle-subdomain-grp {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.bundle-selected-block .bundle-subdomain-grp .bundle-subdomain-sld {
  flex: 1 1 45%;
  min-width: 0;
}

.bundle-selected-block .bundle-subdomain-grp .bundle-subdomain-suffix,
.bundle-selected-block .bundle-subdomain-grp > .oso-cselect {
  flex: 0 1 30%;
  min-width: 0;
}

.bundle-selected-block .bundle-covers {
  margin-top: 6px;
  font-size: var(--font-sm, 12px);
  color: var(--whmp-text-secondary);
}

/* Bundle in the order summary: the bundle is the heading, its items sit under
   it, and an overridden price shows what it replaced. */
.whmp-oso-summary-list .list-item-bundle .item-name {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
}
.whmp-oso-summary-list .summary-bundle-badge {
    display: inline-block;
    padding: 1px 7px;
    border-radius: 10px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--whmp-primary, #1a4d80);
    background: var(--whmp-primary-faded, #f5f7f9);
}
/* Muted at rest, red only on hover, sized with the text beside it rather than
   shouting over it. */
.whmp-oso-summary-list .summary-bundle-remove {
    color: var(--whmp-text-light);
    font-size: 12px;
    line-height: 1;
    opacity: 1;
    transition: color 0.15s ease;
}
.whmp-oso-summary-list .summary-bundle-remove:hover,
.whmp-oso-summary-list .summary-bundle-remove:focus {
    color: var(--whmp-danger);
}
/* Wrapping in the summary.
   `word-break: break-word` is inherited here and breaks mid-token, which turned
   a domain into "67u7u6.whmpress1" / ".com" on a phone. `overflow-wrap` breaks
   only when a single token genuinely cannot fit, which is what is wanted. The
   price column must not wrap at all: when the struck original and the bundle
   price split across two lines they stole height and squeezed the name column
   narrower still. */
/* Carries the id because `#one-step-cart .list-item > span` sets
   `word-break: break-word` at specificity (1,2,0) and would otherwise win. */
#one-step-cart .whmp-oso-summary-list .list-item .item-name,
#one-step-cart .whmp-oso-summary-list .list-item .item-value {
  word-break: normal;
  overflow-wrap: break-word;
}

#one-step-cart .whmp-oso-summary-list .list-item .item-value {
  white-space: nowrap;
}

/* The domain sits on its own line under the product name, dash included - see
   whmp_oso_update_orderSummary(), which now keeps the dash inside this element
   so it can never be orphaned on a line of its own. */
.whmp-oso-summary-list .summary-item-domain {
  display: block;
}

/* The subdomain row is a flex row with its own `gap`, so the Use button needs
   no margin of its own - a `margin-top: 6px` here only pushed it 6px below the
   baseline of the suffix dropdown beside it, which is what made it sit low in
   its row. The mobile override that cancelled it (`margin-top: 0` under
   768px) is now redundant but harmless, and is left rather than churn a media
   query for nothing. */

/* Domain search controls stack on a phone.
   Three controls sharing one 280px line left the subdomain suffix <select> at
   1px wide - invisible - and its label input at 57px. Each control takes the
   full width instead, on the register, transfer and subdomain tabs alike, and
   in the bundle rows.

   !important is required: the blanket
   `@media (max-width: 768px) { .whmp-input-grp { flex-wrap: nowrap !important } }`
   earlier in this file would otherwise keep them on one line. Only the real
   controls are selected - an absolutely positioned search icon is left alone. */
@media (max-width: 576px) {
  #one-step-cart #domain-section .whmp-input-grp,
  #one-step-cart .bundle-domain-grp,
  #one-step-cart .bundle-subdomain-grp {
    flex-wrap: wrap !important;
    gap: 8px;
  }

  #one-step-cart #domain-section .whmp-input-grp > input,
  #one-step-cart #domain-section .whmp-input-grp > select,
  #one-step-cart #domain-section .whmp-input-grp > .oso-cselect,
  #one-step-cart #domain-section .whmp-input-grp > .input-group-append,
  #one-step-cart .bundle-domain-grp > input,
  #one-step-cart .bundle-domain-grp > select,
  #one-step-cart .bundle-domain-grp > .oso-cselect,
  #one-step-cart .bundle-domain-grp > button,
  #one-step-cart .bundle-subdomain-grp > input,
  #one-step-cart .bundle-subdomain-grp > select,
  #one-step-cart .bundle-subdomain-grp > .oso-cselect,
  #one-step-cart .bundle-subdomain-grp > button {
    flex: 1 1 100% !important;
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
  }

  #one-step-cart #domain-section .whmp-input-grp > .input-group-append > button {
    width: 100% !important;
  }

  /* Already spaced by the flex gap. */
  #one-step-cart .bundle-subdomain-grp > button.bundle-subdomain-use {
    margin-top: 0;
  }

  /* The search icon is positioned against .whmp-input-grp, and that group is
     now a stacked column - so `top: 50%` lands halfway down the WHOLE column,
     under the input rather than on it. Anchor it to the input's own first text
     line instead: the input is the first row and its text starts one
     --spacing-sm below the group's top, on a 1.5 line-height. That tracks the
     input's own padding token, so it holds whatever height the input takes. */
  #one-step-cart #domain-section .whmp-input-grp > i {
    top: var(--spacing-sm) !important;
    bottom: auto !important;
    transform: none !important;
    height: calc(var(--font-md) * 1.5) !important;
    display: flex !important;
    align-items: center !important;
  }

  /* Four domain tabs cannot fit one 375px line - they were being clipped mid
     word ("Register Domain" showing as "main") behind a horizontal scrollbar
     nobody looks for. They wrap onto as many lines as they need instead. */
  #one-step-cart #domain-section .whmp-navi-tabs {
    flex-wrap: wrap !important;
    overflow-x: visible !important;
  }

  #one-step-cart #domain-section .whmp-navi-tabs > li {
    flex: 0 1 auto;
  }

  #one-step-cart #domain-section .whmp-navi-tabs a {
    white-space: normal;
    font-size: var(--font-sm);
    padding: 8px 10px;
  }
}

.whmp-oso-summary-list .summary-bundle-was {
    margin-right: 6px;
    opacity: .6;
    font-weight: 400;
}
.whmp-oso-summary-list .summary-bundle-note .item-name {
    padding-left: 12px;
    font-size: 11px;
    opacity: .7;
}

/* A bundle replaces the whole order, so the sections that configure ONE
   selected product have nothing to describe while it is in the cart - every
   bundle item is configured in its own row instead. !important because the
   product flow shows these with inline styles of its own. */
body.whmp-bundle-active #billing-cycle-section,
body.whmp-bundle-active #domain-section,
body.whmp-bundle-active #selected-domain-container,
body.whmp-bundle-active #domain-addons-section,
body.whmp-bundle-active #domain-nameservers-section,
body.whmp-bundle-active #server-config-section,
body.whmp-bundle-active #custom-fields-section,
body.whmp-bundle-active #product-domain-config-section,
body.whmp-bundle-active #recommended-products-section,
body.whmp-bundle-active #addons-section,
body.whmp-bundle-active #config-options-section {
    display: none !important;
}

/* Bundle row controls. A chip the bundle fixed stays visible but inert, and
   the cycles it ruled out are shown greyed rather than removed - the customer
   should see that the bundle made the choice, not that it never existed. */
.bundle-chip {
    cursor: pointer;
}
.bundle-chip.is-selected {
    border-color: var(--whmp-primary, #1a4d80);
    color: var(--whmp-primary, #1a4d80);
    background: var(--whmp-primary-faded, #f5f7f9);
}
.bundle-chip.is-fixed {
    cursor: default;
}
.bundle-chip.is-disabled {
    opacity: .45;
    cursor: not-allowed;
}
.bundle-opt.is-locked .bundle-opt-name::after {
    content: "\f023";                 /* fa-lock */
    font-family: "whmp_oso FA6 Free";
    font-weight: 900;
    font-size: 10px;
    margin-left: 6px;
    opacity: .5;
}
.bundle-opt [disabled] {
    background: var(--whmp-bg-alt, #f5f7f9);
    cursor: not-allowed;
}

/* Search box inside a long dropdown. Sticky so it stays reachable while the
   list scrolls, and it is a list item so the <ul> stays valid markup. */
#one-step-cart .oso-cselect-search-wrap {
  position: sticky;
  top: -6px;
  z-index: 1;
  margin: -6px -6px 4px;
  padding: 6px;
  background: var(--whmp-bg-base);
  list-style: none;
}
#one-step-cart .oso-cselect-search {
  width: 100%;
  padding: var(--spacing-sm) var(--spacing-md);
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-sm);
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
  font-size: var(--font-md);
}
#one-step-cart .oso-cselect-search:focus {
  outline: none;
  border-color: var(--whmp-primary, #1a4d80);
}

/* A row says what went wrong inside the row, not in a page-level alert - the
   customer is looking at the field they just used. */
.bundle-row-msg {
  margin-top: 8px;
  padding: 6px 10px;
  border-radius: var(--border-radius-sm, 4px);
  font-size: 12px;
  background: var(--whmp-primary-faded, #f5f7f9);
  color: var(--whmp-text-primary);
}
.bundle-row-msg.is-error {
  background: var(--whmp-danger-bg, #fdeaea);
  color: var(--whmp-danger, #b20000);
}
.bundle-row.is-resolved .bundle-row-status {
  color: var(--whmp-success, #008000);
}

/* ---------------------------------------------------------------------------
   Domain addons on a bundle row
   ---------------------------------------------------------------------------
   The single-product path shows these as cards in a grid, which does not fit
   inside an expanded bundle row - the row is already a narrow column of
   controls. Rendered here as compact labelled rows instead: same three addons,
   same prices, same behaviour, in the space actually available.
   --------------------------------------------------------------------------- */
.bundle-domain-addons {
  margin-top: var(--spacing-sm);
  padding-top: var(--spacing-sm);
  border-top: 1px solid var(--whmp-border-light);
}

.bundle-addon-title {
  font-size: var(--font-md);
  font-weight: var(--font-weight-semibold, 600);
  color: var(--whmp-text-primary);
  margin-bottom: var(--spacing-xs);
}

.bundle-addon-row {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  padding: 6px 0;
  cursor: pointer;
  font-size: var(--font-md);
  color: var(--whmp-text-primary);
  margin: 0;
}

.bundle-addon-row .bundle-addon-name {
  flex: 1 1 auto;
}

.bundle-addon-row .bundle-addon-price {
  white-space: nowrap;
  color: var(--whmp-text-secondary);
}

.bundle-addon-row input.bundle-addon-check {
  flex: 0 0 auto;
  margin: 0;
}

/* A required field that is hidden can still block the submit, and the customer
   cannot fix what they cannot see - so the one that blocked it is revealed. */
#one-step-cart .whmp-force-visible,
.whmp-force-visible {
  display: block !important;
  visibility: visible !important;
}

/* A bundle puts several items in the summary at once. The sticky height cap
   that suits a single product hid all but the first of them - the customer saw
   one $90.00 line above a $561.00 total, with the rest of the order scrolled
   out of sight. A bundle's item list is short and fixed, so it is shown whole. */
/* This used to switch the summary to `max-height: none; overflow-y: visible`
   whenever a bundle was in the cart - added back when the cap was the guessed
   `calc(100vh - 520px)`, to stop a long bundle list being clipped with no way
   to reach the rest of it. Turning the scroll OFF was the wrong half of the
   trade: it cured the clipping by letting the panel run off the bottom of the
   screen instead, and a bundle summary is the longest one there is.
   The cap is measured now rather than guessed, so the list simply scrolls, and
   this override is confined to the mobile layout where the page itself
   scrolls. */
@media (max-width: 768px) {
  body.whmp-bundle-active #summary-container {
    max-height: none;
    overflow-y: visible;
  }
}

/* Single mode's subdomain offer. It lives INSIDE the search result card rather
   than in a control of its own: single mode exists to be one search box, so a
   fourth input would defeat the layout the admin chose. One button per suffix
   keeps the choice explicit without a dropdown. */
.single-subdomain-offer {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  margin-top: var(--spacing-lg);
}

.single-subdomain-offer button {
  flex: 1 1 auto;
  min-width: 200px;
  padding: var(--spacing-md) var(--spacing-lg);
  font-size: var(--font-base);
  font-weight: var(--font-weight-medium);
}

/* ===========================================================================
   CANONICAL RADIO - ONE TREATMENT FOR THE WHOLE FORM
   ===========================================================================
   The form carried three at once, measured on one page:

     config options   drawn .radio-styled span, 20px, 2px ring, primary fill
     domain choice    native input, 16px, accent-color
     payment methods  native input, 22.39px, accent-color

   The configuration-field design is the one being standardised on. Rather than
   add a drawn span to every block's markup, the NATIVE input is shaped into
   that same design with appearance:none, so every radio on the page - payment,
   domain, credit, saved cards, bundle rows, config options - is one control
   with one look, and no template needs a new element.

   The inner dot is a radial-gradient rather than ::after: pseudo-elements on
   <input> are not reliably rendered, and a gradient gives the identical result
   at any size.

   `!important` is used throughout this block, deliberately. Several per-block
   rules are more specific than a plain `#one-step-cart input` selector - the
   payment list reaches its inputs through
   `div#paymentGatewaysContainer label.radio-inline input[type="radio"]` - so
   without it the size applied and the ring and fill silently did not, leaving
   payment as a fourth variant rather than the same control. Matching that
   specificity for every block would mean enumerating them all here and
   re-enumerating on every future one.
   --------------------------------------------------------------------------- */
#one-step-cart input[type="radio"],
#billingDetailsModal input[type="radio"] {
  appearance: none;
  /* Several blocks hid the native control because a drawn span stood in for
     it - .panel-configoption uses position:absolute;opacity:0, the domain block
     used the same trick. With those spans now hidden, anything left hiding the
     input leaves the row with NO radio at all, which is exactly what happened
     to the Yes/No config options. Visibility is forced here so the canonical
     control is always the thing on screen. */
  opacity: 1 !important;
  visibility: visible !important;
  position: relative !important;
  clip: auto !important;
  clip-path: none !important;
  -webkit-appearance: none;
  -moz-appearance: none;
  width: 18px !important;
  height: 18px !important;
  margin: 0;
  flex-shrink: 0;
  border: 2px solid var(--whmp-primary) !important;
  border-radius: var(--border-radius-circle) !important;
  background: transparent !important;
  cursor: pointer;
  position: relative;
  transition: var(--transition-base);
  /* accent-color no longer paints anything once appearance is none, but the
     per-block rules still set it; neutralised so nothing half-applies. */
  accent-color: auto !important;
  /* Pinned against container pressure. The payment list nests its radios in
     a 20px wrapper, and a blanket max-width:100% from the containment block
     capped the 18px control to that wrapper's 16px content box while the
     height stayed 18px - an oval. A fixed-size control is never sized by its
     parent, so these three close that door for every block at once. */
  max-width: none !important;
  min-width: 18px !important;
  flex: 0 0 18px !important;
}

#one-step-cart input[type="radio"]:checked,
#billingDetailsModal input[type="radio"]:checked {
  border-color: var(--whmp-primary) !important;
  /* Primary fill with a centred dot in the surface colour - the configuration
     field's checked state, reproduced exactly. */
  background: radial-gradient(
    circle,
    var(--whmp-bg-base) 0 3.5px,
    var(--whmp-primary) 3.5px 100%
  ) !important;
}

#one-step-cart input[type="radio"]:focus-visible,
#billingDetailsModal input[type="radio"]:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

#one-step-cart input[type="radio"]:disabled,
#billingDetailsModal input[type="radio"]:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* With the input itself drawing the circle, the hand-drawn spans would be a
   second one beside it. */
#one-step-cart .radio-styled,
#one-step-cart .radio-custom {
  display: none !important;
}

/* ===========================================================================
   ORDER SUMMARY - CONTAINING THE PAYMENT SECTION
   ===========================================================================
   Making the sidebar the vertical scroller had a consequence I did not cover:
   setting `overflow-y: auto` makes the computed `overflow-x` a scroll value
   too, and here it resolves to `hidden`. So anything inside the panel that
   keeps its natural width is not scrolled to - it is CUT OFF at the right edge.
   The gateway's card fields, its "pay securely" banner and its Autofill button
   are all third-party markup sized for a full-width form, so that is exactly
   what happened to them.

   The answer is to constrain the children rather than to re-enable horizontal
   scrolling: a checkout summary should never scroll sideways.
   --------------------------------------------------------------------------- */
.order-summary-sidebar,
.order-summary-sidebar * {
  /* Padding and borders must count INSIDE the width, or a field set to 100%
     plus its own padding is wider than its container by definition. */
  box-sizing: border-box;
}

.order-summary-sidebar #orderSummaryPaymentMethods,
.order-summary-sidebar #creditCardInputFields,
.order-summary-sidebar .cc-input-container {
  max-width: 100%;
  overflow-x: clip;
}

/* Every control the gateway renders, whatever it sets on itself. `min-width: 0`
   matters as much as max-width: a flex or grid child refuses to shrink below
   its intrinsic width without it, which is how a card-number input keeps a
   width the panel cannot give it. */
.order-summary-sidebar #creditCardInputFields input:not([type="radio"]):not([type="checkbox"]),
.order-summary-sidebar #creditCardInputFields select,
.order-summary-sidebar #creditCardInputFields textarea,
.order-summary-sidebar #creditCardInputFields button,
.order-summary-sidebar #creditCardInputFields .form-control,
.order-summary-sidebar #orderSummaryPaymentMethods input:not([type="radio"]):not([type="checkbox"]),
.order-summary-sidebar #orderSummaryPaymentMethods select,
.order-summary-sidebar #orderSummaryPaymentMethods button {
  max-width: 100%;
  min-width: 0;
}

/* The gateway's own containers: rows it lays out side by side have to be
   allowed to wrap inside a 300px panel instead of holding their width. */
.order-summary-sidebar #creditCardInputFields .row,
.order-summary-sidebar #creditCardInputFields [class*="col-"] {
  max-width: 100%;
  min-width: 0;
  flex-wrap: wrap;
}

/* GRID OFFSETS - the other half of the same problem.
   ---------------------------------------------------------------------------
   Constraining WIDTH alone was not enough, and this is where the Stripe fields
   were still being cut off. The gateway centres its card inputs with Bootstrap
   offsets:

       <div class="col-md-4 col-md-offset-4 offset-md-4">

   An offset is a percentage MARGIN, not a width. The rule above had already
   taken the column to the full width of its parent, so the browser was asked
   for 33.33% margin + 100% width inside one box:

       margin-left 105.98px + width 317.98px = 423.96px  in a 350px content box
                                                          -> 74px past the edge

   which is exactly what was measured on the Card Number field, the Stripe
   Elements frame and the "pay securely with Link" banner. Centring inside a
   12-column grid means nothing in a single-column 350px panel, so the offsets
   are dropped rather than fought. Both spellings are covered: Bootstrap 3 used
   `col-md-offset-4`, Bootstrap 4+ uses `offset-md-4`, and this gateway emits
   both on the same element. */
.order-summary-sidebar [class*="col-"][class*="offset"],
.order-summary-sidebar [class*="offset-"] {
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* THE BACKSTOP.
   ---------------------------------------------------------------------------
   Naming the controls one by one - input, select, textarea, button - keeps
   missing things, because the gateway sizes whatever it likes. At 375px the
   three field labels were still hanging 32px out of the panel, from a <style>
   block the Stripe module injects into the page itself:

       .stripe-cards-inputs...offset-md-2 .row label { width: 320px }

   320px of label in a 271px column. `label` was simply not on the list.

   So the list stops being a list. Nothing inside the payment block may be wider
   than the box it sits in, whatever sets its width and wherever that rule came
   from.

   THE EXCLUSION IS NOT OPTIONAL. `max-width: 100%` on a radio resolves against
   its PARENT's content box, and a radio's parent here is 20px wide - which
   squeezed the 18px control to 16px and is precisely what made the payment
   radios oval. Radios and checkboxes carry their own fixed geometry and are
   held out of this by name. Anything added here later must keep that carve-out.
   Measured after this rule: all 22 radios 18x18 at 50%. */
.order-summary-sidebar #creditCardInputFields *:not([type="radio"]):not([type="checkbox"]),
.order-summary-sidebar #orderSummaryPaymentMethods *:not([type="radio"]):not([type="checkbox"]) {
  max-width: 100%;
}

/* THIRD-PARTY IFRAMES - contained, not fought.
   Stripe Elements mount as iframes whose width is set by their own script. We
   do not try to restyle what is inside them (we cannot, cross-origin); the
   frame is simply not allowed to be wider than the panel. */
.order-summary-sidebar iframe {
  max-width: 100% !important;
  width: 100% !important;
  border: 0;
}

/* The "pay securely with link" banner and any other absolutely-sized promo the
   gateway injects. */
.order-summary-sidebar #creditCardInputFields img,
.order-summary-sidebar #orderSummaryPaymentMethods img {
  max-width: 100%;
  height: auto;
}

/* ---------------------------------------------------------------------------
   iCheck - keep the real input HIDDEN
   ---------------------------------------------------------------------------
   This block previously did the opposite: it stripped the wrapper back to
   `width/height: auto; background: none` and forced the input visible with
   `position: static; opacity: 1`. Both halves were wrong.

   - Un-hiding the input stacked TWO controls: iCheck's div ring and the
     canonical input ring drawn on top of it.
   - Letting the wrapper size itself made it shrink-wrap the 18px input plus its
     own 2px border to 22px tall, while the payment-panel width backstop capped
     it at its 20px parent. 20 x 22 - the oval on screen.

   The wrapper is styled as the control (see the iCHECK block above); the input
   goes back to being the invisible hit target iCheck expects, filling the
   wrapper so clicks still land. Specificity (0,2,1) beats the canonical
   `#one-step-cart input[type="radio"]` (0,1,1), so the canonical rule no longer
   reaches these nine controls.

   Left initialised on purpose - core binds `ifChecked` on `input[name=ccinfo]`
   and `.existing-card` (hide_cc_fields, the Stripe submit handler and the
   saved-card switch). Those listen for iCheck's event, not `change`, so
   destroying iCheck would silently break card entry. See HANDOVER_QA.md 9ab.
   --------------------------------------------------------------------------- */
#one-step-cart .iradio_square-blue > input[type="radio"],
#one-step-cart .icheckbox_square-blue > input[type="checkbox"],
#billingDetailsModal .iradio_square-blue > input[type="radio"],
#billingDetailsModal .icheckbox_square-blue > input[type="checkbox"] {
  position: absolute !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100% !important;
  min-width: 0 !important;
  max-width: none !important;
  flex: none !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  background: none !important;
  opacity: 0 !important;
  cursor: pointer;
}

/* ---------------------------------------------------------------------------
   TOTAL DUE TODAY
   ---------------------------------------------------------------------------
   #totalDueDiv is a flex row of a heading and a price. The heading had no
   flex sizing, so in a narrow panel it collapsed to its longest word - 74px
   wide and 86px tall, "Total Due Today" stacked onto three lines - while the
   price block pushed against the right edge. A payment-gateway-fees module also
   injects its own summary table INTO #totalDueToday, which is what makes the
   figures beside it look cramped.
   --------------------------------------------------------------------------- */
/* Stacked: "Total Due Today" where it always was, at the top left, and the amount beneath it
   in a larger type - the figure is what the customer reads, so it is the bigger of the two. */
.order-summary-sidebar #totalDueDiv {
  flex-direction: column;
  align-items: stretch;
  justify-content: flex-start;
  gap: 2px;
  flex-wrap: nowrap;
}

.order-summary-sidebar #totalDueDiv .price-total {
  flex: 0 0 auto;
  min-width: 0;
  margin: 0;
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  line-height: 1.3;
  color: var(--whmp-text-secondary);
}

/* display: block - a client area template's own .price-amount (Lagom's is a centred flex
   row) would otherwise centre the figure under a left-aligned label. */
.order-summary-sidebar #totalDueDiv .price-amount {
  display: block;
  flex: 0 0 auto;
  min-width: 0;
  max-width: 100%;
  margin: 0;
  padding: 0;
  text-align: left;
}

.order-summary-sidebar #totalDueDiv #totalDueToday {
  display: block;
  font-size: var(--font-28);
  font-weight: var(--font-weight-bold);
  line-height: 1.2;
  color: var(--whmp-text-primary);
  overflow-wrap: anywhere;
}

/* A payment-gateway-fees module writes its own breakdown into #totalDueToday: that keeps
   body-sized text, and only its total row takes the large figure. */
.order-summary-sidebar #totalDueDiv #totalDueToday .whmp_pgf-gateway-text {
  display: block;
  font-size: var(--font-md);
  font-weight: var(--font-weight-normal, 400);
  line-height: 1.5;
}

/* The injected gateway-fee table gets room to lay out instead of being squeezed
   into the price span's natural width. */
/* `white-space: nowrap` here was my own mistake and made this line worse: the
   injected fee row then held a width the 300px panel could not give it and was
   clipped at BOTH edges ("otal $0.00 Gateway Charges $0.0"). The row wraps
   instead, and the label is allowed to shrink while the figure keeps its
   shape. */
.order-summary-sidebar #totalDueToday .whmp_pgf-gateway-text {
  width: 100%;
  max-width: 100%;
}

.order-summary-sidebar #totalDueToday .whmp_pgf-summary-item {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--spacing-sm);
  width: 100%;
  max-width: 100%;
  flex-wrap: wrap;
}

.order-summary-sidebar #totalDueToday .product__summary__name {
  flex: 1 1 auto;
  min-width: 0;
  overflow-wrap: break-word;
}

.order-summary-sidebar #totalDueToday .product__summary__price {
  flex: 0 0 auto;
  white-space: nowrap;
}

/* ---------------------------------------------------------------------------
   TOGGLES - one canonical pill
   ---------------------------------------------------------------------------
   "Join our mailing list" used the theme's `toggle-switch-success` widget: a
   square green control with the word "Yes" printed inside it. The module's own
   toggle - the one used throughout the admin - is a pill with a round knob, and
   that is the one being standardised on. Same geometry as
   `.whmp_oso-switch` / `.whmp_oso-slider` in the addon's style.css (44x26 track,
   20px knob, 3px inset, 0.3s), with the checked fill taken from the mapping
   instead of green, and no text inside the control.
   --------------------------------------------------------------------------- */
#one-step-cart input.toggle-switch-success,
#one-step-cart input[data-toggle="toggle"],
#billingDetailsModal input.toggle-switch-success {
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  position: relative;
  width: 44px !important;
  height: 26px !important;
  flex-shrink: 0;
  border: 0 !important;
  border-radius: 24px !important;
  background: var(--whmp-border-mid) !important;
  cursor: pointer;
  transition: background 0.3s;
  vertical-align: middle;
  /* No on/off text: data-on-text / data-off-text are not rendered by a bare
     input, and the pill does not carry a label inside it. */
  font-size: 0 !important;
  color: transparent !important;
}

#one-step-cart input.toggle-switch-success::after,
#one-step-cart input[data-toggle="toggle"]::after,
#billingDetailsModal input.toggle-switch-success::after {
  content: "";
  position: absolute;
  left: 3px;
  bottom: 3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--whmp-bg-base);
  transition: transform 0.3s;
}

#one-step-cart input.toggle-switch-success:checked,
#one-step-cart input[data-toggle="toggle"]:checked,
#billingDetailsModal input.toggle-switch-success:checked {
  background: var(--whmp-primary-fill, var(--whmp-primary)) !important;
}

#one-step-cart input.toggle-switch-success:checked::after,
#one-step-cart input[data-toggle="toggle"]:checked::after,
#billingDetailsModal input.toggle-switch-success:checked::after {
  transform: translateX(18px);
}

/* If the theme's JS has already replaced the input with its own markup, that
   replacement is hidden and the input restored, so there is exactly one
   control. */
#one-step-cart .toggle.btn,
#billingDetailsModal .toggle.btn {
  display: none !important;
}

/* ---------------------------------------------------------------------------
   bootstrap-switch - the widget behind the green "Yes"
   ---------------------------------------------------------------------------
   The mailing-list checkbox is enhanced by bootstrap-switch, which wraps the
   input in its own chrome: a track (.bootstrap-switch), a sliding container,
   and two labelled handles that print "Yes" and "No" INSIDE the control. That
   is the green square in the screenshots - the canonical pill was already being
   applied to the input underneath it, but the widget was drawn on top.

   Hiding `.toggle.btn` was aimed at the wrong plugin. The chrome is stripped
   here so the canonical pill - which the input itself already renders - is the
   only control on screen. The plugin keeps working: it toggles the same input,
   and the input is still what the form submits.
   --------------------------------------------------------------------------- */
#one-step-cart .bootstrap-switch,
#billingDetailsModal .bootstrap-switch {
  background: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  width: auto !important;
  height: auto !important;
  overflow: visible !important;
  box-shadow: none !important;
  display: inline-block !important;
  vertical-align: middle;
}

#one-step-cart .bootstrap-switch-container,
#billingDetailsModal .bootstrap-switch-container {
  width: auto !important;
  margin-left: 0 !important;
  transform: none !important;
  display: inline-block !important;
}

/* The two text handles and the spacer between them are the widget's entire
   visual output; without them it draws nothing. */
#one-step-cart .bootstrap-switch-handle-on,
#one-step-cart .bootstrap-switch-handle-off,
#one-step-cart .bootstrap-switch-label,
#billingDetailsModal .bootstrap-switch-handle-on,
#billingDetailsModal .bootstrap-switch-handle-off,
#billingDetailsModal .bootstrap-switch-label {
  display: none !important;
}

/* bootstrap-switch parks the real input off-screen the same way iCheck does. */
#one-step-cart .bootstrap-switch input[type="checkbox"],
#billingDetailsModal .bootstrap-switch input[type="checkbox"] {
  position: static !important;
  opacity: 1 !important;
  display: inline-block !important;
  margin: 0 !important;
  visibility: visible !important;
}

/* ===========================================================================
   CANONICAL SCROLLBAR
   ===========================================================================
   One treatment for every scroll container in the form.

   There were five before this, and no two agreed: 4px / 6px / 8px wide, tracks
   of --whmp-border-light, --whmp-bg-base and a hardcoded
   rgba(255,255,255,0.05) (invisible on a light theme), thumbs of
   --whmp-primary, --whmp-primary-hover, --whmp-border-mid and --whmp-bg-alt -
   that last one a near-invisible grey thumb on a near-white track.

   And the one element that actually scrolls - .order-summary-sidebar, which
   became the scroller when the panel was made the scroll area - had no
   treatment at all, so it drew the browser default. That is the scrollbar in
   the report.

   Every colour is a mapping token, so the scrollbar follows the theme and
   inverts correctly in dark mode instead of staying a light-mode grey.

   BOTH ENGINES:
   - `::-webkit-scrollbar-*` covers Chrome, Edge and Safari.
   - `scrollbar-width` / `scrollbar-color` cover Firefox, which implements no
     pseudo-elements for this. `thin` is the only sane keyword - `auto` is the
     platform default and there is no px value in the standard property.
   Both are declared on every container: a browser applies whichever it knows
   and ignores the other.

   ADDING A CONTAINER: give it overflow and add its selector here.
   --------------------------------------------------------------------------- */
/* FIREFOX ONLY - and this guard is not optional.
   ---------------------------------------------------------------------------
   Chrome implements BOTH the standard `scrollbar-width`/`scrollbar-color` and
   the legacy `::-webkit-scrollbar-*` pseudo-elements, and when the standard
   properties are set they WIN and the pseudo-elements are ignored for sizing.
   Measured on the summary panel:

       scrollbar-width: thin   -> 10px gutter   (Chrome's own "thin" metric)
       scrollbar-width: auto   -> 15px gutter
       both properties cleared ->  6px gutter   (our ::-webkit-scrollbar width)

   So declaring them unconditionally silently threw away the 6px and left
   Chrome's 10px bar - which is the heavy scrollbar that was reported.

   `@supports not selector(::-webkit-scrollbar)` is false in Chrome (it DOES
   support that selector, verified: CSS.supports(...) === true), so Chrome skips
   this block entirely and keeps the 6px pseudo-element styling. Firefox does
   not support the selector, so the test is true and it gets the standard
   properties - the only scrollbar styling Firefox has.

   Do not lift these two declarations out of the @supports block. */
@supports not selector(::-webkit-scrollbar) {
#one-step-cart .oso-summary-scroll,
.order-summary-sidebar,
.whmp-panel.whmp-panel-summary,
#summary-container,
.whmp_oso-summary-content,
.product-type-tabs .whmp-navi-tabs,
.domain-tabs ul.nav.whmp-navi-tabs,
#one-step-cart .oso-cselect-list,
#one-step-cart .tab-pane,
#one-step-cart textarea,
#one-step-cart .tlds-list,
.tlds-list,
#one-step-cart .country-list,
#billingDetailsModal .country-list,
#one-step-cart .whmp_pgf-table-container-checkout,
#billingDetailsModal .whmp_oso-modal-popup-body,
#billingDetailsModal textarea,
#modalGeneratePassword .modal-body {
  scrollbar-width: thin;
  /* Transparent track, same as webkit below. Firefox's `thin` is its own
     narrow metric (about 8-10px of gutter) and cannot be given a px value -
     there is no standard property for that - so the two engines are close
     rather than identical. */
  scrollbar-color: var(--whmp-primary) transparent;
}
}

#one-step-cart .oso-summary-scroll::-webkit-scrollbar,
.order-summary-sidebar::-webkit-scrollbar,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar,
#summary-container::-webkit-scrollbar,
.whmp_oso-summary-content::-webkit-scrollbar,
.product-type-tabs .whmp-navi-tabs::-webkit-scrollbar,
.domain-tabs ul.nav.whmp-navi-tabs::-webkit-scrollbar,
#one-step-cart .oso-cselect-list::-webkit-scrollbar,
#one-step-cart .tab-pane::-webkit-scrollbar,
#one-step-cart textarea::-webkit-scrollbar,
#one-step-cart .tlds-list::-webkit-scrollbar,
.tlds-list::-webkit-scrollbar,
#one-step-cart .country-list::-webkit-scrollbar,
#billingDetailsModal .country-list::-webkit-scrollbar,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar,
#billingDetailsModal textarea::-webkit-scrollbar,
#modalGeneratePassword .modal-body::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

#one-step-cart .oso-summary-scroll::-webkit-scrollbar-track,
.order-summary-sidebar::-webkit-scrollbar-track,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar-track,
#summary-container::-webkit-scrollbar-track,
.whmp_oso-summary-content::-webkit-scrollbar-track,
.product-type-tabs .whmp-navi-tabs::-webkit-scrollbar-track,
.domain-tabs ul.nav.whmp-navi-tabs::-webkit-scrollbar-track,
#one-step-cart .oso-cselect-list::-webkit-scrollbar-track,
#one-step-cart .tab-pane::-webkit-scrollbar-track,
#one-step-cart textarea::-webkit-scrollbar-track,
#one-step-cart .tlds-list::-webkit-scrollbar-track,
.tlds-list::-webkit-scrollbar-track,
#one-step-cart .country-list::-webkit-scrollbar-track,
#billingDetailsModal .country-list::-webkit-scrollbar-track,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar-track,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar-track,
#billingDetailsModal textarea::-webkit-scrollbar-track,
#modalGeneratePassword .modal-body::-webkit-scrollbar-track {
  /* Transparent, not a faint neutral. A visible track draws a full-height line
     down the panel whether or not the thumb is there, and at a 98% thumb ratio
     (measured at a 1000px viewport) that reads as a solid bar. The thumb alone
     carries the affordance. */
  background: transparent;
}

#one-step-cart .oso-summary-scroll::-webkit-scrollbar-thumb,
.order-summary-sidebar::-webkit-scrollbar-thumb,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar-thumb,
#summary-container::-webkit-scrollbar-thumb,
.whmp_oso-summary-content::-webkit-scrollbar-thumb,
.product-type-tabs .whmp-navi-tabs::-webkit-scrollbar-thumb,
.domain-tabs ul.nav.whmp-navi-tabs::-webkit-scrollbar-thumb,
#one-step-cart .oso-cselect-list::-webkit-scrollbar-thumb,
#one-step-cart .tab-pane::-webkit-scrollbar-thumb,
#one-step-cart textarea::-webkit-scrollbar-thumb,
#one-step-cart .tlds-list::-webkit-scrollbar-thumb,
.tlds-list::-webkit-scrollbar-thumb,
#one-step-cart .country-list::-webkit-scrollbar-thumb,
#billingDetailsModal .country-list::-webkit-scrollbar-thumb,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar-thumb,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar-thumb,
#billingDetailsModal textarea::-webkit-scrollbar-thumb,
#modalGeneratePassword .modal-body::-webkit-scrollbar-thumb {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  /* A pill, not a rounded rectangle: 999px always resolves to a full
     semicircle at either end whatever the width becomes later. */
  border-radius: 999px;
  /* NO transparent-border inset here. That trick pads the thumb inside its
     track, but it costs 2px per side - on a 6px bar it would leave a 2px
     sliver. The track is transparent instead, which achieves the same quiet
     result without eating the thumb. */
}

#one-step-cart .oso-summary-scroll::-webkit-scrollbar-thumb:hover,
.order-summary-sidebar::-webkit-scrollbar-thumb:hover,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar-thumb:hover,
#summary-container::-webkit-scrollbar-thumb:hover,
.whmp_oso-summary-content::-webkit-scrollbar-thumb:hover,
.product-type-tabs .whmp-navi-tabs::-webkit-scrollbar-thumb:hover,
.domain-tabs ul.nav.whmp-navi-tabs::-webkit-scrollbar-thumb:hover,
#one-step-cart .oso-cselect-list::-webkit-scrollbar-thumb:hover,
#one-step-cart .tab-pane::-webkit-scrollbar-thumb:hover,
#one-step-cart textarea::-webkit-scrollbar-thumb:hover,
#one-step-cart .tlds-list::-webkit-scrollbar-thumb:hover,
.tlds-list::-webkit-scrollbar-thumb:hover,
#one-step-cart .country-list::-webkit-scrollbar-thumb:hover,
#billingDetailsModal .country-list::-webkit-scrollbar-thumb:hover,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar-thumb:hover,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar-thumb:hover,
#billingDetailsModal textarea::-webkit-scrollbar-thumb:hover,
#modalGeneratePassword .modal-body::-webkit-scrollbar-thumb:hover {
  background: var(--whmp-primary-hover-fill, var(--whmp-primary-hover));
}

/* Where both axes can scroll, the corner between them would otherwise paint
   the browser default grey. */
#one-step-cart .oso-summary-scroll::-webkit-scrollbar-corner,
.order-summary-sidebar::-webkit-scrollbar-corner,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar-corner,
#summary-container::-webkit-scrollbar-corner,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar-corner,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar-corner {
  background: transparent;
}

/* THE ARROW BUTTONS.
   ---------------------------------------------------------------------------
   Styling `::-webkit-scrollbar` does not remove the stepper arrows on Windows -
   they keep rendering, and they widen the gutter with them. Measured on the
   summary panel before this rule: `::-webkit-scrollbar` computed `width: 8px`
   while the real gutter (offsetWidth - clientWidth - borders) was **10px**, and
   `::-webkit-scrollbar-button` computed `display: inline`.

   Two arrowheads at the ends of a checkout summary are pure chrome. Hidden, and
   the gutter collapses to the declared width. */
#one-step-cart .oso-summary-scroll::-webkit-scrollbar-button,
.order-summary-sidebar::-webkit-scrollbar-button,
.whmp-panel.whmp-panel-summary::-webkit-scrollbar-button,
#summary-container::-webkit-scrollbar-button,
.whmp_oso-summary-content::-webkit-scrollbar-button,
.product-type-tabs .whmp-navi-tabs::-webkit-scrollbar-button,
.domain-tabs ul.nav.whmp-navi-tabs::-webkit-scrollbar-button,
#one-step-cart .oso-cselect-list::-webkit-scrollbar-button,
#one-step-cart .tab-pane::-webkit-scrollbar-button,
#one-step-cart textarea::-webkit-scrollbar-button,
#one-step-cart .tlds-list::-webkit-scrollbar-button,
.tlds-list::-webkit-scrollbar-button,
#one-step-cart .country-list::-webkit-scrollbar-button,
#billingDetailsModal .country-list::-webkit-scrollbar-button,
#one-step-cart .whmp_pgf-table-container-checkout::-webkit-scrollbar-button,
#billingDetailsModal .whmp_oso-modal-popup-body::-webkit-scrollbar-button,
#billingDetailsModal textarea::-webkit-scrollbar-button,
#modalGeneratePassword .modal-body::-webkit-scrollbar-button {
  display: none;
  width: 0;
  height: 0;
}

/* SUBDOMAIN / DOMAIN RESULT VALIDATION ERRORS
   ---------------------------------------------------------------------------
   .whmp-alert-danger is only styled inside #register-domain-result and
   #transfer-domain-result. Everywhere else it rendered with NO styling at all -
   transparent background, inherited grey text - so a real validation failure
   read as a plain line of prose. Measured on the subdomain-taken message:
   background rgba(0,0,0,0), colour rgb(75,85,99).

   Same tokens as .bundle-row-msg.is-error on purpose, so the bundle row and the
   single-product field say it the same way. Scoped to our container - the
   lesson from .primary-bg-color and .container is that a bare class name here
   reaches the theme's markup too. */
#one-step-cart #subdomain-domain-result .whmp-alert.whmp-alert-danger,
#one-step-cart #domain-result-vertical .whmp-alert.whmp-alert-danger,
#one-step-cart #single-domain-result .whmp-alert.whmp-alert-danger,
#one-step-cart #own-domain-result .whmp-alert.whmp-alert-danger {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-sm);
  padding: var(--spacing-sm) var(--spacing-md);
  border-radius: var(--border-radius-sm);
  background: var(--whmp-danger-bg);
  color: var(--whmp-danger);
  font-size: var(--font-sm);
  border: 1px solid var(--whmp-danger);
}

#one-step-cart #subdomain-domain-result .whmp-alert.whmp-alert-danger i.fa,
#one-step-cart #domain-result-vertical .whmp-alert.whmp-alert-danger i.fa,
#one-step-cart #single-domain-result .whmp-alert.whmp-alert-danger i.fa,
#one-step-cart #own-domain-result .whmp-alert.whmp-alert-danger i.fa {
  color: var(--whmp-danger);
  flex-shrink: 0;
}

/* 1.1.4 - several reasons from other modules' validation hooks, listed in the same alert. */
#one-step-cart .whmp-alert .oso-validation-list {
  margin: 0;
  padding-left: 1.1em;
  list-style: disc;
}

#one-step-cart .whmp-alert .oso-validation-list li {
  color: inherit;
  margin: 0;
}

/* ====================================================
   1.1.1 - ORDER SUMMARY LINES
   Name and price on one row; options and addons below; then one controls row in three
   fixed columns (quantity | billing cycle | remove), so the controls line up from item to
   item whatever the length of a name, at every width.
   ==================================================== */
#one-step-cart .oso-sr-only {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

#one-step-cart .summary-line {
  position: relative;
  transition: opacity 0.15s ease;
}

#one-step-cart .summary-line.is-updating {
  opacity: 0.55;
  pointer-events: none;
}

#one-step-cart .summary-line .list-item {
  align-items: flex-start;
  white-space: normal;
  text-align: left;
}

#one-step-cart .summary-line .list-item .item-name {
  flex: 1 1 auto;
  min-width: 0;
  color: var(--whmp-text-primary);
  line-height: 1.4;
}

#one-step-cart .summary-line .list-item-main .product-name {
  font-weight: var(--font-weight-semibold);
}

#one-step-cart .summary-line .product-group {
  display: block;
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
}

#one-step-cart .summary-line .item-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 2px 8px;
  margin-top: 2px;
  font-size: var(--font-xs);
  font-weight: var(--font-weight-normal);
  color: var(--whmp-text-light);
}

#one-step-cart .summary-line .list-item .item-value {
  flex: 0 0 auto;
  text-align: right;
  white-space: nowrap;
}

#one-step-cart .summary-line .list-item-sub {
  padding: 2px 0;
  font-size: var(--font-xs);
}

#one-step-cart .summary-line .list-item-sub .item-name {
  color: var(--whmp-text-secondary);
  padding-left: 10px;
}

#one-step-cart .summary-line .list-item-sub .item-name strong {
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
}

/* Prices: the catalogue price struck through, then the price charged. */
#one-step-cart .oso-price {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.25;
}

#one-step-cart .oso-price-was {
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
  text-decoration: line-through;
}

#one-step-cart .oso-price-now {
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

#one-step-cart .list-item-sub .oso-price-now {
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-secondary);
}

#one-step-cart .oso-price-discounted,
#one-step-cart .list-item-sub .oso-price-discounted {
  color: var(--whmp-primary);
}

/* The controls row. */
/* The three columns have fixed widths - quantity, cycle, remove - so every line's controls sit
   in the same place whatever the item's name, and a line without a quantity or a cycle keeps
   the gap rather than sliding the others across. Addon lines use the same left edge. */
#one-step-cart .summary-line-controls {
  display: grid;
  grid-template-columns: 92px minmax(0, 1fr) 28px;
  align-items: center;
  column-gap: 8px;
  margin: 6px 0 10px;
}

#one-step-cart .summary-line-addon .summary-line-controls {
  margin: 2px 0 6px;
}

#one-step-cart .oso-ctl {
  display: flex;
  align-items: center;
  min-width: 0;
}

#one-step-cart .oso-ctl-cycle {
  justify-content: flex-end;
}

#one-step-cart .oso-ctl-remove {
  justify-content: flex-end;
  min-width: 28px;
}

#one-step-cart .oso-ctl:empty {
  min-height: 0;
}

#one-step-cart .oso-qty {
  display: inline-flex;
  align-items: stretch;
  height: 28px;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-base);
  background: var(--whmp-bg-base);
  overflow: hidden;
}

#one-step-cart .oso-qty-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  padding: 0;
  border: 0;
  background: transparent;
  color: var(--whmp-text-secondary);
  font-size: 10px;
  line-height: 1;
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}

#one-step-cart .oso-qty-btn:hover:not(:disabled) {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
}

#one-step-cart .oso-qty-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

#one-step-cart #summary-container input.oso-qty-input {
  width: 36px;
  height: 100% !important;
  min-height: 0 !important;
  padding: 0 2px !important;
  margin: 0 !important;
  box-shadow: none !important;
  border: 0;
  border-left: 1px solid var(--whmp-border-light);
  border-right: 1px solid var(--whmp-border-light);
  border-radius: 0;
  background: transparent;
  color: var(--whmp-text-primary);
  text-align: center;
  font-size: var(--font-sm);
  -moz-appearance: textfield;
  appearance: textfield;
}

#one-step-cart .oso-qty-input::-webkit-outer-spin-button,
#one-step-cart .oso-qty-input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

/* The native select, styled for the moment before the custom select replaces it (and for a
   page where the script does not run). */
#one-step-cart #summary-container select.oso-cycle-select:not(.oso-cselect-native) {
  width: 100%;
  max-width: 170px;
  height: 28px !important;
  min-height: 0 !important;
  padding: 0 26px 0 10px !important;
  margin: 0 !important;
  box-shadow: none;
  border: 1px solid var(--whmp-border-mid);
  border-radius: var(--border-radius-base);
  background-color: var(--whmp-bg-base);
  background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%);
  background-position: calc(100% - 13px) 50%, calc(100% - 9px) 50%;
  background-size: 4px 4px, 4px 4px;
  background-repeat: no-repeat;
  color: var(--whmp-text-primary);
  font-size: var(--font-sm);
  line-height: 26px;
  text-overflow: ellipsis;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  cursor: pointer;
}

#one-step-cart .oso-cycle-select option {
  background: var(--whmp-bg-base);
  color: var(--whmp-text-primary);
}

/* The cycle choice in the summary is the form's custom select, at the height of the quantity
   stepper beside it. Its list floats against the viewport (oso-custom-select.js), so it is
   never clipped by the summary's scroll area; it is sized to its options rather than to the
   narrow column. */
#one-step-cart .oso-ctl-cycle .oso-cselect {
  width: 100%;
  max-width: 170px;
}

#one-step-cart .oso-ctl-cycle .oso-cselect-trigger {
  min-height: 0;
  height: 28px;
  padding: 0 8px 0 10px;
  gap: 6px;
  border-radius: var(--border-radius-base);
  font-size: var(--font-sm);
  line-height: 26px;
}

#one-step-cart .oso-ctl-cycle .oso-cselect-caret {
  font-size: 10px;
}

#one-step-cart .oso-ctl-cycle .oso-cselect-list {
  padding: 4px;
}

#one-step-cart .oso-ctl-cycle .oso-cselect-option {
  padding: 6px 10px;
  font-size: var(--font-sm);
  white-space: nowrap;
}

#one-step-cart .oso-qty:focus-within,
#one-step-cart .oso-cycle-select:focus,
#one-step-cart .oso-summary-remove:focus-visible {
  outline: none;
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

#one-step-cart .oso-summary-remove {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: 1px solid transparent;
  border-radius: var(--border-radius-base);
  background: transparent;
  color: var(--whmp-text-light);
  cursor: pointer;
  transition: background-color 0.15s ease, color 0.15s ease;
}

#one-step-cart .oso-summary-remove:hover {
  color: var(--oso-btn-danger-bg, var(--whmp-danger));
  background: var(--oso-alert-danger-bg, var(--whmp-domain-taken-bg));
}

#one-step-cart .whmp-oso-summary-list .list-item-bundle {
  align-items: center;
}

#one-step-cart .whmp-oso-summary-list .list-item-bundle .item-name {
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

#one-step-cart .summary-line--bundle-item {
  padding-left: 10px;
  border-left: 2px solid var(--whmp-primary-light);
}

#one-step-cart #summary-container .oso-bundle-warnings {
  margin-bottom: var(--spacing-md);
  font-size: var(--font-sm);
  white-space: normal;
}

#one-step-cart .summary-bundle-pending,
#one-step-cart .summary-bundle-note {
  display: block;
  margin: 4px 0 8px;
  white-space: normal;
  text-align: left;
  font-size: var(--font-xs);
  color: var(--oso-alert-warning-text, var(--whmp-warning));
}

/* ====================================================
   1.1.1 - PRODUCT FEATURES: SHOW MORE / SHOW LESS
   ==================================================== */
#one-step-cart .product-card-features .oso-features-extra {
  margin: 0;
  padding: 0;
  list-style: none;
  overflow: hidden;
}

#one-step-cart .oso-features-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 6px 0 var(--spacing-sm);
  padding: 4px 12px;
  border: 1px solid var(--whmp-border-light);
  border-radius: 999px;
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  line-height: 1.6;
  text-decoration: none !important;
  cursor: pointer;
  transition: background-color 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}

#one-step-cart .oso-features-toggle:hover,
#one-step-cart .oso-features-toggle:focus-visible {
  border-color: var(--whmp-primary);
  text-decoration: none !important;
  outline: none;
}

#one-step-cart .oso-features-toggle i {
  font-size: 9px;
  transition: transform 0.22s ease;
}

#one-step-cart .oso-features-toggle.is-open i {
  transform: rotate(180deg);
}

/* ====================================================
   1.1.1 - SINGLE PLAN SUMMARY
   The plan the customer arrived with: picture, name, tagline, price and a Change Plan
   button in one head row; its features as a two-column checklist underneath.
   ==================================================== */
#one-step-cart .oso-plan-card {
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  background: var(--whmp-bg-base);
  overflow: hidden;
}

#one-step-cart .oso-plan-head {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--spacing-lg);
  padding: var(--spacing-lg);
}

#one-step-cart .oso-plan-media img,
#one-step-cart .oso-plan-media-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 72px;
  height: 72px;
  border-radius: var(--border-radius-md);
  object-fit: contain;
}

#one-step-cart .oso-plan-media-icon {
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  font-size: 28px;
}

#one-step-cart .oso-plan-title {
  min-width: 0;
}

#one-step-cart .oso-plan-group {
  display: block;
  margin-bottom: 2px;
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--whmp-primary);
}

#one-step-cart .oso-plan-name {
  margin: 0;
  font-size: var(--font-xxl);
  font-weight: var(--font-weight-semibold);
  font-style: normal;
  line-height: 1.25;
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-plan-tagline {
  margin: 4px 0 0;
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
}

#one-step-cart .oso-plan-price {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
  text-align: right;
}

#one-step-cart .oso-plan-amount {
  font-size: var(--font-5xl);
  font-weight: var(--font-weight-bold);
  line-height: 1.1;
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-plan-term {
  font-size: var(--font-sm);
  color: var(--whmp-text-light);
}

#one-step-cart .oso-plan-setup {
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
}

#one-step-cart .oso-plan-change {
  margin-top: var(--spacing-sm);
  padding: 6px 14px;
  border: 1px solid var(--whmp-primary);
  border-radius: 999px;
  background: transparent;
  color: var(--whmp-primary);
  font-size: var(--font-sm);
  font-weight: var(--font-weight-semibold);
  white-space: nowrap;
  transition: background-color 0.18s ease, color 0.18s ease;
}

#one-step-cart .oso-plan-change:hover,
#one-step-cart .oso-plan-change:focus-visible {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
  outline: none;
}

#one-step-cart .oso-plan-features {
  padding: var(--spacing-md) var(--spacing-lg) var(--spacing-sm);
  border-top: 1px solid var(--whmp-border-light);
  background: color-mix(in srgb, var(--whmp-primary) 4%, var(--whmp-bg-base));
}

#one-step-cart .oso-plan-features .product-card-features {
  margin: 0;
  text-align: left;
}

#one-step-cart .oso-plan-features .product-card-features ul {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px var(--spacing-lg);
  margin: 0;
  padding: 0;
  list-style: none;
}

#one-step-cart .oso-plan-features .product-card-features ul.oso-features-extra {
  margin-top: 6px;
}

#one-step-cart .oso-plan-features .product-card-features ul.oso-features-extra[style*="display: block"],
#one-step-cart .oso-plan-features .product-card-features ul.oso-features-extra[style=""] {
  display: grid !important;
}

#one-step-cart .oso-plan-features .product-card-features li {
  position: relative;
  padding: 0 0 0 22px;
  margin: 0;
  border: 0;
  text-align: left;
  font-size: var(--font-sm);
  line-height: 1.5;
  color: var(--whmp-text-secondary);
}

#one-step-cart .oso-plan-features .product-card-features li::before {
  content: "\f00c";
  position: absolute;
  left: 0;
  top: 1px;
  font-family: "whmp_oso FA6 Free";
  font-weight: 900;
  font-size: 12px;
  color: var(--whmp-primary);
}

#one-step-cart .oso-plan-features .oso-features-toggle {
  margin-top: var(--spacing-sm);
}

@media (max-width: 767px) {
  #one-step-cart .oso-plan-head {
    grid-template-columns: auto minmax(0, 1fr);
    gap: var(--spacing-md);
    padding: var(--spacing-md);
  }

  #one-step-cart .oso-plan-price {
    grid-column: 1 / -1;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    text-align: left;
  }

  #one-step-cart .oso-plan-change {
    margin-top: 0;
  }

  #one-step-cart .oso-plan-features .product-card-features ul {
    grid-template-columns: minmax(0, 1fr);
  }
}

/* What other modules print into the checkout (fees, trial notices). */
#one-step-cart .oso-hook-output:empty {
  display: none;
}

#one-step-cart .gateway-name {
  vertical-align: middle;
}

#one-step-cart .oso-qty-label,
#one-step-cart .oso-cycle-label {
  white-space: nowrap;
}

/* ====================================================
   1.1.1 - SUBDOMAIN: name | suffix | Use, one joined control
   All three take the same height and share their borders, as the
   register / transfer search does.
   ==================================================== */
#one-step-cart .subdomain-input-grp {
  display: flex !important;
  flex-wrap: nowrap;
  align-items: stretch;
}

#one-step-cart .subdomain-input-grp > .subdomain-sld-input {
  flex: 1 1 0;
  width: auto !important;
  min-width: 0;
  padding-left: var(--spacing-md) !important;
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

/* A bounded width (never its content's), the row's full height (templates/lagom.css centres
   it), and nothing drawn outside it - so it can never slide under the Use button. */
#one-step-cart .subdomain-input-grp > .oso-cselect,
#one-step-cart .subdomain-input-grp > select.subdomain-suffix-select {
  flex: 0 0 clamp(140px, 32%, 240px);
  width: clamp(140px, 32%, 240px);
  min-width: 0;
  max-width: none;
  height: auto !important;
  margin: 0 !important;
  align-self: stretch !important;
}

#one-step-cart .subdomain-input-grp > .oso-cselect .oso-cselect-trigger {
  width: 100%;
  min-width: 0;
}

#one-step-cart .subdomain-input-grp > .oso-cselect .oso-cselect-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#one-step-cart .subdomain-input-grp > .oso-cselect .oso-cselect-trigger,
#one-step-cart .subdomain-input-grp > select.subdomain-suffix-select {
  height: 100% !important;
  border: 1px solid var(--whmp-border-mid) !important;
  border-left: 0 !important;
  border-radius: 0 !important;
  background: var(--whmp-bg-alt-soft, var(--whmp-primary-faded)) !important;
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-medium);
}

/* In the register / transfer search the button sits over the input's right end (absolute);
   here it is the row's third part, after the suffix. */
#one-step-cart .subdomain-input-grp > .input-group-append {
  display: flex;
  flex: 0 0 auto;
  position: static !important;
  margin: 0;
}

#one-step-cart .subdomain-input-grp > .input-group-append > .whmp-btn {
  height: 100%;
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;
  padding-left: var(--spacing-lg);
  padding-right: var(--spacing-lg);
}

@media (max-width: 576px) {
  #one-step-cart .subdomain-input-grp {
    flex-wrap: wrap !important;
  }

  #one-step-cart .subdomain-input-grp > .subdomain-sld-input {
    flex-basis: 100%;
    border-radius: var(--border-radius-md) var(--border-radius-md) 0 0 !important;
  }

  #one-step-cart .subdomain-input-grp > .oso-cselect,
  #one-step-cart .subdomain-input-grp > select.subdomain-suffix-select {
    flex: 1 1 0;
    width: auto;
    max-width: none;
  }

  #one-step-cart .subdomain-input-grp > .oso-cselect .oso-cselect-trigger,
  #one-step-cart .subdomain-input-grp > select.subdomain-suffix-select {
    border-left: 1px solid var(--whmp-border-mid) !important;
    border-top: 0 !important;
    border-radius: 0 0 0 var(--border-radius-md) !important;
  }

  #one-step-cart .subdomain-input-grp > .input-group-append > .whmp-btn {
    border-radius: 0 0 var(--border-radius-md) 0 !important;
  }
}

/* ====================================================
   1.1.1 - MAILING LIST OPT-IN: one styled checkbox with its heading and message
   ==================================================== */
#one-step-cart .whmp-marketing-email-optin {
  margin-top: var(--spacing-md);
  padding: var(--spacing-md);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
}

#one-step-cart .oso-optin-label {
  margin: 0;
  gap: 2px;
}

#one-step-cart .oso-optin-text {
  display: flex;
  flex-direction: column;
  gap: 4px;
  line-height: 1.45;
}

#one-step-cart .oso-optin-text strong {
  color: var(--whmp-text-primary);
  font-weight: var(--font-weight-semibold);
}

#one-step-cart .oso-optin-message {
  color: var(--whmp-text-secondary);
  font-size: var(--font-sm);
  font-weight: var(--font-weight-normal);
}

#one-step-cart .whmp-checkbox-styled input[type="checkbox"]:focus-visible + .whmp-checkbox-indicator {
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

/* Payment methods: the gateway's name always on the left, its logo (when it has one) always on
   the right, whichever gateways have logos. */
#one-step-cart #paymentGatewaysContainer label.radio-inline .gateway-name {
  flex: 1 1 auto;
  min-width: 0;
  text-align: left;
  overflow-wrap: anywhere;
}

#one-step-cart #paymentGatewaysContainer label.radio-inline img.gateway-logo {
  margin-left: auto;
}

/* ====================================================
   1.1.1 - RECOMMENDED PRODUCTS (cross-sells)
   One card per recommendation, always in view: picture, name, a line of description, its
   price and Add to Cart. Added, the card takes the brand outline and a "Product Added" badge,
   and its panel opens underneath with the product's own billing cycle, options, addons,
   custom fields and server details.
   ==================================================== */
#one-step-cart .recommended-products-container {
  align-items: start;
}

#one-step-cart .oso-rec-item {
  container-type: inline-size;
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  background: var(--whmp-bg-base);
  overflow: hidden;
  transition: border-color 0.18s ease, box-shadow 0.18s ease;
}

#one-step-cart .oso-rec-item:hover {
  border-color: color-mix(in srgb, var(--whmp-primary) 45%, var(--whmp-border-light));
}

#one-step-cart .oso-rec-item.is-added {
  border-color: var(--whmp-primary);
  box-shadow: 0 0 0 1px var(--whmp-primary);
}

#one-step-cart .oso-rec-item.is-configuring {
  grid-column: 1 / -1;
}

#one-step-cart .oso-rec-card {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-md) var(--spacing-lg);
}

#one-step-cart .oso-rec-media {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: var(--border-radius-md);
  background: var(--whmp-primary-faded);
  color: var(--whmp-primary);
  font-size: 22px;
  overflow: hidden;
}

#one-step-cart .oso-rec-media img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

#one-step-cart .oso-rec-info {
  min-width: 0;
}

#one-step-cart .oso-rec-title {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 10px;
}

#one-step-cart .oso-rec-name {
  margin: 0;
  font-size: var(--font-lg);
  font-weight: var(--font-weight-semibold);
  font-style: normal;
  line-height: 1.3;
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-rec-badge {
  display: none;
  align-items: center;
  gap: 4px;
  padding: 2px 9px;
  border-radius: 999px;
  background: var(--whmp-primary-light);
  color: var(--whmp-primary);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  line-height: 1.6;
  white-space: nowrap;
}

#one-step-cart .oso-rec-item.is-added .oso-rec-badge {
  display: inline-flex;
}

#one-step-cart .oso-rec-desc {
  margin: 4px 0 0;
  font-size: var(--font-sm);
  line-height: 1.5;
  color: var(--whmp-text-secondary);
}

#one-step-cart .oso-rec-price {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 2px 8px;
  margin-top: 6px;
}

#one-step-cart .oso-rec-amount {
  font-size: var(--font-lg);
  font-weight: var(--font-weight-bold);
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-rec-term,
#one-step-cart .oso-rec-setup {
  font-size: var(--font-sm);
  color: var(--whmp-text-light);
}

#one-step-cart .oso-rec-action .toggle-recommended-btn {
  width: auto;
  min-width: 0;
  margin: 0;
  padding: 8px 18px;
  border-radius: 999px;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-semibold);
  white-space: nowrap;
}

#one-step-cart .oso-rec-action .toggle-recommended-btn .btn-text {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

/* Added: the button removes it, so it reads as a quiet danger outline. */
#one-step-cart .oso-rec-action .toggle-recommended-btn.rec-prod-added {
  background: transparent;
  border: 1px solid var(--whmp-danger);
  color: var(--whmp-danger);
}

#one-step-cart .oso-rec-action .toggle-recommended-btn.rec-prod-added:hover,
#one-step-cart .oso-rec-action .toggle-recommended-btn.rec-prod-added:focus-visible {
  background: var(--whmp-danger);
  border-color: var(--whmp-danger);
  color: #fff;
}

/* ---- The configuration panel */
#one-step-cart .oso-rec-config {
  padding: var(--spacing-md) var(--spacing-lg);
  border-top: 1px solid var(--whmp-border-light);
  background: color-mix(in srgb, var(--whmp-primary) 5%, var(--whmp-bg-base));
}

#one-step-cart .oso-rec-config .recommended-billing-cycle-selector {
  margin: 0 0 var(--spacing-md);
  padding: 0;
  background: transparent;
  border-radius: 0;
}

#one-step-cart .oso-rec-config .recommended-billing-cycle-selector:last-child {
  margin-bottom: 0;
}

#one-step-cart .oso-rec-config-body:empty {
  display: none;
}

#one-step-cart .oso-rec-group + .oso-rec-group {
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-md);
  border-top: 1px dashed var(--whmp-border-mid);
}

#one-step-cart .oso-rec-group-title {
  margin: 0 0 var(--spacing-sm);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  font-style: normal;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--whmp-text-light);
}

#one-step-cart .oso-rec-row {
  margin: 0 0 var(--spacing-sm);
}

#one-step-cart .oso-rec-row:last-child {
  margin-bottom: 0;
}

#one-step-cart .oso-rec-label {
  display: block;
  margin: 0 0 4px;
  font-size: var(--font-sm);
  font-weight: var(--font-weight-medium);
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-rec-config .whmp-form-cntrl {
  width: 100%;
  background-color: var(--whmp-bg-base);
}

#one-step-cart .oso-rec-config .form-text {
  display: block;
  margin-top: 4px;
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
}

#one-step-cart .oso-rec-qty {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

#one-step-cart .oso-rec-config .oso-rec-qty .whmp-form-cntrl {
  flex: 0 0 96px;
  width: 96px;
}

#one-step-cart .oso-rec-unit {
  font-size: var(--font-sm);
  color: var(--whmp-text-secondary);
}

#one-step-cart .oso-rec-check .whmp-checkbox-text {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 8px;
  font-size: var(--font-sm);
  color: var(--whmp-text-primary);
}

#one-step-cart .oso-rec-addon {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
}

#one-step-cart .oso-rec-addon .oso-rec-check {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
}

#one-step-cart .oso-rec-addon-name {
  font-weight: var(--font-weight-medium);
}

#one-step-cart .oso-rec-addon-price {
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
}

#one-step-cart .oso-rec-config .oso-rec-addon-qty {
  flex: 0 0 76px;
  width: 76px;
}

#one-step-cart .oso-rec-config .oso-rec-addon-qty:disabled {
  opacity: 0.5;
}

#one-step-cart .oso-rec-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--spacing-sm) var(--spacing-md);
}

#one-step-cart .oso-rec-grid .oso-rec-row {
  margin: 0;
}

/* A narrow card (two or more per row, or a phone): the button goes under the text. */
@container (max-width: 460px) {
  #one-step-cart .oso-rec-card {
    grid-template-columns: auto minmax(0, 1fr);
  }

  #one-step-cart .oso-rec-action {
    grid-column: 1 / -1;
  }

  #one-step-cart .oso-rec-action .toggle-recommended-btn {
    width: 100%;
  }

  #one-step-cart .oso-rec-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 575px) {
  #one-step-cart .oso-rec-card,
  #one-step-cart .oso-rec-config {
    padding-left: var(--spacing-md);
    padding-right: var(--spacing-md);
  }
}

/* Product addons use the same card as the recommendations. In their grid every card of a row is
   the same height, the button kept at the card's right edge. */
#one-step-cart .addons-container {
  align-items: stretch;
}

#one-step-cart .oso-addon-item {
  display: flex;
  flex-direction: column;
}

#one-step-cart .oso-addon-item .oso-rec-card {
  flex: 1 1 auto;
}

/* The open panel spans the row: its fields flow into as many columns as fit. A column is never
   wider than the panel itself (min(..., 100%)): on a phone a 220px minimum ran past the card. */
#one-step-cart .oso-rec-group {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(var(--oso-grid-cell-min), 100%), 1fr));
  gap: var(--spacing-sm) var(--spacing-md);
  align-items: start;
}

#one-step-cart .oso-rec-group > .oso-rec-group-title,
#one-step-cart .oso-rec-group > .oso-rec-grid {
  grid-column: 1 / -1;
}

#one-step-cart .oso-rec-group > .oso-rec-row {
  margin: 0;
}

#one-step-cart .oso-rec-group-title {
  margin-bottom: 0;
}

#one-step-cart .oso-rec-config .recommended-billing-cycle-selector {
  max-width: 340px;
}

/* Checkboxes: an outline that shows on every surface. A template's divider colour (Lagom's
   #EFEFF1) is too faint to see a box by, so the outline mixes in the muted text colour. */
:is(#one-step-cart, #billingDetailsModal) .whmp-checkbox-indicator {
  background-color: var(--whmp-bg-base);
  border-color: color-mix(in srgb, var(--whmp-text-light) 65%, var(--whmp-border-mid));
}

:is(#one-step-cart, #billingDetailsModal) .whmp-checkbox-styled:hover .whmp-checkbox-indicator {
  border-color: var(--whmp-primary);
}

:is(#one-step-cart, #billingDetailsModal) .whmp-checkbox-styled input[type="checkbox"]:checked + .whmp-checkbox-indicator {
  border-color: var(--whmp-primary);
  background-color: var(--whmp-primary-fill, var(--whmp-primary));
}

:is(#one-step-cart, #billingDetailsModal) .whmp-checkbox-styled input[type="checkbox"]:focus-visible + .whmp-checkbox-indicator {
  box-shadow: 0 0 0 3px var(--whmp-focus-ring);
}

/* ====================================================
   1.1.1 - BUNDLES
   While a bundle is the order the catalogue is put away - nothing but the bundle's own items can
   be ordered with it. "Change Plan" brings the catalogue back to switch to another product or
   bundle, which replaces this one.
   ==================================================== */
body.whmp-bundle-active:not(.oso-bundle-browse) #one-step-cart .product-configuration-content > .product-type-tabs {
  display: none !important;
}

body.whmp-bundle-active.oso-bundle-browse #one-step-cart .bundle-edit-btn {
  background: var(--whmp-primary-fill, var(--whmp-primary));
  color: var(--whmp-text-inverse);
}

#one-step-cart .bundle-selected-block {
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-lg);
  box-shadow: 0 0 0 1px var(--whmp-primary);
  background: var(--whmp-bg-base);
}

#one-step-cart .bundle-selected-block .bundle-selected-head {
  padding: var(--spacing-md) var(--spacing-lg);
  background: color-mix(in srgb, var(--whmp-primary) 5%, var(--whmp-bg-base));
}

#one-step-cart .bundle-selected-block .bundle-selected-name {
  font-size: var(--font-xl);
  font-style: normal;
}

#one-step-cart .bundle-selected-block .bundle-edit-btn {
  margin-top: 0;
}

#one-step-cart .bundle-selected-block .bundle-selected-body {
  padding: var(--spacing-sm) var(--spacing-lg);
}

#one-step-cart .bundle-selected-block .bundle-selected-body:empty {
  display: none;
}

#one-step-cart .bundle-selected-block .bundle-selected-desc {
  margin: 0;
  color: var(--whmp-text-secondary);
  font-size: var(--font-sm);
}

/* The status pill goes under the name when both do not fit on the line (a phone). */
#one-step-cart .bundle-selected-block .bundle-row-head {
  flex-wrap: wrap;
  padding: var(--spacing-md) var(--spacing-lg);
  transition: background-color 0.18s ease;
}

#one-step-cart .bundle-selected-block .bundle-row-name {
  min-width: 0;
  overflow-wrap: anywhere;
}

#one-step-cart .bundle-selected-block .bundle-row-head:hover {
  background: color-mix(in srgb, var(--whmp-primary) 4%, var(--whmp-bg-base));
}

/* The row's status as a pill: still needed (warning), a plain fact (muted), done (success). */
#one-step-cart .bundle-selected-block .bundle-row-status {
  padding: 2px 10px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--whmp-warning) 16%, var(--whmp-bg-base));
  color: color-mix(in srgb, var(--whmp-warning) 70%, #000);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
}

#one-step-cart .bundle-selected-block .bundle-row-status--info {
  background: var(--whmp-primary-faded);
  color: var(--whmp-text-secondary);
}

#one-step-cart .bundle-selected-block .bundle-row.is-resolved .bundle-row-status {
  background: color-mix(in srgb, var(--whmp-success) 14%, var(--whmp-bg-base));
  color: var(--whmp-success);
}

#one-step-cart .bundle-selected-block .bundle-row.is-resolved .bundle-row-status::before {
  content: "\f00c";
  margin-right: 5px;
  font-family: "whmp_oso FA6 Free";
  font-weight: 900;
}

#one-step-cart .bundle-selected-block .bundle-row-body {
  padding: 0 var(--spacing-lg) var(--spacing-lg);
}

#one-step-cart .bundle-selected-block .bundle-field {
  padding-top: var(--spacing-md);
  border-top: 1px dashed var(--whmp-border-mid);
}

#one-step-cart .bundle-selected-block .bundle-field:first-child {
  padding-top: 0;
  border-top: 0;
}

#one-step-cart .bundle-selected-block .bundle-field-label {
  margin-bottom: var(--spacing-sm);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--whmp-text-light);
}

#one-step-cart .bundle-selected-block .bundle-opt-name {
  font-size: var(--font-sm);
  font-weight: var(--font-weight-medium);
}

#one-step-cart .bundle-selected-block .bundle-opt-price {
  color: var(--whmp-text-light);
}

#one-step-cart .bundle-selected-block .bundle-opt.is-locked .bundle-opt-name::after {
  content: "\f023";
  margin-left: 6px;
  font-family: "whmp_oso FA6 Free";
  font-weight: 900;
  font-size: 10px;
  color: var(--whmp-text-light);
}

/* Addons and custom field tick boxes on a row: name on the left, price (or Included) on the right. */
#one-step-cart .bundle-selected-block .bundle-check {
  align-items: center;
  margin: 0 0 6px;
  padding: 8px 12px;
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  background: var(--whmp-bg-base);
  font-weight: var(--font-weight-normal);
}

#one-step-cart .bundle-selected-block .bundle-check .whmp-checkbox-indicator {
  margin-top: 0;
}

/* Name and price share a line while they fit; on a phone the price goes under the name (and may
   wrap itself) instead of running out of the row. */
#one-step-cart .bundle-selected-block .bundle-check .whmp-checkbox-text {
  display: flex;
  flex: 1 1 auto;
  flex-wrap: wrap;
  min-width: 0;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  font-size: var(--font-sm);
}

#one-step-cart .bundle-selected-block .bundle-check.is-locked {
  cursor: default;
  background: color-mix(in srgb, var(--whmp-primary) 4%, var(--whmp-bg-base));
}

#one-step-cart .bundle-selected-block .bundle-check.is-locked .whmp-checkbox-indicator {
  opacity: 0.75;
}

#one-step-cart .bundle-selected-block .bundle-check .bundle-addon-price {
  white-space: normal;
  color: var(--whmp-text-light);
  font-size: var(--font-xs);
}

#one-step-cart .bundle-selected-block .bundle-included {
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--whmp-primary-light);
  color: var(--whmp-primary);
  font-size: var(--font-xs);
  font-weight: var(--font-weight-semibold);
  white-space: nowrap;
}

#one-step-cart .bundle-selected-block .bundle-domain-addons {
  border-top: 0;
}

/* A row's options and fields flow into as many columns as fit; cycle chips, tick boxes and the
   domain block keep the full width. */
#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(var(--oso-grid-cell-min), 100%), 1fr));
  gap: var(--spacing-sm) var(--spacing-md);
  align-items: start;
}

#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-field-label,
#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-chips,
#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-check {
  grid-column: 1 / -1;
}

#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-field-label {
  margin-bottom: 0;
}

#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-opt,
#one-step-cart .bundle-selected-block .bundle-field:not(.bundle-domain) > .bundle-check {
  margin-bottom: 0;
}

#one-step-cart .bundle-selected-block .bundle-covers::first-letter {
  text-transform: uppercase;
}

#one-step-cart .promo-code-container.oso-promo-disabled > :not(.oso-promo-note) {
  display: none !important;
}

#one-step-cart .oso-promo-note {
  display: flex;
  gap: 6px;
  align-items: flex-start;
  font-size: var(--font-xs);
  line-height: 1.45;
  color: var(--whmp-text-light);
}

/* Renewal and addon pages: WHMCS's own order summary (ordersummary.tpl writes the amount before
   its label). The total reads as the checkout's does: label left, amount right. */
#one-step-cart.oso-secondary-page #producttotal .total-due-today {
  display: flex;
  flex-direction: row-reverse;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-md);
  padding-top: var(--spacing-md);
  border-top: 1px solid var(--whmp-border-light);
  text-align: left;
}

#one-step-cart.oso-secondary-page #producttotal .total-due-today span {
  display: inline;
  font-size: var(--font-md);
  font-weight: var(--font-weight-semibold);
  color: var(--whmp-text-primary);
}

#one-step-cart.oso-secondary-page #producttotal .total-due-today .amt {
  font-size: var(--font-xl);
  font-weight: var(--font-weight-bold);
}

/* Product custom fields: each field a bordered cell of the section's grid (Custom Fields Per Row),
   not a shadowed card inside the section's card; the control fills the cell. */
#one-step-cart .custom-fields-content .row {
  margin-left: 0;
  margin-right: 0;
}

#one-step-cart .custom-field-container {
  max-width: none;
  margin: 0;
  padding: var(--spacing-md);
  border: 1px solid var(--whmp-border-light);
  border-radius: var(--border-radius-md);
  box-shadow: none;
}

#one-step-cart .custom-field-container .whmp-form-grp {
  margin-bottom: 0;
}

#one-step-cart .custom-field-container .oso-cselect,
#one-step-cart .custom-field-container .whmp-form-cntrl {
  width: 100%;
  max-width: none;
}

/* A short window (under 600px tall, e.g. a laptop with a docked console): pinned and capped to
   the window, the summary would leave its items only a sliver between the fixed heading and
   footer. It flows with the page instead, so all of it can be scrolled to. */
@media (min-width: 769px) and (max-height: 599px) {
  #one-step-cart #order-standard_cart #oso-orderSummary {
    position: static;
  }

  #one-step-cart .order-summary-sidebar {
    display: block;
    max-height: none;
    overflow: visible;
  }

  #one-step-cart .oso-summary-scroll {
    max-height: none;
    overflow: visible;
  }
}

/* 1.1.4 - THE DOMAIN RESULT ROW ON A NARROWER COLUMN
   The "is available" text kept its full width, so on a narrower order form column (Twenty-One at
   1180 px, for example) the price and the Add to Cart button were squeezed and the button's label
   was cut off. The text now takes the space the price and the button do not need, wrapping when
   it must; both keep their natural width. Wide screens look as before. */
#one-step-cart .domain-result .domain-result-content {
  column-gap: var(--spacing-md);
}

#one-step-cart .domain-result .domain-result-content .whmp-alert.whmp-alert-success {
  flex: 1 1 auto;
  min-width: 0;
  max-width: none;
}

#one-step-cart .domain-result .domain-result-content > .mt-2,
#one-step-cart .domain-result .domain-result-content > button {
  flex: 0 0 auto;
  white-space: nowrap;
}

/* 1.1.4 - the details under an upgrade's or an existing service's addon's name in the summary (its
   service, the cycle, the upgrade credit) read as secondary text, as a product's details do, not
   in the bold of the name above them. */
#one-step-cart .summary-line[data-type="upgrade"] .item-name .summary-item-domain,
#one-step-cart .summary-line[data-type="upgrade"] .item-name .summary-item-cycle,
#one-step-cart .summary-line[data-type="cartaddon"] .item-name .summary-item-domain,
#one-step-cart .summary-line[data-type="cartaddon"] .item-name .summary-item-cycle {
  font-style: normal;
  font-weight: var(--font-weight-normal, 400);
  font-size: var(--font-xs);
  color: var(--whmp-text-light);
}
/* HB NETWORKS - FONDO EXTERIOR DEL CHECKOUT */
html body section#main-body {
    background: #0f0f1a !important;
    background-color: #0f0f1a !important;
}/* HB NETWORKS - TAMAÑO DEL RESULTADO DE DOMINIO */

/* Precio del dominio */
#one-step-cart .domain-result-content > .mt-2 {
    font-size: 17px !important;
    line-height: 1.4 !important;
    font-weight: 600 !important;
}

/* Mensaje de disponibilidad */
#one-step-cart .domain-result-content > .whmp-alert-success {
    font-size: 15px !important;
    line-height: 1.4 !important;
}