/* ============================================================
   GRNCOMMERCE WHMCS Theme - custom.css
   Design System Implementation
   Based on: Design-Criteria.md + Dohost UI Inspiration
   Parent: Twenty-One (Bootstrap 4.5.3)
   ============================================================ */

/* ============================================================
   1. DESIGN TOKENS (CSS Custom Properties)
   ============================================================ */
:root {
  /* --- Colors: Primary --- */
  --color-primary: #C8E64A;
  --color-primary-dark: #A8C438;
  --color-primary-light: #E8F5A1;
  --color-primary-subtle: #F4FAD6;

  /* --- Colors: Sidebar / Dark Surfaces --- */
  --color-sidebar-bg: #1E1E2D;
  --color-sidebar-bg-alt: #2A2A3C;
  --color-sidebar-text: #9CA3AF;
  --color-sidebar-text-active: #FFFFFF;
  --color-sidebar-active-bg: #C8E64A;
  --color-sidebar-active-text: #1E1E2D;

  /* --- Colors: Neutrals / Surfaces --- */
  --color-page-bg: #F5F5F0;
  --color-card-bg: #FFFFFF;
  --color-border: #E8E8E3;
  --color-border-focus: #C8E64A;

  /* --- Colors: Text --- */
  --color-text-primary: #1A1A2E;
  --color-text-secondary: #6B7280;
  --color-text-muted: #9CA3AF;
  --color-text-inverse: #FFFFFF;

  /* --- Colors: Semantic --- */
  --color-success: #22C55E;
  --color-success-light: #DCFCE7;
  --color-warning: #F59E0B;
  --color-warning-light: #FEF3C7;
  --color-error: #DC2626;
  --color-error-light: #FEE2E2;
  --color-info: #3B82F6;
  --color-info-light: #DBEAFE;

  /* --- Typography --- */
  --font-heading: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --font-body: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;

  /* --- Spacing (4px base) --- */
  --space-2xs: 4px;
  --space-xs: 8px;
  --space-sm: 12px;
  --space-md: 16px;
  --space-lg: 20px;
  --space-xl: 24px;
  --space-2xl: 32px;
  --space-3xl: 48px;

  /* --- Border Radius --- */
  --radius-sm: 8px;
  --radius-md: 12px;
  --radius-lg: 16px;
  --radius-xl: 20px;
  --radius-pill: 9999px;
  --radius-circle: 50%;

  /* --- Shadows --- */
  --shadow-xs: 0 1px 2px rgba(0,0,0,0.04);
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
  --shadow-md: 0 4px 6px rgba(0,0,0,0.07), 0 2px 4px rgba(0,0,0,0.04);
  --shadow-lg: 0 10px 15px rgba(0,0,0,0.08), 0 4px 6px rgba(0,0,0,0.04);
  --shadow-focus: 0 0 0 3px rgba(200,230,74,0.4);

  /* --- Transitions --- */
  --duration-instant: 75ms;
  --duration-fast: 150ms;
  --duration-normal: 250ms;
  --duration-slow: 350ms;
  --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-out: cubic-bezier(0, 0, 0.2, 1);

  /* --- Layout --- */
  --layout-sidebar-width: 260px;
  --layout-sidebar-collapsed: 64px;
  --layout-topbar-height: 64px;
  --layout-content-max-width: 1180px;
  --layout-mobile-topbar-height: 56px;
}

/* ============================================================
   2. GLOBAL RESET & BASE STYLES
   ============================================================ */
*,
*::before,
*::after {
  box-sizing: border-box;
}

body.grn-portal {
  font-family: var(--font-body) !important;
  font-size: 14px;
  line-height: 1.5;
  color: var(--color-text-primary);
  background-color: var(--color-page-bg) !important;
  margin: 0;
  padding: 0;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
}

body.grn-portal.grn-menu-open {
  overflow: hidden;
}

h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
  font-family: var(--font-heading) !important;
  color: var(--color-text-primary);
  font-weight: 600;
}

a {
  color: var(--color-primary-dark);
  transition: color var(--duration-fast) var(--ease-default);
}

a:hover {
  color: var(--color-text-primary);
  text-decoration: none;
}

/* Remove default WHMCS backgrounds */
body.grn-portal .primary-bg-color,
body.grn-portal .header,
body.grn-portal .topbar,
body.grn-portal .navbar,
body.grn-portal .main-navbar-wrapper,
body.grn-portal .master-breadcrumb,
body.grn-portal #header {
  background: none !important;
  border: none !important;
  box-shadow: none !important;
}

/* Hide the default WHMCS header entirely -- we replace it */
body.grn-portal > header#header,
body.grn-portal > .header,
body.grn-portal > nav.master-breadcrumb {
  display: none !important;
}

/* Hide default WHMCS footer */
body.grn-portal > footer#footer,
body.grn-portal > footer.footer {
  display: none !important;
}

/* Hide default WHMCS main-body container -- we handle layout */
body.grn-portal > section#main-body {
  display: none !important;
}

/* ============================================================
   3. SIDEBAR
   ============================================================ */
.grn-sidebar {
  position: fixed;
  top: 0;
  left: 0;
  width: var(--layout-sidebar-width);
  height: 100vh;
  background: var(--color-sidebar-bg);
  z-index: 1040;
  display: flex;
  flex-direction: column;
  transition: transform var(--duration-slow) var(--ease-default);
  overflow-y: auto;
  overflow-x: hidden;
  -webkit-overflow-scrolling: touch;
}

.grn-sidebar-inner {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
}

/* --- Sidebar Brand --- */
.grn-sidebar-brand {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-xl) var(--space-lg);
  flex-shrink: 0;
}

.grn-sidebar-logo-link {
  display: flex;
  align-items: center;
  text-decoration: none !important;
}

.grn-logo-img {
  max-height: 32px;
  width: auto;
}

.grn-brand-text {
  font-family: var(--font-heading);
  font-size: 20px;
  font-weight: 700;
  color: var(--color-text-inverse);
  letter-spacing: -0.02em;
}

.grn-brand-accent {
  color: var(--color-primary);
}

.grn-sidebar-close {
  background: none;
  border: none;
  color: var(--color-sidebar-text);
  font-size: 18px;
  padding: var(--space-xs);
  cursor: pointer;
  border-radius: var(--radius-sm);
  transition: color var(--duration-fast) var(--ease-default),
              background var(--duration-fast) var(--ease-default);
}

.grn-sidebar-close:hover {
  color: var(--color-text-inverse);
  background: var(--color-sidebar-bg-alt);
}

/* --- Sidebar Navigation --- */
.grn-sidebar-nav {
  flex: 1;
  padding: 0 var(--space-sm);
  overflow-y: auto;
}

.grn-nav-list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.grn-nav-item {
  margin-bottom: 2px;
}

.grn-nav-separator {
  height: 1px;
  background: rgba(255, 255, 255, 0.08);
  margin: var(--space-md) var(--space-xs);
}

.grn-nav-link {
  display: flex;
  align-items: center;
  padding: 10px var(--space-md);
  color: var(--color-sidebar-text);
  text-decoration: none !important;
  border-radius: var(--radius-sm);
  font-size: 14px;
  font-weight: 400;
  transition: background var(--duration-fast) var(--ease-default),
              color var(--duration-fast) var(--ease-default);
  gap: var(--space-sm);
  position: relative;
}

.grn-nav-link:hover {
  background: var(--color-sidebar-bg-alt);
  color: var(--color-text-inverse);
}

.grn-nav-link.active {
  background: var(--color-sidebar-active-bg);
  color: var(--color-sidebar-active-text);
  font-weight: 600;
  border-radius: var(--radius-pill);
}

.grn-nav-link.active .grn-nav-icon {
  color: var(--color-sidebar-active-text);
}

.grn-nav-icon {
  width: 20px;
  text-align: center;
  font-size: 16px;
  flex-shrink: 0;
  color: inherit;
}

.grn-nav-label {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.grn-nav-badge {
  background: var(--color-primary);
  color: var(--color-sidebar-active-text);
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  line-height: 1.4;
}

/* --- Sidebar Footer --- */
.grn-sidebar-footer {
  flex-shrink: 0;
  padding: var(--space-sm);
  border-top: 1px solid rgba(255, 255, 255, 0.08);
  margin-top: auto;
}

.grn-logout-link:hover {
  color: var(--color-error) !important;
}

.grn-sidebar-branding {
  text-align: center;
  padding: var(--space-sm) 0 var(--space-xs);
}

.grn-brand-text-sm {
  font-family: var(--font-heading);
  font-size: 11px;
  font-weight: 700;
  color: rgba(255, 255, 255, 0.2);
  letter-spacing: 0.05em;
}

.grn-brand-text-sm .grn-brand-accent {
  color: rgba(200, 230, 74, 0.3);
}

/* ============================================================
   4. MOBILE TOP BAR
   ============================================================ */
.grn-mobile-topbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: var(--layout-mobile-topbar-height);
  background: var(--color-sidebar-bg);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 var(--space-md);
  z-index: 1030;
  gap: var(--space-sm);
}

.grn-hamburger {
  background: none;
  border: none;
  color: var(--color-text-inverse);
  font-size: 20px;
  padding: var(--space-xs);
  cursor: pointer;
  border-radius: var(--radius-sm);
}

.grn-hamburger:hover {
  background: var(--color-sidebar-bg-alt);
}

.grn-mobile-logo {
  display: flex;
  align-items: center;
  text-decoration: none !important;
}

.grn-mobile-logo .grn-logo-img {
  max-height: 26px;
}

.grn-mobile-logo .grn-brand-text {
  font-size: 16px;
}

.grn-mobile-actions {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
}

.grn-mobile-icon-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  color: var(--color-sidebar-text);
  font-size: 16px;
  border-radius: var(--radius-sm);
  text-decoration: none !important;
  position: relative;
  transition: color var(--duration-fast) var(--ease-default),
              background var(--duration-fast) var(--ease-default);
}

.grn-mobile-icon-btn:hover {
  color: var(--color-text-inverse);
  background: var(--color-sidebar-bg-alt);
}

.grn-cart-badge {
  position: absolute;
  top: 2px;
  right: 2px;
  background: var(--color-primary);
  color: var(--color-sidebar-active-text);
  font-size: 10px;
  font-weight: 700;
  width: 16px;
  height: 16px;
  border-radius: var(--radius-circle);
  display: flex;
  align-items: center;
  justify-content: center;
}

/* --- Sidebar Overlay (mobile) --- */
.grn-sidebar-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.5);
  z-index: 1035;
  opacity: 0;
  visibility: hidden;
  transition: opacity var(--duration-slow) var(--ease-default),
              visibility var(--duration-slow) var(--ease-default);
}

.grn-sidebar-overlay.open {
  opacity: 1;
  visibility: visible;
}

/* ============================================================
   5. MAIN WRAPPER & TOP BAR (Desktop)
   ============================================================ */
.grn-main-wrapper {
  margin-left: var(--layout-sidebar-width);
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.grn-topbar {
  height: var(--layout-topbar-height);
  background: var(--color-page-bg);
  position: sticky;
  top: 0;
  z-index: 1020;
  flex-shrink: 0;
  border-bottom: 1px solid var(--color-border);
}

.grn-topbar-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 100%;
  padding: 0 var(--space-xl);
  max-width: var(--layout-content-max-width);
}

