/* ==================================================================
   Nexum — Client Area Theme
   All values come from CSS variables injected by ClientAreaHeadOutput.
   Nothing here is hardcoded: change it from the admin panel.
   Targets the WHMCS "twenty-one" template structure.
   ================================================================== */

/* ---------- Base ---------- */
body.nx-theme {
    font-family: var(--nx-font-family);
    font-size: var(--nx-font-size);
    font-weight: var(--nx-weight-body);
    line-height: var(--nx-line-height);
    letter-spacing: var(--nx-letter-spacing);
    background-color: var(--nx-bg);
    color: var(--nx-text);
    transition: background-color .25s ease, color .25s ease;
}

body.nx-theme h1, body.nx-theme .h1 { font-size: var(--nx-font-size-h1); }
body.nx-theme h2, body.nx-theme .h2 { font-size: var(--nx-font-size-h2); }
body.nx-theme h3, body.nx-theme .h3 { font-size: var(--nx-font-size-h3); }
body.nx-theme h1, body.nx-theme h2, body.nx-theme h3,
body.nx-theme h4, body.nx-theme h5, body.nx-theme h6,
body.nx-theme .card-title, body.nx-theme .panel-title {
    font-weight: var(--nx-weight-heading);
    text-transform: var(--nx-heading-transform);
    color: var(--nx-text);
    font-family: var(--nx-font-family);
}

body.nx-theme small, body.nx-theme .small { font-size: var(--nx-font-size-sm); }

/* Links. These were commented out, which left every unstyled anchor on
   Bootstrap's own #007bff / #204060 hover — the blue that showed up on the
   knowledgebase list and the "Powered by" credit. --nx-link comes from the
   admin's Link Colour setting and falls back to the brand colour.

   Anchors that are really buttons or nav items set their own colour further
   down, so this only catches body copy links. */
body.nx-theme a {
    color: var(--nx-link, var(--nx-primary));
    text-decoration: var(--nx-link-decoration, none);
}
body.nx-theme a:hover,
body.nx-theme a:focus {
    color: var(--nx-primary-hover);
}

/* Content links that carry their own resting colour (list rows, ticket
   subjects, domain names). Most had no hover state at all, so they fell
   through to the browser default blue with an underline. They lift to the
   brand colour instead and never underline. */
body.nx-theme .nx-hp-child-link:hover,
body.nx-theme .nx-hp-panel-link:hover,
body.nx-theme .nx-inv-link:hover,
body.nx-theme .nx-tl-subj-link:hover,
body.nx-theme .nx-tl-filter-link:hover,
body.nx-theme .nx-tsc-ticket-link:hover,
body.nx-theme .nx-prods-domain-link:hover,
body.nx-theme .nx-dd-link:hover,
body.nx-theme .nx-epp-mail-link:hover,
body.nx-theme .nx-pd-backlink:hover,
body.nx-theme .nx-vt-attach-link:hover,
body.nx-theme .nx-vi-cart-link:hover {
    color: var(--nx-primary);
    text-decoration: none;
}

body.nx-theme .text-muted, body.nx-theme .small.text-muted { color: var(--nx-muted); }

body.nx-theme .main-content,
body.nx-theme #main-body {
    max-width: var(--nx-container-width);
    margin-left: auto;
    margin-right: auto;
    padding: var(--nx-content-padding);
}

/* ---------- Header ---------- */
body.nx-theme #header,
body.nx-theme .navbar-main,
body.nx-theme nav.navbar {
    background: var(--nx-header-bg);
    border-bottom: var(--nx-border-width) solid var(--nx-border);
    box-shadow: var(--nx-shadow);
    min-height: var(--nx-header-height);
}

/* #header and nav.navbar-main are stock WHMCS markup that this theme does not
   render, so the setting reached nothing. header.nx-topbar is the real element. */
body.nx-theme.nx-header-sticky header.nx-topbar,
body.nx-theme.nx-header-sticky #header,
body.nx-theme.nx-header-sticky nav.navbar-main {
    position: sticky;
    top: 0;
    z-index: 1030;
}

/* --nx-header-offset seed. nexum.js measures the header and republishes this
   on <html>, but that only happens after DOM-ready — anything sticky below the
   header (the cart's order summary) would otherwise sit at the wrong top for
   the first frame and visibly jump. These seeds derive the same value from the
   admin height settings, so the pre-JS position is already correct and the
   measured value merely refines it. */
body.nx-theme { --nx-header-offset: 0px; }
body.nx-theme.nx-header-sticky { --nx-header-offset: var(--nx-header-height, 64px); }
body.nx-theme.nx-header-sticky:has(.nx-topbar-expanded) {
    --nx-header-offset: calc(var(--nx-header-height, 64px) + var(--nx-topbar-utility-height, 48px));
}

body.nx-theme #logo img, body.nx-theme .navbar-brand img {
    height: var(--nx-logo-height);
    width: auto;
}

body.nx-theme #main-menu .navbar-nav > li > a,
body.nx-theme nav .navbar-nav .nav-link {
    color: var(--nx-text);
    font-weight: var(--nx-weight-button);
    border-radius: var(--nx-radius-button);
    transition: background .15s ease, color .15s ease;
}

body.nx-theme #main-menu .navbar-nav > li > a:hover,
body.nx-theme nav .navbar-nav .nav-link:hover {
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.08);
}

body.nx-theme #main-menu .navbar-nav > li.active > a,
body.nx-theme nav .navbar-nav .nav-link.active {
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.10);
}

body.nx-theme .dropdown-menu {
    background: var(--nx-card-bg);
    border: var(--nx-border-width) solid var(--nx-border);
    border-radius: calc(var(--nx-radius-card) * 0.75);
    box-shadow: var(--nx-shadow);
    overflow: hidden;
}

body.nx-theme .dropdown-menu .dropdown-item,
body.nx-theme .dropdown-menu > li > a {
    color: var(--nx-text);
    font-size: var(--nx-font-size);
}

body.nx-theme .dropdown-menu .dropdown-item:hover,
body.nx-theme .dropdown-menu > li > a:hover {
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
}

/* ---------- Cards / Panels ---------- */
body.nx-theme .card,
body.nx-theme .panel,
body.nx-theme .tile,
body.nx-theme .list-group {
    background: var(--nx-card-bg);
    border: var(--nx-border-width) solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow);
    margin-bottom: var(--nx-card-gap);
    overflow: hidden;
}

body.nx-theme .card-body, body.nx-theme .panel-body { padding: var(--nx-card-padding); }

body.nx-theme.nx-hover-lift .card:hover,
body.nx-theme.nx-hover-lift .tile:hover {
    transform: translateY(-2px);
    transition: transform .18s ease, box-shadow .18s ease;
}

body.nx-theme .card-header,
body.nx-theme .panel-heading {
    background: transparent;
    border-bottom: max(var(--nx-border-width), 1px) solid var(--nx-border);
    padding: calc(var(--nx-card-padding) * 0.75) var(--nx-card-padding);
    font-weight: var(--nx-weight-heading);
    color: var(--nx-text);
}

body.nx-theme .card-footer, body.nx-theme .panel-footer {
    background: transparent;
    border-top: max(var(--nx-border-width), 1px) solid var(--nx-border);
}

body.nx-theme .list-group-item {
    background: transparent;
    border-color: var(--nx-border);
    color: var(--nx-text);
}

body.nx-theme .list-group-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.05);
}

/* ---------- Sidebar (twenty-one .sidebar panels) ---------- */
body.nx-theme .sidebar .card,
body.nx-theme .sidebar .panel-sidebar {
    background: var(--nx-sidebar-bg);
}

body.nx-theme .sidebar .card .card-header {
    color: var(--nx-sidebar-text);
    text-transform: uppercase;
    font-size: var(--nx-font-size-sm);
    letter-spacing: 0.5px;
}

body.nx-theme .sidebar .list-group-item { color: var(--nx-sidebar-text); }
body.nx-theme .sidebar .list-group-item.active {
    background: rgba(var(--nx-primary-rgb), 0.10);
    color: var(--nx-primary);
    border-left: 3px solid var(--nx-primary);
    font-weight: var(--nx-weight-button);
}

/* Sidebar menu layout mode: fixed left/right column */
@media (min-width: 992px) {
    body.nx-theme.nx-menu-sidebar #main-body .sidebar,
    body.nx-theme.nx-menu-sidebar .main-sidebar {
        width: var(--nx-sidebar-width);
        transition: width .2s ease;
    }
    .nx-sidebar-mode-compact body.nx-theme.nx-menu-sidebar #main-body .sidebar,
    .nx-sidebar-mode-compact body.nx-theme.nx-menu-sidebar .main-sidebar {
        width: var(--nx-sidebar-width-compact);
        font-size: calc(var(--nx-font-size) - 1px);
    }
    .nx-sidebar-mode-icons body.nx-theme.nx-menu-sidebar #main-body .sidebar,
    .nx-sidebar-mode-icons body.nx-theme.nx-menu-sidebar .main-sidebar {
        width: var(--nx-sidebar-width-icons);
    }
    .nx-sidebar-mode-icons body.nx-theme.nx-menu-sidebar .sidebar .list-group-item span,
    .nx-sidebar-mode-icons body.nx-theme.nx-menu-sidebar .sidebar .card-header span {
        display: none;
    }
    .nx-sidebar-mode-icons body.nx-theme.nx-menu-sidebar .sidebar .list-group-item {
        text-align: center;
    }
    body.nx-theme.nx-sidebar-right #main-body { flex-direction: row-reverse; }
}

/* Nexum client-area flex layout: flip sidebar to the right on desktop.
   The .nx-app-layout is d-flex flex-md-row (768px+); the sidebar is a flex
   child (not fixed) and .nx-main-area is flex-grow-1, so reversing the row
   moves the sidebar to the right and the content offset follows automatically. */
@media (min-width: 768px) {
    body.nx-theme.nx-sidebar-right .nx-app-layout { flex-direction: row-reverse; }
    body.nx-theme.nx-sidebar-right .nx-sidebar {
        border-right: 0;
        border-left: 1px solid var(--nx-border);
    }
}
html.nx-dark body.nx-sidebar-right .nx-sidebar {
    border-right: 0;
    border-left: 1px solid var(--nx-border);
}

/* Hide the client-area sidebar entirely when menu layout = top */
body.nx-theme.nx-menu-top .sidebar .card-header { border-radius: var(--nx-radius-card) var(--nx-radius-card) 0 0; }

/* ---------- Buttons ---------- */
body.nx-theme .btn {
    border-radius: var(--nx-radius-button);
    font-weight: var(--nx-weight-button);
    text-transform: var(--nx-btn-transform);
    font-family: var(--nx-font-family);
    transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease;
    border-width: 1px;
}

body.nx-theme .btn-primary,
body.nx-theme .btn-styled-blue {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    color: var(--nx-on-primary);
}

/* Bootstrap's own build (theme.min.css) hardcodes the pressed/focused states —
   .btn-primary:active becomes #264d73, .btn-success #1e7e34 and so on — with a
   selector chain (`:not(:disabled):not(.disabled).active`) specific enough to
   beat a plain `.btn-primary` rule. That is why a themed button snapped back to
   stock Bootstrap blue the moment it was clicked. Matching that chain here
   keeps every state on the admin palette. theme.min.css itself is a vendor
   bundle regenerated on upgrade, so it is never edited. */
body.nx-theme .btn-primary:hover,
body.nx-theme .btn-primary:focus,
body.nx-theme .btn-primary:not(:disabled):not(.disabled):active,
body.nx-theme .btn-primary:not(:disabled):not(.disabled).active,
body.nx-theme .show > .btn-primary.dropdown-toggle {
    background-color: var(--nx-primary-hover);
    border-color: var(--nx-primary-hover);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-primary:focus,
body.nx-theme .btn-primary:not(:disabled):not(.disabled):active:focus,
body.nx-theme .btn-primary:not(:disabled):not(.disabled).active:focus,
body.nx-theme .show > .btn-primary.dropdown-toggle:focus {
    box-shadow: 0 0 0 .2rem rgba(var(--nx-primary-rgb), .35);
}

/* The semantic variants get the same treatment. Their base fills are defined
   further down with the rest of the button styles; only the pressed states
   need this selector chain. */
body.nx-theme .btn-success:not(:disabled):not(.disabled):active,
body.nx-theme .btn-success:not(:disabled):not(.disabled).active,
body.nx-theme .show > .btn-success.dropdown-toggle {
    background-color: color-mix(in srgb, var(--nx-success) 85%, #000);
    border-color: color-mix(in srgb, var(--nx-success) 85%, #000);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-danger:not(:disabled):not(.disabled):active,
body.nx-theme .btn-danger:not(:disabled):not(.disabled).active,
body.nx-theme .show > .btn-danger.dropdown-toggle {
    background-color: color-mix(in srgb, var(--nx-danger) 85%, #000);
    border-color: color-mix(in srgb, var(--nx-danger) 85%, #000);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-warning:not(:disabled):not(.disabled):active,
body.nx-theme .btn-warning:not(:disabled):not(.disabled).active,
body.nx-theme .btn-info:not(:disabled):not(.disabled):active,
body.nx-theme .btn-info:not(:disabled):not(.disabled).active {
    filter: brightness(0.85);
    color: var(--nx-on-primary);
}
/* Focus rings, so a keyboard user sees the theme colour rather than Bootstrap
   blue. */
body.nx-theme .btn-success:focus,
body.nx-theme .btn-success:not(:disabled):not(.disabled):active:focus {
    box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--nx-success) 35%, transparent);
}
body.nx-theme .btn-danger:focus,
body.nx-theme .btn-danger:not(:disabled):not(.disabled):active:focus {
    box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--nx-danger) 35%, transparent);
}

/* Outline variant — Bootstrap pins this one to #369 in every state. */
body.nx-theme .btn-outline-primary {
    color: var(--nx-primary);
    border-color: var(--nx-primary);
    background-color: transparent;
}
body.nx-theme .btn-outline-primary:hover,
body.nx-theme .btn-outline-primary:not(:disabled):not(.disabled):active,
body.nx-theme .btn-outline-primary:not(:disabled):not(.disabled).active,
body.nx-theme .show > .btn-outline-primary.dropdown-toggle {
    color: var(--nx-on-primary);
    background-color: var(--nx-primary);
    border-color: var(--nx-primary);
}
body.nx-theme .btn-outline-primary:focus,
body.nx-theme .btn-outline-primary.focus,
body.nx-theme .btn-outline-primary:not(:disabled):not(.disabled):active:focus {
    box-shadow: 0 0 0 .2rem rgba(var(--nx-primary-rgb), .35);
}
body.nx-theme .btn-outline-primary:disabled,
body.nx-theme .btn-outline-primary.disabled {
    color: var(--nx-primary);
    background-color: transparent;
}

body.nx-theme.nx-btn-shadow .btn-primary {
    box-shadow: 0 4px 14px rgba(var(--nx-primary-rgb), 0.30);
}

body.nx-theme.nx-buttons-soft .btn-primary {
    background: rgba(var(--nx-primary-rgb), 0.12);
    border-color: transparent;
    color: var(--nx-primary);
    box-shadow: none;
}

body.nx-theme.nx-buttons-soft .btn-primary:hover {
    background: rgba(var(--nx-primary-rgb), 0.20);
    color: var(--nx-primary-hover);
}

body.nx-theme.nx-buttons-outline .btn-primary {
    background: transparent;
    border-color: var(--nx-primary);
    color: var(--nx-primary);
    box-shadow: none;
}

body.nx-theme.nx-buttons-outline .btn-primary:hover {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
}

body.nx-theme .btn-default, body.nx-theme .btn-secondary {
    background: var(--nx-card-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
}

body.nx-theme .btn-default:hover, body.nx-theme .btn-secondary:hover {
    background: rgba(var(--nx-primary-rgb), 0.06);
    border-color: var(--nx-primary);
    color: var(--nx-primary);
}

/* Semantic buttons. The colour token drives the fill; --nx-on-primary drives the
   label so it stays legible whatever the admin picks. Bootstrap left the text
   colour to its own defaults here, which did not follow the theme. */
body.nx-theme .btn-success {
    background: var(--nx-success);
    border-color: var(--nx-success);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-danger {
    background: var(--nx-danger);
    border-color: var(--nx-danger);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-warning {
    background: var(--nx-warning);
    border-color: var(--nx-warning);
    color: var(--nx-on-primary);
}
body.nx-theme .btn-info {
    background: var(--nx-info);
    border-color: var(--nx-info);
    color: var(--nx-on-primary);
}

body.nx-theme .btn-success:hover,
body.nx-theme .btn-danger:hover,
body.nx-theme .btn-warning:hover,
body.nx-theme .btn-info:hover {
    filter: brightness(0.93);
    color: var(--nx-on-primary);
}

/* The nx-buttons-* style setting applied to .btn-primary only, so a soft or
   outline theme left the semantic buttons solid. Keep them in step. */
body.nx-theme.nx-buttons-soft .btn-success,
body.nx-theme.nx-buttons-soft .btn-danger,
body.nx-theme.nx-buttons-soft .btn-warning,
body.nx-theme.nx-buttons-soft .btn-info {
    border-color: transparent;
    box-shadow: none;
}
body.nx-theme.nx-buttons-soft .btn-success { background: rgba(var(--nx-success-rgb), 0.12); color: var(--nx-success); }
body.nx-theme.nx-buttons-soft .btn-danger  { background: rgba(var(--nx-danger-rgb), 0.12);  color: var(--nx-danger); }
body.nx-theme.nx-buttons-soft .btn-warning { background: rgba(var(--nx-warning-rgb), 0.12); color: var(--nx-warning); }
body.nx-theme.nx-buttons-soft .btn-info    { background: rgba(var(--nx-info-rgb), 0.12);    color: var(--nx-info); }

body.nx-theme.nx-buttons-outline .btn-success,
body.nx-theme.nx-buttons-outline .btn-danger,
body.nx-theme.nx-buttons-outline .btn-warning,
body.nx-theme.nx-buttons-outline .btn-info {
    background: transparent;
    box-shadow: none;
}
body.nx-theme.nx-buttons-outline .btn-success { border-color: var(--nx-success); color: var(--nx-success); }
body.nx-theme.nx-buttons-outline .btn-danger  { border-color: var(--nx-danger);  color: var(--nx-danger); }
body.nx-theme.nx-buttons-outline .btn-warning { border-color: var(--nx-warning); color: var(--nx-warning); }
body.nx-theme.nx-buttons-outline .btn-info    { border-color: var(--nx-info);    color: var(--nx-info); }

body.nx-theme.nx-buttons-outline .btn-success:hover { background: var(--nx-success); color: var(--nx-on-primary); }
body.nx-theme.nx-buttons-outline .btn-danger:hover  { background: var(--nx-danger);  color: var(--nx-on-primary); }
body.nx-theme.nx-buttons-outline .btn-warning:hover { background: var(--nx-warning); color: var(--nx-on-primary); }
body.nx-theme.nx-buttons-outline .btn-info:hover    { background: var(--nx-info);    color: var(--nx-on-primary); }
body.nx-theme .btn-info    { background: var(--nx-info);    border-color: var(--nx-info); }
body.nx-theme .btn-link    { color: var(--nx-link); box-shadow: none; }

/* ---------- Forms ---------- */
body.nx-theme .form-control,
body.nx-theme select.form-control,
body.nx-theme .custom-select {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-input);
    color: var(--nx-text);
    font-family: var(--nx-font-family);
    font-size: var(--nx-font-size);
    transition: border-color .15s ease, box-shadow .15s ease;
}

body.nx-theme .form-control:focus {
    border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), 0.15);
    outline: none;
}

body.nx-theme label, body.nx-theme .control-label {
    color: var(--nx-text);
    font-weight: var(--nx-weight-button);
}

body.nx-theme .input-group-text {
    background: var(--nx-bg);
    border-color: var(--nx-border);
    color: var(--nx-muted);
    border-radius: var(--nx-radius-input);
}

/* ---------- Tables ---------- */
body.nx-theme .table {
    color: var(--nx-text);
    border-color: var(--nx-border);
}

body.nx-theme .table thead th,
body.nx-theme .table > thead > tr > th {
    background: transparent;
    border-bottom: max(var(--nx-border-width), 1px) solid var(--nx-border);
    color: var(--nx-muted);
    font-size: var(--nx-font-size-sm);
    font-weight: var(--nx-weight-heading);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

body.nx-theme .table td, body.nx-theme .table th { border-color: var(--nx-border); }

body.nx-theme .table-striped > tbody > tr:nth-of-type(odd),
body.nx-theme .table-striped tbody tr:nth-of-type(odd) {
    background: rgba(var(--nx-primary-rgb), 0.025);
}

body.nx-theme .table-hover tbody tr:hover {
    background: rgba(var(--nx-primary-rgb), 0.05);
}

body.nx-theme div.dataTables_wrapper,
body.nx-theme .table-container {
    background: var(--nx-card-bg);
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow);
    border: var(--nx-border-width) solid var(--nx-border);
    padding: calc(var(--nx-card-padding) * 0.5);
}

/* ---------- Status pills / labels / badges ---------- */
body.nx-theme .label, body.nx-theme .badge, body.nx-theme .status {
    border-radius: var(--nx-radius-badge);
    padding: 4px 12px;
    font-size: var(--nx-font-size-sm);
    font-weight: var(--nx-weight-button);
    text-transform: capitalize;
}

body.nx-theme .status-active, body.nx-theme .label-success, body.nx-theme .badge-success,
body.nx-theme .domain-status-active {
    background: var(--nx-pill-active-bg);
    color: var(--nx-pill-active-text);
}

body.nx-theme .status-pending, body.nx-theme .label-warning, body.nx-theme .badge-warning {
    background: var(--nx-pill-pending-bg);
    color: var(--nx-pill-pending-text);
}

body.nx-theme .status-suspended {
    background: var(--nx-pill-suspended-bg);
    color: var(--nx-pill-suspended-text);
}

body.nx-theme .status-cancelled, body.nx-theme .status-terminated,
body.nx-theme .label-danger, body.nx-theme .badge-danger {
    background: var(--nx-pill-cancelled-bg);
    color: var(--nx-pill-cancelled-text);
}

body.nx-theme .status-open, body.nx-theme .label-info, body.nx-theme .badge-info {
    background: var(--nx-pill-open-bg);
    color: var(--nx-pill-open-text);
}

body.nx-theme .status-answered, body.nx-theme .status-customer-reply {
    background: var(--nx-pill-answered-bg);
    color: var(--nx-pill-answered-text);
}

body.nx-theme .status-closed, body.nx-theme .label-default, body.nx-theme .badge-secondary {
    background: var(--nx-pill-closed-bg);
    color: var(--nx-pill-closed-text);
}

/* ---------- Alerts ---------- */
body.nx-theme .alert {
    border-radius: var(--nx-radius-card);
    border: none;
}

body.nx-theme .alert-success { background: var(--nx-pill-active-bg); color: var(--nx-pill-active-text); }
body.nx-theme .alert-danger  { background: var(--nx-pill-cancelled-bg); color: var(--nx-pill-cancelled-text); }
body.nx-theme .alert-warning { background: var(--nx-pill-pending-bg); color: var(--nx-pill-pending-text); }
body.nx-theme .alert-info    { background: var(--nx-pill-open-bg); color: var(--nx-pill-open-text); }

/* ---------- Pagination / tabs / breadcrumb ---------- */
body.nx-theme .pagination .page-link {
    border-color: var(--nx-border);
    color: var(--nx-text);
    background: var(--nx-card-bg);
}

body.nx-theme .pagination .page-item.active .page-link {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    color: var(--nx-on-primary);
}

body.nx-theme .nav-tabs { border-color: var(--nx-border); }
body.nx-theme .nav-tabs .nav-link { color: var(--nx-muted); border: none; }
body.nx-theme .nav-tabs .nav-link.active {
    color: var(--nx-primary);
    background: transparent;
    border-bottom: 2px solid var(--nx-primary);
}

body.nx-theme .breadcrumb {
    background: transparent;
    padding-left: 0;
    font-size: var(--nx-font-size-sm);
}
body.nx-theme .breadcrumb a { color: var(--nx-muted); }
body.nx-theme .breadcrumb .active { color: var(--nx-text); }

/* ---------- Modals / popovers ---------- */
body.nx-theme .modal-content {
    background: var(--nx-card-bg);
    color: var(--nx-text);
    border: none;
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow);
}

body.nx-theme .modal-header, body.nx-theme .modal-footer { border-color: var(--nx-border); }

/* ---------- Footer ---------- */
body.nx-theme #footer, body.nx-theme footer.footer {
    background: var(--nx-footer-bg);
    color: var(--nx-muted);
    border-top: var(--nx-border-width) solid var(--nx-border);
    flex-shrink: 0;
}

/* Mobile navigation drawer (header.tpl, viewinvoice.tpl). Replaces Bootstrap's
   .bg-white, which stayed white in dark mode. */
body.nx-theme .nx-mobile-navbar {
    background: var(--nx-card-bg);
}

body.nx-theme.nx-footer-hidden #footer,
body.nx-theme.nx-footer-hidden footer.footer { display: none; }

body.nx-theme.nx-footer-minimal #footer .row > div:not(:first-child) { display: none; }

/* ---------- Floating controls injected by the module ---------- */
body.nx-theme .nx-mode-toggle,
body.nx-theme .nx-sidebar-collapse {
    position: fixed;
    right: 20px;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    border: none;
    background: var(--nx-card-bg);
    color: var(--nx-text);
    box-shadow: var(--nx-shadow), 0 2px 8px rgba(0,0,0,0.12);
    cursor: pointer;
    z-index: 1050;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: var(--nx-font-size-xl);
    transition: transform .15s ease;
}

body.nx-theme .nx-mode-toggle { bottom: 20px; }
body.nx-theme .nx-sidebar-collapse { bottom: 74px; }
body.nx-theme .nx-mode-toggle:hover,
body.nx-theme .nx-sidebar-collapse:hover { transform: scale(1.08); color: var(--nx-primary); }
body.nx-theme .nx-sidebar-collapse i { transition: transform .15s ease; }
body.nx-theme .nx-sidebar-collapse.is-collapsed i { transform: rotate(180deg); }

@media (max-width: 991px) {
    body.nx-theme .nx-sidebar-collapse { display: none; }
}

/* ---------- Nexum Sidebar Layout Elements ---------- */
.nx-app-layout {
    font-family: var(--nx-font-family);
    background-color: var(--nx-bg);
    color: var(--nx-text);
    width: 100%;
}

.nx-app-layout > .nx-main-area {
    flex: 1 1 auto;
    min-width: 0;
}

.nx-sidebar {
    background: var(--nx-sidebar-bg);
    border-right: 1px solid var(--nx-border);
    display: flex;
    flex-direction: column;
    z-index: 100;
    overflow-x: hidden;
    transition: background 0.2s ease, border-color 0.2s ease, width 0.2s ease, flex-basis 0.2s ease, padding 0.2s ease, align-items 0.2s ease;
}

/* Expanded Sidebar Mode */
.nx-sidebar-mode-expanded .nx-sidebar {
    width: var(--nx-sidebar-width, 260px);
    flex: 0 0 var(--nx-sidebar-width, 260px);
    align-items: flex-start;
    padding: 22px 20px;
}
.nx-sidebar-mode-expanded .nx-sidebar-logo {
    justify-content: flex-start;
    width: 100%;
    padding-left: 8px;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.nx-sidebar-mode-expanded .nx-sidebar-nav {
    align-items: stretch;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.nx-sidebar-mode-expanded .nx-nav-item {
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    width: 100%;
    padding: 10px 14px;
    gap: 12px;
    border-radius: var(--nx-radius-md);
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.nx-sidebar-mode-expanded .nx-nav-label {
    display: block;
    text-align: left;
    font-size: var(--nx-font-size-md);
    padding: 0;
    word-break: normal;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

/* Compact Sidebar Mode (Icon top, label bottom) */
.nx-sidebar-mode-compact .nx-sidebar {
    width: var(--nx-sidebar-width-compact, 96px) !important;
    flex: 0 0 var(--nx-sidebar-width-compact, 96px) !important;
    align-items: center !important;
    padding: 22px 0 !important;
}
.nx-sidebar-mode-compact .nx-sidebar-logo {
    justify-content: center;
    width: auto;
    padding-left: 0;
}
.nx-sidebar-mode-compact .nx-sidebar-nav {
    align-items: center;
}
.nx-sidebar-mode-compact .nx-nav-item {
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 80px;
    padding: 11px 0;
    gap: 6px;
    border-radius: var(--nx-radius-card);
}
.nx-sidebar-mode-compact .nx-nav-label {
    display: block;
    text-align: center;
    font-size: 11.5px;
}

/* Icons Only Sidebar Mode */
.nx-sidebar-mode-icons .nx-sidebar {
    width: var(--nx-sidebar-width-icons, 72px);
    flex: 0 0 var(--nx-sidebar-width-icons, 72px);
    align-items: center;
    padding: 22px 0;
}
.nx-sidebar-mode-icons .nx-sidebar-logo {
    justify-content: center;
    width: auto;
    padding-left: 0;
}
.nx-sidebar-mode-icons .nx-sidebar-nav {
    align-items: center;
}
.nx-sidebar-mode-icons .nx-nav-item {
    flex-direction: column;
    align-items: center;
    justify-content: center;
    width: 52px;
    padding: 10px 0;
    gap: 0;
    border-radius: var(--nx-radius-md);
}
.nx-sidebar-mode-icons .nx-nav-label {
    display: none;
}

/* Collapse Sidebar Fixes */
.nx-sidebar-mode-compact .nx-sidebar,
.nx-sidebar-mode-compact .nx-sidebar-top,
.nx-sidebar-mode-icons .nx-sidebar,
.nx-sidebar-mode-icons .nx-sidebar-top {
    overflow: visible;
}
.nx-sidebar-mode-compact .nx-sidebar-submenu-list,
.nx-sidebar-mode-icons .nx-sidebar-submenu-list,
.nx-sidebar-mode-compact .nx-sidebar-submenu-collapse,
.nx-sidebar-mode-icons .nx-sidebar-submenu-collapse {
    display: none;
}
.nx-sidebar-mode-compact .nx-nav-arrow,
.nx-sidebar-mode-icons .nx-nav-arrow {
    display: none;
}

html.nx-dark body .nx-sidebar {
    background: var(--nx-sidebar-bg);
    border-right: 1px solid var(--nx-border);
}

.nx-sidebar-logo {
    height: 44px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Logo image sizing lives in CSS (NOT JS) so it's correct on first paint and
   never flashes oversized. JS only swaps the src (light/dark, full/compact). */
.nx-sidebar-logo .nx-logo-img,
.nx-sidebar-logo img {
    max-height: var(--nx-logo-height, 36px);
    width: auto;
    max-width: 100%;
    object-fit: contain;
}
.nx-sidebar-mode-compact .nx-sidebar-logo .nx-logo-compact,
.nx-sidebar-mode-icons .nx-sidebar-logo .nx-logo-compact {
    max-height: 44px;
    max-width: 44px;
    width: 44px;
    height: auto;
}
.nx-sidebar-mode-icons .nx-sidebar-logo .nx-logo-compact {
    max-height: 34px;
    max-width: 34px;
    width: 34px;
}
/* Topbar logo (top layout) */
.nx-topbar-left img,
.nx-logo-top {
    max-height: var(--nx-logo-height, 36px);
    width: auto;
    object-fit: contain;
}

body.nx-theme .nx-sidebar-nav {
    margin-top: 0;
}

.nx-logo-mark {
    width: 44px;
    height: 44px;
    border-radius: 13px;
    background: linear-gradient(140deg, var(--nx-secondary), var(--nx-primary));
    box-shadow: 0 6px 16px rgba(var(--nx-primary-rgb), 0.35);
    color: #ffffff;
    font-size: 20px;
    font-weight: 800;
    display: flex;
    align-items: center;
    justify-content: center;
}

.nx-sidebar-nav {
    display: flex;
    flex-direction: column;
    gap: 6px;
    width: 100%;
    align-items: center;
}

.nx-nav-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    width: 80px;
    padding: 11px 0;
    border-radius: var(--nx-radius-card);
    cursor: pointer;
    text-decoration: none;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}

.nx-nav-icon-wrapper {
    width: 44px;
    height: 44px;
    border-radius: 13px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--nx-bg);
    color: var(--nx-muted);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}

html.nx-dark body .nx-nav-icon-wrapper {
    background: var(--nx-card-bg);
    color: var(--nx-muted);
}

.nx-nav-label {
    font-size: 11.5px;
    letter-spacing: 0.1px;
    font-weight: 600;
    color: var(--nx-sidebar-text);
    text-align: center;
    line-height: 1.25;
    word-break: break-word;
    padding: 0 4px;
    transition: color 0.15s ease;
}

html.nx-dark body .nx-nav-label {
    color: var(--nx-muted);
}

/* Inactive Hover state */
.nx-nav-item:hover .nx-nav-icon-wrapper {
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
}

html.nx-dark body .nx-nav-item:hover .nx-nav-icon-wrapper {
    background: rgba(var(--nx-primary-rgb), 0.12);
    color: var(--nx-primary);
}

.nx-nav-item:hover .nx-nav-label {
    color: var(--nx-primary);
}

html.nx-dark body .nx-nav-item:hover .nx-nav-label {
    color: var(--nx-primary);
}

/* Active State */
.nx-nav-item.active .nx-nav-icon-wrapper {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
    box-shadow: 0 6px 14px rgba(var(--nx-primary-rgb), 0.35);
}

html.nx-dark body .nx-nav-item.active .nx-nav-icon-wrapper {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
    box-shadow: 0 6px 14px rgba(var(--nx-primary-rgb), 0.45);
}

.nx-nav-item.active .nx-nav-label {
    color: var(--nx-primary);
    font-weight: 700;
}

html.nx-dark body .nx-nav-item.active .nx-nav-label {
    color: var(--nx-primary);
    font-weight: 700;
}

.nx-sidebar-footer {
    border-top: none;
    padding-top: 0;
    display: flex;
    justify-content: center;
    width: 100%;
}

.nx-user-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: linear-gradient(140deg, #f59e0b, #ea580c);
    color: #ffffff;
    font-weight: 700;
    font-size: 13px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-transform: uppercase;
    flex-shrink: 0;
}

.nx-user-info {
    display: none;
}

/* ---------- Dark Mode Toggle Switch ---------- */
.nx-topbar-mode-toggle {
    width: 44px;
    height: 24px;
    border-radius: var(--nx-radius-badge);
    background: rgba(var(--nx-muted-rgb, 100, 116, 139), 0.85);
    position: relative;
    cursor: pointer;
    transition: background-color .25s ease;
    flex-shrink: 0;
    border: none;
    padding: 0;
}

.nx-topbar-mode-toggle.active {
    background: var(--nx-primary);
}

.nx-topbar-mode-toggle:focus-visible {
    outline: 2px solid var(--nx-primary);
    outline-offset: 2px;
}

.nx-toggle-thumb {
    position: absolute;
    top: 3px;
    left: 3px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--nx-card-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--nx-muted);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18);
    transition: transform .25s ease, color .25s ease;
}

.nx-toggle-thumb .material-symbols-rounded {
    font-size: 12px;
    line-height: 1;
}

.nx-toggle-thumb .nx-toggle-ico-light {
    display: inline-flex;
}
.nx-toggle-thumb .nx-toggle-ico-dark {
    display: none;
    font-variation-settings: 'FILL' 1;
}
html.nx-dark body .nx-toggle-thumb .nx-toggle-ico-light {
    display: none;
}
html.nx-dark body .nx-toggle-thumb .nx-toggle-ico-dark {
    display: inline-flex;
}

.nx-topbar-mode-toggle.active .nx-toggle-thumb {
    transform: translateX(20px);
    background: var(--nx-on-primary);
    color: var(--nx-primary);
}

/* ---------- Main Column and Topbar ---------- */
.nx-main-area {
    min-width: 0;
    background: var(--nx-bg);
}

.nx-topbar {
    height: var(--nx-header-height);
    background: var(--nx-header-bg);
    border-bottom: 1px solid var(--nx-border);
    padding: 0 var(--nx-topbar-gutter);
    flex-shrink: 0;
}

.nx-page-category-label {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
}

.nx-topbar-right {
    display: flex;
    align-items: center;
    gap: 8px;
}

.nx-topbar-divider {
    width: 1px;
    height: 24px;
    background: var(--nx-border);
    flex-shrink: 0;
}

html.nx-dark body .nx-topbar-divider {
    background: var(--nx-border);
}

.nx-logo-light-mode {
    display: inline-block;
}
.nx-logo-dark-mode {
    display: none;
}
html.nx-dark body .nx-logo-light-mode {
    display: none;
}
html.nx-dark body .nx-logo-dark-mode {
    display: inline-block;
}

.nx-topbar-link {
    display: flex;
    align-items: center;
    gap: 7px;
    color: var(--nx-text);
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    text-decoration: none;
    background: transparent;
    border: none;
    padding: 6px 6px;
    border-radius: var(--nx-radius-md);
    box-shadow: none;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
    overflow: visible;
}

html.nx-dark body .nx-topbar-link {
    color: var(--nx-text);
}

.nx-topbar-link:hover {
    color: var(--nx-primary);
}

/* Fix input group focus border spread */
.input-group .form-control:focus {
    box-shadow: none !important;
    border-color: var(--nx-border) !important;
}

.input-group:focus-within .form-control {
    border-color: var(--nx-primary) !important;
}

.input-group:focus-within .btn {
    border-color: var(--nx-primary) !important;
}

/* Horizontal Top Navigation Links */
.nx-topbar-nav-middle .nx-navbar-link::after {
    display: none;
    content: none;
}
.nx-navbar-link {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-text);
    text-decoration: none;
    padding: 8px 12px;
    border-radius: var(--nx-radius-md);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}

.nx-navbar-link.active {
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.08);
}

html.nx-dark body .nx-navbar-link.active {
    background: rgba(var(--nx-primary-rgb), 0.15);
}

.nx-navbar-link:hover {
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.05);
}

.nx-navbar-link:hover span,
.nx-navbar-link.active span {
    color: var(--nx-primary) !important;
}

