/* ============================================================
   Oziq AI — Ubold ministry skin
   Real tokens extracted from coderthemes.com/ubold compiled CSS.
   Loaded AFTER styles.css to override the editorial defaults.
   ============================================================ */

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

/* ============================================================
   App shell — turn OFF the editorial `body { zoom: 1.5 }` so the
   grid math (sidebar width, 100vh, fixed-px breakpoints) works at
   actual screen pixels. Then add a real footer row to the grid so
   the footer never overlaps scrolling content.
   ============================================================ */
body { zoom: 1 !important; }
html, body {
  overflow: hidden !important;
  height: 100% !important;
}
.app {
  height: 100vh !important;
  overflow: hidden !important;
  grid-template-rows: var(--topbar-h) 1fr auto var(--statusbar-h) !important;
  grid-template-areas:
    "side top"
    "side main"
    "side foot"
    "side status" !important;
}
.main { overflow-y: auto; overflow-x: auto; }

/* Topbar — let the search shrink, hide the wider metric labels first */
.topbar { min-width: 0; overflow: hidden; }
.topbar .top-search { min-width: 80px; }
.topbar .top-section,
.topbar .top-metric,
.topbar .top-right,
.topbar .user-chip { flex-shrink: 0; }

/* Page-head — title row should wrap rather than clip when actions don't fit */
.page-head { flex-wrap: wrap; row-gap: 8px; }
.page-head > div:first-child { min-width: 0; }
.page-title { min-width: 0; word-break: break-word; }
.page-actions { flex-wrap: wrap; }

/* ============================================================
   Narrow-viewport responsive — this is a desktop dashboard, but
   if the user opens it on phone/tablet we collapse the sidebar
   into a top strip instead of leaving a 232 px column eating
   most of the screen.
   ============================================================ */
@media (max-width: 900px) {
  .app {
    grid-template-columns: 1fr !important;
    grid-template-rows: auto var(--topbar-h) 1fr auto var(--statusbar-h) !important;
    grid-template-areas:
      "side"
      "top"
      "main"
      "foot"
      "status" !important;
    height: auto !important;
    min-height: 100vh;
  }
  html, body { overflow: auto !important; }
  .sidebar { height: auto !important; flex-direction: row !important; overflow-x: auto; }
  .sidebar-nav { flex-direction: row; display: flex; padding: 6px 4px !important; gap: 4px; overflow-x: auto; }
  .nav-section { display: none; }
  .nav-item { padding: 6px 10px !important; border-left: 0 !important; border-bottom: 2px solid transparent; white-space: nowrap; }
  .nav-item.active { border-left: 0 !important; border-bottom: 2px solid var(--accent) !important; padding-left: 10px !important; }
  .nav-item .nav-num, .nav-item .nav-badge { display: none; }
  .sidebar-brand { padding: 8px 12px !important; }
  .sidebar-foot { display: none; }
  .topbar { padding: 0 8px !important; gap: 8px !important; }
  .top-metric, .top-divider, .top-tag { display: none !important; }
  .top-title { font-size: 12px !important; }
  .top-search { flex: 1; max-width: none; }
  .user-chip > div { display: none; }
  .kpi-strip { grid-template-columns: 1fr 1fr !important; gap: 12px !important; }
  .grid-2, .grid-2-1, .grid-1-2, .grid-3, .grid-4 { grid-template-columns: 1fr !important; }
}