.grn-topbar-left {
  display: flex;
  align-items: center;
  min-width: 0;
}

.grn-page-title {
  font-size: 18px;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.grn-topbar-right {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  flex-shrink: 0;
}

/* --- Search --- */
.grn-search-form {
  margin: 0;
}

.grn-search-input-wrap {
  position: relative;
  display: flex;
  align-items: center;
}

.grn-search-icon {
  position: absolute;
  left: 14px;
  color: var(--color-text-muted);
  font-size: 14px;
  pointer-events: none;
}

.grn-search-input {
  width: 240px;
  height: 38px;
  padding: 0 var(--space-md) 0 38px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  background: var(--color-card-bg);
  font-family: var(--font-body);
  font-size: 13px;
  color: var(--color-text-primary);
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default),
              width var(--duration-normal) var(--ease-default);
}

.grn-search-input:focus {
  outline: none;
  border-color: var(--color-border-focus);
  box-shadow: var(--shadow-focus);
  width: 300px;
}

.grn-search-input::placeholder {
  color: var(--color-text-muted);
}

/* --- Topbar Button --- */
.grn-topbar-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border: none;
  background: none;
  color: var(--color-text-secondary);
  font-size: 18px;
  border-radius: var(--radius-circle);
  cursor: pointer;
  position: relative;
  transition: color var(--duration-fast) var(--ease-default),
              background var(--duration-fast) var(--ease-default);
}

.grn-topbar-btn:hover {
  color: var(--color-text-primary);
  background: rgba(0, 0, 0, 0.04);
}

.grn-notif-dot {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 8px;
  height: 8px;
  background: var(--color-error);
  border-radius: var(--radius-circle);
  border: 2px solid var(--color-page-bg);
}

/* --- User Avatar / Dropdown --- */
.grn-user-menu {
  position: relative;
}

.grn-avatar-btn {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  background: none;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  padding: 4px 14px 4px 4px;
  cursor: pointer;
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-avatar-btn:hover {
  border-color: var(--color-primary);
}

.grn-avatar-btn::after {
  /* Override Bootstrap caret */
  display: none !important;
}

.grn-avatar {
  width: 32px;
  height: 32px;
  border-radius: var(--radius-circle);
  background: var(--color-primary);
  color: var(--color-sidebar-active-text);
  font-family: var(--font-heading);
  font-size: 13px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  text-transform: uppercase;
}

.grn-user-name {
  font-size: 13px;
  font-weight: 500;
  color: var(--color-text-primary);
  max-width: 140px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.grn-user-dropdown {
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-md) !important;
  box-shadow: var(--shadow-lg) !important;
  padding: var(--space-xs) 0 !important;
  min-width: 200px;
  margin-top: var(--space-xs) !important;
}

.grn-user-dropdown .dropdown-item {
  padding: var(--space-xs) var(--space-md);
  font-size: 13px;
  color: var(--color-text-primary);
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  transition: background var(--duration-fast) var(--ease-default);
}

.grn-user-dropdown .dropdown-item:hover {
  background: var(--color-primary-subtle);
}

.grn-user-dropdown .dropdown-item i {
  color: var(--color-text-secondary);
  width: 16px;
  text-align: center;
}

.grn-user-dropdown .dropdown-divider {
  border-color: var(--color-border);
  margin: var(--space-2xs) 0;
}

.grn-logout-item {
  color: var(--color-error) !important;
}

.grn-logout-item i {
  color: var(--color-error) !important;
}

.grn-login-btn {
  background: var(--color-primary) !important;
  color: var(--color-sidebar-active-text) !important;
  border-radius: var(--radius-pill) !important;
  padding: var(--space-xs) var(--space-md) !important;
  font-weight: 600 !important;
  font-size: 13px !important;
  width: auto !important;
  height: auto !important;
}

.grn-login-btn:hover {
  background: var(--color-primary-dark) !important;
}

/* ============================================================
   6. BREADCRUMB
   ============================================================ */
.grn-breadcrumb {
  padding: 0 var(--space-xl);
  max-width: var(--layout-content-max-width);
}

.grn-breadcrumb .breadcrumb {
  background: none;
  padding: var(--space-xs) 0;
  margin: 0;
  font-size: 13px;
}

.grn-breadcrumb .breadcrumb-item a {
  color: var(--color-text-secondary);
}

.grn-breadcrumb .breadcrumb-item.active {
  color: var(--color-text-muted);
}

/* ============================================================
   7. MAIN CONTENT AREA
   ============================================================ */
.grn-content {
  flex: 1;
  padding: var(--space-xl);
  max-width: var(--layout-content-max-width);
}

.grn-content-inner {
  width: 100%;
}

/* Page with WHMCS sidebar (detail pages) */
.grn-page-with-sidebar {
  display: grid;
  grid-template-columns: 260px 1fr;
  gap: var(--space-xl);
}

.grn-page-sidebar-inner .card {
  border: none;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  margin-bottom: var(--space-md);
}

.grn-page-sidebar-inner .card-header {
  background: var(--color-card-bg);
  border-bottom: 1px solid var(--color-border);
  padding: var(--space-md) var(--space-lg);
}

.grn-page-sidebar-inner .card-header .card-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-primary);
}

.grn-page-sidebar-inner .list-group-item {
  border: none;
  border-bottom: 1px solid var(--color-border);
  padding: var(--space-sm) var(--space-lg);
  font-size: 13px;
  color: var(--color-text-primary);
  transition: background var(--duration-fast) var(--ease-default);
}

.grn-page-sidebar-inner .list-group-item:last-child {
  border-bottom: none;
}

.grn-page-sidebar-inner .list-group-item:hover {
  background: var(--color-primary-subtle);
}

.grn-page-sidebar-inner .list-group-item.active {
  background: var(--color-primary-subtle);
  color: var(--color-text-primary);
  border-left: 3px solid var(--color-primary);
}

/* ============================================================
   8. WELCOME SECTION (Dashboard)
   ============================================================ */
.grn-welcome {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: var(--space-xl);
  gap: var(--space-md);
}

.grn-welcome-heading {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0 0 var(--space-2xs);
  letter-spacing: -0.01em;
}

.grn-welcome-subtitle {
  font-size: 15px;
  color: var(--color-text-secondary);
  margin: 0;
}

.grn-welcome-date {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  color: var(--color-text-secondary);
  font-size: 13px;
  white-space: nowrap;
  background: var(--color-card-bg);
  padding: var(--space-xs) var(--space-md);
  border-radius: var(--radius-pill);
  box-shadow: var(--shadow-xs);
}

.grn-welcome-date i {
  color: var(--color-primary-dark);
}

/* ============================================================
   9. STAT CARDS (Dashboard)
   ============================================================ */
.grn-stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-md);
  margin-bottom: var(--space-2xl);
}

.grn-stat-card {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  background: var(--color-card-bg);
  border-radius: var(--radius-lg);
  padding: var(--space-lg);
  box-shadow: var(--shadow-sm);
  text-decoration: none !important;
  transition: transform var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-stat-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

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

.grn-stat-icon--services {
  background: var(--color-primary-light);
  color: var(--color-primary-dark);
}

.grn-stat-icon--domains {
  background: var(--color-info-light);
  color: var(--color-info);
}

.grn-stat-icon--tickets {
  background: var(--color-warning-light);
  color: var(--color-warning);
}

.grn-stat-icon--invoices {
  background: var(--color-error-light);
  color: var(--color-error);
}

.grn-stat-body {
  flex: 1;
  min-width: 0;
}

.grn-stat-number {
  font-family: var(--font-heading);
  font-size: 32px;
  font-weight: 700;
  color: var(--color-text-primary);
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.grn-stat-label {
  font-size: 13px;
  color: var(--color-text-secondary);
  margin-top: 2px;
}

.grn-stat-arrow {
  color: var(--color-text-muted);
  font-size: 14px;
  flex-shrink: 0;
  transition: color var(--duration-fast) var(--ease-default),
              transform var(--duration-fast) var(--ease-default);
}

.grn-stat-card:hover .grn-stat-arrow {
  color: var(--color-primary-dark);
  transform: translateX(3px);
}

/* ============================================================
   10. HOME PANELS (Dashboard Cards)
   ============================================================ */
.grn-home-panels {
  margin-top: var(--space-md);
}

.grn-panel {
  background: var(--color-card-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  margin-bottom: var(--space-md);
}

.grn-panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--space-md) var(--space-lg);
  border-bottom: 1px solid var(--color-border);
}

.grn-panel-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0;
  display: flex;
  align-items: center;
  gap: var(--space-xs);
}

.grn-panel-title i {
  color: var(--color-text-secondary);
  font-size: 16px;
}

.grn-panel-badge {
  background: var(--color-primary-light);
  color: var(--color-primary-dark);
  font-size: 11px;
  font-weight: 600;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  margin-left: var(--space-xs);
}

.grn-panel-action {
  font-size: 13px;
  font-weight: 500;
  color: var(--color-primary-dark);
  text-decoration: none !important;
  display: flex;
  align-items: center;
  gap: var(--space-2xs);
  padding: var(--space-2xs) var(--space-sm);
  border-radius: var(--radius-sm);
  transition: background var(--duration-fast) var(--ease-default);
}

.grn-panel-action:hover {
  background: var(--color-primary-subtle);
  color: var(--color-primary-dark);
}

.grn-panel-body {
  padding: var(--space-lg);
}

.grn-panel-list {
  display: flex;
  flex-direction: column;
}

.grn-panel-list-item {
  display: flex;
  align-items: center;
  padding: var(--space-sm) var(--space-lg);
  color: var(--color-text-primary);
  text-decoration: none !important;
  border-bottom: 1px solid var(--color-border);
  transition: background var(--duration-fast) var(--ease-default);
  gap: var(--space-sm);
}

.grn-panel-list-item:last-child {
  border-bottom: none;
}

.grn-panel-list-item:hover {
  background: var(--color-primary-subtle);
}

a.grn-panel-list-item.active {
  background: var(--color-primary-subtle);
  border-left: 3px solid var(--color-primary);
}

.grn-panel-list-content {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  flex: 1;
  min-width: 0;
}

.grn-panel-list-icon {
  color: var(--color-text-secondary);
  font-size: 14px;
  width: 16px;
  text-align: center;
  flex-shrink: 0;
}

.grn-panel-list-label {
  font-size: 14px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.grn-panel-list-badge {
  font-size: 12px;
  font-weight: 500;
  color: var(--color-text-secondary);
  flex-shrink: 0;
}

.grn-panel-list-arrow {
  color: var(--color-text-muted);
  font-size: 11px;
  flex-shrink: 0;
}

.grn-panel-footer {
  padding: var(--space-sm) var(--space-lg);
  border-top: 1px solid var(--color-border);
  background: rgba(245, 245, 240, 0.5);
}

.grn-panel-full {
  margin-bottom: var(--space-md);
}

.grn-panels-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-md);
}

/* ============================================================
   11. LOGIN PAGE
   ============================================================ */
.grn-login-wrapper {
  display: flex;
  min-height: 100vh;
  position: relative;
}

/* When on login page, hide sidebar and adjust wrapper */
body.grn-login-page .grn-sidebar,
body.grn-login-page .grn-topbar,
body.grn-login-page .grn-breadcrumb,
body.grn-login-page .grn-mobile-topbar {
  display: none !important;
}

