/* *****************************************************

    ** GENERATED FILE -- DO NOT EDIT **

    Built by whmcs-theme/build.mjs. Anything you type
    here is lost on the next build.

    Deployed to templates/oistheme/css/custom.css

    To change a colour -> astro-site/src/styles/tokens.css
                          (shared with the marketing site)
    To change a style  -> whmcs-theme/src/chrome.css and cart.css

***************************************************** */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

:root {
  --ink: #0d1a1a;
  --green: #2cc76a;
  --green-dark: #1a8f4f;
  --bg-soft: #f7f9f8;
  --line: #e2e5e4;
  --muted: #697070;
}

/* ===================================================================
   SHARED CHROME
   The header, navbar, footer, typography and buttons that wrap both
   the cart and the client area.

   Specificity is matched to Six deliberately. Six sets, for example,
   `section#header{background-color:#fff}` (1,0,1) and
   `.navbar-main .navbar-nav>li>a:hover` (0,4,1) -- so we mirror those
   shapes and win on source order, custom.css being loaded last. That
   is why the selectors look heavier than they need to: it is what
   keeps this file free of !important.
   =================================================================== */

/* ---- Typography ---------------------------------------------------
   The page <link>s Open Sans and Raleway and we cannot remove that tag
   from CSS, so we override font-family everywhere Six sets it. */
body,
.navbar-main,
h1, h2, h3, h4, h5, h6,
.btn,
input, select, textarea,
.panel-title {
  font-family: Inter, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
}

body {
  color: var(--ink);
  font-size: 15px;
  line-height: 1.6;
}

h1, h2, h3 { letter-spacing: -0.3px; font-weight: 700; }

a { color: var(--green-dark); }
a:hover, a:focus { color: var(--green-dark); }

/* ---- Header band --------------------------------------------------
   Six renders a white #header (logo + account links) stacked above a
   blue #main-menu. We paint both with --ink so they read as the single
   dark bar the marketing site uses. */
section#header {
  background-color: var(--ink);
  border-radius: 0;
  padding: 14px 0;
}

section#header .logo img { max-height: 44px; }

section#header .top-nav > li > a {
  color: #c8d0d0;
  font-size: 14px;
  font-weight: 500;
}
section#header .top-nav > li > a:hover,
section#header .top-nav > li > a:focus { color: #fff; }

/* "View Cart" -- the marketing site's green nav CTA. */
section#header .top-nav > li.primary-action > a.btn {
  background-color: var(--green);
  border-color: var(--green);
  color: #04150f;
  font-size: 13px;
  font-weight: 600;
  padding: 8px 18px;
}
section#header .top-nav > li.primary-action > a.btn:hover,
section#header .top-nav > li.primary-action > a.btn:focus {
  background-color: var(--green-dark);
  border-color: var(--green-dark);
  color: #fff;
}

/* ---- Primary navigation ------------------------------------------- */
.navbar-main {
  background-color: var(--ink);
  border: 0;
  font-size: 14px;
}

.navbar-main .navbar-nav > li > a {
  color: #c8d0d0;
  font-weight: 500;
  padding-top: 14px;
  padding-bottom: 14px;
}

/* Matches Six's own 4-class hover/active/open list so source order decides. */
.navbar-main .navbar-nav > .active > a,
.navbar-main .navbar-nav > .active > a:focus,
.navbar-main .navbar-nav > .active > a:hover,
.navbar-main .navbar-nav > .open > a,
.navbar-main .navbar-nav > .open > a:focus,
.navbar-main .navbar-nav > .open > a:hover,
.navbar-main .navbar-nav > li > a:focus,
.navbar-main .navbar-nav > li > a:hover {
  color: #fff;
  background-color: transparent;
}

.navbar-main li.account { background-color: transparent; }

/* Dropdowns: the marketing site's white floating card. */
.navbar-main .dropdown-menu {
  padding: 8px 0;
  border: 0;
  border-radius: 8px;
  min-width: 230px;
  background-color: #fff;
  box-shadow: 0 16px 32px -8px rgb(0 0 0 / 35%);
}
.navbar-main .dropdown-menu > li > a {
  padding: 9px 18px;
  color: var(--ink);
  font-size: 14px;
  font-weight: 500;
}
.dropdown-menu > li > a:focus,
.navbar-main .dropdown-menu > li > a:hover {
  color: var(--green-dark);
  background-color: var(--bg-soft);
}
/* NOTE: the white-card treatment above is DESKTOP ONLY. Below the navbar
   breakpoint Bootstrap 3 renders the dropdown inline inside the dark bar
   rather than as a floating card, and forces it transparent -- so ink text
   lands on the ink navbar and the whole menu becomes an invisible void.
   Six avoids this by lightening the links (color:#ddd) when open. We do the
   same rather than fighting it. */