:root {
  /* Page surfaces — Ubold default body bg */
  --bg:           #f5f6f8;
  --bg-elev:      #ffffff;
  --bg-sunken:    #eef2f7;
  --panel:        #ffffff;

  /* Text — Ubold body color */
  --ink:          #313a46;
  --ink-2:        #4c4c5c;
  --ink-3:        #6c757d;
  --ink-4:        #8a969c;
  --ink-5:        #a1a9b1;

  /* Borders — Ubold gray-200/300 */
  --line:         #eef2f7;
  --line-strong:  #e7e9eb;

  /* Brand + accents — real Ubold theme tokens */
  --accent:       #6658dd;   /* theme-primary */
  --accent-soft:  #e0ddf8;
  --accent-ink:   #4a3fb8;

  /* Semantic — real Ubold theme tokens */
  --jade:         #1abc9c;   /* theme-success */
  --jade-soft:    #d2f4ec;
  --amber:        #f7b84b;   /* theme-warning */
  --amber-soft:   #fdf0d4;
  --rose:         #f1556c;   /* theme-danger */
  --rose-soft:    #fbd5db;
  --plum:         #f672a7;   /* theme-pink */
  --plum-soft:    #fcdce8;

  /* Topic colors — match Ubold theme palette */
  --t-onion:     #6658dd;
  --t-beef:      #f1556c;
  --t-rice:      #f7b84b;
  --t-carrot:    #fd7e14;
  --t-potato:    #8a969c;
  --t-logistic:  #4a81d4;
  --t-warehouse: #6c757d;
  --t-breeding:  #1abc9c;
  --t-flour:     #f7b84b;
  --t-oil:       #0acf97;
  --t-poultry:   #fd7e14;
  --t-sugar:     #43bfe5;

  /* Ubold-style shadow */
  --radius: 6px;
  --radius-sm: 4px;
  --shadow-sm: 0 0 35px 0 rgba(154, 161, 171, 0.10);
  --shadow-md: 0 .25rem 1rem rgba(18, 38, 36, .1);

  /* Real Ubold font */
  --font-sans:  "Alan Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --font-mono:  ui-monospace, "SF Mono", Menlo, monospace;
  --font-serif: "Alan Sans", sans-serif;
}