body.grn-login-page .grn-main-wrapper {
  margin-left: 0;
}

body.grn-login-page .grn-content {
  padding: 0;
  max-width: none;
}

body.grn-login-page .grn-footer {
  display: none;
}

/* --- Login Form Side --- */
.grn-login-form-side {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3xl) var(--space-xl);
  background: var(--color-card-bg);
}

.grn-login-form-container {
  width: 100%;
  max-width: 420px;
}

.grn-login-logo {
  margin-bottom: var(--space-3xl);
}

.grn-login-logo-img {
  max-height: 36px;
  width: auto;
}

.grn-brand-text--login {
  font-size: 24px;
  color: var(--color-text-primary);
}

.grn-brand-text--login .grn-brand-accent {
  color: var(--color-primary-dark);
}

.grn-login-header {
  margin-bottom: var(--space-2xl);
}

.grn-login-title {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  color: var(--color-text-primary);
  margin: 0 0 var(--space-xs);
}

.grn-login-subtitle {
  font-size: 15px;
  color: var(--color-text-secondary);
  margin: 0;
}

/* --- Form Elements --- */
.grn-form-group {
  margin-bottom: var(--space-lg);
}

.grn-form-label {
  display: block;
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text-primary);
  margin-bottom: 6px;
}

.grn-form-label-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 6px;
}

.grn-forgot-link {
  font-size: 13px;
  color: var(--color-text-muted);
  text-decoration: none !important;
}

.grn-forgot-link:hover {
  color: var(--color-primary-dark);
}

.grn-input-wrap {
  position: relative;
  display: flex;
  align-items: center;
}

.grn-input-icon {
  position: absolute;
  left: 14px;
  color: var(--color-text-muted);
  font-size: 14px;
  pointer-events: none;
  z-index: 1;
}

.grn-form-input {
  width: 100%;
  height: 44px;
  padding: 0 var(--space-md) 0 42px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-card-bg);
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--color-text-primary);
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-form-input:focus {
  outline: none;
  border-color: var(--color-border-focus);
  box-shadow: var(--shadow-focus);
}

.grn-form-input::placeholder {
  color: var(--color-text-muted);
}

.grn-input-action {
  position: absolute;
  right: 4px;
  background: none;
  border: none;
  color: var(--color-text-muted);
  padding: var(--space-xs);
  cursor: pointer;
  font-size: 14px;
  border-radius: var(--radius-sm);
  transition: color var(--duration-fast) var(--ease-default);
}

.grn-input-action:hover {
  color: var(--color-text-primary);
}

.grn-remember-row {
  margin-top: var(--space-md);
}

.grn-checkbox-label {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  cursor: pointer;
  font-size: 14px;
  color: var(--color-text-secondary);
  margin: 0;
}

.grn-checkbox {
  width: 18px;
  height: 18px;
  accent-color: var(--color-primary);
  border-radius: 4px;
  cursor: pointer;
}

/* --- Login Button --- */
.grn-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-xs);
  padding: 0 var(--space-xl);
  height: 44px;
  border: none;
  border-radius: var(--radius-md);
  font-family: var(--font-body);
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  transition: background var(--duration-fast) var(--ease-default),
              transform var(--duration-instant) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-btn:active {
  transform: scale(0.97);
}

.grn-btn-primary {
  background: var(--color-primary);
  color: var(--color-sidebar-active-text);
}

.grn-btn-primary:hover {
  background: var(--color-primary-dark);
}

.grn-btn-primary:focus {
  box-shadow: var(--shadow-focus);
  outline: none;
}

.grn-btn-login {
  width: 100%;
  margin-top: var(--space-lg);
}

.grn-btn-icon-right {
  font-size: 13px;
  transition: transform var(--duration-fast) var(--ease-default);
}

.grn-btn:hover .grn-btn-icon-right {
  transform: translateX(3px);
}

.grn-login-footer-link {
  text-align: center;
  margin-top: var(--space-2xl);
  font-size: 14px;
  color: var(--color-text-secondary);
}

.grn-register-link {
  color: var(--color-primary-dark);
  font-weight: 600;
  margin-left: var(--space-2xs);
  text-decoration: none !important;
}

.grn-register-link:hover {
  color: var(--color-text-primary);
}

/* --- Login Brand Side --- */
.grn-login-brand-side {
  flex: 1;
  background: var(--color-sidebar-bg);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-3xl);
  position: relative;
  overflow: hidden;
}

.grn-login-brand-content {
  position: relative;
  z-index: 1;
  max-width: 440px;
}

.grn-login-brand-logo {
  margin-bottom: var(--space-3xl);
}

.grn-brand-text--hero {
  font-size: 32px;
  color: var(--color-text-inverse);
}

.grn-login-brand-headline {
  font-family: var(--font-heading);
  font-size: 36px;
  font-weight: 700;
  color: var(--color-text-inverse);
  margin: 0 0 var(--space-md);
  line-height: 1.15;
}

.grn-login-brand-desc {
  font-size: 16px;
  color: var(--color-sidebar-text);
  line-height: 1.6;
  margin: 0 0 var(--space-2xl);
}

.grn-login-features {
  display: flex;
  flex-direction: column;
  gap: var(--space-lg);
}

.grn-login-feature {
  display: flex;
  align-items: flex-start;
  gap: var(--space-md);
}

.grn-login-feature-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  background: var(--color-sidebar-bg-alt);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-primary);
  font-size: 16px;
  flex-shrink: 0;
}

.grn-login-feature-text {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.grn-login-feature-text strong {
  font-size: 14px;
  font-weight: 600;
  color: var(--color-text-inverse);
}

.grn-login-feature-text span {
  font-size: 13px;
  color: var(--color-sidebar-text);
}

/* Brand side decorative pattern */
.grn-login-brand-pattern {
  position: absolute;
  bottom: -20%;
  right: -10%;
  width: 500px;
  height: 500px;
  border-radius: var(--radius-circle);
  background: radial-gradient(circle, rgba(200, 230, 74, 0.08) 0%, transparent 70%);
  pointer-events: none;
}

/* ============================================================
   11b. REGISTER PAGE (mirrors login page layout)
   ============================================================ */

/* When on register page, hide sidebar and adjust wrapper */
body.grn-register-page .grn-sidebar,
body.grn-register-page .grn-topbar,
body.grn-register-page .grn-breadcrumb,
body.grn-register-page .grn-mobile-topbar {
  display: none !important;
}

body.grn-register-page .grn-main-wrapper {
  margin-left: 0;
}

body.grn-register-page .grn-content {
  padding: 0;
  max-width: none;
}

body.grn-register-page .grn-footer {
  display: none;
}

/* Hide the page-with-sidebar wrapper structure on register page */
body.grn-register-page .grn-page-with-sidebar {
  display: block;
}

body.grn-register-page .grn-page-sidebar {
  display: none !important;
}

body.grn-register-page .grn-page-main {
  width: 100%;
}

/* --- Register Wrapper (split layout like login) --- */
.grn-register-wrapper {
  display: flex;
  min-height: 100vh;
  position: relative;
}

/* Brand panel stays sticky on right while form scrolls */
.grn-register-wrapper .grn-login-brand-side {
  position: sticky;
  top: 0;
  align-self: flex-start;
  height: 100vh;
}

/* --- Register Form Side --- */
.grn-register-form-side {
  flex: 1.2;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  padding: var(--space-3xl) var(--space-xl);
  background: var(--color-card-bg);
}

.grn-register-form-container {
  width: 100%;
  max-width: 640px;
  padding: var(--space-xl) 0;
}

/* --- Register Sections --- */
.grn-register-section {
  margin-bottom: var(--space-2xl);
  padding-bottom: var(--space-lg);
  border-bottom: 1px solid var(--color-border);
}

.grn-register-section:last-child {
  border-bottom: none;
}

.grn-register-section-title {
  font-family: var(--font-heading);
  font-size: 18px;
  font-weight: 600;
  color: var(--color-text-primary);
  margin: 0 0 var(--space-lg);
}

/* --- Register Rows (grid layout) --- */
.grn-register-row {
  display: flex;
  gap: var(--space-md);
}

.grn-register-col-half {
  flex: 1;
  min-width: 0;
}

.grn-register-col-third {
  flex: 1;
  min-width: 0;
}

/* --- Register form inputs use grn-input-wrap pattern from login --- */
.grn-register-form .grn-form-group {
  margin-bottom: var(--space-md);
}

.grn-register-form .grn-input-wrap {
  position: relative;
  display: flex;
  align-items: center;
}

.grn-register-form .grn-input-icon {
  position: absolute;
  left: 14px;
  color: var(--color-text-muted);
  font-size: 14px;
  pointer-events: none;
  z-index: 1;
}

.grn-register-form .grn-form-input {
  width: 100%;
  height: 44px;
  padding: 0 var(--space-md) 0 42px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-card-bg);
  font-family: var(--font-body);
  font-size: 14px;
  color: var(--color-text-primary);
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-register-form .grn-form-input:focus {
  outline: none;
  border-color: var(--color-border-focus);
  box-shadow: var(--shadow-focus);
}

.grn-register-form .grn-form-input::placeholder {
  color: var(--color-text-muted);
}

/* Select elements within grn-input-wrap */
.grn-register-form select.grn-form-input,
.grn-register-form select.grn-form-select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  padding-right: 36px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239CA3AF' d='M6 8.825a.5.5 0 01-.354-.146l-3.5-3.5a.5.5 0 01.708-.708L6 7.618l3.146-3.147a.5.5 0 01.708.708l-3.5 3.5A.5.5 0 016 8.825z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 14px center;
  cursor: pointer;
}

/* Phone input: intl-tel-input widget needs extra left padding for the flag */
.grn-register-form .grn-input-wrap--phone .intl-tel-input {
  width: 100%;
}

.grn-register-form .grn-input-wrap--phone .intl-tel-input .form-control {
  width: 100%;
  height: 44px !important;
  padding-left: 42px !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-md) !important;
  background: var(--color-card-bg) !important;
  font-family: var(--font-body) !important;
  font-size: 14px !important;
  color: var(--color-text-primary) !important;
}

.grn-register-form .grn-input-wrap--phone .intl-tel-input .form-control:focus {
  border-color: var(--color-border-focus) !important;
  box-shadow: var(--shadow-focus) !important;
}

/* When intl-tel-input adds its flag dropdown, push the icon + input text right */
.grn-register-form .grn-input-wrap--phone .intl-tel-input.separate-dial-code .form-control {
  padding-left: 90px !important;
}

.grn-register-form .grn-input-wrap--phone .grn-input-icon {
  display: none;
}

/* --- Password Tools Row --- */
.grn-register-row--password-tools {
  align-items: center;
  margin-bottom: var(--space-md);
}

.grn-register-row--password-tools .generate-password {
  border-radius: var(--radius-sm);
  font-size: 13px;
  border-color: var(--color-border);
}

.password-strength-meter .progress {
  border-radius: var(--radius-pill);
  height: 4px;
  overflow: hidden;
}

/* --- Existing account prompt --- */
.grn-register-existing {
  background: var(--color-page-bg);
  border-radius: var(--radius-md);
  padding: var(--space-sm) var(--space-md);
  margin-bottom: var(--space-2xl);
  font-size: 14px;
  color: var(--color-text-secondary);
  text-align: center;
}