@media (max-width: 767px) {
  .navbar-main .dropdown-menu {
    background-color: transparent;
    box-shadow: none;
    padding: 0 0 6px;
  }
  .navbar-main .dropdown-menu > li > a,
  .navbar-main .navbar-nav .open .dropdown-menu > li > a {
    color: #c8d0d0;
    padding-left: 34px;
  }
  .dropdown-menu > li > a:focus,
  .navbar-main .dropdown-menu > li > a:hover,
  .navbar-main .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-main .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  /* The light divider rule would be near-invisible on ink. */
  .navbar-main .dropdown-menu > li.nav-divider > a { background-color: #22302f; }
}

/* The "-----" separator entries WHMCS emits between store groups. */
.navbar-main .dropdown-menu > li.nav-divider > a {
  padding: 0;
  overflow: hidden;
  height: 1px;
  text-indent: -999em;
  background-color: var(--line);
  pointer-events: none;
}

.navbar-main .navbar-toggle .icon-bar { background-color: #c8d0d0; }

/* ---- Buttons ------------------------------------------------------ */
.btn { border-radius: 8px; font-weight: 600; }

.btn-primary,
.btn-success {
  background-color: var(--ink);
  border-color: var(--ink);
  color: #fff;
}
.btn-primary:hover, .btn-primary:focus, .btn-primary:active,
.btn-success:hover, .btn-success:focus, .btn-success:active {
  background-color: #1b2f2c;
  border-color: #1b2f2c;
  color: #fff;
}

.btn-default {
  background-color: #fff;
  border-color: var(--line);
  color: var(--ink);
}
.btn-default:hover, .btn-default:focus {
  background-color: var(--bg-soft);
  border-color: var(--line);
  color: var(--ink);
}

/* ---- Footer -------------------------------------------------------- */
section#footer {
  background-color: var(--ink);
  border-top: 0;
  color: #9aa4a4;
  font-size: 13px;
}
section#footer a { color: #9aa4a4; }
section#footer a:hover { color: #fff; }
section#footer .back-to-top i {
  background-color: #1b2b2a;
  color: #c8d0d0;
  border-radius: 8px;
  opacity: 1;
}

/* ---- Remaining Bootstrap button variants ---------------------------
   Missed on the first pass because they only appear deeper in the
   checkout: btn-info on "Already Registered?", btn-warning on "Create a
   New Account". Both are secondary actions, so both get the ghost
   treatment rather than a second competing solid colour. */
.btn-info,
.btn-warning {
  background-color: #fff;
  background-image: none;
  border-color: var(--line);
  color: var(--ink);
}
.btn-info:hover, .btn-info:focus, .btn-info:active,
.btn-warning:hover, .btn-warning:focus, .btn-warning:active {
  background-color: var(--bg-soft);
  background-image: none;
  border-color: var(--line);
  color: var(--ink);
}

.btn-link { color: var(--green-dark); }
.btn-link:hover, .btn-link:focus { color: var(--green-dark); }

/* ===================================================================
   CLIENT AREA
   Only reachable logged in, so none of this surfaced until a real
   account was walked through.
   =================================================================== */

/* ---- Portal home hero ---------------------------------------------
   Six ships a #043d5f navy band with a green search and grey transfer
   button. Repainted as the marketing site's ink hero. */
section#home-banner {
  background-color: var(--ink);
  padding: 64px 0 72px;
}
section#home-banner .btn { border-radius: 8px; font-weight: 600; }
section#home-banner .btn.search {
  background-color: var(--green);
  color: #04150f;
}
section#home-banner .btn.search:hover { background-color: var(--green-dark); color: #fff; }
section#home-banner .btn.transfer {
  background-color: #23403c;
  color: #fff;
}
section#home-banner .btn.transfer:hover { background-color: #2d534d; }

