@font-face {
  font-family: "Inter";
  src: url("../fonts/inter/Inter-VariableFont.ttf") format("truetype");
  font-weight: 100 900; /* variable weight */
  font-style: normal;
  font-display: swap;
}
/* ==========================================================================
   1. VARIABLES & THEME CONFIGURATION (ASLI DARI STYLE.CSS)
   ========================================================================== */
:root {
  /* --- Palette (Sage Theme) --- */
  --sage-primary: #4b4e21;
  --sage-hover: #7d8666;
  --sage-subtle: #929d7926;
  --sage-disable: #787b7380;

  /* --- Palette (Earth Tone) --- */
  --earth-terracotta: #a35b40;
  --earth-slate: #4e5d66;
  --earth-sand: #f4f2e9;

  /* --- Semantic Colors --- */
  --sage-success: #64a340;
  --sage-info: #427e9f;
  --sage-warning: #d4a93a;
  --sage-danger: #b83a3a;

  --sage-success-subtle: #64a34026;
  --sage-info-subtle: #427e9f26;
  --sage-warning-subtle: #d4a93a26;
  --sage-danger-subtle: #b83a3a26;

  /* --- Layout & Dimensions --- */
  --dim-sidebar-w: 270px;
  --dim-sidebar-min: 80px;
  --dim-radius-box: 20px;
  --dim-radius-ui: 12px;
  --z-navbar: 999;
  --z-sidebar: 1000;

  /* --- Light Mode Defaults --- */
  --theme-primary: var(--sage-primary);
  --theme-primary-hover: var(--sage-hover);
  --theme-primary-subtle: var(--sage-subtle);
  --theme-primary-disable: var(--sage-disable);

  --theme-accent: var(--earth-terracotta);
  --theme-accent-hover: var(--earth-slate);
  --theme-accent-subtle: var(--earth-sand);
  --theme-neutral: var(--earth-sand);

  --theme-success: var(--sage-success);
  --theme-info: var(--sage-info);
  --theme-warning: var(--sage-warning);
  --theme-danger: var(--sage-danger);

  --theme-success-subtle: var(--sage-success-subtle);
  --theme-info-subtle: var(--sage-info-subtle);
  --theme-warning-subtle: var(--sage-warning-subtle);
  --theme-danger-subtle: var(--sage-danger-subtle);

  --theme-text-head: #46493c;
  --theme-text-body: #50554b;
  --theme-text-muted: #6c757d;
  --theme-text-inverse: #e4e6e1;

  --theme-bg-grad: linear-gradient(120deg, #fdfbfb 0%, #ebedee 100%);
  --theme-bg-surface: #ffffff;
  --theme-bg-subtle: #f2f4f1;
  --theme-bg-input: #f8f9fa;
  --theme-bg-glass: rgba(253, 251, 251, 0.85);

  --theme-border: #e9ecef;
  --theme-shadow: 0 5px 15px rgba(0, 0, 0, 0.05);
  --theme-box-shadow: 0 0 0 0.05rem var(--theme-primary);

  /* Table Specific */
  --theme-table-head-bg: #4b4e21a4;
  --theme-table-border: #929d7920;
}

/* --- Dark Mode Overrides (Optimized) --- */
[data-bs-theme="dark"] {
  --theme-primary: #8da35d;
  --theme-primary-hover: #a3b875;
  --theme-primary-subtle: rgba(146, 157, 121, 0.25);

  --theme-accent: #d18b6a;

  /* Semantic Colors (Brighter for dark mode) */
  --theme-success: #64a340;
  --theme-info: #427e9f;
  --theme-warning: #d4a93a;
  --theme-danger: #b83a3a;

  --theme-success-subtle: rgba(100, 163, 64, 0.25);
  --theme-info-subtle: rgba(66, 126, 159, 0.25);
  --theme-warning-subtle: rgba(212, 169, 58, 0.25);
  --theme-danger-subtle: rgba(184, 58, 58, 0.25);

  --theme-text-head: #ebeee5;
  --theme-text-body: #c4c7bf;
  --theme-text-muted: #a0a6ab;
  --theme-text-inverse: #121417;

  --theme-bg-grad: linear-gradient(120deg, #121417 0%, #1e2125 100%);
  --theme-bg-surface: #1e2125; /* Fixed contrast */
  --theme-bg-subtle: #2c3035;
  --theme-bg-input: #16191d;
  --theme-bg-glass: rgba(30, 33, 37, 0.85);

  --theme-border: #373b3e;
  --theme-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);

  --theme-table-head-bg: rgba(146, 157, 121, 0.15);
  --theme-table-border: rgba(146, 157, 121, 0.2);
}
/* ==========================================================================
   2. GLOBAL RESET
   ========================================================================== */
body {
  font-family: "Inter", sans-serif;
  background: var(--theme-bg-grad);
  background-attachment: fixed;
  color: var(--theme-text-body);
  overflow-x: hidden !important;
  font-size: 0.9rem;
  min-height: 100vh;
  max-width: 100%;
}

h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  color: var(--theme-text-head);
  font-weight: 700;
}

a {
  text-decoration: none !important;
}

/* ==========================================================================
   3. BOOTSTRAP UTILITY OVERRIDES (Buttons & Badges Enhanced)
   ========================================================================== */

/* --- A. Text & Backgrounds --- */
.text-primary {
  color: var(--theme-primary) !important;
}
.text-secondary {
  color: var(--earth-slate) !important;
}
.text-light {
  color: var(--earth-sand) !important;
}
.text-accent {
  color: var(--theme-accent) !important;
}
.text-success {
  color: var(--theme-success) !important;
}
.text-info {
  color: var(--theme-info) !important;
}
.text-warning {
  color: var(--theme-warning) !important;
}
.text-danger {
  color: var(--theme-danger) !important;
}