.grn-register-sep {
  color: var(--color-border);
  margin: 0 var(--space-xs);
}

/* --- Mailing list text --- */
.grn-register-mailing-text {
  font-size: 14px;
  color: var(--color-text-secondary);
  margin-bottom: var(--space-md);
}

/* --- Submit button --- */
.grn-register-submit {
  margin-top: var(--space-2xl);
}

.grn-btn-register {
  width: 100%;
  height: 48px;
  font-size: 16px;
}

/* --- TOS checkbox --- */
.grn-tos-wrap {
  margin-top: var(--space-lg);
}

/* --- Form hints for custom fields --- */
.grn-form-hint {
  display: block;
  font-size: 12px;
  color: var(--color-text-muted);
  margin-top: 4px;
}

/* ============================================================
   12. FOOTER
   ============================================================ */
.grn-footer {
  border-top: 1px solid var(--color-border);
  padding: var(--space-lg) var(--space-xl);
  margin-top: auto;
  flex-shrink: 0;
}

.grn-footer-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  max-width: var(--layout-content-max-width);
  gap: var(--space-md);
}

.grn-copyright {
  font-size: 13px;
  color: var(--color-text-muted);
  margin: 0;
}

.grn-footer-links {
  display: flex;
  align-items: center;
  gap: var(--space-md);
  list-style: none;
  margin: 0;
  padding: 0;
}

.grn-footer-links li {
  margin: 0;
}

.grn-footer-links a {
  font-size: 13px;
  color: var(--color-text-secondary);
  text-decoration: none !important;
  transition: color var(--duration-fast) var(--ease-default);
}

.grn-footer-links a:hover {
  color: var(--color-primary-dark);
}

.grn-footer-lang-btn {
  background: none;
  border: none;
  font-size: 13px;
  color: var(--color-text-secondary);
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: var(--space-2xs);
  padding: 0;
  font-family: var(--font-body);
  transition: color var(--duration-fast) var(--ease-default);
}

.grn-footer-lang-btn:hover {
  color: var(--color-primary-dark);
}

/* ============================================================
   13. BOOTSTRAP / WHMCS OVERRIDES
   ============================================================ */

/* --- Cards --- */
.card {
  border: none !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}

.card-header {
  background: var(--color-card-bg) !important;
  border-bottom: 1px solid var(--color-border) !important;
  padding: var(--space-md) var(--space-lg) !important;
}

.card-body {
  padding: var(--space-lg) !important;
}

.card-footer {
  background: rgba(245, 245, 240, 0.5) !important;
  border-top: 1px solid var(--color-border) !important;
  padding: var(--space-sm) var(--space-lg) !important;
}

.card-title {
  font-family: var(--font-heading) !important;
  font-size: 16px !important;
  font-weight: 600 !important;
  color: var(--color-text-primary) !important;
  margin: 0 !important;
}

/* --- Buttons --- */
.btn-primary,
.btn-primary:not(:disabled):not(.disabled) {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-sidebar-active-text) !important;
  border-radius: var(--radius-md) !important;
  font-weight: 600 !important;
  font-family: var(--font-body) !important;
  transition: background var(--duration-fast) var(--ease-default),
              transform var(--duration-instant) var(--ease-default) !important;
}

.btn-primary:hover,
.btn-primary:not(:disabled):not(.disabled):hover {
  background-color: var(--color-primary-dark) !important;
  border-color: var(--color-primary-dark) !important;
  color: var(--color-sidebar-active-text) !important;
}

.btn-primary:focus,
.btn-primary:not(:disabled):not(.disabled):focus {
  box-shadow: var(--shadow-focus) !important;
}

.btn-primary:active,
.btn-primary:not(:disabled):not(.disabled):active {
  transform: scale(0.97);
}

.btn-default,
.btn-secondary {
  background: var(--color-card-bg) !important;
  border: 1px solid var(--color-border) !important;
  color: var(--color-text-primary) !important;
  border-radius: var(--radius-md) !important;
  font-family: var(--font-body) !important;
}

.btn-default:hover,
.btn-secondary:hover {
  background: var(--color-primary-subtle) !important;
  border-color: var(--color-primary) !important;
}

.btn-danger {
  background-color: var(--color-error) !important;
  border-color: var(--color-error) !important;
  color: var(--color-text-inverse) !important;
  border-radius: var(--radius-md) !important;
}

.btn-danger:hover {
  background-color: #B91C1C !important;
  border-color: #B91C1C !important;
}

.btn-success {
  background-color: var(--color-success) !important;
  border-color: var(--color-success) !important;
  color: var(--color-text-inverse) !important;
  border-radius: var(--radius-md) !important;
}

.btn-info {
  background-color: var(--color-info) !important;
  border-color: var(--color-info) !important;
  color: var(--color-text-inverse) !important;
  border-radius: var(--radius-md) !important;
}

/* --- Form Controls --- */
.form-control {
  border-radius: var(--radius-md) !important;
  border-color: var(--color-border) !important;
  font-family: var(--font-body) !important;
  font-size: 14px !important;
  height: 42px !important;
  padding: 0 var(--space-md) !important;
  color: var(--color-text-primary) !important;
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default) !important;
}

.form-control:focus {
  border-color: var(--color-border-focus) !important;
  box-shadow: var(--shadow-focus) !important;
}

.form-control::placeholder {
  color: var(--color-text-muted) !important;
}

textarea.form-control {
  height: auto !important;
  padding: var(--space-sm) var(--space-md) !important;
}

.input-group-text {
  background: var(--color-page-bg) !important;
  border-color: var(--color-border) !important;
  color: var(--color-text-muted) !important;
  border-radius: var(--radius-md) !important;
}

/* --- Tables --- */
.table {
  font-family: var(--font-body);
}

.table thead th {
  font-size: 12px !important;
  font-weight: 600 !important;
  color: var(--color-text-secondary) !important;
  text-transform: uppercase !important;
  letter-spacing: 0.02em !important;
  border-bottom: 1px solid var(--color-border) !important;
  border-top: none !important;
  padding: var(--space-sm) var(--space-md) !important;
  background: transparent !important;
}

.table td {
  padding: var(--space-sm) var(--space-md) !important;
  border-bottom: 1px solid var(--color-border) !important;
  border-top: none !important;
  vertical-align: middle !important;
  font-size: 14px !important;
  color: var(--color-text-primary) !important;
}

.table tbody tr:hover {
  background: var(--color-primary-subtle) !important;
}

.table tbody tr:last-child td {
  border-bottom: none !important;
}

/* --- Badges --- */
.badge {
  border-radius: var(--radius-pill) !important;
  padding: 3px 10px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
  font-family: var(--font-body) !important;
}

.badge-success,
.badge-active,
.bg-color-green {
  background: var(--color-success-light) !important;
  color: var(--color-success) !important;
}

.badge-danger,
.bg-color-red {
  background: var(--color-error-light) !important;
  color: var(--color-error) !important;
}

.badge-warning,
.bg-color-gold {
  background: var(--color-warning-light) !important;
  color: var(--color-warning) !important;
}

.badge-info,
.bg-color-blue {
  background: var(--color-info-light) !important;
  color: var(--color-info) !important;
}

.badge-secondary {
  background: #F3F4F6 !important;
  color: var(--color-text-secondary) !important;
}

/* --- Alerts --- */
.alert {
  border-radius: var(--radius-md) !important;
  border: none !important;
  font-size: 14px;
  font-family: var(--font-body);
}

.alert-success {
  background: var(--color-success-light) !important;
  color: #166534 !important;
  border-left: 4px solid var(--color-success) !important;
}

.alert-danger {
  background: var(--color-error-light) !important;
  color: #991B1B !important;
  border-left: 4px solid var(--color-error) !important;
}

.alert-warning {
  background: var(--color-warning-light) !important;
  color: #92400E !important;
  border-left: 4px solid var(--color-warning) !important;
}

.alert-info {
  background: var(--color-info-light) !important;
  color: #1E40AF !important;
  border-left: 4px solid var(--color-info) !important;
}

/* --- Modals --- */
.modal-content {
  border: none !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-lg) !important;
  overflow: hidden;
}

.modal-header {
  border-bottom: 1px solid var(--color-border) !important;
  padding: var(--space-md) var(--space-lg) !important;
}

.modal-header .modal-title {
  font-family: var(--font-heading) !important;
  font-size: 18px !important;
  font-weight: 600 !important;
}

.modal-body {
  padding: var(--space-lg) !important;
}

.modal-footer {
  border-top: 1px solid var(--color-border) !important;
  padding: var(--space-sm) var(--space-lg) !important;
}

/* --- Pagination --- */
.pagination {
  gap: 4px;
}

.page-link {
  border-radius: var(--radius-sm) !important;
  border: 1px solid var(--color-border) !important;
  color: var(--color-text-primary) !important;
  font-family: var(--font-body) !important;
  font-size: 13px !important;
  padding: var(--space-xs) var(--space-sm) !important;
  transition: all var(--duration-fast) var(--ease-default) !important;
}

.page-link:hover {
  background: var(--color-primary-subtle) !important;
  border-color: var(--color-primary) !important;
}

.page-item.active .page-link {
  background: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-sidebar-active-text) !important;
}

/* --- List Group --- */
.list-group-item {
  border-color: var(--color-border) !important;
  font-family: var(--font-body);
  transition: background var(--duration-fast) var(--ease-default);
}

.list-group-item:hover,
.list-group-item-action:hover {
  background: var(--color-primary-subtle) !important;
}

.list-group-item.active {
  background: var(--color-primary-subtle) !important;
  border-color: var(--color-border) !important;
  color: var(--color-text-primary) !important;
  border-left: 3px solid var(--color-primary) !important;
}

/* --- Tabs --- */
.nav-tabs {
  border-bottom: 1px solid var(--color-border) !important;
}

.nav-tabs .nav-link {
  border: none !important;
  border-bottom: 2px solid transparent !important;
  color: var(--color-text-secondary) !important;
  font-family: var(--font-body);
  font-size: 14px;
  font-weight: 500;
  padding: var(--space-sm) var(--space-md) !important;
  border-radius: 0 !important;
  transition: color var(--duration-fast) var(--ease-default),
              border-color var(--duration-fast) var(--ease-default) !important;
}

.nav-tabs .nav-link:hover {
  border-bottom-color: var(--color-text-muted) !important;
  color: var(--color-text-primary) !important;
}

.nav-tabs .nav-link.active {
  border-bottom-color: var(--color-primary) !important;
  color: var(--color-text-primary) !important;
  background: none !important;
  font-weight: 600;
}

/* --- Status labels used by WHMCS --- */
.label-active,
.label-success {
  background: var(--color-success-light) !important;
  color: var(--color-success) !important;
  border-radius: var(--radius-pill) !important;
  padding: 3px 10px !important;
  font-size: 12px !important;
  font-weight: 500 !important;
}

.label-overdue,
.label-danger {
  background: var(--color-error-light) !important;
  color: var(--color-error) !important;
  border-radius: var(--radius-pill) !important;
}

.label-pending,
.label-warning {
  background: var(--color-warning-light) !important;
  color: var(--color-warning) !important;
  border-radius: var(--radius-pill) !important;
}

.label-default,
.label-info {
  background: var(--color-info-light) !important;
  color: var(--color-info) !important;
  border-radius: var(--radius-pill) !important;
}