/* Auto open dropdowns on hover */
@media (min-width: 768px) {
    .nx-top-nav-dropdown:hover .dropdown-menu {
        display: block;
        margin-top: 0;
    }
}

.nx-top-nav-dropdown .dropdown-menu::before {
    content: "";
    position: absolute;
    top: -15px;
    left: 0;
    right: 0;
    height: 15px;
    background: transparent;
    z-index: -1;
}

/* Extra top padding so the page heading is not crowded against the nav row.
   The horizontal and bottom padding stay on the admin setting. */
.nx-content-wrapper {
    padding: calc(var(--nx-content-padding) * 1.25) var(--nx-content-padding) var(--nx-content-padding);
    min-width: 0;
}

/* WHMCS appends its "Powered by" line via ClientAreaFooterOutput, so it lands
   as the last child of the content area with no spacing of its own and sat
   flush against whatever section ended the page. Matching the last child
   rather than a class keeps it working whatever element WHMCS emits. */
body.nx-theme .nx-content-container > :last-child:not(.row):not(div[id]):not(form) {
    margin-bottom: 0;
}
body.nx-theme .nx-content-container > .text-center:last-child,
body.nx-theme .nx-content-container > p:last-child {
    margin-top: var(--nx-space-8, 32px);
    padding-top: var(--nx-space-5, 20px);
    color: var(--nx-muted);
    font-size: var(--nx-font-size-sm);
}
/* The WHMCS link inside it kept Bootstrap's default blue, which had nothing to
   do with the palette. It is a credit line, so it sits at the same weight as
   the text around it and only picks up the brand colour on hover. */
body.nx-theme .nx-content-container > .text-center:last-child a,
body.nx-theme .nx-content-container > p:last-child a {
    color: var(--nx-muted);
    text-decoration: none;
}
body.nx-theme .nx-content-container > .text-center:last-child a:hover,
body.nx-theme .nx-content-container > p:last-child a:hover {
    color: var(--nx-primary);
}

.nx-sidebar-mode-compact .nx-content-wrapper,
.nx-sidebar-mode-icons .nx-content-wrapper {
    padding: calc(var(--nx-content-padding) * 0.6);
}

/* Sidebar Logo Toggles for Compact States */
.nx-sidebar-mode-compact .nx-logo-full,
.nx-sidebar-mode-icons .nx-logo-full {
    display: none;
}
.nx-sidebar-mode-compact .nx-logo-compact,
.nx-sidebar-mode-icons .nx-logo-compact {
    display: block;
}

/* Pages that place a Bootstrap .row directly in this container (services,
   domains, invoices) rely on a gutter to absorb the row's -15px side margins.
   The topbar rows opt out below -- they pad themselves. */
.nx-content-container {
    max-width: var(--nx-container-width);
    margin: 0 auto;
    width: 100%;
    padding-left: 15px;
    padding-right: 15px;
}

.nx-topbar .nx-content-container,
.nx-topbar-expanded-top .nx-content-container,
.nx-topbar-expanded-bottom .nx-content-container {
    padding-left: 0;
    padding-right: 0;
}

/* WHMCS injects the development-licence notice through $headeroutput, so it
   cannot be removed from the template. It is matched on the inline background
   it ships with. Remove this rule once a production licence is in place. */
body.nx-theme div[style*="#ffffd2"] {
    display: none;
}

.nx-page-title {
    font-size: var(--nx-font-size-h1);
    font-weight: 700;
    color: var(--nx-text);
    letter-spacing: -0.01em;
}

.nx-page-subtitle {
    font-size: var(--nx-font-size-sm);
    color: var(--nx-muted);
}

/* ---------- Redesigned Count Cards ---------- */
.nx-stat-card {
    background: var(--nx-card-bg);
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow);
    padding: 20px;
    display: flex;
    align-items: center;
    gap: 16px;
    text-decoration: none;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.nx-stat-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
}

.nx-stat-icon-badge {
    width: 32px;
    height: 32px;
    border-radius: var(--nx-radius-md);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: var(--nx-font-size-xl);
    flex-shrink: 0;
}

.nx-icon-services {
    background: rgba(var(--nx-primary-rgb), 0.12);
    color: var(--nx-primary);
}

html.nx-dark body .nx-icon-services {
    background: rgba(var(--nx-primary-rgb), 0.20);
}

.nx-icon-domains {
    background: rgba(14, 165, 233, 0.12);
    color: #0ea5e9;
}

html.nx-dark body .nx-icon-domains {
    background: rgba(14, 165, 233, 0.20);
}

.nx-icon-billing {
    background: rgba(225, 29, 72, 0.12);
    color: #e11d48;
}

html.nx-dark body .nx-icon-billing {
    background: rgba(225, 29, 72, 0.20);
}

.nx-icon-tickets {
    background: rgba(217, 119, 6, 0.12);
    color: #d97706;
}

html.nx-dark body .nx-icon-tickets {
    background: rgba(217, 119, 6, 0.20);
}

.nx-stat-label {
    font-size: var(--nx-font-size-sm);
    font-weight: 600;
    color: var(--nx-muted);
    text-transform: uppercase;
    letter-spacing: 0.03em;
}

.nx-stat-value {
    font-size: 24px;
    font-weight: 700;
    color: var(--nx-text);
    line-height: 1.2;
}

/* ---------- Status Filter Chips ---------- */
.nx-filter-chips {
    gap: 8px;
}

.nx-filter-chip {
    border-radius: var(--nx-radius-badge);
    padding: 6px 16px;
    font-size: 12.5px;
    font-weight: 600;
    border: none;
    box-shadow: none;
    background-color: var(--nx-border);
    color: var(--nx-muted);
    transition: background 0.15s ease, color 0.15s ease;
}

.nx-filter-chip.active {
    background-color: var(--nx-primary) !important;
    color: #fff !important;
}

/* ---------- Profile Dropdown Styling ---------- */
.btn-profile {
    background: transparent;
    border: none;
    padding: 0;
    color: var(--nx-text);
    font-weight: 600;
}

.btn-profile:focus, .btn-profile:active {
    box-shadow: none !important;
}

.gap-2 {
    gap: 8px;
}

/* ---------- Responsive Sidebar & Mobile Buttons ---------- */
.nx-mobile-toggle-btn,
.nx-sidebar-close-btn {
    background: transparent;
    border: none;
    color: var(--nx-text);
    font-size: var(--nx-font-size-h3);
    padding: 0;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Suppress the resting focus ring on mouse click, but keep a visible one for
   keyboard users -- these two buttons previously removed it outright. */
.nx-mobile-toggle-btn:focus,
.nx-sidebar-close-btn:focus {
    box-shadow: none;
    outline: none;
}
.nx-mobile-toggle-btn:focus-visible,
.nx-sidebar-close-btn:focus-visible {
    outline: 2px solid var(--nx-primary);
    outline-offset: 2px;
}

@media (max-width: 991px) {
    .nx-sidebar {
        position: fixed;
        top: 0;
        left: -280px; /* Initially off-screen */
        width: 260px;
        height: 100vh;
        z-index: 1050;
        transition: left 0.25s ease;
        box-shadow: 4px 0 24px rgba(15,15,20,0.12);
        padding: 20px 14px;
    }
    
    .nx-sidebar.open {
        left: 0;
    }
    
    .nx-topbar {
        padding: 0 var(--nx-topbar-gutter);
    }

    .nx-content-wrapper {
        padding: calc(var(--nx-content-padding) * 0.75) 16px;
    }
}

/* ---------- Home panels grid rhythm ---------- */
body.nx-theme .client-home-panels .card { height: calc(100% - var(--nx-card-gap)); }

/* ---------- Scrollbar (webkit) ---------- */
body.nx-theme ::-webkit-scrollbar { width: 10px; height: 10px; }
body.nx-theme ::-webkit-scrollbar-track { background: var(--nx-bg); }
body.nx-theme ::-webkit-scrollbar-thumb {
    background: var(--nx-border);
    border-radius: var(--nx-radius-md);
}
body.nx-theme ::-webkit-scrollbar-thumb:hover { background: var(--nx-muted); }

/* ---------- Comprehensive Dark Mode Overrides ---------- */
html.nx-dark body {
    background-color: var(--nx-bg);
    color: var(--nx-text);
}

html.nx-dark body .nx-main-area {
    background-color: var(--nx-bg);
}

html.nx-dark body .nx-content-wrapper {
    background-color: var(--nx-bg);
}

html.nx-dark body .nx-topbar {
    background-color: var(--nx-card-bg);
    border-bottom-color: var(--nx-border);
}

html.nx-dark body .nx-topbar-link {
    color: var(--nx-muted);
}

html.nx-dark body .nx-topbar-link:hover {
    color: var(--nx-primary);
}

html.nx-dark body .nx-page-category-label {
    color: var(--nx-muted);
}

html.nx-dark body .nx-topbar-divider {
    background: var(--nx-border);
}

html.nx-dark body .card,
html.nx-dark body .list-group-item,
html.nx-dark body .dropdown-menu {
    background-color: var(--nx-card-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}

html.nx-dark body .dropdown-item {
    color: var(--nx-text);
    transition: background 0.15s ease, color 0.15s ease;
}

html.nx-dark body .dropdown-item:hover,
html.nx-dark body .dropdown-item:focus {
    background-color: rgba(var(--nx-primary-rgb), 0.14);
    color: var(--nx-text);
}

html.nx-dark body .dropdown-divider {
    border-top-color: var(--nx-border);
}

html.nx-dark body .card-header,
html.nx-dark body .card-footer {
    background-color: rgba(255, 255, 255, 0.03);
    border-color: var(--nx-border);
    color: var(--nx-text);
}

html.nx-dark body input,
html.nx-dark body select,
html.nx-dark body textarea {
    background-color: var(--nx-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
}

html.nx-dark body input:focus, 
html.nx-dark body select:focus, 
html.nx-dark body textarea:focus {
    border-color: var(--nx-primary);
    box-shadow: 0 0 0 2px rgba(var(--nx-primary-rgb), 0.25);
}

html.nx-dark body table,
html.nx-dark body th,
html.nx-dark body td {
    border-color: var(--nx-border);
    color: var(--nx-text);
}

html.nx-dark body .table th {
    background-color: var(--nx-card-bg);
}

/* html.nx-dark body a {
    color: var(--nx-primary);
} */

/* html.nx-dark body a:hover {
    color: var(--nx-primary-hover);
} */

html.nx-dark body .text-muted,
html.nx-dark body p.text-muted,
html.nx-dark body span.text-muted,
html.nx-dark body small.text-muted {
    color: var(--nx-muted);
}

/* ---------- Sidebar Submenu Flyouts ---------- */
body.nx-theme .nx-nav-dropdown-wrapper .dropdown-menu {
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
}
body.nx-theme .nx-nav-dropdown-wrapper .dropdown-item {
    background: transparent;
    color: var(--nx-text);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body.nx-theme .nx-nav-dropdown-wrapper .dropdown-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.06);
    color: var(--nx-primary);
}
/* Dark-mode dropdown flyout inherits the var(--nx-*) rules above, which
   auto-swap under html.nx-dark body — no hardcoded overrides needed. */

/* Hide bootstrap dropdown toggle carets in sidebar */
body.nx-theme .nx-sidebar .dropdown-toggle::after {
    display: none !important;
}

/* Sidebar word-wrap wrapping */
body.nx-theme .sidebar .list-group-item,
body.nx-theme .cart-sidebar .list-group-item,
body.nx-theme .list-group-item-action,
body.nx-theme .nx-sidebar-nav .nx-nav-label {
    white-space: normal;
    word-break: break-word;
    text-overflow: clip;
    overflow: visible;
}

/* ---------- Expanded Accordion Sidebar Styles ---------- */
.nx-sidebar-mode-expanded .d-none-compact {
    display: block !important;
}
.nx-sidebar-mode-expanded .d-block-compact {
    display: none !important;
}
.nx-sidebar-mode-compact .d-none-compact,
.nx-sidebar-mode-icons .d-none-compact {
    display: none !important;
}
.nx-sidebar-mode-compact .d-block-compact,
.nx-sidebar-mode-icons .d-block-compact {
    display: block !important;
}

/* Expanded Sidebar: Nav Items & Icons */
.nx-sidebar-mode-expanded .nx-nav-item {
    background: transparent;
    color: var(--nx-sidebar-text);
}
.nx-sidebar-mode-expanded .nx-nav-icon-wrapper {
    background: transparent;
    color: var(--nx-sidebar-text);
    width: 24px;
    height: 24px;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.nx-sidebar-mode-expanded .nx-nav-label {
    color: var(--nx-sidebar-text);
    font-weight: 600;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}

/* Inactive Hover state */
.nx-sidebar-mode-expanded .nx-nav-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.04);
    color: var(--nx-primary);
}
.nx-sidebar-mode-expanded .nx-nav-item:hover .nx-nav-icon-wrapper {
    color: var(--nx-primary);
}
.nx-sidebar-mode-expanded .nx-nav-item:hover .nx-nav-label {
    color: var(--nx-primary);
}

/* Active & Expanded Accordion State */
.nx-sidebar-mode-expanded .nx-nav-item.active,
.nx-sidebar-mode-expanded .nx-nav-item[aria-expanded="true"] {
    background: rgba(var(--nx-primary-rgb), 0.08) !important;
    color: var(--nx-primary) !important;
}
.nx-sidebar-mode-expanded .nx-nav-item.active .nx-nav-icon-wrapper,
.nx-sidebar-mode-expanded .nx-nav-item[aria-expanded="true"] .nx-nav-icon-wrapper {
    color: var(--nx-primary) !important;
}
.nx-sidebar-mode-expanded .nx-nav-item.active .nx-nav-label,
.nx-sidebar-mode-expanded .nx-nav-item[aria-expanded="true"] .nx-nav-label {
    color: var(--nx-primary) !important;
    font-weight: 700 !important;
}

/* Arrow indicator rotate */
.nx-sidebar-mode-expanded .nx-nav-item .nx-nav-arrow {
    color: var(--nx-muted);
    transition: transform 0.2s ease, color 0.15s ease;
}
.nx-sidebar-mode-expanded .nx-nav-item[aria-expanded="true"] .nx-nav-arrow {
    transform: rotate(180deg);
    color: var(--nx-primary);
}

/* Submenu layout */
.nx-sidebar-mode-expanded .nx-sidebar-submenu-list {
    border-left: 1.5px solid var(--nx-border);
}
.nx-sidebar-mode-expanded .nx-sidebar-submenu-item {
    color: var(--nx-sidebar-text);
    text-decoration: none;
}
/* Child icons, matching the top navbar's dropdown items — the label can wrap to
   two lines ("Register a New Domain"), so the icon stays put at the top rather
   than centring against the whole block. */
.nx-sidebar-submenu-item .nx-sidebar-submenu-ico {
    font-size: 19px;
    line-height: 1;
    flex-shrink: 0;
    margin-right: 10px;
    color: var(--nx-primary);
    align-self: flex-start;
    margin-top: 1px;
}
.nx-sidebar-submenu-item.active .nx-sidebar-submenu-ico,
.nx-sidebar-submenu-item:hover .nx-sidebar-submenu-ico {
    color: var(--nx-primary);
}
.nx-sidebar-mode-expanded .nx-sidebar-submenu-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
}
.nx-sidebar-mode-expanded .nx-sidebar-submenu-item.active {
    background: rgba(var(--nx-primary-rgb), 0.08) !important;
    color: var(--nx-primary) !important;
    font-weight: 700 !important;
}

/* Profile Card Customizations */
.nx-sidebar-profile-card {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    flex-wrap: nowrap;
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    border-radius: var(--nx-radius-md);
    padding: 10px 12px;
}
.nx-sidebar-profile-card a {
    color: var(--nx-muted);
    transition: color 0.15s ease;
}
.nx-sidebar-profile-card a:hover {
    color: #ef4444;
}
html.nx-dark body .nx-sidebar-profile-card {
    background: var(--nx-card-bg);
    border-color: var(--nx-border);
}
html.nx-dark body .nx-sidebar-profile-card span {
    color: var(--nx-text);
}
html.nx-dark body .nx-sidebar-profile-card span + span {
    color: var(--nx-muted);
}
html.nx-dark body .nx-sidebar-profile-card a {
    color: var(--nx-muted);
}
html.nx-dark body .nx-sidebar-profile-card a:hover {
    color: #f04438;
}
html.nx-dark body .nx-logo-text-span {
    color: #ffffff;
}

/* Dark Mode Expanded Sidebar Elements */
html.nx-dark body.nx-sidebar-mode-expanded .nx-nav-label {
    color: var(--nx-text);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-nav-icon-wrapper {
    color: var(--nx-muted);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-nav-item:hover {
    background: rgba(255, 255, 255, 0.03);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-nav-item.active,
html.nx-dark body.nx-sidebar-mode-expanded .nx-nav-item[aria-expanded="true"] {
    background: rgba(var(--nx-primary-rgb), 0.15);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-sidebar-submenu-list {
    border-left-color: var(--nx-border);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-sidebar-submenu-item {
    color: var(--nx-muted);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-sidebar-submenu-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.12);
    color: var(--nx-primary);
}
html.nx-dark body.nx-sidebar-mode-expanded .nx-sidebar-submenu-item.active {
    background: rgba(var(--nx-primary-rgb), 0.15);
    color: var(--nx-primary);
}


/* Request Cancellation Button.
   Was four rules — two light literals plus a html.nx-dark body pair repeating the
   same design in darker hex. Mixing the danger token against the current
   surface covers both modes with one rule, and follows the admin palette. */
body.nx-theme .nx-btn-cancel {
    border: 1px solid color-mix(in srgb, var(--nx-danger) 30%, var(--nx-border));
    background: color-mix(in srgb, var(--nx-danger) 6%, var(--nx-card-bg));
    color: var(--nx-danger);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body.nx-theme .nx-btn-cancel:hover {
    background: color-mix(in srgb, var(--nx-danger) 12%, var(--nx-card-bg));
    border-color: color-mix(in srgb, var(--nx-danger) 50%, var(--nx-border));
    color: var(--nx-danger);
}

/* Overdue Invoice Alert.
   The whole block was fixed amber (#fed7aa / #ea580c / #fffcf6 / #7c2d12), so
   it stayed a bright card on dark and ignored the admin palette. Mixed from
   --nx-warning against the current surface instead. */
.nx-invoice-alert {
    border-radius: var(--nx-radius-card);
    border: 1px solid color-mix(in srgb, var(--nx-warning) 28%, var(--nx-border));
    border-left: 6px solid var(--nx-warning);
    background: color-mix(in srgb, var(--nx-warning) 8%, var(--nx-card-bg));
    padding: 16px 24px;
    gap: 16px;
    flex-wrap: wrap;
    display: flex;
    align-items: center;
    justify-content: space-between;
}
.nx-invoice-alert-icon {
    width: 40px;
    height: 40px;
    border-radius: var(--nx-radius-md);
    background: color-mix(in srgb, var(--nx-warning) 18%, var(--nx-card-bg));
    color: var(--nx-warning);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}
.nx-invoice-alert-title {
    font-size: 14.5px;
    font-weight: 800;
    color: var(--nx-text);
}
.nx-invoice-alert-subtitle {
    font-size: 12.5px;
    font-weight: 600;
    color: var(--nx-muted);
    margin-top: 2px;
}
.nx-invoice-alert-btn {
    border-radius: var(--nx-radius-md);
    background: var(--nx-warning);
    color: #fff;
    font-size: var(--nx-font-size-md);
    height: 40px;
    padding: 0 20px;
    gap: 8px;
    border: none;
    box-shadow: 0 4px 12px color-mix(in srgb, var(--nx-warning) 22%, transparent);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
.nx-invoice-alert-btn:hover {
    background: color-mix(in srgb, var(--nx-warning) 85%, #000);
    color: #fff;
}
/* The html.nx-dark body block that used to sit here repeated the same design in
   darker hex. The color-mix values above already resolve per mode. */

/* Markdown Editor Dark Mode */
/* ---------- Markdown editor (ticket / reply forms) ----------
   These were scoped to html.nx-dark body, so light mode kept the vendor's own
   #f5f5f5 toolbar, #eee textarea and #ddd dashed borders — none of which
   follow the palette. They are token-driven for both modes now.

   all.min.css addresses the parts with a child combinator
   (`.md-editor > textarea`, `.md-editor > .md-header`), so the selectors here
   match that shape rather than relying on load order alone. */
body.nx-theme .md-editor {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    overflow: hidden;
}
body.nx-theme .md-editor.active {
    border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .15);
}
body.nx-theme .md-editor > textarea,
body.nx-theme .md-editor textarea {
    background-color: var(--nx-card-bg);
    color: var(--nx-text);
    border-top: 1px solid var(--nx-border);
    border-bottom: 1px solid var(--nx-border);
    font-family: var(--nx-font-family);
    font-size: var(--nx-font-size);
    font-weight: 500;
    padding: 14px;
}
body.nx-theme .md-editor > textarea:focus,
body.nx-theme .md-editor textarea:focus {
    background-color: var(--nx-card-bg);
    color: var(--nx-text);
}
body.nx-theme .md-editor > textarea::placeholder {
    color: var(--nx-muted);
}
body.nx-theme .md-editor > .md-header,
body.nx-theme .md-editor .md-header {
    background-color: var(--nx-bg);
    border-bottom: 1px solid var(--nx-border);
    padding: 8px 12px;
}
body.nx-theme .md-editor .md-footer {
    background-color: var(--nx-bg);
    border-top: 1px solid var(--nx-border);
    color: var(--nx-muted);
    padding: 6px 12px;
    font-size: var(--nx-font-size-sm);
}
body.nx-theme .md-editor .btn-default {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
    font-weight: 700;
    font-size: 13px;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body.nx-theme .md-editor .btn-default:hover {
    background-color: var(--nx-bg);
    border-color: var(--nx-primary);
    color: var(--nx-primary);
}
body.nx-theme .md-editor .btn-default.active,
body.nx-theme .md-editor .btn-group .btn-default.active {
    background-color: var(--nx-primary);
    color: #fff;
    border-color: var(--nx-primary);
}
body.nx-theme .md-editor > .md-preview,
body.nx-theme .md-editor .md-preview {
    background-color: var(--nx-card-bg);
    color: var(--nx-text);
    border-top: 1px solid var(--nx-border);
    border-bottom: 1px solid var(--nx-border);
    padding: 14px;
}
/* Fullscreen mode pins itself to #fff !important in the vendor bundle. */
body.nx-theme .md-editor.md-fullscreen-mode {
    background: var(--nx-bg) !important;
}
body.nx-theme .md-editor.md-fullscreen-mode .md-input,
body.nx-theme .md-editor.md-fullscreen-mode .md-preview {
    background: var(--nx-card-bg) !important;
    color: var(--nx-text) !important;
}
body.nx-theme .md-editor .md-controls .md-control {
    color: var(--nx-muted);
}
body.nx-theme .md-editor .md-controls .md-control:hover {
    color: var(--nx-primary);
}

html.nx-dark body .nx-plus-badge {
    border-color: var(--nx-card-bg);
}

/* ---------- Top Layout Navigation Row ---------- */
.nx-navbar-row {
    height: 62px;
    background: var(--nx-header-bg);
    border-bottom: 1px solid var(--nx-border);
    padding: 0 40px;
    display: flex;
    align-items: center;
    transition: background 0.2s ease, border-color 0.2s ease;
}

html.nx-dark body .nx-navbar-row {
    background: var(--nx-card-bg);
    border-bottom: 1px solid var(--nx-border);
}

.nx-navbar-nav-left {
    display: flex;
    align-items: center;
    gap: 28px;
}

.nx-navbar-link {
    font-size: 14.5px;
    font-weight: 600;
    color: var(--nx-text);
    text-decoration: none;
    padding: 18px 0;
    position: relative;
    transition: color 0.15s ease;
}

.nx-navbar-link:hover,
.nx-navbar-link.active {
    color: var(--nx-primary) !important;
}

/* Bottom line indicator on hover/active */
.nx-navbar-link::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 3px;
    background: var(--nx-primary);
    transform: scaleX(0);
    transform-origin: right;
    transition: transform 0.2s ease;
}

.nx-navbar-link.active::after,
.nx-navbar-link:hover::after {
    transform: scaleX(1);
    transform-origin: left;
}

/* Call to Action Button */
.nx-navbar-btn-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 8px 18px;
    border-radius: var(--nx-radius-md);
    font-size: 13px;
    font-weight: 700;
    color: #ffffff;
    background: var(--nx-primary);
    box-shadow: 0 4px 12px rgba(var(--nx-primary-rgb), 0.25);
    text-decoration: none;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}

.nx-navbar-btn-cta:hover {
    transform: translateY(-1px);
    box-shadow: 0 6px 16px rgba(var(--nx-primary-rgb), 0.35);
    filter: brightness(1.05);
}

/* ---------- Promotional Banner Slider ---------- */
.nx-banner-slider {
    position: relative;
    border-radius: var(--nx-radius-card);
    overflow: hidden;
    box-shadow: var(--nx-shadow);
}
.nx-banner-track {
    position: relative;
}
.nx-banner-slide {
    display: none;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 24px 40px;
}
.nx-banner-slide.active {
    display: flex;
    animation: nxBannerFade 0.5s ease;
}
@keyframes nxBannerFade {
    from { opacity: 0; }
    to   { opacity: 1; }
}
.nx-banner-content {
    position: relative;
    z-index: 2;
    max-width: 60%;
}
.nx-banner-badge {
    display: inline-block;
    font-size: var(--nx-font-size-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    padding: 5px 12px;
    border-radius: var(--nx-radius-badge);
    background: rgba(255, 255, 255, 0.16);
    border: 1px solid rgba(255, 255, 255, 0.25);
    margin-bottom: 14px;
}
.nx-banner-title {
    font-size: 30px;
    font-weight: 800;
    line-height: 1.15;
    margin: 0 0 10px;
    color: inherit;
}
.nx-banner-subtitle {
    font-size: var(--nx-font-size-lg);
    opacity: 0.85;
    margin: 0 0 20px;
    color: inherit;
}
.nx-banner-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: rgba(255, 255, 255, 0.95);
    color: #0b1f3a;
    font-weight: 700;
    font-size: var(--nx-font-size);
    padding: 11px 22px;
    border-radius: var(--nx-radius-button);
    text-decoration: none;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.nx-banner-btn:hover {
    transform: translateY(-1px);
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.22);
}
.nx-banner-media {
    flex-shrink: 0;
    max-width: 40%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 2;
}
.nx-banner-media img {
    max-height: 85%;
    width: auto;
    max-width: 100%;
    object-fit: contain;
}
.nx-banner-deco {
    position: absolute;
    top: 0;
    right: 0;
    width: 45%;
    height: 100%;
    background-image: repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.05) 0 2px, transparent 2px 16px);
    z-index: 1;
    pointer-events: none;
}
.nx-banner-dots {
    position: absolute;
    bottom: 14px;
    left: 40px;
    display: flex;
    gap: 8px;
    z-index: 3;
}
.nx-banner-dot {
    width: 8px;
    height: 8px;
    border-radius: var(--nx-radius-badge);
    border: none;
    padding: 0;
    background: rgba(255, 255, 255, 0.4);
    cursor: pointer;
    transition: width 0.2s ease, background 0.2s ease;
}
.nx-banner-dot.active {
    width: 22px;
    background: #fff;
}
.nx-banner-arrow {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 34px;
    height: 34px;
    border-radius: 50%;
    border: none;
    background: rgba(255, 255, 255, 0.16);
    color: #fff;
    cursor: pointer;
    z-index: 3;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s ease;
}
.nx-banner-arrow:hover { background: rgba(255, 255, 255, 0.3); }
.nx-banner-prev { left: 12px; }
.nx-banner-next { right: 12px; }

/* Dismiss button */
.nx-banner-close {
    position: absolute;
    top: 14px;
    right: 18px;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: none;
    background: rgba(255, 255, 255, 0.16);
    color: #fff;
    font-size: 20px;
    font-weight: 400;
    line-height: 24px;
    cursor: pointer;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s ease, transform 0.15s ease;
}
.nx-banner-close:hover {
    background: rgba(255, 255, 255, 0.3);
    transform: scale(1.05);
}

@media (max-width: 767px) {
    .nx-banner-slide { padding: 24px; flex-direction: column; text-align: center; min-height: 0; }
    .nx-banner-content { max-width: 100%; }
    .nx-banner-title { font-size: var(--nx-font-size-h2); }
    .nx-banner-media { max-width: 70%; margin-top: 16px; }
    .nx-banner-dots { left: 50%; transform: translateX(-50%); }
    .nx-banner-arrow { display: none; }
}

/* Breadcrumb separator override */
.breadcrumb-item + .breadcrumb-item::before {
    content: none !important;
    display: none !important;
}

/* Sticky Sidebar Support */
body.nx-sidebar-sticky .nx-sidebar {
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
    overflow-x: hidden;
}
/* The collapsed modes open their submenus as flyouts beside the rail. A scroll
   container clips them, so they ended up stacked under the parent instead of
   escaping to the right — the sticky rule above set that clip after the earlier
   overflow:visible, so it has to be restored here. */
body.nx-sidebar-sticky.nx-sidebar-mode-compact .nx-sidebar,
body.nx-sidebar-sticky.nx-sidebar-mode-icons .nx-sidebar {
    overflow: visible;
}
body.nx-sidebar-sticky .nx-sidebar::-webkit-scrollbar {
    width: 4px;
}
body.nx-sidebar-sticky .nx-sidebar::-webkit-scrollbar-thumb {
    background: rgba(0, 0, 0, 0.05);
    border-radius: 2px;
}
html.nx-dark body.nx-sidebar-sticky .nx-sidebar::-webkit-scrollbar-thumb {
    background: rgba(255, 255, 255, 0.05);
}

/* Dark Mode General Border Color Overrides */
html.nx-dark body .border,
html.nx-dark body .border-top,
html.nx-dark body .border-bottom,
html.nx-dark body .border-left,
html.nx-dark body .border-right,
html.nx-dark body hr {
    border-color: var(--nx-border) !important;
}

html.nx-dark body footer.footer {
    border-top: 1px solid var(--nx-border);
}

html.nx-dark body .nx-sidebar-footer-wrapper {
    border-top: 1px solid var(--nx-border);
}

/* WHMCS Order Form Custom Styling - Nexum Theme */
#order-standard_cart, #order-nexum {
    padding: 0;
}

#order-standard_cart > .row, #order-nexum > .row {
    margin: 0;
}

@media (min-width: 992px) {
    #order-standard_cart > .row, #order-nexum > .row {
        display: flex;
        flex-direction: row;
        width: 100%;
        margin: 0;
        gap: 24px;
    }
    #order-standard_cart .cart-sidebar, #order-nexum .cart-sidebar {
        width: 250px !important;
        flex: 0 0 250px !important;
        padding: 0 !important;
    }
    #order-standard_cart .cart-body, #order-nexum .cart-body {
        flex: 1 1 0% !important;
        min-width: 0 !important;
        padding: 0 !important;
    }
    /* Targets the cart's body/sidebar split only. Content rows inside the body
       are ordinary Bootstrap grids and must keep their own gutters and wrapping,
       so anything that opts out with .nx-content-row is left alone. */
    #order-standard_cart .cart-body > .row:not(.nx-content-row),
    #order-nexum .cart-body > .row:not(.nx-content-row) {
        display: flex !important;
        flex-direction: row !important;
        gap: 24px !important;
        margin: 0 !important;
        width: 100% !important;
    }
    #order-standard_cart .secondary-cart-body, #order-nexum .secondary-cart-body {
        flex: 1 1 0% !important;
        min-width: 0 !important;
        padding: 0 !important;
    }
    #order-standard_cart .secondary-cart-sidebar, #order-nexum .secondary-cart-sidebar {
        width: 300px !important;
        flex: 0 0 300px !important;
        padding: 0 !important;
    }
}

@media (max-width: 991px) {
    #order-standard_cart > .row, #order-nexum > .row {
        flex-direction: column !important;
    }
    #order-standard_cart .cart-sidebar, #order-nexum .cart-sidebar {
        width: 100% !important;
        flex: none !important;
    }
    #order-standard_cart .cart-body > .row:not(.nx-content-row),
    #order-nexum .cart-body > .row:not(.nx-content-row) {
        flex-direction: column !important;
    }
    #order-standard_cart .secondary-cart-sidebar, #order-nexum .secondary-cart-sidebar {
        width: 100% !important;
        flex: none !important;
        margin-top: 24px;
    }
}

/* .header-lined is the cart's own page title. It used to be hidden here because
   header.tpl printed a second title above it; the addon now suppresses that one
   for cart pages (whmp_nx_page_renders_own_head), so hiding this left the page
   with no heading at all. Styling for it lives in the order form stylesheet. */
#order-standard_cart .sidebar-categories-collapsed, #order-nexum .sidebar-categories-collapsed,
#order-standard_cart .hidden-sm.hidden-xs, #order-nexum .hidden-sm.hidden-xs {
    display: none;
}

/* Cart inputs for the stock standard_cart markup. #order-nexum is deliberately
   not included: the order form stylesheet already styles those, and forcing
   --nx-bg here overrode its --nx-card-bg, so cart fields took the page
   background instead of the card background. */
#order-standard_cart .form-control {
    background: var(--nx-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
    box-shadow: none;
    transition: border-color .15s ease, box-shadow .15s ease;
}
#order-standard_cart .form-control:focus {
    border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), 0.1);
}

/* Style list bullet specifications inside product-info cards */
#order-standard_cart .product-info ul, #order-nexum .product-info ul {
    display: grid !important;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)) !important;
    gap: 10px !important;
    padding: 0 !important;
    margin: 16px 0 0 !important;
    list-style: none !important;
}
#order-standard_cart .product-info li, #order-nexum .product-info li {
    font-size: 12.5px !important;
    font-weight: 600 !important;
    color: var(--nx-text) !important;
    display: flex !important;
    align-items: center !important;
    gap: 8px !important;
    background: var(--nx-bg) !important;
    border: 1px solid var(--nx-border) !important;
    border-radius: var(--nx-radius-md) !important;
    padding: 8px 12px !important;
}
#order-standard_cart .product-info li::before, #order-nexum .product-info li::before {
    font-family: 'Material Symbols Rounded';
    content: "done" !important;
    font-size: var(--nx-font-size-xl) !important;
    color: var(--nx-primary) !important;
}

/* Payment gateway active highlights */
#order-standard_cart .gateway-card.active, #order-nexum .gateway-card.active {
    border: 2px solid var(--nx-primary) !important;
    box-shadow: 0 4px 12px rgba(var(--nx-primary-rgb), 0.05) !important;
}

/* Sidebar Collapsed Mobile Selectors */
#order-standard_cart .sidebar-collapsed, #order-nexum .sidebar-collapsed {
    display: none !important;
}

@media (max-width: 991px) {
    #order-standard_cart .sidebar-collapsed, #order-nexum .sidebar-collapsed {
        display: block !important;
        margin-bottom: 24px !important;
    }
}

/* scripts.js fakes a sticky sidebar by animating margin-top on #orderSummary
   and .secondary-cart-body. It bails out only when #scrollingPanelContainer is
   float:none, and configureproduct.tpl renders no such element, so the guard
   never fires and the inline margin pushed the content column down. Sticky
   positioning is CSS-driven, so the margin must never apply. */
#order-standard_cart #orderSummary,
#order-nexum #orderSummary,
#order-standard_cart .secondary-cart-body,
#order-nexum .secondary-cart-body {
    margin-top: 0 !important;
}

/* Order Summary.
   The cart's own stylesheet (order form custom.css) styles this panel in far
   more detail and loads after this file. These rules used to carry !important
   on every declaration, which beat that sheet outright — the heading stayed a
   hardcoded #171b26 bar however the cart styled it. They are kept only as the
   baseline for pages that render the panel without the cart stylesheet, so the
   !important flags are gone and the colours resolve through the tokens. */
#orderSummary {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow);
    overflow: hidden;
    margin-bottom: 24px;
}
#orderSummary h2 {
    background: var(--nx-primary);
    color: var(--nx-on-primary, #fff);
}
#orderSummary .summary-container {
    background: var(--nx-card-bg);
    color: var(--nx-text);
    padding: 20px;
}
#orderSummary .summary-container span,
#orderSummary .summary-container div {
    color: var(--nx-text);
}
#orderSummary .total-due-today {
    background: var(--nx-bg);
    border-top: 1px solid var(--nx-border);
    padding: 15px 20px;
    text-align: center;
}
#orderSummary .total-due-today span {
    color: var(--nx-text);
}
#orderSummary .total-due-today .amt {
    font-size: 24px;
    font-weight: 800;
    color: var(--nx-primary);
    display: block;
}
/* Inner wrapper + the "View Cart" button area both inherit the card surface */
#orderSummary .order-summary,
#orderSummary > .text-center {
    background: var(--nx-card-bg);
    color: var(--nx-text);
}
#orderSummary > .text-center {
    padding: 16px 20px;
    border-top: 1px solid var(--nx-border);
}

/* Footer Payment Method Icons */
.nx-payment-icon-pill {
    background: #ffffff;
    border: 1px solid #e4e7eb;
    padding: 4px 8px;
    border-radius: var(--nx-radius-sm);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 60px;
    height: 36px;
    box-shadow: 0 1px 2px rgba(0,0,0,0.02);
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.nx-payment-icon-pill img {
    max-height: 24px;
    max-width: 44px;
    width: auto;
    height: auto;
    display: block;
}
.nx-payment-icon-pill svg {
    max-height: 24px;
    max-width: 44px;
    width: auto;
    height: auto;
    display: block;
}
.nx-payment-icon-pill span {
    font-size: 9.5px;
    font-weight: 700;
    color: #475569;
    text-transform: uppercase;
}
/* Dark Mode Payment Icons */
html.nx-dark body .nx-payment-icon-pill {
    background: var(--nx-card-bg);
    border-color: var(--nx-border);
}
html.nx-dark body .nx-payment-icon-pill img,
html.nx-dark body .nx-payment-icon-pill svg {
    opacity: 0.85;
}
html.nx-dark body .nx-payment-icon-pill span {
    color: var(--nx-muted);
}

#orderSummary .order-summary-footer {
    background: var(--nx-card-bg) !important;
}