.bg-primary {
  background-color: var(--theme-primary) !important;
  color: #fff;
}
.bg-success {
  background-color: var(--theme-success) !important;
  color: #fff;
}
.bg-info {
  background-color: var(--theme-info) !important;
  color: #fff;
}
.bg-warning {
  background-color: var(--theme-warning) !important;
  color: #fff;
}
.bg-danger {
  background-color: var(--theme-danger) !important;
  color: #fff;
}
.bg-sage {
  background-color: var(--theme-primary) !important;
  color: white;
}
.bg-earth {
  background-color: var(--theme-accent) !important;
  color: white;
}
.bg-light {
  background-color: var(--earth-sand) !important;
  color: var(--earth-slate);
}

.bg-primary-subtle {
  background-color: var(--theme-primary-subtle) !important;
  color: var(--theme-primary);
}

.bg-accent-subtle {
  background-color: var(--theme-accent-subtle) !important;
  color: var(--theme-accent);
}

/* --- B. Solid Buttons (Interactive & Animated) --- */
.btn {
  border-radius: var(--dim-radius-ui);
  padding: 0.6rem 1.25rem;
  font-weight: 600;
  font-size: 0.9rem;
  transition: all 0.25s ease;
  border: 1px solid transparent;
}
button:disabled,
.btn:disabled {
  /* 1. Ubah warna background jadi abu-abu soft */
  background-color: var(--theme-primary-disable) !important;
  border-color: var(--theme-border) !important;

  /* 2. Ubah warna text jadi abu tua */
  color: var(--theme-text-muted) !important;

  /* 3. PENTING: Agar cursor 'not-allowed' (tanda dilarang) muncul */
  cursor: not-allowed !important;
  pointer-events: auto !important;

  /* 4. Hilangkan efek bayangan/glow jika ada */
  box-shadow: none !important;
  opacity: 1 !important; /* Reset opacity bawaan Bootstrap */
}

/* Mixin style for hover effect */

/* --- B. Solid Buttons (Auto Darken) --- */

/* 1. SUCCESS */
.btn-success {
  background-color: var(--theme-success);
  border-color: var(--theme-success);
  color: #fff;
}
.btn-success:hover,
.btn-success:focus {
  /* Rumus: Ambil var success, campur hitam 10% */
  background-color: color-mix(
    in srgb,
    var(--theme-success),
    black 10%
  ) !important;
  border-color: color-mix(in srgb, var(--theme-success), black 10%) !important;
}

/* 2. PRIMARY */
.btn-primary {
  background-color: var(--theme-primary);
  border-color: var(--theme-primary);
  color: var(--theme-text-inverse);
}
.btn-primary:hover,
.btn-primary:focus {
  background-color: color-mix(
    in srgb,
    var(--theme-primary),
    black 10%
  ) !important;
  border-color: color-mix(in srgb, var(--theme-primary), black 10%) !important;
}

.btn-secondary {
  background-color: var(--theme-accent);
  border-color: var(--theme-accent);
  color: #fff;
}
.btn-secondary:hover,
.btn-secondary:focus {
  background-color: color-mix(
    in srgb,
    var(--theme-accent),
    black 10%
  ) !important;
  border-color: color-mix(in srgb, var(--theme-accent), black 10%) !important;
}

/* 3. DANGER */
.btn-danger {
  background-color: var(--theme-danger);
  border-color: var(--theme-danger);
  color: #fff;
}
.btn-danger:hover,
.btn-danger:focus {
  background-color: color-mix(
    in srgb,
    var(--theme-danger),
    black 10%
  ) !important;
  border-color: color-mix(in srgb, var(--theme-danger), black 10%) !important;
}

/* 4. WARNING */
.btn-warning {
  background-color: var(--theme-warning);
  border-color: var(--theme-warning);
  color: #fff;
}
.btn-warning:hover,
.btn-warning:focus {
  background-color: color-mix(
    in srgb,
    var(--theme-warning),
    black 10%
  ) !important;
  border-color: color-mix(in srgb, var(--theme-warning), black 10%) !important;
  color: #fff;
}

/* 5. INFO */
.btn-info {
  background-color: var(--theme-info);
  border-color: var(--theme-info);
  color: #fff;
}
.btn-info:hover,
.btn-info:focus {
  background-color: color-mix(in srgb, var(--theme-info), black 10%) !important;
  border-color: color-mix(in srgb, var(--theme-info), black 10%) !important;
  color: #fff;
}

.btn-light {
  background-color: var(--theme-bg-surface) !important;
  border-color: var(--theme-border) !important;
  color: var(--theme-text-body) !important;
}
.btn-light:hover,
.btn-light:focus {
  background-color: var(--theme-bg-subtle) !important;
  border-color: var(--theme-border) !important;
}

/* --- C. Outline Buttons (Transparent) --- */
.btn-outline-primary {
  color: var(--theme-primary);
  border-color: var(--theme-primary);
}
.btn-outline-primary:hover {
  background-color: var(--theme-primary);
  color: #fff;
}

.btn-outline-success {
  color: var(--theme-success);
  border-color: var(--theme-success);
}
.btn-outline-success:hover {
  background-color: var(--theme-success);
  color: #fff;
}

.btn-outline-danger {
  color: var(--theme-danger);
  border-color: var(--theme-danger);
}
.btn-outline-danger:hover {
  background-color: var(--theme-danger);
  color: #fff;
}
.btn-outline-warning {
  color: var(--theme-warning);
  border-color: var(--theme-warning);
}
.btn-outline-warning:hover {
  background-color: var(--theme-warning);
  color: #fff;
}
.btn-outline-info {
  color: var(--theme-info);
  border-color: var(--theme-info);
}
.btn-outline-info:hover {
  background-color: var(--theme-info);
  color: #fff;
}

/* --- D. Badges (Modern & Subtle) --- */
.badge {
  padding: 0.5em 0.75em;
  font-weight: 600;
  font-size: 0.75rem;
  border-radius: 8px; /* Slightly more rounded */
  letter-spacing: 0.02em;
}

