/* Relab ERP — Vuexy-style component classes for Tailwind
   These replicate the exact Vuexy Bootstrap admin template look. */

:root {
  --color-primary: #3271E6;
  --color-primary-rgb: 50, 113, 230;
  --color-secondary: #808390;
  --color-success: #28c76f;
  --color-info: #00bad1;
  --color-warning: #ff9f43;
  --color-danger: #ff4c51;
  --color-dark: #2f3349;
  --color-heading: #444050;
  --color-body: #6d6b77;
  --color-body-bg: #f8f7fa;
  --color-paper: #fff;
  --color-border: #e6e6e8;
  --color-muted: #acaab1;
  --color-menu-hover-bg: rgba(0, 0, 0, 0.04);
  --sidebar-width: 260px;

  /* Bootstrap variable aliases — needed by vendor libs (Select2, DataTables, Flatpickr, etc.) */
  --bs-primary: #3271E6;
  --bs-primary-rgb: 50, 113, 230;
  --bs-secondary: #808390;
  --bs-success: #28c76f;
  --bs-danger: #ff4c51;
  --bs-warning: #ff9f43;
  --bs-info: #00bad1;
  --bs-body-color: #6d6b77;
  --bs-body-color-rgb: 109, 107, 119;
  --bs-body-bg: #f8f7fa;
  --bs-body-bg-rgb: 248, 247, 250;
  --bs-heading-color: #444050;
  --bs-border-width: 1px;
  --bs-border-color: #e6e6e8;
  --bs-border-radius: 0.375rem;
  --bs-border-radius-sm: 0.25rem;
  --bs-border-radius-lg: 0.5rem;
  --bs-font-sans-serif: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --bs-gray: #97959e;
  --bs-gray-200: #e6e6e8;
  --bs-gray-300: #c1bfc5;
  --bs-paper-bg: #fff;
  --bs-menu-bg: #fff;
  --bs-menu-bg-rgb: 255, 255, 255;
  --bs-menu-color: #6d6b77;
  --bs-menu-color-rgb: 109, 107, 119;
}

/* ── Base ──
   Body font-family/size/line-height/color/bg already applied by tailwind.css
   @layer base. Only override here when overrides are actually needed. */

/* Always reserve space for the scrollbar so toggling body overflow (modals,
   popovers, dropdowns) doesn't shift the layout. The sidebar is fixed but the
   main content uses margin-left, so any width change of the body content box
   pushes the navbar/page content sideways. */
html { scrollbar-gutter: stable; }

h1, h2, h3, h4, h5, h6 { color: var(--color-heading); font-weight: 600; }
a { color: var(--color-primary); text-decoration: none; }
a:hover { opacity: 0.85; }

/* ── Sidebar ── */
.sidebar-menu {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1040;
  display: flex;
  flex-direction: column;
  width: var(--sidebar-width);
  height: 100vh;
  background-color: var(--color-paper);
  border-right: 1px solid var(--color-border);
  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
}
.sidebar-brand-area {
  padding-left: 20px;
}
/* Brand: single wordmark image clipped horizontally — collapsed shows just the
   icon-portion; expanding the container width slides the "Vendemy" text into
   view. No layout jumps because the icon's left edge stays anchored. */
.sidebar-brand-reveal {
  display: block;
  overflow: hidden;
  width: 120px;
  transition: width 0.3s ease-in-out;
}
.sidebar-brand-reveal img {
  display: block;
  width: 120px;
  max-width: none;
  height: auto;
}
@media (max-width: 1279px) {
  .sidebar-menu { transform: translateX(-100%); width: var(--sidebar-width); }
  .sidebar-menu.sidebar-open { transform: translateX(0); }
  .sidebar-collapse-btn { display: none !important; }
}

.sidebar-link {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.5rem 0.75rem 0.5rem 13px;
  border-radius: 0.375rem;
  font-size: 0.9375rem;
  font-weight: 500;
  min-height: 38px;
  color: var(--color-heading);
  transition: background-color 0.15s, color 0.15s, padding-left 0.3s ease-in-out;
}
.sidebar-link:hover {
  background-color: var(--color-menu-hover-bg);
  color: var(--color-heading);
}
.sidebar-link-active {
  background: linear-gradient(270deg, rgba(var(--color-primary-rgb), 0.7) 0%, var(--color-primary) 100%);
  box-shadow: 0 0.125rem 0.375rem 0 rgba(var(--color-primary-rgb), 0.3);
  color: #fff !important;
}
.sidebar-link-active:hover {
  background: linear-gradient(270deg, rgba(var(--color-primary-rgb), 0.7) 0%, var(--color-primary) 100%);
  color: #fff !important;
}
.sidebar-link-active .sidebar-icon { color: #fff !important; }

.sidebar-link-group-active {
  background-color: rgba(var(--color-primary-rgb), 0.06);
  color: var(--color-heading);
  font-weight: 600;
}

.sidebar-icon {
  width: 1.375rem;
  font-size: 1.375rem;
  flex-shrink: 0;
}
.sidebar-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  line-height: 1.467;
  transition: opacity 0.2s ease-in-out, max-width 0.3s ease-in-out;
  max-width: 200px;
  opacity: 1;
}