/* Product Grid Redesign */
.nx-products-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 24px;
    margin-top: 24px;
}

.nx-product-card {
    background: #ffffff;
    border: 1px solid #eaeff4;
    border-radius: 24px;
    padding: 32px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    height: 100%;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.02);
    transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease, box-shadow 0.25s ease, transform 0.25s ease;
}
.nx-product-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 30px rgba(16, 24, 40, 0.06);
    border-color: rgba(var(--nx-primary-rgb), 0.2);
}

/* Featured card highlights */
.nx-product-card.featured {
    border-color: var(--nx-primary);
    box-shadow: 0 12px 30px rgba(var(--nx-primary-rgb), 0.08);
}

/* Diagonal Ribbon */
.nx-popular-ribbon {
    position: absolute;
    top: 15px;
    right: -35px;
    background: var(--nx-primary);
    color: #ffffff;
    font-size: 10px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    padding: 6px 40px;
    transform: rotate(45deg);
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    z-index: 2;
}

/* Card Header */
.nx-card-icon-wrapper {
    width: 48px;
    height: 48px;
    border-radius: var(--nx-radius-md);
    background: rgba(var(--nx-primary-rgb), 0.06);
    color: var(--nx-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 20px;
}
.nx-card-icon-wrapper span {
    font-size: 24px;
    font-variation-settings: 'FILL' 1;
}

.nx-product-title {
    font-size: 20px;
    font-weight: 800;
    color: #1e293b;
    margin-bottom: 8px;
}
.nx-product-description {
    font-size: var(--nx-font-size-md);
    color: #64748b;
    line-height: 1.5;
    margin-bottom: 20px;
}

/* Badges list */
.nx-card-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 24px;
}
.nx-card-badge {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: rgba(var(--nx-primary-rgb), 0.06);
    color: var(--nx-primary);
    padding: 6px 12px;
    border-radius: var(--nx-radius-card);
    font-size: var(--nx-font-size-sm);
    font-weight: 700;
}

/* Specs List */
.nx-card-specs {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 32px;
    flex-grow: 1;
}
.nx-spec-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 13px;
    line-height: 1.4;
}
.nx-spec-left {
    display: flex;
    align-items: center;
    gap: 8px;
    color: #64748b;
    font-weight: 600;
}
.nx-spec-left span.chk {
    font-family: 'Material Symbols Rounded';
    font-size: var(--nx-font-size-xl);
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.06);
    width: 20px;
    height: 20px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 800;
}
.nx-spec-right {
    color: #1e293b;
    font-weight: 700;
}

/* Pricing & Button */
.nx-card-footer {
    border-top: 1px solid #eaeff4;
    padding-top: 24px;
    display: flex;
    flex-direction: column;
    gap: 16px;
}
.nx-price-lbl {
    font-size: var(--nx-font-size-sm);
    font-weight: 700;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 2px;
}
.nx-price-amt {
    font-size: 28px;
    font-weight: 800;
    color: #0f172a;
    line-height: 1.1;
}
.nx-price-cycle {
    font-size: var(--nx-font-size-sm);
    font-weight: 600;
    color: #64748b;
    margin-top: 4px;
}

/* Buttons */
.nx-btn-order {
    width: 100%;
    padding: 14px;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size);
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
    text-decoration: none;
}
.nx-btn-order.filled {
    background: var(--nx-primary);
    color: #ffffff !important;
    border: none;
    box-shadow: 0 4px 12px rgba(var(--nx-primary-rgb), 0.15);
}
.nx-btn-order.filled:hover {
    background: var(--nx-primary-hover);
    transform: translateY(-1px);
    box-shadow: 0 6px 16px rgba(var(--nx-primary-rgb), 0.25);
}
.nx-btn-order.outline {
    background: transparent;
    color: var(--nx-primary) !important;
    border: 1.5px solid rgba(var(--nx-primary-rgb), 0.15);
}
.nx-btn-order.outline:hover {
    background: rgba(var(--nx-primary-rgb), 0.04);
    border-color: var(--nx-primary);
    transform: translateY(-1px);
}

/* Dark Mode Overrides */
html.nx-dark body .nx-product-card {
    background: var(--nx-card-bg);
    border-color: var(--nx-border);
}
html.nx-dark body .nx-product-card:hover {
    border-color: rgba(var(--nx-primary-rgb), 0.3);
}
html.nx-dark body .nx-product-card.featured {
    border-color: var(--nx-primary);
}
html.nx-dark body .nx-product-title {
    color: var(--nx-text);
}
html.nx-dark body .nx-product-description {
    color: var(--nx-muted);
}
html.nx-dark body .nx-spec-left {
    color: var(--nx-muted);
}
html.nx-dark body .nx-spec-right {
    color: var(--nx-text);
}
html.nx-dark body .nx-card-footer {
    border-top-color: var(--nx-border);
}
html.nx-dark body .nx-price-amt {
    color: var(--nx-text);
}
html.nx-dark body .nx-price-cycle {
    color: var(--nx-muted);
}
html.nx-dark body .nx-btn-order.outline {
    color: var(--nx-primary);
    border-color: rgba(var(--nx-primary-rgb), 0.3);
}
html.nx-dark body .nx-btn-order.outline:hover {
    background: rgba(var(--nx-primary-rgb), 0.1);
    border-color: var(--nx-primary);
}

/* Centered Specs Layout */
.nx-centered-specs {
    display: flex;
    flex-direction: column;
    gap: 12px;
    align-items: center;
    justify-content: center;
    text-align: center;
    margin-bottom: 28px;
}

.nx-centered-spec-row {
    font-size: var(--nx-font-size-lg);
    line-height: 1.4;
}

.nx-centered-spec-val {
    font-weight: 800;
    color: #1e293b;
    margin-right: 4px;
}

.nx-centered-spec-key {
    font-weight: 400;
    color: #64748b;
}

html.nx-dark body .nx-centered-spec-val {
    color: var(--nx-text);
}

html.nx-dark body .nx-centered-spec-key {
    color: var(--nx-muted);
}

/* Cart column layout lives in the order form stylesheet
   (templates/orderforms/nexum/css/custom.css), which loads after this file and
   scopes its rules to #order-nexum. A duplicate set here only competed with it. */

/* Left Aligned Specs Layout */
.nx-left-specs {
    display: flex;
    flex-direction: column;
    gap: 12px;
    align-items: flex-start;
    justify-content: flex-start;
    text-align: left;
    margin-bottom: 28px;
    width: 100%;
}

.nx-left-spec-row {
    font-size: var(--nx-font-size-lg);
    line-height: 1.4;
    display: flex;
    align-items: center;
    gap: 6px;
    width: 100%;
}

.nx-left-spec-val {
    font-weight: 800;
    color: #1e293b;
}

.nx-left-spec-key {
    font-weight: 400;
    color: #64748b;
}

html.nx-dark body .nx-left-spec-val {
    color: var(--nx-text);
}

html.nx-dark body .nx-left-spec-key {
    color: var(--nx-muted);
}

/* Custom Select Dropdown Styling */
.nx-custom-select-wrapper {
    position: relative;
    display: inline-block;
    width: 100%;
}
.nx-custom-select-trigger {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    height: 42px;
    padding: 0 16px;
    font-size: var(--nx-font-size-md);
    font-weight: 600;
    color: var(--nx-text);
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-input, 10px);
    cursor: pointer;
    text-align: left;
    transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
}
.nx-custom-select-trigger:hover, .nx-custom-select-wrapper.open .nx-custom-select-trigger {
    border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), 0.1);
}
.nx-custom-select-trigger i {
    font-size: var(--nx-font-size-xs);
    color: var(--nx-muted);
    transition: transform 0.2s ease;
}
.nx-custom-select-wrapper.open .nx-custom-select-trigger i {
    transform: rotate(180deg);
}
.nx-custom-select-options {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    display: none;
    list-style: none;
    padding: 6px;
    margin: 0;
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
    z-index: 1000;
    max-height: 240px;
    overflow-y: auto;
}
.nx-custom-select-option {
    padding: 8px 12px;
    font-size: 13px;
    font-weight: 500;
    color: var(--nx-text);
    border-radius: var(--nx-radius-sm);
    cursor: pointer;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
    margin: 0;
    list-style: none;
}
.nx-custom-select-option:hover {
    background: rgba(var(--nx-primary-rgb), 0.05);
    color: var(--nx-primary);
}
/* A full primary fill made the chosen row a loud bar across the list. A tint
   plus the brand colour on the label marks it just as clearly and keeps the
   list readable. */
.nx-custom-select-option.selected {
    background: rgba(var(--nx-primary-rgb), .10);
    color: var(--nx-primary);
    font-weight: 700;
}
.nx-custom-select-option.selected:hover {
    background: rgba(var(--nx-primary-rgb), .16);
}

/* Global Styling Alignments for Fallback Templates */
body.nx-theme .card,
body.nx-theme .panel {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px);
    box-shadow: 0 1px 2px rgba(16, 24, 40, 0.04);
}

body.nx-theme .card-header,
body.nx-theme .panel-heading {
    background-color: transparent;
    border-bottom: 1px solid var(--nx-border);
    color: var(--nx-text);
    font-weight: 800;
}

body.nx-theme .card-footer,
body.nx-theme .panel-footer {
    background-color: transparent;
    border-top: 1px solid var(--nx-border);
}

body.nx-theme .table {
    color: var(--nx-text);
}

body.nx-theme .table th {
    border-bottom: 2px solid var(--nx-border);
    color: var(--nx-muted);
    font-weight: 800;
    text-transform: uppercase;
    font-size: var(--nx-font-size-xs);
    letter-spacing: 0.5px;
}

body.nx-theme .table td {
    border-top: 1px solid var(--nx-border);
    color: var(--nx-text);
    font-size: var(--nx-font-size-md);
}

body.nx-theme .list-group-item {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
}

body.nx-theme .breadcrumb {
    background-color: transparent;
    padding: 0;
    margin-bottom: 20px;
}

body.nx-theme .breadcrumb-item a {
    color: var(--nx-muted);
    text-decoration: none;
}

body.nx-theme .breadcrumb-item.active {
    color: var(--nx-primary);
    font-weight: 600;
}

body.nx-theme .alert {
    border-radius: var(--nx-radius-button, 10px);
}

/* ==================================================================
   Nexum — Reusable Component Layer
   Design-system primitives used across ALL client-area pages so the
   structure and styling stay constant & consistent. Prefer these
   classes over inline styles in .tpl files.
   ================================================================== */

/* ---------- Page head + breadcrumb ---------- */
.nx-page-head { margin-bottom: var(--nx-card-gap); }
.nx-page-head .nx-page-title {
    font-size: 28px;
    font-weight: 800;
    color: var(--nx-text);
    letter-spacing: -0.5px;
    margin: 0;
    line-height: 1.2;
}
.nx-breadcrumb {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 6px;
    font-size: var(--nx-font-size-md);
    font-weight: 500;
    color: var(--nx-muted);
    margin-top: 6px;
    padding: 0;
    list-style: none;
}
.nx-breadcrumb a { color: var(--nx-muted); text-decoration: none; transition: color .15s ease; }
.nx-breadcrumb a:hover { color: var(--nx-primary); }
.nx-breadcrumb .nx-crumb-sep { color: var(--nx-border); font-weight: 600; }
.nx-breadcrumb .active,
.nx-breadcrumb li:last-child { color: var(--nx-primary); font-weight: 600; }

/* ---------- Card ---------- */
.nx-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 18px);
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    overflow: hidden;
}
.nx-card + .nx-card { margin-top: 22px; }
.nx-card-pad { padding: var(--nx-card-padding, 22px); }
.nx-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 22px;
    border-bottom: 1px solid var(--nx-border);
}
.nx-card-head h1, .nx-card-head h2, .nx-card-head h3,
.nx-card-head h4, .nx-card-head h5, .nx-card-title {
    margin: 0;
    font-size: 15.5px;
    font-weight: 800;
    color: var(--nx-text);
}
.nx-card-body { padding: 22px; }

/* ---------- Stat tiles ---------- */
.nx-stat-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 18px;
    margin-bottom: 24px;
}
.nx-stat-tile {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 18px);
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    padding: 22px;
}
.nx-stat-tile .nx-stat-tile-label { font-size: var(--nx-font-size-md); font-weight: 700; color: var(--nx-muted); }
.nx-stat-tile .nx-stat-tile-value {
    font-size: 32px; font-weight: 800; color: var(--nx-text);
    letter-spacing: -1px; margin-top: 8px; line-height: 1.1;
}
.nx-stat-tile .nx-stat-tile-hint { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 600; margin-top: 4px; }
.nx-stat-tile.nx-stat-accent {
    background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-primary-hover) 100%);
    border: none; color: #fff;
}
.nx-stat-tile.nx-stat-accent .nx-stat-tile-label,
.nx-stat-tile.nx-stat-accent .nx-stat-tile-value,
.nx-stat-tile.nx-stat-accent .nx-stat-tile-hint { color: #fff; opacity: .96; }

/* ---------- Tables ---------- */
.nx-table { width: 100%; margin: 0; border-collapse: collapse; }
.nx-table thead th {
    font-size: 11.5px; font-weight: 800; text-transform: uppercase;
    letter-spacing: .4px; color: var(--nx-muted);
    padding: 14px 18px; border: none; border-bottom: 1px solid var(--nx-border);
    background: rgba(0,0,0,0.015); text-align: left;
}
.nx-table tbody td {
    padding: 14px 18px; border: none;
    border-bottom: 1px solid var(--nx-border);
    font-size: var(--nx-font-size); color: var(--nx-text); vertical-align: middle;
}
.nx-table tbody tr:last-child td { border-bottom: none; }
.nx-table tbody tr { transition: background .12s ease; }
.nx-table tbody tr:hover { background: rgba(var(--nx-primary-rgb), 0.03); }
.nx-table .nx-td-strong { font-weight: 700; }
.nx-table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; }

/* Bootstrap 5 / utility classes used in the markup that this Bootstrap 4.5
   build does not ship, so they resolved to nothing. */
body.nx-theme .min-w-0 { min-width: 0; }
body.nx-theme .gap-2 { gap: var(--nx-space-2); }
body.nx-theme .gap-3 { gap: var(--nx-space-3); }

/* A .table-responsive is a block, but inside a flex column it still reports its
   table's intrinsic width unless it is allowed to shrink. Without this the
   services table widened the whole main column. */
body.nx-theme .nx-content-container > .table-responsive,
body.nx-theme .nx-prods-table-card > .table-responsive,
body.nx-theme .nx-card > .table-responsive {
    max-width: 100%;
}

/* ---------- Badges / status pills ---------- */
.nx-badge {
    display: inline-flex; align-items: center; justify-content: center; gap: 5px;
    padding: 4px 11px; border-radius: var(--nx-radius-badge, 999px);
    font-size: var(--nx-font-size-sm); font-weight: 700; line-height: 1.4; white-space: nowrap;
    background: rgba(var(--nx-secondary-rgb), .1); color: var(--nx-secondary);
}
.nx-badge-active,   .nx-badge-paid,      .nx-badge-completed { background: var(--nx-pill-active-bg);    color: var(--nx-pill-active-text); }
.nx-badge-pending,  .nx-badge-draft {                          background: var(--nx-pill-pending-bg);   color: var(--nx-pill-pending-text); }
.nx-badge-suspended, .nx-badge-overdue {                       background: var(--nx-pill-suspended-bg); color: var(--nx-pill-suspended-text); }
.nx-badge-cancelled, .nx-badge-unpaid, .nx-badge-terminated,
.nx-badge-fraud,     .nx-badge-refunded {                      background: var(--nx-pill-cancelled-bg); color: var(--nx-pill-cancelled-text); }
.nx-badge-open {                                               background: var(--nx-pill-open-bg);      color: var(--nx-pill-open-text); }
.nx-badge-answered, .nx-badge-customer-reply {                 background: var(--nx-pill-answered-bg);  color: var(--nx-pill-answered-text); }
.nx-badge-closed {                                             background: var(--nx-pill-closed-bg);    color: var(--nx-pill-closed-text); }

/* ---------- Buttons ---------- */
.nx-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    font-weight: 700; font-size: var(--nx-font-size-md); line-height: 1;
    padding: 11px 18px; border-radius: var(--nx-radius-button, 11px);
    border: 1px solid transparent; cursor: pointer; text-decoration: none;
    transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease; text-transform: var(--nx-btn-transform, none);
}
.nx-btn:focus { outline: none; box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .25); }
.nx-btn-primary { background: var(--nx-primary); color: #fff; }
.nx-btn-primary:hover { background: var(--nx-primary-hover); }
.nx-btn-outline { background: var(--nx-card-bg); color: var(--nx-text); border-color: var(--nx-border); }
.nx-btn-outline:hover { border-color: var(--nx-primary); color: var(--nx-primary); }
.nx-btn-danger { background: var(--nx-danger); color: #fff; }
.nx-btn-success { background: var(--nx-success); color: #fff; }
.nx-btn-ghost { background: transparent; color: var(--nx-primary); padding-left: 4px; padding-right: 4px; }
.nx-btn-sm { padding: 7px 13px; font-size: 12.5px; }
.nx-btn-lg { padding: 14px 24px; font-size: var(--nx-font-size-lg); }
.nx-btn-block { width: 100%; }

/* ---------- Forms ---------- */
.nx-form-group { margin-bottom: 18px; }
.nx-form-label { display: block; font-size: 13px; font-weight: 700; color: var(--nx-text); margin-bottom: 7px; }
.nx-form-control,
body.nx-theme .form-control {
    width: 100%; height: 44px; padding: 0 14px;
    background: var(--nx-card-bg); color: var(--nx-text);
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-input, 11px);
    font-size: var(--nx-font-size); transition: border-color .15s ease, box-shadow .15s ease;
}
textarea.nx-form-control, body.nx-theme textarea.form-control { height: auto; padding: 12px 14px; min-height: 110px; }
.nx-form-control:focus,
body.nx-theme .form-control:focus {
    outline: none; border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .15);
}
.nx-form-hint { font-size: var(--nx-font-size-sm); color: var(--nx-muted); margin-top: 6px; }

/* Respect the OS "reduce motion" setting. Transitions and the hover-lift are
   decorative, so they are dropped rather than shortened. */
@media (prefers-reduced-motion: reduce) {
    body.nx-theme *,
    body.nx-theme *::before,
    body.nx-theme *::after {
        animation-duration: 0.01ms;
        animation-iteration-count: 1;
        transition-duration: 0.01ms;
        scroll-behavior: auto;
    }
    body.nx-theme.nx-hover-lift .card:hover,
    body.nx-theme.nx-hover-lift .tile:hover {
        transform: none;
    }
}

/* Focus rings for controls that set outline:none without offering any
   replacement -- keyboard users had no way to tell where they were. The bare
   inputs sit inside a styled wrapper, so the ring goes on the wrapper. */
body.nx-theme .nx-mp-select:focus-visible,
body.nx-theme .nx-pmm-input:focus-visible,
body.nx-theme .nx-af-field:focus-visible {
    outline: 2px solid var(--nx-primary);
    outline-offset: 1px;
}

/* Inputs that sit inside a styled wrapper carry no ring of their own -- the
   wrapper shows focus instead, so the highlight follows its rounded shape
   rather than drawing a square outline around the bare field. */
body.nx-theme .nx-doms-search-input:focus,
body.nx-theme .nx-doms-search-input:focus-visible,
body.nx-theme .nx-hp-domain-input:focus,
body.nx-theme .nx-hp-domain-input:focus-visible,
body.nx-theme .nx-pmm-iginput:focus,
body.nx-theme .nx-pmm-iginput:focus-visible {
    outline: none;
    box-shadow: none;
}
body.nx-theme .nx-doms-search-box:focus-within,
body.nx-theme .nx-hp-domain-inputwrap:focus-within {
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), 0.25);
}

/* Icon baseline. Material Symbols and Font Awesome are both in use (290 vs 83
   occurrences); neither had a shared rule, so an icon whose component did not
   set a size fell back to 24px and sat on the text baseline. This aligns both
   families to the surrounding text without changing any deliberate sizing. */
/* No font-size here on purpose: components set their own, and a body-scoped
   rule (0,0,2,1) would outrank selectors like .nx-kb-cat-ico .material-symbols-
   rounded (0,0,2,0) and flatten every deliberate size. */
.material-symbols-rounded {
    line-height: 1;
    vertical-align: middle;
    flex-shrink: 0;
    user-select: none;
}
.nx-theme .fas,
.nx-theme .far,
.nx-theme .fab {
    line-height: 1;
    vertical-align: middle;
}

/* Baseline for every checkbox and radio. accent-color alone only recolours the
   checked fill — the unchecked box keeps the browser's white background, which
   reads as a bright square on dark. Drawing the control from scratch puts its
   background on the theme token instead. */
body.nx-theme input[type="checkbox"],
body.nx-theme input[type="radio"] {
    -webkit-appearance: none;
    appearance: none;
    width: 17px;
    height: 17px;
    flex-shrink: 0;
    background: var(--nx-card-bg);
    border: 1.5px solid var(--nx-border);
    box-shadow: none;
    cursor: pointer;
    transition: background-color .15s ease, border-color .15s ease;
    display: inline-grid;
    place-content: center;
    vertical-align: middle;
}
body.nx-theme input[type="radio"] { border-radius: 50%; }
body.nx-theme input[type="checkbox"] { border-radius: 5px; }

body.nx-theme input[type="radio"]::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    transform: scale(0);
    transition: transform .15s ease;
    background: var(--nx-on-primary, #fff);
}
body.nx-theme input[type="checkbox"]::before {
    content: "";
    width: 10px;
    height: 10px;
    transform: scale(0);
    transition: transform .15s ease;
    background: var(--nx-on-primary, #fff);
    clip-path: polygon(14% 44%, 0 65%, 39% 100%, 100% 16%, 80% 0%, 39% 62%);
}
body.nx-theme input[type="checkbox"]:checked,
body.nx-theme input[type="radio"]:checked {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
}
body.nx-theme input[type="checkbox"]:checked::before,
body.nx-theme input[type="radio"]:checked::before {
    transform: scale(1);
}
body.nx-theme input[type="checkbox"]:hover:not(:checked),
body.nx-theme input[type="radio"]:hover:not(:checked) {
    border-color: rgba(var(--nx-primary-rgb), .5);
}
body.nx-theme input[type="checkbox"]:focus-visible,
body.nx-theme input[type="radio"]:focus-visible {
    outline: 2px solid var(--nx-primary);
    outline-offset: 2px;
}
body.nx-theme input[type="checkbox"]:disabled,
body.nx-theme input[type="radio"]:disabled {
    opacity: .5;
    cursor: default;
}
/* Bootstrap pulls .form-check-input out of flow with position:absolute and a
   negative margin, which parked the box underneath its own label text. The
   theme lays these out with flex/grid, so keep them in flow. */
body.nx-theme .form-check-input {
    position: static;
    margin-left: 0;
}
/* Inside a real .form-check wrapper Bootstrap's hanging indent is intentional. */
body.nx-theme .form-check > .form-check-input {
    position: absolute;
    margin-left: -1.25rem;
}

/* ---------- Toggle switch ---------- */
/* Used by autorenew.tpl and clientareadomains.tpl. Previously defined in a
   <style> block inside clientareadomains.tpl, so the switch rendered unstyled
   on every other page that used it. */
.nx-switch {
    position: relative;
    display: inline-block;
    width: 44px;
    height: 24px;
    margin: 0;
    vertical-align: middle;
}
.nx-switch input {
    opacity: 0;
    width: 0;
    height: 0;
}
.nx-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background: var(--nx-border);
    border-radius: var(--nx-radius-badge);
    transition: background-color .3s ease;
}
.nx-slider::before {
    content: "";
    position: absolute;
    height: 18px;
    width: 18px;
    left: 3px;
    bottom: 3px;
    background: var(--nx-card-bg);
    border-radius: 50%;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);
    transition: transform .3s ease;
}
.nx-switch input:checked + .nx-slider { background: var(--nx-primary); }
.nx-switch input:checked + .nx-slider::before { transform: translateX(20px); }
.nx-switch input:focus-visible + .nx-slider {
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .25);
}

/* ---------- Alerts / confirmation panels ---------- */
.nx-alert {
    display: flex; align-items: flex-start; gap: 12px;
    padding: 14px 18px; border-radius: var(--nx-radius-card, 14px);
    border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    color: var(--nx-text); font-size: var(--nx-font-size); margin-bottom: 18px;
}
.nx-alert .nx-alert-icon { font-size: 20px; flex-shrink: 0; margin-top: 1px; }
.nx-alert-success { background: var(--nx-pill-active-bg); border-color: transparent; color: var(--nx-pill-active-text); }
.nx-alert-info    { background: var(--nx-pill-open-bg);   border-color: transparent; color: var(--nx-pill-open-text); }
.nx-alert-warning { background: var(--nx-pill-pending-bg); border-color: transparent; color: var(--nx-pill-pending-text); }
.nx-alert-danger  { background: var(--nx-pill-cancelled-bg); border-color: transparent; color: var(--nx-pill-cancelled-text); }

/* Error lists (includes/alert.tpl with errorshtml) get the same treatment as the
   order form's validation box: card padding, a danger accent down the left, the
   heading in danger and the items as plain rows with a custom dot instead of
   browser bullets. */
.nx-alert-danger:has(.nx-alert-body ul),
.nx-alert.nx-alert-danger {
    padding: var(--nx-space-5) var(--nx-space-6);
    border-left: 4px solid var(--nx-danger);
    box-shadow: var(--nx-shadow-sm);
    border-radius: var(--nx-radius-card);
    color: var(--nx-text);
}
.nx-alert-danger .nx-alert-body > strong {
    display: block;
    margin: 0 0 var(--nx-space-2);
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-danger);
}
.nx-alert-danger .nx-alert-body ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: 6px;
}
.nx-alert-danger .nx-alert-body ul li {
    position: relative;
    padding-left: 14px;
    font-size: var(--nx-font-size-md);
    font-weight: 600;
    color: var(--nx-text);
}
.nx-alert-danger .nx-alert-body ul li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.55em;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--nx-danger);
}

/* Button loading state — same mechanism and look as the order form, so a click
   on Send Message / Open Ticket reads as accepted straight away. */
@keyframes nx-btn-spin { to { transform: rotate(360deg); } }
body.nx-theme .nx-btn-loading {
    pointer-events: none;
    opacity: .8;
}
body.nx-theme .nx-btn-loading::before {
    content: "";
    width: 14px;
    height: 14px;
    margin-right: 8px;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    flex-shrink: 0;
    display: inline-block;
    vertical-align: -2px;
    animation: nx-btn-spin .6s linear infinite;
}
/* WHMCS drives its own indicator on some buttons (.spinner-on-click swaps the
   trailing icon, a few carry a .loader span) — hidden while loading so no button
   ever shows two spinners. */
body.nx-theme .nx-btn-loading i.fa-spinner,
body.nx-theme .nx-btn-loading .loader {
    display: none;
}

/* ---------- Empty state ---------- */
.nx-empty-state {
    text-align: center; padding: 48px 24px; color: var(--nx-muted);
    font-size: var(--nx-font-size); font-weight: 600;
}
.nx-empty-state .nx-empty-icon {
    font-size: 44px; color: var(--nx-border); margin-bottom: 10px; display: block;
}

/* ---------- Layout helpers ---------- */
.nx-grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 22px; }
.nx-section-label {
    font-size: var(--nx-font-size-sm); font-weight: 800; letter-spacing: .7px;
    text-transform: uppercase; color: var(--nx-muted); margin-bottom: 14px;
}

/* ==================================================================
   Bootstrap-class overrides — so fall-through pages (store/oauth/
   error/ssl and anything inherited from twenty-one) render in-theme.
   ================================================================== */
body.nx-theme .panel,
body.nx-theme .card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px);
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    color: var(--nx-text);
}
body.nx-theme .panel-heading,
body.nx-theme .card-header {
    background: transparent;
    border-bottom: 1px solid var(--nx-border);
    color: var(--nx-text); font-weight: 700;
}
/* Button fills are defined once in the Buttons section above; repeating them
   here re-pinned .btn-primary to #fff and dropped the semantic text colour. */
body.nx-theme .table { color: var(--nx-text); }
body.nx-theme .table thead th { border-bottom: 1px solid var(--nx-border); color: var(--nx-muted); text-transform: uppercase; font-size: 11.5px; letter-spacing: .4px; }
body.nx-theme .table td, body.nx-theme .table th { border-color: var(--nx-border); }
body.nx-theme .label, body.nx-theme .badge {
    border-radius: var(--nx-radius-badge, 999px); font-weight: 700; padding: 4px 10px;
}
/* body.nx-theme a { color: var(--nx-primary); } */
body.nx-theme hr { border-color: var(--nx-border); }

/* ---------- Custom-select label + disabled option (hardened transformer) ---------- */
.nx-custom-select-trigger .nx-cs-label {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    flex: 1 1 auto;
    min-width: 0;
    margin-right: 8px;
}
.nx-custom-select-option.disabled {
    opacity: .5;
    cursor: not-allowed;
    pointer-events: none;
}

/* ---------- Modal theming (includes/modal.tpl, confirmation.tpl) ---------- */
body.nx-theme .modal-content,
.nx-modal .modal-content {
    background: var(--nx-card-bg);
    color: var(--nx-text);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px);
    box-shadow: 0 24px 60px rgba(16, 24, 40, .22);
    overflow: hidden;
}
body.nx-theme .modal-footer {
    border-color: var(--nx-border);
}
/* One header treatment for every dialog: title on the left, dismiss on the
   right, filled with the admin primary. theme.min.css paints .modal .modal-header
   a flat #eee and hands .bg-primary WHMCS's own #336699, so several templates
   carried a blue bar that ignored the palette entirely — this overrides both. */
body.nx-theme .modal .modal-header,
body.nx-theme .modal .modal-header.bg-primary,
body.nx-theme .modal .modal-header.card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    text-align: left;
    padding: 16px 20px;
    background: var(--nx-primary);
    color: var(--nx-on-primary);
    border-bottom: none;
}
body.nx-theme .modal .modal-header .modal-title,
body.nx-theme .modal .modal-header h4,
body.nx-theme .modal .modal-header h5 {
    margin: 0;
    font-size: var(--nx-font-size-lg);
    font-weight: 800;
    color: var(--nx-on-primary);
}
body.nx-theme .modal .modal-header .close {
    position: static;
    float: none;
    margin: 0;
    padding: 0;
    color: var(--nx-on-primary);
    opacity: .85;
    text-shadow: none;
}
body.nx-theme .modal .modal-header .close:hover {
    color: var(--nx-on-primary);
    opacity: 1;
}
body.nx-theme .modal-title { color: var(--nx-text); font-weight: 800; }
body.nx-theme .modal-backdrop.show { opacity: .5; }
body.nx-theme .close { color: var(--nx-muted); opacity: 1; text-shadow: none; }
body.nx-theme .close:hover { color: var(--nx-text); }

/* theme.min.css pins the selected dropdown row to #336699 with white text, so
   the currency and language pickers showed a hardcoded blue bar. The theme's own
   .nx-sh-menu-item colour then won over that white, leaving dark text on dark
   blue — both are fixed by driving the row from the palette. */
body.nx-theme .dropdown-menu .dropdown-item.active,
body.nx-theme .dropdown-menu .dropdown-item:active,
body.nx-theme .dropdown-menu .dropdown-item.active:hover,
body.nx-theme .dropdown-menu .dropdown-item.active:focus {
    background-color: var(--nx-primary);
    color: var(--nx-on-primary);
}

/* ---------- Guest homepage action buttons (homepage.tpl) ---------- */
.action-icon-btns .nx-home-action {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    text-align: center;
    height: 100%;
    padding: 26px 14px;
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px);
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    color: var(--nx-text);
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    text-decoration: none;
    transition: transform .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.action-icon-btns .nx-home-action:hover {
    transform: translateY(-3px);
    border-color: var(--nx-primary);
    box-shadow: 0 10px 24px rgba(var(--nx-primary-rgb), .14);
    color: var(--nx-primary);
    text-decoration: none;
}
.action-icon-btns .nx-home-action .material-symbols-rounded {
    font-size: 30px;
    color: var(--nx-primary);
}

/* ==================================================================
   Nexum — Utility classes (extracted from repeated inline styles)
   Use these instead of repeating inline style="" on pages.
   ================================================================== */
.nx-text        { color: var(--nx-text); }
.nx-muted       { color: var(--nx-muted); }
.nx-primary-text{ color: var(--nx-primary); }

/* Section / label typography */
.nx-eyebrow {                 /* small uppercase section label */
    font-size: var(--nx-font-size-sm); font-weight: 700; color: var(--nx-muted);
    text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; display: block;
}
.nx-eyebrow-sm { margin-bottom: 6px; }
.nx-title-sm   { font-size: 14.5px; font-weight: 800; color: var(--nx-text); }
.nx-title-md   { font-size: var(--nx-font-size-xl);   font-weight: 800; color: var(--nx-text); }
.nx-title-lg   { font-size: 19px;   font-weight: 800; color: var(--nx-text); }
.nx-label      { font-weight: 700; font-size: 13px; color: var(--nx-text); }
.nx-value      { font-weight: 700; font-size: var(--nx-font-size); color: var(--nx-text); }
.nx-hint-text  { font-size: var(--nx-font-size-md); font-weight: 700; color: var(--nx-muted); }

/* Divider */
.nx-divider {
    height: 1px; background: var(--nx-border); margin: 24px 0; border: none;
}

/* Cell reset used inside nx tables built with the bootstrap table markup */
.nx-cell-plain { border: none; vertical-align: middle; }

/* Spacing helpers (only the most-repeated) */
.nx-mb-24 { margin-bottom: 24px; }
.nx-mb-20 { margin-bottom: 20px; }
.nx-mb-16 { margin-bottom: 16px; }
.nx-gap-12 { gap: 12px; }

/* Table header cell (matches the .nx-table thead look for bootstrap tables) */
.nx-th {
    font-size: 11.5px; font-weight: 800; text-transform: uppercase;
    color: var(--nx-muted); border: none;
}

/* Inputs/controls repeated inline (map to the form-control look) */
.nx-input-line {
    height: 42px; border-radius: var(--nx-radius-input, 8px);
    border: 1px solid var(--nx-border); background: var(--nx-bg);
    color: var(--nx-text); font-weight: 600; padding: 0 12px;
}
.nx-input-ghost {
    height: 42px; border-radius: var(--nx-radius-input, 10px);
    border: 1px solid var(--nx-border); background: transparent; color: var(--nx-text);
}

/* ==================================================================
   Secondary sidebar cards (WHMCS includes/sidebar.tpl: .card-sidebar
   with .card-minimise chevron + .collapsable-card-body slide toggle).
   Inherited from twenty-one; styled here for theme consistency + a
   smooth, accurate collapse. The slide is driven by whmcs.js
   (slideUp/slideDown on .collapsable-card-body).
   ================================================================== */
body.nx-theme .card-sidebar {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px);
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    overflow: hidden;
}
body.nx-theme .card-sidebar .card-header {
    cursor: pointer;
    background: transparent;
    border-bottom: 1px solid var(--nx-border);
}
body.nx-theme .card-sidebar .card-title {
    display: flex;
    align-items: center;
    font-size: var(--nx-font-size);
    font-weight: 800;
    color: var(--nx-text);
}
/* Chevron: rotate smoothly to indicate collapsed/expanded state */
body.nx-theme .card-sidebar .card-minimise {
    margin-left: auto;
    color: var(--nx-muted);
    transition: transform 0.25s ease;
    transform: rotate(0deg);   /* chevron-up = expanded */
}
body.nx-theme .card-sidebar .card-minimise.minimised {
    transform: rotate(180deg); /* points down = collapsed */
}
/* The slide body: let jQuery animate height freely (no clipping/transition
   conflict). List items themed to match the sidebar. */
body.nx-theme .card-sidebar .collapsable-card-body { overflow: hidden; }
body.nx-theme .card-sidebar .list-group,
body.nx-theme .card-sidebar .list-group-item {
    background: transparent;
    border: none;
    border-radius: 0;
    box-shadow: none;
    margin: 0;
}
body.nx-theme .card-sidebar .list-group-item {
    color: var(--nx-sidebar-text, var(--nx-muted));
    font-weight: 600;
    font-size: var(--nx-font-size-md);
    padding: 10px 18px;
    transition: background 0.15s ease, color 0.15s ease;
}
body.nx-theme .card-sidebar .list-group-item:hover {
    background: rgba(var(--nx-primary-rgb), 0.06);
    color: var(--nx-primary);
}
body.nx-theme .card-sidebar .list-group-item.active {
    background: rgba(var(--nx-primary-rgb), 0.10);
    color: var(--nx-primary);
    font-weight: 700;
}

.nx-nav-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-left: 8px;
    padding: 2px 8px;
    border-radius: var(--nx-radius-badge, 999px);
    background: rgba(var(--nx-primary-rgb), 0.1);
    color: var(--nx-primary);
    font-size: 10.5px;
    font-weight: 800;
    line-height: 1.4;
}
.nx-secondary-nav-item {
    color: var(--nx-text);
}
.nx-secondary-nav-item:hover {
    color: var(--nx-primary);
}


/* ============================================================
   Nexum extracted page styles (inline-style elimination)
   ============================================================ */