/* The "How can we help today?" action strip -- Six's #25a2c7 cyan. */
.home-shortcuts {
  background: #16302d;
  border-top: 1px solid #22403c;
}
.home-shortcuts li a:hover { background-color: #1d3b37; }

/* ---- Dashboard stat tiles ------------------------------------------
   Four tiles whose 2px underline uses Six's blue/green/red/gold
   status palette. The marketing site has one accent, so they all
   become green and the tiles sit on the soft background. */
.tiles .tile { background-color: var(--bg-soft); border-right-color: var(--line); }
.tiles .tile:hover { background-color: #eef2f0; }
.tiles .tile:nth-child(1),
.tiles .tile:nth-child(2) { border-bottom-color: var(--line); }
.tiles .tile .stat { color: var(--ink); font-weight: 700; }
.tiles .tile .title { color: var(--muted); }
.tiles .tile .icon { color: #cfd6d4; }
.tiles .tile .highlight { background-color: var(--green); }

/* ---- Dashboard panels ----------------------------------------------
   Bootstrap's contextual panels give each card a different coloured
   border -- orange, green, blue, grey side by side. Flattened to the
   one card treatment used everywhere else.
   `.panel-COLOUR` is (0,1,0) and `.panel-COLOUR>.panel-heading` (0,2,0),
   so these match and win on source order. */
.panel-primary, .panel-success, .panel-info, .panel-warning, .panel-danger {
  border-color: var(--line);
}
.panel-primary > .panel-heading,
.panel-success > .panel-heading,
.panel-info > .panel-heading,
.panel-warning > .panel-heading,
.panel-danger > .panel-heading {
  color: var(--ink);
  background-color: #fff;
  border-color: var(--line);
}
.client-home-panels .panel { border-radius: 14px; overflow: hidden; }
.client-home-panels .panel > .panel-heading { font-weight: 700; }
.client-home-panels .panel > .list-group {
  border-top-color: var(--line);
  border-bottom-color: var(--line);
}

/* Generic panels elsewhere in the client area (services, invoices,
   tickets) get the same card treatment as the sidebar. */
.panel { border-color: var(--line); box-shadow: none; }
.panel-default > .panel-heading {
  background-color: #fff;
  border-bottom-color: var(--line);
  color: var(--ink);
}

/* ---- Alerts and wells ----------------------------------------------
   alert-info does double duty in WHMCS: real notices AND plain UI
   chrome like the "Choose Contact" selector strip, which has no
   informational meaning and should not read as a blue notice. It goes
   neutral. success/warning/danger carry actual meaning, so they keep
   their semantics -- success just moves to the brand green. */
.alert { border-radius: 10px; }

.alert-info {
  background-color: var(--bg-soft);
  border-color: var(--line);
  color: var(--ink);
}
.alert-info a { color: var(--green-dark); }

.alert-success {
  background-color: #eafaf0;
  border-color: #bfe9d0;
  color: #14683a;
}

.well {
  background-color: var(--bg-soft);
  border-color: var(--line);
  border-radius: 12px;
  box-shadow: none;
}

/* Destructive actions stay red -- that is information, not decoration. */
.btn-danger { border-radius: 8px; }

/* ---- Data tables (invoices, services, tickets, domains) -------------
   Six wraps every list in a slate #4f5360 bar and underlines the column
   headers in 4px lime, alternating #a2d27a / #7bc144 per column. */
.dataTables_wrapper .dataTables_info {
  background-color: var(--ink);
  border-bottom: 0;
  padding: 12px 16px;
  font-size: 13px;
  font-weight: 600;
}
.dataTables_wrapper table.table-list thead th,
.dataTables_wrapper table.table-list thead th:nth-child(even) {
  border-bottom: 2px solid var(--ink);
  font-weight: 700;
  color: var(--ink);
}
.dataTables_wrapper table.table-list thead th.sorting_asc,
.dataTables_wrapper table.table-list thead th.sorting_desc {
  background-color: var(--bg-soft);
}
.dataTables_wrapper .dataTables_length {
  background-color: var(--bg-soft);
  color: var(--muted);
}
.dataTables_wrapper .dataTables_filter label .form-control {
  border: 1px solid var(--line);
  border-radius: 8px;
}
.table-striped > tbody > tr:nth-of-type(odd) { background-color: var(--bg-soft); }

/* Panel headings default to #f5f5f5 grey; match the white card used
   by the sidebar and dashboard. */
.panel > .panel-heading {
  background-color: #fff;
  border-bottom: 1px solid var(--line);
  color: var(--ink);
}

/* ---- Status colours -------------------------------------------------
   These carry meaning, so they are re-pointed rather than flattened.
   Good states take the brand green; genuine warnings and errors keep
   their amber and red, because that is information a customer needs to
   read at a glance. The neutral states were various blues (#319fc3,
   #248) -- there is no blue in this palette, so they become muted grey
   rather than being recoloured into a meaning they do not have. */
.status-paid,
.status-open,
.status-accepted { color: var(--green-dark); }

.status-refunded,
.status-onhold,
.status-delivered,
.status-cancelled,
.status-closed,
.status-terminated { color: var(--muted); }

/* ---- Support tickets ------------------------------------------------
   Six distinguishes staff replies from client replies with a blue tint
   (#cce4fc border, #f2f9ff strip). The distinction is worth keeping --
   you need to see at a glance who wrote what -- so it moves to a green
   tint rather than being flattened away. */
.ticket-reply {
  border-color: var(--line);
  border-radius: 12px;
  overflow: hidden;
}
.ticket-reply .user { background-color: var(--bg-soft); }
.ticket-reply.staff { border-color: #cfe9da; }
.ticket-reply.staff .user { background-color: #f1faf5; }
.ticket-reply .attachments {
  border-top-color: var(--line);
  background-color: var(--bg-soft);
}
.ticket-reply .rating span.star:hover:before,
.ticket-reply .rating span.star:hover ~ span.star:before,
.ticket-reply .rating-done span.star.active:before { color: var(--green); }

/* ---- Sidebar action-button accents ----------------------------------
   WHMCS colours sidebar buttons via bg-color-* from a 16-colour palette.
   The warm ones carry status meaning and stay; the cool and novelty ones
   (blue, teal, purple, pink...) are decorative and would drag colours
   into the page that exist nowhere else in the brand. */
.bg-color-blue, .bg-color-teal, .bg-color-turquoise,
.bg-color-purple, .bg-color-amethyst, .bg-color-pink,
.bg-color-magenta, .bg-color-lime, .bg-color-emerald {
  background-color: var(--green-dark);
}
.bg-color-silver, .bg-color-asbestos { background-color: var(--muted); }

/* ---- Network issue announcements ------------------------------------
   serverstatus.tpl renders the body in a plain <p>, yet it displays
   monospace with its line breaks intact -- so the stored content itself
   contains a <pre>. That could not be confirmed directly (the page needs
   a login), so this is written to be correct either way: if there is no
   <pre>, it matches nothing and changes nothing.

   white-space is kept as pre-wrap so the author's line breaks survive;
   only the typeface joins the rest of the page. Scoped to list items so
   knowledgebase code blocks keep their monospace, which they want. */
.list-group-item pre {
  font-family: Inter, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  color: var(--ink);
  white-space: pre-wrap;
  word-wrap: break-word;
  background-color: transparent;
  border: 0;
  padding: 0;
  margin: 0;
}

/* ---- Knowledgebase --------------------------------------------------
   The "Was this answer helpful?" bar has its own class rather than being
   an alert, so the alert rules above never reached it. */
.kb-rate-article {
  background-color: var(--bg-soft);
  color: var(--ink);
  border-radius: 12px;
  font-size: 16px;
  font-weight: 600;
}

/* Article body ships at font-weight 200 with line-height 1.2em -- a
   line-height SMALLER than the font size, which is what makes these
   articles read as a cramped grey block. Also: we only load Inter at
   400-700, so weight 200 has no real face to use and the browser either
   substitutes or synthesises one. Normal weight and open leading. */
.kb-article-content {
  font-size: 15px;
  line-height: 1.7;
  font-weight: 400;
  color: var(--ink);
}
.kb-article-title { font-weight: 700; }
.kb-alsoread {
  background-color: var(--bg-soft);
  border-radius: 10px;
}

/* ---- Domain search & pricing ---------------------------------------
   The single most off-brand thing left in the theme: Six wraps the
   domain search in a #ffb201 -> #ffd960 gold gradient with a globe
   image behind it. Replaced with the ink hero the marketing site uses.
   The gradient is set via four vendor-prefixed background declarations
   plus a background-color, so `background` has to be reset wholesale
   rather than overriding background-color alone. */
.domain-checker-container {
  background: var(--ink);
  border-radius: 14px;
}
.domain-checker-bg {
  padding: 40px 0;
  background-image: none;
}

/* Six's white padded wrapper is what makes the field and button read as
   one control; keep it, don't flatten it into the ink. */
.domain-checker-container .input-group-box {
  background-color: #fff;
  border-radius: 10px;
  padding: 8px;
}
.domain-checker-container .input-group-box .form-control {
  border: 0;
  box-shadow: none;
  background: transparent;
  font-size: 16px;
}
.domain-checker-container .input-group-box .form-control:focus { box-shadow: none; }

/* The search button is .btn-primary, which this theme paints --ink --
   directly on top of an --ink hero, so it disappeared entirely. Inside
   this hero it takes the green CTA instead. */
.domain-checker-container .btn-primary.domain-check-availability {
  background-color: var(--green);
  border-color: var(--green);
  color: #04150f;
  border-radius: 8px;
  padding-left: 26px;
  padding-right: 26px;
}
.domain-checker-container .btn-primary.domain-check-availability:hover,
.domain-checker-container .btn-primary.domain-check-availability:focus {
  background-color: var(--green-dark);
  border-color: var(--green-dark);
  color: #fff;
}

/* Extension category filters: one active pill, the rest inert. */
.tld-filters a {
  border-radius: 999px;
  padding: 5px 12px;
  font-weight: 600;
  background-color: var(--bg-soft);
  color: var(--ink);
}
.tld-filters a:hover { background-color: #e6ebe9; color: var(--ink); }
.tld-filters a.active,
.tld-filters a.label-success {
  background-color: var(--ink);
  color: #fff;
}

/* TLD pricing table: a 6px #97b5d2 underline with #369 on alternating
   columns, and two greys striping the header. Flattened to one rule. */
.domain-pricing .tld-pricing-header .col-sm-2,
.domain-pricing .tld-pricing-header .col-sm-4,
.domain-pricing .tld-pricing-header .col-xs-2,
.domain-pricing .tld-pricing-header .col-xs-4,
.domain-pricing .tld-pricing-header div:nth-child(odd) {
  background-color: #fff;
  border-bottom: 2px solid var(--ink);
  border-color: var(--ink);
  border-radius: 0;
  font-weight: 700;
  color: var(--ink);
}
.domain-pricing .tld-row { border-bottom-color: var(--line); }
.domain-pricing .tld-row.highlighted { background: var(--bg-soft); }
.domain-pricing .two-row-center { border-right-color: var(--line); }

/* Promo flags stay loud -- that is their job -- but on brand hues. */
.tld-sale-group { border-radius: 4px; font-weight: 700; }
.tld-sale-group-new { background-color: var(--green); color: #04150f; }

/* ---- Knowledgebase category grid ------------------------------------
   Rebuilt as cards matching the marketing site's .feature-tile: a soft
   green icon badge, bold name, muted description. Markup is fixed --
   a col holding <a><i></i> Name (n)</a>, an optional admin Edit link,
   and <p> -- so the col itself becomes the card.

   Bootstrap's 15px col padding IS the gutter, so a border drawn on the
   col would leave cards touching. Instead the padding is reset and the
   row uses flex `gap` for separation, which also means the row's
   negative margins have to go. */
.kbcategories,
.kbcategories ~ .row {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin: 0 0 20px;
}

/* Bootstrap gives .row clearfix pseudo-elements (content:" ";display:table).
   Inside a FLEX container those become real flex items -- each one eating a
   20px gap. That is four gaps instead of two, which is what pushed the third
   card onto its own line while the arithmetic said it should fit. Measured,
   not guessed: the first card sat 20px inside a row with zero padding. */
.kbcategories::before, .kbcategories::after,
.kbcategories ~ .row::before, .kbcategories ~ .row::after {
  display: none;
}

.kbcategories > [class*="col-"],
.kbcategories ~ .row > [class*="col-"] {
  position: relative;
  flex: 1 1 calc(33.333% - 14px);
  max-width: calc(33.333% - 14px);
  width: auto;
  float: none;
  /* Flex items default to min-width:auto and so refuse to shrink below
     their longest unbreakable word. "Authoring/Development" is one
     21-character token, which forced every card wide enough that only
     two fitted per row. */
  min-width: 0;
  padding: 22px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 14px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.kbcategories > [class*="col-"]:hover,
.kbcategories ~ .row > [class*="col-"]:hover {
  border-color: var(--ink);
  box-shadow: 0 12px 24px -14px rgb(13 26 26 / 30%);
}

/* Category name; the folder icon becomes the tile badge above it. */
.kbcategories > [class*="col-"] > a:first-of-type,
.kbcategories ~ .row > [class*="col-"] > a:first-of-type {
  display: block;
  color: var(--ink);
  font-weight: 700;
  font-size: 16px;
  line-height: 1.35;
  margin-bottom: 8px;
  overflow-wrap: break-word;
}
.kbcategories > [class*="col-"] > a:first-of-type > i,
.kbcategories ~ .row > [class*="col-"] > a:first-of-type > i {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  margin-bottom: 14px;
  border-radius: 10px;
  background: #e4f8ec;
  color: var(--green-dark);
  font-size: 17px;
}
.kbcategories > [class*="col-"]:hover > a:first-of-type,
.kbcategories ~ .row > [class*="col-"]:hover > a:first-of-type { color: var(--green-dark); }

/* Make the whole card clickable without touching the markup. */
.kbcategories > [class*="col-"] > a:first-of-type::after,
.kbcategories ~ .row > [class*="col-"] > a:first-of-type::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 14px;
}

.kbcategories p,
.kbcategories ~ .row p {
  margin: 0;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.6;
}

@media (max-width: 991px) {
  .kbcategories > [class*="col-"],
  .kbcategories ~ .row > [class*="col-"] {
    flex-basis: calc(50% - 10px);
    max-width: calc(50% - 10px);
  }
}
@media (max-width: 600px) {
  .kbcategories > [class*="col-"],
  .kbcategories ~ .row > [class*="col-"] {
    flex-basis: 100%;
    max-width: 100%;
  }
}

/* Sits above the stretched-link overlay so it stays clickable. */
.admin-inline-edit {
  position: relative;
  z-index: 1;
  white-space: nowrap;
  font-size: 12px;
  color: var(--muted);
}
.admin-inline-edit:hover { color: var(--ink); }

/* ---- Open Ticket department chooser ---------------------------------
   Same card treatment as the knowledgebase categories. The department
   list's row carries no class of its own, so it is reached through its
   children: `col-md-6 margin-bottom` appears in exactly one template
   (supportticketsubmit-stepone.tpl), which makes it a safe hook.

   :has() is doing the parent selection. Where it is unsupported the
   cards simply stay in Bootstrap's float layout -- less tidy, never
   broken. */
.row:has(> .col-md-6.margin-bottom) {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  margin: 0;
}
/* Both the clearfix divs the template emits every second item AND
   Bootstrap's own .row pseudo-elements would otherwise become flex
   items, each eating a gap. */
.row:has(> .col-md-6.margin-bottom)::before,
.row:has(> .col-md-6.margin-bottom)::after,
.row:has(> .col-md-6.margin-bottom) > .clearfix {
  display: none;
}

.col-md-6.margin-bottom {
  position: relative;
  flex: 1 1 calc(50% - 10px);
  max-width: calc(50% - 10px);
  min-width: 0;
  width: auto;
  float: none;
  margin: 0;
  padding: 22px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 14px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.col-md-6.margin-bottom:hover {
  border-color: var(--ink);
  box-shadow: 0 12px 24px -14px rgb(13 26 26 / 30%);
}
.col-md-6.margin-bottom > p { margin: 0; }
.col-md-6.margin-bottom > p strong a {
  display: block;
  color: var(--ink);
  font-weight: 700;
  font-size: 16px;
}
.col-md-6.margin-bottom:hover > p strong a { color: var(--green-dark); }
.col-md-6.margin-bottom > p strong a > i {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  margin-bottom: 14px;
  border-radius: 10px;
  background: #e4f8ec;
  color: var(--green-dark);
  font-size: 16px;
}
.col-md-6.margin-bottom > p strong a::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: 14px;
}
.col-md-6.margin-bottom > p + p {
  margin-top: 6px;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.6;
}
@media (max-width: 700px) {
  .col-md-6.margin-bottom { flex-basis: 100%; max-width: 100%; }
}

/* ---- Affiliates -----------------------------------------------------
   The three stat tiles (clicks, signups, conversions) are all neutral
   counters, but Six tags them alert-warning / alert-info / alert-success
   -- so they render cream, grey and green side by side as though two of
   them were warnings. One card treatment for all three. */
.affiliate-stat {
  background-color: var(--bg-soft);
  border: 1px solid var(--line);
  border-radius: 14px;
  color: var(--ink);
}
.affiliate-referral-link span {
  border-color: var(--line);
  border-radius: 10px;
  color: var(--ink);
}

/* ---- Knowledgebase article lists ------------------------------------
   Used by both "Most Popular Articles" and a category's article list.

   The markup is a FLAT sequence inside .kbarticles -- <a>, an optional
   admin Edit link, <p>, repeating -- with no wrapper per article. So a
   row is built from the pair: the link opens it, the paragraph closes it
   and carries the divider. */
.kbarticles {
  padding: 0;
  font-size: 15px;
  border: 1px solid var(--line);
  border-radius: 14px;
  overflow: hidden;
  background: #fff;
}

.kbarticles > a:not(.admin-inline-edit) {
  display: block;
  padding: 16px 20px 0;
  color: var(--ink);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.4;
}
.kbarticles > a:not(.admin-inline-edit):hover { color: var(--green-dark); }

/* Six paints the file glyph #8ce; inline green suits a dense list better
   than the badge treatment used on the category cards. */
.kbarticles a .glyphicon,
.kbarticles a .fa-file-alt { color: var(--green-dark); }

.kbarticles > p {
  margin: 0;
  padding: 6px 20px 16px;
  border-bottom: 1px solid var(--line);
  color: var(--muted);
  font-size: 14px;
  line-height: 1.6;
}
.kbarticles > p:last-child { border-bottom: 0; }

/* The Edit link sits between the title and the excerpt in source order,
   so keep it out of the flow rather than letting it break the row. */
.kbarticles > a.admin-inline-edit {
  display: inline-block;
  margin: 2px 0 0 20px;
}

/* ---- Knowledgebase sidebar icon -------------------------------------
   WHMCS labels the KB Categories panel with `fas fa-info` (\f129), which
   is the bare info mark -- it renders as a lowercase "i" next to the word
   CATEGORIES and reads like a typo. Swapped for the folder (\f07b),
   matching the fa-folder-open used on the category cards.

   FontAwesome draws icons as ::before content, so overriding content is
   enough; the font family and weight are unchanged. Scoped to the sidebar
   panel title so fa-info elsewhere is untouched (fa-info-circle is a
   different glyph and unaffected either way). */
.panel-sidebar .panel-title > .fa-info::before { content: "\f07b"; }

/* Related Articles uses the same .kbarticles container but a DIFFERENT
   shape: each item is wrapped in its own <div>, where the category and
   "most popular" lists are flat. The direct-child rules above therefore
   never reach it. The wrapper is an improvement -- it gives a real row
   element to hover and to hang the divider on. */
.kbarticles > div {
  position: relative;
  padding: 16px 20px;
  border-bottom: 1px solid var(--line);
  transition: background-color .12s ease;
}
.kbarticles > div:last-child { border-bottom: 0; }
.kbarticles > div:hover { background-color: var(--bg-soft); }

.kbarticles > div > a:not(.admin-inline-edit) {
  display: block;
  color: var(--ink);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.4;
}
.kbarticles > div:hover > a:not(.admin-inline-edit) { color: var(--green-dark); }

/* Whole row clickable, with the Edit link kept above the overlay. */
.kbarticles > div > a:not(.admin-inline-edit)::after {
  content: '';
  position: absolute;
  inset: 0;
}
.kbarticles > div > a.admin-inline-edit {
  position: relative;
  z-index: 1;
  margin-left: 6px;
}

.kbarticles > div > p {
  margin: 6px 0 0;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.6;
}

/* ===================================================================
   ORDER FORM BODY
   The standard_cart product listing, sidebar, and checkout steps.

   Ships inside the client area theme's css/custom.css, which loads on
   every cart page.

   It briefly lived in a child order form template that overrode
   common.tpl to link its own stylesheet. That does not work: verified
   against the live server, a child's common.tpl is never rendered -- the
   parent's is used instead, and our stylesheet was simply never
   requested. Consistent with WHMCS's own shipped children, none of which
   override common.tpl; universal_slider puts its <link> tags in
   products.tpl. But products.tpl is only the product listing, and we need
   these rules on configure and checkout too.
   =================================================================== */

/* ---- Page heading -------------------------------------------------
   Six paints this #058 blue with a #ccc rule under it. */
div.header-lined h1 {
  color: var(--ink);
  font-weight: 700;
  font-size: 30px;
  border-bottom: 1px solid var(--line);
  padding-bottom: 14px;
  margin-bottom: 24px;
}

/* ---- Sidebar panels ------------------------------------------------ */
.panel-sidebar {
  border-color: var(--line);
  border-radius: 14px;
  box-shadow: none;
  overflow: hidden;
}
.panel-sidebar > .panel-heading {
  background-color: #fff;
  border-bottom: 1px solid var(--line);
  padding: 14px 18px;
}
.panel-sidebar .panel-title {
  font-family: Inter, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .03em;
  text-transform: uppercase;
  color: var(--ink);
}
.panel-sidebar .list-group-item {
  border-color: var(--line);
  padding: 11px 18px;
  font-size: 14px;
  color: var(--ink);
}
.panel-sidebar a.list-group-item:hover {
  background-color: var(--bg-soft);
  color: var(--green-dark);
}
/* Six uses a slate #465054 for the selected category; the marketing
   site's selected state is ink. */
.panel-sidebar a.list-group-item.active,
.panel-sidebar a.list-group-item.active:focus,
.panel-sidebar a.list-group-item.active:hover {
  background-color: var(--ink);
  border-color: var(--ink);
  color: #fff;
}

/* ---- Product cards -------------------------------------------------
   standard_cart floats .product-desc left at 60% and footer right at
   40%. The marketing site's pricing card is a single vertical column,
   so we unwind both floats and stack them.

   These rules ship in the order form child template's own stylesheet,
   which common.tpl loads AFTER standard_cart's -- so equal specificity
   wins on source order and no `body` prefix or !important is needed.
   (Before the child template existed this lived in six/custom.css, which
   loads in the head, and every rule here silently lost.) */
body #order-standard_cart .products .product {
  padding: 0;
  margin: 0 0 20px 0;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 14px;
  overflow: hidden;
}

body #order-standard_cart .products .product header {
  margin: 0;
  padding: 18px 22px 0;
  background: #fff;
  border-radius: 0;
}
body #order-standard_cart .products .product header span {
  color: var(--ink);
  font-size: 16px;
  font-weight: 700;
}

body #order-standard_cart .products .product div.product-desc {
  float: none;
  width: 100%;
  padding: 14px 22px 0;
  font-size: 13px;
  color: var(--muted);
  line-height: 1.6;
}
body #order-standard_cart .products .product div.product-desc ul {
  padding-left: 18px;
  margin-bottom: 0;
}
body #order-standard_cart .products .product span.feature-value {
  font-weight: 600;
  color: var(--ink);
}

body #order-standard_cart .products .product footer {
  float: none;
  width: 100%;
  margin: 0;
  padding: 18px 22px 22px;
  font-size: 13px;
  text-align: left;
  color: var(--muted);
}
body #order-standard_cart .products .product div.product-pricing {
  margin-bottom: 14px;
}
body #order-standard_cart .products .product div.product-pricing span.price {
  display: block;
  color: var(--ink);
  font-size: 26px;
  font-weight: 700;
  line-height: 1.2;
}
/* Full-width CTA, matching the marketing site's pricing card. */
body #order-standard_cart .products .product footer .btn {
  display: block;
  width: 100%;
  padding: 11px;
  font-size: 14px;
}