/* --- WHMCS Tiles (override on dashboard) --- */
.tiles {
  display: none !important;
}

/* --- WHMCS default sidebar override --- */
.grn-page-sidebar .sidebar {
  margin-bottom: 0;
}

.grn-page-sidebar .card-sidebar {
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm) !important;
}

.grn-page-sidebar .card-sidebar .card-header {
  background: var(--color-card-bg) !important;
}

.grn-page-sidebar .card-sidebar .list-group-item {
  padding: var(--space-sm) var(--space-lg) !important;
  font-size: 13px !important;
}

/* ============================================================
   14. FOCUS & ACCESSIBILITY
   ============================================================ */
:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
}

.grn-nav-link:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: -2px;
}

/* Skip to main content link (sr only, visible on focus) */
.grn-skip-link {
  position: absolute;
  top: -100%;
  left: var(--space-md);
  background: var(--color-primary);
  color: var(--color-sidebar-active-text);
  padding: var(--space-xs) var(--space-md);
  border-radius: var(--radius-sm);
  font-weight: 600;
  z-index: 9999;
  text-decoration: none;
}

.grn-skip-link:focus {
  top: var(--space-md);
}

/* ============================================================
   14b. CLIENT AREA OVERRIDES
   Fixes for WHMCS-rendered widgets we do not own the .tpl for.
   Strategy: reset Bootstrap .input-group / .btn-group gluing
   and replace with flex + gap. Scoped to client-area panels
   and sidebar cards so the order form / login are untouched.
   ============================================================ */

/* --- Dashboard panel bodies: neutralize .input-group/.btn-group ---
   The dashboard "Register a New Domain", "Your Active Products"
   (cPanel split button), and "Quick Create Email" widgets are
   emitted by WHMCS core hooks, so we cannot rewrite the .tpl.
   Instead we neutralize the Bootstrap grouping here and impose
   a clean flex-with-gap layout. */

/* Register a New Domain widget */
.grn-panel-body .input-group,
.grn-panel-body form > .input-group {
  display: flex !important;
  flex-wrap: wrap;
  align-items: stretch;
  gap: var(--space-xs);
  width: 100%;
}

.grn-panel-body .input-group > .form-control,
.grn-panel-body .input-group > .custom-select {
  flex: 1 1 220px;
  min-width: 0;
  width: auto !important;
  /* Restore full border-radius Bootstrap strips on .input-group children */
  border-radius: var(--radius-md) !important;
  margin: 0 !important;
}

.grn-panel-body .input-group .input-group-prepend,
.grn-panel-body .input-group .input-group-append {
  display: inline-flex;
  align-items: stretch;
  gap: var(--space-xs);
  margin: 0 !important;
}

.grn-panel-body .input-group .input-group-prepend > .btn,
.grn-panel-body .input-group .input-group-append > .btn,
.grn-panel-body .input-group > .btn {
  border-radius: var(--radius-md) !important;
  margin: 0 !important;
  height: 42px;
  padding: 0 var(--space-md);
  white-space: nowrap;
}

.grn-panel-body .input-group .input-group-prepend > .input-group-text,
.grn-panel-body .input-group .input-group-append > .input-group-text {
  border-radius: var(--radius-md) !important;
  margin: 0 !important;
}

/* Any btn-group inside a panel body (e.g. "Log in to cPanel" split button)
   renders as flex+gap rather than Bootstrap's glued siblings. */
.grn-panel-body .btn-group {
  display: inline-flex !important;
  align-items: stretch;
  gap: var(--space-2xs);
  vertical-align: middle;
}

.grn-panel-body .btn-group > .btn,
.grn-panel-body .btn-group > .btn + .btn,
.grn-panel-body .btn-group > .dropdown-toggle,
.grn-panel-body .btn-group > .dropdown-toggle-split {
  border-radius: var(--radius-md) !important;
  margin-left: 0 !important;
  border-left-width: 1px !important;
}

.grn-panel-body .btn-group > .dropdown-toggle-split {
  padding-left: var(--space-sm);
  padding-right: var(--space-sm);
}

/* The caret-only split toggle button (▼) gets a slightly tighter width */
.grn-panel-body .btn-group > .dropdown-toggle::after {
  margin-left: var(--space-2xs);
}

/* Action rows rendered by panels (e.g. "Edit with Sitejet Builder" |
   "Log in to cPanel ▼" | "View Details"). These often come as a series
   of adjacent .btn / .btn-group elements with no wrapper class. We add
   gap between all direct button / button-group children. */
.grn-panel-body > .btn + .btn,
.grn-panel-body > .btn + .btn-group,
.grn-panel-body > .btn-group + .btn,
.grn-panel-body > .btn-group + .btn-group {
  margin-left: var(--space-2xs);
}

/* When a panel body wraps its actions in a generic div, normalize
   inline button + button-group spacing too. */
.grn-panel-body .btn + .btn,
.grn-panel-body .btn + .btn-group,
.grn-panel-body .btn-group + .btn,
.grn-panel-body .btn-group + .btn-group {
  margin-left: var(--space-2xs);
}

/* Quick Create Email widget (inline form: user / @ / domain / password / + Create).
   Rendered as a .form-inline with .form-group children, each containing a single
   control. Bootstrap's .form-inline collapses gaps; re-introduce flex gap. */
.grn-panel-body .form-inline {
  display: flex !important;
  flex-wrap: wrap;
  align-items: stretch;
  gap: var(--space-xs);
}

.grn-panel-body .form-inline .form-group {
  margin-bottom: 0 !important;
  margin-right: 0 !important;
  flex: 1 1 auto;
  min-width: 0;
}

.grn-panel-body .form-inline .form-control,
.grn-panel-body .form-inline .custom-select {
  width: 100%;
  min-width: 0;
  border-radius: var(--radius-md) !important;
}

.grn-panel-body .form-inline .btn {
  border-radius: var(--radius-md) !important;
  white-space: nowrap;
}

/* --- WHMCS core "card" consistency (Invoices/Tickets sidebars) ---
   The sidebar accordions ("0 Invoices Due", "Status", "Billing") are
   rendered as WHMCS Bootstrap .card components. Harmonize them with the
   dashboard panel look. */
body.grn-portal .grn-content .card,
body.grn-portal .grn-content .panel {
  background: var(--color-card-bg) !important;
  border: none !important;
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm) !important;
  overflow: hidden;
  margin-bottom: var(--space-md);
}

body.grn-portal .grn-content .card-header,
body.grn-portal .grn-content .panel-heading {
  background: var(--color-card-bg) !important;
  border-bottom: 1px solid var(--color-border) !important;
  padding: var(--space-md) var(--space-lg) !important;
  font-family: var(--font-heading);
  font-weight: 600;
  color: var(--color-text-primary);
}

body.grn-portal .grn-content .card-body,
body.grn-portal .grn-content .panel-body {
  padding: var(--space-lg) !important;
}

body.grn-portal .grn-content .card-footer,
body.grn-portal .grn-content .panel-footer {
  background: rgba(245, 245, 240, 0.5) !important;
  border-top: 1px solid var(--color-border) !important;
  padding: var(--space-sm) var(--space-lg) !important;
}

/* Accordion chevrons & collapse triggers inside sidebar cards */
body.grn-portal .grn-content .card-header [data-toggle="collapse"],
body.grn-portal .grn-content .card-header a {
  color: var(--color-text-primary) !important;
  text-decoration: none !important;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-xs);
}

/* --- DataTables "Show X entries" length select ---
   Shared rule: applies across Invoices, Support Tickets, Quotes,
   Email History, and any other DataTables-driven list page. */
.dataTables_length label {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  font-size: 13px;
  font-weight: 500;
  color: var(--color-text-secondary);
  margin: 0;
}

.dataTables_length select,
.dataTables_length select.form-control,
.dataTables_length select.custom-select {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  height: 36px !important;
  width: auto !important;
  min-width: 72px;
  padding: 0 32px 0 var(--space-sm) !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-sm) !important;
  background-color: var(--color-card-bg) !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239CA3AF' d='M6 8.825a.5.5 0 01-.354-.146l-3.5-3.5a.5.5 0 01.708-.708L6 7.618l3.146-3.147a.5.5 0 01.708.708l-3.5 3.5A.5.5 0 016 8.825z'/%3E%3C/svg%3E") !important;
  background-repeat: no-repeat !important;
  background-position: right 10px center !important;
  font-size: 13px !important;
  font-family: var(--font-body) !important;
  color: var(--color-text-primary) !important;
  line-height: 1.3 !important;
  cursor: pointer;
}

.dataTables_length select:focus {
  border-color: var(--color-border-focus) !important;
  box-shadow: var(--shadow-focus) !important;
  outline: none !important;
}

/* DataTables search input — match the same design language */
.dataTables_filter label {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  font-size: 13px;
  font-weight: 500;
  color: var(--color-text-secondary);
  margin: 0;
}

.dataTables_filter input,
.dataTables_filter input.form-control {
  height: 36px !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-sm) !important;
  padding: 0 var(--space-md) !important;
  font-size: 13px !important;
}

.dataTables_info {
  font-size: 13px;
  color: var(--color-text-secondary);
  padding-top: var(--space-sm) !important;
}

/* DataTables pagination inherits .pagination styles already defined */
.dataTables_paginate .paginate_button {
  margin: 0 2px;
}

/* --- Account Details: phone number input (intl-tel-input) ---
   The register page already ships intl-tel-input styling scoped to
   .grn-register-form. Apply the same pattern globally for the
   clientareadetails page (and anywhere else the plugin is used). */
body.grn-portal .grn-content .intl-tel-input {
  width: 100%;
  display: block;
}

body.grn-portal .grn-content .intl-tel-input .form-control {
  width: 100%;
  height: 42px !important;
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-md) !important;
  background: var(--color-card-bg) !important;
  font-family: var(--font-body) !important;
  font-size: 14px !important;
  color: var(--color-text-primary) !important;
  /* Default flag-only mode: clear the flag + caret */
  padding-left: 52px !important;
}

/* When the plugin shows the dial code alongside the flag, widen the padding
   so "+1" does not overlap the placeholder/value text. */
body.grn-portal .grn-content .intl-tel-input.separate-dial-code .form-control,
body.grn-portal .grn-content .intl-tel-input.allow-dropdown.separate-dial-code .form-control {
  padding-left: 96px !important;
}

body.grn-portal .grn-content .intl-tel-input .form-control:focus {
  border-color: var(--color-border-focus) !important;
  box-shadow: var(--shadow-focus) !important;
  outline: none !important;
}

/* Flag dropdown positioning: keep inside the rounded input */
body.grn-portal .grn-content .intl-tel-input .flag-container {
  top: 1px;
  bottom: 1px;
  left: 1px;
}

body.grn-portal .grn-content .intl-tel-input .selected-flag {
  padding: 0 var(--space-xs) 0 var(--space-sm);
  border-radius: var(--radius-md) 0 0 var(--radius-md);
  background: transparent;
}

body.grn-portal .grn-content .intl-tel-input .selected-flag:focus,
body.grn-portal .grn-content .intl-tel-input .selected-flag[aria-expanded="true"] {
  background: var(--color-primary-subtle);
  outline: none;
}

/* Country list dropdown */
body.grn-portal .grn-content .intl-tel-input .country-list {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  font-family: var(--font-body);
  font-size: 13px;
}