/* Sidebar — dark navy, Ubold-style */
.sidebar {
  background: #23303c !important;
  border-right: 0 !important;
  color: #aab8c5;
}
.sidebar-brand {
  border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
  background: #1f2935;
}
.sidebar-brand::before { display: none; }
.brand-mark {
  background: #6658dd !important;
  border-color: #6658dd !important;
  color: #fff !important;
  font-weight: 700 !important;
  font-family: var(--font-sans) !important;
}
.brand-name { color: #fff !important; font-weight: 700 !important; }
.brand-sub  { color: #8a969c !important; }

.nav-section { color: #6c757d !important; }
.nav-item {
  color: #aab8c5 !important;
  border-left-color: transparent !important;
  padding-left: 20px !important;
}
.nav-item:hover {
  background: rgba(255, 255, 255, 0.04) !important;
  color: #fff !important;
}
.nav-item.active {
  color: #fff !important;
  background: rgba(255, 255, 255, 0.06) !important;
  border-left: 3px solid #6658dd !important;
  padding-left: 17px !important;
  font-weight: 700 !important;
}
.nav-item .nav-num { color: #6c757d !important; font-family: var(--font-sans) !important; }
.nav-item .nav-badge {
  background: #f1556c !important;
  color: #fff !important;
  font-family: var(--font-sans) !important;
  font-weight: 700;
}

.sidebar-foot {
  border-top: 1px solid rgba(255, 255, 255, 0.08) !important;
  color: #8a969c !important;
  background: #1f2935;
}

/* Topbar — white card with soft shadow */
.topbar {
  background: #fff !important;
  border-bottom: 1px solid var(--line) !important;
  box-shadow: 0 0 35px 0 rgba(154, 161, 171, 0.1);
}

/* Panels — Ubold cards */
.panel {
  border: 0 !important;
  border-radius: 6px !important;
  box-shadow: var(--shadow-sm);
  background: #fff;
}
.panel-head {
  border-bottom: 1px solid var(--line) !important;
  padding: 14px 18px !important;
}
.panel-title { font-weight: 700 !important; font-size: 14px !important; }
.panel-title .num {
  background: var(--accent-soft) !important;
  color: var(--accent) !important;
  border: 0 !important;
  font-weight: 700;
  font-family: var(--font-sans) !important;
  border-radius: 4px;
  padding: 2px 6px;
}

/* Buttons */
.btn {
  border-radius: 4px !important;
  font-weight: 600 !important;
  padding: 6px 14px !important;
  font-size: 12.5px !important;
  border: 1px solid var(--line-strong) !important;
  background: #fff !important;
  color: var(--ink) !important;
  font-family: var(--font-sans) !important;
}
.btn:hover { background: var(--bg-sunken) !important; }
.btn-primary {
  background: #6658dd !important;
  border-color: #6658dd !important;
  color: #fff !important;
}
.btn-primary:hover { background: #4a3fb8 !important; border-color: #4a3fb8 !important; }
.btn-sm { padding: 4px 10px !important; font-size: 11.5px !important; }
.btn-ghost { background: transparent !important; border: 0 !important; }
.btn-soft-secondary {
  background: var(--bg-sunken) !important;
  border-color: var(--line) !important;
  color: var(--ink-2) !important;
}
.btn-soft-secondary:hover { background: var(--line) !important; color: var(--ink) !important; }

/* Ubold typically shows 4 KPI tiles per row, but Trends/Integrations
   set their own column count inline — don't force-override with !important. */
.kpi-strip {
  grid-template-columns: repeat(4, 1fr);
  gap: 24px !important;              /* Bootstrap gutter, not 1px separators */
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  overflow: visible !important;
}

/* KPI tiles — exact Ubold pattern from their HTML
   .card > .card-body > .d-flex (justify-between, align-center)
   LEFT:  .avatar fs-60 → .avatar-title rounded-circle fs-24 bg-*-subtle text-*
   RIGHT: .text-end > h3.mb-2.fw-normal (the number) + p.mb-0.text-muted (label) */
.kpi, .kpi-tile {
  background: #fff !important;
  border: 0 !important;
  border-radius: 6px !important;
  box-shadow: var(--shadow-sm);
  padding: 20px !important;
  /* Vertical stack — icon, value, label all centered. No more
     icon-left/value-right with a giant empty gap between them. */
  display: flex !important;
  flex-direction: column !important;
  justify-content: center !important;
  align-items: center !important;
  text-align: center !important;
  gap: 8px !important;
}
.kpi-icon {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  flex-shrink: 0;
  margin-bottom: 4px;
}
.kpi-icon-primary   { background: #e0ddf8 !important; color: #6658dd !important; }
.kpi-icon-success   { background: #d2f4ec !important; color: #1abc9c !important; }
.kpi-icon-info      { background: #d9f2f9 !important; color: #43bfe5 !important; }
.kpi-icon-warning   { background: #fdf0d4 !important; color: #f7b84b !important; }
.kpi-icon-danger    { background: #fbd5db !important; color: #f1556c !important; }
.kpi-icon-secondary { background: #dde7f6 !important; color: #4a81d4 !important; }
.kpi-icon svg { width: 26px !important; height: 26px !important; stroke-width: 1.8 !important; }

.kpi-text {
  text-align: center !important;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100%;
}
.kpi-text .kpi-value {
  color: var(--ink) !important;
  font-weight: 500 !important;
  font-size: 28px !important;
  line-height: 1.1 !important;
  margin: 0 !important;
  font-family: var(--font-sans) !important;
  letter-spacing: -0.01em;
  white-space: nowrap;
}
.kpi-text .kpi-value .kpi-unit {
  font-size: 13px;
  color: var(--ink-3);
  margin-left: 2px;
  font-weight: 400;
}
.kpi-text .kpi-value-prose {
  color: var(--ink) !important;
  font-weight: 500 !important;
  font-size: 16px !important;
  line-height: 1.2 !important;
  margin: 0 !important;
  font-family: var(--font-sans) !important;
  white-space: normal;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  text-align: center;
}
.kpi-text .kpi-label {
  color: var(--ink-3) !important;           /* text-muted */
  font-weight: 400 !important;
  font-size: 13px !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  margin: 0 !important;
}
.kpi-text .kpi-hint { display: none !important; }   /* Ubold's KPI has no third line */
.kpi-text .kpi-delta {
  font-family: var(--font-sans) !important;
  font-weight: 600 !important;
  font-size: 11px !important;
  margin-top: 4px;
}

/* Tables */
.tbl th {
  background: #fafbfd !important;
  color: var(--ink-3) !important;
  font-size: 11px !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: 700 !important;
  border-bottom: 1px solid var(--line) !important;
}

/* Chips — Bootstrap-style badges */
.chip {
  border-radius: 4px !important;
  font-weight: 600 !important;
  padding: 3px 8px !important;
  font-size: 10.5px !important;
}
.chip-jade  { background: var(--jade-soft) !important; color: #0e7c66 !important; border: 0 !important; }
.chip-rose  { background: var(--rose-soft) !important; color: #b03a4d !important; border: 0 !important; }
.chip-amber { background: var(--amber-soft) !important; color: #b87f00 !important; border: 0 !important; }
.chip-accent{ background: var(--accent-soft) !important; color: var(--accent) !important; border: 0 !important; }

/* Page title */
.page-title {
  font-family: var(--font-sans) !important;
  font-weight: 700 !important;
  letter-spacing: -0.01em;
}
.page-title .ru { font-weight: 400 !important; color: var(--ink-3) !important; }

/* Status bar at bottom */
.statusbar {
  background: #23303c !important;
  color: #aab8c5 !important;
  border-top: 0 !important;
}
.status-cell { color: #aab8c5 !important; }
.status-cell .k { color: #8a969c !important; }
.status-cell .v { color: #fff !important; font-family: var(--font-sans) !important; }

/* ============================================================
   Topbar internals
   ============================================================ */
.top-section { color: var(--ink) !important; }
.top-title   { color: var(--ink) !important; font-weight: 700 !important; font-size: 14px !important; }
.top-tag {
  background: var(--accent-soft) !important;
  color: var(--accent) !important;
  font-weight: 700 !important;
  border-radius: 4px !important;
  padding: 2px 8px !important;
  font-size: 10px !important;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}
.top-divider { background: var(--line) !important; }
.top-metric-k {
  color: var(--ink-3) !important;
  font-weight: 600 !important;
  font-size: 10px !important;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.top-metric-v { color: var(--ink) !important; font-weight: 700 !important; font-family: var(--font-sans) !important; }
.top-search {
  background: var(--bg-sunken) !important;
  border-radius: 4px !important;
  border: 1px solid transparent !important;
}
.top-search:focus-within { border-color: var(--accent) !important; box-shadow: 0 0 0 2px rgba(102, 88, 221, 0.15); }
.top-search input {
  background: transparent !important;
  border: 0 !important;
  color: var(--ink) !important;
  font-family: var(--font-sans) !important;
  font-size: 12.5px !important;
}
.kbd {
  background: var(--panel) !important;
  border: 1px solid var(--line-strong) !important;
  color: var(--ink-3) !important;
  border-radius: 3px !important;
  font-family: var(--font-mono) !important;
  font-size: 10px !important;
  padding: 1px 5px !important;
}

.icon-btn {
  background: transparent !important;
  border: 0 !important;
  color: var(--ink-3) !important;
  border-radius: 4px !important;
  padding: 6px !important;
}
.icon-btn:hover { background: var(--bg-sunken) !important; color: var(--accent) !important; }

.user-chip {
  background: transparent !important;
  border-left: 1px solid var(--line) !important;
  padding-left: 12px !important;
}
.user-avatar {
  background: var(--accent) !important;
  color: #fff !important;
  font-weight: 700 !important;
  border-radius: 50% !important;
  font-family: var(--font-sans) !important;
}
.user-name { color: var(--ink) !important; font-weight: 600 !important; font-size: 12.5px !important; }
.user-role { color: var(--ink-3) !important; font-size: 10.5px !important; }

.lang-switch {
  background: var(--bg-sunken) !important;
  border-radius: 4px !important;
  padding: 2px !important;
  border: 1px solid var(--line) !important;
}
.lang-switch button {
  background: transparent !important;
  border: 0 !important;
  color: var(--ink-3) !important;
  font-weight: 600 !important;
  font-size: 11px !important;
  font-family: var(--font-sans) !important;
  padding: 4px 8px !important;
  border-radius: 3px !important;
}
.lang-switch button.on {
  background: #fff !important;
  color: var(--accent) !important;
  box-shadow: 0 1px 2px rgba(57, 62, 80, .1);
}

.dropdown {
  background: #fff !important;
  border: 1px solid var(--line) !important;
  border-radius: 6px !important;
  box-shadow: 0 4px 16px rgba(18, 38, 36, 0.12) !important;
}

/* ============================================================
   Row actions — three-dot dropdown (Ubold pattern)
   ============================================================ */
.row-actions { position: relative; display: inline-block; }
.btn-dots {
  padding: 4px 6px !important;
  color: var(--ink-3) !important;
  border-radius: 4px !important;
}
.btn-dots:hover { color: var(--ink) !important; background: var(--bg-sunken) !important; }
.dropdown-menu {
  position: absolute;
  right: 0;
  top: 100%;
  margin-top: 4px;
  min-width: 168px;
  background: #fff;
  border: 1px solid var(--line);
  border-radius: 6px;
  box-shadow: 0 4px 16px rgba(18, 38, 36, 0.12);
  z-index: 100;
  padding: 6px 0;
  display: flex;
  flex-direction: column;
}
.dropdown-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 14px;
  font-size: 12px;
  color: var(--ink-2);
  background: transparent;
  border: 0;
  cursor: pointer;
  text-align: left;
  font-family: var(--font-sans);
  width: 100%;
}
.dropdown-item:hover {
  background: var(--bg-sunken);
  color: var(--ink);
}
.dropdown-item svg {
  color: var(--ink-4);
  flex-shrink: 0;
}

/* ============================================================
   Page head — Ubold "page-title-head" pattern:
   small bold title on the LEFT (flex-grow-1), breadcrumb on the RIGHT
   ============================================================ */
.page-head {
  padding: 18px 0 20px !important;
  display: flex !important;
  align-items: center !important;
  gap: 16px;
  border-bottom: 0 !important;
  margin-bottom: 0 !important;
}
.page-head > div:first-child {
  display: flex !important;
  flex-direction: row-reverse !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 16px !important;
  flex: 1;
}
.page-title {
  font-family: var(--font-sans) !important;
  font-size: 18px !important;                /* Ubold page-main-title = theme-font-size-xl */
  font-weight: 700 !important;
  letter-spacing: -0.01em;
  margin: 0 !important;
  line-height: 1.2 !important;
  color: var(--ink) !important;
  flex-shrink: 0;
  flex-grow: 1;
}
.page-title .ru {
  font-family: var(--font-sans) !important;
  font-weight: 400 !important;
  color: var(--ink-3) !important;
  font-size: 12px !important;
  margin-left: 8px !important;
  display: inline !important;
}
.page-crumbs,
ol.breadcrumb {
  font-size: 12px !important;
  font-weight: 400 !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
  color: var(--ink-3) !important;
  font-family: var(--font-sans) !important;
  display: flex !important;
  align-items: center !important;
  gap: 0;
  margin: 0 !important;
  list-style: none !important;
  padding: 0 !important;
  flex-wrap: wrap;
}
.page-crumbs span,
.breadcrumb-item {
  display: inline-flex !important;
  align-items: center !important;
}
.page-crumbs span + span::before,
.breadcrumb-item + .breadcrumb-item::before {
  content: '';
  display: inline-block;
  width: 14px;
  height: 14px;
  margin: 0 4px;
  background: no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 6l6 6l-6 6'/%3E%3C/svg%3E");
}
.page-crumbs span:last-child,
.breadcrumb-item.active {
  color: var(--ink) !important;
  font-weight: 500 !important;
}

/* Container-fluid padding — Ubold uses 1.5rem */
.page {
  padding: 1.5rem !important;
  max-width: none !important;
}
.page-actions { gap: 8px !important; }

/* ============================================================
   Filter rail (Murojaatlar)
   ============================================================ */
.filter-rail {
  background: #fff !important;
  border: 0 !important;
  border-radius: 6px !important;
  padding: 18px !important;
  box-shadow: var(--shadow-sm);
}
.filter-group { border-bottom: 1px solid var(--line) !important; padding-bottom: 14px !important; margin-bottom: 14px !important; }
.filter-group:last-child { border-bottom: 0 !important; }
.filter-label {
  font-size: 10px !important;
  font-weight: 700 !important;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--ink-3) !important;
  margin-bottom: 8px !important;
  font-family: var(--font-sans) !important;
}
.filter-opt { font-size: 12px !important; color: var(--ink-2) !important; padding: 4px 0 !important; }
.filter-opt:hover { color: var(--ink) !important; }
.filter-opt .count {
  background: var(--bg-sunken) !important;
  color: var(--ink-3) !important;
  font-family: var(--font-sans) !important;
  font-weight: 600 !important;
  padding: 1px 6px !important;
  border-radius: 3px !important;
  font-size: 10px !important;
}

/* ============================================================
   Form inputs
   ============================================================ */
.input,
input.input,
select.select,
.select {
  background: #fff !important;
  border: 1px solid var(--line-strong) !important;
  border-radius: 4px !important;
  padding: 7px 10px !important;
  font-size: 12.5px !important;
  font-family: var(--font-sans) !important;
  color: var(--ink) !important;
  width: 100%;
  box-sizing: border-box;
}
.input:focus, .select:focus, input.input:focus, select.select:focus {
  outline: 0 !important;
  border-color: var(--accent) !important;
  box-shadow: 0 0 0 2px rgba(102, 88, 221, 0.15) !important;
}
input[type="checkbox"] { accent-color: var(--accent) !important; }
input[type="range"]   { accent-color: var(--accent) !important; }

/* ============================================================
   Tables
   ============================================================ */
.tbl { border-collapse: separate !important; border-spacing: 0; width: 100%; }
.tbl thead th { padding: 10px 14px !important; }
.tbl tbody td { padding: 10px 14px !important; border-bottom: 1px solid var(--line) !important; color: var(--ink-2); font-size: 12px; }
.tbl tbody tr:hover { background: var(--bg-sunken) !important; }
.tbl tbody tr.expanded { background: var(--bg-sunken) !important; }
.tbl tbody tr:last-child td { border-bottom: 0 !important; }
.tbl .checkbox { width: 32px; }

/* ============================================================
   Segmented controls
   ============================================================ */
.seg {
  display: inline-flex;
  background: var(--bg-sunken) !important;
  border-radius: 4px !important;
  padding: 2px !important;
  border: 1px solid var(--line) !important;
}
.seg button {
  background: transparent !important;
  border: 0 !important;
  color: var(--ink-3) !important;
  font-weight: 600 !important;
  font-size: 11px !important;
  font-family: var(--font-sans) !important;
  padding: 5px 10px !important;
  border-radius: 3px !important;
}
.seg button.on {
  background: #fff !important;
  color: var(--accent) !important;
  box-shadow: 0 1px 2px rgba(57, 62, 80, .1);
}

/* ============================================================
   Feed (activity feed on Overview)
   ============================================================ */
.feed-item {
  display: grid;
  grid-template-columns: 4px 1fr auto;
  gap: 10px;
  padding: 12px 18px !important;
  border-bottom: 1px solid var(--line) !important;
  align-items: start;
}
.feed-item:last-child { border-bottom: 0 !important; }
.feed-item:hover { background: var(--bg-sunken) !important; }
.feed-item .topic-mark { width: 4px !important; height: 32px !important; border-radius: 2px !important; }
.feed-item .msg { font-size: 12px !important; color: var(--ink) !important; }
.feed-item .meta { font-size: 10px !important; color: var(--ink-4) !important; font-family: var(--font-sans) !important; margin-top: 3px !important; }
.feed-item .meta .mono { color: var(--ink-3) !important; }
.feed-item .time { font-size: 10px !important; color: var(--ink-4) !important; font-family: var(--font-sans) !important; white-space: nowrap; }

/* ============================================================
   Chips — extra variants
   ============================================================ */
.chip          { background: var(--bg-sunken) !important; color: var(--ink-2) !important; border: 0 !important; }
.chip-plum     { background: var(--plum-soft) !important; color: #b53b76 !important; border: 0 !important; }
.chip-ink      { background: #313a46 !important; color: #fff !important; border: 0 !important; }
.chip-dot      { display: inline-block !important; }

/* ============================================================
   Sentiment bar (mini horizontal)
   ============================================================ */
.sent-bar { display: flex; height: 5px; border-radius: 1px; overflow: hidden; background: var(--bg-sunken); }
.sent-pos { background: var(--jade) !important; }
.sent-neu { background: var(--ink-4) !important; }
.sent-neg { background: var(--rose) !important; }

/* ============================================================
   KPI delta + sparkline (overview KPI tiles)
   ============================================================ */
.kpi-delta { font-family: var(--font-sans) !important; font-weight: 700 !important; font-size: 11px !important; }
.delta-up   { color: var(--jade) !important; }
.delta-down { color: var(--rose) !important; }
.kpi-spark  { margin-top: 6px; }

/* ============================================================
   Card / Panel header — dashed border-bottom like Ubold
   ============================================================ */
.panel-head {
  border-bottom-style: dashed !important;
  padding: 14px 18px !important;
}

/* ============================================================
   Misc panel internals
   ============================================================ */
.panel-body { padding: 18px !important; }
.panel-sub  { color: var(--ink-3) !important; font-weight: 400 !important; font-family: var(--font-sans) !important; font-size: 11px !important; }
.panel-actions { gap: 6px !important; flex-wrap: wrap; justify-content: flex-end; }
.stack { display: flex; flex-direction: column; gap: 16px; }

/* Grid children must be allowed to shrink below their content width,
   otherwise wide table headers / control rows push their column out
   and crop the sibling panel. */
.grid-2 > *, .grid-2-1 > *, .grid-1-2 > *, .grid-3 > *, .grid-4 > * {
  min-width: 0;
}
.panel { min-width: 0; }

/* Panel head: title left, actions right, both can shrink + wrap */
.panel-head {
  flex-wrap: wrap;
  gap: 8px 12px;
  row-gap: 8px;
}
.panel-title {
  flex: 1 1 auto;
  min-width: 0;
  flex-wrap: wrap;
}
.panel-title > span:not(.num):not(.panel-sub) {
  min-width: 0;
}
.panel-title .panel-sub {
  flex-shrink: 1;
  min-width: 0;
}

/* ============================================================
   Bootstrap-like utility classes (Ubold uses these extensively)
   ============================================================ */
.text-muted   { color: var(--ink-3) !important; }
.text-end     { text-align: right !important; }
.text-primary { color: var(--accent) !important; }
.text-success { color: var(--jade) !important; }
.text-info    { color: #43bfe5 !important; }
.text-warning { color: var(--amber) !important; }
.text-danger  { color: var(--rose) !important; }
.fw-normal    { font-weight: 400 !important; }
.fw-semibold  { font-weight: 600 !important; }
.fw-bold      { font-weight: 700 !important; }
.mb-0         { margin-bottom: 0 !important; }
.mb-1         { margin-bottom: 4px !important; }
.mb-2         { margin-bottom: 8px !important; }
.mb-3         { margin-bottom: 16px !important; }
.mt-0         { margin-top: 0 !important; }
.mt-3         { margin-top: 16px !important; }
.mt-4         { margin-top: 24px !important; }
.me-1         { margin-right: 4px !important; }
.me-2         { margin-right: 8px !important; }
.ms-1         { margin-left: 4px !important; }
.ms-2         { margin-left: 8px !important; }
.p-3          { padding: 16px !important; }
.p-0          { padding: 0 !important; }
.m-0          { margin: 0 !important; }
.gap-1        { gap: 4px !important; }
.gap-2        { gap: 8px !important; }
.gap-3        { gap: 16px !important; }
.d-flex       { display: flex !important; }
.align-items-center { align-items: center !important; }
.align-items-start   { align-items: flex-start !important; }
.align-items-baseline{ align-items: baseline !important; }
.justify-content-between { justify-content: space-between !important; }
.flex-wrap          { flex-wrap: wrap !important; }
.flex-column        { flex-direction: column !important; }
.d-inline-block     { display: inline-block !important; }
.d-inline-flex      { display: inline-flex !important; }
.justify-content-center { justify-content: center !important; }
.justify-content-end    { justify-content: flex-end !important; }
.justify-content-start  { justify-content: flex-start !important; }
.align-items-end    { align-items: flex-end !important; }
.text-center        { text-align: center !important; }
.text-start         { text-align: left !important; }
.text-nowrap        { white-space: nowrap !important; }
.cursor-pointer     { cursor: pointer !important; }
.border-0           { border: 0 !important; }
.flex-grow-1  { flex-grow: 1 !important; }
.flex-shrink-0 { flex-shrink: 0 !important; }
.rounded-circle { border-radius: 50% !important; }
.fs-xs        { font-size: 11px !important; }
.fs-sm        { font-size: 12px !important; }
.fs-base      { font-size: 13px !important; }
.fs-lg        { font-size: 16px !important; }
.fs-24        { font-size: 24px !important; }
.fs-60        { font-size: 60px !important; }
.fst-italic   { font-style: italic !important; }

/* ============================================================
   Page footer — pinned to viewport bottom (position: fixed) so
   it's always visible even though `body { zoom: 1.5 }` in
   styles.css makes the grid extend below the viewport.
   The dark Ubold statusbar covers the very bottom strip; the
   footer sits just above it.
   ============================================================ */
.page-footer {
  grid-area: foot;
  padding: 12px 1.5rem;
  border-top: 1px solid var(--line);
  font-size: 12px;
  color: var(--ink-3);
  font-family: var(--font-sans);
  display: flex;
  justify-content: space-between;
  align-items: center;
  background: var(--bg-elev);
}
.page-footer .copy { font-weight: 500; color: var(--ink-2); }
.page-footer .meta { font-size: 11px; }

/* ============================================================
   Countup animation wrapper
   ============================================================ */
.countup-wrap {
  display: inline-block;
  font-variant-numeric: tabular-nums;
}

/* ============================================================
   Link underlines — Ubold "View Reports" header links
   ============================================================ */
.link-underline {
  color: var(--accent-ink) !important;
  text-decoration: underline !important;
  text-underline-offset: 3px !important;
  font-weight: 600 !important;
  font-size: 12px !important;
  font-family: var(--font-sans) !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  cursor: pointer;
}
.link-underline:hover { color: var(--accent) !important; }

/* ============================================================
   Card footer — Ubold uses border-dashed border-top
   ============================================================ */
.card-footer {
  border-top: 1px dashed var(--line) !important;
  padding: 10px 14px !important;
}

/* ============================================================
   Tables — Ubold table-centered table-custom table-nowrap
   ============================================================ */
.tbl thead th {
  vertical-align: middle !important;
  text-align: left;
}
.tbl tbody td {
  vertical-align: middle !important;
}
.tbl.table-hover tbody tr:hover { background: var(--bg-sunken) !important; }
.tbl.table-sm tbody td { padding: 8px 10px !important; font-size: 12px; }
.table-centered { text-align: center !important; vertical-align: middle !important; }
.table-nowrap th, .table-nowrap td { white-space: nowrap !important; }

/* Hidden thead for Ubold cell-label pattern */
.tbl thead.d-none { display: none !important; }

/* ============================================================
   Pagination — Ubold pagination-boxed pagination-sm
   ============================================================ */
.pagination {
  display: flex;
  gap: 4px;
  align-items: center;
  list-style: none;
  margin: 0;
  padding: 0;
}
.pagination-boxed .page-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  height: 32px;
  padding: 0 8px;
  border-radius: 4px;
  border: 1px solid var(--line-strong);
  background: #fff;
  color: var(--ink);
  font-size: 12px;
  font-weight: 500;
  font-family: var(--font-sans);
  cursor: pointer;
}
.pagination-boxed .page-link:hover {
  background: var(--bg-sunken);
}
.pagination-boxed .page-item.active .page-link {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: #fff !important;
}
.pagination-boxed .page-item.disabled .page-link {
  opacity: 0.45;
  cursor: not-allowed;
  background: var(--bg-sunken) !important;
}
.pagination-sm .page-link {
  min-width: 28px;
  height: 28px;
  font-size: 11px;
}

.row-expand {
  background: var(--bg-sunken) !important;
  padding: 18px !important;
  border-top: 1px solid var(--line) !important;
  border-bottom: 1px solid var(--line) !important;
}

/* ============================================================
   Chart tooltip — Ubold dark popover
   ============================================================ */
.chart-tip {
  background: #313a46 !important;
  color: #fff !important;
  border-radius: 4px !important;
  box-shadow: 0 4px 12px rgba(18, 38, 36, 0.25) !important;
  font-family: var(--font-sans) !important;
  font-size: 11px !important;
  padding: 8px 10px !important;
}

/* ============================================================
   Toggle switch
   ============================================================ */
.toggle {
  width: 28px; height: 16px;
  border-radius: 16px;
  background: var(--line-strong) !important;
  display: inline-block;
  position: relative;
  vertical-align: middle;
}
.toggle::after {
  content: '';
  position: absolute;
  width: 12px; height: 12px;
  border-radius: 50%;
  background: #fff;
  top: 2px; left: 2px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.2);
  transition: left 150ms;
}
.toggle.on { background: var(--accent) !important; }
.toggle.on::after { left: 14px; }

/* ============================================================
   Tabs (some screens have them)
   ============================================================ */
.tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--line);
}
.tab {
  padding: 10px 16px;
  font-weight: 600;
  font-size: 12.5px;
  color: var(--ink-3) !important;
  border-bottom: 2px solid transparent !important;
  cursor: pointer;
  font-family: var(--font-sans) !important;
}
.tab.on, .tab:hover {
  color: var(--accent) !important;
  border-bottom-color: var(--accent) !important;
}

/* ============================================================
   Interactive cards (Mavzular grid, etc.)
   ============================================================ */
.panel.interactive { cursor: pointer; transition: box-shadow 150ms, transform 150ms; }
.panel.interactive:hover {
  box-shadow: 0 4px 16px rgba(18, 38, 36, .12) !important;
  transform: translateY(-1px);
}

/* ============================================================
   Word cloud (kept around in case)
   ============================================================ */
.cloud span { color: var(--ink-2) !important; font-family: var(--font-sans) !important; }

/* ============================================================
   Live dot pulse
   ============================================================ */
.dot      { width: 6px; height: 6px; border-radius: 50%; }
.dot-live { background: var(--jade) !important; box-shadow: 0 0 0 3px rgba(26, 188, 156, 0.2); }

/* ============================================================
   Ubold soft buttons
   ============================================================ */
.btn-soft-secondary {
  background: #f1f3fa !important;
  border-color: #f1f3fa !important;
  color: #4b4b5a !important;
}
.btn-soft-secondary:hover {
  background: #e3e6f0 !important;
  border-color: #e3e6f0 !important;
}
.btn-soft-primary {
  background: #e0ddf8 !important;
  border-color: #e0ddf8 !important;
  color: #6658dd !important;
}
.btn-soft-primary:hover {
  background: #d0cbf3 !important;
  border-color: #d0cbf3 !important;
}