/* ---- Configure / checkout steps ------------------------------------ */
body #order-standard_cart .product-info {
  background-color: var(--bg-soft);
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 14px 20px;
}
body #order-standard_cart .product-info .product-title {
  color: var(--ink);
  font-weight: 700;
}

body #order-standard_cart .panel,
body #order-standard_cart .well {
  border-color: var(--line);
  border-radius: 14px;
  box-shadow: none;
}
body #order-standard_cart .order-summary .product-name {
  color: var(--ink);
  font-weight: 700;
}

/* ---- Forms --------------------------------------------------------- */
.form-control {
  border-color: var(--line);
  border-radius: 8px;
  box-shadow: none;
  height: auto;
  padding: 9px 12px;
  font-size: 14px;
  color: var(--ink);
}
.form-control:focus {
  border-color: var(--green);
  box-shadow: 0 0 0 3px rgb(44 199 106 / 18%);
}

/* ---- Review & Checkout --------------------------------------------
   Found by walking a real order through to the payment step; none of
   this is reachable from the product listing. standard_cart carries its
   own blue (#058) and a grey order summary, independent of Six's. */

/* The "Product/Options | Price/Cycle" bar and the rule under the items. */
body #order-standard_cart .view-cart-items-header {
  background-color: var(--ink);
  border-radius: 14px 14px 0 0;
  padding: 12px 18px;
  font-size: 13px;
  font-weight: 600;
}
body #order-standard_cart .view-cart-items {
  border-bottom: 1px solid var(--line);
}