/* Subtle Badges (Background transparan + Teks warna gelap) */
/* Gunakan class: <span class="badge badge-subtle-success">Active</span> */

.badge-subtle-primary {
  background-color: var(--theme-primary-subtle);
  color: var(--theme-primary);
}

.badge-subtle-success {
  background-color: rgba(100, 163, 64, 0.15); /* Opacity dari --theme-success */
  color: var(--theme-success);
}

.badge-subtle-danger {
  background-color: rgba(184, 58, 58, 0.15);
  color: var(--theme-danger);
}

.badge-subtle-warning {
  background-color: rgba(212, 169, 58, 0.15);
  color: #947526; /* Darker warning for readability */
}

.badge-subtle-info {
  background-color: rgba(66, 126, 159, 0.15);
  color: var(--theme-info);
}
/* ==========================================================================
   4. LAYOUT STRUCTURE (PRESERVED FUNCTION)
   ========================================================================== */
#wrapper {
  display: flex;
  width: 100%;
  align-items: stretch;
  min-height: 100vh;
  overflow: hidden;
}

/* Scrollable Content Area (Dashboard Pattern) */
#content {
  flex-grow: 1; /* Mengikuti kode asli Anda */
  display: flex;
  flex-direction: column;
  height: 100vh;
  overflow-y: auto;
  padding: 0 20px;
}

/* Sticky Header */
.navbar-custom {
  position: sticky;
  top: 0;
  z-index: var(--z-navbar);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  background-color: var(--theme-bg-glass);
  border-bottom: 1px solid var(--theme-table-border);
  border-bottom-left-radius: var(--dim-radius-box);
  margin: 0 -20px 15px 0px;
  padding: 10px 20px;
  display: flex;
  align-items: center;
  flex-shrink: 0;
}

/* Footer (Sticky bottom of content flow) */
.footer-mini {
  /* Pastikan footer ada di paling bawah flow konten */
  background-color: var(--theme-bg-glass);
  margin-top: 50px;
  border-top: 1px solid var(--theme-border);
  border-top-left-radius: var(--dim-radius-box);
  box-shadow: 0 -4px 10px rgba(0, 0, 0, 0.02);
  margin-left: 0px;
  margin-right: -20px;
  padding: 15px 20px;
  text-align: left; /* Rata kiri sesuai request */
  font-size: 0.8rem;
  color: var(--theme-text-muted);
  flex-shrink: 0;

  position: sticky;
  bottom: 0;
  z-index: 999;
}
/* ===============================
   MOBILE HORIZONTAL SCROLL FIX
   =============================== */
@media (max-width: 768px) {
  /* Navbar */
  .navbar-custom {
    margin-left: -15px;
    margin-right: -15px;
    border-radius: 0;
  }

  /* Footer */
  .footer-mini {
    position: relative;
    margin-left: -15px;
    margin-right: -15px;
    border-radius: 0;
  }

  /* Sidebar (anti overflow) */
  #sidebar {
    transform: translateX(-100%);
    margin-left: 0 !important;
  }
  #sidebar.show {
    transform: translateX(0);
  }

  /* Card icon background */
  .card-icon-bg {
    right: 0;
    font-size: 5rem;
  }
}

/* ==========================================================================
   5. SIDEBAR
   ========================================================================== */
#sidebar {
  min-width: var(--dim-sidebar-w);
  max-width: var(--dim-sidebar-w);
  min-height: 100vh;
  height: 100vh;
  /* background: transparent !important; */
  border: none;
  display: flex;
  flex-direction: column;
  z-index: var(--z-sidebar);
  transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
}

.sidebar-brand {
  background-color: var(--theme-bg-surface) !important;
  box-shadow: var(--theme-shadow);
  flex-shrink: 0;
  border: 1px solid var(--theme-border);
  border-radius: 0 0 var(--dim-radius-box) 0;
  padding: 15px 10px 10px 10px;
  text-align: center;
  margin-bottom: 10px;
}
.sidebar-brand img {
  max-height: 45px;
  margin-bottom: 0px;
  transition: 0.3s;
}
.brand-text {
  display: block;
  font-weight: 700;
  font-size: 1.4rem;
  color: var(--theme-text-head) !important;
  white-space: nowrap;
}

/* Menu Container */
.sidebar-menu {
  /* --- Layout & Posisi --- */
  margin-top: 10px;
  /* Margin bottom untuk jarak dari bawah layar (efek melayang) */
  margin-bottom: 100px;
  /* Padding dikurangi sedikit agar shadow tidak tertutup padding */
  padding: 15px 10px;
  border-right: 2px solid var(--theme-primary-subtle);

  /* Bentuk & Border */
  border-radius: 0 var(--dim-radius-box) var(--dim-radius-box) 0;
  border-left: none;

  /* --- SCROLLING LOGIC --- */
  flex-grow: 1;
  height: 0;
  min-height: 0;
  overflow-y: auto;
  scrollbar-width: none;
  -ms-overflow-style: none;
  /* Warna background dasar */
  background-color: var(--theme-bg-surface) !important;
  box-shadow: var(--theme-shadow);
}

.sidebar-menu ul {
  list-style: none !important;
  padding: 0;
  margin: 0;
}
.sidebar-menu::-webkit-scrollbar {
  display: none;
}

.menu-header {
  font-size: 0.75rem;
  text-transform: uppercase;
  color: var(--theme-text-muted);
  font-weight: 700;
  margin: 15px 0 8px 10px;
  letter-spacing: 1px;
}

.sidebar-link {
  display: flex;
  align-items: center;
  padding: 6px 10px;
  color: var(--theme-text-primary);
  font-weight: 600;
  border-radius: 12px;
  margin-bottom: 5px;
  transition: 0.2s;
  white-space: nowrap;
}
.sidebar-link i {
  font-size: 1.2rem;
  width: 30px;
  margin-right: 5px;
  text-align: left;
}