body.grn-portal .grn-content .intl-tel-input .country-list .country:hover,
body.grn-portal .grn-content .intl-tel-input .country-list .country.highlight {
  background: var(--color-primary-subtle);
}

/* --- Account Details form: general spacing + checkbox rows --- */
body.grn-portal .grn-content form[action*="action=details"] .form-group,
body.grn-portal .grn-content form#frmAccountDetails .form-group {
  margin-bottom: var(--space-md);
}

body.grn-portal .grn-content .form-check,
body.grn-portal .grn-content .checkbox {
  display: flex;
  align-items: flex-start;
  gap: var(--space-xs);
  padding-left: 0;
  margin-bottom: var(--space-xs);
}

body.grn-portal .grn-content .form-check-input,
body.grn-portal .grn-content .checkbox input[type="checkbox"] {
  margin-top: 4px;
  margin-left: 0;
  position: static;
  flex-shrink: 0;
}

body.grn-portal .grn-content .form-check-label,
body.grn-portal .grn-content .checkbox label {
  font-size: 14px;
  color: var(--color-text-primary);
  line-height: 1.5;
  margin: 0;
}

/* --- Mobile: collapse domain register / quick-email rows to a column --- */
@media (max-width: 575.98px) {
  .grn-panel-body .input-group > .form-control,
  .grn-panel-body .input-group > .custom-select,
  .grn-panel-body .input-group .input-group-prepend,
  .grn-panel-body .input-group .input-group-append,
  .grn-panel-body .input-group .input-group-prepend > .btn,
  .grn-panel-body .input-group .input-group-append > .btn,
  .grn-panel-body .input-group > .btn,
  .grn-panel-body .form-inline .form-group,
  .grn-panel-body .form-inline .btn {
    flex: 1 1 100%;
    width: 100%;
  }

  .grn-panel-body .btn-group {
    width: 100%;
  }

  .grn-panel-body .btn-group > .btn {
    flex: 1 1 auto;
  }
}

/* ============================================================
   14d. SERVICE DETAIL — QUICK CREATE EMAIL WIDGET
   Target: /clientarea.php?action=productdetails (cPanel product)
   The "Quick Create Email Account" panel renders as a WHMCS core
   .input-group with an <input class="form-control"> + a sibling
   <div class="input-group-addon input-group-append"><span class="input-group-text">
   @domain.tld</span></div>. Globally, our .form-control and
   .input-group-text both carry border-radius:12px (see 08/form
   styles), so they paint as two separate pills with a visible seam.
   Scope a rule under #cPanelQuickEmailPanel to fuse them into one
   continuous rounded input with an internal divider only. The
   domain suffix stays non-editable (just a visual chip).
   ============================================================ */
#cPanelQuickEmailPanel .input-group {
  /* Treat the whole group as a single field: one outer border, one radius */
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-card-bg);
  overflow: hidden; /* clip children's corners to the outer radius */
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

/* Raise focus state on the whole group when the prefix input focuses */
#cPanelQuickEmailPanel .input-group:focus-within {
  border-color: var(--color-border-focus);
  box-shadow: var(--shadow-focus);
}

/* Input: kill its own border and radius; inherit from the group */
#cPanelQuickEmailPanel .input-group > .form-control {
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  background: transparent !important;
  height: 40px; /* slightly inside the 42px group so borders don't double */
}

#cPanelQuickEmailPanel .input-group > .form-control:focus {
  /* the group handles the focus ring via :focus-within */
  border: 0 !important;
  box-shadow: none !important;
}

/* Domain suffix chip: internal divider only, no outer rounding */
#cPanelQuickEmailPanel .input-group .input-group-append,
#cPanelQuickEmailPanel .input-group .input-group-addon {
  margin: 0 !important;
  display: flex;
  align-items: stretch;
}

#cPanelQuickEmailPanel .input-group .input-group-text {
  border: 0 !important;
  border-left: 1px solid var(--color-border) !important; /* the internal divider */
  border-radius: 0 !important;
  background: var(--color-page-bg) !important;
  color: var(--color-text-muted) !important;
  padding: 0 var(--space-md) !important;
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
}

#cPanelQuickEmailPanel .input-group .input-group-text small {
  font-size: 13px;
  line-height: 1;
}

/* Mobile: at <=375px, keep username + domain on the same row (looks unified)
   but if the container is too tight, let the group wrap cleanly — the outer
   border still scopes both children as one visual unit. */
@media (max-width: 575.98px) {
  #cPanelQuickEmailPanel .input-group {
    flex-wrap: nowrap; /* keep prefix + domain side-by-side; the form's other
                          columns (password, Create) already stack via .col-md-3 */
  }
  #cPanelQuickEmailPanel .input-group > .form-control {
    min-width: 0; /* allow the input to shrink inside the group */
  }
  #cPanelQuickEmailPanel .input-group .input-group-text {
    padding: 0 var(--space-sm) !important;
  }
}

/* --- Service detail: WordPress "Create New" widget row spacing ---
   #cPanelWordPress uses .row > .col-md-3 * 4 (Blog Title | Path | Admin
   Password | + Install). At <768px those cols stack to full-width with
   zero vertical gap between them — each rounded field visually glues
   to the next. Add a standard breathing-room margin under each col so
   the stacked rows read as separate fields; zero the last one so the
   panel-body padding handles the edge. At md+ the columns sit on a
   single line so the margin-bottom adds only trivial breathing space
   beneath the widget. */
#cPanelWordPress .row > .col-md-3 {
  margin-bottom: var(--space-sm);
}

#cPanelWordPress .row > .col-md-3:last-child {
  margin-bottom: 0;
}

/* ------------------------------------------------------------
   ROUND 2: Account Details + User Management + Add Contact
   ------------------------------------------------------------
   1 & 3. Email preferences checkboxes render as inline labels
   wrapping mid-label. WHMCS core markup on /clientarea.php?action=details
   and /clientarea.php?action=contacts is:
     div.card-body > label.control-label
                   > div.controls.form-check > label > input[type=checkbox]
   Force every .form-check inside a card-body to a full-width block
   so each checkbox + label sits on its own line. Scoped to the
   client area only so order form / login aren't affected.
   ------------------------------------------------------------ */
body.grn-portal .grn-content .card-body .form-check,
body.grn-portal .grn-content .card-body .controls.form-check,
body.grn-portal .grn-content .card-body .checkbox {
  display: block;
  width: 100%;
  margin: 0 0 0.5rem 0;
  padding-left: 0;
}

body.grn-portal .grn-content .card-body .form-check > label,
body.grn-portal .grn-content .card-body .controls.form-check > label,
body.grn-portal .grn-content .card-body .checkbox > label {
  display: flex;
  align-items: flex-start;
  gap: 0.5rem;
  width: 100%;
  margin: 0;
  font-weight: 400;
  line-height: 1.4;
  cursor: pointer;
}

body.grn-portal .grn-content .card-body .form-check > label > input[type="checkbox"],
body.grn-portal .grn-content .card-body .controls.form-check > label > input[type="checkbox"],
body.grn-portal .grn-content .card-body .checkbox > label > input[type="checkbox"] {
  flex: 0 0 auto;
  margin: 3px 0 0 0;
  position: static;
}

/* Last row: drop bottom margin so card-body padding carries cleanly. */
body.grn-portal .grn-content .card-body .form-check:last-child,
body.grn-portal .grn-content .card-body .controls.form-check:last-child,
body.grn-portal .grn-content .card-body .checkbox:last-child {
  margin-bottom: 0;
}

/* ------------------------------------------------------------
   2. User Management action buttons glued together
   ------------------------------------------------------------
   WHMCS /index.php?rp=/account/users renders two sibling anchors
   inside a <td>: a.btn-manage-permissions + a.btn-remove-user.
   They have zero margin and no wrapper .btn-group. The td is
   the same width as one button, so they wrap to two rows.
   Give them a small top gap so the wrap looks intentional and
   keep both buttons flush-left (no horizontal offset). Other
   adjacent btn pairs in client-area table cells get the standard
   horizontal 0.5rem gap. */
body.grn-portal .grn-content td > a.btn + a.btn,
body.grn-portal .grn-content td > button.btn + button.btn,
body.grn-portal .grn-content td > a.btn + button.btn,
body.grn-portal .grn-content td > button.btn + a.btn {
  margin-left: 0.5rem;
}

/* Specific to User Management rows: stack cleanly inside the narrow td.
   Use equal-or-higher specificity than the generic td > a.btn + a.btn rule
   above; tag + two classes beats tag + class + class. */
body.grn-portal .grn-content td > a.btn-manage-permissions + a.btn-remove-user,
body.grn-portal .grn-content td a.btn-manage-permissions + a.btn-remove-user {
  margin-left: 0;
  margin-top: 0.35rem;
}

/* On narrow viewports let other adjacent btns wrap with a bottom gap too. */
@media (max-width: 575px) {
  body.grn-portal .grn-content td > a.btn,
  body.grn-portal .grn-content td > button.btn {
    margin-bottom: 0.35rem;
  }
}

/* ------------------------------------------------------------
   4. Card-title breathing room inside card-body
   ------------------------------------------------------------
   Some WHMCS cards render the section title as <h3 class="card-title">
   INSIDE the .card-body (instead of a .card-header). Examples:
   Email Preferences + Join our mailing list on clientarea?action=details.
   Without a bottom margin the title sits flush against the first
   form control / checkbox. Give every in-body card-title a
   consistent bottom gap. Scoped to the client area so order-form /
   login aren't touched.
   ------------------------------------------------------------ */
body.grn-portal .grn-content .card-body > .card-title,
body.grn-portal .grn-content .card-body > h1.card-title,
body.grn-portal .grn-content .card-body > h2.card-title,
body.grn-portal .grn-content .card-body > h3.card-title,
body.grn-portal .grn-content .card-body > h4.card-title,
body.grn-portal .grn-content .card-body > h5.card-title,
body.grn-portal .grn-content .card-body > h6.card-title {
  /* !important is required to beat the earlier .card-title { margin: 0 !important } */
  margin-top: 0 !important;
  margin-bottom: var(--space-md) !important;
}

/* ============================================================
   14c. NAMESERVERS CARD
   Service Details page — dedicated "Nameservers" block rendered
   at the top of the Overview tab. Sits inside our existing
   .grn-panel container so it inherits our card chrome; these
   rules only style the content *inside*. See
   clientareaproductdetails.tpl (GRN override).
   ============================================================ */
.grn-ns-card {
  /* Give the card noticeable top air inside the tab content so it
     reads as the primary element of the page. */
  margin-top: var(--space-sm);
  margin-bottom: var(--space-xl);
}

.grn-ns-card .grn-panel-title i {
  /* The server icon should pick up our primary accent to signal
     this is a GRN-branded card (vs WHMCS default panels). */
  color: var(--color-primary-dark);
}

.grn-ns-card__lead {
  margin: 0 0 var(--space-md);
  font-size: 14px;
  line-height: 1.5;
  color: var(--color-text-secondary);
}

.grn-ns-list {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-md);
  display: flex;
  flex-direction: column;
  gap: var(--space-xs);
}