/* --- Domain Details --- */
.nx-dd-hero.nx-dd-hero.nx-dd-hero {
    background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-secondary) 100%);
    border-radius: var(--nx-radius-card);
    padding: 24px 30px;
    color: #fff;
    box-shadow: 0 10px 30px rgba(var(--nx-primary-rgb), 0.15);
    display: flex;
    flex-direction: column;
    gap: 20px;
    margin-bottom: 24px;
}
.nx-dd-hero-top.nx-dd-hero-top.nx-dd-hero-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px;
}
.nx-dd-hero-name.nx-dd-hero-name.nx-dd-hero-name {
    display: flex;
    align-items: center;
    gap: 12px;
}
.nx-dd-hero-globe.nx-dd-hero-globe.nx-dd-hero-globe {
    font-size: 26px;
    color: #fff;
    opacity: 0.9;
}
.nx-dd-hero-domain.nx-dd-hero-domain.nx-dd-hero-domain {
    font-size: 19px;
    font-weight: 800;
    letter-spacing: -0.3px;
}
.nx-dd-status-pill.nx-dd-status-pill.nx-dd-status-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12.5px;
    font-weight: 800;
    padding: 5px 12px;
    border-radius: var(--nx-radius-badge);
}
.nx-dd-hero-meta.nx-dd-hero-meta.nx-dd-hero-meta {
    border-top: 1px solid rgba(255,255,255,0.15);
}
.nx-dd-hero-label.nx-dd-hero-label.nx-dd-hero-label {
    font-size: var(--nx-font-size-xs);
    font-weight: 700;
    color: rgba(255,255,255,0.65);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.nx-dd-hero-value.nx-dd-hero-value.nx-dd-hero-value {
    font-size: 14.5px;
    font-weight: 700;
    margin-top: 2px;
}
.nx-dd-tabs.nx-dd-tabs.nx-dd-tabs {
    background: transparent;
    border: none;
    padding: 0;
    box-shadow: none;
}
.nx-dd-card.nx-dd-card.nx-dd-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 20px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04);
    margin-bottom: 22px;
}
.nx-dd-panel.nx-dd-panel.nx-dd-panel {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 24px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04);
}
.nx-dd-side-card.nx-dd-side-card.nx-dd-side-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 18px;
    box-shadow: 0 1px 2px rgba(16,24,40,.04);
}
.nx-dd-card-head.nx-dd-card-head.nx-dd-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 16px;
}
.nx-dd-title15.nx-dd-title15.nx-dd-title15 {
    font-size: var(--nx-font-size-lg);
    font-weight: 800;
    color: var(--nx-text);
}
.nx-dd-mb18.nx-dd-mb18.nx-dd-mb18 {
    margin-bottom: 18px;
}
.nx-dd-mb14.nx-dd-mb14.nx-dd-mb14 {
    margin-bottom: 14px;
}
.nx-dd-link.nx-dd-link.nx-dd-link {
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-primary);
    text-decoration: none;
}
.nx-dd-col-10.nx-dd-col-10.nx-dd-col-10 {
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.nx-dd-ns.nx-dd-ns.nx-dd-ns {
    font-family: monospace;
    font-size: var(--nx-font-size);
    font-weight: 600;
    color: var(--nx-text);
    padding: 8px 12px;
    background: rgba(0,0,0,0.02);
    border-radius: var(--nx-radius-sm);
    border: 1px solid var(--nx-border);
}
.nx-dd-empty.nx-dd-empty.nx-dd-empty {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 600;
}
.nx-dd-label.nx-dd-label.nx-dd-label {
    font-size: var(--nx-font-size-xs);
    font-weight: 800;
    color: var(--nx-muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.nx-dd-value.nx-dd-value.nx-dd-value {
    font-size: var(--nx-font-size);
    font-weight: 700;
    margin-top: 4px;
}
.nx-dd-on.nx-dd-on.nx-dd-on {
    color: #12b76a;
}
.nx-dd-off.nx-dd-off.nx-dd-off {
    color: #f04438;
}
.nx-dd-value-plain.nx-dd-value-plain.nx-dd-value-plain {
    color: var(--nx-text);
}
.nx-dd-h3.nx-dd-h3.nx-dd-h3 {
    font-size: var(--nx-font-size-xl);
    font-weight: 800;
    color: var(--nx-text);
    margin-bottom: 10px;
}
.nx-dd-check-label.nx-dd-check-label.nx-dd-check-label {
    font-weight: 700;
    color: var(--nx-text);
}
.nx-dd-form-label.nx-dd-form-label.nx-dd-form-label {
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-muted);
}
.nx-dd-form-label2.nx-dd-form-label2.nx-dd-form-label2 {
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-text);
}
.nx-dd-input.nx-dd-input.nx-dd-input {
    border-radius: var(--nx-radius-md);
    height: 40px;
    font-size: var(--nx-font-size-md);
}
.nx-dd-input-lg.nx-dd-input-lg.nx-dd-input-lg {
    border-radius: var(--nx-radius-md);
    height: 42px;
    font-size: var(--nx-font-size-md);
}
.nx-dd-btn-primary.nx-dd-btn-primary.nx-dd-btn-primary {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    padding: 10px 22px;
}
.nx-dd-btn.nx-dd-btn.nx-dd-btn {
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    padding: 10px 22px;
}
.nx-dd-desc.nx-dd-desc.nx-dd-desc {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 500;
    line-height: 1.5;
    margin-bottom: 20px;
}
.nx-dd-desc-24.nx-dd-desc-24.nx-dd-desc-24 {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 500;
    line-height: 1.5;
    margin-bottom: 24px;
}
.nx-dd-desc-plain.nx-dd-desc-plain.nx-dd-desc-plain {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 500;
    margin-bottom: 24px;
}
.nx-dd-status-row.nx-dd-status-row.nx-dd-status-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    background: rgba(0,0,0,0.02);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    margin-bottom: 24px;
}
.nx-dd-pill.nx-dd-pill.nx-dd-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: var(--nx-font-size-sm);
    font-weight: 800;
    padding: 4px 10px;
    border-radius: var(--nx-radius-badge);
}
.nx-dd-pill-on.nx-dd-pill-on.nx-dd-pill-on {
    background: #eefdf6;
    color: #12b76a;
}
.nx-dd-pill-off.nx-dd-pill-off.nx-dd-pill-off {
    background: #fee2e2;
    color: #b91c1c;
}
.nx-dd-steps.nx-dd-steps.nx-dd-steps {
    display: flex;
    flex-direction: column;
    gap: 16px;
    margin-bottom: 24px;
}
.nx-dd-step.nx-dd-step.nx-dd-step {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    background: rgba(0,0,0,0.01);
}
.nx-dd-step-left.nx-dd-step-left.nx-dd-step-left {
    display: flex;
    align-items: center;
    gap: 12px;
}
.nx-dd-step-num.nx-dd-step-num.nx-dd-step-num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    font-size: 13px;
    font-weight: 800;
}
.nx-dd-step-done.nx-dd-step-done.nx-dd-step-done {
    background: #eefdf6;
    color: #12b76a;
}
.nx-dd-step-todo.nx-dd-step-todo.nx-dd-step-todo {
    background: var(--nx-border);
    color: var(--nx-muted);
}
.nx-dd-step-title.nx-dd-step-title.nx-dd-step-title {
    font-size: var(--nx-font-size);
    font-weight: 700;
    color: var(--nx-text);
}
.nx-dd-step-sub.nx-dd-step-sub.nx-dd-step-sub {
    font-size: var(--nx-font-size-sm);
    color: var(--nx-muted);
    font-weight: 500;
}
.nx-dd-btn-sm.nx-dd-btn-sm.nx-dd-btn-sm {
    font-size: var(--nx-font-size-sm);
    border-radius: var(--nx-radius-sm);
}
.nx-dd-col-20.nx-dd-col-20.nx-dd-col-20 {
    display: flex;
    flex-direction: column;
    gap: 20px;
}
.nx-dd-addon.nx-dd-addon.nx-dd-addon {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    padding-bottom: 20px;
    border-bottom: 1px solid var(--nx-border);
}
.nx-dd-addon-last.nx-dd-addon-last.nx-dd-addon-last {
    display: flex;
    align-items: flex-start;
    gap: 16px;
}
.nx-dd-addon-icon.nx-dd-addon-icon.nx-dd-addon-icon {
    font-size: 28px;
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.08);
    padding: 8px;
    border-radius: var(--nx-radius-md);
}
.nx-dd-flex1.nx-dd-flex1.nx-dd-flex1 {
    flex: 1;
}
.nx-dd-addon-name.nx-dd-addon-name.nx-dd-addon-name {
    font-size: 14.5px;
    font-weight: 700;
    color: var(--nx-text);
}
.nx-dd-addon-desc.nx-dd-addon-desc.nx-dd-addon-desc {
    font-size: 12.5px;
    color: var(--nx-muted);
    font-weight: 500;
    margin-top: 4px;
    line-height: 1.4;
}
.nx-dd-mt10.nx-dd-mt10.nx-dd-mt10 {
    margin-top: 10px;
}
.nx-dd-btn-xs.nx-dd-btn-xs.nx-dd-btn-xs {
    font-size: var(--nx-font-size-sm);
    padding: 6px 14px;
    border-radius: var(--nx-radius-sm);
}
.nx-dd-btn-xs-primary.nx-dd-btn-xs-primary.nx-dd-btn-xs-primary {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    font-size: var(--nx-font-size-sm);
    padding: 6px 14px;
    border-radius: var(--nx-radius-sm);
    font-weight: 700;
    color: #fff;
}
.nx-dd-renew.nx-dd-renew.nx-dd-renew {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    padding: 14px 0;
    border-radius: var(--nx-radius-md);
    font-size: 14.5px;
    font-weight: 800;
    color: #fff;
    box-shadow: 0 4px 14px rgba(var(--nx-primary-rgb), 0.3);
}
.nx-dd-ic19.nx-dd-ic19.nx-dd-ic19 {
    font-size: 19px;
}
.nx-dd-ic19-primary.nx-dd-ic19-primary.nx-dd-ic19-primary {
    font-size: 19px;
    color: var(--nx-primary);
}
.nx-dd-side-head.nx-dd-side-head.nx-dd-side-head {
    font-size: var(--nx-font-size-xs);
    font-weight: 800;
    letter-spacing: 0.8px;
    text-transform: uppercase;
    color: var(--nx-muted);
    margin-bottom: 12px;
    padding-left: 10px;
}
.nx-dd-navlist.nx-dd-navlist.nx-dd-navlist {
    border: none;
    gap: 4px;
}
.nx-dd-navlink.nx-dd-navlink.nx-dd-navlink {
    border: none;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    font-weight: 600;
    color: var(--nx-text);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.nx-dd-ic16.nx-dd-ic16.nx-dd-ic16 {
    font-size: var(--nx-font-size-xl);
    color: var(--nx-muted);
}

/* --- View Invoice --- */
.nx-vi-relative { position: relative; }
.nx-vi-plus-badge { position: absolute; top: -3px; right: -3px; width: 14px; height: 14px; border-radius: 50%; background: var(--nx-primary); color: #fff; font-size: 10px; font-weight: 800; border: 1.5px solid #fff; line-height: 1; pointer-events: none; }
.nx-vi-dropright-wrap { width: 100%; display: flex; justify-content: center; z-index: 1050; }
.nx-vi-btn-reset { padding: 0; background: transparent; border: none; box-shadow: none; }
.nx-vi-avatar-lg { width: 44px; height: 44px; border-radius: 50%; background: linear-gradient(140deg, #f59e0b, #ea580c); color: #ffffff; font-weight: 700; font-size: var(--nx-font-size); display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 4px 10px rgba(234,88,12,0.2); }
.nx-vi-side-dropdown { min-width: 180px; border-radius: var(--nx-radius-md); box-shadow: 0 10px 30px rgba(0,0,0,0.1); border: 1px solid var(--nx-border); margin-left: 10px; background: var(--nx-card-bg); }
.nx-vi-dd-name { font-size: 13px; font-weight: 700; color: var(--nx-text); border-color: var(--nx-border); }
.nx-vi-divider { border-color: var(--nx-border); }
/* Standalone invoice view. The sidebar, topbar and mobile navbar were removed
   from viewinvoice.tpl — the page is opened on its own and printed, so that
   chrome was not navigation the reader needed. What is left is a thin bar
   holding the mode toggle, and the content centred at full width. The rules for
   the old chrome (.nx-vi-topbar, .nx-vi-cart-link, .nx-vi-avatar-sm and the
   rest) were deleted with it. */
.nx-vi-standalone { width: 100%; }
.nx-vi-standalone > .nx-main-area { margin-left: 0; width: 100%; }

.nx-vi-bar {
    padding: 12px 30px;
    background: var(--nx-card-bg);
    border-bottom: 1px solid var(--nx-border);
}
.nx-vi-bar .nx-content-container { padding-left: 0; padding-right: 0; }

.nx-vi-main { padding: 40px 30px; }
.nx-vi-error-icon { font-size: 40px; color: var(--nx-danger); margin-bottom: 15px; }
.nx-vi-back-btn { max-width: 200px; margin: 20px auto 0; }
.nx-vi-icon-18 { font-size: var(--nx-font-size-h3); }
.nx-vi-alert { border-radius: var(--nx-radius-md); font-weight: 600; }
.nx-vi-alert-notes { border-radius: var(--nx-radius-md); }
.nx-vi-notes-title { font-weight: 700; margin-bottom: 4px; }
.nx-vi-logo-p { margin: 0 0 15px 0; }
.nx-vi-logo-img { max-height: 45px; }
.nx-vi-danger-text { color: var(--nx-danger); }
.nx-vi-text-right { text-align: right; }
.nx-vi-text-left { text-align: left; }
.nx-vi-fw-700 { font-weight: 700; }
.nx-vi-gateway-select { font-size: var(--nx-font-size-md); font-weight: 700; border-radius: var(--nx-radius-sm); background: var(--nx-bg); border-color: var(--nx-border); color: var(--nx-text); }
.nx-vi-credit-title { font-weight: 800; margin-bottom: 8px; color: var(--nx-success); }
.nx-vi-credit-desc { margin: 0 0 12px 0; }
.nx-vi-credit-row { max-width: 320px; gap: 8px; }
.nx-vi-credit-input { border-radius: var(--nx-radius-sm); font-weight: 700; }
.nx-vi-credit-btn { border-radius: var(--nx-radius-sm); height: 36px; padding: 0 16px; }
.nx-vi-tax-note { font-size: var(--nx-font-size-xs); color: var(--nx-muted); margin-top: 20px; }
.nx-vi-mb-0 { margin-bottom: 0; }
.nx-vi-empty-cell { text-align: center; color: var(--nx-muted); font-size: var(--nx-font-size-md); padding: 24px; }
.nx-vi-balance-label { text-align: right; font-weight: 800; border-bottom: none; }
.nx-vi-balance-value { color: var(--nx-primary); font-size: var(--nx-font-size-lg); border-bottom: none; }
.nx-vi-icon-19 { font-size: 19px; }

/* --- Invoices --- */
.nx-inv-stat-row { gap: 0; margin-left: -10px; margin-right: -10px; }
.nx-inv-tile-danger { background: linear-gradient(135deg, #f04438 0%, #d92d20 100%); border-radius: var(--nx-radius-card); padding: 22px; color: #fff; box-shadow: 0 10px 24px rgba(240,68,56,0.22); height: 100%; }
.nx-inv-tile { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 22px; box-shadow: 0 1px 2px rgba(16,24,40,.04); height: 100%; }
.nx-inv-tile-label-light { font-size: var(--nx-font-size-md); font-weight: 700; color: rgba(255,255,255,0.85); }
.nx-inv-tile-value-light { font-size: 34px; font-weight: 800; color: #fff; letter-spacing: -1px; margin-top: 8px; }
.nx-inv-tile-hint-light { font-size: var(--nx-font-size-sm); color: rgba(255,255,255,0.8); font-weight: 600; margin-top: 4px; }
.nx-inv-tile-label { font-size: var(--nx-font-size-md); font-weight: 700; color: var(--nx-muted); }
.nx-inv-tile-value { font-size: 34px; font-weight: 800; color: var(--nx-text); letter-spacing: -1px; margin-top: 8px; }
.nx-inv-tile-value-success { font-size: 34px; font-weight: 800; color: #12b76a; letter-spacing: -1px; margin-top: 8px; }
.nx-inv-tile-hint { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 600; margin-top: 4px; }
.nx-inv-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); overflow: hidden; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-inv-border { border-color: var(--nx-border); }
.nx-inv-card-title { margin: 0; font-size: 15.5px; font-weight: 800; color: var(--nx-text); }
.nx-inv-link { font-size: 13px; color: var(--nx-primary); font-weight: 700; text-decoration: none; }
.nx-inv-va-middle { vertical-align: middle; }
.nx-inv-thead-row { border-bottom: 1px solid var(--nx-border); background: rgba(0,0,0,0.01); }
.nx-inv-row { border-bottom: 1px solid var(--nx-border); vertical-align: middle; }
.nx-inv-num { font-size: 14.5px; font-weight: 700; color: var(--nx-text); }
.nx-inv-date { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); }
.nx-inv-total { font-size: var(--nx-font-size); font-weight: 700; color: var(--nx-text); }
.nx-inv-btn-pay { border-radius: var(--nx-radius-md); background: var(--nx-primary); color: #fff; font-size: 13px; border: none; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-inv-btn-manage { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: 13px; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-inv-empty { border: none; color: var(--nx-muted); font-size: var(--nx-font-size); font-weight: 600; }
.nx-inv-empty-icon { font-size: 40px; color: var(--nx-border); margin-bottom: 8px; display: block; }
.nx-inv-page-link { border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 6px 12px; }
.nx-inv-page-info { border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-muted); font-weight: 600; padding: 6px 12px; }
.nx-inv-gap-22 { gap: 22px; }
.nx-inv-side-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 20px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-inv-cc { background: #0f172a; border-radius: var(--nx-radius-card); padding: 22px; color: #fff; position: relative; overflow: hidden; box-shadow: 0 12px 24px rgba(15,23,42,0.18); min-height: 160px; display: flex; flex-direction: column; justify-content: space-between; margin-bottom: 16px; }
.nx-inv-cc-deco1 { position: absolute; right: -20px; bottom: -20px; width: 140px; height: 140px; border-radius: 50%; background: linear-gradient(135deg, rgba(255,255,255,0.06) 0%, rgba(255,255,255,0.02) 100%); }
.nx-inv-cc-deco2 { position: absolute; right: 20px; top: -10px; width: 80px; height: 80px; border-radius: 50%; background: rgba(255,255,255,0.02); }
.nx-inv-cc-top { display: flex; justify-content: space-between; align-items: start; z-index: 2; }
.nx-inv-cc-brand { font-size: var(--nx-font-size-md); font-weight: 800; letter-spacing: 0.5px; text-transform: uppercase; color: #94a3b8; }
.nx-inv-cc-chip { color: rgba(255,255,255,0.7); font-size: 24px; }
.nx-inv-cc-number { font-size: 19px; font-weight: 600; letter-spacing: 2px; font-family: monospace, ui-monospace; margin: 16px 0; z-index: 2; }
.nx-inv-cc-bottom { display: flex; justify-content: space-between; align-items: end; z-index: 2; }
.nx-inv-cc-col { display: flex; flex-direction: column; }
.nx-inv-cc-col-right { display: flex; flex-direction: column; text-align: right; }
.nx-inv-cc-label { font-size: 9px; text-transform: uppercase; color: #64748b; font-weight: 700; letter-spacing: 0.5px; }
.nx-inv-cc-value { font-size: 13px; font-weight: 700; color: #f8fafc; margin-top: 1px; }
.nx-inv-add-card { display: flex; align-items: center; justify-content: center; gap: 8px; border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: 13px; padding: 11px 0; border-radius: var(--nx-radius-md); text-decoration: none; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-inv-add-card-icon { font-size: var(--nx-font-size-h3); color: var(--nx-primary); }
.nx-inv-contact { display: flex; flex-direction: column; gap: 4px; font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); line-height: 1.55; margin-bottom: 16px; }
.nx-inv-contact-name { font-size: 15.5px; font-weight: 700; color: var(--nx-text); }
.nx-inv-contact-email { color: var(--nx-muted); font-size: var(--nx-font-size-md); }
.nx-inv-contact-addr { margin-top: 6px; font-size: 13px; color: var(--nx-muted); font-weight: 500; }

/* --- Mass Pay --- */
.nx-mp-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-mp-overflow-hidden { overflow: hidden; }
.nx-mp-body-30 { padding: 30px; }
.nx-mp-body-24 { padding: 24px; }
.nx-mp-gap-10 { gap: 10px; }
.nx-mp-icon-22 { color: var(--nx-primary); font-size: var(--nx-font-size-h2); }
.nx-mp-icon-20 { color: var(--nx-primary); font-size: 20px; }
.nx-mp-icon-19 { font-size: 19px; }
.nx-mp-table { width: 100%; border-collapse: collapse; margin-bottom: 0; }
.nx-mp-thead-row { border-bottom: 2px solid var(--nx-border); }
.nx-mp-th { font-size: var(--nx-font-size-xs); font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; color: var(--nx-muted); padding: 12px 16px; border: none; }
.nx-mp-text-right { text-align: right; }
.nx-mp-inv-head-cell { padding: 20px 16px 8px 16px; border: none; vertical-align: middle; }
.nx-mp-inv-badge { background: rgba(79,70,229,0.06); color: var(--nx-primary); font-size: 11.5px; font-weight: 800; padding: 4px 10px; border-radius: 6px; text-transform: uppercase; letter-spacing: 0.5px; display: inline-flex; align-items: center; gap: 4px; }
.nx-mp-row { border-bottom: 1px solid var(--nx-border); }
.nx-mp-td-desc { padding: 12px 16px; border: none; font-size: var(--nx-font-size-md); font-weight: 600; color: var(--nx-muted); vertical-align: middle; }
.nx-mp-td-amount { padding: 12px 16px; border: none; font-size: var(--nx-font-size-md); font-weight: 800; color: var(--nx-text); text-align: right; vertical-align: middle; }
.nx-mp-empty { text-align: center; color: var(--nx-muted); font-size: var(--nx-font-size-md); padding: 30px; }
.nx-mp-totals { background: var(--nx-bg); border-radius: var(--nx-radius-md); padding: 20px; margin-top: 24px; max-width: 380px; margin-left: auto; display: flex; flex-direction: column; gap: 10px; }
.nx-mp-total-line { display: flex; justify-content: space-between; font-size: var(--nx-font-size-md); font-weight: 600; color: var(--nx-muted); }
.nx-mp-total-val { color: var(--nx-text); font-weight: 800; }
.nx-mp-sep { border-top: 1px dashed var(--nx-border); margin: 4px 0; }
.nx-mp-grand { display: flex; justify-content: space-between; font-size: 15.5px; font-weight: 800; color: var(--nx-text); }
.nx-mp-grand-val { color: var(--nx-primary); font-size: var(--nx-font-size-h3); }
.nx-mp-card-head { background: rgba(0,0,0,0.01); border-bottom: 1px solid var(--nx-border); padding: 18px 24px; gap: 8px; }
.nx-mp-card-title { font-size: var(--nx-font-size-lg); font-weight: 800; color: var(--nx-text); }
.nx-mp-label { font-size: var(--nx-font-size-xs); font-weight: 800; color: var(--nx-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; display: block; }
.nx-mp-select { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; padding: 0 12px; outline: none; }
.nx-mp-mb-14 { margin-bottom: 14px; }
.nx-mp-pay-btn { height: 44px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 800; font-size: var(--nx-font-size); gap: 8px; color: #fff; width: 100%; box-shadow: 0 4px 12px rgba(79,70,229,0.2); cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-mp-pay-btn:hover { background: var(--nx-primary-hover); box-shadow: 0 6px 16px rgba(79,70,229,0.3); }
.nx-mp-secure { font-size: 11.5px; color: var(--nx-muted); font-weight: 700; display: flex; align-items: center; justify-content: center; gap: 6px; }
.nx-mp-secure-icon { font-size: var(--nx-font-size-xl); color: var(--nx-success); }

/* --- Invoice Payment --- */
.nx-ip-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); box-shadow: 0 1px 2px rgba(16,24,40,.04); overflow: hidden; }
.nx-ip-card-head { background: rgba(0,0,0,0.01); border-bottom: 1px solid var(--nx-border); padding: 18px 24px; gap: 8px; }
.nx-ip-body-24 { padding: 24px; }
.nx-ip-icon-22 { color: var(--nx-primary); font-size: var(--nx-font-size-h2); }
.nx-ip-card-title { font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }
.nx-ip-mb-18 { margin-bottom: 18px; }
.nx-ip-mb-0 { margin-bottom: 0; }
.nx-ip-label { font-size: 12.5px; font-weight: 800; color: var(--nx-muted); padding-top: 10px; }
.nx-ip-submit { height: 46px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 800; font-size: var(--nx-font-size); gap: 8px; color: #fff; padding: 0 26px; box-shadow: 0 4px 12px rgba(79,70,229,0.2); }
.nx-ip-icon-19 { font-size: 19px; }
.nx-ip-ssl-alert { border-radius: var(--nx-radius-md); gap: 8px; margin-top: 20px; }
.nx-ip-icon-20 { font-size: 20px; }

/* --- Payment Methods Manage --- */
.nx-pmm-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-pmm-body { padding: 30px; }
.nx-pmm-title { margin: 0; font-size: var(--nx-font-size-h3); font-weight: 800; color: var(--nx-text); }
.nx-pmm-intro { color: var(--nx-muted); font-size: var(--nx-font-size-md); font-weight: 600; margin-top: 4px; margin-bottom: 30px; }
.nx-pmm-alert { border-radius: var(--nx-radius-md); font-weight: 600; margin-bottom: 24px; }
.nx-pmm-pt-8 { padding-top: 8px; }
.nx-pmm-pt-4 { padding-top: 4px; }
.nx-pmm-gap-20 { gap: 20px; }
.nx-pmm-radio { margin: 0; width: 16px; height: 16px; }
.nx-pmm-radio-plain { width: 16px; height: 16px; }
.nx-pmm-igroup { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); overflow: hidden; display: flex; align-items: center; width: 100%; }
.nx-pmm-iginput { border: none; height: 100%; font-weight: 600; padding: 0 16px; flex-grow: 1; outline: none; background: transparent; color: var(--nx-text); font-size: var(--nx-font-size); }
.nx-pmm-igsuffix { padding-right: 16px; font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 700; }
.nx-pmm-igicon { padding-right: 16px; color: var(--nx-muted); display: flex; align-items: center; }
.nx-pmm-ico-20 { font-size: 20px; }
.nx-pmm-ico-19 { font-size: 19px; }
.nx-pmm-ico-18 { font-size: var(--nx-font-size-h3); }
.nx-pmm-ico-16 { font-size: var(--nx-font-size-xl); }
.nx-pmm-fw-600 { font-weight: 600; }
.nx-pmm-loadtxt { font-weight: 600; color: var(--nx-muted); }
.nx-pmm-input { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 0 16px; outline: none; font-size: var(--nx-font-size); }
.nx-pmm-w-140 { max-width: 140px; }
.nx-pmm-w-100 { max-width: 100px; }
.nx-pmm-w-full { width: 100%; }
.nx-pmm-err { font-size: var(--nx-font-size-sm); color: var(--nx-danger); font-weight: 700; }
.nx-pmm-linkbtn { padding: 0; color: var(--nx-primary); text-decoration: none; font-size: var(--nx-font-size-md); border: none; background: transparent; box-shadow: none; }
.nx-pmm-radiolabel { gap: 8px; font-weight: 700; color: var(--nx-text); cursor: pointer; margin: 0; }
.nx-pmm-mb-12 { margin-bottom: 12px; }
.nx-pmm-mt-20 { margin-top: 20px; }
.nx-pmm-m-0 { margin: 0; }
.nx-pmm-btn-add { height: 38px; border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: 13px; padding: 0 16px; gap: 6px; }
.nx-pmm-btn-primary { height: 44px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 700; font-size: var(--nx-font-size-md); padding: 0 24px; gap: 8px; color: #fff; }
.nx-pmm-btn-cancel { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: var(--nx-font-size-md); padding: 0 24px; }
.nx-pmm-iframe { border: 1px solid var(--nx-border); border-radius: var(--nx-radius-md); background: var(--nx-card-bg); }
.nx-pmm-modal { border-radius: var(--nx-radius-card); border: 1px solid var(--nx-border); background: var(--nx-card-bg); overflow: hidden; }
.nx-pmm-mhead { border-bottom: 1px solid var(--nx-border); padding: 18px 24px; }
.nx-pmm-mtitle { font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }
.nx-pmm-mclose { color: var(--nx-text); opacity: 0.5; }
.nx-pmm-mbody { padding: 24px; }
.nx-pmm-mfoot { border-top: 1px solid var(--nx-border); padding: 18px 24px; gap: 12px; display: flex; justify-content: flex-end; }
.nx-pmm-btn-no { height: 38px; border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); font-weight: 700; font-size: 13px; padding: 0 18px; color: var(--nx-text); background: var(--nx-card-bg); }
.nx-pmm-btn-yes { height: 38px; border-radius: var(--nx-radius-sm); border: none; font-weight: 700; font-size: 13px; padding: 0 18px; color: #fff; background: var(--nx-primary); }

/* --- Payment Methods --- */
.nx-pm-intro { color: var(--nx-muted); font-size: var(--nx-font-size-md); font-weight: 600; margin-top: 4px; margin-bottom: 24px; }
.nx-pm-btn-primary { height: 44px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 700; font-size: var(--nx-font-size-md); padding: 0 20px; gap: 8px; color: #fff; }
.nx-pm-btn-outline { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: var(--nx-font-size-md); padding: 0 20px; gap: 8px; }
.nx-pm-table { margin-bottom: 0; }
.nx-pm-thead-row { border-bottom: 2px solid var(--nx-border); }
.nx-pm-th { font-size: var(--nx-font-size-xs); font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; color: var(--nx-muted); border: none; padding: 12px 16px; }
.nx-pm-right { text-align: right; }
.nx-pm-row { border-bottom: 1px solid var(--nx-border); vertical-align: middle; }
.nx-pm-td { padding: 16px; border: none; vertical-align: middle; }
.nx-pm-name { font-weight: 800; color: var(--nx-text); font-size: 14.5px; }
.nx-pm-desc { font-weight: 600; color: var(--nx-muted); font-size: var(--nx-font-size-md); }
.nx-pm-chip { width: 44px; height: 28px; border-radius: 6px; background: linear-gradient(135deg, var(--nx-secondary) 0%, var(--nx-primary) 100%); display: flex; align-items: center; justify-content: center; color: #fff; box-shadow: 0 2px 6px rgba(var(--nx-primary-rgb),0.2); }
.nx-pm-pill-active { background: rgba(16,185,129,0.08); color: #10b981; border-radius: var(--nx-radius-card); font-weight: 700; padding: 4px 12px; font-size: var(--nx-font-size-sm); gap: 6px; }
.nx-pm-dot-active { width: 6px; height: 6px; background-color: #10b981; border-radius: 50%; display: inline-block; }
.nx-pm-pill { background: rgba(107,114,128,0.08); color: var(--nx-muted); border-radius: var(--nx-radius-card); font-weight: 700; padding: 4px 12px; font-size: var(--nx-font-size-sm); gap: 6px; }
.nx-pm-dot { width: 6px; height: 6px; background-color: var(--nx-muted); border-radius: 50%; display: inline-block; }
.nx-pm-gap-8 { gap: 8px; }
.nx-pm-gap-6 { gap: 6px; }
.nx-pm-btn-sm { height: 34px; border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: 12.5px; padding: 0 14px; }
.nx-pm-btn-del { height: 34px; border-radius: var(--nx-radius-sm); border: 1px solid #fee2e2; background: #fffcfc; color: #ef4444; font-weight: 700; font-size: 12.5px; padding: 0 14px; gap: 6px; }
.nx-pm-td-empty { text-align: center; color: var(--nx-muted); font-size: var(--nx-font-size-md); padding: 30px; }
.nx-pm-mbody { padding: 24px; font-size: 14.0px; color: var(--nx-text); font-weight: 600; }
.nx-pm-btn-danger { height: 38px; border-radius: var(--nx-radius-sm); border: none; font-weight: 700; font-size: 13px; padding: 0 18px; color: #fff; background: #ef4444; }

/* --- Contacts Manage --- */
.nx-acm-mb-0 { margin-bottom: 0; }
.nx-acm-checklabel { gap: 10px; font-weight: 600; color: var(--nx-text); cursor: pointer; margin: 0; }
.nx-acm-check { width: 18px; height: 18px; margin: 0; position: static; }
.nx-acm-modal { border-radius: var(--nx-radius-card); border: 1px solid var(--nx-border); background: var(--nx-card-bg); }
.nx-acm-mbody { padding: 24px; color: var(--nx-text); font-weight: 600; }

/* --- User Management --- */
.nx-aum-success { color: var(--nx-success); }
.nx-aum-note { margin: 12px 0 0; }
.nx-aum-mr-20 { margin-right: 20px; }
.nx-aum-permbox { background: var(--nx-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-md); padding: 18px; }
.nx-aum-permlabel { display: block; margin-bottom: 8px; }

/* --- Invite Accept --- */
.nx-uia-card { max-width: 760px; margin: 0 auto; }
.nx-uia-body { padding: 44px 32px; }
.nx-uia-h2 { color: var(--nx-text); font-weight: 800; }
.nx-uia-danger { color: var(--nx-danger); }
.nx-uia-box { background: var(--nx-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card,16px); padding: 24px; height: 100%; }
.nx-uia-box-title { color: var(--nx-text); font-weight: 800; font-size: 20px; margin-bottom: 18px; }
.nx-uia-progress { height: 10px; border-radius: var(--nx-radius-badge); background: var(--nx-border); }

/* --- Verify Email Page --- */
.nx-uve-card { max-width: 540px; margin: 0 auto; }
.nx-uve-success { color: var(--nx-success); }
.nx-uve-warning { color: var(--nx-warning); }

/* --- Client Details --- */
.nx-cad-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 24px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-cad-h-100 { height: 100%; }
.nx-cad-cardtitle { margin-bottom: 20px; border-bottom: 1px solid var(--nx-border); padding-bottom: 12px; }
.nx-cad-ico { font-size: 20px; vertical-align: middle; color: var(--nx-primary); }
.nx-cad-label { font-weight: 700; font-size: 13px; color: var(--nx-text); }
.nx-cad-checklabel { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); gap: 10px; cursor: pointer; }
.nx-cad-check { width: 18px; height: 18px; }
/* Colour comes from the shared input[type="checkbox"] rules. */
.nx-cad-check-lg { width: 20px; height: 20px; }
.nx-cad-mkt { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 16px; }
.nx-cad-mkt-title { margin: 0 0 6px 0; }
.nx-cad-mkt-desc { font-size: 13px; color: var(--nx-muted); margin: 0; }
.nx-cad-flex-center { display: flex; align-items: center; }
.nx-cad-btn-save { border-radius: var(--nx-radius-button, 10px); background: var(--nx-primary); border: none; height: 42px; }
.nx-cad-btn-reset { border-radius: var(--nx-radius-button, 10px); background: var(--nx-border); border: none; color: var(--nx-text); height: 42px; }

/* --- Verify Email Banner --- */
/* Email-verification banner. The whole block used to be literal amber
   (#fffbeb / #fef3c7 / #d97706) with slate text, so it stayed a bright card on
   dark and ignored the admin palette. It is now mixed from --nx-warning against
   the current surface, exactly like .nx-u-pill.is-warning. */
/* The layout lives here rather than on Bootstrap's d-flex/flex-* utilities,
   because those carry !important — and WHMCS dismisses this banner with
   jQuery .hide(), which only sets an inline display. The utility won that
   fight, so the close button posted the dismissal but the banner stayed on
   screen. */
.nx-vem-banner {
    background: color-mix(in srgb, var(--nx-warning) 10%, var(--nx-card-bg));
    border: 1.5px solid color-mix(in srgb, var(--nx-warning) 28%, var(--nx-border));
    border-radius: var(--nx-radius-card);
    padding: 14px 20px;
    margin-bottom: 28px;
    width: 100%;
    gap: 16px;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
@media (min-width: 768px) {
    .nx-vem-banner {
        flex-direction: row;
        align-items: center;
    }
}
.nx-vem-left { gap: 16px; min-width: 0; flex: 1; }
.nx-vem-icon {
    width: 40px;
    height: 40px;
    border-radius: var(--nx-radius-md);
    background: color-mix(in srgb, var(--nx-warning) 18%, var(--nx-card-bg));
    color: var(--nx-warning);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.nx-vem-labels { text-align: left; min-width: 0; }
.nx-vem-title { margin: 0 0 2px; font-size: var(--nx-font-size); font-weight: 700; color: var(--nx-text); }
.nx-vem-desc { margin: 0; font-size: 12.5px; color: var(--nx-muted); line-height: 1.4; }
.nx-vem-desc strong { color: var(--nx-text); }
.nx-vem-right { gap: 16px; flex-shrink: 0; }
.nx-vem-btn-resend { gap: 8px; font-weight: 700; font-size: 13px; padding: 8px 16px; border-radius: var(--nx-radius-sm); background: var(--nx-primary); border: none; color: #fff; box-shadow: 0 4px 12px rgba(var(--nx-primary-rgb), 0.25); cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-vem-btn-resend:hover { background: var(--nx-primary-hover); color: #fff; }
.nx-vem-send-ico { font-size: var(--nx-font-size-lg); transform: rotate(-25deg); margin-top: -2px; }
.nx-vem-close { border: none; background: transparent; color: var(--nx-muted); font-size: 20px; line-height: 1; cursor: pointer; transition: color 0.15s ease; }
.nx-vem-close:hover { color: var(--nx-danger); }

/* --- Product Details --- */
.nx-pd-backlink.nx-pd-backlink.nx-pd-backlink { text-decoration: none; gap: 4px; }
.nx-pd-ic-16.nx-pd-ic-16.nx-pd-ic-16 { font-size: var(--nx-font-size-xl); vertical-align: middle; }
.nx-pd-ic-19.nx-pd-ic-19.nx-pd-ic-19 { font-size: 19px; }
.nx-pd-alert-danger.nx-pd-alert-danger.nx-pd-alert-danger { border-radius: var(--nx-radius-md); font-weight: 600; }
.nx-pd-gap-14.nx-pd-gap-14.nx-pd-gap-14 { gap: 14px; }
.nx-pd-gap-16.nx-pd-gap-16.nx-pd-gap-16 { gap: 16px; }
.nx-pd-banner.nx-pd-banner.nx-pd-banner { background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-secondary) 100%); border-radius: var(--nx-radius-card); padding: 28px 32px; color: #fff; box-shadow: 0 10px 30px rgba(var(--nx-primary-rgb),0.18); margin-bottom: 24px; position: relative; overflow: hidden; }
.nx-pd-deco-1.nx-pd-deco-1.nx-pd-deco-1 { position: absolute; right: -50px; top: -50px; width: 220px; height: 220px; border-radius: 50%; border: 20px solid rgba(255,255,255,0.03); pointer-events: none; }
.nx-pd-deco-2.nx-pd-deco-2.nx-pd-deco-2 { position: absolute; right: 20px; bottom: -80px; width: 180px; height: 180px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.05); pointer-events: none; }
.nx-pd-banner-icon.nx-pd-banner-icon.nx-pd-banner-icon { width: 48px; height: 48px; border-radius: var(--nx-radius-md); background: rgba(255,255,255,0.12); color: #fff; display: flex; align-items: center; justify-content: center; font-size: var(--nx-font-size-h2); }
.nx-pd-banner-eyebrow.nx-pd-banner-eyebrow.nx-pd-banner-eyebrow { font-size: var(--nx-font-size-xs); font-weight: 800; text-transform: uppercase; letter-spacing: 0.8px; color: rgba(255,255,255,0.65); }
.nx-pd-banner-title.nx-pd-banner-title.nx-pd-banner-title { margin: 0; font-size: var(--nx-font-size-h2); font-weight: 800; color: #fff; letter-spacing: -0.5px; }
.nx-pd-banner-domain.nx-pd-banner-domain.nx-pd-banner-domain { color: rgba(255,255,255,0.95); font-weight: 600; font-size: var(--nx-font-size); text-decoration: none; }
.nx-pd-status-pill.nx-pd-status-pill.nx-pd-status-pill { background: rgba(255,255,255,0.15); color: #fff; border-radius: var(--nx-radius-card); font-weight: 700; padding: 6px 16px; font-size: 13px; gap: 8px; }
.nx-pd-status-dot.nx-pd-status-dot.nx-pd-status-dot { width: 8px; height: 8px; background-color: #4ade80; border-radius: 50%; display: inline-block; }
.nx-pd-banner-row.nx-pd-banner-row.nx-pd-banner-row { border-top: 1px solid rgba(255,255,255,0.15); gap: 16px 0; }
.nx-pd-banner-cell-label.nx-pd-banner-cell-label.nx-pd-banner-cell-label { font-size: var(--nx-font-size-sm); color: rgba(255,255,255,0.7); font-weight: 600; }
.nx-pd-banner-cell-value.nx-pd-banner-cell-value.nx-pd-banner-cell-value { font-size: var(--nx-font-size-xl); font-weight: 800; color: #fff; margin-top: 2px; }
.nx-pd-card.nx-pd-card.nx-pd-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); overflow: hidden; box-shadow: 0 1px 2px rgba(16,24,40,.04); margin-bottom: 24px; }
.nx-pd-card-head.nx-pd-card-head.nx-pd-card-head { padding: 20px 24px; border-bottom: 1px solid var(--nx-border); }
.nx-pd-card-title.nx-pd-card-title.nx-pd-card-title { margin: 0; font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }
.nx-pd-cell.nx-pd-cell.nx-pd-cell { padding: 20px 24px; }
.nx-pd-cell-bb.nx-pd-cell-bb.nx-pd-cell-bb { border-bottom: 1px solid var(--nx-border); }
.nx-pd-cell-br.nx-pd-cell-br.nx-pd-cell-br { border-right: 1px solid var(--nx-border); }
.nx-pd-cell-label.nx-pd-cell-label.nx-pd-cell-label { letter-spacing: 0.5px; font-size: var(--nx-font-size-xs); }
.nx-pd-cell-value.nx-pd-cell-value.nx-pd-cell-value { color: var(--nx-text); font-size: 14.5px; margin-top: 4px; }
.nx-pd-card-pad24.nx-pd-card-pad24.nx-pd-card-pad24 { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 24px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-pd-cf-title.nx-pd-cf-title.nx-pd-cf-title { margin-top: 0; margin-bottom: 18px; font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }
.nx-pd-row-gap16.nx-pd-row-gap16.nx-pd-row-gap16 { gap: 16px 0; }
.nx-pd-cf-value.nx-pd-cf-value.nx-pd-cf-value { color: var(--nx-text); font-size: 14.5px; margin-top: 2px; }
.nx-pd-actions-card.nx-pd-actions-card.nx-pd-actions-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 20px; box-shadow: 0 1px 2px rgba(16,24,40,.04); display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px; }
.nx-pd-action-btn.nx-pd-action-btn.nx-pd-action-btn { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: var(--nx-font-size-md); gap: 8px; height: 42px; }
.nx-pd-cancel-btn.nx-pd-cancel-btn.nx-pd-cancel-btn { border-radius: var(--nx-radius-md); border: 1px solid #fee2e2; background: #fffcfc; color: #ef4444; font-size: var(--nx-font-size-md); gap: 8px; height: 42px; }
.nx-pd-ic-cancel.nx-pd-ic-cancel.nx-pd-ic-cancel { font-size: 19px; color: #f04438; }

/* --- Products --- */
.nx-prods-stat-row.nx-prods-stat-row.nx-prods-stat-row { gap: 0; margin-left: -10px; margin-right: -10px; }
.nx-prods-tile.nx-prods-tile.nx-prods-tile { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 22px; box-shadow: 0 1px 2px rgba(16,24,40,.04); height: 100%; }
.nx-prods-tile-label.nx-prods-tile-label.nx-prods-tile-label { font-size: var(--nx-font-size-md); font-weight: 700; color: var(--nx-muted); }
.nx-prods-tile-value.nx-prods-tile-value.nx-prods-tile-value { font-size: 34px; font-weight: 800; letter-spacing: -1px; margin-top: 8px; }
.nx-prods-green.nx-prods-green.nx-prods-green { color: #12b76a; }
.nx-prods-red.nx-prods-red.nx-prods-red { color: #f04438; }
.nx-prods-orange.nx-prods-orange.nx-prods-orange { color: #f79009; }
.nx-prods-primary.nx-prods-primary.nx-prods-primary { color: var(--nx-primary); }
.nx-prods-gap-8.nx-prods-gap-8.nx-prods-gap-8 { gap: 8px; }
.nx-prods-tab.nx-prods-tab.nx-prods-tab { border-radius: var(--nx-radius-md); }
.nx-prods-tab-active.nx-prods-tab-active.nx-prods-tab-active { background: var(--nx-primary); color: #fff; border: none; }
.nx-prods-tab-inactive.nx-prods-tab-inactive.nx-prods-tab-inactive { background: var(--nx-card-bg); border: 1px solid var(--nx-border); color: var(--nx-text); }
.nx-prods-search-input.nx-prods-search-input.nx-prods-search-input, .nx-prods-search-input.nx-prods-search-input.nx-prods-search-input:focus { border-radius: var(--nx-radius-md) 0 0 var(--nx-radius-md); border: 1px solid var(--nx-border); color: var(--nx-text); font-size: var(--nx-font-size-md); height: 38px; }
.nx-prods-search-btn.nx-prods-search-btn.nx-prods-search-btn { border-radius: 0 10px 10px 0; border: 1px solid var(--nx-border); border-left: none; background: var(--nx-card-bg); color: var(--nx-muted); height: 38px; padding: 0 14px; }
.nx-prods-ic-18.nx-prods-ic-18.nx-prods-ic-18 { font-size: var(--nx-font-size-h3); vertical-align: middle; }
.nx-prods-table-card.nx-prods-table-card.nx-prods-table-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); overflow: hidden; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-prods-va-middle.nx-prods-va-middle.nx-prods-va-middle { vertical-align: middle; }
.nx-prods-thead-row.nx-prods-thead-row.nx-prods-thead-row { border-bottom: 1px solid var(--nx-border); background: rgba(0,0,0,0.01); }
.nx-prods-row.nx-prods-row.nx-prods-row { border-bottom: 1px solid var(--nx-border); vertical-align: middle; }
.nx-prods-prod-icon.nx-prods-prod-icon.nx-prods-prod-icon { width: 40px; height: 40px; border-radius: var(--nx-radius-md); display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; }
.nx-prods-flex-col.nx-prods-flex-col.nx-prods-flex-col { display: flex; flex-direction: column; }
.nx-prods-domain-link.nx-prods-domain-link.nx-prods-domain-link { font-size: var(--nx-font-size-sm); color: var(--nx-muted); text-decoration: none; font-weight: 500; margin-top: 1px; }
.nx-prods-cycle.nx-prods-cycle.nx-prods-cycle { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 500; }
.nx-prods-overdue.nx-prods-overdue.nx-prods-overdue { font-size: var(--nx-font-size); font-weight: 700; color: #f04438; }
.nx-prods-duedate.nx-prods-duedate.nx-prods-duedate { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); }
.nx-prods-manage-btn.nx-prods-manage-btn.nx-prods-manage-btn { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: 13px; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-prods-empty-cell.nx-prods-empty-cell.nx-prods-empty-cell { border: none; color: var(--nx-muted); font-size: var(--nx-font-size); font-weight: 600; }
.nx-prods-empty-icon.nx-prods-empty-icon.nx-prods-empty-icon { font-size: 40px; color: var(--nx-border); margin-bottom: 8px; display: block; }
.nx-prods-page-link.nx-prods-page-link.nx-prods-page-link.nx-prods-page-link { border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 6px 12px; }
.nx-prods-page-info.nx-prods-page-info.nx-prods-page-info.nx-prods-page-info { border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-muted); font-weight: 600; padding: 6px 12px; }

/* --- Upgrade --- */
.nx-upg-gap-12.nx-upg-gap-12.nx-upg-gap-12 { gap: 12px; }
.nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted, .nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted:hover, .nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted.nx-upg-btn-muted:focus { border-radius: var(--nx-radius-md); background-color: var(--nx-border); border: none; }
.nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary, .nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary:hover, .nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary.nx-upg-btn-primary:focus { border-radius: var(--nx-radius-md); background-color: var(--nx-primary); border: none; }
.nx-upg-info-alert.nx-upg-info-alert.nx-upg-info-alert { border-radius: var(--nx-radius-md); font-weight: 600; color: var(--nx-text); background: rgba(var(--nx-primary-rgb), 0.08); border: 1px solid var(--nx-border); gap: 12px; }
.nx-upg-ic-primary-20.nx-upg-ic-primary-20.nx-upg-ic-primary-20 { color: var(--nx-primary); font-size: 20px; }
.nx-upg-row-gap24.nx-upg-row-gap24.nx-upg-row-gap24 { gap: 24px 0; }
.nx-upg-pkg-card.nx-upg-pkg-card.nx-upg-pkg-card { background: var(--nx-card-bg); border: 2px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 28px 24px; box-shadow: 0 4px 20px rgba(0,0,0,0.02); height: 100%; display: flex; flex-direction: column; justify-content: space-between; position: relative; }
.nx-upg-pkg-card-rec.nx-upg-pkg-card-rec.nx-upg-pkg-card-rec { border-color: var(--nx-primary); }
.nx-upg-rec-badge.nx-upg-rec-badge.nx-upg-rec-badge { position: absolute; top: -14px; right: 24px; border-radius: var(--nx-radius-card); font-size: var(--nx-font-size-xs); background: var(--nx-primary); color: #fff; letter-spacing: 0.5px; text-transform: uppercase; }
.nx-upg-pkg-name.nx-upg-pkg-name.nx-upg-pkg-name { margin-top: 0; margin-bottom: 8px; font-size: var(--nx-font-size-h3); font-weight: 800; color: var(--nx-text); }
.nx-upg-price-26.nx-upg-price-26.nx-upg-price-26 { font-size: 26px; font-weight: 800; color: var(--nx-text); }
.nx-upg-price-28.nx-upg-price-28.nx-upg-price-28 { font-size: 28px; font-weight: 800; color: var(--nx-text); }
.nx-upg-price-20.nx-upg-price-20.nx-upg-price-20 { font-size: 20px; font-weight: 800; color: var(--nx-text); }
.nx-upg-price-term.nx-upg-price-term.nx-upg-price-term { font-size: 13px; color: var(--nx-muted); font-weight: 600; margin-left: 4px; }
.nx-upg-price-term-lg.nx-upg-price-term-lg.nx-upg-price-term-lg { font-size: var(--nx-font-size-md); color: var(--nx-muted); font-weight: 600; margin-left: 4px; }
.nx-upg-desc.nx-upg-desc.nx-upg-desc { font-size: var(--nx-font-size-md); color: var(--nx-muted); font-weight: 500; line-height: 1.7; margin-bottom: 24px; }
.nx-upg-desc-list.nx-upg-desc-list.nx-upg-desc-list { display: flex; flex-direction: column; gap: 10px; }
.nx-upg-check.nx-upg-check.nx-upg-check { color: #12b76a; font-size: var(--nx-font-size-xl); font-variation-settings: 'FILL' 1; }
.nx-upg-check-mt.nx-upg-check-mt.nx-upg-check-mt { color: #12b76a; font-size: var(--nx-font-size-xl); font-variation-settings: 'FILL' 1; margin-top: 2px; }
.nx-upg-cycle-select.nx-upg-cycle-select.nx-upg-cycle-select, .nx-upg-cycle-select.nx-upg-cycle-select.nx-upg-cycle-select:focus { border-radius: var(--nx-radius-md); border-color: var(--nx-border); font-size: var(--nx-font-size-md); height: 38px; }
.nx-upg-btn-current.nx-upg-btn-current.nx-upg-btn-current { border-radius: var(--nx-radius-md); background: var(--nx-border); color: var(--nx-muted); border: none; font-size: var(--nx-font-size-md); }
.nx-upg-choose-btn.nx-upg-choose-btn.nx-upg-choose-btn { border-radius: var(--nx-radius-md); font-size: var(--nx-font-size-md); }
.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec, .nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec:hover, .nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec.nx-upg-choose-btn-rec:focus { background: var(--nx-primary); border: none; color: #fff; }
.nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def, .nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def:hover, .nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def.nx-upg-choose-btn-def:focus { border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); }
.nx-upg-tr-b.nx-upg-tr-b.nx-upg-tr-b { border-bottom: 1px solid var(--nx-border); }
.nx-upg-th.nx-upg-th.nx-upg-th { border: none; color: var(--nx-muted); font-size: var(--nx-font-size-sm); font-weight: 800; text-transform: uppercase; }
.nx-upg-td-name.nx-upg-td-name.nx-upg-td-name { border: none; font-weight: 700; color: var(--nx-text); vertical-align: middle; }
.nx-upg-td-current.nx-upg-td-current.nx-upg-td-current { border: none; font-weight: 600; color: var(--nx-muted); vertical-align: middle; }
.nx-upg-td-plain.nx-upg-td-plain.nx-upg-td-plain { border: none; vertical-align: middle; }
.nx-upg-r-8.nx-upg-r-8.nx-upg-r-8 { border-radius: var(--nx-radius-sm); }
.nx-upg-switch-lbl.nx-upg-switch-lbl.nx-upg-switch-lbl { margin: 0; vertical-align: middle; }
.nx-upg-qty-input.nx-upg-qty-input.nx-upg-qty-input { border-radius: var(--nx-radius-sm); max-width: 120px; }
.nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue, .nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue:hover, .nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue.nx-upg-btn-continue:focus { border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-size: var(--nx-font-size); }

/* --- Upgrade Configure --- */
.nx-upc-h4.nx-upc-h4.nx-upc-h4 { color: var(--nx-text); font-weight: 800; margin-bottom: 16px; }
.nx-upc-h4-lg.nx-upc-h4-lg.nx-upc-h4-lg { color: var(--nx-text); font-weight: 800; margin-bottom: 18px; }
.nx-upc-h5.nx-upc-h5.nx-upc-h5 { color: var(--nx-text); font-weight: 700; margin: 0; }
.nx-upc-small.nx-upc-small.nx-upc-small { color: var(--nx-muted); font-weight: 500; }
.nx-upc-prod-card.nx-upc-prod-card.nx-upc-prod-card { display: flex; flex-direction: column; position: relative; }
.nx-upc-prod-name.nx-upc-prod-name.nx-upc-prod-name { color: var(--nx-text); font-weight: 800; font-size: var(--nx-font-size-h3); }
.nx-upc-prod-desc.nx-upc-prod-desc.nx-upc-prod-desc { color: var(--nx-muted); font-size: var(--nx-font-size-md); }
.nx-upc-grow.nx-upc-grow.nx-upc-grow { flex-grow: 1; }
.nx-upc-feature.nx-upc-feature.nx-upc-feature { border-bottom: 1px solid var(--nx-border); font-size: var(--nx-font-size-md); color: var(--nx-text); }
.nx-upc-ic-yes.nx-upc-ic-yes.nx-upc-ic-yes { color: var(--nx-success); }
.nx-upc-ic-no.nx-upc-ic-no.nx-upc-ic-no { color: var(--nx-muted); }
.nx-upc-qty-lbl.nx-upc-qty-lbl.nx-upc-qty-lbl { color: var(--nx-muted); font-size: 13px; }
.nx-upc-qty-input.nx-upc-qty-input.nx-upc-qty-input { width: 100px; }

/* --- Cancel Request --- */
.nx-cr-r-10.nx-cr-r-10.nx-cr-r-10 { border-radius: var(--nx-radius-md); }
.nx-cr-warn-banner.nx-cr-warn-banner.nx-cr-warn-banner { border-radius: var(--nx-radius-md); font-weight: 600; color: #9f1239; background: #fff1f2; border: 1px solid #fecdd3; gap: 12px; }
.nx-cr-warn-icon.nx-cr-warn-icon.nx-cr-warn-icon { color: #f43f5e; font-size: var(--nx-font-size-h2); }
.nx-cr-form-card.nx-cr-form-card.nx-cr-form-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 28px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-cr-label.nx-cr-label.nx-cr-label { font-size: var(--nx-font-size-md); font-weight: 800; color: var(--nx-text); margin-bottom: 8px; display: block; }
.nx-cr-label-lg.nx-cr-label-lg.nx-cr-label-lg { font-size: var(--nx-font-size-md); font-weight: 800; color: var(--nx-text); margin-bottom: 12px; display: block; }
.nx-cr-type-card.nx-cr-type-card.nx-cr-type-card { border-radius: var(--nx-radius-md); cursor: pointer; display: flex; align-items: center; gap: 14px; transition: border 0.15s ease; }
.nx-cr-type-selected.nx-cr-type-selected.nx-cr-type-selected { border: 2px solid var(--nx-primary); background: rgba(var(--nx-primary-rgb),0.02); }
.nx-cr-type-unselected.nx-cr-type-unselected.nx-cr-type-unselected { border: 1px solid var(--nx-border); }
.nx-cr-radio.nx-cr-radio.nx-cr-radio { width: 18px; height: 18px; cursor: pointer; }
.nx-cr-opt-title.nx-cr-opt-title.nx-cr-opt-title { font-size: var(--nx-font-size); font-weight: 700; color: var(--nx-text); }
.nx-cr-opt-sub.nx-cr-opt-sub.nx-cr-opt-sub { font-size: 12.5px; color: var(--nx-muted); font-weight: 500; margin-top: 2px; }
.nx-cr-select.nx-cr-select.nx-cr-select, .nx-cr-select.nx-cr-select.nx-cr-select:focus { border-radius: var(--nx-radius-md); font-size: var(--nx-font-size); height: 42px; border-color: var(--nx-border); color: var(--nx-text); }
.nx-cr-textarea.nx-cr-textarea.nx-cr-textarea, .nx-cr-textarea.nx-cr-textarea.nx-cr-textarea:focus { border-radius: var(--nx-radius-md); font-size: var(--nx-font-size); border-color: var(--nx-border); color: var(--nx-text); }
.nx-cr-domain-alert.nx-cr-domain-alert.nx-cr-domain-alert { border-radius: var(--nx-radius-md); background: #fffbeb; border: 1px solid #fef3c7; color: #b45309; }
.nx-cr-domain-title.nx-cr-domain-title.nx-cr-domain-title { font-size: var(--nx-font-size); margin-top: 0; margin-bottom: 6px; }
.nx-cr-domain-text.nx-cr-domain-text.nx-cr-domain-text { font-size: 13px; margin-bottom: 12px; }
.nx-cr-check-label.nx-cr-check-label.nx-cr-check-label { gap: 8px; cursor: pointer; font-size: 13px; font-weight: 700; }
.nx-cr-m-0.nx-cr-m-0.nx-cr-m-0 { margin: 0; }
.nx-cr-btn-danger.nx-cr-btn-danger.nx-cr-btn-danger { border-radius: var(--nx-radius-md); font-size: var(--nx-font-size); height: 42px; gap: 8px; border: none; background: #f04438; color: #fff; }
.nx-cr-btn-cancel.nx-cr-btn-cancel.nx-cr-btn-cancel { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: var(--nx-font-size); height: 42px; display: inline-flex; align-items: center; justify-content: center; }
.nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login, .nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login:hover, .nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login.nx-cr-btn-login:focus { border-radius: var(--nx-radius-md); font-size: var(--nx-font-size); gap: 8px; height: 44px; background: var(--nx-primary); border: none; color: #fff; }
.nx-cr-ic-20.nx-cr-ic-20.nx-cr-ic-20 { font-size: 20px; }
.nx-cr-action-btn.nx-cr-action-btn.nx-cr-action-btn { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: var(--nx-font-size-md); gap: 8px; height: 44px; }
.nx-cr-cancel-btn-sz.nx-cr-cancel-btn-sz.nx-cr-cancel-btn-sz { border-radius: var(--nx-radius-md); height: 44px; }
.nx-cr-tools-card.nx-cr-tools-card.nx-cr-tools-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 20px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-cr-tools-title.nx-cr-tools-title.nx-cr-tools-title { font-size: var(--nx-font-size-xs); font-weight: 800; letter-spacing: 0.8px; text-transform: uppercase; color: var(--nx-muted); margin-bottom: 14px; padding-left: 6px; }
.nx-cr-tools-list.nx-cr-tools-list.nx-cr-tools-list { display: flex; flex-direction: column; gap: 6px; }
.nx-cr-shortcut.nx-cr-shortcut.nx-cr-shortcut { border-radius: var(--nx-radius-md); color: var(--nx-primary); font-weight: 700; font-size: 14.5px; text-decoration: none; transition: background 0.15s ease; gap: 10px; background: transparent; }
.nx-cr-shortcut.nx-cr-shortcut.nx-cr-shortcut:hover { background: rgba(var(--nx-primary-rgb),0.06); color: var(--nx-primary); }

/* --- Auto Renew --- */
.nx-ar-toggle-card.nx-ar-toggle-card.nx-ar-toggle-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); padding: 24px; box-shadow: 0 1px 2px rgba(16,24,40,.04); display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-bottom: 24px; }
.nx-ar-icon.nx-ar-icon.nx-ar-icon { width: 44px; height: 44px; border-radius: var(--nx-radius-md); background: rgba(18,183,106,0.08); color: #12b76a; display: flex; align-items: center; justify-content: center; font-size: 20px; flex-shrink: 0; }
.nx-ar-sub.nx-ar-sub.nx-ar-sub { margin: 4px 0 0; font-size: 13px; color: var(--nx-muted); font-weight: 500; }
.nx-ar-card.nx-ar-card.nx-ar-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); overflow: hidden; box-shadow: 0 1px 2px rgba(16,24,40,.04); margin-bottom: 28px; }
.nx-ar-cell-value.nx-ar-cell-value.nx-ar-cell-value { color: var(--nx-text); font-size: var(--nx-font-size-lg); margin-top: 4px; }
.nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save, .nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save:hover, .nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save.nx-ar-btn-save:focus { border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-size: var(--nx-font-size); height: 42px; }

/* --- Add Funds --- */
.nx-af-card-mb.nx-af-card-mb.nx-af-card-mb { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); box-shadow: 0 1px 2px rgba(16,24,40,.04); margin-bottom: 24px; }
.nx-af-card.nx-af-card.nx-af-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card, 18px); box-shadow: 0 1px 2px rgba(16,24,40,.04); overflow: hidden; }
.nx-af-body.nx-af-body.nx-af-body { padding: 24px 30px; }
.nx-af-list.nx-af-list.nx-af-list { display: flex; flex-direction: column; gap: 0; }
.nx-af-row.nx-af-row.nx-af-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; }
.nx-af-row-bb.nx-af-row-bb.nx-af-row-bb { border-bottom: 1px solid var(--nx-border); }
.nx-af-strong.nx-af-strong.nx-af-strong { font-size: 14.5px; font-weight: 800; color: var(--nx-text); }
.nx-af-head.nx-af-head.nx-af-head { background: rgba(0,0,0,0.01); border-bottom: 1px solid var(--nx-border); padding: 18px 24px; gap: 8px; }
.nx-af-ic-22.nx-af-ic-22.nx-af-ic-22 { color: var(--nx-primary); font-size: var(--nx-font-size-h2); }
.nx-af-label.nx-af-label.nx-af-label { font-size: var(--nx-font-size-xs); font-weight: 800; color: var(--nx-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 8px; display: block; }
.nx-af-field.nx-af-field.nx-af-field, .nx-af-field.nx-af-field.nx-af-field:focus { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; padding: 0 12px; outline: none; }
.nx-af-w-100.nx-af-w-100.nx-af-w-100 { width: 100%; }
.nx-af-btn.nx-af-btn.nx-af-btn.nx-af-btn, .nx-af-btn.nx-af-btn.nx-af-btn.nx-af-btn:hover, .nx-af-btn.nx-af-btn.nx-af-btn.nx-af-btn:focus { height: 46px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 800; font-size: var(--nx-font-size); gap: 8px; color: #fff; width: 100%; box-shadow: 0 4px 12px rgba(79,70,229,0.2); }
.nx-af-foot.nx-af-foot.nx-af-foot { background: rgba(0,0,0,0.01); border-top: 1px solid var(--nx-border); padding: 14px 30px; }
.nx-af-note.nx-af-note.nx-af-note { color: var(--nx-muted); font-weight: 600; font-size: 12.5px; }

/* --- View Ticket --- */
.nx-vt-closed-alert { border-radius: var(--nx-radius-md); font-weight: 600; }
.nx-vt-title { margin: 0; font-size: 24px; font-weight: 800; color: var(--nx-text); letter-spacing: -0.5px; }
.nx-vt-subtitle { font-size: var(--nx-font-size-md); color: var(--nx-muted); font-weight: 600; margin-top: 4px; }
.nx-vt-gap-8 { gap: 8px; }
.nx-vt-status-badge { font-size: var(--nx-font-size-sm); font-weight: 800; padding: 6px 12px; border-radius: var(--nx-radius-card); text-transform: uppercase; letter-spacing: 0.5px; }
.nx-vt-status-closed { background: var(--nx-border); color: var(--nx-muted); }
.nx-vt-status-answered { background: rgba(var(--nx-primary-rgb),0.08); color: var(--nx-primary); }
.nx-vt-status-open { background: #fef3c7; color: var(--nx-warning); }
.nx-vt-reply-row { gap: 16px; align-items: flex-start; }
.nx-vt-avatar { width: 36px; height: 36px; border-radius: 50%; color: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.nx-vt-avatar-admin { background: var(--nx-primary); font-size: var(--nx-font-size-xl); box-shadow: 0 2px 8px rgba(79,70,229,0.15); }
.nx-vt-avatar-client { background: var(--nx-accent); font-weight: 800; font-size: var(--nx-font-size); box-shadow: 0 2px 8px rgba(249,115,22,0.15); }
.nx-vt-ico-16 { font-size: var(--nx-font-size-xl); }
.nx-vt-ico-19 { font-size: 19px; }
.nx-vt-ico-20 { font-size: 20px; }
.nx-vt-ico-28 { font-size: 28px; }
.nx-vt-reply-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); overflow: hidden; box-shadow: 0 1px 2px rgba(16,24,40,.03); }
.nx-vt-reply-head { border-bottom: 1px solid var(--nx-border); background: rgba(0,0,0,0.01); }
.nx-vt-reply-author { font-weight: 800; color: var(--nx-text); font-size: 14.5px; }
.nx-vt-staff-tag { font-size: 10px; background: rgba(var(--nx-primary-rgb),0.1); color: var(--nx-primary); padding: 2px 8px; border-radius: var(--nx-radius-md); margin-left: 8px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.5px; }
.nx-vt-reply-date { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 600; }
.nx-vt-reply-body { font-size: var(--nx-font-size); color: var(--nx-text); line-height: 1.6; font-weight: 600; }
.nx-vt-reply-ip { font-size: var(--nx-font-size-xs); color: var(--nx-muted); margin-top: 16px; border-top: 1px solid var(--nx-border); padding-top: 8px; }
.nx-vt-attach-wrap { padding: 12px 16px; background: rgba(0,0,0,0.01); border-top: 1px solid var(--nx-border); }
.nx-vt-attach-label { color: var(--nx-text); font-size: 12.5px; }
.nx-vt-attach-link { padding: 6px 12px; border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; text-decoration: none; font-size: var(--nx-font-size-sm); display: inline-flex; align-items: center; gap: 6px; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nx-vt-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-vt-pad-24 { padding: 24px; }
.nx-vt-form-title { margin: 0 0 20px 0; font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }
.nx-vt-input { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 0 16px; }
.nx-vt-textarea { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 12px 16px; }
.nx-vt-dropzone { border: 2px dashed var(--nx-border); border-radius: var(--nx-radius-card); padding: 20px; text-align: center; background: rgba(0,0,0,0.01); cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-vt-drop-ico { font-size: 26px; color: var(--nx-muted); margin-bottom: 6px; display: flex; align-items: center; justify-content: center; }
.nx-vt-drop-text { font-size: var(--nx-font-size-md); font-weight: 600; color: var(--nx-muted); }
.nx-vt-browse { color: var(--nx-primary); font-weight: 800; text-decoration: underline; }
.nx-vt-hidden { display: none; }
.nx-vt-files-list { font-size: 13px; font-weight: 700; color: var(--nx-primary); margin-top: 8px; }
.nx-vt-file-hint { font-size: var(--nx-font-size-xs); color: var(--nx-muted); margin-top: 6px; font-weight: 600; }
.nx-vt-submit { height: 40px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 700; font-size: var(--nx-font-size-md); padding: 0 24px; color: #fff; cursor: pointer; }
.nx-vt-details-card { padding: 24px; margin-bottom: 20px; }
.nx-vt-details-title { margin: 0 0 20px 0; font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.8px; color: var(--nx-muted); }
.nx-vt-details-list { display: flex; flex-direction: column; gap: 14px; }
.nx-vt-detail-row { display: flex; justify-content: space-between; border-bottom: 1px solid var(--nx-border); padding-bottom: 10px; }
.nx-vt-val-muted { color: var(--nx-muted); }
.nx-vt-val-primary { color: var(--nx-primary); }
.nx-vt-val-warning { color: var(--nx-warning); }
.nx-vt-val-danger { color: #ef4444; }
.nx-vt-val-amber { color: #f59e0b; }
.nx-vt-val-green { color: #10b981; }
.nx-vt-val-text { color: var(--nx-text); }
.nx-vt-close-btn { width: 100%; border: 1px solid rgba(var(--nx-danger-rgb), 0.25); background: var(--nx-card-bg); color: var(--nx-danger); font-weight: 700; font-size: var(--nx-font-size-md); border-radius: var(--nx-radius-md); height: 44px; display: flex; align-items: center; justify-content: center; gap: 8px; text-decoration: none; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }

/* --- Tickets List --- */
.nx-tl-row { gap: 0; margin-left: -10px; margin-right: -10px; }
.nx-tl-banner { background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-secondary) 100%); border-radius: var(--nx-radius-card); padding: 24px; color: #fff; box-shadow: 0 10px 24px rgba(var(--nx-primary-rgb),0.2); display: flex; flex-direction: column; justify-content: space-between; min-height: 120px; height: 100%; }
.nx-tl-banner-title { margin: 0; font-size: 20px; font-weight: 800; color: #fff; letter-spacing: -0.3px; }
.nx-tl-banner-sub { margin: 6px 0 0; font-size: 13px; color: rgba(255,255,255,0.8); font-weight: 500; }
.nx-tl-mt-16 { margin-top: 16px; }
.nx-tl-banner-btn { background: #fff; color: var(--nx-primary); border: none; border-radius: var(--nx-radius-md); padding: 10px 18px; font-weight: 700; font-size: 13px; display: inline-flex; align-items: center; gap: 6px; text-decoration: none; box-shadow: 0 4px 10px rgba(0,0,0,0.06); }
.nx-tl-ico-18 { font-size: var(--nx-font-size-h3); vertical-align: middle; }
.nx-tl-dept-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 22px; box-shadow: 0 1px 2px rgba(16,24,40,.04); display: flex; flex-direction: column; gap: 12px; height: 100%; text-decoration: none; transition: transform 0.15s ease; }
.nx-tl-dept-ico { width: 38px; height: 38px; border-radius: var(--nx-radius-md); display: flex; align-items: center; justify-content: center; font-size: 19px; }
.nx-tl-dept-txt { display: flex; flex-direction: column; min-width: 0; }
.nx-tl-dept-name { font-size: var(--nx-font-size-lg); font-weight: 800; color: var(--nx-text); }
.nx-tl-dept-desc { font-size: 11.5px; color: var(--nx-muted); font-weight: 500; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nx-tl-clip { overflow: hidden; }
.nx-tl-bordercol { border-color: var(--nx-border); }
.nx-tl-card-title { margin: 0; font-size: 15.5px; font-weight: 800; color: var(--nx-text); }
.nx-tl-filter-link { font-size: 13px; color: var(--nx-primary); font-weight: 700; text-decoration: none; }
.nx-tl-table { vertical-align: middle; }
.nx-tl-thead-row { border-bottom: 1px solid var(--nx-border); background: rgba(0,0,0,0.01); }
.nx-tl-tr { border-bottom: 1px solid var(--nx-border); vertical-align: middle; }
.nx-tl-gap-10 { gap: 10px; }
.nx-tl-dot { width: 8px; height: 8px; border-radius: 50%; margin-top: 6px; flex-shrink: 0; }
.nx-tl-subj-col { min-width: 0; display: flex; flex-direction: column; }
.nx-tl-subj-link { font-size: 14.5px; font-weight: 700; color: var(--nx-text); text-decoration: none; }
.nx-tl-tid { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 500; margin-top: 1px; }
.nx-tl-dept-cell { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); }
.nx-tl-lastreply { font-size: var(--nx-font-size-md); color: var(--nx-muted); font-weight: 600; }
.nx-tl-empty-cell { border: none; color: var(--nx-muted); font-size: var(--nx-font-size); font-weight: 600; }
.nx-tl-empty-icon { font-size: 40px; color: var(--nx-border); margin-bottom: 8px; display: block; }
.nx-tl-page-link { border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 6px 12px; }
.nx-tl-kb-card { padding: 20px; }
.nx-tl-kb-list { display: flex; flex-direction: column; gap: 14px; margin-bottom: 20px; }
.nx-tl-kb-link { display: flex; align-items: center; gap: 10px; font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); text-decoration: none; transition: color 0.15s ease; }
/* Had no hover state, so it fell through to the browser/Bootstrap default
   blue with an underline. */
body.nx-theme .nx-tl-kb-link:hover,
body.nx-theme .nx-tl-kb-link:focus {
    color: var(--nx-primary);
    text-decoration: none;
}
.nx-tl-kb-ico { font-size: 19px; color: var(--nx-primary); }
.nx-tl-ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nx-tl-kb-btn { display: flex; align-items: center; justify-content: center; gap: 8px; background: rgba(var(--nx-primary-rgb), 0.08); color: var(--nx-primary); font-weight: 700; font-size: 13px; padding: 11px 0; border-radius: var(--nx-radius-md); text-decoration: none; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }

/* --- Submit Ticket Step Two --- */
.nx-ts2-pad-30 { padding: 30px; }
.nx-ts2-title { margin: 0 0 24px 0; font-size: var(--nx-font-size-h3); font-weight: 800; color: var(--nx-text); }
.nx-ts2-select { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 600; padding: 0 12px; }
.nx-ts2-priority-btn { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: var(--nx-font-size-md); cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-ts2-mb-30 { margin-bottom: 30px; }
.nx-ts2-dropzone { border: 2px dashed var(--nx-border); border-radius: var(--nx-radius-card); padding: 30px 24px; text-align: center; background: rgba(0,0,0,0.01); cursor: pointer; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; }
.nx-ts2-drop-ico { font-size: 30px; color: var(--nx-muted); margin-bottom: 8px; display: flex; align-items: center; justify-content: center; }
.nx-ts2-drop-text { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-muted); }

/* Priority selector + upload dropzone states. Shared by
   supportticketsubmit-steptwo.tpl and viewticket.tpl. Moved out of a per-page
   <style> block that hardcoded an indigo tint and so ignored the admin primary
   colour. Placed after the .nx-ts2-* / .nx-vt-* base rules above so the active
   and hover states win on source order rather than !important. */
.nx-priority-btn.active {
    border: 2px solid var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.05);
    color: var(--nx-primary);
}
.nx-upload-dropzone:hover {
    border-color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.02);
}
.nx-ts2-ico-32 { font-size: 32px; }
.nx-ts2-gap-16 { gap: 16px; }
.nx-ts2-submit { height: 44px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 700; font-size: var(--nx-font-size); padding: 0 24px; gap: 8px; color: #fff; text-decoration: none; }
.nx-ts2-cancel { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-size: var(--nx-font-size); padding: 0 24px; }

/* --- Submit Ticket Confirm --- */
.nx-tsc-pad { padding: 40px 30px; }
.nx-tsc-check-circle { width: 64px; height: 64px; border-radius: 50%; background: rgba(18, 183, 106, 0.1); color: var(--nx-success); display: inline-flex; align-items: center; justify-content: center; font-size: 34px; margin-bottom: 16px; }
.nx-tsc-ico-36 { font-size: 36px; }
.nx-tsc-title { margin: 0; font-size: 20px; font-weight: 800; color: var(--nx-text); }
.nx-tsc-ticket-link { font-weight: 800; color: var(--nx-success); text-decoration: underline; }
.nx-tsc-desc { color: var(--nx-muted); font-size: var(--nx-font-size); font-weight: 600; margin-top: 16px; }
.nx-tsc-mt-24 { margin-top: 24px; }

/* --- Ticket Feedback --- */
.nx-tf-mt-20 { margin-top: 20px; }
.nx-tf-my-20 { margin: 20px 0; }
.nx-tf-return-btn { height: 44px; line-height: 28px; border-radius: var(--nx-radius-md); background: var(--nx-primary); border: none; font-weight: 700; font-size: var(--nx-font-size); padding: 8px 24px; color: #fff; text-decoration: none; }
.nx-tf-muted { color: var(--nx-muted); font-weight: 600; }
.nx-tf-text { color: var(--nx-text); font-weight: 600; }
.nx-tf-btn-success { height: 44px; border-radius: var(--nx-radius-md); background: var(--nx-success); border: none; font-weight: 700; font-size: var(--nx-font-size); padding: 0 24px; gap: 8px; color: #fff; text-decoration: none; }
.nx-tf-staff-cont { border-top: 1px solid var(--nx-border); padding-top: 20px; margin-top: 20px; }
.nx-tf-reset { height: 44px; border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text); font-weight: 700; font-size: var(--nx-font-size); padding: 0 24px; margin-left: 8px; }

/* --- Domains --- */
.nx-doms-banner {
    background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-secondary) 100%);
    border-radius: var(--nx-radius-card);
    padding: 28px 32px;
    color: #fff;
    box-shadow: 0 10px 30px rgba(var(--nx-primary-rgb), 0.18);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 24px;
    margin-bottom: 28px;
}
.nx-doms-banner-text {
    flex: 1;
    min-width: 250px;
}
body.nx-theme h2.nx-doms-banner-title {
    margin: 0;
    font-size: 23px;
    font-weight: 800;
    letter-spacing: -0.5px;
    color: #fff;
}
body.nx-theme p.nx-doms-banner-sub {
    margin: 6px 0 0;
    font-size: var(--nx-font-size-md);
    color: rgba(255, 255, 255, 0.75);
    font-weight: 500;
}
.nx-doms-banner-form {
    flex: 1.2;
    min-width: 320px;
    margin: 0;
}
.nx-doms-search-box {
    background: var(--nx-card-bg);
    border-radius: var(--nx-radius-md);
    padding: 5px;
    display: flex;
    align-items: center;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.06);
    gap: 6px;
}
body.nx-theme input.nx-doms-search-input {
    flex: 1;
    border: none;
    outline: none;
    padding: 8px 14px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--nx-text);
    background: transparent;
    background-color: transparent;
    box-shadow: none;
}
body .btn.nx-doms-search-btn {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    color: var(--nx-on-primary);
    border: none;
    border-radius: 9px;
    padding: 9px 20px;
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    display: inline-flex;
    align-items: center;
    gap: 6px;
    height: 38px;
}
.nx-doms-ic-18 {
    font-size: var(--nx-font-size-h3);
    vertical-align: middle;
}
.nx-doms-gap-8 {
    gap: 8px;
}
body .btn.nx-doms-tab {
    border-radius: var(--nx-radius-md);
}
body .btn.nx-doms-tab-on {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
    border: none;
}
body .btn.nx-doms-tab-off {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
}
body .form-control.nx-doms-filter-input {
    border-radius: var(--nx-radius-md) 0 0 var(--nx-radius-md);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
    font-size: var(--nx-font-size-md);
    height: 38px;
}
body .btn.nx-doms-filter-btn {
    border-radius: 0 10px 10px 0;
    border: 1px solid var(--nx-border);
    border-left: none;
    background: var(--nx-card-bg);
    color: var(--nx-muted);
    height: 38px;
    padding: 0 14px;
}
.nx-doms-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    overflow: hidden;
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
.nx-doms-table-middle {
    vertical-align: middle;
}
.nx-doms-thead-row {
    border-bottom: 1px solid var(--nx-border);
    background: rgba(0, 0, 0, 0.01);
}
.nx-doms-center {
    text-align: center;
}
.nx-doms-row {
    border-bottom: 1px solid var(--nx-border);
    vertical-align: middle;
}
.nx-doms-domain-ic {
    width: 40px;
    height: 40px;
    border-radius: var(--nx-radius-md);
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}
.nx-doms-date {
    font-size: var(--nx-font-size);
    font-weight: 600;
    color: var(--nx-text);
}
.nx-doms-date-warn {
    color: #f79009;
}
body .btn.nx-doms-manage-btn {
    border-radius: var(--nx-radius-md);
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    color: var(--nx-text);
    font-size: 13px;
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body .table td.nx-doms-empty {
    border: none;
    color: var(--nx-muted);
    font-size: var(--nx-font-size);
    font-weight: 600;
}
.nx-doms-empty-ic {
    font-size: 40px;
    color: var(--nx-border);
    margin-bottom: 8px;
    display: block;
}
body .pagination .page-item .page-link.nx-doms-page-link {
    border-radius: var(--nx-radius-sm);
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    color: var(--nx-text);
    font-weight: 600;
    padding: 6px 12px;
}
body .pagination .page-item .page-link.nx-doms-page-info {
    border-radius: var(--nx-radius-sm);
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    color: var(--nx-muted);
    font-weight: 600;
    padding: 6px 12px;
}
/* --- Domain DNS --- */
.nx-dns-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 18px 24px;
    border-bottom: 1px solid var(--nx-border);
}
.nx-dns-card-title {
    font-size: var(--nx-font-size-xl);
    font-weight: 800;
    color: var(--nx-text);
}
.nx-dns-card-title-bar {
    font-size: var(--nx-font-size-xl);
    font-weight: 800;
    color: var(--nx-text);
    padding: 18px 24px;
    border-bottom: 1px solid var(--nx-border);
}
.nx-dns-count {
    font-size: 12.5px;
    font-weight: 700;
    color: var(--nx-muted);
    background: rgba(0, 0, 0, 0.04);
    padding: 4px 10px;
    border-radius: var(--nx-radius-badge);
}
body .table thead tr th.nx-dns-th {
    font-size: var(--nx-font-size-xs);
    font-weight: 800;
    text-transform: uppercase;
    color: var(--nx-muted);
    border: none;
}
body .table thead tr th.nx-dns-th-120 {
    width: 120px;
}
.nx-dns-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: var(--nx-font-size-xs);
    font-weight: 800;
    padding: 4px 10px;
    border-radius: 6px;
    width: 70px;
    text-align: center;
}
body .form-control.nx-dns-inline-input {
    background: transparent;
    border: 1px solid transparent;
    font-weight: 600;
    color: var(--nx-text);
    font-size: var(--nx-font-size-md);
    height: 34px;
    padding: 0 8px;
    border-radius: var(--nx-radius-sm);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
body .form-control.nx-dns-inline-input:focus {
    border: 1px solid var(--nx-border);
    background: var(--nx-bg);
}
.nx-dns-na {
    font-size: 13px;
    color: var(--nx-muted);
    font-weight: 500;
}
.nx-dns-actions {
    background: rgba(0, 0, 0, 0.01);
    border-top: 1px solid var(--nx-border);
    padding: 18px 24px;
    display: flex;
    justify-content: flex-end;
    gap: 12px;
    align-items: center;
}
body .btn.nx-dns-btn-pri {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
}
body .btn.nx-dns-btn {
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    padding: 9px 22px;
}
body.nx-theme label.nx-dns-label {
    font-size: 13px;
    font-weight: 700;
    color: var(--nx-muted);
    display: block;
    margin-bottom: 6px;
}
body .form-control.nx-dns-input {
    border-radius: var(--nx-radius-md);
    height: 42px;
    font-size: var(--nx-font-size-md);
    font-weight: 600;
}
body .btn.nx-dns-btn-add {
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    padding: 10px 24px;
    height: 44px;
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.nx-dns-ic-18 {
    font-size: var(--nx-font-size-h3);
}
/* --- Register Nameservers --- */
body.nx-theme a.nx-rns-back {
    color: var(--nx-muted);
    text-decoration: none;
    font-size: var(--nx-font-size);
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 18px;
}
body.nx-theme label.nx-rns-label {
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-muted);
}
body .form-control.nx-rns-input {
    border-radius: var(--nx-radius-md);
    height: 42px;
    font-size: var(--nx-font-size-md);
}
body .form-control.nx-rns-input-l {
    border-radius: var(--nx-radius-md) 0 0 var(--nx-radius-md);
    height: 42px;
    font-size: var(--nx-font-size-md);
}
body.nx-theme span.input-group-text.nx-rns-addon {
    border-radius: 0 10px 10px 0;
    font-size: 13px;
    font-weight: 600;
}
body .btn.nx-rns-btn {
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size-md);
    padding: 10px 22px;
}
/* --- Email Forwarding --- */
body .table thead tr th.nx-def-th-plain {
    border: none;
}
.nx-def-row-plain {
    vertical-align: middle;
}
body .table td.nx-def-cell-at {
    border: none;
    vertical-align: middle;
    font-size: 13px;
    font-weight: 700;
    color: var(--nx-muted);
    white-space: nowrap;
}
body .form-control.nx-def-input {
    border-radius: var(--nx-radius-md);
    height: 40px;
    font-size: var(--nx-font-size-md);
    font-weight: 600;
}
/* --- EPP Code --- */
.nx-epp-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 28px;
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
    margin-bottom: 24px;
    display: flex;
    align-items: flex-start;
    gap: 20px;
}
.nx-epp-key-ic {
    font-size: 26px;
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.08);
    padding: 12px;
    border-radius: var(--nx-radius-md);
}
.nx-epp-flex1 {
    flex: 1;
}
body.nx-theme h3.nx-epp-title {
    font-size: var(--nx-font-size-xl);
    font-weight: 800;
    color: var(--nx-text);
    margin: 0;
}
body.nx-theme p.nx-epp-desc {
    font-size: 13px;
    color: var(--nx-muted);
    font-weight: 500;
    margin: 4px 0 20px;
}
body .alert.nx-epp-alert {
    border-radius: var(--nx-radius-md);
    font-weight: 600;
    font-size: var(--nx-font-size-md);
    padding: 14px 18px;
}
.nx-epp-ic-18r {
    font-size: var(--nx-font-size-h3);
    vertical-align: middle;
    margin-right: 6px;
}
.nx-epp-codebox {
    display: flex;
    align-items: center;
    justify-content: space-between;
    border: 1px dashed var(--nx-border);
    border-radius: var(--nx-radius-md);
    padding: 14px 20px;
    background: rgba(0, 0, 0, 0.01);
    margin-bottom: 20px;
}
.nx-epp-code {
    font-family: monospace;
    font-size: var(--nx-font-size-h3);
    font-weight: 700;
    color: var(--nx-text);
    letter-spacing: 0.5px;
}
body .btn.nx-epp-copy-btn {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    font-weight: 700;
    font-size: 13px;
    padding: 7px 18px;
    border-radius: var(--nx-radius-sm);
    color: #fff;
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.nx-epp-ic-16 {
    font-size: var(--nx-font-size-xl);
}
body.nx-theme a.nx-epp-mail-link {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: var(--nx-font-size-md);
    font-weight: 700;
    color: var(--nx-primary);
    text-decoration: none;
}
.nx-epp-warnbox {
    background: #fffbeb;
    border: 1px solid #fef3c7;
    border-radius: var(--nx-radius-card);
    padding: 18px 22px;
    display: flex;
    align-items: flex-start;
    gap: 14px;
    box-shadow: 0 1px 2px rgba(16, 24, 40, .02);
}
.nx-epp-warn-ic {
    font-size: var(--nx-font-size-h2);
    color: #d97706;
    margin-top: 2px;
}
body.nx-theme p.nx-epp-warn-text {
    font-size: var(--nx-font-size-md);
    color: #b45309;
    font-weight: 600;
    margin: 0;
    line-height: 1.5;
}
/* --- Domain Addons --- */
.nx-dao-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 28px;
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
    margin-bottom: 24px;
}
body.nx-theme h3.nx-dao-h3 {
    font-size: var(--nx-font-size-h3);
    font-weight: 800;
    color: var(--nx-text);
    margin-bottom: 16px;
    display: flex;
    align-items: center;
    gap: 10px;
}
body.nx-theme h3.nx-dao-h3-plain {
    font-size: var(--nx-font-size-h3);
    font-weight: 800;
    color: var(--nx-text);
    margin-bottom: 16px;
}
.nx-dao-h3-ic {
    font-size: 24px;
    color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.08);
    padding: 8px;
    border-radius: var(--nx-radius-md);
}
body.nx-theme p.nx-dao-desc {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 500;
    line-height: 1.5;
}
body .btn.nx-dao-btn-lg {
    font-weight: 700;
    border-radius: var(--nx-radius-md);
    font-size: var(--nx-font-size);
    padding: 12px 28px;
}
body.nx-theme p.nx-dao-confirm {
    font-size: var(--nx-font-size);
    color: var(--nx-text);
    font-weight: 600;
}
/* --- Domain Contact Info --- */
.nx-dci-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    padding: 28px;
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04);
}
body.nx-theme h3.nx-dci-h3 {
    font-size: var(--nx-font-size-h3);
    font-weight: 800;
    color: var(--nx-text);
    margin-bottom: 8px;
}
body.nx-theme p.nx-dci-desc {
    font-size: var(--nx-font-size-md);
    color: var(--nx-muted);
    font-weight: 500;
    line-height: 1.5;
    margin-bottom: 20px;
}
body.nx-theme label.nx-dci-radio {
    font-weight: 700;
    color: var(--nx-text);
}
/* --- Bulk Domain Management --- */
.nx-bdm-li {
    background: var(--nx-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
}
body.nx-theme p.nx-bdm-text {
    color: var(--nx-text);
}
body.nx-theme p.nx-bdm-muted {
    color: var(--nx-muted);
}



/* --- Shared page pieces (revamped stock pages) --- */
.nx-ico-14 { font-size: var(--nx-font-size); line-height: 1; }
.nx-ico-16 { font-size: var(--nx-font-size-xl); line-height: 1; }
.nx-mt-22 { margin-top: 22px; }
.nx-page-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 22px; flex-wrap: wrap; }
.nx-pagination-nav { display: flex; justify-content: center; margin-top: 22px; }
.nx-pagination { gap: 4px; margin: 0; }
.nx-pagination .page-link {
    border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    color: var(--nx-text); font-weight: 600; font-size: 13px; padding: 6px 12px; margin: 0 2px;
}
.nx-pagination .page-item.active .page-link { background: var(--nx-primary); border-color: var(--nx-primary); color: #fff; }
.nx-pagination .page-item.disabled .page-link { color: var(--nx-muted); opacity: .6; }
.nx-card-title-ico { font-size: 19px; color: var(--nx-primary); vertical-align: -4px; margin-right: 4px; }
.nx-alert-link { color: inherit; font-weight: 700; text-decoration: underline; }
/* Bootstrap gives .alert-link a hardcoded near-black per alert flavour
   (#0e1c2a, #0b2e13 …), which is unreadable on the theme's tinted alerts.
   Inheriting the alert's own colour keeps it legible in both modes. */
body.nx-theme .alert .alert-link {
    color: inherit;
    font-weight: 700;
    text-decoration: underline;
}
.nx-spin { display: inline-block; animation: nx-spin-rot 1s linear infinite; vertical-align: -4px; color: var(--nx-primary); }
@keyframes nx-spin-rot { to { transform: rotate(360deg); } }
.nx-article-body { font-size: 14.5px; line-height: 1.7; color: var(--nx-text); }
.nx-article-body img { max-width: 100%; height: auto; border-radius: var(--nx-radius-md); }
.nx-article-body a { color: var(--nx-primary); }
.nx-article-body table { max-width: 100%; }
.nx-article-body pre {
    background: rgba(var(--nx-primary-rgb), .05); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md); padding: 14px; overflow-x: auto; color: var(--nx-text);
}

/* --- Announcements --- */
.nx-ann-list { display: flex; flex-direction: column; gap: 22px; }
.nx-ann-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.nx-ann-meta-group { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.nx-ann-meta { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 700; color: var(--nx-muted); }
.nx-ann-meta-ico { font-size: var(--nx-font-size-xl); color: var(--nx-primary); }
.nx-ann-title { margin: 0 0 10px; font-size: 19px; font-weight: 800; letter-spacing: -.3px; }
.nx-ann-title a { color: var(--nx-text); text-decoration: none; transition: color .15s ease; }
.nx-ann-title a:hover { color: var(--nx-primary); }
.nx-ann-excerpt { margin-bottom: 16px; color: var(--nx-muted); }
.nx-ann-full { padding: 8px 0 0; }

/* --- Knowledgebase / Downloads --- */
.nx-kb-search-wrap { margin-bottom: 24px; }
.nx-kb-search {
    display: flex; align-items: center; gap: 10px;
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px); box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    padding: 8px 8px 8px 16px;
}
.nx-kb-search-ico { font-size: var(--nx-font-size-h2); color: var(--nx-muted); flex-shrink: 0; }
.nx-kb-search-input {
    flex: 1 1 auto; min-width: 0; height: 42px; border: none; background: transparent;
    color: var(--nx-text); font-size: 14.5px; font-weight: 600; outline: none;
}
.nx-kb-search-input::placeholder { color: var(--nx-muted); font-weight: 500; }
.nx-kb-cat-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 18px; }
.nx-kb-cat-card {
    display: flex; align-items: flex-start; gap: 14px;
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px); box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    padding: 18px; text-decoration: none; color: var(--nx-text);
    transition: transform .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.nx-kb-cat-card:hover {
    transform: translateY(-2px); border-color: var(--nx-primary);
    box-shadow: 0 10px 24px rgba(var(--nx-primary-rgb), .12); text-decoration: none; color: var(--nx-text);
}
.nx-kb-cat-ico {
    width: 42px; height: 42px; border-radius: var(--nx-radius-md); flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    background: rgba(var(--nx-primary-rgb), .1); color: var(--nx-primary);
}
.nx-kb-cat-ico .material-symbols-rounded { font-size: var(--nx-font-size-h2); }
.nx-kb-cat-txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1 1 auto; }
.nx-kb-cat-name { font-size: 14.5px; font-weight: 800; color: var(--nx-text); }
.nx-kb-cat-desc { font-size: 12.5px; font-weight: 500; color: var(--nx-muted); line-height: 1.5; }
.nx-kb-cat-side { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; flex-shrink: 0; }
.nx-kb-art-list { display: flex; flex-direction: column; }
.nx-kb-art-item {
    display: flex; align-items: flex-start; gap: 12px;
    padding: 14px 22px; border-bottom: 1px solid var(--nx-border);
    text-decoration: none; color: var(--nx-text); transition: background .12s ease;
}
.nx-kb-art-item:last-child { border-bottom: none; }
.nx-kb-art-item:hover { background: rgba(var(--nx-primary-rgb), .04); text-decoration: none; color: var(--nx-text); }
.nx-kb-art-ico { font-size: 20px; color: var(--nx-primary); flex-shrink: 0; margin-top: 1px; }
.nx-kb-art-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1 1 auto; }
.nx-kb-art-title { font-size: var(--nx-font-size); font-weight: 700; color: var(--nx-text); }
.nx-kb-art-item:hover .nx-kb-art-title { color: var(--nx-primary); }
.nx-kb-art-desc { font-size: 12.5px; font-weight: 500; color: var(--nx-muted); line-height: 1.5; }
.nx-kb-article-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 18px; }
.nx-kb-article-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.nx-kb-useful { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 700; color: var(--nx-muted); }
.nx-kb-vote { border-top: 1px solid var(--nx-border); margin-top: 22px; padding-top: 18px; }
.nx-kb-vote-title { font-size: 14.5px; font-weight: 800; color: var(--nx-text); margin: 0 0 12px; }
.nx-kb-vote-btns { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.nx-dl-type { flex-shrink: 0; margin-top: 2px; }
.nx-dl-type img { max-width: 20px; height: auto; }
.nx-dl-size { font-size: var(--nx-font-size-sm); font-weight: 700; color: var(--nx-text); margin-top: 2px; }

/* --- Server status / network issues --- */
.nx-ss-table thead th.text-center, .nx-ss-table tbody td.text-center { text-align: center; }
.nx-ss-table tbody td { font-weight: 600; }
.nx-ss-phpinfo { color: var(--nx-primary); font-weight: 700; text-decoration: none; }
.nx-ss-phpinfo:hover { text-decoration: underline; }
.nx-issue-card { margin-bottom: 22px; }
.nx-issue-title { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.nx-issue-status { font-size: 12.5px; font-weight: 700; color: var(--nx-muted); }
.nx-issue-affecting { font-size: var(--nx-font-size); color: var(--nx-text); margin: 0 0 12px; }
.nx-issue-meta { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; margin-bottom: 14px; }
.nx-issue-desc { font-size: var(--nx-font-size); line-height: 1.65; color: var(--nx-text); margin: 0; }

/* --- Contact --- */
.nx-contact-grid { max-width: 860px; margin: 0 auto; }
.nx-contact-intro { display: flex; align-items: center; gap: 14px; margin-bottom: 22px; }
.nx-contact-ico {
    width: 48px; height: 48px; border-radius: 14px; flex-shrink: 0;
    display: flex; align-items: center; justify-content: center;
    background: rgba(var(--nx-primary-rgb), .1); color: var(--nx-primary);
}
.nx-contact-ico .material-symbols-rounded { font-size: 26px; }
.nx-contact-sub { margin: 3px 0 0; font-size: var(--nx-font-size-md); font-weight: 600; color: var(--nx-muted); }
.nx-contact-fields { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 0 18px; }
.nx-contact-captcha { text-align: center; margin-bottom: 18px; }
.nx-contact-submit { display: flex; justify-content: flex-end; }

/* --- DataTables list cards (quotes / emails / pricing / affiliates) --- */
.nx-dt-card { margin-bottom: 22px; }
.nx-dt-card .table-container { margin: 0; }
.nx-dt-card .dataTables_wrapper { padding: 14px 22px 18px; }
.nx-dt-card .dataTables_wrapper .dataTables_filter input,
.nx-dt-card .dataTables_wrapper .dataTables_length select {
    background: var(--nx-bg); color: var(--nx-text);
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-input, 10px);
    padding: 6px 12px; font-size: 13px; font-weight: 600; outline: none;
}
.nx-dt-card .dataTables_wrapper .dataTables_filter input:focus { border-color: var(--nx-primary); box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .12); }
.nx-dt-card .dataTables_wrapper .dataTables_info { color: var(--nx-muted); font-size: 12.5px; font-weight: 600; }
.nx-dt-card table.table-list { color: var(--nx-text); margin-bottom: 8px; }
.nx-dt-card table.table-list thead th {
    font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .4px;
    color: var(--nx-muted); border-top: none; border-bottom: 1px solid var(--nx-border);
    background: transparent; padding: 12px 14px;
}
.nx-dt-card table.table-list tbody td {
    border-top: none; border-bottom: 1px solid var(--nx-border);
    font-size: var(--nx-font-size-md); padding: 13px 14px; vertical-align: middle;
}
.nx-dt-card table.table-list tbody tr { transition: background .12s ease; cursor: pointer; }
.nx-dt-card table.table-list tbody tr:hover { background: rgba(var(--nx-primary-rgb), .04); }
.nx-dt-card table.table-list tbody tr:last-child td { border-bottom: none; }
.nx-dt-card .dataTables_wrapper .dataTables_paginate .paginate_button {
    border-radius: var(--nx-radius-sm) !important; border: 1px solid var(--nx-border) !important;
    background: var(--nx-card-bg) !important; color: var(--nx-text) !important;
    font-weight: 600; margin: 0 2px; padding: 5px 11px;
}
.nx-dt-card .dataTables_wrapper .dataTables_paginate .paginate_button.current {
    background: var(--nx-primary) !important; border-color: var(--nx-primary) !important; color: #fff !important;
}
.nx-dt-card .dataTables_wrapper .dataTables_paginate .paginate_button.disabled { opacity: .5; }
.nx-dt-loading { padding: 34px 0; color: var(--nx-muted); font-weight: 600; }
.nx-email-clip { color: var(--nx-muted); vertical-align: -3px; }

body.nx-theme .nx-dt-card .dataTables_wrapper,
body.nx-theme .nx-dt-card .table-container {
    background: transparent;
    border: none;
    box-shadow: none;
    padding: 14px 22px 18px;
}
body.nx-theme .nx-dt-card .table-container { padding: 0; }

body.nx-theme .nx-dt-card table.table-list {
    background: transparent;
    border: none;
    margin: 10px 0 8px !important;
}
body.nx-theme .nx-dt-card table.table-list thead th {
    background: transparent;
    color: var(--nx-muted);
    border-bottom: 1px solid var(--nx-border);
    text-align: left;
}
body.nx-theme .nx-dt-card table.table-list > tbody > tr > td,
body.nx-theme .nx-dt-card table.table-list tbody tr.odd > td,
body.nx-theme .nx-dt-card table.table-list tbody tr.even > td {
    background: transparent;
    color: var(--nx-text);
}
body.nx-theme .nx-dt-card table.table-list > tbody > tr:hover > td {
    background: rgba(var(--nx-primary-rgb), .04);
}
body.nx-theme .nx-dt-card table.table-list td.dataTables_empty {
    background: transparent;
    color: var(--nx-muted);
    text-align: center;
    padding: 34px 14px;
    font-weight: 600;
    cursor: default;
}
body.nx-theme .nx-dt-card table.table-list tbody tr:hover td.dataTables_empty {
    background: transparent;
}

body.nx-theme .nx-dt-card .dataTables_filter { float: right; }
body.nx-theme .nx-dt-card .dataTables_filter label {
    margin: 0;
    display: block;
    position: relative;
}
body.nx-theme .nx-dt-card .dataTables_filter label .form-control {
    background-color: var(--nx-bg);
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23808a99' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.6-3.6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: 12px center;
    background-size: 16px 16px;
    padding: 7px 12px 7px 36px !important;
    height: auto;
    width: 240px;
    max-width: 100%;
    font-size: 13px;
    color: var(--nx-text);
}
body.nx-theme .nx-dt-card .dataTables_filter label .form-control::placeholder {
    color: var(--nx-muted);
    opacity: 1;
}

body.nx-theme .nx-dt-card .dataTables_length,
body.nx-theme .nx-dt-card .dataTables_length label {
    color: var(--nx-muted);
    font-size: 13px;
    font-weight: 600;
    margin: 0;
}
body.nx-theme .nx-dt-card .dataTables_length select {
    width: auto;
    display: inline-block;
    margin: 0 6px;
}

body.nx-theme .nx-dt-card .dataTables_paginate .page-link,
body.nx-theme .nx-dt-card .dataTables_paginate .paginate_button a {
    color: var(--nx-text);
    background: transparent;
    border: none;
}
body.nx-theme .nx-dt-card .dataTables_paginate .page-item.active .page-link {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    color: #fff;
}

@media (max-width: 600px) {
    body.nx-theme .nx-dt-card .dataTables_filter {
        float: none;
        width: 100%;
        margin-top: 12px;
    }
    body.nx-theme .nx-dt-card .dataTables_filter label .form-control { width: 100%; }
}

/* --- Domain pricing --- */
.nx-tld-featured-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 16px; margin-bottom: 24px; }
.nx-tld-featured {
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 16px); box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
    padding: 18px 14px; text-align: center;
    transition: transform .15s ease, border-color .15s ease;
}
.nx-tld-featured:hover { transform: translateY(-2px); border-color: var(--nx-primary); }
.nx-tld-featured-img img { max-width: 100%; max-height: 40px; height: auto; }
.nx-tld-featured-price { margin-top: 10px; font-size: var(--nx-font-size); font-weight: 800; color: var(--nx-text); }
.nx-tld-toolbar { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: 18px; }
.nx-tld-toolbar-left { min-width: 0; }
.nx-tld-filters { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.nx-tld-chip {
    display: inline-flex; align-items: center;
    background: var(--nx-card-bg); color: var(--nx-text);
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-badge);
    font-size: 12.5px; font-weight: 700; padding: 6px 13px;
    text-decoration: none; transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease; cursor: pointer;
}
.nx-tld-chip:hover { border-color: var(--nx-primary); color: var(--nx-primary); }
.nx-tld-chip.badge-success { background: var(--nx-primary) !important; border-color: var(--nx-primary); color: #fff !important; }
.nx-tld-currency { flex-shrink: 0; }
.nx-tld-currency select { min-width: 200px; height: 42px; }
body.nx-theme .tld-sale-group {
    display: inline-flex; margin-left: 6px; padding: 2px 8px; border-radius: var(--nx-radius-badge);
    background: var(--nx-pill-pending-bg); color: var(--nx-pill-pending-text);
    font-size: 10.5px; font-weight: 800; text-transform: uppercase;
}

/* --- Affiliates --- */
.nx-aff-stat-ico { font-size: var(--nx-font-size-h3); color: var(--nx-primary); vertical-align: -4px; margin-right: 4px; }
.nx-aff-link-input { font-weight: 700; }
.nx-aff-balance-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; }
.nx-aff-balance-item {
    display: flex; flex-direction: column; gap: 4px;
    background: var(--nx-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md); padding: 14px 16px;
}
.nx-aff-balance-label { font-size: var(--nx-font-size-sm); font-weight: 700; color: var(--nx-muted); text-transform: uppercase; letter-spacing: .4px; }
.nx-aff-balance-value { font-size: 20px; font-weight: 800; color: var(--nx-text); letter-spacing: -.4px; }
.nx-aff-balance-available { color: var(--nx-success, #12b76a); }
.nx-aff-withdraw { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-top: 18px; }
.nx-aff-withdraw-hint { margin: 0; font-size: 12.5px; font-weight: 600; color: var(--nx-muted); }
.nx-btn.disabled, .nx-btn[disabled] { opacity: .55; pointer-events: none; }

/* --- Revamp wrapper hooks --- */
.nx-ann-item { margin: 0; }
.nx-kb-vote-form { margin: 0; }
.nx-contact-card { margin: 0; }

/* ==================================================================
 * 08-shell.css — inline-style extraction for shell templates
 * (header.tpl, includes/nx-sidebar.tpl, includes/homepage-panel.tpl,
 *  clientareahome.tpl, footer.tpl)
 * Loaded AFTER nexum.css so equal-specificity ties resolve here.
 * ================================================================== */

/* ---- generic shell utilities ---- */
.nx-sh-w100 { width: 100%; }
.nx-sh-cursor-pointer { cursor: pointer; }
.nx-sh-nodeco { text-decoration: none; }
.nx-sh-flex-grow { flex-grow: 1; }
.nx-sh-gap6 { gap: 6px; }
.nx-sh-gap10 { gap: 10px; }
.nx-sh-gap12 { gap: 12px; }
.nx-sh-iflex-shrink { display: inline-flex; flex-shrink: 0; }
.nx-sh-shrink0 { flex-shrink: 0; }
.nx-sh-ico-text { color: var(--nx-text); }

/* material-symbol size helpers */
.nx-sh-ms-15-muted { font-size: var(--nx-font-size-lg); color: var(--nx-muted); }
.nx-sh-ms-16 { font-size: var(--nx-font-size-xl); }
.nx-sh-ms-18-muted { font-size: var(--nx-font-size-h3); color: var(--nx-muted); }
.nx-sh-ms-19-muted { font-size: 19px; color: var(--nx-muted); }
.nx-sh-ms-19-primary { font-size: 19px; color: var(--nx-primary); }
.nx-sh-ms-20-shrink { flex-shrink: 0; font-size: 20px; }
.nx-sh-ms-20-primary { color: var(--nx-primary); font-size: 20px; }
.nx-sh-ms-20-danger { color: #f04438; font-size: 20px; }
.nx-sh-ms-20-warn { color: #f79009; font-size: 20px; }
.nx-sh-ms-19-fill { font-size: 19px; font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24; }

/* =====================  SIDEBAR (shared)  ===================== */
.nx-sh-sidebar-scroll {
    display: flex; flex-direction: column; width: 100%;
    min-height: 0; flex-grow: 1; overflow-y: auto; overflow-x: hidden;
}
.nx-sh-init-hidden { display: none; }
.nx-sh-logo-fallback { gap: 12px; width: 100%; }
.nx-sh-logo-textwrap { display: flex; flex-direction: column; line-height: 1.25; text-align: left; }
.nx-logo-text-span { font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }

/* Open Ticket button (sidebar) */
.nx-sh-openticket-exp { padding: 10px 14px; width: 100%; }
.nx-sh-openticket-cmp { padding: 10px 0; width: 100%; display: none; justify-content: center; }
.btn.nx-sh-openticket-btn {
    gap: 8px; padding: 10px 18px; border-radius: var(--nx-radius-button, 10px);
    font-weight: 700; font-size: var(--nx-font-size-md); width: 100%; box-shadow: var(--nx-shadow-button);
    background: var(--nx-primary); border: none; color: #fff; text-decoration: none;
}
.btn.nx-sh-openticket-btn-cmp {
    width: 38px; height: 38px; padding: 0; border-radius: var(--nx-radius-button, 10px);
    background: var(--nx-primary); border: none; color: #fff;
    box-shadow: var(--nx-shadow-button); text-decoration: none;
}

/* nav collapse / toggle */
.nx-sh-nav-toggle {
    cursor: pointer; display: flex; align-items: center;
    justify-content: space-between; width: 100%;
}
.nx-nav-icon-wrapper { position: relative; }
.nx-nav-arrow { font-size: 20px; transition: transform 0.2s ease; margin-left: auto; }
.nx-sidebar-submenu-list {
    margin-left: 28px; padding-left: 16px; border-left: 1px solid var(--nx-border);
    display: flex; flex-direction: column; gap: 4px; margin-top: 4px; margin-bottom: 8px;
}
a.nx-sidebar-submenu-item {
    padding: 8px 12px; border-radius: var(--nx-radius-sm); font-size: var(--nx-font-size-md); font-weight: 600;
    color: var(--nx-muted); text-decoration: none; display: block; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}

/* plus badge on Open Ticket icon */
.nx-plus-badge {
    position: absolute; top: -3px; right: -3px; width: 14px; height: 14px;
    border-radius: 50%; background: var(--nx-primary); color: #fff; font-size: 10px;
    font-weight: 800; border: 1.5px solid #fff; line-height: 1; pointer-events: none;
}

/* dropright flyouts (compact / icons sidebar) */
.nx-sh-flyout-menu {
    min-width: 220px; border-radius: var(--nx-radius-card); padding: 18px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.08); border: 1px solid var(--nx-border);
    margin-left: 14px; background: var(--nx-card-bg); z-index: 1060;
}
/* The flyout is positioned from its wrapper, so the wrapper's right edge has to
   sit on the rail's own edge or left:100% lands back inside the rail. The rail
   has no horizontal padding in these modes, so dropping the store wrapper's
   padding and letting the wrapper fill the rail puts that edge in the right
   place for any width token. The item keeps its centred position via auto
   margins — the wrapper cannot be a centring flex container because
   .d-block-compact forces display:block. */
.nx-sidebar-mode-compact .nx-sidebar-store-wrapper,
.nx-sidebar-mode-icons .nx-sidebar-store-wrapper {
    padding-left: 0;
    padding-right: 0;
}
.nx-sidebar-mode-compact .nx-sidebar .nx-nav-dropdown-wrapper,
.nx-sidebar-mode-icons .nx-sidebar .nx-nav-dropdown-wrapper {
    width: 100%;
}
.nx-sidebar-mode-compact .nx-sidebar .nx-nav-dropdown-wrapper > .nx-nav-item,
.nx-sidebar-mode-icons .nx-sidebar .nx-nav-dropdown-wrapper > .nx-nav-item {
    margin-left: auto;
    margin-right: auto;
}
/* Bootstrap only opens a dropdown on click, which is awkward on an icon rail, so
   the collapsed modes open on hover (and on keyboard focus). */
.nx-sidebar-mode-compact .nx-nav-dropdown-wrapper:hover > .dropdown-menu,
.nx-sidebar-mode-compact .nx-nav-dropdown-wrapper:focus-within > .dropdown-menu,
.nx-sidebar-mode-icons .nx-nav-dropdown-wrapper:hover > .dropdown-menu,
.nx-sidebar-mode-icons .nx-nav-dropdown-wrapper:focus-within > .dropdown-menu {
    display: block;
}
/* The expanded mode opens its submenus through Bootstrap collapse, which is
   click-only. Revealing the panel on hover matches the collapsed modes; the
   click accordion keeps working underneath for touch. */
.nx-sidebar-mode-expanded .nx-nav-collapse-wrapper:hover > .nx-sidebar-submenu-collapse,
.nx-sidebar-mode-expanded .nx-nav-collapse-wrapper:focus-within > .nx-sidebar-submenu-collapse {
    display: block;
}

/* theme.min.css carries a plain `a:hover { text-decoration: underline }`, and
   .nx-nav-item only cleared the decoration on its base state — so hovering a
   rail item drew Bootstrap's blue underline under the icon. Clearing it on the
   interactive states too, and pinning the colour to the palette so nothing
   inherits the stock link blue. */
.nx-nav-item:hover,
.nx-nav-item:focus {
    text-decoration: none;
    color: var(--nx-primary);
}

/* .d-block-compact forces display:block, which cancels the wrapper's
   justify-content, so the collapsed Open Ticket button sat against the rail's
   left edge instead of centred like every other item. */
.nx-sidebar-mode-compact .nx-sh-openticket-cmp > .btn,
.nx-sidebar-mode-icons .nx-sh-openticket-cmp > .btn {
    margin-left: auto;
    margin-right: auto;
}

/* Invisible bridge across the 14px gap, so travelling from the rail to the menu
   does not drop the hover and close it. */
.nx-sh-flyout-menu::before {
    content: "";
    position: absolute;
    top: 0;
    left: -14px;
    width: 14px;
    height: 100%;
}
.nx-sh-flyout-head {
    font-size: var(--nx-font-size-xs); font-weight: 800; letter-spacing: 0.8px; text-transform: uppercase;
    color: var(--nx-muted); margin-bottom: 12px; padding-left: 10px;
}
.nx-sh-dd-divider { margin: 8px 0; border-top: 1px solid var(--nx-border); }
a.dropdown-item.nx-sh-flyout-item {
    gap: 10px; padding: 8px 10px; border-radius: var(--nx-radius-sm); color: var(--nx-text);
    font-weight: 600; font-size: var(--nx-font-size-md); transition: background 0.15s ease; background: transparent;
}

/* store + footer wrappers */
.nx-sidebar-store-wrapper {
    width: 100%; padding: 0 14px 4px; display: flex; flex-direction: column;
    justify-content: center; z-index: 1050;
}
.nx-sidebar-footer-wrapper {
    width: 100%; display: flex; justify-content: center; z-index: 1050; padding: 10px 14px 14px;
}
.nx-sidebar-footer-wrapper.nx-sh-footer-guest { border-top: 1px solid var(--nx-border); }

/* profile card (moved from embedded <style> blocks) */
.nx-sidebar-footer-wrapper { border-top: 1px solid #eaeff4; }
html.nx-dark body .nx-sidebar-footer-wrapper { border-top: 1px solid #2a2b36; }
.nx-sidebar-footer-wrapper.nx-sh-footer-guest { border-top: 1px solid var(--nx-border); }
html.nx-dark body .nx-sidebar-footer-wrapper.nx-sh-footer-guest { border-top: 1px solid var(--nx-border); }
.nx-sidebar-profile-card { background: #f8fafc; border-color: #eaeff4; }
html.nx-dark body .nx-sidebar-profile-card { background: #191b22; border-color: #2a2b36; }
.nx-sidebar-profile-card a { color: var(--nx-sidebar-text); transition: color 0.15s ease; }
.nx-sidebar-profile-card a:hover { color: #ef4444; }
html.nx-dark body .nx-sidebar-profile-card a { color: #707584; }
html.nx-dark body .nx-sidebar-profile-card a:hover { color: #f04438; }

.nx-sidebar-profile-card.nx-sh-profile-card {
    display: flex; flex-direction: row; align-items: center;
    justify-content: space-between; flex-wrap: nowrap;
    border-radius: var(--nx-radius-md); padding: 8px 10px; width: 100%;
    border-width: 1px; border-style: solid;
}
.nx-sh-profile-info { gap: 8px; min-width: 0; flex-grow: 1; }
.nx-sh-profile-textwrap { display: flex; flex-direction: column; line-height: 1.25; min-width: 0; text-align: left; flex-grow: 1; }
.nx-sh-profile-name {
    font-size: 12.5px; font-weight: 700; color: var(--nx-text);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 110px;
}
.nx-sh-profile-email {
    font-size: 10.5px; color: var(--nx-muted);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 110px;
}
.nx-sidebar-profile-card a.nx-sh-profile-logout {
    color: var(--nx-muted); font-size: 20px; display: flex; align-items: center;
    justify-content: center; flex-shrink: 0; transition: color 0.15s ease; text-decoration: none; margin-left: 8px;
}
.nx-sidebar-profile-card a.nx-sh-profile-logout:hover { color: #ef4444; }
html.nx-dark body .nx-sidebar-profile-card a.nx-sh-profile-logout { color: var(--nx-muted); }
html.nx-dark body .nx-sidebar-profile-card a.nx-sh-profile-logout:hover { color: #ef4444; }

/* avatars */
.nx-user-avatar {
    border-radius: 50%; background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-primary-hover) 100%);
    color: #ffffff; font-weight: 700; display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.nx-sh-avatar-32 { width: 32px; height: 32px; font-size: var(--nx-font-size-xs); }
.nx-sh-avatar-44 { width: 44px; height: 44px; font-size: var(--nx-font-size); cursor: pointer; box-shadow: 0 4px 10px rgba(var(--nx-primary-rgb),0.2); }
.nx-sh-avatar-36 {
    width: 36px; height: 36px; border-radius: 50%;
    background: linear-gradient(135deg, var(--nx-primary) 0%, var(--nx-primary-hover) 100%);
    color: #fff; display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: 13px; flex-shrink: 0;
}
.btn.nx-sh-avatar-btn { padding: 0; background: transparent; border: none; box-shadow: none; }

/* dropdown user menus */
.nx-sh-user-menu {
    min-width: 180px; border-radius: var(--nx-radius-md); box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    border: 1px solid var(--nx-border); margin-left: 10px; background: var(--nx-card-bg);
}
.nx-sh-menu-head { font-size: 13px; font-weight: 700; color: var(--nx-text); border-color: var(--nx-border); }
a.dropdown-item.nx-sh-menu-item { color: var(--nx-text); }
.nx-sh-menu-divider { border-color: var(--nx-border); }

/* login button (guest, sidebar footer) */
.btn.nx-sh-btn-login-block {
    border-radius: var(--nx-radius-md); font-weight: 700; font-size: 13px; height: 38px;
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
}
.btn.nx-sh-btn-login-cmp {
    display: none; width: 44px; height: 44px; border-radius: 50%; padding: 0;
    align-items: center; justify-content: center;
}
.nx-sh-ms-18 { font-size: var(--nx-font-size-h3); }
.nx-sh-ms-20 { font-size: 20px; }

/* =====================  TOPBAR (header.tpl)  ===================== */
/* Expanded style stacks a utility strip above the navigation row. The strip
   sits on --nx-bg and the nav on --nx-header-bg so the two read as separate
   bands; .nx-topbar's own padding is dropped because each row pads itself. */
.nx-topbar.nx-topbar-expanded { height: auto; padding: 0; }
/* Both header bands resolve to the admin's Header Background setting. The two
   rows stay readable as separate bands through the border-bottom, not a colour
   difference, so the whole header follows one setting. */
.nx-topbar-expanded-top {
    height: var(--nx-topbar-utility-height);
    background: var(--nx-header-bg);
    width: 100%;
}
.nx-topbar-expanded-bottom {
    height: var(--nx-header-height);
    background: var(--nx-header-bg);
    width: 100%;
    box-shadow: 0 1px 3px rgba(16, 24, 40, 0.04);
}
.nx-sh-tb-row { width: 100%; height: 100%; padding: 0 var(--nx-topbar-gutter); }
/* Logo rendered in the utility strip when logo_row is 'topbar'. */
.nx-topbar-logo { flex-shrink: 0; margin-right: auto; }
.nx-topbar-logo .nx-logo-img { height: var(--nx-logo-height); width: auto; }
.nx-sh-tb-actions { gap: 12px; flex-wrap: nowrap; }
.nx-topbar-right { gap: 12px; flex-wrap: nowrap; }
.nx-topbar-nav-middle { gap: 8px; flex-grow: 1; }
.nx-topbar-divider { width: 1px; height: 24px; background: var(--nx-border); margin: 0 4px; flex-shrink: 0; }

.nx-topbar-link.nx-sh-tb-cart {
    gap: 8px; text-decoration: none; padding: 6px 12px; border-radius: var(--nx-radius-md);
    white-space: nowrap; flex-wrap: nowrap; flex-shrink: 0;
}
.nx-sh-tb-cart-text { font-size: 13px; font-weight: 700; color: var(--nx-text); }
.btn.nx-topbar-link.nx-sh-tb-btn {
    padding: 6px 12px; border-radius: var(--nx-radius-md); background: transparent; border: none; box-shadow: none;
    white-space: nowrap; flex-wrap: nowrap; display: flex; align-items: center; justify-content: center;
}
.btn.nx-topbar-link.nx-sh-lang-btn {
    gap: 4px; padding: 6px 12px; border-radius: var(--nx-radius-md); background: transparent; border: none; box-shadow: none;
    white-space: nowrap; flex-wrap: nowrap;
}
.nx-sh-count-badge {
    position: absolute; top: -6px; right: -6px; font-size: 9.5px; background: #f04438; color: #fff;
    min-width: 15px; height: 15px; border-radius: 50%; display: flex; align-items: center;
    justify-content: center; padding: 0; border: none; font-weight: 800; line-height: 1; z-index: 2;
}
.nx-sh-notif-menu {
    width: 320px; border-radius: var(--nx-radius-md); box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    border: 1px solid var(--nx-border); background: var(--nx-card-bg); margin-top: 8px; z-index: 1070;
}
.nx-sh-notif-head { font-size: var(--nx-font-size-lg); color: var(--nx-text); border-color: var(--nx-border); }
.nx-sh-notif-list { max-height: 280px; overflow-y: auto; }
.nx-sh-notif-item { border: none; border-bottom: 1px solid var(--nx-border); background: transparent; transition: background 0.2s; }
.nx-sh-notif-msg { font-size: 13px; line-height: 1.4; color: var(--nx-text); text-align: left; }
.nx-sh-lang-name { font-size: 13px; font-weight: 700; color: var(--nx-text); }
.nx-sh-lang-menu { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); margin-top: 8px; z-index: 1070; }
/* The header pickers had no cap at all, so a long locale list simply ran off the
   bottom of a short window with no way to reach the rest — body.nx-theme
   .dropdown-menu sets overflow: hidden, hence the matching specificity here. */
body.nx-theme .nx-sh-lang-menu,
body.nx-theme .nx-sh-currency-menu {
    max-height: calc(100vh - 140px);
    overflow-x: hidden;
    overflow-y: auto;
    overscroll-behavior: contain;
}
body.nx-theme .nx-sh-lang-menu::-webkit-scrollbar,
body.nx-theme .nx-sh-currency-menu::-webkit-scrollbar { width: 8px; }
body.nx-theme .nx-sh-lang-menu::-webkit-scrollbar-thumb,
body.nx-theme .nx-sh-currency-menu::-webkit-scrollbar-thumb {
    background: var(--nx-border);
    border-radius: 8px;
}
body.nx-theme .nx-sh-lang-menu,
body.nx-theme .nx-sh-currency-menu {
    scrollbar-width: thin;
    scrollbar-color: var(--nx-border) transparent;
}
.btn.nx-topbar-link.nx-sh-currency-btn {
    gap: 4px; padding: 6px 12px; border-radius: var(--nx-radius-md); background: transparent; border: none; box-shadow: none;
    white-space: nowrap; flex-wrap: nowrap;
}
.nx-sh-currency-name { font-size: 13px; font-weight: 700; color: var(--nx-text); }
.nx-sh-currency-menu { border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg); margin-top: 8px; z-index: 1070; min-width: 160px; }
a.dropdown-item.nx-sh-menu-item.item.active { color: var(--nx-on-primary); font-weight: 700; }

.btn.nx-sh-acct-btn {
    gap: 8px; padding: 0; background: transparent; border: none; box-shadow: none;
    white-space: nowrap; flex-wrap: nowrap; display: flex; align-items: center;
}
.btn.nx-sh-acct-btn-g4 {
    gap: 4px; padding: 0; background: transparent; border: none; box-shadow: none;
    white-space: nowrap; flex-wrap: nowrap; display: flex; align-items: center;
}
.nx-sh-acct-name { color: var(--nx-text); font-weight: 700; font-size: 13px; white-space: nowrap; }
.nx-sh-acct-menu {
    min-width: 180px; border-radius: var(--nx-radius-md); box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    border: 1px solid var(--nx-border); margin-top: 8px; background: var(--nx-card-bg); z-index: 1070;
}
.nx-guest-login-buttons { display: flex; gap: 8px; flex-shrink: 0; }
.btn.nx-sh-btn-login-sm {
    border-radius: var(--nx-radius-sm); font-weight: 700; font-size: 13px; height: 36px;
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
}
.btn.nx-sh-btn-register-sm {
    border-radius: var(--nx-radius-sm); font-weight: 700; font-size: 13px; height: 36px;
    align-items: center; justify-content: center; border-color: var(--nx-border); color: var(--nx-text);
    transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}
.btn.nx-sh-btn-register-sm:hover {
    background: var(--nx-primary);
    border-color: var(--nx-primary);
    color: #fff;
}

/* The dark mode toggle is defined once in the Topbar section above. A second
   definition here overrode it with a flex layout that had no .active state, so
   the thumb never moved when the toggle was switched on. */

/* top layout row 2 (logo + middle nav) */
.nx-sh-logo-32 { height: 32px; }
.nx-sh-logo-mark-36 {
    width: 36px; height: 36px; border-radius: 9px; background: var(--nx-primary); display: flex;
    align-items: center; justify-content: center; color: #fff; font-weight: 800; font-size: 19px;
    box-shadow: 0 4px 10px rgba(var(--nx-primary-rgb),0.15);
}
.nx-sh-brand-name { font-size: var(--nx-font-size-lg); font-weight: 800; color: var(--nx-text); letter-spacing: -0.2px; }
.nx-navbar-link.nx-sh-topnav-link {
    display: flex; align-items: center; gap: 6px; font-size: var(--nx-font-size-md); font-weight: 700;
    color: var(--nx-text); text-decoration: none; padding: 7px 14px; border-radius: var(--nx-radius-md);
}
.nx-navbar-link.nx-sh-topnav-link-dd {
    display: flex; align-items: center; gap: 6px; font-size: var(--nx-font-size-md); font-weight: 700;
    color: var(--nx-text); text-decoration: none; padding: 7px 14px; border-radius: var(--nx-radius-md);
    transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease; white-space: nowrap;
}
.nx-sh-topnav-menu {
    min-width: 220px; z-index: 1060; background: transparent; border: none; box-shadow: none;
    padding: 0; padding-top: 10px; margin: 0;
}
.nx-sh-topnav-card {
    border-radius: var(--nx-radius-md); padding: 8px; box-shadow: 0 10px 30px rgba(0,0,0,0.08);
    border: 1px solid var(--nx-border); background: var(--nx-card-bg);
}
a.dropdown-item.nx-sh-topnav-item {
    padding: 8px 12px; border-radius: var(--nx-radius-sm); color: var(--nx-text); font-weight: 600;
    font-size: var(--nx-font-size-md); gap: 4px; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.nx-sh-topnav-item-ico {
    color: var(--nx-primary); font-size: 20px; flex-shrink: 0; margin-right: 8px;
    font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
}
/* Sits inside the 62px nav row, so the height is fixed and the button is
   centred rather than stretched -- it was overflowing the row top and bottom. */
.btn.nx-sh-openticket-btn2 {
    gap: 8px;
    height: 40px;
    padding: 0 18px;
    border-radius: var(--nx-radius-button);
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    line-height: 1;
    white-space: nowrap;
    align-self: center;
    flex-shrink: 0;
    box-shadow: var(--nx-shadow-button);
}

/* centered login layout (header.tpl) */
.nx-sh-mw-440 { max-width: 440px; }
.nx-sh-logo-48 { height: 48px; }
.nx-sh-logo-mark-32 { width: 32px; height: 32px; vertical-align: middle; }
.nx-logo-text.nx-sh-logo-text-24 { font-size: 24px; vertical-align: middle; margin-left: 8px; }
.card.nx-sh-card-r16 { border-radius: var(--nx-radius-card); }

/* =====================  FOOTER (footer.tpl)  ===================== */
/* theme.min.css assumes a dark footer and paints every button in it white via
   `footer.footer .btn`. At (0,0,2,1) that beat the plain `.btn.nx-sh-footer-*`
   rules below, so on this light footer the selected language and currency were
   white on white — only the caret was visible. The label inherits the button's
   colour, so pinning the button here fixes both. */
body.nx-theme .btn.nx-sh-footer-lang-btn,
body.nx-theme .btn.nx-sh-footer-currency-btn {
    color: var(--nx-text);
}
.nx-sh-footer-lang { display: inline-block; position: relative; z-index: 1050; }
.btn.nx-sh-footer-lang-btn {
    border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    color: var(--nx-text); font-size: var(--nx-font-size-sm); padding: 4px 10px; gap: 4px; box-shadow: none;
}
/* Caret icon replaces Bootstrap's .dropdown-toggle triangle, which rendered as
   a stray glyph next to the label. Matches the header dropdowns. */
.nx-sh-caret { color: var(--nx-muted); margin-left: 2px; }
.dropup .nx-sh-caret,
.dropdown .nx-sh-caret { transition: transform .15s ease; }
.dropup.show .nx-sh-caret { transform: rotate(180deg); }

.nx-sh-footer-lang-menu {
    border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    box-shadow: 0 10px 30px rgba(0,0,0,0.06); padding: 6px; min-width: 140px; margin-bottom: 8px;
}
/* Popper positions these with an inline transform. In the footer that put a
   long list past the bottom of the page, where it was clipped and looked
   empty. Positioning them from CSS instead — anchored to the button's top edge
   and opening upward — keeps them on screen whatever the list length. The
   !important is needed to beat Popper's inline style. */
/* body.nx-theme .dropdown-menu sets overflow: hidden for the rounded corners,
   and at (0,0,2,0) it beat the plain class here — so the capped menu could not
   scroll and the 17 locales past the 320px cut were unreachable. Matching that
   specificity restores the scroll. */
body.nx-theme .nx-sh-footer-lang-menu,
body.nx-theme .nx-sh-footer-currency-menu,
.nx-sh-footer-lang-menu,
.nx-sh-footer-currency-menu {
    position: absolute !important;
    top: auto !important;
    bottom: 100% !important;
    left: auto !important;
    right: 0 !important;
    transform: none !important;
    /* The old min(320px, 50vh) cut a 26-locale list down to ten visible rows.
       Using the space actually available above the footer bar shows the whole
       list on a normal window and only scrolls on a short one — the header
       picker gets the same cap so neither can run off screen. */
    max-height: calc(100vh - 140px);
    overflow-x: hidden;
    overflow-y: auto;
    overscroll-behavior: contain;
    z-index: 1060;
}
/* A hairline scrollbar gave no hint that the list continued, which is what made
   the footer picker look like it was missing languages. */
body.nx-theme .nx-sh-footer-lang-menu::-webkit-scrollbar,
body.nx-theme .nx-sh-footer-currency-menu::-webkit-scrollbar {
    width: 8px;
}
body.nx-theme .nx-sh-footer-lang-menu::-webkit-scrollbar-thumb,
body.nx-theme .nx-sh-footer-currency-menu::-webkit-scrollbar-thumb {
    background: var(--nx-border);
    border-radius: 8px;
}
body.nx-theme .nx-sh-footer-lang-menu::-webkit-scrollbar-thumb:hover,
body.nx-theme .nx-sh-footer-currency-menu::-webkit-scrollbar-thumb:hover {
    background: var(--nx-muted);
}
body.nx-theme .nx-sh-footer-lang-menu,
body.nx-theme .nx-sh-footer-currency-menu {
    scrollbar-width: thin;
    scrollbar-color: var(--nx-border) transparent;
}
a.dropdown-item.nx-sh-footer-lang-item { border-radius: 6px; padding: 6px 12px; font-weight: 600; color: var(--nx-text); }
.nx-sh-footer-currency { display: inline-block; position: relative; z-index: 1050; }
.btn.nx-sh-footer-currency-btn {
    border-radius: var(--nx-radius-sm); border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    color: var(--nx-text); font-size: var(--nx-font-size-sm); padding: 4px 10px; gap: 4px; box-shadow: none;
}
.nx-sh-footer-currency-menu {
    border-radius: var(--nx-radius-md); border: 1px solid var(--nx-border); background: var(--nx-card-bg);
    box-shadow: 0 10px 30px rgba(0,0,0,0.06); padding: 6px; min-width: 140px; margin-bottom: 8px;
}
a.dropdown-item.nx-sh-footer-lang-item.item.active { color: var(--nx-on-primary); font-weight: 700; }

/* =====================  HOMEPAGE PANEL (includes/homepage-panel.tpl)  ===================== */
.nx-hp-domain-banner {
    background: linear-gradient(135deg, var(--nx-primary-hover) 0%, var(--nx-primary) 100%);
    border-radius: var(--nx-radius-card); padding: 24px 28px; color: var(--nx-on-primary);
    box-shadow: 0 10px 30px rgba(var(--nx-primary-rgb),0.18);
    display: flex; flex-direction: column; gap: 18px; margin-bottom: 22px;
}
h2.nx-hp-domain-title { margin: 0; font-size: 20px; font-weight: 800; letter-spacing: -0.5px; color: var(--nx-on-primary); }
.nx-hp-domain-sub { margin: 4px 0 0; font-size: 13px; color: rgba(255,255,255,0.75); font-weight: 500; }
.nx-hp-domain-form { width: 100%; margin: 0; }
.nx-hp-domain-inputwrap {
    background: var(--nx-card-bg);
    border-radius: var(--nx-radius-card);
    padding: 5px;
    display: flex;
    align-items: center;
    box-shadow: 0 4px 20px rgba(0,0,0,0.06);
    gap: 6px;
    transition: box-shadow .15s ease;
}
input.nx-hp-domain-input {
    flex: 1;
    min-width: 0;
    border: none;
    outline: none;
    padding: 8px 12px;
    font-size: var(--nx-font-size);
    font-weight: 600;
    color: var(--nx-text);
    background: transparent;
    box-shadow: none;
}
/* The button sits on the primary-filled banner, so a primary fill made it
   disappear into the background. Use the darker hover shade for contrast. */
.btn.nx-hp-domain-btn {
    background: var(--nx-primary-hover);
    border: none;
    color: var(--nx-on-primary);
    border-radius: calc(var(--nx-radius-card) - 5px);
    padding: 0 18px;
    font-weight: 700;
    font-size: 13px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    height: 38px;
    flex-shrink: 0;
    white-space: nowrap;
}
.btn.nx-hp-domain-btn:hover {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
}
.nx-hp-domain-btn-ico { font-size: var(--nx-font-size-h3); vertical-align: middle; }

.nx-hp-panel {
    background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card);
    box-shadow: 0 1px 2px rgba(16,24,40,.04); display: flex; flex-direction: column; margin-bottom: 22px;
}
.nx-hp-panel-head { display: flex; align-items: center; justify-content: space-between; padding: 10px 20px; border-bottom: 1px solid var(--nx-border); }
.nx-hp-panel-head-left { display: flex; align-items: center; gap: 10px; }
.nx-hp-panel-ico {
    width: 30px; height: 30px; border-radius: 9px; background: var(--nx-hp-ico-bg); color: var(--nx-hp-ico-fg);
    display: flex; align-items: center; justify-content: center; font-size: 17px; flex-shrink: 0;
}
.nx-hp-panel-title { font-size: var(--nx-font-size-lg); font-weight: 700; color: var(--nx-text); }
a.nx-hp-panel-link { font-size: 13px; color: var(--nx-primary); font-weight: 700; text-decoration: none; }
.nx-hp-panel-body { padding: 20px; display: flex; flex-direction: column; }
.nx-hp-body-html { font-size: var(--nx-font-size-md); color: var(--nx-muted); padding-bottom: 8px; }
.nx-hp-ticket-list { display: flex; flex-direction: column; gap: 16px; }
a.nx-hp-ticket { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; text-decoration: none; transition: opacity 0.2s; }
.nx-hp-ticket-main { display: flex; align-items: flex-start; gap: 12px; min-width: 0; flex: 1; }
.nx-hp-ticket-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--nx-hp-dot); margin-top: 7px; flex-shrink: 0; }
.nx-hp-ticket-textwrap { min-width: 0; display: flex; flex-direction: column; }
.nx-hp-ticket-title { font-size: 14.5px; font-weight: 700; color: var(--nx-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nx-hp-ticket-meta { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 500; margin-top: 1px; }
.nx-hp-ticket-time { font-size: 13px; color: var(--nx-muted); font-weight: 600; flex-shrink: 0; }
.nx-hp-empty { font-size: var(--nx-font-size-md); color: var(--nx-muted); text-align: center; padding: 12px 0; }
.nx-hp-sec-list { display: flex; flex-direction: column; gap: 20px; }
.nx-hp-sec-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.nx-hp-sec-left { display: flex; align-items: center; gap: 14px; }
.nx-hp-sec-ico {
    width: 42px; height: 42px; border-radius: var(--nx-radius-md); background: var(--nx-hp-ico-bg); color: var(--nx-hp-ico-fg);
    display: flex; align-items: center; justify-content: center; font-size: var(--nx-font-size-h2); flex-shrink: 0;
}
.nx-hp-sec-ico-warn {
    width: 42px; height: 42px; border-radius: var(--nx-radius-md); background: rgba(247, 144, 9, 0.08); color: #f79009;
    display: flex; align-items: center; justify-content: center; font-size: var(--nx-font-size-h2); flex-shrink: 0;
}
.nx-hp-ms-22-fill { font-variation-settings: 'FILL' 1; font-size: var(--nx-font-size-h2); }
.nx-hp-ms-22 { font-size: var(--nx-font-size-h2); }
.nx-hp-sec-label { font-size: 14.5px; font-weight: 600; color: var(--nx-text); }
.nx-hp-sec-textwrap { display: flex; flex-direction: column; }
.nx-hp-sec-sublabel { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 500; margin-top: 1px; }
.nx-hp-sec-status-green { font-size: var(--nx-font-size); font-weight: 700; color: #12b76a; }
a.nx-hp-sec-action { font-size: var(--nx-font-size); font-weight: 700; color: var(--nx-primary); text-decoration: none; }
.nx-hp-prod-list { display: flex; flex-direction: column; }
.nx-hp-prod-row { display: flex; align-items: center; justify-content: space-between; padding: 14px 0; border-bottom: 1px solid var(--nx-border); gap: 16px; }
.nx-hp-child-row { display: flex; align-items: center; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid var(--nx-border); gap: 12px; }
.nx-hp-noborder { border-bottom: none; }
.nx-hp-prod-left { display: flex; align-items: center; gap: 14px; min-width: 0; flex: 1; }
.nx-hp-prod-ico {
    width: 42px; height: 42px; border-radius: var(--nx-radius-md); background: var(--nx-hp-ico-bg); color: var(--nx-hp-ico-fg);
    display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.nx-hp-prod-textwrap { text-align: left; min-width: 0; display: flex; flex-direction: column; }
.nx-hp-prod-name { font-size: 14.5px; font-weight: 700; color: var(--nx-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nx-hp-prod-meta { font-size: 12.5px; color: var(--nx-muted); font-weight: 500; margin-top: 2px; }
.nx-hp-prod-expiry { color: var(--nx-hp-expiry); font-weight: 600; }
.nx-hp-prod-right { display: flex; align-items: center; gap: 14px; flex-shrink: 0; }
.nx-hp-prod-status {
    display: inline-flex; align-items: center; justify-content: center; padding: 5px 12px; border-radius: var(--nx-radius-badge);
    font-size: var(--nx-font-size-sm); font-weight: 700; background: var(--nx-hp-st-bg); color: var(--nx-hp-st-fg); text-transform: capitalize;
}
.btn.nx-hp-prod-manage {
    border: 1px solid var(--nx-border); background: var(--nx-card-bg); color: var(--nx-text);
    font-weight: 700; font-size: 13px; border-radius: var(--nx-radius-sm); padding: 6px 14px; text-decoration: none; transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.btn.nx-hp-prod-manage:hover { background: rgba(0,0,0,0.03); }
.nx-hp-child-textwrap { min-width: 0; flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
a.nx-hp-child-link { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); text-decoration: none; }
.nx-hp-child-span { font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); }
.nx-hp-child-right { flex-shrink: 0; text-align: right; }

/* =====================  CLIENT AREA HOME (clientareahome.tpl)  ===================== */
.nx-sh-gap24 { gap: 24px; }
.nx-dash-left-col { width: 264px; flex: 0 0 264px; display: flex; flex-direction: column; gap: 22px; }
.nx-dash-right-col { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 22px; }

.nx-ca-profile {
    border-radius: var(--nx-radius-card); overflow: hidden;
    background: linear-gradient(155deg, var(--nx-primary) 0%, var(--nx-secondary) 100%);
    box-shadow: 0 12px 30px rgba(var(--nx-primary-rgb),.28); padding: 24px; position: relative;
}
.nx-ca-profile-deco { position: absolute; right: -30px; top: -30px; width: 120px; height: 120px; border-radius: 50%; background: rgba(255,255,255,.08); }
.nx-ca-profile-avatar {
    width: 66px; height: 66px; border-radius: 50%; background: rgba(255,255,255,.9); color: var(--nx-primary);
    display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: var(--nx-font-size-h2);
    border: 3px solid rgba(255,255,255,.55); margin-bottom: 14px;
}
.nx-ca-ms-30 { font-size: 30px; }
.nx-ca-ms-18 { font-size: var(--nx-font-size-h3); }
.nx-ca-ms-18-mid { font-size: var(--nx-font-size-h3); vertical-align: middle; }
.nx-ca-profile-name { color: #fff; font-size: var(--nx-font-size-h3); font-weight: 800; letter-spacing: -.2px; }
.nx-ca-profile-addr { color: rgba(255,255,255,.85); font-size: 13px; margin-top: 8px; line-height: 1.65; }
.nx-ca-profile-actions { display: flex; gap: 9px; margin-top: 18px; }
a.nx-ca-profile-btn { flex: 1; text-align: center; background: #fff; color: var(--nx-primary); font-weight: 700; font-size: 13px; padding: 9px 0; border-radius: var(--nx-radius-md); text-decoration: none; }
a.nx-ca-profile-btn2 { flex: 1; text-align: center; background: rgba(255,255,255,.16); color: #fff; font-weight: 700; font-size: 13px; padding: 9px 0; border-radius: var(--nx-radius-md); text-decoration: none; }

.nx-ca-card { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 20px; box-shadow: 0 1px 2px rgba(16,24,40,.04); }
.nx-ca-card-title { font-size: var(--nx-font-size-sm); font-weight: 800; letter-spacing: .7px; text-transform: uppercase; color: var(--nx-muted); margin-bottom: 14px; }
.nx-ca-contact-list { display: flex; flex-direction: column; gap: 13px; margin-bottom: 16px; }
a.nx-ca-contact { display: flex; align-items: center; gap: 10px; font-size: var(--nx-font-size); font-weight: 600; color: var(--nx-text); text-decoration: none; }
.nx-ca-contact-ico { font-variation-settings: 'FILL' 1; font-size: 19px; color: #93b4f7; }
.nx-ca-nocontact { font-size: 13px; color: var(--nx-muted); font-weight: 600; }
a.nx-ca-more { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 600; color: var(--nx-muted); text-decoration: none; }
a.nx-ca-addcontact { display: flex; align-items: center; justify-content: center; gap: 6px; background: rgba(var(--nx-primary-rgb), 0.08); color: var(--nx-primary); font-weight: 700; font-size: 13px; padding: 10px 0; border-radius: var(--nx-radius-md); text-decoration: none; }
.nx-ca-shortcut-list { display: flex; flex-direction: column; gap: 13px; }

.nx-ca-banner-slider { position: relative; border-radius: var(--nx-radius-card); overflow: hidden; margin-bottom: 4px; }
.nx-ca-banner-content { flex: 1; padding-top: var(--nx-bpt); padding-bottom: var(--nx-bpb); padding-left: 36px; padding-right: 36px; z-index: 2; }
.nx-ca-banner-badge { display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,0.14); color: #dbe7ff; font-size: var(--nx-font-size-xs); font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; padding: 6px 12px; border-radius: var(--nx-radius-badge); margin-bottom: 16px; }
h2.nx-ca-banner-title { margin: 0; color: #fff; font-size: 29px; font-weight: 800; line-height: 1.15; letter-spacing: -0.6px; max-width: 420px; }
.nx-ca-banner-subtitle { margin: 12px 0 20px; color: #b9cbf0; font-size: var(--nx-font-size); max-width: 400px; }
a.nx-ca-banner-btn { display: inline-flex; align-items: center; gap: 8px; background: #fff; color: var(--nx-primary); font-weight: 700; font-size: var(--nx-font-size); padding: 11px 20px; border-radius: var(--nx-radius-button); text-decoration: none; }
.nx-ca-banner-dots { position: absolute; bottom: 15px; left: 36px; z-index: 10; display: flex; gap: 6px; }

.nx-ca-stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin-bottom: 4px; }
.nx-ca-stat-tile { background: var(--nx-card-bg); border: 1px solid var(--nx-border); border-radius: var(--nx-radius-card); padding: 20px; box-shadow: 0 1px 2px rgba(16,24,40,.04); text-decoration: none; display: block; transition: transform 0.15s ease; }
.nx-ca-stat-top { display: flex; justify-content: space-between; align-items: center; }
.nx-ca-stat-label { font-size: 13px; font-weight: 700; color: var(--nx-muted); }
.nx-ca-stat-ico { width: 34px; height: 34px; border-radius: var(--nx-radius-md); display: flex; align-items: center; justify-content: center; font-size: 19px; }
.nx-ca-stat-ico-primary { background: rgba(var(--nx-primary-rgb), 0.08); color: var(--nx-primary); }
.nx-ca-stat-ico-secondary { background: rgba(var(--nx-secondary-rgb), 0.08); color: var(--nx-secondary); }
.nx-ca-stat-ico-danger { background: rgba(240, 68, 56, 0.08); color: #f04438; }
.nx-ca-stat-ico-green { background: rgba(18, 183, 106, 0.08); color: #12b76a; }
.nx-ca-stat-num { font-size: 38px; font-weight: 800; letter-spacing: -1px; margin-top: 8px; }
.nx-ca-stat-num-primary { color: var(--nx-primary); }
.nx-ca-stat-num-secondary { color: var(--nx-secondary); }
.nx-ca-stat-num-danger { color: #f04438; }
.nx-ca-stat-num-green { color: #12b76a; }
.nx-ca-stat-cap { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 600; margin-top: 2px; }

/* =====================================================================
 * Theme-override guards: original inline styles on a/.btn/h2/input beat
 * theme rules (body.nx-theme a/.btn/h2 up to ~0,2,3). Restate the themed
 * properties with !important so the extracted classes keep parity.
 * ===================================================================== */
/* anchors (color / background) */
a.nx-sidebar-submenu-item { color: var(--nx-muted) !important; }
a.dropdown-item.nx-sh-flyout-item { color: var(--nx-text) !important; }
a.dropdown-item.nx-sh-menu-item:not(.active) { color: var(--nx-text) !important; }
a.nx-navbar-link.nx-sh-topnav-link, a.nx-navbar-link.nx-sh-topnav-link-dd { color: var(--nx-text); }
a.dropdown-item.nx-sh-topnav-item { color: var(--nx-text) !important; }
a.dropdown-item.nx-sh-footer-lang-item:not(.active) { color: var(--nx-text) !important; }
a.nx-hp-panel-link { color: var(--nx-primary); }
a.nx-hp-sec-action { color: var(--nx-primary); }
a.nx-hp-child-link { color: var(--nx-text); }
a.nx-ca-profile-btn { color: var(--nx-primary); background: #fff; }
a.nx-ca-profile-btn2 { color: #fff; background: rgba(255,255,255,.16); }
a.nx-ca-contact { color: var(--nx-text); }
a.nx-ca-more { color: var(--nx-muted); }
a.nx-ca-addcontact { color: var(--nx-primary); background: rgba(var(--nx-primary-rgb), 0.08); }
a.nx-ca-banner-btn { color: var(--nx-primary); background: #fff; }

/* buttons (color / background / border) */
.btn.nx-sh-openticket-btn { background: var(--nx-primary) !important; border: none !important; color: #fff !important; }
.btn.nx-sh-openticket-btn-cmp { background: var(--nx-primary) !important; border: none !important; color: #fff !important; }
.btn.nx-topbar-link.nx-sh-tb-btn { background: transparent !important; border: none !important; box-shadow: none !important; }
.btn.nx-topbar-link.nx-sh-lang-btn { background: transparent !important; border: none !important; box-shadow: none !important; }
.btn.nx-topbar-link.nx-sh-currency-btn { background: transparent !important; border: none !important; box-shadow: none !important; }
.btn.nx-sh-acct-btn, .btn.nx-sh-acct-btn-g4 { background: transparent !important; border: none !important; box-shadow: none !important; }
.btn.nx-sh-avatar-btn { background: transparent !important; border: none !important; box-shadow: none !important; }
.btn.nx-hp-prod-manage { border: 1px solid var(--nx-border) !important; background: var(--nx-card-bg) !important; color: var(--nx-text) !important; }
.btn.nx-hp-prod-manage:hover { background: rgba(0,0,0,0.03) !important; }
/* The footer language and currency buttons are styled in the Footer section
   above; repeating them here only duplicated the same values. */

/* headings inside colored banners */
h2.nx-hp-domain-title { margin: 0; font-size: 20px; font-weight: 800; letter-spacing: -0.5px; color: #fff; }
h2.nx-ca-banner-title { margin: 0; color: #fff; font-size: 29px; font-weight: 800; line-height: 1.15; letter-spacing: -0.6px; }

/* ==========================================================================
   NEXUM BATCH 2 — Auth, Store, State/Error pages
   Loads AFTER nexum.css (and theme.css). Scoped + high-specificity overrides.
   ========================================================================== */

/* ==========================================================================
   SECTION A — AUTH PAGES (login, register, password-reset, two-factor)
   Rendered inside header.tpl centered card (.container > .w-100 > .card)
   ========================================================================== */

body.nx-theme .nx-auth { text-align: left; }

body.nx-theme .nx-auth-head { margin-bottom: 22px; }
body.nx-theme .nx-auth-title {
    font-size: var(--nx-font-size-h2); font-weight: 800; letter-spacing: -0.3px;
    color: var(--nx-text); margin: 0 0 4px;
}
body.nx-theme .nx-auth-sub {
    font-size: var(--nx-font-size-md); color: var(--nx-muted); margin: 0; font-weight: 500;
}

body.nx-theme .nx-field { margin-bottom: 16px; }
body.nx-theme .nx-field .nx-field-label,
body.nx-theme .nx-auth label.nx-field-label {
    display: block; font-size: 12.5px; font-weight: 700;
    color: var(--nx-text); margin-bottom: 6px; letter-spacing: .1px;
}
body.nx-theme .nx-field-labelrow {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 6px;
}
body.nx-theme .nx-field-labelrow .nx-field-label { margin-bottom: 0; }

body.nx-theme .nx-auth .form-control,
body.nx-theme .nx-auth-input { height: 46px; }

/* Password reveal input group (keeps .input-group for reveal JS) */
body.nx-theme .nx-input-reveal { position: relative; display: block; }
body.nx-theme .nx-input-reveal .form-control { padding-right: 46px; }
body.nx-theme .nx-input-reveal .nx-reveal-btn,
body.nx-theme .nx-input-reveal button.nx-reveal-btn {
    position: absolute; top: 0; right: 0; height: 46px; width: 46px;
    display: flex; align-items: center; justify-content: center;
    background: transparent; border: none; box-shadow: none;
    color: var(--nx-muted); padding: 0; cursor: pointer; z-index: 3;
}
body.nx-theme .nx-input-reveal .nx-reveal-btn:hover { color: var(--nx-primary); }
body.nx-theme .nx-input-reveal .nx-reveal-btn .material-symbols-rounded { font-size: 20px; }

body.nx-theme .nx-auth-check {
    display: flex; align-items: center; gap: 8px;
    font-size: 13px; font-weight: 600; color: var(--nx-muted);
    margin: 4px 0 18px; cursor: pointer;
}
body.nx-theme .nx-auth-check input { margin: 0; }
body.nx-theme .nx-auth-check span { user-select: none; }
/* For the oauth form, where the control sits on a line beside other links
   rather than on its own row. */
body.nx-theme .nx-auth-check.is-inline {
    display: inline-flex;
    margin: 0;
    vertical-align: middle;
}

body.nx-theme .btn.nx-auth-btn,
body.nx-theme button.nx-auth-btn,
body.nx-theme input.nx-auth-btn {
    display: flex; align-items: center; justify-content: center;
    width: 100%; height: 48px; font-size: 14.5px; font-weight: 700;
    border-radius: var(--nx-radius-button, 11px);
}

body.nx-theme a.nx-auth-link {
    font-size: 12.5px; font-weight: 600; color: var(--nx-muted);
    text-decoration: none; transition: color .15s ease;
}
body.nx-theme a.nx-auth-link:hover { color: var(--nx-primary); }
body.nx-theme a.nx-auth-link.strong { font-weight: 800; color: var(--nx-primary); }

body.nx-theme .nx-auth-foot {
    margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--nx-border);
    text-align: center; font-size: 13px; color: var(--nx-muted);
}
body.nx-theme .nx-auth-foot small { font-size: 13px; }

body.nx-theme .nx-auth-actions {
    display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
    margin-top: 6px;
}
body.nx-theme .nx-auth-actions .btn { flex: 1 1 auto; }

/* Two-factor challenge widget spacing */
body.nx-theme .nx-auth .nx-2fa-challenge { margin-bottom: 18px; }
body.nx-theme .nx-auth .nx-2fa-challenge input.form-control { height: 46px; }
body.nx-theme .nx-2fa-backupcode {
    display: block; width: 100%; text-align: center;
    font-size: 26px; font-weight: 800; letter-spacing: 2px;
    color: var(--nx-text); background: var(--nx-bg);
    border: 1px dashed var(--nx-border); border-radius: var(--nx-radius-input, 11px);
    padding: 16px; margin: 18px 0;
}

/* Register — neutralize outer centered card, widen, tidy section cards */
body:has(#registration) .container > .w-100,
body:has(#frmCheckout) .container > .w-100 { max-width: 720px !important; }
body:has(#registration) .container > .w-100 > .card {
    background: transparent; border: none;
    box-shadow: none; padding: 0; border-radius: 0;
}
body.nx-theme #registration .card { margin-bottom: 18px; }
body.nx-theme #registration .card-title,
body.nx-theme #registration h3.card-title {
    font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text);
    margin-bottom: 18px; letter-spacing: -0.2px;
}
/* Make bare .field inputs match nexum form-control */
body.nx-theme #registration .field,
body.nx-theme #registration input.field,
body.nx-theme #registration select.field {
    width: 100%; height: 44px; padding: 0 14px 0 40px;
    background: var(--nx-card-bg); color: var(--nx-text);
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-input, 11px);
    font-size: var(--nx-font-size); box-shadow: none; transition: border-color .15s ease, box-shadow .15s ease;
}
body.nx-theme #registration .field:focus,
body.nx-theme #registration input.field:focus,
body.nx-theme #registration select.field:focus {
    outline: none; border-color: var(--nx-primary);
    box-shadow: 0 0 0 3px rgba(var(--nx-primary-rgb), .15);
}
body.nx-theme #registration .prepend-icon { position: relative; }
body.nx-theme #registration .prepend-icon .field-icon {
    position: absolute; left: 0; top: 0; height: 44px; width: 38px;
    display: flex; align-items: center; justify-content: center;
    color: var(--nx-muted); z-index: 2; pointer-events: none; margin: 0;
}
body.nx-theme #registration .prepend-icon .field-icon i { color: var(--nx-muted); font-size: var(--nx-font-size); }
/* The icon overlays the first 38px of the control, so the field has to leave
   that space clear. The country <select> is replaced at runtime by the skinned
   trigger, which needs the same allowance or the country name sits under the
   globe. */
body.nx-theme #registration .prepend-icon .form-control,
body.nx-theme #registration .prepend-icon .nx-form-control,
body.nx-theme #registration .prepend-icon .nx-custom-select-trigger {
    padding-left: 40px;
}
body.nx-theme #registration .prepend-icon .nx-custom-select-wrapper { display: block; }

/* Mailing-list opt-in. WHMCS turns this input into a bootstrap-switch; the
   wrapper takes the theme's control shape so the two halves read as one
   segmented control rather than a pair of stacked boxes. */
body.nx-theme #registration .bootstrap-switch {
    border-radius: var(--nx-radius-input, 11px);
    border-color: var(--nx-border);
    overflow: hidden;
}
body.nx-theme #registration .password-strength-meter { margin-top: 8px; }
body.nx-theme #registration .btn.btn-lg.btn-primary { min-width: 240px; height: 48px; font-weight: 800; }

/* ==========================================================================
   SECTION B — STORE PAGES (store/order.tpl, store/not-found.tpl)
   Overrides scoped to store containers so store.css is untouched.
   ========================================================================== */

body.nx-theme .nx-store-order { max-width: 960px; margin: 0 auto; }
body.nx-theme .nx-store-order .store-order-head {
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 18px); padding: 26px 28px;
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04)); margin-bottom: 20px;
}
body.nx-theme .nx-store-order .store-order-head h2 {
    font-size: var(--nx-font-size-h2); font-weight: 800; color: var(--nx-text);
    letter-spacing: -0.3px; margin: 0 0 8px;
}
body.nx-theme .nx-store-order .store-order-head p {
    font-size: var(--nx-font-size); color: var(--nx-muted); margin: 0; line-height: 1.6;
}
body.nx-theme .nx-store-order .payment-term h4,
body.nx-theme .nx-store-order > form > h4 {
    font-size: 13px; font-weight: 800; text-transform: uppercase;
    letter-spacing: .6px; color: var(--nx-muted); margin: 0 0 10px;
}
body.nx-theme .nx-store-order .payment-term .custom-select,
body.nx-theme .nx-store-order .payment-term select { height: 46px; }

body.nx-theme .nx-store-order .store-domain-tabs {
    border: none; display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 0;
}
body.nx-theme .nx-store-order .store-domain-tabs .nav-item { margin: 0; }
body.nx-theme .nx-store-order .store-domain-tabs .nav-link {
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-button, 11px);
    background: var(--nx-card-bg); color: var(--nx-muted); font-weight: 700; font-size: var(--nx-font-size-md);
    padding: 12px 22px; transition: background-color .15s ease, border-color .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease;
}
body.nx-theme .nx-store-order .store-domain-tabs .nav-link:hover {
    border-color: var(--nx-primary); color: var(--nx-primary);
}
body.nx-theme .nx-store-order .store-domain-tabs .nav-link.active,
body.nx-theme .nx-store-order .store-domain-tabs .nav-item.active .nav-link {
    background: var(--nx-primary); border-color: var(--nx-primary);
    color: #fff;
}
body.nx-theme .nx-store-order .store-domain-tab-content {
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 18px); padding: 22px; margin-top: 16px;
}
body.nx-theme .nx-store-order .store-domain-tab-content .form-control,
body.nx-theme .nx-store-order .store-domain-tab-content .custom-select { height: 46px; }
body.nx-theme .nx-store-order .domain-validation.ok { color: var(--nx-success); font-weight: 700; }
body.nx-theme .nx-store-order .store-order-actions {
    display: flex; align-items: center; justify-content: space-between;
    gap: 12px; margin-top: 22px; flex-wrap: wrap;
}
body.nx-theme .nx-store-order .store-order-actions .actions-right {
    display: flex; gap: 10px; flex-wrap: wrap; margin-left: auto;
}
body.nx-theme .nx-store-order .store-promoted-product h3 {
    font-size: 20px; font-weight: 800; color: var(--nx-text); margin-bottom: 4px;
}
body.nx-theme .nx-store-order .store-promoted-product h4 {
    font-size: var(--nx-font-size); color: var(--nx-muted); font-weight: 600; margin-bottom: 12px;
}
body.nx-theme .nx-store-order .store-promoted-product .features { list-style: none; padding: 0; margin: 12px 0; }
body.nx-theme .nx-store-order .store-promoted-product .features li {
    display: flex; align-items: center; gap: 8px; font-size: var(--nx-font-size-md);
    color: var(--nx-text); padding: 4px 0;
}
body.nx-theme .nx-store-order .store-promoted-product .features li i { color: var(--nx-success); }

/* ==========================================================================
   SECTION C — STATE / ERROR CARDS (access-denied, banned, store not-found)
   ========================================================================== */

body.nx-theme .nx-state {
    min-height: 58vh; display: flex; align-items: center;
    justify-content: center; padding: 40px 16px;
}
body.nx-theme .nx-state-card {
    width: 100%; max-width: 520px; text-align: center;
    background: var(--nx-card-bg); border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 18px); padding: 44px 40px;
    box-shadow: var(--nx-shadow, 0 1px 2px rgba(16,24,40,.04));
}
body.nx-theme .nx-state-icon {
    width: 76px; height: 76px; margin: 0 auto 22px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
}
body.nx-theme .nx-state-icon .material-symbols-rounded { font-size: 40px; line-height: 1; }
body.nx-theme .nx-state-icon.danger { background: rgba(240,68,56,.10); color: var(--nx-danger, #f04438); }
body.nx-theme .nx-state-icon.warning { background: rgba(247,144,9,.12); color: var(--nx-warning, #f79009); }
body.nx-theme .nx-state-icon.info { background: rgba(var(--nx-primary-rgb), .10); color: var(--nx-primary); }
body.nx-theme .nx-state-card h1 {
    font-size: 26px; font-weight: 800; letter-spacing: -0.4px;
    color: var(--nx-text); margin: 0 0 8px;
}
body.nx-theme .nx-state-card p,
body.nx-theme .nx-state-card .nx-state-text {
    font-size: var(--nx-font-size); color: var(--nx-muted); margin: 0 0 8px; line-height: 1.6;
}
body.nx-theme .nx-state-list {
    list-style: none; padding: 0; margin: 14px 0; text-align: left;
    border: 1px solid var(--nx-border); border-radius: var(--nx-radius-input, 11px);
    overflow: hidden;
}
body.nx-theme .nx-state-list li {
    padding: 10px 16px; font-size: var(--nx-font-size-md); color: var(--nx-text);
    border-bottom: 1px solid var(--nx-border);
}
body.nx-theme .nx-state-list li:last-child { border-bottom: none; }
body.nx-theme .nx-state-meta {
    display: inline-flex; flex-direction: column; gap: 4px; text-align: left;
    margin: 8px auto 4px; font-size: var(--nx-font-size-md); color: var(--nx-text);
}
body.nx-theme .nx-state-meta strong { color: var(--nx-text); }
body.nx-theme .nx-state-actions {
    display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 24px;
}
body.nx-theme .nx-state-actions .btn {
    display: inline-flex; align-items: center; gap: 8px;
}
body.nx-theme .nx-state-actions .material-symbols-rounded { font-size: 19px; }

/* --- Safety net: alert body/title + address radio active --- */
.nx-alert-body { flex: 1 1 auto; min-width: 0; }
.nx-alert-body ul { margin: 6px 0 0; padding-left: 18px; }
.nx-alert-title { font-size: var(--nx-font-size-lg); font-weight: 700; margin: 0 0 4px; color: inherit; }
.nx-address-radio-label.active { border-color: var(--nx-primary) !important; box-shadow: 0 0 0 1px var(--nx-primary); }

/* ==================================================================
 * WHMCS-generated client-area output (module {$output}, product/service
 * module HTML, viewinvoice) — theme-matching overrides for stock classes
 * the redesign did not restyle. High specificity, --nx-* tokens, dark-safe.
 * ================================================================== */
body.nx-theme .well {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 12px);
    color: var(--nx-text);
    box-shadow: none;
    padding: var(--nx-card-padding, 20px);
}
body.nx-theme .jumbotron {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card, 12px);
    color: var(--nx-text);
}
body.nx-theme .progress {
    background: var(--nx-pill-open-bg, rgba(var(--nx-primary-rgb), 0.10));
    border-radius: var(--nx-radius-badge);
    box-shadow: none;
    height: 16px;
}
body.nx-theme .progress-bar {
    background-color: var(--nx-primary);
    color: #fff;
}
body.nx-theme .progress-bar.progress-bar-success { background-color: var(--nx-success, #12b76a); }
body.nx-theme .progress-bar.progress-bar-warning { background-color: #f79009; }
body.nx-theme .progress-bar.progress-bar-danger  { background-color: #f04438; }
body.nx-theme .tab-content {
    color: var(--nx-text);
}
body.nx-theme .nav-pills .nav-link {
    color: var(--nx-muted);
    border-radius: var(--nx-radius-button, 8px);
}
body.nx-theme .nav-pills .nav-link.active {
    background: var(--nx-primary);
    color: var(--nx-on-primary);
}
/* Raw module output containers rendered by WHMCS product/service modules */
body.nx-theme #moduleoutput,
body.nx-theme .product-details-module,
body.nx-theme .module-output {
    color: var(--nx-text);
}
body.nx-theme #moduleoutput .table,
body.nx-theme .product-details-module .table,
body.nx-theme .module-output .table {
    color: var(--nx-text);
    background: transparent;
}
body.nx-theme #moduleoutput .table th,
body.nx-theme .product-details-module .table th,
body.nx-theme .module-output .table th {
    color: var(--nx-muted);
    border-color: var(--nx-border);
}
body.nx-theme #moduleoutput .table td,
body.nx-theme .product-details-module .table td,
body.nx-theme .module-output .table td {
    border-color: var(--nx-border);
}
body.nx-theme .panel-group .panel,
body.nx-theme .panel-default {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
}
/* Homepage panel raw body HTML emitted by WHMCS ({$output} / getBodyHtml) */
body.nx-theme .nx-hp-body-html .table {
    color: var(--nx-text);
    background: transparent;
    margin-bottom: 0;
}
body.nx-theme .nx-hp-body-html .table th,
body.nx-theme .nx-hp-body-html .table td {
    border-color: var(--nx-border);
}
body.nx-theme .nx-hp-body-html .btn-default {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    color: var(--nx-text);
}
/* Dark-mode fine-tuning for the raw module output */
html.nx-dark body .well,
html.nx-dark body .jumbotron,
html.nx-dark body .panel-default,
html.nx-dark body .panel-group .panel {
    background: var(--nx-card-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
}

/* ---------- Card-type pills (account-paymentmethods-manage.tpl) ---------- */
/* Moved out of a per-page <style> block that hardcoded an indigo active tint. */
body.nx-theme .nx-cc-type-pill {
    display: inline-flex;
    align-items: center;
    gap: var(--nx-space-2);
    padding: 10px var(--nx-space-4);
    border-radius: var(--nx-radius-md);
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    color: var(--nx-text);
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
    margin: 0;
}
body.nx-theme .nx-cc-type-pill:hover { border-color: var(--nx-primary); }
body.nx-theme .nx-cc-type-pill.active {
    border: 2px solid var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.05);
    color: var(--nx-primary);
    padding: 9px 15px;
}

/* ---------- Country dropdown (clientareadetails.tpl) ---------- */
/* WHMCS renders its own <select>; the custom skin is suppressed here. */
body.nx-theme .nx-custom-country-dropdown-wrap select { display: block; }
body.nx-theme .nx-custom-country-dropdown-wrap .nx-custom-select-wrapper { display: none; }

/* ---------- Domain detail tabs (clientareadomaindetails.tpl) ---------- */
body.nx-theme .nav-tabs .nav-link { background: transparent; }
body.nx-theme .nav-tabs .nav-link:hover {
    background: rgba(var(--nx-primary-rgb), 0.05);
    color: var(--nx-primary);
}
body.nx-theme .nav-tabs .nav-link.active {
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
    border: none;
}
body.nx-theme .py-2-5 { padding-top: 10px; padding-bottom: 10px; }

/* ---------- View ticket (viewticket.tpl) ---------- */
/* The old block also hid .sidebar / widened .main-content. Neither element
   exists in this template any more (they were twenty-one's layout), so those
   rules were dropped rather than carried over. */
body.nx-theme .ticket-details-label {
    font-size: 13px;
    font-weight: 700;
    color: var(--nx-muted);
}
body.nx-theme .ticket-details-value {
    font-size: var(--nx-font-size-md);
    font-weight: 800;
    color: var(--nx-text);
    text-align: right;
}

/* ---------- Destructive buttons ---------- */
/* Moved out of per-page <style> blocks in account-paymentmethods.tpl and
   viewticket.tpl, which hardcoded light and dark red literals. Now both modes
   derive from --nx-danger, so the admin danger colour drives them. */
body.nx-theme .btn-delete:hover,
body.nx-theme .nx-btn-close-ticket:hover {
    background: rgba(var(--nx-danger-rgb), 0.06);
    border-color: rgba(var(--nx-danger-rgb), 0.45);
    color: var(--nx-danger);
}
html.nx-dark body .btn-delete,
html.nx-dark body .nx-btn-close-ticket {
    border-color: rgba(var(--nx-danger-rgb), 0.40);
    background: rgba(var(--nx-danger-rgb), 0.10);
    color: var(--nx-danger);
}
html.nx-dark body .btn-delete:hover,
html.nx-dark body .nx-btn-close-ticket:hover {
    background: rgba(var(--nx-danger-rgb), 0.18);
}

/* ==================================================================
   SHARED TEMPLATE UTILITIES (nx-u-*)
   Replaces the static inline style="" attributes that were spread
   across the client-area templates. Values that change at runtime
   (status colours from Smarty, JS-toggled display) stay inline.
   ================================================================== */

/* Text */
body.nx-theme .nx-u-text { color: var(--nx-text); }
body.nx-theme .nx-u-muted { color: var(--nx-muted); }
body.nx-theme .nx-u-strong { font-weight: 700; color: var(--nx-text); }
body.nx-theme .nx-u-medium { font-weight: 600; color: var(--nx-text); }
body.nx-theme .nx-u-body { color: var(--nx-text); font-size: 14.5px; }
body.nx-theme .nx-u-body-mb-16 { color: var(--nx-text); font-size: 14.5px; margin-bottom: var(--nx-space-4); }
body.nx-theme .nx-u-body-mb-18 { color: var(--nx-text); font-size: 14.5px; margin-bottom: 18px; }
body.nx-theme .nx-u-body-mb-20 { color: var(--nx-text); font-size: 14.5px; margin-bottom: var(--nx-space-5); }
body.nx-theme .nx-u-muted-sm { color: var(--nx-muted); font-size: var(--nx-font-size-md); }
body.nx-theme .nx-u-muted-grow { color: var(--nx-muted); font-size: var(--nx-font-size-md); flex-grow: 1; }
body.nx-theme .nx-u-muted-mt-4 { color: var(--nx-muted); font-size: var(--nx-font-size-md); font-weight: 600; margin-top: var(--nx-space-1); }
body.nx-theme .nx-u-muted-mb-14 { color: var(--nx-muted); font-size: 13px; font-weight: 600; margin-bottom: 14px; }
body.nx-theme .nx-u-muted-mt-12 { color: var(--nx-muted); margin: var(--nx-space-3) 0 0; }
body.nx-theme .nx-u-muted-margin-top { color: var(--nx-muted); margin-top: var(--nx-space-3); }
body.nx-theme .nx-u-muted-link {
    color: var(--nx-muted);
    text-decoration: none;
    transition: color .15s ease;
}
body.nx-theme .nx-u-muted-link:hover { color: var(--nx-primary); }

/* Headings */
body.nx-theme .nx-u-section-title {
    color: var(--nx-text);
    font-weight: 800;
    letter-spacing: -0.5px;
    margin: var(--nx-space-7) 0 var(--nx-space-6);
}
body.nx-theme .nx-u-section-title-tight {
    color: var(--nx-text);
    font-weight: 800;
    letter-spacing: -0.5px;
    margin: var(--nx-space-2) 0 var(--nx-space-6);
}
body.nx-theme .nx-u-h-19 { color: var(--nx-text); font-weight: 800; font-size: 19px; }
body.nx-theme .nx-u-h-18 { color: var(--nx-text); font-weight: 800; font-size: var(--nx-font-size-h3); margin-bottom: var(--nx-space-3); }
body.nx-theme .nx-u-h-18-flush { margin: 0; font-size: var(--nx-font-size-h3); font-weight: 800; color: var(--nx-text); }
body.nx-theme .nx-u-h-16 { margin: 0 0 var(--nx-space-1); font-size: var(--nx-font-size-xl); font-weight: 800; color: var(--nx-text); }

/* Labels + small print */
body.nx-theme .nx-u-label-muted { font-weight: 600; color: var(--nx-muted); font-size: var(--nx-font-size-md); }
body.nx-theme .nx-u-label-strong { font-weight: 700; color: var(--nx-text); font-size: var(--nx-font-size-md); }
body.nx-theme .nx-u-label-lg { font-weight: 800; color: var(--nx-text); font-size: var(--nx-font-size-lg); }
body.nx-theme .nx-u-block-strong { display: block; font-weight: 800; color: var(--nx-text); font-size: var(--nx-font-size); }
body.nx-theme .nx-u-eyebrow {
    font-size: var(--nx-font-size-sm);
    font-weight: 700;
    color: var(--nx-muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: var(--nx-space-2);
    display: block;
}
body.nx-theme .nx-u-hint { font-size: var(--nx-font-size-sm); color: var(--nx-muted); font-weight: 600; margin-top: 6px; }
body.nx-theme .nx-u-sub { font-size: 12.5px; color: var(--nx-muted); font-weight: 600; margin-top: 2px; }
body.nx-theme .nx-u-sub-block { display: block; font-size: 12.5px; color: var(--nx-muted); font-weight: 600; margin-top: 2px; }

/* Surfaces */
body.nx-theme .nx-u-card {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-card);
    box-shadow: var(--nx-shadow-sm);
}
body.nx-theme .nx-u-tile-link {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    text-decoration: none;
    transition: border-color .15s ease, box-shadow .15s ease;
    gap: var(--nx-space-4);
    min-height: 84px;
    height: 100%;
}
body.nx-theme .nx-u-tile-link:hover { border-color: var(--nx-primary); }

/* --- Layout / text utilities -------------------------------------------
   Added to replace style="" attributes in oauth/, payment/ and store/.
   Everything resolves through the theme tokens so it stays light/dark safe. */
body.nx-theme .nx-u-center { text-align: center; }
body.nx-theme .nx-u-block { display: block; }
/* A form that only wraps a button, so it must not break the row it sits in. */
body.nx-theme .nx-u-inline-form { display: inline; }

/* Inline row for an icon beside its label. */
body.nx-theme .nx-u-inline-row {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
body.nx-theme .nx-u-inline-row-center {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

/* Icon sizes, so a Material Symbol never needs an inline font-size. */
body.nx-theme .nx-u-ico-18 { font-size: 18px; }
body.nx-theme .nx-u-ico-22 { font-size: 22px; }

/* Spacing steps used by the payment and oauth partials. */
body.nx-theme .nx-u-mb-8 { margin-bottom: var(--nx-space-2); }
body.nx-theme .nx-u-mb-16 { margin-bottom: var(--nx-space-4); }
body.nx-theme .nx-u-my-14 { margin: 14px 0; }

/* Stacked choice label — one option per line in a list of radios. */
body.nx-theme .nx-u-choice-row {
    display: block;
    margin-bottom: var(--nx-space-2);
}
body.nx-theme .nx-u-choice-row:last-child { margin-bottom: 0; }

/* Thin progress bar for usage meters. */
body.nx-theme .nx-u-progress-thin {
    height: 10px;
    margin-top: 10px;
}

/* --- Status pills -------------------------------------------------------
   Every list page (invoices, domains, services, tickets, domain details) had
   its own Smarty block assigning a background and colour into a style=""
   attribute. The tone is the only thing that varied, so it becomes a modifier
   class here: `<span class="nx-u-pill is-success">`. The tint is mixed from
   the same token as the text, so the pair always matches and both follow the
   admin palette in light and dark. */
body.nx-theme .nx-u-pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    padding: 4px 10px;
    border-radius: var(--nx-radius-badge);
    font-size: var(--nx-font-size-sm);
    font-weight: 700;
    white-space: nowrap;
    color: var(--nx-muted);
    background: color-mix(in srgb, var(--nx-muted) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-pill.is-success {
    color: var(--nx-success);
    background: color-mix(in srgb, var(--nx-success) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-pill.is-danger {
    color: var(--nx-danger);
    background: color-mix(in srgb, var(--nx-danger) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-pill.is-warning {
    color: var(--nx-warning);
    background: color-mix(in srgb, var(--nx-warning) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-pill.is-primary {
    color: var(--nx-primary);
    background: color-mix(in srgb, var(--nx-primary) 12%, var(--nx-card-bg));
}
/* Standalone status dot. Takes the same is-* modifiers as the pill so a row's
   dot and its pill can be driven by one variable. */
body.nx-theme .nx-u-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    flex-shrink: 0;
    background: var(--nx-muted);
}
body.nx-theme .nx-u-dot.is-success { background: var(--nx-success); }
body.nx-theme .nx-u-dot.is-danger  { background: var(--nx-danger); }
body.nx-theme .nx-u-dot.is-warning { background: var(--nx-warning); }
body.nx-theme .nx-u-dot.is-primary { background: var(--nx-primary); }

/* Inside a pill the dot inherits the pill's own colour. */
body.nx-theme .nx-u-pill .nx-u-dot { background: currentColor; }

/* Square tinted tile for a leading icon, same tone scale as the pills. */
body.nx-theme .nx-u-tint-tile {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    border-radius: var(--nx-radius-md);
    color: var(--nx-muted);
    background: color-mix(in srgb, var(--nx-muted) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-tint-tile.is-success {
    color: var(--nx-success);
    background: color-mix(in srgb, var(--nx-success) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-tint-tile.is-danger {
    color: var(--nx-danger);
    background: color-mix(in srgb, var(--nx-danger) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-tint-tile.is-warning {
    color: var(--nx-warning);
    background: color-mix(in srgb, var(--nx-warning) 12%, var(--nx-card-bg));
}
body.nx-theme .nx-u-tint-tile.is-primary {
    color: var(--nx-primary);
    background: color-mix(in srgb, var(--nx-primary) 12%, var(--nx-card-bg));
}

/* --- Sitejet homepage panel ---
   The preview carried a hardcoded #ddd border inline, which stayed light in
   dark mode. The starting opacity is kept here too; the template's onload
   handler raises it once the image has loaded. */
body.nx-theme .nx-sj-preview {
    min-height: 130px;
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    opacity: 0;
    transition: opacity .2s ease-in-out;
}
body.nx-theme .nx-sj-actions {
    gap: 6px;
    min-width: 250px;
}
body.nx-theme .nx-sj-actions #sitejetSsoButton { min-width: 140px; }
body.nx-theme .nx-u-list-link {
    background: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    padding: 14px var(--nx-space-4);
    gap: var(--nx-space-3);
    text-decoration: none;
    align-items: flex-start;
    transition: border-color .15s ease;
}
body.nx-theme .nx-u-list-link:hover { border-color: var(--nx-primary); }
body.nx-theme .nx-u-chip-link {
    padding: 14px 18px;
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-button);
    background: var(--nx-card-bg);
    color: var(--nx-text);
    text-decoration: none;
    font-weight: 600;
    transition: border-color .15s ease, background .15s ease;
}
body.nx-theme .nx-u-chip-link:hover { border-color: var(--nx-primary); }
body.nx-theme .nx-u-option-row {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: var(--nx-space-3) var(--nx-space-4);
    border-radius: var(--nx-radius-md);
    border: 1px solid var(--nx-border);
    background: var(--nx-card-bg);
    color: var(--nx-text);
    font-weight: 700;
    font-size: var(--nx-font-size-md);
    cursor: pointer;
    transition: border-color .15s ease, background .15s ease;
    margin: 0;
}
body.nx-theme .nx-u-option-row.active {
    border-color: var(--nx-primary);
    background: rgba(var(--nx-primary-rgb), 0.04);
}

/* Was a hardcoded indigo rgba(79,70,229,.08); now follows the admin primary. */
body.nx-theme .nx-u-icon-tile {
    width: 44px;
    height: 44px;
    border-radius: var(--nx-radius-md);
    background: rgba(var(--nx-primary-rgb), 0.08);
    color: var(--nx-primary);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
    flex-shrink: 0;
}
body.nx-theme .nx-u-ico-primary { font-size: 20px; color: var(--nx-primary); flex-shrink: 0; }
body.nx-theme .nx-u-meter {
    width: 260px;
    max-width: 80%;
    height: 8px;
    border-radius: var(--nx-radius-badge);
    background: var(--nx-border);
    overflow: hidden;
}
body.nx-theme .nx-u-bg-primary { background: var(--nx-primary); }
body.nx-theme .nx-u-3ds-frame {
    width: 100%;
    border: 0;
    border-radius: var(--nx-radius-input);
    background: var(--nx-card-bg);
}

/* Form controls */
body.nx-theme .nx-u-check { width: 18px; height: 18px; }
body.nx-theme .nx-u-check-static { width: 18px; height: 18px; margin: 0; position: static; }
body.nx-theme .nx-u-check-pointer { cursor: pointer; width: 18px; height: 18px; margin: 0; }
body.nx-theme .nx-u-check-label {
    gap: 10px;
    font-weight: 600;
    color: var(--nx-text);
    cursor: pointer;
    margin: 0;
}

/* Layout */
body.nx-theme .nx-u-narrow { max-width: 540px; margin: 0 auto; }
body.nx-theme .nx-u-plain-list {
    background: transparent;
    padding: 0;
    margin: 0;
    display: flex;
    flex-wrap: wrap;
    list-style: none;
}
body.nx-theme .nx-u-stack-10 { display: flex; flex-direction: column; gap: 10px; }
body.nx-theme .nx-u-stack-12 { display: flex; flex-direction: column; gap: var(--nx-space-3); margin-bottom: var(--nx-space-2); }
body.nx-theme .nx-u-crumb-sep {
    margin: 0 var(--nx-space-2);
    color: var(--nx-muted);
    font-size: var(--nx-font-size-xs);
    display: inline-block;
    transform: translateY(-0.5px);
}

/* Breadcrumb items. These carried their layout, colour and font in a style=""
   attribute (plus onmouseover/onmouseout for the hover), which meant the
   colours could not follow the theme and the hover duplicated what
   .nx-u-muted-link:hover already does. */
body.nx-theme .nx-crumb {
    display: flex;
    align-items: center;
    color: var(--nx-muted);
    font-weight: 500;
    font-size: var(--nx-font-size-sm);
}
body.nx-theme .nx-crumb.is-current { color: var(--nx-primary); }

/* Spacing helpers */
body.nx-theme .nx-u-gap-8-wrap { gap: var(--nx-space-2); flex-wrap: wrap; }
body.nx-theme .nx-u-gap-10 { gap: 10px; }
body.nx-theme .nx-u-gap-10-pad { gap: 10px; padding: var(--nx-space-2) 0; }
body.nx-theme .nx-u-gap-10-mb-20 { gap: 10px; margin-bottom: var(--nx-space-5); }
body.nx-theme .nx-u-gap-12 { gap: var(--nx-space-3); }
body.nx-theme .nx-u-gap-16-0 { gap: var(--nx-space-4) 0; }
body.nx-theme .nx-u-gap-20 { gap: var(--nx-space-5); margin-bottom: var(--nx-space-2); }
body.nx-theme .nx-u-m-0 { margin: 0; }
body.nx-theme .nx-u-mb-0 { margin-bottom: 0; }
body.nx-theme .nx-u-mb-20 { margin-bottom: var(--nx-space-5); }
body.nx-theme .nx-u-mb-24 { margin-bottom: var(--nx-space-6); }
body.nx-theme .nx-u-mt-24 { margin-top: var(--nx-space-6); }
body.nx-theme .nx-u-pad-30 { padding: 30px; }

/* ==================================================================
   VENDOR WIDGET OVERRIDES (all.min.css)
   all.min.css is a minified third-party bundle — intl-tel-input,
   bootstrap-switch, the markdown editor, lightbox, the captcha popup. Its
   colours are baked literals (#fff, #ccc, #333, #0275d8 …), so those widgets
   stayed light on a dark page and ignored the admin palette. That file is
   regenerated on upgrade, so it is never edited; everything is re-pointed at
   the theme tokens here instead, and nexum.css loads after it.
   ================================================================== */

/* ---- Phone number input (intl-tel-input) ---- */
body.nx-theme .intl-tel-input .country-list {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    box-shadow: var(--nx-shadow);
    color: var(--nx-text);
}
body.nx-theme .intl-tel-input .country-list .divider { border-bottom-color: var(--nx-border); }
body.nx-theme .intl-tel-input .country-list .country { color: var(--nx-text); }
body.nx-theme .intl-tel-input .country-list .country .dial-code { color: var(--nx-muted); }
body.nx-theme .intl-tel-input .country-list .country.highlight,
body.nx-theme .intl-tel-input .country-list .country:hover {
    background-color: rgba(var(--nx-primary-rgb), .08);
}
body.nx-theme .intl-tel-input .selected-flag .iti-arrow { border-top-color: var(--nx-muted); }
body.nx-theme .intl-tel-input .selected-flag .iti-arrow.up { border-bottom-color: var(--nx-muted); }
/* Stock is rgba(0,0,0,.05), which reads as a grey block on any surface. A tint
   of the field's own background keeps it attached to the input. */
body.nx-theme .intl-tel-input.separate-dial-code .selected-flag {
    background-color: var(--nx-bg);
    color: var(--nx-text);
    font-weight: 600;
}
body.nx-theme .intl-tel-input.separate-dial-code .selected-dial-code { color: var(--nx-text); }
body.nx-theme .intl-tel-input.allow-dropdown .flag-container:hover .selected-flag {
    background-color: rgba(var(--nx-primary-rgb), .08);
}

/* The widget reserves room for the flag with a left padding on the input
   (84px at .iti-sdc-3). `body.nx-theme .form-control` sets `padding: 0 14px`,
   which is the same specificity but later in the file, so it won a shorthand
   fight and the placeholder ran underneath the flag. Restoring the reserved
   space per width class fixes it without touching the vendor bundle. */
/* The registration form marks its inputs `.field`, not `.form-control`, so the
   phone field needs the same allowance under both names. */
body.nx-theme .intl-tel-input .form-control,
body.nx-theme .intl-tel-input input.field { padding-left: 52px; }
body.nx-theme .intl-tel-input.iti-sdc-2 .form-control,
body.nx-theme .intl-tel-input.iti-sdc-2 input.field { padding-left: 66px; }
body.nx-theme .intl-tel-input.iti-sdc-3 .form-control,
body.nx-theme .intl-tel-input.iti-sdc-3 input.field { padding-left: 74px; }
body.nx-theme .intl-tel-input.allow-dropdown.iti-sdc-2 .form-control,
body.nx-theme .intl-tel-input.allow-dropdown.iti-sdc-2 input.field { padding-left: 76px; }
body.nx-theme .intl-tel-input.allow-dropdown.iti-sdc-3 .form-control,
body.nx-theme .intl-tel-input.allow-dropdown.iti-sdc-3 input.field { padding-left: 84px; }

/* The flag sits inside the field's rounded border, so it takes the matching
   corner radius and a divider instead of floating as a grey block. */
body.nx-theme .intl-tel-input.separate-dial-code .selected-flag {
    border-top-left-radius: var(--nx-radius-input, 11px);
    border-bottom-left-radius: var(--nx-radius-input, 11px);
    border-right: 1px solid var(--nx-border);
}
body.nx-theme .intl-tel-input { width: 100%; display: block; }

/* Focus ring belongs to the whole control, not just the text half — otherwise
   the flag block sat outside the highlighted area. */
body.nx-theme .intl-tel-input:focus-within .selected-flag {
    border-right-color: var(--nx-primary);
}

/* ---- Toggle switch (bootstrap-switch) ----
   The "on" side is the brand colour; the "off" side is a plain surface. The
   stock primary was a fixed #0275d8 that had nothing to do with the palette. */
body.nx-theme .bootstrap-switch { border-color: var(--nx-border); }
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
    background-color: var(--nx-primary);
    border-color: var(--nx-primary);
    color: var(--nx-on-primary, #fff);
}
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
    background-color: var(--nx-success);
    border-color: var(--nx-success);
    color: var(--nx-on-primary, #fff);
}
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
    background-color: var(--nx-danger);
    border-color: var(--nx-danger);
    color: var(--nx-on-primary, #fff);
}
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-secondary,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-secondary,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
body.nx-theme .bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
    background-color: var(--nx-bg);
    border-color: var(--nx-border);
    color: var(--nx-text);
}
body.nx-theme .bootstrap-switch .bootstrap-switch-label {
    background-color: var(--nx-card-bg);
    color: var(--nx-text);
}

/* ---- Lightbox ---- */
body.nx-theme .lb-outerContainer {
    background-color: var(--nx-card-bg);
    border-radius: var(--nx-radius-md);
}
body.nx-theme .lb-dataContainer { background: var(--nx-card-bg); }
body.nx-theme .lb-data .lb-caption { color: var(--nx-text); }
body.nx-theme .lb-data .lb-number { color: var(--nx-muted); }

/* ---- Captcha popup ---- */
body.nx-theme .captcha-overlay-popup {
    background-color: var(--nx-card-bg);
    border: 1px solid var(--nx-border);
    border-radius: var(--nx-radius-md);
    color: var(--nx-text);
    box-shadow: var(--nx-shadow);
}