.sidebar-chevron {
  flex-shrink: 0;
  transition: transform 0.3s, opacity 0.2s ease-in-out, width 0.3s ease-in-out, margin-left 0.3s ease-in-out;
}

.sidebar-submenu {
  padding-left: 1.25rem;
  margin-top: 0.125rem;
}
.sidebar-sublink {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.375rem 0.75rem;
  border-radius: 0.375rem;
  font-size: 0.875rem;
  color: var(--color-body);
  transition: background-color 0.15s, color 0.15s;
  position: relative;
}
.sidebar-sublink::before {
  content: "";
  position: absolute;
  left: -0.625rem;
  width: 0.75rem;
  height: 0.75rem;
  background-color: var(--color-muted);
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0'/%3E%3C/svg%3E");
  mask-repeat: no-repeat;
  mask-size: 100% 100%;
}
.sidebar-sublink:hover {
  background-color: var(--color-menu-hover-bg);
  color: var(--color-heading);
}
.sidebar-sublink-active {
  color: var(--color-primary);
  font-weight: 500;
}
.sidebar-sublink-active::before {
  background-color: var(--color-primary);
}

.sidebar-subicon {
  width: 1.125rem;
  font-size: 1.125rem;
  flex-shrink: 0;
  opacity: 0.7;
}
.sidebar-sublink:hover .sidebar-subicon,
.sidebar-sublink-active .sidebar-subicon { opacity: 1; }

/* ── Sidebar: Default = collapsed on desktop, expand on hover ── */
@media (min-width: 1280px) {
  .sidebar-menu {
    width: 72px;
    transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;
  }

  /* ── Collapsed state (not hovered, not expanded) ── */
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-submenu,
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-collapse-btn {
    display: none !important;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-brand-reveal {
    width: 33px;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-label {
    max-width: 0;
    opacity: 0;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-chevron {
    opacity: 0;
    width: 0;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-link {
    padding-right: 0;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-icon {
    margin: 0;
  }
  .sidebar-menu:not(.sidebar-hover):not(.sidebar-expanded) .sidebar-brand-link {
    flex-shrink: 0;
  }

  /* ── Hover: expand ── */
  .sidebar-menu.sidebar-hover:not(.sidebar-expanded) {
    width: var(--sidebar-width);
  }
  .sidebar-menu.sidebar-hover .sidebar-collapse-btn { display: block; }

  /* ── Expanded (locked) ── */
  .sidebar-menu.sidebar-expanded {
    width: var(--sidebar-width);
  }
  .sidebar-menu.sidebar-expanded .sidebar-collapse-btn { display: block; }

  /* Toggle icon direction */
  .sidebar-menu.sidebar-expanded .sidebar-collapse-icon {
    transform: scaleX(-1);
  }

  /* ── Content area offset ── */
  .sidebar-menu ~ div,
  .sidebar-menu ~ .xl\:ml-\[260px\] {
    margin-left: 72px !important;
    transition: margin-left 0.3s ease-in-out;
  }
  .sidebar-menu.sidebar-expanded ~ div,
  .sidebar-menu.sidebar-expanded ~ .xl\:ml-\[260px\] {
    margin-left: var(--sidebar-width) !important;
  }
}

/* ── Navbar ── */
.navbar-detached {
  display: flex;
  align-items: center;
  position: sticky;
  top: 1rem;
  z-index: 1030;
  height: 64px;
  padding: 0 1.5rem;
  margin: 1rem 1.5rem 0;
  background-color: var(--color-paper);
  border-radius: 0.375rem;
  box-shadow: 0 0.125rem 0.5rem 0 rgba(47, 43, 61, 0.12);
}

/* Normalize stray <li> from cart/notification partials (they expect Bootstrap <ul> context) */
.navbar-detached li,
.navbar-detached ul {
  list-style: none;
  margin: 0;
  padding: 0;
}
#navbar-cart > li,
#navbar-notification-dropdown > li {
  display: flex;
  align-items: center;
}
#navbar-cart .nav-item,
#navbar-notification-dropdown .nav-item {
  display: flex;
  align-items: center;
  list-style: none;
}
#navbar-cart .nav-link,
#navbar-notification-dropdown .nav-link {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  color: var(--color-heading);
  cursor: pointer;
  transition: background-color 0.15s;
  padding: 0;
}
#navbar-cart .nav-link:hover,
#navbar-notification-dropdown .nav-link:hover {
  background-color: var(--color-menu-hover-bg);
}

/* Cart & notification dropdown menus rendered by partials */
#navbar-cart .dropdown-menu,
#navbar-notifications {
  list-style: none;
  padding: 0;
  margin: 0;
}
#navbar-cart .dropdown-menu {
  position: absolute;
  right: 0;
  top: 100%;
  margin-top: 0.5rem;
  background-color: var(--color-paper);
  border-radius: 0.375rem;
  box-shadow: 0 0.25rem 1.125rem 0 rgba(47, 43, 61, 0.16);
  border: 1px solid var(--color-border);
  z-index: 1050;
  display: none;
}
#navbar-cart .dropdown-menu.show {
  display: block;
}