.grn-ns-row {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  padding: var(--space-sm) var(--space-md);
  background: var(--color-page-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  transition: border-color var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.grn-ns-row:hover {
  border-color: var(--color-primary);
  box-shadow: var(--shadow-xs);
}

.grn-ns-row__label {
  flex: 0 0 auto;
  min-width: 36px;
  font-family: var(--font-heading);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--color-text-secondary);
}

.grn-ns-row__host {
  flex: 1 1 auto;
  min-width: 0;
  /* Monospace + subtle surface so the hostname reads as a literal
     value to paste into the registrar, not decorative text. */
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo,
               Consolas, "Liberation Mono", monospace;
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text-primary);
  background: var(--color-card-bg);
  padding: 6px 10px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--color-border);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  user-select: all; /* one-click double-click selects the whole hostname */
}

.grn-ns-copy {
  /* Scoped button reset so Bootstrap .btn defaults don't mangle
     our pill. Mirrors the pill-button pattern used elsewhere. */
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
  min-width: 92px;
  justify-content: center;
  padding: 6px 14px;
  background: var(--color-card-bg);
  color: var(--color-text-primary);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-pill);
  font-family: var(--font-body);
  font-size: 13px;
  font-weight: 500;
  line-height: 1.2;
  cursor: pointer;
  transition: background var(--duration-fast) var(--ease-default),
              border-color var(--duration-fast) var(--ease-default),
              color var(--duration-fast) var(--ease-default),
              transform var(--duration-fast) var(--ease-default);
}

.grn-ns-copy:hover {
  background: var(--color-primary-subtle);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

.grn-ns-copy:active {
  transform: translateY(1px);
}

.grn-ns-copy:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
  border-color: var(--color-primary);
}

.grn-ns-copy i {
  font-size: 12px;
}

/* Two-state label: default "Copy" swaps to "Copied!" via
   `.is-copied` class toggled by the inline script in the tpl. */
.grn-ns-copy__idle,
.grn-ns-copy__done {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
}

.grn-ns-copy__done {
  display: none;
  color: var(--color-success);
  font-weight: 600;
}

.grn-ns-copy.is-copied {
  background: var(--color-success-light);
  border-color: var(--color-success);
  color: var(--color-success);
}

.grn-ns-copy.is-copied .grn-ns-copy__idle {
  display: none;
}

.grn-ns-copy.is-copied .grn-ns-copy__done {
  display: inline-flex;
}

.grn-ns-card__help {
  margin: 0;
  font-size: 13px;
}

.grn-ns-card__help-link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
  color: var(--color-text-secondary);
  text-decoration: none !important;
  transition: color var(--duration-fast) var(--ease-default);
}

.grn-ns-card__help-link:hover,
.grn-ns-card__help-link:focus {
  color: var(--color-primary-dark);
}

/* --- NS card mobile layout ---
   On narrow viewports the NS1/NS2 row would overflow the card
   (long hostname + copy button). Stack label+host on a top row
   and put the Copy button full-width underneath. */
@media (max-width: 575px) {
  .grn-ns-row {
    flex-wrap: wrap;
    gap: var(--space-xs);
  }
  .grn-ns-row__host {
    /* Hostname takes remaining width next to the label */
    flex: 1 1 0;
  }
  .grn-ns-copy {
    /* Copy drops to its own full-width line */
    flex: 1 1 100%;
    min-width: 0;
  }
}

/* ============================================================
   15. RESPONSIVE - Tablet (768px - 1023px)
   ============================================================ */
@media (max-width: 1023px) and (min-width: 768px) {
  /* Sidebar hidden by default on tablet too */
  .grn-sidebar {
    transform: translateX(-100%);
  }

  .grn-sidebar.open {
    transform: translateX(0);
  }

  .grn-main-wrapper {
    margin-left: 0;
    padding-top: var(--layout-mobile-topbar-height);
  }

  .grn-mobile-topbar {
    display: flex !important;
  }

  .grn-topbar {
    display: none;
  }

  .grn-content {
    padding: var(--space-lg);
  }

  .grn-page-with-sidebar {
    grid-template-columns: 1fr;
  }

  .grn-page-sidebar {
    display: none !important;
  }

  .grn-panels-grid {
    grid-template-columns: 1fr 1fr;
  }

  .grn-stats-grid {
    grid-template-columns: repeat(2, 1fr);
  }

  .grn-welcome-heading {
    font-size: 24px;
  }

  /* Login page */
  .grn-login-brand-side {
    display: none;
  }

  .grn-login-form-side {
    flex: 1;
  }

  body.grn-login-page .grn-main-wrapper {
    margin-left: 0;
  }

  body.grn-login-page .grn-mobile-topbar {
    display: none !important;
  }

  /* Register page */
  .grn-register-wrapper .grn-login-brand-side {
    display: none;
  }

  .grn-register-form-side {
    flex: 1;
  }

  body.grn-register-page .grn-main-wrapper {
    margin-left: 0;
  }

  body.grn-register-page .grn-mobile-topbar {
    display: none !important;
  }

  .grn-register-row--address {
    flex-wrap: wrap;
  }

  .grn-register-row--address .grn-register-col-third {
    flex: 0 0 calc(50% - 8px);
  }

  .grn-register-row--address .grn-register-col-third:last-child {
    flex: 0 0 100%;
  }
}

/* ============================================================
   16. RESPONSIVE - Mobile (< 768px)
   ============================================================ */
@media (max-width: 767px) {
  .grn-sidebar {
    transform: translateX(-100%);
    width: 280px;
  }

  .grn-sidebar.open {
    transform: translateX(0);
  }

  .grn-main-wrapper {
    margin-left: 0;
    padding-top: var(--layout-mobile-topbar-height);
  }

  .grn-topbar {
    display: none;
  }

  .grn-content {
    padding: var(--space-md);
  }

  /* Dashboard */
  .grn-welcome {
    flex-direction: column;
    gap: var(--space-sm);
  }

  .grn-welcome-heading {
    font-size: 22px;
  }

  .grn-welcome-date {
    align-self: flex-start;
  }

  .grn-stats-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: var(--space-sm);
  }

  .grn-stat-card {
    padding: var(--space-md);
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-sm);
  }

  .grn-stat-number {
    font-size: 28px;
  }

  .grn-stat-arrow {
    display: none;
  }

  /* Panels */
  .grn-panels-grid {
    grid-template-columns: 1fr;
  }

  .grn-page-with-sidebar {
    grid-template-columns: 1fr;
  }

  .grn-page-sidebar {
    display: none !important;
  }

  /* Login */
  .grn-login-brand-side {
    display: none;
  }

  .grn-login-form-side {
    padding: var(--space-xl) var(--space-md);
  }

  .grn-login-title {
    font-size: 24px;
  }

  body.grn-login-page .grn-main-wrapper {
    margin-left: 0;
  }

  body.grn-login-page .grn-mobile-topbar {
    display: none !important;
  }

  /* Register */
  .grn-register-wrapper .grn-login-brand-side {
    display: none;
  }

  .grn-register-form-side {
    padding: var(--space-lg) var(--space-md);
  }

  .grn-register-form-container {
    max-width: 100%;
  }

  .grn-register-section-title {
    font-size: 16px;
  }

  body.grn-register-page .grn-main-wrapper {
    margin-left: 0;
    padding-top: 0;
  }

  body.grn-register-page .grn-mobile-topbar {
    display: none !important;
  }

  /* Stack two-column rows on mobile */
  .grn-register-row {
    flex-direction: column;
    gap: 0;
  }

  .grn-register-row--password-tools {
    flex-direction: column;
    gap: var(--space-sm);
    align-items: flex-start;
  }

  /* Footer */
  .grn-footer-inner {
    flex-direction: column;
    text-align: center;
    gap: var(--space-sm);
  }

  .grn-footer-links {
    flex-wrap: wrap;
    justify-content: center;
  }

  /* Tables responsive */
  .table-responsive {
    border: none !important;
  }
}

/* ============================================================
   17. RESPONSIVE - Desktop (1024px+)
   ============================================================ */
@media (min-width: 1024px) {
  .grn-sidebar {
    transform: none;
  }

  .grn-mobile-topbar {
    display: none !important;
  }

  .grn-sidebar-close {
    display: none;
  }

  .grn-sidebar-overlay {
    display: none !important;
  }

  .grn-main-wrapper {
    margin-left: var(--layout-sidebar-width);
    padding-top: 0;
  }
}

/* Large Desktop */
@media (min-width: 1440px) {
  :root {
    --layout-sidebar-width: 280px;
  }

  .grn-stats-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* ============================================================
   18. PRINT STYLES
   ============================================================ */
@media print {
  .grn-sidebar,
  .grn-mobile-topbar,
  .grn-topbar,
  .grn-sidebar-overlay,
  .grn-footer {
    display: none !important;
  }

  .grn-main-wrapper {
    margin-left: 0 !important;
    padding-top: 0 !important;
  }

  .grn-content {
    padding: 0 !important;
    max-width: none !important;
  }

  body.grn-portal {
    background: white !important;
  }
}

/* ============================================================
   19. REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   20. WHMCS PAGE-SPECIFIC OVERRIDES
   ============================================================ */

/* Support ticket view */
.ticket-reply {
  border-radius: var(--radius-md) !important;
  border: 1px solid var(--color-border) !important;
  margin-bottom: var(--space-md) !important;
}

.ticket-reply .card-header {
  background: var(--color-page-bg) !important;
}

/* Invoice view */
.invoice-container {
  background: var(--color-card-bg);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  padding: var(--space-xl);
}

/* Domain search */
.domain-search-form .form-control {
  height: 48px !important;
  font-size: 16px !important;
  border-radius: var(--radius-md) 0 0 var(--radius-md) !important;
}

.domain-search-form .btn {
  height: 48px;
  border-radius: 0 var(--radius-md) var(--radius-md) 0 !important;
}

/* Product/service details */
.product-details-tab-container .nav-link {
  font-size: 14px;
}

/* Cart overrides */
.order-summary {
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm) !important;
}

/* Register page form */
.register-form .form-group label {
  font-size: 14px;
  font-weight: 500;
  color: var(--color-text-primary);
  margin-bottom: 6px;
}

/* Password strength */
.pw-strength-bar {
  border-radius: var(--radius-pill);
  height: 4px;
  overflow: hidden;
}

/* Notifications popover */
.client-alerts {
  list-style: none;
  padding: 0;
  margin: 0;
}

.client-alerts li {
  padding: var(--space-sm) var(--space-md);
  border-bottom: 1px solid var(--color-border);
}

.client-alerts li:last-child {
  border-bottom: none;
}

.client-alerts li a {
  display: flex;
  align-items: flex-start;
  gap: var(--space-xs);
  color: var(--color-text-primary);
  text-decoration: none;
  font-size: 13px;
}

.client-alerts li a:hover {
  color: var(--color-primary-dark);
}

.client-alerts .message {
  flex: 1;
}

/* WHMCS "tiles" on homepage -- we hide them and use our own stat cards */
.client-home-cards {
  /* Keep visibility for the panels */
}

/* Announcement styling */
.announcement-single .card {
  border-radius: var(--radius-lg) !important;
}

/* Knowledgebase */
.kb-article {
  font-size: 15px;
  line-height: 1.7;
}

.kb-article h2 {
  font-size: 22px;
  margin-top: var(--space-2xl);
}

.kb-article h3 {
  font-size: 18px;
  margin-top: var(--space-xl);
}

/* ============================================================
   21. WHMCS POPOVER OVERRIDES
   ============================================================ */