.sidebar-link:hover {
  background-color: var(--theme-primary-subtle);
  color: var(--theme-primary) !important; /* Force color on hover overrides */
}
.sidebar-link.active {
  background-color: var(--theme-primary);
  color: #fff !important;
  box-shadow: 0 4px 10px rgba(146, 157, 121, 0.4);
}

/* Chevron/Collapse Icon */
.sidebar-link[data-bs-toggle="collapse"]::after {
  content: "\f078";
  font-family: "Font Awesome 6 Pro";
  font-weight: 900;
  margin-left: auto;
  font-size: 0.8rem;
  transition: transform 0.3s ease;
  color: var(--theme-text-muted);
}
.sidebar-link[data-bs-toggle="collapse"][aria-expanded="true"]::after {
  transform: scaleY(-1);
  color: var(--theme-primary);
}

.collapse-item {
  padding: 6px 10px 8px 45px; /* Sedikit dirapikan indentasinya */
  display: block;
  font-size: 0.85rem;
  color: var(--theme-text-muted);
  border-radius: var(--dim-radius-ui);
  margin-bottom: 5px;
  transition: 0.2s;
}
.collapse-item:hover {
  color: var(--theme-primary);
  background: var(--theme-bg-subtle);
}
.collapse-item.active {
  color: var(--theme-primary);
  font-weight: 600;
  background: var(--theme-primary-subtle);
}

/* ==========================================================================
   6. COMPONENTS (Cards, Tables, Forms)
   ========================================================================== */
/* Cards */
.card-modern {
  background: var(--theme-bg-surface);
  border: none;
  border-radius: var(--dim-radius-box);
  box-shadow: var(--theme-shadow);
  position: relative;
  overflow: hidden;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
  z-index: 1;
}
.card-modern:hover {
  /* transform: translateY(-5px); */
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
}
.card-modern .card-header {
  background-color: var(--theme-bg-surface);
  border-bottom: 1px solid var(--theme-border);
  color: var(--theme-text-head);
  padding: 1rem 1.25rem;
}

.card-icon-bg {
  position: absolute;
  bottom: -15px;
  right: -10px;
  font-size: 7rem;
  opacity: 0.15;
  transform: rotate(-15deg);
  z-index: 0;
  pointer-events: none;
  color: var(--theme-text-head);
}

/* Tables */
.table-modern {
  border-collapse: separate;
  border-spacing: 0;
  width: 100%;
  margin-bottom: 0;
}
.table-modern thead th {
  background-color: var(--theme-table-head-bg);
  color: var(--theme-neutral);
  font-weight: 700;
  text-transform: uppercase;
  font-size: 0.75rem;
  letter-spacing: 1px;
  padding: 10px 8px;
  border-bottom: 2px solid var(--theme-table-border);
  border-top: none;
}
.table-modern thead th:first-child {
  border-radius: 12px 0 0 0px;
  padding-left: 20px;
}
.table-modern thead th:last-child {
  border-radius: 0 12px 0 0;
  padding-right: 20px;
}

.table-modern tbody td {
  vertical-align: middle;
  padding: 15px;
  border-top: none;
  border-bottom: 2px solid var(--theme-border);
  color: var(--theme-text-muted);
  font-size: 0.9rem;
  background: var(--theme-bg-surface);
  transition: all 0.2s ease;
}
.table-modern tbody td:first-child {
  padding-left: 20px;
}
.table-modern tbody td:last-child {
  padding-right: 20px;
}

.table-modern tbody tr:hover td {
  background-color: var(--theme-primary-subtle);
  color: var(--theme-text-body);
}