/* "Empty Cart" tab hanging off the bottom of the items table. */
body #order-standard_cart .empty-cart .btn {
  background-color: var(--muted);
  border-radius: 0 0 8px 8px;
  font-size: 12px;
}
body #order-standard_cart .empty-cart .btn:hover {
  background-color: var(--ink);
}

/* Centred section captions -- "Personal Information", "Billing Address",
   "Payment Details" and friends. The span sits on the rule, so its
   background must stay opaque white to keep punching the gap. */
body #order-standard_cart .sub-heading,
body #order-standard_cart .sub-heading-borderless {
  border-top-color: var(--line);
}
body #order-standard_cart .sub-heading span,
body #order-standard_cart .sub-heading-borderless span {
  color: var(--ink);
  background-color: #fff;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
}

/* Order summary panel: grey #666 header on a #f8f8f8 body. */
body #order-standard_cart .order-summary {
  background-color: var(--ink);
  border-bottom: 0;
  border-radius: 14px;
  overflow: hidden;
}
body #order-standard_cart .order-summary h2 {
  padding: 14px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
}
body #order-standard_cart .summary-container {
  background-color: #fff;
  border-radius: 0;
}
body #order-standard_cart .order-summary .summary-totals {
  border-top-color: var(--line);
  border-bottom-color: var(--line);
}
body #order-standard_cart .order-summary .total-due-today .amt {
  color: var(--ink);
  font-weight: 700;
}