.popover {
  border: 1px solid var(--color-border) !important;
  border-radius: var(--radius-md) !important;
  box-shadow: var(--shadow-lg) !important;
  font-family: var(--font-body) !important;
}

.popover-header {
  background: var(--color-page-bg) !important;
  border-bottom: 1px solid var(--color-border) !important;
  font-family: var(--font-heading) !important;
  font-weight: 600 !important;
}

.popover-body {
  padding: 0 !important;
}

/* ============================================================
   22. WHMCS STORE / CART OVERRIDES
   ============================================================ */
.store-product-group .product {
  border-radius: var(--radius-lg) !important;
  box-shadow: var(--shadow-sm) !important;
  border: none !important;
  transition: transform var(--duration-fast) var(--ease-default),
              box-shadow var(--duration-fast) var(--ease-default);
}

.store-product-group .product:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md) !important;
}

.store-product-group .product .product-price {
  font-family: var(--font-heading);
  font-size: 28px;
  font-weight: 700;
  color: var(--color-text-primary);
}

.store-product-group .product .product-price .period {
  font-size: 14px;
  font-weight: 400;
  color: var(--color-text-secondary);
}

/* Shopping cart */
.view-cart-items-header {
  font-family: var(--font-heading) !important;
}

.order-summary .order-summary-header {
  background: var(--color-sidebar-bg) !important;
  color: var(--color-text-inverse) !important;
  border-radius: var(--radius-lg) var(--radius-lg) 0 0 !important;
}

/* Checkout */
.btn-checkout {
  background: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-sidebar-active-text) !important;
  font-size: 16px !important;
  padding: var(--space-sm) var(--space-xl) !important;
  border-radius: var(--radius-md) !important;
  font-weight: 600 !important;
}

.btn-checkout:hover {
  background: var(--color-primary-dark) !important;
  border-color: var(--color-primary-dark) !important;
}

/* ============================================================
   23. ADDON SECTION
   ============================================================ */
.grn-addon-section {
  margin-bottom: var(--space-md);
}

.grn-addon-section .card {
  border-radius: var(--radius-lg) !important;
}

/* ============================================================
   24. CAPTCHA WRAPPER
   ============================================================ */
.grn-captcha-wrap {
  margin-top: var(--space-md);
}

.grn-captcha-wrap .g-recaptcha,
.grn-captcha-wrap .h-captcha {
  margin: 0;
}

/* ============================================================
   25. CUSTOM SCROLLBAR (WebKit)
   ============================================================ */
.grn-sidebar::-webkit-scrollbar {
  width: 4px;
}

.grn-sidebar::-webkit-scrollbar-track {
  background: transparent;
}

.grn-sidebar::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.15);
  border-radius: 4px;
}

.grn-sidebar::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.25);
}

/* Firefox */
.grn-sidebar {
  scrollbar-width: thin;
  scrollbar-color: rgba(255, 255, 255, 0.15) transparent;
}

/* ============================================================
   CART MODE - Clean checkout layout
   When body has .grn-cart-mode, hide the dashboard sidebar
   and show a minimal, focused checkout experience
   ============================================================ */

/* Hide the main dashboard sidebar */
body.grn-cart-mode .grn-sidebar {
  display: none !important;
  pointer-events: none !important;
}

/* Completely neutralize the sidebar overlay in cart mode.
   This overlay has position:fixed; inset:0; z-index:1035 which can
   intercept touch events on iOS even when visually hidden.
   Move it off-screen and collapse it to prevent any interference. */
body.grn-cart-mode .grn-sidebar-overlay {
  display: none !important;
  pointer-events: none !important;
  visibility: hidden !important;
  position: absolute !important;
  left: -9999px !important;
  width: 0 !important;
  height: 0 !important;
  z-index: -1 !important;
}

/* Remove sidebar offset from main wrapper */
body.grn-cart-mode .grn-main-wrapper {
  margin-left: 0 !important;
  padding-left: 0 !important;
}

/* Hide mobile top bar hamburger (no sidebar to open) */
body.grn-cart-mode .grn-hamburger {
  display: none !important;
}

/* Hide the WHMCS topbar in cart mode — the order form has its own
   branded .grn-header with step indicator, so the dashboard topbar
   (page title / search / login) is redundant and boxes the content. */
body.grn-cart-mode .grn-topbar {
  display: none !important;
}

/* Hide collapsed sidebar (Categories/Actions dropdowns) in cart mode */
body.grn-cart-mode .sidebar-collapsed,
body.grn-cart-mode .grn-page-sidebar-inner,
body.grn-cart-mode .panel-sidebar {
  display: none !important;
}

/* Let the order form control its own layout — remove container constraints */
body.grn-cart-mode .grn-content {
  max-width: none;
  margin: 0;
  padding: 0;
  background: var(--color-page-bg, #F5F5F0);
}

body.grn-cart-mode .grn-main-wrapper {
  background: var(--color-page-bg, #F5F5F0);
}

body.grn-cart-mode .grn-content-inner {
  max-width: none;
  padding: 0;
}

/* Hide the WHMCS page sidebar in cart */
body.grn-cart-mode .grn-page-with-sidebar,
body.grn-cart-mode .grn-page-sidebar {
  display: block !important;
}
body.grn-cart-mode .grn-page-sidebar {
  display: none !important;
}
body.grn-cart-mode .grn-page-main {
  width: 100% !important;
  max-width: 100% !important;
}

/* Hide breadcrumb in cart mode */
body.grn-cart-mode .grn-breadcrumb {
  display: none !important;
}

/* Hide the WHMCS footer in cart mode — the order form has its own footer */
body.grn-cart-mode .grn-footer {
  display: none !important;
}

/* Hide WHMCS's built-in cart sidebar (Categories/Actions panels) */
body.grn-cart-mode #order-grncommerce > .row > .col-md-3,
body.grn-cart-mode #order-grncommerce > .row > .col-lg-3,
body.grn-cart-mode .cart-sidebar,
body.grn-cart-mode .panel-sidebar {
  display: none !important;
}

/* Make cart content full width */
body.grn-cart-mode #order-grncommerce > .row > .col-md-9,
body.grn-cart-mode #order-grncommerce > .row > .col-lg-9 {
  width: 100% !important;
  max-width: 100% !important;
  flex: 0 0 100% !important;
}

/* Clean up cart page headings */
body.grn-cart-mode #order-grncommerce h2 {
  font-family: "Plus Jakarta Sans", sans-serif;
  font-weight: 700;
  color: var(--grn-text-primary, #1A1A2E);
  margin-bottom: 1.5rem;
}

/* Style domain selection inputs in cart */
body.grn-cart-mode .domain-checker-container input[type="text"],
body.grn-cart-mode #frmConfigureDomain input[type="text"] {
  border-radius: 12px;
  border: 2px solid var(--grn-border, #E5E7EB);
  padding: 0.75rem 1rem;
  font-size: 1rem;
  transition: border-color 0.2s;
}
body.grn-cart-mode .domain-checker-container input[type="text"]:focus,
body.grn-cart-mode #frmConfigureDomain input[type="text"]:focus {
  border-color: var(--grn-primary, #C8E64A);
  outline: none;
  box-shadow: 0 0 0 3px rgba(200, 230, 74, 0.2);
}

/* Style buttons in cart */
body.grn-cart-mode .btn-primary,
body.grn-cart-mode .btn-success {
  background: var(--grn-primary, #C8E64A) !important;
  color: var(--grn-text-primary, #1A1A2E) !important;
  border: none !important;
  border-radius: 9999px !important;
  font-weight: 600 !important;
  padding: 0.6rem 2rem !important;
  transition: transform 0.2s, box-shadow 0.2s !important;
}
body.grn-cart-mode .btn-primary:hover,
body.grn-cart-mode .btn-success:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 12px rgba(200, 230, 74, 0.3);
}

/* Card styling in cart */
body.grn-cart-mode .card,
body.grn-cart-mode .panel {
  border: none !important;
  border-radius: 16px !important;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08) !important;
}

/* Hide mobile top bar in cart mode — order form has its own header */
body.grn-cart-mode .grn-mobile-topbar {
  display: none !important;
}

/* ============================================================
   CART MODE - Mobile Responsive (< 768px)
   Fixes: double header, overflow, pill-to-bar, content padding
   ============================================================ */
@media (max-width: 767px) {
  /* Fix 1: Hide the GRNCOMMERCE mobile top bar in cart mode.
     The order form already has its own branded header with steps,
     so showing both creates a stacked double header. */
  body.grn-cart-mode .grn-mobile-topbar {
    display: none !important;
  }

  /* Fix 5: Prevent horizontal overflow on mobile + breathing room from edges */
  body.grn-cart-mode .grn-content {
    padding: 0 16px !important;
    overflow-x: hidden !important;
  }

  #order-grncommerce {
    max-width: 100% !important;
    overflow-x: hidden !important;
  }

  /* Fix 7: Topbar is now hidden in cart mode (display:none above),
     so no mobile pill-to-bar override is needed. */

  /* Fix 8: Prevent "Choose a Domain..." heading from being clipped at left edge */
  body.grn-cart-mode #order-grncommerce h2 {
    padding-left: 4px !important;
    box-sizing: border-box !important;
  }

  /* Fix 9: Ensure all content within .grn-content respects box model */
  body.grn-cart-mode .grn-content * {
    box-sizing: border-box;
  }


  /* Fix 10: CRITICAL — Input fields not activating on tap ---
     The .grn-sidebar-overlay has position:fixed; inset:0; z-index:1035.
     Even with visibility:hidden/display:none, some mobile WebKit engines
     still intercept touch events from fixed-position elements.
     Belt-and-suspenders: hide it, disable pointer events, AND move it
     off-screen so it cannot possibly intercept taps. */
  .grn-sidebar-overlay,
  body.grn-cart-mode .grn-sidebar-overlay,
  #grnSidebarOverlay {
    display: none !important;
    pointer-events: none !important;
    visibility: hidden !important;
    position: absolute !important;
    left: -9999px !important;
    width: 0 !important;
    height: 0 !important;
    z-index: -1 !important;
  }

  /* Ensure all form inputs in the order form receive touch events properly.
     Explicit pointer-events, touch-action, and user-select for iOS Safari. */
  #order-grncommerce .domain-selection-options .option,
  #order-grncommerce .domain-selection-options .option .domain-input-group,
  #order-grncommerce .domain-selection-options .option .form-control,
  #order-grncommerce .domain-selection-options .option textarea,
  #order-grncommerce .domain-selection-options .option input {
    pointer-events: auto !important;
  }

  #order-grncommerce .domain-selection-options .option input[type="text"],
  #order-grncommerce .domain-selection-options .option textarea,
  #order-grncommerce .domain-selection-options .option select {
    -webkit-user-select: text !important;
    user-select: text !important;
    touch-action: manipulation !important;
  }

  /* iOS focus zoom prevention — all focusable form elements must be >= 16px.
     The viewport meta does not include maximum-scale=1, so font-size is the
     only reliable way to prevent iOS Safari from zooming on focus. */
  #order-grncommerce input,
  #order-grncommerce textarea,
  #order-grncommerce select,
  #order-grncommerce .form-control,
  .grn-cart-mode input,
  .grn-cart-mode textarea,
  .grn-cart-mode select,
  .grn-cart-mode .form-control {
    font-size: 16px !important;
  }
}