.table-avatar,
.table-avatar-initial {
  width: 35px;
  height: 35px;
  flex-shrink: 0;
  border-radius: 50%;
  margin-right: 10px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.table-avatar {
  object-fit: cover;
  border: 2px solid var(--theme-bg-surface);
}
.table-avatar-initial {
  background-color: var(--theme-primary);
  color: #fff;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
  font-size: 0.8rem;
}
/* =========================================
   UI ELEMENTS (Sage Theme Custom Inputs)
   ========================================= */

/* 1. Base Input Style (Tanpa Wrapper) */
.form-control-ui,
.form-select-ui {
  background-color: var(--theme-bg-input);
  border: 1px solid var(--theme-border);
  border-radius: var(--dim-radius-ui) !important;
  padding: 4px 8px !important;
  font-size: 0.9rem;
  color: var(--theme-text-body);
  transition: all 0.2s ease;
  box-shadow: none;
}

.form-control-ui:focus,
.form-select-ui:focus {
  background-color: var(--theme-bg-surface);
  border-color: var(--theme-primary);
  box-shadow: 0 4px 10px rgba(146, 157, 121, 0.15);
  color: var(--theme-text-body);
  outline: none !important;
  border-radius: 0 !important;
}

/* 2. Input Group Wrapper (Container Icon + Input) */
.input-group-ui {
  border-radius: var(--dim-radius-ui);
  overflow: hidden;
  border: 1px solid var(--theme-border);
  background-color: var(--theme-bg-input);
  display: flex;
  align-items: center;
  height: auto; /* Tinggi default input text */
  transition: all 0.2s ease;
}

/* Modifier untuk Textarea (Tinggi otomatis) */

/* Efek Focus pada Wrapper */
.input-group-ui:focus-within {
  background-color: var(--theme-bg-surface);
  border-color: var(--theme-primary);
  /* box-shadow: 0 4px 10px rgba(146, 157, 121, 0.15); */
}

/* 3. Style Icon di dalam Wrapper */
.input-group-ui .input-icon {
  background: var(--theme-primary-subtle);
  border-right: 1px solid var(--theme-border);
  color: var(--theme-text-muted);
  padding: 12px; /* Jarak icon ke teks */
  display: flex;
  align-items: center;
  height: 100%;
}

/* 4. Reset Input/Select di dalam Wrapper */
.input-group-ui input,
.input-group-ui select {
  background: transparent;
  border: none !important; /* Hapus border bawaan */
  color: var(--theme-info);
  font-size: 0.9rem;
  height: 100%;
  width: 100%;
  box-shadow: none !important;
}

.input-group-ui textarea {
  background: transparent;
  border: none !important; /* Hapus border bawaan */
  color: var(--theme-info);
  font-size: 0.9rem;
  height: 100%;
  width: 100%;
  box-shadow: none !important;
  padding-top: 3px;
}

/* Reset Khusus Select Option */
.input-group-ui select.form-select {
  cursor: pointer;
  background-position: right 0 center; /* Posisi chevron */
  padding: 20px !important; /* Ruang untuk chevron */
}
.input-group-ui select.form-select:focus {
  outline: none;
  box-shadow: none;
}

/* =========================================
   VALIDATION STYLES (PENTING!)
   Agar form jadi merah saat error
   ========================================= */

/* A. Jika menggunakan Wrapper (.input-group-ui) */
/* Gunakan :has() selector - Modern Browser */
.input-group-ui:has(.is-invalid) {
  border-color: var(--theme-danger) !important;
  animation: shake 0.3s ease-in-out;
}

/* Fallback untuk icon di dalam input error */
/* .input-group-ui:has(.is-invalid) .input-icon {
  border-color: var(--theme-danger) !important;
} */

/* B. Jika Input berdiri sendiri (Tanpa Wrapper) */
.form-control-ui.is-invalid,
.form-select-ui.is-invalid {
  border-color: var(--theme-danger) !important;
  background-image: none;
}

.form-control-ui.is-valid,
.form-select-ui.is-valid {
  border-color: var(--theme-success) !important;
}

/* C. Pesan Error Text */
.invalid-feedback {
  display: block; /* Paksa tampil */
  width: 100%;
  margin-top: 4px;
  font-size: 0.8rem;
  color: var(--theme-danger);
  font-weight: 500;
}
.input-group-ui + .invalid-feedback {
  display: block !important; /* Override display:none bawaan */
  margin-top: 5px;
  font-size: 0.85rem;
  color: var(--theme-danger); /* Merah Error */
  animation: fadeIn 0.3s ease-in-out;
}

/* Animasi halus saat pesan muncul */
@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(-5px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
/* Animasi Getar saat Error */
@keyframes shake {
  0%,
  100% {
    transform: translateX(0);
  }
  25% {
    transform: translateX(-4px);
  }
  75% {
    transform: translateX(4px);
  }
}

.btn-ui {
  border-radius: var(--dim-radius-ui) !important;
  padding: 8px;
  font-size: 0.9rem;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: all 0.2s ease-in-out;
  border: 1px solid transparent;
}
.btn-ui.primary {
  background-color: var(--theme-primary);
  color: #fff;
}
.btn-ui.primary:hover {
  background-color: var(--theme-primary-hover);
}

.btn-ui.outline {
  background-color: var(--theme-bg-surface);
  border-color: var(--theme-border);
  color: var(--theme-text-muted);
}
.btn-ui.outline:hover {
  border-color: var(--theme-primary);
  color: var(--theme-primary);
  background-color: var(--theme-primary-subtle);
}
/* 1. Reset SEMUA tombol dalam grup jadi kotak (matikan radius) */
.btn-group {
  border-radius: var(--dim-radius-ui);
}
.btn-group > .btn-ui {
  border-radius: 0 !important;
  margin-left: -1px; /* Supaya garis border menyatu (tidak tebal ganda) */
}

/* 2. Tombol PERTAMA (Paling Kiri): Lengkungkan kiri atas & bawah */
.btn-group > .btn-ui:first-child {
  border-top-left-radius: var(--dim-radius-ui) !important;
  border-bottom-left-radius: var(--dim-radius-ui) !important;
  margin-left: 0;
}

/* 3. Tombol TERAKHIR (Paling Kanan): Lengkungkan kanan atas & bawah */
.btn-group > .btn-ui:last-child {
  border-top-right-radius: var(--dim-radius-ui) !important;
  border-bottom-right-radius: var(--dim-radius-ui) !important;
}

/* 4. Fix Z-Index saat Hover (Supaya border tombol yang di-hover ada di atas tetangganya) */
.btn-group > .btn-ui:hover,
.btn-group > .btn-ui:focus,
.btn-group > .btn-ui:active {
  z-index: 5;
}
/* 1. Detail/Default (Warna Primary - Hijau Sage) */
.btn-group .btn-ui:hover {
  border-color: var(--theme-primary);
  color: #fff !important;
}

/* 2. Edit (Warna Warning - Kuning) */
.btn-group .btn-ui.hover-warning:hover {
  background-color: var(--theme-bg-surface) !important;
  border-color: var(--theme-warning) !important;
  color: var(--theme-warning) !important;
}

/* 3. Hapus (Warna Danger - Merah) */
.btn-group .btn-ui.hover-danger:hover {
  background-color: var(--theme-bg-surface) !important;
  border-color: var(--theme-danger) !important;
  color: var(--theme-danger) !important;
}

.btn-group .btn-ui.hover-info:hover {
  background-color: var(--theme-bg-surface) !important;
  border-color: var(--theme-info) !important;
  color: var(--theme-info) !important;
}
.btn-group .btn-ui.hover-success:hover {
  background-color: var(--theme-bg-surface) !important;
  border-color: var(--theme-success) !important;
  color: var(--theme-success) !important;
}

/* ==========================================================================
   7. RESPONSIVE STATES
   ========================================================================== */
/* Mini Sidebar (Desktop Toggle) */
body.mini-sidebar #sidebar {
  min-width: var(--dim-sidebar-min);
  max-width: var(--dim-sidebar-min);
}
body.mini-sidebar .brand-text,
body.mini-sidebar .sidebar-link span,
body.mini-sidebar .menu-header,
body.mini-sidebar .sidebar-link::after,
body.mini-sidebar .collapse-inner {
  display: none !important;
}
body.mini-sidebar .sidebar-brand img {
  max-height: 35px;
}
body.mini-sidebar .sidebar-link {
  justify-content: center;
  padding: 12px 0;
}
body.mini-sidebar .sidebar-link i {
  margin-right: 0;
  font-size: 1.2rem;
}
body.mini-sidebar .sidebar-menu {
  padding: 10px 5px 0px 5px;
}

/* Mobile View */
@media (max-width: 768px) {
  #sidebar {
    position: fixed;
    margin-left: calc(var(--dim-sidebar-w) * -1); /* Menggunakan variabel */
    background: var(--theme-bg-surface) !important; /* Solid bg untuk mobile */
    height: 100vh;
  }
  .sidebar-menu {
    border: none;
    background: transparent !important;
    margin-top: 0;
    box-shadow: none;
  }
  #sidebar.show {
    margin-left: 0;
  }
  #content {
    padding: 0 15px;
  }
}
/* ==========================================================================
   8. ADDITIONAL CUSTOM UI (EXCEL & PDF)
   ========================================================================== */