.navbar-icon-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  color: var(--color-heading);
  cursor: pointer;
  transition: background-color 0.15s;
}
.navbar-icon-btn:hover {
  background-color: var(--color-menu-hover-bg);
}

.navbar-dropdown-menu {
  position: absolute;
  top: 100%;
  margin-top: 0.5rem;
  background-color: var(--color-paper);
  border-radius: 0.375rem;
  box-shadow: 0 0.25rem 1.125rem 0 rgba(47, 43, 61, 0.16);
  border: 1px solid var(--color-border);
  overflow: hidden;
  z-index: 1050;
}

.navbar-dropdown-item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.5rem 1rem;
  font-size: 0.875rem;
  color: var(--color-body);
  transition: background-color 0.15s, color 0.15s;
}
.navbar-dropdown-item:hover {
  background-color: var(--color-menu-hover-bg);
  color: var(--color-heading);
}

.avatar-online {
  position: relative;
  display: inline-block;
}
.avatar-online::after {
  content: "";
  position: absolute;
  bottom: 2px;
  right: 2px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: var(--color-success);
  border: 2px solid var(--color-paper);
}

/* ══════════════════════════════════════════════════════════════════════════════
   Bootstrap Grid Compatibility Layer
   PHP FormBuilder generates col-* classes dynamically. These rules replicate
   the Bootstrap 12-column grid so those classes keep working with Tailwind.
   ══════════════════════════════════════════════════════════════════════════════ */
.row {
  display: flex;
  flex-wrap: wrap;
  margin-left: -0.75rem;
  margin-right: -0.75rem;
}
.row > * {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
  width: 100%;
}
/* gap variant */
.row.g-6 { gap: 1.5rem; margin-left: 0; margin-right: 0; }
.row.g-6 > * { padding-left: 0; padding-right: 0; }

.col-1  { width: 8.333%; }
.col-2  { width: 16.667%; }
.col-3  { width: 25%; }
.col-4  { width: 33.333%; }
.col-5  { width: 41.667%; }
.col-6  { width: 50%; }
.col-7  { width: 58.333%; }
.col-8  { width: 66.667%; }
.col-9  { width: 75%; }
.col-10 { width: 83.333%; }
.col-11 { width: 91.667%; }
.col-12 { width: 100%; }

@media (min-width: 576px) {
  .col-sm-1  { width: 8.333%; }
  .col-sm-2  { width: 16.667%; }
  .col-sm-3  { width: 25%; }
  .col-sm-4  { width: 33.333%; }
  .col-sm-5  { width: 41.667%; }
  .col-sm-6  { width: 50%; }
  .col-sm-7  { width: 58.333%; }
  .col-sm-8  { width: 66.667%; }
  .col-sm-9  { width: 75%; }
  .col-sm-10 { width: 83.333%; }
  .col-sm-11 { width: 91.667%; }
  .col-sm-12 { width: 100%; }
}
@media (min-width: 768px) {
  .col-md-1  { width: 8.333%; }
  .col-md-2  { width: 16.667%; }
  .col-md-3  { width: 25%; }
  .col-md-4  { width: 33.333%; }
  .col-md-5  { width: 41.667%; }
  .col-md-6  { width: 50%; }
  .col-md-7  { width: 58.333%; }
  .col-md-8  { width: 66.667%; }
  .col-md-9  { width: 75%; }
  .col-md-10 { width: 83.333%; }
  .col-md-11 { width: 91.667%; }
  .col-md-12 { width: 100%; }
}
@media (min-width: 992px) {
  .col-lg-1  { width: 8.333%; }
  .col-lg-2  { width: 16.667%; }
  .col-lg-3  { width: 25%; }
  .col-lg-4  { width: 33.333%; }
  .col-lg-5  { width: 41.667%; }
  .col-lg-6  { width: 50%; }
  .col-lg-7  { width: 58.333%; }
  .col-lg-8  { width: 66.667%; }
  .col-lg-9  { width: 75%; }
  .col-lg-10 { width: 83.333%; }
  .col-lg-11 { width: 91.667%; }
  .col-lg-12 { width: 100%; }
}
@media (min-width: 1200px) {
  .col-xl-1  { width: 8.333%; }
  .col-xl-2  { width: 16.667%; }
  .col-xl-3  { width: 25%; }
  .col-xl-4  { width: 33.333%; }
  .col-xl-5  { width: 41.667%; }
  .col-xl-6  { width: 50%; }
  .col-xl-7  { width: 58.333%; }
  .col-xl-8  { width: 66.667%; }
  .col-xl-9  { width: 75%; }
  .col-xl-10 { width: 83.333%; }
  .col-xl-11 { width: 91.667%; }
  .col-xl-12 { width: 100%; }
}