/* Style Khusus Tombol Excel (Hijau) */
.btn-ui.outline.excel {
  color: #198754; /* Bootstrap Success Green */
  border-color: #198754;
}
.btn-ui.outline.excel:hover {
  background-color: #198754;
  color: #fff;
  box-shadow: 0 4px 10px rgba(25, 135, 84, 0.2);
}

/* Style Khusus Tombol PDF (Merah) */
.btn-ui.outline.pdf {
  color: #dc3545; /* Bootstrap Danger Red */
  border-color: #dc3545;
}
.btn-ui.outline.pdf:hover {
  background-color: #dc3545;
  color: #fff;
  box-shadow: 0 4px 10px rgba(220, 53, 69, 0.2);
}

/* Fix Input Search agar tidak ada outline default browser */
.input-group-ui input:focus {
  outline: none;
}
/* --- SESUDAH (Perbaikan) --- */
.input-group-ui.auto-height {
  align-items: stretch !important; /* 1. UBAH INI: Agar background icon memanjang full ke bawah */
}

/* 2. TAMBAHKAN INI DI BAWAHNYA: */
.input-group-ui.auto-height .input-icon {
  align-items: flex-start;
  padding-top: 12px;
}

/* Style khusus textarea-nya */
.input-group-ui textarea.form-control {
  resize: vertical !important; /* Izinkan user menarik ke bawah */
  line-height: 1.1; /* Jarak antar baris teks lebih lega */
}

/* ==========================================================================
   10. USER DROPDOWN STYLING
   ========================================================================== */

/* Hilangkan panah default Bootstrap (opsional, biar lebih bersih) */
.dropdown-toggle-custom::after {
  display: none;
}

/* Animasi Muncul (Slide Up) */
@keyframes slideUpFade {
  from {
    opacity: 0;
    transform: translateY(10px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.animate-slide-up {
  animation: slideUpFade 0.2s ease-out forwards;
}

/* Styling Item Menu */
.dropdown-menu .dropdown-item {
  padding: 0.6rem 1rem;
  font-size: 0.9rem;
  font-weight: 500;
  transition: all 0.2s;
  color: var(--theme-text-body);
}

/* Hover Effect: Primary Light */
.dropdown-menu .dropdown-item:hover {
  background-color: var(--theme-bg-subtle);
  color: var(--theme-primary);
  transform: translateX(3px); /* Efek geser dikit */
}
.dropdown-menu .dropdown-item:hover i {
  color: var(--theme-primary) !important;
}

/* Hover Effect: Khusus Logout (Merah) */
.dropdown-menu .dropdown-item.text-danger:hover {
  background-color: rgba(220, 53, 69, 0.1) !important; /* Merah transparan */
  color: var(--theme-danger) !important;
}
.dropdown-menu .dropdown-item.text-danger:hover i {
  color: var(--theme-danger) !important;
}

/* Background header kecil di dalam menu (User Info) */
.bg-light-subtle {
  background-color: var(--theme-bg-input); /* Mengikuti tema input */
}

/* Teks Header di dalam menu */
.text-heading {
  color: var(--theme-text-head);
}
/* Styling Checklist Password */
.x-small {
  font-size: 0.6rem;
  vertical-align: middle;
}

/* Kondisi VALID (Hijau & Icon Ceklis) */
.rule-valid {
  color: var(--theme-success) !important;
  font-weight: 600;
  transition: all 0.3s ease;
}
.rule-valid i::before {
  content: "\f00c"; /* FontAwesome Check Icon */
}

/* Kondisi INVALID (Merah/Abu default) */
.rule-invalid {
  color: var(--theme-text-muted) !important;
  transition: all 0.3s ease;
}
.input-group-ui:has(.is-invalid) + .invalid-feedback {
  display: block !important;
}
/* ==========================================================================
   FIX SELECT2 "SAGE THEME" (HILANGKAN BIRU & RAPIKAN DROPDOWN)
   ========================================================================== */

/* 1. CONTAINER UTAMA (Agar pas di dalam kotak input kita) */
.input-group .select2-container {
  flex: 1;
  /* width: auto !important;
  height: 100% !important;
  margin: 0 !important;
  padding: 0 !important; */
}

/* 2. AREA INPUT (Saat belum diklik) */
.input-group .select2-selection--single {
  font-size: 0.9rem !important;
}

/* 3. TEKS YANG DIPILIH */
.input-group .select2-selection__rendered {
  font-size: 0.9rem !important;
  color: var(--theme-text-head) !important;
}

/* 4. HAPUS PANAH BAWAAN (Ganti atau Hilangkan) */
.input-group .select2-selection__arrow {
  display: none !important;
  height: 0 !important;
}

/* 5. DROPDOWN LIST (Kotak yang muncul saat diklik) */
.select2-dropdown {
  box-shadow: var(--theme-box-shadow) !important;
  padding: 5px;
  border-bottom: 0;
}

/* 6. ITEM PILIHAN (Normal) */
.select2-results__option {
  font-size: 0.9rem;
  border-radius: 6px;
  margin-bottom: 2px;
  color: var(--theme-text-body);
}

/* 7. ITEM SAAT DI-HOVER (Sorot Mouse) -> UBAH JADI HIJAU SAGE */
/* =================================================================
   FIX SELECT2 FINAL (OVERRIDE BY INSPECT ELEMENT)
   ================================================================= */

/* 1. TIMPA Selector Panjang yang Anda temukan di Inspect Element */
/* Ini mengubah warna item yang SEDANG DIPILIH (Selected) */
.select2-container--bootstrap-5 .select2-dropdown {
  border-top: 0 !important;
  border: 1px solid var(--theme-border) !important;
  border-radius: 0 0 var(--dim-radius-ui) var(--dim-radius-ui) !important;
  background: var(--theme-bg-surface) !important;
}
.select2-container--bootstrap-5 .select2-selection {
  /* border: none !important; */
  font-size: 0.9rem !important;
  background-color: var(--theme-bg-surface);
  color: var(--theme-text-head);
  border-color: var(--theme-border);
  border-radius: var(--dim-radius-ui);
}
.select2-container--bootstrap-5
  .select2-dropdown
  .select2-results__options
  .select2-results__option.select2-results__option {
  font-size: 0.9rem !important;
}
.select2-container--bootstrap-5
  .select2-dropdown
  .select2-results__options
  .select2-results__option.select2-results__option--selected,
.select2-container--bootstrap-5
  .select2-dropdown
  .select2-results__options
  .select2-results__option.select2-results__option--highlighted,
.select2-container--bootstrap-5
  .select2-dropdown
  .select2-results__options
  .select2-results__option[aria-selected="true"]:not(
    .select2-results__option--highlighted
  ) {
  background-color: var(--theme-primary-hover) !important;
  color: #fff !important;
  font-size: 0.9rem !important;
}

/* 2. TIMPA warna saat di-HOVER (Highlighted) */
/* Selector ini juga harus panjang biar menang lawan bawaan library */

.select2-container--bootstrap-5
  .select2-dropdown
  .select2-results__options
  .select2-results__option--highlighted.select2-results__option--selectable {
  background-color: var(--theme-primary) !important;
  color: #fff !important;
  font-size: 0.9rem !important;
}

/* 3. TIMPA Fokus Border (Opsional, biar makin yakin biru hilang) */
.select2-container--bootstrap-5.select2-container--focus .select2-selection,
.select2-container--bootstrap-5.select2-container--open .select2-selection {
  box-shadow: var(--theme-box-shadow);
  border-color: var(--theme-primary-subtle);
  font-size: 0.9rem !important;
}

/* 10. HILANGKAN SCROLLBAR TAPI BISA SCROLL */
.select2-results__options {
  max-height: 250px !important;
  padding-left: 0px !important;
  scrollbar-width: none; /* Firefox */
}
.select2-results__options::-webkit-scrollbar {
  display: none; /* Chrome */
}
/* Search input */
.select2-container--bootstrap-5 .select2-search__field {
  font-size: small !important;
  border: 1px solid var(--theme-border);
  box-shadow: none !important;
}

/* Fokus */
.select2-container--bootstrap-5 .select2-search__field:focus {
  border-color: var(--theme-primary) !important;
  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
  outline: 0 !important;
}

/* =================================================================
   MOBILE RESPONSIVE FIXES
   ================================================================= */
@media screen and (max-width: 768px) {
  /* 1. MENCEGAH AUTO-ZOOM DI IPHONE (Wajib 16px) */
  .input-group-ui .select2-selection--single,
  .select2-results__option,
  .select2-container--bootstrap-5 .select2-search__field {
    font-size: 16px !important;
  }

  /* 2. MEMPERBESAR AREA SENTUH (Biar enak dipencet jempol) */
  .select2-results__option {
    padding: 12px 15px !important; /* Lebih renggang */
    margin-bottom: 4px;
  }

  /* 3. MENYESUAIKAN TINGGI DROPDOWN */
  /* Agar tidak tertutup keyboard HP yang muncul */
  .select2-results__options {
    max-height: 200px !important;
  }

  /* 4. POSISI TOMBOL CLEAR (X) DI HP */
  /* Geser sedikit biar gak kepencet tidak sengaja */
  .select2-container--bootstrap-5 .select2-selection__clear {
    right: 5px !important;
    font-size: 18px !important; /* X lebih besar */
    padding: 10px; /* Area sentuh X lebih luas */
  }
}
/* =========================================
   BREADCRUMB SAGE THEME
   ========================================= */

/* 1. Container Breadcrumb */
.breadcrumb-sage {
  /* background-color: var(
    --theme-bg-subtle
  ); */
  padding: 0 !important;
  margin-bottom: 0 !important;
  /* border-radius: var(--dim-radius-ui); */
  font-size: 0.85rem;
  font-weight: 600;
  display: flex;
  align-items: center;
  /* border: 1px solid var(--theme-border); */
}

/* 2. Link Breadcrumb (Normal) */
.breadcrumb-sage .breadcrumb-item a {
  color: var(--theme-text-muted); /* Warna abu-abu */
  text-decoration: none;
  transition: all 0.2s ease;
}

/* 3. Link Breadcrumb (Hover) */
.breadcrumb-sage .breadcrumb-item a:hover {
  color: var(--theme-primary); /* Hijau saat di-hover */
}

/* 4. Separator (Garis Miring / Slash) */
.breadcrumb-sage .breadcrumb-item + .breadcrumb-item::before {
  color: var(--theme-text-muted);
  opacity: 0.5;
  content: "/";
  padding: 0 6px;
}

/* 5. Item Aktif (Halaman Sekarang) */
.breadcrumb-sage .breadcrumb-item.active {
  color: var(--theme-primary); /* Warna Hijau Sage */
  font-weight: 700;
}
/* --- CUSTOM NAV PILLS (MENU SAMPING) --- */
.nav-pills-custom .nav-link {
  color: var(--theme-text-muted);
  background: transparent;
  border-radius: var(--dim-radius-ui);
  padding: 12px 20px;
  font-weight: 600;
  font-size: 0.9rem;
  transition: all 0.2s ease;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 5px;
  border: 1px solid transparent;
}

.nav-pills-custom .nav-link i {
  width: 25px;
  text-align: center;
  margin-right: 10px;
  font-size: 1.1rem;
}

/* Hover State */
.nav-pills-custom .nav-link:hover {
  background-color: var(--theme-bg-subtle);
  color: var(--theme-primary);
}

/* Active State (Hijau Sage) */
.nav-pills-custom .nav-link.active {
  background-color: var(--theme-primary);
  color: #fff;
  box-shadow: 0 4px 10px rgba(75, 78, 33, 0.2);
  /* Shadow halus warna sage */
}

.nav-pills-custom .nav-link.active i {
  color: #fff;
}

/* Chevron arrow (hidden by default, shown on active) */
.nav-link .arrow-icon {
  opacity: 0;
  transform: translateX(-10px);
  transition: all 0.2s ease;
}

.nav-link.active .arrow-icon {
  opacity: 1;
  transform: translateX(0);
}
/* Section Divider */
.form-section-title {
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--theme-text-head);
  margin-bottom: 15px;
  padding-bottom: 10px;
  border-bottom: 1px dashed var(--theme-border);
  display: flex;
  align-items: center;
  gap: 10px;
}

.border-primary {
  border-color: var(--theme-primary) !important;
}
.border-success {
  border-color: var(--theme-success) !important;
}
.border-danger {
  border-color: var(--theme-danger) !important;
}
.border-warning {
  border-color: var(--theme-warning) !important;
}
.border-info {
  border-color: var(--theme-info) !important;
}
.border-neutral {
  border-color: var(--theme-neutral) !important;
}

.border-primary-subtle {
  border-color: rgba(var(--theme-primary-subtle), 0.2) !important;
}

.form-check-input {
  appearance: none;
  -webkit-appearance: none;
  width: 1.1rem;
  height: 1.1rem;
  border: 2px solid var(--theme-accent);
  border-radius: 0.25rem;
  position: relative;
}
.form-check-input:focus {
  box-shadow: var(--theme-accent) !important;
  border-color: var(--theme-accent) !important;
}

.form-check-input:checked {
  background-color: var(--theme-primary);
  border-color: var(--theme-primary);
}

.form-check-input:checked::after {
  color: #fff;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -55%);
  font-size: 0.75rem;
}
.btn-ui.hover-danger:hover {
  background-color: var(--theme-danger) !important;
  border-color: var(--theme-danger) !important;
  color: #fff !important;
}
.btn-ui.hover-success:hover {
  background-color: var(--theme-success) !important;
  border-color: var(--theme-success) !important;
  color: #fff !important;
}
.btn-ui.hover-warning:hover {
  background-color: var(--theme-warning) !important;
  border-color: var(--theme-warning) !important;
  color: #fff !important;
}
.btn-ui.hover-info:hover {
  background-color: var(--theme-info) !important;
  border-color: var(--theme-info) !important;
  color: #fff !important;
}
.btn-ui.hover-neutral:hover {
  background-color: var(--theme-neutral) !important;
  border-color: var(--theme-neutral) !important;
  color: #fff !important;
}

/* =================================================================
   BOOTSTRAP INPUT-GROUP OVERRIDE (SAGE THEME)
   ================================================================= */

/* 1. Ubah Background & Border Icon (.input-group-text) */
.input-group-text {
  background-color: var(
    --theme-primary-subtle
  ); /* Pakai warna hijau pudar tema Anda */
  border-color: var(--theme-border);
  color: var(--theme-primary);

  /* Pastikan border radius mengikuti tema */
  border-radius: var(--dim-radius-ui);

  /* Opsional: Hapus border kanan jika ingin icon terlihat menyatu dengan input */
  /* border-right: none; */
}

/* 2. Ubah Border Radius Input di dalam Group */
.input-group .form-control,
.input-group .form-select {
  color: var(--theme-text-head);
  border-color: var(--theme-border);
  border-radius: var(--dim-radius-ui);
  font-size: 0.9rem;
}

/* 3. LOGIKA SUDUT (PENTING!) 
   Agar sisi yang nempel tetap rata, dan sisi luar tetap melengkung.
   Kita override paksa (important) karena Bootstrap punya selector yang sangat spesifik.
*/

/* Elemen yang ada di KIRI (misal: Icon di kiri) */
.input-group > :not(:last-child) {
  border-top-right-radius: 0 !important;
  border-bottom-right-radius: 0 !important;
}

/* Elemen yang ada di KANAN (misal: Input di kanan, atau Button) */
.input-group > :not(:first-child) {
  border-top-left-radius: 0 !important;
  border-bottom-left-radius: 0 !important;

  /* Opsional: Geser ke kiri 1px agar border tidak tebal ganda (double border) */
  margin-left: -1px;
}

/* 4. Fix Focus State (Agar border focus tetap di atas) */
.input-group .form-control:focus,
.input-group .form-select:focus,
.input-group-text:focus {
  z-index: 3; /* Pastikan border yang sedang aktif/fokus muncul paling atas */
  box-shadow: var(--theme-box-shadow);
}
.input-group:has(textarea) .input-group-text {
  /* 1. Paksa isi icon (huruf/simbol) naik ke atas */
  align-items: flex-start !important;

  /* 2. Opsional: Tambahkan sedikit jarak agar sejajar dengan baris pertama teks */
  /* Sesuaikan angka ini dengan padding textarea Anda */
  padding-top: 0.75rem;
}

.hover-elevate:hover {
  transform: translateY(-5px);
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
}

.transition-all {
  transition: all 0.3s ease;
}