/* ── Minimal compat for PHP-generated classes (aim-form.css, icon-placeholder, etc.) ── */
.d-flex { display: flex; }
.d-none { display: none; }
.d-block { display: block; }
.d-inline-block { display: inline-block; }
.d-grid { display: grid; }
.flex-wrap { flex-wrap: wrap; }
.flex-nowrap { flex-wrap: nowrap; }
.flex-row { flex-direction: row; }
.flex-column { flex-direction: column; }
.flex-grow-1 { flex-grow: 1; }
.flex-shrink-0 { flex-shrink: 0; }
.align-items-center { align-items: center; }
.align-items-end { align-items: flex-end; }
.align-items-start { align-items: flex-start; }
.justify-content-between { justify-content: space-between; }
.justify-content-center { justify-content: center; }
.justify-content-end { justify-content: flex-end; }
.justify-content-start { justify-content: flex-start; }
.align-middle { vertical-align: middle; }
.text-start { text-align: left; }
.text-center { text-align: center; }
.text-end { text-align: right; }
.text-nowrap { white-space: nowrap; }
.text-decoration-none { text-decoration: none; }
.text-dark { color: var(--color-heading); }
.text-body { color: var(--color-body); }
.text-body-secondary { color: var(--color-muted); }
.text-muted { color: var(--color-muted); }
.text-primary { color: var(--color-primary); }
.text-success { color: var(--color-success); }
.text-warning { color: var(--color-warning); }
.text-danger { color: var(--color-danger); }
.text-info { color: var(--color-info); }
.text-secondary { color: var(--color-secondary); }
.text-white { color: #fff; }
.text-reset { color: inherit; }
.fw-bold { font-weight: 700; }
.fw-semibold { font-weight: 600; }
.fw-normal { font-weight: 400; }
.small, small { font-size: 0.8125rem; }
.fs-2 { font-size: 0.75rem; }
.fs-3 { font-size: 0.8125rem; }
.fs-4 { font-size: 0.9375rem; }
.fs-5 { font-size: 1.125rem; }
.fs-6 { font-size: 1.25rem; }
.bg-primary { background-color: var(--color-primary); color: #fff; }
.bg-secondary { background-color: var(--color-secondary); color: #fff; }
.bg-success { background-color: var(--color-success); color: #fff; }
.bg-danger { background-color: var(--color-danger); color: #fff; }
.bg-warning { background-color: var(--color-warning); color: #fff; }
.bg-info { background-color: var(--color-info); color: #fff; }
.bg-light { background-color: #f5f5f6; }
.bg-white { background-color: #fff; }
.bg-transparent { background-color: transparent; }
.bg-label-primary { background-color: var(--color-primary-light, #dce6fc); color: var(--color-primary); }
.bg-label-secondary { background-color: var(--color-secondary-light, #ebebed); color: var(--color-secondary); }
.bg-label-success { background-color: var(--color-success-light, #ddf6e8); color: var(--color-success); }
.bg-label-warning { background-color: var(--color-warning-light, #fff0e1); color: var(--color-warning); }
.bg-label-danger { background-color: var(--color-danger-light, #ffe2e3); color: var(--color-danger); }
.bg-label-info { background-color: var(--color-info-light, #d6f4f8); color: var(--color-info); }
.border { border: 1px solid var(--color-border); }
.border-top { border-top: 1px solid var(--color-border); }
.border-bottom { border-bottom: 1px solid var(--color-border); }
.border-0 { border: 0; }
.rounded { border-radius: 0.375rem; }
.rounded-circle { border-radius: 50%; }
.rounded-pill { border-radius: 50rem; }
.rounded-1 { border-radius: 0.25rem; }
.rounded-2 { border-radius: 0.375rem; }
.rounded-3 { border-radius: 0.5rem; }
.shadow-sm { box-shadow: 0 0.1875rem 0.75rem 0 rgba(47, 43, 61, 0.14); }
.shadow-lg { box-shadow: 0 0.25rem 1.125rem 0 rgba(47, 43, 61, 0.16); }
.shadow-none { box-shadow: none; }
.overflow-hidden { overflow: hidden; }
.overflow-auto { overflow: auto; }
.position-relative { position: relative; }
.position-absolute { position: absolute; }
.position-fixed { position: fixed; }
.w-100 { width: 100%; }
.h-100 { height: 100%; }
.user-select-none { user-select: none; }
.cursor-pointer { cursor: pointer; }
.gap-1 { gap: 0.25rem; }
.gap-2 { gap: 0.5rem; }
.gap-3 { gap: 0.75rem; }

/* Margins */
.m-0 { margin: 0; }
.mb-0 { margin-bottom: 0; }
.mb-1 { margin-bottom: 0.25rem; }
.mb-2 { margin-bottom: 0.5rem; }
.mb-3 { margin-bottom: 0.75rem; }
.mb-4 { margin-bottom: 1rem; }
.mb-5 { margin-bottom: 1.5rem; }
.mb-7 { margin-bottom: 1.75rem; }
.mb-9 { margin-bottom: 2.25rem; }
.mt-0 { margin-top: 0; }
.mt-1 { margin-top: 0.25rem; }
.mt-2 { margin-top: 0.5rem; }
.mt-3 { margin-top: 0.75rem; }
.mt-4 { margin-top: 1rem; }
.mt-6 { margin-top: 1.5rem; }
.me-0 { margin-right: 0; }
.me-1 { margin-right: 0.25rem; }
.me-2 { margin-right: 0.5rem; }
.me-3 { margin-right: 0.75rem; }
.me-4 { margin-right: 1rem; }
.me-8 { margin-right: 2rem; }
.me-auto { margin-right: auto; }
.ms-1 { margin-left: 0.25rem; }
.ms-2 { margin-left: 0.5rem; }
.ms-4 { margin-left: 1rem; }
.ms-auto { margin-left: auto; }

/* Padding */
.p-0 { padding: 0; }
.p-2 { padding: 0.5rem; }
.p-3 { padding: 0.75rem; }
.p-4 { padding: 1rem; }
.p-6 { padding: 1.5rem; }
.p-8 { padding: 2rem; }
.px-0 { padding-left: 0; padding-right: 0; }
.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
.px-4 { padding-left: 1rem; padding-right: 1rem; }
.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
.py-3 { padding-top: 0.75rem; padding-bottom: 0.75rem; }
.py-4 { padding-top: 1rem; padding-bottom: 1rem; }
.py-5 { padding-top: 1.5rem; padding-bottom: 1.5rem; }
.pb-0 { padding-bottom: 0; }
.pt-4 { padding-top: 1rem; }
.pe-2 { padding-right: 0.5rem; }
.pe-4 { padding-right: 1rem; }
.ps-4 { padding-left: 1rem; }

/* Responsive display */
@media (min-width: 576px) {
  .d-sm-inline-block { display: inline-block; }
  .d-sm-block { display: block; }
  .me-sm-1 { margin-right: 0.25rem; }
}
@media (min-width: 768px) {
  .d-md-flex { display: flex; }
  .d-md-none { display: none; }
  .d-md-inline { display: inline; }
  .mt-md-0 { margin-top: 0; }
}
@media (min-width: 992px) {
  .d-lg-inline-block { display: inline-block; }
}
@media (min-width: 1200px) {
  .d-xl-block { display: block; }
  .d-xl-none { display: none; }
}

/* ── Cards ── */
.card {
  background-color: var(--color-paper);
  border-radius: 0.375rem;
  box-shadow: 0 0.125rem 0.5rem 0 rgba(47, 43, 61, 0.12);
  border: 0;
}
.card-body { padding: 1.5rem; }
.card-title { color: var(--color-heading); font-weight: 600; margin-bottom: 0.25rem; }
.card-subtitle { color: var(--color-muted); font-size: 0.875rem; }

/* ── Buttons ── */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.4375rem 1.25rem;
  font-size: 0.9375rem;
  font-weight: 500;
  line-height: 1.375;
  border-radius: 0.375rem;
  border: 1px solid transparent;
  cursor: pointer;
  transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
  text-decoration: none;
  gap: 0.25rem;
}
.btn-sm { padding: 0.25rem 0.75rem; font-size: 0.8125rem; }
.btn-xs {
  padding: 0;
  width: 1.875rem;
  height: 1.875rem;
  font-size: 0.8125rem;
  line-height: 1;
  border-radius: 0.25rem;
  gap: 0;
}
.btn-icon { padding: 0.5rem; width: 38px; height: 38px; }
.btn-primary { background-color: var(--color-primary); color: #fff; }
.btn-primary:hover { background-color: #2a61c8; color: #fff; }
.btn-secondary { background-color: var(--color-secondary); color: #fff; }
.btn-danger { background-color: var(--color-danger); color: #fff; }
.btn-danger:hover { background-color: #e04347; color: #fff; }
.btn-success { background-color: var(--color-success); color: #fff; }
.btn-warning { background-color: var(--color-warning); color: #fff; }
.btn-info { background-color: var(--color-info); color: #fff; }
.btn-light { background-color: #f5f5f6; color: var(--color-body); border-color: var(--color-border); }
.btn-toggle-on { background-color: #d8d7db; color: var(--color-heading); border-color: #d8d7db; }
.btn-toggle-on:hover { background-color: #c1bfc5; color: var(--color-heading); border-color: #c1bfc5; }
.btn-outline-secondary { background-color: transparent; color: var(--color-secondary); border-color: var(--color-secondary); }
.btn-outline-secondary:hover { background-color: var(--color-secondary); color: #fff; }
.btn-outline-primary { background-color: transparent; color: var(--color-primary); border-color: var(--color-primary); }
.btn-outline-primary:hover { background-color: var(--color-primary); color: #fff; }
.btn-outline-danger { background-color: transparent; color: var(--color-danger); border-color: var(--color-danger); }
.btn-outline-danger:hover { background-color: var(--color-danger); color: #fff; }
.btn-text-secondary { background: none; border: none; color: var(--color-secondary); }
.btn-close {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.5rem; height: 1.5rem; padding: 0; border: 0; background: none;
  font-size: 1.25rem; cursor: pointer; opacity: 0.5;
}
.btn-close::before { content: "×"; }
.btn-close:hover { opacity: 1; }
.primary-btn { background-color: var(--color-primary); color: #fff; }

/* ── Badges ── */
.badge {
  display: inline-flex;
  align-items: center;
  padding: 0.25rem 0.5rem;
  font-size: 0.75rem;
  font-weight: 600;
  line-height: 1;
  border-radius: 0.375rem;
  white-space: nowrap;
}
.badge-dot {
  width: 0.5rem; height: 0.5rem; padding: 0;
  border-radius: 50%;
}
.badge-notifications { position: absolute; top: -4px; right: -4px; }

/* ── Form Controls ── */
.form-control {
  display: block;
  width: 100%;
  padding: 0.4375rem 0.875rem;
  font-size: 0.9375rem;
  line-height: 1.375;
  color: var(--color-heading);
  background-color: var(--color-paper);
  border: 1px solid var(--color-border);
  border-radius: 0.375rem;
  outline: none;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.form-control:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 0.15rem rgba(var(--color-primary-rgb), 0.25);
}
.form-control::placeholder { color: var(--color-muted); }
.form-control:disabled, .form-control[readonly] {
  background-color: #f5f5f6;
  opacity: 0.7;
}
.form-label {
  display: block;
  margin-bottom: 0.375rem;
  font-size: 0.875rem;
  font-weight: 500;
  color: var(--color-heading);
}
.form-check { display: flex; align-items: center; gap: 0.5rem; }
.form-check-input {
  appearance: none;
  -webkit-appearance: none;
  flex-shrink: 0;
  width: 1.125rem; height: 1.125rem;
  background-color: var(--color-paper);
  border: 1.5px solid var(--color-border);
  border-radius: 0.25rem;
  cursor: pointer;
  transition: background-color 0.15s, border-color 0.15s, box-shadow 0.15s;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 0.75rem 0.75rem;
  vertical-align: middle;
}
.form-check-input[type="radio"] { border-radius: 50%; }
.form-check-input:hover:not(:disabled):not(:checked) {
  border-color: color-mix(in sRGB, var(--color-primary) 50%, var(--color-border));
}
.form-check-input:focus-visible {
  outline: none;
  box-shadow: 0 0 0 0.15rem rgba(var(--color-primary-rgb), 0.25);
}
.form-check-input:checked {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
}
.form-check-input[type="checkbox"]:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='white'%3E%3Cpath fill-rule='evenodd' d='M16.707 5.293a1 1 0 0 1 0 1.414l-8 8a1 1 0 0 1-1.414 0l-4-4a1 1 0 1 1 1.414-1.414L8 12.586l7.293-7.293a1 1 0 0 1 1.414 0z' clip-rule='evenodd'/%3E%3C/svg%3E");
}
.form-check-input[type="checkbox"]:indeterminate {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='white'%3E%3Cpath fill-rule='evenodd' d='M4 10a1 1 0 0 1 1-1h10a1 1 0 1 1 0 2H5a1 1 0 0 1-1-1z' clip-rule='evenodd'/%3E%3C/svg%3E");
}
.form-check-input[type="radio"]:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='white'/%3E%3C/svg%3E");
  background-size: 1rem 1rem;
}
.form-check-input:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}
.form-check-input.is-invalid { border-color: var(--color-danger); }
.form-check-label { font-size: 0.875rem; cursor: pointer; display: inline-flex; align-items: center; gap: 0.25rem; }

/* Toggle switch — applied when wrapper carries .form-switch.
   `!important` is used because some bundled vendor CSS sets matching
   .form-check-input rules later in the cascade. */
.form-switch .form-check-input[type="checkbox"] {
  width: 2.25rem !important;
  height: 1.25rem !important;
  border-radius: 9999px !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23acaab1'/%3E%3C/svg%3E") !important;
  background-position: left center !important;
  background-size: contain !important;
  transition: background-position 0.15s ease-in-out, background-color 0.15s, border-color 0.15s !important;
}
.form-switch .form-check-input[type="checkbox"]:checked {
  background-position: right center !important;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E") !important;
}
.form-select {
  display: block; width: 100%;
  padding: 0.4375rem 2.25rem 0.4375rem 0.875rem;
  font-size: 0.9375rem; color: var(--color-heading);
  background-color: var(--color-paper);
  border: 1px solid var(--color-border); border-radius: 0.375rem;
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%236d6b77' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
  background-size: 16px 12px;
}
.input-group {
  display: flex;
  position: relative;
}
.input-group > .form-control { flex: 1 1 auto; width: 1%; }
.input-group-text {
  display: flex; align-items: center;
  padding: 0.4375rem 0.875rem;
  font-size: 0.9375rem; color: var(--color-body);
  background-color: #f5f5f6;
  border: 1px solid var(--color-border);
}
.input-group > :first-child:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.input-group > :last-child:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.input-group > :not(:first-child) { margin-left: -1px; }
.input-group-merge .form-control:not(:last-child) { border-right: 0; }
.input-group-merge .input-group-text { background-color: transparent; }

/* ── Tables ── */
.table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.875rem;
}
.table th {
  padding: 0.75rem 1rem;
  font-weight: 600;
  color: var(--color-heading);
  text-transform: uppercase;
  font-size: 0.75rem;
  letter-spacing: 0.05em;
  border-bottom: 1px solid var(--color-border);
}
.table td {
  padding: 0.25rem 1rem;
  border-bottom: 1px solid rgba(var(--color-primary-rgb), 0.05);
  color: var(--color-body);
  vertical-align: middle;
}
.table tbody tr:hover { background-color: rgba(47, 43, 61, 0.02); }

/* ── Tabs ── */
.nav { display: flex; list-style: none; padding: 0; margin: 0; }
.nav-tabs { border-bottom: 1px solid var(--color-border); }
.nav-item { flex-shrink: 0; }
.nav-link {
  display: inline-flex; align-items: center;
  padding: 0.5rem 1rem;
  font-size: 0.875rem; font-weight: 500;
  color: var(--color-body);
  border-bottom: 2px solid transparent;
  cursor: pointer; transition: color 0.15s, border-color 0.15s;
  text-decoration: none; white-space: nowrap;
}
.nav-link:hover { color: var(--color-heading); }
.nav-link.active {
  color: var(--color-primary);
  border-bottom-color: var(--color-primary);
}
.primary-tab.active {
  color: var(--color-primary) !important;
  border-bottom-color: var(--color-primary) !important;
}
.tab-content > .tab-pane { display: none; }
.tab-content > .tab-pane.show.active { display: block; }
.tab-content > .active { display: block; }

/* ── Accordion / Collapsible ── */
.accordion { display: flex; flex-direction: column; gap: 0.5rem; }
.accordion-item {
  background-color: var(--color-paper);
  border: 1px solid var(--color-border);
  border-radius: 0.375rem;
  overflow: hidden;
}
.accordion-header { margin: 0; }
.accordion-button {
  display: flex; align-items: center; width: 100%;
  padding: 1rem 1.25rem;
  font-size: 0.9375rem; font-weight: 600;
  color: var(--color-heading);
  background-color: transparent; border: 0;
  cursor: pointer; text-align: left;
}
.accordion-button::after {
  content: ""; margin-left: auto;
  width: 1.25rem; height: 1.25rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%236d6b77' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-size: 100% 100%;
  transition: transform 0.2s;
}
.accordion-button:not(.collapsed)::after { transform: rotate(180deg); }
.accordion-collapse { overflow: hidden; }
.accordion-collapse:not(.show) { display: none; }
.accordion-collapse.show { display: block; }
.accordion-body { padding: 0 1.25rem 1rem; }

/* ── Alerts ── */
.alert {
  position: relative; padding: 0.75rem 1rem;
  border: 1px solid transparent; border-radius: 0.375rem;
}
.alert-primary {
  background-color: rgba(var(--color-primary-rgb), 0.08);
  border-color: rgba(var(--color-primary-rgb), 0.15);
  color: var(--color-primary);
}

/* ── Offcanvas ── */
.offcanvas {
  position: fixed; display: flex; flex-direction: column;
  max-width: 100%; visibility: hidden;
  background-color: var(--color-paper);
  transition: transform 0.3s ease-in-out, visibility 0.3s;
  z-index: 9999;
}
.offcanvas-end {
  top: 0; right: 0; width: 400px; height: 100vh;
  transform: translateX(100%);
}
.offcanvas.show { visibility: visible; transform: none; }
.offcanvas-header {
  display: flex; align-items: center; justify-content: space-between; padding: 1rem;
}
.offcanvas-body { flex-grow: 1; padding: 1rem; overflow-y: auto; }

/* ── Pagination ── */
.pagination {
  display: flex; list-style: none; padding: 0; margin: 0; gap: 0.25rem;
}
.pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.8125rem; }
.page-item { list-style: none; }
.page-link {
  display: flex; align-items: center; justify-content: center;
  min-width: 2rem; padding: 0.375rem 0.625rem;
  font-size: 0.875rem; color: var(--color-body);
  background-color: var(--color-paper);
  border: 1px solid var(--color-border); border-radius: 0.375rem;
  text-decoration: none; cursor: pointer;
  transition: background-color 0.15s, color 0.15s;
}
.page-link:hover { background-color: rgba(var(--color-primary-rgb), 0.08); color: var(--color-primary); }
.page-item.active .page-link {
  background-color: var(--color-primary); color: #fff; border-color: var(--color-primary);
}
.page-item.disabled .page-link {
  color: var(--color-muted); pointer-events: none; opacity: 0.5;
}

/* ── List Group ── */
.list-group { display: flex; flex-direction: column; padding: 0; margin: 0; list-style: none; }
.list-group-flush { border-radius: 0; }
.list-group-item {
  position: relative; display: block; padding: 0.75rem 1rem;
  border-bottom: 1px solid var(--color-border);
}
.list-group-item:last-child { border-bottom: 0; }
.list-group-item-action { cursor: pointer; }
.list-group-item-action:hover { background-color: var(--color-menu-hover-bg); }

/* ── Dropdown (for row actions in list builder) ── */
.dropdown { position: relative; }
.dropdown-toggle::after { display: none; }
.hide-arrow::after { display: none; }
.dropdown-menu {
  position: absolute; z-index: 1050;
  display: none;
  min-width: 10rem; padding: 0.5rem 0;
  background-color: var(--color-paper);
  border: 1px solid var(--color-border);
  border-radius: 0.375rem;
  box-shadow: 0 0.25rem 1.125rem 0 rgba(47, 43, 61, 0.16);
}
.dropdown-menu.show { display: block; }
.dropdown-menu-end { right: 0; left: auto; }
.dropdown-item {
  display: flex; align-items: center; gap: 0.5rem;
  width: 100%; padding: 0.5rem 1rem;
  font-size: 0.875rem; color: var(--color-body);
  text-decoration: none; cursor: pointer;
}
.dropdown-item:hover { background-color: var(--color-menu-hover-bg); color: var(--color-heading); }
.dropdown-divider { margin: 0.25rem 0; border-top: 1px solid var(--color-border); }
.dropdown-header {
  display: flex; align-items: center;
  padding: 0.5rem 1rem; font-size: 0.875rem; color: var(--color-heading);
}

/* ── Avatar ── */
.avatar {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 50%;
}
.avatar-initial {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%; border-radius: inherit;
  font-size: 0.875rem; font-weight: 600;
}
.avatar-lg { width: 48px; height: 48px; }

/* ── Containers ── */
.container-xxl { max-width: 1440px; margin-left: auto; margin-right: auto; padding-left: 1.5rem; padding-right: 1.5rem; }
.container-fluid { width: 100%; padding-left: 1.5rem; padding-right: 1.5rem; }
.container-p-y { padding-top: 1.5rem; padding-bottom: 1.5rem; }

/* Style the native <select> to match the Tom Select .ts-control wrapper,
   so the page/AJAX update shows a correctly-styled field immediately.
   Tom Select hides the native element on init (via .ts-hidden-accessible),
   at which point these rules stop applying. */
select.select2:not(.tomselected),
select.select2-icons:not(.tomselected) {
  width: 100%;
  padding: calc(0.426rem - 1px) calc(0.9375rem - 1px);
  padding-right: 2.25rem;
  font-size: 0.9375rem;
  font-weight: 400;
  line-height: 1.625;
  color: var(--bs-heading-color);
  background-color: var(--bs-paper-bg);
  border: 1px solid var(--bs-border-color);
  border-radius: var(--bs-border-radius);
  box-shadow: none;
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236d6b77'%3E%3Cpath d='M8 11L3 6h10z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 0.75rem center;
  background-size: 12px 12px;
}

/* Pill-style outline buttons used in list bulk actions. Each variant fills its
   border colour on hover and switches the text to white. All brand colours
   (#3271E6, #28c76f, #00bad1, #ff9f43, #ff4c51) are statically dark enough for
   white text — no luminance check needed. Self-contained selector, so it does
   not collide with the unlayered `.text-*` color utilities elsewhere. */
.aim-pill { border: 1px solid; background-color: transparent; }
.aim-pill-secondary { color: var(--color-body); border-color: var(--color-border); }
.aim-pill-secondary:hover { background-color: #f5f5f6; color: var(--color-heading); }
.aim-pill-primary { color: var(--color-primary); border-color: var(--color-primary); }
.aim-pill-primary:hover { background-color: var(--color-primary); color: #fff; }
.aim-pill-success { color: var(--color-success); border-color: var(--color-success); }
.aim-pill-success:hover { background-color: var(--color-success); color: #fff; }
.aim-pill-info { color: var(--color-info); border-color: var(--color-info); }
.aim-pill-info:hover { background-color: var(--color-info); color: #fff; }
.aim-pill-warning { color: var(--color-warning); border-color: var(--color-warning); }
.aim-pill-warning:hover { background-color: var(--color-warning); color: #fff; }
.aim-pill-danger { color: var(--color-danger); border-color: var(--color-danger); }
.aim-pill-danger:hover { background-color: var(--color-danger); color: #fff; }
